[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:
committed by
Space Team
parent
cd0baef087
commit
aab5664c5b
+9
-1
@@ -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) {
|
||||
|
||||
+7
-10
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user