@@ -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 )
0 commit comments