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)
}
class SymbolTable(
open class SymbolTable(
val signaturer: IdSignatureComposer,
val irFactory: IrFactory,
val nameProvider: NameProvider = NameProvider.DEFAULT
@@ -71,7 +71,7 @@ class SymbolTable(
@Suppress("LeakingThis")
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>()
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) {
val descriptorToSymbol = linkedMapOf<D, S>()
val idSigToSymbol = linkedMapOf<IdSignature, S>()
@@ -249,11 +249,11 @@ class SymbolTable(
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)
}
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) {
inner class Scope(val owner: IrSymbol, val parent: Scope?) {
private val descriptorToSymbol = linkedMapOf<D, S>()
@@ -308,7 +308,7 @@ class SymbolTable(
fun dump(): String = dumpTo(StringBuilder()).toString()
}
private var currentScope: Scope? = null
protected var currentScope: Scope? = null
override fun get(d: D): S? {
val scope = currentScope ?: return null
@@ -372,13 +372,13 @@ class SymbolTable(
private val classSymbolTable = FlatSymbolTable<ClassDescriptor, IrClass, IrClassSymbol>()
private val constructorSymbolTable = FlatSymbolTable<ClassConstructorDescriptor, IrConstructor, IrConstructorSymbol>()
private val enumEntrySymbolTable = EnumEntrySymbolTable()
private val fieldSymbolTable = FieldSymbolTable()
protected val fieldSymbolTable = FieldSymbolTable()
private val simpleFunctionSymbolTable = FlatSymbolTable<FunctionDescriptor, IrSimpleFunction, IrSimpleFunctionSymbol>()
private val propertySymbolTable = FlatSymbolTable<PropertyDescriptor, IrProperty, IrPropertySymbol>()
private val typeAliasSymbolTable = FlatSymbolTable<TypeAliasDescriptor, IrTypeAlias, IrTypeAliasSymbol>()
private val globalTypeParameterSymbolTable = FlatSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
private val scopedTypeParameterSymbolTable by threadLocal {
protected val globalTypeParameterSymbolTable = FlatSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
protected val scopedTypeParameterSymbolTable by threadLocal {
ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
}
private val valueParameterSymbolTable by threadLocal {
@@ -703,7 +703,7 @@ class SymbolTable(
override fun referenceField(descriptor: PropertyDescriptor) =
fieldSymbolTable.referenced(descriptor) { createFieldSymbol(descriptor) }
override fun referenceFieldFromLinker(sig: IdSignature) =
override fun referenceFieldFromLinker(sig: IdSignature): IrFieldSymbol =
fieldSymbolTable.run {
if (sig.isPubliclyVisible) IrFieldPublicSymbolImpl(sig) else IrFieldSymbolImpl()
}
@@ -928,7 +928,7 @@ class SymbolTable(
typeParameterFactory
)
fun declareGlobalTypeParameter(
open fun declareGlobalTypeParameter(
sig: IdSignature,
symbolFactory: () -> IrTypeParameterSymbol,
typeParameterFactory: (IrTypeParameterSymbol) -> IrTypeParameter
@@ -963,6 +963,7 @@ class SymbolTable(
typeParameterFactory
)
@Suppress("UNUSED_PARAMETER")
fun declareScopedTypeParameter(
sig: IdSignature,
symbolFactory: (IdSignature) -> IrTypeParameterSymbol,