authorgravatar for carl@astholm.seCarl Åstholm <carl@astholm.se> 2024-03-12 00:53:40+01:00
committergravatar for carl@astholm.seCarl Åstholm <carl@astholm.se> 2024-03-12 00:53:40+01:00
log5be7e2c217eb1d0ab660d529979c59e781586454
tree58463057b363ad2be1d26c6f4e2f52d8c148953e
parent44cd59a3ba445f1ecf1c608302f375aede6e62dc

Avoid comptime concatenation in `EnumFieldStruct`


1 files changed, 6 insertions(+), 7 deletions(-)

lib/std/enums.zig+6-7
......@@ -14,20 +14,19 @@ const eval_branch_quota_cushion = 5;
1414/// default, which may be undefined.
1515pub fn EnumFieldStruct(comptime E: type, comptime Data: type, comptime field_default: ?Data) type {
1616 @setEvalBranchQuota(@typeInfo(E).Enum.fields.len + eval_branch_quota_cushion);
17 const StructField = std.builtin.Type.StructField;
18 var fields: []const StructField = &[_]StructField{};
19 for (@typeInfo(E).Enum.fields) |field| {
20 fields = fields ++ &[_]StructField{.{
21 .name = field.name ++ "",
17 var struct_fields: [@typeInfo(E).Enum.fields.len]std.builtin.Type.StructField = undefined;
18 for (&struct_fields, @typeInfo(E).Enum.fields) |*struct_field, enum_field| {
19 struct_field.* = .{
20 .name = enum_field.name ++ "",
2221 .type = Data,
2322 .default_value = if (field_default) |d| @as(?*const anyopaque, @ptrCast(&d)) else null,
2423 .is_comptime = false,
2524 .alignment = if (@sizeOf(Data) > 0) @alignOf(Data) else 0,
26 }};
25 };
2726 }
2827 return @Type(.{ .Struct = .{
2928 .layout = .auto,
30 .fields = fields,
29 .fields = &struct_fields,
3130 .decls = &.{},
3231 .is_tuple = false,
3332 } });