| ... | ... | @@ -364,8 +364,14 @@ pub fn formatType( |
| 364 | 364 | if (enumInfo.is_exhaustive) { |
| 365 | 365 | has_name = true; |
| 366 | 366 | } else { |
| 367 | | // TODO: when @tagName works on exhaustive enums print known enum strings |
| 368 | 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 | } |
| 370 | 376 | |
| 371 | 377 | var use_name = has_name; |
| ... | ... | @@ -1335,8 +1341,8 @@ test "non-exhaustive enum" { |
| 1335 | 1341 | Two = 0xbeef, |
| 1336 | 1342 | _, |
| 1337 | 1343 | }; |
| 1338 | | try testFmt("enum: Enum(15)\n", "enum: {}\n", .{Enum.One}); |
| 1339 | | try testFmt("enum: Enum(48879)\n", "enum: {}\n", .{Enum.Two}); |
| 1344 | try testFmt("enum: Enum.One\n", "enum: {}\n", .{Enum.One}); |
| 1345 | try testFmt("enum: Enum.Two\n", "enum: {}\n", .{Enum.Two}); |
| 1340 | 1346 | try testFmt("enum: Enum(4660)\n", "enum: {}\n", .{@intToEnum(Enum, 0x1234)}); |
| 1341 | 1347 | try testFmt("enum: Enum(f)\n", "enum: {x}\n", .{Enum.One}); |
| 1342 | 1348 | try testFmt("enum: Enum(beef)\n", "enum: {x}\n", .{Enum.Two}); |