Skip to content

Commit 38061cd

Browse files
committed
fix bug in compiler
1 parent 3e85ba0 commit 38061cd

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/prometheus/compiler/compiler.lua

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1729,6 +1729,19 @@ function Compiler:compileStatement(statement, funcDepth)
17291729
self:addStatement(self:setRegister(scope, varRegs[i], Ast.NilExpression()), {varRegs[i]}, {}, false);
17301730
end
17311731

1732+
-- Upvalue fix
1733+
for i, id in ipairs(statement.ids) do
1734+
if(self:isUpvalue(statement.scope, id)) then
1735+
local varreg = varRegs[i];
1736+
local tmpReg = self:allocRegister(false);
1737+
scope:addReferenceToHigherScope(self.scope, self.allocUpvalFunction);
1738+
self:addStatement(self:setRegister(scope, tmpReg, Ast.FunctionCallExpression(Ast.VariableExpression(self.scope, self.allocUpvalFunction), {})), {tmpReg}, {}, false);
1739+
self:addStatement(self:setUpvalueMember(scope, self:register(scope, tmpReg), self:register(scope, varreg)), {}, {tmpReg, varreg}, true);
1740+
self:addStatement(self:copyRegisters(scope, {varreg}, {tmpReg}), {varreg}, {tmpReg}, false);
1741+
self:freeRegister(tmpReg, false);
1742+
end
1743+
end
1744+
17321745
self:compileBlock(statement.body, funcDepth);
17331746
self:addStatement(self:setPos(scope, checkBlock.id), {self.POS_REGISTER}, {}, false);
17341747
self:setActiveBlock(finalBlock);

0 commit comments

Comments
 (0)