Skip to content

Commit 384493d

Browse files
authored
Merge pull request #60 from levno-710/develop
2 parents 879f190 + 591c8ab commit 384493d

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/prometheus/compiler/compiler.lua

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1969,35 +1969,46 @@ function Compiler:compileExpression(expression, funcDepth, numReturns)
19691969
retRegs[i] = self:allocRegister(false);
19701970
end
19711971
end
1972-
local argRegs = {};
1973-
1972+
1973+
local regs = {};
1974+
local args = {};
19741975
for i, expr in ipairs(expression.args) do
1975-
table.insert(argRegs, self:compileExpression(expr, funcDepth, 1)[1]);
1976+
if i == #expression.args and (expr.kind == AstKind.FunctionCallExpression or expr.kind == AstKind.PassSelfFunctionCallExpression or expr.kind == AstKind.VarargExpression) then
1977+
local reg = self:compileExpression(expr, funcDepth, self.RETURN_ALL)[1];
1978+
table.insert(args, Ast.FunctionCallExpression(
1979+
self:unpack(scope),
1980+
{self:register(scope, reg)}));
1981+
table.insert(regs, reg);
1982+
else
1983+
local reg = self:compileExpression(expr, funcDepth, 1)[1];
1984+
table.insert(args, self:register(scope, reg));
1985+
table.insert(regs, reg);
1986+
end
19761987
end
19771988

19781989
if(returnAll) then
1979-
self:addStatement(self:setRegister(scope, retRegs[1], Ast.TableConstructorExpression{Ast.TableEntry(Ast.FunctionCallExpression(self:register(scope, baseReg), self:registerList(scope, argRegs)))}), {retRegs[1]}, {baseReg, unpack(argRegs)}, true);
1990+
self:addStatement(self:setRegister(scope, retRegs[1], Ast.TableConstructorExpression{Ast.TableEntry(Ast.FunctionCallExpression(self:register(scope, baseReg), args))}), {retRegs[1]}, {baseReg, unpack(regs)}, true);
19801991
else
19811992
if(numReturns > 1) then
19821993
local tmpReg = self:allocRegister(false);
19831994

1984-
self:addStatement(self:setRegister(scope, tmpReg, Ast.TableConstructorExpression{Ast.TableEntry(Ast.FunctionCallExpression(self:register(scope, baseReg), self:registerList(scope, argRegs)))}), {tmpReg}, {baseReg, unpack(argRegs)}, true);
1995+
self:addStatement(self:setRegister(scope, tmpReg, Ast.TableConstructorExpression{Ast.TableEntry(Ast.FunctionCallExpression(self:register(scope, baseReg), args))}), {tmpReg}, {baseReg, unpack(regs)}, true);
19851996

19861997
for i, reg in ipairs(retRegs) do
19871998
self:addStatement(self:setRegister(scope, reg, Ast.IndexExpression(self:register(scope, tmpReg), Ast.NumberExpression(i))), {reg}, {tmpReg}, false);
19881999
end
19892000

19902001
self:freeRegister(tmpReg, false);
19912002
else
1992-
self:addStatement(self:setRegister(scope, retRegs[1], Ast.FunctionCallExpression(self:register(scope, baseReg), self:registerList(scope, argRegs))), {retRegs[1]}, {baseReg, unpack(argRegs)}, true);
2003+
self:addStatement(self:setRegister(scope, retRegs[1], Ast.FunctionCallExpression(self:register(scope, baseReg), args)), {retRegs[1]}, {baseReg, unpack(regs)}, true);
19932004
end
19942005
end
19952006

19962007

19972008

19982009

19992010
self:freeRegister(baseReg, false);
2000-
for i, reg in ipairs(argRegs) do
2011+
for i, reg in ipairs(regs) do
20012012
self:freeRegister(reg, false);
20022013
end
20032014

0 commit comments

Comments
 (0)