From ec901300adc6da20a3c1b7a3be150d172c8ae939 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Mon, 24 Jun 2019 19:53:03 +0300 Subject: [PATCH] Implemented native-specific clash handling during deserialization --- .../backend/konan/serialization/KonanIrlinker.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt index 9712aab39c6..1a507e9dc23 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt @@ -20,8 +20,10 @@ import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.serialization.DescriptorUniqIdAware import org.jetbrains.kotlin.backend.common.serialization.KotlinIrLinker import org.jetbrains.kotlin.backend.common.serialization.UniqId +import org.jetbrains.kotlin.backend.common.serialization.UniqIdKey import org.jetbrains.kotlin.backend.konan.descriptors.konanLibrary import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.util.SymbolTable @@ -53,6 +55,16 @@ class KonanIrLinker( override val ModuleDescriptor.irHeader get() = this.konanLibrary!!.irHeader + override fun List.handleClashes(uniqIdKey: UniqIdKey): IrFile { + if (size == 1) + return this[0] + assert(size != 0) + error("UniqId clash: ${uniqIdKey.uniqId.index}. Found in the " + + "[${this.joinToString { it.packageFragmentDescriptor.containingDeclaration.userName }}]") + } + + private val ModuleDescriptor.userName get() = konanLibrary?.libraryFile?.absolutePath ?: name.asString() + val modules: Map get() = mutableMapOf().apply { deserializersForModules.forEach { this.put(it.key.konanLibrary!!.libraryName, it.value.module)