Merge pull request #2240 from JetBrains/rr/minamoto/ir-IrFunctionInlineBodyImpl

[IR] introduced additional field 'inlineFunctionSymbol' to IrReturnableBlock
This commit is contained in:
Vasily Levchenko
2019-04-05 11:49:08 +03:00
committed by GitHub
4 changed files with 25 additions and 39 deletions
@@ -194,7 +194,7 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoidW
symbol = irReturnableBlockSymbol, symbol = irReturnableBlockSymbol,
origin = if (isCoroutineIntrinsicCall) CoroutineIntrinsicLambdaOrigin else null, origin = if (isCoroutineIntrinsicCall) CoroutineIntrinsicLambdaOrigin else null,
statements = statements, statements = statements,
sourceFileSymbol = sourceFile.symbol inlineFunctionSymbol = callee.symbol
).apply { ).apply {
transformChildrenVoid(object : IrElementTransformerVoid() { transformChildrenVoid(object : IrElementTransformerVoid() {
override fun visitReturn(expression: IrReturn): IrExpression { override fun visitReturn(expression: IrReturn): IrExpression {
@@ -18,8 +18,11 @@ 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.declarations.name
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.util.file
interface IrContainerExpression : IrExpression, IrStatementContainer { interface IrContainerExpression : IrExpression, IrStatementContainer {
val origin: IrStatementOrigin? val origin: IrStatementOrigin?
@@ -38,6 +41,13 @@ interface IrComposite : IrContainerExpression {
interface IrReturnableBlock : IrBlock, IrSymbolOwner, IrReturnTarget { interface IrReturnableBlock : IrBlock, IrSymbolOwner, IrReturnTarget {
override val symbol: IrReturnableBlockSymbol override val symbol: IrReturnableBlockSymbol
val sourceFileSymbol: IrFileSymbol? val inlineFunctionSymbol: IrFunctionSymbol?
val sourceFileName: String
} }
val IrReturnableBlock.sourceFileSymbol: IrFileSymbol?
get() = inlineFunctionSymbol?.owner?.file?.symbol
@Deprecated("Please avoid using it")
val IrReturnableBlock.sourceFileName: String
get() = sourceFileSymbol?.owner?.name ?: "no source file"
@@ -18,11 +18,10 @@ 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.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 +65,12 @@ 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 inlineFunctionSymbol: IrFunctionSymbol? = null
) : ) :
IrContainerExpressionBase(startOffset, endOffset, type, origin), IrContainerExpressionBase(startOffset, endOffset, type, origin),
IrReturnableBlock { IrReturnableBlock {
@@ -85,29 +84,8 @@ class IrReturnableBlockImpl(
symbol: IrReturnableBlockSymbol, symbol: IrReturnableBlockSymbol,
origin: IrStatementOrigin?, origin: IrStatementOrigin?,
statements: List<IrStatement>, statements: List<IrStatement>,
sourceFileSymbol: IrFileSymbol? = null inlineFunctionSymbol: IrFunctionSymbol? = null
) : this(startOffset, endOffset, type, symbol, origin, sourceFileSymbol) { ) : this(startOffset, endOffset, type, symbol, origin, inlineFunctionSymbol) {
this.statements.addAll(statements)
}
constructor(
startOffset: Int,
endOffset: Int,
type: IrType,
descriptor: FunctionDescriptor,
origin: IrStatementOrigin? = null,
sourceFileSymbol: IrFileSymbol? = null
) : this(startOffset, endOffset, type, IrReturnableBlockSymbolImpl(descriptor), origin, sourceFileSymbol)
constructor(
startOffset: Int,
endOffset: Int,
type: IrType,
descriptor: FunctionDescriptor,
origin: IrStatementOrigin?,
statements: List<IrStatement>,
sourceFileSymbol: IrFileSymbol? = null
) : this(startOffset, endOffset, type, descriptor, origin, sourceFileSymbol) {
this.statements.addAll(statements) this.statements.addAll(statements)
} }
@@ -115,8 +93,6 @@ class IrReturnableBlockImpl(
symbol.bind(this) symbol.bind(this)
} }
override val sourceFileName: String = sourceFileSymbol?.owner?.fileEntry?.name ?: "no source file"
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitBlock(this, data) visitor.visitBlock(this, data)
@@ -374,7 +374,7 @@ open class DeepCopyIrTreeWithSymbols(
symbolRemapper.getReferencedReturnableBlock(expression.symbol), symbolRemapper.getReferencedReturnableBlock(expression.symbol),
mapStatementOrigin(expression.origin), mapStatementOrigin(expression.origin),
expression.statements.map { it.transform() }, expression.statements.map { it.transform() },
expression.sourceFileSymbol expression.inlineFunctionSymbol
) )
else else
IrBlockImpl( IrBlockImpl(