JVM_IR KT-45103 optimize direct invoke for lambdas and callable refs

This commit is contained in:
Dmitry Petrov
2021-04-26 17:17:25 +03:00
committed by teamcityserver
parent bfb1a06f3d
commit 851980e36f
124 changed files with 1340 additions and 324 deletions
@@ -1,5 +1,7 @@
fun <T> eval(fn: () -> T) = fn()
fun String.f(x: String): String {
fun String.g() = { this@f + this@g }()
fun String.g() = eval { this@f + this@g }
return x.g()
}
@@ -3,7 +3,12 @@ open class Base(val callback: () -> String)
class Outer {
val ok = "OK"
inner class Inner : Base({ { ok }() })
inner class Inner : Base(
{
val lambda = { ok }
lambda()
}
)
}
fun box(): String =
@@ -7,12 +7,14 @@
package test
val p = { "OK" }()
fun <T> eval(lambda: () -> T) = lambda()
val p = eval { "OK" }
val getter: String
get() = { "OK" }()
get() = eval { "OK" }
fun f() = { "OK" }()
fun f() = eval { "OK" }
val obj = object : Function0<String> {
override fun invoke() = "OK"
@@ -5,12 +5,14 @@
// TODO: muted automatically, investigate should it be ran for JS or not
// IGNORE_BACKEND: JS
val p = { "OK" }()
fun <T> eval(lambda: () -> T) = lambda()
val p = eval { "OK" }
val getter: String
get() = { "OK" }()
get() = eval { "OK" }
fun f() = { "OK" }()
fun f() = eval { "OK" }
val obj = object : Function0<String> {
override fun invoke() = "OK"
+4 -6
View File
@@ -12,9 +12,8 @@ class Example : JClass {
var result: String? = null
init {
{
result = obj?.test()
}()
val lambda = { result = obj?.test() }
lambda()
}
}
@@ -26,9 +25,8 @@ class Example2 : JClass {
var result: String? = null
init {
{
result = obj?.test()
}()
val lambda = { result = obj?.test() }
lambda()
}
}
+4 -2
View File
@@ -1,8 +1,10 @@
fun <T> eval(fn: () -> T) = fn()
class Foo(private val s: String) {
inner class Inner {
private val x = {
private val x = eval {
this@Foo.s
}()
}
}
val f = Inner()