fix a bug

This commit is contained in:
blueloveTH 2023-12-06 13:20:18 +08:00
parent 62024cb132
commit 814bd3e640

View File

@ -565,14 +565,16 @@ PyObject* VM::new_module(Str name, Str package) {
PyObject* obj = heap._new<DummyModule>(tp_module); PyObject* obj = heap._new<DummyModule>(tp_module);
obj->attr().set(__name__, VAR(name)); obj->attr().set(__name__, VAR(name));
obj->attr().set(__package__, VAR(package)); obj->attr().set(__package__, VAR(package));
// convert to fullname
if(!package.empty()) name = package + "." + name;
obj->attr().set(__path__, VAR(name));
// we do not allow override in order to avoid memory leak // we do not allow override in order to avoid memory leak
// it is because Module objects are not garbage collected // it is because Module objects are not garbage collected
if(_modules.contains(name)){ if(_modules.contains(name)){
throw std::runtime_error(fmt("module ", name.escape(), " already exists").str()); throw std::runtime_error(fmt("module ", name.escape(), " already exists").str());
} }
// convert to fullname and set it into _modules // set it into _modules
if(!package.empty()) name = package + "." + name;
obj->attr().set(__path__, VAR(name));
_modules.set(name, obj); _modules.set(name, obj);
return obj; return obj;
} }