| author | |
| committer | |
| log | c475f1fcd547a93d9e75770900b2fa0c45b43de3 |
| tree | e131c5cc0a06dd35e7dda10500e629acec81f701 |
| parent | 8b71ec6db700dc7af22ce0729991bce846ae6d76 |
3 files changed, 38 insertions(+), 42 deletions(-)
lib/std/zig/Ast.zig+1-1| ... | ... | @@ -476,7 +476,7 @@ pub fn renderError(tree: Ast, parse_error: Error, w: *Writer) Writer.Error!void |
| 476 | 476 | }); |
| 477 | 477 | }, |
| 478 | 478 | .invalid_bit_range => { |
| 479 | return w.writeAll("bit range not allowed on slices and arrays"); | |
| 479 | return w.writeAll("bit range only allowed on single item pointers"); | |
| 480 | 480 | }, |
| 481 | 481 | .same_line_doc_comment => { |
| 482 | 482 | return w.writeAll("same line documentation comment"); |
lib/std/zig/Parse.zig+27-38| ... | ... | @@ -1820,50 +1820,39 @@ fn parseTypeExpr(p: *Parse) Error!?Node.Index { |
| 1820 | 1820 | _ = try p.expectToken(.r_bracket); |
| 1821 | 1821 | const mods = try p.parsePtrModifiers(); |
| 1822 | 1822 | const elem_type = try p.expectTypeExpr(); |
| 1823 | if (mods.bit_range_start == .none) { | |
| 1824 | if (sentinel == null and mods.addrspace_node == .none) { | |
| 1825 | return try p.addNode(.{ | |
| 1826 | .tag = .ptr_type_aligned, | |
| 1827 | .main_token = l_bracket, | |
| 1828 | .data = .{ .opt_node_and_node = .{ | |
| 1829 | mods.align_node, | |
| 1830 | elem_type, | |
| 1831 | } }, | |
| 1832 | }); | |
| 1833 | } else if (mods.align_node == .none and mods.addrspace_node == .none) { | |
| 1834 | return try p.addNode(.{ | |
| 1835 | .tag = .ptr_type_sentinel, | |
| 1836 | .main_token = l_bracket, | |
| 1837 | .data = .{ .opt_node_and_node = .{ | |
| 1838 | .fromOptional(sentinel), | |
| 1839 | elem_type, | |
| 1840 | } }, | |
| 1841 | }); | |
| 1842 | } else { | |
| 1843 | return try p.addNode(.{ | |
| 1844 | .tag = .ptr_type, | |
| 1845 | .main_token = l_bracket, | |
| 1846 | .data = .{ .extra_and_node = .{ | |
| 1847 | try p.addExtra(Node.PtrType{ | |
| 1848 | .sentinel = .fromOptional(sentinel), | |
| 1849 | .align_node = mods.align_node, | |
| 1850 | .addrspace_node = mods.addrspace_node, | |
| 1851 | }), | |
| 1852 | elem_type, | |
| 1853 | } }, | |
| 1854 | }); | |
| 1855 | } | |
| 1823 | if (mods.bit_range_start.unwrap()) |bit_range_start| { | |
| 1824 | try p.warnMsg(.{ | |
| 1825 | .tag = .invalid_bit_range, | |
| 1826 | .token = p.nodeMainToken(bit_range_start), | |
| 1827 | }); | |
| 1828 | } | |
| 1829 | if (sentinel == null and mods.addrspace_node == .none) { | |
| 1830 | return try p.addNode(.{ | |
| 1831 | .tag = .ptr_type_aligned, | |
| 1832 | .main_token = l_bracket, | |
| 1833 | .data = .{ .opt_node_and_node = .{ | |
| 1834 | mods.align_node, | |
| 1835 | elem_type, | |
| 1836 | } }, | |
| 1837 | }); | |
| 1838 | } else if (mods.align_node == .none and mods.addrspace_node == .none) { | |
| 1839 | return try p.addNode(.{ | |
| 1840 | .tag = .ptr_type_sentinel, | |
| 1841 | .main_token = l_bracket, | |
| 1842 | .data = .{ .opt_node_and_node = .{ | |
| 1843 | .fromOptional(sentinel), | |
| 1844 | elem_type, | |
| 1845 | } }, | |
| 1846 | }); | |
| 1856 | 1847 | } else { |
| 1857 | 1848 | return try p.addNode(.{ |
| 1858 | .tag = .ptr_type_bit_range, | |
| 1849 | .tag = .ptr_type, | |
| 1859 | 1850 | .main_token = l_bracket, |
| 1860 | 1851 | .data = .{ .extra_and_node = .{ |
| 1861 | try p.addExtra(Node.PtrTypeBitRange{ | |
| 1852 | try p.addExtra(Node.PtrType{ | |
| 1862 | 1853 | .sentinel = .fromOptional(sentinel), |
| 1863 | .align_node = mods.align_node.unwrap().?, | |
| 1854 | .align_node = mods.align_node, | |
| 1864 | 1855 | .addrspace_node = mods.addrspace_node, |
| 1865 | .bit_range_start = mods.bit_range_start.unwrap().?, | |
| 1866 | .bit_range_end = mods.bit_range_end.unwrap().?, | |
| 1867 | 1856 | }), |
| 1868 | 1857 | elem_type, |
| 1869 | 1858 | } }, |
lib/std/zig/parser_test.zig+10-3| ... | ... | @@ -668,7 +668,6 @@ test "zig fmt: pointer-to-many with modifiers" { |
| 668 | 668 | try testCanonical( |
| 669 | 669 | \\const x: [*]u32 = undefined; |
| 670 | 670 | \\const y: [*]allowzero align(8) addrspace(.generic) const volatile u32 = undefined; |
| 671 | \\const z: [*]allowzero align(8:4:2) addrspace(.generic) const volatile u32 = undefined; | |
| 672 | 671 | \\ |
| 673 | 672 | ); |
| 674 | 673 | } |
| ... | ... | @@ -677,7 +676,6 @@ test "zig fmt: sentinel pointer with modifiers" { |
| 677 | 676 | try testCanonical( |
| 678 | 677 | \\const x: [*:42]u32 = undefined; |
| 679 | 678 | \\const y: [*:42]allowzero align(8) addrspace(.generic) const volatile u32 = undefined; |
| 680 | \\const y: [*:42]allowzero align(8:4:2) addrspace(.generic) const volatile u32 = undefined; | |
| 681 | 679 | \\ |
| 682 | 680 | ); |
| 683 | 681 | } |
| ... | ... | @@ -686,7 +684,6 @@ test "zig fmt: c pointer with modifiers" { |
| 686 | 684 | try testCanonical( |
| 687 | 685 | \\const x: [*c]u32 = undefined; |
| 688 | 686 | \\const y: [*c]allowzero align(8) addrspace(.generic) const volatile u32 = undefined; |
| 689 | \\const z: [*c]allowzero align(8:4:2) addrspace(.generic) const volatile u32 = undefined; | |
| 690 | 687 | \\ |
| 691 | 688 | ); |
| 692 | 689 | } |
| ... | ... | @@ -5817,6 +5814,16 @@ test "zig fmt: error for missing sentinel value in sentinel slice" { |
| 5817 | 5814 | } |
| 5818 | 5815 | |
| 5819 | 5816 | test "zig fmt: error for invalid bit range" { |
| 5817 | try testError( | |
| 5818 | \\var x: [*]align(0:0:0)u8 = bar; | |
| 5819 | , &[_]Error{ | |
| 5820 | .invalid_bit_range, | |
| 5821 | }); | |
| 5822 | try testError( | |
| 5823 | \\var x: [*c]align(0:0:0)u8 = bar; | |
| 5824 | , &[_]Error{ | |
| 5825 | .invalid_bit_range, | |
| 5826 | }); | |
| 5820 | 5827 | try testError( |
| 5821 | 5828 | \\var x: []align(0:0:0)u8 = bar; |
| 5822 | 5829 | , &[_]Error{ |