diff options
Diffstat (limited to 'src/qml/compiler/qv4codegen.cpp')
-rw-r--r-- | src/qml/compiler/qv4codegen.cpp | 16 |
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; } |