Files
kotlin-fork/compiler/testData/codegen/box/inference/kt10822.kt
T
Mikhail Zarechenskiy 66a00f442c Add tests for obsolete issues
#KT-12008 Obsolete
 #KT-11881 Obsolete
 #KT-10822 Obsolete
2018-09-11 12:34:09 +03:00

62 lines
1.0 KiB
Kotlin
Vendored

var result = ""
interface A {
fun foo() {
result += "foo;"
}
}
interface B : A {
fun hoo() {
result += "hoo;"
}
}
fun<T : A> doer(init: () -> T): T = init()
class Z {
operator fun<T : A> invoke(init: Z.() -> T): T = init()
infix fun<T : A> doer(init: Z.() -> T): T = init()
}
interface ARoot<T> {
val self : T
infix fun<U : A> consume(init: T.() -> U): U = self.init()
operator fun<U : A> invoke(init: T.() -> U): U = self.init()
}
class Y : ARoot<Y> {
override val self: Y
get() = this
}
fun box(): String {
doer {
object : B {}
}.hoo()
val z = Z()
val y = Y()
z.doer { object : B {} }.hoo()
y {
z {
object : B {}
}
}.hoo()
y.consume {
z {
object : B {}
}
}.hoo()
z {
object : B {}
}.foo()
z.doer { object : B {} }.foo()
z.doer { object : B {} }.hoo()
return if (result == "hoo;hoo;hoo;hoo;foo;foo;hoo;") "OK" else "Fail: $result"
}