From ffb679a78f26434e8648e70d118356050784803f Mon Sep 17 00:00:00 2001 From: SpinnySpiwal <99829343+SpinnySpiwal@users.noreply.github.com> Date: Wed, 12 Oct 2022 17:56:03 +0100 Subject: [PATCH 1/2] Update compiler.lua Spelling Mistake Fix --- src/prometheus/compiler/compiler.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prometheus/compiler/compiler.lua b/src/prometheus/compiler/compiler.lua index e13a939..be4962a 100644 --- a/src/prometheus/compiler/compiler.lua +++ b/src/prometheus/compiler/compiler.lua @@ -2345,7 +2345,7 @@ function Compiler:compileExpression(expression, funcDepth, numReturns) return regs; end - logger:error(string.format("%s is not an compileable expression!", expression.kind)); + logger:error(string.format("%s is not an compliable expression!", expression.kind)); end return Compiler; From 38061cd5e0944b1f6db5fef9f4672529b6e6842f Mon Sep 17 00:00:00 2001 From: Levno_710 Date: Sun, 30 Oct 2022 15:14:08 +0100 Subject: [PATCH 2/2] fix bug in compiler --- src/prometheus/compiler/compiler.lua | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/prometheus/compiler/compiler.lua b/src/prometheus/compiler/compiler.lua index be4962a..5ea2a73 100644 --- a/src/prometheus/compiler/compiler.lua +++ b/src/prometheus/compiler/compiler.lua @@ -1729,6 +1729,19 @@ function Compiler:compileStatement(statement, funcDepth) self:addStatement(self:setRegister(scope, varRegs[i], Ast.NilExpression()), {varRegs[i]}, {}, false); end + -- Upvalue fix + for i, id in ipairs(statement.ids) do + if(self:isUpvalue(statement.scope, id)) then + local varreg = varRegs[i]; + local tmpReg = self:allocRegister(false); + scope:addReferenceToHigherScope(self.scope, self.allocUpvalFunction); + self:addStatement(self:setRegister(scope, tmpReg, Ast.FunctionCallExpression(Ast.VariableExpression(self.scope, self.allocUpvalFunction), {})), {tmpReg}, {}, false); + self:addStatement(self:setUpvalueMember(scope, self:register(scope, tmpReg), self:register(scope, varreg)), {}, {tmpReg, varreg}, true); + self:addStatement(self:copyRegisters(scope, {varreg}, {tmpReg}), {varreg}, {tmpReg}, false); + self:freeRegister(tmpReg, false); + end + end + self:compileBlock(statement.body, funcDepth); self:addStatement(self:setPos(scope, checkBlock.id), {self.POS_REGISTER}, {}, false); self:setActiveBlock(finalBlock);