JVM IR: simplify JvmValueClassAbstractLowering.visitReturn

Change the existing IrReturn object instead of returning a new one.
This commit is contained in:
Alexander Udalov
2023-08-24 15:13:55 +02:00
committed by Space Team
parent d1f884bad9
commit 2dee47a8c1
@@ -6,10 +6,8 @@
package org.jetbrains.kotlin.backend.jvm.lower package org.jetbrains.kotlin.backend.jvm.lower
import org.jetbrains.kotlin.backend.common.* import org.jetbrains.kotlin.backend.common.*
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.jvm.* import org.jetbrains.kotlin.backend.jvm.*
import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.irReturn
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.transformStatement import org.jetbrains.kotlin.ir.transformStatement
@@ -125,23 +123,21 @@ internal abstract class JvmValueClassAbstractLowering(
} }
final override fun visitReturn(expression: IrReturn): IrExpression { final override fun visitReturn(expression: IrReturn): IrExpression {
(expression.returnTargetSymbol.owner as? IrFunction)?.let { target -> val target = expression.returnTargetSymbol.owner
if (target is IrFunction) {
val suffix = target.hashSuffix() val suffix = target.hashSuffix()
if (suffix != null && target.name.asString().endsWith(suffix)) if (suffix == null || !target.name.asString().endsWith(suffix)) {
return super.visitReturn(expression) val replacement = replacements.getReplacementFunction(target)
?: if (target is IrConstructor) replacements.getReplacementForRegularClassConstructor(target) else null
replacements.run { if (replacement != null) {
getReplacementFunction(target) ?: if (target is IrConstructor) getReplacementForRegularClassConstructor(target) else null expression.returnTargetSymbol = replacement.symbol
}?.let { }
return context.createIrBuilder(it.symbol, expression.startOffset, expression.endOffset).irReturn(
expression.value.transform(this, null)
)
} }
} }
return super.visitReturn(expression) return super.visitReturn(expression)
} }
internal fun visitStatementContainer(container: IrStatementContainer) { private fun visitStatementContainer(container: IrStatementContainer) {
container.statements.transformFlat { statement -> container.statements.transformFlat { statement ->
val newStatements = val newStatements =
if (statement is IrFunction) withinScope(statement) { transformFunctionFlat(statement) } if (statement is IrFunction) withinScope(statement) { transformFunctionFlat(statement) }