authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-21 18:04:23-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-21 18:04:23-07:00
log878e99d580faf27aba2fbd782cb664da5d460614
tree5817e3382cc73fd8cbcab5731803e14ae569eeb4
parent1247b7b9ef10d1b16117615bbd64d7bbd27507b2

parser: fix recovery for missing semicolons


2 files changed, 35 insertions(+), 35 deletions(-)

lib/std/zig/parse.zig+3-3
......@@ -985,7 +985,7 @@ const Parser = struct {
985985 };
986986 const else_token = p.eatToken(.keyword_else) orelse {
987987 if (else_required) {
988 return p.fail(.expected_semi_or_else);
988 try p.warn(.expected_semi_or_else);
989989 }
990990 return p.addNode(.{
991991 .tag = .if_simple,
......@@ -1079,7 +1079,7 @@ const Parser = struct {
10791079 };
10801080 const else_token = p.eatToken(.keyword_else) orelse {
10811081 if (else_required) {
1082 return p.fail(.expected_semi_or_else);
1082 try p.warn(.expected_semi_or_else);
10831083 }
10841084 return p.addNode(.{
10851085 .tag = .for_simple,
......@@ -1154,7 +1154,7 @@ const Parser = struct {
11541154 };
11551155 const else_token = p.eatToken(.keyword_else) orelse {
11561156 if (else_required) {
1157 return p.fail(.expected_semi_or_else);
1157 try p.warn(.expected_semi_or_else);
11581158 }
11591159 if (cont_expr == 0) {
11601160 return p.addNode(.{
lib/std/zig/parser_test.zig+32-32
......@@ -4222,39 +4222,39 @@ test "recovery: invalid global error set access" {
42224222 });
42234223}
42244224
4225//test "recovery: invalid asterisk after pointer dereference" {
4226// try testError(
4227// \\test "" {
4228// \\ var sequence = "repeat".*** 10;
4229// \\}
4230// , &[_]Error{
4231// .asterisk_after_ptr_deref,
4232// });
4233// try testError(
4234// \\test "" {
4235// \\ var sequence = "repeat".** 10&&a;
4236// \\}
4237// , &[_]Error{
4238// .asterisk_after_ptr_deref,
4239// .invalid_and,
4240// });
4241//}
4225test "recovery: invalid asterisk after pointer dereference" {
4226 try testError(
4227 \\test "" {
4228 \\ var sequence = "repeat".*** 10;
4229 \\}
4230 , &[_]Error{
4231 .asterisk_after_ptr_deref,
4232 });
4233 try testError(
4234 \\test "" {
4235 \\ var sequence = "repeat".** 10&&a;
4236 \\}
4237 , &[_]Error{
4238 .asterisk_after_ptr_deref,
4239 .invalid_and,
4240 });
4241}
42424242
4243//test "recovery: missing semicolon after if, for, while stmt" {
4244// try testError(
4245// \\test "" {
4246// \\ if (foo) bar
4247// \\ for (foo) |a| bar
4248// \\ while (foo) bar
4249// \\ a && b;
4250// \\}
4251// , &[_]Error{
4252// .expected_semi_or_else,
4253// .expected_semi_or_else,
4254// .expected_semi_or_else,
4255// .invalid_and,
4256// });
4257//}
4243test "recovery: missing semicolon after if, for, while stmt" {
4244 try testError(
4245 \\test "" {
4246 \\ if (foo) bar
4247 \\ for (foo) |a| bar
4248 \\ while (foo) bar
4249 \\ a && b;
4250 \\}
4251 , &[_]Error{
4252 .expected_semi_or_else,
4253 .expected_semi_or_else,
4254 .expected_semi_or_else,
4255 .invalid_and,
4256 });
4257}
42584258
42594259test "recovery: invalid comptime" {
42604260 try testError(