From 0130d18ea9e25c805f7614721ebb0fbaae4557b8 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Fri, 9 Jul 2021 11:57:02 +0300 Subject: [PATCH] JS IR IC: deserialization fix --- .../ir/backend/js/ic/IcModuleDeserializer.kt | 24 +++++++++---------- .../js/lower/serialization/ir/JsIrLinker.kt | 2 +- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt index 89e1e44fcf1..afa42d1a216 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt @@ -167,6 +167,16 @@ class IcModuleDeserializer( moduleReversedFileIndex.putIfAbsent(it, icDeserializer) // TODO Why not simple put? } + icDeserializer.init() + icDeserializer.reversedSignatureIndex.keys.forEach { + if (it in icModuleReversedFileIndex) { + val existed = icModuleReversedFileIndex[it]!! + error("Duplicate signature $it in both ${existed.originalFileDeserializer.file.path} and in ${file.path}") + } + + icModuleReversedFileIndex[it] = icDeserializer + } + if (strategy.theWholeWorld) { icDeserializer.allOriginalDeclarationSignatures().forEach { it.originalEnqueue(icDeserializer) } } @@ -192,6 +202,7 @@ class IcModuleDeserializer( fun IdSignature.originalEnqueue(fileDeserializer: IcFileDeserializer) { if (fileDeserializer.enqueueForDeserialization(this)) { + linker.modulesWithReachableTopLevels.add(this@IcModuleDeserializer) originalFileQueue.addLast(fileDeserializer) } } @@ -211,19 +222,6 @@ class IcModuleDeserializer( } override fun postProcess() { - icDeserializers.forEach { icDeserializer -> - val file = icDeserializer.originalFileDeserializer.file - icDeserializer.init() - icDeserializer.reversedSignatureIndex.keys.forEach { - if (it in icModuleReversedFileIndex) { - val existed = icModuleReversedFileIndex[it]!! - error("Duplicate signature $it in both ${existed.originalFileDeserializer.file.path} and in ${file.path}") - } - - icModuleReversedFileIndex[it] = icDeserializer - } - } - while (signatureQueue.isNotEmpty()) { val icFileDeserializer = fileQueue.removeFirst() val signature = signatureQueue.removeFirst() diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt index d443050315c..2db48ea5807 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt @@ -107,7 +107,7 @@ class JsIrLinker( } fun loadIcIr(preprocess: (IrModuleFragment) -> Unit) { - deserializersForModules.values.forEach { + deserializersForModules.values.reversed().forEach { if (it.moduleDescriptor in loweredIcData) { preprocess(it.moduleFragment) }