diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index b5ea28e6b63..1b2033047fc 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -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) { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt index f8d06f4ea81..9f0c2019775 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt @@ -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() } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index 1d19eb13bac..16fd8836716 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -59,6 +59,10 @@ open class SymbolTable( ) } + fun referenceScript(signature: IdSignature): IrScriptSymbol { + return scriptSlice.referenced(signature) { IrScriptPublicSymbolImpl(signature) } + } + // ------------------------------------ class ------------------------------------ fun declareClass(