From b400b6bbdc526f5de357cb2657d79ea0343870bc Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 6 Jan 2026 09:26:13 +0900 Subject: fix: for loop with multiple variable declarations In this C code, for (T v = expr1, u = expr2; ...; ...) { ... } the "expr2" was silently discarded before. --- src/parse.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/parse.c') diff --git a/src/parse.c b/src/parse.c index 819c418..f336c0c 100644 --- a/src/parse.c +++ b/src/parse.c @@ -1166,7 +1166,15 @@ static AstNode* parse_for_stmt(Parser* p) { enter_scope(p); if (peek_token(p)->kind != TokenKind_semicolon) { if (is_type_token(p, peek_token(p))) { - init = parse_var_decl(p)->node_items[0].node_expr; + AstNode* decls = parse_var_decl(p); + AstNode* initializers = ast_new_list(1); + for (size_t i = 0; i < decls->node_len; i++) { + AstNode* initializer = decls->node_items[i].node_expr; + if (initializer) { + ast_append(initializers, initializer); + } + } + init = initializers; } else { init = parse_expr(p); expect(p, TokenKind_semicolon); -- cgit v1.2.3-70-g09d2