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(...@@ -146,7 +146,8 @@ pub fn print(
146 if (ty.zigTypeTag() == .Struct) {146 if (ty.zigTypeTag() == .Struct) {
147 try writer.writeAll(".{ ");147 try writer.writeAll(".{ ");
148 const struct_fields = ty.structFields();148 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
151 const field_names = struct_fields.keys();152 const field_names = struct_fields.keys();
152 const fields = struct_fields.values();153 const fields = struct_fields.values();
...@@ -160,11 +161,15 @@ pub fn print(...@@ -160,11 +161,15 @@ pub fn print(
160 .val = vals[i],161 .val = vals[i],
161 }, writer, level - 1, mod);162 }, writer, level - 1, mod);
162 }163 }
164 if (len > max_aggregate_items) {
165 try writer.writeAll(", ...");
166 }
163 return writer.writeAll(" }");167 return writer.writeAll(" }");
164 } else {168 } else {
165 try writer.writeAll(".{ ");169 try writer.writeAll(".{ ");
166 const elem_ty = ty.elemType2();170 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
169 var i: u32 = 0;174 var i: u32 = 0;
170 while (i < max_len) : (i += 1) {175 while (i < max_len) : (i += 1) {
...@@ -174,6 +179,9 @@ pub fn print(...@@ -174,6 +179,9 @@ pub fn print(
174 .val = vals[i],179 .val = vals[i],
175 }, writer, level - 1, mod);180 }, writer, level - 1, mod);
176 }181 }
182 if (len > max_aggregate_items) {
183 try writer.writeAll(", ...");
184 }
177 return writer.writeAll(" }");185 return writer.writeAll(" }");
178 }186 }
179 },187 },
...@@ -292,10 +300,15 @@ pub fn print(...@@ -292,10 +300,15 @@ pub fn print(
292 .ty = ty.elemType2(),300 .ty = ty.elemType2(),
293 .val = val.castTag(.repeated).?.data,301 .val = val.castTag(.repeated).?.data,
294 };302 };
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) {
296 if (i != 0) try writer.writeAll(", ");306 if (i != 0) try writer.writeAll(", ");
297 try print(elem_tv, writer, level - 1, mod);307 try print(elem_tv, writer, level - 1, mod);
298 }308 }
309 if (len > max_aggregate_items) {
310 try writer.writeAll(", ...");
311 }
299 return writer.writeAll(" }");312 return writer.writeAll(" }");
300 },313 },
301 .empty_array_sentinel => {314 .empty_array_sentinel => {
...@@ -309,7 +322,27 @@ pub fn print(...@@ -309,7 +322,27 @@ pub fn print(
309 }, writer, level - 1, mod);322 }, writer, level - 1, mod);
310 return writer.writeAll(" }");323 return writer.writeAll(" }");
311 },324 },
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 },
313 .float_16 => return writer.print("{}", .{val.castTag(.float_16).?.data}),346 .float_16 => return writer.print("{}", .{val.castTag(.float_16).?.data}),
314 .float_32 => return writer.print("{}", .{val.castTag(.float_32).?.data}),347 .float_32 => return writer.print("{}", .{val.castTag(.float_32).?.data}),
315 .float_64 => return writer.print("{}", .{val.castTag(.float_64).?.data}),348 .float_64 => return writer.print("{}", .{val.castTag(.float_64).?.data}),