@@ -1729,6 +1729,19 @@ function Compiler:compileStatement(statement, funcDepth)
1729
1729
self :addStatement (self :setRegister (scope , varRegs [i ], Ast .NilExpression ()), {varRegs [i ]}, {}, false );
1730
1730
end
1731
1731
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
+
1732
1745
self :compileBlock (statement .body , funcDepth );
1733
1746
self :addStatement (self :setPos (scope , checkBlock .id ), {self .POS_REGISTER }, {}, false );
1734
1747
self :setActiveBlock (finalBlock );
@@ -2345,7 +2358,7 @@ function Compiler:compileExpression(expression, funcDepth, numReturns)
2345
2358
return regs ;
2346
2359
end
2347
2360
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 ));
2349
2362
end
2350
2363
2351
2364
return Compiler ;
0 commit comments