From 417c570243f134f8f042a7be645f1c9bb2470972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Fri, 27 Sep 2019 13:15:23 +0200 Subject: [PATCH] IR: Fix InnerClassConstructorCallsLowering Prevent repeated passes over nested functions. --- .../common/lower/InnerClassesLowering.kt | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt index 807d6beb197..45e340e5d53 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt @@ -5,18 +5,12 @@ package org.jetbrains.kotlin.backend.common.lower -import org.jetbrains.kotlin.backend.common.BackendContext -import org.jetbrains.kotlin.backend.common.BodyLoweringPass -import org.jetbrains.kotlin.backend.common.ClassLoweringPass -import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext +import org.jetbrains.kotlin.backend.common.* import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.irGet import org.jetbrains.kotlin.ir.builders.irSetField -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrConstructor -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol @@ -122,9 +116,9 @@ val innerClassConstructorCallsPhase = makeIrFilePhase( description = "Handle constructor calls for inner classes" ) -class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLoweringPass { - override fun lower(irBody: IrBody) { - irBody.transformChildrenVoid(object : IrElementTransformerVoid() { +class InnerClassConstructorCallsLowering(val context: BackendContext) : FileLoweringPass { + override fun lower(irFile: IrFile) { + irFile.transformChildrenVoid(object : IrElementTransformerVoid() { override fun visitConstructorCall(expression: IrConstructorCall): IrExpression { expression.transformChildrenVoid(this) @@ -190,12 +184,11 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe } newReference.let { + it.copyTypeArgumentsFrom(expression) + // TODO: This is wrong, since we moved all parameters into value parameters, + // but changing it breaks JS IR in CallableReferenceLowering. it.dispatchReceiver = expression.dispatchReceiver it.extensionReceiver = expression.extensionReceiver - for (t in 0 until expression.typeArgumentsCount) { - it.putTypeArgument(t, expression.getTypeArgument(t)) - } - for (v in 0 until expression.valueArgumentsCount) { it.putValueArgument(v, expression.getValueArgument(v)) }