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:
committed by
Space Team
parent
572892dc8a
commit
a44b5e4562
+15
-14
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user