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:
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(