[IR] Introduce & use declaration-based SymbolTable.withReferenceScope
This commit is contained in:
@@ -63,8 +63,10 @@ interface ReferenceSymbolTable {
|
|||||||
fun referenceTypeAliasFromLinker(descriptor: TypeAliasDescriptor, sig: IdSignature): IrTypeAliasSymbol
|
fun referenceTypeAliasFromLinker(descriptor: TypeAliasDescriptor, sig: IdSignature): IrTypeAliasSymbol
|
||||||
|
|
||||||
fun enterScope(owner: DeclarationDescriptor)
|
fun enterScope(owner: DeclarationDescriptor)
|
||||||
|
fun enterScope(owner: IrDeclaration)
|
||||||
|
|
||||||
fun leaveScope(owner: DeclarationDescriptor)
|
fun leaveScope(owner: DeclarationDescriptor)
|
||||||
|
fun leaveScope(owner: IrDeclaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
open class SymbolTable(
|
open class SymbolTable(
|
||||||
@@ -955,7 +957,7 @@ open class SymbolTable(
|
|||||||
scopedSymbolTables.forEach { it.enterScope(owner) }
|
scopedSymbolTables.forEach { it.enterScope(owner) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun enterScope(owner: IrDeclaration) {
|
override fun enterScope(owner: IrDeclaration) {
|
||||||
enterScope(owner.descriptor)
|
enterScope(owner.descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -963,7 +965,7 @@ open class SymbolTable(
|
|||||||
scopedSymbolTables.forEach { it.leaveScope(owner) }
|
scopedSymbolTables.forEach { it.leaveScope(owner) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun leaveScope(owner: IrDeclaration) {
|
override fun leaveScope(owner: IrDeclaration) {
|
||||||
leaveScope(owner.descriptor)
|
leaveScope(owner.descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1026,6 +1028,13 @@ inline fun <T, D : DeclarationDescriptor> ReferenceSymbolTable.withReferenceScop
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline fun <T, D : IrDeclaration> ReferenceSymbolTable.withReferenceScope(owner: D, block: ReferenceSymbolTable.(D) -> T): T {
|
||||||
|
enterScope(owner)
|
||||||
|
val result = block(owner)
|
||||||
|
leaveScope(owner)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
val SymbolTable.allUnbound: Set<IrSymbol>
|
val SymbolTable.allUnbound: Set<IrSymbol>
|
||||||
get() {
|
get() {
|
||||||
val r = mutableSetOf<IrSymbol>()
|
val r = mutableSetOf<IrSymbol>()
|
||||||
|
|||||||
+1
-1
@@ -136,7 +136,7 @@ interface IrBuilderExtension {
|
|||||||
|
|
||||||
fun <T : IrDeclaration> T.buildWithScope(builder: (T) -> Unit): T =
|
fun <T : IrDeclaration> T.buildWithScope(builder: (T) -> Unit): T =
|
||||||
also { irDeclaration ->
|
also { irDeclaration ->
|
||||||
compilerContext.symbolTable.withReferenceScope(irDeclaration.descriptor) {
|
compilerContext.symbolTable.withReferenceScope(irDeclaration) {
|
||||||
builder(irDeclaration)
|
builder(irDeclaration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user