Box inline class return value in lambdas (including suspend lambdas)
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: Any)
|
||||
|
||||
fun useX(x: X): String = x.x as String
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call { X("OK") })
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: Any)
|
||||
|
||||
fun useX(x: X): String = x.x as String
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call(fun(): X { return X("OK") }))
|
||||
@@ -0,0 +1,9 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: Int)
|
||||
|
||||
fun useX(x: X): String = if (x.x == 42) "OK" else "fail: $x"
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call { X(42) })
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: Any?)
|
||||
|
||||
fun useX(x: X): String = x.x as String
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call { X("OK") })
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: Any?)
|
||||
|
||||
fun useX(x: X): String = if (x.x == null) "OK" else "fail: $x"
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call { X(null) })
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: Int?)
|
||||
|
||||
fun useX(x: X): String = if (x.x == 42) "OK" else "fail: $x"
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call { X(42) })
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: Int?)
|
||||
|
||||
fun useX(x: X): String = if (x.x == null) "OK" else "fail: $x"
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call { X(null) })
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: String?)
|
||||
|
||||
fun useX(x: X): String = x.x ?: "fail: $x"
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call { X("OK") })
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: String?)
|
||||
|
||||
fun useX(x: X): String = if (x.x == null) "OK" else "fail: $x"
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call { X(null) })
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class X(val x: String)
|
||||
|
||||
fun useX(x: X): String = x.x
|
||||
|
||||
fun <T> call(fn: () -> T) = fn()
|
||||
|
||||
fun box() = useX(call { X("OK") })
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
fun f1(): () -> Result<String> {
|
||||
return {
|
||||
runCatching {
|
||||
"OK"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val r = f1()()
|
||||
return r.getOrNull() ?: "fail: $r"
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
fun f1() = lazy {
|
||||
runCatching {
|
||||
"OK"
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val r = f1().value
|
||||
return r.getOrNull() ?: "fail: $r"
|
||||
}
|
||||
Reference in New Issue
Block a user