JVM IR: Turn static callable references into singletons

This commit is contained in:
Steven Schäfer
2020-03-05 11:35:51 +01:00
committed by Dmitry Petrov
parent ac5c255c20
commit bb5a639153
9 changed files with 196 additions and 10 deletions
@@ -0,0 +1,22 @@
// TARGET_BACKEND: JVM
var capturedRef: ((Int) -> Int)? = null
fun ref(x: Int) = x
fun updateCapturedRef(): Boolean {
val r = ::ref
if (capturedRef == null) {
capturedRef = r
} else if (capturedRef !== r) {
return false
}
return true
}
fun box(): String {
updateCapturedRef()
if (!updateCapturedRef())
return "FAIL"
return "OK"
}
+20
View File
@@ -0,0 +1,20 @@
// TARGET_BACKEND: JVM
var capturedLambda: ((Int) -> Int)? = null
fun captureLambda(): Boolean {
val lambda = { x: Int -> x + 1 }
if (capturedLambda == null) {
capturedLambda = lambda
} else if (capturedLambda !== lambda) {
return false
}
return true
}
fun box(): String {
captureLambda()
if (!captureLambda())
return "FAIL"
return "OK"
}
@@ -3,19 +3,10 @@ public interface Base {
public abstract @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class Override5Kt$box$1$invokeSuspend$$inlined$inlineMe$1$2 {
inner class Override5Kt$box$1$invokeSuspend$$inlined$inlineMe$1
inner class Override5Kt$box$1$invokeSuspend$$inlined$inlineMe$1$2
public method <init>(): void
public synthetic bridge @org.jetbrains.annotations.Nullable method invoke(): java.lang.Object
public final method invoke(): void
}
@kotlin.Metadata
public final class Override5Kt$box$1$invokeSuspend$$inlined$inlineMe$1 {
inner class Override5Kt$box$1$invokeSuspend$$inlined$inlineMe$1
inner class Override5Kt$box$1$invokeSuspend$$inlined$inlineMe$1$2
inner class Override5Kt$inlineMe$1$generic$2
public method <init>(): void
public @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
}
@@ -46,8 +37,10 @@ public final class Override5Kt$inlineMe$1$generic$1 {
@kotlin.Metadata
public final class Override5Kt$inlineMe$1$generic$2 {
public final static @org.jetbrains.annotations.NotNull field INSTANCE: Override5Kt$inlineMe$1$generic$2
inner class Override5Kt$inlineMe$1
inner class Override5Kt$inlineMe$1$generic$2
static method <clinit>(): void
public method <init>(): void
public synthetic bridge @org.jetbrains.annotations.Nullable method invoke(): java.lang.Object
public final method invoke(): void