zig

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

commit e0d390463865340adc8055d1e34c0bc7acf4e4c3 (tree)
parent 75ff34db9e93056482233f8476a06f78b4a2f3c2
Author: r00ster91 <r00ster91@proton.me>
Date:   Fri,  3 Mar 2023 09:42:34 +0100

Ast: properly handle sentinel-terminated slices in tuple

Co-authored-by: Veikka Tuominen <git@vexu.eu>

Diffstat:
Mlib/std/zig/Ast.zig | 9++++++---
Mtest/behavior/tuple.zig | 19+++++++++++++++++++
2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/lib/std/zig/Ast.zig b/lib/std/zig/Ast.zig @@ -1407,7 +1407,8 @@ pub fn containerField(tree: Ast, node: Node.Index) full.ContainerField { .type_expr = data.lhs, .value_expr = extra.value_expr, .align_expr = extra.align_expr, - .tuple_like = tree.tokens.items(.tag)[main_token + 1] != .colon, + .tuple_like = tree.tokens.items(.tag)[main_token] != .identifier or + tree.tokens.items(.tag)[main_token + 1] != .colon, }); } @@ -1420,7 +1421,8 @@ pub fn containerFieldInit(tree: Ast, node: Node.Index) full.ContainerField { .type_expr = data.lhs, .value_expr = data.rhs, .align_expr = 0, - .tuple_like = tree.tokens.items(.tag)[main_token + 1] != .colon, + .tuple_like = tree.tokens.items(.tag)[main_token] != .identifier or + tree.tokens.items(.tag)[main_token + 1] != .colon, }); } @@ -1433,7 +1435,8 @@ pub fn containerFieldAlign(tree: Ast, node: Node.Index) full.ContainerField { .type_expr = data.lhs, .value_expr = 0, .align_expr = data.rhs, - .tuple_like = tree.tokens.items(.tag)[main_token + 1] != .colon, + .tuple_like = tree.tokens.items(.tag)[main_token] != .identifier or + tree.tokens.items(.tag)[main_token + 1] != .colon, }); } diff --git a/test/behavior/tuple.zig b/test/behavior/tuple.zig @@ -397,3 +397,22 @@ test "nested runtime conditionals in tuple initializer" { }; try expectEqualStrings("up", x[0]); } + +test "sentinel slice in tuple with other fields" { + const S = struct { + a: u32, + b: u32, + }; + + const Submission = union(enum) { + open: struct { *S, [:0]const u8, u32 }, + }; + + _ = Submission; +} + +test "sentinel slice in tuple" { + const S = struct { [:0]const u8 }; + + _ = S; +}