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,6 +1,8 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class My {
|
||||
val my: String = "O"
|
||||
get() = { field }() + "K"
|
||||
get() = eval { field } + "K"
|
||||
}
|
||||
|
||||
fun box() = My().my
|
||||
@@ -1,6 +1,8 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class My {
|
||||
var my: String = "U"
|
||||
get() = { field }()
|
||||
get() = eval { field }
|
||||
set(arg) {
|
||||
class Local {
|
||||
fun foo() {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class My {
|
||||
val my: String = "O"
|
||||
get() = { { field }() }() + "K"
|
||||
get() = eval { eval { field } } + "K"
|
||||
}
|
||||
|
||||
fun box() = My().my
|
||||
+3
-1
@@ -1,6 +1,8 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class My {
|
||||
val my: String = "O"
|
||||
get() = { { { field }() }() }() + "K"
|
||||
get() = eval { eval { eval { field } } } + "K"
|
||||
}
|
||||
|
||||
fun box() = My().my
|
||||
@@ -1,7 +1,9 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class My {
|
||||
companion object {
|
||||
val my: String = "O"
|
||||
get() = { field }() + "K"
|
||||
get() = eval { field } + "K"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -1,7 +1,9 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class My {
|
||||
companion object {
|
||||
private val my: String = "O"
|
||||
get() = { field }() + "K"
|
||||
get() = eval { field } + "K"
|
||||
|
||||
fun getValue() = my
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
val my: String = "O"
|
||||
get() = { field }() + "K"
|
||||
get() = eval { field } + "K"
|
||||
|
||||
fun box() = my
|
||||
|
||||
+3
-1
@@ -1,3 +1,5 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class IntentionsBundle {
|
||||
companion object {
|
||||
fun message(key: String): String {
|
||||
@@ -5,7 +7,7 @@ class IntentionsBundle {
|
||||
}
|
||||
|
||||
fun message2(key: String): String {
|
||||
return { key + BUNDLE }()
|
||||
return eval { key + BUNDLE }
|
||||
}
|
||||
|
||||
private const val BUNDLE = "K"
|
||||
|
||||
+4
-6
@@ -1,3 +1,5 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class A {
|
||||
|
||||
var result: Int = 0;
|
||||
@@ -12,15 +14,11 @@ class A {
|
||||
}
|
||||
|
||||
fun test(p: Int):Int {
|
||||
return {
|
||||
p.times3
|
||||
}()
|
||||
return eval { p.times3 }
|
||||
}
|
||||
|
||||
fun test2(p: Int, s: Int):Int {
|
||||
{
|
||||
p.times = s
|
||||
}()
|
||||
eval { p.times = s }
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -1,10 +1,12 @@
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class A {
|
||||
public var prop = "OK"
|
||||
private set
|
||||
|
||||
|
||||
fun test(): String {
|
||||
return { prop }()
|
||||
return eval { prop }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -1,5 +1,7 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
public class A {
|
||||
fun getFromClass(): Boolean {
|
||||
try {
|
||||
@@ -12,7 +14,7 @@ public class A {
|
||||
|
||||
fun getFromLambda(): Boolean {
|
||||
try {
|
||||
val a = { str }()
|
||||
val a = eval { str }
|
||||
return false
|
||||
} catch (e: RuntimeException) {
|
||||
return true
|
||||
|
||||
Vendored
+3
-1
@@ -1,10 +1,12 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class Foo {
|
||||
private lateinit var foo: String
|
||||
|
||||
fun test(): Boolean {
|
||||
val result = { ::foo.isInitialized }()
|
||||
val result = eval { ::foo.isInitialized }
|
||||
foo = ""
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -13,9 +13,11 @@ public class D {
|
||||
|
||||
import test.D
|
||||
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
class A : D() {
|
||||
fun a(): String {
|
||||
return {field!!}()
|
||||
return eval { field!! }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user