9
9
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10
10
//
11
11
//===----------------------------------------------------------------------===//
12
- //
13
- // This file defines macros used for macro-metaprogramming lexer tokens.
14
- //
12
+ ///
13
+ /// This file defines x-macros used for metaprogramming with lexer tokens.
14
+ ///
15
+ /// KEYWORD(kw)
16
+ /// SWIFT_KEYWORD(kw)
17
+ /// DECL_KEYWORD(kw)
18
+ /// STMT_KEYWORD(kw)
19
+ /// EXPR_KEYWORD(kw)
20
+ /// PAT_KEYWORD(kw)
21
+ /// SIL_KEYWORD(kw)
22
+ /// POUND_KEYWORD(kw)
23
+ /// POUND_OBJECT_LITERAL(kw, desc, proto)
24
+ /// POUND_OLD_OBJECT_LITERAL(kw, new_kw, old_arg, new_arg)
25
+ /// POUND_CONFIG(kw)
26
+ /// PUNCTUATOR(name, str)
27
+ ///
15
28
//===----------------------------------------------------------------------===//
16
29
17
30
/// KEYWORD(kw)
18
- /// Expands for every Swift keyword, such as 'if', 'else', etc.
31
+ /// Expands by default for every Swift keyword and every SIL keyword, such as
32
+ /// 'if', 'else', 'sil_global', etc. If you only want to use Swift keywords
33
+ /// see SWIFT_KEYWORD.
19
34
#ifndef KEYWORD
20
35
#define KEYWORD(kw)
21
36
#endif
22
37
38
+ /// SWIFT_KEYWORD(kw)
39
+ /// Expands for every Swift keyword.
40
+ #ifndef SWIFT_KEYWORD
41
+ #define SWIFT_KEYWORD(kw) KEYWORD(kw)
42
+ #endif
43
+
23
44
/// DECL_KEYWORD(kw)
24
45
/// Expands for every Swift keyword that can be used in a declaration.
25
46
#ifndef DECL_KEYWORD
26
- #define DECL_KEYWORD(kw) KEYWORD (kw)
47
+ #define DECL_KEYWORD(kw) SWIFT_KEYWORD (kw)
27
48
#endif
28
49
29
50
/// STMT_KEYWORD(kw)
30
51
/// Expands for every Swift keyword used in statement grammar.
31
52
#ifndef STMT_KEYWORD
32
- #define STMT_KEYWORD(kw) KEYWORD(kw)
53
+ #define STMT_KEYWORD(kw) SWIFT_KEYWORD(kw)
54
+ #endif
55
+
56
+ /// EXPR_KEYWORD(kw)
57
+ /// Expands for every Swift keyword used in an expression, such as 'true',
58
+ /// 'false', and 'as'
59
+ #ifndef EXPR_KEYWORD
60
+ #define EXPR_KEYWORD(kw) SWIFT_KEYWORD(kw)
61
+ #endif
62
+
63
+ /// PAT_KEYWORD(kw)
64
+ /// Expands for every Swift keyword used in a pattern, which is currently
65
+ /// limited to '_'
66
+ #ifndef PAT_KEYWORD
67
+ #define PAT_KEYWORD(kw) SWIFT_KEYWORD(kw)
68
+ #endif
69
+
70
+ /// SIL_KEYWORD(kw)
71
+ /// Expands for every SIL keyword. These are only keywords when parsing SIL.
72
+ #ifndef SIL_KEYWORD
73
+ #define SIL_KEYWORD(kw) KEYWORD(kw)
33
74
#endif
34
75
35
76
/// POUND_KEYWORD(kw)
36
- /// Every keyword in the #foo namespace .
77
+ /// Every keyword prefixed with a '#' .
37
78
#ifndef POUND_KEYWORD
38
79
#define POUND_KEYWORD(kw)
39
80
#endif
40
81
41
82
/// POUND_OBJECT_LITERAL(kw, desc, proto)
42
- /// Every keyword in the #foo namespace representing an object literal.
83
+ /// Every keyword prefixed with a '#' representing an object literal.
43
84
#ifndef POUND_OBJECT_LITERAL
44
85
#define POUND_OBJECT_LITERAL(kw, desc, proto) POUND_KEYWORD(kw)
45
86
#endif
46
87
47
88
/// POUND_OLD_OBJECT_LITERAL(kw, new_kw, old_arg, new_arg)
48
- /// Every keyword in the #foo namespace representing an object literal.
89
+ /// Every keyword prefixed with a '#' representing the obsoleted form of an
90
+ /// object literal.
49
91
#ifndef POUND_OLD_OBJECT_LITERAL
50
92
#define POUND_OLD_OBJECT_LITERAL(kw, new_kw, old_arg, new_arg) POUND_KEYWORD(kw)
51
93
#endif
52
94
53
95
/// POUND_CONFIG(kw)
54
- /// Every keyword in the #foo namespace representing a configuration.
96
+ /// Every keyword prefixed with a '#' representing a configuration.
55
97
#ifndef POUND_CONFIG
56
98
#define POUND_CONFIG(kw) POUND_KEYWORD(kw)
57
99
#endif
58
100
59
- /// SIL_KEYWORD(kw)
60
- /// Expands for every SIL keyword. These are only keywords when parsing SIL.
61
- #ifndef SIL_KEYWORD
62
- #define SIL_KEYWORD(kw) KEYWORD(kw)
63
- #endif
64
-
65
101
/// PUNCTUATOR(name, str)
66
102
/// Expands for every Swift punctuator.
67
103
/// \param name The symbolic name of the punctuator, such as
@@ -128,27 +164,27 @@ STMT_KEYWORD(where)
128
164
STMT_KEYWORD(catch)
129
165
130
166
// Expression keywords.
131
- KEYWORD (as)
132
- KEYWORD (Any)
133
- KEYWORD (false)
134
- KEYWORD (is)
135
- KEYWORD (nil)
136
- KEYWORD (rethrows)
137
- KEYWORD (super)
138
- KEYWORD (self)
139
- KEYWORD (Self)
140
- KEYWORD (throw)
141
- KEYWORD (true)
142
- KEYWORD (try)
143
- KEYWORD (throws)
167
+ EXPR_KEYWORD (as)
168
+ EXPR_KEYWORD (Any)
169
+ EXPR_KEYWORD (false)
170
+ EXPR_KEYWORD (is)
171
+ EXPR_KEYWORD (nil)
172
+ EXPR_KEYWORD (rethrows)
173
+ EXPR_KEYWORD (super)
174
+ EXPR_KEYWORD (self)
175
+ EXPR_KEYWORD (Self)
176
+ EXPR_KEYWORD (throw)
177
+ EXPR_KEYWORD (true)
178
+ EXPR_KEYWORD (try)
179
+ EXPR_KEYWORD (throws)
144
180
KEYWORD(__FILE__)
145
181
KEYWORD(__LINE__)
146
182
KEYWORD(__COLUMN__)
147
183
KEYWORD(__FUNCTION__)
148
184
KEYWORD(__DSO_HANDLE__)
149
185
150
186
// Pattern keywords.
151
- KEYWORD (_)
187
+ PAT_KEYWORD (_)
152
188
153
189
// Punctuators.
154
190
PUNCTUATOR(l_paren, "(")
@@ -189,7 +225,7 @@ PUNCTUATOR(sil_exclamation, "!") // Only in SIL mode.
189
225
PUNCTUATOR(l_square_lit, "[#")
190
226
PUNCTUATOR(r_square_lit, "#]")
191
227
192
- // Keywords in the # namespace . "if" becomes "tok::pound_if".
228
+ // Keywords prefixed with a '#' . "if" becomes "tok::pound_if".
193
229
POUND_KEYWORD(if)
194
230
POUND_KEYWORD(else)
195
231
POUND_KEYWORD(elseif)
@@ -199,12 +235,11 @@ POUND_KEYWORD(line)
199
235
POUND_KEYWORD(sourceLocation)
200
236
POUND_KEYWORD(selector)
201
237
202
- // Keywords in the # namespace that are build configurations.
238
+ // Keywords prefixed with a '#' that are build configurations.
203
239
POUND_CONFIG(available)
204
240
205
241
206
- // Declaratively define object literals, including their
207
- // corresponding protocols.
242
+ // Object literals and their corresponding protocols.
208
243
POUND_OBJECT_LITERAL(fileLiteral, "file reference", ExpressibleByFileReferenceLiteral)
209
244
POUND_OBJECT_LITERAL(imageLiteral, "image", ExpressibleByImageLiteral)
210
245
POUND_OBJECT_LITERAL(colorLiteral, "color", ExpressibleByColorLiteral)
@@ -220,11 +255,14 @@ POUND_KEYWORD(dsohandle)
220
255
221
256
222
257
#undef KEYWORD
258
+ #undef SWIFT_KEYWORD
223
259
#undef DECL_KEYWORD
224
260
#undef STMT_KEYWORD
261
+ #undef EXPR_KEYWORD
262
+ #undef PAT_KEYWORD
225
263
#undef SIL_KEYWORD
226
- #undef PUNCTUATOR
227
264
#undef POUND_KEYWORD
228
265
#undef POUND_OBJECT_LITERAL
229
266
#undef POUND_OLD_OBJECT_LITERAL
230
267
#undef POUND_CONFIG
268
+ #undef PUNCTUATOR
0 commit comments