| ... | @@ -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 | } |
| 370 | | 376 | |
| 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}); |