From: Michael Beck Date: Thu, 28 Aug 2008 11:49:24 +0000 (+0000) Subject: '$' in symbols can be switched off (if someone implements a command-line option for it) X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=8fb3da11c9e16fc66b74138035c121f4f8de5477;p=cparser '$' in symbols can be switched off (if someone implements a command-line option for it) [r21536] --- diff --git a/lexer.c b/lexer.c index 16a3798..9b6d369 100644 --- a/lexer.c +++ b/lexer.c @@ -56,6 +56,7 @@ static char buf[1024 + MAX_PUTBACK]; static const char *bufend; static const char *bufpos; static strset_t stringset; +bool allow_dollar_in_symbol = true; /** * Prints a parse error message at the current token. @@ -194,6 +195,7 @@ end_of_next_char:; } #define SYMBOL_CHARS \ + case '$': if (!allow_dollar_in_symbol) goto dollar_sign; \ case 'a': \ case 'b': \ case 'c': \ @@ -246,8 +248,7 @@ end_of_next_char:; case 'X': \ case 'Y': \ case 'Z': \ - case '_': \ - case '$': // TODO add option to deactivate $ in identifers + case '_': #define DIGITS \ case '0': \ @@ -282,6 +283,7 @@ static void parse_symbol(void) break; default: +dollar_sign: goto end_symbol; } } @@ -1565,6 +1567,7 @@ void lexer_next_preprocessing_token(void) return; default: +dollar_sign: errorf(&lexer_token.source_position, "unknown character '%c' found", c); next_char(); lexer_token.type = T_ERROR; diff --git a/lexer.h b/lexer.h index 8adcdd9..b1120cf 100644 --- a/lexer.h +++ b/lexer.h @@ -24,6 +24,7 @@ #include "token_t.h" extern token_t lexer_token; +extern bool allow_dollar_in_symbols; void lexer_next_token(void); diff --git a/main.c b/main.c index 2c8c734..3eb7041 100644 --- a/main.c +++ b/main.c @@ -106,6 +106,9 @@ bool strict_mode = false; /** use builtins for some libc functions */ bool use_builtins = false; +/** allow dollar signs in symbols */ +extern bool allow_dollar_in_symbols; + /* to switch on printing of implicit casts */ extern bool print_implicit_casts; @@ -878,7 +881,7 @@ int main(int argc, char **argv) init_types(); init_typehash(); init_basic_types(); - init_lexer(); + init_lexer(allow_dollar_in_symbols); init_ast(); init_parser(); init_ast2firm();