         return s.swiftName
     }
 
-    /// return a swift representation of an identifier string (escaped if necessary)
+    /// return an idiomatic swift representation of an identifier string (escaped if necessary)
+    var swiftIdiomatic: String {
+        if let s = castableScalars[self] { return s }
+        if let s = castablePointers[self] { return s }
+        if let s = swiftIdiomaticReplacements[self] { return s }
+        let s = swiftType
+        guard !reservedTypes.contains(s) else { return s + "Type" }
+        return s.swiftName
+    }
+    
+    /// return a verbatim swift representation of an identifier string (escaped if necessary)
     var swiftVerbatim: String {
         if let s = castableScalars[self] { return s }
         if let s = castablePointers[self] { return s }

  "int64_t" : "Int64", "uint64_t" : "UInt64",
  "Error" : "ErrorType", "ErrorType" : "ErrorEnum" ]

/// Verbatim Swift type equivalents for C types
private let swiftVerbatimReplacements = swiftReplacementsForC.mapValues { $0 == "String" ? "UnsafePointer<CChar>" : $0 }

/// Types that already exist in Swift and therefore need to be treated specially
private let reservedTypes: Set = ["String", "Array", "Optional", "Set", "Error", "ErrorProtocol"]

        guard !reservedTypes.contains(s) else { return s + "Type" }
        return s.swiftName
    }

    /// return a verbatim, idiomatic swift representation of an identifier string (escaped if necessary)
    var swiftVerbatimIdiomatic: String {
        if let s = castableScalars[self] { return s }
        if let s = castablePointers[self] { return s }
        if let s = swiftVerbatimIdiomaticReplacements[self] { return s }
        let s = swiftType
        guard !reservedTypes.contains(s) else { return s + "Type" }
        return s.swiftName
    }

    /// indicate whether the type represented by the receiver is a constant
    var isCConst: Bool {
        let ns = trimmed
