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
@@ -0,0 +1,18 @@
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class CoroutineContextIntrinsicKt$notTailCall$1 {
field label: int
synthetic field result: java.lang.Object
inner class CoroutineContextIntrinsicKt$notTailCall$1
method <init>(p0: 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 CoroutineContextIntrinsicKt {
inner class CoroutineContextIntrinsicKt$notTailCall$1
public final static @org.jetbrains.annotations.Nullable method mustBeTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method notTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method retrieveCoroutineContext(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.CoroutineContext, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@@ -1,5 +1,5 @@
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class Controller$multipleSuspensions$1 {
field L$0: java.lang.Object
field label: int
@@ -10,8 +10,8 @@ final class Controller$multipleSuspensions$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 Controller$nonTailCall$1 {
field L$0: java.lang.Object
field label: int
@@ -0,0 +1,17 @@
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class OomInReturnUnitKt$test$1 {
field L$0: java.lang.Object
field label: int
synthetic field result: java.lang.Object
inner class OomInReturnUnitKt$test$1
method <init>(p0: 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 OomInReturnUnitKt {
inner class OomInReturnUnitKt$test$1
public final static @org.jetbrains.annotations.Nullable method some(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method test(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
}
@@ -150,57 +150,6 @@ public final class TcoContinuationKt$map$$inlined$transform$1 {
public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class TcoContinuationKt$map$$inlined$transform$2$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$map$$inlined$transform$2
inner class TcoContinuationKt$map$$inlined$transform$2
inner class TcoContinuationKt$map$$inlined$transform$2$1
public method <init>(p0: TcoContinuationKt$map$$inlined$transform$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
@kotlin.coroutines.jvm.internal.DebugMetadata
public final class TcoContinuationKt$map$$inlined$transform$2$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: TcoContinuationKt$map$$inlined$transform$2$2
inner class TcoContinuationKt$map$$inlined$transform$2$2
inner class TcoContinuationKt$map$$inlined$transform$2$2$1
public method <init>(p0: TcoContinuationKt$map$$inlined$transform$2$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 TcoContinuationKt$map$$inlined$transform$2$2 {
synthetic final field $this$inlined: FlowCollector
synthetic final field $transformer$inlined$1: kotlin.jvm.functions.Function2
inner class TcoContinuationKt$map$$inlined$transform$2$2
inner class TcoContinuationKt$map$$inlined$transform$2$2$1
public method <init>(p0: FlowCollector, p1: kotlin.jvm.functions.Function2): void
public @org.jetbrains.annotations.Nullable method emit$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class TcoContinuationKt$map$$inlined$transform$2 {
synthetic final field $this$inlined: Flow
synthetic final field $transformer$inlined$1: kotlin.jvm.functions.Function2
inner class TcoContinuationKt$map$$inlined$transform$2
inner class TcoContinuationKt$map$$inlined$transform$2$1
public method <init>(p0: Flow, p1: kotlin.jvm.functions.Function2): void
public @org.jetbrains.annotations.Nullable method collect$$forInline(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class TcoContinuationKt$transform$$inlined$flow$1$1 {
field label: int
@@ -223,50 +172,6 @@ public final class TcoContinuationKt$transform$$inlined$flow$1 {
public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class TcoContinuationKt$transform$$inlined$flow$2$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$2
inner class TcoContinuationKt$transform$$inlined$flow$2
inner class TcoContinuationKt$transform$$inlined$flow$2$1
public method <init>(p0: TcoContinuationKt$transform$$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 TcoContinuationKt$transform$$inlined$flow$2 {
synthetic final field $this$inlined: Flow
synthetic final field $transformer$inlined: kotlin.jvm.functions.Function3
inner class TcoContinuationKt$transform$$inlined$flow$2
inner class TcoContinuationKt$transform$$inlined$flow$2$1
public method <init>(p0: Flow, p1: kotlin.jvm.functions.Function3): void
public @org.jetbrains.annotations.Nullable method collect$$forInline(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class TcoContinuationKt$transform$$inlined$flow$3$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$3
inner class TcoContinuationKt$transform$$inlined$flow$3
inner class TcoContinuationKt$transform$$inlined$flow$3$1
public method <init>(p0: TcoContinuationKt$transform$$inlined$flow$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 TcoContinuationKt$transform$$inlined$flow$3 {
synthetic final field $this$inlined: Flow
synthetic final field $transformer$inlined: kotlin.jvm.functions.Function3
inner class TcoContinuationKt$transform$$inlined$flow$3
inner class TcoContinuationKt$transform$$inlined$flow$3$1
public method <init>(p0: Flow, p1: kotlin.jvm.functions.Function3): void
public @org.jetbrains.annotations.Nullable method collect$$forInline(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class TcoContinuationKt$transform$lambda-1$$inlined$collect$1$1 {
field label: int
@@ -289,50 +194,6 @@ public final class TcoContinuationKt$transform$lambda-1$$inlined$collect$1 {
public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class TcoContinuationKt$transform$lambda-1$$inlined$collect$2$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$transform$lambda-1$$inlined$collect$2
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$2
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$2$1
public method <init>(p0: TcoContinuationKt$transform$lambda-1$$inlined$collect$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 TcoContinuationKt$transform$lambda-1$$inlined$collect$2 {
synthetic final field $this$inlined: FlowCollector
synthetic final field $transformer$inlined: kotlin.jvm.functions.Function3
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$2
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$2$1
public method <init>(p0: kotlin.jvm.functions.Function3, p1: FlowCollector): void
public @org.jetbrains.annotations.Nullable method emit$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class TcoContinuationKt$transform$lambda-1$$inlined$collect$3$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$transform$lambda-1$$inlined$collect$3
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$3
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$3$1
public method <init>(p0: TcoContinuationKt$transform$lambda-1$$inlined$collect$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 TcoContinuationKt$transform$lambda-1$$inlined$collect$3 {
synthetic final field $this$inlined: FlowCollector
synthetic final field $transformer$inlined: kotlin.jvm.functions.Function3
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$3
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$3$1
public method <init>(p0: kotlin.jvm.functions.Function3, p1: FlowCollector): void
public @org.jetbrains.annotations.Nullable method emit$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class TcoContinuationKt {
inner class TcoContinuationKt$collect$2