Parse C++ bool, false and true.
[cparser] / tokens.inc
index fc22fad..11f4a7f 100644 (file)
 #define TS(x,str,val)
 #endif
 
-TS(IDENTIFIER,     "identifier", = 256)
-TS(TYPENAME,       "typename",)
-TS(INTEGER,        "integer number",)
-TS(STRING_LITERAL, "string literal",)
+TS(IDENTIFIER,              "identifier", = 256)
+TS(INTEGER,                 "integer number",)
+TS(CHARACTER_CONSTANT,      "character constant",)
+TS(WIDE_CHARACTER_CONSTANT, "wide character constant",)
+TS(FLOATINGPOINT,           "floatingpoint number",)
+TS(STRING_LITERAL,          "string literal",)
+TS(WIDE_STRING_LITERAL,     "wide string literal",)
 
-#define S(x)   T(x,#x,)
-S(auto)
-S(break)
-S(case)
-S(char)
-S(const)
-S(continue)
-S(default)
-S(do)
-S(double)
-S(else)
-S(enum)
-S(extern)
-S(float)
-S(for)
-S(goto)
-S(if)
-S(inline)
-S(int)
-S(long)
-S(register)
-S(restrict)
-S(return)
-S(short)
-S(signed)
-S(sizeof)
-S(static)
-S(struct)
-S(switch)
-S(typedef)
-S(union)
-S(unsigned)
-S(void)
-S(volatile)
-S(while)
-S(_Bool)
-S(_Complex)
-S(_Imaginary)
-S(__extension__)
-S(__attribute__)
-S(__u_quad_t)
-S(__quad_t)
+#define ALTERNATE(name, val)          T(_CXX, name, #name,  val)
+#define PUNCTUATOR(name, string, val) T(_ALL, name, string, val)
+#include "tokens_punctuator.inc"
+#undef PUNCTUATOR
+#undef ALTERNATE
+
+#define S(mode,x)   T(mode,x,#x,)
+S(_ALL, auto)
+S(_ALL, break)
+S(_ALL, case)
+S(_ALL, char)
+S(_ALL, continue)
+S(_ALL, default)
+S(_ALL, do)
+S(_ALL, double)
+S(_ALL, else)
+S(_ALL, enum)
+S(_ALL, extern)
+S(_ALL, float)
+S(_ALL, for)
+S(_ALL, goto)
+S(_ALL, if)
+S(_ALL, int)
+S(_ALL, long)
+S(_ALL, register)
+S(_ALL, return)
+S(_ALL, short)
+S(_ALL, sizeof)
+S(_ALL, static)
+S(_ALL, struct)
+S(_ALL, switch)
+S(_ALL, typedef)
+S(_ALL, union)
+S(_ALL, unsigned)
+S(_ALL, void)
+S(_ALL, while)
+
+/* C++ keywords */
+#undef bool
+S(_CXX, bool)
+#define bool _Bool
+S(_CXX, catch)
+S(_CXX, class)
+S(_CXX, const_cast)
+S(_CXX, delete)
+S(_CXX, dynamic_cast)
+S(_CXX, explicit)
+S(_CXX, export)
+#undef false
+S(_CXX, false)
+#define false 0
+S(_CXX, friend)
+S(_CXX, mutable)
+S(_CXX, namespace)
+S(_CXX, new)
+S(_CXX, operator)
+S(_CXX, private)
+S(_CXX, protected)
+S(_CXX, public)
+S(_CXX, reinterpret_cast)
+S(_CXX, static_cast)
+S(_CXX, template)
+S(_CXX, this)
+S(_CXX, throw)
+#undef true
+S(_CXX, true)
+#define true 1
+S(_CXX, try)
+S(_CXX, typeid)
+S(_CXX, typename)
+S(_CXX, using)
+S(_CXX, virtual)
+S(_CXX, wchar_t)
+
+S(_C99|_GNUC, _Bool)
+S(_ALL, __thread)
+S(_ALL, __extension__)
+S(_ALL, __builtin_classify_type)
+S(_ALL, __builtin_va_list)
+S(_ALL, __builtin_expect)
+S(_ALL, __builtin_offsetof)
+S(_ALL, __builtin_va_arg)
+S(_ALL, __builtin_va_end)
+S(_ALL, __builtin_alloca)
+S(_ALL, __builtin_inf)
+S(_ALL, __builtin_inff)
+S(_ALL, __builtin_infl)
+S(_ALL, __builtin_nan)
+S(_ALL, __builtin_nanf)
+S(_ALL, __builtin_nanl)
+S(_ALL, __builtin_isgreater)
+S(_ALL, __builtin_isgreaterequal)
+S(_ALL, __builtin_isless)
+S(_ALL, __builtin_islessequal)
+S(_ALL, __builtin_islessgreater)
+S(_ALL, __builtin_isunordered)
+S(_ALL, __builtin_constant_p)
+S(_ALL, __builtin_prefetch)
+S(_ALL, __builtin_huge_val)
+S(_ALL, __PRETTY_FUNCTION__)
+S(_ALL, __FUNCTION__)
+S(_ALL, __label__)
+S(_C99, __func__)
+S(_MS, __FUNCSIG__)
+S(_MS, __FUNCDNAME__)
 #undef S
 
