From 878e99d580faf27aba2fbd782cb664da5d460614 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 21 Feb 2021 18:04:23 -0700 Subject: [PATCH] parser: fix recovery for missing semicolons --- lib/std/zig/parse.zig | 6 ++-- lib/std/zig/parser_test.zig | 64 ++++++++++++++++++------------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index ac05cc321f..90d634c1fc 100644 --- a/lib/std/zig/parse.zig +++ b/lib/std/zig/parse.zig @@ -985,7 +985,7 @@ const Parser = struct { }; const else_token = p.eatToken(.keyword_else) orelse { if (else_required) { - return p.fail(.expected_semi_or_else); + try p.warn(.expected_semi_or_else); } return p.addNode(.{ .tag = .if_simple, @@ -1079,7 +1079,7 @@ const Parser = struct { }; const else_token = p.eatToken(.keyword_else) orelse { if (else_required) { - return p.fail(.expected_semi_or_else); + try p.warn(.expected_semi_or_else); } return p.addNode(.{ .tag = .for_simple, @@ -1154,7 +1154,7 @@ const Parser = struct { }; const else_token = p.eatToken(.keyword_else) orelse { if (else_required) { - return p.fail(.expected_semi_or_else); + try p.warn(.expected_semi_or_else); } if (cont_expr == 0) { return p.addNode(.{ diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index 06e32d56fd..40d58337e0 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -4222,39 +4222,39 @@ test "recovery: invalid global error set access" { }); } -//test "recovery: invalid asterisk after pointer dereference" { -// try testError( -// \\test "" { -// \\ var sequence = "repeat".*** 10; -// \\} -// , &[_]Error{ -// .asterisk_after_ptr_deref, -// }); -// try testError( -// \\test "" { -// \\ var sequence = "repeat".** 10&&a; -// \\} -// , &[_]Error{ -// .asterisk_after_ptr_deref, -// .invalid_and, -// }); -//} +test "recovery: invalid asterisk after pointer dereference" { + try testError( + \\test "" { + \\ var sequence = "repeat".*** 10; + \\} + , &[_]Error{ + .asterisk_after_ptr_deref, + }); + try testError( + \\test "" { + \\ var sequence = "repeat".** 10&&a; + \\} + , &[_]Error{ + .asterisk_after_ptr_deref, + .invalid_and, + }); +} -//test "recovery: missing semicolon after if, for, while stmt" { -// try testError( -// \\test "" { -// \\ if (foo) bar -// \\ for (foo) |a| bar -// \\ while (foo) bar -// \\ a && b; -// \\} -// , &[_]Error{ -// .expected_semi_or_else, -// .expected_semi_or_else, -// .expected_semi_or_else, -// .invalid_and, -// }); -//} +test "recovery: missing semicolon after if, for, while stmt" { + try testError( + \\test "" { + \\ if (foo) bar + \\ for (foo) |a| bar + \\ while (foo) bar + \\ a && b; + \\} + , &[_]Error{ + .expected_semi_or_else, + .expected_semi_or_else, + .expected_semi_or_else, + .invalid_and, + }); +} test "recovery: invalid comptime" { try testError(