[JS IR] Fix backend to make it possible lower partially loaded IR

This commit is contained in:
Roman Artemev
2021-09-28 18:21:49 +03:00
committed by TeamCityServer
parent 2ca74174d3
commit ebf17188cb
3 changed files with 169 additions and 149 deletions
@@ -394,7 +394,9 @@ class EnumClassCreateInitializerLowering(val context: JsCommonBackendContext) :
irClass.enumEntries.forEach { entry ->
entry.correspondingField?.let { instanceField ->
+irSetField(null, instanceField, entry.initializerExpression!!.expression.deepCopyWithSymbols(it))
entry.initializerExpression?.let { initializer ->
+irSetField(null, instanceField, initializer.expression.deepCopyWithSymbols(it))
}
}
}
@@ -124,14 +124,26 @@ class SecondaryConstructorLowering(val context: JsIrBackendContext) : Declaratio
private fun generateInitBody(constructor: IrConstructor, irClass: IrClass, delegate: IrSimpleFunction) {
val thisParam = delegate.valueParameters.last()
val oldThisReceiver = irClass.thisReceiver!!
val constructorBody = constructor.body!!
val constructorBody = constructor.body
val oldValueParameters = constructor.valueParameters + oldThisReceiver
// TODO: replace parameters as well
delegate.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
statements += (constructorBody.deepCopyWithSymbols(delegate) as IrStatementContainer).statements
statements += JsIrBuilder.buildReturn(delegate.symbol, JsIrBuilder.buildGetValue(thisParam.symbol), context.irBuiltIns.nothingType)
transformChildrenVoid(ThisUsageReplaceTransformer(constructor.symbol, delegate.symbol, oldValueParameters.zip(delegate.valueParameters).toMap()))
if (constructorBody != null) {
delegate.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
statements += (constructorBody.deepCopyWithSymbols(delegate) as IrStatementContainer).statements
statements += JsIrBuilder.buildReturn(
delegate.symbol,
JsIrBuilder.buildGetValue(thisParam.symbol),
context.irBuiltIns.nothingType
)
transformChildrenVoid(
ThisUsageReplaceTransformer(
constructor.symbol,
delegate.symbol,
oldValueParameters.zip(delegate.valueParameters).toMap()
)
)
}
}
}