summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2022-06-14 18:44:27 +0800
committer最萌小汐 <sumneko@hotmail.com>2022-06-14 18:44:27 +0800
commitbb238946ab6bc09b0376b5a4f1875c393f23ff47 (patch)
treeef54c5c9e15e2b86d3be2761f0eeb773e79dd70d
parenteb7363f1c70e62d0f27c675f49b0d28113d4afa4 (diff)
downloadlua-language-server-bb238946ab6bc09b0376b5a4f1875c393f23ff47.zip
update runner
-rw-r--r--script/vm/runner.lua4
-rw-r--r--test/type_inference/init.lua8
2 files changed, 12 insertions, 0 deletions
diff --git a/script/vm/runner.lua b/script/vm/runner.lua
index c0218a44..30d9e672 100644
--- a/script/vm/runner.lua
+++ b/script/vm/runner.lua
@@ -114,6 +114,9 @@ end
---@param outNode? vm.node
---@return vm.node
function mt:_lookInto(action, topNode, outNode)
+ if action.type == 'setlocal' then
+ topNode = self:_fastWard(action.finish, topNode)
+ end
action = vm.getObjectValue(action) or action
if action.type == 'function'
or action.type == 'loop'
@@ -162,6 +165,7 @@ function mt:_lookInto(action, topNode, outNode)
goto RETURN
end
if action.op.type == 'not' then
+ outNode = outNode or topNode:copy()
outNode, topNode = self:_lookInto(action[1], topNode, outNode)
end
elseif action.type == 'binary' then
diff --git a/test/type_inference/init.lua b/test/type_inference/init.lua
index 2dd6971b..655f963d 100644
--- a/test/type_inference/init.lua
+++ b/test/type_inference/init.lua
@@ -2420,3 +2420,11 @@ TEST '`1`|`true`' [[
---@type `1` | `true`
local <?x?>
]]
+
+TEST 'function' [[
+local x
+
+function x() end
+
+print(<?x?>)
+]]