Introduce CHECK_TAIL_CALL_OPTIMIZATION directive

This directive generates TailCallOptimizationChecker in package helpers.
The check for tail call optimization is based on coroutine stack traces
bug (feature?): when tail call optimization hits, the continuation
object is not generated. Thus, there is no debug metadata for this
suspend function. Consequently, the coroutines stack trace does not
contain stack trace element for that function.
This check is performed by TailCallOptimizationChecker.

Since this is runtime check, unlike bytecode tests, it does not require
test data adjustments on each codegen or inliner change.

Since the check is based on debug metadata, which is JVM specific, there
is not support for other backends yet.
This commit is contained in:
Ilmir Usmanov
2019-04-04 20:33:13 +03:00
parent 40441a18cc
commit 00e952ab15
49 changed files with 633 additions and 1613 deletions
@@ -1,32 +0,0 @@
@kotlin.Metadata
final class ReleaseCoroutinesKt$l$1 {
field label: int
inner class ReleaseCoroutinesKt$l$1
method <init>(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 ReleaseCoroutinesKt$withStateMachine$1 {
synthetic field data: java.lang.Object
field label: int
inner class ReleaseCoroutinesKt$withStateMachine$1
method <init>(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 ReleaseCoroutinesKt {
private final static @org.jetbrains.annotations.NotNull field l: kotlin.jvm.functions.Function1
inner class ReleaseCoroutinesKt$l$1
inner class ReleaseCoroutinesKt$withStateMachine$1
static method <clinit>(): 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.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
}
@@ -1,17 +0,0 @@
// WITH_RUNTIME
// COMMON_COROUTINES_TEST
import COROUTINES_PACKAGE.intrinsics.*
fun check() = true
suspend fun f(i: Int): Unit {
return f_2()
}
private inline suspend fun f_2(): Unit {
if (check()) return
return suspendCoroutineUninterceptedOrReturn {
COROUTINE_SUSPENDED
}
}
@@ -1,6 +0,0 @@
@kotlin.Metadata
public final class TailCallIfReturnUnitKt {
public final static method check(): boolean
public final static @org.jetbrains.annotations.Nullable method f(p0: int, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object
private synthetic final static method f_2(p0: kotlin.coroutines.experimental.Continuation): java.lang.Object
}
@@ -1,6 +0,0 @@
@kotlin.Metadata
public final class TailCallIfReturnUnitKt {
public final static method check(): boolean
public final static @org.jetbrains.annotations.Nullable method f(p0: int, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
private synthetic final static method f_2(p0: kotlin.coroutines.Continuation): java.lang.Object
}
@@ -1,19 +0,0 @@
// WITH_RUNTIME
// COMMON_COROUTINES_TEST
import COROUTINES_PACKAGE.*
import COROUTINES_PACKAGE.intrinsics.*
var p: Int = 5846814
private suspend fun withoutInline() {
val c = { c: Continuation<Unit> ->
if (p > 52158) Unit else COROUTINE_SUSPENDED
}
return suspendCoroutineUninterceptedOrReturn(c)
}
private suspend fun withInline() {
return suspendCoroutineUninterceptedOrReturn { c ->
if (p > 52158) Unit else COROUTINE_SUSPENDED
}
}
@@ -1,20 +0,0 @@
@kotlin.Metadata
final class TailCallIntrinsicsKt$withoutInline$c$1 {
public final static field INSTANCE: TailCallIntrinsicsKt$withoutInline$c$1
inner class TailCallIntrinsicsKt$withoutInline$c$1
static method <clinit>(): void
method <init>(): void
public final @org.jetbrains.annotations.NotNull method invoke(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public synthetic method invoke(p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class TailCallIntrinsicsKt {
private static field p: int
inner class TailCallIntrinsicsKt$withoutInline$c$1
static method <clinit>(): void
public final static method getP(): int
public final static method setP(p0: int): void
synthetic final static @org.jetbrains.annotations.Nullable method withInline(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
synthetic final static @org.jetbrains.annotations.Nullable method withoutInline(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
}
@@ -1,64 +0,0 @@
// COMMON_COROUTINES_TEST
// WITH_RUNTIME
suspend fun empty() {}
suspend fun withoutReturn() { empty() }
suspend fun withReturn() { return empty() }
suspend fun notTailCall() { empty(); empty() }
suspend fun lambdaAsParameter(c: suspend ()->Unit) { c() }
suspend fun lambdaAsParameterNotTailCall(c: suspend ()->Unit) { c(); c() }
suspend fun lambdaAsParameterReturn(c: suspend ()->Unit) { return c() }
suspend fun returnsInt() = 42
// This should not be tail-call, since the caller should push Unit.INSTANCE on stack
suspend fun callsIntNotTailCall() { returnsInt() }
suspend fun multipleExitPoints(b: Boolean) { if (b) empty() else withoutReturn() }
suspend fun multipleExitPointsNotTailCall(b: Boolean) { if (b) empty() else returnsInt() }
fun ordinary() = 1
inline fun ordinaryInline() { ordinary() }
suspend fun multipleExitPointsWithOrdinaryInline(b: Boolean) { if (b) empty() else ordinaryInline() }
suspend fun multipleExitPointsWhen(i: Int) {
when(i) {
1 -> empty()
2 -> withReturn()
3 -> withoutReturn()
else -> lambdaAsParameter {}
}
}
suspend fun <T> generic(): T = TODO()
suspend fun useGenericReturningUnit() {
generic<Unit>()
}
class Generic<T> {
suspend fun foo(): T = TODO()
}
suspend fun useGenericClass(g: Generic<Unit>) {
g.foo()
}
suspend fun <T> genericInferType(c: () -> T): T = TODO()
suspend fun useGenericIngerType() {
genericInferType {}
}
suspend fun nullableUnit(): Unit? = null
suspend fun useNullableUnit() {
nullableUnit()
}
suspend fun useRunRunRunRunRun() {
run {
run {
run {
run {
run {
empty()
}
}
}
}
}
}
@@ -1,115 +0,0 @@
@kotlin.Metadata
public final class Generic {
public method <init>(): void
public final @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
}
@kotlin.Metadata
final class TailSuspendUnitFunKt$callsIntNotTailCall$1 {
synthetic field data: java.lang.Object
synthetic field exception: java.lang.Throwable
inner class TailSuspendUnitFunKt$callsIntNotTailCall$1
method <init>(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
synthetic final method getLabel(): int
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
synthetic field exception: java.lang.Throwable
inner class TailSuspendUnitFunKt$lambdaAsParameterNotTailCall$1
method <init>(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
synthetic final method getLabel(): int
synthetic final method setLabel(p0: int): void
}
@kotlin.Metadata
final class TailSuspendUnitFunKt$multipleExitPointsNotTailCall$1 {
field Z$0: boolean
synthetic field data: java.lang.Object
synthetic field exception: java.lang.Throwable
inner class TailSuspendUnitFunKt$multipleExitPointsNotTailCall$1
method <init>(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
synthetic final method getLabel(): int
synthetic final method setLabel(p0: int): void
}
@kotlin.Metadata
final class TailSuspendUnitFunKt$multipleExitPointsWhen$2 {
inner class TailSuspendUnitFunKt$multipleExitPointsWhen$2
method <init>(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 method invoke(p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
final class TailSuspendUnitFunKt$notTailCall$1 {
synthetic field data: java.lang.Object
synthetic field exception: java.lang.Throwable
inner class TailSuspendUnitFunKt$notTailCall$1
method <init>(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
synthetic final method getLabel(): int
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 <clinit>(): void
method <init>(): 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
synthetic field exception: java.lang.Throwable
inner class TailSuspendUnitFunKt$useNullableUnit$1
method <init>(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
synthetic final method getLabel(): int
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: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method empty(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method multipleExitPoints(p0: boolean, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsNotTailCall(p0: boolean, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWhen(p0: int, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWithOrdinaryInline(p0: boolean, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method notTailCall(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method nullableUnit(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useGenericClass(@org.jetbrains.annotations.NotNull p0: Generic, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useGenericIngerType(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useGenericReturningUnit(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useNullableUnit(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useRunRunRunRunRun(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method withReturn(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method withoutReturn(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
}
@@ -1,112 +0,0 @@
@kotlin.Metadata
public final class Generic {
public method <init>(): void
public final @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class TailSuspendUnitFunKt$callsIntNotTailCall$1 {
field label: int
synthetic field result: java.lang.Object
inner class TailSuspendUnitFunKt$callsIntNotTailCall$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class TailSuspendUnitFunKt$lambdaAsParameterNotTailCall$1 {
field L$0: java.lang.Object
field label: int
synthetic field result: java.lang.Object
inner class TailSuspendUnitFunKt$lambdaAsParameterNotTailCall$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class TailSuspendUnitFunKt$multipleExitPointsNotTailCall$1 {
field Z$0: boolean
field label: int
synthetic field result: java.lang.Object
inner class TailSuspendUnitFunKt$multipleExitPointsNotTailCall$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class TailSuspendUnitFunKt$multipleExitPointsWhen$2 {
field label: int
inner class TailSuspendUnitFunKt$multipleExitPointsWhen$2
method <init>(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 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
@kotlin.coroutines.jvm.internal.DebugMetadata
final class TailSuspendUnitFunKt$notTailCall$1 {
field label: int
synthetic field result: java.lang.Object
inner class TailSuspendUnitFunKt$notTailCall$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
final class TailSuspendUnitFunKt$useGenericIngerType$2 {
public final static field INSTANCE: TailSuspendUnitFunKt$useGenericIngerType$2
inner class TailSuspendUnitFunKt$useGenericIngerType$2
static method <clinit>(): void
method <init>(): void
public synthetic method invoke(): java.lang.Object
public final method invoke(): void
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class TailSuspendUnitFunKt$useNullableUnit$1 {
field label: int
synthetic field result: java.lang.Object
inner class TailSuspendUnitFunKt$useNullableUnit$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class 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
}
@@ -1,13 +0,0 @@
// COMMON_COROUTINES_TEST
// WITH_RUNTIME
suspend fun catchException(): String {
try {
return suspendWithException()
}
catch(e: Exception) {
return e.message!!
}
}
suspend fun suspendWithException(): String = TODO()
@@ -1,17 +0,0 @@
@kotlin.Metadata
final class TryCatchTailCallKt$catchException$1 {
synthetic field data: java.lang.Object
synthetic field exception: java.lang.Throwable
inner class TryCatchTailCallKt$catchException$1
method <init>(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
synthetic final method getLabel(): int
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: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method suspendWithException(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
}
@@ -1,16 +0,0 @@
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class TryCatchTailCallKt$catchException$1 {
field label: int
synthetic field result: java.lang.Object
inner class TryCatchTailCallKt$catchException$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class 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
}
@@ -1,121 +0,0 @@
// COMMON_COROUTINES_TEST
// WITH_RUNTIME
suspend fun empty() {}
suspend fun withoutReturn() {
empty()
}
suspend fun twoReturns() {
return empty()
return empty()
}
suspend fun notTailCall() {
empty()
return empty()
empty()
}
suspend fun lambdaAsParameter(c: suspend () -> Unit) {
c()
}
suspend fun lambdaAsParameterNotTailCall(c: suspend () -> Unit) {
c()
return c()
c()
}
suspend fun lambdaAsParameterReturn(c: suspend () -> Unit) {
return c()
c()
}
suspend fun returnsInt() = 42
suspend fun callsIntNotTailCall() {
returnsInt()
return
empty()
}
suspend fun multipleExitPoints(b: Boolean) {
if (b) empty() else withoutReturn()
return
empty()
}
suspend fun multipleExitPointsNotTailCall(b: Boolean) {
if (b) empty() else returnsInt()
return
empty()
}
fun ordinary() = 1
inline fun ordinaryInline() {
ordinary()
}
suspend fun multipleExitPointsWithOrdinaryInline(b: Boolean) {
if (b) empty() else ordinaryInline()
return
empty()
}
suspend fun multipleExitPointsWhen(i: Int) {
when (i) {
1 -> empty()
2 -> twoReturns()
3 -> withoutReturn()
else -> lambdaAsParameter {}
}
return
empty()
}
suspend fun <T> generic(): T = TODO()
suspend fun useGenericReturningUnit() {
generic<Unit>()
return
empty()
}
class Generic<T> {
suspend fun foo(): T = TODO()
}
suspend fun useGenericClass(g: Generic<Unit>) {
g.foo()
return
empty()
}
suspend fun <T> genericInferType(c: () -> T): T = TODO()
suspend fun useGenericInferType() {
genericInferType {}
return
empty()
}
suspend fun nullableUnit(): Unit? = null
suspend fun useNullableUnit() {
nullableUnit()
return
empty()
}
suspend fun useRunRunRunRunRun() {
run {
run {
run {
run {
run {
empty()
}
}
}
}
}
return
empty()
}
@@ -1,115 +0,0 @@
@kotlin.Metadata
public final class Generic {
public method <init>(): void
public final @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
}
@kotlin.Metadata
final class UnreachableKt$callsIntNotTailCall$1 {
synthetic field data: java.lang.Object
synthetic field exception: java.lang.Throwable
inner class UnreachableKt$callsIntNotTailCall$1
method <init>(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
synthetic final method getLabel(): int
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
synthetic field exception: java.lang.Throwable
inner class UnreachableKt$lambdaAsParameterNotTailCall$1
method <init>(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
synthetic final method getLabel(): int
synthetic final method setLabel(p0: int): void
}
@kotlin.Metadata
final class UnreachableKt$multipleExitPointsNotTailCall$1 {
field Z$0: boolean
synthetic field data: java.lang.Object
synthetic field exception: java.lang.Throwable
inner class UnreachableKt$multipleExitPointsNotTailCall$1
method <init>(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
synthetic final method getLabel(): int
synthetic final method setLabel(p0: int): void
}
@kotlin.Metadata
final class UnreachableKt$multipleExitPointsWhen$2 {
inner class UnreachableKt$multipleExitPointsWhen$2
method <init>(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 method invoke(p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
final class UnreachableKt$notTailCall$1 {
synthetic field data: java.lang.Object
synthetic field exception: java.lang.Throwable
inner class UnreachableKt$notTailCall$1
method <init>(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
synthetic final method getLabel(): int
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 <clinit>(): void
method <init>(): 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
synthetic field exception: java.lang.Throwable
inner class UnreachableKt$useNullableUnit$1
method <init>(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
synthetic final method getLabel(): int
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: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method empty(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method multipleExitPoints(p0: boolean, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsNotTailCall(p0: boolean, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWhen(p0: int, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWithOrdinaryInline(p0: boolean, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method notTailCall(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method nullableUnit(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.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: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method twoReturns(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useGenericClass(@org.jetbrains.annotations.NotNull p0: Generic, @org.jetbrains.annotations.NotNull p1: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useGenericInferType(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useGenericReturningUnit(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useNullableUnit(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method useRunRunRunRunRun(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method withoutReturn(@org.jetbrains.annotations.NotNull p0: COROUTINES_PACKAGE.Continuation): java.lang.Object
}
@@ -1,112 +0,0 @@
@kotlin.Metadata
public final class Generic {
public method <init>(): void
public final @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class UnreachableKt$callsIntNotTailCall$1 {
field label: int
synthetic field result: java.lang.Object
inner class UnreachableKt$callsIntNotTailCall$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class UnreachableKt$lambdaAsParameterNotTailCall$1 {
field L$0: java.lang.Object
field label: int
synthetic field result: java.lang.Object
inner class UnreachableKt$lambdaAsParameterNotTailCall$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class UnreachableKt$multipleExitPointsNotTailCall$1 {
field Z$0: boolean
field label: int
synthetic field result: java.lang.Object
inner class UnreachableKt$multipleExitPointsNotTailCall$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class UnreachableKt$multipleExitPointsWhen$2 {
field label: int
inner class UnreachableKt$multipleExitPointsWhen$2
method <init>(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 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
@kotlin.coroutines.jvm.internal.DebugMetadata
final class UnreachableKt$notTailCall$1 {
field label: int
synthetic field result: java.lang.Object
inner class UnreachableKt$notTailCall$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
final class UnreachableKt$useGenericInferType$2 {
public final static field INSTANCE: UnreachableKt$useGenericInferType$2
inner class UnreachableKt$useGenericInferType$2
static method <clinit>(): void
method <init>(): void
public synthetic method invoke(): java.lang.Object
public final method invoke(): void
}
@kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata
final class UnreachableKt$useNullableUnit$1 {
field label: int
synthetic field result: java.lang.Object
inner class UnreachableKt$useNullableUnit$1
method <init>(p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class 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
}
@@ -1,12 +0,0 @@
sealed class X {
class A : X()
class B : X()
}
suspend fun process(a: X.A) {}
suspend fun process(b: X.B) {}
suspend fun process(x: X) = when (x) {
is X.A -> process(x)
is X.B -> process(x)
}
@@ -1,26 +0,0 @@
@kotlin.Metadata
public final class WhenUnitKt {
public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X$A, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X$B, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method process(@org.jetbrains.annotations.NotNull p0: X, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class X$A {
inner class X$A
public method <init>(): void
}
@kotlin.Metadata
public final class X$B {
inner class X$B
public method <init>(): void
}
@kotlin.Metadata
public abstract class X {
inner class X$A
inner class X$B
private method <init>(): void
public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
}