| ... | @@ -14,20 +14,19 @@ const eval_branch_quota_cushion = 5; | ... | @@ -14,20 +14,19 @@ const eval_branch_quota_cushion = 5; |
| 14 | /// default, which may be undefined. | 14 | /// default, which may be undefined. |
| 15 | pub fn EnumFieldStruct(comptime E: type, comptime Data: type, comptime field_default: ?Data) type { | 15 | pub fn EnumFieldStruct(comptime E: type, comptime Data: type, comptime field_default: ?Data) type { |
| 16 | @setEvalBranchQuota(@typeInfo(E).Enum.fields.len + eval_branch_quota_cushion); | 16 | @setEvalBranchQuota(@typeInfo(E).Enum.fields.len + eval_branch_quota_cushion); |
| 17 | const StructField = std.builtin.Type.StructField; | 17 | var struct_fields: [@typeInfo(E).Enum.fields.len]std.builtin.Type.StructField = undefined; |
| 18 | var fields: []const StructField = &[_]StructField{}; | 18 | for (&struct_fields, @typeInfo(E).Enum.fields) |*struct_field, enum_field| { |
| 19 | for (@typeInfo(E).Enum.fields) |field| { | 19 | struct_field.* = .{ |
| 20 | fields = fields ++ &[_]StructField{.{ | 20 | .name = enum_field.name ++ "", |
| 21 | .name = field.name ++ "", | | |
| 22 | .type = Data, | 21 | .type = Data, |
| 23 | .default_value = if (field_default) |d| @as(?*const anyopaque, @ptrCast(&d)) else null, | 22 | .default_value = if (field_default) |d| @as(?*const anyopaque, @ptrCast(&d)) else null, |
| 24 | .is_comptime = false, | 23 | .is_comptime = false, |
| 25 | .alignment = if (@sizeOf(Data) > 0) @alignOf(Data) else 0, | 24 | .alignment = if (@sizeOf(Data) > 0) @alignOf(Data) else 0, |
| 26 | }}; | 25 | }; |
| 27 | } | 26 | } |
| 28 | return @Type(.{ .Struct = .{ | 27 | return @Type(.{ .Struct = .{ |
| 29 | .layout = .auto, | 28 | .layout = .auto, |
| 30 | .fields = fields, | 29 | .fields = &struct_fields, |
| 31 | .decls = &.{}, | 30 | .decls = &.{}, |
| 32 | .is_tuple = false, | 31 | .is_tuple = false, |
| 33 | } }); | 32 | } }); |