Files
kotlin/compiler/testData/codegen/box/inlineClasses/crossinlineWithInlineClassInParameter.kt
2018-07-17 23:39:38 +03:00

35 lines
846 B
Kotlin
Vendored

// !LANGUAGE: +InlineClasses
// IGNORE_BACKEND: JVM_IR, JS_IR
inline class SuccessOrFailure<T>(val a: Any?) {
fun getOrThrow(): T = a as T
}
abstract class SuccessOrFailureReceiver<T> {
abstract fun receive(result: SuccessOrFailure<T>)
}
inline fun <T> SuccessOrFailureReceiver(crossinline f: (SuccessOrFailure<T>) -> Unit): SuccessOrFailureReceiver<T> =
object : SuccessOrFailureReceiver<T>() {
override fun receive(result: SuccessOrFailure<T>) {
f(result)
}
}
fun test() {
var invoked = false
val receiver = SuccessOrFailureReceiver<String> { result ->
val intResult = result.getOrThrow()
invoked = true
}
receiver.receive(SuccessOrFailure("42"))
if (!invoked) {
throw RuntimeException("Fail")
}
}
fun box(): String {
test()
return "OK"
}