diff --git a/src/ceval.h b/src/ceval.h index 7267fde5..0382984c 100644 --- a/src/ceval.h +++ b/src/ceval.h @@ -282,7 +282,7 @@ PyVar VM::run_frame(Frame* frame){ const Str& source = it2->second; CodeObject_ code = compile(source, name, EXEC_MODE); PyVar _m = new_module(name); - _exec(code, _m, pkpy::make_shared()); + _exec(code, _m); frame->push(_m); _lazy_modules.erase(it2); } diff --git a/src/frame.h b/src/frame.h index 66dc78a5..601b80ea 100644 --- a/src/frame.h +++ b/src/frame.h @@ -16,7 +16,7 @@ struct Frame { const i64 id; std::stack>> s_try_block; - inline pkpy::NameDict& f_locals() noexcept { return *_locals; } + inline pkpy::NameDict& f_locals() noexcept { return _locals != nullptr ? *_locals : _module->attr(); } inline pkpy::NameDict& f_globals() noexcept { return _module->attr(); } inline PyVar* f_closure_try_get(const Str& name) noexcept { @@ -25,7 +25,7 @@ struct Frame { } Frame(const CodeObject_ co, PyVar _module, - pkpy::shared_ptr _locals, pkpy::shared_ptr _closure=nullptr) + pkpy::shared_ptr _locals=nullptr, pkpy::shared_ptr _closure=nullptr) : co(co), _module(_module), _locals(_locals), _closure(_closure), id(kFrameGlobalId++) { } inline const Bytecode& next_bytecode() { diff --git a/src/pocketpy.h b/src/pocketpy.h index 23eb7582..e4713c6e 100644 --- a/src/pocketpy.h +++ b/src/pocketpy.h @@ -768,7 +768,7 @@ void add_module_random(VM* vm){ }); CodeObject_ code = vm->compile(kRandomCode, "random.py", EXEC_MODE); - vm->_exec(code, mod, pkpy::make_shared()); + vm->_exec(code, mod); } @@ -889,7 +889,7 @@ extern "C" { add_module_os(vm); CodeObject_ code = vm->compile(kBuiltinsCode, "", EXEC_MODE); - vm->_exec(code, vm->builtins, pkpy::make_shared()); + vm->_exec(code, vm->builtins); return vm; } diff --git a/src/vm.h b/src/vm.h index 62cfc67a..2349b322 100644 --- a/src/vm.h +++ b/src/vm.h @@ -216,7 +216,7 @@ public: if(_module == nullptr) _module = _main; try { CodeObject_ code = compile(source, filename, mode); - return _exec(code, _module, pkpy::make_shared()); + return _exec(code, _module); }catch (const pkpy::Exception& e){ *_stderr << e.summary() << '\n'; }