JS IR: materialize Unit in lambdas
^KT-52010 fixed
This commit is contained in:
committed by
Anton Bannykh
parent
bc3514feae
commit
281e381223
@@ -0,0 +1,35 @@
|
||||
// EXPECTED_REACHABLE_NODES: 1285
|
||||
|
||||
fun <T> rawReturnValue(fn: () -> T): Any {
|
||||
return fn() as Any
|
||||
}
|
||||
|
||||
fun unitFun() {}
|
||||
|
||||
fun charFun(): Char = 'a'
|
||||
|
||||
value class VC(val v: Int)
|
||||
|
||||
fun vcFun(): VC = VC(1)
|
||||
|
||||
|
||||
|
||||
fun box(): String {
|
||||
if (rawReturnValue { unitFun() } != Unit) return "fail1.1"
|
||||
if (rawReturnValue<Unit> { unitFun() } != Unit) return "fail1.2"
|
||||
if (rawReturnValue<Any> { unitFun() } != Unit) return "fail1.3"
|
||||
|
||||
val boxedA: Any = 'a'
|
||||
|
||||
if (rawReturnValue { charFun() } != boxedA) return "fail2.1"
|
||||
if (rawReturnValue<Char> { charFun() } != boxedA) return "fail2.2"
|
||||
if (rawReturnValue<Any> { charFun() } != boxedA) return "fail2.3"
|
||||
|
||||
val boxed1: Any = VC(1)
|
||||
|
||||
if (rawReturnValue { vcFun() } != boxed1) return "fail3.1"
|
||||
if (rawReturnValue<VC> { vcFun() } != boxed1) return "fail3.2"
|
||||
if (rawReturnValue<Any> { vcFun() } != boxed1) return "fail3.3"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
// EXPECTED_REACHABLE_NODES: 1274
|
||||
|
||||
fun box(): String {
|
||||
instance = Holder()
|
||||
instance?.applyAndRet<Unit> { sideEffect("left") } ?: sideEffect("right")
|
||||
|
||||
if (log == "left") return "OK" else return "fail: $log"
|
||||
}
|
||||
|
||||
var log = ""
|
||||
|
||||
fun sideEffect(msg: String) {
|
||||
log += msg
|
||||
}
|
||||
|
||||
var instance: Holder? = null
|
||||
|
||||
class Holder() {
|
||||
fun <T> applyAndRet(block: () -> T): T {
|
||||
return block()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user