| 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 | 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 | 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 | 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 | 226 | \\} |
| 227 | 227 | , &[_]Error{ |
| 228 | 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 |