[Wasm] Add external inheritance checker.

Prohibit non-external types to extend external types.
This type of inheritance is not supported in Wasm backend.
This commit is contained in:
Svyatoslav Kuzmich
2023-02-21 21:50:36 +01:00
parent 54a45c49f8
commit 321a476898
6 changed files with 243 additions and 0 deletions
@@ -0,0 +1,22 @@
open class C1
interface I1
external open class EC1
external class <!EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE!>EC2<!> : C1
external class <!EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE!>EC3<!> : I1, C1
external interface <!EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE!>EI1<!> : I1
interface <!NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE!>I2<!> : EI1
class <!NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE!>C3<!> : EI1
class <!NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE, NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE!>C4<!> : EI1, EC1()
<!NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE!>object O1<!> : EC1()
val x1: Any = <!NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE!>object<!> : EI1 {}
val x2: Any = <!NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE!>object<!> : EC1() {}
@@ -0,0 +1,92 @@
package
public val x1: kotlin.Any
public val x2: kotlin.Any
public open class C1 {
public constructor C1()
invisible_fake final override /*1*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class C3 : EI1 {
public constructor C3()
invisible_fake final override /*1*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class C4 : EI1, EC1 {
public constructor C4()
invisible_fake final override /*2*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*2*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public open external class EC1 {
public constructor EC1()
invisible_fake final override /*1*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final external class EC2 : C1 {
public constructor EC2()
invisible_fake final override /*1*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final external class EC3 : I1, C1 {
public constructor EC3()
invisible_fake final override /*2*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*2*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public external interface EI1 : I1 {
invisible_fake final override /*1*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface I1 {
invisible_fake final override /*1*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface I2 : EI1 {
invisible_fake final override /*1*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public object O1 : EC1 {
private constructor O1()
invisible_fake final override /*1*/ /*fake_override*/ var _hashCode: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var typeInfo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}