| author | |
| committer | |
| log | e2636e8c868f472a4b7a2b4a0d1386f1560fda80 |
| tree | 13ae0e8e63fe9f37b5b5d3945eba285d28f51c35 |
| parent | 584b82d4ffcb72e58a8caff68e6251050b99a955 |
| signature | Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM |
2 files changed, 12 insertions(+), 1 deletions(-)
lib/std/zig/AstGen.zig+4-1| ... | ... | @@ -880,7 +880,10 @@ fn expr(gz: *GenZir, scope: *Scope, ri: ResultInfo, node: Ast.Node.Index) InnerE |
| 880 | 880 | const start = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, lhs_extra.start); |
| 881 | 881 | const cursor = maybeAdvanceSourceCursorToMainToken(gz, node); |
| 882 | 882 | const len = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, full.ast.end.unwrap().?); |
| 883 | const sentinel = if (full.ast.sentinel.unwrap()) |sentinel| try expr(gz, scope, .{ .rl = .none }, sentinel) else .none; | |
| 883 | const sentinel = if (full.ast.sentinel.unwrap()) |sentinel| s: { | |
| 884 | const sentinel_ty = try gz.addUnNode(.slice_sentinel_ty, lhs, node); | |
| 885 | break :s try expr(gz, scope, .{ .rl = .{ .coerced_ty = sentinel_ty } }, sentinel); | |
| 886 | } else .none; | |
| 884 | 887 | try emitDbgStmt(gz, cursor); |
| 885 | 888 | const result = try gz.addPlNode(.slice_length, node, Zir.Inst.SliceLength{ |
| 886 | 889 | .lhs = lhs, |
test/behavior/slice.zig+8| ... | ... | @@ -1090,6 +1090,14 @@ test "sentinel expression in slice operation has result type" { |
| 1090 | 1090 | comptime assert(slice.len == 2); |
| 1091 | 1091 | comptime assert(slice[0] == 1); |
| 1092 | 1092 | comptime assert(slice[1] == 2); |
| 1093 | ||
| 1094 | const by_len = arr[0..][0..2 :@intCast(sentinel)]; | |
| 1095 | ||
| 1096 | comptime assert(@TypeOf(by_len) == *const [2:sentinel]u16); | |
| 1097 | comptime assert(by_len[2] == sentinel); | |
| 1098 | comptime assert(by_len.len == 2); | |
| 1099 | comptime assert(by_len[0] == 1); | |
| 1100 | comptime assert(by_len[1] == 2); | |
| 1093 | 1101 | } |
| 1094 | 1102 | |
| 1095 | 1103 | test "conditionally return second argument slice" { |