| ... | ... | @@ -306,12 +306,12 @@ pub const Tokenizer = struct { |
| 306 | 306 | |
| 307 | 307 | fn errorPosition(self: *Tokenizer, position: usize, bytes: []const u8, comptime fmt: []const u8, args: var) Error { |
| 308 | 308 | var buffer = try std.Buffer.initSize(&self.arena.allocator, 0); |
| 309 | | std.fmt.format(&buffer, anyerror, std.Buffer.append, fmt, args) catch {}; |
| 309 | try buffer.print(fmt, args); |
| 310 | 310 | try buffer.append(" '"); |
| 311 | 311 | var out = makeOutput(std.Buffer.append, &buffer); |
| 312 | 312 | try printCharValues(&out, bytes); |
| 313 | 313 | try buffer.append("'"); |
| 314 | | std.fmt.format(&buffer, anyerror, std.Buffer.append, " at position {}", .{position - (bytes.len - 1)}) catch {}; |
| 314 | try buffer.print(" at position {}", .{position - (bytes.len - 1)}); |
| 315 | 315 | self.error_text = buffer.toSlice(); |
| 316 | 316 | return Error.InvalidInput; |
| 317 | 317 | } |
| ... | ... | @@ -319,10 +319,9 @@ pub const Tokenizer = struct { |
| 319 | 319 | fn errorIllegalChar(self: *Tokenizer, position: usize, char: u8, comptime fmt: []const u8, args: var) Error { |
| 320 | 320 | var buffer = try std.Buffer.initSize(&self.arena.allocator, 0); |
| 321 | 321 | try buffer.append("illegal char "); |
| 322 | | var out = makeOutput(std.Buffer.append, &buffer); |
| 323 | | try printUnderstandableChar(&out, char); |
| 324 | | std.fmt.format(&buffer, anyerror, std.Buffer.append, " at position {}", .{position}) catch {}; |
| 325 | | if (fmt.len != 0) std.fmt.format(&buffer, anyerror, std.Buffer.append, ": " ++ fmt, args) catch {}; |
| 322 | try printUnderstandableChar(&buffer, char); |
| 323 | try buffer.print(" at position {}", .{position}); |
| 324 | if (fmt.len != 0) try buffer.print(": " ++ fmt, args); |
| 326 | 325 | self.error_text = buffer.toSlice(); |
| 327 | 326 | return Error.InvalidInput; |
| 328 | 327 | } |
| ... | ... | @@ -980,13 +979,13 @@ fn hexDump16(out: var, offset: usize, bytes: []const u8) !void { |
| 980 | 979 | |
| 981 | 980 | fn printDecValue(out: var, value: u64, width: u8) !void { |
| 982 | 981 | var buffer: [20]u8 = undefined; |
| 983 | | const len = std.fmt.formatIntBuf(buffer[0..], value, 10, false, width); |
| 982 | const len = std.fmtstream.formatIntBuf(buffer[0..], value, 10, false, width); |
| 984 | 983 | try out.write(buffer[0..len]); |
| 985 | 984 | } |
| 986 | 985 | |
| 987 | 986 | fn printHexValue(out: var, value: u64, width: u8) !void { |
| 988 | 987 | var buffer: [16]u8 = undefined; |
| 989 | | const len = std.fmt.formatIntBuf(buffer[0..], value, 16, false, width); |
| 988 | const len = std.fmtstream.formatIntBuf(buffer[0..], value, 16, false, width); |
| 990 | 989 | try out.write(buffer[0..len]); |
| 991 | 990 | } |
| 992 | 991 | |
| ... | ... | @@ -996,14 +995,13 @@ fn printCharValues(out: var, bytes: []const u8) !void { |
| 996 | 995 | } |
| 997 | 996 | } |
| 998 | 997 | |
| 999 | | fn printUnderstandableChar(out: var, char: u8) !void { |
| 998 | fn printUnderstandableChar(buffer: *std.Buffer, char: u8) !void { |
| 1000 | 999 | if (!std.ascii.isPrint(char) or char == ' ') { |
| 1001 | | const output = @typeInfo(@TypeOf(out)).Pointer.child.output; |
| 1002 | | std.fmt.format(out.context, anyerror, output, "\\x{X:2}", .{char}) catch {}; |
| 1000 | try buffer.print("\\x{X:2}", .{char}); |
| 1003 | 1001 | } else { |
| 1004 | | try out.write("'"); |
| 1005 | | try out.write(&[_]u8{printable_char_tab[char]}); |
| 1006 | | try out.write("'"); |
| 1002 | try buffer.append("'"); |
| 1003 | try buffer.appendByte(printable_char_tab[char]); |
| 1004 | try buffer.append("'"); |
| 1007 | 1005 | } |
| 1008 | 1006 | } |
| 1009 | 1007 | |