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,16 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// FILE: intReturnTypeAsNumber.kt
fun box(): String {
val num = Sam { 42 }
if (num.get() != 42)
return "Failed"
return "OK"
}
// FILE: Sam.java
public interface Sam {
Number get();
}
@@ -0,0 +1,25 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// FILE: nothingReturnTypeAsObject.kt
fun interface IFoo<T> {
fun foo(): T
}
fun thr(s: String): Nothing = throw RuntimeException(s)
fun box(): String {
try {
Sam(::thr).get("OK")
} catch (e: RuntimeException) {
return e.message!!
}
return "Failed"
}
// FILE: Sam.java
public interface Sam {
Object get(String s);
}
@@ -0,0 +1,25 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// FILE: nothingReturnTypeAsString.kt
fun interface IFoo<T> {
fun foo(): T
}
fun thr(s: String): Nothing = throw RuntimeException(s)
fun box(): String {
try {
Sam(::thr).get("OK")
} catch (e: RuntimeException) {
return e.message!!
}
return "Failed"
}
// FILE: Sam.java
public interface Sam {
String get(String s);
}
@@ -0,0 +1,28 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// FILE: nullableNothingReturnTypeAsObject.kt
fun interface IFoo<T> {
fun foo(): T
}
var t = "Failed"
fun test(s: String): Nothing? {
t = s
return null
}
fun box(): String {
val q = Sam(::test).get("OK")
if (q != null)
return "Failed: $q"
return t
}
// FILE: Sam.java
public interface Sam {
Object get(String s);
}
@@ -0,0 +1,28 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// FILE: nullableNothingReturnTypeAsString.kt
fun interface IFoo<T> {
fun foo(): T
}
var t = "Failed"
fun test(s: String): Nothing? {
t = s
return null
}
fun box(): String {
val q = Sam(::test).get("OK")
if (q != null)
return "Failed: $q"
return t
}
// FILE: Sam.java
public interface Sam {
String get(String s);
}
@@ -0,0 +1,20 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// FILE: voidReturnTypeAsObject.kt
var t = "Failed"
fun ok(s: String) { t = s }
fun box(): String {
val r = Sam(::ok).get("OK")
if (r != Unit) {
return "Failed: $r"
}
return t
}
// FILE: Sam.java
public interface Sam {
Object get(String s);
}