| ... | ... | @@ -1774,7 +1774,7 @@ fn parseTypeExpr(p: *Parse) Error!?Node.Index { |
| 1774 | 1774 | }, |
| 1775 | 1775 | .asterisk => { |
| 1776 | 1776 | const asterisk = p.nextToken(); |
| 1777 | | const mods = try p.parsePtrModifiers(); |
| 1777 | const mods = try p.parsePtrModifiers(.bit_align); |
| 1778 | 1778 | const elem_type = try p.expectTypeExpr(); |
| 1779 | 1779 | if (mods.bit_range_start != .none) { |
| 1780 | 1780 | return try p.addNode(.{ |
| ... | ... | @@ -1829,14 +1829,8 @@ fn parseTypeExpr(p: *Parse) Error!?Node.Index { |
| 1829 | 1829 | sentinel = try p.expectExpr(); |
| 1830 | 1830 | } |
| 1831 | 1831 | _ = try p.expectToken(.r_bracket); |
| 1832 | | const mods = try p.parsePtrModifiers(); |
| 1832 | const mods = try p.parsePtrModifiers(.byte_align); |
| 1833 | 1833 | const elem_type = try p.expectTypeExpr(); |
| 1834 | | if (mods.bit_range_start.unwrap()) |bit_range_start| { |
| 1835 | | try p.warnMsg(.{ |
| 1836 | | .tag = .invalid_bit_range, |
| 1837 | | .token = p.nodeMainToken(bit_range_start), |
| 1838 | | }); |
| 1839 | | } |
| 1840 | 1834 | if (sentinel == null and mods.addrspace_node == .none) { |
| 1841 | 1835 | return try p.addNode(.{ |
| 1842 | 1836 | .tag = .ptr_type_aligned, |
| ... | ... | @@ -1879,14 +1873,8 @@ fn parseTypeExpr(p: *Parse) Error!?Node.Index { |
| 1879 | 1873 | null; |
| 1880 | 1874 | _ = try p.expectToken(.r_bracket); |
| 1881 | 1875 | if (len_expr == null) { |
| 1882 | | const mods = try p.parsePtrModifiers(); |
| 1876 | const mods = try p.parsePtrModifiers(.byte_align); |
| 1883 | 1877 | const elem_type = try p.expectTypeExpr(); |
| 1884 | | if (mods.bit_range_start.unwrap()) |bit_range_start| { |
| 1885 | | try p.warnMsg(.{ |
| 1886 | | .tag = .invalid_bit_range, |
| 1887 | | .token = p.nodeMainToken(bit_range_start), |
| 1888 | | }); |
| 1889 | | } |
| 1890 | 1878 | if (sentinel == null and mods.addrspace_node == .none) { |
| 1891 | 1879 | return try p.addNode(.{ |
| 1892 | 1880 | .tag = .ptr_type_aligned, |
| ... | ... | @@ -3065,7 +3053,7 @@ const PtrModifiers = struct { |
| 3065 | 3053 | /// AddrSpace <- KEYWORD_addrspace LPAREN Expr RPAREN |
| 3066 | 3054 | /// ByteAlign <- KEYWORD_align LPAREN Expr RPAREN |
| 3067 | 3055 | /// BitAlign <- KEYWORD_align LPAREN Expr (COLON Expr COLON Expr)? RPAREN |
| 3068 | | fn parsePtrModifiers(p: *Parse) !PtrModifiers { |
| 3056 | fn parsePtrModifiers(p: *Parse, align_type: enum { bit_align, byte_align }) !PtrModifiers { |
| 3069 | 3057 | var result: PtrModifiers = .{ |
| 3070 | 3058 | .align_node = .none, |
| 3071 | 3059 | .addrspace_node = .none, |
| ... | ... | @@ -3082,7 +3070,10 @@ fn parsePtrModifiers(p: *Parse) !PtrModifiers { |
| 3082 | 3070 | _ = try p.expectToken(.l_paren); |
| 3083 | 3071 | result.align_node = (try p.expectExpr()).toOptional(); |
| 3084 | 3072 | |
| 3085 | | if (p.eatToken(.colon)) |_| { |
| 3073 | if (p.eatToken(.colon)) |colon| { |
| 3074 | if (align_type == .byte_align) { |
| 3075 | try p.warnMsg(.{ .tag = .invalid_bit_range, .token = colon }); |
| 3076 | } |
| 3086 | 3077 | result.bit_range_start = (try p.expectExpr()).toOptional(); |
| 3087 | 3078 | _ = try p.expectToken(.colon); |
| 3088 | 3079 | result.bit_range_end = (try p.expectExpr()).toOptional(); |