From 354fb3c4ba7682ad68ab79d508e58ea3a5584ee0 Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov Date: Wed, 4 Mar 2020 16:51:43 +0100 Subject: [PATCH] JVM_IR: Generate fake continuations and their constructors as public #KT-37093 Fixed --- .../backend/jvm/codegen/FunctionCodegen.kt | 2 +- .../jvm/lower/AddContinuationLowering.kt | 23 +- .../tailCallOptimizations/crossinline_ir.txt | 48 +-- .../innerObjectRetransformation_ir.txt | 16 +- .../unit/override5_ir.txt | 4 +- .../coroutines/coroutineFields.kt | 3 +- .../coroutines/coroutineFields_ir.txt | 6 +- .../coroutines/privateAccessor.kt | 2 + .../coroutines/privateAccessor_ir.txt | 1 - .../coroutines/privateSuspendFun.kt | 2 - .../coroutines/privateSuspendFun_ir.txt | 10 + .../coroutines/tcoContinuation.kt | 3 +- .../coroutines/tcoContinuation_ir.txt | 346 ++++++++++++++++++ .../bytecodeListing/inline/inlineReified.kt | 1 - .../inline/inlineReifiedProperty.kt | 1 - 15 files changed, 414 insertions(+), 54 deletions(-) create mode 100644 compiler/testData/codegen/bytecodeListing/coroutines/privateSuspendFun_ir.txt create mode 100644 compiler/testData/codegen/bytecodeListing/coroutines/tcoContinuation_ir.txt diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt index 4dbe8f192dc..073febc59c3 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt @@ -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 diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt index f1249ebd7a2..8936761715e 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt @@ -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 } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_ir.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_ir.txt index 02552b52bf1..794818cfd2e 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_ir.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_ir.txt @@ -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 (p0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$consumeEach$2, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$filter$$inlined$source$1, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$filter$$inlined$source$2, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$filter$lambda-3$$inlined$consumeEach$1, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$filter$lambda-3$$inlined$consumeEach$2, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$fold$$forInline$$inlined$consumeEach$1, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$fold$$forInline$$inlined$consumeEach$2, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$fold$$inlined$consumeEach$1, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$range$$inlined$source$1, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: CrossinlineKt$source$1, p1: kotlin.coroutines.Continuation): void + public method (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 } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_ir.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_ir.txt index 1db44d5441f..c57e13b50f3 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_ir.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_ir.txt @@ -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 (p0: flow.InnerObjectRetransformationKt$collect$2, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: flow.InnerObjectRetransformationKt$flow$1, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: flow.InnerObjectRetransformationKt$flowWith$$inlined$flow$1, p1: kotlin.coroutines.Continuation): void + public method (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 (p0: flow.InnerObjectRetransformationKt$flowWith$$inlined$flow$2, p1: kotlin.coroutines.Continuation): void + public method (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 } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/unit/override5_ir.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/unit/override5_ir.txt index 77d11e48b0c..468edcfb5b6 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/unit/override5_ir.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/unit/override5_ir.txt @@ -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 (p0: Override5Kt$inlineMe$1, p1: kotlin.coroutines.Continuation): void + public method (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 } diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields.kt b/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields.kt index a99ccc0b514..537d3753aaf 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields.kt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields.kt @@ -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.* diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields_ir.txt b/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields_ir.txt index b2500d9f9fd..f22a5b5da76 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields_ir.txt @@ -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 (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 (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 diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor.kt b/compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor.kt index 35aae7d604c..f7daa9f5a0d 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor.kt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor.kt @@ -1,3 +1,5 @@ +// IGNORE_BACKEND: JVM_IR +// TODO: KT-37242 // WITH_RUNTIME // COMMON_COROUTINES_TEST import COROUTINES_PACKAGE.* diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor_ir.txt b/compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor_ir.txt index 96a0cf8cc1f..c1f698e9cf6 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor_ir.txt @@ -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 } diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/privateSuspendFun.kt b/compiler/testData/codegen/bytecodeListing/coroutines/privateSuspendFun.kt index b388d2d27cf..ef751acfc87 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/privateSuspendFun.kt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/privateSuspendFun.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND: JVM_IR -// TODO: KT-37086 private suspend fun foo() {} class A { diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/privateSuspendFun_ir.txt b/compiler/testData/codegen/bytecodeListing/coroutines/privateSuspendFun_ir.txt new file mode 100644 index 00000000000..3154f79e05a --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/coroutines/privateSuspendFun_ir.txt @@ -0,0 +1,10 @@ +@kotlin.Metadata +public final class A { + public method (): 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 +} diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/tcoContinuation.kt b/compiler/testData/codegen/bytecodeListing/coroutines/tcoContinuation.kt index 298094d1852..cb95e9e91dd 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/tcoContinuation.kt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/tcoContinuation.kt @@ -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 diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/tcoContinuation_ir.txt b/compiler/testData/codegen/bytecodeListing/coroutines/tcoContinuation_ir.txt new file mode 100644 index 00000000000..797cf19ed43 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/coroutines/tcoContinuation_ir.txt @@ -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 (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 (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 (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 (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 (): 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 (): 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 +} diff --git a/compiler/testData/codegen/bytecodeListing/inline/inlineReified.kt b/compiler/testData/codegen/bytecodeListing/inline/inlineReified.kt index 4d4c26b078a..68dc34d48ab 100644 --- a/compiler/testData/codegen/bytecodeListing/inline/inlineReified.kt +++ b/compiler/testData/codegen/bytecodeListing/inline/inlineReified.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR inline fun bar() { } inline fun baz() {} diff --git a/compiler/testData/codegen/bytecodeListing/inline/inlineReifiedProperty.kt b/compiler/testData/codegen/bytecodeListing/inline/inlineReifiedProperty.kt index fd07a3b3f4b..f24ca57dc30 100644 --- a/compiler/testData/codegen/bytecodeListing/inline/inlineReifiedProperty.kt +++ b/compiler/testData/codegen/bytecodeListing/inline/inlineReifiedProperty.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR inline val Z.extProp: String get() = "123"