JVM IR: Turn static callable references into singletons
This commit is contained in:
committed by
Dmitry Petrov
parent
ac5c255c20
commit
bb5a639153
+22
@@ -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"
|
||||
}
|
||||
@@ -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
-10
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user