authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-04-28 17:48:05+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-04-28 17:48:05+03:00
logf8940a05aeb347deb858b848e33f73ef285c3298
treea082f09fa3bb4b3595e48672fdc149340bf2eb36
parent095d51164f53ee7f23aae9dbe08270eacf61d97b

TypedValue: pretty print slices


1 files changed, 37 insertions(+), 4 deletions(-)

src/TypedValue.zig+37-4
......@@ -146,7 +146,8 @@ pub fn print(
146146 if (ty.zigTypeTag() == .Struct) {
147147 try writer.writeAll(".{ ");
148148 const struct_fields = ty.structFields();
149 const max_len = std.math.min(struct_fields.count(), max_aggregate_items);
149 const len = struct_fields.count();
150 const max_len = std.math.min(len, max_aggregate_items);
150151
151152 const field_names = struct_fields.keys();
152153 const fields = struct_fields.values();
......@@ -160,11 +161,15 @@ pub fn print(
160161 .val = vals[i],
161162 }, writer, level - 1, mod);
162163 }
164 if (len > max_aggregate_items) {
165 try writer.writeAll(", ...");
166 }
163167 return writer.writeAll(" }");
164168 } else {
165169 try writer.writeAll(".{ ");
166170 const elem_ty = ty.elemType2();
167 const max_len = std.math.min(ty.arrayLen(), max_aggregate_items);
171 const len = ty.arrayLen();
172 const max_len = std.math.min(len, max_aggregate_items);
168173
169174 var i: u32 = 0;
170175 while (i < max_len) : (i += 1) {
......@@ -174,6 +179,9 @@ pub fn print(
174179 .val = vals[i],
175180 }, writer, level - 1, mod);
176181 }
182 if (len > max_aggregate_items) {
183 try writer.writeAll(", ...");
184 }
177185 return writer.writeAll(" }");
178186 }
179187 },
......@@ -292,10 +300,15 @@ pub fn print(
292300 .ty = ty.elemType2(),
293301 .val = val.castTag(.repeated).?.data,
294302 };
295 while (i < max_aggregate_items) : (i += 1) {
303 const len = ty.arrayLen();
304 const max_len = std.math.min(len, max_aggregate_items);
305 while (i < max_len) : (i += 1) {
296306 if (i != 0) try writer.writeAll(", ");
297307 try print(elem_tv, writer, level - 1, mod);
298308 }
309 if (len > max_aggregate_items) {
310 try writer.writeAll(", ...");
311 }
299312 return writer.writeAll(" }");
300313 },
301314 .empty_array_sentinel => {
......@@ -309,7 +322,27 @@ pub fn print(
309322 }, writer, level - 1, mod);
310323 return writer.writeAll(" }");
311324 },
312 .slice => return writer.writeAll("(slice)"),
325 .slice => {
326 const payload = val.castTag(.slice).?.data;
327 try writer.writeAll(".{ ");
328 const elem_ty = ty.elemType2();
329 const len = payload.len.toUnsignedInt(target);
330 const max_len = std.math.min(len, max_aggregate_items);
331
332 var i: u32 = 0;
333 while (i < max_len) : (i += 1) {
334 if (i != 0) try writer.writeAll(", ");
335 var buf: Value.ElemValueBuffer = undefined;
336 try print(.{
337 .ty = elem_ty,
338 .val = payload.ptr.elemValueBuffer(mod, i, &buf),
339 }, writer, level - 1, mod);
340 }
341 if (len > max_aggregate_items) {
342 try writer.writeAll(", ...");
343 }
344 return writer.writeAll(" }");
345 },
313346 .float_16 => return writer.print("{}", .{val.castTag(.float_16).?.data}),
314347 .float_32 => return writer.print("{}", .{val.castTag(.float_32).?.data}),
315348 .float_64 => return writer.print("{}", .{val.castTag(.float_64).?.data}),