diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java index 9c6c34c8dd0..675ab801145 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -140,7 +140,7 @@ public class ClosureCodegen extends ObjectOrClosureCodegen { final Method constructor = generateConstructor(funClass, fun); if (captureThis) { - cv.newField(fun, 0, "this$0", enclosingType.getDescriptor(), null, null); + cv.newField(fun, ACC_FINAL, "this$0", enclosingType.getDescriptor(), null, null); } if(isConst()) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index d922e88cc3b..cf73bd81bff 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -593,7 +593,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { final Type type = typeMapper.mapType(outerDescriptor.getDefaultType(), OwnerKind.IMPLEMENTATION); String interfaceDesc = type.getDescriptor(); final String fieldName = "this$0"; - v.newField(myClass, ACC_PRIVATE | ACC_FINAL, fieldName, interfaceDesc, null, null); + v.newField(myClass, ACC_FINAL, fieldName, interfaceDesc, null, null); iv.load(0, classType); iv.load(frameMap.getOuterThisIndex(), type); iv.putfield(classname, fieldName, interfaceDesc); diff --git a/compiler/testData/codegen/regressions/kt1413.kt b/compiler/testData/codegen/regressions/kt1413.kt new file mode 100644 index 00000000000..dd2f68ceb40 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt1413.kt @@ -0,0 +1,26 @@ +package t + +trait I{ + fun f() +} + +class Test{ + fun foo(){ + val i : I = object : I { + override fun f() { + fun local(){ + bar() + } + local() + } + } + i.f() + } + + fun bar(){} +} + +fun box() : String { + Test().foo() + 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 5f2f4913a32..1d2fbac51cd 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java @@ -86,6 +86,10 @@ public class FunctionGenTest extends CodegenTestCase { blackBoxFile("regressions/kt873.kt"); } + public void testKt1413 () { + blackBoxFile("regressions/kt1413.kt"); + } + public void testKt1199 () { blackBoxFile("regressions/kt1199.kt"); }