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:
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;
+}