FIR2IR: don't merge symbol tables as it's no more needed
This commit is contained in:
committed by
Space Team
parent
6b7a5c9aa0
commit
33daca6809
@@ -496,8 +496,7 @@ class Fir2IrConverter(
|
|||||||
): SymbolTable =
|
): SymbolTable =
|
||||||
dependentComponents.lastOrNull()?.symbolTable ?: SymbolTable(
|
dependentComponents.lastOrNull()?.symbolTable ?: SymbolTable(
|
||||||
signaturer = WrappedDescriptorSignatureComposer(signaturer, signatureComposer),
|
signaturer = WrappedDescriptorSignatureComposer(signaturer, signatureComposer),
|
||||||
irFactory = irFactory,
|
irFactory = irFactory
|
||||||
dependentTables = dependentComponents.map { it.symbolTable }
|
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun createModuleFragmentWithSymbolTable(
|
private fun createModuleFragmentWithSymbolTable(
|
||||||
|
|||||||
@@ -84,8 +84,7 @@ interface ReferenceSymbolTable {
|
|||||||
open class SymbolTable(
|
open class SymbolTable(
|
||||||
val signaturer: IdSignatureComposer,
|
val signaturer: IdSignatureComposer,
|
||||||
val irFactory: IrFactory,
|
val irFactory: IrFactory,
|
||||||
val nameProvider: NameProvider = NameProvider.DEFAULT,
|
val nameProvider: NameProvider = NameProvider.DEFAULT
|
||||||
val dependentTables: List<SymbolTable> = emptyList(),
|
|
||||||
) : ReferenceSymbolTable {
|
) : ReferenceSymbolTable {
|
||||||
|
|
||||||
val lock = IrLock()
|
val lock = IrLock()
|
||||||
@@ -213,10 +212,10 @@ open class SymbolTable(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private open inner class FlatSymbolTable<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>>(
|
private open inner class FlatSymbolTable<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>> :
|
||||||
val descriptorToSymbol: HashMap<D, S> = hashMapOf(),
|
SymbolTableBase<D, B, S>(lock) {
|
||||||
val idSigToSymbol: HashMap<IdSignature, S> = hashMapOf()
|
val descriptorToSymbol = hashMapOf<D, S>()
|
||||||
) : SymbolTableBase<D, B, S>(lock) {
|
val idSigToSymbol = hashMapOf<IdSignature, S>()
|
||||||
|
|
||||||
override fun signature(descriptor: D): IdSignature? =
|
override fun signature(descriptor: D): IdSignature? =
|
||||||
signaturer.composeSignature(descriptor)
|
signaturer.composeSignature(descriptor)
|
||||||
@@ -245,17 +244,11 @@ open class SymbolTable(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class EnumEntrySymbolTable(
|
private inner class EnumEntrySymbolTable : FlatSymbolTable<ClassDescriptor, IrEnumEntry, IrEnumEntrySymbol>() {
|
||||||
descriptorToSymbol: HashMap<ClassDescriptor, IrEnumEntrySymbol> = hashMapOf(),
|
|
||||||
idSigToSymbol: HashMap<IdSignature, IrEnumEntrySymbol> = hashMapOf()
|
|
||||||
) : FlatSymbolTable<ClassDescriptor, IrEnumEntry, IrEnumEntrySymbol>(descriptorToSymbol, idSigToSymbol) {
|
|
||||||
override fun signature(descriptor: ClassDescriptor): IdSignature? = signaturer.composeEnumEntrySignature(descriptor)
|
override fun signature(descriptor: ClassDescriptor): IdSignature? = signaturer.composeEnumEntrySignature(descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class FieldSymbolTable(
|
private inner class FieldSymbolTable : FlatSymbolTable<PropertyDescriptor, IrField, IrFieldSymbol>() {
|
||||||
descriptorToSymbol: HashMap<PropertyDescriptor, IrFieldSymbol> = hashMapOf(),
|
|
||||||
idSigToSymbol: HashMap<IdSignature, IrFieldSymbol> = hashMapOf()
|
|
||||||
) : FlatSymbolTable<PropertyDescriptor, IrField, IrFieldSymbol>(descriptorToSymbol, idSigToSymbol) {
|
|
||||||
override fun signature(descriptor: PropertyDescriptor): IdSignature? = signaturer.composeFieldSignature(descriptor)
|
override fun signature(descriptor: PropertyDescriptor): IdSignature? = signaturer.composeFieldSignature(descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -372,32 +365,18 @@ open class SymbolTable(
|
|||||||
currentScope?.dump() ?: "<none>"
|
currentScope?.dump() ?: "<none>"
|
||||||
}
|
}
|
||||||
|
|
||||||
private val externalPackageFragmentTable: FlatSymbolTable<PackageFragmentDescriptor, IrExternalPackageFragment, IrExternalPackageFragmentSymbol> =
|
private val externalPackageFragmentTable =
|
||||||
mergeFlatTables(dependentTables) { it.externalPackageFragmentTable }
|
FlatSymbolTable<PackageFragmentDescriptor, IrExternalPackageFragment, IrExternalPackageFragmentSymbol>()
|
||||||
private val scriptSymbolTable: FlatSymbolTable<ScriptDescriptor, IrScript, IrScriptSymbol> =
|
private val scriptSymbolTable = FlatSymbolTable<ScriptDescriptor, IrScript, IrScriptSymbol>()
|
||||||
mergeFlatTables(dependentTables) { it.scriptSymbolTable }
|
private val classSymbolTable = FlatSymbolTable<ClassDescriptor, IrClass, IrClassSymbol>()
|
||||||
private val classSymbolTable: FlatSymbolTable<ClassDescriptor, IrClass, IrClassSymbol> =
|
private val constructorSymbolTable = FlatSymbolTable<ClassConstructorDescriptor, IrConstructor, IrConstructorSymbol>()
|
||||||
mergeFlatTables(dependentTables) { it.classSymbolTable }
|
private val enumEntrySymbolTable = EnumEntrySymbolTable()
|
||||||
private val constructorSymbolTable: FlatSymbolTable<ClassConstructorDescriptor, IrConstructor, IrConstructorSymbol> =
|
private val fieldSymbolTable = FieldSymbolTable()
|
||||||
mergeFlatTables(dependentTables) { it.constructorSymbolTable }
|
private val simpleFunctionSymbolTable = FlatSymbolTable<FunctionDescriptor, IrSimpleFunction, IrSimpleFunctionSymbol>()
|
||||||
private val enumEntrySymbolTable: EnumEntrySymbolTable = run {
|
private val propertySymbolTable = FlatSymbolTable<PropertyDescriptor, IrProperty, IrPropertySymbol>()
|
||||||
val (descriptorToSymbol, idSigToSymbol) = mergeTables(dependentTables) { it.enumEntrySymbolTable }
|
private val typeAliasSymbolTable = FlatSymbolTable<TypeAliasDescriptor, IrTypeAlias, IrTypeAliasSymbol>()
|
||||||
EnumEntrySymbolTable(descriptorToSymbol, idSigToSymbol)
|
|
||||||
}
|
|
||||||
private val fieldSymbolTable: FieldSymbolTable = run {
|
|
||||||
val (descriptorToSymbol, idSigToSymbol) = mergeTables(dependentTables) { it.fieldSymbolTable }
|
|
||||||
FieldSymbolTable(descriptorToSymbol, idSigToSymbol)
|
|
||||||
}
|
|
||||||
private val simpleFunctionSymbolTable: FlatSymbolTable<FunctionDescriptor, IrSimpleFunction, IrSimpleFunctionSymbol> =
|
|
||||||
mergeFlatTables(dependentTables) { it.simpleFunctionSymbolTable }
|
|
||||||
private val propertySymbolTable: FlatSymbolTable<PropertyDescriptor, IrProperty, IrPropertySymbol> =
|
|
||||||
mergeFlatTables(dependentTables) { it.propertySymbolTable }
|
|
||||||
private val typeAliasSymbolTable: FlatSymbolTable<TypeAliasDescriptor, IrTypeAlias, IrTypeAliasSymbol> =
|
|
||||||
mergeFlatTables(dependentTables) { it.typeAliasSymbolTable }
|
|
||||||
|
|
||||||
private val globalTypeParameterSymbolTable: FlatSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol> =
|
|
||||||
mergeFlatTables(dependentTables) { it.globalTypeParameterSymbolTable }
|
|
||||||
|
|
||||||
|
private val globalTypeParameterSymbolTable = FlatSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
||||||
private val scopedTypeParameterSymbolTable by threadLocal {
|
private val scopedTypeParameterSymbolTable by threadLocal {
|
||||||
ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
||||||
}
|
}
|
||||||
@@ -414,28 +393,6 @@ open class SymbolTable(
|
|||||||
listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable, localDelegatedPropertySymbolTable)
|
listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable, localDelegatedPropertySymbolTable)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>> mergeFlatTables(
|
|
||||||
dependentTables: List<SymbolTable>,
|
|
||||||
mapFunc: (SymbolTable) -> FlatSymbolTable<D, B, S>
|
|
||||||
): FlatSymbolTable<D, B, S> {
|
|
||||||
val (descriptorToSymbol, idSigToSymbol) = mergeTables(dependentTables, mapFunc)
|
|
||||||
return FlatSymbolTable(descriptorToSymbol, idSigToSymbol)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun <D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>> mergeTables(
|
|
||||||
dependentTables: List<SymbolTable>,
|
|
||||||
mapFunc: (SymbolTable) -> FlatSymbolTable<D, B, S>
|
|
||||||
): Pair<HashMap<D, S>, HashMap<IdSignature, S>> {
|
|
||||||
val descriptorToSymbol = hashMapOf<D, S>()
|
|
||||||
val idSigToSymbol = hashMapOf<IdSignature, S>()
|
|
||||||
for (dependentTable in dependentTables) {
|
|
||||||
val flatSymbolTable = mapFunc(dependentTable)
|
|
||||||
descriptorToSymbol.putAll(flatSymbolTable.descriptorToSymbol)
|
|
||||||
idSigToSymbol.putAll(flatSymbolTable.idSigToSymbol)
|
|
||||||
}
|
|
||||||
return Pair(descriptorToSymbol, idSigToSymbol)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) =
|
fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) =
|
||||||
externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) }
|
externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) }
|
||||||
|
|||||||
Reference in New Issue
Block a user