IR: allow SymbolTable descendants

This commit is contained in:
Anton Bannykh
2021-07-06 17:24:56 +03:00
committed by teamcityserver
parent e0570d98b2
commit ba541bd53b
@@ -60,7 +60,7 @@ interface ReferenceSymbolTable {
fun leaveScope(owner: IrDeclaration) fun leaveScope(owner: IrDeclaration)
} }
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
@@ -71,7 +71,7 @@ class SymbolTable(
@Suppress("LeakingThis") @Suppress("LeakingThis")
val lazyWrapper = IrLazySymbolTable(this) val lazyWrapper = IrLazySymbolTable(this)
private abstract class SymbolTableBase<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>>(val lock: IrLock) { protected abstract class SymbolTableBase<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>>(val lock: IrLock) {
val unboundSymbols = linkedSetOf<S>() val unboundSymbols = linkedSetOf<S>()
abstract fun get(d: D): S? abstract fun get(d: D): S?
@@ -212,7 +212,7 @@ class SymbolTable(
} }
} }
private open inner class FlatSymbolTable<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>> : protected open inner class FlatSymbolTable<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>> :
SymbolTableBase<D, B, S>(lock) { SymbolTableBase<D, B, S>(lock) {
val descriptorToSymbol = linkedMapOf<D, S>() val descriptorToSymbol = linkedMapOf<D, S>()
val idSigToSymbol = linkedMapOf<IdSignature, S>() val idSigToSymbol = linkedMapOf<IdSignature, S>()
@@ -249,11 +249,11 @@ class SymbolTable(
override fun signature(descriptor: ClassDescriptor): IdSignature? = signaturer.composeEnumEntrySignature(descriptor) override fun signature(descriptor: ClassDescriptor): IdSignature? = signaturer.composeEnumEntrySignature(descriptor)
} }
private inner class FieldSymbolTable : FlatSymbolTable<PropertyDescriptor, IrField, IrFieldSymbol>() { protected inner class FieldSymbolTable : FlatSymbolTable<PropertyDescriptor, IrField, IrFieldSymbol>() {
override fun signature(descriptor: PropertyDescriptor): IdSignature? = signaturer.composeFieldSignature(descriptor) override fun signature(descriptor: PropertyDescriptor): IdSignature? = signaturer.composeFieldSignature(descriptor)
} }
private inner class ScopedSymbolTable<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>> protected inner class ScopedSymbolTable<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>>
: SymbolTableBase<D, B, S>(lock) { : SymbolTableBase<D, B, S>(lock) {
inner class Scope(val owner: IrSymbol, val parent: Scope?) { inner class Scope(val owner: IrSymbol, val parent: Scope?) {
private val descriptorToSymbol = linkedMapOf<D, S>() private val descriptorToSymbol = linkedMapOf<D, S>()
@@ -308,7 +308,7 @@ class SymbolTable(
fun dump(): String = dumpTo(StringBuilder()).toString() fun dump(): String = dumpTo(StringBuilder()).toString()
} }
private var currentScope: Scope? = null protected var currentScope: Scope? = null
override fun get(d: D): S? { override fun get(d: D): S? {
val scope = currentScope ?: return null val scope = currentScope ?: return null
@@ -372,13 +372,13 @@ class SymbolTable(
private val classSymbolTable = FlatSymbolTable<ClassDescriptor, IrClass, IrClassSymbol>() private val classSymbolTable = FlatSymbolTable<ClassDescriptor, IrClass, IrClassSymbol>()
private val constructorSymbolTable = FlatSymbolTable<ClassConstructorDescriptor, IrConstructor, IrConstructorSymbol>() private val constructorSymbolTable = FlatSymbolTable<ClassConstructorDescriptor, IrConstructor, IrConstructorSymbol>()
private val enumEntrySymbolTable = EnumEntrySymbolTable() private val enumEntrySymbolTable = EnumEntrySymbolTable()
private val fieldSymbolTable = FieldSymbolTable() protected val fieldSymbolTable = FieldSymbolTable()
private val simpleFunctionSymbolTable = FlatSymbolTable<FunctionDescriptor, IrSimpleFunction, IrSimpleFunctionSymbol>() private val simpleFunctionSymbolTable = FlatSymbolTable<FunctionDescriptor, IrSimpleFunction, IrSimpleFunctionSymbol>()
private val propertySymbolTable = FlatSymbolTable<PropertyDescriptor, IrProperty, IrPropertySymbol>() private val propertySymbolTable = FlatSymbolTable<PropertyDescriptor, IrProperty, IrPropertySymbol>()
private val typeAliasSymbolTable = FlatSymbolTable<TypeAliasDescriptor, IrTypeAlias, IrTypeAliasSymbol>() private val typeAliasSymbolTable = FlatSymbolTable<TypeAliasDescriptor, IrTypeAlias, IrTypeAliasSymbol>()
private val globalTypeParameterSymbolTable = FlatSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>() protected val globalTypeParameterSymbolTable = FlatSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
private val scopedTypeParameterSymbolTable by threadLocal { protected val scopedTypeParameterSymbolTable by threadLocal {
ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>() ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
} }
private val valueParameterSymbolTable by threadLocal { private val valueParameterSymbolTable by threadLocal {
@@ -703,7 +703,7 @@ class SymbolTable(
override fun referenceField(descriptor: PropertyDescriptor) = override fun referenceField(descriptor: PropertyDescriptor) =
fieldSymbolTable.referenced(descriptor) { createFieldSymbol(descriptor) } fieldSymbolTable.referenced(descriptor) { createFieldSymbol(descriptor) }
override fun referenceFieldFromLinker(sig: IdSignature) = override fun referenceFieldFromLinker(sig: IdSignature): IrFieldSymbol =
fieldSymbolTable.run { fieldSymbolTable.run {
if (sig.isPubliclyVisible) IrFieldPublicSymbolImpl(sig) else IrFieldSymbolImpl() if (sig.isPubliclyVisible) IrFieldPublicSymbolImpl(sig) else IrFieldSymbolImpl()
} }
@@ -928,7 +928,7 @@ class SymbolTable(
typeParameterFactory typeParameterFactory
) )
fun declareGlobalTypeParameter( open fun declareGlobalTypeParameter(
sig: IdSignature, sig: IdSignature,
symbolFactory: () -> IrTypeParameterSymbol, symbolFactory: () -> IrTypeParameterSymbol,
typeParameterFactory: (IrTypeParameterSymbol) -> IrTypeParameter typeParameterFactory: (IrTypeParameterSymbol) -> IrTypeParameter
@@ -963,6 +963,7 @@ class SymbolTable(
typeParameterFactory typeParameterFactory
) )
@Suppress("UNUSED_PARAMETER")
fun declareScopedTypeParameter( fun declareScopedTypeParameter(
sig: IdSignature, sig: IdSignature,
symbolFactory: (IdSignature) -> IrTypeParameterSymbol, symbolFactory: (IdSignature) -> IrTypeParameterSymbol,