From 50edc9750b35717817d68bd381adb397dd5341aa Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Fri, 18 Nov 2011 13:38:38 +0200 Subject: [PATCH] KT-535 no need in outer type info for class object --- .../jetbrains/jet/codegen/CodegenUtil.java | 2 +- .../codegen/ImplementationBodyCodegen.java | 2 +- .../testData/codegen/regressions/kt535.jet | 21 +++++++++++++++++++ .../jetbrains/jet/codegen/ObjectGenTest.java | 5 +++++ 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/regressions/kt535.jet diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index 01aa800f4e3..0aabf7ba086 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -101,7 +101,7 @@ public class CodegenUtil { } ClassDescriptor outerClassDescriptor = getOuterClassDescriptor(type.getConstructor().getDeclarationDescriptor()); - if(outerClassDescriptor == null) + if(outerClassDescriptor == null || isClassObject(type.getConstructor().getDeclarationDescriptor())) return false; return hasTypeInfoField(outerClassDescriptor.getDefaultType()); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 22567a68d40..53f02d5bea2 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -869,7 +869,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { v.aconst(typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION)); v.iconst(0); ClassDescriptor outerClassDescriptor = CodegenUtil.getOuterClassDescriptor(descriptor); - if(outerClassDescriptor == null) { + if(outerClassDescriptor == null || CodegenUtil.isClassObject(descriptor)) { v.invokestatic("jet/typeinfo/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z)Ljet/typeinfo/TypeInfo;"); } else { diff --git a/compiler/testData/codegen/regressions/kt535.jet b/compiler/testData/codegen/regressions/kt535.jet new file mode 100644 index 00000000000..575fd476bf4 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt535.jet @@ -0,0 +1,21 @@ +class Identifier(t : T?, myHasDollar : Boolean) { + private val myT : T? + + public fun getName() : T? { return myT } + + class object { + open public fun init(name : T?) : Identifier { + val __ = Identifier(name, false) + return __ + } + } + { + $myT = t + } +} + +fun box() : String { + var i3 : Identifier? = Identifier.init("name") + System.out?.println(i3?.getName()) + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/ObjectGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/ObjectGenTest.java index 9980b8c9fae..d545b6422e6 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ObjectGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ObjectGenTest.java @@ -2,6 +2,7 @@ package org.jetbrains.jet.codegen; /** * @author yole + * @author alex.tkachman */ public class ObjectGenTest extends CodegenTestCase { public void testSimpleObject() throws Exception { @@ -16,4 +17,8 @@ public class ObjectGenTest extends CodegenTestCase { public void testMethodOnObject() throws Exception { blackBoxFile("objects/methodOnObject.jet"); } + + public void testKt535() throws Exception { + blackBoxFile("regressions/kt535.jet"); + } }