summaryrefslogtreecommitdiff
path: root/script/vm/def.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script/vm/def.lua')
-rw-r--r--script/vm/def.lua125
1 files changed, 1 insertions, 124 deletions
diff --git a/script/vm/def.lua b/script/vm/def.lua
index f557f221..7ce8ad7a 100644
--- a/script/vm/def.lua
+++ b/script/vm/def.lua
@@ -20,110 +20,6 @@ simpleSwitch = util.switch()
end
end)
-local searchFieldSwitch = util.switch()
- : case 'table'
- : call(function (suri, obj, key, pushResult)
- for _, field in ipairs(obj) do
- if field.type == 'tablefield'
- or field.type == 'tableindex' then
- if guide.getKeyName(field) == key then
- pushResult(field)
- end
- end
- end
- end)
- : case 'global'
- ---@param obj vm.global
- ---@param key string
- : call(function (suri, obj, key, pushResult)
- if obj.cate == 'variable' then
- local newGlobal = vm.getGlobal('variable', obj.name, key)
- if newGlobal then
- for _, set in ipairs(newGlobal:getSets(suri)) do
- pushResult(set)
- end
- end
- end
- if obj.cate == 'type' then
- vm.getClassFields(suri, obj, key, false, pushResult)
- end
- end)
- : case 'local'
- : call(function (suri, obj, key, pushResult)
- local sources = vm.getLocalSourcesSets(obj, key)
- if sources then
- for _, src in ipairs(sources) do
- pushResult(src)
- end
- end
- end)
- : case 'doc.type.table'
- : call(function (suri, obj, key, pushResult)
- for _, field in ipairs(obj.fields) do
- local fieldKey = field.name
- if fieldKey.type == 'doc.field.name' then
- if fieldKey[1] == key then
- pushResult(field)
- end
- end
- end
- end)
-
-local nodeSwitch;nodeSwitch = util.switch()
- : case 'field'
- : case 'method'
- : call(function (source, lastKey, pushResult)
- return nodeSwitch(source.parent.type, source.parent, lastKey, pushResult)
- end)
- : case 'getfield'
- : case 'setfield'
- : case 'getmethod'
- : case 'setmethod'
- : case 'getindex'
- : case 'setindex'
- : call(function (source, lastKey, pushResult)
- local parentNode = vm.compileNode(source.node)
- local uri = guide.getUri(source)
- local key = guide.getKeyName(source)
- if type(key) ~= 'string' then
- return
- end
- if lastKey then
- key = key .. vm.ID_SPLITE .. lastKey
- end
- for pn in parentNode:eachObject() do
- searchFieldSwitch(pn.type, uri, pn, key, pushResult)
- end
- return key, source.node
- end)
- : case 'tableindex'
- : case 'tablefield'
- : call(function (source, lastKey, pushResult)
- if lastKey then
- return
- end
- local key = guide.getKeyName(source)
- if type(key) ~= 'string' then
- return
- end
- local uri = guide.getUri(source)
- local parentNode = vm.compileNode(source.node)
- for pn in parentNode:eachObject() do
- searchFieldSwitch(pn.type, uri, pn, key, pushResult)
- end
- end)
- : case 'doc.see.field'
- : call(function (source, lastKey, pushResult)
- if lastKey then
- return
- end
- local parentNode = vm.compileNode(source.parent.name)
- local uri = guide.getUri(source)
- for pn in parentNode:eachObject() do
- searchFieldSwitch(pn.type, uri, pn, source[1], pushResult)
- end
- end)
-
---@param source parser.object
---@param pushResult fun(src: parser.object)
local function searchBySimple(source, pushResult)
@@ -142,25 +38,6 @@ local function searchByLocalID(source, pushResult)
end
end
----@param source parser.object
----@param pushResult fun(src: parser.object)
-local function searchByParentNode(source, pushResult)
- local lastKey
- local src = source
- while true do
- local key, node = nodeSwitch(src.type, src, lastKey, pushResult)
- if not key then
- break
- end
- src = node
- if lastKey then
- lastKey = key .. vm.ID_SPLITE .. lastKey
- else
- lastKey = key
- end
- end
-end
-
local function searchByNode(source, pushResult)
local node = vm.compileNode(source)
local suri = guide.getUri(source)
@@ -200,7 +77,7 @@ function vm.getDefs(source)
searchBySimple(source, pushResult)
searchByLocalID(source, pushResult)
- searchByParentNode(source, pushResult)
+ vm.compileByNodeChain(source, pushResult)
searchByNode(source, pushResult)
return results