Do not consider alignment in the type hash. It is just wrong.
[cparser] / token_t.h
index 5a082fd..ecd26bb 100644 (file)
--- a/token_t.h
+++ b/token_t.h
 #include "symbol_table.h"
 #include "type.h"
 
-typedef enum {
+typedef enum token_type_t {
+       T_ERROR = -1,
+       T_NULL  =  0,
+       T_EOF   = '\x04', // EOT
 #define T(mode,x,str,val) T_##x val,
 #define TS(x,str,val) T_##x val,
 #include "tokens.inc"
 #undef TS
 #undef T
-
-       T_EOF   = -1,
-       T_ERROR = -2
+       T_LAST_TOKEN
 } token_type_t;
 
-typedef enum {
+typedef enum preprocessor_token_type_t {
+       TP_NULL  = T_NULL,
+       TP_EOF   = T_EOF,
+       TP_ERROR = T_ERROR,
 #define T(mode,x,str,val) TP_##x val,
 #define TS(x,str,val) TP_##x val,
 #include "tokens_preprocessor.inc"
 #undef TS
 #undef T
+       TP_LAST_TOKEN
 } preprocessor_token_type_t;
 
 typedef struct source_position_t source_position_t;
@@ -52,7 +57,7 @@ struct source_position_t {
 };
 
 /* position used for "builtin" declarations/types */
-extern source_position_t builtin_source_position;
+extern const source_position_t builtin_source_position;
 
 typedef struct {
        int type;
@@ -72,4 +77,7 @@ void exit_tokens(void);
 void print_token_type(FILE *out, token_type_t token_type);
 void print_token(FILE *out, const token_t *token);
 
+void print_pp_token_type(FILE *out, int type);
+void print_pp_token(FILE *out, const token_t *token);
+
 #endif