[FIR2IR] Manage script symbols in declaration storage instead of declaration generator

This is needed to be able to implement creation of unbound symbols
  for references of corresponding declarations (KT-62856)
This commit is contained in:
Dmitriy Novozhilov
2023-11-03 15:28:49 +02:00
committed by Space Team
parent cd0baef087
commit aab5664c5b
3 changed files with 20 additions and 11 deletions
@@ -1129,11 +1129,19 @@ class Fir2IrDeclarationStorage(
fun getOrCreateIrScript(script: FirScript): IrScript {
getCachedIrScript(script)?.let { return it }
return callablesGenerator.createIrScript(script).also {
val symbol = createScriptSymbol(signatureComposer.composeSignature(script))
return callablesGenerator.createIrScript(script, symbol).also {
scriptCache[script] = it
}
}
private fun createScriptSymbol(signature: IdSignature?): IrScriptSymbol {
return when {
signature != null -> symbolTable.referenceScript(signature)
else -> IrScriptSymbolImpl()
}
}
// ------------------------------------ scoping ------------------------------------
fun enterScope(symbol: IrSymbol) {
@@ -928,16 +928,13 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi
// ------------------------------------ scripts ------------------------------------
fun createIrScript(script: FirScript): IrScript = script.convertWithOffsets { startOffset, endOffset ->
val signature = signatureComposer.composeSignature(script)!!
symbolTable.declareScript(signature, { IrScriptPublicSymbolImpl(signature) }) { symbol ->
IrScriptImpl(symbol, script.name, irFactory, startOffset, endOffset).also { irScript ->
irScript.origin = SCRIPT_K2_ORIGIN
irScript.metadata = FirMetadataSource.Script(script)
irScript.implicitReceiversParameters = emptyList()
irScript.providedProperties = emptyList()
irScript.providedPropertiesParameters = emptyList()
}
fun createIrScript(script: FirScript, symbol: IrScriptSymbol): IrScript = script.convertWithOffsets { startOffset, endOffset ->
IrScriptImpl(symbol, script.name, irFactory, startOffset, endOffset).also { irScript ->
irScript.origin = SCRIPT_K2_ORIGIN
irScript.metadata = FirMetadataSource.Script(script)
irScript.implicitReceiversParameters = emptyList()
irScript.providedProperties = emptyList()
irScript.providedPropertiesParameters = emptyList()
}
}
@@ -59,6 +59,10 @@ open class SymbolTable(
)
}
fun referenceScript(signature: IdSignature): IrScriptSymbol {
return scriptSlice.referenced(signature) { IrScriptPublicSymbolImpl(signature) }
}
// ------------------------------------ class ------------------------------------
fun declareClass(