JVM_IR: generate instance fields even when reification is needed

The inliner supports that, we just need to generate the reification
markers on GETFIELD to instance fields.
This commit is contained in:
pyos
2021-07-05 13:44:22 +02:00
committed by max-kammerer
parent c01c356817
commit a15a5aa429
17 changed files with 146 additions and 96 deletions
@@ -0,0 +1,18 @@
// CHECK_BYTECODE_LISTING
// FILE: 1.kt
package test
inline fun <reified U> bar() = U::class.simpleName!!
inline fun <reified T> foo(): String {
val x = { bar<Array<T>>() }
return x()
}
// FILE: 2.kt
import test.*
fun box(): String {
val result = foo<Int>()
return if (result == "Array") "OK" else result
}
@@ -0,0 +1,37 @@
@kotlin.Metadata
public final class _2Kt$box$$inlined$foo$1 {
// source: '1.kt'
enclosing method _2Kt.box()Ljava/lang/String;
public final static field INSTANCE: _2Kt$box$$inlined$foo$1
inner (anonymous) class _2Kt$box$$inlined$foo$1
static method <clinit>(): void
public method <init>(): void
public synthetic bridge method invoke(): java.lang.Object
public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
}
@kotlin.Metadata
public final class _2Kt {
// source: '2.kt'
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
}
@kotlin.Metadata
public final class test/_1Kt$foo$x$1 {
// source: '1.kt'
enclosing method test/_1Kt.foo()Ljava/lang/String;
public final static field INSTANCE: test._1Kt$foo$x$1
inner (anonymous) class test/_1Kt$foo$x$1
static method <clinit>(): void
public method <init>(): void
public synthetic bridge method invoke(): java.lang.Object
public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
}
@kotlin.Metadata
public final class test/_1Kt {
// source: '1.kt'
inner (anonymous) class test/_1Kt$foo$x$1
public synthetic final static method bar(): java.lang.String
public synthetic final static method foo(): java.lang.String
}