diff --git a/compiler/testData/codegen/box/coroutines/coroutineToString.kt b/compiler/testData/codegen/box/coroutines/coroutineToString.kt index d9335a689eb..7a8b188ddea 100644 --- a/compiler/testData/codegen/box/coroutines/coroutineToString.kt +++ b/compiler/testData/codegen/box/coroutines/coroutineToString.kt @@ -1,13 +1,12 @@ +// LANGUAGE_VERSION: 1.3 // IGNORE_BACKEND: JS_IR // IGNORE_BACKEND: JVM_IR // TARGET_BACKEND: JVM // WITH_REFLECT // WITH_COROUTINES -// COMMON_COROUTINES_TEST - import helpers.* -import COROUTINES_PACKAGE.* -import COROUTINES_PACKAGE.intrinsics.* +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* class A { suspend fun foo() {} @@ -32,5 +31,5 @@ fun box(): String { result = A().bar() } - return if (result == "(COROUTINES_PACKAGE.Continuation) -> kotlin.Any?") "OK" else "Fail: $result" + return if (result == "Continuation @ A\$bar\$1") "OK" else "Fail: $result" } diff --git a/compiler/testData/codegen/box/coroutines/coroutineToString_1_2.kt b/compiler/testData/codegen/box/coroutines/coroutineToString_1_2.kt new file mode 100644 index 00000000000..7abbb9ace1a --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/coroutineToString_1_2.kt @@ -0,0 +1,33 @@ +// IGNORE_BACKEND: JS_IR +// TARGET_BACKEND: JVM +// WITH_REFLECT +// WITH_COROUTINES +import helpers.* +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* + +class A { + suspend fun foo() {} + + suspend fun bar(): T { + foo() + return suspendCoroutineOrReturn { x -> + x.resume(x.toString() as T) + COROUTINE_SUSPENDED + } + } +} + +fun builder(c: suspend () -> Unit) { + c.startCoroutine(EmptyContinuation) +} + +fun box(): String { + var result = "" + + builder { + result = A().bar() + } + + return if (result == "(kotlin.coroutines.experimental.Continuation) -> kotlin.Any?") "OK" else "Fail: $result" +} diff --git a/compiler/testData/codegen/box/coroutines/createCoroutinesOnManualInstances.kt b/compiler/testData/codegen/box/coroutines/createCoroutinesOnManualInstances.kt index ab0e2aa4182..944ebcbc927 100644 --- a/compiler/testData/codegen/box/coroutines/createCoroutinesOnManualInstances.kt +++ b/compiler/testData/codegen/box/coroutines/createCoroutinesOnManualInstances.kt @@ -10,7 +10,7 @@ import COROUTINES_PACKAGE.intrinsics.COROUTINE_SUSPENDED fun runCustomLambdaAsCoroutine(e: Throwable? = null, x: (Continuation) -> Any?): String { var result = "fail" var wasIntercepted = false - val c = (x as suspend () -> String).createCoroutine(object: ContinuationAdapter() { + val c = (x as suspend () -> String).createCoroutine(object: helpers.ContinuationAdapter() { override fun resumeWithException(exception: Throwable) { throw exception } diff --git a/compiler/testData/codegen/box/coroutines/illegalState.kt b/compiler/testData/codegen/box/coroutines/illegalState.kt index cb5cb3fd911..81b37ccc8f3 100644 --- a/compiler/testData/codegen/box/coroutines/illegalState.kt +++ b/compiler/testData/codegen/box/coroutines/illegalState.kt @@ -1,12 +1,12 @@ +// LANGUAGE_VERSION: 1.3 // IGNORE_BACKEND: JS_IR // IGNORE_BACKEND: JVM_IR // WITH_RUNTIME // WITH_COROUTINES -// COMMON_COROUTINES_TEST -import helpers.* // TARGET_BACKEND: JVM -import COROUTINES_PACKAGE.* -import COROUTINES_PACKAGE.intrinsics.* +import helpers.* +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* suspend fun suspendHere(): Unit = suspendCoroutineOrReturn { x -> x.resume(Unit) @@ -24,7 +24,7 @@ fun builder2(c: suspend () -> Unit) { delegateField.setAccessible(true) val originalContinuation = delegateField.get(continuation) - val declaredField = originalContinuation.javaClass.superclass.getDeclaredField("label") + val declaredField = originalContinuation.javaClass.getDeclaredField("label") declaredField.setAccessible(true) declaredField.set(originalContinuation, -3) continuation.resume(Unit) diff --git a/compiler/testData/codegen/box/coroutines/illegalState_1_2.kt b/compiler/testData/codegen/box/coroutines/illegalState_1_2.kt new file mode 100644 index 00000000000..bedfbb3e06b --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/illegalState_1_2.kt @@ -0,0 +1,71 @@ +// IGNORE_BACKEND: JS_IR +// WITH_RUNTIME +// WITH_COROUTINES +import helpers.* +// TARGET_BACKEND: JVM +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* + +suspend fun suspendHere(): Unit = suspendCoroutineOrReturn { x -> + x.resume(Unit) + COROUTINE_SUSPENDED +} + +fun builder1(c: suspend () -> Unit) { + (c as Continuation).resume(Unit) +} + +fun builder2(c: suspend () -> Unit) { + val continuation = c.createCoroutine(EmptyContinuation) + + val delegateField = continuation.javaClass.getDeclaredField("delegate") + delegateField.setAccessible(true) + val originalContinuation = delegateField.get(continuation) + + val declaredField = originalContinuation.javaClass.superclass.getDeclaredField("label") + declaredField.setAccessible(true) + declaredField.set(originalContinuation, -3) + continuation.resume(Unit) +} + +fun box(): String { + + try { + builder1 { + suspendHere() + } + return "fail 1" + } catch (e: kotlin.KotlinNullPointerException) { + } + + try { + builder2 { + suspendHere() + } + return "fail 3" + } catch (e: java.lang.IllegalStateException) { + if (e.message != "call to 'resume' before 'invoke' with coroutine") return "fail 4: ${e.message!!}" + } + + var result = "OK" + + try { + builder1 { + result = "fail 5" + } + return "fail 6" + } catch (e: kotlin.KotlinNullPointerException) { + } + + try { + builder2 { + result = "fail 8" + } + return "fail 9" + } catch (e: java.lang.IllegalStateException) { + if (e.message != "call to 'resume' before 'invoke' with coroutine") return "fail 10: ${e.message!!}" + return result + } + + return "fail" +} diff --git a/compiler/testData/codegen/box/coroutines/kt15016.kt b/compiler/testData/codegen/box/coroutines/kt15016.kt index 5d5307f477a..fa164693243 100644 --- a/compiler/testData/codegen/box/coroutines/kt15016.kt +++ b/compiler/testData/codegen/box/coroutines/kt15016.kt @@ -7,7 +7,7 @@ import helpers.* import COROUTINES_PACKAGE.intrinsics.COROUTINE_SUSPENDED import COROUTINES_PACKAGE.intrinsics.suspendCoroutineOrReturn -import COROUTINES_PACKAGE.startCoroutine +import COROUTINES_PACKAGE.* class Bar(val x: Any) inline fun Any.map(transform: (Any) -> Any) { diff --git a/compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt b/compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt index 54463397082..d2d3cb9b49a 100644 --- a/compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt +++ b/compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt @@ -1,6 +1,6 @@ +// LANGUAGE_VERSION: 1.3 // IGNORE_BACKEND: NATIVE, JS, JS_IR, JVM_IR // WITH_COROUTINES -// COMMON_COROUTINES_TEST // MODULE: lib // FILE: lib.kt interface I {} @@ -9,7 +9,7 @@ suspend inline fun foo() = object : I {} // MODULE: useLib(lib) // FILE: UseLib.java -import COROUTINES_PACKAGE.*; +import kotlin.coroutines.*; import kotlin.Unit; public class UseLib { @@ -23,10 +23,7 @@ class MyContinuation implements Continuation { public CoroutineContext getContext() { return EmptyCoroutineContext.INSTANCE; } - public void resume(I value) {} - public void resumeWithException(Throwable e) { - throw new RuntimeException(e); - } + public void resumeWith(Object value) {} } // MODULE: main(useLib) diff --git a/compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava_1_2.kt b/compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava_1_2.kt new file mode 100644 index 00000000000..e247094ad3c --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava_1_2.kt @@ -0,0 +1,42 @@ +// IGNORE_BACKEND: NATIVE, JS, JS_IR +// WITH_COROUTINES +// WITH_RUNTIME +// MODULE: lib +// FILE: lib.kt +interface I {} + +suspend inline fun foo() = object : I {} + +// MODULE: useLib(lib) +// FILE: UseLib.java +import kotlin.coroutines.experimental.*; +import kotlin.Unit; + +public class UseLib { + public static String useFoo() { + Object i = LibKt.foo(new MyContinuation()); + return i.getClass().getName() + " " + i.getClass().getEnclosingClass().getName() + " " + i.getClass().getEnclosingClass().getEnclosingClass(); + } +} + +class MyContinuation implements Continuation { + public CoroutineContext getContext() { + return EmptyCoroutineContext.INSTANCE; + } + public void resume(I value) {} + public void resumeWithException(Throwable e) { + throw new RuntimeException(e); + } +} + +// MODULE: main(useLib) +// FILE: main.kt + +fun box(): String { + val res = UseLib.useFoo() + if (res == "LibKt\$foo\$2 LibKt null") { + return "OK" + } else { + return res + } +} diff --git a/compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt b/compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt index 5074f14c5dd..b55c6b6944b 100644 --- a/compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt +++ b/compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt @@ -1,8 +1,8 @@ +// LANGUAGE_VERSION: 1.3 // TARGET_BACKEND: JVM // IGNORE_BACKEND: JVM_IR // WITH_RUNTIME // WITH_COROUTINES -// COMMON_COROUTINES_TEST // FILE: I.kt @@ -15,20 +15,20 @@ interface I { public class JavaClass implements I { @Override - public String foo(int x, COROUTINES_PACKAGE.Continuation continuation) { + public String foo(int x, kotlin.coroutines.Continuation continuation) { return "O"; } @Override - public Object bar(int x, COROUTINES_PACKAGE.Continuation continuation) { + public Object bar(int x, kotlin.coroutines.Continuation continuation) { return foo(x, continuation); } } // FILE: main.kt import helpers.* -import COROUTINES_PACKAGE.* -import COROUTINES_PACKAGE.intrinsics.* +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* class K : JavaClass() { override suspend fun foo(x: Int): String = super.foo(x) + suspendCoroutine { it.resume("K") } diff --git a/compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides_1_2.kt b/compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides_1_2.kt new file mode 100644 index 00000000000..a10b8f0c80e --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides_1_2.kt @@ -0,0 +1,48 @@ +// TARGET_BACKEND: JVM +// WITH_RUNTIME +// WITH_COROUTINES + +// FILE: I.kt + +interface I { + suspend fun foo(x: Int): String + suspend fun bar(x: Int): String +} + +// FILE: JavaClass.java + +public class JavaClass implements I { + @Override + public String foo(int x, kotlin.coroutines.experimental.Continuation continuation) { + return "O"; + } + + @Override + public Object bar(int x, kotlin.coroutines.experimental.Continuation continuation) { + return foo(x, continuation); + } +} + +// FILE: main.kt +import helpers.* +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* + +class K : JavaClass() { + override suspend fun foo(x: Int): String = super.foo(x) + suspendCoroutine { it.resume("K") } +} + +fun builder(c: suspend () -> Unit) { + c.startCoroutine(EmptyContinuation) +} + +fun box(): String { + var result = "fail" + + builder { + // Changing the call to 'K().bar(1)' doesn't work because of KT-25036 + result = K().foo(1) + } + + return result +} diff --git a/compiler/testData/codegen/box/coroutines/suspendDefaultImpl.kt b/compiler/testData/codegen/box/coroutines/suspendDefaultImpl.kt index d4a89d0c95c..4a2b804b6f0 100644 --- a/compiler/testData/codegen/box/coroutines/suspendDefaultImpl.kt +++ b/compiler/testData/codegen/box/coroutines/suspendDefaultImpl.kt @@ -4,7 +4,7 @@ // WITH_COROUTINES // COMMON_COROUTINES_TEST import helpers.* -import COROUTINES_PACKAGE.startCoroutine +import COROUTINES_PACKAGE.* import COROUTINES_PACKAGE.intrinsics.* interface TestInterface { diff --git a/compiler/testData/codegen/box/coroutines/suspendFunImportedFromObject.kt b/compiler/testData/codegen/box/coroutines/suspendFunImportedFromObject.kt index ecc5a31899e..06a9d40ea3b 100644 --- a/compiler/testData/codegen/box/coroutines/suspendFunImportedFromObject.kt +++ b/compiler/testData/codegen/box/coroutines/suspendFunImportedFromObject.kt @@ -8,6 +8,7 @@ package stuff import helpers.* +import COROUTINES_PACKAGE.* import COROUTINES_PACKAGE.intrinsics.* object Host { diff --git a/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt index 71dd3f6e411..d22b8619ac4 100644 --- a/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt +++ b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt @@ -1,15 +1,13 @@ +// LANGUAGE_VERSION: 1.3 // IGNORE_BACKEND: JS_IR // IGNORE_BACKEND: JVM_IR // WITH_RUNTIME // WITH_COROUTINES -// COMMON_COROUTINES_TEST // FILE: main.kt // TARGET_BACKEND: JVM import helpers.* -import COROUTINES_PACKAGE.* -import COROUTINES_PACKAGE.intrinsics.* - - +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* open class A(val v: String) { suspend fun suspendThere(v: String): String = suspendCoroutineOrReturn { x -> @@ -37,7 +35,7 @@ fun box(): String { } // FILE: JavaClass.java -import COROUTINES_PACKAGE.*; +import kotlin.coroutines.*; public class JavaClass { public static String foo() { final String[] res = new String[1]; @@ -49,12 +47,8 @@ public class JavaClass { } @Override - public void resume(String s) { - res[0] = s; - } - - @Override - public void resumeWithException(Throwable throwable) { + public void resumeWith(Object x) { + res[0] = (String) x; } }); diff --git a/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava_1_2.kt b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava_1_2.kt new file mode 100644 index 00000000000..a001788865f --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava_1_2.kt @@ -0,0 +1,61 @@ +// IGNORE_BACKEND: JS_IR +// WITH_RUNTIME +// WITH_COROUTINES +// FILE: main.kt +// TARGET_BACKEND: JVM +import helpers.* +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* + + + +open class A(val v: String) { + suspend fun suspendThere(v: String): String = suspendCoroutineOrReturn { x -> + x.resume(v) + COROUTINE_SUSPENDED + } + + open suspend fun suspendHere(): String = suspendThere("O") + suspendThere(v) +} + +class B(v: String) : A(v) { + override suspend fun suspendHere(): String = super.suspendHere() + suspendThere("56") +} + +fun builder(c: suspend A.() -> Unit) { + c.startCoroutine(B("K"), EmptyContinuation) +} + +fun box(): String { + var result = JavaClass.foo() + + if (result != "OK56") return "fail 1: $result" + + return "OK" +} + +// FILE: JavaClass.java +import kotlin.coroutines.experimental.*; +public class JavaClass { + public static String foo() { + final String[] res = new String[1]; + + new B("K").suspendHere(new Continuation() { + @Override + public CoroutineContext getContext() { + return EmptyCoroutineContext.INSTANCE; + } + + @Override + public void resume(String s) { + res[0] = s; + } + + @Override + public void resumeWithException(Throwable throwable) { + } + }); + + return res[0]; + } +} diff --git a/compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt b/compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt index d1d5be4acae..eef39b90bdd 100644 --- a/compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt +++ b/compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt @@ -1,8 +1,8 @@ +// LANGUAGE_VERSION: 1.3 // TARGET_BACKEND: JVM // IGNORE_BACKEND: JVM_IR // WITH_RUNTIME // WITH_COROUTINES -// COMMON_COROUTINES_TEST // FILE: I.kt @@ -14,16 +14,16 @@ interface I { public class JavaClass implements I { @Override - public Object foo(int x, COROUTINES_PACKAGE.Continuation continuation) { - continuation.resume("OK"); - return COROUTINES_PACKAGE.intrinsics.IntrinsicsKt.getCOROUTINE_SUSPENDED(); + public Object foo(int x, kotlin.coroutines.Continuation continuation) { + continuation.resumeWith("OK"); + return kotlin.coroutines.intrinsics.IntrinsicsKt.getCOROUTINE_SUSPENDED(); } } // FILE: main.kt import helpers.* -import COROUTINES_PACKAGE.* -import COROUTINES_PACKAGE.intrinsics.* +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* fun builder(c: suspend () -> Unit) { c.startCoroutine(EmptyContinuation) diff --git a/compiler/testData/codegen/box/coroutines/suspendJavaOverrides_1_2.kt b/compiler/testData/codegen/box/coroutines/suspendJavaOverrides_1_2.kt new file mode 100644 index 00000000000..c51f1d7369a --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/suspendJavaOverrides_1_2.kt @@ -0,0 +1,38 @@ +// TARGET_BACKEND: JVM +// WITH_RUNTIME +// WITH_COROUTINES + +// FILE: I.kt + +interface I { + suspend fun foo(x: Int): String +} + +// FILE: JavaClass.java + +public class JavaClass implements I { + @Override + public Object foo(int x, kotlin.coroutines.experimental.Continuation continuation) { + continuation.resume("OK"); + return kotlin.coroutines.experimental.intrinsics.IntrinsicsKt.getCOROUTINE_SUSPENDED(); + } +} + +// FILE: main.kt +import helpers.* +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* + +fun builder(c: suspend () -> Unit) { + c.startCoroutine(EmptyContinuation) +} + +fun box(): String { + var result = "fail" + + builder { + result = JavaClass().foo(1) + } + + return result +} diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt index 256ed8994bf..c4072596e43 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt @@ -1,68 +1,3 @@ -@kotlin.Metadata -public final class CrossinlineKt$box$1$doResume$$inlined$filter$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 L$5: 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$filter$1 - inner class CrossinlineKt$box$1$doResume$$inlined$filter$1 - inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$1 - public method (p0: CrossinlineKt$box$1$doResume$$inlined$filter$1, p1: COROUTINES_PACKAGE.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$filter$1$2$1 { - field L$0: java.lang.Object - field L$1: java.lang.Object - field L$2: 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$filter$1$2 - inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2 - inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2$1 - public method (p0: CrossinlineKt$box$1$doResume$$inlined$filter$1$2, p1: COROUTINES_PACKAGE.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$filter$1$2 { - synthetic final field receiver$0$inlined: Sink - synthetic final field this$0: CrossinlineKt$box$1$doResume$$inlined$filter$1 - inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2 - inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2$1 - public method (p0: Sink, p1: CrossinlineKt$box$1$doResume$$inlined$filter$1): 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: COROUTINES_PACKAGE.Continuation): java.lang.Object -} - -@kotlin.Metadata -public final class CrossinlineKt$box$1$doResume$$inlined$filter$1 { - synthetic final field receiver$0$inlined: SourceCrossinline - inner class CrossinlineKt$box$1$doResume$$inlined$filter$1 - inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$1 - public method (p0: SourceCrossinline): void - public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object -} - -@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$fold$$inlined$consumeEach$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: COROUTINES_PACKAGE.Continuation): java.lang.Object -} - @kotlin.Metadata public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 { field L$0: java.lang.Object @@ -72,13 +7,13 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 { field L$4: java.lang.Object field L$5: java.lang.Object synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$1 - public method (p0: CrossinlineKt$box$1$filter$$inlined$source$1, p1: COROUTINES_PACKAGE.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 + public method (p0: CrossinlineKt$box$1$filter$$inlined$source$1, p1: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -88,13 +23,13 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 { field L$1: java.lang.Object field L$2: java.lang.Object synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 - public method (p0: CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1, p1: COROUTINES_PACKAGE.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 + public method (p0: CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1, p1: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -106,7 +41,7 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 { inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 public method (p0: Sink, p1: CrossinlineKt$box$1$filter$$inlined$source$1): 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: COROUTINES_PACKAGE.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } @kotlin.Metadata @@ -116,19 +51,19 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1 { inner class CrossinlineKt$box$1$filter$$inlined$source$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$1 public method (p0: SourceCrossinline, p1: kotlin.jvm.functions.Function1): void - public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + 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$fold$$inlined$consumeEach$1$1 { synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int synthetic final field this$0: CrossinlineKt$box$1$fold$$inlined$consumeEach$1 inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1 inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 - public method (p0: CrossinlineKt$box$1$fold$$inlined$consumeEach$1, p1: COROUTINES_PACKAGE.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 + public method (p0: CrossinlineKt$box$1$fold$$inlined$consumeEach$1, p1: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -140,7 +75,72 @@ public final class CrossinlineKt$box$1$fold$$inlined$consumeEach$1 { inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 public method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.jvm.functions.Function3): 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: COROUTINES_PACKAGE.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object +} + +@kotlin.Metadata +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 + field L$3: java.lang.Object + field L$4: java.lang.Object + field L$5: java.lang.Object + synthetic field data: java.lang.Object + field label: int + 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 + public method (p0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1, p1: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +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 + synthetic field data: java.lang.Object + field label: int + 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 + public method (p0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2, p1: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2 { + synthetic final field receiver$0$inlined: Sink + synthetic final field this$0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1 + inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2 + inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2$1 + public method (p0: Sink, p1: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1): 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 +} + +@kotlin.Metadata +public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1 { + synthetic final field receiver$0$inlined: SourceCrossinline + inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1 + inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 + public method (p0: SourceCrossinline): void + 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 { + synthetic final field $acc$inlined: kotlin.jvm.internal.Ref$ObjectRef + inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 + inner class CrossinlineKt$box$1$invokeSuspend$$inlined$fold$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 } @kotlin.Metadata @@ -151,24 +151,25 @@ final class CrossinlineKt$box$1 { field L$2: java.lang.Object field L$3: java.lang.Object field L$4: java.lang.Object + field label: int inner class CrossinlineKt$box$1 - method (p0: kotlin.jvm.internal.Ref$IntRef, p1: COROUTINES_PACKAGE.Continuation): void - public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): COROUTINES_PACKAGE.Continuation - 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 - public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object + method (p0: kotlin.jvm.internal.Ref$IntRef, p1: kotlin.coroutines.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object public synthetic method invoke(p0: java.lang.Object): java.lang.Object + 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$consumeEach$2$send$1 { synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int synthetic final field this$0: CrossinlineKt$consumeEach$2 inner class CrossinlineKt$consumeEach$2 inner class CrossinlineKt$consumeEach$2$send$1 - public method (p0: CrossinlineKt$consumeEach$2, p1: COROUTINES_PACKAGE.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 + public method (p0: CrossinlineKt$consumeEach$2, p1: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -179,7 +180,7 @@ public final class CrossinlineKt$consumeEach$2 { inner class CrossinlineKt$consumeEach$2$send$1 public method (p0: kotlin.jvm.functions.Function2): 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: COROUTINES_PACKAGE.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } @kotlin.Metadata @@ -191,13 +192,13 @@ public final class CrossinlineKt$filter$$inlined$source$1$1 { field L$4: java.lang.Object field L$5: java.lang.Object synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int 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 - public method (p0: CrossinlineKt$filter$$inlined$source$1, p1: COROUTINES_PACKAGE.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 + public method (p0: CrossinlineKt$filter$$inlined$source$1, p1: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -207,13 +208,13 @@ public final class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 { field L$1: java.lang.Object field L$2: java.lang.Object synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 - public method (p0: CrossinlineKt$filter$$inlined$source$1$lambda$1, p1: COROUTINES_PACKAGE.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 + public method (p0: CrossinlineKt$filter$$inlined$source$1$lambda$1, p1: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -225,7 +226,7 @@ public final class CrossinlineKt$filter$$inlined$source$1$lambda$1 { inner class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 public method (p0: Sink, p1: CrossinlineKt$filter$$inlined$source$1): 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: COROUTINES_PACKAGE.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } @kotlin.Metadata @@ -235,19 +236,19 @@ public final class CrossinlineKt$filter$$inlined$source$1 { inner class CrossinlineKt$filter$$inlined$source$1 inner class CrossinlineKt$filter$$inlined$source$1$1 public method (p0: SourceCrossinline, p1: kotlin.jvm.functions.Function1): void - public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + 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$fold$$inlined$consumeEach$1$1 { synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int 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 - public method (p0: CrossinlineKt$fold$$inlined$consumeEach$1, p1: COROUTINES_PACKAGE.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 + public method (p0: CrossinlineKt$fold$$inlined$consumeEach$1, p1: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -259,7 +260,7 @@ public final class CrossinlineKt$fold$$inlined$consumeEach$1 { inner class CrossinlineKt$fold$$inlined$consumeEach$1$1 public method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.jvm.functions.Function3): 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: COROUTINES_PACKAGE.Continuation): java.lang.Object + public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } @kotlin.Metadata @@ -272,13 +273,13 @@ public final class CrossinlineKt$range$$inlined$source$1$1 { field L$3: java.lang.Object field L$4: java.lang.Object synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int 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 - public method (p0: CrossinlineKt$range$$inlined$source$1, p1: COROUTINES_PACKAGE.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 + public method (p0: CrossinlineKt$range$$inlined$source$1, p1: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -289,19 +290,19 @@ public final class CrossinlineKt$range$$inlined$source$1 { inner class CrossinlineKt$range$$inlined$source$1 inner class CrossinlineKt$range$$inlined$source$1$1 public method (p0: int, p1: int): void - public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + 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$source$1$consume$1 { synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int synthetic final field this$0: CrossinlineKt$source$1 inner class CrossinlineKt$source$1 inner class CrossinlineKt$source$1$consume$1 - public method (p0: CrossinlineKt$source$1, p1: COROUTINES_PACKAGE.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 + public method (p0: CrossinlineKt$source$1, p1: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -311,7 +312,7 @@ public final class CrossinlineKt$source$1 { inner class CrossinlineKt$source$1 inner class CrossinlineKt$source$1$consume$1 public method (p0: kotlin.jvm.functions.Function2): void - public @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + 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 @@ -321,9 +322,9 @@ public final class CrossinlineKt { inner class CrossinlineKt$source$1 public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void - private final static method consumeEach(@org.jetbrains.annotations.NotNull p0: SourceCrossinline, p1: kotlin.jvm.functions.Function2, p2: COROUTINES_PACKAGE.Continuation): java.lang.Object + private final static method consumeEach(@org.jetbrains.annotations.NotNull p0: SourceCrossinline, p1: kotlin.jvm.functions.Function2, p2: kotlin.coroutines.Continuation): java.lang.Object public final static @org.jetbrains.annotations.NotNull method filter(@org.jetbrains.annotations.NotNull p0: SourceCrossinline, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function1): SourceCrossinline - private final static method fold(@org.jetbrains.annotations.NotNull p0: SourceCrossinline, p1: java.lang.Object, p2: kotlin.jvm.functions.Function3, p3: COROUTINES_PACKAGE.Continuation): java.lang.Object + private final static method fold(@org.jetbrains.annotations.NotNull p0: SourceCrossinline, p1: java.lang.Object, p2: kotlin.jvm.functions.Function3, p3: kotlin.coroutines.Continuation): java.lang.Object public final static method isGood(p0: int): boolean public final static @org.jetbrains.annotations.NotNull method range(@org.jetbrains.annotations.NotNull p0: SourceCrossinline$Factory, p1: int, p2: int): SourceCrossinline public final static @org.jetbrains.annotations.NotNull method source(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): SourceCrossinline @@ -332,7 +333,7 @@ public final class CrossinlineKt { @kotlin.Metadata public interface Sink { public abstract method close(@org.jetbrains.annotations.Nullable p0: java.lang.Throwable): void - public abstract @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + public abstract @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } @kotlin.Metadata @@ -348,5 +349,5 @@ public interface SourceCrossinline { public final static field Factory: SourceCrossinline$Factory inner class SourceCrossinline$Factory static method (): void - public abstract @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + public abstract @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @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 new file mode 100644 index 00000000000..e27d95ea936 --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_1_2.txt @@ -0,0 +1,352 @@ +@kotlin.Metadata +public final class CrossinlineKt$box$1$doResume$$inlined$filter$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 L$5: 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$filter$1 + inner class CrossinlineKt$box$1$doResume$$inlined$filter$1 + inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$1 + public method (p0: CrossinlineKt$box$1$doResume$$inlined$filter$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$filter$1$2$1 { + field L$0: java.lang.Object + field L$1: java.lang.Object + field L$2: 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$filter$1$2 + inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2 + inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2$1 + public method (p0: CrossinlineKt$box$1$doResume$$inlined$filter$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 CrossinlineKt$box$1$doResume$$inlined$filter$1$2 { + synthetic final field receiver$0$inlined: Sink + synthetic final field this$0: CrossinlineKt$box$1$doResume$$inlined$filter$1 + inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2 + inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2$1 + public method (p0: Sink, p1: CrossinlineKt$box$1$doResume$$inlined$filter$1): 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 +} + +@kotlin.Metadata +public final class CrossinlineKt$box$1$doResume$$inlined$filter$1 { + synthetic final field receiver$0$inlined: SourceCrossinline + inner class CrossinlineKt$box$1$doResume$$inlined$filter$1 + inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$1 + public method (p0: SourceCrossinline): void + 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 { + synthetic final field $acc$inlined: kotlin.jvm.internal.Ref$ObjectRef + inner class CrossinlineKt$box$1$doResume$$inlined$fold$1 + inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$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 +} + +@kotlin.Metadata +public final class CrossinlineKt$box$1$filter$$inlined$source$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 L$5: java.lang.Object + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1 + inner class CrossinlineKt$box$1$filter$$inlined$source$1 + inner class CrossinlineKt$box$1$filter$$inlined$source$1$1 + public method (p0: CrossinlineKt$box$1$filter$$inlined$source$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$filter$$inlined$source$1$lambda$1$1 { + field L$0: java.lang.Object + field L$1: java.lang.Object + field L$2: java.lang.Object + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 + inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 + inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 + public method (p0: CrossinlineKt$box$1$filter$$inlined$source$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 CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 { + synthetic final field receiver$0$inlined: Sink + synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1 + inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 + inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 + public method (p0: Sink, p1: CrossinlineKt$box$1$filter$$inlined$source$1): 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 +} + +@kotlin.Metadata +public final class CrossinlineKt$box$1$filter$$inlined$source$1 { + synthetic final field $predicate$inlined: kotlin.jvm.functions.Function1 + synthetic final field receiver$0$inlined: SourceCrossinline + inner class CrossinlineKt$box$1$filter$$inlined$source$1 + inner class CrossinlineKt$box$1$filter$$inlined$source$1$1 + public method (p0: SourceCrossinline, p1: kotlin.jvm.functions.Function1): void + 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$fold$$inlined$consumeEach$1$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + synthetic final field this$0: CrossinlineKt$box$1$fold$$inlined$consumeEach$1 + inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1 + inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 + public method (p0: CrossinlineKt$box$1$fold$$inlined$consumeEach$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$fold$$inlined$consumeEach$1 { + synthetic final field $acc$inlined: kotlin.jvm.internal.Ref$ObjectRef + synthetic final field $operation$inlined: kotlin.jvm.functions.Function3 + inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1 + inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 + public method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.jvm.functions.Function3): 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 +} + +@kotlin.Metadata +final class CrossinlineKt$box$1 { + synthetic final field $res: kotlin.jvm.internal.Ref$IntRef + 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 + inner class CrossinlineKt$box$1 + method (p0: kotlin.jvm.internal.Ref$IntRef, p1: kotlin.coroutines.experimental.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): kotlin.coroutines.experimental.Continuation + 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 + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + public synthetic method invoke(p0: java.lang.Object): java.lang.Object +} + +@kotlin.Metadata +public final class CrossinlineKt$consumeEach$2$send$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + synthetic final field this$0: CrossinlineKt$consumeEach$2 + inner class CrossinlineKt$consumeEach$2 + inner class CrossinlineKt$consumeEach$2$send$1 + public method (p0: CrossinlineKt$consumeEach$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 CrossinlineKt$consumeEach$2 { + synthetic final field $action: kotlin.jvm.functions.Function2 + inner class CrossinlineKt$consumeEach$2 + inner class CrossinlineKt$consumeEach$2$send$1 + public method (p0: kotlin.jvm.functions.Function2): 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 +} + +@kotlin.Metadata +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 + field L$3: java.lang.Object + field L$4: java.lang.Object + field L$5: java.lang.Object + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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 + public method (p0: CrossinlineKt$filter$$inlined$source$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$filter$$inlined$source$1$lambda$1$1 { + field L$0: java.lang.Object + field L$1: java.lang.Object + field L$2: java.lang.Object + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1$lambda$1 + inner class CrossinlineKt$filter$$inlined$source$1$lambda$1 + inner class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 + public method (p0: CrossinlineKt$filter$$inlined$source$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 CrossinlineKt$filter$$inlined$source$1$lambda$1 { + synthetic final field receiver$0$inlined: Sink + synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1 + inner class CrossinlineKt$filter$$inlined$source$1$lambda$1 + inner class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 + public method (p0: Sink, p1: CrossinlineKt$filter$$inlined$source$1): 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 +} + +@kotlin.Metadata +public final class CrossinlineKt$filter$$inlined$source$1 { + synthetic final field $predicate$inlined: kotlin.jvm.functions.Function1 + synthetic final field receiver$0$inlined: SourceCrossinline + inner class CrossinlineKt$filter$$inlined$source$1 + inner class CrossinlineKt$filter$$inlined$source$1$1 + public method (p0: SourceCrossinline, p1: kotlin.jvm.functions.Function1): void + 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$fold$$inlined$consumeEach$1$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + 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 + public method (p0: CrossinlineKt$fold$$inlined$consumeEach$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$fold$$inlined$consumeEach$1 { + synthetic final field $acc$inlined: kotlin.jvm.internal.Ref$ObjectRef + synthetic final field $operation$inlined: kotlin.jvm.functions.Function3 + inner class CrossinlineKt$fold$$inlined$consumeEach$1 + inner class CrossinlineKt$fold$$inlined$consumeEach$1$1 + public method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.jvm.functions.Function3): 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 +} + +@kotlin.Metadata +public final class CrossinlineKt$range$$inlined$source$1$1 { + field I$0: int + field I$1: int + 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$range$$inlined$source$1 + inner class CrossinlineKt$range$$inlined$source$1 + inner class CrossinlineKt$range$$inlined$source$1$1 + public method (p0: CrossinlineKt$range$$inlined$source$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$range$$inlined$source$1 { + synthetic final field $count$inlined: int + synthetic final field $start$inlined: int + inner class CrossinlineKt$range$$inlined$source$1 + inner class CrossinlineKt$range$$inlined$source$1$1 + public method (p0: int, p1: int): void + 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$source$1$consume$1 { + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + synthetic final field this$0: CrossinlineKt$source$1 + inner class CrossinlineKt$source$1 + inner class CrossinlineKt$source$1$consume$1 + public method (p0: CrossinlineKt$source$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$source$1 { + synthetic final field $action: kotlin.jvm.functions.Function2 + inner class CrossinlineKt$source$1 + inner class CrossinlineKt$source$1$consume$1 + public method (p0: kotlin.jvm.functions.Function2): void + 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 { + inner class CrossinlineKt$box$1 + inner class CrossinlineKt$consumeEach$2 + inner class CrossinlineKt$source$1 + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String + public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void + private final static method consumeEach(@org.jetbrains.annotations.NotNull p0: SourceCrossinline, p1: kotlin.jvm.functions.Function2, p2: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.NotNull method filter(@org.jetbrains.annotations.NotNull p0: SourceCrossinline, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function1): SourceCrossinline + private final static method fold(@org.jetbrains.annotations.NotNull p0: SourceCrossinline, p1: java.lang.Object, p2: kotlin.jvm.functions.Function3, p3: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static method isGood(p0: int): boolean + public final static @org.jetbrains.annotations.NotNull method range(@org.jetbrains.annotations.NotNull p0: SourceCrossinline$Factory, p1: int, p2: int): SourceCrossinline + public final static @org.jetbrains.annotations.NotNull method source(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): SourceCrossinline +} + +@kotlin.Metadata +public interface Sink { + public abstract method close(@org.jetbrains.annotations.Nullable p0: java.lang.Throwable): void + public abstract @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class SourceCrossinline$Factory { + synthetic final static field $$INSTANCE: SourceCrossinline$Factory + inner class SourceCrossinline$Factory + static method (): void + private method (): void +} + +@kotlin.Metadata +public interface SourceCrossinline { + public final static field Factory: SourceCrossinline$Factory + inner class SourceCrossinline$Factory + static method (): void + public abstract @org.jetbrains.annotations.Nullable method consume(@org.jetbrains.annotations.NotNull p0: Sink, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine.txt index dd1c2e0b921..8ce3aee5101 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine.txt @@ -2,12 +2,13 @@ final class InlineWithStateMachineKt$box$1 { synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef field L$0: java.lang.Object + field label: int inner class InlineWithStateMachineKt$box$1 - method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: COROUTINES_PACKAGE.Continuation): void - public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): COROUTINES_PACKAGE.Continuation - 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 - public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object + method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object public synthetic method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata @@ -15,11 +16,11 @@ final class InlineWithStateMachineKt$mainSuspend$1 { field L$0: java.lang.Object field L$1: java.lang.Object synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int inner class InlineWithStateMachineKt$mainSuspend$1 - method (p0: COROUTINES_PACKAGE.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 + method (p0: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -28,11 +29,11 @@ public final class InlineWithStateMachineKt$suspendHere$1 { field L$0: java.lang.Object field L$1: java.lang.Object synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int inner class InlineWithStateMachineKt$suspendHere$1 - public method (p0: COROUTINES_PACKAGE.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 + public method (p0: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -43,9 +44,9 @@ public final class InlineWithStateMachineKt { inner class InlineWithStateMachineKt$suspendHere$1 public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void - public final static @org.jetbrains.annotations.Nullable method mainSuspend(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object - private final static @org.jetbrains.annotations.Nullable method suspendHere$$forInline(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object - public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object - private final static @org.jetbrains.annotations.Nullable method suspendThere$$forInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object - public final static @org.jetbrains.annotations.Nullable method suspendThere(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method mainSuspend(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + private final static @org.jetbrains.annotations.Nullable method suspendHere$$forInline(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + private final static @org.jetbrains.annotations.Nullable method suspendThere$$forInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendThere(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine_1_2.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine_1_2.txt new file mode 100644 index 00000000000..f8cc6565471 --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine_1_2.txt @@ -0,0 +1,51 @@ +@kotlin.Metadata +final class InlineWithStateMachineKt$box$1 { + synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef + field L$0: java.lang.Object + inner class InlineWithStateMachineKt$box$1 + method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.experimental.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): kotlin.coroutines.experimental.Continuation + 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 + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + public synthetic method invoke(p0: java.lang.Object): java.lang.Object +} + +@kotlin.Metadata +final class InlineWithStateMachineKt$mainSuspend$1 { + field L$0: java.lang.Object + field L$1: java.lang.Object + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + inner class InlineWithStateMachineKt$mainSuspend$1 + method (p0: 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 InlineWithStateMachineKt$suspendHere$1 { + field L$0: java.lang.Object + field L$1: java.lang.Object + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + inner class InlineWithStateMachineKt$suspendHere$1 + public method (p0: 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 InlineWithStateMachineKt { + inner class InlineWithStateMachineKt$box$1 + inner class InlineWithStateMachineKt$mainSuspend$1 + inner class InlineWithStateMachineKt$suspendHere$1 + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String + public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void + public final static @org.jetbrains.annotations.Nullable method mainSuspend(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + private final static @org.jetbrains.annotations.Nullable method suspendHere$$forInline(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + private final static @org.jetbrains.annotations.Nullable method suspendThere$$forInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendThere(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt index 99505265e8f..70bf0ae02af 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt @@ -3,23 +3,24 @@ final class InlineWithoutStateMachineKt$box$1 { synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef field L$0: java.lang.Object field L$1: java.lang.Object + field label: int inner class InlineWithoutStateMachineKt$box$1 - method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: COROUTINES_PACKAGE.Continuation): void - public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): COROUTINES_PACKAGE.Continuation - 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 - public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object + method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object public synthetic method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata final class InlineWithoutStateMachineKt$complexSuspend$1 { field L$0: java.lang.Object synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int inner class InlineWithoutStateMachineKt$complexSuspend$1 - method (p0: COROUTINES_PACKAGE.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 + method (p0: kotlin.coroutines.Continuation): void synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -29,8 +30,8 @@ public final class InlineWithoutStateMachineKt { inner class InlineWithoutStateMachineKt$complexSuspend$1 public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void - public final static @org.jetbrains.annotations.Nullable method complexSuspend(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object - public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object - private final static @org.jetbrains.annotations.Nullable method suspendThere$$forInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object - public final static @org.jetbrains.annotations.Nullable method suspendThere(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method complexSuspend(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + private final static @org.jetbrains.annotations.Nullable method suspendThere$$forInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendThere(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine_1_2.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine_1_2.txt new file mode 100644 index 00000000000..302b5c3cfdb --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine_1_2.txt @@ -0,0 +1,36 @@ +@kotlin.Metadata +final class InlineWithoutStateMachineKt$box$1 { + synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef + field L$0: java.lang.Object + field L$1: java.lang.Object + inner class InlineWithoutStateMachineKt$box$1 + method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.experimental.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): kotlin.coroutines.experimental.Continuation + 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 + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + public synthetic method invoke(p0: java.lang.Object): java.lang.Object +} + +@kotlin.Metadata +final class InlineWithoutStateMachineKt$complexSuspend$1 { + field L$0: java.lang.Object + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + inner class InlineWithoutStateMachineKt$complexSuspend$1 + method (p0: 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 InlineWithoutStateMachineKt { + inner class InlineWithoutStateMachineKt$box$1 + inner class InlineWithoutStateMachineKt$complexSuspend$1 + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String + public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void + public final static @org.jetbrains.annotations.Nullable method complexSuspend(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + private final static @org.jetbrains.annotations.Nullable method suspendThere$$forInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendThere(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple.txt index 5b367695740..8636074036f 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple.txt @@ -2,12 +2,13 @@ final class SimpleKt$box$1 { synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef field L$0: java.lang.Object + field label: int inner class SimpleKt$box$1 - method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: COROUTINES_PACKAGE.Continuation): void - public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): COROUTINES_PACKAGE.Continuation - 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 - public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object + method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object public synthetic method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata @@ -15,6 +16,6 @@ public final class SimpleKt { inner class SimpleKt$box$1 public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void - public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object - public final static @org.jetbrains.annotations.Nullable method suspendThere(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendThere(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple_1_2.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple_1_2.txt new file mode 100644 index 00000000000..18525856960 --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple_1_2.txt @@ -0,0 +1,20 @@ +@kotlin.Metadata +final class SimpleKt$box$1 { + synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef + field L$0: java.lang.Object + inner class SimpleKt$box$1 + method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.experimental.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): kotlin.coroutines.experimental.Continuation + 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 + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + public synthetic method invoke(p0: java.lang.Object): java.lang.Object +} + +@kotlin.Metadata +public final class SimpleKt { + inner class SimpleKt$box$1 + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String + public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void + public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendThere(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object +} diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit.txt index c748f450074..d2f9f441686 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit.txt @@ -1,11 +1,12 @@ @kotlin.Metadata final class WhenUnitKt$box$1 { + field label: int inner class WhenUnitKt$box$1 - method (p0: COROUTINES_PACKAGE.Continuation): void - public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): COROUTINES_PACKAGE.Continuation - 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 - public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object + method (p0: kotlin.coroutines.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object public synthetic method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata @@ -16,9 +17,9 @@ public final class WhenUnitKt { public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void public final static @org.jetbrains.annotations.NotNull method getLog(): java.lang.String - public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X$A, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object - public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X$B, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object - public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X$A, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X$B, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object public final static method setLog(@org.jetbrains.annotations.NotNull p0: java.lang.String): void } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit_1_2.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit_1_2.txt new file mode 100644 index 00000000000..f4e4128657d --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit_1_2.txt @@ -0,0 +1,43 @@ +@kotlin.Metadata +final class WhenUnitKt$box$1 { + inner class WhenUnitKt$box$1 + method (p0: kotlin.coroutines.experimental.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): kotlin.coroutines.experimental.Continuation + 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 + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + public synthetic method invoke(p0: java.lang.Object): java.lang.Object +} + +@kotlin.Metadata +public final class WhenUnitKt { + private static @org.jetbrains.annotations.NotNull field log: java.lang.String + inner class WhenUnitKt$box$1 + static method (): void + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String + public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void + public final static @org.jetbrains.annotations.NotNull method getLog(): java.lang.String + public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X$A, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X$B, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object + public final static method setLog(@org.jetbrains.annotations.NotNull p0: java.lang.String): void +} + +@kotlin.Metadata +public final class X$A { + inner class X$A + public method (): void +} + +@kotlin.Metadata +public final class X$B { + inner class X$B + public method (): void +} + +@kotlin.Metadata +public abstract class X { + inner class X$A + inner class X$B + private method (): void + public synthetic method (p0: kotlin.jvm.internal.DefaultConstructorMarker): void +} diff --git a/compiler/testData/codegen/bytecodeListing/coroutineContextIntrinsic_1_3.txt b/compiler/testData/codegen/bytecodeListing/coroutineContextIntrinsic_1_3.txt new file mode 100644 index 00000000000..3e0c7c40eac --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/coroutineContextIntrinsic_1_3.txt @@ -0,0 +1,19 @@ +@kotlin.Metadata +final class CoroutineContextIntrinsicKt$notTailCall$1 { + synthetic field data: java.lang.Object + field label: int + inner class CoroutineContextIntrinsicKt$notTailCall$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class CoroutineContextIntrinsicKt { + inner class CoroutineContextIntrinsicKt$notTailCall$1 + public final static @org.jetbrains.annotations.Nullable method mustBeTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method notTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method retrieveCoroutineContext(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.CoroutineContext, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object +} diff --git a/compiler/testData/codegen/bytecodeListing/coroutineFields_1_3.txt b/compiler/testData/codegen/bytecodeListing/coroutineFields_1_3.txt new file mode 100644 index 00000000000..6608a4363ae --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/coroutineFields_1_3.txt @@ -0,0 +1,60 @@ +@kotlin.Metadata +final class Controller$multipleSuspensions$1 { + field L$0: java.lang.Object + synthetic field data: java.lang.Object + field label: int + synthetic final field this$0: Controller + inner class Controller$multipleSuspensions$1 + method (p0: Controller, p1: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +final class Controller$nonTailCall$1 { + field L$0: java.lang.Object + synthetic field data: java.lang.Object + field label: int + synthetic final field this$0: Controller + inner class Controller$nonTailCall$1 + method (p0: Controller, p1: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class Controller { + inner class Controller$multipleSuspensions$1 + inner class Controller$nonTailCall$1 + public method (): void + public final @org.jetbrains.annotations.Nullable method multipleSuspensions(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final @org.jetbrains.annotations.Nullable method nonTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final @org.jetbrains.annotations.Nullable method tailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object +} + +@kotlin.Metadata +final class CoroutineFieldsKt$box$1 { + synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef + field J$0: long + field L$0: java.lang.Object + field L$1: java.lang.Object + field label: int + private field p$: Controller + inner class CoroutineFieldsKt$box$1 + method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: Controller, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public synthetic method create(p0: java.lang.Object, p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: Controller, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public synthetic method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object +} + +@kotlin.Metadata +public final class CoroutineFieldsKt { + inner class CoroutineFieldsKt$box$1 + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String + public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): void +} diff --git a/compiler/testData/codegen/bytecodeListing/oomInReturnUnit.txt b/compiler/testData/codegen/bytecodeListing/oomInReturnUnit.txt index 302e1eca17f..a0f92cb2830 100644 --- a/compiler/testData/codegen/bytecodeListing/oomInReturnUnit.txt +++ b/compiler/testData/codegen/bytecodeListing/oomInReturnUnit.txt @@ -17,6 +17,13 @@ public final class OomInReturnUnitKt { public final static @org.jetbrains.annotations.Nullable method test(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object } +@kotlin.Metadata +public abstract class helpers/ContinuationAdapter { + private final @org.jetbrains.annotations.NotNull field context: COROUTINES_PACKAGE.CoroutineContext + public method (): void + public @org.jetbrains.annotations.NotNull method getContext(): COROUTINES_PACKAGE.CoroutineContext +} + @kotlin.Metadata public final class helpers/CoroutineUtilKt$handleExceptionContinuation$1 { synthetic final field $x: kotlin.jvm.functions.Function1 diff --git a/compiler/testData/codegen/bytecodeListing/oomInReturnUnit_1_3.txt b/compiler/testData/codegen/bytecodeListing/oomInReturnUnit_1_3.txt new file mode 100644 index 00000000000..25b38de33c0 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/oomInReturnUnit_1_3.txt @@ -0,0 +1,78 @@ +@kotlin.Metadata +final class OomInReturnUnitKt$test$1 { + field L$0: java.lang.Object + synthetic field data: java.lang.Object + field label: int + inner class OomInReturnUnitKt$test$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class OomInReturnUnitKt { + inner class OomInReturnUnitKt$test$1 + public final static @org.jetbrains.annotations.Nullable method some(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method test(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object +} + +@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/bytecodeListing/releaseCoroutines.kt b/compiler/testData/codegen/bytecodeListing/releaseCoroutines.kt index 7a38896d628..3a79c14a406 100644 --- a/compiler/testData/codegen/bytecodeListing/releaseCoroutines.kt +++ b/compiler/testData/codegen/bytecodeListing/releaseCoroutines.kt @@ -1,4 +1,4 @@ -// !API_VERSION: 1.3 +// LANGUAGE_VERSION: 1.3 suspend fun named() {} diff --git a/compiler/testData/codegen/bytecodeListing/releaseCoroutines.txt b/compiler/testData/codegen/bytecodeListing/releaseCoroutines.txt index 34e1e66f5db..c51a6b487e4 100644 --- a/compiler/testData/codegen/bytecodeListing/releaseCoroutines.txt +++ b/compiler/testData/codegen/bytecodeListing/releaseCoroutines.txt @@ -1,20 +1,22 @@ @kotlin.Metadata final class ReleaseCoroutinesKt$l$1 { + field label: int inner class ReleaseCoroutinesKt$l$1 method (p0: kotlin.coroutines.Continuation): void - public final @org.jetbrains.annotations.Nullable method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object - 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 - public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata final class ReleaseCoroutinesKt$withStateMachine$1 { synthetic field data: java.lang.Object - synthetic field exception: java.lang.Throwable + field label: int inner class ReleaseCoroutinesKt$withStateMachine$1 method (p0: kotlin.coroutines.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 + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object synthetic final method setLabel(p0: int): void } @@ -25,6 +27,6 @@ public final class ReleaseCoroutinesKt { inner class ReleaseCoroutinesKt$withStateMachine$1 static method (): void public final static @org.jetbrains.annotations.NotNull method getL(): kotlin.jvm.functions.Function1 - public final static @org.jetbrains.annotations.Nullable method named(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object - public final static @org.jetbrains.annotations.Nullable method withStateMachine(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method named(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method withStateMachine(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object } diff --git a/compiler/testData/codegen/bytecodeListing/tailcall/tailSuspendUnitFun_1_3.txt b/compiler/testData/codegen/bytecodeListing/tailcall/tailSuspendUnitFun_1_3.txt new file mode 100644 index 00000000000..5391a7402aa --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/tailcall/tailSuspendUnitFun_1_3.txt @@ -0,0 +1,117 @@ +@kotlin.Metadata +public final class Generic { + public method (): void + public final @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object +} + +@kotlin.Metadata +final class TailSuspendUnitFunKt$callsIntNotTailCall$1 { + synthetic field data: java.lang.Object + field label: int + inner class TailSuspendUnitFunKt$callsIntNotTailCall$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +final class TailSuspendUnitFunKt$lambdaAsParameterNotTailCall$1 { + field L$0: java.lang.Object + synthetic field data: java.lang.Object + field label: int + inner class TailSuspendUnitFunKt$lambdaAsParameterNotTailCall$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +final class TailSuspendUnitFunKt$multipleExitPointsNotTailCall$1 { + field Z$0: boolean + synthetic field data: java.lang.Object + field label: int + inner class TailSuspendUnitFunKt$multipleExitPointsNotTailCall$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +final class TailSuspendUnitFunKt$multipleExitPointsWhen$2 { + field label: int + inner class TailSuspendUnitFunKt$multipleExitPointsWhen$2 + method (p0: kotlin.coroutines.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object +} + +@kotlin.Metadata +final class TailSuspendUnitFunKt$notTailCall$1 { + synthetic field data: java.lang.Object + field label: int + inner class TailSuspendUnitFunKt$notTailCall$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +final class TailSuspendUnitFunKt$useGenericIngerType$2 { + public final static field INSTANCE: TailSuspendUnitFunKt$useGenericIngerType$2 + inner class TailSuspendUnitFunKt$useGenericIngerType$2 + static method (): void + method (): void + public synthetic method invoke(): java.lang.Object + public final method invoke(): void +} + +@kotlin.Metadata +final class TailSuspendUnitFunKt$useNullableUnit$1 { + synthetic field data: java.lang.Object + field label: int + inner class TailSuspendUnitFunKt$useNullableUnit$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TailSuspendUnitFunKt { + inner class TailSuspendUnitFunKt$callsIntNotTailCall$1 + inner class TailSuspendUnitFunKt$lambdaAsParameterNotTailCall$1 + inner class TailSuspendUnitFunKt$multipleExitPointsNotTailCall$1 + inner class TailSuspendUnitFunKt$multipleExitPointsWhen$2 + inner class TailSuspendUnitFunKt$notTailCall$1 + inner class TailSuspendUnitFunKt$useGenericIngerType$2 + inner class TailSuspendUnitFunKt$useNullableUnit$1 + public final static @org.jetbrains.annotations.Nullable method callsIntNotTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method empty(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method genericInferType(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method lambdaAsParameter(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method lambdaAsParameterNotTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method lambdaAsParameterReturn(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method multipleExitPoints(p0: boolean, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method multipleExitPointsNotTailCall(p0: boolean, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWhen(p0: int, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWithOrdinaryInline(p0: boolean, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method notTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method nullableUnit(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static method ordinary(): int + public final static method ordinaryInline(): void + public final static @org.jetbrains.annotations.Nullable method returnsInt(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useGenericClass(@org.jetbrains.annotations.NotNull p0: Generic, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useGenericIngerType(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useGenericReturningUnit(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useNullableUnit(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useRunRunRunRunRun(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method withReturn(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method withoutReturn(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object +} diff --git a/compiler/testData/codegen/bytecodeListing/tailcall/tryCatchTailCall_1_3.txt b/compiler/testData/codegen/bytecodeListing/tailcall/tryCatchTailCall_1_3.txt new file mode 100644 index 00000000000..17ad85684bc --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/tailcall/tryCatchTailCall_1_3.txt @@ -0,0 +1,17 @@ +@kotlin.Metadata +final class TryCatchTailCallKt$catchException$1 { + synthetic field data: java.lang.Object + field label: int + inner class TryCatchTailCallKt$catchException$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class TryCatchTailCallKt { + inner class TryCatchTailCallKt$catchException$1 + public final static @org.jetbrains.annotations.Nullable method catchException(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method suspendWithException(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object +} diff --git a/compiler/testData/codegen/bytecodeListing/tailcall/unreachable_1_3.txt b/compiler/testData/codegen/bytecodeListing/tailcall/unreachable_1_3.txt new file mode 100644 index 00000000000..51396890c4f --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/tailcall/unreachable_1_3.txt @@ -0,0 +1,117 @@ +@kotlin.Metadata +public final class Generic { + public method (): void + public final @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object +} + +@kotlin.Metadata +final class UnreachableKt$callsIntNotTailCall$1 { + synthetic field data: java.lang.Object + field label: int + inner class UnreachableKt$callsIntNotTailCall$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +final class UnreachableKt$lambdaAsParameterNotTailCall$1 { + field L$0: java.lang.Object + synthetic field data: java.lang.Object + field label: int + inner class UnreachableKt$lambdaAsParameterNotTailCall$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +final class UnreachableKt$multipleExitPointsNotTailCall$1 { + field Z$0: boolean + synthetic field data: java.lang.Object + field label: int + inner class UnreachableKt$multipleExitPointsNotTailCall$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +final class UnreachableKt$multipleExitPointsWhen$2 { + field label: int + inner class UnreachableKt$multipleExitPointsWhen$2 + method (p0: kotlin.coroutines.Continuation): void + public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object +} + +@kotlin.Metadata +final class UnreachableKt$notTailCall$1 { + synthetic field data: java.lang.Object + field label: int + inner class UnreachableKt$notTailCall$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +final class UnreachableKt$useGenericInferType$2 { + public final static field INSTANCE: UnreachableKt$useGenericInferType$2 + inner class UnreachableKt$useGenericInferType$2 + static method (): void + method (): void + public synthetic method invoke(): java.lang.Object + public final method invoke(): void +} + +@kotlin.Metadata +final class UnreachableKt$useNullableUnit$1 { + synthetic field data: java.lang.Object + field label: int + inner class UnreachableKt$useNullableUnit$1 + method (p0: kotlin.coroutines.Continuation): void + synthetic final method getLabel(): int + public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + synthetic final method setLabel(p0: int): void +} + +@kotlin.Metadata +public final class UnreachableKt { + inner class UnreachableKt$callsIntNotTailCall$1 + inner class UnreachableKt$lambdaAsParameterNotTailCall$1 + inner class UnreachableKt$multipleExitPointsNotTailCall$1 + inner class UnreachableKt$multipleExitPointsWhen$2 + inner class UnreachableKt$notTailCall$1 + inner class UnreachableKt$useGenericInferType$2 + inner class UnreachableKt$useNullableUnit$1 + public final static @org.jetbrains.annotations.Nullable method callsIntNotTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method empty(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method genericInferType(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method lambdaAsParameter(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method lambdaAsParameterNotTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method lambdaAsParameterReturn(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method multipleExitPoints(p0: boolean, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method multipleExitPointsNotTailCall(p0: boolean, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWhen(p0: int, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWithOrdinaryInline(p0: boolean, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method notTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method nullableUnit(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static method ordinary(): int + public final static method ordinaryInline(): void + public final static @org.jetbrains.annotations.Nullable method returnsInt(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method twoReturns(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useGenericClass(@org.jetbrains.annotations.NotNull p0: Generic, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useGenericInferType(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useGenericReturningUnit(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useNullableUnit(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method useRunRunRunRunRun(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object + public final static @org.jetbrains.annotations.Nullable method withoutReturn(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object +} diff --git a/compiler/testData/codegen/bytecodeText/constCoroutine.kt b/compiler/testData/codegen/bytecodeText/constCoroutine.kt index 1bb0a24730b..5296a11ea51 100644 --- a/compiler/testData/codegen/bytecodeText/constCoroutine.kt +++ b/compiler/testData/codegen/bytecodeText/constCoroutine.kt @@ -24,5 +24,5 @@ fun box(): String { // 2 GETSTATIC kotlin/Unit.INSTANCE // 1 GETSTATIC helpers/EmptyContinuation.Companion -// 3 GETSTATIC kotlin\/coroutines\/experimental\/EmptyCoroutineContext.INSTANCE -// 6 GETSTATIC +// 4 GETSTATIC kotlin\/coroutines\/experimental\/EmptyCoroutineContext.INSTANCE +// 7 GETSTATIC diff --git a/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt b/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt index 4b15b8cba1f..a06925b716e 100644 --- a/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt +++ b/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt @@ -1,12 +1,10 @@ +// LANGUAGE_VERSION: 1.3 // WITH_RUNTIME -// COMMON_COROUTINES_TEST -// WITH_COROUTINES -import helpers.* // TREAT_AS_ONE_FILE -import COROUTINES_PACKAGE.* -import COROUTINES_PACKAGE.intrinsics.* +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* suspend fun suspendHere(): String = suspendCoroutineOrReturn { x -> - x.resume("OK") + x.resumeWith(SuccessOrFailure.success("OK")) } suspend fun suspendThere(param: Int, param2: String, param3: Long): String { @@ -15,4 +13,4 @@ suspend fun suspendThere(param: Int, param2: String, param3: Long): String { return a + b } -// 0 ASTORE 4 +// 1 ASTORE 4 diff --git a/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation_1_2.kt b/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation_1_2.kt new file mode 100644 index 00000000000..7fbb856a110 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation_1_2.kt @@ -0,0 +1,17 @@ +// WITH_RUNTIME +// WITH_COROUTINES +import helpers.* +// TREAT_AS_ONE_FILE +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* +suspend fun suspendHere(): String = suspendCoroutineOrReturn { x -> + x.resume("OK") +} + +suspend fun suspendThere(param: Int, param2: String, param3: Long): String { + val a = suspendHere() + val b = suspendHere() + return a + b +} + +// 0 ASTORE 4 diff --git a/compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTableSameSort_1_2.kt b/compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTableSameSort_1_2.kt new file mode 100644 index 00000000000..1913beece54 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTableSameSort_1_2.kt @@ -0,0 +1,49 @@ +// WITH_RUNTIME +// WITH_COROUTINES +import helpers.* +// TREAT_AS_ONE_FILE +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* +suspend fun suspendHere(): String = suspendCoroutineOrReturn { x -> + x.resume("OK") +} + +fun builder(c: suspend () -> Unit) { + c.startCoroutine(EmptyContinuation) +} + +fun box(): String { + var result = "fail 1" + + builder { + // Initialize var with Int value + try { + var i: String = "abc" + i = "123" + } finally { } + + // This variable should take the same slot as 'i' had + var s: String + + // We shout not spill 's' to continuation field because it's not effectively initialized + // But we do this because it's not illegal (at least in Android/OpenJDK VM's) + if (suspendHere() == "OK") { + s = "OK" + } + else { + s = "fail 2" + } + + result = s + } + + return result +} + +// 1 LOCALVARIABLE i Ljava/lang/String; L.* 3 +// 1 LOCALVARIABLE s Ljava/lang/String; L.* 3 +// 1 PUTFIELD VarValueConflictsWithTableSameSort_1_2Kt\$box\$1.L\$0 : Ljava/lang/Object; +/* 1 load in try/finally */ +/* 1 load in result = s */ +/* 1 load before suspension point */ +// 3 ALOAD 3 diff --git a/compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTable_1_2.kt b/compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTable_1_2.kt new file mode 100644 index 00000000000..a65d922206e --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTable_1_2.kt @@ -0,0 +1,48 @@ +// WITH_RUNTIME +// WITH_COROUTINES +import helpers.* +// TREAT_AS_ONE_FILE +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* +suspend fun suspendHere(): String = suspendCoroutineOrReturn { x -> + x.resume("OK") +} + +fun builder(c: suspend () -> Unit) { + c.startCoroutine(EmptyContinuation) +} + +val nonConstOne = 1 + +fun box(): String { + var result = "fail 1" + builder { + // Initialize var with Int value + for (i in 1..nonConstOne) { + if ("".length > 0) continue + } + + // This variable should take the same slot as 'i' had + var s: String + + // We should not spill 's' to continuation field because it's not initialized + // More precisely it contains a value of wrong type (it conflicts with contents of local var table), + // so an attempt of spilling may lead to problems on Android + if (suspendHere() == "OK") { + s = "OK" + } + else { + s = "fail 2" + } + + result = s + } + + return result +} + +// 1 LOCALVARIABLE i I L.* 3 +// 1 LOCALVARIABLE s Ljava/lang/String; L.* 3 +// 0 PUTFIELD VarValueConflictsWithTableKt\$box\$1.I\$0 : I +/* 2 loads in cycle */ +// 2 ILOAD 3 diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt index 689a8213a81..4a3351b64b5 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt @@ -1,11 +1,13 @@ +// !API_VERSION: 1.3 // !DIAGNOSTICS: -UNUSED_PARAMETER // !CHECK_TYPE -// COMMON_COROUTINES_TEST -import COROUTINES_PACKAGE.* -import COROUTINES_PACKAGE.intrinsics.* +// LANGUAGE_VERSION: 1.3 +// SKIP_TXT +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* class Controller { - suspend fun noParams(): Unit = suspendCoroutineOrReturn { + suspend fun noParams(): Unit = suspendCoroutineOrReturn { if (hashCode() % 2 == 0) { it.resume(Unit) COROUTINE_SUSPENDED @@ -14,10 +16,10 @@ class Controller { Unit } } - suspend fun yieldString(value: String) = suspendCoroutineOrReturn { + suspend fun yieldString(value: String) = suspendCoroutineOrReturn { it.resume(1) it checkType { _>() } - it.resume("") + it.resume("") // We can return anything here, 'suspendCoroutineOrReturn' is not very type-safe // Also we can call resume and then return the value too, but it's still just our problem @@ -25,10 +27,10 @@ class Controller { } } -fun builder(c: suspend Controller.() -> Unit) {} +fun builder(c: suspend Controller.() -> Unit) {} fun test() { - builder { + builder { noParams() checkType { _() } yieldString("abc") checkType { _() } } diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.txt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.txt deleted file mode 100644 index 0521533712d..00000000000 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.txt +++ /dev/null @@ -1,13 +0,0 @@ -package - -public fun builder(/*0*/ c: suspend Controller.() -> kotlin.Unit): kotlin.Unit -public fun test(): kotlin.Unit - -public final class Controller { - public constructor Controller() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public final suspend fun noParams(): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - public final suspend fun yieldString(/*0*/ value: kotlin.String): kotlin.Int -} diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn_1_2.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn_1_2.kt new file mode 100644 index 00000000000..e90d2917783 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn_1_2.kt @@ -0,0 +1,35 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +// !CHECK_TYPE +// SKIP_TXT +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* + +class Controller { + suspend fun noParams(): Unit = suspendCoroutineOrReturn { + if (hashCode() % 2 == 0) { + it.resume(Unit) + COROUTINE_SUSPENDED + } + else { + Unit + } + } + suspend fun yieldString(value: String) = suspendCoroutineOrReturn { + it.resume(1) + it checkType { _>() } + it.resume("") + + // We can return anything here, 'suspendCoroutineOrReturn' is not very type-safe + // Also we can call resume and then return the value too, but it's still just our problem + "Not-int" + } +} + +fun builder(c: suspend Controller.() -> Unit) {} + +fun test() { + builder { + noParams() checkType { _() } + yieldString("abc") checkType { _() } + } +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendLambda.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendLambda.kt index 139ab2e3dfc..a3490524c29 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendLambda.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendLambda.kt @@ -1,19 +1,11 @@ // COMMON_COROUTINES_TEST +// SKIP_TXT import COROUTINES_PACKAGE.* +fun foo(): Continuation = null!! + fun bar() { suspend { println() - }.startCoroutine(object: Continuation { - override val context: CoroutineContext - get() = TODO("not implemented") - - override fun resume(value: Unit) { - TODO("not implemented") - } - - override fun resumeWithException(exception: Throwable) { - TODO("not implemented") - } - }) + }.startCoroutine(foo()) } diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendLambda.txt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendLambda.txt deleted file mode 100644 index 19a5b8840b9..00000000000 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendLambda.txt +++ /dev/null @@ -1,3 +0,0 @@ -package - -public fun bar(): kotlin.Unit diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractBlackBoxCodegenTest.java b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractBlackBoxCodegenTest.java index 4d8be2bb7e3..cecc37b7344 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractBlackBoxCodegenTest.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractBlackBoxCodegenTest.java @@ -54,7 +54,12 @@ public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase { private void doBytecodeListingTest(@NotNull File wholeFile) throws Exception { if (!InTextDirectivesUtils.isDirectiveDefined(FileUtil.loadFile(wholeFile), "CHECK_BYTECODE_LISTING")) return; - File expectedFile = new File(wholeFile.getParent(), FilesKt.getNameWithoutExtension(wholeFile) + ".txt"); + String suffix = + (coroutinesPackage.contains("experimental") || coroutinesPackage.isEmpty()) + && InTextDirectivesUtils.isDirectiveDefined(FileUtil.loadFile(wholeFile), "COMMON_COROUTINES_TEST") + ? "_1_2" : ""; + File expectedFile = new File(wholeFile.getParent(), FilesKt.getNameWithoutExtension(wholeFile) + suffix + ".txt"); + String text = BytecodeListingTextCollectingVisitor.Companion.getText( classFileFactory, diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt index 2002d9096c2..7a93b1685cd 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt @@ -5,16 +5,29 @@ package org.jetbrains.kotlin.codegen +import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult +import org.jetbrains.kotlin.utils.sure import org.jetbrains.org.objectweb.asm.* import org.jetbrains.org.objectweb.asm.Opcodes.* import java.io.File abstract class AbstractBytecodeListingTest : CodegenTestCase() { override fun doMultiFileTest(wholeFile: File, files: List, javaFilesDir: File?) { - val txtFile = File(wholeFile.parentFile, wholeFile.nameWithoutExtension + ".txt") + compile(files, javaFilesDir) val actualTxt = BytecodeListingTextCollectingVisitor.getText(classFileFactory, withSignatures = isWithSignatures(wholeFile)) + + val prefixes = + if (coroutinesPackage == DescriptorUtils.COROUTINES_PACKAGE_FQ_NAME_RELEASE.asString()) { + listOf("_1_3", "") + } else listOf("") + + val txtFile = + prefixes.firstNotNullResult { File(wholeFile.parentFile, wholeFile.nameWithoutExtension + "$it.txt").takeIf(File::exists) } + .sure { "No testData file exists: ${wholeFile.nameWithoutExtension}.txt" } + KotlinTestUtils.assertEqualsToFile(txtFile, actualTxt) { it.replace("COROUTINES_PACKAGE", coroutinesPackage) } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java index ed6b9ddc7f8..483ce03d52d 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java @@ -712,7 +712,9 @@ public abstract class CodegenTestCase extends KtUsefulTestCase { boolean addCoroutines = false; boolean addUnsignedTypes = false; for (TestFile file : files) { - if (InTextDirectivesUtils.isDirectiveDefined(file.content, "COMMON_COROUTINES_TEST")) { + if (InTextDirectivesUtils.isDirectiveDefined(file.content, "COMMON_COROUTINES_TEST") || + InTextDirectivesUtils.isDirectiveDefined(file.content, "!LANGUAGE: +ReleaseCoroutines") || + InTextDirectivesUtils.isDirectiveDefined(file.content, "LANGUAGE_VERSION: 1.3")) { addCoroutines = true; } if (InTextDirectivesUtils.isDirectiveDefined(file.content, "WITH_RUNTIME")) { diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/coroutineTestUtil.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/coroutineTestUtil.kt index 66016666ef3..9d37fbd2c4b 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/coroutineTestUtil.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/coroutineTestUtil.kt @@ -5,38 +5,100 @@ package org.jetbrains.kotlin -fun createTextForHelpers(coroutinesPackage: String): String { +import org.jetbrains.kotlin.resolve.DescriptorUtils + +fun createTextForHelpers(isReleaseCoroutines: Boolean): String { + val coroutinesPackage = + if (isReleaseCoroutines) + DescriptorUtils.COROUTINES_PACKAGE_FQ_NAME_RELEASE.asString() + else + DescriptorUtils.COROUTINES_PACKAGE_FQ_NAME_EXPERIMENTAL.asString() + + val emptyContinuationBody = + if (isReleaseCoroutines) + """ + |override fun resumeWith(result: SuccessOrFailure) { + | result.getOrThrow() + |} + """.trimMargin() + else + """ + |override fun resume(data: Any?) {} + |override fun resumeWithException(exception: Throwable) { throw exception } + """.trimMargin() + + val handleResultContinuationBody = + if (isReleaseCoroutines) + """ + |override fun resumeWith(result: SuccessOrFailure) { + | x(result.getOrThrow()) + |} + """.trimMargin() + else + """ + |override fun resumeWithException(exception: Throwable) { + | throw exception + |} + | + |override fun resume(data: T) = x(data) + """.trimMargin() + + val handleExceptionContinuationBody = + if (isReleaseCoroutines) + """ + |override fun resumeWith(result: SuccessOrFailure) { + | result.exceptionOrNull()?.let(x) + |} + """.trimMargin() + else + """ + |override fun resumeWithException(exception: Throwable) { + | x(exception) + |} + | + |override fun resume(data: Any?) {} + """.trimMargin() + + val continuationAdapterBody = + if (isReleaseCoroutines) + """ + |override fun resumeWith(result: SuccessOrFailure) { + | if (result.isSuccess) { + | resume(result.getOrThrow()) + | } else { + | resumeWithException(result.exceptionOrNull()!!) + | } + |} + | + |abstract fun resumeWithException(exception: Throwable) + |abstract fun resume(value: T) + """.trimMargin() + else + "" + return """ |package helpers |import $coroutinesPackage.* | |fun handleResultContinuation(x: (T) -> Unit): Continuation = object: Continuation { | override val context = EmptyCoroutineContext - | override fun resumeWithException(exception: Throwable) { - | throw exception - | } - | - | override fun resume(data: T) = x(data) + | $handleResultContinuationBody |} | | |fun handleExceptionContinuation(x: (Throwable) -> Unit): Continuation = object: Continuation { | override val context = EmptyCoroutineContext - | override fun resumeWithException(exception: Throwable) { - | x(exception) - | } - | - | override fun resume(data: Any?) { } + | $handleExceptionContinuationBody |} | |open class EmptyContinuation(override val context: CoroutineContext = EmptyCoroutineContext) : Continuation { | companion object : EmptyContinuation() - | override fun resume(data: Any?) {} - | override fun resumeWithException(exception: Throwable) { throw exception } + | $emptyContinuationBody |} | |abstract class ContinuationAdapter : Continuation { | override val context: CoroutineContext = EmptyCoroutineContext + | $continuationAdapterBody |} """.trimMargin() } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/test/KotlinTestUtils.java b/compiler/tests-common/tests/org/jetbrains/kotlin/test/KotlinTestUtils.java index 23cefa57c65..9a5ce4a6d4c 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/test/KotlinTestUtils.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/test/KotlinTestUtils.java @@ -786,9 +786,14 @@ public class KotlinTestUtils { if (coroutinesPackage.isEmpty()) { coroutinesPackage = "kotlin.coroutines.experimental"; } + + boolean isReleaseCoroutines = + !coroutinesPackage.contains("experimental") || + isDirectiveDefined(expectedText, "LANGUAGE_VERSION: 1.3"); + testFiles.add(factory.createFile(supportModule, "CoroutineUtil.kt", - CoroutineTestUtilKt.createTextForHelpers(coroutinesPackage), + CoroutineTestUtilKt.createTextForHelpers(isReleaseCoroutines), directives )); } diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index d45eee21e3e..b0057917604 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -5320,13 +5320,13 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes } @TestMetadata("coroutineToString.kt") - public void testCoroutineToString_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/coroutineToString.kt", "kotlin.coroutines.experimental"); + public void testCoroutineToString() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/coroutineToString.kt"); } - @TestMetadata("coroutineToString.kt") - public void testCoroutineToString_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/coroutineToString.kt", "kotlin.coroutines"); + @TestMetadata("coroutineToString_1_2.kt") + public void testCoroutineToString_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/coroutineToString_1_2.kt"); } @TestMetadata("createCoroutineSafe.kt") @@ -5460,13 +5460,13 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes } @TestMetadata("illegalState.kt") - public void testIllegalState_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/illegalState.kt", "kotlin.coroutines.experimental"); + public void testIllegalState() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/illegalState.kt"); } - @TestMetadata("illegalState.kt") - public void testIllegalState_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/illegalState.kt", "kotlin.coroutines"); + @TestMetadata("illegalState_1_2.kt") + public void testIllegalState_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/illegalState_1_2.kt"); } @TestMetadata("indirectInlineUsedAsNonInline.kt") @@ -5850,13 +5850,13 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes } @TestMetadata("suspendCovariantJavaOverrides.kt") - public void testSuspendCovariantJavaOverrides_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt", "kotlin.coroutines.experimental"); + public void testSuspendCovariantJavaOverrides() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt"); } - @TestMetadata("suspendCovariantJavaOverrides.kt") - public void testSuspendCovariantJavaOverrides_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt", "kotlin.coroutines"); + @TestMetadata("suspendCovariantJavaOverrides_1_2.kt") + public void testSuspendCovariantJavaOverrides_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides_1_2.kt"); } @TestMetadata("suspendDefaultImpl.kt") @@ -5940,13 +5940,13 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes } @TestMetadata("suspendJavaOverrides.kt") - public void testSuspendJavaOverrides_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt", "kotlin.coroutines.experimental"); + public void testSuspendJavaOverrides() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt"); } - @TestMetadata("suspendJavaOverrides.kt") - public void testSuspendJavaOverrides_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt", "kotlin.coroutines"); + @TestMetadata("suspendJavaOverrides_1_2.kt") + public void testSuspendJavaOverrides_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendJavaOverrides_1_2.kt"); } @TestMetadata("suspensionInsideSafeCallWithElvis.kt") @@ -7002,13 +7002,13 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes } @TestMetadata("inlineWithJava.kt") - public void testInlineWithJava_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt", "kotlin.coroutines.experimental"); + public void testInlineWithJava() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt"); } - @TestMetadata("inlineWithJava.kt") - public void testInlineWithJava_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt", "kotlin.coroutines"); + @TestMetadata("inlineWithJava_1_2.kt") + public void testInlineWithJava_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava_1_2.kt"); } @TestMetadata("simple.kt") @@ -7193,13 +7193,13 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes } @TestMetadata("openFunWithJava.kt") - public void testOpenFunWithJava_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt", "kotlin.coroutines.experimental"); + public void testOpenFunWithJava() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt"); } - @TestMetadata("openFunWithJava.kt") - public void testOpenFunWithJava_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt", "kotlin.coroutines"); + @TestMetadata("openFunWithJava_1_2.kt") + public void testOpenFunWithJava_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava_1_2.kt"); } @TestMetadata("operators.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java index 4a15c5abf5c..726b72a97a3 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java @@ -1479,13 +1479,13 @@ public class DiagnosticsTestWithStdLibGenerated extends AbstractDiagnosticsTestW } @TestMetadata("suspendCoroutineOrReturn.kt") - public void testSuspendCoroutineOrReturn_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt", "kotlin.coroutines.experimental"); + public void testSuspendCoroutineOrReturn() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt"); } - @TestMetadata("suspendCoroutineOrReturn.kt") - public void testSuspendCoroutineOrReturn_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt", "kotlin.coroutines"); + @TestMetadata("suspendCoroutineOrReturn_1_2.kt") + public void testSuspendCoroutineOrReturn_1_2() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn_1_2.kt"); } @TestMetadata("suspendCoroutineUnavailableWithNewAPI.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java index b1a6871e68e..d1b8cd2ef22 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java @@ -1479,13 +1479,13 @@ public class DiagnosticsTestWithStdLibUsingJavacGenerated extends AbstractDiagno } @TestMetadata("suspendCoroutineOrReturn.kt") - public void testSuspendCoroutineOrReturn_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt", "kotlin.coroutines.experimental"); + public void testSuspendCoroutineOrReturn() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt"); } - @TestMetadata("suspendCoroutineOrReturn.kt") - public void testSuspendCoroutineOrReturn_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn.kt", "kotlin.coroutines"); + @TestMetadata("suspendCoroutineOrReturn_1_2.kt") + public void testSuspendCoroutineOrReturn_1_2() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendCoroutineOrReturn_1_2.kt"); } @TestMetadata("suspendCoroutineUnavailableWithNewAPI.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index dca14ad44aa..dff25db7b90 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -5320,13 +5320,13 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { } @TestMetadata("coroutineToString.kt") - public void testCoroutineToString_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/coroutineToString.kt", "kotlin.coroutines.experimental"); + public void testCoroutineToString() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/coroutineToString.kt"); } - @TestMetadata("coroutineToString.kt") - public void testCoroutineToString_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/coroutineToString.kt", "kotlin.coroutines"); + @TestMetadata("coroutineToString_1_2.kt") + public void testCoroutineToString_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/coroutineToString_1_2.kt"); } @TestMetadata("createCoroutineSafe.kt") @@ -5460,13 +5460,13 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { } @TestMetadata("illegalState.kt") - public void testIllegalState_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/illegalState.kt", "kotlin.coroutines.experimental"); + public void testIllegalState() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/illegalState.kt"); } - @TestMetadata("illegalState.kt") - public void testIllegalState_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/illegalState.kt", "kotlin.coroutines"); + @TestMetadata("illegalState_1_2.kt") + public void testIllegalState_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/illegalState_1_2.kt"); } @TestMetadata("indirectInlineUsedAsNonInline.kt") @@ -5850,13 +5850,13 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { } @TestMetadata("suspendCovariantJavaOverrides.kt") - public void testSuspendCovariantJavaOverrides_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt", "kotlin.coroutines.experimental"); + public void testSuspendCovariantJavaOverrides() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt"); } - @TestMetadata("suspendCovariantJavaOverrides.kt") - public void testSuspendCovariantJavaOverrides_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt", "kotlin.coroutines"); + @TestMetadata("suspendCovariantJavaOverrides_1_2.kt") + public void testSuspendCovariantJavaOverrides_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides_1_2.kt"); } @TestMetadata("suspendDefaultImpl.kt") @@ -5940,13 +5940,13 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { } @TestMetadata("suspendJavaOverrides.kt") - public void testSuspendJavaOverrides_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt", "kotlin.coroutines.experimental"); + public void testSuspendJavaOverrides() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt"); } - @TestMetadata("suspendJavaOverrides.kt") - public void testSuspendJavaOverrides_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt", "kotlin.coroutines"); + @TestMetadata("suspendJavaOverrides_1_2.kt") + public void testSuspendJavaOverrides_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendJavaOverrides_1_2.kt"); } @TestMetadata("suspensionInsideSafeCallWithElvis.kt") @@ -7002,13 +7002,13 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { } @TestMetadata("inlineWithJava.kt") - public void testInlineWithJava_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt", "kotlin.coroutines.experimental"); + public void testInlineWithJava() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt"); } - @TestMetadata("inlineWithJava.kt") - public void testInlineWithJava_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt", "kotlin.coroutines"); + @TestMetadata("inlineWithJava_1_2.kt") + public void testInlineWithJava_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava_1_2.kt"); } @TestMetadata("simple.kt") @@ -7193,13 +7193,13 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { } @TestMetadata("openFunWithJava.kt") - public void testOpenFunWithJava_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt", "kotlin.coroutines.experimental"); + public void testOpenFunWithJava() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt"); } - @TestMetadata("openFunWithJava.kt") - public void testOpenFunWithJava_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt", "kotlin.coroutines"); + @TestMetadata("openFunWithJava_1_2.kt") + public void testOpenFunWithJava_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava_1_2.kt"); } @TestMetadata("operators.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index afaf9539b61..8f2fbca069c 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -1053,13 +1053,13 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { } @TestMetadata("doNotReassignContinuation.kt") - public void testDoNotReassignContinuation_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt", "kotlin.coroutines.experimental"); + public void testDoNotReassignContinuation() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt"); } - @TestMetadata("doNotReassignContinuation.kt") - public void testDoNotReassignContinuation_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt", "kotlin.coroutines"); + @TestMetadata("doNotReassignContinuation_1_2.kt") + public void testDoNotReassignContinuation_1_2() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation_1_2.kt"); } @TestMetadata("returnUnitInLambda.kt") @@ -1072,24 +1072,24 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { runTestWithPackageReplacement("compiler/testData/codegen/bytecodeText/coroutines/returnUnitInLambda.kt", "kotlin.coroutines"); } + @TestMetadata("varValueConflictsWithTable.kt") + public void testVarValueConflictsWithTable() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTable.kt"); + } + @TestMetadata("varValueConflictsWithTableSameSort.kt") + public void testVarValueConflictsWithTableSameSort() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTableSameSort.kt"); + } + + @TestMetadata("varValueConflictsWithTableSameSort_1_2.kt") public void testVarValueConflictsWithTableSameSort_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTableSameSort.kt", "kotlin.coroutines.experimental"); + runTest("compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTableSameSort_1_2.kt"); } - @TestMetadata("varValueConflictsWithTableSameSort.kt") - public void testVarValueConflictsWithTableSameSort_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTableSameSort.kt", "kotlin.coroutines"); - } - - @TestMetadata("varValueConflictsWithTable.kt") + @TestMetadata("varValueConflictsWithTable_1_2.kt") public void testVarValueConflictsWithTable_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTable.kt", "kotlin.coroutines.experimental"); - } - - @TestMetadata("varValueConflictsWithTable.kt") - public void testVarValueConflictsWithTable_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTable.kt", "kotlin.coroutines"); + runTest("compiler/testData/codegen/bytecodeText/coroutines/varValueConflictsWithTable_1_2.kt"); } @TestMetadata("compiler/testData/codegen/bytecodeText/coroutines/destructuringInLambda") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index ff915b307a2..24ee9140e56 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -5320,13 +5320,13 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes } @TestMetadata("coroutineToString.kt") - public void testCoroutineToString_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/coroutineToString.kt", "kotlin.coroutines.experimental"); + public void testCoroutineToString() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/coroutineToString.kt"); } - @TestMetadata("coroutineToString.kt") - public void testCoroutineToString_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/coroutineToString.kt", "kotlin.coroutines"); + @TestMetadata("coroutineToString_1_2.kt") + public void testCoroutineToString_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/coroutineToString_1_2.kt"); } @TestMetadata("createCoroutineSafe.kt") @@ -5460,13 +5460,13 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes } @TestMetadata("illegalState.kt") - public void testIllegalState_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/illegalState.kt", "kotlin.coroutines.experimental"); + public void testIllegalState() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/illegalState.kt"); } - @TestMetadata("illegalState.kt") - public void testIllegalState_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/illegalState.kt", "kotlin.coroutines"); + @TestMetadata("illegalState_1_2.kt") + public void testIllegalState_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/illegalState_1_2.kt"); } @TestMetadata("indirectInlineUsedAsNonInline.kt") @@ -5850,13 +5850,13 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes } @TestMetadata("suspendCovariantJavaOverrides.kt") - public void testSuspendCovariantJavaOverrides_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt", "kotlin.coroutines.experimental"); + public void testSuspendCovariantJavaOverrides() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt"); } - @TestMetadata("suspendCovariantJavaOverrides.kt") - public void testSuspendCovariantJavaOverrides_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides.kt", "kotlin.coroutines"); + @TestMetadata("suspendCovariantJavaOverrides_1_2.kt") + public void testSuspendCovariantJavaOverrides_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendCovariantJavaOverrides_1_2.kt"); } @TestMetadata("suspendDefaultImpl.kt") @@ -5940,13 +5940,13 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes } @TestMetadata("suspendJavaOverrides.kt") - public void testSuspendJavaOverrides_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt", "kotlin.coroutines.experimental"); + public void testSuspendJavaOverrides() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt"); } - @TestMetadata("suspendJavaOverrides.kt") - public void testSuspendJavaOverrides_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendJavaOverrides.kt", "kotlin.coroutines"); + @TestMetadata("suspendJavaOverrides_1_2.kt") + public void testSuspendJavaOverrides_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendJavaOverrides_1_2.kt"); } @TestMetadata("suspensionInsideSafeCallWithElvis.kt") @@ -7002,13 +7002,13 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes } @TestMetadata("inlineWithJava.kt") - public void testInlineWithJava_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt", "kotlin.coroutines.experimental"); + public void testInlineWithJava() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt"); } - @TestMetadata("inlineWithJava.kt") - public void testInlineWithJava_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt", "kotlin.coroutines"); + @TestMetadata("inlineWithJava_1_2.kt") + public void testInlineWithJava_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava_1_2.kt"); } @TestMetadata("simple.kt") @@ -7193,13 +7193,13 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes } @TestMetadata("openFunWithJava.kt") - public void testOpenFunWithJava_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt", "kotlin.coroutines.experimental"); + public void testOpenFunWithJava() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt"); } - @TestMetadata("openFunWithJava.kt") - public void testOpenFunWithJava_1_3() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava.kt", "kotlin.coroutines"); + @TestMetadata("openFunWithJava_1_2.kt") + public void testOpenFunWithJava_1_2() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/openFunWithJava_1_2.kt"); } @TestMetadata("operators.kt") diff --git a/generators/test-generator/tests/org/jetbrains/kotlin/generators/util/coroutines.kt b/generators/test-generator/tests/org/jetbrains/kotlin/generators/util/coroutines.kt index 652d764bcbe..5d26530dd1f 100644 --- a/generators/test-generator/tests/org/jetbrains/kotlin/generators/util/coroutines.kt +++ b/generators/test-generator/tests/org/jetbrains/kotlin/generators/util/coroutines.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.generators.util import org.jetbrains.kotlin.generators.tests.generator.MethodModel import org.jetbrains.kotlin.generators.tests.generator.RunTestMethodWithPackageReplacementModel import org.jetbrains.kotlin.generators.tests.generator.SimpleTestMethodModel +import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.utils.Printer @@ -42,7 +43,7 @@ class CoroutinesTestModel( } fun isCommonCoroutineTest(file: File): Boolean { - return file.readLines().any { it.startsWith("// COMMON_COROUTINES_TEST") } + return InTextDirectivesUtils.isDirectiveDefined(file.readText(), "COMMON_COROUTINES_TEST") } fun createCommonCoroutinesTestMethodModels( @@ -86,4 +87,4 @@ fun createCommonCoroutinesTestMethodModels( false ) ) -} \ No newline at end of file +} diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java index a03132a1b29..3c438269e19 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java @@ -5932,8 +5932,13 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { } @TestMetadata("inlineWithJava.kt") + public void testInlineWithJava() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt"); + } + + @TestMetadata("inlineWithJava_1_2.kt") public void testInlineWithJava_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt", "kotlin.coroutines.experimental"); + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava_1_2.kt"); } @TestMetadata("simple.kt") diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 6ba8ff9ba3f..ca829c7c9f3 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -5932,8 +5932,13 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { } @TestMetadata("inlineWithJava.kt") + public void testInlineWithJava() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt"); + } + + @TestMetadata("inlineWithJava_1_2.kt") public void testInlineWithJava_1_2() throws Exception { - runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava.kt", "kotlin.coroutines.experimental"); + runTest("compiler/testData/codegen/box/coroutines/multiModule/inlineWithJava_1_2.kt"); } @TestMetadata("simple.kt")