aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qv4codegen.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/qv4codegen.cpp b/qv4codegen.cpp
index 6446a81111..fe754a435c 100644
--- a/qv4codegen.cpp
+++ b/qv4codegen.cpp
@@ -1973,14 +1973,20 @@ bool Codegen::visit(DebuggerStatement *)
bool Codegen::visit(DoWhileStatement *ast)
{
IR::BasicBlock *loopbody = _function->newBasicBlock();
+ IR::BasicBlock *loopcond = _function->newBasicBlock();
IR::BasicBlock *loopend = _function->newBasicBlock();
- enterLoop(ast, loopend, loopbody);
+ enterLoop(ast, loopend, loopcond);
_block->JUMP(loopbody);
+
_block = loopbody;
statement(ast->statement);
+ _block->JUMP(loopcond);
+
+ _block = loopcond;
condition(ast->expression, loopbody, loopend);
+
_block = loopend;
leaveLoop();