psi2ir: minor: move array access generation code
This commit is contained in:
+15
-15
@@ -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() }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-7
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user