diff --git a/src/vm.cpp b/src/vm.cpp index 723d02f8..2e63f5ae 100644 --- a/src/vm.cpp +++ b/src/vm.cpp @@ -528,24 +528,24 @@ PyVar VM::__py_exec_internal(const CodeObject_& code, PyVar globals, PyVar local auto _lock = heap.gc_scope_lock(); // for safety - PyObject* globals_obj = nullptr; + PyVar globals_obj = nullptr; Dict* globals_dict = nullptr; NameDict_ locals_closure = nullptr; Dict* locals_dict = nullptr; - if(globals == vm->None) { + if(globals == vm->None){ globals_obj = frame ? frame->_module : _main; - } else { - if(is_type(globals, VM::tp_mappingproxy)) { + }else{ + if(is_type(globals, VM::tp_mappingproxy)){ globals_obj = PK_OBJ_GET(MappingProxy, globals).obj; - } else { + }else{ check_compatible_type(globals, VM::tp_dict); // make a temporary object and copy globals into it globals_obj = heap.gcnew(VM::tp_object); globals_obj->_enable_instance_dict(); globals_dict = &PK_OBJ_GET(Dict, globals); - globals_dict->apply([&](PyVar k, PyVar v) { + globals_dict->apply([&](PyVar k, PyVar v){ globals_obj->attr().set(CAST(Str&, k), v); }); } @@ -553,29 +553,29 @@ PyVar VM::__py_exec_internal(const CodeObject_& code, PyVar globals, PyVar local PyVar retval = nullptr; - if(locals == vm->None) { - retval = vm->_exec(code, globals_obj); // only globals - } else { + if(locals == vm->None){ + retval = vm->_exec(code, globals_obj); // only globals + }else{ check_compatible_type(locals, VM::tp_dict); locals_dict = &PK_OBJ_GET(Dict, locals); locals_closure = std::make_shared(); - locals_dict->apply([&](PyVar k, PyVar v) { + locals_dict->apply([&](PyVar k, PyVar v){ locals_closure->set(CAST(Str&, k), v); }); - PyObject* _callable = VAR(Function(__dynamic_func_decl, globals_obj, nullptr, locals_closure)); + PyVar _callable = VAR(Function(__dynamic_func_decl, globals_obj, nullptr, locals_closure)); retval = vm->_exec(code.get(), globals_obj, _callable, vm->s_data._sp); } - if(globals_dict) { + if(globals_dict){ globals_dict->clear(); - globals_obj->attr().apply([&](StrName k, PyVar v) { + globals_obj->attr().apply([&](StrName k, PyVar v){ globals_dict->set(VAR(k.sv()), v); }); } - if(locals_dict) { + if(locals_dict){ locals_dict->clear(); - locals_closure->apply([&](StrName k, PyVar v) { + locals_closure->apply([&](StrName k, PyVar v){ locals_dict->set(VAR(k.sv()), v); }); }