authorgravatar for datamanrb@gmail.comdata-man <datamanrb@gmail.com> 2020-10-31 15:12:05+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-01-02 17:12:57-07:00
log2b5e93fd3ea7ced934c7310ce68177738b1cdb81
treec4641d356e9d65a255c7d25ca146ce3722f89425
parent6f53653db17933fe2c8502d5bfc60857097b8bff

Add formatting for arrays


1 files changed, 28 insertions(+), 20 deletions(-)

lib/std/fmt.zig+28-20
......@@ -483,13 +483,13 @@ pub fn formatType(
483483 try format(writer, "@{x}", .{@ptrToInt(&value)});
484484 }
485485 },
486 .Struct => |StructT| {
486 .Struct => |info| {
487487 try writer.writeAll(@typeName(T));
488488 if (max_depth == 0) {
489489 return writer.writeAll("{ ... }");
490490 }
491491 try writer.writeAll("{");
492 inline for (StructT.fields) |f, i| {
492 inline for (info.fields) |f, i| {
493493 if (i == 0) {
494494 try writer.writeAll(" .");
495495 } else {
......@@ -526,10 +526,14 @@ pub fn formatType(
526526 return format(writer, "{}@{x}", .{ @typeName(@typeInfo(T).Pointer.child), @ptrToInt(value) });
527527 },
528528 .Slice => {
529 if (max_depth == 0) {
530 return writer.writeAll("[ ... ]");
531 }
529532 if (ptr_info.child == u8) {
530 return formatText(value, fmt, options, writer);
533 if (fmt.len == 0 or fmt[0] == 's' or fmt[0] == 'x' or fmt[0] == 'X') {
534 return formatText(value, fmt, options, writer);
535 }
531536 }
532
533537 try writer.writeAll("[");
534538 for (value) |elem, i| {
535539 try formatType(elem, fmt, options, writer, max_depth);
......@@ -541,26 +545,29 @@ pub fn formatType(
541545 },
542546 },
543547 .Array => |info| {
544 const Slice = @Type(builtin.TypeInfo{
545 .Pointer = .{
546 .size = .Slice,
547 .is_const = true,
548 .is_volatile = false,
549 .is_allowzero = false,
550 .alignment = @alignOf(info.child),
551 .child = info.child,
552 .sentinel = null,
553 },
554 });
555 return formatType(@as(Slice, &value), fmt, options, writer, max_depth);
548 if (max_depth == 0) {
549 return writer.writeAll("{ ... }");
550 }
551 if (info.child == u8) {
552 if (fmt.len > 0 and comptime mem.indexOfScalar(u8, "sxXeEzZ", fmt[0]) != null) {
553 return formatText(&value, fmt, options, writer);
554 }
555 }
556 try writer.writeAll("{ ");
557 for (value) |elem, i| {
558 try formatType(elem, fmt, options, writer, max_depth - 1);
559 if (i < value.len - 1) {
560 try writer.writeAll(", ");
561 }
562 }
563 try writer.writeAll(" }");
556564 },
557 .Vector => {
558 const len = @typeInfo(T).Vector.len;
565 .Vector => |info| {
559566 try writer.writeAll("{ ");
560567 var i: usize = 0;
561 while (i < len) : (i += 1) {
568 while (i < info.len) : (i += 1) {
562569 try formatValue(value[i], fmt, options, writer);
563 if (i < len - 1) {
570 if (i < info.len - 1) {
564571 try writer.writeAll(", ");
565572 }
566573 }
......@@ -1555,6 +1562,7 @@ test "array" {
15551562 const value: [3]u8 = "abc".*;
15561563 try testFmt("array: abc\n", "array: {}\n", .{value});
15571564 try testFmt("array: abc\n", "array: {}\n", .{&value});
1565 try testFmt("array: { 97, 98, 99 }\n", "array: {d}\n", .{value});
15581566
15591567 var buf: [100]u8 = undefined;
15601568 try testFmt(