6e143a2656
The "free" in "createFreeFakeLambdaDescriptor" and such refers to the fact that there are no references to type parameters from outside the current declaration. This is necessary because at the point where the metadata is written, the type parameters may not even be in scope (e.g. local delegated properties are serialized at class level, but may refer to function-scope type parameters).
29 lines
742 B
Kotlin
Vendored
29 lines
742 B
Kotlin
Vendored
// IGNORE_BACKEND: JS_IR
|
|
// IGNORE_BACKEND: JS_IR_ES6
|
|
// TODO: muted automatically, investigate should it be ran for JS or not
|
|
// IGNORE_BACKEND: JS, NATIVE
|
|
|
|
// WITH_REFLECT
|
|
|
|
import kotlin.test.assertEquals
|
|
|
|
fun <T> bar(): String {
|
|
return { t: T -> t }.toString()
|
|
}
|
|
|
|
class Baz<T, V> {
|
|
fun <V : T> baz(v: V): String {
|
|
return (fun(t: List<T>): V = v).toString()
|
|
}
|
|
}
|
|
|
|
open class Foo<T, U : List<T>>(val lambda: (T) -> U)
|
|
class Bar<T> : Foo<T, List<T>>({ listOf(it) })
|
|
|
|
fun box(): String {
|
|
assertEquals("(T) -> T", bar<String>())
|
|
assertEquals("(kotlin.collections.List<T>) -> V", Baz<String, Int>().baz<String>(""))
|
|
assertEquals("(T) -> kotlin.collections.List<T>", Bar<Int>().lambda.toString())
|
|
return "OK"
|
|
}
|