IR: refactor IrMemberAccessExpression internals
The idea is to keep the subclasses as simple as possible, to simplify transition to auto-generated IR. Co-authored-by: mcpiroman <mcpiroman@gmail.com>
This commit is contained in:
@@ -9,11 +9,8 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
abstract class IrCall(
|
abstract class IrCall : IrFunctionAccessExpression() {
|
||||||
typeArgumentsCount: Int,
|
abstract override val symbol: IrSimpleFunctionSymbol
|
||||||
valueArgumentsCount: Int,
|
|
||||||
) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) {
|
|
||||||
override abstract val symbol: IrSimpleFunctionSymbol
|
|
||||||
abstract val superQualifierSymbol: IrClassSymbol?
|
abstract val superQualifierSymbol: IrClassSymbol?
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ package org.jetbrains.kotlin.ir.expressions
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
abstract class IrCallableReference<S : IrSymbol>(typeArgumentsCount: Int) : IrMemberAccessExpression<S>(typeArgumentsCount) {
|
abstract class IrCallableReference<S : IrSymbol> : IrMemberAccessExpression<S>() {
|
||||||
abstract val referencedName: Name
|
abstract val referencedName: Name
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.expressions
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
abstract class IrConstructorCall(
|
abstract class IrConstructorCall : IrFunctionAccessExpression() {
|
||||||
typeArgumentsCount: Int,
|
|
||||||
valueArgumentsCount: Int,
|
|
||||||
) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) {
|
|
||||||
abstract override val symbol: IrConstructorSymbol
|
abstract override val symbol: IrConstructorSymbol
|
||||||
|
|
||||||
abstract val constructorTypeArgumentsCount: Int
|
abstract val constructorTypeArgumentsCount: Int
|
||||||
|
|||||||
+1
-4
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.expressions
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
abstract class IrDelegatingConstructorCall(
|
abstract class IrDelegatingConstructorCall : IrFunctionAccessExpression() {
|
||||||
typeArgumentsCount: Int,
|
|
||||||
valueArgumentsCount: Int,
|
|
||||||
) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) {
|
|
||||||
abstract override val symbol: IrConstructorSymbol
|
abstract override val symbol: IrConstructorSymbol
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
|
|||||||
+1
-4
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.expressions
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
abstract class IrEnumConstructorCall(
|
abstract class IrEnumConstructorCall : IrFunctionAccessExpression() {
|
||||||
typeArgumentsCount: Int,
|
|
||||||
valueArgumentsCount: Int,
|
|
||||||
) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) {
|
|
||||||
abstract override val symbol: IrConstructorSymbol
|
abstract override val symbol: IrConstructorSymbol
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
|
|||||||
+2
-42
@@ -6,47 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.ir.expressions
|
package org.jetbrains.kotlin.ir.expressions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
|
||||||
|
|
||||||
abstract class IrFunctionAccessExpression(
|
abstract class IrFunctionAccessExpression : IrMemberAccessExpression<IrFunctionSymbol>() {
|
||||||
typeArgumentsCount: Int,
|
abstract var contextReceiversCount: Int
|
||||||
valueArgumentsCount: Int,
|
|
||||||
) : IrMemberAccessExpression<IrFunctionSymbol>(typeArgumentsCount) {
|
|
||||||
private val argumentsByParameterIndex: Array<IrExpression?> = arrayOfNulls(valueArgumentsCount)
|
|
||||||
|
|
||||||
final override val valueArgumentsCount: Int
|
|
||||||
get() = argumentsByParameterIndex.size
|
|
||||||
|
|
||||||
var contextReceiversCount: Int = 0
|
|
||||||
|
|
||||||
override fun getValueArgument(index: Int): IrExpression? {
|
|
||||||
if (index >= valueArgumentsCount) {
|
|
||||||
throwNoSuchArgumentSlotException("value", index, valueArgumentsCount)
|
|
||||||
}
|
|
||||||
return argumentsByParameterIndex[index]
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun putValueArgument(index: Int, valueArgument: IrExpression?) {
|
|
||||||
if (index >= valueArgumentsCount) {
|
|
||||||
throwNoSuchArgumentSlotException("value", index, valueArgumentsCount)
|
|
||||||
}
|
|
||||||
argumentsByParameterIndex[index] = valueArgument
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun removeValueArgument(index: Int) {
|
|
||||||
argumentsByParameterIndex[index] = null
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
|
||||||
super.acceptChildren(visitor, data)
|
|
||||||
argumentsByParameterIndex.forEach { it?.accept(visitor, data) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
|
||||||
super.transformChildren(transformer, data)
|
|
||||||
argumentsByParameterIndex.forEachIndexed { i, irExpression ->
|
|
||||||
argumentsByParameterIndex[i] = irExpression?.transform(transformer, data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,11 @@
|
|||||||
package org.jetbrains.kotlin.ir.expressions
|
package org.jetbrains.kotlin.ir.expressions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
abstract class IrFunctionReference(typeArgumentsCount: Int) : IrCallableReference<IrFunctionSymbol>(typeArgumentsCount) {
|
abstract class IrFunctionReference : IrCallableReference<IrFunctionSymbol>() {
|
||||||
abstract val reflectionTarget: IrFunctionSymbol?
|
abstract val reflectionTarget: IrFunctionSymbol?
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitFunctionReference(this, data)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-4
@@ -10,14 +10,11 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
abstract class IrLocalDelegatedPropertyReference : IrCallableReference<IrLocalDelegatedPropertySymbol>(0) {
|
abstract class IrLocalDelegatedPropertyReference : IrCallableReference<IrLocalDelegatedPropertySymbol>() {
|
||||||
abstract val delegate: IrVariableSymbol
|
abstract val delegate: IrVariableSymbol
|
||||||
abstract val getter: IrSimpleFunctionSymbol
|
abstract val getter: IrSimpleFunctionSymbol
|
||||||
abstract val setter: IrSimpleFunctionSymbol?
|
abstract val setter: IrSimpleFunctionSymbol?
|
||||||
|
|
||||||
override val valueArgumentsCount: Int
|
|
||||||
get() = 0
|
|
||||||
|
|
||||||
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.visitLocalDelegatedPropertyReference(this, data)
|
visitor.visitLocalDelegatedPropertyReference(this, data)
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-12
@@ -20,23 +20,34 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
|||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
abstract class IrMemberAccessExpression<S : IrSymbol>(typeArgumentsCount: Int) : IrDeclarationReference() {
|
abstract class IrMemberAccessExpression<S : IrSymbol> : IrDeclarationReference() {
|
||||||
var dispatchReceiver: IrExpression? = null
|
var dispatchReceiver: IrExpression? = null
|
||||||
var extensionReceiver: IrExpression? = null
|
var extensionReceiver: IrExpression? = null
|
||||||
|
|
||||||
abstract override val symbol: S
|
abstract override val symbol: S
|
||||||
|
|
||||||
abstract val origin: IrStatementOrigin?
|
abstract val origin: IrStatementOrigin?
|
||||||
abstract val valueArgumentsCount: Int
|
|
||||||
|
|
||||||
abstract fun getValueArgument(index: Int): IrExpression?
|
|
||||||
abstract fun putValueArgument(index: Int, valueArgument: IrExpression?)
|
|
||||||
abstract fun removeValueArgument(index: Int)
|
|
||||||
|
|
||||||
private val typeArgumentsByIndex = arrayOfNulls<IrType>(typeArgumentsCount)
|
|
||||||
|
|
||||||
|
protected abstract val typeArgumentsByIndex: Array<IrType?>
|
||||||
val typeArgumentsCount: Int get() = typeArgumentsByIndex.size
|
val typeArgumentsCount: Int get() = typeArgumentsByIndex.size
|
||||||
|
|
||||||
|
protected abstract val argumentsByParameterIndex: Array<IrExpression?>
|
||||||
|
open val valueArgumentsCount: Int get() = argumentsByParameterIndex.size
|
||||||
|
|
||||||
|
fun getValueArgument(index: Int): IrExpression? {
|
||||||
|
if (index >= valueArgumentsCount) {
|
||||||
|
throw AssertionError("$this: No such value argument slot: $index")
|
||||||
|
}
|
||||||
|
return argumentsByParameterIndex[index]
|
||||||
|
}
|
||||||
|
|
||||||
|
fun putValueArgument(index: Int, valueArgument: IrExpression?) {
|
||||||
|
if (index >= valueArgumentsCount) {
|
||||||
|
throw AssertionError("$this: No such value argument slot: $index")
|
||||||
|
}
|
||||||
|
argumentsByParameterIndex[index] = valueArgument
|
||||||
|
}
|
||||||
|
|
||||||
fun getTypeArgument(index: Int): IrType? {
|
fun getTypeArgument(index: Int): IrType? {
|
||||||
if (index >= typeArgumentsCount) {
|
if (index >= typeArgumentsCount) {
|
||||||
throwNoSuchArgumentSlotException("type", index, typeArgumentsCount)
|
throwNoSuchArgumentSlotException("type", index, typeArgumentsCount)
|
||||||
@@ -54,11 +65,19 @@ abstract class IrMemberAccessExpression<S : IrSymbol>(typeArgumentsCount: Int) :
|
|||||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||||
dispatchReceiver?.accept(visitor, data)
|
dispatchReceiver?.accept(visitor, data)
|
||||||
extensionReceiver?.accept(visitor, data)
|
extensionReceiver?.accept(visitor, data)
|
||||||
|
if (valueArgumentsCount > 0) {
|
||||||
|
argumentsByParameterIndex.forEach { it?.accept(visitor, data) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
||||||
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
|
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
|
||||||
extensionReceiver = extensionReceiver?.transform(transformer, data)
|
extensionReceiver = extensionReceiver?.transform(transformer, data)
|
||||||
|
if (valueArgumentsCount > 0) {
|
||||||
|
argumentsByParameterIndex.forEachIndexed { i, irExpression ->
|
||||||
|
argumentsByParameterIndex[i] = irExpression?.transform(transformer, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,10 +127,6 @@ fun IrMemberAccessExpression<*>.putValueArgument(valueParameterDescriptor: Value
|
|||||||
putValueArgument(valueParameterDescriptor.index, valueArgument)
|
putValueArgument(valueParameterDescriptor.index, valueArgument)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun IrMemberAccessExpression<*>.removeValueArgument(valueParameterDescriptor: ValueParameterDescriptor) {
|
|
||||||
removeValueArgument(valueParameterDescriptor.index)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
inline fun <T : IrMemberAccessExpression<*>> T.mapTypeParameters(transform: (TypeParameterDescriptor) -> IrType) : T =
|
inline fun <T : IrMemberAccessExpression<*>> T.mapTypeParameters(transform: (TypeParameterDescriptor) -> IrType) : T =
|
||||||
apply {
|
apply {
|
||||||
|
|||||||
@@ -10,14 +10,11 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
abstract class IrPropertyReference(typeArgumentsCount: Int) : IrCallableReference<IrPropertySymbol>(typeArgumentsCount) {
|
abstract class IrPropertyReference : IrCallableReference<IrPropertySymbol>() {
|
||||||
abstract val field: IrFieldSymbol?
|
abstract val field: IrFieldSymbol?
|
||||||
abstract val getter: IrSimpleFunctionSymbol?
|
abstract val getter: IrSimpleFunctionSymbol?
|
||||||
abstract val setter: IrSimpleFunctionSymbol?
|
abstract val setter: IrSimpleFunctionSymbol?
|
||||||
|
|
||||||
override val valueArgumentsCount: Int
|
|
||||||
get() = 0
|
|
||||||
|
|
||||||
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.visitPropertyReference(this, data)
|
visitor.visitPropertyReference(this, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.expressions.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
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.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
@@ -35,7 +36,14 @@ class IrCallImpl(
|
|||||||
valueArgumentsCount: Int,
|
valueArgumentsCount: Int,
|
||||||
override val origin: IrStatementOrigin? = null,
|
override val origin: IrStatementOrigin? = null,
|
||||||
override val superQualifierSymbol: IrClassSymbol? = null
|
override val superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : IrCall(typeArgumentsCount, valueArgumentsCount) {
|
) : IrCall() {
|
||||||
|
|
||||||
|
override val typeArgumentsByIndex: Array<IrType?> = arrayOfNulls(typeArgumentsCount)
|
||||||
|
|
||||||
|
override val argumentsByParameterIndex: Array<IrExpression?> = arrayOfNulls(valueArgumentsCount)
|
||||||
|
|
||||||
|
override var contextReceiversCount = 0
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (symbol is IrConstructorSymbol) {
|
if (symbol is IrConstructorSymbol) {
|
||||||
throw AssertionError("Should be IrConstructorCall: ${this.render()}")
|
throw AssertionError("Should be IrConstructorCall: ${this.render()}")
|
||||||
|
|||||||
+8
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.expressions.impl
|
|||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -22,7 +23,13 @@ class IrConstructorCallImpl(
|
|||||||
override val constructorTypeArgumentsCount: Int,
|
override val constructorTypeArgumentsCount: Int,
|
||||||
valueArgumentsCount: Int,
|
valueArgumentsCount: Int,
|
||||||
override val origin: IrStatementOrigin? = null,
|
override val origin: IrStatementOrigin? = null,
|
||||||
) : IrConstructorCall(typeArgumentsCount, valueArgumentsCount) {
|
) : IrConstructorCall() {
|
||||||
|
override val typeArgumentsByIndex: Array<IrType?> = arrayOfNulls(typeArgumentsCount)
|
||||||
|
|
||||||
|
override val argumentsByParameterIndex: Array<IrExpression?> = arrayOfNulls(valueArgumentsCount)
|
||||||
|
|
||||||
|
override var contextReceiversCount = 0
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
fun fromSymbolDescriptor(
|
fun fromSymbolDescriptor(
|
||||||
|
|||||||
+9
-2
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.expressions.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
@@ -30,11 +31,17 @@ class IrDelegatingConstructorCallImpl(
|
|||||||
override var type: IrType,
|
override var type: IrType,
|
||||||
override val symbol: IrConstructorSymbol,
|
override val symbol: IrConstructorSymbol,
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
valueArgumentsCount: Int
|
valueArgumentsCount: Int,
|
||||||
) : IrDelegatingConstructorCall(typeArgumentsCount, valueArgumentsCount) {
|
) : IrDelegatingConstructorCall() {
|
||||||
override val origin: IrStatementOrigin?
|
override val origin: IrStatementOrigin?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
override val typeArgumentsByIndex: Array<IrType?> = arrayOfNulls(typeArgumentsCount)
|
||||||
|
|
||||||
|
override val argumentsByParameterIndex: Array<IrExpression?> = arrayOfNulls(valueArgumentsCount)
|
||||||
|
|
||||||
|
override var contextReceiversCount = 0
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
fun fromSymbolDescriptor(
|
fun fromSymbolDescriptor(
|
||||||
|
|||||||
+8
-1
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.expressions.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrEnumConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrEnumConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -29,10 +30,16 @@ class IrEnumConstructorCallImpl(
|
|||||||
override val symbol: IrConstructorSymbol,
|
override val symbol: IrConstructorSymbol,
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
valueArgumentsCount: Int
|
valueArgumentsCount: Int
|
||||||
) : IrEnumConstructorCall(typeArgumentsCount, valueArgumentsCount) {
|
) : IrEnumConstructorCall() {
|
||||||
override val origin: IrStatementOrigin?
|
override val origin: IrStatementOrigin?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
override val typeArgumentsByIndex: Array<IrType?> = arrayOfNulls(typeArgumentsCount)
|
||||||
|
|
||||||
|
override val argumentsByParameterIndex: Array<IrExpression?> = arrayOfNulls(valueArgumentsCount)
|
||||||
|
|
||||||
|
override var contextReceiversCount = 0
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
fun fromSymbolDescriptor(
|
fun fromSymbolDescriptor(
|
||||||
|
|||||||
+4
-37
@@ -22,8 +22,6 @@ import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
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.IrElementVisitor
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class IrFunctionReferenceImpl(
|
class IrFunctionReferenceImpl(
|
||||||
@@ -32,47 +30,16 @@ class IrFunctionReferenceImpl(
|
|||||||
override var type: IrType,
|
override var type: IrType,
|
||||||
override val symbol: IrFunctionSymbol,
|
override val symbol: IrFunctionSymbol,
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
override val valueArgumentsCount: Int,
|
valueArgumentsCount: Int,
|
||||||
override val reflectionTarget: IrFunctionSymbol? = symbol,
|
override val reflectionTarget: IrFunctionSymbol? = symbol,
|
||||||
override val origin: IrStatementOrigin? = null,
|
override val origin: IrStatementOrigin? = null,
|
||||||
) : IrFunctionReference(typeArgumentsCount) {
|
) : IrFunctionReference() {
|
||||||
override val referencedName: Name
|
override val referencedName: Name
|
||||||
get() = symbol.owner.name
|
get() = symbol.owner.name
|
||||||
|
|
||||||
private val argumentsByParameterIndex: Array<IrExpression?> = arrayOfNulls(valueArgumentsCount)
|
override val typeArgumentsByIndex: Array<IrType?> = arrayOfNulls(typeArgumentsCount)
|
||||||
|
|
||||||
override fun getValueArgument(index: Int): IrExpression? {
|
override val argumentsByParameterIndex: Array<IrExpression?> = arrayOfNulls(valueArgumentsCount)
|
||||||
if (index >= valueArgumentsCount) {
|
|
||||||
throw AssertionError("$this: No such value argument slot: $index")
|
|
||||||
}
|
|
||||||
return argumentsByParameterIndex[index]
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun putValueArgument(index: Int, valueArgument: IrExpression?) {
|
|
||||||
if (index >= valueArgumentsCount) {
|
|
||||||
throw AssertionError("$this: No such value argument slot: $index")
|
|
||||||
}
|
|
||||||
argumentsByParameterIndex[index] = valueArgument
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun removeValueArgument(index: Int) {
|
|
||||||
argumentsByParameterIndex[index] = null
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
|
||||||
visitor.visitFunctionReference(this, data)
|
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
|
||||||
super.acceptChildren(visitor, data)
|
|
||||||
argumentsByParameterIndex.forEach { it?.accept(visitor, data) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
|
||||||
super.transformChildren(transformer, data)
|
|
||||||
argumentsByParameterIndex.forEachIndexed { i, irExpression ->
|
|
||||||
argumentsByParameterIndex[i] = irExpression?.transform(transformer, data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
|
|||||||
+5
-9
@@ -35,18 +35,14 @@ class IrLocalDelegatedPropertyReferenceImpl(
|
|||||||
override val setter: IrSimpleFunctionSymbol?,
|
override val setter: IrSimpleFunctionSymbol?,
|
||||||
override val origin: IrStatementOrigin? = null,
|
override val origin: IrStatementOrigin? = null,
|
||||||
) : IrLocalDelegatedPropertyReference() {
|
) : IrLocalDelegatedPropertyReference() {
|
||||||
|
override val typeArgumentsByIndex: Array<IrType?> = emptyArray()
|
||||||
|
|
||||||
|
override val argumentsByParameterIndex: Array<IrExpression?>
|
||||||
|
get() = throw UnsupportedOperationException("Property reference $symbol has no value arguments")
|
||||||
|
|
||||||
override val valueArgumentsCount: Int
|
override val valueArgumentsCount: Int
|
||||||
get() = 0
|
get() = 0
|
||||||
|
|
||||||
override val referencedName: Name
|
override val referencedName: Name
|
||||||
get() = symbol.owner.name
|
get() = symbol.owner.name
|
||||||
|
|
||||||
private fun throwNoValueArguments(): Nothing =
|
|
||||||
throw UnsupportedOperationException("Property reference $symbol has no value arguments")
|
|
||||||
|
|
||||||
override fun getValueArgument(index: Int): IrExpression? = throwNoValueArguments()
|
|
||||||
|
|
||||||
override fun putValueArgument(index: Int, valueArgument: IrExpression?): Unit = throwNoValueArguments()
|
|
||||||
|
|
||||||
override fun removeValueArgument(index: Int): Unit = throwNoValueArguments()
|
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-10
@@ -35,19 +35,15 @@ class IrPropertyReferenceImpl(
|
|||||||
override val getter: IrSimpleFunctionSymbol?,
|
override val getter: IrSimpleFunctionSymbol?,
|
||||||
override val setter: IrSimpleFunctionSymbol?,
|
override val setter: IrSimpleFunctionSymbol?,
|
||||||
override val origin: IrStatementOrigin? = null,
|
override val origin: IrStatementOrigin? = null,
|
||||||
) : IrPropertyReference(typeArgumentsCount) {
|
) : IrPropertyReference() {
|
||||||
|
override val typeArgumentsByIndex: Array<IrType?> = arrayOfNulls(typeArgumentsCount)
|
||||||
|
|
||||||
|
override val argumentsByParameterIndex: Array<IrExpression?>
|
||||||
|
get() = throw UnsupportedOperationException("Property reference $symbol has no value arguments")
|
||||||
|
|
||||||
override val valueArgumentsCount: Int
|
override val valueArgumentsCount: Int
|
||||||
get() = 0
|
get() = 0
|
||||||
|
|
||||||
override val referencedName: Name
|
override val referencedName: Name
|
||||||
get() = symbol.owner.name
|
get() = symbol.owner.name
|
||||||
|
|
||||||
private fun throwNoValueArguments(): Nothing =
|
|
||||||
throw UnsupportedOperationException("Property reference $symbol has no value arguments")
|
|
||||||
|
|
||||||
override fun getValueArgument(index: Int): IrExpression? = throwNoValueArguments()
|
|
||||||
|
|
||||||
override fun putValueArgument(index: Int, valueArgument: IrExpression?): Unit = throwNoValueArguments()
|
|
||||||
|
|
||||||
override fun removeValueArgument(index: Int): Unit = throwNoValueArguments()
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user