From 194e87a88290a4b3025436709e1f3064aecd00cd Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 30 Aug 2025 00:39:45 +0900 Subject: feat: check invalid #elif* and #endif --- src/preprocess.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/preprocess.c') diff --git a/src/preprocess.c b/src/preprocess.c index 3f0161d..e47a390 100644 --- a/src/preprocess.c +++ b/src/preprocess.c @@ -1157,8 +1157,15 @@ static void preprocess_group_part(Preprocessor* pp) { if (tok->kind == TokenKind_pp_directive_if || tok->kind == TokenKind_pp_directive_ifdef || tok->kind == TokenKind_pp_directive_ifndef) { preprocess_if_section(pp); + } else if (tok->kind == TokenKind_pp_directive_elif || tok->kind == TokenKind_pp_directive_elifdef || + tok->kind == TokenKind_pp_directive_elifndef || tok->kind == TokenKind_pp_directive_else || + tok->kind == TokenKind_pp_directive_endif) { + fatal_error("%s:%d: unexpected '%s'; no corresponding '#if'*", tok->loc.filename, tok->loc.line, + token_kind_stringify(tok->kind)); } else if (tok->kind == TokenKind_pp_directive_include) { preprocess_include_directive(pp); + } else if (tok->kind == TokenKind_pp_directive_embed) { + preprocess_embed_directive(pp); } else if (tok->kind == TokenKind_pp_directive_define) { preprocess_define_directive(pp); } else if (tok->kind == TokenKind_pp_directive_undef) { -- cgit v1.2.3-70-g09d2