[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
@@ -680,8 +680,7 @@ class Fir2IrVisitor(
when {
symbol is IrConstructorSymbol -> IrConstructorCallImpl.fromSymbolOwner(startOffset, endOffset, type, symbol)
symbol is IrSimpleFunctionSymbol -> IrCallImpl(
startOffset, endOffset, type, symbol, symbol.descriptor,
origin = calleeReference.statementOrigin()
startOffset, endOffset, type, symbol, origin = calleeReference.statementOrigin()
)
symbol is IrPropertySymbol && symbol.isBound -> {
val getter = symbol.owner.getter
@@ -827,7 +826,7 @@ class Fir2IrVisitor(
is IrFunctionSymbol -> {
IrFunctionReferenceImpl(
startOffset, endOffset, type, symbol,
symbol.descriptor, 0
0
)
}
else -> {
@@ -904,7 +903,7 @@ class Fir2IrVisitor(
listOf(
anonymousClass,
IrConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, anonymousClassType, anonymousClass.constructors.first().symbol
startOffset, endOffset, anonymousClassType, anonymousClass.constructors.first().symbol, anonymousClass.typeParameters.size
)
)
)
@@ -86,8 +86,8 @@ fun IrClass.addSimpleDelegatingConstructor(
listOf(
IrDelegatingConstructorCallImpl(
startOffset, endOffset, irBuiltIns.unitType,
superConstructor.symbol, superConstructor.descriptor,
0, superConstructor.valueParameters.size
superConstructor.symbol, 0,
superConstructor.valueParameters.size
).apply {
constructor.valueParameters.forEachIndexed { idx, parameter ->
putValueArgument(idx, IrGetValueImpl(startOffset, endOffset, parameter.type, parameter.symbol))
@@ -129,7 +129,7 @@ open class DefaultArgumentStubGenerator(
startOffset = irFunction.startOffset,
endOffset = irFunction.endOffset,
type = context.irBuiltIns.unitType,
symbol = irFunction.symbol, descriptor = irFunction.symbol.descriptor,
symbol = irFunction.symbol,
typeArgumentsCount = newIrFunction.parentAsClass.typeParameters.size + newIrFunction.typeParameters.size
).apply {
passTypeArgumentsFrom(newIrFunction.parentAsClass)
@@ -269,7 +269,6 @@ open class DefaultParameterInjector(
endOffset = expression.endOffset,
type = context.irBuiltIns.unitType,
symbol = it as IrConstructorSymbol,
descriptor = it.descriptor,
typeArgumentsCount = expression.typeArgumentsCount
)
}
@@ -311,7 +310,6 @@ open class DefaultParameterInjector(
endOffset = expression.endOffset,
type = expression.type,
symbol = it,
descriptor = it.descriptor,
typeArgumentsCount = expression.typeArgumentsCount,
origin = DEFAULT_DISPATCH_CALL,
superQualifierSymbol = expression.superQualifierSymbol
@@ -150,8 +150,7 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : FileLowe
val newCallee = context.declarationFactory.getInnerClassConstructorWithOuterThisParameter(classConstructor)
val newCall = IrDelegatingConstructorCallImpl(
expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, newCallee.symbol, newCallee.descriptor,
expression.typeArgumentsCount
expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, newCallee.symbol, expression.typeArgumentsCount
).apply { copyTypeArgumentsFrom(expression) }
newCall.putValueArgument(0, dispatchReceiver)
@@ -177,7 +176,6 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : FileLowe
endOffset,
type,
newCallee.symbol,
newCallee.descriptor,
typeArgumentsCount,
origin
)
@@ -283,7 +283,6 @@ class LocalDeclarationsLowering(
expression.startOffset, expression.endOffset,
context.irBuiltIns.unitType,
newCallee.symbol,
newCallee.descriptor,
expression.typeArgumentsCount
).also {
it.fillArguments2(expression, newCallee)
@@ -341,7 +340,6 @@ class LocalDeclarationsLowering(
expression.startOffset, expression.endOffset,
expression.type, // TODO functional type for transformed descriptor
newCallee.symbol,
newCallee.descriptor,
expression.typeArgumentsCount,
expression.origin
).also {
@@ -440,9 +438,9 @@ class LocalDeclarationsLowering(
oldCall.startOffset, oldCall.endOffset,
newCallee.returnType,
newCallee.symbol,
newCallee.descriptor,
oldCall.typeArgumentsCount,
oldCall.origin, oldCall.superQualifierSymbol
oldCall.origin,
oldCall.superQualifierSymbol
).also {
it.copyTypeArgumentsFrom(oldCall)
}
@@ -37,8 +37,7 @@ class ProvisionalFunctionExpressionLowering :
function,
IrFunctionReferenceImpl(
startOffset, endOffset, type,
function.symbol, function.descriptor, 0,
origin
function.symbol, 0, origin
)
)
)
@@ -44,7 +44,7 @@ internal fun IrExpression.negate(): IrExpression {
it.name == OperatorNameConventions.UNARY_MINUS &&
it.valueParameters.isEmpty()
}
IrCallImpl(startOffset, endOffset, type, unaryMinusFun.symbol, unaryMinusFun.descriptor).apply {
IrCallImpl(startOffset, endOffset, type, unaryMinusFun.symbol).apply {
dispatchReceiver = this@negate
}
}
@@ -62,7 +62,7 @@ internal fun IrExpression.decrement(): IrExpression {
it.name == OperatorNameConventions.DEC &&
it.valueParameters.isEmpty()
}
IrCallImpl(startOffset, endOffset, type, decFun.symbol, decFun.descriptor).apply {
IrCallImpl(startOffset, endOffset, type, decFun.symbol).apply {
dispatchReceiver = this@decrement
}
}
@@ -32,7 +32,6 @@ object JsIrBuilder {
UNDEFINED_OFFSET,
type ?: target.owner.returnType,
target,
target.descriptor,
target.descriptor.typeParametersCount,
SYNTHESIZED_STATEMENT
).apply {
@@ -186,7 +185,7 @@ object JsIrBuilder {
IrCompositeImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT, statements)
fun buildFunctionReference(type: IrType, symbol: IrFunctionSymbol) =
IrFunctionReferenceImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, symbol, symbol.descriptor, 0, null)
IrFunctionReferenceImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, symbol, 0, null)
fun buildVar(
type: IrType,
@@ -92,7 +92,6 @@ class CallableReferenceLowering(val context: JsIrBackendContext) : FileLoweringP
callable.startOffset, callable.endOffset,
newTarget.symbol.owner.returnType,
newTarget.symbol,
newTarget.symbol.descriptor,
callable.origin
).apply {
copyTypeArgumentsFrom(callable)
@@ -79,7 +79,6 @@ class JsDefaultCallbackGenerator(val context: JsIrBackendContext): BodyLoweringP
endOffset,
context.irBuiltIns.anyType,
originalFunction.symbol,
originalFunction.descriptor,
0,
BIND_CALL
)
@@ -91,7 +90,6 @@ class JsDefaultCallbackGenerator(val context: JsIrBackendContext): BodyLoweringP
endOffset,
context.irBuiltIns.anyType,
context.intrinsics.jsBind.symbol,
context.intrinsics.jsBind.descriptor,
BIND_CALL,
superQualifierSymbol
)
@@ -82,9 +82,8 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : FileLoweringPass
IrFunctionReferenceImpl(
expression.startOffset, expression.endOffset,
expression.type,
it.symbol, it.descriptor,
expression.typeArgumentsCount, expression.valueArgumentsCount,
expression.origin
it.symbol, expression.typeArgumentsCount,
expression.valueArgumentsCount, expression.origin
)
}
} ?: expression
@@ -113,8 +112,7 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : FileLoweringPass
val newExpression = IrCallImpl(
expression.startOffset, expression.endOffset,
expression.type,
staticTarget.symbol, staticTarget.descriptor,
expression.typeArgumentsCount,
staticTarget.symbol, expression.typeArgumentsCount,
expression.origin,
expression.superQualifierSymbol
)
@@ -75,7 +75,6 @@ private class ScriptRemoveReceiverLowering(val context: CommonBackendContext) :
type.annotations
),
symbol,
descriptor,
typeArgumentsCount,
valueArgumentsCount,
origin
@@ -111,7 +110,6 @@ private class ScriptRemoveReceiverLowering(val context: CommonBackendContext) :
type.annotations
),
symbol,
descriptor,
typeArgumentsCount,
field,
getter,
@@ -238,7 +238,7 @@ private class CallsiteRedirectionTransformer(context: JsIrBackendContext) : IrEl
private fun replaceSecondaryConstructorWithFactoryFunction(
call: IrFunctionAccessExpression,
newTarget: IrSimpleFunctionSymbol
) = IrCallImpl(call.startOffset, call.endOffset, call.type, newTarget, newTarget.descriptor, call.typeArgumentsCount).apply {
) = IrCallImpl(call.startOffset, call.endOffset, call.type, newTarget, call.typeArgumentsCount).apply {
copyTypeArgumentsFrom(call)
@@ -6,23 +6,16 @@
package org.jetbrains.kotlin.ir.backend.js.lower
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.lower.callsSuper
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.types.isNullableString
import org.jetbrains.kotlin.ir.types.isString
import org.jetbrains.kotlin.ir.types.makeNotNull
import org.jetbrains.kotlin.ir.util.defaultType
import org.jetbrains.kotlin.ir.util.isThrowable
import org.jetbrains.kotlin.ir.util.isThrowableTypeOrSubtype
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
@@ -74,7 +67,7 @@ class ThrowableLowering(val context: JsIrBackendContext) : FileLoweringPass {
val (messageArg, causeArg) = expression.extractThrowableArguments()
return expression.run {
IrCallImpl(startOffset, endOffset, type, newThrowableFunction, newThrowableFunction.descriptor).also {
IrCallImpl(startOffset, endOffset, type, newThrowableFunction).also {
it.putValueArgument(0, messageArg)
it.putValueArgument(1, causeArg)
}
@@ -91,7 +84,7 @@ class ThrowableLowering(val context: JsIrBackendContext) : FileLoweringPass {
val thisReceiver = IrGetValueImpl(expression.startOffset, expression.endOffset, klass.thisReceiver!!.symbol)
return expression.run {
IrCallImpl(startOffset, endOffset, type, extendThrowableFunction, extendThrowableFunction.descriptor).also {
IrCallImpl(startOffset, endOffset, type, extendThrowableFunction).also {
it.putValueArgument(0, thisReceiver)
it.putValueArgument(1, messageArg)
it.putValueArgument(2, causeArg)
@@ -284,8 +284,7 @@ private class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass
IrCallImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
maybeOrphanedTarget.returnType,
maybeOrphanedTarget.symbol, maybeOrphanedTarget.descriptor,
origin = IrStatementOrigin.BRIDGE_DELEGATION,
maybeOrphanedTarget.symbol, origin = IrStatementOrigin.BRIDGE_DELEGATION,
superQualifierSymbol = if (invokeStatically) maybeOrphanedTarget.parentAsClass.symbol else null
).apply {
passTypeArgumentsFrom(this@createBridgeBody)
@@ -271,7 +271,6 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
endOffset,
context.irBuiltIns.unitType,
enumConstructorCall.symbol,
enumConstructorCall.descriptor,
enumConstructorCall.typeArgumentsCount
)
@@ -309,7 +308,6 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
endOffset,
context.irBuiltIns.unitType,
loweredDelegatedConstructor.symbol,
loweredDelegatedConstructor.descriptor,
loweredDelegatedConstructor.typeParameters.size
)
@@ -370,7 +368,6 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
endOffset,
context.irBuiltIns.unitType,
loweredConstructor.symbol,
loweredConstructor.descriptor,
loweredConstructor.typeParameters.size
)
}
@@ -489,7 +486,6 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
UNDEFINED_OFFSET,
returnType,
enumValueOf,
substitutedValueOfDescriptor,
enumValueOf.owner.typeParameters.size
)
irValueOfCall.putTypeArgument(0, irClass.defaultType)
@@ -515,7 +511,7 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
val cloneFun = context.irBuiltIns.arrayClass.owner.functions.find { it.name.asString() == "clone" }!!
val returnType = valuesFunction.symbol.owner.returnType
val irCloneValues =
IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, returnType, cloneFun.symbol, cloneFun.descriptor, 0).apply {
IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, returnType, cloneFun.symbol, 0).apply {
dispatchReceiver =
IrGetFieldImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, valuesField.symbol, valuesField.symbol.owner.type)
}
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.backend.jvm.lower
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irBlock
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
@@ -106,7 +105,6 @@ internal class InlineCallableReferenceToLambdaPhase(val context: JvmBackendConte
expression.endOffset,
field.type,
function.symbol,
function.symbol.descriptor,
typeArgumentsCount = 0,
origin = IrStatementOrigin.LAMBDA
).apply {
@@ -145,7 +143,7 @@ internal class InlineCallableReferenceToLambdaPhase(val context: JvmBackendConte
expression.endOffset
).run {
irExprBody(irCall(referencedFunction).apply {
this@apply.descriptor.typeParameters.forEach {
this@apply.symbol.owner.allTypeParameters.forEach {
putTypeArgument(it.index, expression.getTypeArgument(it.index))
}
@@ -176,7 +174,6 @@ internal class InlineCallableReferenceToLambdaPhase(val context: JvmBackendConte
expression.endOffset,
referencedFunction.returnType,
function.symbol,
function.symbol.descriptor,
referencedFunction.typeParameters.size,
IrStatementOrigin.LAMBDA
).apply {
@@ -218,7 +218,6 @@ internal class InterfaceLowering(val context: JvmBackendContext) : IrElementTran
endOffset,
type,
newFunction.symbol,
newFunction.descriptor,
typeArgumentsCount,
origin
).apply {
@@ -225,9 +225,8 @@ private class JvmInlineClassLowering(private val context: JvmBackendContext) : F
return IrFunctionReferenceImpl(
expression.startOffset, expression.endOffset, expression.type,
function.symbol, function.descriptor,
function.typeParameters.size, function.valueParameters.size,
expression.origin
function.symbol, function.typeParameters.size,
function.valueParameters.size, expression.origin
).apply {
buildReplacement(expression.symbol.owner, expression, replacement)
}.copyAttributes(expression)
@@ -58,7 +58,7 @@ private class JvmOverloadsAnnotationLowering(val context: JvmBackendContext) : C
val wrapperIrFunction = generateWrapperHeader(target, numDefaultParametersToExpect)
val call = if (target is IrConstructor)
IrDelegatingConstructorCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, context.irBuiltIns.unitType, target.symbol, target.descriptor)
IrDelegatingConstructorCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, context.irBuiltIns.unitType, target.symbol)
else
IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, target.returnType, target.symbol)
for (arg in wrapperIrFunction.allTypeParameters) {
@@ -23,12 +23,9 @@ import org.jetbrains.kotlin.ir.builders.irReturn
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.functions
import org.jetbrains.kotlin.ir.util.getAnnotation
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.types.Variance
internal class MainMethodGenerationLowering(val context: JvmBackendContext) : ClassLoweringPass {
@@ -111,7 +111,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
expression.transformChildrenVoid()
return IrFunctionReferenceImpl(
expression.startOffset, expression.endOffset, expression.type,
accessor, accessor.descriptor, accessor.owner.typeParameters.size,
accessor, accessor.owner.typeParameters.size,
accessor.owner.valueParameters.size, expression.origin
)
}
@@ -183,8 +183,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
IrDelegatingConstructorCallImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
context.irBuiltIns.unitType,
targetSymbol, targetSymbol.descriptor,
targetSymbol.owner.parentAsClass.typeParameters.size + targetSymbol.owner.typeParameters.size
targetSymbol, targetSymbol.owner.parentAsClass.typeParameters.size + targetSymbol.owner.typeParameters.size
).also {
copyAllParamsToArgs(it, accessor)
}
@@ -250,8 +249,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
IrCallImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
accessor.returnType,
targetSymbol, targetSymbol.descriptor,
targetSymbol.owner.typeParameters.size,
targetSymbol, targetSymbol.owner.typeParameters.size,
superQualifierSymbol = superQualifierSymbol
).also {
copyAllParamsToArgs(it, accessor)
@@ -344,15 +342,13 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
is IrCall -> IrCallImpl(
oldExpression.startOffset, oldExpression.endOffset,
oldExpression.type,
accessorSymbol, accessorSymbol.descriptor,
oldExpression.typeArgumentsCount,
accessorSymbol, oldExpression.typeArgumentsCount,
oldExpression.origin
)
is IrDelegatingConstructorCall -> IrDelegatingConstructorCallImpl(
oldExpression.startOffset, oldExpression.endOffset,
context.irBuiltIns.unitType,
accessorSymbol as IrConstructorSymbol, accessorSymbol.descriptor,
oldExpression.typeArgumentsCount
accessorSymbol as IrConstructorSymbol, oldExpression.typeArgumentsCount
)
is IrConstructorCall ->
IrConstructorCallImpl.fromSymbolDescriptor(
@@ -388,8 +384,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
val call = IrCallImpl(
oldExpression.startOffset, oldExpression.endOffset,
oldExpression.type,
accessorSymbol, accessorSymbol.descriptor,
0,
accessorSymbol, 0,
oldExpression.origin
)
oldExpression.receiver?.let {
@@ -405,8 +400,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
val call = IrCallImpl(
oldExpression.startOffset, oldExpression.endOffset,
oldExpression.type,
accessorSymbol, accessorSymbol.descriptor,
0,
accessorSymbol, 0,
oldExpression.origin
)
oldExpression.receiver?.let {
@@ -261,8 +261,7 @@ class BodyGenerator(
IrDelegatingConstructorCallImpl(
ktElement.pureStartOffset, ktElement.pureEndOffset,
context.irBuiltIns.unitType,
context.symbolTable.referenceConstructor(anyConstructor),
anyConstructor
context.symbolTable.referenceConstructor(anyConstructor)
)
)
}
@@ -125,8 +125,7 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
val getterDescriptor = descriptor.getter!!
val getterSymbol = context.symbolTable.referenceFunction(getterDescriptor.original)
IrCallImpl(
startOffset, endOffset, descriptor.type.toIrType(), getterSymbol, getterDescriptor,
origin ?: IrStatementOrigin.GET_LOCAL_PROPERTY
startOffset, endOffset, descriptor.type.toIrType(), getterSymbol, origin ?: IrStatementOrigin.GET_LOCAL_PROPERTY
).apply {
putTypeArguments(typeArguments) { it.toIrType() }
}
@@ -141,8 +140,7 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
val irCall = IrDelegatingConstructorCallImpl(
startOffset, endOffset,
context.irBuiltIns.unitType,
constructorSymbol,
descriptor
constructorSymbol
).apply {
putTypeArguments(call.typeArguments) { it.toIrType() }
this.dispatchReceiver = dispatchReceiver?.load()
@@ -205,7 +203,6 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
startOffset, endOffset,
irType,
getterSymbol,
getMethodDescriptor,
descriptor.typeParametersCount,
0,
IrStatementOrigin.GET_PROPERTY,
@@ -249,11 +246,12 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
): IrExpression =
call.callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
val irType = constructorDescriptor.returnType.toIrType()
val originalSymbol = context.symbolTable.referenceConstructor(constructorDescriptor.original)
IrConstructorCallImpl.fromSubstitutedDescriptor(
startOffset, endOffset,
irType,
context.symbolTable.referenceConstructor(constructorDescriptor.original),
constructorDescriptor,
originalSymbol,
origin
).run {
putTypeArguments(call.typeArguments) { it.toIrType() }
@@ -322,11 +320,11 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
)
}
} else {
val originalSymbol = context.symbolTable.referenceFunction(functionDescriptor.original)
IrCallImpl(
startOffset, endOffset,
irType,
context.symbolTable.referenceFunction(functionDescriptor.original),
functionDescriptor,
originalSymbol,
origin,
call.superQualifier?.let { context.symbolTable.referenceClass(it) }
).run {
@@ -279,10 +279,10 @@ class ClassGenerator(
val substitutedOverridden = substituteOverriddenDescriptorForDelegate(delegated, overridden)
val returnType = substitutedOverridden.returnType!!
val irReturnType = returnType.toIrType()
val originalSymbol = context.symbolTable.referenceFunction(overridden.original)
val irCall = IrCallImpl(
startOffset, endOffset, irReturnType,
context.symbolTable.referenceFunction(overridden.original),
substitutedOverridden,
originalSymbol,
substitutedOverridden.typeParametersCount
).apply {
val typeArguments = getTypeArgumentsForOverriddenDescriptorDelegatingCall(delegated, overridden)
@@ -258,7 +258,7 @@ class DataClassMembersGenerator(
val hashCodeFunctionDescriptor = getHashCodeFunction(kotlinType)
val hashCodeFunctionSymbol = declarationGenerator.context.symbolTable.referenceFunction(hashCodeFunctionDescriptor.original)
return irCall(hashCodeFunctionSymbol, context.irBuiltIns.intType).apply {
if (descriptor.dispatchReceiverParameter != null) {
if (hashCodeFunctionDescriptor.dispatchReceiverParameter != null) {
dispatchReceiver = irValue
} else {
putValueArgument(0, irValue)
@@ -412,18 +412,19 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
endOffset: Int,
functionDescriptor: FunctionDescriptor,
receiver: IrExpression
): IrExpression =
IrCallImpl(
): IrExpression {
val originalSymbol = context.symbolTable.referenceFunction(functionDescriptor.original)
return IrCallImpl(
startOffset,
endOffset,
functionDescriptor.returnType!!.toIrType(),
context.symbolTable.referenceFunction(functionDescriptor.original),
functionDescriptor,
origin = null, // TODO origin for widening conversions?
originalSymbol,
origin = null,
superQualifierSymbol = null
).apply {
dispatchReceiver = receiver
}
}
private fun KotlinType.findConversionFunctionTo(targetType: KotlinType): FunctionDescriptor? {
val targetTypeName = targetType.constructor.declarationDescriptor?.name?.asString() ?: return null
@@ -498,11 +499,11 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
)
) ?: throw AssertionError("Substitution failed for $checkNotNull: T=$argumentType")
val checkNotNullSymbol = context.irBuiltIns.checkNotNullSymbol
return IrCallImpl(
ktOperator.startOffsetSkippingComments, ktOperator.endOffset,
expressionType.toIrType(),
context.irBuiltIns.checkNotNullSymbol,
checkNotNullSubstituted,
checkNotNullSymbol,
origin
).apply {
putTypeArgument(0, argumentType.toIrType().makeNotNull())
@@ -137,11 +137,11 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
val originalProperty = propertyDescriptor.original
val originalGetter = originalProperty.getter?.original
val originalSetter = if (mutable) originalProperty.setter?.original else null
val originalSymbol = context.symbolTable.referenceProperty(originalProperty)
return IrPropertyReferenceImpl(
startOffset, endOffset, type.toIrType(),
context.symbolTable.referenceProperty(originalProperty),
propertyDescriptor,
originalSymbol,
propertyDescriptor.typeParametersCount,
getFieldForPropertyReference(originalProperty),
originalGetter?.let { context.symbolTable.referenceSimpleFunction(it) },
@@ -172,8 +172,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
): IrFunctionReference =
IrFunctionReferenceImpl(
startOffset, endOffset, type.toIrType(),
symbol, descriptor, descriptor.typeParametersCount,
origin
symbol, descriptor.typeParametersCount, origin
).apply {
putTypeArguments(typeArguments) { it.toIrType() }
}
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.types.KotlinType
class DelegatedLocalPropertyLValue(
private val context: IrGeneratorContext,
@@ -37,10 +36,10 @@ class DelegatedLocalPropertyLValue(
AssignmentReceiver {
override fun load(): IrExpression =
IrCallImpl(startOffset, endOffset, type, getterSymbol!!, getterSymbol.descriptor, origin)
IrCallImpl(startOffset, endOffset, type, getterSymbol!!, origin)
override fun store(irExpression: IrExpression): IrExpression =
IrCallImpl(startOffset, endOffset, context.irBuiltIns.unitType, setterSymbol!!, setterSymbol.descriptor, origin).apply {
IrCallImpl(startOffset, endOffset, context.irBuiltIns.unitType, setterSymbol!!, origin).apply {
putValueArgument(0, irExpression)
}
@@ -145,8 +145,7 @@ class AccessorPropertyLValue(
IrCallImpl(
startOffset, endOffset,
type,
getter!!, getterDescriptor,
typeArgumentsCount,
getter!!, typeArgumentsCount,
0,
origin,
superQualifier
@@ -162,8 +161,7 @@ class AccessorPropertyLValue(
IrCallImpl(
startOffset, endOffset,
context.irBuiltIns.unitType,
setter!!, setterDescriptor,
typeArgumentsCount,
setter!!, typeArgumentsCount,
1,
origin,
superQualifier
@@ -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 {
@@ -350,8 +350,7 @@ abstract class IrFileDeserializer(
val symbol = deserializeIrSymbol(proto.symbol) as IrConstructorSymbol
return IrConstructorCallImpl(
start, end, type,
symbol, symbol.descriptor,
typeArgumentsCount = proto.memberAccess.typeArguments.typeArgumentCount,
symbol, typeArgumentsCount = proto.memberAccess.typeArguments.typeArgumentCount,
constructorTypeArgumentsCount = proto.constructorTypeArgumentsCount,
valueArgumentsCount = proto.memberAccess.valueArgumentCount
).also {
@@ -372,8 +371,7 @@ abstract class IrFileDeserializer(
// TODO: implement the last three args here.
IrCallImpl(
start, end, type,
symbol, symbol.descriptor,
proto.memberAccess.typeArguments.typeArgumentCount,
symbol, proto.memberAccess.typeArguments.typeArgumentCount,
proto.memberAccess.valueArgumentList.size,
origin,
superSymbol
@@ -404,7 +402,6 @@ abstract class IrFileDeserializer(
end,
builtIns.unitType,
symbol,
symbol.descriptor,
proto.memberAccess.typeArguments.typeArgumentCount,
proto.memberAccess.valueArgumentList.size
)
@@ -457,7 +454,6 @@ abstract class IrFileDeserializer(
end,
type,
symbol,
symbol.descriptor,
proto.memberAccess.typeArguments.typeArgumentCount,
proto.memberAccess.valueArgumentCount,
origin
@@ -226,8 +226,7 @@ interface IrBuilderExtension {
+IrDelegatingConstructorCallImpl(
startOffset, endOffset,
compilerContext.irBuiltIns.unitType,
compilerContext.externalSymbols.referenceConstructor(anyConstructor),
anyConstructor
compilerContext.externalSymbols.referenceConstructor(anyConstructor)
)
}
}
@@ -119,8 +119,7 @@ class SerializableIrGenerator(
startOffset,
endOffset,
compilerContext.irBuiltIns.unitType,
ctorRef,
suitableCtor
ctorRef
)
call.insertTypeArgumentsForSuperClass(superClass)
+call
@@ -152,8 +151,7 @@ class SerializableIrGenerator(
startOffset,
endOffset,
compilerContext.irBuiltIns.unitType,
superCtorRef,
superCtorRef.owner.descriptor
superCtorRef
)
arguments.forEachIndexed { index, parameter -> call.putValueArgument(index, irGet(parameter)) }
call.insertTypeArgumentsForSuperClass(superClass)