JS IR IC: deserialization fix

This commit is contained in:
Anton Bannykh
2021-07-09 11:57:02 +03:00
committed by teamcityserver
parent 058ca16af7
commit 0130d18ea9
2 changed files with 12 additions and 14 deletions
@@ -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()
@@ -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)
}