diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-04-28 22:27:50 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-28 22:27:50 +0300 |
| commit | 091fe78337dc3ca340fdf74ca6c1a58c5e666626 (patch) | |
| tree | 3f29858b4c6425073e8c14c27d5355ef863f8074 /src/TypedValue.zig | |
| parent | 3052597a734f87727fa7f1a0e92247f100df3e96 (diff) | |
| parent | f8940a05aeb347deb858b848e33f73ef285c3298 (diff) | |
| download | zig-091fe78337dc3ca340fdf74ca6c1a58c5e666626.tar.gz zig-091fe78337dc3ca340fdf74ca6c1a58c5e666626.zip | |
Merge pull request #11541 from Vexu/stage2-slice-field-ptr
Stage2: fix slice field modification at comptime
Diffstat (limited to 'src/TypedValue.zig')
| -rw-r--r-- | src/TypedValue.zig | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/src/TypedValue.zig b/src/TypedValue.zig index b0d5d77010..43c26b254e 100644 --- a/src/TypedValue.zig +++ b/src/TypedValue.zig @@ -146,7 +146,8 @@ pub fn print( if (ty.zigTypeTag() == .Struct) { try writer.writeAll(".{ "); const struct_fields = ty.structFields(); - const max_len = std.math.min(struct_fields.count(), max_aggregate_items); + const len = struct_fields.count(); + const max_len = std.math.min(len, max_aggregate_items); const field_names = struct_fields.keys(); const fields = struct_fields.values(); @@ -160,11 +161,15 @@ pub fn print( .val = vals[i], }, writer, level - 1, mod); } + if (len > max_aggregate_items) { + try writer.writeAll(", ..."); + } return writer.writeAll(" }"); } else { try writer.writeAll(".{ "); const elem_ty = ty.elemType2(); - const max_len = std.math.min(ty.arrayLen(), max_aggregate_items); + const len = ty.arrayLen(); + const max_len = std.math.min(len, max_aggregate_items); var i: u32 = 0; while (i < max_len) : (i += 1) { @@ -174,6 +179,9 @@ pub fn print( .val = vals[i], }, writer, level - 1, mod); } + if (len > max_aggregate_items) { + try writer.writeAll(", ..."); + } return writer.writeAll(" }"); } }, @@ -292,10 +300,15 @@ pub fn print( .ty = ty.elemType2(), .val = val.castTag(.repeated).?.data, }; - while (i < max_aggregate_items) : (i += 1) { + const len = ty.arrayLen(); + const max_len = std.math.min(len, max_aggregate_items); + while (i < max_len) : (i += 1) { if (i != 0) try writer.writeAll(", "); try print(elem_tv, writer, level - 1, mod); } + if (len > max_aggregate_items) { + try writer.writeAll(", ..."); + } return writer.writeAll(" }"); }, .empty_array_sentinel => { @@ -309,7 +322,27 @@ pub fn print( }, writer, level - 1, mod); return writer.writeAll(" }"); }, - .slice => return writer.writeAll("(slice)"), + .slice => { + const payload = val.castTag(.slice).?.data; + try writer.writeAll(".{ "); + const elem_ty = ty.elemType2(); + const len = payload.len.toUnsignedInt(target); + const max_len = std.math.min(len, max_aggregate_items); + + var i: u32 = 0; + while (i < max_len) : (i += 1) { + if (i != 0) try writer.writeAll(", "); + var buf: Value.ElemValueBuffer = undefined; + try print(.{ + .ty = elem_ty, + .val = payload.ptr.elemValueBuffer(mod, i, &buf), + }, writer, level - 1, mod); + } + if (len > max_aggregate_items) { + try writer.writeAll(", ..."); + } + return writer.writeAll(" }"); + }, .float_16 => return writer.print("{}", .{val.castTag(.float_16).?.data}), .float_32 => return writer.print("{}", .{val.castTag(.float_32).?.data}), .float_64 => return writer.print("{}", .{val.castTag(.float_64).?.data}), |
