summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsumneko <sumneko@hotmail.com>2019-05-22 10:32:51 +0800
committersumneko <sumneko@hotmail.com>2019-05-22 10:32:51 +0800
commita887ffcee074910dbdd8be2ff088b3244ea5e91a (patch)
treeb80592c594c79e9222157355952c97a328527350
parent3d4dff4da0bb34841ebd4a6018f4fa0d7001745b (diff)
downloadlua-language-server-a887ffcee074910dbdd8be2ff088b3244ea5e91a.zip
修正变量的close计算不正确的bug
-rw-r--r--server/src/vm/function.lua14
-rw-r--r--server/src/vm/vm.lua1
2 files changed, 10 insertions, 5 deletions
diff --git a/server/src/vm/function.lua b/server/src/vm/function.lua
index 9b236c55..723c5ff0 100644
--- a/server/src/vm/function.lua
+++ b/server/src/vm/function.lua
@@ -248,6 +248,8 @@ function mt:run(vm)
if self._objectSource then
local loc = localMgr.create('self', vm:instantSource(self._objectSource), self._objectValue)
loc:set('hide', true)
+ loc:set('start', self:getSource().start)
+ loc:close(self:getSource().finish)
self:saveUpvalue('self', loc)
self.args[#self.args+1] = loc
end
@@ -359,19 +361,20 @@ function mt:findEmmyParamByIndex(index)
return self:findEmmyParamByName(name)
end
-function mt:addArg(name, source, value)
+function mt:addArg(name, source, value, close)
local loc = localMgr.create(name, source, value)
+ loc:close(close)
self:saveUpvalue(name, loc)
self.args[#self.args+1] = loc
end
-function mt:createArg(vm, arg)
+function mt:createArg(vm, arg, close)
vm:instantSource(arg)
arg:set('arg', self)
if arg.type == 'name' then
vm:instantSource(arg)
local value = valueMgr.create('nil', arg)
- self:addArg(arg[1], arg, value)
+ self:addArg(arg[1], arg, value, close)
elseif arg.type == '...' then
self._dots = createMulti()
self._dotsSource = arg
@@ -401,12 +404,13 @@ function mt:createArgs(vm)
if not args then
return
end
+ local close = self:getSource().finish
if args.type == 'list' then
for _, arg in ipairs(args) do
- self:createArg(vm, arg)
+ self:createArg(vm, arg, close)
end
else
- self:createArg(vm, args)
+ self:createArg(vm, args, close)
end
end
diff --git a/server/src/vm/vm.lua b/server/src/vm/vm.lua
index fab500e5..3aee3c6f 100644
--- a/server/src/vm/vm.lua
+++ b/server/src/vm/vm.lua
@@ -1202,6 +1202,7 @@ function mt:createLocal(key, source, value, emmy)
loc:setEmmy(emmy)
self:saveLocal(key, loc)
self:bindLocal(source, loc, 'local')
+ loc:close(self:getCurrentFunction():getSource().finish)
value:addInfo('local', source)
return loc
end