JVM_IR indy-SAM: KT-45069 box lambda 'Unit' return type if needed
This commit is contained in:
Vendored
+16
@@ -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();
|
||||
}
|
||||
+25
@@ -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);
|
||||
}
|
||||
+25
@@ -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);
|
||||
}
|
||||
+28
@@ -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);
|
||||
}
|
||||
+28
@@ -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);
|
||||
}
|
||||
compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/voidReturnTypeAsObject.kt
Vendored
+20
@@ -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);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// SAM_CONVERSIONS: INDY
|
||||
|
||||
fun interface INum {
|
||||
fun get(): Number
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val num = INum { 42 }
|
||||
if (num.get() != 42)
|
||||
return "Failed"
|
||||
return "OK"
|
||||
}
|
||||
Vendored
+18
@@ -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"
|
||||
}
|
||||
Vendored
+16
@@ -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
-2
@@ -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 }
|
||||
|
||||
Vendored
+18
@@ -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"
|
||||
}
|
||||
Vendored
+18
@@ -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"
|
||||
}
|
||||
+16
@@ -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"
|
||||
}
|
||||
|
||||
|
||||
Vendored
+14
@@ -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"
|
||||
}
|
||||
Reference in New Issue
Block a user