IR: add type parameter to IrMemberAccessExpression and some subclasses

This is needed to get rid of the diamond hierarchy:

                 IrMemberAccessExpression
                 /                       \
                /                         \
IrFunctionAccessExpression     IrCallableReference
                \                      /
                 \                    /
                   IrFunctionReference

In the subsequent commit, IrFunctionReference no longer inherits from
IrFunctionAccessExpression; the more precise type of `val symbol:
IrFunctionSymbol` is now carried via the generic type argument.

This will help to refactor IR element hierarchy from interfaces to
classes, improving performance of visitors and transformers.
This commit is contained in:
Alexander Udalov
2020-06-23 20:12:36 +02:00
parent d794c9dc4d
commit d4605f5816
46 changed files with 140 additions and 140 deletions
@@ -566,7 +566,7 @@ class BlockDecomposerTransformer(
// var p4_tmp = p4
// var p5_tmp = block {}
// d_tmp.foo(p1_tmp, p2_tmp, p3_tmp, p4_tmp, p5_tmp, p6, p7)
override fun visitMemberAccess(expression: IrMemberAccessExpression): IrExpression {
override fun visitMemberAccess(expression: IrMemberAccessExpression<*>): IrExpression {
expression.transformChildrenVoid(expressionTransformer)
val oldArguments = mutableListOf(expression.dispatchReceiver, expression.extensionReceiver)
@@ -218,9 +218,9 @@ class PrivateMemberBodiesLowering(val context: JsIrBackendContext) : BodyLowerin
}
private fun transformPrivateToStaticReference(
expression: IrCallableReference,
builder: () -> IrCallableReference
): IrCallableReference {
expression: IrCallableReference<*>,
builder: () -> IrCallableReference<*>
): IrCallableReference<*> {
val newExpression = builder()
@@ -503,7 +503,7 @@ class StateMachineBuilder(
return newArguments
}
override fun visitMemberAccess(expression: IrMemberAccessExpression) {
override fun visitMemberAccess(expression: IrMemberAccessExpression<*>) {
if (expression !in suspendableNodes) {
addExceptionEdge()
@@ -201,7 +201,7 @@ fun translateCall(
}
}
fun translateCallArguments(expression: IrMemberAccessExpression, context: JsGenerationContext, transformer: IrElementToJsExpressionTransformer): List<JsExpression> {
fun translateCallArguments(expression: IrMemberAccessExpression<*>, context: JsGenerationContext, transformer: IrElementToJsExpressionTransformer): List<JsExpression> {
val size = expression.valueArgumentsCount
val arguments = (0 until size).mapTo(ArrayList(size)) { index ->