Do not regenerate objects if all captured lambdas are noinline

This commit is contained in:
pyos
2020-03-18 17:51:30 +01:00
committed by max-kammerer
parent 54e725668f
commit e0a5ab7146
3 changed files with 70 additions and 70 deletions
@@ -97,9 +97,9 @@ class AnonymousObjectTransformationInfo internal constructor(
nameGenerator: NameGenerator
) : this(ownerInternalName, needReification, hashMapOf(), false, alreadyRegenerated, null, isStaticOrigin, nameGenerator)
override fun shouldRegenerate(sameModule: Boolean): Boolean =
!alreadyRegenerated &&
(!functionalArguments.isEmpty() || !sameModule || capturedOuterRegenerated || needReification || capturesAnonymousObjectThatMustBeRegenerated)
override fun shouldRegenerate(sameModule: Boolean): Boolean = !alreadyRegenerated &&
(!sameModule || capturedOuterRegenerated || needReification || capturesAnonymousObjectThatMustBeRegenerated ||
functionalArguments.values.any { it != NonInlineableArgumentForInlineableParameterCalledInSuspend })
override fun canRemoveAfterTransformation(): Boolean {
// Note: It is unsafe to remove anonymous class that is referenced by GETSTATIC within lambda
@@ -661,7 +661,7 @@ class LocalDeclarationsLowering(
localFunctionContext.remapType(p.type),
null,
isCrossinline = (capturedValue as? IrValueParameterSymbol)?.owner?.isCrossinline == true,
isNoinline = false
isNoinline = (capturedValue as? IrValueParameterSymbol)?.owner?.isNoinline == true
).also {
parameterDescriptor.bind(it)
it.parent = newDeclaration
@@ -212,28 +212,6 @@ public final class TcoContinuationKt$transform$$inlined$flow$1$1 {
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$1$lambda$1$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$1$lambda$1
inner class TcoContinuationKt$transform$$inlined$flow$1$lambda$1
inner class TcoContinuationKt$transform$$inlined$flow$1$lambda$1$1
public method <init>(p0: TcoContinuationKt$transform$$inlined$flow$1$lambda$1, 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$1$lambda$1 {
synthetic final field $this$inlined: FlowCollector
synthetic final field $transformer$inlined: kotlin.jvm.functions.Function3
inner class TcoContinuationKt$transform$$inlined$flow$1$lambda$1
inner class TcoContinuationKt$transform$$inlined$flow$1$lambda$1$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$$inlined$flow$1 {
synthetic final field $this$inlined: Flow
@@ -256,28 +234,6 @@ public final class TcoContinuationKt$transform$$inlined$flow$2$1 {
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$lambda$1$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$2$lambda$1
inner class TcoContinuationKt$transform$$inlined$flow$2$lambda$1
inner class TcoContinuationKt$transform$$inlined$flow$2$lambda$1$1
public method <init>(p0: TcoContinuationKt$transform$$inlined$flow$2$lambda$1, 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$lambda$1 {
synthetic final field $this$inlined: FlowCollector
synthetic final field $transformer$inlined: kotlin.jvm.functions.Function3
inner class TcoContinuationKt$transform$$inlined$flow$2$lambda$1
inner class TcoContinuationKt$transform$$inlined$flow$2$lambda$1$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$$inlined$flow$2 {
synthetic final field $this$inlined: Flow
@@ -300,28 +256,6 @@ public final class TcoContinuationKt$transform$$inlined$flow$3$1 {
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$lambda$1$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$3$lambda$1
inner class TcoContinuationKt$transform$$inlined$flow$3$lambda$1
inner class TcoContinuationKt$transform$$inlined$flow$3$lambda$1$1
public method <init>(p0: TcoContinuationKt$transform$$inlined$flow$3$lambda$1, 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$lambda$1 {
synthetic final field $this$inlined: FlowCollector
synthetic final field $transformer$inlined: kotlin.jvm.functions.Function3
inner class TcoContinuationKt$transform$$inlined$flow$3$lambda$1
inner class TcoContinuationKt$transform$$inlined$flow$3$lambda$1$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$$inlined$flow$3 {
synthetic final field $this$inlined: Flow
@@ -333,6 +267,72 @@ public final class TcoContinuationKt$transform$$inlined$flow$3 {
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
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$transform$lambda-1$$inlined$collect$1
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$1
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$1$1
public method <init>(p0: TcoContinuationKt$transform$lambda-1$$inlined$collect$1, 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$1 {
synthetic final field $this$inlined: FlowCollector
synthetic final field $transformer$inlined: kotlin.jvm.functions.Function3
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$1
inner class TcoContinuationKt$transform$lambda-1$$inlined$collect$1$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$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