'$' in symbols can be switched off (if someone implements a command-line option for it)
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 28 Aug 2008 11:49:24 +0000 (11:49 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 28 Aug 2008 11:49:24 +0000 (11:49 +0000)
[r21536]

lexer.c
lexer.h
main.c

diff --git a/lexer.c b/lexer.c
index 16a3798..9b6d369 100644 (file)
--- 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 (file)
--- 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 (file)
--- 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();