[JS IR] Fix: Use proper parameter in ExportedDefaultParameterStub

This commit is contained in:
Svyatoslav Kuzmich
2021-01-26 16:12:30 +03:00
parent 75ed167566
commit 02615ec569
@@ -32,16 +32,19 @@ private fun IrConstructorCall.isAnnotation(name: FqName): Boolean {
class ExportedDefaultParameterStub(val context: JsIrBackendContext) : DeclarationTransformer { class ExportedDefaultParameterStub(val context: JsIrBackendContext) : DeclarationTransformer {
private fun IrBuilderWithScope.createDefaultResolutionExpression(value: IrValueParameter): IrExpression? { private fun IrBuilderWithScope.createDefaultResolutionExpression(
return value.defaultValue?.let { defaultValue -> fromParameter: IrValueParameter,
toParameter: IrValueParameter,
): IrExpression? {
return fromParameter.defaultValue?.let { defaultValue ->
irIfThenElse( irIfThenElse(
value.type, toParameter.type,
irEqeqeq( irEqeqeq(
irGet(value), irGet(toParameter),
irCall(this@ExportedDefaultParameterStub.context.intrinsics.jsUndefined) irCall(this@ExportedDefaultParameterStub.context.intrinsics.jsUndefined)
), ),
defaultValue.expression, defaultValue.expression,
irGet(value) irGet(toParameter)
) )
} }
} }
@@ -52,7 +55,7 @@ class ExportedDefaultParameterStub(val context: JsIrBackendContext) : Declaratio
val variables = mutableMapOf<IrValueParameter, IrValueDeclaration>() val variables = mutableMapOf<IrValueParameter, IrValueDeclaration>()
val defaultResolutionStatements = valueParameters.mapNotNull { valueParameter -> val defaultResolutionStatements = valueParameters.mapNotNull { valueParameter ->
irBuilder.createDefaultResolutionExpression(valueParameter)?.let { initializer -> irBuilder.createDefaultResolutionExpression(valueParameter, valueParameter)?.let { initializer ->
JsIrBuilder.buildVar( JsIrBuilder.buildVar(
valueParameter.type, valueParameter.type,
this@introduceDefaultResolution, this@introduceDefaultResolution,
@@ -116,7 +119,8 @@ class ExportedDefaultParameterStub(val context: JsIrBackendContext) : Declaratio
extensionReceiver = exportedDefaultStubFun.extensionReceiverParameter?.let { irGet(it) } extensionReceiver = exportedDefaultStubFun.extensionReceiverParameter?.let { irGet(it) }
declaration.valueParameters.forEachIndexed { index, irValueParameter -> declaration.valueParameters.forEachIndexed { index, irValueParameter ->
val value = createDefaultResolutionExpression(irValueParameter) ?: irGet(irValueParameter) val exportedParameter = exportedDefaultStubFun.valueParameters[index]
val value = createDefaultResolutionExpression(irValueParameter, exportedParameter) ?: irGet(exportedParameter)
putValueArgument(index, value) putValueArgument(index, value)
} }
}) })