IR: add type parameter to IrMemberAccessExpression and some subclasses

https://github.com/JetBrains/kotlin/commit/d4605f581657fd01925bfb1d75bd09a0323f3e84
(cherry picked from commit 45893f45601c13d6af2dffae01cf9630f5da374a)
This commit is contained in:
Alexander Udalov
2020-07-01 13:16:17 +02:00
committed by Vasily Levchenko
parent e64cf2b6f4
commit 4f87c09451
8 changed files with 12 additions and 12 deletions
@@ -101,7 +101,7 @@ private fun KotlinToCCallBuilder.addArgument(
if (!variadic) cFunctionBuilder.addParameter(cArgument.type)
}
private fun KotlinToCCallBuilder.buildKotlinBridgeCall(transformCall: (IrMemberAccessExpression) -> IrExpression = { it }): IrExpression =
private fun KotlinToCCallBuilder.buildKotlinBridgeCall(transformCall: (IrMemberAccessExpression<*>) -> IrExpression = { it }): IrExpression =
bridgeCallBuilder.build(
bridgeBuilder.buildKotlinBridge().also {
this.stubs.addKotlin(it)
@@ -186,7 +186,7 @@ internal class KotlinCallBuilder(private val irBuilder: IrBuilderWithScope, priv
fun build(
function: IrFunction,
transformCall: (IrMemberAccessExpression) -> IrExpression = { it }
transformCall: (IrMemberAccessExpression<*>) -> IrExpression = { it }
): IrExpression {
val arguments = this.arguments.toMutableList()
@@ -424,7 +424,7 @@ private class InlineClassTransformer(private val context: Context) : IrBuildingT
}
private fun IrBuilderWithScope.lowerConstructorCallToValue(
expression: IrMemberAccessExpression,
expression: IrMemberAccessExpression<*>,
callee: IrConstructor
): IrExpression = if (callee.isPrimary) {
expression.getValueArgument(0)!!
@@ -266,7 +266,7 @@ internal class EnumConstructorsLowering(val context: Context) : ClassLoweringPas
throw AssertionError("Unexpected delegating constructor call within enum entry: $enumEntry")
}
abstract fun createConstructorCall(startOffset: Int, endOffset: Int, loweredConstructor: IrConstructorSymbol): IrMemberAccessExpression
abstract fun createConstructorCall(startOffset: Int, endOffset: Int, loweredConstructor: IrConstructorSymbol): IrMemberAccessExpression<*>
}
private inner class InEnumEntryClassConstructor(enumEntry: IrEnumEntry) : InEnumEntry(enumEntry) {
@@ -270,7 +270,7 @@ internal class NativeSuspendFunctionsLowering(ctx: Context): AbstractSuspendFunc
return sliceExpression(expression)
}
override fun visitMemberAccess(expression: IrMemberAccessExpression): IrExpression {
override fun visitMemberAccess(expression: IrMemberAccessExpression<*>): IrExpression {
expression.transformChildrenVoid(this)
return sliceExpression(expression)
@@ -281,7 +281,7 @@ internal class NativeSuspendFunctionsLowering(ctx: Context): AbstractSuspendFunc
irBuilder.run {
val children = when (expression) {
is IrSetField -> listOf(expression.receiver, expression.value)
is IrMemberAccessExpression -> (
is IrMemberAccessExpression<*> -> (
listOf(expression.dispatchReceiver, expression.extensionReceiver)
+ (0 until expression.valueArgumentsCount).map { expression.getValueArgument(it) }
)
@@ -365,7 +365,7 @@ internal class NativeSuspendFunctionsLowering(ctx: Context): AbstractSuspendFunc
expression.receiver = newChildren[0]
expression.value = newChildren[1]!!
}
is IrMemberAccessExpression -> {
is IrMemberAccessExpression<*> -> {
expression.dispatchReceiver = newChildren[0]
expression.extensionReceiver = newChildren[1]
newChildren.drop(2).forEachIndexed { index, newChild ->
@@ -549,7 +549,7 @@ internal class NativeSuspendFunctionsLowering(ctx: Context): AbstractSuspendFunc
}
}
fun IrBlockBodyBuilder.irSuccess(value: IrExpression): IrMemberAccessExpression {
fun IrBlockBodyBuilder.irSuccess(value: IrExpression): IrMemberAccessExpression<*> {
val createResult = symbols.kotlinResult.owner.constructors.single { it.isPrimary }
return irCall(createResult).apply {
putValueArgument(0, value)
@@ -67,7 +67,7 @@ internal class KTypeGenerator(
private fun IrBuilderWithScope.irKTypeProjectionsList(
irTypeArguments: List<IrTypeArgument>
): IrMemberAccessExpression {
): IrMemberAccessExpression<*> {
val kTypeProjectionType = symbols.kTypeProjection.typeWithoutArguments
return if (irTypeArguments.isEmpty()) {
@@ -116,7 +116,7 @@ private class ExpressionValuesExtractor(val context: Context,
is IrWhen -> expression.branches.forEach { forEachValue(it.result, block) }
is IrMemberAccessExpression -> block(expression)
is IrMemberAccessExpression<*> -> block(expression)
is IrGetValue -> block(expression)
@@ -319,7 +319,7 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
override fun visitExpression(expression: IrExpression) {
when (expression) {
is IrMemberAccessExpression,
is IrMemberAccessExpression<*>,
is IrGetField,
is IrGetObjectValue,
is IrVararg,
@@ -293,7 +293,7 @@ fun IrBuilderWithScope.irCatch(type: IrType) =
* Binds the arguments explicitly represented in the IR to the parameters of the accessed function.
* The arguments are to be evaluated in the same order as they appear in the resulting list.
*/
fun IrMemberAccessExpression.getArgumentsWithIr(): List<Pair<IrValueParameter, IrExpression>> {
fun IrMemberAccessExpression<*>.getArgumentsWithIr(): List<Pair<IrValueParameter, IrExpression>> {
val res = mutableListOf<Pair<IrValueParameter, IrExpression>>()
val irFunction = when (this) {
is IrFunctionAccessExpression -> this.symbol.owner