JS IR IC: deserialization fix
This commit is contained in:
committed by
teamcityserver
parent
058ca16af7
commit
0130d18ea9
+11
-13
@@ -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()
|
||||||
|
|||||||
+1
-1
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user