zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 878e99d580faf27aba2fbd782cb664da5d460614 (tree)
parent 1247b7b9ef10d1b16117615bbd64d7bbd27507b2
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Sun, 21 Feb 2021 18:04:23 -0700

parser: fix recovery for missing semicolons

Diffstat:
Mlib/std/zig/parse.zig | 6+++---
Mlib/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 @@ -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 @@ -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(