aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tokenize.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-14 23:12:49 +0900
committernsfisis <nsfisis@gmail.com>2026-01-17 00:27:28 +0900
commitf0351da192b8f32bdf9323b3796521cbc390c749 (patch)
tree789fbf7d954a2dd43bf01c80d1ae959a2a807729 /src/tokenize.c
parent82df1b08c42d40c79b0dbd1634e18786cad860da (diff)
downloadducc-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.c5
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) {