| ... | ... | @@ -483,13 +483,13 @@ pub fn formatType( |
| 483 | 483 | try format(writer, "@{x}", .{@ptrToInt(&value)}); |
| 484 | 484 | } |
| 485 | 485 | }, |
| 486 | | .Struct => |StructT| { |
| 486 | .Struct => |info| { |
| 487 | 487 | try writer.writeAll(@typeName(T)); |
| 488 | 488 | if (max_depth == 0) { |
| 489 | 489 | return writer.writeAll("{ ... }"); |
| 490 | 490 | } |
| 491 | 491 | try writer.writeAll("{"); |
| 492 | | inline for (StructT.fields) |f, i| { |
| 492 | inline for (info.fields) |f, i| { |
| 493 | 493 | if (i == 0) { |
| 494 | 494 | try writer.writeAll(" ."); |
| 495 | 495 | } else { |
| ... | ... | @@ -526,10 +526,14 @@ pub fn formatType( |
| 526 | 526 | return format(writer, "{}@{x}", .{ @typeName(@typeInfo(T).Pointer.child), @ptrToInt(value) }); |
| 527 | 527 | }, |
| 528 | 528 | .Slice => { |
| 529 | if (max_depth == 0) { |
| 530 | return writer.writeAll("[ ... ]"); |
| 531 | } |
| 529 | 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 | 537 | try writer.writeAll("["); |
| 534 | 538 | for (value) |elem, i| { |
| 535 | 539 | try formatType(elem, fmt, options, writer, max_depth); |
| ... | ... | @@ -541,26 +545,29 @@ pub fn formatType( |
| 541 | 545 | }, |
| 542 | 546 | }, |
| 543 | 547 | .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(" }"); |
| 556 | 564 | }, |
| 557 | | .Vector => { |
| 558 | | const len = @typeInfo(T).Vector.len; |
| 565 | .Vector => |info| { |
| 559 | 566 | try writer.writeAll("{ "); |
| 560 | 567 | var i: usize = 0; |
| 561 | | while (i < len) : (i += 1) { |
| 568 | while (i < info.len) : (i += 1) { |
| 562 | 569 | try formatValue(value[i], fmt, options, writer); |
| 563 | | if (i < len - 1) { |
| 570 | if (i < info.len - 1) { |
| 564 | 571 | try writer.writeAll(", "); |
| 565 | 572 | } |
| 566 | 573 | } |
| ... | ... | @@ -1555,6 +1562,7 @@ test "array" { |
| 1555 | 1562 | const value: [3]u8 = "abc".*; |
| 1556 | 1563 | try testFmt("array: abc\n", "array: {}\n", .{value}); |
| 1557 | 1564 | try testFmt("array: abc\n", "array: {}\n", .{&value}); |
| 1565 | try testFmt("array: { 97, 98, 99 }\n", "array: {d}\n", .{value}); |
| 1558 | 1566 | |
| 1559 | 1567 | var buf: [100]u8 = undefined; |
| 1560 | 1568 | try testFmt( |