Skip to content

Commit 8d548ef

Browse files
install a list of symbols generated by the PrintAsClang header (#59072)
rdar://93504690
1 parent 0b05a1e commit 8d548ef

File tree

5 files changed

+390
-187
lines changed

5 files changed

+390
-187
lines changed
Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
//===--- ClangMacros.def - Macros emitted by PrintAsClang ----=--*- C++ -*-===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2022 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See https://swift.org/LICENSE.txt for license information
9+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
//
13+
// This file defines the database of macros emitted into compatibility headers
14+
// generated by PrintAsClang.
15+
//
16+
//===----------------------------------------------------------------------===//
17+
18+
// CLANG_MACRO(NAME, ARGS, VALUE)
19+
// A simple name/value macro that does not depend on a condition.
20+
#ifndef CLANG_MACRO
21+
#define CLANG_MACRO(NAME, ARGS, VALUE)
22+
#endif
23+
24+
// CLANG_MACRO_BODY(NAME, BODY)
25+
// A macro conditionalized on the name, but that defines a helper macro or
26+
// other kind of additional definitions other than the macro itself.
27+
#ifndef CLANG_MACRO_BODY
28+
#define CLANG_MACRO_BODY(NAME, BODY)
29+
#endif
30+
31+
// CLANG_MACRO_DEFINED(NAME)
32+
// Used to signal that a macro is defined by another CLANG_MACRO_BODY call.
33+
// This is included so that these macros can be included in the generated
34+
// `compatibility_symbols` file.
35+
#ifndef CLANG_MACRO_DEFINED
36+
#define CLANG_MACRO_DEFINED(NAME)
37+
#endif
38+
39+
// CLANG_MACRO_ALTERNATIVE(NAME, ARGS, CONDITION, VALUE, ALTERNATIVE)
40+
// A simple name/value macro that evaluates to the given value when the given
41+
// condition is true, or to the alternative value when it is false.
42+
#ifndef CLANG_MACRO_ALTERNATIVE
43+
#define CLANG_MACRO_ALTERNATIVE(NAME, ARGS, CONDITION, VALUE, ALTERNATIVE)
44+
#endif
45+
46+
// CLANG_MACRO_CONDITIONAL(NAME, ARGS, CONDITION, VALUE)
47+
// A simple name/value macro that only evaluates to the given value when the
48+
// given condition is true. Otherwise the macro will evaluate to nothing.
49+
#ifndef CLANG_MACRO_CONDITIONAL
50+
#define CLANG_MACRO_CONDITIONAL(NAME, ARGS, CONDITION, VALUE) \
51+
CLANG_MACRO_ALTERNATIVE(NAME, ARGS, CONDITION, VALUE, )
52+
#endif
53+
54+
// CLANG_MACRO_OBJC(NAME, ARGS, VALUE)
55+
// A simple name/value macro that is only defined when being compiled as
56+
// Objective-C.
57+
#ifndef CLANG_MACRO_OBJC
58+
#define CLANG_MACRO_OBJC(NAME, ARGS, VALUE)
59+
#endif
60+
61+
// CLANG_MACRO_CXX(NAME, ARGS, VALUE, ALTERNATIVE)
62+
// A simple name/value macro that evaluates to the given value when being
63+
// compiled as C++, or as the alternative when not.
64+
#ifndef CLANG_MACRO_CXX
65+
#define CLANG_MACRO_CXX(NAME, ARGS, VALUE, ALTERNATIVE)
66+
#endif
67+
68+
// CLANG_MACRO_CXX_BODY(NAME, BODY)
69+
// A complex macro conditionalized on whether the source is being compiled as
70+
// C++.
71+
#ifndef CLANG_MACRO_CXX_BODY
72+
#define CLANG_MACRO_CXX_BODY(NAME, BODY)
73+
#endif
74+
75+
CLANG_MACRO_DEFINED("SWIFT_TYPEDEFS")
76+
77+
#define MAP_SIMD_TYPE(C_TYPE, SCALAR_TYPE, _) \
78+
CLANG_MACRO_DEFINED("swift_" #C_TYPE "2") \
79+
CLANG_MACRO_DEFINED("swift_" #C_TYPE "3") \
80+
CLANG_MACRO_DEFINED("swift_" #C_TYPE "4")
81+
#include "swift/ClangImporter/SIMDMappedTypes.def"
82+
83+
CLANG_MACRO_BODY("SWIFT_PASTE", \
84+
"# define SWIFT_PASTE_HELPER(x, y) x##y\n" \
85+
"# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)")
86+
CLANG_MACRO_DEFINED("SWIFT_PASTE_HELPER")
87+
88+
CLANG_MACRO("SWIFT_METATYPE", "(X)", "Class")
89+
90+
CLANG_MACRO_CONDITIONAL("SWIFT_CLASS_PROPERTY", \
91+
"(...)", \
92+
"__has_feature(objc_class_property)", \
93+
"__VA_ARGS__")
94+
95+
CLANG_MACRO_CONDITIONAL("SWIFT_RUNTIME_NAME", \
96+
"(X)", \
97+
"__has_attribute(objc_runtime_name)", \
98+
"__attribute__((objc_runtime_name(X)))")
99+
100+
CLANG_MACRO_CONDITIONAL("SWIFT_COMPILE_NAME", \
101+
"(X)", \
102+
"__has_attribute(swift_name)", \
103+
"__attribute__((swift_name(X)))")
104+
105+
CLANG_MACRO_CONDITIONAL("SWIFT_METHOD_FAMILY", \
106+
"(X)", \
107+
"__has_attribute(objc_method_family)",
108+
"__attribute__((objc_method_family(X)))")
109+
110+
CLANG_MACRO_CONDITIONAL("SWIFT_NOESCAPE", , \
111+
"__has_attribute(noescape)", \
112+
"__attribute__((noescape))")
113+
114+
CLANG_MACRO_CONDITIONAL("SWIFT_RELEASES_ARGUMENT", , \
115+
"__has_attribute(ns_consumed)", \
116+
"__attribute__((ns_consumed))")
117+
118+
CLANG_MACRO_CONDITIONAL("SWIFT_WARN_UNUSED_RESULT", , \
119+
"__has_attribute(warn_unused_result)", \
120+
"__attribute__((warn_unused_result))")
121+
122+
CLANG_MACRO_CONDITIONAL("SWIFT_NORETURN", , \
123+
"__has_attribute(noreturn)", \
124+
"__attribute__((noreturn))")
125+
126+
CLANG_MACRO("SWIFT_CLASS_EXTRA", , )
127+
CLANG_MACRO("SWIFT_PROTOCOL_EXTRA", , )
128+
CLANG_MACRO("SWIFT_ENUM_EXTRA", , )
129+
130+
CLANG_MACRO_BODY("SWIFT_CLASS", \
131+
"# if __has_attribute(objc_subclassing_restricted)\n" \
132+
"# define SWIFT_CLASS(SWIFT_NAME) " \
133+
"SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) " \
134+
"SWIFT_CLASS_EXTRA\n" \
135+
"# define SWIFT_CLASS_NAMED(SWIFT_NAME) " \
136+
"__attribute((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) " \
137+
"SWIFT_CLASS_EXTRA\n" \
138+
"# else\n" \
139+
"# define SWIFT_CLASS(SWIFT_NAME) " \
140+
"SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA\n" \
141+
"# define SWIFT_CLASS_NAMED(SWIFT_NAME) " \
142+
"SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA\n" \
143+
"# endif")
144+
CLANG_MACRO_DEFINED("SWIFT_CLASS_NAMED")
145+
146+
CLANG_MACRO_BODY("SWIFT_RESILIENT_CLASS", \
147+
"# if __has_attribute(objc_class_stub)\n" \
148+
"# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) " \
149+
"SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))\n" \
150+
"# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) " \
151+
"__attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)\n" \
152+
"# else\n" \
153+
"# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)\n" \
154+
"# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)\n" \
155+
"# endif")
156+
CLANG_MACRO_DEFINED("SWIFT_RESILIENT_CLASS_NAMED")
157+
158+
CLANG_MACRO_BODY("SWIFT_PROTOCOL", \
159+
"# define SWIFT_PROTOCOL(SWIFT_NAME) " \
160+
"SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA\n" \
161+
"# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) " \
162+
"SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA")
163+
CLANG_MACRO_DEFINED("SWIFT_PROTOCOL_NAMED")
164+
165+
CLANG_MACRO("SWIFT_EXTENSION", "(M)", "SWIFT_PASTE(M##_Swift_, __LINE__)")
166+
167+
CLANG_MACRO_CONDITIONAL("OBJC_DESIGNATED_INITIALIZER", , \
168+
"__has_attribute(objc_designated_initializer)", \
169+
"__attribute__((objc_designated_initializer))")
170+
171+
CLANG_MACRO_CONDITIONAL("SWIFT_ENUM_ATTR", "(_extensibility)", \
172+
"__has_attribute(enum_extensibility)", \
173+
"__attribute__((enum_extensibility(_extensibility)))")
174+
175+
CLANG_MACRO_BODY("SWIFT_ENUM", \
176+
"# define SWIFT_ENUM(_type, _name, _extensibility) " \
177+
"enum _name : _type _name; " \
178+
"enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name: _type\n" \
179+
"# if __has_feature(generalized_swift_name)\n" \
180+
"# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) " \
181+
"enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); " \
182+
"enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) " \
183+
"SWIFT_ENUM_EXTRA _name : _type\n" \
184+
"# else\n" \
185+
"# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) " \
186+
"SWIFT_ENUM(_type, _name, _extensibility)\n" \
187+
"# endif")
188+
189+
CLANG_MACRO("SWIFT_UNAVAILABLE", , "__attribute__((unavailable))")
190+
CLANG_MACRO("SWIFT_UNAVAILABLE_MSG", "(msg)", "__attribute__((unavailable(msg)))")
191+
192+
CLANG_MACRO("SWIFT_AVAILABILITY", "(plat, ...)", "__attribute__((availability(plat, __VA_ARGS__)))")
193+
194+
CLANG_MACRO("SWIFT_WEAK_IMPORT", , "__attribute__((weak_import))")
195+
196+
CLANG_MACRO("SWIFT_DEPRECATED", , "__attribute__((deprecated))")
197+
CLANG_MACRO("SWIFT_DEPRECATED_MSG", "(...)", "__attribute__((deprecated(__VA_ARGS__)))")
198+
199+
CLANG_MACRO_ALTERNATIVE("SWIFT_DEPRECATED_OBJC", "(Msg)", \
200+
"__has_feature(attribute_diagnost_if_objc)", \
201+
"__attribute__((diagnose_if(1, Msg, \"warning\")))", \
202+
"SWIFT_DEPRECATED_MSG(Msg)")
203+
204+
CLANG_MACRO_OBJC("IBSegueAction", , )
205+
206+
CLANG_MACRO_BODY("SWIFT_EXTERN", \
207+
"# if defined(__cplusplus)\n" \
208+
"# define SWIFT_EXTERN extern \"C\"\n" \
209+
"# else\n" \
210+
"# define SWIFT_EXTERN extern\n"
211+
"# endif")
212+
213+
CLANG_MACRO("SWIFT_CALL", , "__attribute__((swiftcall))")
214+
215+
CLANG_MACRO("SWIFT_INDIRECT_RESULT", , "__attribute__((swift_indirect_result))")
216+
217+
CLANG_MACRO("SWIFT_CONTEXT", , "__attribute__((swift_context))")
218+
219+
CLANG_MACRO("SWIFT_ERROR_RESULT", , "__attribute__((swift_error_result))")
220+
221+
// The expansion of this depends on whether stdlib is built as a dynamic library, so do that print
222+
// in PrintAsClang.cpp instead of here since it can't be done in a preprocessor macro
223+
CLANG_MACRO_DEFINED("SWIFT_IMPORT_STDLIB_SYMBOL")
224+
225+
CLANG_MACRO_CXX("SWIFT_NOEXCEPT", , "noexcept", )
226+
227+
#undef CLANG_MACRO
228+
#undef CLANG_MACRO_BODY
229+
#undef CLANG_MACRO_DEFINED
230+
#undef CLANG_MACRO_ALTERNATIVE
231+
#undef CLANG_MACRO_CONDITIONAL
232+
#undef CLANG_MACRO_OBJC
233+
#undef CLANG_MACRO_CXX
234+
#undef CLANG_MACRO_CXX_BODY

0 commit comments

Comments
 (0)