diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ExportedDefaultParameterStub.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ExportedDefaultParameterStub.kt index 8987e488be0..70fc7c882de 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ExportedDefaultParameterStub.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ExportedDefaultParameterStub.kt @@ -32,16 +32,19 @@ private fun IrConstructorCall.isAnnotation(name: FqName): Boolean { class ExportedDefaultParameterStub(val context: JsIrBackendContext) : DeclarationTransformer { - private fun IrBuilderWithScope.createDefaultResolutionExpression(value: IrValueParameter): IrExpression? { - return value.defaultValue?.let { defaultValue -> + private fun IrBuilderWithScope.createDefaultResolutionExpression( + fromParameter: IrValueParameter, + toParameter: IrValueParameter, + ): IrExpression? { + return fromParameter.defaultValue?.let { defaultValue -> irIfThenElse( - value.type, + toParameter.type, irEqeqeq( - irGet(value), + irGet(toParameter), irCall(this@ExportedDefaultParameterStub.context.intrinsics.jsUndefined) ), defaultValue.expression, - irGet(value) + irGet(toParameter) ) } } @@ -52,7 +55,7 @@ class ExportedDefaultParameterStub(val context: JsIrBackendContext) : Declaratio val variables = mutableMapOf() val defaultResolutionStatements = valueParameters.mapNotNull { valueParameter -> - irBuilder.createDefaultResolutionExpression(valueParameter)?.let { initializer -> + irBuilder.createDefaultResolutionExpression(valueParameter, valueParameter)?.let { initializer -> JsIrBuilder.buildVar( valueParameter.type, this@introduceDefaultResolution, @@ -116,7 +119,8 @@ class ExportedDefaultParameterStub(val context: JsIrBackendContext) : Declaratio extensionReceiver = exportedDefaultStubFun.extensionReceiverParameter?.let { irGet(it) } 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) } })