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.
This commit is contained in:
Alexander Udalov
2023-06-17 00:28:54 +02:00
committed by Space Team
parent 572892dc8a
commit a44b5e4562
@@ -66,20 +66,21 @@ internal fun IrDeclaration.isJvmStaticInObject(): Boolean =
private fun IrExpression.coerceToUnit(irBuiltIns: IrBuiltIns) = private fun IrExpression.coerceToUnit(irBuiltIns: IrBuiltIns) =
IrTypeOperatorCallImpl(startOffset, endOffset, irBuiltIns.unitType, IrTypeOperator.IMPLICIT_COERCION_TO_UNIT, irBuiltIns.unitType, this) IrTypeOperatorCallImpl(startOffset, endOffset, irBuiltIns.unitType, IrTypeOperator.IMPLICIT_COERCION_TO_UNIT, irBuiltIns.unitType, this)
private fun IrMemberAccessExpression<*>.makeStatic(irBuiltIns: IrBuiltIns, replaceCallee: IrSimpleFunction?) = private fun IrMemberAccessExpression<*>.makeStatic(irBuiltIns: IrBuiltIns, replaceCallee: IrSimpleFunction?): IrExpression {
dispatchReceiver?.let { receiver -> val receiver = dispatchReceiver ?: return this
dispatchReceiver = null dispatchReceiver = null
val newCall = if (replaceCallee != null) irCall(this@makeStatic as IrCall, replaceCallee) else this@makeStatic if (replaceCallee != null) {
if (receiver.isTrivial()) { (this as IrCall).symbol = replaceCallee.symbol
// Receiver has no side effects (aside from maybe class initialization) so discard it. }
newCall if (receiver.isTrivial()) {
} else { // Receiver has no side effects (aside from maybe class initialization) so discard it.
IrBlockImpl(startOffset, endOffset, newCall.type).apply { return this
statements += receiver.coerceToUnit(irBuiltIns) // evaluate for side effects }
statements += newCall return IrBlockImpl(startOffset, endOffset, type).apply {
} statements += receiver.coerceToUnit(irBuiltIns) // evaluate for side effects
} statements += this@makeStatic
} ?: this }
}
class SingletonObjectJvmStaticTransformer( class SingletonObjectJvmStaticTransformer(
private val irBuiltIns: IrBuiltIns, private val irBuiltIns: IrBuiltIns,