module refactoring

This commit is contained in:
Manuel Simon Hirsig
2017-11-25 17:53:39 +01:00
parent 6f71167e48
commit ab94acc2be
38 changed files with 402 additions and 453 deletions
+3 -3
View File
@@ -55,7 +55,7 @@ do
return v
end
end
M.temp = setmetatable({}, {__metatable=false, __newindex=nop, __call=f, __sub=f})
M.temp = setmetatable({}, {__metatable=false, __newindex=pass, __call=f, __sub=f})
end
do
local function f(_, v)
@@ -64,7 +64,7 @@ do
return v
end
end
M.static = setmetatable({}, {__metatable=false, __newindex=nop, __call=f, __sub=f})
M.static = setmetatable({}, {__metatable=false, __newindex=pass, __call=f, __sub=f})
end
do
@@ -78,7 +78,7 @@ do
M.unpack = unpack
end
M.empty = setmetatable({}, {__metatable=false, __newindex=nop})
M.empty = setmetatable({}, {__metatable=false, __newindex=pass})
local vararg
do
+8 -10
View File
@@ -1,25 +1,23 @@
if module then return end
local _G, setfenv, setmetatable = getfenv(0), setfenv, setmetatable
local environments, exports_data, interfaces = {}, {}, {}
local environments, interfaces = {}, {}
local function nop() end
local function pass() end
local environment_mt = {__index=_G}
local function create_module(name)
local environment, exports = setmetatable({_G=_G, nop=nop}, {__index=_G}), {}
local environment = setmetatable({_G=_G, pass=pass}, environment_mt)
local exports = {}
environment.M = setmetatable({}, {
__metatable=false,
__newindex=function(_, k, v)
environment[k], exports[k] = v, v
end,
})
environment.include = function(name)
for k, v in exports_data[name] or error('No such module.', 2) do
environment[k] = v
end
end
environment._M = environment
interfaces[name] = setmetatable({}, {__metatable=false, __index=exports, __newindex=nop})
environments[name], exports_data[name] = environment, exports
environments[name] = environment
interfaces[name] = setmetatable({}, {__metatable=false, __index=exports, __newindex=pass})
end
function module(name)