fix py_exec

This commit is contained in:
blueloveTH 2024-06-07 21:14:33 +08:00
parent 02d3512681
commit 4268cff072

View File

@ -553,10 +553,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);
} }
@ -568,7 +569,7 @@ PyVar VM::__py_exec_internal(const CodeObject_& code, PyVar globals, PyVar local
NameDict_ locals_closure = nullptr; NameDict_ locals_closure = nullptr;
Dict* locals_dict = nullptr; Dict* locals_dict = nullptr;
if(globals == vm->None) { if(frame && globals == vm->None) {
globals_obj = frame->_module; globals_obj = frame->_module;
} else { } else {
if(is_type(globals, VM::tp_mappingproxy)) { if(is_type(globals, VM::tp_mappingproxy)) {