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 <mcpiroman@gmail.com>
This commit is contained in:
Alexander Udalov
2022-01-12 22:26:46 +01:00
parent 9ee570ae54
commit 886545262b
9 changed files with 19 additions and 27 deletions
@@ -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<IrVarargElement>
irVarargElements.replaceAll { irVarargElement ->
elements.replaceAll { irVarargElement ->
if (irVarargElement is IrExpression) {
val firVarargArgument =
argumentMapping[irVarargElement] ?: error("Can't find the original FirExpression for ${irVarargElement.render()}")
@@ -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
@@ -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)
}
@@ -6,7 +6,5 @@
package org.jetbrains.kotlin.ir.expressions
abstract class IrStringConcatenation : IrExpression() {
abstract val arguments: List<IrExpression>
abstract fun addArgument(argument: IrExpression)
abstract val arguments: MutableList<IrExpression>
}
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.expressions
abstract class IrTry : IrExpression() {
abstract var tryResult: IrExpression
abstract val catches: List<IrCatch>
abstract val catches: MutableList<IrCatch>
abstract var finallyExpression: IrExpression?
}
@@ -10,7 +10,5 @@ import org.jetbrains.kotlin.ir.types.IrType
abstract class IrVararg : IrExpression() {
abstract var varargElementType: IrType
abstract val elements: List<IrVarargElement>
abstract fun putElement(i: Int, element: IrVarargElement)
abstract val elements: MutableList<IrVarargElement>
}
@@ -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<IrExpression> = ArrayList()
override fun addArgument(argument: IrExpression) {
arguments.add(argument)
}
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitStringConcatenation(this, data)
@@ -41,14 +41,6 @@ class IrVarargImpl(
override val elements: MutableList<IrVarargElement> = SmartList()
fun addElement(varargElement: IrVarargElement) {
elements.add(varargElement)
}
override fun putElement(i: Int, element: IrVarargElement) {
elements[i] = element
}
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitVararg(this, data)
}
@@ -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