From: Dale Weiler Date: Sat, 28 Apr 2012 20:25:43 +0000 (-0400) Subject: Lexer fixes X-Git-Tag: 0.1-rc1~554^2~4 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=7a81848d881b42cc29e054fdc2bc99bf8e61b428;p=xonotic%2Fgmqcc.git Lexer fixes --- diff --git a/gmqcc.h b/gmqcc.h index 6da465b..d869712 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -271,8 +271,6 @@ uint32_t util_crc32(const char *, int, register const short); #define VECTOR_MAKE(T,N) \ VECTOR_TYPE(T,N); \ VECTOR_CORE(T,N) -/* Builds a vector add function pointer for inside structures */ -#define VECTOR_IMPL(T,N) int (*N##_add)(T) //=================================================================== //=========================== code.c ================================ diff --git a/lex.c b/lex.c index eb18ee1..671d7a5 100644 --- a/lex.c +++ b/lex.c @@ -139,22 +139,10 @@ static int lex_digraph(lex_file *file, int first) { static int lex_getch(lex_file *file) { int ch = lex_inget(file); - - static int str = 0; - switch (ch) { - case '?' : - return lex_trigraph(file); - case '<' : - case ':' : - case '%' : - case '"' : str = !str; if (str) { file->line ++; } - return lex_digraph(file, ch); - - case '\n': - if (!str) - file->line++; - } - + if (ch == '?') + return lex_trigraph(file); + if (ch == '<' || ch == ':' || ch == '%') + return lex_digraph(file, ch); return ch; } @@ -283,13 +271,7 @@ int lex_token(lex_file *file) { if (ch > 0 && (ch == '_' || isalpha(ch))) { lex_clear(file); - /* - * Yes this is dirty, but there is no other _sane_ easy - * way to do it, this is what I call defensive programming - * if something breaks, add more defense :-) - */ - while (ch > 0 && ch != ' ' && ch != '(' && - ch != '\n' && ch != ';' && ch != ')') { + while (ch > 0 && (ch == '_' || isalpha(ch))) { lex_addch(ch, file); ch = lex_getsource(file); }