add test for escape escape
[cparser] / lexer.c
diff --git a/lexer.c b/lexer.c
index 635c3ca..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;
                }
        }
@@ -1564,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;