JVM IR: simplify JvmValueClassAbstractLowering.visitReturn
Change the existing IrReturn object instead of returning a new one.
This commit is contained in:
committed by
Space Team
parent
d1f884bad9
commit
2dee47a8c1
+9
-13
@@ -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) }
|
||||||
|
|||||||
Reference in New Issue
Block a user