[JS IR] Generate references from fake override to body in case of generic superclass
This commit is contained in:
+13
-8
@@ -258,17 +258,14 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
|
||||
// interface II : I
|
||||
// II.prototype.foo = I.prototype.foo
|
||||
if (!irClass.isInterface) {
|
||||
val isFakeOverride = declaration.isFakeOverride
|
||||
val missedOverrides = mutableListOf<IrSimpleFunction>()
|
||||
declaration.collectRealOverrides()
|
||||
.find { it.modality != Modality.ABSTRACT }
|
||||
?.let {
|
||||
val implClassDeclaration = it.parent as IrClass
|
||||
|
||||
if (implClassDeclaration.shouldCopyFrom() && it.body != null) {
|
||||
val reference = context.getNameForStaticDeclaration(it).makeRef()
|
||||
classModel.postDeclarationBlock.statements += jsAssignment(memberRef, reference).makeStmt()
|
||||
.onEach {
|
||||
if (isFakeOverride && it.modality == Modality.ABSTRACT) {
|
||||
missedOverrides.add(it)
|
||||
}
|
||||
}
|
||||
declaration.collectRealOverrides()
|
||||
.find { it.modality != Modality.ABSTRACT }
|
||||
?.let {
|
||||
val implClassDeclaration = it.parent as IrClass
|
||||
@@ -276,6 +273,14 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
|
||||
if (implClassDeclaration.shouldCopyFrom() && it.body != null) {
|
||||
val reference = context.getNameForStaticDeclaration(it).makeRef()
|
||||
classModel.postDeclarationBlock.statements += jsAssignment(memberRef, reference).makeStmt()
|
||||
if (isFakeOverride) {
|
||||
classModel.postDeclarationBlock.statements += missedOverrides
|
||||
.map { missedOverride ->
|
||||
val name = context.getNameForMemberFunction(missedOverride)
|
||||
val ref = jsElementAccess(name.ident, classPrototypeRef)
|
||||
jsAssignment(ref, reference).makeStmt()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// !LANGUAGE: -AbstractClassMemberNotImplementedWithIntermediateAbstractClass
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: IGNORED_IN_JS
|
||||
// IGNORE_BACKEND: JS_IR
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
|
||||
var result = "Fail"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user