From 905827252890c178e266fe65c4549df0e4cf5924 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 2 Dec 2013 20:44:23 +0400 Subject: [PATCH] Support codegen of empty while-loop #KT-3009 In Progress --- .../src/org/jetbrains/jet/codegen/ExpressionCodegen.java | 6 +++++- .../testData/codegen/box/controlStructures/emptyWhile.kt | 9 +++++++++ .../codegen/generated/BlackBoxCodegenTestGenerated.java | 5 +++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/controlStructures/emptyWhile.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 14ac80efc70..ceb95e2c779 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -425,7 +425,11 @@ public class ExpressionCodegen extends JetVisitor implem StackValue conditionValue = gen(expression.getCondition()); conditionValue.condJump(end, true, v); - gen(expression.getBody(), Type.VOID_TYPE); + JetExpression body = expression.getBody(); + if (body != null) { + gen(body, Type.VOID_TYPE); + } + v.goTo(condition); v.mark(end); diff --git a/compiler/testData/codegen/box/controlStructures/emptyWhile.kt b/compiler/testData/codegen/box/controlStructures/emptyWhile.kt new file mode 100644 index 00000000000..c52c5124f52 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/emptyWhile.kt @@ -0,0 +1,9 @@ +fun box(): String { + while (false); + + var x = 0 + while (x++<5); + if (x != 6) return "Fail: $x" + + return "OK" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 9f18cc771f8..42f0a99f999 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -1432,6 +1432,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/controlStructures/emptyIf.kt"); } + @TestMetadata("emptyWhile.kt") + public void testEmptyWhile() throws Exception { + doTest("compiler/testData/codegen/box/controlStructures/emptyWhile.kt"); + } + @TestMetadata("finallyOnEmptyReturn.kt") public void testFinallyOnEmptyReturn() throws Exception { doTest("compiler/testData/codegen/box/controlStructures/finallyOnEmptyReturn.kt");