KT-27936 Generate InnerClasses attributes
This commit is contained in:
committed by
teamcity
parent
4a8eec8166
commit
18e61315f4
+5
@@ -9,4 +9,9 @@ fun box(): String {
|
||||
return x
|
||||
}
|
||||
|
||||
// JVM_TEMPLATES
|
||||
// 0 ObjectRef
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 2 ObjectRef
|
||||
// 1 INNERCLASS kotlin.jvm.internal.Ref\$ObjectRef kotlin.jvm.internal.Ref ObjectRef
|
||||
Vendored
+7
-2
@@ -1,5 +1,10 @@
|
||||
fun f() = IntArray(1) { run { return@IntArray 1 } }
|
||||
|
||||
// On JVM_IR, the return is an assignment to a captured var followed by
|
||||
// a non-local `break` from a `do ... while (false)`. The var should be optimized.
|
||||
// JVM_TEMPLATES
|
||||
// 0 IntRef
|
||||
|
||||
// On JVM_IR, the return is an assignment to a captured var followed by
|
||||
// a non-local `break` from a `do ... while (false)`. The var should be optimized, but InnerClasses attribute will be added anyway.
|
||||
// JVM_IR_TEMPLATES
|
||||
// 2 IntRef
|
||||
// 1 INNERCLASS kotlin.jvm.internal.Ref\$IntRef kotlin.jvm.internal.Ref IntRef
|
||||
@@ -0,0 +1,141 @@
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
|
||||
// FILE: classes.kt
|
||||
|
||||
public class A0 {
|
||||
public class B0 {
|
||||
public class C0 {
|
||||
public class D0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class A1 {
|
||||
public class B1 {
|
||||
public class C1 {
|
||||
public class D1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class A2 {
|
||||
public class B2 {
|
||||
public class C2 {
|
||||
public class D2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object A3 {
|
||||
interface B3 {
|
||||
interface C3 {
|
||||
interface D3
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class A4 {
|
||||
public class B4 {
|
||||
public class C4 {
|
||||
public class D4
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class A5 {
|
||||
public class B5 {
|
||||
public class C5 {
|
||||
public class D5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class A6 {
|
||||
public class B6 {
|
||||
public class C6 {
|
||||
public class D6
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Target(AnnotationTarget.VALUE_PARAMETER)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class ClassHolder(val value: kotlin.reflect.KClass<*>)
|
||||
|
||||
public class A7 {
|
||||
public class B7 {
|
||||
public class C7 {
|
||||
public class D7
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@JvmInline
|
||||
public value class A8(private val value: Int) {
|
||||
@JvmInline
|
||||
public value class B8(private val value: Int) {
|
||||
@JvmInline
|
||||
public value class C8(private val value: Int) {
|
||||
@JvmInline
|
||||
public value class D8(private val value: Int)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline fun <reified T> foo() = null
|
||||
|
||||
|
||||
// FILE: X.kt
|
||||
class X {
|
||||
fun f0(t: List<Array<Array<Thread.State>>>) {}
|
||||
fun f1(): A1.B1.C1? = null
|
||||
fun f2() {
|
||||
foo<A2.B2.C2>()
|
||||
}
|
||||
fun f3(x: Any): Any? = x as? A3.B3.C3
|
||||
fun f4(): String {
|
||||
val x = listOf<A4.B4.C4>()
|
||||
return x.toString()
|
||||
}
|
||||
|
||||
class Y {
|
||||
fun f5(): String {
|
||||
val x: A5.B5.C5? = null
|
||||
return x.toString()
|
||||
}
|
||||
fun f6(): A6.B6.C6? = null
|
||||
|
||||
fun f7(@ClassHolder(A7.B7.C7::class) x: Int) {}
|
||||
|
||||
fun f8() = A8.B8.C8::class.toString()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// @X.class:
|
||||
// 10 INNERCLASS
|
||||
// 1 INNERCLASS java.lang.Thread\$State java.lang.Thread State
|
||||
// 0 INNERCLASS A0\$B0 A0 B0
|
||||
// 0 INNERCLASS A0\$B0\$C0 A0\$B0 C0
|
||||
// 1 INNERCLASS A1\$B1 A1 B1
|
||||
// 1 INNERCLASS A1\$B1\$C1 A1\$B1 C1
|
||||
// 1 INNERCLASS A2\$B2 A2 B2
|
||||
// 1 INNERCLASS A2\$B2\$C2 A2\$B2 C2
|
||||
// 1 INNERCLASS A3\$B3 A3 B3
|
||||
// 1 INNERCLASS A3\$B3\$C3 A3\$B3 C3
|
||||
// 1 INNERCLASS A4\$B4 A4 B4
|
||||
// 1 INNERCLASS A4\$B4\$C4 A4\$B4 C4
|
||||
// 1 INNERCLASS X\$Y X Y
|
||||
|
||||
// @X$Y.class:
|
||||
// 9 INNERCLASS
|
||||
// 1 INNERCLASS X\$Y X Y
|
||||
// 1 INNERCLASS A5\$B5 A5 B5
|
||||
// 1 INNERCLASS A5\$B5\$C5 A5\$B5 C5
|
||||
// 1 INNERCLASS A6\$B6 A6 B6
|
||||
// 1 INNERCLASS A6\$B6\$C6 A6\$B6 C6
|
||||
// 1 INNERCLASS A7\$B7 A7 B7
|
||||
// 1 INNERCLASS A7\$B7\$C7 A7\$B7 C7
|
||||
// 1 INNERCLASS A8\$B8 A8 B8
|
||||
// 1 INNERCLASS A8\$B8\$C8 A8\$B8 C8
|
||||
+2
-1
@@ -27,6 +27,7 @@ inline fun test(s: () -> Unit) {
|
||||
// this behavior is equivalent to javac and seems to be correct.
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 5 INNERCLASS
|
||||
// 8 INNERCLASS
|
||||
// 3 INNERCLASS Kt10259Kt\$box\$1\$lam1\$1 null null
|
||||
// 2 INNERCLASS Kt10259Kt\$box\$1\$lam1\$1\$lam2\$1
|
||||
// 3 INNERCLASS kotlin.jvm.internal.Ref\$ObjectRef kotlin.jvm.internal.Ref ObjectRef
|
||||
|
||||
+10
-1
@@ -15,8 +15,17 @@ inline fun test(crossinline s: () -> Unit) {
|
||||
}.let { it() }
|
||||
}
|
||||
|
||||
// JVM_TEMPLATES
|
||||
// 3 INNERCLASS Kt10259_2Kt\$test\$1 null
|
||||
// 2 INNERCLASS Kt10259_2Kt\$test\$1\$1
|
||||
// 2 INNERCLASS Kt10259_2Kt\$box\$\$inlined\$test\$1\s
|
||||
// 2 INNERCLASS Kt10259_2Kt\$box\$\$inlined\$test\$1\$1
|
||||
// 9 INNERCLASS
|
||||
// 9 INNERCLASS
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 3 INNERCLASS Kt10259_2Kt\$test\$1 null
|
||||
// 2 INNERCLASS Kt10259_2Kt\$test\$1\$1
|
||||
// 2 INNERCLASS Kt10259_2Kt\$box\$\$inlined\$test\$1\s
|
||||
// 2 INNERCLASS Kt10259_2Kt\$box\$\$inlined\$test\$1\$1
|
||||
// 1 INNERCLASS kotlin.jvm.internal.Ref\$ObjectRef kotlin.jvm.internal.Ref ObjectRef
|
||||
// 10 INNERCLASS
|
||||
+2
-2
@@ -38,11 +38,11 @@ inline fun test(crossinline s: () -> Unit) {
|
||||
// this behavior is equivalent to javac and seems to be correct.
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 14 INNERCLASS
|
||||
// 17 INNERCLASS
|
||||
// 3 INNERCLASS Kt10259_3Kt\$box\$1\$lam1\$1 null null
|
||||
// 2 INNERCLASS Kt10259_3Kt\$box\$1\$lam1\$1\$lam2\$1 null null
|
||||
// 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1 null null
|
||||
// 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1\$1 null null
|
||||
// 3 INNERCLASS Kt10259_3Kt\$test\$1 null null
|
||||
// 2 INNERCLASS Kt10259_3Kt\$test\$1\$1 null null
|
||||
|
||||
// 3 INNERCLASS kotlin.jvm.internal.Ref\$ObjectRef kotlin.jvm.internal.Ref ObjectRef
|
||||
|
||||
Reference in New Issue
Block a user