authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-03-10 23:36:27+11:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-05-26 12:00:33-04:00
log292d515e9119e2d02afa2197a255e1ec865d034e
tree5c817f82372619fc868d13f17ad0e1d4726cd8ca
parentd10e407977f1ba165ca3d0a04d7b270096185559

std: allow specifiying enums to be formatted as numbers


1 files changed, 21 insertions(+), 1 deletions(-)

lib/std/fmt.zig+21-1
......@@ -359,11 +359,28 @@ pub fn formatType(
359359 },
360360 .Enum => |enumInfo| {
361361 try out_stream.writeAll(@typeName(T));
362
363 var has_name: bool = undefined;
362364 if (enumInfo.is_exhaustive) {
365 has_name = true;
366 } else {
367 // TODO: when @tagName works on exhaustive enums print known enum strings
368 has_name = false;
369 }
370
371 var use_name = has_name;
372 if (comptime std.mem.eql(u8, fmt, "x") or
373 comptime std.mem.eql(u8, fmt, "X") or
374 comptime std.mem.eql(u8, fmt, "d") or
375 comptime std.mem.eql(u8, fmt, "b"))
376 {
377 use_name = false;
378 }
379
380 if (use_name) {
363381 try out_stream.writeAll(".");
364382 try out_stream.writeAll(@tagName(value));
365383 } else {
366 // TODO: when @tagName works on exhaustive enums print known enum strings
367384 try out_stream.writeAll("(");
368385 try formatType(@enumToInt(value), fmt, options, out_stream, max_depth);
369386 try out_stream.writeAll(")");
......@@ -1308,6 +1325,8 @@ test "enum" {
13081325 const value = Enum.Two;
13091326 try testFmt("enum: Enum.Two\n", "enum: {}\n", .{value});
13101327 try testFmt("enum: Enum.Two\n", "enum: {}\n", .{&value});
1328 try testFmt("enum: Enum(0)\n", "enum: {x}\n", .{Enum.One});
1329 try testFmt("enum: Enum(1)\n", "enum: {X}\n", .{Enum.Two});
13111330}
13121331
13131332test "non-exhaustive enum" {
......@@ -1321,6 +1340,7 @@ test "non-exhaustive enum" {
13211340 try testFmt("enum: Enum(4660)\n", "enum: {}\n", .{@intToEnum(Enum, 0x1234)});
13221341 try testFmt("enum: Enum(f)\n", "enum: {x}\n", .{Enum.One});
13231342 try testFmt("enum: Enum(beef)\n", "enum: {x}\n", .{Enum.Two});
1343 try testFmt("enum: Enum(BEEF)\n", "enum: {X}\n", .{Enum.Two});
13241344 try testFmt("enum: Enum(1234)\n", "enum: {x}\n", .{@intToEnum(Enum, 0x1234)});
13251345}
13261346