From 6f9feacf6e43d8b97a560c11e8628b560241af05 Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Fri, 29 Mar 2019 16:33:24 +0300 Subject: [PATCH] [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. --- .../kotlin/ir/expressions/IrBlock.kt | 2 ++ .../kotlin/ir/expressions/impl/IrBlockImpl.kt | 22 ++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt index 68061858365..c6c34dff971 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt @@ -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? } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt index bcb038df76e..bb23309dfb3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt @@ -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, - 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) } } -} \ No newline at end of file +}