JS IR IC: fix order storage

Some classes don't survive till the end. Their declaration lists
need to be stored nevertheless.
This commit is contained in:
Anton Bannykh
2021-07-16 16:49:30 +03:00
committed by teamcityserver
parent c6ab195a87
commit fa21132704
@@ -120,7 +120,7 @@ class IcSerializer(
fileSerializer.serializeIrSymbol(symbol) fileSerializer.serializeIrSymbol(symbol)
} }
val order = storeOrder(file) { symbol -> val order = storeOrder(file, fileDeclarations) { symbol ->
fileSerializer.serializeIrSymbol(symbol) fileSerializer.serializeIrSymbol(symbol)
} }
@@ -183,7 +183,7 @@ class IdSignatureSerializerWithForIC(
} }
} }
fun storeOrder(file: IrFile, idSigToLong: (IrSymbol) -> Long): SerializedOrder { fun storeOrder(file: IrFile, fileDeclarations: Iterable<IrDeclaration>, idSigToLong: (IrSymbol) -> Long): SerializedOrder {
val topLevelSignatures = mutableListOf<Long>() val topLevelSignatures = mutableListOf<Long>()
val containerSignatures = mutableListOf<Long>() val containerSignatures = mutableListOf<Long>()
val declarationSignatures = mutableListOf<ByteArray>() val declarationSignatures = mutableListOf<ByteArray>()
@@ -192,21 +192,16 @@ fun storeOrder(file: IrFile, idSigToLong: (IrSymbol) -> Long): SerializedOrder {
file.declarations.forEach { d -> file.declarations.forEach { d ->
topLevelSignatures += d.idSigIndex() topLevelSignatures += d.idSigIndex()
d.acceptVoid(object : IrElementVisitorVoid { }
override fun visitElement(element: IrElement) {
element.acceptChildrenVoid(this)
}
override fun visitClass(declaration: IrClass) { fileDeclarations.forEach { declaration ->
// First element is the container signature if (declaration is IrClass) {
containerSignatures += declaration.idSigIndex() // First element is the container signature
val declarationIds = declaration.declarations.map { it.idSigIndex() } containerSignatures += declaration.idSigIndex()
val declarationIds = declaration.declarations.map { it.idSigIndex() }
declarationSignatures += IrMemoryLongArrayWriter(declarationIds).writeIntoMemory() declarationSignatures += IrMemoryLongArrayWriter(declarationIds).writeIntoMemory()
}
super.visitClass(declaration)
}
})
} }
return SerializedOrder( return SerializedOrder(