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? 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) { if (strategy.theWholeWorld) {
icDeserializer.allOriginalDeclarationSignatures().forEach { it.originalEnqueue(icDeserializer) } icDeserializer.allOriginalDeclarationSignatures().forEach { it.originalEnqueue(icDeserializer) }
} }
@@ -192,6 +202,7 @@ class IcModuleDeserializer(
fun IdSignature.originalEnqueue(fileDeserializer: IcFileDeserializer) { fun IdSignature.originalEnqueue(fileDeserializer: IcFileDeserializer) {
if (fileDeserializer.enqueueForDeserialization(this)) { if (fileDeserializer.enqueueForDeserialization(this)) {
linker.modulesWithReachableTopLevels.add(this@IcModuleDeserializer)
originalFileQueue.addLast(fileDeserializer) originalFileQueue.addLast(fileDeserializer)
} }
} }
@@ -211,19 +222,6 @@ class IcModuleDeserializer(
} }
override fun postProcess() { 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()) { while (signatureQueue.isNotEmpty()) {
val icFileDeserializer = fileQueue.removeFirst() val icFileDeserializer = fileQueue.removeFirst()
val signature = signatureQueue.removeFirst() val signature = signatureQueue.removeFirst()
@@ -107,7 +107,7 @@ class JsIrLinker(
} }
fun loadIcIr(preprocess: (IrModuleFragment) -> Unit) { fun loadIcIr(preprocess: (IrModuleFragment) -> Unit) {
deserializersForModules.values.forEach { deserializersForModules.values.reversed().forEach {
if (it.moduleDescriptor in loweredIcData) { if (it.moduleDescriptor in loweredIcData) {
preprocess(it.moduleFragment) preprocess(it.moduleFragment)
} }