[K/JS] Eliminate duplication of init block inside exported ES-classes ^KT-58246 Fixed

This commit is contained in:
Artem Kobzar
2023-04-25 16:21:08 +00:00
committed by Space Team
parent 9afddb1a7a
commit 27b103e2ca
7 changed files with 111 additions and 5 deletions
@@ -67,12 +67,14 @@ class ES6ConstructorLowering(val context: JsIrBackendContext) : DeclarationTrans
return runIf(isExported(context) && isPrimary) {
apply {
valueParameters = valueParameters.memoryOptimizedFilterNot { it.isBoxParameter }
(body as? IrBlockBody)?.let {
val selfReplacedConstructorCall = JsIrBuilder.buildCall(factoryFunction.symbol).apply {
valueParameters.forEachIndexed { i, it -> putValueArgument(i, JsIrBuilder.buildGetValue(it.symbol)) }
dispatchReceiver = JsIrBuilder.buildCall(context.intrinsics.jsNewTarget)
body = (body as? IrBlockBody)?.let {
context.irFactory.createBlockBody(it.startOffset, it.endOffset) {
val selfReplacedConstructorCall = JsIrBuilder.buildCall(factoryFunction.symbol).apply {
valueParameters.forEachIndexed { i, it -> putValueArgument(i, JsIrBuilder.buildGetValue(it.symbol)) }
dispatchReceiver = JsIrBuilder.buildCall(context.intrinsics.jsNewTarget)
}
statements.add(JsIrBuilder.buildReturn(symbol, selfReplacedConstructorCall, returnType))
}
it.statements.add(JsIrBuilder.buildReturn(symbol, selfReplacedConstructorCall, returnType))
}
}
}