From 886545262b389e5b209a6e61989eefbf4f804541 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 12 Jan 2022 22:26:46 +0100 Subject: [PATCH] IR: use mutable lists in IrStringConcatenation, IrTry, IrVararg Make addArgument/addElement/putElement extension functions. This will simplify transition to auto-generated IR. Co-authored-by: mcpiroman --- .../fir/backend/generators/AdapterGenerator.kt | 5 ++--- .../common/lower/loops/handlers/StepHandler.kt | 1 + .../jetbrains/kotlin/ir/expressions/IrExpressions.kt | 12 ++++++++++++ .../kotlin/ir/expressions/IrStringConcatenation.kt | 4 +--- .../src/org/jetbrains/kotlin/ir/expressions/IrTry.kt | 2 +- .../org/jetbrains/kotlin/ir/expressions/IrVararg.kt | 4 +--- .../ir/expressions/impl/IrStringConcatenationImpl.kt | 5 ----- .../kotlin/ir/expressions/impl/IrVarargImpl.kt | 8 -------- .../kotlin/ir/util/DataClassMembersGenerator.kt | 5 +---- 9 files changed, 19 insertions(+), 27 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt index c300f4364b9..d724889b666 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt @@ -447,10 +447,9 @@ internal class AdapterGenerator( if (argument !is FirVarargArgumentsExpression || argument.arguments.size != elements.size) { return this } - val argumentMapping = this.elements.zip(argument.arguments).toMap() + val argumentMapping = elements.zip(argument.arguments).toMap() // [IrElementTransformer] is not preferred, since it's hard to visit vararg elements only. - val irVarargElements = elements as MutableList - irVarargElements.replaceAll { irVarargElement -> + elements.replaceAll { irVarargElement -> if (irVarargElement is IrExpression) { val firVarargArgument = argumentMapping[irVarargElement] ?: error("Can't find the original FirExpression for ${irVarargElement.render()}") diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/handlers/StepHandler.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/handlers/StepHandler.kt index a9047cba8d5..9a24e578c11 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/handlers/StepHandler.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/handlers/StepHandler.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.addArgument import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.types.isInt diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt index 63532fb4a72..111824b644b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt @@ -36,3 +36,15 @@ var IrDynamicOperatorExpression.right: IrExpression fun IrFunctionAccessExpression.putArgument(parameter: IrValueParameter, argument: IrExpression): Unit = putArgument(symbol.owner, parameter, argument) + +fun IrVararg.putElement(i: Int, element: IrVarargElement) { + elements[i] = element +} + +fun IrVararg.addElement(varargElement: IrVarargElement) { + elements.add(varargElement) +} + +fun IrStringConcatenation.addArgument(argument: IrExpression) { + arguments.add(argument) +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt index 9a13d5e8fa8..33216f857a3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt @@ -6,7 +6,5 @@ package org.jetbrains.kotlin.ir.expressions abstract class IrStringConcatenation : IrExpression() { - abstract val arguments: List - - abstract fun addArgument(argument: IrExpression) + abstract val arguments: MutableList } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt index 1a90751cc10..3c5d208cbb0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.expressions abstract class IrTry : IrExpression() { abstract var tryResult: IrExpression - abstract val catches: List + abstract val catches: MutableList abstract var finallyExpression: IrExpression? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt index 6d03832dd07..91fcee44e04 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt @@ -10,7 +10,5 @@ import org.jetbrains.kotlin.ir.types.IrType abstract class IrVararg : IrExpression() { abstract var varargElementType: IrType - abstract val elements: List - - abstract fun putElement(i: Int, element: IrVarargElement) + abstract val elements: MutableList } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrStringConcatenationImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrStringConcatenationImpl.kt index df79b3e24de..03390f7420b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrStringConcatenationImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrStringConcatenationImpl.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -import java.util.* class IrStringConcatenationImpl( override val startOffset: Int, @@ -39,10 +38,6 @@ class IrStringConcatenationImpl( override val arguments: MutableList = ArrayList() - override fun addArgument(argument: IrExpression) { - arguments.add(argument) - } - override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitStringConcatenation(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrVarargImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrVarargImpl.kt index 00be489e33b..552f1b99fb5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrVarargImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrVarargImpl.kt @@ -41,14 +41,6 @@ class IrVarargImpl( override val elements: MutableList = SmartList() - fun addElement(varargElement: IrVarargElement) { - elements.add(varargElement) - } - - override fun putElement(i: Int, element: IrVarargElement) { - elements[i] = element - } - override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitVararg(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt index 2d3c103e215..6a92412bdb4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt @@ -10,11 +10,8 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl -import org.jetbrains.kotlin.ir.expressions.IrExpression -import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression +import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl -import org.jetbrains.kotlin.ir.expressions.mapTypeParameters -import org.jetbrains.kotlin.ir.expressions.mapValueParameters import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol