1 | //===--- TokenKinds.def - C Family Token Kind Database ----------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This file defines the TokenKind database. This includes normal tokens like |
10 | // tok::ampamp (corresponding to the && token) as well as keywords for various |
11 | // languages. Users of this file must optionally #define the TOK, KEYWORD, |
12 | // CXX11_KEYWORD, ALIAS, or PPKEYWORD macros to make use of this file. |
13 | // |
14 | //===----------------------------------------------------------------------===// |
15 | |
16 | #ifndef TOK |
17 | #define TOK(X) |
18 | #endif |
19 | #ifndef PUNCTUATOR |
20 | #define PUNCTUATOR(X,Y) TOK(X) |
21 | #endif |
22 | #ifndef KEYWORD |
23 | #define KEYWORD(X,Y) TOK(kw_ ## X) |
24 | #endif |
25 | #ifndef CXX11_KEYWORD |
26 | #define CXX11_KEYWORD(X,Y) KEYWORD(X,KEYCXX11|(Y)) |
27 | #endif |
28 | #ifndef CXX20_KEYWORD |
29 | #define CXX20_KEYWORD(X,Y) KEYWORD(X,KEYCXX20|(Y)) |
30 | #endif |
31 | #ifndef C99_KEYWORD |
32 | #define C99_KEYWORD(X,Y) KEYWORD(X,KEYC99|(Y)) |
33 | #endif |
34 | #ifndef C23_KEYWORD |
35 | #define C23_KEYWORD(X,Y) KEYWORD(X,KEYC23|(Y)) |
36 | #endif |
37 | #ifndef COROUTINES_KEYWORD |
38 | #define COROUTINES_KEYWORD(X) CXX20_KEYWORD(X,KEYCOROUTINES) |
39 | #endif |
40 | #ifndef MODULES_KEYWORD |
41 | #define MODULES_KEYWORD(X) KEYWORD(X,KEYMODULES) |
42 | #endif |
43 | #ifndef TYPE_TRAIT |
44 | #define TYPE_TRAIT(N,I,K) KEYWORD(I,K) |
45 | #endif |
46 | #ifndef TYPE_TRAIT_1 |
47 | #define TYPE_TRAIT_1(I,E,K) TYPE_TRAIT(1,I,K) |
48 | #endif |
49 | #ifndef TYPE_TRAIT_2 |
50 | #define TYPE_TRAIT_2(I,E,K) TYPE_TRAIT(2,I,K) |
51 | #endif |
52 | #ifndef TYPE_TRAIT_N |
53 | #define TYPE_TRAIT_N(I,E,K) TYPE_TRAIT(0,I,K) |
54 | #endif |
55 | #ifndef ARRAY_TYPE_TRAIT |
56 | #define ARRAY_TYPE_TRAIT(I,E,K) KEYWORD(I,K) |
57 | #endif |
58 | #ifndef UNARY_EXPR_OR_TYPE_TRAIT |
59 | #define UNARY_EXPR_OR_TYPE_TRAIT(I,E,K) KEYWORD(I,K) |
60 | #endif |
61 | #ifndef CXX11_UNARY_EXPR_OR_TYPE_TRAIT |
62 | #define CXX11_UNARY_EXPR_OR_TYPE_TRAIT(I,E,K) CXX11_KEYWORD(I,K) |
63 | #endif |
64 | #ifndef EXPRESSION_TRAIT |
65 | #define EXPRESSION_TRAIT(I,E,K) KEYWORD(I,K) |
66 | #endif |
67 | #ifndef ALIAS |
68 | #define ALIAS(X,Y,Z) |
69 | #endif |
70 | #ifndef PPKEYWORD |
71 | #define PPKEYWORD(X) |
72 | #endif |
73 | #ifndef CXX_KEYWORD_OPERATOR |
74 | #define CXX_KEYWORD_OPERATOR(X,Y) |
75 | #endif |
76 | #ifndef OBJC_AT_KEYWORD |
77 | #define OBJC_AT_KEYWORD(X) |
78 | #endif |
79 | #ifndef TESTING_KEYWORD |
80 | #define TESTING_KEYWORD(X, L) KEYWORD(X, L) |
81 | #endif |
82 | #ifndef ANNOTATION |
83 | #define ANNOTATION(X) TOK(annot_ ## X) |
84 | #endif |
85 | #ifndef PRAGMA_ANNOTATION |
86 | #define PRAGMA_ANNOTATION(X) ANNOTATION(X) |
87 | #endif |
88 | #ifndef NOTABLE_IDENTIFIER |
89 | #define NOTABLE_IDENTIFIER(X) |
90 | #endif |
91 | |
92 | //===----------------------------------------------------------------------===// |
93 | // Preprocessor keywords. |
94 | //===----------------------------------------------------------------------===// |
95 | |
96 | // These have meaning after a '#' at the start of a line. These define enums in |
97 | // the tok::pp_* namespace. Note that IdentifierInfo::getPPKeywordID must be |
98 | // manually updated if something is added here. |
99 | PPKEYWORD(not_keyword) |
100 | |
101 | // C99 6.10.1 - Conditional Inclusion. |
102 | PPKEYWORD(if) |
103 | PPKEYWORD(ifdef) |
104 | PPKEYWORD(ifndef) |
105 | PPKEYWORD(elif) |
106 | PPKEYWORD(elifdef) |
107 | PPKEYWORD(elifndef) |
108 | PPKEYWORD(else) |
109 | PPKEYWORD(endif) |
110 | PPKEYWORD(defined) |
111 | |
112 | // C99 6.10.2 - Source File Inclusion. |
113 | PPKEYWORD(include) |
114 | PPKEYWORD(__include_macros) |
115 | |
116 | // C99 6.10.3 - Macro Replacement. |
117 | PPKEYWORD(define) |
118 | PPKEYWORD(undef) |
119 | |
120 | // C99 6.10.4 - Line Control. |
121 | PPKEYWORD(line) |
122 | |
123 | // C99 6.10.5 - Error Directive. |
124 | PPKEYWORD(error) |
125 | |
126 | // C99 6.10.6 - Pragma Directive. |
127 | PPKEYWORD(pragma) |
128 | |
129 | // GNU Extensions. |
130 | PPKEYWORD(import) |
131 | PPKEYWORD(include_next) |
132 | PPKEYWORD(warning) |
133 | PPKEYWORD(ident) |
134 | PPKEYWORD(sccs) |
135 | PPKEYWORD(assert) |
136 | PPKEYWORD(unassert) |
137 | |
138 | // Clang extensions |
139 | PPKEYWORD(__public_macro) |
140 | PPKEYWORD(__private_macro) |
141 | |
142 | //===----------------------------------------------------------------------===// |
143 | // Language keywords. |
144 | //===----------------------------------------------------------------------===// |
145 | |
146 | // These define members of the tok::* namespace. |
147 | |
148 | TOK(unknown) // Not a token. |
149 | TOK(eof) // End of file. |
150 | TOK(eod) // End of preprocessing directive (end of line inside a |
151 | // directive). |
152 | TOK(code_completion) // Code completion marker |
153 | |
154 | // C99 6.4.9: Comments. |
155 | TOK() // Comment (only in -E -C[C] mode) |
156 | |
157 | // C99 6.4.2: Identifiers. |
158 | TOK(identifier) // abcde123 |
159 | TOK(raw_identifier) // Used only in raw lexing mode. |
160 | |
161 | // C99 6.4.4.1: Integer Constants |
162 | // C99 6.4.4.2: Floating Constants |
163 | TOK(numeric_constant) // 0x123 |
164 | |
165 | // C99 6.4.4: Character Constants |
166 | TOK(char_constant) // 'a' |
167 | TOK(wide_char_constant) // L'b' |
168 | |
169 | // C++17 Character Constants |
170 | TOK(utf8_char_constant) // u8'a' |
171 | |
172 | // C++11 Character Constants |
173 | TOK(utf16_char_constant) // u'a' |
174 | TOK(utf32_char_constant) // U'a' |
175 | |
176 | // C99 6.4.5: String Literals. |
177 | TOK(string_literal) // "foo" |
178 | TOK(wide_string_literal) // L"foo" |
179 | |
180 | // C11 6.4.7: Header Names |
181 | TOK() // <foo>, or "foo" lexed as a header-name |
182 | |
183 | // C++11 String Literals. |
184 | TOK(utf8_string_literal) // u8"foo" |
185 | TOK(utf16_string_literal)// u"foo" |
186 | TOK(utf32_string_literal)// U"foo" |
187 | |
188 | // C99 6.4.6: Punctuators. |
189 | PUNCTUATOR(l_square, "[" ) |
190 | PUNCTUATOR(r_square, "]" ) |
191 | PUNCTUATOR(l_paren, "(" ) |
192 | PUNCTUATOR(r_paren, ")" ) |
193 | PUNCTUATOR(l_brace, "{" ) |
194 | PUNCTUATOR(r_brace, "}" ) |
195 | PUNCTUATOR(period, "." ) |
196 | PUNCTUATOR(ellipsis, "..." ) |
197 | PUNCTUATOR(amp, "&" ) |
198 | PUNCTUATOR(ampamp, "&&" ) |
199 | PUNCTUATOR(ampequal, "&=" ) |
200 | PUNCTUATOR(star, "*" ) |
201 | PUNCTUATOR(starequal, "*=" ) |
202 | PUNCTUATOR(plus, "+" ) |
203 | PUNCTUATOR(plusplus, "++" ) |
204 | PUNCTUATOR(plusequal, "+=" ) |
205 | PUNCTUATOR(minus, "-" ) |
206 | PUNCTUATOR(arrow, "->" ) |
207 | PUNCTUATOR(minusminus, "--" ) |
208 | PUNCTUATOR(minusequal, "-=" ) |
209 | PUNCTUATOR(tilde, "~" ) |
210 | PUNCTUATOR(exclaim, "!" ) |
211 | PUNCTUATOR(exclaimequal, "!=" ) |
212 | PUNCTUATOR(slash, "/" ) |
213 | PUNCTUATOR(slashequal, "/=" ) |
214 | PUNCTUATOR(percent, "%" ) |
215 | PUNCTUATOR(percentequal, "%=" ) |
216 | PUNCTUATOR(less, "<" ) |
217 | PUNCTUATOR(lessless, "<<" ) |
218 | PUNCTUATOR(lessequal, "<=" ) |
219 | PUNCTUATOR(lesslessequal, "<<=" ) |
220 | PUNCTUATOR(spaceship, "<=>" ) |
221 | PUNCTUATOR(greater, ">" ) |
222 | PUNCTUATOR(greatergreater, ">>" ) |
223 | PUNCTUATOR(greaterequal, ">=" ) |
224 | PUNCTUATOR(greatergreaterequal, ">>=" ) |
225 | PUNCTUATOR(caret, "^" ) |
226 | PUNCTUATOR(caretequal, "^=" ) |
227 | PUNCTUATOR(pipe, "|" ) |
228 | PUNCTUATOR(pipepipe, "||" ) |
229 | PUNCTUATOR(pipeequal, "|=" ) |
230 | PUNCTUATOR(question, "?" ) |
231 | PUNCTUATOR(colon, ":" ) |
232 | PUNCTUATOR(semi, ";" ) |
233 | PUNCTUATOR(equal, "=" ) |
234 | PUNCTUATOR(equalequal, "==" ) |
235 | PUNCTUATOR(comma, "," ) |
236 | PUNCTUATOR(hash, "#" ) |
237 | PUNCTUATOR(hashhash, "##" ) |
238 | PUNCTUATOR(hashat, "#@" ) |
239 | |
240 | // C++ Support |
241 | PUNCTUATOR(periodstar, ".*" ) |
242 | PUNCTUATOR(arrowstar, "->*" ) |
243 | PUNCTUATOR(coloncolon, "::" ) |
244 | |
245 | // Objective C support. |
246 | PUNCTUATOR(at, "@" ) |
247 | |
248 | // CUDA support. |
249 | PUNCTUATOR(lesslessless, "<<<" ) |
250 | PUNCTUATOR(greatergreatergreater, ">>>" ) |
251 | |
252 | // CL support |
253 | PUNCTUATOR(caretcaret, "^^" ) |
254 | |
255 | // C99 6.4.1: Keywords. These turn into kw_* tokens. |
256 | // Flags allowed: |
257 | // KEYALL - This is a keyword in all variants of C and C++, or it |
258 | // is a keyword in the implementation namespace that should |
259 | // always be treated as a keyword |
260 | // KEYC99 - This is a keyword introduced to C in C99 |
261 | // KEYC11 - This is a keyword introduced to C in C11 |
262 | // KEYC23 - This is a keyword introduced to C in C23 |
263 | // KEYCXX - This is a C++ keyword, or a C++-specific keyword in the |
264 | // implementation namespace |
265 | // KEYNOCXX - This is a keyword in every non-C++ dialect. |
266 | // KEYCXX11 - This is a C++ keyword introduced to C++ in C++11 |
267 | // KEYCXX20 - This is a C++ keyword introduced to C++ in C++20 |
268 | // KEYMODULES - This is a keyword if the C++ extensions for modules |
269 | // are enabled. |
270 | // KEYGNU - This is a keyword if GNU extensions are enabled |
271 | // KEYMS - This is a keyword if Microsoft extensions are enabled |
272 | // KEYMSCOMPAT - This is a keyword if Microsoft compatibility mode is enabled |
273 | // KEYNOMS18 - This is a keyword that must never be enabled under |
274 | // MSVC <= v18. |
275 | // KEYOPENCLC - This is a keyword in OpenCL C |
276 | // KEYOPENCLCXX - This is a keyword in C++ for OpenCL |
277 | // KEYNOOPENCL - This is a keyword that is not supported in OpenCL |
278 | // KEYALTIVEC - This is a keyword in AltiVec |
279 | // KEYZVECTOR - This is a keyword for the System z vector extensions, |
280 | // which are heavily based on AltiVec |
281 | // KEYBORLAND - This is a keyword if Borland extensions are enabled |
282 | // KEYCOROUTINES - This is a keyword if support for C++ coroutines is enabled |
283 | // BOOLSUPPORT - This is a keyword if 'bool' is a built-in type |
284 | // HALFSUPPORT - This is a keyword if 'half' is a built-in type |
285 | // WCHARSUPPORT - This is a keyword if 'wchar_t' is a built-in type |
286 | // CHAR8SUPPORT - This is a keyword if 'char8_t' is a built-in type |
287 | // KEYFIXEDPOINT - This is a keyword according to the N1169 fixed point |
288 | // extension. |
289 | // |
290 | KEYWORD(auto , KEYALL) |
291 | KEYWORD(break , KEYALL) |
292 | KEYWORD(case , KEYALL) |
293 | KEYWORD(char , KEYALL) |
294 | KEYWORD(const , KEYALL) |
295 | KEYWORD(continue , KEYALL) |
296 | KEYWORD(default , KEYALL) |
297 | KEYWORD(do , KEYALL) |
298 | KEYWORD(double , KEYALL) |
299 | KEYWORD(else , KEYALL) |
300 | KEYWORD(enum , KEYALL) |
301 | KEYWORD(extern , KEYALL) |
302 | KEYWORD(float , KEYALL) |
303 | KEYWORD(for , KEYALL) |
304 | KEYWORD(goto , KEYALL) |
305 | KEYWORD(if , KEYALL) |
306 | KEYWORD(int , KEYALL) |
307 | KEYWORD(_ExtInt , KEYALL) |
308 | KEYWORD(_BitInt , KEYALL) |
309 | KEYWORD(long , KEYALL) |
310 | KEYWORD(register , KEYALL) |
311 | KEYWORD(return , KEYALL) |
312 | KEYWORD(short , KEYALL) |
313 | KEYWORD(signed , KEYALL) |
314 | UNARY_EXPR_OR_TYPE_TRAIT(sizeof, SizeOf, KEYALL) |
315 | UNARY_EXPR_OR_TYPE_TRAIT(__datasizeof, DataSizeOf, KEYCXX) |
316 | KEYWORD(static , KEYALL) |
317 | KEYWORD(struct , KEYALL) |
318 | KEYWORD(switch , KEYALL) |
319 | KEYWORD(typedef , KEYALL) |
320 | KEYWORD(union , KEYALL) |
321 | KEYWORD(unsigned , KEYALL) |
322 | KEYWORD(void , KEYALL) |
323 | KEYWORD(volatile , KEYALL) |
324 | KEYWORD(while , KEYALL) |
325 | KEYWORD(_Alignas , KEYALL) |
326 | KEYWORD(_Alignof , KEYALL) |
327 | KEYWORD(_Atomic , KEYALL|KEYNOOPENCL) |
328 | KEYWORD(_Bool , KEYNOCXX) |
329 | KEYWORD(_Complex , KEYALL) |
330 | KEYWORD(_Generic , KEYALL) |
331 | KEYWORD(_Imaginary , KEYALL) |
332 | KEYWORD(_Noreturn , KEYALL) |
333 | KEYWORD(_Static_assert , KEYALL) |
334 | KEYWORD(_Thread_local , KEYALL) |
335 | KEYWORD(__func__ , KEYALL) |
336 | KEYWORD(__objc_yes , KEYALL) |
337 | KEYWORD(__objc_no , KEYALL) |
338 | |
339 | |
340 | // C++ 2.11p1: Keywords. |
341 | KEYWORD(asm , KEYCXX|KEYGNU) |
342 | KEYWORD(bool , BOOLSUPPORT|KEYC23) |
343 | KEYWORD(catch , KEYCXX) |
344 | KEYWORD(class , KEYCXX) |
345 | KEYWORD(const_cast , KEYCXX) |
346 | KEYWORD(delete , KEYCXX) |
347 | KEYWORD(dynamic_cast , KEYCXX) |
348 | KEYWORD(explicit , KEYCXX) |
349 | KEYWORD(export , KEYCXX) |
350 | KEYWORD(false , BOOLSUPPORT|KEYC23) |
351 | KEYWORD(friend , KEYCXX) |
352 | KEYWORD(mutable , KEYCXX) |
353 | KEYWORD(namespace , KEYCXX) |
354 | KEYWORD(new , KEYCXX) |
355 | KEYWORD(operator , KEYCXX) |
356 | KEYWORD(private , KEYCXX) |
357 | KEYWORD(protected , KEYCXX) |
358 | KEYWORD(public , KEYCXX) |
359 | KEYWORD(reinterpret_cast , KEYCXX) |
360 | KEYWORD(static_cast , KEYCXX) |
361 | KEYWORD(template , KEYCXX) |
362 | KEYWORD(this , KEYCXX) |
363 | KEYWORD(throw , KEYCXX) |
364 | KEYWORD(true , BOOLSUPPORT|KEYC23) |
365 | KEYWORD(try , KEYCXX) |
366 | KEYWORD(typename , KEYCXX) |
367 | KEYWORD(typeid , KEYCXX) |
368 | KEYWORD(using , KEYCXX) |
369 | KEYWORD(virtual , KEYCXX) |
370 | KEYWORD(wchar_t , WCHARSUPPORT) |
371 | |
372 | // C++ 2.5p2: Alternative Representations. |
373 | CXX_KEYWORD_OPERATOR(and , ampamp) |
374 | CXX_KEYWORD_OPERATOR(and_eq , ampequal) |
375 | CXX_KEYWORD_OPERATOR(bitand , amp) |
376 | CXX_KEYWORD_OPERATOR(bitor , pipe) |
377 | CXX_KEYWORD_OPERATOR(compl , tilde) |
378 | CXX_KEYWORD_OPERATOR(not , exclaim) |
379 | CXX_KEYWORD_OPERATOR(not_eq , exclaimequal) |
380 | CXX_KEYWORD_OPERATOR(or , pipepipe) |
381 | CXX_KEYWORD_OPERATOR(or_eq , pipeequal) |
382 | CXX_KEYWORD_OPERATOR(xor , caret) |
383 | CXX_KEYWORD_OPERATOR(xor_eq , caretequal) |
384 | |
385 | // C99 Keywords. |
386 | C99_KEYWORD(restrict , 0) |
387 | C99_KEYWORD(inline , KEYCXX|KEYGNU) |
388 | |
389 | |
390 | // C++11 keywords |
391 | CXX11_KEYWORD(alignas , KEYC23) |
392 | // alignof and _Alignof return the required ABI alignment |
393 | CXX11_UNARY_EXPR_OR_TYPE_TRAIT(alignof, AlignOf, KEYC23) |
394 | CXX11_KEYWORD(char16_t , KEYNOMS18) |
395 | CXX11_KEYWORD(char32_t , KEYNOMS18) |
396 | CXX11_KEYWORD(constexpr , KEYC23) |
397 | CXX11_KEYWORD(decltype , 0) |
398 | CXX11_KEYWORD(noexcept , 0) |
399 | CXX11_KEYWORD(nullptr , KEYC23) |
400 | CXX11_KEYWORD(static_assert , KEYMSCOMPAT|KEYC23) |
401 | CXX11_KEYWORD(thread_local , KEYC23) |
402 | |
403 | // C++20 / coroutines keywords |
404 | COROUTINES_KEYWORD(co_await) |
405 | COROUTINES_KEYWORD(co_return) |
406 | COROUTINES_KEYWORD(co_yield) |
407 | |
408 | // C++20 keywords |
409 | MODULES_KEYWORD(module) |
410 | MODULES_KEYWORD(import) |
411 | |
412 | // C++20 keywords. |
413 | CXX20_KEYWORD(consteval , 0) |
414 | CXX20_KEYWORD(constinit , 0) |
415 | CXX20_KEYWORD(concept , 0) |
416 | CXX20_KEYWORD(requires , 0) |
417 | |
418 | // Not a CXX20_KEYWORD because it is disabled by -fno-char8_t. |
419 | KEYWORD(char8_t , CHAR8SUPPORT) |
420 | |
421 | // C11 Extension |
422 | KEYWORD(_Float16 , KEYALL) |
423 | |
424 | // C23 keywords |
425 | C23_KEYWORD(typeof , KEYGNU) |
426 | C23_KEYWORD(typeof_unqual , 0) |
427 | |
428 | // ISO/IEC JTC1 SC22 WG14 N1169 Extension |
429 | KEYWORD(_Accum , KEYFIXEDPOINT) |
430 | KEYWORD(_Fract , KEYFIXEDPOINT) |
431 | KEYWORD(_Sat , KEYFIXEDPOINT) |
432 | |
433 | // GNU Extensions (in impl-reserved namespace) |
434 | KEYWORD(_Decimal32 , KEYALL) |
435 | KEYWORD(_Decimal64 , KEYALL) |
436 | KEYWORD(_Decimal128 , KEYALL) |
437 | KEYWORD(__null , KEYCXX) |
438 | // __alignof returns the preferred alignment of a type, the alignment |
439 | // clang will attempt to give an object of the type if allowed by ABI. |
440 | UNARY_EXPR_OR_TYPE_TRAIT(__alignof, PreferredAlignOf, KEYALL) |
441 | KEYWORD(__attribute , KEYALL) |
442 | KEYWORD(__builtin_choose_expr , KEYALL) |
443 | KEYWORD(__builtin_offsetof , KEYALL) |
444 | KEYWORD(__builtin_FILE , KEYALL) |
445 | KEYWORD(__builtin_FILE_NAME , KEYALL) |
446 | KEYWORD(__builtin_FUNCTION , KEYALL) |
447 | KEYWORD(__builtin_FUNCSIG , KEYMS) |
448 | KEYWORD(__builtin_LINE , KEYALL) |
449 | KEYWORD(__builtin_COLUMN , KEYALL) |
450 | KEYWORD(__builtin_source_location , KEYCXX) |
451 | |
452 | // __builtin_types_compatible_p is a GNU C extension that we handle like a C++ |
453 | // type trait. |
454 | TYPE_TRAIT_2(__builtin_types_compatible_p, TypeCompatible, KEYNOCXX) |
455 | KEYWORD(__builtin_va_arg , KEYALL) |
456 | KEYWORD(__extension__ , KEYALL) |
457 | KEYWORD(__float128 , KEYALL) |
458 | KEYWORD(__ibm128 , KEYALL) |
459 | KEYWORD(__imag , KEYALL) |
460 | KEYWORD(__int128 , KEYALL) |
461 | KEYWORD(__label__ , KEYALL) |
462 | KEYWORD(__real , KEYALL) |
463 | KEYWORD(__thread , KEYALL) |
464 | KEYWORD(__FUNCTION__ , KEYALL) |
465 | KEYWORD(__PRETTY_FUNCTION__ , KEYALL) |
466 | KEYWORD(__auto_type , KEYALL) |
467 | |
468 | // MS Extensions |
469 | KEYWORD(__FUNCDNAME__ , KEYMS) |
470 | KEYWORD(__FUNCSIG__ , KEYMS) |
471 | KEYWORD(L__FUNCTION__ , KEYMS) |
472 | KEYWORD(L__FUNCSIG__ , KEYMS) |
473 | TYPE_TRAIT_1(__is_interface_class, IsInterfaceClass, KEYMS) |
474 | TYPE_TRAIT_1(__is_sealed, IsSealed, KEYMS) |
475 | |
476 | // MSVC12.0 / VS2013 Type Traits |
477 | TYPE_TRAIT_1(__is_destructible, IsDestructible, KEYALL) |
478 | TYPE_TRAIT_1(__is_trivially_destructible, IsTriviallyDestructible, KEYCXX) |
479 | TYPE_TRAIT_1(__is_nothrow_destructible, IsNothrowDestructible, KEYALL) |
480 | TYPE_TRAIT_2(__is_nothrow_assignable, IsNothrowAssignable, KEYCXX) |
481 | TYPE_TRAIT_N(__is_constructible, IsConstructible, KEYCXX) |
482 | TYPE_TRAIT_N(__is_nothrow_constructible, IsNothrowConstructible, KEYCXX) |
483 | |
484 | // MSVC14.0 / VS2015 Type Traits |
485 | TYPE_TRAIT_2(__is_assignable, IsAssignable, KEYCXX) |
486 | |
487 | // MSVC Type Traits of unknown vintage |
488 | TYPE_TRAIT_1(__has_nothrow_move_assign, HasNothrowMoveAssign, KEYCXX) |
489 | TYPE_TRAIT_1(__has_trivial_move_assign, HasTrivialMoveAssign, KEYCXX) |
490 | TYPE_TRAIT_1(__has_trivial_move_constructor, HasTrivialMoveConstructor, KEYCXX) |
491 | |
492 | // GNU and MS Type Traits |
493 | TYPE_TRAIT_1(__has_nothrow_assign, HasNothrowAssign, KEYCXX) |
494 | TYPE_TRAIT_1(__has_nothrow_copy, HasNothrowCopy, KEYCXX) |
495 | TYPE_TRAIT_1(__has_nothrow_constructor, HasNothrowConstructor, KEYCXX) |
496 | TYPE_TRAIT_1(__has_trivial_assign, HasTrivialAssign, KEYCXX) |
497 | TYPE_TRAIT_1(__has_trivial_copy, HasTrivialCopy, KEYCXX) |
498 | TYPE_TRAIT_1(__has_trivial_constructor, HasTrivialDefaultConstructor, KEYCXX) |
499 | TYPE_TRAIT_1(__has_trivial_destructor, HasTrivialDestructor, KEYCXX) |
500 | TYPE_TRAIT_1(__has_virtual_destructor, HasVirtualDestructor, KEYCXX) |
501 | TYPE_TRAIT_1(__is_abstract, IsAbstract, KEYCXX) |
502 | TYPE_TRAIT_1(__is_aggregate, IsAggregate, KEYCXX) |
503 | TYPE_TRAIT_2(__is_base_of, IsBaseOf, KEYCXX) |
504 | TYPE_TRAIT_1(__is_class, IsClass, KEYCXX) |
505 | TYPE_TRAIT_2(__is_convertible_to, IsConvertibleTo, KEYCXX) |
506 | TYPE_TRAIT_1(__is_empty, IsEmpty, KEYCXX) |
507 | TYPE_TRAIT_1(__is_enum, IsEnum, KEYCXX) |
508 | TYPE_TRAIT_1(__is_final, IsFinal, KEYCXX) |
509 | TYPE_TRAIT_1(__is_literal, IsLiteral, KEYCXX) |
510 | // Name for GCC 4.6 compatibility - people have already written libraries using |
511 | // this name unfortunately. |
512 | ALIAS("__is_literal_type" , __is_literal, KEYCXX) |
513 | TYPE_TRAIT_1(__is_pod, IsPOD, KEYCXX) |
514 | TYPE_TRAIT_1(__is_polymorphic, IsPolymorphic, KEYCXX) |
515 | TYPE_TRAIT_1(__is_standard_layout, IsStandardLayout, KEYCXX) |
516 | TYPE_TRAIT_1(__is_trivial, IsTrivial, KEYCXX) |
517 | TYPE_TRAIT_2(__is_trivially_assignable, IsTriviallyAssignable, KEYCXX) |
518 | TYPE_TRAIT_N(__is_trivially_constructible, IsTriviallyConstructible, KEYCXX) |
519 | TYPE_TRAIT_1(__is_trivially_copyable, IsTriviallyCopyable, KEYCXX) |
520 | TYPE_TRAIT_1(__is_union, IsUnion, KEYCXX) |
521 | TYPE_TRAIT_1(__has_unique_object_representations, |
522 | HasUniqueObjectRepresentations, KEYCXX) |
523 | TYPE_TRAIT_2(__is_layout_compatible, IsLayoutCompatible, KEYCXX) |
524 | TYPE_TRAIT_2(__is_pointer_interconvertible_base_of, IsPointerInterconvertibleBaseOf, KEYCXX) |
525 | |
526 | #define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) KEYWORD(__##Trait, KEYCXX) |
527 | #include "clang/Basic/TransformTypeTraits.def" |
528 | |
529 | // Clang-only C++ Type Traits |
530 | TYPE_TRAIT_1(__is_trivially_relocatable, IsTriviallyRelocatable, KEYCXX) |
531 | TYPE_TRAIT_1(__is_trivially_equality_comparable, IsTriviallyEqualityComparable, KEYCXX) |
532 | TYPE_TRAIT_1(__is_bounded_array, IsBoundedArray, KEYCXX) |
533 | TYPE_TRAIT_1(__is_unbounded_array, IsUnboundedArray, KEYCXX) |
534 | TYPE_TRAIT_1(__is_nullptr, IsNullPointer, KEYCXX) |
535 | TYPE_TRAIT_1(__is_scoped_enum, IsScopedEnum, KEYCXX) |
536 | TYPE_TRAIT_1(__is_referenceable, IsReferenceable, KEYCXX) |
537 | TYPE_TRAIT_1(__can_pass_in_regs, CanPassInRegs, KEYCXX) |
538 | TYPE_TRAIT_2(__reference_binds_to_temporary, ReferenceBindsToTemporary, KEYCXX) |
539 | TYPE_TRAIT_2(__reference_constructs_from_temporary, ReferenceConstructsFromTemporary, KEYCXX) |
540 | |
541 | // Embarcadero Expression Traits |
542 | EXPRESSION_TRAIT(__is_lvalue_expr, IsLValueExpr, KEYCXX) |
543 | EXPRESSION_TRAIT(__is_rvalue_expr, IsRValueExpr, KEYCXX) |
544 | |
545 | // Embarcadero Unary Type Traits |
546 | TYPE_TRAIT_1(__is_arithmetic, IsArithmetic, KEYCXX) |
547 | TYPE_TRAIT_1(__is_floating_point, IsFloatingPoint, KEYCXX) |
548 | TYPE_TRAIT_1(__is_integral, IsIntegral, KEYCXX) |
549 | TYPE_TRAIT_1(__is_complete_type, IsCompleteType, KEYCXX) |
550 | TYPE_TRAIT_1(__is_void, IsVoid, KEYCXX) |
551 | TYPE_TRAIT_1(__is_array, IsArray, KEYCXX) |
552 | TYPE_TRAIT_1(__is_function, IsFunction, KEYCXX) |
553 | TYPE_TRAIT_1(__is_reference, IsReference, KEYCXX) |
554 | TYPE_TRAIT_1(__is_lvalue_reference, IsLvalueReference, KEYCXX) |
555 | TYPE_TRAIT_1(__is_rvalue_reference, IsRvalueReference, KEYCXX) |
556 | TYPE_TRAIT_1(__is_fundamental, IsFundamental, KEYCXX) |
557 | TYPE_TRAIT_1(__is_object, IsObject, KEYCXX) |
558 | TYPE_TRAIT_1(__is_scalar, IsScalar, KEYCXX) |
559 | TYPE_TRAIT_1(__is_compound, IsCompound, KEYCXX) |
560 | TYPE_TRAIT_1(__is_pointer, IsPointer, KEYCXX) |
561 | TYPE_TRAIT_1(__is_member_object_pointer, IsMemberObjectPointer, KEYCXX) |
562 | TYPE_TRAIT_1(__is_member_function_pointer, IsMemberFunctionPointer, KEYCXX) |
563 | TYPE_TRAIT_1(__is_member_pointer, IsMemberPointer, KEYCXX) |
564 | TYPE_TRAIT_1(__is_const, IsConst, KEYCXX) |
565 | TYPE_TRAIT_1(__is_volatile, IsVolatile, KEYCXX) |
566 | TYPE_TRAIT_1(__is_signed, IsSigned, KEYCXX) |
567 | TYPE_TRAIT_1(__is_unsigned, IsUnsigned, KEYCXX) |
568 | |
569 | // Embarcadero Binary Type Traits |
570 | TYPE_TRAIT_2(__is_same, IsSame, KEYCXX) |
571 | TYPE_TRAIT_2(__is_convertible, IsConvertible, KEYCXX) |
572 | TYPE_TRAIT_2(__is_nothrow_convertible, IsNothrowConvertible, KEYCXX) |
573 | ARRAY_TYPE_TRAIT(__array_rank, ArrayRank, KEYCXX) |
574 | ARRAY_TYPE_TRAIT(__array_extent, ArrayExtent, KEYCXX) |
575 | // Name for GCC 6 compatibility. |
576 | ALIAS("__is_same_as" , __is_same, KEYCXX) |
577 | |
578 | // Apple Extension. |
579 | KEYWORD(__private_extern__ , KEYALL) |
580 | KEYWORD(__module_private__ , KEYALL) |
581 | |
582 | // Extension that will be enabled for Microsoft, Borland and PS4, but can be |
583 | // disabled via '-fno-declspec'. |
584 | KEYWORD(__declspec , 0) |
585 | |
586 | // Microsoft Extension. |
587 | KEYWORD(__cdecl , KEYALL) |
588 | KEYWORD(__stdcall , KEYALL) |
589 | KEYWORD(__fastcall , KEYALL) |
590 | KEYWORD(__thiscall , KEYALL) |
591 | KEYWORD(__regcall , KEYALL) |
592 | KEYWORD(__vectorcall , KEYALL) |
593 | KEYWORD(__forceinline , KEYMS) |
594 | KEYWORD(__unaligned , KEYMS) |
595 | KEYWORD(__super , KEYMS) |
596 | |
597 | // OpenCL address space qualifiers |
598 | KEYWORD(__global , KEYOPENCLC | KEYOPENCLCXX) |
599 | KEYWORD(__local , KEYOPENCLC | KEYOPENCLCXX) |
600 | KEYWORD(__constant , KEYOPENCLC | KEYOPENCLCXX) |
601 | KEYWORD(__private , KEYOPENCLC | KEYOPENCLCXX) |
602 | KEYWORD(__generic , KEYOPENCLC | KEYOPENCLCXX) |
603 | ALIAS("global" , __global , KEYOPENCLC | KEYOPENCLCXX) |
604 | ALIAS("local" , __local , KEYOPENCLC | KEYOPENCLCXX) |
605 | ALIAS("constant" , __constant , KEYOPENCLC | KEYOPENCLCXX) |
606 | ALIAS("private" , __private , KEYOPENCLC) |
607 | ALIAS("generic" , __generic , KEYOPENCLC | KEYOPENCLCXX) |
608 | // OpenCL function qualifiers |
609 | KEYWORD(__kernel , KEYOPENCLC | KEYOPENCLCXX) |
610 | ALIAS("kernel" , __kernel , KEYOPENCLC | KEYOPENCLCXX) |
611 | // OpenCL access qualifiers |
612 | KEYWORD(__read_only , KEYOPENCLC | KEYOPENCLCXX) |
613 | KEYWORD(__write_only , KEYOPENCLC | KEYOPENCLCXX) |
614 | KEYWORD(__read_write , KEYOPENCLC | KEYOPENCLCXX) |
615 | ALIAS("read_only" , __read_only , KEYOPENCLC | KEYOPENCLCXX) |
616 | ALIAS("write_only" , __write_only , KEYOPENCLC | KEYOPENCLCXX) |
617 | ALIAS("read_write" , __read_write , KEYOPENCLC | KEYOPENCLCXX) |
618 | // OpenCL builtins |
619 | KEYWORD(__builtin_astype , KEYOPENCLC | KEYOPENCLCXX) |
620 | UNARY_EXPR_OR_TYPE_TRAIT(vec_step, VecStep, KEYOPENCLC | KEYOPENCLCXX | KEYALTIVEC | KEYZVECTOR) |
621 | #define GENERIC_IMAGE_TYPE(ImgType, Id) KEYWORD(ImgType##_t, KEYOPENCLC | KEYOPENCLCXX) |
622 | #include "clang/Basic/OpenCLImageTypes.def" |
623 | KEYWORD(pipe , KEYOPENCLC | KEYOPENCLCXX) |
624 | // C++ for OpenCL s2.3.1: addrspace_cast operator |
625 | KEYWORD(addrspace_cast , KEYOPENCLCXX) |
626 | |
627 | // CUDA/HIP function attributes |
628 | KEYWORD(__noinline__ , KEYCUDA) |
629 | |
630 | // HLSL keywords. |
631 | KEYWORD(cbuffer , KEYHLSL) |
632 | KEYWORD(tbuffer , KEYHLSL) |
633 | KEYWORD(groupshared , KEYHLSL) |
634 | KEYWORD(in , KEYHLSL) |
635 | KEYWORD(inout , KEYHLSL) |
636 | KEYWORD(out , KEYHLSL) |
637 | |
638 | // OpenMP Type Traits |
639 | UNARY_EXPR_OR_TYPE_TRAIT(__builtin_omp_required_simd_align, OpenMPRequiredSimdAlign, KEYALL) |
640 | |
641 | // Borland Extensions. |
642 | KEYWORD(__pascal , KEYALL) |
643 | |
644 | // Altivec Extension. |
645 | KEYWORD(__vector , KEYALTIVEC|KEYZVECTOR) |
646 | KEYWORD(__pixel , KEYALTIVEC) |
647 | KEYWORD(__bool , KEYALTIVEC|KEYZVECTOR) |
648 | |
649 | // ARM NEON extensions. |
650 | ALIAS("__fp16" , half , KEYALL) |
651 | KEYWORD(__bf16 , KEYALL) |
652 | |
653 | // OpenCL Extension. |
654 | KEYWORD(half , HALFSUPPORT) |
655 | |
656 | // Objective-C ARC keywords. |
657 | KEYWORD(__bridge , KEYOBJC) |
658 | KEYWORD(__bridge_transfer , KEYOBJC) |
659 | KEYWORD(__bridge_retained , KEYOBJC) |
660 | KEYWORD(__bridge_retain , KEYOBJC) |
661 | |
662 | // Objective-C keywords. |
663 | KEYWORD(__covariant , KEYOBJC) |
664 | KEYWORD(__contravariant , KEYOBJC) |
665 | KEYWORD(__kindof , KEYOBJC) |
666 | |
667 | // Alternate spelling for various tokens. There are GCC extensions in all |
668 | // languages, but should not be disabled in strict conformance mode. |
669 | ALIAS("__alignof__" , __alignof , KEYALL) |
670 | ALIAS("__asm" , asm , KEYALL) |
671 | ALIAS("__asm__" , asm , KEYALL) |
672 | ALIAS("__attribute__" , __attribute , KEYALL) |
673 | ALIAS("__complex" , _Complex , KEYALL) |
674 | ALIAS("__complex__" , _Complex , KEYALL) |
675 | ALIAS("__const" , const , KEYALL) |
676 | ALIAS("__const__" , const , KEYALL) |
677 | ALIAS("__decltype" , decltype , KEYCXX) |
678 | ALIAS("__imag__" , __imag , KEYALL) |
679 | ALIAS("__inline" , inline , KEYALL) |
680 | ALIAS("__inline__" , inline , KEYALL) |
681 | ALIAS("__nullptr" , nullptr , KEYCXX) |
682 | ALIAS("__real__" , __real , KEYALL) |
683 | ALIAS("__restrict" , restrict , KEYALL) |
684 | ALIAS("__restrict__" , restrict , KEYALL) |
685 | ALIAS("__signed" , signed , KEYALL) |
686 | ALIAS("__signed__" , signed , KEYALL) |
687 | ALIAS("__typeof" , typeof , KEYALL) |
688 | ALIAS("__typeof__" , typeof , KEYALL) |
689 | ALIAS("__typeof_unqual" , typeof_unqual, KEYALL) |
690 | ALIAS("__typeof_unqual__" , typeof_unqual, KEYALL) |
691 | ALIAS("__volatile" , volatile , KEYALL) |
692 | ALIAS("__volatile__" , volatile , KEYALL) |
693 | |
694 | // Type nullability. |
695 | KEYWORD(_Nonnull , KEYALL) |
696 | KEYWORD(_Nullable , KEYALL) |
697 | KEYWORD(_Nullable_result , KEYALL) |
698 | KEYWORD(_Null_unspecified , KEYALL) |
699 | |
700 | // WebAssembly Type Extension |
701 | KEYWORD(__funcref , KEYALL) |
702 | |
703 | // Microsoft extensions which should be disabled in strict conformance mode |
704 | KEYWORD(__ptr64 , KEYMS) |
705 | KEYWORD(__ptr32 , KEYMS) |
706 | KEYWORD(__sptr , KEYMS) |
707 | KEYWORD(__uptr , KEYMS) |
708 | KEYWORD(__w64 , KEYMS) |
709 | KEYWORD(__uuidof , KEYMS | KEYBORLAND) |
710 | KEYWORD(__try , KEYMS | KEYBORLAND) |
711 | KEYWORD(__finally , KEYMS | KEYBORLAND) |
712 | KEYWORD(__leave , KEYMS | KEYBORLAND) |
713 | KEYWORD(__int64 , KEYMS) |
714 | KEYWORD(__if_exists , KEYMS) |
715 | KEYWORD(__if_not_exists , KEYMS) |
716 | KEYWORD(__single_inheritance , KEYMS) |
717 | KEYWORD(__multiple_inheritance , KEYMS) |
718 | KEYWORD(__virtual_inheritance , KEYMS) |
719 | KEYWORD(__interface , KEYMS) |
720 | ALIAS("__int8" , char , KEYMS) |
721 | ALIAS("__int16" , short , KEYMS) |
722 | ALIAS("__int32" , int , KEYMS) |
723 | ALIAS("__wchar_t" , wchar_t , KEYMS) |
724 | ALIAS("__builtin_alignof" , __alignof , KEYMS) |
725 | |
726 | // Microsoft single-underscore prefixed aliases for double-underscore prefixed |
727 | // keywords. |
728 | ALIAS("_asm" , asm , KEYMS) |
729 | ALIAS("_alignof" , __alignof , KEYMS) |
730 | ALIAS("_cdecl" , __cdecl , KEYMS | KEYBORLAND) |
731 | ALIAS("_declspec" , __declspec , KEYMS) |
732 | ALIAS("_fastcall" , __fastcall , KEYMS | KEYBORLAND) |
733 | ALIAS("_finally" , __finally , KEYMSCOMPAT) |
734 | ALIAS("_forceinline" , __forceinline, KEYMSCOMPAT) |
735 | ALIAS("_inline" , inline , KEYMS) |
736 | ALIAS("_int8" , char , KEYMS) |
737 | ALIAS("_int16" , short , KEYMS) |
738 | ALIAS("_int32" , int , KEYMS) |
739 | ALIAS("_int64" , __int64 , KEYMS) |
740 | ALIAS("_leave" , __leave , KEYMSCOMPAT) |
741 | ALIAS("_multiple_inheritance" , __multiple_inheritance, KEYMSCOMPAT) |
742 | ALIAS("_ptr32" , __ptr32 , KEYMSCOMPAT) |
743 | ALIAS("_ptr64" , __ptr64 , KEYMSCOMPAT) |
744 | ALIAS("_restrict" , restrict , KEYMSCOMPAT) |
745 | ALIAS("_stdcall" , __stdcall , KEYMS | KEYBORLAND) |
746 | ALIAS("_thiscall" , __thiscall , KEYMS) |
747 | ALIAS("_try" , __try , KEYMSCOMPAT) |
748 | ALIAS("_vectorcall" , __vectorcall , KEYMS) |
749 | ALIAS("_unaligned" , __unaligned , KEYMSCOMPAT) |
750 | ALIAS("_uptr" , __uptr , KEYMSCOMPAT) |
751 | ALIAS("_uuidof" , __uuidof , KEYMS | KEYBORLAND) |
752 | ALIAS("_virtual_inheritance" , __virtual_inheritance, KEYMSCOMPAT) |
753 | ALIAS("_w64" , __w64 , KEYMSCOMPAT) |
754 | |
755 | // Borland Extensions which should be disabled in strict conformance mode. |
756 | ALIAS("_pascal" , __pascal , KEYBORLAND) |
757 | |
758 | // Clang Extensions. |
759 | KEYWORD(__builtin_convertvector , KEYALL) |
760 | UNARY_EXPR_OR_TYPE_TRAIT(__builtin_vectorelements, VectorElements, KEYALL) |
761 | ALIAS("__char16_t" , char16_t , KEYCXX) |
762 | ALIAS("__char32_t" , char32_t , KEYCXX) |
763 | KEYWORD(__builtin_bit_cast , KEYALL) |
764 | KEYWORD(__builtin_available , KEYALL) |
765 | KEYWORD(__builtin_sycl_unique_stable_name, KEYSYCL) |
766 | |
767 | // Keywords defined by Attr.td. |
768 | // The "EMPTY ## X" is used to prevent early macro-expansion of the keyword. |
769 | #ifndef KEYWORD_ATTRIBUTE |
770 | #define KEYWORD_ATTRIBUTE(X, HASARG, EMPTY) KEYWORD(EMPTY ## X, KEYALL) |
771 | #endif |
772 | #include "clang/Basic/RegularKeywordAttrInfo.inc" |
773 | |
774 | // Clang-specific keywords enabled only in testing. |
775 | TESTING_KEYWORD(__unknown_anytype , KEYALL) |
776 | |
777 | |
778 | //===----------------------------------------------------------------------===// |
779 | // Objective-C @-preceded keywords. |
780 | //===----------------------------------------------------------------------===// |
781 | |
782 | // These have meaning after an '@' in Objective-C mode. These define enums in |
783 | // the tok::objc_* namespace. |
784 | |
785 | OBJC_AT_KEYWORD(not_keyword) |
786 | OBJC_AT_KEYWORD(class) |
787 | OBJC_AT_KEYWORD(compatibility_alias) |
788 | OBJC_AT_KEYWORD(defs) |
789 | OBJC_AT_KEYWORD(encode) |
790 | OBJC_AT_KEYWORD(end) |
791 | OBJC_AT_KEYWORD(implementation) |
792 | OBJC_AT_KEYWORD(interface) |
793 | OBJC_AT_KEYWORD(private) |
794 | OBJC_AT_KEYWORD(protected) |
795 | OBJC_AT_KEYWORD(protocol) |
796 | OBJC_AT_KEYWORD(public) |
797 | OBJC_AT_KEYWORD(selector) |
798 | OBJC_AT_KEYWORD(throw) |
799 | OBJC_AT_KEYWORD(try) |
800 | OBJC_AT_KEYWORD(catch) |
801 | OBJC_AT_KEYWORD(finally) |
802 | OBJC_AT_KEYWORD(synchronized) |
803 | OBJC_AT_KEYWORD(autoreleasepool) |
804 | |
805 | OBJC_AT_KEYWORD(property) |
806 | OBJC_AT_KEYWORD(package) |
807 | OBJC_AT_KEYWORD(required) |
808 | OBJC_AT_KEYWORD(optional) |
809 | OBJC_AT_KEYWORD(synthesize) |
810 | OBJC_AT_KEYWORD(dynamic) |
811 | OBJC_AT_KEYWORD(import) |
812 | OBJC_AT_KEYWORD(available) |
813 | |
814 | //===----------------------------------------------------------------------===// |
815 | // Notable identifiers. |
816 | //===----------------------------------------------------------------------===// |
817 | NOTABLE_IDENTIFIER(not_notable) |
818 | NOTABLE_IDENTIFIER(FILE) |
819 | NOTABLE_IDENTIFIER(jmp_buf) |
820 | NOTABLE_IDENTIFIER(sigjmp_buf) |
821 | NOTABLE_IDENTIFIER(ucontext_t) |
822 | NOTABLE_IDENTIFIER(float_t) |
823 | NOTABLE_IDENTIFIER(double_t) |
824 | |
825 | // TODO: What to do about context-sensitive keywords like: |
826 | // bycopy/byref/in/inout/oneway/out? |
827 | |
828 | ANNOTATION(cxxscope) // annotation for a C++ scope spec, e.g. "::foo::bar::" |
829 | ANNOTATION(typename) // annotation for a C typedef name, a C++ (possibly |
830 | // qualified) typename, e.g. "foo::MyClass", or |
831 | // template-id that names a type ("std::vector<int>") |
832 | ANNOTATION(template_id) // annotation for a C++ template-id that names a |
833 | // function template specialization (not a type), |
834 | // e.g., "std::swap<int>", or a type-constraint (which |
835 | // might not have explicit template arguments), |
836 | // e.g. "C", "C<int>". |
837 | ANNOTATION(non_type) // annotation for a single non-type declaration |
838 | ANNOTATION(non_type_undeclared) // annotation for an undeclared identifier that |
839 | // was assumed to be an ADL-only function name |
840 | ANNOTATION(non_type_dependent) // annotation for an assumed non-type member of |
841 | // a dependent base class |
842 | ANNOTATION(overload_set) // annotation for an unresolved overload set |
843 | ANNOTATION(primary_expr) // annotation for a primary expression, used when |
844 | // tentatively parsing a lambda init-capture or ObjC |
845 | // message send |
846 | ANNOTATION(decltype) // annotation for a decltype expression, |
847 | // e.g., "decltype(foo.bar())" |
848 | ANNOTATION(pack_indexing_type) // annotation for an indexed pack of type, |
849 | // e.g., "T...[expr]" |
850 | |
851 | // Annotation for #pragma unused(...) |
852 | // For each argument inside the parentheses the pragma handler will produce |
853 | // one 'pragma_unused' annotation token followed by the argument token. |
854 | PRAGMA_ANNOTATION(pragma_unused) |
855 | |
856 | // Annotation for #pragma GCC visibility... |
857 | // The lexer produces these so that they only take effect when the parser |
858 | // handles them. |
859 | PRAGMA_ANNOTATION(pragma_vis) |
860 | |
861 | // Annotation for #pragma pack... |
862 | // The lexer produces these so that they only take effect when the parser |
863 | // handles them. |
864 | PRAGMA_ANNOTATION(pragma_pack) |
865 | |
866 | // Annotation for #pragma clang __debug parser_crash... |
867 | // The lexer produces these so that they only take effect when the parser |
868 | // handles them. |
869 | PRAGMA_ANNOTATION(pragma_parser_crash) |
870 | |
871 | // Annotation for #pragma clang __debug captured... |
872 | // The lexer produces these so that they only take effect when the parser |
873 | // handles them. |
874 | PRAGMA_ANNOTATION(pragma_captured) |
875 | |
876 | // Annotation for #pragma clang __debug dump... |
877 | // The lexer produces these so that the parser and semantic analysis can |
878 | // look up and dump the operand. |
879 | PRAGMA_ANNOTATION(pragma_dump) |
880 | |
881 | // Annotation for #pragma ms_struct... |
882 | // The lexer produces these so that they only take effect when the parser |
883 | // handles them. |
884 | PRAGMA_ANNOTATION(pragma_msstruct) |
885 | |
886 | // Annotation for #pragma align... |
887 | // The lexer produces these so that they only take effect when the parser |
888 | // handles them. |
889 | PRAGMA_ANNOTATION(pragma_align) |
890 | |
891 | // Annotation for #pragma weak id |
892 | // The lexer produces these so that they only take effect when the parser |
893 | // handles them. |
894 | PRAGMA_ANNOTATION(pragma_weak) |
895 | |
896 | // Annotation for #pragma weak id = id |
897 | // The lexer produces these so that they only take effect when the parser |
898 | // handles them. |
899 | PRAGMA_ANNOTATION(pragma_weakalias) |
900 | |
901 | // Annotation for #pragma redefine_extname... |
902 | // The lexer produces these so that they only take effect when the parser |
903 | // handles them. |
904 | PRAGMA_ANNOTATION(pragma_redefine_extname) |
905 | |
906 | // Annotation for #pragma STDC FP_CONTRACT... |
907 | // The lexer produces these so that they only take effect when the parser |
908 | // handles them. |
909 | PRAGMA_ANNOTATION(pragma_fp_contract) |
910 | |
911 | // Annotations for #pragma STDC FENV_ACCESS and #pragma fenv_access (MS compat) |
912 | // The lexer produces these so that they only take effect when the parser |
913 | // handles them. |
914 | PRAGMA_ANNOTATION(pragma_fenv_access) |
915 | PRAGMA_ANNOTATION(pragma_fenv_access_ms) |
916 | |
917 | // Annotation for #pragma STDC FENV_ROUND |
918 | // The lexer produces these so that they only take effect when the parser |
919 | // handles them. |
920 | PRAGMA_ANNOTATION(pragma_fenv_round) |
921 | |
922 | // Annotation for #pragma STDC CX_LIMITED_RANGE |
923 | // The lexer produces these so that they only take effect when the parser |
924 | // handles them. |
925 | PRAGMA_ANNOTATION(pragma_cx_limited_range) |
926 | |
927 | // Annotation for #pragma float_control |
928 | // The lexer produces these so that they only take effect when the parser |
929 | // handles them. |
930 | PRAGMA_ANNOTATION(pragma_float_control) |
931 | |
932 | // Annotation for #pragma pointers_to_members... |
933 | // The lexer produces these so that they only take effect when the parser |
934 | // handles them. |
935 | PRAGMA_ANNOTATION(pragma_ms_pointers_to_members) |
936 | |
937 | // Annotation for #pragma vtordisp... |
938 | // The lexer produces these so that they only take effect when the parser |
939 | // handles them. |
940 | PRAGMA_ANNOTATION(pragma_ms_vtordisp) |
941 | |
942 | // Annotation for all microsoft #pragmas... |
943 | // The lexer produces these so that they only take effect when the parser |
944 | // handles them. |
945 | PRAGMA_ANNOTATION(pragma_ms_pragma) |
946 | |
947 | // Annotation for #pragma OPENCL EXTENSION... |
948 | // The lexer produces these so that they only take effect when the parser |
949 | // handles them. |
950 | PRAGMA_ANNOTATION(pragma_opencl_extension) |
951 | |
952 | // Annotations for OpenMP pragma directives - #pragma omp ... |
953 | // The parser produces this annotation token when it parses an [[omp::*]] |
954 | // attribute. The tokens from the attribute argument list are replayed to the |
955 | // token stream with this leading token (and a trailing pragma_openmp_end) so |
956 | // that the parser can reuse the OpenMP parsing logic but still be able to |
957 | // distinguish between a real pragma and a converted pragma. It is not marked |
958 | // as a PRAGMA_ANNOTATION because it doesn't get generated from a #pragma. |
959 | ANNOTATION(attr_openmp) |
960 | // The lexer produces these so that they only take effect when the parser |
961 | // handles #pragma omp ... directives. |
962 | PRAGMA_ANNOTATION(pragma_openmp) |
963 | PRAGMA_ANNOTATION(pragma_openmp_end) |
964 | |
965 | // Annotations for OpenACC pragma directives - #pragma acc. |
966 | // Like with OpenMP, these are produced by the lexer when it parses a |
967 | // #pragma acc directive so it can be handled during parsing of the directives. |
968 | PRAGMA_ANNOTATION(pragma_openacc) |
969 | PRAGMA_ANNOTATION(pragma_openacc_end) |
970 | |
971 | // Annotations for loop pragma directives #pragma clang loop ... |
972 | // The lexer produces these so that they only take effect when the parser |
973 | // handles #pragma loop ... directives. |
974 | PRAGMA_ANNOTATION(pragma_loop_hint) |
975 | |
976 | PRAGMA_ANNOTATION(pragma_fp) |
977 | |
978 | // Annotation for the attribute pragma directives - #pragma clang attribute ... |
979 | PRAGMA_ANNOTATION(pragma_attribute) |
980 | |
981 | // Annotation for the riscv pragma directives - #pragma clang riscv intrinsic ... |
982 | PRAGMA_ANNOTATION(pragma_riscv) |
983 | |
984 | // Annotations for module import translated from #include etc. |
985 | ANNOTATION(module_include) |
986 | ANNOTATION(module_begin) |
987 | ANNOTATION(module_end) |
988 | |
989 | // Annotation for a header_name token that has been looked up and transformed |
990 | // into the name of a header unit. |
991 | ANNOTATION(header_unit) |
992 | |
993 | // Annotation for end of input in clang-repl. |
994 | ANNOTATION(repl_input_end) |
995 | |
996 | #undef PRAGMA_ANNOTATION |
997 | #undef ANNOTATION |
998 | #undef TESTING_KEYWORD |
999 | #undef OBJC_AT_KEYWORD |
1000 | #undef CXX_KEYWORD_OPERATOR |
1001 | #undef PPKEYWORD |
1002 | #undef ALIAS |
1003 | #undef EXPRESSION_TRAIT |
1004 | #undef CXX11_UNARY_EXPR_OR_TYPE_TRAIT |
1005 | #undef UNARY_EXPR_OR_TYPE_TRAIT |
1006 | #undef ARRAY_TYPE_TRAIT |
1007 | #undef TYPE_TRAIT_N |
1008 | #undef TYPE_TRAIT_2 |
1009 | #undef TYPE_TRAIT_1 |
1010 | #undef TYPE_TRAIT |
1011 | #undef CXX20_KEYWORD |
1012 | #undef CXX11_KEYWORD |
1013 | #undef KEYWORD |
1014 | #undef PUNCTUATOR |
1015 | #undef TOK |
1016 | #undef C99_KEYWORD |
1017 | #undef C23_KEYWORD |
1018 | #undef NOTABLE_IDENTIFIER |
1019 | |