[IR] introduced additional field 'inlineFunctionSymbol' to IrReturnableBlock
This change let backend calculate and bind right function to the code block on generation debug information e.g. for Kotlin/Native backend this let codegnerator to produce DILocation(..., inlinedAt:..) with correct value for inlinedAt parameter, thus signifiacntly improve behaviour of debugger.
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.expressions
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrReturnTarget
|
import org.jetbrains.kotlin.ir.declarations.IrReturnTarget
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSymbolOwner
|
import org.jetbrains.kotlin.ir.declarations.IrSymbolOwner
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
|
||||||
|
|
||||||
interface IrContainerExpression : IrExpression, IrStatementContainer {
|
interface IrContainerExpression : IrExpression, IrStatementContainer {
|
||||||
@@ -40,4 +41,5 @@ interface IrReturnableBlock : IrBlock, IrSymbolOwner, IrReturnTarget {
|
|||||||
override val symbol: IrReturnableBlockSymbol
|
override val symbol: IrReturnableBlockSymbol
|
||||||
val sourceFileSymbol: IrFileSymbol?
|
val sourceFileSymbol: IrFileSymbol?
|
||||||
val sourceFileName: String
|
val sourceFileName: String
|
||||||
|
val inlineFunctionSymbol: IrFunctionSymbol?
|
||||||
}
|
}
|
||||||
@@ -18,11 +18,11 @@ package org.jetbrains.kotlin.ir.expressions.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlock
|
import org.jetbrains.kotlin.ir.expressions.IrBlock
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock
|
import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrReturnableBlockSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrReturnableBlockSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -66,12 +66,13 @@ fun IrBlockImpl.inlineStatement(statement: IrStatement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class IrReturnableBlockImpl(
|
class IrReturnableBlockImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
override val symbol: IrReturnableBlockSymbol,
|
override val symbol: IrReturnableBlockSymbol,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
override val sourceFileSymbol: IrFileSymbol? = null
|
override val sourceFileSymbol: IrFileSymbol? = null,
|
||||||
|
override val inlineFunctionSymbol: IrFunctionSymbol? = null
|
||||||
) :
|
) :
|
||||||
IrContainerExpressionBase(startOffset, endOffset, type, origin),
|
IrContainerExpressionBase(startOffset, endOffset, type, origin),
|
||||||
IrReturnableBlock {
|
IrReturnableBlock {
|
||||||
@@ -85,8 +86,9 @@ class IrReturnableBlockImpl(
|
|||||||
symbol: IrReturnableBlockSymbol,
|
symbol: IrReturnableBlockSymbol,
|
||||||
origin: IrStatementOrigin?,
|
origin: IrStatementOrigin?,
|
||||||
statements: List<IrStatement>,
|
statements: List<IrStatement>,
|
||||||
sourceFileSymbol: IrFileSymbol? = null
|
sourceFileSymbol: IrFileSymbol? = null,
|
||||||
) : this(startOffset, endOffset, type, symbol, origin, sourceFileSymbol) {
|
inlineFunctionSymbol: IrFunctionSymbol? = null
|
||||||
|
) : this(startOffset, endOffset, type, symbol, origin, sourceFileSymbol, inlineFunctionSymbol) {
|
||||||
this.statements.addAll(statements)
|
this.statements.addAll(statements)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,4 +131,4 @@ class IrReturnableBlockImpl(
|
|||||||
statements[i] = irStatement.transform(transformer, data)
|
statements[i] = irStatement.transform(transformer, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user