From 3fd825d1a059ea99b7576cb985e9a75aae8bdc17 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Wed, 4 Jan 2012 14:29:21 +0200 Subject: [PATCH] KT-873 fixing wrong register calculations --- .../src/org/jetbrains/jet/codegen/ClosureCodegen.java | 7 +------ compiler/testData/codegen/regressions/kt873.kt | 11 +++++++++++ .../org/jetbrains/jet/codegen/FunctionGenTest.java | 4 ++++ 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 compiler/testData/codegen/regressions/kt873.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java index 5924096a787..138071c47b3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -256,28 +256,23 @@ public class ClosureCodegen extends ObjectOrClosureCodegen { iv.invokespecial(funClass, "", "(Ljet/TypeInfo;)V"); i = 1; - int k = 0; for (Type type : argTypes) { StackValue.local(0, JetTypeMapper.TYPE_OBJECT).put(JetTypeMapper.TYPE_OBJECT, iv); StackValue.local(i, type).put(type, iv); final String fieldName; if (captureThis && i == 1) { fieldName = "this$0"; - i++; - k++; } else { if (captureReceiver != null && (captureThis && i == 2 || !captureThis && i == 1)) { fieldName = "receiver$0"; - i++; - k++; } else { VariableDescriptor removed = variableDescriptors.remove(0); fieldName = "$" + removed.getName(); - i++; } } + i += type.getSize(); StackValue.field(type, name, fieldName, false).store(iv); } diff --git a/compiler/testData/codegen/regressions/kt873.kt b/compiler/testData/codegen/regressions/kt873.kt new file mode 100644 index 00000000000..ac84a948560 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt873.kt @@ -0,0 +1,11 @@ +fun box() : String { + val fps : Double = 1.dbl + var mspf : Long + { + if ((fps.int == 0)) + mspf = 0 + else + mspf = (((1000.0 / fps)).lng) + } + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java index 79a698d5140..7fcf625cc6f 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java @@ -41,6 +41,10 @@ public class FunctionGenTest extends CodegenTestCase { // blackBoxFile("regressions/kt785.jet"); } + public void testKt873 () { + blackBoxFile("regressions/kt873.kt"); + } + public void testFunction () throws InvocationTargetException, IllegalAccessException { blackBoxFile("functions/functionExpression.jet"); }