Commit 7e5e767ba0

LemonBoy <thatlemon@gmail.com>
2020-01-15 23:08:02
Fix regression in char printing
Closes #4014
1 parent 0267afa
Changed files (2)
lib
src-self-hosted
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(
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;
+        },
     };
 }