| author | |
| committer | |
| log | a63fd34c50b032e4ed5136dba8b098f780d5b9f8 |
| tree | 1d580777d905d4b97510e6157f382324bb012265 |
| parent | d7f9128b5d3c8c8f6a0a617c45717cdc7e3543fd |
| signature |
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 | } |
| 2703 | 2703 | ||
| 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 | } |
| 2710 | 2716 | ||
| 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 | } |
| 232 | 239 |