[JS IC] Eradicate GlobalFileLocalSignature from code

- Reduce usage of global maps
This commit is contained in:
Roman Artemev
2021-07-27 18:49:45 +03:00
committed by teamcityserver
parent a0449892b2
commit 74d8e16d09
6 changed files with 22 additions and 81 deletions
@@ -40,7 +40,6 @@ class IcFileDeserializer(
val originalEnqueue: IdSignature.(IcFileDeserializer) -> Unit,
val icFileData: SerializedIcDataForFile,
val mappingState: JsMappingState,
val publicSignatureToIcFileDeserializer: MutableMap<IdSignature, IcFileDeserializer>,
val enqueue: IdSignature.(IcFileDeserializer) -> Unit,
) {
@@ -149,7 +148,7 @@ class IcFileDeserializer(
icFileReader,
file.symbol,
emptyList(),
{ idSig -> enqueueLocalTopLevelDeclaration(idSig) },
{ idSig -> idSig.enqueue(this) },
{ _, s -> s },
enqueueAllDeclarations = true,
useGlobalSignatures = true,
@@ -194,12 +193,6 @@ class IcFileDeserializer(
}
}
fun init() {
reversedSignatureIndex.keys.forEach {
publicSignatureToIcFileDeserializer[it] = this
}
}
private val containerSigToOrder by lazy {
mutableMapOf<IdSignature, ByteArray>().also { map ->
val containerIds = IrLongArrayMemoryReader(icFileData.order.containerSignatures).array
@@ -236,12 +229,6 @@ class IcFileDeserializer(
return actualModuleDeserializer.deserializeIrSymbol(idSig, kind)
}
private fun enqueueLocalTopLevelDeclaration(idSig: IdSignature) {
// We only care about declarations from IC cache. They all are in the map.
val deser = publicSignatureToIcFileDeserializer[idSig] ?: return
idSig.enqueue(deser)
}
fun deserializeDeclaration(idSig: IdSignature): IrDeclaration? {
cachedDeclaration(idSig)?.let { return it }
@@ -124,8 +124,6 @@ class IcModuleDeserializer(
it.file.path
}
private val publicSignatureToIcFileDeserializer = mutableMapOf<IdSignature, IcFileDeserializer>()
private fun deserializeIrFile(
fileProto: ProtoFile,
fileIndex: Int,
@@ -152,7 +150,6 @@ class IcModuleDeserializer(
{ fileDeserializer -> originalEnqueue(fileDeserializer) },
icFileData,
mapping.state,
publicSignatureToIcFileDeserializer,
{ fileDeserializer -> enqueue(fileDeserializer) },
)
@@ -167,14 +164,15 @@ 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}")
}
if (it.isPubliclyVisible) {
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
icModuleReversedFileIndex[it] = icDeserializer
}
}
if (strategy.theWholeWorld) {
@@ -163,10 +163,6 @@ class IdSignatureSerializerWithForIC(
localIndex = localIndexOffset
scopeIndex = scopeIndexOffset
}
override fun IrDeclaration.createFileLocalSignature(parentSignature: IdSignature, localIndex: Long, description: String?): IdSignature {
return IdSignature.GlobalFileLocalSignature(parentSignature, localIndex, fileOrNull?.path ?: "")
}
}
fun storeOrder(file: IrFile, fileDeclarations: Iterable<IrDeclaration>, idSigToLong: (IrSymbol) -> Long): SerializedOrder {