psi2ir: minor: move array access generation code

This commit is contained in:
Dmitry Petrov
2019-02-12 15:43:15 +03:00
parent 50269d3a5c
commit 6889e470d1
2 changed files with 16 additions and 22 deletions
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol 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.impl.originalKotlinType
import org.jetbrains.kotlin.ir.types.makeNotNull import org.jetbrains.kotlin.ir.types.makeNotNull
import org.jetbrains.kotlin.ir.util.referenceClassifier import org.jetbrains.kotlin.ir.util.referenceClassifier
@@ -504,20 +503,21 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
return generateCall(resolvedCall, expression, origin) return generateCall(resolvedCall, expression, origin)
} }
fun generateDynamicOperatorExpression( fun generateDynamicArrayAccess(ktArrayAccessExpression: KtArrayAccessExpression): IrExpression {
irOperator: IrDynamicOperator, val startOffset = ktArrayAccessExpression.startOffsetSkippingComments
irType: IrType, val endOffset = ktArrayAccessExpression.endOffset
ktOperatorExpression: KtExpression,
ktReceiverExpression: KtExpression, val kotlinType = context.bindingContext.getType(ktArrayAccessExpression)
ktArgumentExpressions: List<KtExpression> ?: throw AssertionError("No type for ${ktArrayAccessExpression.text}")
): IrExpression =
IrDynamicOperatorExpressionImpl( return IrDynamicOperatorExpressionImpl(
ktOperatorExpression.startOffsetSkippingComments, startOffset,
ktOperatorExpression.endOffset, endOffset,
irType, kotlinType.toIrType(),
irOperator IrDynamicOperator.ARRAY_ACCESS
).apply { ).apply {
receiver = statementGenerator.generateExpression(ktReceiverExpression) receiver = ktArrayAccessExpression.arrayExpression!!.genExpr()
ktArgumentExpressions.mapTo(arguments) { statementGenerator.generateExpression(it) } ktArrayAccessExpression.indexExpressions.mapTo(arguments) { it.genExpr() }
} }
}
} }
@@ -355,13 +355,7 @@ class StatementGenerator(
val indexedGetCall = getOrFail(BindingContext.INDEXED_LVALUE_GET, expression) val indexedGetCall = getOrFail(BindingContext.INDEXED_LVALUE_GET, expression)
return if (indexedGetCall.resultingDescriptor.isDynamic()) return if (indexedGetCall.resultingDescriptor.isDynamic())
OperatorExpressionGenerator(this).generateDynamicOperatorExpression( OperatorExpressionGenerator(this).generateDynamicArrayAccess(expression)
IrDynamicOperator.ARRAY_ACCESS,
indexedGetCall.resultingDescriptor.returnType!!.toIrType(),
expression,
expression.arrayExpression ?: throw AssertionError("Array expression not found"),
expression.indexExpressions
)
else else
CallGenerator(this).generateCall( CallGenerator(this).generateCall(
expression.startOffsetSkippingComments, expression.endOffset, expression.startOffsetSkippingComments, expression.endOffset,