diff --git a/src/vm.cpp b/src/vm.cpp index 91a03fd3..3e70dc67 100644 --- a/src/vm.cpp +++ b/src/vm.cpp @@ -518,10 +518,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); } @@ -534,7 +535,7 @@ PyVar VM::__py_exec_internal(const CodeObject_& code, PyVar globals, PyVar local Dict* locals_dict = nullptr; if(globals == vm->None){ - globals_obj = frame->_module; + globals_obj = frame ? frame->_module : _main; }else{ if(is_type(globals, VM::tp_mappingproxy)){ globals_obj = PK_OBJ_GET(MappingProxy, globals).obj;