X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=token.c;h=c2d5345f0922bb8ee34d90530bdc8883a9cda8c4;hb=0cd1559ba2a23f1522e3f740067e4ef5ea8c3520;hp=4769365843bc98ae6c8eef1509f244aca63cdcc5;hpb=d5a5e90eca7d95d0efa66a6e8dd5ca0ed031321b;p=cparser diff --git a/token.c b/token.c index 4769365..c2d5345 100644 --- a/token.c +++ b/token.c @@ -6,21 +6,31 @@ #include #include "symbol.h" +#include "lang_features.h" #include "adt/array.h" static symbol_t *token_symbols[T_LAST_TOKEN]; +source_position_t builtin_source_position = { "", 0 }; + void init_tokens(void) { symbol_t *symbol; + int last_id = -2; memset(token_symbols, 0, T_LAST_TOKEN * sizeof(token_symbols[0])); -#define T(x,str,val) \ - assert(T_##x >= 0 && T_##x < T_LAST_TOKEN); \ - symbol = symbol_table_insert(str); \ - symbol->ID = T_##x; \ - token_symbols[T_##x] = symbol; +#define T(mode,x,str,val) \ + if (T_##x > 255) { \ + assert(T_##x >= last_id); \ + last_id = T_##x; \ + } \ + if (c_mode & (mode)) { \ + assert(T_##x >= 0 && T_##x < T_LAST_TOKEN); \ + symbol = symbol_table_insert(str); \ + symbol->ID = T_##x; \ + token_symbols[T_##x] = symbol; \ + } #define TS(x,str,val) \ assert(T_##x >= 0 && T_##x < T_LAST_TOKEN); \ @@ -32,7 +42,7 @@ void init_tokens(void) #undef TS #undef T -#define T(x,str,val) \ +#define T(mode,x,str,val) \ assert(TP_##x >= 0 && TP_##x < TP_LAST_TOKEN); \ symbol = symbol_table_insert(str); \ symbol->pp_ID = TP_##x; @@ -82,16 +92,16 @@ void print_token(FILE *f, const token_t *token) fprintf(f, "symbol '%s'", token->v.symbol->string); break; case T_INTEGER: - fprintf(f, "integer number %d", token->v.intvalue); + fprintf(f, "integer number %lld", token->v.intvalue); break; case T_FLOATINGPOINT: - fprintf(f, "floatingpointer number %f", token->v.floatvalue); + fprintf(f, "floatingpointer number %LF", token->v.floatvalue); break; case T_STRING_LITERAL: - fprintf(f, "string '%s'", token->v.string); + fprintf(f, "string '%s'", token->v.string.begin); /* TODO suboptimal */ break; default: - print_token_type(f, token->type); + print_token_type(f, (token_type_t)token->type); break; } }