[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.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)
} }
} }
} }