Fix circular lua script dependencies

develop
lethosor 2015-06-05 19:08:11 -04:00
parent 84d37ebfc7
commit bb93f2e40f
1 changed files with 18 additions and 5 deletions

@ -392,6 +392,9 @@ function Script:init(path)
self.mtime = dfhack.filesystem.mtime(path) self.mtime = dfhack.filesystem.mtime(path)
self._flags = {} self._flags = {}
end end
function Script:needs_update()
return (not self.env) or self.mtime ~= dfhack.filesystem.mtime(self.path)
end
function Script:get_flags() function Script:get_flags()
if self.flags_mtime ~= dfhack.filesystem.mtime(self.path) then if self.flags_mtime ~= dfhack.filesystem.mtime(self.path) then
self.flags_mtime = dfhack.filesystem.mtime(self.path) self.flags_mtime = dfhack.filesystem.mtime(self.path)
@ -463,14 +466,24 @@ function dfhack.enable_script(name, state)
end end
function dfhack.reqscript(name) function dfhack.reqscript(name)
_, env = dfhack.run_script_with_env(nil, name, {module=true}) return dfhack.script_environment(name, true)
return env
end end
reqscript = dfhack.reqscript reqscript = dfhack.reqscript
function dfhack.script_environment(name) function dfhack.script_environment(name, strict)
_, env = dfhack.run_script_with_env(nil, name, {module=true, module_strict=false}) local path = dfhack.findScript(name)
return env if not scripts[path] or scripts[path]:needs_update() then
local _, env = dfhack.run_script_with_env(nil, name, {
module=true,
module_strict=strict and true or false -- ensure that this key is present if 'strict' is nil
})
return env
else
if strict and not scripts[path]:get_flags().module then
error(('%s: %s'):format(name, valid_script_flags.module.error))
end
return scripts[path].env
end
end end
function dfhack.run_script_with_env(envVars, name, flags, ...) function dfhack.run_script_with_env(envVars, name, flags, ...)