From ea19d0e46ea4828531ad481f6018d334cd0b5999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Wed, 23 Jan 2019 14:38:45 +0800 Subject: =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=85=A8=E5=B1=80=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/core/global.lua | 15 +++++++++++++++ server/src/service.lua | 5 ++++- server/test/crossfile/definition.lua | 28 ++++++++++++++-------------- 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 = [[ --- = 1 --- ]], --- }, --- { --- path = 'b.lua', --- content = [[ --- print() --- ]], --- } ---} +TEST { + { + path = 'a.lua', + content = [[ + = 1 + ]], + }, + { + path = 'b.lua', + content = [[ + print() + ]], + } +} -- cgit v1.2.3