JVM IR: support optimized callable reference superclasses

See KT-27362.

 #KT-37334 Fixed
This commit is contained in:
Alexander Udalov
2020-03-31 22:04:18 +02:00
parent bb1a12e28e
commit 774fc32f3e
7 changed files with 200 additions and 100 deletions
@@ -1,6 +1,4 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND_FIR: JVM_IR
// IGNORE_BACKEND: JVM_IR
// WITH_RUNTIME
class A {
@@ -9,6 +7,8 @@ class A {
}
val topLevelProperty: Int = 0
fun A.extensionFunction() {}
val A.extensionProperty: String get() = ""
fun check(reference: Any, expected: String, message: String) {
val actual = reference.javaClass.declaredMethods.map { it.name }.sorted().toString()
@@ -21,9 +21,11 @@ fun box(): String {
check(A::memberFunction, "[invoke, invoke]", "unbound function reference")
check(A()::memberFunction, "[invoke, invoke]", "bound function reference")
check(::topLevelProperty, "[get]", "unbound property reference 0")
check(A::memberProperty, "[get]", "unbound property reference 1")
check(A()::memberProperty, "[get]", "bound property reference 1")
check(::topLevelProperty, "[get]", "unbound top-level property reference 0")
check(A::memberProperty, "[get]", "unbound member property reference 1")
check(A()::memberProperty, "[get]", "bound member property reference 1")
check(A::extensionProperty, "[get]", "unbound extension property reference 1")
check(A()::extensionProperty, "[get]", "bound extension property reference 1")
return "OK"
}