[IR] Remove FunctionDescriptor from IrCall-like node's constructor interface

This commit is contained in:
Roman Artemev
2019-10-22 16:38:57 +03:00
committed by romanart
parent bf367003f9
commit ba373c67d7
42 changed files with 90 additions and 190 deletions
@@ -196,7 +196,6 @@ fun IrBuilderWithScope.irGet(type: IrType, receiver: IrExpression?, getterSymbol
startOffset, endOffset,
type,
getterSymbol as IrSimpleFunctionSymbol,
getterSymbol.descriptor,
typeArgumentsCount = getterSymbol.owner.typeParameters.size,
valueArgumentsCount = 0,
origin = IrStatementOrigin.GET_PROPERTY
@@ -209,7 +208,6 @@ fun IrBuilderWithScope.irSet(type: IrType, receiver: IrExpression?, setterSymbol
startOffset, endOffset,
type,
setterSymbol as IrSimpleFunctionSymbol,
setterSymbol.descriptor,
typeArgumentsCount = setterSymbol.owner.typeParameters.size,
valueArgumentsCount = 1,
origin = IrStatementOrigin.EQ
@@ -242,7 +240,7 @@ fun IrBuilderWithScope.irCallConstructor(callee: IrConstructorSymbol, typeArgume
}
fun IrBuilderWithScope.irCall(callee: IrSimpleFunctionSymbol, type: IrType): IrCall =
IrCallImpl(startOffset, endOffset, type, callee, callee.descriptor)
IrCallImpl(startOffset, endOffset, type, callee)
fun IrBuilderWithScope.irCall(callee: IrConstructorSymbol, type: IrType): IrConstructorCall =
IrConstructorCallImpl.fromSymbolDescriptor(startOffset, endOffset, type, callee)
@@ -264,7 +262,7 @@ fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol): IrFunctionAccessExpress
irCall(callee, callee.owner.returnType)
fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol, descriptor: FunctionDescriptor, type: IrType): IrCall =
IrCallImpl(startOffset, endOffset, type, callee as IrSimpleFunctionSymbol, descriptor)
IrCallImpl(startOffset, endOffset, type, callee as IrSimpleFunctionSymbol)
fun IrBuilderWithScope.irCall(callee: IrFunction): IrFunctionAccessExpression =
irCall(callee.symbol)
@@ -273,12 +271,13 @@ fun IrBuilderWithScope.irCall(callee: IrFunction, origin: IrStatementOrigin): Ir
IrCallImpl(
startOffset, endOffset, callee.returnType,
callee.symbol as IrSimpleFunctionSymbol,
callee.descriptor, origin
callee.typeParameters.size, callee.valueParameters.size,
origin
)
fun IrBuilderWithScope.irDelegatingConstructorCall(callee: IrConstructor): IrDelegatingConstructorCall =
IrDelegatingConstructorCallImpl(
startOffset, endOffset, context.irBuiltIns.unitType, callee.symbol, callee.descriptor,
startOffset, endOffset, context.irBuiltIns.unitType, callee.symbol,
callee.parentAsClass.typeParameters.size, callee.valueParameters.size
)
@@ -379,14 +378,3 @@ inline fun IrBuilderWithScope.irBlockBody(
endOffset
).blockBody(body)
fun IrBuilderWithScope.irThrowIse(origin: IrStatementOrigin? = null) =
IrCallImpl(
startOffset, endOffset,
context.irBuiltIns.nothingType,
context.irBuiltIns.throwIseSymbol,
context.irBuiltIns.throwIseSymbol.descriptor,
typeArgumentsCount = 0,
valueArgumentsCount = 0,
origin = origin
)
@@ -33,7 +33,7 @@ fun primitiveOp1(
origin: IrStatementOrigin,
dispatchReceiver: IrExpression
): IrExpression =
IrCallImpl(startOffset, endOffset, primitiveOpReturnType, primitiveOpSymbol, primitiveOpSymbol.descriptor, origin = origin).also {
IrCallImpl(startOffset, endOffset, primitiveOpReturnType, primitiveOpSymbol, origin = origin).also {
it.dispatchReceiver = dispatchReceiver
}
@@ -47,8 +47,7 @@ fun primitiveOp2(
IrCallImpl(
startOffset, endOffset,
primitiveOpReturnType,
primitiveOpSymbol, primitiveOpSymbol.descriptor,
typeArgumentsCount = 0,
primitiveOpSymbol, typeArgumentsCount = 0,
valueArgumentsCount = 2,
origin = origin
).apply {
@@ -16,13 +16,12 @@
package org.jetbrains.kotlin.ir.expressions.impl
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
@@ -32,7 +31,6 @@ class IrCallImpl(
endOffset: Int,
type: IrType,
override val symbol: IrFunctionSymbol,
override val descriptor: FunctionDescriptor,
typeArgumentsCount: Int,
valueArgumentsCount: Int,
origin: IrStatementOrigin? = null,
@@ -47,22 +45,23 @@ class IrCallImpl(
IrCall {
init {
if (descriptor is ConstructorDescriptor) {
throw AssertionError("Should be IrConstructorCall: $descriptor")
if (symbol is IrConstructorSymbol) {
throw AssertionError("Should be IrConstructorCall: ${symbol.descriptor}")
}
}
override val descriptor: FunctionDescriptor get() = symbol.descriptor
constructor(
startOffset: Int,
endOffset: Int,
type: IrType,
symbol: IrFunctionSymbol,
descriptor: FunctionDescriptor,
origin: IrStatementOrigin? = null,
superQualifierSymbol: IrClassSymbol? = null
) : this(
startOffset, endOffset, type, symbol, descriptor, descriptor.typeParametersCount,
descriptor.valueParameters.size, origin, superQualifierSymbol
startOffset, endOffset, type, symbol, symbol.descriptor.typeParametersCount, symbol.descriptor.valueParameters.size,
origin, superQualifierSymbol
)
constructor(
@@ -70,13 +69,12 @@ class IrCallImpl(
endOffset: Int,
type: IrType,
symbol: IrFunctionSymbol,
descriptor: FunctionDescriptor,
typeArgumentsCount: Int,
origin: IrStatementOrigin? = null,
superQualifierSymbol: IrClassSymbol? = null
) : this(
startOffset, endOffset, type, symbol, descriptor, typeArgumentsCount,
descriptor.valueParameters.size, origin, superQualifierSymbol
startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size,
origin, superQualifierSymbol
)
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
@@ -19,7 +19,6 @@ class IrConstructorCallImpl(
endOffset: Int,
type: IrType,
override val symbol: IrConstructorSymbol,
override val descriptor: ClassConstructorDescriptor,
typeArgumentsCount: Int,
override val constructorTypeArgumentsCount: Int,
valueArgumentsCount: Int,
@@ -31,6 +30,8 @@ class IrConstructorCallImpl(
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitConstructorCall(this, data)
override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor
companion object {
fun fromSubstitutedDescriptor(
startOffset: Int,
@@ -48,7 +49,6 @@ class IrConstructorCallImpl(
startOffset, endOffset,
type,
constructorSymbol,
constructorDescriptor,
totalTypeParametersCount,
totalTypeParametersCount - classTypeParametersCount,
valueParametersCount,
@@ -83,7 +83,6 @@ class IrConstructorCallImpl(
startOffset, endOffset,
type,
constructorSymbol,
constructorSymbol.descriptor,
totalTypeParametersCount,
constructorTypeParametersCount,
valueParametersCount,
@@ -28,7 +28,6 @@ class IrDelegatingConstructorCallImpl(
endOffset: Int,
type: IrType,
override val symbol: IrConstructorSymbol,
override val descriptor: ClassConstructorDescriptor,
typeArgumentsCount: Int,
valueArgumentsCount: Int
) :
@@ -41,29 +40,22 @@ class IrDelegatingConstructorCallImpl(
),
IrDelegatingConstructorCall {
constructor(
startOffset: Int,
endOffset: Int,
type: IrType,
symbol: IrConstructorSymbol,
descriptor: ClassConstructorDescriptor
) : this(startOffset, endOffset, type, symbol, descriptor, descriptor.typeParametersCount, descriptor.valueParameters.size)
constructor(
startOffset: Int,
endOffset: Int,
type: IrType,
symbol: IrConstructorSymbol
) : this(startOffset, endOffset, type, symbol, symbol.descriptor)
) : this(startOffset, endOffset, type, symbol, symbol.descriptor.typeParametersCount, symbol.descriptor.valueParameters.size)
constructor(
startOffset: Int,
endOffset: Int,
type: IrType,
symbol: IrConstructorSymbol,
descriptor: ClassConstructorDescriptor,
typeArgumentsCount: Int
) : this(startOffset, endOffset, type, symbol, descriptor, typeArgumentsCount, descriptor.valueParameters.size)
) : this(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size)
override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitDelegatingConstructorCall(this, data)
@@ -28,7 +28,6 @@ class IrFunctionReferenceImpl(
endOffset: Int,
type: IrType,
override val symbol: IrFunctionSymbol,
override val descriptor: FunctionDescriptor,
typeArgumentsCount: Int,
valueArgumentsCount: Int,
origin: IrStatementOrigin? = null
@@ -48,10 +47,11 @@ class IrFunctionReferenceImpl(
endOffset: Int,
type: IrType,
symbol: IrFunctionSymbol,
descriptor: FunctionDescriptor,
typeArgumentsCount: Int,
origin: IrStatementOrigin? = null
) : this(startOffset, endOffset, type, symbol, descriptor, typeArgumentsCount, descriptor.valueParameters.size, origin)
) : this(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size, origin)
override val descriptor: FunctionDescriptor get() = symbol.descriptor
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitFunctionReference(this, data)
@@ -31,7 +31,6 @@ class IrPropertyReferenceImpl(
endOffset: Int,
type: IrType,
override val symbol: IrPropertySymbol,
override val descriptor: PropertyDescriptor,
typeArgumentsCount: Int,
override val field: IrFieldSymbol?,
override val getter: IrSimpleFunctionSymbol?,
@@ -41,22 +40,6 @@ class IrPropertyReferenceImpl(
IrNoArgumentsCallableReferenceBase(startOffset, endOffset, type, typeArgumentsCount, origin),
IrPropertyReference {
constructor(
startOffset: Int,
endOffset: Int,
type: IrType,
symbol: IrPropertySymbol,
typeArgumentsCount: Int,
field: IrFieldSymbol?,
getter: IrSimpleFunctionSymbol?,
setter: IrSimpleFunctionSymbol?,
origin: IrStatementOrigin? = null
) : this(
startOffset, endOffset, type,
symbol, symbol.descriptor,
typeArgumentsCount, field, getter, setter, origin
)
@Deprecated(message = "Don't use descriptor-based API for IrPropertyReference", level = DeprecationLevel.WARNING)
constructor(
startOffset: Int,
@@ -74,6 +57,8 @@ class IrPropertyReferenceImpl(
typeArgumentsCount, field, getter, setter, origin
)
override val descriptor: PropertyDescriptor get() = symbol.descriptor
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitPropertyReference(this, data)
}
@@ -495,7 +495,6 @@ open class DeepCopyIrTreeWithSymbols(
expression.startOffset, expression.endOffset,
expression.type.remapType(),
constructorSymbol,
constructorSymbol.descriptor,
expression.typeArgumentsCount,
expression.constructorTypeArgumentsCount,
expression.valueArgumentsCount,
@@ -521,7 +520,6 @@ open class DeepCopyIrTreeWithSymbols(
expression.startOffset, expression.endOffset,
expression.type.remapType(),
newCallee,
newCallee.descriptor,
expression.typeArgumentsCount,
expression.valueArgumentsCount,
mapStatementOrigin(expression.origin),
@@ -550,7 +548,6 @@ open class DeepCopyIrTreeWithSymbols(
expression.startOffset, expression.endOffset,
expression.type.remapType(),
newConstructor,
newConstructor.descriptor,
expression.typeArgumentsCount
).apply {
copyRemappedTypeArgumentsFrom(expression)
@@ -584,7 +581,6 @@ open class DeepCopyIrTreeWithSymbols(
expression.startOffset, expression.endOffset,
expression.type.remapType(),
symbol,
symbol.descriptor,
expression.typeArgumentsCount,
expression.valueArgumentsCount,
mapStatementOrigin(expression.origin)
@@ -482,7 +482,6 @@ fun irConstructorCall(
endOffset,
type,
newSymbol,
newSymbol.descriptor,
typeArgumentsCount,
0,
call.valueArgumentsCount,
@@ -521,7 +520,6 @@ fun irCall(
endOffset,
type,
newSymbol,
newSymbol.descriptor,
typeArgumentsCount,
origin
).apply {