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(...@@ -483,13 +483,13 @@ pub fn formatType(
483 try format(writer, "@{x}", .{@ptrToInt(&value)});483 try format(writer, "@{x}", .{@ptrToInt(&value)});
484 }484 }
485 },485 },
486 .Struct => |StructT| {486 .Struct => |info| {
487 try writer.writeAll(@typeName(T));487 try writer.writeAll(@typeName(T));
488 if (max_depth == 0) {488 if (max_depth == 0) {
489 return writer.writeAll("{ ... }");489 return writer.writeAll("{ ... }");
490 }490 }
491 try writer.writeAll("{");491 try writer.writeAll("{");
492 inline for (StructT.fields) |f, i| {492 inline for (info.fields) |f, i| {
493 if (i == 0) {493 if (i == 0) {
494 try writer.writeAll(" .");494 try writer.writeAll(" .");
495 } else {495 } else {
...@@ -526,10 +526,14 @@ pub fn formatType(...@@ -526,10 +526,14 @@ pub fn formatType(
526 return format(writer, "{}@{x}", .{ @typeName(@typeInfo(T).Pointer.child), @ptrToInt(value) });526 return format(writer, "{}@{x}", .{ @typeName(@typeInfo(T).Pointer.child), @ptrToInt(value) });
527 },527 },
528 .Slice => {528 .Slice => {
529 if (max_depth == 0) {
530 return writer.writeAll("[ ... ]");
531 }
529 if (ptr_info.child == u8) {532 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 }
531 }536 }
532
533 try writer.writeAll("[");537 try writer.writeAll("[");
534 for (value) |elem, i| {538 for (value) |elem, i| {
535 try formatType(elem, fmt, options, writer, max_depth);539 try formatType(elem, fmt, options, writer, max_depth);
...@@ -541,26 +545,29 @@ pub fn formatType(...@@ -541,26 +545,29 @@ pub fn formatType(
541 },545 },
542 },546 },
543 .Array => |info| {547 .Array => |info| {
544 const Slice = @Type(builtin.TypeInfo{548 if (max_depth == 0) {
545 .Pointer = .{549 return writer.writeAll("{ ... }");
546 .size = .Slice,550 }
547 .is_const = true,551 if (info.child == u8) {
548 .is_volatile = false,552 if (fmt.len > 0 and comptime mem.indexOfScalar(u8, "sxXeEzZ", fmt[0]) != null) {
549 .is_allowzero = false,553 return formatText(&value, fmt, options, writer);
550 .alignment = @alignOf(info.child),554 }
551 .child = info.child,555 }
552 .sentinel = null,556 try writer.writeAll("{ ");
553 },557 for (value) |elem, i| {
554 });558 try formatType(elem, fmt, options, writer, max_depth - 1);
555 return formatType(@as(Slice, &value), fmt, options, writer, max_depth);559 if (i < value.len - 1) {
560 try writer.writeAll(", ");
561 }
562 }
563 try writer.writeAll(" }");
556 },564 },
557 .Vector => {565 .Vector => |info| {
558 const len = @typeInfo(T).Vector.len;
559 try writer.writeAll("{ ");566 try writer.writeAll("{ ");
560 var i: usize = 0;567 var i: usize = 0;
561 while (i < len) : (i += 1) {568 while (i < info.len) : (i += 1) {
562 try formatValue(value[i], fmt, options, writer);569 try formatValue(value[i], fmt, options, writer);
563 if (i < len - 1) {570 if (i < info.len - 1) {
564 try writer.writeAll(", ");571 try writer.writeAll(", ");
565 }572 }
566 }573 }
...@@ -1555,6 +1562,7 @@ test "array" {...@@ -1555,6 +1562,7 @@ test "array" {
1555 const value: [3]u8 = "abc".*;1562 const value: [3]u8 = "abc".*;
1556 try testFmt("array: abc\n", "array: {}\n", .{value});1563 try testFmt("array: abc\n", "array: {}\n", .{value});
1557 try testFmt("array: abc\n", "array: {}\n", .{&value});1564 try testFmt("array: abc\n", "array: {}\n", .{&value});
1565 try testFmt("array: { 97, 98, 99 }\n", "array: {d}\n", .{value});
15581566
1559 var buf: [100]u8 = undefined;1567 var buf: [100]u8 = undefined;
1560 try testFmt(1568 try testFmt(