| ... | @@ -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}); |
| 1558 | | 1566 | |
| 1559 | var buf: [100]u8 = undefined; | 1567 | var buf: [100]u8 = undefined; |
| 1560 | try testFmt( | 1568 | try testFmt( |