summaryrefslogtreecommitdiff
path: root/src/qml/compiler/qv4codegen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/compiler/qv4codegen.cpp')
-rw-r--r--src/qml/compiler/qv4codegen.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
index 897f104093..b46891572e 100644
--- a/src/qml/compiler/qv4codegen.cpp
+++ b/src/qml/compiler/qv4codegen.cpp
@@ -2715,11 +2715,21 @@ bool Codegen::visit(ForEachStatement *ast)
Instruction::IteratorNext next;
next.value = lhsValue.stackSlot();
bytecodeGenerator->addInstruction(next);
- BytecodeGenerator::Jump done = bytecodeGenerator->addJumpInstruction(Instruction::JumpTrue());
- bytecodeGenerator->jump().link(body);
+ bytecodeGenerator->addJumpInstruction(Instruction::JumpFalse()).link(body);
+ BytecodeGenerator::Jump done = bytecodeGenerator->jump();
- done.link();
end.link();
+
+ if (ast->type == ForEachType::Of) {
+ Reference iteratorDone = Reference::fromConst(this, Encode(false)).storeOnStack();
+ iterator.loadInAccumulator();
+ Instruction::IteratorClose close;
+ close.done = iteratorDone.stackSlot();
+ bytecodeGenerator->addInstruction(close);
+ }
+
+ done.link();
+
return false;
}