Skip to content

Commit e0aa566

Browse files
authored
Merge pull request #93 from levno-710/develop
2 parents 1b51e3f + 38061cd commit e0aa566

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

src/prometheus/compiler/compiler.lua

Lines changed: 14 additions & 1 deletion
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);
@@ -2345,7 +2358,7 @@ function Compiler:compileExpression(expression, funcDepth, numReturns)
23452358
return regs;
23462359
end
23472360

2348-
logger:error(string.format("%s is not an compileable expression!", expression.kind));
2361+
logger:error(string.format("%s is not an compliable expression!", expression.kind));
23492362
end
23502363

23512364
return Compiler;

0 commit comments

Comments
 (0)