diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt index 98b85489831..b157e15b504 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.util.referenceFunction import org.jetbrains.kotlin.konan.target.* import org.jetbrains.kotlin.name.isChildOf import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.annotations.* import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.* @@ -535,7 +536,7 @@ internal class CAdapterGenerator(val context: Context) : DeclarationDescriptorVi internal fun paramsToUniqueNames(params: List): Map { paramNamesRecorded.clear() return params.associate { - val name = translateName(it.name.asString()) + val name = translateName(it.name) val count = paramNamesRecorded.getOrDefault(name, 0) paramNamesRecorded[name] = count + 1 if (count == 0) { @@ -639,7 +640,7 @@ internal class CAdapterGenerator(val context: Context) : DeclarationDescriptorVi override fun visitPackageFragmentDescriptor(descriptor: PackageFragmentDescriptor, ignored: Void?): Boolean { val fqName = descriptor.fqName val packageScope = packageScopes.getOrPut(fqName) { - val name = if (fqName.isRoot) "root" else translateName(fqName.shortName().asString()) + val name = if (fqName.isRoot) "root" else translateName(fqName.shortName()) val scope = ExportedElementScope(ScopeKind.PACKAGE, name) scopes.last().scopes += scope scope @@ -1073,11 +1074,13 @@ internal class CAdapterGenerator(val context: Context) : DeclarationDescriptorVi return type.isUnit() || type.isNothing() } - fun translateName(name: String): String { + fun translateName(name: Name): String { + val nameString = name.asString() return when { - simpleNameMapping.contains(name) -> simpleNameMapping[name]!! - cKeywords.contains(name) -> "${name}_" - else -> name + simpleNameMapping.contains(nameString) -> simpleNameMapping[nameString]!! + cKeywords.contains(nameString) -> "${nameString}_" + name.isSpecial -> nameString.replace("[<> ]".toRegex(), "_") + else -> nameString } }