Explorar el Código

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

fix py_exec and py_eval.
BLUELOVETH hace 1 año
padre
commit
a9d296dedc
Se han modificado 1 ficheros con 4 adiciones y 3 borrados
  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){
 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
     // 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);
         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;
     Dict* locals_dict = nullptr;
 
 
     if(globals == vm->None){
     if(globals == vm->None){
-        globals_obj = frame->_module;
+        globals_obj = frame ? frame->_module : _main;
     }else{
     }else{
         if(is_type(globals, VM::tp_mappingproxy)){
         if(is_type(globals, VM::tp_mappingproxy)){
             globals_obj = PK_OBJ_GET(MappingProxy, globals).obj;
             globals_obj = PK_OBJ_GET(MappingProxy, globals).obj;