zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 88d0e77b9747152a923e4a4479988924de0fe26f (tree)
parent 4074e79748ad9ecc39a4127cd1c28c115efff56a
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Sun, 21 Feb 2021 00:18:20 -0700

parse: implement error for invalid bit range and alignment

Diffstat:
Mlib/std/zig/ast.zig | 8++++++++
Mlib/std/zig/parse.zig | 16++++++++--------
Mlib/std/zig/parser_test.zig | 16++++++++++++++++
3 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/lib/std/zig/ast.zig b/lib/std/zig/ast.zig @@ -262,6 +262,12 @@ pub const Tree = struct { .extra_volatile_qualifier => { return stream.writeAll("extra volatile qualifier"); }, + .invalid_align => { + return stream.writeAll("alignment not allowed on arrays"); + }, + .invalid_bit_range => { + return stream.writeAll("bit range not allowed on slices and arrays"); + }, .invalid_token => { return stream.print("invalid token '{s}'", .{ token_tags[parse_error.token].symbol(), @@ -2323,6 +2329,8 @@ pub const Error = struct { extra_allowzero_qualifier, extra_const_qualifier, extra_volatile_qualifier, + invalid_align, + invalid_bit_range, invalid_token, same_line_doc_comment, unattached_doc_comment, diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig @@ -1777,10 +1777,10 @@ const Parser = struct { const mods = try p.parsePtrModifiers(); const elem_type = try p.expectTypeExpr(); if (mods.bit_range_start != 0) { - @panic("TODO implement this error"); - //try p.warn(.{ - // .BitRangeInvalid = .{ .node = mods.bit_range_start }, - //}); + try p.warnMsg(.{ + .tag = .invalid_bit_range, + .token = p.nodes.items(.main_token)[mods.bit_range_start], + }); } if (len_expr == 0) { if (sentinel == 0) { @@ -1816,10 +1816,10 @@ const Parser = struct { } } else { if (mods.align_node != 0) { - @panic("TODO implement this error"); - //try p.warn(.{ - // .AlignInvalid = .{ .node = mods.align_node }, - //}); + try p.warnMsg(.{ + .tag = .invalid_align, + .token = p.nodes.items(.main_token)[mods.align_node], + }); } if (sentinel == 0) { return p.addNode(.{ diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig @@ -4032,6 +4032,22 @@ test "zig fmt: trailing comma should force multiline 1 column" { // ); //} +test "zig fmt: error for invalid bit range" { + try testError( + \\var x: []align(0:0:0)u8 = bar; + , &[_]Error{ + .invalid_bit_range, + }); +} + +test "zig fmt: error for invalid align" { + try testError( + \\var x: [10]align(10)u8 = bar; + , &[_]Error{ + .invalid_align, + }); +} + test "recovery: top level" { try testError( \\test "" {inline}