mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
AST: Support @cdecl enums without an explicit C name
Accept `@cdecl` enums without an explicit C name. The C name defaults to the Swift one. It is printed using the `SWIFT_ENUM` macro instead of `SWIFT_ENUM_NAMED`.
This commit is contained in:
@@ -50,7 +50,8 @@ getNameForObjC(const ValueDecl *VD, CustomNamesOnly_t customNamesOnly) {
|
||||
}
|
||||
|
||||
if (auto cdeclAttr = VD->getAttrs().getAttribute<CDeclAttr>())
|
||||
return cdeclAttr->Name;
|
||||
if (!customNamesOnly || !cdeclAttr->Name.empty())
|
||||
return VD->getCDeclName();
|
||||
|
||||
if (customNamesOnly)
|
||||
return StringRef();
|
||||
|
||||
@@ -31,18 +31,18 @@ import Foundation
|
||||
// CHECK-NEXT: ObjcEnumNamedHelloDolly = 4,
|
||||
// CHECK-NEXT: };
|
||||
|
||||
@cdecl("ObjcEnumNamed") enum EnumNamed: Int {
|
||||
@cdecl(ObjcEnumNamed) enum EnumNamed: Int {
|
||||
case A, B, C, d, helloDolly
|
||||
}
|
||||
|
||||
// CHECK-LABEL: typedef SWIFT_ENUM_NAMED(unsigned int, ExplicitValues, "ExplicitValues", closed) {
|
||||
// CHECK-LABEL: typedef SWIFT_ENUM(unsigned int, ExplicitValues, closed) {
|
||||
// CHECK-NEXT: ExplicitValuesZim = 0,
|
||||
// CHECK-NEXT: ExplicitValuesZang = 219,
|
||||
// CHECK-NEXT: ExplicitValuesZung = 220,
|
||||
// CHECK-NEXT: };
|
||||
// NEGATIVE-NOT: ExplicitValuesDomain
|
||||
|
||||
@cdecl("ExplicitValues") enum ExplicitValues: CUnsignedInt {
|
||||
@cdecl enum ExplicitValues: CUnsignedInt {
|
||||
case Zim, Zang = 219, Zung
|
||||
|
||||
func methodNotExportedToC() {}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
// CHECK: #endif
|
||||
|
||||
// CHECK: /// Enums
|
||||
// CHECK: typedef SWIFT_ENUM_NAMED(int, CEnum, "CEnum", closed) {
|
||||
// CHECK: typedef SWIFT_ENUM(int, CEnum, closed) {
|
||||
// CHECK: CEnumA = 0,
|
||||
// CHECK: CEnumB = 1,
|
||||
// CHECK: };
|
||||
@@ -84,7 +84,7 @@ func g_nullablePointers(_ x: UnsafeMutableRawPointer,
|
||||
|
||||
/// Enums
|
||||
|
||||
@cdecl("CEnum")
|
||||
@cdecl
|
||||
enum CEnum: CInt { case A, B }
|
||||
|
||||
@cdecl("CEnumRenamed_CName")
|
||||
|
||||
@@ -49,6 +49,8 @@ enum SwiftEnum { case A, B }
|
||||
@cdecl("CEnum") enum CEnum: Int { case A, B }
|
||||
#endif
|
||||
|
||||
@cdecl enum CEnumDefaultName: CInt { case A, B }
|
||||
|
||||
@cdecl("CEnumNoRawType") enum CEnumNoRawType { case A, B }
|
||||
// expected-error @-1 {{'@cdecl' enum must declare an integer raw type}}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user