Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local function require_external(modname)
- if type(modname) ~= 'string' then
- error("bad argument #1 to 'require_external' (string expected, got "..type(modname)..")", 2)
- end
- if package.loaded[modname] ~= nil then
- if package.loaded[modname] == false then
- error("loop or previous error loading module '".. modname .. "'", 2)
- end
- return package.loaded[modname]
- end
- package.loaded[modname] = false
- -- search file on FS (Tarantool only)
- local file = assert(package.search(modname), "module "..modname.." not found")
- -- Create separate Global
- local mod = setmetatable({}, { __index = _G })
- -- Run loader (syntax linting)
- local loader = assert(loadfile(file))
- -- Change global environment (to exclude polution of app's global)
- setfenv(loader, mod)
- -- Load module
- local result = loader(modname)
- -- Drop metatable of module for good
- setmetatable(mod, nil)
- -- Check if module returns something
- if result ~= true then
- result = result or mod
- else
- -- If module returns nothing (true by default) return mod
- result = mod
- end
- package.loaded[mod] = result
- return result
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement