[JS IC] Make sure already bound symbol is not being enqueued
This commit is contained in:
committed by
teamcityserver
parent
334e34b70b
commit
8782399ffb
+10
-6
@@ -83,13 +83,17 @@ class IcFileDeserializer(
|
||||
val topLevelSig = idSig.topLevelSignature()
|
||||
|
||||
if (idSig in originalFileDeserializer.reversedSignatureIndex) {
|
||||
topLevelSig.originalEnqueue(this)
|
||||
idSig.enqueue(this)
|
||||
linker.modulesWithReachableTopLevels.add(moduleDeserializer)
|
||||
|
||||
return originalFileDeserializer.symbolDeserializer.deserializeIrSymbol(idSig, symbolKind).also {
|
||||
val symbol = originalFileDeserializer.symbolDeserializer.deserializeIrSymbol(idSig, symbolKind).also {
|
||||
linker.deserializedSymbols.add(it)
|
||||
}
|
||||
|
||||
if (!symbol.isBound) {
|
||||
topLevelSig.originalEnqueue(this)
|
||||
idSig.enqueue(this)
|
||||
linker.modulesWithReachableTopLevels.add(moduleDeserializer)
|
||||
}
|
||||
|
||||
return symbol
|
||||
} else {
|
||||
|
||||
val actualModuleDeserializer =
|
||||
@@ -174,7 +178,7 @@ class IcFileDeserializer(
|
||||
|
||||
private val carrierDeserializer by lazy { CarrierDeserializer(declarationDeserializer, icFileData.carriers) }
|
||||
|
||||
val reversedSignatureIndex: Map<IdSignature, Int> by lazy { protoFile.declarationIdList.map { symbolDeserializer.deserializeIdSignature(it) to it }.toMap() }
|
||||
val reversedSignatureIndex: Map<IdSignature, Int> = protoFile.declarationIdList.map { symbolDeserializer.deserializeIdSignature(it) to it }.toMap()
|
||||
|
||||
val visited = HashSet<IdSignature>()
|
||||
|
||||
|
||||
+17
-12
@@ -106,13 +106,17 @@ class IcModuleDeserializer(
|
||||
val icDeserializer = moduleReversedFileIndex[topLevelSignature]
|
||||
?: error("No file for $topLevelSignature (@ $idSig) in module $moduleDescriptor")
|
||||
|
||||
topLevelSignature.originalEnqueue(icDeserializer)
|
||||
idSig.enqueue(icDeserializer)
|
||||
linker.modulesWithReachableTopLevels.add(this)
|
||||
|
||||
return icDeserializer.originalFileDeserializer.symbolDeserializer.deserializeIrSymbol(idSig, symbolKind).also {
|
||||
val symbol = icDeserializer.originalFileDeserializer.symbolDeserializer.deserializeIrSymbol(idSig, symbolKind).also {
|
||||
linker.deserializedSymbols.add(it)
|
||||
}
|
||||
|
||||
if (!symbol.isBound) {
|
||||
topLevelSignature.originalEnqueue(icDeserializer)
|
||||
idSig.enqueue(icDeserializer)
|
||||
linker.modulesWithReachableTopLevels.add(this)
|
||||
}
|
||||
|
||||
return symbol
|
||||
}
|
||||
|
||||
override val moduleFragment: IrModuleFragment = IrModuleFragmentImpl(moduleDescriptor, linker.builtIns, emptyList())
|
||||
@@ -209,14 +213,15 @@ class IcModuleDeserializer(
|
||||
|
||||
override fun postProcess() {
|
||||
icDeserializers.forEach { icDeserializer ->
|
||||
if (!icDeserializer.visited.isEmpty()) {
|
||||
val file = icDeserializer.originalFileDeserializer.file
|
||||
icDeserializer.init()
|
||||
icDeserializer.reversedSignatureIndex.keys.forEach {
|
||||
if (it in icModuleReversedFileIndex) error("Duplicate signature $it in both ${icModuleReversedFileIndex[it]!!.originalFileDeserializer.file.path} and in ${file.path}")
|
||||
|
||||
icModuleReversedFileIndex[it] = 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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user