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) { if (argument !is FirVarargArgumentsExpression || argument.arguments.size != elements.size) {
return this 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. // [IrElementTransformer] is not preferred, since it's hard to visit vararg elements only.
val irVarargElements = elements as MutableList<IrVarargElement> elements.replaceAll { irVarargElement ->
irVarargElements.replaceAll { irVarargElement ->
if (irVarargElement is IrExpression) { if (irVarargElement is IrExpression) {
val firVarargArgument = val firVarargArgument =
argumentMapping[irVarargElement] ?: error("Can't find the original FirExpression for ${irVarargElement.render()}") 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.declarations.IrVariable
import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression 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.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.types.defaultType
import org.jetbrains.kotlin.ir.types.isInt import org.jetbrains.kotlin.ir.types.isInt
@@ -36,3 +36,15 @@ var IrDynamicOperatorExpression.right: IrExpression
fun IrFunctionAccessExpression.putArgument(parameter: IrValueParameter, argument: IrExpression): Unit = fun IrFunctionAccessExpression.putArgument(parameter: IrValueParameter, argument: IrExpression): Unit =
putArgument(symbol.owner, parameter, argument) 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 package org.jetbrains.kotlin.ir.expressions
abstract class IrStringConcatenation : IrExpression() { abstract class IrStringConcatenation : IrExpression() {
abstract val arguments: List<IrExpression> abstract val arguments: MutableList<IrExpression>
abstract fun addArgument(argument: IrExpression)
} }
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.expressions
abstract class IrTry : IrExpression() { abstract class IrTry : IrExpression() {
abstract var tryResult: IrExpression abstract var tryResult: IrExpression
abstract val catches: List<IrCatch> abstract val catches: MutableList<IrCatch>
abstract var finallyExpression: IrExpression? abstract var finallyExpression: IrExpression?
} }
@@ -10,7 +10,5 @@ import org.jetbrains.kotlin.ir.types.IrType
abstract class IrVararg : IrExpression() { abstract class IrVararg : IrExpression() {
abstract var varargElementType: IrType abstract var varargElementType: IrType
abstract val elements: List<IrVarargElement> abstract val elements: MutableList<IrVarargElement>
abstract fun putElement(i: Int, element: IrVarargElement)
} }
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import java.util.*
class IrStringConcatenationImpl( class IrStringConcatenationImpl(
override val startOffset: Int, override val startOffset: Int,
@@ -39,10 +38,6 @@ class IrStringConcatenationImpl(
override val arguments: MutableList<IrExpression> = ArrayList() 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 = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitStringConcatenation(this, data) visitor.visitStringConcatenation(this, data)
@@ -41,14 +41,6 @@ class IrVarargImpl(
override val elements: MutableList<IrVarargElement> = SmartList() 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 { override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitVararg(this, data) 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.builders.*
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl 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.IrClassifierSymbol
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol