[FIR2IR] Split getOrCreateIrAnonymousInitializer method into two parts
Fir2IrDeclarationStorage should not sometimes create IR declarations during lookup requests
This commit is contained in:
committed by
Space Team
parent
736201da1d
commit
7263edf322
@@ -585,7 +585,7 @@ class Fir2IrConverter(
|
||||
classifierStorage.getOrCreateIrEnumEntry(declaration, parent as IrClass)
|
||||
}
|
||||
is FirAnonymousInitializer -> {
|
||||
declarationStorage.getOrCreateIrAnonymousInitializer(declaration, parent as IrClass)
|
||||
declarationStorage.createIrAnonymousInitializer(declaration, parent as IrClass)
|
||||
}
|
||||
is FirTypeAlias -> {
|
||||
classifierStorage.getCachedTypeAlias(declaration)?.let { irTypeAlias ->
|
||||
|
||||
+10
-3
@@ -933,13 +933,20 @@ class Fir2IrDeclarationStorage(
|
||||
|
||||
// ------------------------------------ anonymous initializers ------------------------------------
|
||||
|
||||
fun getOrCreateIrAnonymousInitializer(
|
||||
fun createIrAnonymousInitializer(
|
||||
anonymousInitializer: FirAnonymousInitializer,
|
||||
containingIrClass: IrClass,
|
||||
): IrAnonymousInitializer {
|
||||
return initializerCache.computeIfAbsent(anonymousInitializer) {
|
||||
callablesGenerator.createIrAnonymousInitializer(anonymousInitializer, containingIrClass)
|
||||
val irInitializer = callablesGenerator.createIrAnonymousInitializer(anonymousInitializer, containingIrClass)
|
||||
val alreadyContained = initializerCache.put(anonymousInitializer, irInitializer)
|
||||
require(alreadyContained == null) {
|
||||
"IR for anonymous initializer already exits: ${anonymousInitializer.render()}"
|
||||
}
|
||||
return irInitializer
|
||||
}
|
||||
|
||||
fun getIrAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer): IrAnonymousInitializer {
|
||||
return initializerCache.getValue(anonymousInitializer)
|
||||
}
|
||||
|
||||
// ------------------------------------ callables ------------------------------------
|
||||
|
||||
@@ -392,7 +392,7 @@ class Fir2IrVisitor(
|
||||
anonymousInitializer: FirAnonymousInitializer,
|
||||
data: Any?
|
||||
): IrElement = whileAnalysing(session, anonymousInitializer) {
|
||||
val irAnonymousInitializer = declarationStorage.getOrCreateIrAnonymousInitializer(anonymousInitializer, conversionScope.lastClass()!!)
|
||||
val irAnonymousInitializer = declarationStorage.getIrAnonymousInitializer(anonymousInitializer)
|
||||
declarationStorage.enterScope(irAnonymousInitializer.symbol)
|
||||
irAnonymousInitializer.body = convertToIrBlockBody(anonymousInitializer.body!!)
|
||||
declarationStorage.leaveScope(irAnonymousInitializer.symbol)
|
||||
|
||||
Reference in New Issue
Block a user