From 33daca680959be6605b177d6252905843d0da943 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 11 Jan 2023 13:12:54 +0100 Subject: [PATCH] FIR2IR: don't merge symbol tables as it's no more needed --- .../kotlin/fir/backend/Fir2IrConverter.kt | 3 +- .../jetbrains/kotlin/ir/util/SymbolTable.kt | 79 +++++-------------- 2 files changed, 19 insertions(+), 63 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index cd8a25f6f19..a890d2ed0b1 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -496,8 +496,7 @@ class Fir2IrConverter( ): SymbolTable = dependentComponents.lastOrNull()?.symbolTable ?: SymbolTable( signaturer = WrappedDescriptorSignatureComposer(signaturer, signatureComposer), - irFactory = irFactory, - dependentTables = dependentComponents.map { it.symbolTable } + irFactory = irFactory ) private fun createModuleFragmentWithSymbolTable( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index 9f6d057c8dd..3d41b2b844b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -84,8 +84,7 @@ interface ReferenceSymbolTable { open class SymbolTable( val signaturer: IdSignatureComposer, val irFactory: IrFactory, - val nameProvider: NameProvider = NameProvider.DEFAULT, - val dependentTables: List = emptyList(), + val nameProvider: NameProvider = NameProvider.DEFAULT ) : ReferenceSymbolTable { val lock = IrLock() @@ -213,10 +212,10 @@ open class SymbolTable( } } - private open inner class FlatSymbolTable>( - val descriptorToSymbol: HashMap = hashMapOf(), - val idSigToSymbol: HashMap = hashMapOf() - ) : SymbolTableBase(lock) { + private open inner class FlatSymbolTable> : + SymbolTableBase(lock) { + val descriptorToSymbol = hashMapOf() + val idSigToSymbol = hashMapOf() override fun signature(descriptor: D): IdSignature? = signaturer.composeSignature(descriptor) @@ -245,17 +244,11 @@ open class SymbolTable( } } - private inner class EnumEntrySymbolTable( - descriptorToSymbol: HashMap = hashMapOf(), - idSigToSymbol: HashMap = hashMapOf() - ) : FlatSymbolTable(descriptorToSymbol, idSigToSymbol) { + private inner class EnumEntrySymbolTable : FlatSymbolTable() { override fun signature(descriptor: ClassDescriptor): IdSignature? = signaturer.composeEnumEntrySignature(descriptor) } - private inner class FieldSymbolTable( - descriptorToSymbol: HashMap = hashMapOf(), - idSigToSymbol: HashMap = hashMapOf() - ) : FlatSymbolTable(descriptorToSymbol, idSigToSymbol) { + private inner class FieldSymbolTable : FlatSymbolTable() { override fun signature(descriptor: PropertyDescriptor): IdSignature? = signaturer.composeFieldSignature(descriptor) } @@ -372,32 +365,18 @@ open class SymbolTable( currentScope?.dump() ?: "" } - private val externalPackageFragmentTable: FlatSymbolTable = - mergeFlatTables(dependentTables) { it.externalPackageFragmentTable } - private val scriptSymbolTable: FlatSymbolTable = - mergeFlatTables(dependentTables) { it.scriptSymbolTable } - private val classSymbolTable: FlatSymbolTable = - mergeFlatTables(dependentTables) { it.classSymbolTable } - private val constructorSymbolTable: FlatSymbolTable = - mergeFlatTables(dependentTables) { it.constructorSymbolTable } - private val enumEntrySymbolTable: EnumEntrySymbolTable = run { - val (descriptorToSymbol, idSigToSymbol) = mergeTables(dependentTables) { it.enumEntrySymbolTable } - EnumEntrySymbolTable(descriptorToSymbol, idSigToSymbol) - } - private val fieldSymbolTable: FieldSymbolTable = run { - val (descriptorToSymbol, idSigToSymbol) = mergeTables(dependentTables) { it.fieldSymbolTable } - FieldSymbolTable(descriptorToSymbol, idSigToSymbol) - } - private val simpleFunctionSymbolTable: FlatSymbolTable = - mergeFlatTables(dependentTables) { it.simpleFunctionSymbolTable } - private val propertySymbolTable: FlatSymbolTable = - mergeFlatTables(dependentTables) { it.propertySymbolTable } - private val typeAliasSymbolTable: FlatSymbolTable = - mergeFlatTables(dependentTables) { it.typeAliasSymbolTable } - - private val globalTypeParameterSymbolTable: FlatSymbolTable = - mergeFlatTables(dependentTables) { it.globalTypeParameterSymbolTable } + private val externalPackageFragmentTable = + FlatSymbolTable() + private val scriptSymbolTable = FlatSymbolTable() + private val classSymbolTable = FlatSymbolTable() + private val constructorSymbolTable = FlatSymbolTable() + private val enumEntrySymbolTable = EnumEntrySymbolTable() + private val fieldSymbolTable = FieldSymbolTable() + private val simpleFunctionSymbolTable = FlatSymbolTable() + private val propertySymbolTable = FlatSymbolTable() + private val typeAliasSymbolTable = FlatSymbolTable() + private val globalTypeParameterSymbolTable = FlatSymbolTable() private val scopedTypeParameterSymbolTable by threadLocal { ScopedSymbolTable() } @@ -414,28 +393,6 @@ open class SymbolTable( listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable, localDelegatedPropertySymbolTable) } - private fun > mergeFlatTables( - dependentTables: List, - mapFunc: (SymbolTable) -> FlatSymbolTable - ): FlatSymbolTable { - val (descriptorToSymbol, idSigToSymbol) = mergeTables(dependentTables, mapFunc) - return FlatSymbolTable(descriptorToSymbol, idSigToSymbol) - } - - private fun > mergeTables( - dependentTables: List, - mapFunc: (SymbolTable) -> FlatSymbolTable - ): Pair, HashMap> { - val descriptorToSymbol = hashMapOf() - val idSigToSymbol = hashMapOf() - for (dependentTable in dependentTables) { - val flatSymbolTable = mapFunc(dependentTable) - descriptorToSymbol.putAll(flatSymbolTable.descriptorToSymbol) - idSigToSymbol.putAll(flatSymbolTable.idSigToSymbol) - } - return Pair(descriptorToSymbol, idSigToSymbol) - } - @ObsoleteDescriptorBasedAPI fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) = externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) }