1193326Sed//===--- TokenKinds.def - C Family Token Kind Database ----------*- C++ -*-===//
2193326Sed//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6193326Sed//
7193326Sed//===----------------------------------------------------------------------===//
8193326Sed//
9193326Sed// This file defines the TokenKind database.  This includes normal tokens like
10193326Sed// tok::ampamp (corresponding to the && token) as well as keywords for various
11193326Sed// languages.  Users of this file must optionally #define the TOK, KEYWORD,
12288943Sdim// CXX11_KEYWORD, CONCEPTS_KEYWORD, ALIAS, or PPKEYWORD macros to make use of
13288943Sdim// this file.
14193326Sed//
15193326Sed//===----------------------------------------------------------------------===//
16193326Sed
17193326Sed#ifndef TOK
18193326Sed#define TOK(X)
19193326Sed#endif
20199990Srdivacky#ifndef PUNCTUATOR
21199990Srdivacky#define PUNCTUATOR(X,Y) TOK(X)
22199990Srdivacky#endif
23193326Sed#ifndef KEYWORD
24193326Sed#define KEYWORD(X,Y) TOK(kw_ ## X)
25193326Sed#endif
26288943Sdim#ifndef CXX11_KEYWORD
27288943Sdim#define CXX11_KEYWORD(X,Y) KEYWORD(X,KEYCXX11|(Y))
28288943Sdim#endif
29327952Sdim#ifndef CXX2A_KEYWORD
30327952Sdim#define CXX2A_KEYWORD(X,Y) KEYWORD(X,KEYCXX2A|(Y))
31327952Sdim#endif
32288943Sdim#ifndef CONCEPTS_KEYWORD
33327952Sdim#define CONCEPTS_KEYWORD(X) CXX2A_KEYWORD(X,KEYCONCEPTS)
34288943Sdim#endif
35353358Sdim#ifndef COROUTINES_KEYWORD
36353358Sdim#define COROUTINES_KEYWORD(X) CXX2A_KEYWORD(X,KEYCOROUTINES)
37353358Sdim#endif
38314564Sdim#ifndef MODULES_KEYWORD
39314564Sdim#define MODULES_KEYWORD(X) KEYWORD(X,KEYMODULES)
40314564Sdim#endif
41276479Sdim#ifndef TYPE_TRAIT
42276479Sdim#define TYPE_TRAIT(N,I,K) KEYWORD(I,K)
43276479Sdim#endif
44276479Sdim#ifndef TYPE_TRAIT_1
45276479Sdim#define TYPE_TRAIT_1(I,E,K) TYPE_TRAIT(1,I,K)
46276479Sdim#endif
47276479Sdim#ifndef TYPE_TRAIT_2
48276479Sdim#define TYPE_TRAIT_2(I,E,K) TYPE_TRAIT(2,I,K)
49276479Sdim#endif
50276479Sdim#ifndef TYPE_TRAIT_N
51276479Sdim#define TYPE_TRAIT_N(I,E,K) TYPE_TRAIT(0,I,K)
52276479Sdim#endif
53193326Sed#ifndef ALIAS
54193326Sed#define ALIAS(X,Y,Z)
55193326Sed#endif
56193326Sed#ifndef PPKEYWORD
57193326Sed#define PPKEYWORD(X)
58193326Sed#endif
59193326Sed#ifndef CXX_KEYWORD_OPERATOR
60193326Sed#define CXX_KEYWORD_OPERATOR(X,Y)
61193326Sed#endif
62344779Sdim#ifndef OBJC_AT_KEYWORD
63344779Sdim#define OBJC_AT_KEYWORD(X)
64193326Sed#endif
65221345Sdim#ifndef TESTING_KEYWORD
66221345Sdim#define TESTING_KEYWORD(X, L) KEYWORD(X, L)
67221345Sdim#endif
68193326Sed#ifndef ANNOTATION
69193326Sed#define ANNOTATION(X) TOK(annot_ ## X)
70193326Sed#endif
71360784Sdim#ifndef PRAGMA_ANNOTATION
72360784Sdim#define PRAGMA_ANNOTATION(X) ANNOTATION(X)
73360784Sdim#endif
74193326Sed
75193326Sed//===----------------------------------------------------------------------===//
76193326Sed// Preprocessor keywords.
77193326Sed//===----------------------------------------------------------------------===//
78193326Sed
79193326Sed// These have meaning after a '#' at the start of a line. These define enums in
80193326Sed// the tok::pp_* namespace.  Note that IdentifierInfo::getPPKeywordID must be
81193326Sed// manually updated if something is added here.
82193326SedPPKEYWORD(not_keyword)
83193326Sed
84193326Sed// C99 6.10.1 - Conditional Inclusion.
85193326SedPPKEYWORD(if)
86193326SedPPKEYWORD(ifdef)
87193326SedPPKEYWORD(ifndef)
88193326SedPPKEYWORD(elif)
89193326SedPPKEYWORD(else)
90193326SedPPKEYWORD(endif)
91193326SedPPKEYWORD(defined)
92193326Sed
93193326Sed// C99 6.10.2 - Source File Inclusion.
94193326SedPPKEYWORD(include)
95193326SedPPKEYWORD(__include_macros)
96193326Sed
97193326Sed// C99 6.10.3 - Macro Replacement.
98193326SedPPKEYWORD(define)
99193326SedPPKEYWORD(undef)
100193326Sed
101193326Sed// C99 6.10.4 - Line Control.
102193326SedPPKEYWORD(line)
103193326Sed
104193326Sed// C99 6.10.5 - Error Directive.
105193326SedPPKEYWORD(error)
106193326Sed
107193326Sed// C99 6.10.6 - Pragma Directive.
108193326SedPPKEYWORD(pragma)
109193326Sed
110193326Sed// GNU Extensions.
111193326SedPPKEYWORD(import)
112193326SedPPKEYWORD(include_next)
113193326SedPPKEYWORD(warning)
114193326SedPPKEYWORD(ident)
115193326SedPPKEYWORD(sccs)
116193326SedPPKEYWORD(assert)
117193326SedPPKEYWORD(unassert)
118193326Sed
119226633Sdim// Clang extensions
120234353SdimPPKEYWORD(__public_macro)
121234353SdimPPKEYWORD(__private_macro)
122226633Sdim
123193326Sed//===----------------------------------------------------------------------===//
124193326Sed// Language keywords.
125193326Sed//===----------------------------------------------------------------------===//
126193326Sed
127193326Sed// These define members of the tok::* namespace.
128193326Sed
129193326SedTOK(unknown)             // Not a token.
130193326SedTOK(eof)                 // End of file.
131221345SdimTOK(eod)                 // End of preprocessing directive (end of line inside a
132221345Sdim                         // directive).
133198092SrdivackyTOK(code_completion)     // Code completion marker
134193326Sed
135193326Sed// C99 6.4.9: Comments.
136193326SedTOK(comment)             // Comment (only in -E -C[C] mode)
137193326Sed
138193326Sed// C99 6.4.2: Identifiers.
139193326SedTOK(identifier)          // abcde123
140218893SdimTOK(raw_identifier)      // Used only in raw lexing mode.
141193326Sed
142193326Sed// C99 6.4.4.1: Integer Constants
143193326Sed// C99 6.4.4.2: Floating Constants
144193326SedTOK(numeric_constant)    // 0x123
145193326Sed
146193326Sed// C99 6.4.4: Character Constants
147226633SdimTOK(char_constant)       // 'a'
148226633SdimTOK(wide_char_constant)  // L'b'
149193326Sed
150327952Sdim// C++17 Character Constants
151280031SdimTOK(utf8_char_constant)  // u8'a'
152280031Sdim
153249423Sdim// C++11 Character Constants
154226633SdimTOK(utf16_char_constant) // u'a'
155226633SdimTOK(utf32_char_constant) // U'a'
156226633Sdim
157193326Sed// C99 6.4.5: String Literals.
158193326SedTOK(string_literal)      // "foo"
159193326SedTOK(wide_string_literal) // L"foo"
160193326Sed
161353358Sdim// C11 6.4.7: Header Names
162353358SdimTOK(header_name)         // <foo>, or "foo" lexed as a header-name
163353358Sdim
164249423Sdim// C++11 String Literals.
165226633SdimTOK(utf8_string_literal) // u8"foo"
166226633SdimTOK(utf16_string_literal)// u"foo"
167226633SdimTOK(utf32_string_literal)// U"foo"
168226633Sdim
169193326Sed// C99 6.4.6: Punctuators.
170199990SrdivackyPUNCTUATOR(l_square,            "[")
171199990SrdivackyPUNCTUATOR(r_square,            "]")
172199990SrdivackyPUNCTUATOR(l_paren,             "(")
173199990SrdivackyPUNCTUATOR(r_paren,             ")")
174199990SrdivackyPUNCTUATOR(l_brace,             "{")
175199990SrdivackyPUNCTUATOR(r_brace,             "}")
176199990SrdivackyPUNCTUATOR(period,              ".")
177199990SrdivackyPUNCTUATOR(ellipsis,            "...")
178199990SrdivackyPUNCTUATOR(amp,                 "&")
179199990SrdivackyPUNCTUATOR(ampamp,              "&&")
180199990SrdivackyPUNCTUATOR(ampequal,            "&=")
181199990SrdivackyPUNCTUATOR(star,                "*")
182199990SrdivackyPUNCTUATOR(starequal,           "*=")
183199990SrdivackyPUNCTUATOR(plus,                "+")
184199990SrdivackyPUNCTUATOR(plusplus,            "++")
185199990SrdivackyPUNCTUATOR(plusequal,           "+=")
186199990SrdivackyPUNCTUATOR(minus,               "-")
187199990SrdivackyPUNCTUATOR(arrow,               "->")
188199990SrdivackyPUNCTUATOR(minusminus,          "--")
189199990SrdivackyPUNCTUATOR(minusequal,          "-=")
190199990SrdivackyPUNCTUATOR(tilde,               "~")
191199990SrdivackyPUNCTUATOR(exclaim,             "!")
192199990SrdivackyPUNCTUATOR(exclaimequal,        "!=")
193199990SrdivackyPUNCTUATOR(slash,               "/")
194199990SrdivackyPUNCTUATOR(slashequal,          "/=")
195199990SrdivackyPUNCTUATOR(percent,             "%")
196199990SrdivackyPUNCTUATOR(percentequal,        "%=")
197199990SrdivackyPUNCTUATOR(less,                "<")
198199990SrdivackyPUNCTUATOR(lessless,            "<<")
199199990SrdivackyPUNCTUATOR(lessequal,           "<=")
200199990SrdivackyPUNCTUATOR(lesslessequal,       "<<=")
201327952SdimPUNCTUATOR(spaceship,           "<=>")
202199990SrdivackyPUNCTUATOR(greater,             ">")
203199990SrdivackyPUNCTUATOR(greatergreater,      ">>")
204199990SrdivackyPUNCTUATOR(greaterequal,        ">=")
205199990SrdivackyPUNCTUATOR(greatergreaterequal, ">>=")
206199990SrdivackyPUNCTUATOR(caret,               "^")
207199990SrdivackyPUNCTUATOR(caretequal,          "^=")
208199990SrdivackyPUNCTUATOR(pipe,                "|")
209199990SrdivackyPUNCTUATOR(pipepipe,            "||")
210199990SrdivackyPUNCTUATOR(pipeequal,           "|=")
211199990SrdivackyPUNCTUATOR(question,            "?")
212199990SrdivackyPUNCTUATOR(colon,               ":")
213199990SrdivackyPUNCTUATOR(semi,                ";")
214199990SrdivackyPUNCTUATOR(equal,               "=")
215199990SrdivackyPUNCTUATOR(equalequal,          "==")
216199990SrdivackyPUNCTUATOR(comma,               ",")
217199990SrdivackyPUNCTUATOR(hash,                "#")
218199990SrdivackyPUNCTUATOR(hashhash,            "##")
219199990SrdivackyPUNCTUATOR(hashat,              "#@")
220193326Sed
221193326Sed// C++ Support
222199990SrdivackyPUNCTUATOR(periodstar,          ".*")
223199990SrdivackyPUNCTUATOR(arrowstar,           "->*")
224199990SrdivackyPUNCTUATOR(coloncolon,          "::")
225193326Sed
226193326Sed// Objective C support.
227199990SrdivackyPUNCTUATOR(at,                  "@")
228193326Sed
229218893Sdim// CUDA support.
230218893SdimPUNCTUATOR(lesslessless,          "<<<")
231218893SdimPUNCTUATOR(greatergreatergreater, ">>>")
232218893Sdim
233309124Sdim// CL support
234309124SdimPUNCTUATOR(caretcaret,            "^^")
235309124Sdim
236193326Sed// C99 6.4.1: Keywords.  These turn into kw_* tokens.
237193326Sed// Flags allowed:
238193326Sed//   KEYALL   - This is a keyword in all variants of C and C++, or it
239193326Sed//              is a keyword in the implementation namespace that should
240193326Sed//              always be treated as a keyword
241193326Sed//   KEYC99   - This is a keyword introduced to C in C99
242234353Sdim//   KEYC11   - This is a keyword introduced to C in C11
243193326Sed//   KEYCXX   - This is a C++ keyword, or a C++-specific keyword in the
244193326Sed//              implementation namespace
245218893Sdim//   KEYNOCXX - This is a keyword in every non-C++ dialect.
246249423Sdim//   KEYCXX11 - This is a C++ keyword introduced to C++ in C++11
247327952Sdim//   KEYCXX2A - This is a C++ keyword introduced to C++ in C++2a
248288943Sdim//   KEYCONCEPTS - This is a keyword if the C++ extensions for concepts
249288943Sdim//                 are enabled.
250314564Sdim//   KEYMODULES - This is a keyword if the C++ extensions for modules
251314564Sdim//                are enabled.
252193326Sed//   KEYGNU   - This is a keyword if GNU extensions are enabled
253193326Sed//   KEYMS    - This is a keyword if Microsoft extensions are enabled
254353358Sdim//   KEYMSCOMPAT - This is a keyword if Microsoft compatibility mode is enabled
255288943Sdim//   KEYNOMS18 - This is a keyword that must never be enabled under
256288943Sdim//               MSVC <= v18.
257341825Sdim//   KEYOPENCLC   - This is a keyword in OpenCL C
258353358Sdim//   KEYOPENCLCXX - This is a keyword in C++ for OpenCL
259353358Sdim//   KEYNOOPENCL  - This is a keyword that is not supported in OpenCL
260218893Sdim//   KEYALTIVEC - This is a keyword in AltiVec
261288943Sdim//   KEYZVECTOR - This is a keyword for the System z vector extensions,
262288943Sdim//                which are heavily based on AltiVec
263212904Sdim//   KEYBORLAND - This is a keyword if Borland extensions are enabled
264353358Sdim//   KEYCOROUTINES - This is a keyword if support for C++ coroutines is enabled
265221345Sdim//   BOOLSUPPORT - This is a keyword if 'bool' is a built-in type
266276479Sdim//   HALFSUPPORT - This is a keyword if 'half' is a built-in type
267243830Sdim//   WCHARSUPPORT - This is a keyword if 'wchar_t' is a built-in type
268341825Sdim//   CHAR8SUPPORT - This is a keyword if 'char8_t' is a built-in type
269193326Sed//
270193326SedKEYWORD(auto                        , KEYALL)
271193326SedKEYWORD(break                       , KEYALL)
272193326SedKEYWORD(case                        , KEYALL)
273193326SedKEYWORD(char                        , KEYALL)
274193326SedKEYWORD(const                       , KEYALL)
275193326SedKEYWORD(continue                    , KEYALL)
276193326SedKEYWORD(default                     , KEYALL)
277193326SedKEYWORD(do                          , KEYALL)
278193326SedKEYWORD(double                      , KEYALL)
279193326SedKEYWORD(else                        , KEYALL)
280193326SedKEYWORD(enum                        , KEYALL)
281193326SedKEYWORD(extern                      , KEYALL)
282193326SedKEYWORD(float                       , KEYALL)
283193326SedKEYWORD(for                         , KEYALL)
284193326SedKEYWORD(goto                        , KEYALL)
285193326SedKEYWORD(if                          , KEYALL)
286193326SedKEYWORD(inline                      , KEYC99|KEYCXX|KEYGNU)
287193326SedKEYWORD(int                         , KEYALL)
288193326SedKEYWORD(long                        , KEYALL)
289193326SedKEYWORD(register                    , KEYALL)
290193326SedKEYWORD(restrict                    , KEYC99)
291193326SedKEYWORD(return                      , KEYALL)
292193326SedKEYWORD(short                       , KEYALL)
293193326SedKEYWORD(signed                      , KEYALL)
294193326SedKEYWORD(sizeof                      , KEYALL)
295193326SedKEYWORD(static                      , KEYALL)
296193326SedKEYWORD(struct                      , KEYALL)
297193326SedKEYWORD(switch                      , KEYALL)
298193326SedKEYWORD(typedef                     , KEYALL)
299193326SedKEYWORD(union                       , KEYALL)
300193326SedKEYWORD(unsigned                    , KEYALL)
301193326SedKEYWORD(void                        , KEYALL)
302193326SedKEYWORD(volatile                    , KEYALL)
303193326SedKEYWORD(while                       , KEYALL)
304226633SdimKEYWORD(_Alignas                    , KEYALL)
305239462SdimKEYWORD(_Alignof                    , KEYALL)
306296417SdimKEYWORD(_Atomic                     , KEYALL|KEYNOOPENCL)
307218893SdimKEYWORD(_Bool                       , KEYNOCXX)
308193326SedKEYWORD(_Complex                    , KEYALL)
309221345SdimKEYWORD(_Generic                    , KEYALL)
310193326SedKEYWORD(_Imaginary                  , KEYALL)
311249423SdimKEYWORD(_Noreturn                   , KEYALL)
312221345SdimKEYWORD(_Static_assert              , KEYALL)
313251662SdimKEYWORD(_Thread_local               , KEYALL)
314193326SedKEYWORD(__func__                    , KEYALL)
315234353SdimKEYWORD(__objc_yes                  , KEYALL)
316234353SdimKEYWORD(__objc_no                   , KEYALL)
317193326Sed
318234353Sdim
319193326Sed// C++ 2.11p1: Keywords.
320193326SedKEYWORD(asm                         , KEYCXX|KEYGNU)
321261991SdimKEYWORD(bool                        , BOOLSUPPORT)
322193326SedKEYWORD(catch                       , KEYCXX)
323193326SedKEYWORD(class                       , KEYCXX)
324193326SedKEYWORD(const_cast                  , KEYCXX)
325193326SedKEYWORD(delete                      , KEYCXX)
326193326SedKEYWORD(dynamic_cast                , KEYCXX)
327193326SedKEYWORD(explicit                    , KEYCXX)
328193326SedKEYWORD(export                      , KEYCXX)
329261991SdimKEYWORD(false                       , BOOLSUPPORT)
330193326SedKEYWORD(friend                      , KEYCXX)
331193326SedKEYWORD(mutable                     , KEYCXX)
332193326SedKEYWORD(namespace                   , KEYCXX)
333193326SedKEYWORD(new                         , KEYCXX)
334193326SedKEYWORD(operator                    , KEYCXX)
335276479SdimKEYWORD(private                     , KEYCXX)
336193326SedKEYWORD(protected                   , KEYCXX)
337193326SedKEYWORD(public                      , KEYCXX)
338193326SedKEYWORD(reinterpret_cast            , KEYCXX)
339193326SedKEYWORD(static_cast                 , KEYCXX)
340193326SedKEYWORD(template                    , KEYCXX)
341193326SedKEYWORD(this                        , KEYCXX)
342193326SedKEYWORD(throw                       , KEYCXX)
343261991SdimKEYWORD(true                        , BOOLSUPPORT)
344193326SedKEYWORD(try                         , KEYCXX)
345193326SedKEYWORD(typename                    , KEYCXX)
346193326SedKEYWORD(typeid                      , KEYCXX)
347193326SedKEYWORD(using                       , KEYCXX)
348193326SedKEYWORD(virtual                     , KEYCXX)
349243830SdimKEYWORD(wchar_t                     , WCHARSUPPORT)
350193326Sed
351193326Sed// C++ 2.5p2: Alternative Representations.
352193326SedCXX_KEYWORD_OPERATOR(and     , ampamp)
353193326SedCXX_KEYWORD_OPERATOR(and_eq  , ampequal)
354193326SedCXX_KEYWORD_OPERATOR(bitand  , amp)
355193326SedCXX_KEYWORD_OPERATOR(bitor   , pipe)
356193326SedCXX_KEYWORD_OPERATOR(compl   , tilde)
357193326SedCXX_KEYWORD_OPERATOR(not     , exclaim)
358193326SedCXX_KEYWORD_OPERATOR(not_eq  , exclaimequal)
359193326SedCXX_KEYWORD_OPERATOR(or      , pipepipe)
360193326SedCXX_KEYWORD_OPERATOR(or_eq   , pipeequal)
361193326SedCXX_KEYWORD_OPERATOR(xor     , caret)
362193326SedCXX_KEYWORD_OPERATOR(xor_eq  , caretequal)
363193326Sed
364249423Sdim// C++11 keywords
365288943SdimCXX11_KEYWORD(alignas               , 0)
366288943SdimCXX11_KEYWORD(alignof               , 0)
367288943SdimCXX11_KEYWORD(char16_t              , KEYNOMS18)
368288943SdimCXX11_KEYWORD(char32_t              , KEYNOMS18)
369288943SdimCXX11_KEYWORD(constexpr             , 0)
370288943SdimCXX11_KEYWORD(decltype              , 0)
371288943SdimCXX11_KEYWORD(noexcept              , 0)
372288943SdimCXX11_KEYWORD(nullptr               , 0)
373353358SdimCXX11_KEYWORD(static_assert         , KEYMSCOMPAT)
374288943SdimCXX11_KEYWORD(thread_local          , 0)
375193326Sed
376360784Sdim// C++2a keywords
377288943SdimCONCEPTS_KEYWORD(concept)
378288943SdimCONCEPTS_KEYWORD(requires)
379288943Sdim
380353358Sdim// C++2a / coroutines TS keywords
381353358SdimCOROUTINES_KEYWORD(co_await)
382353358SdimCOROUTINES_KEYWORD(co_return)
383353358SdimCOROUTINES_KEYWORD(co_yield)
384296417Sdim
385314564Sdim// C++ modules TS keywords
386314564SdimMODULES_KEYWORD(module)
387314564SdimMODULES_KEYWORD(import)
388314564Sdim
389353358Sdim// C++20 keywords.
390353358SdimCXX2A_KEYWORD(char8_t               , CHAR8SUPPORT)
391353358SdimCXX2A_KEYWORD(consteval             , 0)
392360784SdimCXX2A_KEYWORD(constinit             , 0)
393341825Sdim
394327952Sdim// C11 Extension
395327952SdimKEYWORD(_Float16                    , KEYALL)
396327952Sdim
397341825Sdim// ISO/IEC JTC1 SC22 WG14 N1169 Extension
398341825SdimKEYWORD(_Accum                      , KEYNOCXX)
399341825SdimKEYWORD(_Fract                      , KEYNOCXX)
400341825SdimKEYWORD(_Sat                        , KEYNOCXX)
401341825Sdim
402193326Sed// GNU Extensions (in impl-reserved namespace)
403193326SedKEYWORD(_Decimal32                  , KEYALL)
404193326SedKEYWORD(_Decimal64                  , KEYALL)
405193326SedKEYWORD(_Decimal128                 , KEYALL)
406193326SedKEYWORD(__null                      , KEYCXX)
407193326SedKEYWORD(__alignof                   , KEYALL)
408193326SedKEYWORD(__attribute                 , KEYALL)
409193326SedKEYWORD(__builtin_choose_expr       , KEYALL)
410193326SedKEYWORD(__builtin_offsetof          , KEYALL)
411353358SdimKEYWORD(__builtin_FILE              , KEYALL)
412353358SdimKEYWORD(__builtin_FUNCTION          , KEYALL)
413353358SdimKEYWORD(__builtin_LINE              , KEYALL)
414353358SdimKEYWORD(__builtin_COLUMN            , KEYALL)
415353358Sdim
416276479Sdim// __builtin_types_compatible_p is a GNU C extension that we handle like a C++
417276479Sdim// type trait.
418276479SdimTYPE_TRAIT_2(__builtin_types_compatible_p, TypeCompatible, KEYNOCXX)
419193326SedKEYWORD(__builtin_va_arg            , KEYALL)
420193326SedKEYWORD(__extension__               , KEYALL)
421309124SdimKEYWORD(__float128                  , KEYALL)
422193326SedKEYWORD(__imag                      , KEYALL)
423234353SdimKEYWORD(__int128                    , KEYALL)
424193326SedKEYWORD(__label__                   , KEYALL)
425193326SedKEYWORD(__real                      , KEYALL)
426193326SedKEYWORD(__thread                    , KEYALL)
427193326SedKEYWORD(__FUNCTION__                , KEYALL)
428193326SedKEYWORD(__PRETTY_FUNCTION__         , KEYALL)
429296417SdimKEYWORD(__auto_type                 , KEYALL)
430193326Sed
431193326Sed// GNU Extensions (outside impl-reserved namespace)
432193326SedKEYWORD(typeof                      , KEYGNU)
433193326Sed
434239462Sdim// MS Extensions
435261991SdimKEYWORD(__FUNCDNAME__               , KEYMS)
436276479SdimKEYWORD(__FUNCSIG__                 , KEYMS)
437239462SdimKEYWORD(L__FUNCTION__               , KEYMS)
438341825SdimKEYWORD(L__FUNCSIG__                , KEYMS)
439276479SdimTYPE_TRAIT_1(__is_interface_class, IsInterfaceClass, KEYMS)
440276479SdimTYPE_TRAIT_1(__is_sealed, IsSealed, KEYMS)
441239462Sdim
442276479Sdim// MSVC12.0 / VS2013 Type Traits
443276479SdimTYPE_TRAIT_1(__is_destructible, IsDestructible, KEYMS)
444321369SdimTYPE_TRAIT_1(__is_trivially_destructible, IsTriviallyDestructible, KEYCXX)
445276479SdimTYPE_TRAIT_1(__is_nothrow_destructible, IsNothrowDestructible, KEYMS)
446276479SdimTYPE_TRAIT_2(__is_nothrow_assignable, IsNothrowAssignable, KEYCXX)
447276479SdimTYPE_TRAIT_N(__is_constructible, IsConstructible, KEYCXX)
448276479SdimTYPE_TRAIT_N(__is_nothrow_constructible, IsNothrowConstructible, KEYCXX)
449276479Sdim
450309124Sdim// MSVC14.0 / VS2015 Type Traits
451309124SdimTYPE_TRAIT_2(__is_assignable, IsAssignable, KEYCXX)
452309124Sdim
453360784Sdim// MSVC Type Traits of unknown vintage
454360784SdimTYPE_TRAIT_1(__has_nothrow_move_assign, HasNothrowMoveAssign, KEYCXX)
455360784SdimTYPE_TRAIT_1(__has_trivial_move_assign, HasTrivialMoveAssign, KEYCXX)
456360784SdimTYPE_TRAIT_1(__has_trivial_move_constructor, HasTrivialMoveConstructor, KEYCXX)
457360784Sdim
458193326Sed// GNU and MS Type Traits
459276479SdimTYPE_TRAIT_1(__has_nothrow_assign, HasNothrowAssign, KEYCXX)
460276479SdimTYPE_TRAIT_1(__has_nothrow_copy, HasNothrowCopy, KEYCXX)
461276479SdimTYPE_TRAIT_1(__has_nothrow_constructor, HasNothrowConstructor, KEYCXX)
462276479SdimTYPE_TRAIT_1(__has_trivial_assign, HasTrivialAssign, KEYCXX)
463276479SdimTYPE_TRAIT_1(__has_trivial_copy, HasTrivialCopy, KEYCXX)
464276479SdimTYPE_TRAIT_1(__has_trivial_constructor, HasTrivialDefaultConstructor, KEYCXX)
465276479SdimTYPE_TRAIT_1(__has_trivial_destructor, HasTrivialDestructor, KEYCXX)
466276479SdimTYPE_TRAIT_1(__has_virtual_destructor, HasVirtualDestructor, KEYCXX)
467276479SdimTYPE_TRAIT_1(__is_abstract, IsAbstract, KEYCXX)
468321369SdimTYPE_TRAIT_1(__is_aggregate, IsAggregate, KEYCXX)
469276479SdimTYPE_TRAIT_2(__is_base_of, IsBaseOf, KEYCXX)
470276479SdimTYPE_TRAIT_1(__is_class, IsClass, KEYCXX)
471276479SdimTYPE_TRAIT_2(__is_convertible_to, IsConvertibleTo, KEYCXX)
472276479SdimTYPE_TRAIT_1(__is_empty, IsEmpty, KEYCXX)
473276479SdimTYPE_TRAIT_1(__is_enum, IsEnum, KEYCXX)
474276479SdimTYPE_TRAIT_1(__is_final, IsFinal, KEYCXX)
475276479SdimTYPE_TRAIT_1(__is_literal, IsLiteral, KEYCXX)
476221345Sdim// Name for GCC 4.6 compatibility - people have already written libraries using
477221345Sdim// this name unfortunately.
478276479SdimALIAS("__is_literal_type", __is_literal, KEYCXX)
479276479SdimTYPE_TRAIT_1(__is_pod, IsPOD, KEYCXX)
480276479SdimTYPE_TRAIT_1(__is_polymorphic, IsPolymorphic, KEYCXX)
481360784SdimTYPE_TRAIT_1(__is_standard_layout, IsStandardLayout, KEYCXX)
482276479SdimTYPE_TRAIT_1(__is_trivial, IsTrivial, KEYCXX)
483360784SdimTYPE_TRAIT_2(__is_trivially_assignable, IsTriviallyAssignable, KEYCXX)
484360784SdimTYPE_TRAIT_N(__is_trivially_constructible, IsTriviallyConstructible, KEYCXX)
485360784SdimTYPE_TRAIT_1(__is_trivially_copyable, IsTriviallyCopyable, KEYCXX)
486276479SdimTYPE_TRAIT_1(__is_union, IsUnion, KEYCXX)
487327952SdimTYPE_TRAIT_1(__has_unique_object_representations,
488327952Sdim             HasUniqueObjectRepresentations, KEYCXX)
489360784SdimKEYWORD(__underlying_type           , KEYCXX)
490193326Sed
491223017Sdim// Clang-only C++ Type Traits
492341825SdimTYPE_TRAIT_2(__reference_binds_to_temporary, ReferenceBindsToTemporary, KEYCXX)
493223017Sdim
494221345Sdim// Embarcadero Expression Traits
495221345SdimKEYWORD(__is_lvalue_expr            , KEYCXX)
496221345SdimKEYWORD(__is_rvalue_expr            , KEYCXX)
497221345Sdim
498221345Sdim// Embarcadero Unary Type Traits
499276479SdimTYPE_TRAIT_1(__is_arithmetic, IsArithmetic, KEYCXX)
500276479SdimTYPE_TRAIT_1(__is_floating_point, IsFloatingPoint, KEYCXX)
501276479SdimTYPE_TRAIT_1(__is_integral, IsIntegral, KEYCXX)
502276479SdimTYPE_TRAIT_1(__is_complete_type, IsCompleteType, KEYCXX)
503276479SdimTYPE_TRAIT_1(__is_void, IsVoid, KEYCXX)
504276479SdimTYPE_TRAIT_1(__is_array, IsArray, KEYCXX)
505276479SdimTYPE_TRAIT_1(__is_function, IsFunction, KEYCXX)
506276479SdimTYPE_TRAIT_1(__is_reference, IsReference, KEYCXX)
507276479SdimTYPE_TRAIT_1(__is_lvalue_reference, IsLvalueReference, KEYCXX)
508276479SdimTYPE_TRAIT_1(__is_rvalue_reference, IsRvalueReference, KEYCXX)
509276479SdimTYPE_TRAIT_1(__is_fundamental, IsFundamental, KEYCXX)
510276479SdimTYPE_TRAIT_1(__is_object, IsObject, KEYCXX)
511276479SdimTYPE_TRAIT_1(__is_scalar, IsScalar, KEYCXX)
512276479SdimTYPE_TRAIT_1(__is_compound, IsCompound, KEYCXX)
513276479SdimTYPE_TRAIT_1(__is_pointer, IsPointer, KEYCXX)
514276479SdimTYPE_TRAIT_1(__is_member_object_pointer, IsMemberObjectPointer, KEYCXX)
515276479SdimTYPE_TRAIT_1(__is_member_function_pointer, IsMemberFunctionPointer, KEYCXX)
516276479SdimTYPE_TRAIT_1(__is_member_pointer, IsMemberPointer, KEYCXX)
517276479SdimTYPE_TRAIT_1(__is_const, IsConst, KEYCXX)
518276479SdimTYPE_TRAIT_1(__is_volatile, IsVolatile, KEYCXX)
519276479SdimTYPE_TRAIT_1(__is_signed, IsSigned, KEYCXX)
520276479SdimTYPE_TRAIT_1(__is_unsigned, IsUnsigned, KEYCXX)
521221345Sdim
522221345Sdim// Embarcadero Binary Type Traits
523276479SdimTYPE_TRAIT_2(__is_same, IsSame, KEYCXX)
524276479SdimTYPE_TRAIT_2(__is_convertible, IsConvertible, KEYCXX)
525221345SdimKEYWORD(__array_rank                , KEYCXX)
526221345SdimKEYWORD(__array_extent              , KEYCXX)
527360784Sdim// Name for GCC 6 compatibility.
528360784SdimALIAS("__is_same_as", __is_same, KEYCXX)
529221345Sdim
530193326Sed// Apple Extension.
531193326SedKEYWORD(__private_extern__          , KEYALL)
532226633SdimKEYWORD(__module_private__          , KEYALL)
533193326Sed
534296417Sdim// Extension that will be enabled for Microsoft, Borland and PS4, but can be
535296417Sdim// disabled via '-fno-declspec'.
536296417SdimKEYWORD(__declspec                  , 0)
537296417Sdim
538193326Sed// Microsoft Extension.
539193326SedKEYWORD(__cdecl                     , KEYALL)
540193326SedKEYWORD(__stdcall                   , KEYALL)
541193326SedKEYWORD(__fastcall                  , KEYALL)
542208600SrdivackyKEYWORD(__thiscall                  , KEYALL)
543314564SdimKEYWORD(__regcall                   , KEYALL)
544280031SdimKEYWORD(__vectorcall                , KEYALL)
545276479SdimKEYWORD(__forceinline               , KEYMS)
546226633SdimKEYWORD(__unaligned                 , KEYMS)
547280031SdimKEYWORD(__super                     , KEYMS)
548193326Sed
549276479Sdim// OpenCL address space qualifiers
550341825SdimKEYWORD(__global                    , KEYOPENCLC | KEYOPENCLCXX)
551341825SdimKEYWORD(__local                     , KEYOPENCLC | KEYOPENCLCXX)
552341825SdimKEYWORD(__constant                  , KEYOPENCLC | KEYOPENCLCXX)
553341825SdimKEYWORD(__private                   , KEYOPENCLC | KEYOPENCLCXX)
554341825SdimKEYWORD(__generic                   , KEYOPENCLC | KEYOPENCLCXX)
555353358SdimALIAS("global", __global            , KEYOPENCLC | KEYOPENCLCXX)
556353358SdimALIAS("local", __local              , KEYOPENCLC | KEYOPENCLCXX)
557353358SdimALIAS("constant", __constant        , KEYOPENCLC | KEYOPENCLCXX)
558341825SdimALIAS("private", __private          , KEYOPENCLC)
559353358SdimALIAS("generic", __generic          , KEYOPENCLC | KEYOPENCLCXX)
560276479Sdim// OpenCL function qualifiers
561341825SdimKEYWORD(__kernel                    , KEYOPENCLC | KEYOPENCLCXX)
562341825SdimALIAS("kernel", __kernel            , KEYOPENCLC | KEYOPENCLCXX)
563276479Sdim// OpenCL access qualifiers
564341825SdimKEYWORD(__read_only                 , KEYOPENCLC | KEYOPENCLCXX)
565341825SdimKEYWORD(__write_only                , KEYOPENCLC | KEYOPENCLCXX)
566341825SdimKEYWORD(__read_write                , KEYOPENCLC | KEYOPENCLCXX)
567341825SdimALIAS("read_only", __read_only      , KEYOPENCLC | KEYOPENCLCXX)
568341825SdimALIAS("write_only", __write_only    , KEYOPENCLC | KEYOPENCLCXX)
569341825SdimALIAS("read_write", __read_write    , KEYOPENCLC | KEYOPENCLCXX)
570276479Sdim// OpenCL builtins
571353358SdimKEYWORD(__builtin_astype            , KEYOPENCLC | KEYOPENCLCXX)
572341825SdimKEYWORD(vec_step                    , KEYOPENCLC | KEYALTIVEC | KEYZVECTOR)
573353358Sdim#define GENERIC_IMAGE_TYPE(ImgType, Id) KEYWORD(ImgType##_t, KEYOPENCLC | KEYOPENCLCXX)
574309124Sdim#include "clang/Basic/OpenCLImageTypes.def"
575218893Sdim
576288943Sdim// OpenMP Type Traits
577288943SdimKEYWORD(__builtin_omp_required_simd_align, KEYALL)
578288943Sdim
579353358SdimKEYWORD(pipe                        , KEYOPENCLC | KEYOPENCLCXX)
580296417Sdim
581218893Sdim// Borland Extensions.
582212904SdimKEYWORD(__pascal                    , KEYALL)
583212904Sdim
584203955Srdivacky// Altivec Extension.
585288943SdimKEYWORD(__vector                    , KEYALTIVEC|KEYZVECTOR)
586203955SrdivackyKEYWORD(__pixel                     , KEYALTIVEC)
587288943SdimKEYWORD(__bool                      , KEYALTIVEC|KEYZVECTOR)
588203955Srdivacky
589226633Sdim// ARM NEON extensions.
590226633SdimALIAS("__fp16", half                , KEYALL)
591226633Sdim
592226633Sdim// OpenCL Extension.
593276479SdimKEYWORD(half                        , HALFSUPPORT)
594226633Sdim
595224145Sdim// Objective-C ARC keywords.
596344779SdimKEYWORD(__bridge                     , KEYOBJC)
597344779SdimKEYWORD(__bridge_transfer            , KEYOBJC)
598344779SdimKEYWORD(__bridge_retained            , KEYOBJC)
599344779SdimKEYWORD(__bridge_retain              , KEYOBJC)
600224145Sdim
601288943Sdim// Objective-C keywords.
602344779SdimKEYWORD(__covariant                  , KEYOBJC)
603344779SdimKEYWORD(__contravariant              , KEYOBJC)
604344779SdimKEYWORD(__kindof                     , KEYOBJC)
605288943Sdim
606193326Sed// Alternate spelling for various tokens.  There are GCC extensions in all
607193326Sed// languages, but should not be disabled in strict conformance mode.
608193326SedALIAS("__alignof__"  , __alignof  , KEYALL)
609193326SedALIAS("__asm"        , asm        , KEYALL)
610193326SedALIAS("__asm__"      , asm        , KEYALL)
611221345SdimALIAS("__attribute__", __attribute, KEYALL)
612193326SedALIAS("__complex"    , _Complex   , KEYALL)
613193326SedALIAS("__complex__"  , _Complex   , KEYALL)
614221345SdimALIAS("__const"      , const      , KEYALL)
615221345SdimALIAS("__const__"    , const      , KEYALL)
616221345SdimALIAS("__decltype"   , decltype   , KEYCXX)
617193326SedALIAS("__imag__"     , __imag     , KEYALL)
618193326SedALIAS("__inline"     , inline     , KEYALL)
619193326SedALIAS("__inline__"   , inline     , KEYALL)
620221345SdimALIAS("__nullptr"    , nullptr    , KEYCXX)
621193326SedALIAS("__real__"     , __real     , KEYALL)
622193326SedALIAS("__restrict"   , restrict   , KEYALL)
623193326SedALIAS("__restrict__" , restrict   , KEYALL)
624193326SedALIAS("__signed"     , signed     , KEYALL)
625193326SedALIAS("__signed__"   , signed     , KEYALL)
626193326SedALIAS("__typeof"     , typeof     , KEYALL)
627193326SedALIAS("__typeof__"   , typeof     , KEYALL)
628193326SedALIAS("__volatile"   , volatile   , KEYALL)
629193326SedALIAS("__volatile__" , volatile   , KEYALL)
630193326Sed
631288943Sdim// Type nullability.
632288943SdimKEYWORD(_Nonnull                 , KEYALL)
633288943SdimKEYWORD(_Nullable                , KEYALL)
634288943SdimKEYWORD(_Null_unspecified        , KEYALL)
635288943Sdim
636193725Sed// Microsoft extensions which should be disabled in strict conformance mode
637239462SdimKEYWORD(__ptr64                       , KEYMS)
638239462SdimKEYWORD(__ptr32                       , KEYMS)
639261991SdimKEYWORD(__sptr                        , KEYMS)
640261991SdimKEYWORD(__uptr                        , KEYMS)
641239462SdimKEYWORD(__w64                         , KEYMS)
642239462SdimKEYWORD(__uuidof                      , KEYMS | KEYBORLAND)
643239462SdimKEYWORD(__try                         , KEYMS | KEYBORLAND)
644239462SdimKEYWORD(__finally                     , KEYMS | KEYBORLAND)
645239462SdimKEYWORD(__leave                       , KEYMS | KEYBORLAND)
646239462SdimKEYWORD(__int64                       , KEYMS)
647239462SdimKEYWORD(__if_exists                   , KEYMS)
648239462SdimKEYWORD(__if_not_exists               , KEYMS)
649239462SdimKEYWORD(__single_inheritance          , KEYMS)
650239462SdimKEYWORD(__multiple_inheritance        , KEYMS)
651239462SdimKEYWORD(__virtual_inheritance         , KEYMS)
652243830SdimKEYWORD(__interface                   , KEYMS)
653239462SdimALIAS("__int8"           , char       , KEYMS)
654280031SdimALIAS("_int8"            , char       , KEYMS)
655239462SdimALIAS("__int16"          , short      , KEYMS)
656280031SdimALIAS("_int16"           , short      , KEYMS)
657239462SdimALIAS("__int32"          , int        , KEYMS)
658280031SdimALIAS("_int32"           , int        , KEYMS)
659280031SdimALIAS("_int64"           , __int64    , KEYMS)
660261991SdimALIAS("__wchar_t"        , wchar_t    , KEYMS)
661239462SdimALIAS("_asm"             , asm        , KEYMS)
662239462SdimALIAS("_alignof"         , __alignof  , KEYMS)
663239462SdimALIAS("__builtin_alignof", __alignof  , KEYMS)
664239462SdimALIAS("_cdecl"           , __cdecl    , KEYMS | KEYBORLAND)
665239462SdimALIAS("_fastcall"        , __fastcall , KEYMS | KEYBORLAND)
666239462SdimALIAS("_stdcall"         , __stdcall  , KEYMS | KEYBORLAND)
667239462SdimALIAS("_thiscall"        , __thiscall , KEYMS)
668280031SdimALIAS("_vectorcall"      , __vectorcall, KEYMS)
669239462SdimALIAS("_uuidof"          , __uuidof   , KEYMS | KEYBORLAND)
670239462SdimALIAS("_inline"          , inline     , KEYMS)
671239462SdimALIAS("_declspec"        , __declspec , KEYMS)
672193326Sed
673212904Sdim// Borland Extensions which should be disabled in strict conformance mode.
674212904SdimALIAS("_pascal"      , __pascal   , KEYBORLAND)
675212904Sdim
676218893Sdim// Clang Extensions.
677261991SdimKEYWORD(__builtin_convertvector   , KEYALL)
678218893SdimALIAS("__char16_t"   , char16_t   , KEYCXX)
679218893SdimALIAS("__char32_t"   , char32_t   , KEYCXX)
680353358SdimKEYWORD(__builtin_bit_cast        , KEYALL)
681309124SdimKEYWORD(__builtin_available       , KEYALL)
682309124Sdim
683221345Sdim// Clang-specific keywords enabled only in testing.
684221345SdimTESTING_KEYWORD(__unknown_anytype , KEYALL)
685218893Sdim
686221345Sdim
687193326Sed//===----------------------------------------------------------------------===//
688221345Sdim// Objective-C @-preceded keywords.
689193326Sed//===----------------------------------------------------------------------===//
690193326Sed
691193326Sed// These have meaning after an '@' in Objective-C mode. These define enums in
692193326Sed// the tok::objc_* namespace.
693193326Sed
694344779SdimOBJC_AT_KEYWORD(not_keyword)
695344779SdimOBJC_AT_KEYWORD(class)
696344779SdimOBJC_AT_KEYWORD(compatibility_alias)
697344779SdimOBJC_AT_KEYWORD(defs)
698344779SdimOBJC_AT_KEYWORD(encode)
699344779SdimOBJC_AT_KEYWORD(end)
700344779SdimOBJC_AT_KEYWORD(implementation)
701344779SdimOBJC_AT_KEYWORD(interface)
702344779SdimOBJC_AT_KEYWORD(private)
703344779SdimOBJC_AT_KEYWORD(protected)
704344779SdimOBJC_AT_KEYWORD(protocol)
705344779SdimOBJC_AT_KEYWORD(public)
706344779SdimOBJC_AT_KEYWORD(selector)
707344779SdimOBJC_AT_KEYWORD(throw)
708344779SdimOBJC_AT_KEYWORD(try)
709344779SdimOBJC_AT_KEYWORD(catch)
710344779SdimOBJC_AT_KEYWORD(finally)
711344779SdimOBJC_AT_KEYWORD(synchronized)
712344779SdimOBJC_AT_KEYWORD(autoreleasepool)
713193326Sed
714344779SdimOBJC_AT_KEYWORD(property)
715344779SdimOBJC_AT_KEYWORD(package)
716344779SdimOBJC_AT_KEYWORD(required)
717344779SdimOBJC_AT_KEYWORD(optional)
718344779SdimOBJC_AT_KEYWORD(synthesize)
719344779SdimOBJC_AT_KEYWORD(dynamic)
720344779SdimOBJC_AT_KEYWORD(import)
721344779SdimOBJC_AT_KEYWORD(available)
722193326Sed
723193326Sed// TODO: What to do about context-sensitive keywords like:
724193326Sed//       bycopy/byref/in/inout/oneway/out?
725193326Sed
726193326SedANNOTATION(cxxscope)     // annotation for a C++ scope spec, e.g. "::foo::bar::"
727193326SedANNOTATION(typename)     // annotation for a C typedef name, a C++ (possibly
728193326Sed                         // qualified) typename, e.g. "foo::MyClass", or
729193326Sed                         // template-id that names a type ("std::vector<int>")
730193326SedANNOTATION(template_id)  // annotation for a C++ template-id that names a
731193326Sed                         // function template specialization (not a type),
732360784Sdim                         // e.g., "std::swap<int>", or a type-constraint (which
733360784Sdim                         // might not have explicit template arguments),
734360784Sdim                         // e.g. "C", "C<int>".
735360784SdimANNOTATION(non_type)     // annotation for a single non-type declaration
736360784SdimANNOTATION(non_type_undeclared) // annotation for an undeclared identifier that
737360784Sdim                                // was assumed to be an ADL-only function name
738360784SdimANNOTATION(non_type_dependent)  // annotation for an assumed non-type member of
739360784Sdim                                // a dependent base class
740221345SdimANNOTATION(primary_expr) // annotation for a primary expression
741234353SdimANNOTATION(decltype)     // annotation for a decltype expression,
742234353Sdim                         // e.g., "decltype(foo.bar())"
743218893Sdim
744218893Sdim// Annotation for #pragma unused(...)
745218893Sdim// For each argument inside the parentheses the pragma handler will produce
746218893Sdim// one 'pragma_unused' annotation token followed by the argument token.
747360784SdimPRAGMA_ANNOTATION(pragma_unused)
748218893Sdim
749234353Sdim// Annotation for #pragma GCC visibility...
750234353Sdim// The lexer produces these so that they only take effect when the parser
751234353Sdim// handles them.
752360784SdimPRAGMA_ANNOTATION(pragma_vis)
753234353Sdim
754234353Sdim// Annotation for #pragma pack...
755234353Sdim// The lexer produces these so that they only take effect when the parser
756234353Sdim// handles them.
757360784SdimPRAGMA_ANNOTATION(pragma_pack)
758234353Sdim
759239462Sdim// Annotation for #pragma clang __debug parser_crash...
760239462Sdim// The lexer produces these so that they only take effect when the parser
761239462Sdim// handles them.
762360784SdimPRAGMA_ANNOTATION(pragma_parser_crash)
763239462Sdim
764251662Sdim// Annotation for #pragma clang __debug captured...
765251662Sdim// The lexer produces these so that they only take effect when the parser
766251662Sdim// handles them.
767360784SdimPRAGMA_ANNOTATION(pragma_captured)
768251662Sdim
769296417Sdim// Annotation for #pragma clang __debug dump...
770296417Sdim// The lexer produces these so that the parser and semantic analysis can
771296417Sdim// look up and dump the operand.
772360784SdimPRAGMA_ANNOTATION(pragma_dump)
773296417Sdim
774243830Sdim// Annotation for #pragma ms_struct...
775243830Sdim// The lexer produces these so that they only take effect when the parser
776243830Sdim// handles them.
777360784SdimPRAGMA_ANNOTATION(pragma_msstruct)
778243830Sdim
779243830Sdim// Annotation for #pragma align...
780243830Sdim// The lexer produces these so that they only take effect when the parser
781243830Sdim// handles them.
782360784SdimPRAGMA_ANNOTATION(pragma_align)
783243830Sdim
784243830Sdim// Annotation for #pragma weak id
785243830Sdim// The lexer produces these so that they only take effect when the parser
786243830Sdim// handles them.
787360784SdimPRAGMA_ANNOTATION(pragma_weak)
788243830Sdim
789243830Sdim// Annotation for #pragma weak id = id
790243830Sdim// The lexer produces these so that they only take effect when the parser
791243830Sdim// handles them.
792360784SdimPRAGMA_ANNOTATION(pragma_weakalias)
793243830Sdim
794243830Sdim// Annotation for #pragma redefine_extname...
795243830Sdim// The lexer produces these so that they only take effect when the parser
796243830Sdim// handles them.
797360784SdimPRAGMA_ANNOTATION(pragma_redefine_extname)
798243830Sdim
799243830Sdim// Annotation for #pragma STDC FP_CONTRACT...
800243830Sdim// The lexer produces these so that they only take effect when the parser
801243830Sdim// handles them.
802360784SdimPRAGMA_ANNOTATION(pragma_fp_contract)
803243830Sdim
804344779Sdim// Annotation for #pragma STDC FENV_ACCESS
805344779Sdim// The lexer produces these so that they only take effect when the parser
806344779Sdim// handles them.
807360784SdimPRAGMA_ANNOTATION(pragma_fenv_access)
808344779Sdim
809276479Sdim// Annotation for #pragma pointers_to_members...
810276479Sdim// The lexer produces these so that they only take effect when the parser
811276479Sdim// handles them.
812360784SdimPRAGMA_ANNOTATION(pragma_ms_pointers_to_members)
813276479Sdim
814276479Sdim// Annotation for #pragma vtordisp...
815276479Sdim// The lexer produces these so that they only take effect when the parser
816276479Sdim// handles them.
817360784SdimPRAGMA_ANNOTATION(pragma_ms_vtordisp)
818276479Sdim
819276479Sdim// Annotation for all microsoft #pragmas...
820276479Sdim// The lexer produces these so that they only take effect when the parser
821276479Sdim// handles them.
822360784SdimPRAGMA_ANNOTATION(pragma_ms_pragma)
823276479Sdim
824243830Sdim// Annotation for #pragma OPENCL EXTENSION...
825243830Sdim// The lexer produces these so that they only take effect when the parser
826243830Sdim// handles them.
827360784SdimPRAGMA_ANNOTATION(pragma_opencl_extension)
828243830Sdim
829249423Sdim// Annotations for OpenMP pragma directives - #pragma omp ...
830249423Sdim// The lexer produces these so that they only take effect when the parser
831249423Sdim// handles #pragma omp ... directives.
832360784SdimPRAGMA_ANNOTATION(pragma_openmp)
833360784SdimPRAGMA_ANNOTATION(pragma_openmp_end)
834249423Sdim
835276479Sdim// Annotations for loop pragma directives #pragma clang loop ...
836276479Sdim// The lexer produces these so that they only take effect when the parser
837276479Sdim// handles #pragma loop ... directives.
838360784SdimPRAGMA_ANNOTATION(pragma_loop_hint)
839276479Sdim
840360784SdimPRAGMA_ANNOTATION(pragma_fp)
841321369Sdim
842321369Sdim// Annotation for the attribute pragma directives - #pragma clang attribute ...
843360784SdimPRAGMA_ANNOTATION(pragma_attribute)
844321369Sdim
845276479Sdim// Annotations for module import translated from #include etc.
846261991SdimANNOTATION(module_include)
847276479SdimANNOTATION(module_begin)
848276479SdimANNOTATION(module_end)
849261991Sdim
850353358Sdim// Annotation for a header_name token that has been looked up and transformed
851353358Sdim// into the name of a header unit.
852353358SdimANNOTATION(header_unit)
853353358Sdim
854360784Sdim#undef PRAGMA_ANNOTATION
855193326Sed#undef ANNOTATION
856221345Sdim#undef TESTING_KEYWORD
857344779Sdim#undef OBJC_AT_KEYWORD
858193326Sed#undef CXX_KEYWORD_OPERATOR
859193326Sed#undef PPKEYWORD
860193326Sed#undef ALIAS
861276479Sdim#undef TYPE_TRAIT_N
862276479Sdim#undef TYPE_TRAIT_2
863276479Sdim#undef TYPE_TRAIT_1
864276479Sdim#undef TYPE_TRAIT
865288943Sdim#undef CONCEPTS_KEYWORD
866327952Sdim#undef CXX2A_KEYWORD
867288943Sdim#undef CXX11_KEYWORD
868193326Sed#undef KEYWORD
869199990Srdivacky#undef PUNCTUATOR
870193326Sed#undef TOK
871