-T(SELECT,                   "->",)
-T(PLUSPLUS,                 "++",)
-T(MINUSMINUS,               "--",)
-T(LESSLESS,                 "<<",)
-T(GREATERGREATER,           ">>",)
-T(LESSEQUAL,                "<=",)
-T(GREATEREQUAL,             ">=",)
-T(EQUALEQUAL,               "==",)
-T(EXCLAMATIONMARKEQUAL,     "!=",)
-T(ANDAND,                   "&&",)
-T(PIPEPIPE,                 "||",)
-T(DOTDOTDOT,                "...",)
-T(ASTERISKEQUAL,            "*=",)
-T(SLASHEQUAL,               "/=",)
-T(PERCENTEQUAL,             "%=",)
-T(PLUSEQUAL,                "+=",)
-T(MINUSEQUAL,               "-=",)
-T(LESSLESSEQUAL,            "<<=",)
-T(GREATERGREATEREQUAL,      ">>=",)
-T(ANDEQUAL,                 "&=",)
-T(CARETEQUAL,               "^=",)
-T(PIPEEQUAL,                "|=",)
-T(HASHHASH,                 "##",)
+/* needed on Windows */
+#ifdef __w64
+#undef __w64
+#endif
+#ifdef __ptr64
+#undef __ptr64
+#endif
+
+/* needed on darwin... */
+#ifdef __signed
+#undef __signed
+#endif
+#ifdef __volatile
+#undef __volatile
+#endif
+#ifdef __const
+#undef __const
+#endif
+#ifdef __restrict
+#undef __restrict
+#endif
+
+#define S(mode, x, val) T(mode, x, #x, val)
+S(_ANSI|_C99,   signed,               )
+S(_ALL,       __signed,               = T_signed)
+S(_ALL,       __signed__,             = T_signed)
+S(_C99|_GNUC,  _Complex,              )
+S(_ALL,       __complex__,            = T__Complex)
+S(_ALL,       __complex,              = T__Complex)
+S(_C99|_GNUC,  _Imaginary,            )
+S(_ALL,       __real__,               )
+S(_ALL,       __real,                 = T___real__)
+S(_ALL,       __imag__,               )
+S(_ALL,       __imag,                 = T___imag__)
+S(_ALL,       __alignof__,            )
+S(_ALL,       __alignof,              = T___alignof__)
+S(_MS,         _alignof,              = T___alignof__)
+S(_ANSI|_C99,   const,                )
+S(_ALL,       __const,                = T_const)
+S(_ALL,       __const__,              = T_const)
+S(_C99,         restrict,             )
+S(_ALL,       __restrict__,           = T_restrict)
+S(_ALL,       __restrict,             = T_restrict)
+S(_MS,         _restrict,             = T_restrict)
+S(_ALL,         asm,                  )
+S(_ALL,       __asm__,                = T_asm)
+S(_MS,         _asm,                  = T_asm)
+S(_ALL,       __asm,                  = T_asm)
+S(_ANSI|_C99,   volatile,             )
+S(_ALL,       __volatile,             = T_volatile)
+S(_ALL,       __volatile__,           = T_volatile)
+S(_C99|_CXX,    inline,               )
+S(_ALL,       __inline,               = T_inline)
+S(_ALL,       __inline__,             = T_inline)
+S(_GNUC,        typeof,               )
+S(_ALL,       __typeof,               = T_typeof)
+S(_ALL,       __typeof__,             = T_typeof)
+S(_ALL,       __attribute__,          )
 
