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:
+2
-3
@@ -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()}")
|
||||||
|
|||||||
+1
@@ -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)
|
||||||
|
}
|
||||||
|
|||||||
+1
-3
@@ -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)
|
|
||||||
}
|
}
|
||||||
|
|||||||
-5
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user