valueArgumentsCount

This commit is contained in:
Dmitry Petrov
2018-03-21 14:21:28 +03:00
parent 3c7914b0c1
commit 37040523ad
7 changed files with 47 additions and 16 deletions
@@ -33,6 +33,7 @@ interface IrMemberAccessExpression : IrExpression {
// NB `typeParameterDescriptor` should be taken from `descriptor.original`
fun getTypeArgument(typeParameterDescriptor: TypeParameterDescriptor): KotlinType?
val valueArgumentsCount: Int
fun getValueArgument(index: Int): IrExpression?
fun putValueArgument(index: Int, valueArgument: IrExpression?)
fun removeValueArgument(index: Int)
@@ -26,12 +26,13 @@ import java.lang.AssertionError
abstract class IrCallWithIndexedArgumentsBase(
startOffset: Int, endOffset: Int, type: KotlinType,
numArguments: Int,
valueArgumentsCount: Int,
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
override val origin: IrStatementOrigin? = null
) : IrMemberAccessExpressionBase(startOffset, endOffset, type, typeArguments) {
) : IrMemberAccessExpressionBase(startOffset, endOffset, type, typeArguments, valueArgumentsCount) {
private val argumentsByParameterIndex =
arrayOfNulls<IrExpression>(numArguments)
arrayOfNulls<IrExpression>(valueArgumentsCount)
override fun getValueArgument(index: Int): IrExpression? =
argumentsByParameterIndex[index]
@@ -40,6 +40,7 @@ class IrFunctionReferenceImpl(
typeArguments,
origin
) {
@Deprecated("Creates unbound symbol")
constructor(
startOffset: Int,
@@ -27,7 +27,8 @@ abstract class IrMemberAccessExpressionBase(
startOffset: Int,
endOffset: Int,
type: KotlinType,
val typeArguments: Map<TypeParameterDescriptor, KotlinType>?
val typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
override val valueArgumentsCount: Int
) : IrExpressionBase(startOffset, endOffset, type), IrMemberAccessExpression {
override var dispatchReceiver: IrExpression? = null
override var extensionReceiver: IrExpression? = null
@@ -29,7 +29,8 @@ abstract class IrNoArgumentsCallableReferenceBase(
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
override val origin: IrStatementOrigin? = null
) : IrCallableReference,
IrMemberAccessExpressionBase(startOffset, endOffset, type, typeArguments) {
IrMemberAccessExpressionBase(startOffset, endOffset, type, typeArguments, 0) {
private fun throwNoValueArguments(): Nothing {
throw UnsupportedOperationException("Property reference $descriptor has no value arguments")
}
@@ -35,8 +35,11 @@ abstract class IrPrimitiveCallBase(
startOffset: Int,
endOffset: Int,
override val origin: IrStatementOrigin?,
override val symbol: IrFunctionSymbol
) : IrExpressionBase(startOffset, endOffset, symbol.descriptor.returnType!!), IrCall {
override val symbol: IrFunctionSymbol,
override val valueArgumentsCount: Int
) : IrExpressionBase(startOffset, endOffset, symbol.descriptor.returnType!!),
IrCall {
override val descriptor: FunctionDescriptor get() = symbol.descriptor
override val superQualifier: ClassDescriptor? get() = null
override val superQualifierSymbol: IrClassSymbol? get() = null
@@ -72,8 +75,14 @@ abstract class IrPrimitiveCallBase(
}
}
class IrNullaryPrimitiveImpl(startOffset: Int, endOffset: Int, origin: IrStatementOrigin?, symbol: IrFunctionSymbol) :
IrPrimitiveCallBase(startOffset, endOffset, origin, symbol), IrCallWithShallowCopy {
class IrNullaryPrimitiveImpl(
startOffset: Int,
endOffset: Int,
origin: IrStatementOrigin?,
symbol: IrFunctionSymbol
) : IrPrimitiveCallBase(startOffset, endOffset, origin, symbol, 0),
IrCallWithShallowCopy {
override fun getValueArgument(index: Int): IrExpression? = null
override fun putValueArgument(index: Int, valueArgument: IrExpression?) {
@@ -95,8 +104,14 @@ class IrNullaryPrimitiveImpl(startOffset: Int, endOffset: Int, origin: IrStateme
IrNullaryPrimitiveImpl(startOffset, endOffset, newOrigin, createFunctionSymbol(newCallee))
}
class IrUnaryPrimitiveImpl(startOffset: Int, endOffset: Int, origin: IrStatementOrigin?, symbol: IrFunctionSymbol) :
IrPrimitiveCallBase(startOffset, endOffset, origin, symbol), IrCallWithShallowCopy {
class IrUnaryPrimitiveImpl(
startOffset: Int,
endOffset: Int,
origin: IrStatementOrigin?,
symbol: IrFunctionSymbol
) : IrPrimitiveCallBase(startOffset, endOffset, origin, symbol, 1),
IrCallWithShallowCopy {
@Deprecated("Creates unbound symbol")
constructor(
startOffset: Int, endOffset: Int,
@@ -160,8 +175,14 @@ class IrUnaryPrimitiveImpl(startOffset: Int, endOffset: Int, origin: IrStatement
IrUnaryPrimitiveImpl(startOffset, endOffset, newOrigin, newCallee)
}
class IrBinaryPrimitiveImpl(startOffset: Int, endOffset: Int, origin: IrStatementOrigin?, symbol: IrFunctionSymbol) :
IrPrimitiveCallBase(startOffset, endOffset, origin, symbol), IrCallWithShallowCopy {
class IrBinaryPrimitiveImpl(
startOffset: Int,
endOffset: Int,
origin: IrStatementOrigin?,
symbol: IrFunctionSymbol
) : IrPrimitiveCallBase(startOffset, endOffset, origin, symbol, 2),
IrCallWithShallowCopy {
@Deprecated("Creates unbound symbol")
constructor(
startOffset: Int, endOffset: Int, origin: IrStatementOrigin?,
@@ -38,9 +38,12 @@ abstract class IrPropertyAccessorCallBase(
override val symbol: IrFunctionSymbol,
override val descriptor: FunctionDescriptor,
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
valueArgumentsCount: Int,
override val origin: IrStatementOrigin? = null,
override val superQualifierSymbol: IrClassSymbol? = null
) : IrMemberAccessExpressionBase(startOffset, endOffset, descriptor.returnType!!, typeArguments), IrCall {
) : IrMemberAccessExpressionBase(startOffset, endOffset, descriptor.returnType!!, typeArguments, valueArgumentsCount),
IrCall {
override val superQualifier: ClassDescriptor? get() = superQualifierSymbol?.descriptor
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
@@ -59,8 +62,9 @@ class IrGetterCallImpl(
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
origin: IrStatementOrigin? = null,
superQualifierSymbol: IrClassSymbol? = null
) : IrPropertyAccessorCallBase(startOffset, endOffset, symbol, descriptor, typeArguments, origin, superQualifierSymbol),
) : IrPropertyAccessorCallBase(startOffset, endOffset, symbol, descriptor, typeArguments, 0, origin, superQualifierSymbol),
IrCallWithShallowCopy {
constructor(
startOffset: Int, endOffset: Int,
symbol: IrFunctionSymbol,
@@ -110,8 +114,9 @@ class IrSetterCallImpl(
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
origin: IrStatementOrigin? = null,
superQualifierSymbol: IrClassSymbol? = null
) : IrPropertyAccessorCallBase(startOffset, endOffset, symbol, descriptor, typeArguments, origin, superQualifierSymbol),
) : IrPropertyAccessorCallBase(startOffset, endOffset, symbol, descriptor, typeArguments, 1, origin, superQualifierSymbol),
IrCallWithShallowCopy {
constructor(
startOffset: Int, endOffset: Int,
symbol: IrFunctionSymbol,