authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-10-29 19:20:15+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-10-29 19:20:15+02:00
loga63fd34c50b032e4ed5136dba8b098f780d5b9f8
tree1d580777d905d4b97510e6157f382324bb012265
parentd7f9128b5d3c8c8f6a0a617c45717cdc7e3543fd
signaturelock-open Commit is signed but in an unrecognized format.

return a valid node even if invalid deref was used


2 files changed, 17 insertions(+), 4 deletions(-)

lib/std/zig/parse.zig+9-3
...@@ -2701,11 +2701,17 @@ const Parser = struct {...@@ -2701,11 +2701,17 @@ const Parser = struct {
2701 return &node.base;2701 return &node.base;
2702 }2702 }
27032703
2704 if (p.token_ids[p.tok_i] == .Invalid_periodasterisks) {2704 if (p.eatToken(.Invalid_periodasterisks)) |period_asterisk| {
2705 try p.errors.append(p.gpa, .{2705 try p.errors.append(p.gpa, .{
2706 .AsteriskAfterPointerDereference = .{ .token = p.tok_i },2706 .AsteriskAfterPointerDereference = .{ .token = period_asterisk },
2707 });2707 });
2708 return null;2708 const node = try p.arena.allocator.create(Node.SimpleSuffixOp);
2709 node.* = .{
2710 .base = .{ .tag = .Deref },
2711 .lhs = lhs,
2712 .rtoken = period_asterisk,
2713 };
2714 return &node.base;
2709 }2715 }
27102716
2711 if (p.eatToken(.Period)) |period| {2717 if (p.eatToken(.Period)) |period| {
lib/std/zig/parser_test.zig+8-1
...@@ -226,7 +226,14 @@ test "recovery: invalid asterisk after pointer dereference" {...@@ -226,7 +226,14 @@ test "recovery: invalid asterisk after pointer dereference" {
226 \\}226 \\}
227 , &[_]Error{227 , &[_]Error{
228 .AsteriskAfterPointerDereference,228 .AsteriskAfterPointerDereference,
229 .ExpectedToken,229 });
230 try testError(
231 \\test "" {
232 \\ var sequence = "repeat".** 10&&a;
233 \\}
234 , &[_]Error{
235 .AsteriskAfterPointerDereference,
236 .InvalidAnd,
230 });237 });
231}238}
232239