Verify that mkmodule is called with the correct module name.

develop
Alexander Gavrilov 2014-06-26 18:11:05 +04:00
parent 9cb913b121
commit 6f162a4e72
1 changed files with 21 additions and 0 deletions

@ -83,7 +83,27 @@ dfhack.exception.__index = dfhack.exception
-- Module loading -- Module loading
local function find_required_module_arg()
-- require -> module code -> mkmodule -> find_...
if debug.getinfo(4,'f').func == require then
return debug.getlocal(4, 1)
end
-- reload -> dofile -> module code -> mkmodule -> find_...
if debug.getinfo(5,'f').func == reload then
return debug.getlocal(5, 1)
end
end
function mkmodule(module,env) function mkmodule(module,env)
-- Verify that the module name is correct
local _, rq_modname = find_required_module_arg()
if not rq_modname then
error('The mkmodule function must be used at the start of a module')
end
if rq_modname ~= module then
error('Found module '..module..' during require '..rq_modname)
end
-- Reuse the already loaded module table
local pkg = package.loaded[module] local pkg = package.loaded[module]
if pkg == nil then if pkg == nil then
pkg = {} pkg = {}
@ -92,6 +112,7 @@ function mkmodule(module,env)
error("Not a table in package.loaded["..module.."]") error("Not a table in package.loaded["..module.."]")
end end
end end
-- Inject the plugin-exported functions when appropriate
local plugname = string.match(module,'^plugins%.([%w%-]+)$') local plugname = string.match(module,'^plugins%.([%w%-]+)$')
if plugname then if plugname then
dfhack.open_plugin(pkg,plugname) dfhack.open_plugin(pkg,plugname)