diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt index 1df3cddc028..ce40734d376 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt @@ -32,9 +32,9 @@ abstract class BasicIrModuleDeserializer( private val fileToDeserializerMap = mutableMapOf() - private val moduleDeserializationState = ModuleDeserializationState(linker, this) + private val moduleDeserializationState = ModuleDeserializationState() - val moduleReversedFileIndex = mutableMapOf() + protected val moduleReversedFileIndex = mutableMapOf() override val moduleDependencies by lazy { moduleDescriptor.allDependencyModules @@ -166,35 +166,35 @@ abstract class BasicIrModuleDeserializer( } override val kind get() = IrModuleDeserializerKind.DESERIALIZED -} -private class ModuleDeserializationState(val linker: KotlinIrLinker, val moduleDeserializer: BasicIrModuleDeserializer) { - private val filesWithPendingTopLevels = mutableSetOf() + private inner class ModuleDeserializationState { + private val filesWithPendingTopLevels = mutableSetOf() - fun enqueueFile(fileDeserializationState: FileDeserializationState) { - filesWithPendingTopLevels.add(fileDeserializationState) - linker.modulesWithReachableTopLevels.add(moduleDeserializer) - } - - fun addIdSignature(key: IdSignature) { - val fileLocalDeserializationState = moduleDeserializer.moduleReversedFileIndex[key] ?: error("No file found for key $key") - fileLocalDeserializationState.addIdSignature(key) - - enqueueFile(fileLocalDeserializationState) - } - - fun deserializeReachableDeclarations() { - while (filesWithPendingTopLevels.isNotEmpty()) { - val pendingFileDeserializationState = filesWithPendingTopLevels.first() - - pendingFileDeserializationState.fileDeserializer.deserializeFileImplicitDataIfFirstUse() - pendingFileDeserializationState.deserializeAllFileReachableTopLevel() - - filesWithPendingTopLevels.remove(pendingFileDeserializationState) + fun enqueueFile(fileDeserializationState: FileDeserializationState) { + filesWithPendingTopLevels.add(fileDeserializationState) + linker.modulesWithReachableTopLevels.add(this@BasicIrModuleDeserializer) } - } - override fun toString(): String = moduleDeserializer.klib.toString() + fun addIdSignature(key: IdSignature) { + val fileLocalDeserializationState = moduleReversedFileIndex[key] ?: error("No file found for key $key") + fileLocalDeserializationState.addIdSignature(key) + + enqueueFile(fileLocalDeserializationState) + } + + fun deserializeReachableDeclarations() { + while (filesWithPendingTopLevels.isNotEmpty()) { + val pendingFileDeserializationState = filesWithPendingTopLevels.first() + + pendingFileDeserializationState.fileDeserializer.deserializeFileImplicitDataIfFirstUse() + pendingFileDeserializationState.deserializeAllFileReachableTopLevel() + + filesWithPendingTopLevels.remove(pendingFileDeserializationState) + } + } + + override fun toString(): String = klib.toString() + } } fun IrModuleDeserializer.findModuleDeserializerForTopLevelId(idSignature: IdSignature): IrModuleDeserializer? {