浏览代码

Merge pull request #278 from 16bit-ykiko/fix_exec

fix py_exec and py_eval.
BLUELOVETH 1 年之前
父节点
当前提交
a9d296dedc
共有 1 个文件被更改,包括 4 次插入3 次删除
  1. 4 3
      src/vm.cpp

+ 4 - 3
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;