blob: 182524f17fe723bb9af5ff87db69678c6a07eb00 [file]
// TARGET_BACKEND: JVM
// LAMBDAS: INDY
// CHECK_BYTECODE_LISTING
// WITH_STDLIB
@file:OptIn(ExperimentalVersionOverloading::class)
class C {
fun inTrailing(
x: String,
@IntroducedAt("1") y: Int = 1,
@IntroducedAt("2") z: Boolean = true,
block: (String) -> String = { x.uppercase() }
) = "$x/$y/$z/${block("")}"
fun inArgument(
x: String,
@IntroducedAt("1") y: Int = 1,
@IntroducedAt("2") z: (Int) -> Int = { y + 1 },
block: (String) -> String
) = "$x/$y/${z(0)}/${block("")}"
}
fun test1() : String {
val c = C()
val f: (String) -> String = String::uppercase
val m1 = C::class.java.getMethod("inTrailing", String::class.java, kotlin.jvm.functions.Function1::class.java)
val m2 = C::class.java.getMethod("inTrailing", String::class.java, Int::class.java, kotlin.jvm.functions.Function1::class.java)
val v1 = m1.invoke(c, "hello", f) as String
val v2 = m2.invoke(c, "hello", 1, f) as String
val v3 = c.inTrailing("hello", 1, true, f)
return if ((v1 == v3) && (v2 == v3)) "O" else "Err1: $v1 $v2 $v3 "
}
fun test2() : String {
val c = C()
val f: (String) -> String = String::uppercase
val z: (Int) -> Int = { 2 }
val m1 = C::class.java.getMethod("inArgument", String::class.java, kotlin.jvm.functions.Function1::class.java)
val m2 = C::class.java.getMethod("inArgument", String::class.java, Int::class.java, kotlin.jvm.functions.Function1::class.java)
val v1 = m1.invoke(c, "hello" , f) as String
val v2 = m2.invoke(c, "hello", 1, f) as String
val v3 = c.inArgument("hello", 1, z, f)
return if ((v1 == v3) && (v2 == v3)) "K" else " Err2: $v1 $v2 $v3"
}
fun box() = test1() + test2()