summaryrefslogtreecommitdiff
path: root/server/src/vm
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2019-06-26 15:34:13 +0800
committer最萌小汐 <sumneko@hotmail.com>2019-06-26 15:34:13 +0800
commite98245ae3492ce132ddfe9153b1a5a80f3a3e3e4 (patch)
tree543a70ba9e6023c6513719b97e00a5e507e38b68 /server/src/vm
parent1232c5c8b661b845123944ad73f8027071f69cdf (diff)
downloadlua-language-server-e98245ae3492ce132ddfe9153b1a5a80f3a3e3e4.zip
记录 overload
Diffstat (limited to 'server/src/vm')
-rw-r--r--server/src/vm/emmy.lua23
-rw-r--r--server/src/vm/function.lua12
-rw-r--r--server/src/vm/vm.lua2
3 files changed, 34 insertions, 3 deletions
diff --git a/server/src/vm/emmy.lua b/server/src/vm/emmy.lua
index 42f3a72a..3ad0a472 100644
--- a/server/src/vm/emmy.lua
+++ b/server/src/vm/emmy.lua
@@ -8,6 +8,7 @@ function mt:clearEmmy()
self._emmyReturns = nil
self._emmyGeneric = nil
self._emmyComment = nil
+ self._emmyOverLoads = nil
end
function mt:doEmmy(action)
@@ -37,6 +38,8 @@ function mt:doEmmy(action)
self:doEmmyFunctionType(action)
elseif tp == 'emmySee' then
self:doEmmySee(action)
+ elseif tp == 'emmyOverLoad' then
+ self:doEmmyOverLoad(action)
elseif tp == 'emmyIncomplete' then
self:doEmmyIncomplete(action)
elseif tp == 'emmyComment' then
@@ -64,6 +67,13 @@ function mt:addEmmyReturn(rtn)
self._emmyReturns[#self._emmyReturns+1] = rtn
end
+function mt:addEmmyOverLoad(funcObj)
+ if not self._emmyOverLoads then
+ self._emmyOverLoads = {}
+ end
+ self._emmyOverLoads[#self._emmyOverLoads+1] = funcObj
+end
+
function mt:getEmmyParams()
local params = self._emmyParams
self._emmyParams = nil
@@ -76,6 +86,12 @@ function mt:getEmmyReturns()
return returns
end
+function mt:getEmmyOverLoads()
+ local overLoads = self._emmyOverLoads
+ self._emmyOverLoads = nil
+ return overLoads
+end
+
function mt:getEmmyGeneric()
local generic = self._emmyGeneric
self._emmyGeneric = nil
@@ -302,12 +318,12 @@ function mt:buildEmmyFunctionType(source)
func:setReturn(1, value)
end
funcObj:bindFunction(func)
- self._emmy = funcObj
return funcObj
end
function mt:doEmmyFunctionType(action)
local funcObj = self:buildEmmyFunctionType(action)
+ self._emmy = funcObj
return funcObj
end
@@ -338,3 +354,8 @@ function mt:doEmmySee(action)
self:instantSource(action[2])
action[2]:set('emmy see', action)
end
+
+function mt:doEmmyOverLoad(action)
+ local funcObj = self:buildEmmyFunctionType(action)
+ self:addEmmyOverLoad(funcObj)
+end
diff --git a/server/src/vm/function.lua b/server/src/vm/function.lua
index 60498033..8f7ac6c2 100644
--- a/server/src/vm/function.lua
+++ b/server/src/vm/function.lua
@@ -465,7 +465,7 @@ function mt:markGlobal()
end
end
-function mt:setEmmy(params, returns)
+function mt:setEmmy(params, returns, overLoads)
if params then
self._emmyParams = params
for _, param in ipairs(params) do
@@ -479,6 +479,12 @@ function mt:setEmmy(params, returns)
rtn:getSource():set('emmy function', self)
end
end
+ if overLoads then
+ self._emmyOverLoads = overLoads
+ for _, ol in ipairs(overLoads) do
+ ol:getSource():set('emmy function', self)
+ end
+ end
end
---@param comment string
@@ -495,6 +501,10 @@ function mt:getEmmyParams()
return self._emmyParams
end
+function mt:getEmmyOverLoads()
+ return self._emmyOverLoads
+end
+
local function create(source)
if not source then
error('Function need source')
diff --git a/server/src/vm/vm.lua b/server/src/vm/vm.lua
index 3a884404..f8632dab 100644
--- a/server/src/vm/vm.lua
+++ b/server/src/vm/vm.lua
@@ -1097,7 +1097,7 @@ end
function mt:createFunction(source)
local value = self:createValue('function', source)
local func = functionMgr.create(source)
- func:setEmmy(self:getEmmyParams(), self:getEmmyReturns())
+ func:setEmmy(self:getEmmyParams(), self:getEmmyReturns(), self:getEmmyOverLoads())
func:setComment(self:getEmmyComment())
value:setFunction(func)
value:setType('function', 1.0)