[IR] Move some inline utils from backend.common into ir.util

This commit is contained in:
Ivan Kylchik
2023-05-28 22:58:09 +02:00
committed by Space Team
parent 55bfd3efcb
commit abbafc0b2a
19 changed files with 68 additions and 55 deletions
@@ -127,31 +127,6 @@ fun IrInlinable.inline(target: IrDeclarationParent, arguments: List<IrValueDecla
}
}
val IrInlinedFunctionBlock.inlineDeclaration: IrDeclaration
get() = when (val element = inlinedElement) {
is IrFunction -> element
is IrFunctionExpression -> element.function
is IrFunctionReference -> element.symbol.owner
is IrPropertyReference -> element.symbol.owner
else -> throw AssertionError("Not supported ir element for inlining ${element.dump()}")
}
private val IrInlinedFunctionBlock.inlineFunction: IrFunction?
get() = when (val element = inlinedElement) {
is IrFunction -> element
is IrFunctionExpression -> element.function
is IrFunctionReference -> element.symbol.owner.takeIf { it.isInline }
else -> null
}
fun IrInlinedFunctionBlock.isFunctionInlining(): Boolean {
return this.inlinedElement is IrFunction
}
fun IrInlinedFunctionBlock.isLambdaInlining(): Boolean {
return !isFunctionInlining()
}
fun IrInlinedFunctionBlock.getAdditionalStatementsFromInlinedBlock(): List<IrStatement> {
return this.statements
.filterIsInstance<IrComposite>()
@@ -198,11 +173,3 @@ fun IrInlinedFunctionBlock.putStatementsInFrontOfInlinedFunction(statements: Lis
this.statements.addAll(if (insertAfter == -1) 0 else insertAfter + 1, statements)
}
val IrContainerExpression.innerInlinedBlockOrThis: IrContainerExpression
get() = (this as? IrReturnableBlock)?.statements?.singleOrNull() as? IrInlinedFunctionBlock ?: this
val IrReturnableBlock.inlineFunction: IrFunction?
get() = (this.statements.singleOrNull() as? IrInlinedFunctionBlock)?.inlineFunction
val IrReturnableBlock.sourceFileSymbol: IrFileSymbol?
get() = inlineFunction?.fileOrNull?.symbol
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.isUnit
import org.jetbrains.kotlin.ir.types.typeWith
import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.ir.util.inlineFunction
import org.jetbrains.kotlin.ir.util.statements
fun IrReturnTarget.returnType(context: CommonBackendContext) =
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.backend.common.lower
import org.jetbrains.kotlin.backend.common.ir.innerInlinedBlockOrThis
import org.jetbrains.kotlin.ir.util.innerInlinedBlockOrThis
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.declarations.*
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.ir.getAdditionalStatementsFromInlinedBlock
import org.jetbrains.kotlin.backend.common.ir.getNonDefaultAdditionalStatementsFromInlinedBlock
import org.jetbrains.kotlin.backend.common.ir.getOriginalStatementsFromInlinedBlock
import org.jetbrains.kotlin.backend.common.ir.isFunctionInlining
import org.jetbrains.kotlin.ir.util.isFunctionInlining
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.backend.common.lower
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.common.descriptors.synthesizedString
import org.jetbrains.kotlin.backend.common.ir.isFunctionInlining
import org.jetbrains.kotlin.ir.util.isFunctionInlining
import org.jetbrains.kotlin.backend.common.lower.inline.isInlineParameter
import org.jetbrains.kotlin.backend.common.runOnFilePostfix
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities