JVM_IR: reuse MethodNodes for inline functions in same module

This fixes the weird cases when a class gets overwritten by an imperfect
copy, reduces the number of classes in the output if an inline function
contains an inline call that causes it to have regenerated anonymous
objects, and makes inlining of same module functions a bit faster in
general. On the other hand, this may increase memory footprint a bit
because classes cannot be flushed to the output jar, as the inliner
would not be able to locate classes for anonymous objects if they have
already been unloaded from memory.
This commit is contained in:
pyos
2020-02-03 16:01:26 +01:00
committed by max-kammerer
parent 97be5617ca
commit 82899e6243
26 changed files with 170 additions and 450 deletions
@@ -127,35 +127,6 @@ public final class CrossinlineKt$filter$$inlined$source$1 {
public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$filter$$inlined$source$2$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
field L$3: java.lang.Object
field L$4: java.lang.Object
field L$5: java.lang.Object
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: CrossinlineKt$filter$$inlined$source$2
inner class CrossinlineKt$filter$$inlined$source$2
inner class CrossinlineKt$filter$$inlined$source$2$1
public method <init>(p0: CrossinlineKt$filter$$inlined$source$2, p1: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class CrossinlineKt$filter$$inlined$source$2 {
synthetic final field $predicate$inlined: kotlin.jvm.functions.Function1
synthetic final field $this$inlined: SourceCrossinline
inner class CrossinlineKt$filter$$inlined$source$2
inner class CrossinlineKt$filter$$inlined$source$2$1
public method <init>(p0: SourceCrossinline, p1: kotlin.jvm.functions.Function1): void
public @org.jetbrains.annotations.Nullable method consume$$forInline(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1$1 {
@@ -183,33 +154,6 @@ public final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1 {
public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2
inner class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2
inner class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2$1
public method <init>(p0: CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2, p1: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2 {
synthetic final field $predicate$inlined: kotlin.jvm.functions.Function1
synthetic final field $this$inlined: Sink
inner class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2
inner class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2$1
public method <init>(p0: kotlin.jvm.functions.Function1, p1: Sink): void
public method close(@org.jetbrains.annotations.Nullable p0: java.lang.Throwable): void
public @org.jetbrains.annotations.Nullable method send$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$fold$$inlined$consumeEach$1$1 {
@@ -238,64 +182,8 @@ public final class CrossinlineKt$fold$$inlined$consumeEach$1 {
public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$fold$$inlined$consumeEach$2$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
field L$3: java.lang.Object
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: CrossinlineKt$fold$$inlined$consumeEach$2
inner class CrossinlineKt$fold$$inlined$consumeEach$2
inner class CrossinlineKt$fold$$inlined$consumeEach$2$1
public method <init>(p0: CrossinlineKt$fold$$inlined$consumeEach$2, p1: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class CrossinlineKt$fold$$inlined$consumeEach$2 {
synthetic final field $acc$inlined: kotlin.jvm.internal.Ref$ObjectRef
synthetic final field $operation$inlined: kotlin.jvm.functions.Function3
inner class CrossinlineKt$fold$$inlined$consumeEach$2
inner class CrossinlineKt$fold$$inlined$consumeEach$2$1
public method <init>(p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.jvm.functions.Function3): void
public method close(@org.jetbrains.annotations.Nullable p0: java.lang.Throwable): void
public @org.jetbrains.annotations.Nullable method send$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$fold$$inlined$consumeEach$3$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
field L$3: java.lang.Object
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: CrossinlineKt$fold$$inlined$consumeEach$3
inner class CrossinlineKt$fold$$inlined$consumeEach$3
inner class CrossinlineKt$fold$$inlined$consumeEach$3$1
public method <init>(p0: CrossinlineKt$fold$$inlined$consumeEach$3, p1: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class CrossinlineKt$fold$$inlined$consumeEach$3 {
synthetic final field $acc$inlined: kotlin.jvm.internal.Ref$ObjectRef
synthetic final field $operation$inlined: kotlin.jvm.functions.Function3
inner class CrossinlineKt$fold$$inlined$consumeEach$3
inner class CrossinlineKt$fold$$inlined$consumeEach$3$1
public method <init>(p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.jvm.functions.Function3): void
public method close(@org.jetbrains.annotations.Nullable p0: java.lang.Throwable): void
public @org.jetbrains.annotations.Nullable method send$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$fold$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
@@ -338,8 +226,8 @@ public final class CrossinlineKt$range$$inlined$source$1 {
public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
public final class CrossinlineKt$source$1$consume$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
@@ -12,8 +12,8 @@ final class InlineWithoutStateMachineKt$box$1 {
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class InlineWithoutStateMachineKt$complexSuspend$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
@@ -41,8 +41,8 @@ public final class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1
public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: flow.FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class flow/InnerObjectRetransformationKt$check$1 {
field L$0: java.lang.Object
field label: int
@@ -116,28 +116,6 @@ public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1 {
public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: flow.FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: flow.InnerObjectRetransformationKt$flowWith$$inlined$flow$2
inner class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2
inner class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2$1
public method <init>(p0: flow.InnerObjectRetransformationKt$flowWith$$inlined$flow$2, p1: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2 {
synthetic final field $builderBlock$inlined: kotlin.jvm.functions.Function2
synthetic final field $this$inlined: flow.Flow
inner class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2
inner class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2$1
public method <init>(p0: kotlin.jvm.functions.Function2, p1: flow.Flow): void
public @org.jetbrains.annotations.Nullable method collect$$forInline(@org.jetbrains.annotations.NotNull p0: flow.FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: flow.FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class flow/InnerObjectRetransformationKt {
inner class flow/InnerObjectRetransformationKt$box$1
@@ -22,8 +22,8 @@ final class Override5Kt$box$1 {
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
public final class Override5Kt$inlineMe$1$generic$1 {
field L$0: java.lang.Object
field label: int
@@ -0,0 +1,14 @@
var lambda: (() -> String)? = null
fun f() {
try {
return
} finally {
lambda = { "OK" }
}
}
fun box(): String {
f()
return lambda?.let { it() } ?: "fail"
}