@zigc/lib 0.17.0-dev.644 → 0.17.0-dev.657
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compiler/Maker/ScannedConfig.zig +4 -3
- package/compiler/Maker/Step/FindProgram.zig +2 -2
- package/compiler/Maker/Watch/FsEvents.zig +3 -2
- package/compiler/aro/aro/Attribute.zig +52 -51
- package/compiler/aro/aro/Compilation.zig +5 -5
- package/compiler/aro/aro/Diagnostics.zig +7 -7
- package/compiler/aro/aro/Parser.zig +2 -2
- package/compiler/aro/aro/Tree.zig +11 -11
- package/compiler/aro/aro/features.zig +4 -4
- package/compiler/aro/aro/text_literal.zig +2 -2
- package/compiler/aro/backend/Interner.zig +14 -13
- package/compiler/configurer.zig +2 -2
- package/compiler/resinator/bmp.zig +3 -2
- package/compiler/resinator/code_pages.zig +14 -12
- package/compiler/resinator/cvtres.zig +11 -10
- package/compiler/resinator/errors.zig +18 -22
- package/compiler/resinator/lang.zig +7 -7
- package/compiler/resinator/parse.zig +1 -1
- package/compiler/translate-c/ast.zig +6 -6
- package/docs/wasm/markdown/Document.zig +3 -3
- package/docs/wasm/markdown/Parser.zig +3 -3
- package/package.json +1 -1
- package/std/Build/Cache.zig +2 -2
- package/std/Build/Configuration.zig +19 -16
- package/std/Build/Step/ConfigHeader.zig +3 -2
- package/std/Build/Step/Options.zig +28 -22
- package/std/Build.zig +52 -53
- package/std/Io/Kqueue.zig +2 -2
- package/std/Io/Reader.zig +1 -1
- package/std/Io/Threaded.zig +18 -15
- package/std/Io/Uring.zig +2 -2
- package/std/Io/Writer.zig +18 -18
- package/std/Io/net.zig +3 -1
- package/std/Io.zig +7 -6
- package/std/Progress.zig +2 -2
- package/std/Target/aarch64.zig +2 -2
- package/std/Target/alpha.zig +2 -2
- package/std/Target/amdgcn.zig +2 -2
- package/std/Target/arc.zig +2 -2
- package/std/Target/arm.zig +2 -2
- package/std/Target/avr.zig +2 -2
- package/std/Target/bpf.zig +2 -2
- package/std/Target/csky.zig +2 -2
- package/std/Target/hexagon.zig +2 -2
- package/std/Target/hppa.zig +2 -2
- package/std/Target/kvx.zig +2 -2
- package/std/Target/lanai.zig +2 -2
- package/std/Target/loongarch.zig +2 -2
- package/std/Target/m68k.zig +2 -2
- package/std/Target/mips.zig +2 -2
- package/std/Target/msp430.zig +2 -2
- package/std/Target/nvptx.zig +2 -2
- package/std/Target/powerpc.zig +2 -2
- package/std/Target/propeller.zig +2 -2
- package/std/Target/riscv.zig +2 -2
- package/std/Target/s390x.zig +2 -2
- package/std/Target/sparc.zig +2 -2
- package/std/Target/spirv.zig +2 -2
- package/std/Target/ve.zig +2 -2
- package/std/Target/wasm.zig +2 -2
- package/std/Target/x86.zig +2 -2
- package/std/Target/xcore.zig +2 -2
- package/std/Target/xtensa.zig +2 -2
- package/std/Target.zig +4 -4
- package/std/c/darwin.zig +1 -1
- package/std/coff.zig +1 -1
- package/std/crypto/codecs/asn1/Oid.zig +8 -8
- package/std/crypto/codecs/asn1/der/Decoder.zig +7 -7
- package/std/crypto/codecs/asn1/der/Encoder.zig +10 -8
- package/std/crypto/phc_encoding.zig +23 -20
- package/std/crypto/timing_safe.zig +1 -1
- package/std/crypto/tls/Client.zig +3 -3
- package/std/crypto/tls.zig +1 -1
- package/std/debug/Dwarf/Unwind/VirtualMachine.zig +11 -5
- package/std/debug/ElfFile.zig +12 -8
- package/std/debug/MachOFile.zig +2 -2
- package/std/debug/SelfInfo/MachO.zig +2 -2
- package/std/debug/SelfInfo/Windows.zig +2 -2
- package/std/elf.zig +7 -7
- package/std/enums.zig +66 -67
- package/std/gpu.zig +1 -1
- package/std/hash/auto_hash.zig +8 -8
- package/std/hash/verify.zig +3 -3
- package/std/http/Client.zig +2 -2
- package/std/json/Stringify.zig +14 -14
- package/std/json/static.zig +47 -31
- package/std/lang.zig +65 -97
- package/std/math.zig +2 -2
- package/std/mem/Allocator.zig +9 -9
- package/std/mem.zig +86 -102
- package/std/meta/trailer_flags.zig +26 -19
- package/std/meta.zig +131 -171
- package/std/multi_array_list.zig +49 -57
- package/std/os/uefi/protocol/device_path.zig +8 -7
- package/std/os/uefi/tables/boot_services.zig +1 -1
- package/std/os/windows.zig +9 -15
- package/std/start.zig +6 -6
- package/std/testing/Smith.zig +35 -21
- package/std/testing.zig +15 -15
- package/std/zig/Ast.zig +4 -4
- package/std/zig/AstGen.zig +42 -42
- package/std/zig/ErrorBundle.zig +16 -13
- package/std/zig/LibCInstallation.zig +11 -11
- package/std/zig/Parse.zig +6 -6
- package/std/zig/Zir.zig +10 -10
- package/std/zig/c_translation/helpers.zig +2 -2
- package/std/zig/llvm/BitcodeReader.zig +3 -3
- package/std/zig/llvm/Builder.zig +124 -93
- package/std/zig/llvm/bitcode_writer.zig +4 -4
- package/std/zig/system/windows.zig +11 -11
- package/std/zig/system.zig +4 -4
- package/std/zig.zig +4 -4
- package/std/zon/Serializer.zig +28 -23
- package/std/zon/parse.zig +58 -61
|
@@ -145,8 +145,8 @@ pub const ErrorDetails = struct {
|
|
|
145
145
|
|
|
146
146
|
comptime {
|
|
147
147
|
// all fields in the extra union should be 32 bits or less
|
|
148
|
-
for (std.meta.
|
|
149
|
-
std.debug.assert(@bitSizeOf(
|
|
148
|
+
for (std.meta.fieldTypes(Extra)) |field_type| {
|
|
149
|
+
std.debug.assert(@bitSizeOf(field_type) <= 32);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
|
|
@@ -257,18 +257,18 @@ pub const ErrorDetails = struct {
|
|
|
257
257
|
|
|
258
258
|
pub fn writeCommaSeparated(self: ExpectedTypes, writer: *std.Io.Writer) !void {
|
|
259
259
|
const struct_info = @typeInfo(ExpectedTypes).@"struct";
|
|
260
|
-
const num_real_fields = struct_info.
|
|
260
|
+
const num_real_fields = struct_info.field_names.len - 1;
|
|
261
261
|
const num_padding_bits = @bitSizeOf(ExpectedTypes) - num_real_fields;
|
|
262
262
|
const mask = std.math.maxInt(struct_info.backing_integer.?) >> num_padding_bits;
|
|
263
263
|
const relevant_bits_only = @as(struct_info.backing_integer.?, @bitCast(self)) & mask;
|
|
264
264
|
const num_set_bits = @popCount(relevant_bits_only);
|
|
265
265
|
|
|
266
266
|
var i: usize = 0;
|
|
267
|
-
inline for (struct_info.
|
|
268
|
-
if (
|
|
267
|
+
inline for (struct_info.field_names, struct_info.field_types) |field_name, field_type| {
|
|
268
|
+
if (field_type != bool) continue;
|
|
269
269
|
if (i == num_set_bits) return;
|
|
270
|
-
if (@field(self,
|
|
271
|
-
try writer.writeAll(strings.get(
|
|
270
|
+
if (@field(self, field_name)) {
|
|
271
|
+
try writer.writeAll(strings.get(field_name).?);
|
|
272
272
|
i += 1;
|
|
273
273
|
if (num_set_bits > 2 and i != num_set_bits) {
|
|
274
274
|
try writer.writeAll(", ");
|
|
@@ -857,24 +857,20 @@ pub const ErrorDetails = struct {
|
|
|
857
857
|
|
|
858
858
|
/// Convenience struct only useful when the code page can be inferred from the token
|
|
859
859
|
pub const ErrorDetailsWithoutCodePage = blk: {
|
|
860
|
-
const details_info = @typeInfo(ErrorDetails);
|
|
861
|
-
const
|
|
862
|
-
var field_names: [
|
|
863
|
-
var field_types: [
|
|
864
|
-
var field_attrs: [
|
|
860
|
+
const details_info = @typeInfo(ErrorDetails).@"struct";
|
|
861
|
+
const field_count = details_info.field_names.len;
|
|
862
|
+
var field_names: [field_count - 1][]const u8 = undefined;
|
|
863
|
+
var field_types: [field_count - 1]type = undefined;
|
|
864
|
+
var field_attrs: [field_count - 1]std.builtin.Type.Struct.FieldAttributes = undefined;
|
|
865
865
|
var i: usize = 0;
|
|
866
|
-
for (
|
|
867
|
-
if (std.mem.eql(u8,
|
|
868
|
-
field_names[i] =
|
|
869
|
-
field_types[i] =
|
|
870
|
-
field_attrs[i] =
|
|
871
|
-
.@"comptime" = field.is_comptime,
|
|
872
|
-
.@"align" = field.alignment,
|
|
873
|
-
.default_value_ptr = field.default_value_ptr,
|
|
874
|
-
};
|
|
866
|
+
for (details_info.field_names, details_info.field_types, details_info.field_attrs) |field_name, field_type, field_attr| {
|
|
867
|
+
if (std.mem.eql(u8, field_name, "code_page")) continue;
|
|
868
|
+
field_names[i] = field_name;
|
|
869
|
+
field_types[i] = field_type;
|
|
870
|
+
field_attrs[i] = field_attr;
|
|
875
871
|
i += 1;
|
|
876
872
|
}
|
|
877
|
-
std.debug.assert(i ==
|
|
873
|
+
std.debug.assert(i == field_count - 1);
|
|
878
874
|
break :blk @Struct(.auto, null, &field_names, &field_types, &field_attrs);
|
|
879
875
|
};
|
|
880
876
|
|
|
@@ -87,8 +87,8 @@ pub fn tagToId(tag: []const u8) error{InvalidLanguageTag}!?LanguageId {
|
|
|
87
87
|
if (parsed.multiple_suffixes) return null;
|
|
88
88
|
const longest_known_tag = comptime blk: {
|
|
89
89
|
var len = 0;
|
|
90
|
-
for (@typeInfo(LanguageId).@"enum".
|
|
91
|
-
if (
|
|
90
|
+
for (@typeInfo(LanguageId).@"enum".field_names) |field_name| {
|
|
91
|
+
if (field_name.len > len) len = field_name.len;
|
|
92
92
|
}
|
|
93
93
|
break :blk len;
|
|
94
94
|
};
|
|
@@ -120,13 +120,13 @@ test tagToId {
|
|
|
120
120
|
|
|
121
121
|
test "exhaustive tagToId" {
|
|
122
122
|
@setEvalBranchQuota(2000);
|
|
123
|
-
inline for (@typeInfo(LanguageId).@"enum".
|
|
124
|
-
const id = tagToId(
|
|
125
|
-
std.debug.print("tag: {s}\n", .{
|
|
123
|
+
inline for (@typeInfo(LanguageId).@"enum".field_names) |field_name| {
|
|
124
|
+
const id = tagToId(field_name) catch |err| {
|
|
125
|
+
std.debug.print("tag: {s}\n", .{field_name});
|
|
126
126
|
return err;
|
|
127
127
|
};
|
|
128
|
-
try std.testing.expectEqual(@field(LanguageId,
|
|
129
|
-
std.debug.print("tag: {s}, got null\n", .{
|
|
128
|
+
try std.testing.expectEqual(@field(LanguageId, field_name), id orelse {
|
|
129
|
+
std.debug.print("tag: {s}, got null\n", .{field_name});
|
|
130
130
|
return error.TestExpectedEqual;
|
|
131
131
|
});
|
|
132
132
|
}
|
|
@@ -137,7 +137,7 @@ pub const Parser = struct {
|
|
|
137
137
|
fn parseOptionalStatements(self: *Self, resource: ResourceType) ![]*Node {
|
|
138
138
|
var optional_statements: std.ArrayList(*Node) = .empty;
|
|
139
139
|
|
|
140
|
-
const num_statement_types = @typeInfo(rc.OptionalStatements).@"enum".
|
|
140
|
+
const num_statement_types = @typeInfo(rc.OptionalStatements).@"enum".field_names.len;
|
|
141
141
|
var statement_type_has_duplicates: [num_statement_types]bool = @splat(false);
|
|
142
142
|
var last_statement_per_type: [num_statement_types]?*Node = @splat(null);
|
|
143
143
|
|
|
@@ -925,18 +925,18 @@ const Context = struct {
|
|
|
925
925
|
}
|
|
926
926
|
|
|
927
927
|
fn addExtra(c: *Context, extra: anytype) Allocator.Error!std.zig.Ast.ExtraIndex {
|
|
928
|
-
const
|
|
929
|
-
try c.extra_data.ensureUnusedCapacity(c.gpa,
|
|
928
|
+
const info = @typeInfo(@TypeOf(extra)).@"struct";
|
|
929
|
+
try c.extra_data.ensureUnusedCapacity(c.gpa, info.field_names.len);
|
|
930
930
|
const result: std.zig.Ast.ExtraIndex = @enumFromInt(c.extra_data.items.len);
|
|
931
|
-
inline for (
|
|
932
|
-
const data: u32 = switch (
|
|
931
|
+
inline for (info.field_names, info.field_types) |field_name, field_type| {
|
|
932
|
+
const data: u32 = switch (field_type) {
|
|
933
933
|
NodeIndex,
|
|
934
934
|
std.zig.Ast.Node.OptionalIndex,
|
|
935
935
|
std.zig.Ast.OptionalTokenIndex,
|
|
936
936
|
std.zig.Ast.ExtraIndex,
|
|
937
|
-
=> @intFromEnum(@field(extra,
|
|
937
|
+
=> @intFromEnum(@field(extra, field_name)),
|
|
938
938
|
TokenIndex,
|
|
939
|
-
=> @field(extra,
|
|
939
|
+
=> @field(extra, field_name),
|
|
940
940
|
else => @compileError("unexpected field type"),
|
|
941
941
|
};
|
|
942
942
|
c.extra_data.appendAssumeCapacity(data);
|
|
@@ -170,11 +170,11 @@ pub fn ExtraData(comptime T: type) type {
|
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
pub fn extraData(doc: Document, comptime T: type, index: ExtraIndex) ExtraData(T) {
|
|
173
|
-
const
|
|
173
|
+
const info = @typeInfo(T).@"struct";
|
|
174
174
|
var i: usize = @intFromEnum(index);
|
|
175
175
|
var result: T = undefined;
|
|
176
|
-
inline for (
|
|
177
|
-
@field(result,
|
|
176
|
+
inline for (info.field_names, info.field_types) |field_name, field_type| {
|
|
177
|
+
@field(result, field_name) = switch (field_type) {
|
|
178
178
|
u32 => doc.extra[i],
|
|
179
179
|
else => @compileError("bad field type"),
|
|
180
180
|
};
|
|
@@ -1574,11 +1574,11 @@ fn parseInlines(p: *Parser, content: []const u8) !ExtraIndex {
|
|
|
1574
1574
|
}
|
|
1575
1575
|
|
|
1576
1576
|
pub fn extraData(p: Parser, comptime T: type, index: ExtraIndex) ExtraData(T) {
|
|
1577
|
-
const
|
|
1577
|
+
const info = @typeInfo(T).@"struct";
|
|
1578
1578
|
var i: usize = @intFromEnum(index);
|
|
1579
1579
|
var result: T = undefined;
|
|
1580
|
-
inline for (
|
|
1581
|
-
@field(result,
|
|
1580
|
+
inline for (info.field_names, info.field_types) |field_name, field_type| {
|
|
1581
|
+
@field(result, field_name) = switch (field_type) {
|
|
1582
1582
|
u32 => p.extra.items[i],
|
|
1583
1583
|
else => @compileError("bad field type"),
|
|
1584
1584
|
};
|
package/package.json
CHANGED
package/std/Build/Cache.zig
CHANGED
|
@@ -1241,7 +1241,7 @@ pub const Manifest = struct {
|
|
|
1241
1241
|
}
|
|
1242
1242
|
|
|
1243
1243
|
pub fn populateFileSystemInputs(man: *Manifest, buf: *std.ArrayList(u8)) Allocator.Error!void {
|
|
1244
|
-
assert(@typeInfo(std.zig.Server.Message.PathPrefix).@"enum".
|
|
1244
|
+
assert(@typeInfo(std.zig.Server.Message.PathPrefix).@"enum".field_names.len == man.cache.prefixes_len);
|
|
1245
1245
|
buf.clearRetainingCapacity();
|
|
1246
1246
|
const gpa = man.cache.gpa;
|
|
1247
1247
|
const files = man.files.keys();
|
|
@@ -1259,7 +1259,7 @@ pub const Manifest = struct {
|
|
|
1259
1259
|
|
|
1260
1260
|
pub fn populateOtherManifest(man: *Manifest, other: *Manifest, prefix_map: [4]u8) Allocator.Error!void {
|
|
1261
1261
|
const gpa = other.cache.gpa;
|
|
1262
|
-
assert(@typeInfo(std.zig.Server.Message.PathPrefix).@"enum".
|
|
1262
|
+
assert(@typeInfo(std.zig.Server.Message.PathPrefix).@"enum".field_names.len == man.cache.prefixes_len);
|
|
1263
1263
|
assert(man.cache.prefixes_len == 4);
|
|
1264
1264
|
for (man.files.keys()) |file| {
|
|
1265
1265
|
const prefixed_path: PrefixedPath = .{
|
|
@@ -2884,7 +2884,10 @@ pub const Storage = enum {
|
|
|
2884
2884
|
}
|
|
2885
2885
|
|
|
2886
2886
|
pub fn cast(this: @This(), c: *const Configuration, comptime S: type) ?S {
|
|
2887
|
-
const wanted_tag =
|
|
2887
|
+
const wanted_tag = blk: {
|
|
2888
|
+
const info = @typeInfo(S.Flags).@"struct";
|
|
2889
|
+
break :blk info.field_attrs[0].defaultValue(info.field_types[0]).?;
|
|
2890
|
+
};
|
|
2888
2891
|
const base_flags: BaseFlags = @bitCast(c.extra[@intFromEnum(this)]);
|
|
2889
2892
|
if (base_flags.tag != wanted_tag) return null;
|
|
2890
2893
|
var i: usize = @intFromEnum(this);
|
|
@@ -3047,8 +3050,8 @@ pub const Storage = enum {
|
|
|
3047
3050
|
switch (@typeInfo(T)) {
|
|
3048
3051
|
.@"struct" => |info| {
|
|
3049
3052
|
var result: T = undefined;
|
|
3050
|
-
inline for (info.
|
|
3051
|
-
@field(result,
|
|
3053
|
+
inline for (info.field_names, info.field_types) |field_name, field_type| {
|
|
3054
|
+
@field(result, field_name) = dataField(buffer, i, &result, field_type);
|
|
3052
3055
|
}
|
|
3053
3056
|
return result;
|
|
3054
3057
|
},
|
|
@@ -3058,7 +3061,7 @@ pub const Storage = enum {
|
|
|
3058
3061
|
inline else => |comptime_tag| @unionInit(
|
|
3059
3062
|
T,
|
|
3060
3063
|
@tagName(comptime_tag),
|
|
3061
|
-
data(buffer, i, info.
|
|
3064
|
+
data(buffer, i, info.field_types[@intFromEnum(comptime_tag)]),
|
|
3062
3065
|
),
|
|
3063
3066
|
};
|
|
3064
3067
|
},
|
|
@@ -3125,7 +3128,7 @@ pub const Storage = enum {
|
|
|
3125
3128
|
buffer,
|
|
3126
3129
|
i,
|
|
3127
3130
|
container,
|
|
3128
|
-
@typeInfo(Field.Union).@"union".
|
|
3131
|
+
@typeInfo(Field.Union).@"union".field_types[@intFromEnum(comptime_tag)],
|
|
3129
3132
|
),
|
|
3130
3133
|
),
|
|
3131
3134
|
},
|
|
@@ -3167,7 +3170,7 @@ pub const Storage = enum {
|
|
|
3167
3170
|
.multi_list => {
|
|
3168
3171
|
const data_start = i.* + 1;
|
|
3169
3172
|
const len = buffer[data_start - 1];
|
|
3170
|
-
defer i.* = data_start + len * @typeInfo(Field.Elem).@"struct".
|
|
3173
|
+
defer i.* = data_start + len * @typeInfo(Field.Elem).@"struct".field_names.len;
|
|
3171
3174
|
return .{ .mal = .{
|
|
3172
3175
|
.bytes = @ptrCast(@constCast(buffer[data_start..][0..len])),
|
|
3173
3176
|
.len = len,
|
|
@@ -3205,10 +3208,10 @@ pub const Storage = enum {
|
|
|
3205
3208
|
|
|
3206
3209
|
/// Returns new end index.
|
|
3207
3210
|
fn setExtra(buffer: []u32, index: usize, extra: anytype) usize {
|
|
3208
|
-
const
|
|
3211
|
+
const info = @typeInfo(@TypeOf(extra)).@"struct";
|
|
3209
3212
|
var i = index;
|
|
3210
|
-
inline for (
|
|
3211
|
-
i += setExtraField(buffer, i,
|
|
3213
|
+
inline for (info.field_names, info.field_types) |field_name, field_type| {
|
|
3214
|
+
i += setExtraField(buffer, i, field_type, @field(extra, field_name));
|
|
3212
3215
|
}
|
|
3213
3216
|
return i;
|
|
3214
3217
|
}
|
|
@@ -3236,7 +3239,7 @@ pub const Storage = enum {
|
|
|
3236
3239
|
.flag_length_prefixed_list,
|
|
3237
3240
|
.flag_list,
|
|
3238
3241
|
=> 1 + @divExact(@sizeOf(Field.Elem), @sizeOf(u32)) * field.slice.len,
|
|
3239
|
-
.multi_list => 1 + field.mal.len * @typeInfo(Field.Elem).@"struct".
|
|
3242
|
+
.multi_list => 1 + field.mal.len * @typeInfo(Field.Elem).@"struct".field_names.len,
|
|
3240
3243
|
.union_list => Field.extraLen(field.len),
|
|
3241
3244
|
.flag_union => switch (field.u) {
|
|
3242
3245
|
inline else => |v| extraFieldLen(v),
|
|
@@ -3249,10 +3252,10 @@ pub const Storage = enum {
|
|
|
3249
3252
|
}
|
|
3250
3253
|
|
|
3251
3254
|
fn extraLen(extra: anytype) usize {
|
|
3252
|
-
const
|
|
3255
|
+
const field_names = @typeInfo(@TypeOf(extra)).@"struct".field_names;
|
|
3253
3256
|
var i: usize = 0;
|
|
3254
|
-
inline for (
|
|
3255
|
-
i += Storage.extraFieldLen(@field(extra,
|
|
3257
|
+
inline for (field_names) |name| {
|
|
3258
|
+
i += Storage.extraFieldLen(@field(extra, name));
|
|
3256
3259
|
}
|
|
3257
3260
|
return i;
|
|
3258
3261
|
}
|
|
@@ -3324,12 +3327,12 @@ pub const Storage = enum {
|
|
|
3324
3327
|
.multi_list => {
|
|
3325
3328
|
const len: u32 = @intCast(value.mal.len);
|
|
3326
3329
|
buffer[i] = len;
|
|
3327
|
-
const
|
|
3328
|
-
inline for (0..
|
|
3330
|
+
const field_names = @typeInfo(Field.Elem).@"struct".field_names;
|
|
3331
|
+
inline for (0..field_names.len) |field_i| @memcpy(
|
|
3329
3332
|
buffer[i + 1 + field_i * len ..][0..len],
|
|
3330
3333
|
@as([]const u32, @ptrCast(value.mal.items(@enumFromInt(field_i)))),
|
|
3331
3334
|
);
|
|
3332
|
-
return 1 +
|
|
3335
|
+
return 1 + field_names.len * len;
|
|
3333
3336
|
},
|
|
3334
3337
|
.union_list => {
|
|
3335
3338
|
if (value.len == 0) return 0;
|
|
@@ -173,8 +173,9 @@ fn addValueInner(config_header: *ConfigHeader, name: []const u8, comptime T: typ
|
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
pub fn addValues(config_header: *ConfigHeader, values: anytype) void {
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
const info = @typeInfo(@TypeOf(values)).@"struct";
|
|
177
|
+
inline for (info.field_names, info.field_types) |field_name, field_type| {
|
|
178
|
+
addValue(config_header, field_name, field_type, @field(values, field_name));
|
|
178
179
|
}
|
|
179
180
|
}
|
|
180
181
|
|
|
@@ -299,14 +299,14 @@ fn printEnum(
|
|
|
299
299
|
try out.appendNTimes(gpa, ' ', indent);
|
|
300
300
|
try out.print(gpa, "pub const {f} = enum ({s}) {{\n", .{ std.zig.fmtId(@typeName(T)), @typeName(val.tag_type) });
|
|
301
301
|
|
|
302
|
-
inline for (val.
|
|
302
|
+
inline for (val.field_names, val.field_values) |field_name, field_value| {
|
|
303
303
|
try out.appendNTimes(gpa, ' ', indent);
|
|
304
304
|
try out.print(gpa, " {f} = {d},\n", .{
|
|
305
|
-
std.zig.fmtIdFlags(
|
|
305
|
+
std.zig.fmtIdFlags(field_name, .{ .allow_primitive = true }), field_value,
|
|
306
306
|
});
|
|
307
307
|
}
|
|
308
308
|
|
|
309
|
-
if (
|
|
309
|
+
if (val.mode == .nonexhaustive) {
|
|
310
310
|
try out.appendNTimes(gpa, ' ', indent);
|
|
311
311
|
try out.appendSlice(gpa, " _,\n");
|
|
312
312
|
}
|
|
@@ -315,7 +315,13 @@ fn printEnum(
|
|
|
315
315
|
try out.appendSlice(gpa, "};\n");
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
fn printStruct(
|
|
318
|
+
fn printStruct(
|
|
319
|
+
options: *Options,
|
|
320
|
+
out: *std.ArrayList(u8),
|
|
321
|
+
comptime T: type,
|
|
322
|
+
comptime val: std.builtin.Type.Struct,
|
|
323
|
+
indent: u8,
|
|
324
|
+
) !void {
|
|
319
325
|
const gpa = options.step.owner.allocator;
|
|
320
326
|
const gop = try options.encountered_types.getOrPut(gpa, @typeName(T));
|
|
321
327
|
if (gop.found_existing) return;
|
|
@@ -331,32 +337,32 @@ fn printStruct(options: *Options, out: *std.ArrayList(u8), comptime T: type, com
|
|
|
331
337
|
|
|
332
338
|
try out.appendSlice(gpa, " {\n");
|
|
333
339
|
|
|
334
|
-
inline for (val.
|
|
340
|
+
inline for (val.field_names, val.field_types, val.field_attrs) |field_name, field_type, field_attrs| {
|
|
335
341
|
try out.appendNTimes(gpa, ' ', indent);
|
|
336
342
|
|
|
337
|
-
const type_name = @typeName(
|
|
343
|
+
const type_name = @typeName(field_type);
|
|
338
344
|
|
|
339
345
|
// If the type name doesn't contains a '.' the type is from zig builtins.
|
|
340
346
|
if (std.mem.containsAtLeast(u8, type_name, 1, ".")) {
|
|
341
347
|
try out.print(gpa, " {f}: {f}", .{
|
|
342
|
-
std.zig.fmtIdFlags(
|
|
348
|
+
std.zig.fmtIdFlags(field_name, .{ .allow_underscore = true, .allow_primitive = true }),
|
|
343
349
|
std.zig.fmtId(type_name),
|
|
344
350
|
});
|
|
345
351
|
} else {
|
|
346
352
|
try out.print(gpa, " {f}: {s}", .{
|
|
347
|
-
std.zig.fmtIdFlags(
|
|
353
|
+
std.zig.fmtIdFlags(field_name, .{ .allow_underscore = true, .allow_primitive = true }),
|
|
348
354
|
type_name,
|
|
349
355
|
});
|
|
350
356
|
}
|
|
351
357
|
|
|
352
|
-
if (
|
|
358
|
+
if (field_attrs.defaultValue(field_type)) |default_value| {
|
|
353
359
|
try out.appendSlice(gpa, " = ");
|
|
354
|
-
switch (@typeInfo(
|
|
360
|
+
switch (@typeInfo(field_type)) {
|
|
355
361
|
.@"enum" => try out.print(gpa, ".{s},\n", .{@tagName(default_value)}),
|
|
356
362
|
.@"struct" => |info| {
|
|
357
363
|
try printStructValue(options, out, info, default_value, indent + 4);
|
|
358
364
|
},
|
|
359
|
-
else => try printType(options, out,
|
|
365
|
+
else => try printType(options, out, field_type, default_value, indent, null),
|
|
360
366
|
}
|
|
361
367
|
} else {
|
|
362
368
|
try out.appendSlice(gpa, ",\n");
|
|
@@ -368,8 +374,8 @@ fn printStruct(options: *Options, out: *std.ArrayList(u8), comptime T: type, com
|
|
|
368
374
|
try out.appendNTimes(gpa, ' ', indent);
|
|
369
375
|
try out.appendSlice(gpa, "};\n");
|
|
370
376
|
|
|
371
|
-
inline for (val.
|
|
372
|
-
try printUserDefinedType(options, out,
|
|
377
|
+
inline for (val.field_types) |field_type| {
|
|
378
|
+
try printUserDefinedType(options, out, field_type, 0);
|
|
373
379
|
}
|
|
374
380
|
}
|
|
375
381
|
|
|
@@ -384,24 +390,24 @@ fn printStructValue(
|
|
|
384
390
|
try out.appendSlice(gpa, ".{\n");
|
|
385
391
|
|
|
386
392
|
if (struct_val.is_tuple) {
|
|
387
|
-
inline for (struct_val.
|
|
393
|
+
inline for (struct_val.field_names) |field_name| {
|
|
388
394
|
try out.appendNTimes(gpa, ' ', indent);
|
|
389
|
-
try printType(options, out, @TypeOf(@field(val,
|
|
395
|
+
try printType(options, out, @TypeOf(@field(val, field_name)), @field(val, field_name), indent, null);
|
|
390
396
|
}
|
|
391
397
|
} else {
|
|
392
|
-
inline for (struct_val.
|
|
398
|
+
inline for (struct_val.field_names) |field_name| {
|
|
393
399
|
try out.appendNTimes(gpa, ' ', indent);
|
|
394
400
|
try out.print(gpa, " .{f} = ", .{
|
|
395
|
-
std.zig.fmtIdFlags(
|
|
401
|
+
std.zig.fmtIdFlags(field_name, .{ .allow_primitive = true, .allow_underscore = true }),
|
|
396
402
|
});
|
|
397
403
|
|
|
398
|
-
const
|
|
399
|
-
switch (@typeInfo(@TypeOf(
|
|
400
|
-
.@"enum" => try out.print(gpa, ".{s},\n", .{@tagName(
|
|
404
|
+
const field_val = @field(val, field_name);
|
|
405
|
+
switch (@typeInfo(@TypeOf(field_val))) {
|
|
406
|
+
.@"enum" => try out.print(gpa, ".{s},\n", .{@tagName(field_val)}),
|
|
401
407
|
.@"struct" => |struct_info| {
|
|
402
|
-
try printStructValue(options, out, struct_info,
|
|
408
|
+
try printStructValue(options, out, struct_info, field_val, indent + 4);
|
|
403
409
|
},
|
|
404
|
-
else => try printType(options, out, @TypeOf(
|
|
410
|
+
else => try printType(options, out, @TypeOf(field_val), field_val, indent, null),
|
|
405
411
|
}
|
|
406
412
|
}
|
|
407
413
|
}
|