Do not re-use temp for both parameter and result.
authorErik Verbruggen <erik.verbruggen@me.com>
Fri, 1 Mar 2013 13:34:56 +0000 (14:34 +0100)
committerLars Knoll <lars.knoll@digia.com>
Mon, 4 Mar 2013 08:37:56 +0000 (09:37 +0100)
Change-Id: Iffd50459bc55960ac5cef1e246cd3d2664565a8a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/v4/qv4codegen.cpp

index 77e1a15..16839fa 100644 (file)
@@ -2171,10 +2171,12 @@ bool Codegen::visit(ForEachStatement *ast)
 
     enterLoop(ast, foreachend, foreachin);
 
-    int iterator = _block->newTemp();
-    move(_block->TEMP(iterator), *expression(ast->expression));
+    int objectToIterateOn = _block->newTemp();
+    move(_block->TEMP(objectToIterateOn), *expression(ast->expression));
     IR::ExprList *args = _function->New<IR::ExprList>();
-    args->init(_block->TEMP(iterator));
+    args->init(_block->TEMP(objectToIterateOn));
+
+    int iterator = _block->newTemp();
     move(_block->TEMP(iterator), _block->CALL(_block->NAME(IR::Name::builtin_foreach_iterator_object, 0, 0), args));
 
     _block->JUMP(foreachin);