mirror of
https://github.com/ziglang/zig.git
synced 2025-12-16 03:03:09 +00:00
Avoid comptime concatenation in EnumFieldStruct
This commit is contained in:
parent
44cd59a3ba
commit
5be7e2c217
@ -14,20 +14,19 @@ const eval_branch_quota_cushion = 5;
|
|||||||
/// default, which may be undefined.
|
/// default, which may be undefined.
|
||||||
pub fn EnumFieldStruct(comptime E: type, comptime Data: type, comptime field_default: ?Data) type {
|
pub fn EnumFieldStruct(comptime E: type, comptime Data: type, comptime field_default: ?Data) type {
|
||||||
@setEvalBranchQuota(@typeInfo(E).Enum.fields.len + eval_branch_quota_cushion);
|
@setEvalBranchQuota(@typeInfo(E).Enum.fields.len + eval_branch_quota_cushion);
|
||||||
const StructField = std.builtin.Type.StructField;
|
var struct_fields: [@typeInfo(E).Enum.fields.len]std.builtin.Type.StructField = undefined;
|
||||||
var fields: []const StructField = &[_]StructField{};
|
for (&struct_fields, @typeInfo(E).Enum.fields) |*struct_field, enum_field| {
|
||||||
for (@typeInfo(E).Enum.fields) |field| {
|
struct_field.* = .{
|
||||||
fields = fields ++ &[_]StructField{.{
|
.name = enum_field.name ++ "",
|
||||||
.name = field.name ++ "",
|
|
||||||
.type = Data,
|
.type = Data,
|
||||||
.default_value = if (field_default) |d| @as(?*const anyopaque, @ptrCast(&d)) else null,
|
.default_value = if (field_default) |d| @as(?*const anyopaque, @ptrCast(&d)) else null,
|
||||||
.is_comptime = false,
|
.is_comptime = false,
|
||||||
.alignment = if (@sizeOf(Data) > 0) @alignOf(Data) else 0,
|
.alignment = if (@sizeOf(Data) > 0) @alignOf(Data) else 0,
|
||||||
}};
|
};
|
||||||
}
|
}
|
||||||
return @Type(.{ .Struct = .{
|
return @Type(.{ .Struct = .{
|
||||||
.layout = .auto,
|
.layout = .auto,
|
||||||
.fields = fields,
|
.fields = &struct_fields,
|
||||||
.decls = &.{},
|
.decls = &.{},
|
||||||
.is_tuple = false,
|
.is_tuple = false,
|
||||||
} });
|
} });
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user