diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-01-08 02:44:13 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-01-08 02:44:13 +0900 |
| commit | 09b9a73c2d8abcd8d459a0e412fa4bef5f4ded95 (patch) | |
| tree | e4070e7a1eb78e8e0bd2ca9d2dd49dda6a7f5d5f /src | |
| parent | ca88e6a04cae4eea7b1a3ae849f4a0cc44fecb95 (diff) | |
| download | ducc-09b9a73c2d8abcd8d459a0e412fa4bef5f4ded95.tar.gz ducc-09b9a73c2d8abcd8d459a0e412fa4bef5f4ded95.tar.zst ducc-09b9a73c2d8abcd8d459a0e412fa4bef5f4ded95.zip | |
fix: infinite loop when tokenizing "#include HEADER_MACRO"
Diffstat (limited to 'src')
| -rw-r--r-- | src/tokenize.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/tokenize.c b/src/tokenize.c index 1e7a8df..26c6e13 100644 --- a/src/tokenize.c +++ b/src/tokenize.c @@ -361,6 +361,16 @@ static void do_tokenize_all(Lexer* l) { } else if (c == '\n') { infile_next_char(l->src); tok->kind = TokenKind_newline; + + // Reset expect_header_name at the end of line. It handles cases like: + // + // #ifdef ADDITIONAL_HEADER + // #include ADDITIONAL_HEADER + // #endif + // + // Even if ADDITIONAL_HEADER is undefined, this include directive line is tokenized. If the flag were not + // reset, the next occurrence of '<' or '"' would be recognized as part of a header name. + l->expect_header_name = false; } else if (isspace(c)) { while (isspace((c = infile_peek_char(l->src)))) { if (c == '\n') |
