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:
+1
-1
@@ -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)
|
||||
|
||||
+3
-3
@@ -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()
|
||||
|
||||
|
||||
+1
-1
@@ -503,7 +503,7 @@ class StateMachineBuilder(
|
||||
return newArguments
|
||||
}
|
||||
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression) {
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression<*>) {
|
||||
|
||||
if (expression !in suspendableNodes) {
|
||||
addExceptionEdge()
|
||||
|
||||
+1
-1
@@ -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 ->
|
||||
|
||||
Reference in New Issue
Block a user