1 /*=============================================================================
2     Boost.Wave: A Standard compliant C++ preprocessor library
3     The definition of a default set of token identifiers and related
4     functions.
5 
6     http://www.boost.org/
7 
8     Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
9     Software License, Version 1.0. (See accompanying file
10     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
11 =============================================================================*/
12 
13 #if !defined(TOKEN_IDS_HPP_414E9A58_F079_4789_8AFF_513815CE475B_INCLUDED)
14 #define TOKEN_IDS_HPP_414E9A58_F079_4789_8AFF_513815CE475B_INCLUDED
15 
16 #include <string>
17 
18 #include <boost/wave/wave_config.hpp>
19 
20 // this must occur after all of the includes and before any code appears
21 #ifdef BOOST_HAS_ABI_HEADERS
22 #include BOOST_ABI_PREFIX
23 #endif
24 
25 ///////////////////////////////////////////////////////////////////////////////
26 //  Allow external redefinition of the token identifiers to use
27 #if !defined(BOOST_WAVE_TOKEN_IDS_DEFINED)
28 #define BOOST_WAVE_TOKEN_IDS_DEFINED
29 
30 #if (defined (__FreeBSD__) || defined (__DragonFly__) || defined (__OpenBSD__)) && defined (T_DIVIDE)
31 #undef T_DIVIDE
32 #endif
33 
34 ///////////////////////////////////////////////////////////////////////////////
35 namespace boost {
36 namespace wave {
37 
38 ///////////////////////////////////////////////////////////////////////////////
39 //  assemble tokenids
40 #define TOKEN_FROM_ID(id, cat)   ((id) | (cat))
41 #define ID_FROM_TOKEN(tok)       ((tok) & ~TokenTypeMask)
42 #define BASEID_FROM_TOKEN(tok)   ((tok) & ~ExtTokenTypeMask)
43 
44 ///////////////////////////////////////////////////////////////////////////////
45 //  the token_category helps to classify the different token types
46 enum token_category {
47     IdentifierTokenType         = 0x10080000,
48     ParameterTokenType          = 0x11080000,
49     ExtParameterTokenType       = 0x11180000,
50     KeywordTokenType            = 0x20080000,
51     OperatorTokenType           = 0x30080000,
52     LiteralTokenType            = 0x40080000,
53     IntegerLiteralTokenType     = 0x41080000,
54     FloatingLiteralTokenType    = 0x42080000,
55     StringLiteralTokenType      = 0x43080000,
56     CharacterLiteralTokenType   = 0x44080000,
57     BoolLiteralTokenType        = 0x45080000,
58     PPTokenType                 = 0x50080000,
59     PPConditionalTokenType      = 0x50880000,
60 
61     UnknownTokenType            = 0xA0000000,
62     EOLTokenType                = 0xB0000000,
63     EOFTokenType                = 0xC0000000,
64     WhiteSpaceTokenType         = 0xD0000000,
65     InternalTokenType           = 0xE0080000,
66 
67     TokenTypeMask               = 0xFF000000,
68     AltTokenType                = 0x00100000,
69     TriGraphTokenType           = 0x00200000,
70     AltExtTokenType             = 0x00500000,   // and, bit_and etc.
71     PPTokenFlag                 = 0x00080000,   // these are 'real' pp-tokens
72     ExtTokenTypeMask            = 0xFFF00000,
73     ExtTokenOnlyMask            = 0x00F00000,
74     TokenValueMask              = 0x000FFFFF,
75     MainTokenMask               = 0xFF0FFFFF    // TokenTypeMask|TokenValueMask
76 };
77 
78 ///////////////////////////////////////////////////////////////////////////////
79 //  the token_id assigns unique numbers to the different C++ lexemes
80 enum token_id {
81     T_UNKNOWN      = 0,
82     T_FIRST_TOKEN  = 256,
83     T_AND          = TOKEN_FROM_ID(T_FIRST_TOKEN, OperatorTokenType),
84     T_AND_ALT      = TOKEN_FROM_ID(T_FIRST_TOKEN, OperatorTokenType|AltExtTokenType),
85     T_ANDAND       = TOKEN_FROM_ID(257, OperatorTokenType),
86     T_ANDAND_ALT   = TOKEN_FROM_ID(257, OperatorTokenType|AltExtTokenType),
87     T_ASSIGN       = TOKEN_FROM_ID(258, OperatorTokenType),
88     T_ANDASSIGN    = TOKEN_FROM_ID(259, OperatorTokenType),
89     T_ANDASSIGN_ALT     = TOKEN_FROM_ID(259, OperatorTokenType|AltExtTokenType),
90     T_OR           = TOKEN_FROM_ID(260, OperatorTokenType),
91     T_OR_ALT       = TOKEN_FROM_ID(260, OperatorTokenType|AltExtTokenType),
92     T_OR_TRIGRAPH  = TOKEN_FROM_ID(260, OperatorTokenType|TriGraphTokenType),
93     T_ORASSIGN     = TOKEN_FROM_ID(261, OperatorTokenType),
94     T_ORASSIGN_ALT          = TOKEN_FROM_ID(261, OperatorTokenType|AltExtTokenType),
95     T_ORASSIGN_TRIGRAPH     = TOKEN_FROM_ID(261, OperatorTokenType|TriGraphTokenType),
96     T_XOR          = TOKEN_FROM_ID(262, OperatorTokenType),
97     T_XOR_ALT      = TOKEN_FROM_ID(262, OperatorTokenType|AltExtTokenType),
98     T_XOR_TRIGRAPH = TOKEN_FROM_ID(262, OperatorTokenType|TriGraphTokenType),
99     T_XORASSIGN    = TOKEN_FROM_ID(263, OperatorTokenType),
100     T_XORASSIGN_ALT         = TOKEN_FROM_ID(263, OperatorTokenType|AltExtTokenType),
101     T_XORASSIGN_TRIGRAPH    = TOKEN_FROM_ID(263, OperatorTokenType|TriGraphTokenType),
102     T_COMMA        = TOKEN_FROM_ID(264, OperatorTokenType),
103     T_COLON        = TOKEN_FROM_ID(265, OperatorTokenType),
104     T_DIVIDE       = TOKEN_FROM_ID(266, OperatorTokenType),
105     T_DIVIDEASSIGN = TOKEN_FROM_ID(267, OperatorTokenType),
106     T_DOT          = TOKEN_FROM_ID(268, OperatorTokenType),
107     T_DOTSTAR      = TOKEN_FROM_ID(269, OperatorTokenType),
108     T_ELLIPSIS     = TOKEN_FROM_ID(270, OperatorTokenType),
109     T_EQUAL        = TOKEN_FROM_ID(271, OperatorTokenType),
110     T_GREATER      = TOKEN_FROM_ID(272, OperatorTokenType),
111     T_GREATEREQUAL = TOKEN_FROM_ID(273, OperatorTokenType),
112     T_LEFTBRACE    = TOKEN_FROM_ID(274, OperatorTokenType),
113     T_LEFTBRACE_ALT         = TOKEN_FROM_ID(274, OperatorTokenType|AltTokenType),
114     T_LEFTBRACE_TRIGRAPH    = TOKEN_FROM_ID(274, OperatorTokenType|TriGraphTokenType),
115     T_LESS         = TOKEN_FROM_ID(275, OperatorTokenType),
116     T_LESSEQUAL    = TOKEN_FROM_ID(276, OperatorTokenType),
117     T_LEFTPAREN    = TOKEN_FROM_ID(277, OperatorTokenType),
118     T_LEFTBRACKET  = TOKEN_FROM_ID(278, OperatorTokenType),
119     T_LEFTBRACKET_ALT       = TOKEN_FROM_ID(278, OperatorTokenType|AltTokenType),
120     T_LEFTBRACKET_TRIGRAPH  = TOKEN_FROM_ID(278, OperatorTokenType|TriGraphTokenType),
121     T_MINUS        = TOKEN_FROM_ID(279, OperatorTokenType),
122     T_MINUSASSIGN  = TOKEN_FROM_ID(280, OperatorTokenType),
123     T_MINUSMINUS   = TOKEN_FROM_ID(281, OperatorTokenType),
124     T_PERCENT      = TOKEN_FROM_ID(282, OperatorTokenType),
125     T_PERCENTASSIGN = TOKEN_FROM_ID(283, OperatorTokenType),
126     T_NOT          = TOKEN_FROM_ID(284, OperatorTokenType),
127     T_NOT_ALT      = TOKEN_FROM_ID(284, OperatorTokenType|AltExtTokenType),
128     T_NOTEQUAL     = TOKEN_FROM_ID(285, OperatorTokenType),
129     T_NOTEQUAL_ALT      = TOKEN_FROM_ID(285, OperatorTokenType|AltExtTokenType),
130     T_OROR         = TOKEN_FROM_ID(286, OperatorTokenType),
131     T_OROR_ALT     = TOKEN_FROM_ID(286, OperatorTokenType|AltExtTokenType),
132     T_OROR_TRIGRAPH     = TOKEN_FROM_ID(286, OperatorTokenType|TriGraphTokenType),
133     T_PLUS         = TOKEN_FROM_ID(287, OperatorTokenType),
134     T_PLUSASSIGN   = TOKEN_FROM_ID(288, OperatorTokenType),
135     T_PLUSPLUS     = TOKEN_FROM_ID(289, OperatorTokenType),
136     T_ARROW        = TOKEN_FROM_ID(290, OperatorTokenType),
137     T_ARROWSTAR    = TOKEN_FROM_ID(291, OperatorTokenType),
138     T_QUESTION_MARK = TOKEN_FROM_ID(292, OperatorTokenType),
139     T_RIGHTBRACE   = TOKEN_FROM_ID(293, OperatorTokenType),
140     T_RIGHTBRACE_ALT        = TOKEN_FROM_ID(293, OperatorTokenType|AltTokenType),
141     T_RIGHTBRACE_TRIGRAPH   = TOKEN_FROM_ID(293, OperatorTokenType|TriGraphTokenType),
142     T_RIGHTPAREN   = TOKEN_FROM_ID(294, OperatorTokenType),
143     T_RIGHTBRACKET = TOKEN_FROM_ID(295, OperatorTokenType),
144     T_RIGHTBRACKET_ALT      = TOKEN_FROM_ID(295, OperatorTokenType|AltTokenType),
145     T_RIGHTBRACKET_TRIGRAPH = TOKEN_FROM_ID(295, OperatorTokenType|TriGraphTokenType),
146     T_COLON_COLON  = TOKEN_FROM_ID(296, OperatorTokenType),
147     T_SEMICOLON    = TOKEN_FROM_ID(297, OperatorTokenType),
148     T_SHIFTLEFT    = TOKEN_FROM_ID(298, OperatorTokenType),
149     T_SHIFTLEFTASSIGN = TOKEN_FROM_ID(299, OperatorTokenType),
150     T_SHIFTRIGHT   = TOKEN_FROM_ID(300, OperatorTokenType),
151     T_SHIFTRIGHTASSIGN = TOKEN_FROM_ID(301, OperatorTokenType),
152     T_STAR         = TOKEN_FROM_ID(302, OperatorTokenType),
153     T_COMPL        = TOKEN_FROM_ID(303, OperatorTokenType),
154     T_COMPL_ALT         = TOKEN_FROM_ID(303, OperatorTokenType|AltExtTokenType),
155     T_COMPL_TRIGRAPH    = TOKEN_FROM_ID(303, OperatorTokenType|TriGraphTokenType),
156     T_STARASSIGN   = TOKEN_FROM_ID(304, OperatorTokenType),
157     T_ASM          = TOKEN_FROM_ID(305, KeywordTokenType),
158     T_AUTO         = TOKEN_FROM_ID(306, KeywordTokenType),
159     T_BOOL         = TOKEN_FROM_ID(307, KeywordTokenType),
160     T_FALSE        = TOKEN_FROM_ID(308, BoolLiteralTokenType),
161     T_TRUE         = TOKEN_FROM_ID(309, BoolLiteralTokenType),
162     T_BREAK        = TOKEN_FROM_ID(310, KeywordTokenType),
163     T_CASE         = TOKEN_FROM_ID(311, KeywordTokenType),
164     T_CATCH        = TOKEN_FROM_ID(312, KeywordTokenType),
165     T_CHAR         = TOKEN_FROM_ID(313, KeywordTokenType),
166     T_CLASS        = TOKEN_FROM_ID(314, KeywordTokenType),
167     T_CONST        = TOKEN_FROM_ID(315, KeywordTokenType),
168     T_CONSTCAST    = TOKEN_FROM_ID(316, KeywordTokenType),
169     T_CONTINUE     = TOKEN_FROM_ID(317, KeywordTokenType),
170     T_DEFAULT      = TOKEN_FROM_ID(318, KeywordTokenType),
171     T_DELETE       = TOKEN_FROM_ID(319, KeywordTokenType),
172     T_DO           = TOKEN_FROM_ID(320, KeywordTokenType),
173     T_DOUBLE       = TOKEN_FROM_ID(321, KeywordTokenType),
174     T_DYNAMICCAST  = TOKEN_FROM_ID(322, KeywordTokenType),
175     T_ELSE         = TOKEN_FROM_ID(323, KeywordTokenType),
176     T_ENUM         = TOKEN_FROM_ID(324, KeywordTokenType),
177     T_EXPLICIT     = TOKEN_FROM_ID(325, KeywordTokenType),
178     T_EXPORT       = TOKEN_FROM_ID(326, KeywordTokenType),
179     T_EXTERN       = TOKEN_FROM_ID(327, KeywordTokenType),
180     T_FLOAT        = TOKEN_FROM_ID(328, KeywordTokenType),
181     T_FOR          = TOKEN_FROM_ID(329, KeywordTokenType),
182     T_FRIEND       = TOKEN_FROM_ID(330, KeywordTokenType),
183     T_GOTO         = TOKEN_FROM_ID(331, KeywordTokenType),
184     T_IF           = TOKEN_FROM_ID(332, KeywordTokenType),
185     T_INLINE       = TOKEN_FROM_ID(333, KeywordTokenType),
186     T_INT          = TOKEN_FROM_ID(334, KeywordTokenType),
187     T_LONG         = TOKEN_FROM_ID(335, KeywordTokenType),
188     T_MUTABLE      = TOKEN_FROM_ID(336, KeywordTokenType),
189     T_NAMESPACE    = TOKEN_FROM_ID(337, KeywordTokenType),
190     T_NEW          = TOKEN_FROM_ID(338, KeywordTokenType),
191     T_OPERATOR     = TOKEN_FROM_ID(339, KeywordTokenType),
192     T_PRIVATE      = TOKEN_FROM_ID(340, KeywordTokenType),
193     T_PROTECTED    = TOKEN_FROM_ID(341, KeywordTokenType),
194     T_PUBLIC       = TOKEN_FROM_ID(342, KeywordTokenType),
195     T_REGISTER     = TOKEN_FROM_ID(343, KeywordTokenType),
196     T_REINTERPRETCAST = TOKEN_FROM_ID(344, KeywordTokenType),
197     T_RETURN       = TOKEN_FROM_ID(345, KeywordTokenType),
198     T_SHORT        = TOKEN_FROM_ID(346, KeywordTokenType),
199     T_SIGNED       = TOKEN_FROM_ID(347, KeywordTokenType),
200     T_SIZEOF       = TOKEN_FROM_ID(348, KeywordTokenType),
201     T_STATIC       = TOKEN_FROM_ID(349, KeywordTokenType),
202     T_STATICCAST   = TOKEN_FROM_ID(350, KeywordTokenType),
203     T_STRUCT       = TOKEN_FROM_ID(351, KeywordTokenType),
204     T_SWITCH       = TOKEN_FROM_ID(352, KeywordTokenType),
205     T_TEMPLATE     = TOKEN_FROM_ID(353, KeywordTokenType),
206     T_THIS         = TOKEN_FROM_ID(354, KeywordTokenType),
207     T_THROW        = TOKEN_FROM_ID(355, KeywordTokenType),
208     T_TRY          = TOKEN_FROM_ID(356, KeywordTokenType),
209     T_TYPEDEF      = TOKEN_FROM_ID(357, KeywordTokenType),
210     T_TYPEID       = TOKEN_FROM_ID(358, KeywordTokenType),
211     T_TYPENAME     = TOKEN_FROM_ID(359, KeywordTokenType),
212     T_UNION        = TOKEN_FROM_ID(360, KeywordTokenType),
213     T_UNSIGNED     = TOKEN_FROM_ID(361, KeywordTokenType),
214     T_USING        = TOKEN_FROM_ID(362, KeywordTokenType),
215     T_VIRTUAL      = TOKEN_FROM_ID(363, KeywordTokenType),
216     T_VOID         = TOKEN_FROM_ID(364, KeywordTokenType),
217     T_VOLATILE     = TOKEN_FROM_ID(365, KeywordTokenType),
218     T_WCHART       = TOKEN_FROM_ID(366, KeywordTokenType),
219     T_WHILE        = TOKEN_FROM_ID(367, KeywordTokenType),
220     T_PP_DEFINE    = TOKEN_FROM_ID(368, PPTokenType),
221     T_PP_IF        = TOKEN_FROM_ID(369, PPConditionalTokenType),
222     T_PP_IFDEF     = TOKEN_FROM_ID(370, PPConditionalTokenType),
223     T_PP_IFNDEF    = TOKEN_FROM_ID(371, PPConditionalTokenType),
224     T_PP_ELSE      = TOKEN_FROM_ID(372, PPConditionalTokenType),
225     T_PP_ELIF      = TOKEN_FROM_ID(373, PPConditionalTokenType),
226     T_PP_ENDIF     = TOKEN_FROM_ID(374, PPConditionalTokenType),
227     T_PP_ERROR     = TOKEN_FROM_ID(375, PPTokenType),
228     T_PP_LINE      = TOKEN_FROM_ID(376, PPTokenType),
229     T_PP_PRAGMA    = TOKEN_FROM_ID(377, PPTokenType),
230     T_PP_UNDEF     = TOKEN_FROM_ID(378, PPTokenType),
231     T_PP_WARNING   = TOKEN_FROM_ID(379, PPTokenType),
232     T_IDENTIFIER   = TOKEN_FROM_ID(380, IdentifierTokenType),
233     T_OCTALINT     = TOKEN_FROM_ID(381, IntegerLiteralTokenType),
234     T_DECIMALINT   = TOKEN_FROM_ID(382, IntegerLiteralTokenType),
235     T_HEXAINT      = TOKEN_FROM_ID(383, IntegerLiteralTokenType),
236     T_INTLIT       = TOKEN_FROM_ID(384, IntegerLiteralTokenType),
237     T_LONGINTLIT   = TOKEN_FROM_ID(385, IntegerLiteralTokenType),
238     T_FLOATLIT     = TOKEN_FROM_ID(386, FloatingLiteralTokenType),
239     T_FIXEDPOINTLIT = TOKEN_FROM_ID(386, FloatingLiteralTokenType|AltTokenType),  // IDL specific
240     T_CCOMMENT     = TOKEN_FROM_ID(387, WhiteSpaceTokenType|AltTokenType),
241     T_CPPCOMMENT   = TOKEN_FROM_ID(388, WhiteSpaceTokenType|AltTokenType),
242     T_CHARLIT      = TOKEN_FROM_ID(389, CharacterLiteralTokenType),
243     T_STRINGLIT    = TOKEN_FROM_ID(390, StringLiteralTokenType),
244     T_CONTLINE     = TOKEN_FROM_ID(391, EOLTokenType),
245     T_SPACE        = TOKEN_FROM_ID(392, WhiteSpaceTokenType),
246     T_SPACE2       = TOKEN_FROM_ID(393, WhiteSpaceTokenType),
247     T_NEWLINE      = TOKEN_FROM_ID(394, EOLTokenType),
248     T_GENERATEDNEWLINE      = TOKEN_FROM_ID(394, EOLTokenType|AltTokenType),
249     T_POUND_POUND           = TOKEN_FROM_ID(395, OperatorTokenType),
250     T_POUND_POUND_ALT       = TOKEN_FROM_ID(395, OperatorTokenType|AltTokenType),
251     T_POUND_POUND_TRIGRAPH  = TOKEN_FROM_ID(395, OperatorTokenType|TriGraphTokenType),
252     T_POUND                 = TOKEN_FROM_ID(396, OperatorTokenType),
253     T_POUND_ALT             = TOKEN_FROM_ID(396, OperatorTokenType|AltTokenType),
254     T_POUND_TRIGRAPH        = TOKEN_FROM_ID(396, OperatorTokenType|TriGraphTokenType),
255     T_ANY          = TOKEN_FROM_ID(397, UnknownTokenType),
256     T_ANY_TRIGRAPH = TOKEN_FROM_ID(397, UnknownTokenType|TriGraphTokenType),
257     T_PP_INCLUDE   = TOKEN_FROM_ID(398, PPTokenType),
258     T_PP_QHEADER   = TOKEN_FROM_ID(399, PPTokenType),
259     T_PP_HHEADER   = TOKEN_FROM_ID(400, PPTokenType),
260     T_PP_INCLUDE_NEXT   = TOKEN_FROM_ID(398, PPTokenType|AltTokenType),
261     T_PP_QHEADER_NEXT   = TOKEN_FROM_ID(399, PPTokenType|AltTokenType),
262     T_PP_HHEADER_NEXT   = TOKEN_FROM_ID(400, PPTokenType|AltTokenType),
263     T_EOF          = TOKEN_FROM_ID(401, EOFTokenType),      // end of file reached
264     T_EOI          = TOKEN_FROM_ID(402, EOFTokenType),      // end of input reached
265     T_PP_NUMBER    = TOKEN_FROM_ID(403, InternalTokenType),
266 
267 // MS extensions
268     T_MSEXT_INT8   = TOKEN_FROM_ID(404, KeywordTokenType),
269     T_MSEXT_INT16  = TOKEN_FROM_ID(405, KeywordTokenType),
270     T_MSEXT_INT32  = TOKEN_FROM_ID(406, KeywordTokenType),
271     T_MSEXT_INT64  = TOKEN_FROM_ID(407, KeywordTokenType),
272     T_MSEXT_BASED  = TOKEN_FROM_ID(408, KeywordTokenType),
273     T_MSEXT_DECLSPEC = TOKEN_FROM_ID(409, KeywordTokenType),
274     T_MSEXT_CDECL  = TOKEN_FROM_ID(410, KeywordTokenType),
275     T_MSEXT_FASTCALL = TOKEN_FROM_ID(411, KeywordTokenType),
276     T_MSEXT_STDCALL = TOKEN_FROM_ID(412, KeywordTokenType),
277     T_MSEXT_TRY    = TOKEN_FROM_ID(413, KeywordTokenType),
278     T_MSEXT_EXCEPT = TOKEN_FROM_ID(414, KeywordTokenType),
279     T_MSEXT_FINALLY = TOKEN_FROM_ID(415, KeywordTokenType),
280     T_MSEXT_LEAVE  = TOKEN_FROM_ID(416, KeywordTokenType),
281     T_MSEXT_INLINE = TOKEN_FROM_ID(417, KeywordTokenType),
282     T_MSEXT_ASM    = TOKEN_FROM_ID(418, KeywordTokenType),
283 
284     T_MSEXT_PP_REGION    = TOKEN_FROM_ID(419, PPTokenType),
285     T_MSEXT_PP_ENDREGION = TOKEN_FROM_ID(420, PPTokenType),
286 
287 // import is needed to be a keyword for the C++ module Standards proposal
288     T_IMPORT       = TOKEN_FROM_ID(421, KeywordTokenType),
289 
290 // C++11 keywords
291     T_ALIGNAS      = TOKEN_FROM_ID(422, KeywordTokenType),
292     T_ALIGNOF      = TOKEN_FROM_ID(423, KeywordTokenType),
293     T_CHAR16_T     = TOKEN_FROM_ID(424, KeywordTokenType),
294     T_CHAR32_T     = TOKEN_FROM_ID(425, KeywordTokenType),
295     T_CONSTEXPR    = TOKEN_FROM_ID(426, KeywordTokenType),
296     T_DECLTYPE     = TOKEN_FROM_ID(427, KeywordTokenType),
297     T_NOEXCEPT     = TOKEN_FROM_ID(428, KeywordTokenType),
298     T_NULLPTR      = TOKEN_FROM_ID(429, KeywordTokenType),
299     T_STATICASSERT = TOKEN_FROM_ID(430, KeywordTokenType),
300     T_THREADLOCAL  = TOKEN_FROM_ID(431, KeywordTokenType),
301     T_RAWSTRINGLIT = TOKEN_FROM_ID(432, StringLiteralTokenType),
302 
303     T_LAST_TOKEN_ID,
304     T_LAST_TOKEN = ID_FROM_TOKEN(T_LAST_TOKEN_ID & ~PPTokenFlag),
305 
306 // pseudo tokens to help streamlining macro replacement, these should not
307 // returned from the lexer nor should these be returned from the pp-iterator
308     T_NONREPLACABLE_IDENTIFIER = TOKEN_FROM_ID(T_LAST_TOKEN+1, IdentifierTokenType),
309     T_PLACEHOLDER = TOKEN_FROM_ID(T_LAST_TOKEN+2, WhiteSpaceTokenType),
310     T_PLACEMARKER = TOKEN_FROM_ID(T_LAST_TOKEN+3, InternalTokenType),
311     T_PARAMETERBASE = TOKEN_FROM_ID(T_LAST_TOKEN+4, ParameterTokenType),
312     T_EXTPARAMETERBASE = TOKEN_FROM_ID(T_LAST_TOKEN+4, ExtParameterTokenType)
313 };
314 
315 ///////////////////////////////////////////////////////////////////////////////
316 //  redefine the TOKEN_FROM_ID macro to be more type safe
317 #undef TOKEN_FROM_ID
318 #define TOKEN_FROM_ID(id, cat)   boost::wave::token_id((id) | (cat))
319 
320 #undef ID_FROM_TOKEN
321 #define ID_FROM_TOKEN(tok)                                                    \
322     boost::wave::token_id((tok) &                                             \
323         ~(boost::wave::TokenTypeMask|boost::wave::PPTokenFlag))               \
324     /**/
325 
326 #undef BASEID_FROM_TOKEN
327 #define BASEID_FROM_TOKEN(tok)                                                \
328     boost::wave::token_id((tok) &                                             \
329          ~(boost::wave::ExtTokenTypeMask|boost::wave::PPTokenFlag))           \
330     /**/
331 #define BASE_TOKEN(tok)                                                       \
332     boost::wave::token_id((tok) & boost::wave::MainTokenMask)                 \
333     /**/
334 #define CATEGORY_FROM_TOKEN(tok) ((tok) & boost::wave::TokenTypeMask)
335 #define EXTCATEGORY_FROM_TOKEN(tok) ((tok) & boost::wave::ExtTokenTypeMask)
336 #define IS_CATEGORY(tok, cat)                                                 \
337     ((CATEGORY_FROM_TOKEN(tok) == CATEGORY_FROM_TOKEN(cat)) ? true : false)   \
338     /**/
339 #define IS_EXTCATEGORY(tok, cat)                                              \
340     ((EXTCATEGORY_FROM_TOKEN(tok) == EXTCATEGORY_FROM_TOKEN(cat)) ? true : false) \
341     /**/
342 
343 ///////////////////////////////////////////////////////////////////////////////
344 // verify whether the given token(-id) represents a valid pp_token
is_pp_token(boost::wave::token_id id)345 inline bool is_pp_token(boost::wave::token_id id)
346 {
347     return (id & boost::wave::PPTokenFlag) ? true : false;
348 }
349 
350 template <typename TokenT>
is_pp_token(TokenT const & tok)351 inline bool is_pp_token(TokenT const& tok)
352 {
353     return is_pp_token(boost::wave::token_id(tok));
354 }
355 
356 ///////////////////////////////////////////////////////////////////////////////
357 //  return a token name
358 BOOST_WAVE_DECL
359 BOOST_WAVE_STRINGTYPE get_token_name(token_id tokid);
360 
361 ///////////////////////////////////////////////////////////////////////////////
362 //  return a token name
363 BOOST_WAVE_DECL
364 char const *get_token_value(token_id tokid);
365 
366 ///////////////////////////////////////////////////////////////////////////////
367 }   // namespace wave
368 }   // namespace boost
369 
370 #endif // #if !defined(BOOST_WAVE_TOKEN_IDS_DEFINED)
371 
372 // the suffix header occurs after all of the code
373 #ifdef BOOST_HAS_ABI_HEADERS
374 #include BOOST_ABI_SUFFIX
375 #endif
376 
377 #endif // !defined(TOKEN_IDS_HPP_414E9A58_F079_4789_8AFF_513815CE475B_INCLUDED)
378 
379