diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt index acc9235204f..1a427cbd3e4 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt @@ -78,16 +78,9 @@ private fun removeUselessDeclarations(module: IrModuleFragment, usefulDeclaratio process(declaration) } - override fun visitConstructor(declaration: IrConstructor) { - if (declaration !in usefulDeclarations) { - // Keep the constructor declaration without body in order to declare the JS constructor function - declaration.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, emptyList()) - } - } - private fun process(container: IrDeclarationContainer) { container.declarations.transformFlat { member -> - if (member !in usefulDeclarations && member !is IrConstructor) { + if (member !in usefulDeclarations) { emptyList() } else { member.acceptVoid(this) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt index e8adcbbf38b..f0cbde7956b 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt @@ -33,6 +33,7 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo fun generate(): JsStatement { assert(!irClass.descriptor.isExpect) + maybeGeneratePrimaryConstructor() val transformer = IrDeclarationToJsTransformer() // Properties might be lowered out of classes @@ -142,6 +143,15 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo return null } + private fun maybeGeneratePrimaryConstructor() { + if (!irClass.declarations.any { it is IrConstructor }) { + val func = JsFunction(emptyScope, JsBlock(), "Ctor for ${irClass.name}") + func.name = className + classBlock.statements += func.makeStmt() + classModel.preDeclarationBlock.statements += generateInheritanceCode() + } + } + private fun generateInheritanceCode(): List { if (baseClass == null || baseClass.isAny()) { return emptyList()