From e5bccf09635ff07aa72ec1c21b86ed8237cd02ca Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Tue, 4 Oct 2016 13:06:55 +0300 Subject: [PATCH] Support do while cycles --- .../kotlin/backend/jvm/codegen/ExpressionCodegen.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 3faaee5be00..63cef475854 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -461,7 +461,18 @@ class ExpressionCodegen( } override fun visitDoWhileLoop(loop: IrDoWhileLoop, data: BlockInfo): StackValue { - return super.visitDoWhileLoop(loop, data) + val entry = Label() + mv.visitLabel(entry) + + loop.body?.apply { + gen(this, data) + } + + val condition = loop.condition + gen(condition, data) + BranchedValue.condJump(StackValue.onStack(condition.asmType), entry, false, mv) + + return loop.onStack } override fun visitThrow(expression: IrThrow, data: BlockInfo): StackValue {