JVM_IR pass reified type parameters in indy SAM conversion proxy

This commit is contained in:
Dmitry Petrov
2021-10-07 12:37:08 +03:00
committed by teamcityserver
parent 40fe67880b
commit 005d3b1f6f
15 changed files with 221 additions and 7 deletions
@@ -0,0 +1,18 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: genericFunRef.kt
fun <T> plusK(x: T) = x.toString() + "K"
fun box() = J(::plusK).apply("O")
// FILE: J.java
public interface J {
public String apply(String x);
}
@@ -0,0 +1,19 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// WITH_RUNTIME
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: highOrderFunRef.kt
fun applyO(fn: (String) -> String) = fn("O")
fun box() = J(::applyO).invoke { it + "K" }
// FILE: J.java
public interface J {
String invoke(kotlin.jvm.functions.Function1<String, String> fn);
}
@@ -0,0 +1,18 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: inlineFunRef.kt
inline fun plusK(x: String) = x.toString() + "K"
fun box() = J(::plusK).apply("O")
// FILE: J.java
public interface J {
public String apply(String x);
}
@@ -0,0 +1,22 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// WITH_RUNTIME
// FULL_JDK
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: inlineFunWithReifiedTypeParameterRef.kt
inline fun <reified T> oPlus(x: T) = "O" + T::class.java.simpleName
class K
fun box() = J(::oPlus).apply(K())
// FILE: J.java
public interface J {
public String apply(K x);
}
@@ -0,0 +1,19 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// WITH_RUNTIME
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: inlineHighOrderFunRef.kt
inline fun applyO(fn: (String) -> String) = fn("O")
fun box() = J(::applyO).invoke { it + "K" }
// FILE: J.java
public interface J {
String invoke(kotlin.jvm.functions.Function1<String, String> fn);
}
@@ -4,7 +4,7 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 java/lang/invoke/LambdaMetafactory
// FILE: arrayOf.kt
fun box() =
@@ -4,7 +4,7 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 java/lang/invoke/LambdaMetafactory
// FILE: enumValues.kt
enum class ABC(val x: String = "") {
@@ -4,7 +4,7 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 java/lang/invoke/LambdaMetafactory
// FILE: enumValues.kt
enum class ABC(val x: String = "") {