summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/src/core/global.lua15
-rw-r--r--server/src/service.lua5
-rw-r--r--server/test/crossfile/definition.lua28
3 files changed, 33 insertions, 15 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)
diff --git a/server/test/crossfile/definition.lua b/server/test/crossfile/definition.lua
index 3fdd1854..d34d6868 100644
--- a/server/test/crossfile/definition.lua
+++ b/server/test/crossfile/definition.lua
@@ -183,17 +183,17 @@ TEST {
}
}
---TEST {
--- {
--- path = 'a.lua',
--- content = [[
--- <!global!> = 1
--- ]],
--- },
--- {
--- path = 'b.lua',
--- content = [[
--- print(<?global?>)
--- ]],
--- }
---}
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ <!global!> = 1
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ print(<?global?>)
+ ]],
+ }
+}