@@ -469,9 +469,9 @@ function vm.getReturnOfFunction(func, index)
469469 end
470470 if not func ._returns [index ] then
471471 func ._returns [index ] = {
472- type = ' function.return' ,
473- parent = func ,
474- index = index ,
472+ type = ' function.return' ,
473+ parent = func ,
474+ returnIndex = index ,
475475 }
476476 end
477477 return func ._returns [index ]
@@ -736,14 +736,15 @@ function vm.compileByParentNode(source, key, ref, pushResult)
736736 end
737737end
738738
739- --- @return vm.node ?
740- local function selectNode ( source , list , index )
741- if not list then
742- return nil
743- end
739+ --- @param list parser.object[]
740+ --- @param index integer
741+ --- @return vm.node
742+ --- @ return parser.object ?
743+ function vm . selectNode ( list , index )
744744 local exp
745745 if list [index ] then
746746 exp = list [index ]
747+ index = 1
747748 else
748749 for i = index , 1 , - 1 do
749750 if list [i ] then
@@ -758,16 +759,14 @@ local function selectNode(source, list, index)
758759 end
759760 end
760761 if not exp then
761- vm .setNode (source , vm .declareGlobal (' type' , ' nil' ))
762- return vm .getNode (source )
762+ return vm .createNode (vm .declareGlobal (' type' , ' nil' )), nil
763763 end
764764 --- @type vm.node ?
765765 local result
766766 if exp .type == ' call' then
767767 result = getReturn (exp .node , index , exp .args )
768768 if not result then
769- vm .setNode (source , vm .declareGlobal (' type' , ' unknown' ))
770- return vm .getNode (source )
769+ return vm .createNode (vm .declareGlobal (' type' , ' unknown' )), exp
771770 end
772771 else
773772 --- @type vm.node
@@ -776,6 +775,15 @@ local function selectNode(source, list, index)
776775 result :merge (vm .declareGlobal (' type' , ' unknown' ))
777776 end
778777 end
778+ return result , exp
779+ end
780+
781+ --- @param source parser.object
782+ --- @param list parser.object[]
783+ --- @param index integer
784+ --- @return vm.node
785+ local function selectNode (source , list , index )
786+ local result = vm .selectNode (list , index )
779787 if source .type == ' function.return' then
780788 -- remove any for returns
781789 local rtnNode = vm .createNode ()
@@ -1513,9 +1521,10 @@ local compilerSwitch = util.switch()
15131521 vm .setNode (source , vm .compileNode (source .value ))
15141522 end )
15151523 : case ' function.return'
1524+ --- @param source parser.object
15161525 : call (function (source )
15171526 local func = source .parent
1518- local index = source .index
1527+ local index = source .returnIndex
15191528 local hasMarkDoc
15201529 if func .bindDocs then
15211530 local sign = getObjectSign (func )
0 commit comments