Support unbound callable function references in inliner

This commit is contained in:
Mikhael Bogdanov
2019-05-22 15:06:05 +02:00
parent 0b59d0b416
commit 3c093f321d
13 changed files with 326 additions and 16 deletions

View File

@@ -0,0 +1,18 @@
// IGNORE_BACKEND: JVM_IR
// FILE: JClass.java
public class JClass {
public int field;
}
// FILE: main.kt
fun box(): String {
return if (call(10, JClass()::field) == 5) "OK" else "fail"
}
inline fun call(p: Int, s: () -> Int): Int {
return s()
}
// 1 NEW JClass
// 1 NEW

View File

@@ -0,0 +1,17 @@
// IGNORE_BACKEND: JVM_IR
fun box(): String {
return if (call(10, A()::calc) == 5) "OK" else "fail"
}
class A {
fun calc(p: Int): Int {
return p / 2
}
}
inline fun call(p: Int, s: (Int) -> Int): Int {
return s(p)
}
// 1 NEW A
// 1 NEW

View File

@@ -0,0 +1,16 @@
// IGNORE_BACKEND: JVM_IR
fun box(): String {
return if (call(A(10)::calc) == 5) "OK" else "fail"
}
class A(val p: Int) {
val calc: Int
get() = p / 2
}
inline fun call( s: () -> Int): Int {
return s()
}
// 1 NEW A
// 1 NEW

View File

@@ -0,0 +1,16 @@
// FILE: JClass.java
public class JClass {
public static int field;
}
// FILE: main.kt
fun box(): String {
return if (call(10, JClass::field) == 5) "OK" else "fail"
}
inline fun call(p: Int, s: () -> Int): Int {
return s()
}
// 0 NEW

View File

@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
fun box(): String {
return if (call(10, ::calc) == 5) "OK" else "fail"
}

View File

@@ -0,0 +1,12 @@
fun box(): String {
return if (call(10, Int::calc) == 5) "OK" else "fail"
}
val Int.calc: Int
get() = this / 2
inline fun call(p: Int, s: (Int) -> Int): Int {
return s(p)
}
// 0 NEW