[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()
|
val topLevelSig = idSig.topLevelSignature()
|
||||||
|
|
||||||
if (idSig in originalFileDeserializer.reversedSignatureIndex) {
|
if (idSig in originalFileDeserializer.reversedSignatureIndex) {
|
||||||
topLevelSig.originalEnqueue(this)
|
val symbol = originalFileDeserializer.symbolDeserializer.deserializeIrSymbol(idSig, symbolKind).also {
|
||||||
idSig.enqueue(this)
|
|
||||||
linker.modulesWithReachableTopLevels.add(moduleDeserializer)
|
|
||||||
|
|
||||||
return originalFileDeserializer.symbolDeserializer.deserializeIrSymbol(idSig, symbolKind).also {
|
|
||||||
linker.deserializedSymbols.add(it)
|
linker.deserializedSymbols.add(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!symbol.isBound) {
|
||||||
|
topLevelSig.originalEnqueue(this)
|
||||||
|
idSig.enqueue(this)
|
||||||
|
linker.modulesWithReachableTopLevels.add(moduleDeserializer)
|
||||||
|
}
|
||||||
|
|
||||||
|
return symbol
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
val actualModuleDeserializer =
|
val actualModuleDeserializer =
|
||||||
@@ -174,7 +178,7 @@ class IcFileDeserializer(
|
|||||||
|
|
||||||
private val carrierDeserializer by lazy { CarrierDeserializer(declarationDeserializer, icFileData.carriers) }
|
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>()
|
val visited = HashSet<IdSignature>()
|
||||||
|
|
||||||
|
|||||||
+17
-12
@@ -106,13 +106,17 @@ class IcModuleDeserializer(
|
|||||||
val icDeserializer = moduleReversedFileIndex[topLevelSignature]
|
val icDeserializer = moduleReversedFileIndex[topLevelSignature]
|
||||||
?: error("No file for $topLevelSignature (@ $idSig) in module $moduleDescriptor")
|
?: error("No file for $topLevelSignature (@ $idSig) in module $moduleDescriptor")
|
||||||
|
|
||||||
topLevelSignature.originalEnqueue(icDeserializer)
|
val symbol = icDeserializer.originalFileDeserializer.symbolDeserializer.deserializeIrSymbol(idSig, symbolKind).also {
|
||||||
idSig.enqueue(icDeserializer)
|
|
||||||
linker.modulesWithReachableTopLevels.add(this)
|
|
||||||
|
|
||||||
return icDeserializer.originalFileDeserializer.symbolDeserializer.deserializeIrSymbol(idSig, symbolKind).also {
|
|
||||||
linker.deserializedSymbols.add(it)
|
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())
|
override val moduleFragment: IrModuleFragment = IrModuleFragmentImpl(moduleDescriptor, linker.builtIns, emptyList())
|
||||||
@@ -209,14 +213,15 @@ class IcModuleDeserializer(
|
|||||||
|
|
||||||
override fun postProcess() {
|
override fun postProcess() {
|
||||||
icDeserializers.forEach { icDeserializer ->
|
icDeserializers.forEach { icDeserializer ->
|
||||||
if (!icDeserializer.visited.isEmpty()) {
|
val file = icDeserializer.originalFileDeserializer.file
|
||||||
val file = icDeserializer.originalFileDeserializer.file
|
icDeserializer.init()
|
||||||
icDeserializer.init()
|
icDeserializer.reversedSignatureIndex.keys.forEach {
|
||||||
icDeserializer.reversedSignatureIndex.keys.forEach {
|
if (it in icModuleReversedFileIndex) {
|
||||||
if (it in icModuleReversedFileIndex) error("Duplicate signature $it in both ${icModuleReversedFileIndex[it]!!.originalFileDeserializer.file.path} and in ${file.path}")
|
val existed = icModuleReversedFileIndex[it]!!
|
||||||
|
error("Duplicate signature $it in both ${existed.originalFileDeserializer.file.path} and in ${file.path}")
|
||||||
icModuleReversedFileIndex[it] = icDeserializer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
icModuleReversedFileIndex[it] = icDeserializer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user