From fa21132704d0b5421a02a4ab1116b05b942a8bb4 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Fri, 16 Jul 2021 16:49:30 +0300 Subject: [PATCH] JS IR IC: fix order storage Some classes don't survive till the end. Their declaration lists need to be stored nevertheless. --- .../kotlin/ir/backend/js/ic/IcSerializer.kt | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcSerializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcSerializer.kt index f652d1159ed..5b20ecebb85 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcSerializer.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcSerializer.kt @@ -120,7 +120,7 @@ class IcSerializer( fileSerializer.serializeIrSymbol(symbol) } - val order = storeOrder(file) { symbol -> + val order = storeOrder(file, fileDeclarations) { symbol -> fileSerializer.serializeIrSymbol(symbol) } @@ -183,7 +183,7 @@ class IdSignatureSerializerWithForIC( } } -fun storeOrder(file: IrFile, idSigToLong: (IrSymbol) -> Long): SerializedOrder { +fun storeOrder(file: IrFile, fileDeclarations: Iterable, idSigToLong: (IrSymbol) -> Long): SerializedOrder { val topLevelSignatures = mutableListOf() val containerSignatures = mutableListOf() val declarationSignatures = mutableListOf() @@ -192,21 +192,16 @@ fun storeOrder(file: IrFile, idSigToLong: (IrSymbol) -> Long): SerializedOrder { file.declarations.forEach { d -> topLevelSignatures += d.idSigIndex() - d.acceptVoid(object : IrElementVisitorVoid { - override fun visitElement(element: IrElement) { - element.acceptChildrenVoid(this) - } + } - override fun visitClass(declaration: IrClass) { - // First element is the container signature - containerSignatures += declaration.idSigIndex() - val declarationIds = declaration.declarations.map { it.idSigIndex() } + fileDeclarations.forEach { declaration -> + if (declaration is IrClass) { + // First element is the container signature + containerSignatures += declaration.idSigIndex() + val declarationIds = declaration.declarations.map { it.idSigIndex() } - declarationSignatures += IrMemoryLongArrayWriter(declarationIds).writeIntoMemory() - - super.visitClass(declaration) - } - }) + declarationSignatures += IrMemoryLongArrayWriter(declarationIds).writeIntoMemory() + } } return SerializedOrder(