mirror of
https://github.com/ziglang/zig.git
synced 2024-11-16 00:57:04 +00:00
std: add a special case for empty structs in meta.FieldEnum.
Empty structs would previously result in a compilation error.
This commit is contained in:
parent
f094c4bce5
commit
8d17e90fcd
@ -657,6 +657,20 @@ test "std.meta.tags" {
|
||||
pub fn FieldEnum(comptime T: type) type {
|
||||
const field_infos = fields(T);
|
||||
|
||||
if (field_infos.len == 0) {
|
||||
// TODO simplify when stage1 is removed
|
||||
if (@import("builtin").zig_backend == .stage1) @compileError("stage1 doesn't allow empty enums");
|
||||
return @Type(.{
|
||||
.Enum = .{
|
||||
.layout = .Auto,
|
||||
.tag_type = u0,
|
||||
.fields = &.{},
|
||||
.decls = &.{},
|
||||
.is_exhaustive = true,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (@typeInfo(T) == .Union) {
|
||||
if (@typeInfo(T).Union.tag_type) |tag_type| {
|
||||
for (std.enums.values(tag_type)) |v, i| {
|
||||
@ -728,6 +742,9 @@ fn expectEqualEnum(expected: anytype, actual: @TypeOf(expected)) !void {
|
||||
}
|
||||
|
||||
test "std.meta.FieldEnum" {
|
||||
if (comptime @import("builtin").zig_backend != .stage1) {
|
||||
try expectEqualEnum(enum {}, FieldEnum(struct {}));
|
||||
}
|
||||
try expectEqualEnum(enum { a }, FieldEnum(struct { a: u8 }));
|
||||
try expectEqualEnum(enum { a, b, c }, FieldEnum(struct { a: u8, b: void, c: f32 }));
|
||||
try expectEqualEnum(enum { a, b, c }, FieldEnum(union { a: u8, b: void, c: f32 }));
|
||||
|
Loading…
Reference in New Issue
Block a user