Files
kotlin-fork/compiler/testData/codegen/box/invokedynamic/sam/suspendFunInterface.kt
T
Dmitry Petrov 5d7dc5fa39 JVM_IR indy-SAM conversions: minor updates
See: KT-44575 KT-44577

KT-44278 KT-26060 KT-42621
2021-01-29 12:59:48 +03:00

45 lines
927 B
Kotlin
Vendored

// !LANGUAGE: +SuspendFunctionsInFunInterfaces +JvmIrEnabledByDefault
// TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// WITH_RUNTIME
// WITH_COROUTINES
import kotlin.coroutines.*
var c: Continuation<Unit>? = null
suspend fun suspendMe() = suspendCoroutine<Unit> { continuation ->
c = continuation
}
fun builder(c: suspend () -> Unit) {
c.startCoroutine(object: Continuation<Unit> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<Unit>) {
result.getOrThrow()
}
})
}
fun interface SuspendFoo {
suspend fun foo()
}
fun box(): String {
var test = ""
val lambda = SuspendFoo {
suspendMe()
test += "O"
suspendMe()
test += "K"
}
builder {
lambda.foo()
}
c?.resume(Unit)
c?.resume(Unit)
return test
}