summaryrefslogtreecommitdiff
path: root/script/vm
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2022-02-24 20:32:09 +0800
committer最萌小汐 <sumneko@hotmail.com>2022-02-24 20:32:09 +0800
commite4606599ee4f6d5c8d10fd4e7ecbe315e4b65c3b (patch)
tree1310fa89c3a8789b2b13161be6f9afee2fae96a9 /script/vm
parent38f1b173dd57e163ee7821560566cb59e1ac95cd (diff)
downloadlua-language-server-e4606599ee4f6d5c8d10fd4e7ecbe315e4b65c3b.zip
update
Diffstat (limited to 'script/vm')
-rw-r--r--script/vm/getDef.lua2
-rw-r--r--script/vm/global-manager.lua7
-rw-r--r--script/vm/node/compiler.lua17
3 files changed, 17 insertions, 9 deletions
diff --git a/script/vm/getDef.lua b/script/vm/getDef.lua
index c37c1323..82fa84eb 100644
--- a/script/vm/getDef.lua
+++ b/script/vm/getDef.lua
@@ -84,7 +84,7 @@ local searchFieldMap = util.switch()
if not newGlobal then
return
end
- for set in ipairs(newGlobal:getSets()) do
+ for _, set in ipairs(newGlobal:getSets()) do
pushResult(set)
end
end)
diff --git a/script/vm/global-manager.lua b/script/vm/global-manager.lua
index 86f6be9f..b9f22b43 100644
--- a/script/vm/global-manager.lua
+++ b/script/vm/global-manager.lua
@@ -31,7 +31,6 @@ local compilerGlobalMap = util.switch()
local name = guide.getKeyName(source)
local global = m.declareGlobal(name, uri)
global:addSet(uri, source)
- m.globalSubs[uri][name] = true
source._globalNode = global
end)
: case 'getglobal'
@@ -39,7 +38,6 @@ local compilerGlobalMap = util.switch()
local name = guide.getKeyName(source)
local global = m.declareGlobal(name, uri)
global:addGet(uri, source)
- m.globalSubs[uri][name] = true
source._globalNode = global
local nxt = source.next
@@ -60,7 +58,7 @@ local compilerGlobalMap = util.switch()
local name = parent:getName() .. m.ID_SPLITE .. guide.getKeyName(source)
local global = m.declareGlobal(name, uri)
global:addSet(uri, source)
- m.globalSubs[uri][name] = true
+ source._globalNode = global
end)
: case 'getfield'
: case 'getmethod'
@@ -73,8 +71,7 @@ local compilerGlobalMap = util.switch()
return
end
local name = parent:getName() .. m.ID_SPLITE .. guide.getKeyName(source)
- local global = m.getGlobal(name)
- m.globalSubs[uri][name] = true
+ local global = m.declareGlobal(name, uri)
global:addGet(uri, source)
source._globalNode = global
diff --git a/script/vm/node/compiler.lua b/script/vm/node/compiler.lua
index 33b9b05e..f91f90ae 100644
--- a/script/vm/node/compiler.lua
+++ b/script/vm/node/compiler.lua
@@ -25,6 +25,9 @@ function m.setNode(source, node)
source._node = node
return
end
+ if me == node then
+ return
+ end
if me.type == 'union'
or me.type == 'cross' then
me:merge(node)
@@ -91,11 +94,19 @@ local searchFieldMap = util.switch()
if field.type == 'tablefield'
or field.type == 'tableindex' then
if guide.getKeyName(field) == key then
- pushResult(field)
+ pushResult(m.compileNode(field))
end
end
end
end)
+ : case 'global'
+ ---@param node vm.node.global
+ : call(function (node, key, pushResult)
+ local global = globalMgr.getGlobal(node.name, key)
+ if global then
+ pushResult(global)
+ end
+ end)
: getMap()
local function compileByParentNode(source)
@@ -106,8 +117,8 @@ local function compileByParentNode(source)
local key = guide.getKeyName(source)
local f = searchFieldMap[parentNode.type]
if f then
- f(parentNode, key, function (field)
- m.setNode(source, m.compileNode(field.value))
+ f(parentNode, key, function (fieldNode)
+ m.setNode(source, fieldNode)
end)
end
end