@@ -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 ));
23492362end
23502363
23512364return Compiler ;
0 commit comments