From 1805f322f8b637a0b78c6bc2e8451554da529ed4 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Fri, 24 Nov 2023 17:36:54 +0200 Subject: [PATCH] [K/N] Do not use LazyIr for per-file caches #KT-63789 Fixed --- .../BasicIrModuleDeserializer.kt | 20 +++++++++---------- .../common/serialization/KotlinIrLinker.kt | 2 +- .../KonanPartialModuleDeserializer.kt | 9 ++++----- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt index afb98734250..f390b169062 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt @@ -118,18 +118,16 @@ abstract class BasicIrModuleDeserializer( fileToDeserializerMap[file] = fileDeserializationState.fileDeserializer - if (!fileStrategy.onDemand) { - val topLevelDeclarations = fileDeserializationState.fileDeserializer.reversedSignatureIndex.keys - topLevelDeclarations.forEach { - moduleReversedFileIndex.putIfAbsent(it, fileDeserializationState) // TODO Why not simple put? - } + val topLevelDeclarations = fileDeserializationState.fileDeserializer.reversedSignatureIndex.keys + topLevelDeclarations.forEach { + moduleReversedFileIndex.putIfAbsent(it, fileDeserializationState) // TODO Why not simple put? + } - if (fileStrategy.theWholeWorld) { - fileDeserializationState.enqueueAllDeclarations() - } - if (fileStrategy.theWholeWorld || fileStrategy.explicitlyExported) { - moduleDeserializationState.enqueueFile(fileDeserializationState) - } + if (fileStrategy.theWholeWorld) { + fileDeserializationState.enqueueAllDeclarations() + } + if (fileStrategy.theWholeWorld || fileStrategy.explicitlyExported) { + moduleDeserializationState.enqueueFile(fileDeserializationState) } return fileDeserializationState diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt index 0d9cd386acb..a097eec4399 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt @@ -398,7 +398,7 @@ enum class DeserializationStrategy( val theWholeWorld: Boolean, val inlineBodies: Boolean ) { - ON_DEMAND(true, true, false, false, true), + ON_DEMAND(true, false, false, false, false), ONLY_REFERENCED(false, true, false, false, true), ALL(false, true, true, true, true), EXPLICITLY_EXPORTED(false, true, true, false, true), diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanPartialModuleDeserializer.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanPartialModuleDeserializer.kt index fb6c52f9c5c..09ee35804ed 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanPartialModuleDeserializer.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanPartialModuleDeserializer.kt @@ -234,7 +234,6 @@ internal class KonanPartialModuleDeserializer( outerThisIndex, Array(fields.size) { val field = fields[it] - val irField = field.irField ?: error("No IR for field ${field.name} of ${irClass.render()}") if (it == outerThisIndex) { require(irClass.isInner) { "Expected an inner class: ${irClass.render()}" } require(protoClasses.size > 1) { "An inner class must have at least one outer class" } @@ -249,14 +248,14 @@ internal class KonanPartialModuleDeserializer( field.alignment ) } else { - val protoField = protoFieldsMap[field.name] ?: error("No proto for ${irField.render()}") + val protoField = protoFieldsMap[field.name] ?: error("No proto for ${field.name}") val nameAndType = BinaryNameAndType.decode(protoField.nameType) var flags = 0 if (field.isConst) flags = flags or SerializedClassFieldInfo.FLAG_IS_CONST - val classifier = irField.type.classifierOrNull - ?: error("Fields of type ${irField.type.render()} are not supported") - val primitiveBinaryType = irField.type.computePrimitiveBinaryTypeOrNull() + val classifier = field.type.classifierOrNull + ?: error("Fields of type ${field.type.render()} are not supported") + val primitiveBinaryType = field.type.computePrimitiveBinaryTypeOrNull() SerializedClassFieldInfo( nameAndType.nameIndex,