From 6517a82ee126b0879b41a732d202a6b68cce0856 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Sun, 29 May 2011 19:21:24 +0400 Subject: [PATCH] generate initializer blocks --- .../jet/codegen/ImplementationBodyCodegen.java | 4 ++++ idea/testData/codegen/classes/initializerBlock.jet | 13 +++++++++++++ .../org/jetbrains/jet/codegen/ClassGenTest.java | 4 ++++ 3 files changed, 21 insertions(+) create mode 100644 idea/testData/codegen/classes/initializerBlock.jet diff --git a/idea/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/idea/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 3069f4eb04a..e2ff95fafad 100644 --- a/idea/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -124,6 +124,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { if (kind == OwnerKind.DELEGATING_IMPLEMENTATION) { String interfaceDesc = JetTypeMapper.jetInterfaceType(descriptor).getDescriptor(); v.visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_FINAL, "$this", interfaceDesc, /*TODO*/null, null); + iv.load(0, classType); iv.load(1, argTypes[0]); iv.putfield(classname, "$this", interfaceDesc); frameMap.enterTemp(); @@ -273,6 +274,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } } + else if (declaration instanceof JetClassInitializer) { + codegen.gen(((JetClassInitializer) declaration).getBody(), Type.VOID_TYPE); + } } } diff --git a/idea/testData/codegen/classes/initializerBlock.jet b/idea/testData/codegen/classes/initializerBlock.jet new file mode 100644 index 00000000000..5a5496d9fe6 --- /dev/null +++ b/idea/testData/codegen/classes/initializerBlock.jet @@ -0,0 +1,13 @@ +class C() { + public var f: Int + + { + f = 610 + } +} + +fun box(): String { + val c = new C() + if (c.f != 610) return "fail" + return "OK" +} diff --git a/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java b/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java index 25932d776f9..37f4737b4e1 100644 --- a/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java @@ -62,4 +62,8 @@ public class ClassGenTest extends CodegenTestCase { public void testInnerClass() throws Exception { blackBoxFile("classes/innerClass.jet"); } + + public void testInitializerBlock() throws Exception { + blackBoxFile("classes/initializerBlock.jet"); + } }