Generate ExternalPackageFragment lazily
This commit is contained in:
@@ -54,10 +54,11 @@ class DeclarationStubGenerator(
|
|||||||
constantValueGenerator.typeTranslator = typeTranslator
|
constantValueGenerator.typeTranslator = typeTranslator
|
||||||
}
|
}
|
||||||
|
|
||||||
fun generateEmptyModuleFragmentStub(descriptor: ModuleDescriptor, irBuiltIns: IrBuiltIns): IrModuleFragment =
|
|
||||||
IrModuleFragmentImpl(descriptor, irBuiltIns)
|
|
||||||
|
|
||||||
fun generateOrGetEmptyExternalPackageFragmentStub(descriptor: PackageFragmentDescriptor): IrExternalPackageFragment {
|
fun generateOrGetEmptyExternalPackageFragmentStub(descriptor: PackageFragmentDescriptor): IrExternalPackageFragment {
|
||||||
|
val referenced = symbolTable.referenceExternalPackageFragment(descriptor)
|
||||||
|
if (referenced.isBound) {
|
||||||
|
return referenced.owner
|
||||||
|
}
|
||||||
return symbolTable.declareExternalPackageFragment(descriptor)
|
return symbolTable.declareExternalPackageFragment(descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -197,6 +197,7 @@ open class SymbolTable : ReferenceSymbolTable {
|
|||||||
currentScope?.dump() ?: "<none>"
|
currentScope?.dump() ?: "<none>"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val externalPackageFragmentTable = FlatSymbolTable<PackageFragmentDescriptor, IrExternalPackageFragment, IrExternalPackageFragmentSymbol>()
|
||||||
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 = FlatSymbolTable<ClassDescriptor, IrEnumEntry, IrEnumEntrySymbol>()
|
private val enumEntrySymbolTable = FlatSymbolTable<ClassDescriptor, IrEnumEntry, IrEnumEntrySymbol>()
|
||||||
@@ -209,11 +210,17 @@ open class SymbolTable : ReferenceSymbolTable {
|
|||||||
private val variableSymbolTable = ScopedSymbolTable<VariableDescriptor, IrVariable, IrVariableSymbol>()
|
private val variableSymbolTable = ScopedSymbolTable<VariableDescriptor, IrVariable, IrVariableSymbol>()
|
||||||
private val scopedSymbolTables = listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable)
|
private val scopedSymbolTables = listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable)
|
||||||
|
|
||||||
fun declareFile(fileEntry: SourceManager.FileEntry, packageFragmentDescriptor: PackageFragmentDescriptor): IrFile =
|
fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) =
|
||||||
IrFileImpl(fileEntry, IrFileSymbolImpl(packageFragmentDescriptor))
|
externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) }
|
||||||
|
|
||||||
|
fun declareExternalPackageFragment(descriptor: PackageFragmentDescriptor): IrExternalPackageFragment {
|
||||||
|
return externalPackageFragmentTable.declare(
|
||||||
|
descriptor,
|
||||||
|
{ IrExternalPackageFragmentSymbolImpl(descriptor) },
|
||||||
|
{ IrExternalPackageFragmentImpl(it) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fun declareExternalPackageFragment(packageFragmentDescriptor: PackageFragmentDescriptor): IrExternalPackageFragment =
|
|
||||||
IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(packageFragmentDescriptor))
|
|
||||||
|
|
||||||
fun declareAnonymousInitializer(
|
fun declareAnonymousInitializer(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
|
|||||||
Reference in New Issue
Block a user