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 {...@@ -985,7 +985,7 @@ const Parser = struct {
985 };985 };
986 const else_token = p.eatToken(.keyword_else) orelse {986 const else_token = p.eatToken(.keyword_else) orelse {
987 if (else_required) {987 if (else_required) {
988 return p.fail(.expected_semi_or_else);988 try p.warn(.expected_semi_or_else);
989 }989 }
990 return p.addNode(.{990 return p.addNode(.{
991 .tag = .if_simple,991 .tag = .if_simple,
...@@ -1079,7 +1079,7 @@ const Parser = struct {...@@ -1079,7 +1079,7 @@ const Parser = struct {
1079 };1079 };
1080 const else_token = p.eatToken(.keyword_else) orelse {1080 const else_token = p.eatToken(.keyword_else) orelse {
1081 if (else_required) {1081 if (else_required) {
1082 return p.fail(.expected_semi_or_else);1082 try p.warn(.expected_semi_or_else);
1083 }1083 }
1084 return p.addNode(.{1084 return p.addNode(.{
1085 .tag = .for_simple,1085 .tag = .for_simple,
...@@ -1154,7 +1154,7 @@ const Parser = struct {...@@ -1154,7 +1154,7 @@ const Parser = struct {
1154 };1154 };
1155 const else_token = p.eatToken(.keyword_else) orelse {1155 const else_token = p.eatToken(.keyword_else) orelse {
1156 if (else_required) {1156 if (else_required) {
1157 return p.fail(.expected_semi_or_else);1157 try p.warn(.expected_semi_or_else);
1158 }1158 }
1159 if (cont_expr == 0) {1159 if (cont_expr == 0) {
1160 return p.addNode(.{1160 return p.addNode(.{
lib/std/zig/parser_test.zig+32-32
...@@ -4222,39 +4222,39 @@ test "recovery: invalid global error set access" {...@@ -4222,39 +4222,39 @@ test "recovery: invalid global error set access" {
4222 });4222 });
4223}4223}
42244224
4225//test "recovery: invalid asterisk after pointer dereference" {4225test "recovery: invalid asterisk after pointer dereference" {
4226// try testError(4226 try testError(
4227// \\test "" {4227 \\test "" {
4228// \\ var sequence = "repeat".*** 10;4228 \\ var sequence = "repeat".*** 10;
4229// \\}4229 \\}
4230// , &[_]Error{4230 , &[_]Error{
4231// .asterisk_after_ptr_deref,4231 .asterisk_after_ptr_deref,
4232// });4232 });
4233// try testError(4233 try testError(
4234// \\test "" {4234 \\test "" {
4235// \\ var sequence = "repeat".** 10&&a;4235 \\ var sequence = "repeat".** 10&&a;
4236// \\}4236 \\}
4237// , &[_]Error{4237 , &[_]Error{
4238// .asterisk_after_ptr_deref,4238 .asterisk_after_ptr_deref,
4239// .invalid_and,4239 .invalid_and,
4240// });4240 });
4241//}4241}
42424242
4243//test "recovery: missing semicolon after if, for, while stmt" {4243test "recovery: missing semicolon after if, for, while stmt" {
4244// try testError(4244 try testError(
4245// \\test "" {4245 \\test "" {
4246// \\ if (foo) bar4246 \\ if (foo) bar
4247// \\ for (foo) |a| bar4247 \\ for (foo) |a| bar
4248// \\ while (foo) bar4248 \\ while (foo) bar
4249// \\ a && b;4249 \\ a && b;
4250// \\}4250 \\}
4251// , &[_]Error{4251 , &[_]Error{
4252// .expected_semi_or_else,4252 .expected_semi_or_else,
4253// .expected_semi_or_else,4253 .expected_semi_or_else,
4254// .expected_semi_or_else,4254 .expected_semi_or_else,
4255// .invalid_and,4255 .invalid_and,
4256// });4256 });
4257//}4257}
42584258
4259test "recovery: invalid comptime" {4259test "recovery: invalid comptime" {
4260 try testError(4260 try testError(