-#define T_LAST_TOKEN  (T_HASHHASH+1)
+S(_ALL,       __builtin_va_start,     )
+S(_ALL,       __builtin_stdarg_start, = T___builtin_va_start)
 
-T(RBRACK,          "[", = '[')
-T(LBRACK,          "]", = ']')
-T(LBRACE,          "(", = '(')
-T(RBRACE,          ")", = ')')
-T(RCURLY,          "{", = '{')
-T(LCURLY,          "}", = '}')
-T(DOT,             ".", = '.')
-T(AND,             "&", = '&')
-T(ASTERISK,        "*", = '*')
-T(PLUS,            "+", = '+')
-T(MINUS,           "-", = '-')
-T(TILDE,           "~", = '~')
-T(EXCLAMATIONMARK, "!", = '!')
-T(SLASH,           "/", = '/')
-T(PERCENT,         "%", = '%')
-T(LESS,            "<", = '<')
-T(GREATER,         ">", = '>')
-T(CARET,           "^", = '^')
-T(PIPE,            "|", = '|')
-T(QUESTIONMARK,    "?", = '?')
-T(COLON,           ":", = ':')
-T(SEMICOLON,       ";", = ';')
-T(EQUAL,           "=", = '=')
-T(COMMA,           ",", = ',')
-T(HASH,            "#", = '#')
+S(_MS,         _near,                 )
+S(_MS,        __near,                 = T__near)
+S(_MS,         _far,                  )
+S(_MS,        __far,                  = T__far)
+S(_MS,          cdecl,                )
+S(_MS,         _cdecl,                = T_cdecl)
+S(_MS,        __cdecl,                = T_cdecl)
+S(_MS,         _stdcall,              )
+S(_MS,        __stdcall,              = T__stdcall)
+S(_MS,         _fastcall,             )
+S(_MS,        __fastcall,             = T__fastcall)
+S(_MS,        __thiscall,             )
+S(_MS,         _forceinline,          )
+S(_MS,        __forceinline,          = T__forceinline)
+S(_MS,        __unaligned,            )
+S(_MS,         _assume,               )
+S(_MS,        __assume,               = T__assume)
+S(_MS,         _try,                  )
+S(_MS,        __try,                  = T__try)
+S(_MS,         _finally,              )
+S(_MS,        __finally,              = T__finally)
+S(_MS,         _leave,                )
+S(_MS,        __leave,                = T__leave)
+S(_MS,         _except,               )
+S(_MS,        __except,               = T__except)
+S(_MS,         _declspec,             )
+S(_MS,        __declspec,             = T__declspec)
+S(_MS,         _based,                )
+S(_MS,        __based,                = T__based)
+S(_MS,        __noop,                 )
 
-T(LESSCOLON,                "<:",   = '[')
-T(COLONGREATER,             ":>",   = ']')
-T(LESSPERCENT,              "<%",   = '{')
-T(PERCENTGREATER,           "%>",   = '}')
-T(PERCENTCOLON,             "%:",   = '#')
-T(PERCENTCOLONPERCENTCOLON, "%:%:", = T_HASHHASH)
+S(_MS,        __ptr32,                )
+S(_MS,        __ptr64,                )
+S(_MS,        __sptr,                 )
+S(_MS,        __uptr,                 )
+S(_MS,         _w64,                  )
+S(_MS,        __w64,                  = T__w64)
 
-TS(NEWLINE,        "newline", = '\n')
+S(_MS,         _int8,                 )
+S(_MS,        __int8,                 = T__int8)
+S(_MS,         _int16,                )
+S(_MS,        __int16,                = T__int16)
+S(_MS,         _int32,                )
+S(_MS,        __int32,                = T__int32)
+S(_MS,         _int64,                )
+S(_MS,        __int64,                = T__int64)
+S(_MS,         _int128,               )
+S(_MS,        __int128,               = T__int128)
+#undef S