From 6889e470d1642b9bb85861e7d3ed239e6ff87bde Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 12 Feb 2019 15:43:15 +0300 Subject: [PATCH] psi2ir: minor: move array access generation code --- .../generators/OperatorExpressionGenerator.kt | 30 +++++++++---------- .../psi2ir/generators/StatementGenerator.kt | 8 +---- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt index 2ce2dcab678..01d7338220f 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol -import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.impl.originalKotlinType import org.jetbrains.kotlin.ir.types.makeNotNull import org.jetbrains.kotlin.ir.util.referenceClassifier @@ -504,20 +503,21 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat return generateCall(resolvedCall, expression, origin) } - fun generateDynamicOperatorExpression( - irOperator: IrDynamicOperator, - irType: IrType, - ktOperatorExpression: KtExpression, - ktReceiverExpression: KtExpression, - ktArgumentExpressions: List - ): IrExpression = - IrDynamicOperatorExpressionImpl( - ktOperatorExpression.startOffsetSkippingComments, - ktOperatorExpression.endOffset, - irType, - irOperator + fun generateDynamicArrayAccess(ktArrayAccessExpression: KtArrayAccessExpression): IrExpression { + val startOffset = ktArrayAccessExpression.startOffsetSkippingComments + val endOffset = ktArrayAccessExpression.endOffset + + val kotlinType = context.bindingContext.getType(ktArrayAccessExpression) + ?: throw AssertionError("No type for ${ktArrayAccessExpression.text}") + + return IrDynamicOperatorExpressionImpl( + startOffset, + endOffset, + kotlinType.toIrType(), + IrDynamicOperator.ARRAY_ACCESS ).apply { - receiver = statementGenerator.generateExpression(ktReceiverExpression) - ktArgumentExpressions.mapTo(arguments) { statementGenerator.generateExpression(it) } + receiver = ktArrayAccessExpression.arrayExpression!!.genExpr() + ktArrayAccessExpression.indexExpressions.mapTo(arguments) { it.genExpr() } } + } } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt index 5615e3113e9..e1ed7b470fb 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt @@ -355,13 +355,7 @@ class StatementGenerator( val indexedGetCall = getOrFail(BindingContext.INDEXED_LVALUE_GET, expression) return if (indexedGetCall.resultingDescriptor.isDynamic()) - OperatorExpressionGenerator(this).generateDynamicOperatorExpression( - IrDynamicOperator.ARRAY_ACCESS, - indexedGetCall.resultingDescriptor.returnType!!.toIrType(), - expression, - expression.arrayExpression ?: throw AssertionError("Array expression not found"), - expression.indexExpressions - ) + OperatorExpressionGenerator(this).generateDynamicArrayAccess(expression) else CallGenerator(this).generateCall( expression.startOffsetSkippingComments, expression.endOffset,