When trying to Reify a std.builtin.Strcut I get a weird behaviour:
pub const EnumFlags = enum(c_int) {
FLAG_FULLSCREEN_MODE = 2,
FLAG_WINDOW_RESIZABLE = 4,
FLAG_WINDOW_UNDECORATED = 8,
FLAG_WINDOW_TRANSPARENT = 16,
};
test "test enum to packed struct" {
const bt = std.builtin;
comptime var en: bt.Type.Enum = @typeInfo(EnumFlags).Enum;
const fields: []const bt.Type.StructField = comptime blk: {
var strcut_fields: [en.fields.len]bt.Type.StructField = undefined;
for (en.fields) |field, i| {
const sf = bt.Type.StructField{
.name = field.name,
.field_type = bool,
.default_value = null,
.is_comptime = true,
.alignment = 0,
};
strcut_fields[i] = sf;
}
break :blk &strcut_fields;
};
const T: type = @Type(bt.Type {
.Struct = bt.Type.Struct {
.layout = bt.Type.ContainerLayout.Packed,
.backing_integer = UIntOf(en.fields.len),
.fields = fields,
.decls = &.{},
.is_tuple = false,
}
});
std.debug.print("\n", .{});
std.debug.print("T is: '{}'\n", .{T});
var t: T = T {
.FLAG_FULLSCREEN_MODE = false,
.FLAG_WINDOW_RESIZABLE = false,
.FLAG_WINDOW_UNDECORATED = false,
.FLAG_WINDOW_TRANSPARENT = false,
};
std.debug.print("t = {}\n", .{t});
}
It seems like the Interperter just quits and never try to compile. (seems like it is failing on something)
What am I doing wrong here?
I what a struct that would have fields with names that reflects the enum fields...