IR: allow SymbolTable descendants
This commit is contained in:
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,
|
||||
|
||||
Reference in New Issue
Block a user