diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 1a51b3d1a6b..387b5311e34 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -465,16 +465,7 @@ public class ExpressionCodegen extends JetVisitor { generateCompareOp(expression, opToken); } else { - int opcode; - if (op.getName().equals("plus")) { - opcode = Opcodes.IADD; - } - else if (op.getName().equals("times")) { - opcode = Opcodes.IMUL; - } - else { - throw new UnsupportedOperationException("Don't know how to generate binary op method " + op.getName()); - } + int opcode = opcodeForMethod(op.getName()); generateBinaryOp(expression, (FunctionDescriptor) op, opcode); } return; @@ -502,6 +493,19 @@ public class ExpressionCodegen extends JetVisitor { throw new UnsupportedOperationException("Don't know how to generate binary op " + expression); } + private static int opcodeForMethod(final String name) { + if (name.equals("plus")) { + return Opcodes.IADD; + } + if (name.equals("minus")) { + return Opcodes.ISUB; + } + if (name.equals("times")) { + return Opcodes.IMUL; + } + throw new UnsupportedOperationException("Don't know how to generate binary op method " + name); + } + private void generateBinaryOp(JetBinaryExpression expression, FunctionDescriptor op, int opcode) { JetType returnType = op.getUnsubstitutedReturnType(); if (returnType.equals(stdlib.getIntType())) { diff --git a/idea/testData/codegen/continue.jet b/idea/testData/codegen/continue.jet new file mode 100644 index 00000000000..6716e7ef20b --- /dev/null +++ b/idea/testData/codegen/continue.jet @@ -0,0 +1,10 @@ +fun continue_test(i: Int): Int { + var count = i; + var result = 0; + while(count > 0) { + count = count - 1; + if (count <= 2) continue; + result = result + count; + } + return result; +} diff --git a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java index 05912f28602..6d436eac0a7 100644 --- a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java @@ -163,6 +163,14 @@ public class NamespaceGenTest extends LightCodeInsightFixtureTestCase { assertEquals(120, main.invoke(null, 5)); } + public void testContinue() throws Exception { + loadFile("continue.jet"); + System.out.println(generateToText()); + final Method main = generateFunction(); + assertEquals(3, main.invoke(null, 4)); + assertEquals(7, main.invoke(null, 5)); + } + private void loadFile(final String name) { myFixture.configureByFile(JetParsingTest.getTestDataDir() + "/codegen/" + name); }