KT-9670: optimize Class <-> KClass wrapping/unwrapping as a special case of boxing/unboxing.

NB doesn't work for arrays of classes.
This commit is contained in:
Dmitry Petrov
2016-03-03 16:12:05 +03:00
parent 2ecb8896cc
commit 3bbd8979e4
7 changed files with 135 additions and 30 deletions

View File

@@ -1,14 +1,18 @@
class Klass
fun foo() {
val c0 = (Klass::class).java // prevent intrinsic .java for class literal
val c1 = Klass::class.java
val c2 = Int::class.java
val c3 = Integer::class.java
// Even though no intrinsic is used,
// redundant boxing/unboxing optimizes out wrapping/unrapping java.lang.Class instances
val c0 = (Klass::class).java // LDC LKlass;.class
val c1 = Klass::class.java // LDC LKlass;.class
val c2 = Int::class.java // GETSTATIC java/lang/Integer.TYPE
val c3 = Integer::class.java // LDC Ljava/lang/Integer;.class
}
// 2 LDC LKlass;.class
// 1 GETSTATIC java/lang/Integer.TYPE : Ljava/lang/Class;
// 1 INVOKESTATIC kotlin/jvm.*\.getJava
// 0 INVOKESTATIC kotlin/jvm.*\.getJava
// 1 LDC Ljava/lang/Integer;.class