Replace all usages of inlineFunctionSymbol with inlineFunction
This commit is contained in:
+6
-8
@@ -7,6 +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.backend.common.lower.coroutines.getOrCreateFunctionWithContinuationStub
|
||||
import org.jetbrains.kotlin.backend.common.lower.inline.InlinerExpressionLocationHint
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
@@ -17,9 +18,6 @@ import org.jetbrains.kotlin.backend.konan.descriptors.*
|
||||
import org.jetbrains.kotlin.backend.konan.ir.*
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.coverage.LLVMCoverageInstrumentation
|
||||
import org.jetbrains.kotlin.backend.konan.lower.*
|
||||
import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_STATIC_GLOBAL_INITIALIZER
|
||||
import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_STATIC_STANDALONE_THREAD_LOCAL_INITIALIZER
|
||||
import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_STATIC_THREAD_LOCAL_INITIALIZER
|
||||
import org.jetbrains.kotlin.builtins.UnsignedType
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
@@ -335,7 +333,7 @@ internal class CodeGeneratorVisitor(
|
||||
val functionContext = findCodeContext(symbol.owner, currentCodeContext) {
|
||||
val declaration = (this as? FunctionScope)?.declaration
|
||||
val returnableBlock = (this as? ReturnableBlockScope)?.returnableBlock
|
||||
val inlinedFunction = returnableBlock?.inlineFunctionSymbol?.owner
|
||||
val inlinedFunction = returnableBlock?.inlineFunction
|
||||
declaration == it || inlinedFunction == it
|
||||
} ?: return null
|
||||
|
||||
@@ -1948,7 +1946,7 @@ internal class CodeGeneratorVisitor(
|
||||
|
||||
//-------------------------------------------------------------------------//
|
||||
private inner class ReturnableBlockScope(val returnableBlock: IrReturnableBlock, val resultSlot: LLVMValueRef?) :
|
||||
FileScope(returnableBlock.inlineFunctionSymbol?.owner?.let {
|
||||
FileScope(returnableBlock.inlineFunction?.let {
|
||||
generationState.inlineFunctionOrigins[it]?.irFile ?: it.fileOrNull
|
||||
}
|
||||
?: (currentCodeContext.fileScope() as? FileScope)?.file
|
||||
@@ -1957,13 +1955,13 @@ internal class CodeGeneratorVisitor(
|
||||
var bbExit : LLVMBasicBlockRef? = null
|
||||
var resultPhi : LLVMValueRef? = null
|
||||
private val functionScope by lazy {
|
||||
returnableBlock.inlineFunctionSymbol?.owner?.let {
|
||||
returnableBlock.inlineFunction?.let {
|
||||
it.scope(file().fileEntry.line(generationState.inlineFunctionOrigins[it]?.startOffset ?: it.startOffset))
|
||||
}
|
||||
}
|
||||
|
||||
private fun getExit(): LLVMBasicBlockRef {
|
||||
val location = returnableBlock.inlineFunctionSymbol?.owner?.let {
|
||||
val location = returnableBlock.inlineFunction?.let {
|
||||
location(generationState.inlineFunctionOrigins[it]?.endOffset ?: it.endOffset)
|
||||
} ?: returnableBlock.statements.lastOrNull()?.let {
|
||||
location(it.endOffset)
|
||||
@@ -2006,7 +2004,7 @@ internal class CodeGeneratorVisitor(
|
||||
override fun returnableBlockScope(): CodeContext? = this
|
||||
|
||||
override fun location(offset: Int): LocationInfo? {
|
||||
return if (returnableBlock.inlineFunctionSymbol != null) {
|
||||
return if (returnableBlock.inlineFunction != null) {
|
||||
val diScope = functionScope ?: return null
|
||||
val inlinedAt = outerContext.location(returnableBlock.startOffset) ?: return null
|
||||
LocationInfo(diScope, file.fileEntry.line(offset), file.fileEntry.column(offset), inlinedAt)
|
||||
|
||||
+1
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
package org.jetbrains.kotlin.backend.konan.llvm.coverage
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.ir.sourceFileSymbol
|
||||
import org.jetbrains.kotlin.backend.common.pop
|
||||
import org.jetbrains.kotlin.backend.common.push
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
|
||||
+15
-7
@@ -5,8 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.konan.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.*
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineDeclaration
|
||||
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
|
||||
import org.jetbrains.kotlin.backend.common.lower.*
|
||||
import org.jetbrains.kotlin.backend.common.peek
|
||||
import org.jetbrains.kotlin.backend.common.pop
|
||||
import org.jetbrains.kotlin.backend.common.push
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
import org.jetbrains.kotlin.backend.konan.cgen.*
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.allOverriddenFunctions
|
||||
@@ -15,7 +20,10 @@ import org.jetbrains.kotlin.backend.konan.ir.*
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.IntrinsicType
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.tryGetIntrinsicType
|
||||
import org.jetbrains.kotlin.backend.konan.serialization.resolveFakeOverrideMaybeAbstract
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
@@ -39,12 +47,12 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||
import org.jetbrains.kotlin.konan.ForeignExceptionMode
|
||||
import org.jetbrains.kotlin.konan.library.KonanLibrary
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
import org.jetbrains.kotlin.konan.ForeignExceptionMode
|
||||
import org.jetbrains.kotlin.konan.library.KonanLibrary
|
||||
|
||||
internal class InteropLowering(generationState: NativeGenerationState) : FileLoweringPass {
|
||||
// TODO: merge these lowerings.
|
||||
@@ -693,7 +701,7 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) :
|
||||
}
|
||||
|
||||
override fun visitBlock(expression: IrBlock): IrExpression {
|
||||
if (expression is IrReturnableBlock && expression.inlineFunctionSymbol?.isAutoreleasepool() == true) {
|
||||
if (expression is IrReturnableBlock && expression.inlineFunction?.isAutoreleasepool() == true) {
|
||||
// Prohibit calling suspend functions from `autoreleasepool {}` block.
|
||||
// See https://youtrack.jetbrains.com/issue/KT-50786 for more details.
|
||||
// Note: we can't easily check this in frontend, because we need to prohibit indirect cases like
|
||||
@@ -722,8 +730,8 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) :
|
||||
return super.visitBlock(expression)
|
||||
}
|
||||
|
||||
private fun IrFunctionSymbol.isAutoreleasepool(): Boolean {
|
||||
return this.owner.name.asString() == "autoreleasepool" && this.owner.parent.let { parent ->
|
||||
private fun IrFunction.isAutoreleasepool(): Boolean {
|
||||
return this.name.asString() == "autoreleasepool" && this.parent.let { parent ->
|
||||
parent is IrPackageFragment && parent.fqName == InteropFqNames.packageName
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -159,7 +159,7 @@ internal class RedundantCoercionsCleaner(val context: Context) : FileLoweringPas
|
||||
symbol = newSymbol,
|
||||
origin = origin,
|
||||
statements = statements,
|
||||
inlineFunctionSymbol = inlineFunctionSymbol)
|
||||
)
|
||||
}
|
||||
/*
|
||||
* Visitor below requires being very careful when changing it.
|
||||
|
||||
+8
-4
@@ -6,10 +6,13 @@
|
||||
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.backend.common.lower.createIrBuilder
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
import org.jetbrains.kotlin.ir.builders.irCall
|
||||
import org.jetbrains.kotlin.ir.builders.irReturn
|
||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
@@ -51,10 +54,11 @@ internal class ReturnsInsertionLowering(val context: Context) : FileLoweringPass
|
||||
override fun visitBlock(expression: IrBlock) {
|
||||
expression.acceptChildrenVoid(this)
|
||||
if (expression !is IrReturnableBlock) return
|
||||
if (expression.inlineFunctionSymbol?.owner?.returnType == context.irBuiltIns.unitType) {
|
||||
val offset = (expression.statements.lastOrNull() ?: expression).endOffset
|
||||
if (expression.inlineFunction?.returnType == context.irBuiltIns.unitType) {
|
||||
val container = expression.innerInlinedBlockOrThis.statements
|
||||
val offset = (container.lastOrNull() ?: expression).endOffset
|
||||
context.createIrBuilder(expression.symbol, offset, offset).run {
|
||||
expression.statements += irReturn(irCall(symbols.theUnitInstance, context.irBuiltIns.unitType))
|
||||
container += irReturn(irCall(symbols.theUnitInstance, context.irBuiltIns.unitType))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user