| author | |
| committer | |
| log | 88d0e77b9747152a923e4a4479988924de0fe26f |
| tree | ddb3ba22c76d204410187b22f5b37548efd1eb09 |
| parent | 4074e79748ad9ecc39a4127cd1c28c115efff56a |
3 files changed, 32 insertions(+), 8 deletions(-)
lib/std/zig/ast.zig+8| ... | @@ -262,6 +262,12 @@ pub const Tree = struct { | ... | @@ -262,6 +262,12 @@ pub const Tree = struct { |
| 262 | .extra_volatile_qualifier => { | 262 | .extra_volatile_qualifier => { |
| 263 | return stream.writeAll("extra volatile qualifier"); | 263 | return stream.writeAll("extra volatile qualifier"); |
| 264 | }, | 264 | }, |
| 265 | .invalid_align => { | ||
| 266 | return stream.writeAll("alignment not allowed on arrays"); | ||
| 267 | }, | ||
| 268 | .invalid_bit_range => { | ||
| 269 | return stream.writeAll("bit range not allowed on slices and arrays"); | ||
| 270 | }, | ||
| 265 | .invalid_token => { | 271 | .invalid_token => { |
| 266 | return stream.print("invalid token '{s}'", .{ | 272 | return stream.print("invalid token '{s}'", .{ |
| 267 | token_tags[parse_error.token].symbol(), | 273 | token_tags[parse_error.token].symbol(), |
| ... | @@ -2323,6 +2329,8 @@ pub const Error = struct { | ... | @@ -2323,6 +2329,8 @@ pub const Error = struct { |
| 2323 | extra_allowzero_qualifier, | 2329 | extra_allowzero_qualifier, |
| 2324 | extra_const_qualifier, | 2330 | extra_const_qualifier, |
| 2325 | extra_volatile_qualifier, | 2331 | extra_volatile_qualifier, |
| 2332 | invalid_align, | ||
| 2333 | invalid_bit_range, | ||
| 2326 | invalid_token, | 2334 | invalid_token, |
| 2327 | same_line_doc_comment, | 2335 | same_line_doc_comment, |
| 2328 | unattached_doc_comment, | 2336 | unattached_doc_comment, |
lib/std/zig/parse.zig+8-8| ... | @@ -1777,10 +1777,10 @@ const Parser = struct { | ... | @@ -1777,10 +1777,10 @@ const Parser = struct { |
| 1777 | const mods = try p.parsePtrModifiers(); | 1777 | const mods = try p.parsePtrModifiers(); |
| 1778 | const elem_type = try p.expectTypeExpr(); | 1778 | const elem_type = try p.expectTypeExpr(); |
| 1779 | if (mods.bit_range_start != 0) { | 1779 | if (mods.bit_range_start != 0) { |
| 1780 | @panic("TODO implement this error"); | 1780 | try p.warnMsg(.{ |
| 1781 | //try p.warn(.{ | 1781 | .tag = .invalid_bit_range, |
| 1782 | // .BitRangeInvalid = .{ .node = mods.bit_range_start }, | 1782 | .token = p.nodes.items(.main_token)[mods.bit_range_start], |
| 1783 | //}); | 1783 | }); |
| 1784 | } | 1784 | } |
| 1785 | if (len_expr == 0) { | 1785 | if (len_expr == 0) { |
| 1786 | if (sentinel == 0) { | 1786 | if (sentinel == 0) { |
| ... | @@ -1816,10 +1816,10 @@ const Parser = struct { | ... | @@ -1816,10 +1816,10 @@ const Parser = struct { |
| 1816 | } | 1816 | } |
| 1817 | } else { | 1817 | } else { |
| 1818 | if (mods.align_node != 0) { | 1818 | if (mods.align_node != 0) { |
| 1819 | @panic("TODO implement this error"); | 1819 | try p.warnMsg(.{ |
| 1820 | //try p.warn(.{ | 1820 | .tag = .invalid_align, |
| 1821 | // .AlignInvalid = .{ .node = mods.align_node }, | 1821 | .token = p.nodes.items(.main_token)[mods.align_node], |
| 1822 | //}); | 1822 | }); |
| 1823 | } | 1823 | } |
| 1824 | if (sentinel == 0) { | 1824 | if (sentinel == 0) { |
| 1825 | return p.addNode(.{ | 1825 | return p.addNode(.{ |
lib/std/zig/parser_test.zig+16| ... | @@ -4032,6 +4032,22 @@ test "zig fmt: trailing comma should force multiline 1 column" { | ... | @@ -4032,6 +4032,22 @@ test "zig fmt: trailing comma should force multiline 1 column" { |
| 4032 | // ); | 4032 | // ); |
| 4033 | //} | 4033 | //} |
| 4034 | 4034 | ||
| 4035 | test "zig fmt: error for invalid bit range" { | ||
| 4036 | try testError( | ||
| 4037 | \\var x: []align(0:0:0)u8 = bar; | ||
| 4038 | , &[_]Error{ | ||
| 4039 | .invalid_bit_range, | ||
| 4040 | }); | ||
| 4041 | } | ||
| 4042 | |||
| 4043 | test "zig fmt: error for invalid align" { | ||
| 4044 | try testError( | ||
| 4045 | \\var x: [10]align(10)u8 = bar; | ||
| 4046 | , &[_]Error{ | ||
| 4047 | .invalid_align, | ||
| 4048 | }); | ||
| 4049 | } | ||
| 4050 | |||
| 4035 | test "recovery: top level" { | 4051 | test "recovery: top level" { |
| 4036 | try testError( | 4052 | try testError( |
| 4037 | \\test "" {inline} | 4053 | \\test "" {inline} |