Replace CHECKCAST kotlin/Unit with ARETURN for tail call optimization
Sometimes instead of {POP, GETSTATIC Unit.INSTANCE, ARETURN} sequence
the codegen emits {CHECKCAST Unit, ARETURN} sequence, which breaks tail
call optimization. By replacing CHECKCAST with ARETURN we eliminate
this issue.
#KT-19790: Fixed
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
// WITH_RUNTIME
|
||||
import kotlin.coroutines.experimental.*
|
||||
import kotlin.coroutines.experimental.intrinsics.*
|
||||
|
||||
var p: Int = 5846814
|
||||
private suspend fun withoutInline() {
|
||||
val c = { c: Continuation<Unit> ->
|
||||
if (p > 52158) Unit else COROUTINE_SUSPENDED
|
||||
}
|
||||
|
||||
return suspendCoroutineOrReturn(c)
|
||||
}
|
||||
|
||||
private suspend fun withInline() {
|
||||
return suspendCoroutineOrReturn { c ->
|
||||
if (p > 52158) Unit else COROUTINE_SUSPENDED
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
@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: kotlin.coroutines.experimental.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
|
||||
final static @org.jetbrains.annotations.Nullable method withInline(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object
|
||||
final static @org.jetbrains.annotations.Nullable method withoutInline(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
@kotlin.Metadata
|
||||
public final class Generic {
|
||||
public method <init>(): void
|
||||
public final @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.Nullable p0: java.lang.Object): 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: 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
|
||||
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: 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
|
||||
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: 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
|
||||
final class TailSuspendUnitFunKt$multipleExitPointsWhen$2 {
|
||||
inner class TailSuspendUnitFunKt$multipleExitPointsWhen$2
|
||||
method <init>(p0: kotlin.coroutines.experimental.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
|
||||
}
|
||||
|
||||
@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: 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
|
||||
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: 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 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.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method empty(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method genericInferType(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method lambdaAsParameter(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method lambdaAsParameterNotTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method lambdaAsParameterReturn(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method multipleExitPoints(p0: boolean, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsNotTailCall(p0: boolean, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWhen(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWithOrdinaryInline(p0: boolean, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method notTailCall(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method nullableUnit(@org.jetbrains.annotations.Nullable p0: java.lang.Object): 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.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useGenericClass(@org.jetbrains.annotations.NotNull p0: Generic, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useGenericIngerType(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useGenericReturningUnit(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useNullableUnit(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useRunRunRunRunRun(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method withReturn(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method withoutReturn(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
suspend fun catchException(): String {
|
||||
try {
|
||||
return suspendWithException()
|
||||
}
|
||||
catch(e: Exception) {
|
||||
return e.message!!
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun suspendWithException(): String = TODO()
|
||||
@@ -0,0 +1,17 @@
|
||||
@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: 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 TryCatchTailCallKt {
|
||||
inner class TryCatchTailCallKt$catchException$1
|
||||
public final static @org.jetbrains.annotations.Nullable method catchException(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method suspendWithException(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
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()
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
@kotlin.Metadata
|
||||
public final class Generic {
|
||||
public method <init>(): void
|
||||
public final @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.Nullable p0: java.lang.Object): 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: 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
|
||||
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: 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
|
||||
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: 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
|
||||
final class UnreachableKt$multipleExitPointsWhen$2 {
|
||||
inner class UnreachableKt$multipleExitPointsWhen$2
|
||||
method <init>(p0: kotlin.coroutines.experimental.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
|
||||
}
|
||||
|
||||
@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: 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
|
||||
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: 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 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.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method empty(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method genericInferType(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method lambdaAsParameter(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method lambdaAsParameterNotTailCall(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method lambdaAsParameterReturn(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method multipleExitPoints(p0: boolean, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsNotTailCall(p0: boolean, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWhen(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method multipleExitPointsWithOrdinaryInline(p0: boolean, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method notTailCall(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method nullableUnit(@org.jetbrains.annotations.Nullable p0: java.lang.Object): 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.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method twoReturns(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useGenericClass(@org.jetbrains.annotations.NotNull p0: Generic, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useGenericInferType(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useGenericReturningUnit(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useNullableUnit(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method useRunRunRunRunRun(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method withoutReturn(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Object
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
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)
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
@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
|
||||
}
|
||||
Reference in New Issue
Block a user