From 7b97916656646f5bad5dabb98f43665ef79842de Mon Sep 17 00:00:00 2001 From: Kyle Kauffman Date: Thu, 18 Jan 2018 08:25:24 -0500 Subject: [PATCH] Resolve name conflicts when present (dyn lib generation) (#1204) --- .../kotlin/backend/konan/CAdapterGenerator.kt | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt index f6fad545821..814fdfd0b50 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt @@ -252,8 +252,9 @@ private class ExportedElement(val kind: ElementKind, TypeUtils.getClassDescriptor(owner.context.builtIns.nullableAnyType)!! else -> uniqueName(original, shortName) to TypeUtils.getClassDescriptor(original.returnType!!)!! } - val params = ArrayList(original.explicitParameters.mapIndexed() { index, it -> - "p$index /* ${it.name.asString()} */" to TypeUtils.getClassDescriptor(it.type)!! + val uniqueNames = owner.paramsToUniqueNames(original.explicitParameters) + val params = ArrayList(original.explicitParameters.mapIndexed { idx, it -> + uniqueNames[idx] to TypeUtils.getClassDescriptor(it.type)!! }) return listOf(returned) + params } @@ -444,6 +445,21 @@ internal class CAdapterGenerator( private val scopes = mutableListOf() internal val prefix = context.config.moduleId private lateinit var outputStreamWriter: PrintWriter + private val paramNamesRecorded = mutableMapOf() + + internal fun paramsToUniqueNames(params: List): List { + paramNamesRecorded.clear() + return params.map { + val name = translateName(it.name.asString()) + val count = paramNamesRecorded.getOrDefault(name, 0) + paramNamesRecorded[name] = count + 1 + if (count == 0) { + name + } else { + "$name${count.toString()}" + } + } + } private fun visitChildren(descriptors: Collection) { for (descriptor in descriptors) {