diff --git a/src/interpreter/vm.cpp b/src/interpreter/vm.cpp index a335131c..1c0b452d 100644 --- a/src/interpreter/vm.cpp +++ b/src/interpreter/vm.cpp @@ -553,10 +553,11 @@ i64 VM::py_hash(PyVar obj) { } PyVar VM::__py_exec_internal(const CodeObject_& code, PyVar globals, PyVar locals) { - Frame* frame = &vm->callstack.top(); + Frame* frame = nullptr; + if(!callstack.empty()) frame = &callstack.top(); // fast path - if(globals == vm->None && locals == vm->None) { + if(frame && globals == vm->None && locals == vm->None) { return vm->_exec(code.get(), frame->_module, frame->_callable, frame->_locals); } @@ -568,7 +569,7 @@ PyVar VM::__py_exec_internal(const CodeObject_& code, PyVar globals, PyVar local NameDict_ locals_closure = nullptr; Dict* locals_dict = nullptr; - if(globals == vm->None) { + if(frame && globals == vm->None) { globals_obj = frame->_module; } else { if(is_type(globals, VM::tp_mappingproxy)) {