Jelajahi Sumber

fix `py_exec`

blueloveTH 1 tahun lalu
induk
melakukan
4268cff072
1 mengubah file dengan 4 tambahan dan 3 penghapusan
  1. 4 3
      src/interpreter/vm.cpp

+ 4 - 3
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)) {