diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt index a355dfd9b67..6756e9b6696 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt @@ -141,7 +141,7 @@ class AnonymousObjectTransformer( superClassName, allCapturedParamBuilder.listCaptured() ) - loop@for (next in methodsToTransform) { + loop@ for (next in methodsToTransform) { val deferringVisitor = when { coroutineTransformer.shouldSkip(next) -> continue@loop @@ -162,9 +162,15 @@ class AnonymousObjectTransformer( } deferringMethods.forEach { method -> + val continuationToRemove = CoroutineTransformer.findFakeContinuationConstructorClassName(method.intermediate) + val oldContinuationName = coroutineTransformer.oldContinuationFrom(method.intermediate) coroutineTransformer.replaceFakesWithReals(method.intermediate) removeFinallyMarkers(method.intermediate) method.visitEnd() + if (continuationToRemove != null && coroutineTransformer.safeToRemoveContinuationClass(method.intermediate)) { + transformationResult.addClassToRemove(continuationToRemove) + innerClassNodes.removeIf { it.name == oldContinuationName } + } } SourceMapper.flushToClassBuilder(sourceMapper, classBuilder) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt index f143970893c..584255d4ade 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt @@ -215,6 +215,13 @@ class CoroutineTransformer( fun unregisterClassBuilder(continuationClassName: String) = (inliningContext as RegeneratedClassContext).continuationBuilders.remove(continuationClassName) + // If tail-call optimization took place, we do not need continuation class anymore, unless it is used by $$forInline method + fun safeToRemoveContinuationClass(method: MethodNode): Boolean = !generateForInline && !isStateMachine(method) + + fun oldContinuationFrom(method: MethodNode): String? = + methods.find { it.name == method.name + FOR_INLINE_SUFFIX && it.desc == method.desc } + ?.let { findFakeContinuationConstructorClassName(it) } + companion object { fun findFakeContinuationConstructorClassName(node: MethodNode): String? { val marker = node.instructions.asSequence().firstOrNull(::isBeforeFakeContinuationConstructorCallMarker) ?: return null diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt index da675c88f90..5f29a1e1af7 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt @@ -138,27 +138,10 @@ public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1 { public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } -@kotlin.Metadata -public final class CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1$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 label: int - synthetic field result: java.lang.Object - synthetic final field this$0: CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1 - inner class CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1 - inner class CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1$1 - public method (p0: CrossinlineKt$box$1$invokeSuspend$$inlined$fold$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 CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1 { synthetic final field $acc$inlined: kotlin.jvm.internal.Ref$ObjectRef inner class CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1 - inner class CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1$1 public method (p0: kotlin.jvm.internal.Ref$ObjectRef): void public method close(@org.jetbrains.annotations.Nullable p0: java.lang.Throwable): void public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_1_2.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_1_2.txt index a646c9b197a..a6578175370 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_1_2.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_1_2.txt @@ -54,29 +54,10 @@ public final class CrossinlineKt$box$1$doResume$$inlined$filter$1 { public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object } -@kotlin.Metadata -public final class CrossinlineKt$box$1$doResume$$inlined$fold$1$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 - synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable - synthetic final field this$0: CrossinlineKt$box$1$doResume$$inlined$fold$1 - inner class CrossinlineKt$box$1$doResume$$inlined$fold$1 - inner class CrossinlineKt$box$1$doResume$$inlined$fold$1$1 - public method (p0: CrossinlineKt$box$1$doResume$$inlined$fold$1, p1: kotlin.coroutines.experimental.Continuation): void - public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object - synthetic final method getLabel(): int - synthetic final method setLabel(p0: int): void -} - @kotlin.Metadata public final class CrossinlineKt$box$1$doResume$$inlined$fold$1 { synthetic final field $acc$inlined: kotlin.jvm.internal.Ref$ObjectRef inner class CrossinlineKt$box$1$doResume$$inlined$fold$1 - inner class CrossinlineKt$box$1$doResume$$inlined$fold$1$1 public method (p0: kotlin.jvm.internal.Ref$ObjectRef): void public method close(@org.jetbrains.annotations.Nullable p0: java.lang.Throwable): void public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation.txt index c7598ec4b36..0fc94600efa 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation.txt @@ -19,21 +19,9 @@ final class flow/InnerObjectRetransformationKt$box$1 { public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } -@kotlin.Metadata -public final class flow/InnerObjectRetransformationKt$check$$inlined$collect$1$1 { - field label: int - synthetic field result: java.lang.Object - synthetic final field this$0: flow.InnerObjectRetransformationKt$check$$inlined$collect$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$collect$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$collect$1$1 - public method (p0: flow.InnerObjectRetransformationKt$check$$inlined$collect$1, p1: kotlin.coroutines.Continuation): void - public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object -} - @kotlin.Metadata public final class flow/InnerObjectRetransformationKt$check$$inlined$collect$1 { inner class flow/InnerObjectRetransformationKt$check$$inlined$collect$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$collect$1$1 public method (): void public @org.jetbrains.annotations.Nullable method emit(@org.jetbrains.annotations.NotNull p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } @@ -62,26 +50,10 @@ public final class flow/InnerObjectRetransformationKt$check$$inlined$flow$1 { public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: flow.FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } -@kotlin.Metadata -public final class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1$1 { - field L$0: java.lang.Object - field L$1: java.lang.Object - field L$2: java.lang.Object - field L$3: java.lang.Object - field label: int - synthetic field result: java.lang.Object - synthetic final field this$0: flow.InnerObjectRetransformationKt$check$$inlined$flowWith$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1$1 - public method (p0: flow.InnerObjectRetransformationKt$check$$inlined$flowWith$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 flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1 { synthetic final field $this_flowWith$inlined: flow.Flow inner class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1$1 public method (p0: flow.Flow): void public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: flow.FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_1_2.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_1_2.txt index 658a534934f..fdaa97d17a4 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_1_2.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_1_2.txt @@ -17,23 +17,9 @@ final class flow/InnerObjectRetransformationKt$box$1 { public final method invoke(p0: java.lang.Object): java.lang.Object } -@kotlin.Metadata -public final class flow/InnerObjectRetransformationKt$check$$inlined$collect$1$1 { - synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable - synthetic final field this$0: flow.InnerObjectRetransformationKt$check$$inlined$collect$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$collect$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$collect$1$1 - public method (p0: flow.InnerObjectRetransformationKt$check$$inlined$collect$1, p1: kotlin.coroutines.experimental.Continuation): void - public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object - synthetic final method getLabel(): int - synthetic final method setLabel(p0: int): void -} - @kotlin.Metadata public final class flow/InnerObjectRetransformationKt$check$$inlined$collect$1 { inner class flow/InnerObjectRetransformationKt$check$$inlined$collect$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$collect$1$1 public method (): void public @org.jetbrains.annotations.Nullable method emit(@org.jetbrains.annotations.NotNull p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object } @@ -63,28 +49,10 @@ public final class flow/InnerObjectRetransformationKt$check$$inlined$flow$1 { public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: flow.FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object } -@kotlin.Metadata -public final class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1$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 - synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable - synthetic final field this$0: flow.InnerObjectRetransformationKt$check$$inlined$flowWith$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1$1 - public method (p0: flow.InnerObjectRetransformationKt$check$$inlined$flowWith$1, p1: kotlin.coroutines.experimental.Continuation): void - public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object - synthetic final method getLabel(): int - synthetic final method setLabel(p0: int): void -} - @kotlin.Metadata public final class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1 { synthetic final field $this_flowWith$inlined: flow.Flow inner class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1 - inner class flow/InnerObjectRetransformationKt$check$$inlined$flowWith$1$1 public method (p0: flow.Flow): void public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: flow.FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object } diff --git a/compiler/testData/codegen/bytecodeListing/tcoContinuation.kt b/compiler/testData/codegen/bytecodeListing/tcoContinuation.kt new file mode 100644 index 00000000000..ea900311c20 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/tcoContinuation.kt @@ -0,0 +1,40 @@ +// COMMON_COROUTINES_TEST +// WITH_RUNTIME +// WITH_COROUTINES + +// There should be no $foo$$inlined$map$1$1 class + +interface FlowCollector { + suspend fun emit(value: T) +} + +interface Flow { + suspend fun collect(collector: FlowCollector) +} + +public inline fun flow(crossinline block: suspend FlowCollector.() -> Unit) = object : Flow { + override suspend fun collect(collector: FlowCollector) = collector.block() +} + +suspend inline fun Flow.collect(crossinline action: suspend (T) -> Unit): Unit = + collect(object : FlowCollector { + override suspend fun emit(value: T) = action(value) + }) + +public inline fun Flow.transform(crossinline transformer: suspend FlowCollector.(value: T) -> Unit): Flow { + return flow { + return@flow collect { value -> + return@collect transformer(value) + } + } +} + +public inline fun Flow.map(crossinline transformer: suspend (value: T) -> R): Flow = transform { value -> return@transform emit(transformer(value)) } + +suspend fun foo() { + flow { + emit(1) + }.map { it + 1 } + .collect { + } +} diff --git a/compiler/testData/codegen/bytecodeListing/tcoContinuation.txt b/compiler/testData/codegen/bytecodeListing/tcoContinuation.txt new file mode 100644 index 00000000000..9eff51e4b3a --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/tcoContinuation.txt @@ -0,0 +1,415 @@ +@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.experimental.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.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$collect$2$emit$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + synthetic final 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$collect$2 { + 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.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$flow$1$collect$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + synthetic final 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$flow$1 { + 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.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.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.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$foo$$inlined$flow$1$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 + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + synthetic final field this$0: TcoContinuationKt$foo$$inlined$flow$1 + inner class TcoContinuationKt$foo$$inlined$flow$1 + inner class TcoContinuationKt$foo$$inlined$flow$1$1 + public method (p0: TcoContinuationKt$foo$$inlined$flow$1, p1: kotlin.coroutines.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$foo$$inlined$flow$1 { + inner class TcoContinuationKt$foo$$inlined$flow$1 + inner class TcoContinuationKt$foo$$inlined$flow$1$1 + public method (): void + public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$foo$$inlined$map$1$2 { + synthetic final field $this_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$foo$$inlined$map$1 + inner class TcoContinuationKt$foo$$inlined$map$1$2 + public method (p0: FlowCollector, p1: TcoContinuationKt$foo$$inlined$map$1): void + public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$foo$$inlined$map$1 { + synthetic final field $this_transform$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.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$map$$inlined$transform$1$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$map$$inlined$transform$1$2$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$map$$inlined$transform$1$2 { + synthetic final field $this_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$map$$inlined$transform$1 + inner class TcoContinuationKt$map$$inlined$transform$1$2 + inner class TcoContinuationKt$map$$inlined$transform$1$2$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$map$$inlined$transform$1): void + public @org.jetbrains.annotations.Nullable method emit$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$map$$inlined$transform$1 { + synthetic final field $this_transform$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.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$map$$inlined$transform$2$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$map$$inlined$transform$2$2$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$map$$inlined$transform$2$2 { + synthetic final field $this_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$map$$inlined$transform$2 + inner class TcoContinuationKt$map$$inlined$transform$2$2 + inner class TcoContinuationKt$map$$inlined$transform$2$2$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$map$$inlined$transform$2): void + public @org.jetbrains.annotations.Nullable method emit$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$map$$inlined$transform$2 { + synthetic final field $this_transform$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.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$1$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$1$lambda$1$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$1$lambda$1 { + synthetic final field $this_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$1 + inner class TcoContinuationKt$transform$$inlined$flow$1$lambda$1 + inner class TcoContinuationKt$transform$$inlined$flow$1$lambda$1$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$transform$$inlined$flow$1): void + public @org.jetbrains.annotations.Nullable method emit$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$1 { + synthetic final field $this_transform$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.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$2$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$2$lambda$1$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$2$lambda$1 { + synthetic final field $this_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$2 + inner class TcoContinuationKt$transform$$inlined$flow$2$lambda$1 + inner class TcoContinuationKt$transform$$inlined$flow$2$lambda$1$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$transform$$inlined$flow$2): void + public @org.jetbrains.annotations.Nullable method emit$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$2 { + synthetic final field $this_transform$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.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$3$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$3$lambda$1$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$3$lambda$1 { + synthetic final field $this_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$3 + inner class TcoContinuationKt$transform$$inlined$flow$3$lambda$1 + inner class TcoContinuationKt$transform$$inlined$flow$3$lambda$1$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$transform$$inlined$flow$3): void + public @org.jetbrains.annotations.Nullable method emit$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method emit(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class TcoContinuationKt$transform$$inlined$flow$3 { + synthetic final field $this_transform$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.experimental.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method collect(@org.jetbrains.annotations.NotNull p0: FlowCollector, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.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(@org.jetbrains.annotations.NotNull p0: Flow, p1: kotlin.jvm.functions.Function2, p2: kotlin.coroutines.experimental.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.experimental.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 +} + +@kotlin.Metadata +public abstract class helpers/ContinuationAdapter { + private final @org.jetbrains.annotations.NotNull field context: kotlin.coroutines.experimental.CoroutineContext + public method (): void + public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.experimental.CoroutineContext +} + +@kotlin.Metadata +public final class helpers/CoroutineUtilKt$handleExceptionContinuation$1 { + synthetic final field $x: kotlin.jvm.functions.Function1 + private final @org.jetbrains.annotations.NotNull field context: kotlin.coroutines.experimental.EmptyCoroutineContext + inner class helpers/CoroutineUtilKt$handleExceptionContinuation$1 + method (p0: kotlin.jvm.functions.Function1): void + public synthetic method getContext(): kotlin.coroutines.experimental.CoroutineContext + public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.experimental.EmptyCoroutineContext + public method resume(@org.jetbrains.annotations.Nullable p0: java.lang.Object): void + public method resumeWithException(@org.jetbrains.annotations.NotNull p0: java.lang.Throwable): void +} + +@kotlin.Metadata +public final class helpers/CoroutineUtilKt$handleResultContinuation$1 { + synthetic final field $x: kotlin.jvm.functions.Function1 + private final @org.jetbrains.annotations.NotNull field context: kotlin.coroutines.experimental.EmptyCoroutineContext + inner class helpers/CoroutineUtilKt$handleResultContinuation$1 + method (p0: kotlin.jvm.functions.Function1): void + public synthetic method getContext(): kotlin.coroutines.experimental.CoroutineContext + public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.experimental.EmptyCoroutineContext + public method resume(p0: java.lang.Object): void + public method resumeWithException(@org.jetbrains.annotations.NotNull p0: java.lang.Throwable): void +} + +@kotlin.Metadata +public final class helpers/CoroutineUtilKt { + inner class helpers/CoroutineUtilKt$handleExceptionContinuation$1 + inner class helpers/CoroutineUtilKt$handleResultContinuation$1 + public final static @org.jetbrains.annotations.NotNull method handleExceptionContinuation(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): kotlin.coroutines.experimental.Continuation + public final static @org.jetbrains.annotations.NotNull method handleResultContinuation(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): kotlin.coroutines.experimental.Continuation +} + +@kotlin.Metadata +public final class helpers/EmptyContinuation$Companion { + inner class helpers/EmptyContinuation$Companion + private method (): void + public synthetic method (p0: kotlin.jvm.internal.DefaultConstructorMarker): void +} + +@kotlin.Metadata +public class helpers/EmptyContinuation { + public final static field Companion: helpers.EmptyContinuation$Companion + private final @org.jetbrains.annotations.NotNull field context: kotlin.coroutines.experimental.CoroutineContext + inner class helpers/EmptyContinuation$Companion + static method (): void + public method (): void + public method (@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.CoroutineContext): void + public synthetic method (p0: kotlin.coroutines.experimental.CoroutineContext, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void + public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.experimental.CoroutineContext + public method resume(@org.jetbrains.annotations.Nullable p0: java.lang.Object): void + public method resumeWithException(@org.jetbrains.annotations.NotNull p0: java.lang.Throwable): void +} diff --git a/compiler/testData/codegen/bytecodeListing/tcoContinuation_1_3.txt b/compiler/testData/codegen/bytecodeListing/tcoContinuation_1_3.txt new file mode 100644 index 00000000000..2f37543ae51 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/tcoContinuation_1_3.txt @@ -0,0 +1,390 @@ +@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 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 { + 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 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 { + 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 +@kotlin.coroutines.jvm.internal.DebugMetadata +public final class TcoContinuationKt$foo$$inlined$flow$1$1 { + field L$0: java.lang.Object + field L$1: java.lang.Object + field L$2: java.lang.Object + field L$3: java.lang.Object + field label: int + synthetic field result: java.lang.Object + synthetic final field this$0: TcoContinuationKt$foo$$inlined$flow$1 + inner class TcoContinuationKt$foo$$inlined$flow$1 + inner class TcoContinuationKt$foo$$inlined$flow$1$1 + public method (p0: TcoContinuationKt$foo$$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$foo$$inlined$flow$1 { + inner class TcoContinuationKt$foo$$inlined$flow$1 + inner class TcoContinuationKt$foo$$inlined$flow$1$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 +public final class TcoContinuationKt$foo$$inlined$map$1$2 { + synthetic final field $this_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$foo$$inlined$map$1 + inner class TcoContinuationKt$foo$$inlined$map$1$2 + public method (p0: FlowCollector, p1: TcoContinuationKt$foo$$inlined$map$1): 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_transform$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 +public final class TcoContinuationKt$map$$inlined$transform$1$2$1 { + 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_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$map$$inlined$transform$1 + inner class TcoContinuationKt$map$$inlined$transform$1$2 + inner class TcoContinuationKt$map$$inlined$transform$1$2$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$map$$inlined$transform$1): 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_transform$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 +public final class TcoContinuationKt$map$$inlined$transform$2$2$1 { + 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_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$map$$inlined$transform$2 + inner class TcoContinuationKt$map$$inlined$transform$2$2 + inner class TcoContinuationKt$map$$inlined$transform$2$2$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$map$$inlined$transform$2): 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_transform$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_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$1 + inner class TcoContinuationKt$transform$$inlined$flow$1$lambda$1 + inner class TcoContinuationKt$transform$$inlined$flow$1$lambda$1$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$transform$$inlined$flow$1): 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_transform$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_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$2 + inner class TcoContinuationKt$transform$$inlined$flow$2$lambda$1 + inner class TcoContinuationKt$transform$$inlined$flow$2$lambda$1$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$transform$$inlined$flow$2): 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_transform$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_flow$inlined: FlowCollector + synthetic final field this$0: TcoContinuationKt$transform$$inlined$flow$3 + inner class TcoContinuationKt$transform$$inlined$flow$3$lambda$1 + inner class TcoContinuationKt$transform$$inlined$flow$3$lambda$1$1 + public method (p0: FlowCollector, p1: TcoContinuationKt$transform$$inlined$flow$3): 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_transform$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(@org.jetbrains.annotations.NotNull p0: Flow, p1: kotlin.jvm.functions.Function2, 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 +} + +@kotlin.Metadata +public abstract class helpers/ContinuationAdapter { + private final @org.jetbrains.annotations.NotNull field context: kotlin.coroutines.CoroutineContext + public method (): void + public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.CoroutineContext + public abstract method resume(p0: java.lang.Object): void + public method resumeWith(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void + public abstract method resumeWithException(@org.jetbrains.annotations.NotNull p0: java.lang.Throwable): void +} + +@kotlin.Metadata +public final class helpers/CoroutineUtilKt$handleExceptionContinuation$1 { + synthetic final field $x: kotlin.jvm.functions.Function1 + private final @org.jetbrains.annotations.NotNull field context: kotlin.coroutines.EmptyCoroutineContext + inner class helpers/CoroutineUtilKt$handleExceptionContinuation$1 + method (p0: kotlin.jvm.functions.Function1): void + public synthetic method getContext(): kotlin.coroutines.CoroutineContext + public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.EmptyCoroutineContext + public method resumeWith(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void +} + +@kotlin.Metadata +public final class helpers/CoroutineUtilKt$handleResultContinuation$1 { + synthetic final field $x: kotlin.jvm.functions.Function1 + private final @org.jetbrains.annotations.NotNull field context: kotlin.coroutines.EmptyCoroutineContext + inner class helpers/CoroutineUtilKt$handleResultContinuation$1 + method (p0: kotlin.jvm.functions.Function1): void + public synthetic method getContext(): kotlin.coroutines.CoroutineContext + public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.EmptyCoroutineContext + public method resumeWith(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void +} + +@kotlin.Metadata +public final class helpers/CoroutineUtilKt { + inner class helpers/CoroutineUtilKt$handleExceptionContinuation$1 + inner class helpers/CoroutineUtilKt$handleResultContinuation$1 + public final static @org.jetbrains.annotations.NotNull method handleExceptionContinuation(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): kotlin.coroutines.Continuation + public final static @org.jetbrains.annotations.NotNull method handleResultContinuation(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): kotlin.coroutines.Continuation +} + +@kotlin.Metadata +public final class helpers/EmptyContinuation$Companion { + inner class helpers/EmptyContinuation$Companion + private method (): void + public synthetic method (p0: kotlin.jvm.internal.DefaultConstructorMarker): void +} + +@kotlin.Metadata +public class helpers/EmptyContinuation { + public final static field Companion: helpers.EmptyContinuation$Companion + private final @org.jetbrains.annotations.NotNull field context: kotlin.coroutines.CoroutineContext + inner class helpers/EmptyContinuation$Companion + static method (): void + public method (): void + public method (@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.CoroutineContext): void + public synthetic method (p0: kotlin.coroutines.CoroutineContext, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void + public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.CoroutineContext + public method resumeWith(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void +} diff --git a/compiler/testData/codegen/bytecodeText/coroutines/crossinlineSuspendContinuation_1_2.kt b/compiler/testData/codegen/bytecodeText/coroutines/crossinlineSuspendContinuation_1_2.kt index 8ae50724f59..2703f554d39 100644 --- a/compiler/testData/codegen/bytecodeText/coroutines/crossinlineSuspendContinuation_1_2.kt +++ b/compiler/testData/codegen/bytecodeText/coroutines/crossinlineSuspendContinuation_1_2.kt @@ -6,6 +6,8 @@ import helpers.* import kotlin.coroutines.experimental.* import kotlin.coroutines.experimental.intrinsics.* +suspend fun dummy() {} + fun builder(c: suspend () -> Unit) { c.startCoroutine(EmptyContinuation) } @@ -21,7 +23,7 @@ inline fun inlineMe(crossinline c: suspend () -> String) = object : SuspendRunna fun box(): String { var res = "FAIL" builder { - res = inlineMe { "OK" }.run() + res = inlineMe { dummy(); "OK" }.run() } return res } diff --git a/compiler/testData/codegen/bytecodeText/coroutines/crossinlineSuspendContinuation_1_3.kt b/compiler/testData/codegen/bytecodeText/coroutines/crossinlineSuspendContinuation_1_3.kt index 8e64782d2ce..7e903fd4fb5 100644 --- a/compiler/testData/codegen/bytecodeText/coroutines/crossinlineSuspendContinuation_1_3.kt +++ b/compiler/testData/codegen/bytecodeText/coroutines/crossinlineSuspendContinuation_1_3.kt @@ -5,6 +5,8 @@ import helpers.* import kotlin.coroutines.* import kotlin.coroutines.intrinsics.* +suspend fun dummy() {} + fun builder(c: suspend () -> Unit) { c.startCoroutine(EmptyContinuation) } @@ -20,7 +22,7 @@ inline fun inlineMe(crossinline c: suspend () -> String) = object : SuspendRunna fun box(): String { var res = "FAIL" builder { - res = inlineMe { "OK" }.run() + res = inlineMe { dummy(); "OK" }.run() } return res } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index 31ea9472e58..db23e46a0b9 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -173,6 +173,16 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTestWithPackageReplacement("compiler/testData/codegen/bytecodeListing/suspendReifiedFun.kt", "kotlin.coroutines"); } + @TestMetadata("tcoContinuation.kt") + public void testTcoContinuation_1_2() throws Exception { + runTestWithPackageReplacement("compiler/testData/codegen/bytecodeListing/tcoContinuation.kt", "kotlin.coroutines.experimental"); + } + + @TestMetadata("tcoContinuation.kt") + public void testTcoContinuation_1_3() throws Exception { + runTestWithPackageReplacement("compiler/testData/codegen/bytecodeListing/tcoContinuation.kt", "kotlin.coroutines"); + } + @TestMetadata("compiler/testData/codegen/bytecodeListing/annotations") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)