| ... | ... | @@ -161,6 +161,14 @@ pub fn formatType( |
| 161 | 161 | else => return format(context, Errors, output, "{}@{x}", @typeName(T.Child), @ptrToInt(value)), |
| 162 | 162 | }, |
| 163 | 163 | builtin.TypeInfo.Pointer.Size.Many => { |
| 164 | if (ptr_info.child == u8) { |
| 165 | //This is a bit of a hack, but it made more sense to |
| 166 | // do this check here than have formatText do it |
| 167 | if (fmt[0] == 's') { |
| 168 | const len = std.cstr.len(value); |
| 169 | return formatText(value[0..len], fmt, context, Errors, output); |
| 170 | } |
| 171 | } |
| 164 | 172 | return format(context, Errors, output, "{}@{x}", @typeName(T.Child), @ptrToInt(value)); |
| 165 | 173 | }, |
| 166 | 174 | builtin.TypeInfo.Pointer.Size.Slice => { |
| ... | ... | @@ -300,7 +308,7 @@ pub fn formatBuf( |
| 300 | 308 | var leftover_padding = if (width > buf.len) (width - buf.len) else return; |
| 301 | 309 | const pad_byte: u8 = ' '; |
| 302 | 310 | while (leftover_padding > 0) : (leftover_padding -= 1) { |
| 303 | | try output(context, (&pad_byte)[0..1]); |
| 311 | try output(context, (*[1]u8)(&pad_byte)[0..1]); |
| 304 | 312 | } |
| 305 | 313 | } |
| 306 | 314 | |
| ... | ... | @@ -841,6 +849,10 @@ test "fmt.format" { |
| 841 | 849 | const value: u8 = 'a'; |
| 842 | 850 | try testFmt("u8: a\n", "u8: {c}\n", value); |
| 843 | 851 | } |
| 852 | try testFmt("buf: Test \n", "buf: {s5}\n", "Test"); |
| 853 | try testFmt("buf: Test\n Other text", "buf: {s}\n Other text", "Test"); |
| 854 | try testFmt("cstr: Test C\n", "cstr: {s}\n", c"Test C"); |
| 855 | try testFmt("cstr: Test C \n", "cstr: {s10}\n", c"Test C"); |
| 844 | 856 | try testFmt("file size: 63MiB\n", "file size: {Bi}\n", usize(63 * 1024 * 1024)); |
| 845 | 857 | try testFmt("file size: 66.06MB\n", "file size: {B2}\n", usize(63 * 1024 * 1024)); |
| 846 | 858 | { |