c0152ccf0f
Unfortunately, it's not enough to know direct overriddens to correctly build fake overrides. This mean, that we need to know whole overridden tree during the process of building. It happens automatically for normal classes, but not for lazy classes, as their overriddens are built separatly. This commit enforces correct overrddens for lazy classes in hierarhies at the point, where they should be normally computed. ^KT-65236
84 lines
2.0 KiB
Kotlin
Vendored
84 lines
2.0 KiB
Kotlin
Vendored
// CHECK:
|
|
// Mangled name: C
|
|
// Public signature: /C|null[0]
|
|
abstract class C : I {
|
|
// CHECK:
|
|
// Mangled name: C#<init>(){}
|
|
// Public signature: /C.<init>|-5645683436151566731[0]
|
|
// Public signature debug description: <init>(){}
|
|
constructor() /* primary */
|
|
|
|
// CHECK:
|
|
// Mangled name: C#foo(){}
|
|
// Public signature: /C.foo|-1041209573719867811[0]
|
|
// Public signature debug description: foo(){}
|
|
abstract override fun foo(): Unit
|
|
|
|
}
|
|
|
|
// CHECK:
|
|
// Mangled name: D
|
|
// Public signature: /D|null[0]
|
|
abstract class D : C, J {
|
|
// CHECK:
|
|
// Mangled name: D#<init>(){}
|
|
// Public signature: /D.<init>|-5645683436151566731[0]
|
|
// Public signature debug description: <init>(){}
|
|
constructor() /* primary */
|
|
|
|
// CHECK:
|
|
// Mangled name: D#foo(){}
|
|
// Public signature: /D.foo|-1041209573719867811[0]
|
|
// Public signature debug description: foo(){}
|
|
abstract /* fake */ override fun foo(): Unit
|
|
|
|
}
|
|
|
|
// CHECK:
|
|
// Mangled name: E
|
|
// Public signature: /E|null[0]
|
|
class E : D {
|
|
// CHECK:
|
|
// Mangled name: E#<init>(){}
|
|
// Public signature: /E.<init>|-5645683436151566731[0]
|
|
// Public signature debug description: <init>(){}
|
|
constructor() /* primary */
|
|
|
|
// CHECK:
|
|
// Mangled name: E#foo(){}
|
|
// Public signature: /E.foo|-1041209573719867811[0]
|
|
// Public signature debug description: foo(){}
|
|
override fun foo(): Unit
|
|
|
|
}
|
|
|
|
// CHECK:
|
|
// Mangled name: I
|
|
// Public signature: /I|null[0]
|
|
interface I : II {
|
|
// CHECK:
|
|
// Mangled name: I#foo(){}
|
|
// Public signature: /I.foo|-1041209573719867811[0]
|
|
// Public signature debug description: foo(){}
|
|
/* fake */ override fun foo(): Unit
|
|
|
|
}
|
|
|
|
// CHECK:
|
|
// Mangled name: II
|
|
// Public signature: /II|null[0]
|
|
interface II {
|
|
// CHECK:
|
|
// Mangled name: II#foo(){}
|
|
// Public signature: /II.foo|-1041209573719867811[0]
|
|
// Public signature debug description: foo(){}
|
|
fun foo(): Unit
|
|
|
|
}
|
|
|
|
// CHECK:
|
|
// Mangled name: #foo(I){}
|
|
// Public signature: /foo|-4109751996049019888[0]
|
|
// Public signature debug description: foo(I){}
|
|
fun foo(x: I): Unit
|