JVM_IR indy-SAM: KT-45069 box lambda 'Unit' return type if needed

This commit is contained in:
Dmitry Petrov
2021-02-20 11:07:48 +03:00
parent 187d4998fa
commit 387d84f826
19 changed files with 561 additions and 3 deletions
@@ -0,0 +1,18 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
fun interface Cmp<T> {
fun compare(a: T, b: T): Int
}
fun <T> foo(comparator: Cmp<in T>, a: T, b: T) = comparator.compare(a, b)
fun bar(x: Int, y: Int) = foo({ a, b -> a - b}, x, y)
fun box(): String {
val t = bar(42, 117)
if (t != -75)
return "Failed: t=$t"
return "OK"
}
@@ -0,0 +1,16 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND_FIR: JVM_IR
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
fun interface Cmp<T> {
fun compare(a: T, b: T): Int
}
fun cmp(c: Cmp<*>) = c
fun box(): String {
val c = cmp { _, _ -> 0 } as Cmp<Any>
if (c.compare(1, 2) != 0)
return "Failed"
return "OK"
}
@@ -1,7 +1,6 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// IGNORE_DEXING
fun interface GenericToAny<T> {
fun invoke(x: T): Any
@@ -12,4 +11,4 @@ fun interface GenericCharToAny : GenericToAny<Char>
fun withK(fn: GenericCharToAny) = fn.invoke('K').toString()
fun box(): String =
withK { "O" + it }
withK { "O" + it }
@@ -0,0 +1,18 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
fun interface IFoo<T> {
fun foo(): T
}
fun <T> foo(iFoo: IFoo<T>) = iFoo.foo()
fun box(): String {
try {
foo { throw RuntimeException("OK") }
} catch (e: RuntimeException) {
return e.message!!
}
return "Failed"
}
@@ -0,0 +1,18 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
fun interface IFoo {
fun foo(): String
}
fun foo(iFoo: IFoo) = iFoo.foo()
fun box(): String {
try {
foo { throw RuntimeException("OK") }
} catch (e: RuntimeException) {
return e.message!!
}
return "Failed"
}
@@ -0,0 +1,16 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
fun interface GenericToAny<T> {
fun invoke(Inner: T): Any
}
fun <T> foo2(t: T, g: GenericToAny<T>): Any = g.invoke(t)
fun box(): String {
foo2<Char>('.') { }
return "OK"
}
@@ -0,0 +1,14 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: CLASS
fun interface GenericToAny<T> {
fun invoke(Inner: T): Any
}
fun <T> foo2(t: T, g: GenericToAny<T>): Any = g.invoke(t)
fun box(): String {
foo2<Char>('.') { }
return "OK"
}