diff options
author | sumneko <sumneko@hotmail.com> | 2019-05-22 10:32:51 +0800 |
---|---|---|
committer | sumneko <sumneko@hotmail.com> | 2019-05-22 10:32:51 +0800 |
commit | a887ffcee074910dbdd8be2ff088b3244ea5e91a (patch) | |
tree | b80592c594c79e9222157355952c97a328527350 | |
parent | 3d4dff4da0bb34841ebd4a6018f4fa0d7001745b (diff) | |
download | lua-language-server-a887ffcee074910dbdd8be2ff088b3244ea5e91a.zip |
修正变量的close计算不正确的bug
-rw-r--r-- | server/src/vm/function.lua | 14 | ||||
-rw-r--r-- | server/src/vm/vm.lua | 1 |
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 |