diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt index e9edba4ec28..24f2d12ee1f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt @@ -5,6 +5,9 @@ package org.jetbrains.kotlin.ir.expressions +import org.jetbrains.kotlin.descriptors.CallableDescriptor +import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor +import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl @@ -64,3 +67,33 @@ fun IrExpression.isUnchanging(): Boolean = fun IrExpression.hasNoSideEffects(): Boolean = isUnchanging() || this is IrGetValue + +internal fun IrMemberAccessExpression<*>.throwNoSuchArgumentSlotException(kind: String, index: Int, total: Int): Nothing { + throw AssertionError( + "No such $kind argument slot in ${this::class.java.simpleName}: $index (total=$total)" + + (symbol.signature?.let { ".\nSymbol: $it" } ?: "") + ) +} + +fun IrMemberAccessExpression<*>.copyTypeArgumentsFrom(other: IrMemberAccessExpression<*>, shift: Int = 0) { + assert(typeArgumentsCount == other.typeArgumentsCount + shift) { + "Mismatching type arguments: $typeArgumentsCount vs ${other.typeArgumentsCount} + $shift" + } + for (i in 0 until other.typeArgumentsCount) { + putTypeArgument(i + shift, other.getTypeArgument(i)) + } +} + +val CallableDescriptor.typeParametersCount: Int + get() = + when (this) { + is PropertyAccessorDescriptor -> correspondingProperty.typeParameters.size + else -> typeParameters.size + } + +fun IrMemberAccessExpression<*>.putArgument(callee: IrFunction, parameter: IrValueParameter, argument: IrExpression) = + when (parameter) { + callee.dispatchReceiverParameter -> dispatchReceiver = argument + callee.extensionReceiverParameter -> extensionReceiver = argument + else -> putValueArgument(parameter.index, argument) + } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt index ebe361e66ad..e7944aa1450 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt @@ -5,16 +5,10 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.descriptors.CallableDescriptor -import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.symbols.IrSymbol 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.types.KotlinType // todo: autogenerate /** @@ -80,33 +74,3 @@ abstract class IrMemberAccessExpression : IrDeclarationReference() } } } - -internal fun IrMemberAccessExpression<*>.throwNoSuchArgumentSlotException(kind: String, index: Int, total: Int): Nothing { - throw AssertionError( - "No such $kind argument slot in ${this::class.java.simpleName}: $index (total=$total)" + - (symbol.signature?.let { ".\nSymbol: $it" } ?: "") - ) -} - -fun IrMemberAccessExpression<*>.copyTypeArgumentsFrom(other: IrMemberAccessExpression<*>, shift: Int = 0) { - assert(typeArgumentsCount == other.typeArgumentsCount + shift) { - "Mismatching type arguments: $typeArgumentsCount vs ${other.typeArgumentsCount} + $shift" - } - for (i in 0 until other.typeArgumentsCount) { - putTypeArgument(i + shift, other.getTypeArgument(i)) - } -} - -val CallableDescriptor.typeParametersCount: Int - get() = - when (this) { - is PropertyAccessorDescriptor -> correspondingProperty.typeParameters.size - else -> typeParameters.size - } - -fun IrMemberAccessExpression<*>.putArgument(callee: IrFunction, parameter: IrValueParameter, argument: IrExpression) = - when (parameter) { - callee.dispatchReceiverParameter -> dispatchReceiver = argument - callee.extensionReceiverParameter -> extensionReceiver = argument - else -> putValueArgument(parameter.index, argument) - }