authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-03-10 23:36:48+11:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-05-26 12:00:33-04:00
log5cdeac3b0eaf61bc07e45012d9c335a74f437276
treec6dfb8227339d0d640b8459be0e8622fed5fe045
parent292d515e9119e2d02afa2197a255e1ec865d034e

std: in fmt, use tag names of non-exhaustive enums when available


1 files changed, 9 insertions(+), 3 deletions(-)

lib/std/fmt.zig+9-3
...@@ -364,8 +364,14 @@ pub fn formatType(...@@ -364,8 +364,14 @@ pub fn formatType(
364 if (enumInfo.is_exhaustive) {364 if (enumInfo.is_exhaustive) {
365 has_name = true;365 has_name = true;
366 } else {366 } else {
367 // TODO: when @tagName works on exhaustive enums print known enum strings
368 has_name = false;367 has_name = false;
368 // Use @tagName only if value is one of known fields
369 inline for (enumInfo.fields) |enumField| {
370 if (@enumToInt(value) == enumField.value) {
371 has_name = true;
372 break;
373 }
374 }
369 }375 }
370376
371 var use_name = has_name;377 var use_name = has_name;
...@@ -1335,8 +1341,8 @@ test "non-exhaustive enum" {...@@ -1335,8 +1341,8 @@ test "non-exhaustive enum" {
1335 Two = 0xbeef,1341 Two = 0xbeef,
1336 _,1342 _,
1337 };1343 };
1338 try testFmt("enum: Enum(15)\n", "enum: {}\n", .{Enum.One});1344 try testFmt("enum: Enum.One\n", "enum: {}\n", .{Enum.One});
1339 try testFmt("enum: Enum(48879)\n", "enum: {}\n", .{Enum.Two});1345 try testFmt("enum: Enum.Two\n", "enum: {}\n", .{Enum.Two});
1340 try testFmt("enum: Enum(4660)\n", "enum: {}\n", .{@intToEnum(Enum, 0x1234)});1346 try testFmt("enum: Enum(4660)\n", "enum: {}\n", .{@intToEnum(Enum, 0x1234)});
1341 try testFmt("enum: Enum(f)\n", "enum: {x}\n", .{Enum.One});1347 try testFmt("enum: Enum(f)\n", "enum: {x}\n", .{Enum.One});
1342 try testFmt("enum: Enum(beef)\n", "enum: {x}\n", .{Enum.Two});1348 try testFmt("enum: Enum(beef)\n", "enum: {x}\n", .{Enum.Two});