diff options
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/core/global.lua | 15 | ||||
-rw-r--r-- | server/src/service.lua | 5 |
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) |