summaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/src')
-rw-r--r--server/src/core/global.lua15
-rw-r--r--server/src/service.lua5
2 files changed, 19 insertions, 1 deletions
diff --git a/server/src/core/global.lua b/server/src/core/global.lua
index 8aa801de..5704bfd4 100644
--- a/server/src/core/global.lua
+++ b/server/src/core/global.lua
@@ -26,6 +26,7 @@ end
function mt:compileVM(uri, vm)
self:clearGlobal(uri)
+ local seted = {}
for k, v in next, vm.env.child do
local get, set
for _, info in ipairs(v) do
@@ -37,10 +38,24 @@ function mt:compileVM(uri, vm)
end
if set then
self:markSet(uri, k, v)
+ seted[#seted+1] = k
elseif get then
self:markGet(uri, k)
end
end
+
+ local needReCompile = {}
+ for otherUri, gets in pairs(self.get) do
+ for _, key in ipairs(seted) do
+ if gets[key] ~= nil then
+ needReCompile[#needReCompile+1] = otherUri
+ goto CONTINUE
+ end
+ end
+ ::CONTINUE::
+ end
+
+ return needReCompile
end
function mt:getGlobal(key)
diff --git a/server/src/service.lua b/server/src/service.lua
index 84be9832..57606d19 100644
--- a/server/src/service.lua
+++ b/server/src/service.lua
@@ -264,7 +264,10 @@ function mt:_compileChain(obj, compiled)
end
function mt:_compileGlobal(obj, compiled)
- self._global:compileVM(obj.uri, obj.vm)
+ local needReCompile = self._global:compileVM(obj.uri, obj.vm)
+ for _, uri in ipairs(needReCompile) do
+ self:needCompile(uri, compiled)
+ end
end
function mt:getGlobal(key)