Skip to content

Commit 1befa0b

Browse files
committed
fix removing dead nodes
1 parent 702b0e7 commit 1befa0b

File tree

3 files changed

+21
-20
lines changed

3 files changed

+21
-20
lines changed

script/vm/compiler.lua

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,27 +1235,29 @@ local compilerSwitch = util.switch()
12351235
end
12361236

12371237
---@type vm.node, boolean
1238-
local cacheNode, needCompile
1238+
local variableNode, needCompile
12391239

12401240
do
12411241
local localInfo = vm.getVariableInfo(source)
12421242
if localInfo then
1243-
cacheNode = localInfo.node
1244-
if not cacheNode then
1243+
local lastCacheNode = vm.getNode(localInfo)
1244+
if lastCacheNode then
1245+
variableNode = lastCacheNode
1246+
else
12451247
needCompile = true
1246-
cacheNode = vm.createNode()
1247-
localInfo.node = cacheNode
1248+
variableNode = vm.createNode()
1249+
vm.setNode(localInfo, variableNode, true)
12481250
end
12491251
else
12501252
local parentNode = vm.compileNode(source.node)
12511253
if not parentNode.fields then
12521254
parentNode.fields = {}
12531255
end
1254-
cacheNode = parentNode.fields[key]
1255-
if not cacheNode then
1256+
variableNode = parentNode.fields[key]
1257+
if not variableNode then
12561258
needCompile = true
1257-
cacheNode = vm.createNode()
1258-
parentNode.fields[key] = cacheNode
1259+
variableNode = vm.createNode()
1260+
parentNode.fields[key] = variableNode
12591261
end
12601262
end
12611263
end
@@ -1266,15 +1268,15 @@ local compilerSwitch = util.switch()
12661268
local uri = guide.getUri(source)
12671269
local value = vm.getTableValue(uri, vm.compileNode(source.node), key)
12681270
if value then
1269-
cacheNode:merge(value)
1271+
variableNode:merge(value)
12701272
end
12711273
for k in key:eachObject() do
12721274
if k.type == 'global' and k.cate == 'type' then
12731275
---@cast k vm.global
12741276
vm.compileByParentNode(source.node, k, function (src)
1275-
cacheNode:merge(vm.compileNode(src))
1277+
variableNode:merge(vm.compileNode(src))
12761278
if src.value then
1277-
cacheNode:merge(vm.compileNode(src.value))
1279+
variableNode:merge(vm.compileNode(src.value))
12781280
end
12791281
end)
12801282
end
@@ -1284,21 +1286,21 @@ local compilerSwitch = util.switch()
12841286
vm.compileByParentNode(source.node, key, function (src)
12851287
if src.value then
12861288
if bindDocs(src) then
1287-
cacheNode:merge(vm.compileNode(src))
1289+
variableNode:merge(vm.compileNode(src))
12881290
elseif src.value.type ~= 'nil' then
1289-
cacheNode:merge(vm.compileNode(src.value))
1291+
variableNode:merge(vm.compileNode(src.value))
12901292
local node = vm.getNode(src)
12911293
if node then
1292-
cacheNode:merge(node)
1294+
variableNode:merge(node)
12931295
end
12941296
end
12951297
else
1296-
cacheNode:merge(vm.compileNode(src))
1298+
variableNode:merge(vm.compileNode(src))
12971299
end
12981300
end)
12991301
end
13001302
end
1301-
vm.setNode(source, cacheNode)
1303+
vm.setNode(source, variableNode)
13021304
end)
13031305
: case 'setglobal'
13041306
: call(function (source)

script/vm/node.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ function mt:copy()
384384
return vm.createNode(self)
385385
end
386386

387-
---@param source vm.object
387+
---@param source vm.object | vm.variable
388388
---@param node vm.node | vm.node.object
389389
---@param cover? boolean
390390
---@return vm.node
@@ -415,7 +415,7 @@ function vm.setNode(source, node, cover)
415415
return me
416416
end
417417

418-
---@param source vm.object
418+
---@param source vm.object | vm.variable
419419
---@return vm.node?
420420
function vm.getNode(source)
421421
return vm.nodeCache[source]

script/vm/variable-id.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ local vm = require 'vm.vm'
66
---@class vm.variable
77
---@field sets parser.object[]
88
---@field gets parser.object[]
9-
---@field node? vm.node
109

1110
---@class parser.object
1211
---@field package _variableID string|false

0 commit comments

Comments
 (0)