[IR] Move some inline utils from backend.common into ir.util
This commit is contained in:
-33
@@ -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) =
|
||||
|
||||
+1
-1
@@ -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.*
|
||||
|
||||
+1
-1
@@ -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.*
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.backend.js.dce
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
|
||||
import org.jetbrains.kotlin.ir.util.inlineFunction
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.hasJsPolyfill
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
|
||||
import org.jetbrains.kotlin.backend.common.ir.innerInlinedBlockOrThis
|
||||
import org.jetbrains.kotlin.ir.util.inlineFunction
|
||||
import org.jetbrains.kotlin.ir.util.innerInlinedBlockOrThis
|
||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.emptyScope
|
||||
|
||||
+3
-3
@@ -5,9 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.jvm.codegen
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineDeclaration
|
||||
import org.jetbrains.kotlin.backend.common.ir.isFunctionInlining
|
||||
import org.jetbrains.kotlin.backend.common.ir.isLambdaInlining
|
||||
import org.jetbrains.kotlin.ir.util.inlineDeclaration
|
||||
import org.jetbrains.kotlin.ir.util.isFunctionInlining
|
||||
import org.jetbrains.kotlin.ir.util.isLambdaInlining
|
||||
import org.jetbrains.kotlin.backend.common.lower.inline.isAdaptedFunctionReference
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.backend.jvm.ir.fileParentBeforeInline
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.backend.jvm.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.ir.getAdditionalStatementsFromInlinedBlock
|
||||
import org.jetbrains.kotlin.backend.common.ir.isFunctionInlining
|
||||
import org.jetbrains.kotlin.ir.util.isFunctionInlining
|
||||
import org.jetbrains.kotlin.backend.common.ir.putStatementBeforeActualInline
|
||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrModulePhase
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
|
||||
+3
@@ -20,6 +20,9 @@ import org.jetbrains.kotlin.ir.builders.irInt
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrBlock
|
||||
import org.jetbrains.kotlin.ir.expressions.IrInlinedFunctionBlock
|
||||
import org.jetbrains.kotlin.ir.util.inlineDeclaration
|
||||
import org.jetbrains.kotlin.ir.util.isFunctionInlining
|
||||
import org.jetbrains.kotlin.ir.util.isLambdaInlining
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
|
||||
+2
-2
@@ -6,8 +6,8 @@
|
||||
package org.jetbrains.kotlin.backend.jvm.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineDeclaration
|
||||
import org.jetbrains.kotlin.backend.common.ir.isFunctionInlining
|
||||
import org.jetbrains.kotlin.ir.util.inlineDeclaration
|
||||
import org.jetbrains.kotlin.ir.util.isFunctionInlining
|
||||
import org.jetbrains.kotlin.backend.common.lower.inline.INLINED_FUNCTION_REFERENCE
|
||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrModulePhase
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
|
||||
+2
-2
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.backend.jvm.lower
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
|
||||
import org.jetbrains.kotlin.backend.common.ScopeWithIr
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineDeclaration
|
||||
import org.jetbrains.kotlin.backend.common.ir.isFunctionInlining
|
||||
import org.jetbrains.kotlin.ir.util.inlineDeclaration
|
||||
import org.jetbrains.kotlin.ir.util.isFunctionInlining
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.backend.jvm.ir.IrInlineScopeResolver
|
||||
import org.jetbrains.kotlin.backend.jvm.ir.findInlineCallSites
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.backend.jvm.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.ir.isFunctionInlining
|
||||
import org.jetbrains.kotlin.ir.util.isFunctionInlining
|
||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.jvm.ir
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineDeclaration
|
||||
import org.jetbrains.kotlin.backend.common.ir.isFunctionInlining
|
||||
import org.jetbrains.kotlin.ir.util.inlineDeclaration
|
||||
import org.jetbrains.kotlin.ir.util.isFunctionInlining
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.ir.util
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
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
|
||||
+1
-1
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.backend.konan.llvm
|
||||
|
||||
import kotlinx.cinterop.*
|
||||
import llvm.*
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
|
||||
import org.jetbrains.kotlin.ir.util.inlineFunction
|
||||
import org.jetbrains.kotlin.backend.common.ir.isUnconditional
|
||||
import org.jetbrains.kotlin.backend.common.lower.coroutines.getOrCreateFunctionWithContinuationStub
|
||||
import org.jetbrains.kotlin.backend.common.lower.inline.InlinerExpressionLocationHint
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
package org.jetbrains.kotlin.backend.konan.llvm.coverage
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.ir.sourceFileSymbol
|
||||
import org.jetbrains.kotlin.ir.util.sourceFileSymbol
|
||||
import org.jetbrains.kotlin.backend.common.pop
|
||||
import org.jetbrains.kotlin.backend.common.push
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.backend.konan.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
|
||||
import org.jetbrains.kotlin.ir.util.inlineFunction
|
||||
import org.jetbrains.kotlin.backend.common.lower.*
|
||||
import org.jetbrains.kotlin.backend.common.peek
|
||||
import org.jetbrains.kotlin.backend.common.pop
|
||||
|
||||
+2
-2
@@ -6,8 +6,8 @@
|
||||
package org.jetbrains.kotlin.backend.konan.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
|
||||
import org.jetbrains.kotlin.backend.common.ir.innerInlinedBlockOrThis
|
||||
import org.jetbrains.kotlin.ir.util.inlineFunction
|
||||
import org.jetbrains.kotlin.ir.util.innerInlinedBlockOrThis
|
||||
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
|
||||
Reference in New Issue
Block a user