diff options
author | sumneko <sumneko@hotmail.com> | 2019-05-24 11:29:15 +0800 |
---|---|---|
committer | sumneko <sumneko@hotmail.com> | 2019-05-24 11:29:15 +0800 |
commit | 28c04562c5d3869eb47d1190349d4c68655aefe8 (patch) | |
tree | 09cb8a5789f9a11614a828b92a2605b92f932851 | |
parent | 72a491c98f68a8483183b0d800309a6f99e43e3b (diff) | |
download | lua-language-server-28c04562c5d3869eb47d1190349d4c68655aefe8.zip |
fixed #38 特殊处理 pairs 与 ipairs 的返回值
-rw-r--r-- | server/src/vm/function.lua | 4 | ||||
-rw-r--r-- | server/src/vm/ipairs.lua | 3 | ||||
-rw-r--r-- | server/src/vm/library.lua | 1 | ||||
-rw-r--r-- | server/src/vm/multi.lua | 3 |
4 files changed, 9 insertions, 2 deletions
diff --git a/server/src/vm/function.lua b/server/src/vm/function.lua index 723c5ff0..1106a0c9 100644 --- a/server/src/vm/function.lua +++ b/server/src/vm/function.lua @@ -154,7 +154,7 @@ function mt:setReturn(index, value) self.returns = createMulti() end if value then - self.returns[index] = value + self.returns:set(index, value) if self._global then value:markGlobal() end @@ -174,7 +174,7 @@ function mt:mergeReturn(index, value) self.returns[index]:mergeValue(value) self.returns[index] = value else - self.returns[index] = value + self.returns:set(index, value) end end if self._global then diff --git a/server/src/vm/ipairs.lua b/server/src/vm/ipairs.lua index 58c7d827..cb8356da 100644 --- a/server/src/vm/ipairs.lua +++ b/server/src/vm/ipairs.lua @@ -1,8 +1,10 @@ local mt = require 'vm.manager' +local library = require 'vm.library' ---@param func emmyFunction function mt:callIpairs(func, values, source) local tbl = values[1] + func:setReturn(1, library.special['@ipairs']) func:setReturn(2, tbl) end @@ -23,6 +25,7 @@ end ---@param func emmyFunction function mt:callPairs(func, values, source) local tbl = values[1] + func:setReturn(1, library.special['next']) func:setReturn(2, tbl) end diff --git a/server/src/vm/library.lua b/server/src/vm/library.lua index 258118a7..018d69f3 100644 --- a/server/src/vm/library.lua +++ b/server/src/vm/library.lua @@ -108,4 +108,5 @@ return { value = buildLibValue, child = buildLibChild, clear = clearCache, + special = Special, } diff --git a/server/src/vm/multi.lua b/server/src/vm/multi.lua index c2748a26..4b27b8cf 100644 --- a/server/src/vm/multi.lua +++ b/server/src/vm/multi.lua @@ -25,6 +25,9 @@ function mt:get(index) end function mt:set(index, value) + if index > self.len then + self.len = index + end self[index] = value end |