diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-01-14 23:12:49 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-01-17 00:27:28 +0900 |
| commit | f0351da192b8f32bdf9323b3796521cbc390c749 (patch) | |
| tree | 789fbf7d954a2dd43bf01c80d1ae959a2a807729 /src/tokenize.c | |
| parent | 82df1b08c42d40c79b0dbd1634e18786cad860da (diff) | |
| download | ducc-f0351da192b8f32bdf9323b3796521cbc390c749.tar.gz ducc-f0351da192b8f32bdf9323b3796521cbc390c749.tar.zst ducc-f0351da192b8f32bdf9323b3796521cbc390c749.zip | |
feat: support #include_next directive (GNU extension)
Diffstat (limited to 'src/tokenize.c')
| -rw-r--r-- | src/tokenize.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/tokenize.c b/src/tokenize.c index 26c6e13..ceba12d 100644 --- a/src/tokenize.c +++ b/src/tokenize.c @@ -37,7 +37,7 @@ static void pplexer_tokenize_pp_directive(Lexer* l, Token* tok) { StrBuilder builder; strbuilder_init(&builder); - while (isalnum(infile_peek_char(l->src))) { + while (isalnum(infile_peek_char(l->src)) || infile_peek_char(l->src) == '_') { strbuilder_append_char(&builder, infile_peek_char(l->src)); infile_next_char(l->src); } @@ -70,6 +70,9 @@ static void pplexer_tokenize_pp_directive(Lexer* l, Token* tok) { } else if (strcmp(pp_directive_name, "include") == 0) { l->expect_header_name = true; tok->kind = TokenKind_pp_directive_include; + } else if (strcmp(pp_directive_name, "include_next") == 0) { + l->expect_header_name = true; + tok->kind = TokenKind_pp_directive_include_next; } else if (strcmp(pp_directive_name, "line") == 0) { tok->kind = TokenKind_pp_directive_line; } else if (strcmp(pp_directive_name, "pragma") == 0) { |
