From a44b5e4562e87f767586f2b4f07ac8c70ce245cd Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Sat, 17 Jun 2023 00:28:54 +0200 Subject: [PATCH] JVM IR: do not copy call in JvmStaticAnnotationLowering This is just a refactoring/optimization that makes use of the fact that IrCall.symbol is now mutable. --- .../jvm/lower/JvmStaticAnnotationLowering.kt | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt index 34b6857b415..793ebd62ca5 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt @@ -66,20 +66,21 @@ internal fun IrDeclaration.isJvmStaticInObject(): Boolean = private fun IrExpression.coerceToUnit(irBuiltIns: IrBuiltIns) = IrTypeOperatorCallImpl(startOffset, endOffset, irBuiltIns.unitType, IrTypeOperator.IMPLICIT_COERCION_TO_UNIT, irBuiltIns.unitType, this) -private fun IrMemberAccessExpression<*>.makeStatic(irBuiltIns: IrBuiltIns, replaceCallee: IrSimpleFunction?) = - dispatchReceiver?.let { receiver -> - dispatchReceiver = null - val newCall = if (replaceCallee != null) irCall(this@makeStatic as IrCall, replaceCallee) else this@makeStatic - if (receiver.isTrivial()) { - // Receiver has no side effects (aside from maybe class initialization) so discard it. - newCall - } else { - IrBlockImpl(startOffset, endOffset, newCall.type).apply { - statements += receiver.coerceToUnit(irBuiltIns) // evaluate for side effects - statements += newCall - } - } - } ?: this +private fun IrMemberAccessExpression<*>.makeStatic(irBuiltIns: IrBuiltIns, replaceCallee: IrSimpleFunction?): IrExpression { + val receiver = dispatchReceiver ?: return this + dispatchReceiver = null + if (replaceCallee != null) { + (this as IrCall).symbol = replaceCallee.symbol + } + if (receiver.isTrivial()) { + // Receiver has no side effects (aside from maybe class initialization) so discard it. + return this + } + return IrBlockImpl(startOffset, endOffset, type).apply { + statements += receiver.coerceToUnit(irBuiltIns) // evaluate for side effects + statements += this@makeStatic + } +} class SingletonObjectJvmStaticTransformer( private val irBuiltIns: IrBuiltIns,