1c3b895fc0
Current implementation of calls with super qualifier relies on invokespecial, which has some more constraints than regular virtual invocations. When those constraints aren't met, accessors are needed.
46 lines
827 B
Kotlin
Vendored
46 lines
827 B
Kotlin
Vendored
interface T {
|
|
open val baz: String
|
|
get() = "T.baz"
|
|
}
|
|
|
|
open class A {
|
|
open val bar: String
|
|
get() = "OK"
|
|
open val boo: String
|
|
get() = "OK"
|
|
}
|
|
|
|
open class B : A(), T {
|
|
override val bar: String
|
|
get() = "B"
|
|
override val baz: String
|
|
get() = "B.baz"
|
|
inner class E {
|
|
val bar: String
|
|
get() = super<A>@B.bar + super@B.bar + super@B.baz
|
|
}
|
|
}
|
|
|
|
class C : B() {
|
|
override val bar: String
|
|
get() = "C"
|
|
override val boo: String
|
|
get() = "C"
|
|
inner class D {
|
|
val bar: String
|
|
get() = super<B>@C.bar + super<B>@C.boo
|
|
}
|
|
}
|
|
|
|
fun box(): String {
|
|
var r = ""
|
|
|
|
r = B().E().bar
|
|
if (r != "OKOKT.baz") return "fail 1; r = $r"
|
|
|
|
r = C().D().bar
|
|
if (r != "BOK") return "fail 2; r = $r"
|
|
|
|
return "OK"
|
|
}
|