diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt index a0aa64e53a8..c81509edbfc 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.ir.* import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* +import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrConstructorImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl @@ -72,7 +73,7 @@ open class DefaultArgumentStubGenerator( val builder = context.createIrBuilder(newIrFunction.symbol) newIrFunction.body = builder.irBlockBody(newIrFunction) { - val params = mutableListOf() + val params = mutableListOf() val variables = mutableMapOf() irFunction.dispatchReceiverParameter?.let { @@ -85,8 +86,7 @@ open class DefaultArgumentStubGenerator( for (valueParameter in irFunction.valueParameters) { val parameter = newIrFunction.valueParameters[valueParameter.index] - - val argument = if (valueParameter.defaultValue != null) { + val remapped = if (valueParameter.defaultValue != null) { val kIntAnd = symbols.intAnd.owner val condition = irNotEquals(irCall(kIntAnd).apply { dispatchReceiver = irGet(maskParameter(newIrFunction, valueParameter.index / 32)) @@ -104,21 +104,18 @@ open class DefaultArgumentStubGenerator( } }) - irIfThenElse( + val argument = irIfThenElse( type = parameter.type, condition = condition, thenPart = expressionBody.expression, elsePart = irGet(parameter) ) + createTmpVariable(argument, nameHint = parameter.name.asString()) } else { - irGet(parameter) + parameter } - - val temporaryVariable = createTmpVariable(argument, nameHint = parameter.name.asString()) - temporaryVariable.parent = newIrFunction - - params.add(temporaryVariable) - variables[valueParameter] = temporaryVariable + params.add(remapped) + variables[valueParameter] = remapped } when (irFunction) { @@ -151,7 +148,7 @@ open class DefaultArgumentStubGenerator( private fun IrBlockBodyBuilder.dispatchToImplementation( irFunction: IrSimpleFunction, newIrFunction: IrFunction, - params: MutableList + params: MutableList ): IrExpression { val dispatchCall = irCall(irFunction.symbol).apply { passTypeArgumentsFrom(newIrFunction) @@ -177,7 +174,7 @@ open class DefaultArgumentStubGenerator( handlerDeclaration: IrValueParameter, oldIrFunction: IrFunction, newIrFunction: IrFunction, - params: MutableList + params: MutableList ): IrExpression { assert(needSpecialDispatch(oldIrFunction as IrSimpleFunction)) error("This method should be overridden") diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt index c99897434c9..de97c383cd5 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt @@ -14,17 +14,13 @@ import org.jetbrains.kotlin.ir.builders.IrBlockBodyBuilder import org.jetbrains.kotlin.ir.builders.irCall import org.jetbrains.kotlin.ir.builders.irGet import org.jetbrains.kotlin.ir.builders.irImplicitCast -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.ir.declarations.IrValueParameter -import org.jetbrains.kotlin.ir.declarations.IrVariable +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid -import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name class JsDefaultArgumentStubGenerator(override val context: JsIrBackendContext) : DefaultArgumentStubGenerator(context, true, true) { @@ -35,7 +31,7 @@ class JsDefaultArgumentStubGenerator(override val context: JsIrBackendContext) : handlerDeclaration: IrValueParameter, oldIrFunction: IrFunction, newIrFunction: IrFunction, - params: MutableList + params: MutableList ): IrExpression { val paramCount = oldIrFunction.valueParameters.size val invokeFunctionN = resolveInvoke(paramCount)