Handle -fno-syntax-only.
[cparser] / lexer.c
diff --git a/lexer.c b/lexer.c
index 7a906d4..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':         \
@@ -281,6 +283,7 @@ static void parse_symbol(void)
                        break;
 
                default:
+dollar_sign:
                        goto end_symbol;
                }
        }
@@ -1433,16 +1436,7 @@ void lexer_next_preprocessing_token(void)
 
                case '.':
                        MAYBE_PROLOG
-                               case '0':
-                               case '1':
-                               case '2':
-                               case '3':
-                               case '4':
-                               case '5':
-                               case '6':
-                               case '7':
-                               case '8':
-                               case '9':
+                               DIGITS
                                        put_back(c);
                                        c = '.';
                                        parse_number_dec();
@@ -1573,8 +1567,9 @@ void lexer_next_preprocessing_token(void)
                        return;
 
                default:
+dollar_sign:
+                       errorf(&lexer_token.source_position, "unknown character '%c' found", c);
                        next_char();
-                       errorf(&lexer_token.source_position, "unknown character '%c' found\n", c);
                        lexer_token.type = T_ERROR;
                        return;
                }