diff --git a/init.lua b/init.lua index 2c11f58..6059ffa 100644 --- a/init.lua +++ b/init.lua @@ -101,14 +101,21 @@ modlib = setmetatable({ }, { __index = function(self, module_name) local files = modules[module_name] - local module + local environment if type(files) == "string" then - module = load_module(files) + environment = load_module(files) elseif files then - module = loadfile_exports(get_resource(self.modname, module_name, files[1] .. ".lua")) + environment = loadfile_exports(get_resource(self.modname, module_name, files[1] .. ".lua")) for index = 2, #files do - self.mod.include_env(get_resource(self.modname, module_name, files[index] .. ".lua"), module) + self.mod.include_env(get_resource(self.modname, module_name, files[index] .. ".lua"), environment) end + else + return + end + local module = {} + for key, value in pairs(environment) do + -- Shallow copy. Doesn't use `modlib.table.shallowcopy` as that is part of a module, too. + module[key] = value end self[module_name] = module return module diff --git a/test.lua b/test.lua index 00a3cc7..8c20bdb 100644 --- a/test.lua +++ b/test.lua @@ -1,3 +1,6 @@ +-- ensure modlib API isn't leaking into global environment +assert(modlib.bluon.assert ~= assert) + local random, huge = math.random, math.huge local parent_env = getfenv(1) setfenv(1, setmetatable({}, {