| ... | ... | @@ -14,20 +14,19 @@ const eval_branch_quota_cushion = 5; |
| 14 | 14 | /// default, which may be undefined. |
| 15 | 15 | pub fn EnumFieldStruct(comptime E: type, comptime Data: type, comptime field_default: ?Data) type { |
| 16 | 16 | @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 ++ "", |
| 22 | 21 | .type = Data, |
| 23 | 22 | .default_value = if (field_default) |d| @as(?*const anyopaque, @ptrCast(&d)) else null, |
| 24 | 23 | .is_comptime = false, |
| 25 | 24 | .alignment = if (@sizeOf(Data) > 0) @alignOf(Data) else 0, |
| 26 | | }}; |
| 25 | }; |
| 27 | 26 | } |
| 28 | 27 | return @Type(.{ .Struct = .{ |
| 29 | 28 | .layout = .auto, |
| 30 | | .fields = fields, |
| 29 | .fields = &struct_fields, |
| 31 | 30 | .decls = &.{}, |
| 32 | 31 | .is_tuple = false, |
| 33 | 32 | } }); |