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

fix py_exec and py_eval.
This commit is contained in:
BLUELOVETH 2024-06-18 20:46:15 +08:00 committed by GitHub
commit a9d296dedc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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;