[JS IR] Fix backend to make it possible lower partially loaded IR
This commit is contained in:
committed by
TeamCityServer
parent
2ca74174d3
commit
ebf17188cb
+3
-1
@@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-5
@@ -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()
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user