-#ifndef TS
-#define TS(x,str,val)
-#endif
-
-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 ALTERNATE(name, val) T(_CXX, name, #name, val)
-#define PUNCTUATOR(name, string, val) T(_ALL, name, string, val)
+/* These must go first. Some set explicit values. */
+#define ALTERNATE(name, val) T(_CXX, T_##name, #name, val)
+#define PUNCTUATOR(name, string, val) T(_ALL, T_##name, string, val)
#include "tokens_punctuator.inc"
#undef PUNCTUATOR
#undef ALTERNATE
-#define S(mode,x) T(mode,x,#x,)
+#define S(name, description) T(_ALL, T_##name, description,)
+S(EOF, "end of input")
+S(IDENTIFIER, "identifier")
+S(NUMBER, "number constant")
+S(CHARACTER_CONSTANT, "character constant")
+S(STRING_LITERAL, "string literal")
+S(MACRO_PARAMETER, "macro parameter")
+S(UNKNOWN_CHAR, "unknown character")
+#undef S
+
+#define S(mode,x) T(mode,T_##x,#x,)
S(_ALL, auto)
S(_ALL, break)
S(_ALL, case)
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, 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, 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, wchar_t)
S(_C99|_GNUC, _Bool)
-S(_ALL, __thread)
+
+S(_C11, _Alignas)
+S(_C11, _Atomic)
+S(_C11, _Generic)
+S(_C11, _Noreturn)
+S(_C11, _Static_assert)
+
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_va_copy)
+S(_ALL, __builtin_offsetof)
+S(_ALL, __builtin_constant_p)
+S(_ALL, __builtin_types_compatible_p)
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
-/* needed on Windows */
-#ifdef __w64
-#undef __w64
-#endif
-#ifdef __ptr64
-#undef __ptr64
-#endif
-
-/* needed on MinGW */
-#ifdef __MINGW32__
-#ifdef __int8
-#undef __int8
-#endif
-#ifdef __int16
-#undef __int16
-#endif
-#ifdef __int32
-#undef __int32
-#endif
-#ifdef __int64
-#undef __int64
-#endif
-#endif
-
-#if defined(__MINGW32__) || defined(__CYGWIN__)
-#ifdef __cdecl
-#undef __cdecl
-#endif
-#ifdef __stdcall
-#undef __stdcall
-#endif
-#ifdef __fastcall
-#undef __fastcall
-#endif
-#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|_CXX, signed, )
+#define S(mode, x, val) T(mode, T_##x, #x, val)
+S(_C99, __func__,)
+S(_ALL, __FUNCTION__, = T___func__)
+S(_C11, _Thread_local, )
+S(_ALL, __thread, = T__Thread_local)
+S(_ALL, signed, )
S(_ALL, __signed, = T_signed)
S(_ALL, __signed__, = T_signed)
S(_C99|_GNUC, _Complex, )
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|_CXX, const, )
+S(_C11, _Alignof, )
+S(_ALL, __alignof__, = T__Alignof)
+S(_ALL, __alignof, = T__Alignof)
+S(_MS, _alignof, = T__Alignof)
+S(_ALL, const, )
S(_ALL, __const, = T_const)
S(_ALL, __const__, = T_const)
S(_C99, restrict, )
S(_ALL, __asm__, = T_asm)
S(_MS, _asm, = T_asm)
S(_ALL, __asm, = T_asm)
-S(_ANSI|_C99|_CXX, volatile, )
+S(_ALL, volatile, )
S(_ALL, __volatile, = T_volatile)
S(_ALL, __volatile__, = T_volatile)
-S(_C99|_CXX, inline, )
+S(_C99|_CXX|_GNUC, inline, )
S(_ALL, __inline, = T_inline)
S(_ALL, __inline__, = T_inline)
S(_GNUC, typeof, )