From c8f8316e9b1fec92ce1310fe2903d5f54c505536 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Fri, 12 Jan 2024 15:09:07 +0100 Subject: [PATCH] [klib] Return the block's return value in `inFile` methods --- .../fir/backend/Fir2IrFakeOverrideStrategy.kt | 3 +-- .../ir/overrides/FakeOverrideBuilderStrategy.kt | 2 +- .../src/org/jetbrains/kotlin/ir/util/IrUtils.kt | 2 +- .../backend/common/overrides/FakeOverrides.kt | 3 +-- .../common/serialization/DeclarationTable.kt | 4 +--- .../common/serialization/IrFileSerializer.kt | 14 ++------------ .../serialization/signature/IdSignatureComputer.kt | 6 ++---- .../serialization/signature/IdSignatureFactory.kt | 14 +++++++------- 8 files changed, 16 insertions(+), 32 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrFakeOverrideStrategy.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrFakeOverrideStrategy.kt index 36a23679dd7..0e8fb4fd155 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrFakeOverrideStrategy.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrFakeOverrideStrategy.kt @@ -81,7 +81,6 @@ internal class Fir2IrFakeOverrideStrategy( } } - override fun inFile(file: IrFile?, block: () -> Unit) { + override fun inFile(file: IrFile?, block: () -> R): R = publicIdSignatureComputer.inFile(file?.symbol, block) - } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt index 0a057d907de..02271aa1ee5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt @@ -71,7 +71,7 @@ abstract class FakeOverrideBuilderStrategy( * Contract: * * must call [block] exactly once. */ - abstract fun inFile(file: IrFile?, block: () -> Unit) + abstract fun inFile(file: IrFile?, block: () -> R): R /** * Callback for creating a symbol for fake override function. diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index 9108266cc0c..b591cf8bdf3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -1305,7 +1305,7 @@ private object BindToNewEmptySymbols : FakeOverrideBuilderStrategy( } } - override fun inFile(file: IrFile?, block: () -> Unit) { block() } + override fun inFile(file: IrFile?, block: () -> R): R = block() } fun IrClass.addFakeOverrides( diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt index 28149863a79..88e164d30f2 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt @@ -87,9 +87,8 @@ private class IrLinkerFakeOverrideBuilderStrategy( unimplementedOverridesStrategy = unimplementedOverridesStrategy ) { - override fun inFile(file: IrFile?, block: () -> Unit) { + override fun inFile(file: IrFile?, block: () -> R): R = fakeOverrideDeclarationTable.inFile(file, block) - } override fun linkFunctionFakeOverride(function: IrFunctionWithLateBinding, manglerCompatibleMode: Boolean) { val (signature, symbol) = computeFunctionFakeOverrideSymbol(function, manglerCompatibleMode) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt index 40c2a6e8415..de1264d3ec6 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt @@ -46,10 +46,8 @@ open class DeclarationTable(globalTable: GlobalDeclarationTable) { // TODO: we need to disentangle signature construction with declaration tables. open val signaturer: IdSignatureFactory = IdSignatureFactory(globalTable.publicIdSignatureComputer, this) - fun inFile(file: IrFile?, block: () -> Unit) { + fun inFile(file: IrFile?, block: () -> R): R = signaturer.inFile(file?.symbol, block) - } - private fun IrDeclaration.isLocalDeclaration(compatibleMode: Boolean): Boolean { return !isExportedDeclaration(this, compatibleMode) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt index dc1be1bdc78..b5b16616ee9 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt @@ -1326,17 +1326,7 @@ open class IrFileSerializer( } } - fun serializeIrFile(file: IrFile): SerializedIrFile { - var result: SerializedIrFile? = null - - declarationTable.inFile(file) { - result = serializeIrFileImpl(file) - } - - return result!! - } - - private fun serializeIrFileImpl(file: IrFile): SerializedIrFile { + fun serializeIrFile(file: IrFile): SerializedIrFile = declarationTable.inFile(file) { val topLevelDeclarations = mutableListOf() val proto = ProtoFile.newBuilder() @@ -1379,7 +1369,7 @@ open class IrFileSerializer( fillPlatformExplicitlyExported(file, proto) - return SerializedIrFile( + SerializedIrFile( fileData = proto.build().toByteArray(), fqName = file.packageFqName.asString(), path = file.path, diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureComputer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureComputer.kt index ec44dc2b5cb..56fbbef1a48 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureComputer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureComputer.kt @@ -36,7 +36,7 @@ interface IdSignatureComputer { * @param block A block within which signatures computed for private declarations will include [file]'s signature. * @see [IdSignature.FileSignature] */ - fun inFile(file: IrFileSymbol?, block: () -> Unit) + fun inFile(file: IrFileSymbol?, block: () -> R): R } class DescToIrIdSignatureComputer(private val delegate: IdSignatureDescriptor) : IdSignatureComputer { @@ -49,7 +49,5 @@ class DescToIrIdSignatureComputer(private val delegate: IdSignatureDescriptor) : } } - override fun inFile(file: IrFileSymbol?, block: () -> Unit) { - block() - } + override fun inFile(file: IrFileSymbol?, block: () -> R): R = block() } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureFactory.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureFactory.kt index aee65ea2b75..e7a28371257 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureFactory.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureFactory.kt @@ -39,12 +39,13 @@ class PublicIdSignatureComputer(val mangler: KotlinMangler.IrMangler) : IdSignat private var currentFileSignatureX: IdSignature.FileSignature? = null - override fun inFile(file: IrFileSymbol?, block: () -> Unit) { + override fun inFile(file: IrFileSymbol?, block: () -> R): R { currentFileSignatureX = file?.let { IdSignature.FileSignature(it) } - - block() - - currentFileSignatureX = null + try { + return block() + } finally { + currentFileSignatureX = null + } } private fun IrDeclaration.checkIfPlatformSpecificExport(): Boolean = mangler.run { isPlatformSpecificExport() } @@ -211,9 +212,8 @@ class IdSignatureFactory( private var localIndex: Long = startIndex.toLong() private var scopeIndex: Int = startIndex - override fun inFile(file: IrFileSymbol?, block: () -> Unit) { + override fun inFile(file: IrFileSymbol?, block: () -> R): R = publicSignatureBuilder.inFile(file, block) - } private fun composeContainerIdSignature(container: IrDeclarationParent, compatibleMode: Boolean): IdSignature = when (container) {