@@ -176,20 +176,46 @@ CLANG_MACRO_CONDITIONAL("SWIFT_ENUM_ATTR", "(_extensibility)", \
176176 " __attribute__((enum_extensibility(_extensibility)))" )
177177
178178CLANG_MACRO_BODY(" SWIFT_ENUM" , \
179- " # define SWIFT_ENUM(_type, _name, _extensibility) " \
179+ " # if (defined(__cplusplus) && __cplusplus >= 201103L) || " \
180+ " (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || " \
181+ " __has_feature(objc_fixed_enum)\n " \
182+ " # define SWIFT_ENUM(_type, _name, _extensibility) " \
180183 " enum _name : _type _name; " \
181184 " enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type\n " \
182- " # if __has_feature(generalized_swift_name)\n " \
183- " # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) " \
184- " enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); " \
185- " enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) " \
186- " SWIFT_ENUM_EXTRA _name : _type\n " \
185+ " # if __has_feature(generalized_swift_name)\n " \
186+ " # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) " \
187+ " enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); " \
188+ " enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) " \
189+ " SWIFT_ENUM_EXTRA _name : _type\n " \
190+ " # else\n " \
191+ " # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) " \
192+ " SWIFT_ENUM(_type, _name, _extensibility)\n " \
193+ " # endif\n " \
187194 " # else\n " \
195+ " # define SWIFT_ENUM(_type, _name, _extensibility) _type _name; enum \n " \
188196 " # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) " \
189197 " SWIFT_ENUM(_type, _name, _extensibility)\n " \
190198 " # endif" )
191199CLANG_MACRO_DEFINED(" SWIFT_ENUM_NAMED" )
192200
201+ CLANG_MACRO_BODY(" SWIFT_ENUM_TAG" , \
202+ " # if (defined(__cplusplus) && __cplusplus >= 201103L) || " \
203+ " (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || " \
204+ " __has_feature(objc_fixed_enum)\n " \
205+ " # define SWIFT_ENUM_TAG enum\n " \
206+ " # else\n " \
207+ " # define SWIFT_ENUM_TAG\n " \
208+ " # endif" )
209+
210+ CLANG_MACRO_BODY(" SWIFT_ENUM_FWD_DECL" , \
211+ " # if (defined(__cplusplus) && __cplusplus >= 201103L) || " \
212+ " (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || " \
213+ " __has_feature(objc_fixed_enum)\n " \
214+ " # define SWIFT_ENUM_FWD_DECL(_type, _name) enum _name : _type _name;\n " \
215+ " # else\n " \
216+ " # define SWIFT_ENUM_FWD_DECL(_type, _name) _type _name;\n " \
217+ " # endif" )
218+
193219CLANG_MACRO(" SWIFT_UNAVAILABLE" , , " __attribute__((unavailable))" )
194220CLANG_MACRO(" SWIFT_UNAVAILABLE_MSG" , " (msg)" , " __attribute__((unavailable(msg)))" )
195221
0 commit comments