[FIR2IR] Split getOrCreateIrAnonymousInitializer method into two parts

Fir2IrDeclarationStorage should not sometimes create IR declarations
  during lookup requests
This commit is contained in:
Dmitriy Novozhilov
2023-11-14 15:56:42 +02:00
committed by Space Team
parent 736201da1d
commit 7263edf322
3 changed files with 12 additions and 5 deletions
@@ -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 ->
@@ -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)