[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:
Vasily Levchenko
2019-03-29 16:33:24 +03:00
parent a4cbec64b7
commit 6f9feacf6e
2 changed files with 14 additions and 10 deletions
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.ir.declarations.IrReturnTarget
import org.jetbrains.kotlin.ir.declarations.IrSymbolOwner
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
interface IrContainerExpression : IrExpression, IrStatementContainer {
@@ -40,4 +41,5 @@ interface IrReturnableBlock : IrBlock, IrSymbolOwner, IrReturnTarget {
override val symbol: IrReturnableBlockSymbol
val sourceFileSymbol: IrFileSymbol?
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.ir.IrStatement
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.expressions.IrBlock
import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
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.impl.IrReturnableBlockSymbolImpl
import org.jetbrains.kotlin.ir.types.IrType
@@ -66,12 +66,13 @@ fun IrBlockImpl.inlineStatement(statement: IrStatement) {
}
class IrReturnableBlockImpl(
startOffset: Int,
endOffset: Int,
type: IrType,
override val symbol: IrReturnableBlockSymbol,
origin: IrStatementOrigin? = null,
override val sourceFileSymbol: IrFileSymbol? = null
startOffset: Int,
endOffset: Int,
type: IrType,
override val symbol: IrReturnableBlockSymbol,
origin: IrStatementOrigin? = null,
override val sourceFileSymbol: IrFileSymbol? = null,
override val inlineFunctionSymbol: IrFunctionSymbol? = null
) :
IrContainerExpressionBase(startOffset, endOffset, type, origin),
IrReturnableBlock {
@@ -85,8 +86,9 @@ class IrReturnableBlockImpl(
symbol: IrReturnableBlockSymbol,
origin: IrStatementOrigin?,
statements: List<IrStatement>,
sourceFileSymbol: IrFileSymbol? = null
) : this(startOffset, endOffset, type, symbol, origin, sourceFileSymbol) {
sourceFileSymbol: IrFileSymbol? = null,
inlineFunctionSymbol: IrFunctionSymbol? = null
) : this(startOffset, endOffset, type, symbol, origin, sourceFileSymbol, inlineFunctionSymbol) {
this.statements.addAll(statements)
}
@@ -129,4 +131,4 @@ class IrReturnableBlockImpl(
statements[i] = irStatement.transform(transformer, data)
}
}
}
}