Fix Kotlin property names conflicting with C keywords. (#2747)
This commit is contained in:
+5
-2
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.backend.konan.objcexport
|
||||
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.backend.konan.cKeywords
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isArray
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isInterface
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
@@ -105,11 +106,13 @@ internal class ObjCExportNamerImpl(
|
||||
}
|
||||
|
||||
private val propertyNames = object : Mapping<PropertyDescriptor, String>() {
|
||||
override fun reserved(name: String) = name in cKeywords
|
||||
|
||||
override fun conflict(first: PropertyDescriptor, second: PropertyDescriptor): Boolean =
|
||||
!mapper.canHaveSameName(first, second)
|
||||
}
|
||||
|
||||
private inner open class GlobalNameMapping<in T : Any, N> : Mapping<T, N>() {
|
||||
private open inner class GlobalNameMapping<in T : Any, N> : Mapping<T, N>() {
|
||||
final override fun conflict(first: T, second: T): Boolean = true
|
||||
}
|
||||
|
||||
@@ -131,7 +134,7 @@ internal class ObjCExportNamerImpl(
|
||||
"useStoredAccessor"
|
||||
)
|
||||
|
||||
override fun reserved(name: String) = name in reserved
|
||||
override fun reserved(name: String) = (name in reserved) || (name in cKeywords)
|
||||
}
|
||||
|
||||
private val objectInstanceSelectors = object : ClassPropertyNameMapping<ClassDescriptor>() {
|
||||
|
||||
@@ -278,3 +278,5 @@ class Deeply {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class CKeywords(val float: Float, val `enum`: Int, var goto: Boolean)
|
||||
|
||||
@@ -493,6 +493,7 @@ func testPureSwiftClasses() throws {
|
||||
func testNames() throws {
|
||||
try assertEquals(actual: ValuesKt.PROPERTY_NAME_MUST_NOT_BE_ALTERED_BY_SWIFT, expected: 111)
|
||||
try assertEquals(actual: Deeply.NestedType().thirtyTwo, expected: 32)
|
||||
try assertEquals(actual: CKeywords(float: 1.0, enum : 42, goto: true).goto_, expected: true)
|
||||
}
|
||||
|
||||
// -------- Execution of the test --------
|
||||
|
||||
Reference in New Issue
Block a user