JVM_IR wrap function into a proxy if indy SAM-conversion becomes valid
This commit is contained in:
committed by
teamcityserver
parent
9ad62eb1fd
commit
40fe67880b
+21
@@ -0,0 +1,21 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// SAM_CONVERSIONS: INDY
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 1 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// FILE: genericBoundInnerConstructorRef.kt
|
||||
class Outer<TO>(val s1: TO) {
|
||||
inner class Inner<TI>(val s2: TI) {
|
||||
fun t() = s1.toString() + s2.toString()
|
||||
}
|
||||
}
|
||||
|
||||
fun box() = Sam(Outer("O")::Inner).get("K").t()
|
||||
|
||||
// FILE: Sam.java
|
||||
public interface Sam<TO, TI> {
|
||||
Outer<TO>.Inner<TI> get(String s);
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// SAM_CONVERSIONS: INDY
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 1 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// FILE: genericInnerConstructorRef.kt
|
||||
|
||||
// Can't resolve generic type argument for unbound constructor reference,
|
||||
// so 'Outer' has no type parameters.
|
||||
class Outer(val s1: String) {
|
||||
inner class Inner<TI>(val s2: TI) {
|
||||
fun t() = s1 + s2.toString()
|
||||
}
|
||||
}
|
||||
|
||||
fun box() = Sam(Outer::Inner).get(Outer("O"), "K").t()
|
||||
|
||||
// FILE: Sam.java
|
||||
public interface Sam<TI> {
|
||||
Outer.Inner<TI> get(Outer outer, String s);
|
||||
}
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 0 java/lang/invoke/LambdaMetafactory
|
||||
// 1 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// ^ OVERLOAD_RESOLUTION_AMBIGUITY: Overload resolution ambiguity between candidates: [kotlin/collections/plus, kotlin/collections/plus]
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// SAM_CONVERSIONS: INDY
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 4 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// FILE: voidReturnTypeAsObject.kt
|
||||
|
||||
var t = "Failed"
|
||||
|
||||
fun ok(s: String) { t = s }
|
||||
|
||||
fun box(): String {
|
||||
Sam(::ok).get("1")
|
||||
Sam(::ok).get("2")
|
||||
Sam(::ok).get("3")
|
||||
|
||||
val r = Sam(::ok).get("OK")
|
||||
if (r != Unit) {
|
||||
return "Failed: $r"
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
// FILE: Sam.java
|
||||
public interface Sam {
|
||||
Object get(String s);
|
||||
}
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 0 java/lang/invoke/LambdaMetafactory
|
||||
// 1 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// FILE: anyNToString.kt
|
||||
fun box() =
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 0 java/lang/invoke/LambdaMetafactory
|
||||
// 1 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// FILE: arrayConstructor.kt
|
||||
fun box(): String {
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 0 java/lang/invoke/LambdaMetafactory
|
||||
// 1 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// FILE: charArrayOf.kt
|
||||
fun box(): String {
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// SAM_CONVERSIONS: INDY
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 1 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// FILE: intArrayOf.kt
|
||||
fun box(): String {
|
||||
val sam = Sam(::intArrayOf)
|
||||
val arr = sam.get(intArrayOf('O'.toInt(), 'K'.toInt()))
|
||||
return "${arr[0].toChar()}${arr[1].toChar()}"
|
||||
}
|
||||
|
||||
// FILE: Sam.java
|
||||
public interface Sam {
|
||||
int[] get(int[] s);
|
||||
}
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 0 java/lang/invoke/LambdaMetafactory
|
||||
// 1 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// FILE: stringNPlus.kt
|
||||
fun test(x: String?, y: Any?) =
|
||||
|
||||
compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/voidReturnTypeAsObject.kt
Vendored
+1
-2
@@ -4,8 +4,7 @@
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 0 java/lang/invoke/LambdaMetafactory
|
||||
// 1 final synthetic class VoidReturnTypeAsObjectKt\$box\$r\$[0-9]+
|
||||
// 1 java/lang/invoke/LambdaMetafactory
|
||||
|
||||
// FILE: voidReturnTypeAsObject.kt
|
||||
var t = "Failed"
|
||||
|
||||
Reference in New Issue
Block a user