JVM_IR: Generate fake continuations and their constructors as public

#KT-37093 Fixed
This commit is contained in:
Ilmir Usmanov
2020-03-04 16:51:43 +01:00
parent c94f8d3767
commit 354fb3c4ba
15 changed files with 414 additions and 54 deletions
@@ -174,7 +174,7 @@ open class FunctionCodegen(
val nativeFlag = if (irFunction.isExternal) Opcodes.ACC_NATIVE else 0
val syntheticFlag =
if (irFunction.origin.isSynthetic || irFunction.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) ||
(irFunction.isSuspend && irFunction.visibility == Visibilities.PRIVATE && !irFunction.isInline) ||
(irFunction.isSuspend && Visibilities.isPrivate(irFunction.visibility) && !irFunction.isInline) ||
irFunction.isReifiable()
) Opcodes.ACC_SYNTHETIC
else 0
@@ -389,11 +389,15 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
private fun generateContinuationClassForNamedFunction(
irFunction: IrFunction,
dispatchReceiverParameter: IrValueParameter?,
attributeContainer: IrAttributeContainer
attributeContainer: IrAttributeContainer,
capturesCrossinline: Boolean
): IrClass {
return context.ir.symbols.continuationImplClass.owner
.createContinuationClassFor(irFunction, JvmLoweredDeclarationOrigin.CONTINUATION_CLASS, JavaVisibilities.PACKAGE_VISIBILITY)
.apply {
.createContinuationClassFor(
irFunction,
JvmLoweredDeclarationOrigin.CONTINUATION_CLASS,
if (capturesCrossinline) Visibilities.PUBLIC else JavaVisibilities.PACKAGE_VISIBILITY
).apply {
copyTypeParametersFrom(irFunction)
val resultField = addField {
origin = JvmLoweredDeclarationOrigin.CONTINUATION_CLASS_RESULT_FIELD
@@ -411,7 +415,7 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
}
}
val labelField = addField(COROUTINE_LABEL_FIELD_NAME, context.irBuiltIns.intType, JavaVisibilities.PACKAGE_VISIBILITY)
addConstructorForNamedFunction(capturedThisField)
addConstructorForNamedFunction(capturedThisField, capturesCrossinline)
addInvokeSuspendForNamedFunction(
irFunction,
resultField,
@@ -423,10 +427,10 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
}
}
private fun IrClass.addConstructorForNamedFunction(capturedThisField: IrField?): IrConstructor = addConstructor {
private fun IrClass.addConstructorForNamedFunction(capturedThisField: IrField?, capturesCrossinline: Boolean): IrConstructor = addConstructor {
isPrimary = true
returnType = defaultType
visibility = JavaVisibilities.PACKAGE_VISIBILITY
visibility = if (capturesCrossinline) Visibilities.PUBLIC else JavaVisibilities.PACKAGE_VISIBILITY
}.also { constructor ->
val capturedThisParameter = capturedThisField?.let { constructor.addValueParameter(it.name.asString(), it.type) }
val completionParameterSymbol = constructor.addCompletionValueParameter()
@@ -586,7 +590,12 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
} else view
newFunction.body = context.createIrBuilder(newFunction.symbol).irBlockBody {
+generateContinuationClassForNamedFunction(newFunction, view.dispatchReceiverParameter, function)
+generateContinuationClassForNamedFunction(
newFunction,
view.dispatchReceiverParameter,
function as IrAttributeContainer,
flag.capturesCrossinline
)
for (statement in newFunction.body!!.statements) {
+statement
}
@@ -1,6 +1,6 @@
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 {
public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
@@ -12,13 +12,13 @@ final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 {
synthetic final field this$0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1
inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1
inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1
method <init>(p0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$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
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2$1 {
public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
@@ -27,7 +27,7 @@ final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2$1 {
synthetic final field this$0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2
inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2
inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2$1
method <init>(p0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$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
}
@@ -77,13 +77,13 @@ final class CrossinlineKt$box$1 {
}
@kotlin.Metadata
final class CrossinlineKt$consumeEach$2$send$1 {
public final class CrossinlineKt$consumeEach$2$send$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final @org.jetbrains.annotations.NotNull field this$0: CrossinlineKt$consumeEach$2
inner class CrossinlineKt$consumeEach$2
inner class CrossinlineKt$consumeEach$2$send$1
method <init>(p0: CrossinlineKt$consumeEach$2, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$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
}
@@ -100,7 +100,7 @@ public final class CrossinlineKt$consumeEach$2 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$filter$$inlined$source$1$1 {
public final class CrossinlineKt$filter$$inlined$source$1$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
@@ -112,7 +112,7 @@ final class CrossinlineKt$filter$$inlined$source$1$1 {
synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1
inner class CrossinlineKt$filter$$inlined$source$1
inner class CrossinlineKt$filter$$inlined$source$1$1
method <init>(p0: CrossinlineKt$filter$$inlined$source$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$filter$$inlined$source$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
}
@@ -129,7 +129,7 @@ public final class CrossinlineKt$filter$$inlined$source$1 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$filter$$inlined$source$2$1 {
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
@@ -141,7 +141,7 @@ final class CrossinlineKt$filter$$inlined$source$2$1 {
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
method <init>(p0: CrossinlineKt$filter$$inlined$source$2, p1: kotlin.coroutines.Continuation): void
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
}
@@ -158,7 +158,7 @@ public final class CrossinlineKt$filter$$inlined$source$2 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1$1 {
public final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
@@ -167,7 +167,7 @@ final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1$1 {
synthetic final field this$0: CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1
inner class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1
inner class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1$1
method <init>(p0: CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$filter$lambda-3$$inlined$consumeEach$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
}
@@ -185,7 +185,7 @@ public final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2$1 {
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
@@ -194,7 +194,7 @@ final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2$1 {
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
method <init>(p0: CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2, p1: kotlin.coroutines.Continuation): void
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
}
@@ -212,7 +212,7 @@ public final class CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$fold$$forInline$$inlined$consumeEach$1$1 {
public final class CrossinlineKt$fold$$forInline$$inlined$consumeEach$1$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
@@ -222,7 +222,7 @@ final class CrossinlineKt$fold$$forInline$$inlined$consumeEach$1$1 {
synthetic final field this$0: CrossinlineKt$fold$$forInline$$inlined$consumeEach$1
inner class CrossinlineKt$fold$$forInline$$inlined$consumeEach$1
inner class CrossinlineKt$fold$$forInline$$inlined$consumeEach$1$1
method <init>(p0: CrossinlineKt$fold$$forInline$$inlined$consumeEach$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$fold$$forInline$$inlined$consumeEach$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
}
@@ -240,7 +240,7 @@ public final class CrossinlineKt$fold$$forInline$$inlined$consumeEach$1 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$fold$$forInline$$inlined$consumeEach$2$1 {
public final class CrossinlineKt$fold$$forInline$$inlined$consumeEach$2$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
@@ -250,7 +250,7 @@ final class CrossinlineKt$fold$$forInline$$inlined$consumeEach$2$1 {
synthetic final field this$0: CrossinlineKt$fold$$forInline$$inlined$consumeEach$2
inner class CrossinlineKt$fold$$forInline$$inlined$consumeEach$2
inner class CrossinlineKt$fold$$forInline$$inlined$consumeEach$2$1
method <init>(p0: CrossinlineKt$fold$$forInline$$inlined$consumeEach$2, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$fold$$forInline$$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
}
@@ -268,7 +268,7 @@ public final class CrossinlineKt$fold$$forInline$$inlined$consumeEach$2 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$fold$$inlined$consumeEach$1$1 {
public final class CrossinlineKt$fold$$inlined$consumeEach$1$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
@@ -278,7 +278,7 @@ final class CrossinlineKt$fold$$inlined$consumeEach$1$1 {
synthetic final field this$0: CrossinlineKt$fold$$inlined$consumeEach$1
inner class CrossinlineKt$fold$$inlined$consumeEach$1
inner class CrossinlineKt$fold$$inlined$consumeEach$1$1
method <init>(p0: CrossinlineKt$fold$$inlined$consumeEach$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$fold$$inlined$consumeEach$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
}
@@ -311,7 +311,7 @@ final class CrossinlineKt$fold$1 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$range$$inlined$source$1$1 {
public final class CrossinlineKt$range$$inlined$source$1$1 {
field I$0: int
field I$1: int
field I$2: int
@@ -324,7 +324,7 @@ final class CrossinlineKt$range$$inlined$source$1$1 {
synthetic final field this$0: CrossinlineKt$range$$inlined$source$1
inner class CrossinlineKt$range$$inlined$source$1
inner class CrossinlineKt$range$$inlined$source$1$1
method <init>(p0: CrossinlineKt$range$$inlined$source$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$range$$inlined$source$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
}
@@ -340,7 +340,7 @@ public final class CrossinlineKt$range$$inlined$source$1 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class CrossinlineKt$source$1$consume$1 {
public final class CrossinlineKt$source$1$consume$1 {
field L$0: java.lang.Object
field L$1: java.lang.Object
field L$2: java.lang.Object
@@ -349,7 +349,7 @@ final class CrossinlineKt$source$1$consume$1 {
synthetic final @org.jetbrains.annotations.NotNull field this$0: CrossinlineKt$source$1
inner class CrossinlineKt$source$1
inner class CrossinlineKt$source$1$consume$1
method <init>(p0: CrossinlineKt$source$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: CrossinlineKt$source$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
}
@@ -53,13 +53,13 @@ final class flow/InnerObjectRetransformationKt$check$1 {
}
@kotlin.Metadata
final class flow/InnerObjectRetransformationKt$collect$2$emit$1 {
public final class flow/InnerObjectRetransformationKt$collect$2$emit$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final @org.jetbrains.annotations.NotNull field this$0: flow.InnerObjectRetransformationKt$collect$2
inner class flow/InnerObjectRetransformationKt$collect$2
inner class flow/InnerObjectRetransformationKt$collect$2$emit$1
method <init>(p0: flow.InnerObjectRetransformationKt$collect$2, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: flow.InnerObjectRetransformationKt$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
}
@@ -74,13 +74,13 @@ public final class flow/InnerObjectRetransformationKt$collect$2 {
}
@kotlin.Metadata
final class flow/InnerObjectRetransformationKt$flow$1$collect$1 {
public final class flow/InnerObjectRetransformationKt$flow$1$collect$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final @org.jetbrains.annotations.NotNull field this$0: flow.InnerObjectRetransformationKt$flow$1
inner class flow/InnerObjectRetransformationKt$flow$1
inner class flow/InnerObjectRetransformationKt$flow$1$collect$1
method <init>(p0: flow.InnerObjectRetransformationKt$flow$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: flow.InnerObjectRetransformationKt$flow$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
}
@@ -95,13 +95,13 @@ public final class flow/InnerObjectRetransformationKt$flow$1 {
}
@kotlin.Metadata
final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1$1 {
public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: flow.InnerObjectRetransformationKt$flowWith$$inlined$flow$1
inner class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1
inner class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1$1
method <init>(p0: flow.InnerObjectRetransformationKt$flowWith$$inlined$flow$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: flow.InnerObjectRetransformationKt$flowWith$$inlined$flow$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
}
@@ -117,13 +117,13 @@ public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1 {
}
@kotlin.Metadata
final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2$1 {
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
method <init>(p0: flow.InnerObjectRetransformationKt$flowWith$$inlined$flow$2, p1: kotlin.coroutines.Continuation): void
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
}
@@ -33,14 +33,14 @@ final class Override5Kt$box$1 {
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class Override5Kt$inlineMe$1$generic$1 {
public final class Override5Kt$inlineMe$1$generic$1 {
field L$0: java.lang.Object
field label: int
synthetic field result: java.lang.Object
synthetic final @org.jetbrains.annotations.NotNull field this$0: Override5Kt$inlineMe$1
inner class Override5Kt$inlineMe$1
inner class Override5Kt$inlineMe$1$generic$1
method <init>(p0: Override5Kt$inlineMe$1, p1: kotlin.coroutines.Continuation): void
public method <init>(p0: Override5Kt$inlineMe$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
}
@@ -1,5 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// TODO: KT-37010 KT-37084 KT-37085
// TODO: KT-37010 KT-37085
// WITH_RUNTIME
// COMMON_COROUTINES_TEST
import COROUTINES_PACKAGE.*
@@ -4,7 +4,7 @@ final class Controller$multipleSuspensions$1 {
field L$0: java.lang.Object
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: Controller
synthetic final @org.jetbrains.annotations.NotNull field this$0: Controller
inner class Controller$multipleSuspensions$1
method <init>(p0: Controller, p1: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
@@ -16,7 +16,7 @@ final class Controller$nonTailCall$1 {
field L$0: java.lang.Object
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: Controller
synthetic final @org.jetbrains.annotations.NotNull field this$0: Controller
inner class Controller$nonTailCall$1
method <init>(p0: Controller, p1: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
@@ -36,7 +36,7 @@ public final class Controller {
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class CoroutineFieldsKt$box$1 {
synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef
synthetic final @org.jetbrains.annotations.NotNull field $result: kotlin.jvm.internal.Ref$ObjectRef
field J$0: long
field L$0: java.lang.Object
field L$1: java.lang.Object
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
// TODO: KT-37242
// WITH_RUNTIME
// COMMON_COROUTINES_TEST
import COROUTINES_PACKAGE.*
@@ -1,6 +1,5 @@
@kotlin.Metadata
public final class PrivateAccessorKt {
public synthetic final static method access$foo(): void
synthetic final static method bar(p0: kotlin.coroutines.Continuation): java.lang.Object
private final static method foo(): void
}
@@ -1,5 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// TODO: KT-37086
private suspend fun foo() {}
class A {
@@ -0,0 +1,10 @@
@kotlin.Metadata
public final class A {
public method <init>(): void
synthetic final method foo(p0: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
public final class PrivateSuspendFunKt {
synthetic final static method foo(p0: kotlin.coroutines.Continuation): java.lang.Object
}
@@ -1,5 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// TODO: KT-36987 KT-37084 KT-37093
// TODO: KT-36987 KT-37093
// COMMON_COROUTINES_TEST
// WITH_RUNTIME
@@ -0,0 +1,346 @@
@kotlin.Metadata
public interface Flow {
public abstract @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 interface FlowCollector {
public abstract @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$collect$2$emit$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final @org.jetbrains.annotations.NotNull field this$0: TcoContinuationKt$collect$2
inner class TcoContinuationKt$collect$2
inner class TcoContinuationKt$collect$2$emit$1
public method <init>(p0: TcoContinuationKt$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$collect$2 {
private synthetic final field $action: kotlin.jvm.functions.Function2
inner class TcoContinuationKt$collect$2
inner class TcoContinuationKt$collect$2$emit$1
public method <init>(p0: 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$flow$1$collect$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final @org.jetbrains.annotations.NotNull field this$0: TcoContinuationKt$flow$1
inner class TcoContinuationKt$flow$1
inner class TcoContinuationKt$flow$1$collect$1
public method <init>(p0: TcoContinuationKt$flow$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$flow$1 {
private synthetic final field $block: kotlin.jvm.functions.Function2
inner class TcoContinuationKt$flow$1
inner class TcoContinuationKt$flow$1$collect$1
public method <init>(p0: 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$foo$$inlined$collect$1 {
inner class TcoContinuationKt$foo$$inlined$collect$1
public method <init>(): void
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$foo$$inlined$flow$1 {
inner class TcoContinuationKt$foo$$inlined$flow$1
public method <init>(): void
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
@kotlin.coroutines.jvm.internal.DebugMetadata
public final class TcoContinuationKt$foo$$inlined$map$1$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$foo$$inlined$map$1$2
inner class TcoContinuationKt$foo$$inlined$map$1$2
inner class TcoContinuationKt$foo$$inlined$map$1$2$1
public method <init>(p0: TcoContinuationKt$foo$$inlined$map$1$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$foo$$inlined$map$1$2 {
synthetic final field $this$inlined: FlowCollector
inner class TcoContinuationKt$foo$$inlined$map$1$2
inner class TcoContinuationKt$foo$$inlined$map$1$2$1
public method <init>(p0: FlowCollector): void
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$foo$$inlined$map$1 {
synthetic final field $this$inlined: Flow
inner class TcoContinuationKt$foo$$inlined$map$1
public method <init>(p0: Flow): void
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$1$1 {
field label: int
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$map$$inlined$transform$1
inner class TcoContinuationKt$map$$inlined$transform$1
inner class TcoContinuationKt$map$$inlined$transform$1$1
public method <init>(p0: TcoContinuationKt$map$$inlined$transform$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
@kotlin.coroutines.jvm.internal.DebugMetadata
public final class TcoContinuationKt$map$$inlined$transform$1$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$1$2
inner class TcoContinuationKt$map$$inlined$transform$1$2
inner class TcoContinuationKt$map$$inlined$transform$1$2$1
public method <init>(p0: TcoContinuationKt$map$$inlined$transform$1$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$1$2 {
synthetic final field $this$inlined: FlowCollector
synthetic final field $transformer$inlined$1: kotlin.jvm.functions.Function2
inner class TcoContinuationKt$map$$inlined$transform$1$2
inner class TcoContinuationKt$map$$inlined$transform$1$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$1 {
synthetic final field $this$inlined: Flow
synthetic final field $transformer$inlined$1: kotlin.jvm.functions.Function2
inner class TcoContinuationKt$map$$inlined$transform$1
inner class TcoContinuationKt$map$$inlined$transform$1$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$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
synthetic field result: java.lang.Object
synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$1
inner class TcoContinuationKt$transform$$inlined$flow$1
inner class TcoContinuationKt$transform$$inlined$flow$1$1
public method <init>(p0: TcoContinuationKt$transform$$inlined$flow$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$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
synthetic final field $transformer$inlined: kotlin.jvm.functions.Function3
inner class TcoContinuationKt$transform$$inlined$flow$1
inner class TcoContinuationKt$transform$$inlined$flow$1$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$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$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
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$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
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 {
inner class TcoContinuationKt$collect$2
inner class TcoContinuationKt$flow$1
private final static method collect$$forInline(p0: Flow, p1: kotlin.jvm.functions.Function2, p2: kotlin.coroutines.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: Flow, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function2, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.NotNull method flow(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): Flow
public final static @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.NotNull method map(@org.jetbrains.annotations.NotNull p0: Flow, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function2): Flow
public final static @org.jetbrains.annotations.NotNull method transform(@org.jetbrains.annotations.NotNull p0: Flow, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function3): Flow
}
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
inline fun <T> bar() { }
inline fun <U, reified V> baz() {}
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
inline val <reified Z> Z.extProp: String
get() = "123"