From 7e5e767ba0fdde91dd66690168eff96b75c28e33 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Wed, 15 Jan 2020 23:08:02 +0100 Subject: [PATCH] Fix regression in char printing Closes #4014 --- lib/std/fmt.zig | 4 +--- src-self-hosted/translate_c.zig | 9 ++++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/std/fmt.zig b/lib/std/fmt.zig index 57fb3a407410..548ef8ccce4e 100644 --- a/lib/std/fmt.zig +++ b/lib/std/fmt.zig @@ -585,9 +585,7 @@ pub fn formatAsciiChar( comptime Errors: type, output: fn (@TypeOf(context), []const u8) Errors!void, ) Errors!void { - if (std.ascii.isPrint(c)) - return output(context, @as(*const [1]u8, &c)[0..]); - return format(context, Errors, output, "\\x{x:0<2}", .{c}); + return output(context, @as(*const [1]u8, &c)[0..]); } pub fn formatBuf( diff --git a/src-self-hosted/translate_c.zig b/src-self-hosted/translate_c.zig index a876b20b68ed..b45d0f61f009 100644 --- a/src-self-hosted/translate_c.zig +++ b/src-self-hosted/translate_c.zig @@ -1708,7 +1708,14 @@ fn escapeChar(c: u8, char_buf: *[4]u8) []const u8 { '\n' => "\\n"[0..], '\r' => "\\r"[0..], '\t' => "\\t"[0..], - else => std.fmt.bufPrint(char_buf[0..], "{c}", .{c}) catch unreachable, + else => { + // Handle the remaining escapes Zig doesn't support by turning them + // into their respective hex representation + if (std.ascii.isCntrl(c)) + return std.fmt.bufPrint(char_buf[0..], "\\x{x:0<2}", .{c}) catch unreachable + else + return std.fmt.bufPrint(char_buf[0..], "{c}", .{c}) catch unreachable; + }, }; }