From 87733171b60b0816e93c76419d10674ba10684e2 Mon Sep 17 00:00:00 2001 From: Pavel Verigo Date: Fri, 26 Jan 2024 22:08:30 +0100 Subject: [PATCH] parser: fix "else" followed by "comptime" --- lib/std/zig/Parse.zig | 9 ++++++++- lib/std/zig/parser_test.zig | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/std/zig/Parse.zig b/lib/std/zig/Parse.zig index c0b775b8cf2b350f447a30137d7f00bbfd0f5900..3c007ea1ac460912fb35de90338374a8d3903930 100644 --- a/lib/std/zig/Parse.zig +++ b/lib/std/zig/Parse.zig @@ -956,7 +956,14 @@ fn expectStatement(p: *Parse, allow_defer_var: bool) Error!Node.Index { } else { const assign = try p.expectAssignExpr(); try p.expectSemicolon(.expected_semi_after_stmt, true); - return assign; + return p.addNode(.{ + .tag = .@"comptime", + .main_token = comptime_token, + .data = .{ + .lhs = assign, + .rhs = undefined, + }, + }); } } diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index 7f01d72e8c413c3404e9e83cf007959a3f7aef79..0513bd9f0325535c4c4ffa3e62d4af523dd0c067 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -4376,6 +4376,21 @@ test "zig fmt: invalid doc comments on comptime and test blocks" { }); } +test "zig fmt: else comptime expr" { + try testCanonical( + \\comptime { + \\ if (true) {} else comptime foo(); + \\} + \\comptime { + \\ while (true) {} else comptime foo(); + \\} + \\comptime { + \\ for ("") |_| {} else comptime foo(); + \\} + \\ + ); +} + test "zig fmt: invalid else branch statement" { try testError( \\comptime { -- 2.54.0