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,
origin = if (isCoroutineIntrinsicCall) CoroutineIntrinsicLambdaOrigin else null,
statements = statements,
sourceFileSymbol = sourceFile.symbol
inlineFunctionSymbol = callee.symbol
).apply {
transformChildrenVoid(object : IrElementTransformerVoid() {
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.IrSymbolOwner
import org.jetbrains.kotlin.ir.declarations.name
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.util.file
interface IrContainerExpression : IrExpression, IrStatementContainer {
val origin: IrStatementOrigin?
@@ -38,6 +41,13 @@ interface IrComposite : IrContainerExpression {
interface IrReturnableBlock : IrBlock, IrSymbolOwner, IrReturnTarget {
override val symbol: IrReturnableBlockSymbol
val sourceFileSymbol: IrFileSymbol?
val sourceFileName: String
}
val inlineFunctionSymbol: IrFunctionSymbol?
}
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.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 +65,12 @@ 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 inlineFunctionSymbol: IrFunctionSymbol? = null
) :
IrContainerExpressionBase(startOffset, endOffset, type, origin),
IrReturnableBlock {
@@ -85,29 +84,8 @@ class IrReturnableBlockImpl(
symbol: IrReturnableBlockSymbol,
origin: IrStatementOrigin?,
statements: List<IrStatement>,
sourceFileSymbol: IrFileSymbol? = null
) : this(startOffset, endOffset, type, symbol, origin, sourceFileSymbol) {
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) {
inlineFunctionSymbol: IrFunctionSymbol? = null
) : this(startOffset, endOffset, type, symbol, origin, inlineFunctionSymbol) {
this.statements.addAll(statements)
}
@@ -115,8 +93,6 @@ class IrReturnableBlockImpl(
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 =
visitor.visitBlock(this, data)
@@ -129,4 +105,4 @@ class IrReturnableBlockImpl(
statements[i] = irStatement.transform(transformer, data)
}
}
}
}
@@ -374,7 +374,7 @@ open class DeepCopyIrTreeWithSymbols(
symbolRemapper.getReferencedReturnableBlock(expression.symbol),
mapStatementOrigin(expression.origin),
expression.statements.map { it.transform() },
expression.sourceFileSymbol
expression.inlineFunctionSymbol
)
else
IrBlockImpl(