From 888641e7f119a326d53755e27c622e81fbcffe9a Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Mon, 11 Feb 2019 16:27:09 +0300 Subject: [PATCH] Use file symbol instead of a file name string in IrReturnableBlockImpl --- .../inline/DeepCopyIrTreeWithDescriptors.kt | 14 +++++++------- .../js/lower/inline/FunctionInlining.kt | 5 ++--- .../ir/backend/js/lower/inline/ModuleIndex.kt | 6 ------ .../kotlin/ir/expressions/IrBlock.kt | 2 ++ .../kotlin/ir/expressions/impl/IrBlockImpl.kt | 19 +++++++++++-------- .../ir/util/DeepCopyIrTreeWithSymbols.kt | 2 +- .../org/jetbrains/kotlin/ir/util/IrUtils.kt | 9 +++++++++ 7 files changed, 32 insertions(+), 25 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/DeepCopyIrTreeWithDescriptors.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/DeepCopyIrTreeWithDescriptors.kt index e8234686160..9a819158e04 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/DeepCopyIrTreeWithDescriptors.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/DeepCopyIrTreeWithDescriptors.kt @@ -873,13 +873,13 @@ internal class DeepCopyIrTreeWithDescriptors(val targetDescriptor: FunctionDescr override fun visitBlock(expression: IrBlock): IrBlock { return if (expression is IrReturnableBlock) { IrReturnableBlockImpl( - startOffset = expression.startOffset, - endOffset = expression.endOffset, - type = expression.type, - descriptor = expression.descriptor, - origin = mapStatementOrigin(expression.origin), - statements = expression.statements.map { it.transform(this, null) }, - sourceFileName = expression.sourceFileName + startOffset = expression.startOffset, + endOffset = expression.endOffset, + type = expression.type, + descriptor = expression.descriptor, + origin = mapStatementOrigin(expression.origin), + statements = expression.statements.map { it.transform(this, null) }, + sourceFileSymbol = expression.sourceFileSymbol ) } else { IrBlockImpl( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/FunctionInlining.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/FunctionInlining.kt index 1dab156148f..1571131e2bb 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/FunctionInlining.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/FunctionInlining.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrReturnableBlockImpl import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl import org.jetbrains.kotlin.ir.symbols.impl.IrReturnableBlockSymbolImpl import org.jetbrains.kotlin.ir.types.toKotlinType +import org.jetbrains.kotlin.ir.util.file import org.jetbrains.kotlin.ir.util.getArguments import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.visitors.IrElementTransformer @@ -269,8 +270,6 @@ private class Inliner(val globalSubstituteMap: MutableMap() - val declarationToFile = mutableMapOf() init { addModule(module) @@ -63,11 +62,6 @@ class ModuleIndex(val module: IrModuleFragment) { super.visitFunction(declaration) functions[declaration.descriptor] = declaration } - - override fun visitDeclaration(declaration: IrDeclaration) { - super.visitDeclaration(declaration) - declarationToFile[declaration.descriptor] = currentFile!!.path - } }) } } 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 a046c73332a..68061858365 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 @@ -18,6 +18,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.IrReturnableBlockSymbol interface IrContainerExpression : IrExpression, IrStatementContainer { @@ -37,5 +38,6 @@ interface IrComposite : IrContainerExpression { interface IrReturnableBlock : IrBlock, IrSymbolOwner, IrReturnTarget { override val symbol: IrReturnableBlockSymbol + val sourceFileSymbol: IrFileSymbol? val sourceFileName: String } \ 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 5ba32546122..bcb038df76e 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,9 +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.IrReturnableBlockSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrReturnableBlockSymbolImpl import org.jetbrains.kotlin.ir.types.IrType @@ -63,14 +65,13 @@ fun IrBlockImpl.inlineStatement(statement: IrStatement) { } } - class IrReturnableBlockImpl( startOffset: Int, endOffset: Int, type: IrType, override val symbol: IrReturnableBlockSymbol, origin: IrStatementOrigin? = null, - override val sourceFileName: String = "no source file" + override val sourceFileSymbol: IrFileSymbol? = null ) : IrContainerExpressionBase(startOffset, endOffset, type, origin), IrReturnableBlock { @@ -84,8 +85,8 @@ class IrReturnableBlockImpl( symbol: IrReturnableBlockSymbol, origin: IrStatementOrigin?, statements: List, - sourceFileName: String = "no source file" - ) : this(startOffset, endOffset, type, symbol, origin, sourceFileName) { + sourceFileSymbol: IrFileSymbol? = null + ) : this(startOffset, endOffset, type, symbol, origin, sourceFileSymbol) { this.statements.addAll(statements) } @@ -95,8 +96,8 @@ class IrReturnableBlockImpl( type: IrType, descriptor: FunctionDescriptor, origin: IrStatementOrigin? = null, - sourceFileName: String = "no source file" - ) : this(startOffset, endOffset, type, IrReturnableBlockSymbolImpl(descriptor), origin, sourceFileName) + sourceFileSymbol: IrFileSymbol? = null + ) : this(startOffset, endOffset, type, IrReturnableBlockSymbolImpl(descriptor), origin, sourceFileSymbol) constructor( startOffset: Int, @@ -105,8 +106,8 @@ class IrReturnableBlockImpl( descriptor: FunctionDescriptor, origin: IrStatementOrigin?, statements: List, - sourceFileName: String = "no source file" - ) : this(startOffset, endOffset, type, descriptor, origin, sourceFileName) { + sourceFileSymbol: IrFileSymbol? = null + ) : this(startOffset, endOffset, type, descriptor, origin, sourceFileSymbol) { this.statements.addAll(statements) } @@ -114,6 +115,8 @@ class IrReturnableBlockImpl( symbol.bind(this) } + override val sourceFileName: String = sourceFileSymbol?.owner?.fileEntry?.name ?: "no source file" + override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitBlock(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index 3f239aa98fd..245134f53c7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -383,7 +383,7 @@ open class DeepCopyIrTreeWithSymbols( symbolRemapper.getReferencedReturnableBlock(expression.symbol), mapStatementOrigin(expression.origin), expression.statements.map { it.transform() }, - expression.sourceFileName + expression.sourceFileSymbol ) else IrBlockImpl( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index 61bac4fd117..01afde35c4f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -569,3 +569,12 @@ private fun IrCall.copyTypeAndValueArgumentsFrom( putValueArgument(toValueArgumentIndex++, call.getValueArgument(fromValueArgumentIndex++)) } } + +val IrDeclaration.file: IrFile get() = parent.let { + when (it) { + is IrFile -> it + is IrPackageFragment -> TODO("Unknown file") + is IrDeclaration -> it.file + else -> TODO("Unexpected declaration parent") + } +} \ No newline at end of file