JVM_IR KT-45103 optimize direct invoke for lambdas and callable refs
This commit is contained in:
committed by
teamcityserver
parent
bfb1a06f3d
commit
851980e36f
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
Vendored
+6
-1
@@ -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
@@ -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
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user