@zigc/lib 0.17.0-dev.644 → 0.17.0-dev.667

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.
Files changed (124) hide show
  1. package/compiler/Maker/ScannedConfig.zig +4 -3
  2. package/compiler/Maker/Step/FindProgram.zig +2 -2
  3. package/compiler/Maker/Watch/FsEvents.zig +3 -2
  4. package/compiler/Maker.zig +2 -2
  5. package/compiler/aro/aro/Attribute.zig +52 -51
  6. package/compiler/aro/aro/Compilation.zig +5 -5
  7. package/compiler/aro/aro/Diagnostics.zig +7 -7
  8. package/compiler/aro/aro/Parser.zig +2 -2
  9. package/compiler/aro/aro/Tree.zig +11 -11
  10. package/compiler/aro/aro/features.zig +4 -4
  11. package/compiler/aro/aro/text_literal.zig +2 -2
  12. package/compiler/aro/backend/Interner.zig +14 -13
  13. package/compiler/configurer.zig +2 -2
  14. package/compiler/resinator/bmp.zig +3 -2
  15. package/compiler/resinator/code_pages.zig +14 -12
  16. package/compiler/resinator/cvtres.zig +11 -10
  17. package/compiler/resinator/errors.zig +18 -22
  18. package/compiler/resinator/lang.zig +7 -7
  19. package/compiler/resinator/parse.zig +1 -1
  20. package/compiler/translate-c/ast.zig +6 -6
  21. package/docs/wasm/markdown/Document.zig +3 -3
  22. package/docs/wasm/markdown/Parser.zig +3 -3
  23. package/libc/include/powerpc-linux-gnu/bits/struct_mutex.h +2 -2
  24. package/libc/include/s390x-linux-gnu/bits/fenv.h +2 -2
  25. package/libc/include/s390x-linux-gnu/bits/struct_mutex.h +2 -2
  26. package/libc/include/x86-linux-gnu/bits/struct_mutex.h +2 -2
  27. package/package.json +1 -1
  28. package/std/Build/Cache.zig +2 -2
  29. package/std/Build/Configuration.zig +19 -16
  30. package/std/Build/Step/ConfigHeader.zig +3 -2
  31. package/std/Build/Step/Options.zig +28 -22
  32. package/std/Build.zig +52 -53
  33. package/std/Io/Kqueue.zig +2 -2
  34. package/std/Io/Reader.zig +1 -1
  35. package/std/Io/Threaded.zig +18 -15
  36. package/std/Io/Uring.zig +2 -2
  37. package/std/Io/Writer.zig +18 -18
  38. package/std/Io/net.zig +3 -1
  39. package/std/Io.zig +7 -6
  40. package/std/Progress.zig +2 -2
  41. package/std/Target/aarch64.zig +2 -2
  42. package/std/Target/alpha.zig +2 -2
  43. package/std/Target/amdgcn.zig +2 -2
  44. package/std/Target/arc.zig +2 -2
  45. package/std/Target/arm.zig +2 -2
  46. package/std/Target/avr.zig +2 -2
  47. package/std/Target/bpf.zig +2 -2
  48. package/std/Target/csky.zig +2 -2
  49. package/std/Target/hexagon.zig +2 -2
  50. package/std/Target/hppa.zig +2 -2
  51. package/std/Target/kvx.zig +2 -2
  52. package/std/Target/lanai.zig +2 -2
  53. package/std/Target/loongarch.zig +2 -2
  54. package/std/Target/m68k.zig +2 -2
  55. package/std/Target/mips.zig +2 -2
  56. package/std/Target/msp430.zig +2 -2
  57. package/std/Target/nvptx.zig +2 -2
  58. package/std/Target/powerpc.zig +2 -2
  59. package/std/Target/propeller.zig +2 -2
  60. package/std/Target/riscv.zig +2 -2
  61. package/std/Target/s390x.zig +2 -2
  62. package/std/Target/sparc.zig +2 -2
  63. package/std/Target/spirv.zig +2 -2
  64. package/std/Target/ve.zig +2 -2
  65. package/std/Target/wasm.zig +2 -2
  66. package/std/Target/x86.zig +2 -2
  67. package/std/Target/xcore.zig +2 -2
  68. package/std/Target/xtensa.zig +2 -2
  69. package/std/Target.zig +4 -4
  70. package/std/c/darwin.zig +1 -1
  71. package/std/coff.zig +1 -1
  72. package/std/crypto/aes/aesni.zig +1 -1
  73. package/std/crypto/aes/armcrypto.zig +4 -4
  74. package/std/crypto/aes/soft.zig +4 -4
  75. package/std/crypto/aes.zig +12 -0
  76. package/std/crypto/codecs/asn1/Oid.zig +8 -8
  77. package/std/crypto/codecs/asn1/der/Decoder.zig +7 -7
  78. package/std/crypto/codecs/asn1/der/Encoder.zig +10 -8
  79. package/std/crypto/phc_encoding.zig +23 -20
  80. package/std/crypto/timing_safe.zig +1 -1
  81. package/std/crypto/tls/Client.zig +3 -3
  82. package/std/crypto/tls.zig +1 -1
  83. package/std/debug/Dwarf/Unwind/VirtualMachine.zig +11 -5
  84. package/std/debug/ElfFile.zig +12 -8
  85. package/std/debug/MachOFile.zig +2 -2
  86. package/std/debug/SelfInfo/MachO.zig +44 -17
  87. package/std/debug/SelfInfo/Windows.zig +2 -2
  88. package/std/elf.zig +7 -7
  89. package/std/enums.zig +66 -67
  90. package/std/gpu.zig +1 -1
  91. package/std/hash/auto_hash.zig +8 -8
  92. package/std/hash/verify.zig +3 -3
  93. package/std/http/Client.zig +2 -2
  94. package/std/json/Stringify.zig +14 -14
  95. package/std/json/static.zig +47 -31
  96. package/std/lang.zig +65 -97
  97. package/std/math.zig +2 -2
  98. package/std/mem/Allocator.zig +9 -9
  99. package/std/mem.zig +86 -102
  100. package/std/meta/trailer_flags.zig +26 -19
  101. package/std/meta.zig +131 -171
  102. package/std/multi_array_list.zig +49 -57
  103. package/std/os/uefi/protocol/device_path.zig +8 -7
  104. package/std/os/uefi/tables/boot_services.zig +1 -1
  105. package/std/os/windows.zig +9 -15
  106. package/std/sort/pdq.zig +22 -5
  107. package/std/start.zig +6 -6
  108. package/std/testing/Smith.zig +35 -21
  109. package/std/testing.zig +15 -15
  110. package/std/zig/Ast.zig +4 -4
  111. package/std/zig/AstGen.zig +42 -42
  112. package/std/zig/ErrorBundle.zig +16 -13
  113. package/std/zig/LibCInstallation.zig +11 -11
  114. package/std/zig/Parse.zig +6 -6
  115. package/std/zig/Zir.zig +10 -10
  116. package/std/zig/c_translation/helpers.zig +2 -2
  117. package/std/zig/llvm/BitcodeReader.zig +3 -3
  118. package/std/zig/llvm/Builder.zig +124 -93
  119. package/std/zig/llvm/bitcode_writer.zig +4 -4
  120. package/std/zig/system/windows.zig +11 -11
  121. package/std/zig/system.zig +4 -4
  122. package/std/zig.zig +4 -4
  123. package/std/zon/Serializer.zig +28 -23
  124. package/std/zon/parse.zig +83 -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.fields(Extra)) |field| {
149
- std.debug.assert(@bitSizeOf(field.type) <= 32);
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.fields.len - 1;
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.fields) |field_info| {
268
- if (field_info.type != bool) continue;
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, field_info.name)) {
271
- try writer.writeAll(strings.get(field_info.name).?);
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 fields = details_info.@"struct".fields;
862
- var field_names: [fields.len - 1][]const u8 = undefined;
863
- var field_types: [fields.len - 1]type = undefined;
864
- var field_attrs: [fields.len - 1]std.builtin.Type.StructField.Attributes = undefined;
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 (fields) |field| {
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] = .{
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 == fields.len - 1);
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".fields) |field| {
91
- if (field.name.len > len) len = field.name.len;
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".fields) |field| {
124
- const id = tagToId(field.name) catch |err| {
125
- std.debug.print("tag: {s}\n", .{field.name});
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, field.name), id orelse {
129
- std.debug.print("tag: {s}, got null\n", .{field.name});
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".fields.len;
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 fields = std.meta.fields(@TypeOf(extra));
929
- try c.extra_data.ensureUnusedCapacity(c.gpa, fields.len);
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 (fields) |field| {
932
- const data: u32 = switch (field.type) {
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, field.name)),
937
+ => @intFromEnum(@field(extra, field_name)),
938
938
  TokenIndex,
939
- => @field(extra, field.name),
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 fields = @typeInfo(T).@"struct".fields;
173
+ const info = @typeInfo(T).@"struct";
174
174
  var i: usize = @intFromEnum(index);
175
175
  var result: T = undefined;
176
- inline for (fields) |field| {
177
- @field(result, field.name) = switch (field.type) {
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 fields = @typeInfo(T).@"struct".fields;
1577
+ const info = @typeInfo(T).@"struct";
1578
1578
  var i: usize = @intFromEnum(index);
1579
1579
  var result: T = undefined;
1580
- inline for (fields) |field| {
1581
- @field(result, field.name) = switch (field.type) {
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
  };
@@ -32,7 +32,7 @@ struct __pthread_mutex_s
32
32
  int __kind;
33
33
  #if __WORDSIZE == 64
34
34
  short __spins;
35
- short __unused;
35
+ short __glibc_reserved;
36
36
  __pthread_list_t __list;
37
37
  # define __PTHREAD_MUTEX_HAVE_PREV 1
38
38
  #else
@@ -59,4 +59,4 @@ struct __pthread_mutex_s
59
59
  0, 0, 0, __kind, 0, { { 0, 0 } }
60
60
  #endif
61
61
 
62
- #endif
62
+ #endif
@@ -76,7 +76,7 @@ typedef unsigned int fexcept_t; /* size of fpc */
76
76
  typedef struct
77
77
  {
78
78
  fexcept_t __fpc;
79
- void *__unused;
79
+ void *__glibc_reserved;
80
80
  /* The field __unused (formerly __ieee_instruction_pointer) is a relict from
81
81
  commit "Remove PTRACE_PEEKUSER" (87b9b50f0d4b92248905e95a06a13c513dc45e59)
82
82
  and isn't used anymore. */
@@ -96,4 +96,4 @@ typedef unsigned int femode_t;
96
96
 
97
97
  /* Default floating-point control modes. */
98
98
  # define FE_DFL_MODE ((const femode_t *) -1L)
99
- #endif
99
+ #endif
@@ -32,7 +32,7 @@ struct __pthread_mutex_s
32
32
  int __kind;
33
33
  #if __WORDSIZE == 64
34
34
  short __spins;
35
- short __unused;
35
+ short __glibc_reserved;
36
36
  __pthread_list_t __list;
37
37
  # define __PTHREAD_MUTEX_HAVE_PREV 1
38
38
  #else
@@ -59,4 +59,4 @@ struct __pthread_mutex_s
59
59
  0, 0, 0, __kind, 0, { { 0, 0 } }
60
60
  #endif
61
61
 
62
- #endif
62
+ #endif
@@ -32,7 +32,7 @@ struct __pthread_mutex_s
32
32
  int __kind;
33
33
  #ifdef __x86_64__
34
34
  short __spins;
35
- short __unused;
35
+ short __glibc_reserved;
36
36
  __pthread_list_t __list;
37
37
  # define __PTHREAD_MUTEX_HAVE_PREV 1
38
38
  #else
@@ -59,4 +59,4 @@ struct __pthread_mutex_s
59
59
  0, 0, 0, __kind, 0, { { 0, 0 } }
60
60
  #endif
61
61
 
62
- #endif
62
+ #endif
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zigc/lib",
3
- "version": "0.17.0-dev.644",
3
+ "version": "0.17.0-dev.667",
4
4
  "description": "Zig standard library and libc headers (shared across all platforms)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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".fields.len == man.cache.prefixes_len);
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".fields.len == man.cache.prefixes_len);
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 = @typeInfo(S.Flags).@"struct".fields[0].defaultValue().?;
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.fields) |field| {
3051
- @field(result, field.name) = dataField(buffer, i, &result, field.type);
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.fields[@intFromEnum(comptime_tag)].type),
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".fields[@intFromEnum(comptime_tag)].type,
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".fields.len;
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 fields = @typeInfo(@TypeOf(extra)).@"struct".fields;
3211
+ const info = @typeInfo(@TypeOf(extra)).@"struct";
3209
3212
  var i = index;
3210
- inline for (fields) |field| {
3211
- i += setExtraField(buffer, i, field.type, @field(extra, field.name));
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".fields.len,
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 fields = @typeInfo(@TypeOf(extra)).@"struct".fields;
3255
+ const field_names = @typeInfo(@TypeOf(extra)).@"struct".field_names;
3253
3256
  var i: usize = 0;
3254
- inline for (fields) |field| {
3255
- i += Storage.extraFieldLen(@field(extra, field.name));
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 fields = @typeInfo(Field.Elem).@"struct".fields;
3328
- inline for (0..fields.len) |field_i| @memcpy(
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 + fields.len * len;
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
- inline for (@typeInfo(@TypeOf(values)).@"struct".fields) |field| {
177
- addValue(config_header, field.name, field.type, @field(values, field.name));
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.fields) |field| {
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(field.name, .{ .allow_primitive = true }), field.value,
305
+ std.zig.fmtIdFlags(field_name, .{ .allow_primitive = true }), field_value,
306
306
  });
307
307
  }
308
308
 
309
- if (!val.is_exhaustive) {
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(options: *Options, out: *std.ArrayList(u8), comptime T: type, comptime val: std.builtin.Type.Struct, indent: u8) !void {
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.fields) |field| {
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(field.type);
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(field.name, .{ .allow_underscore = true, .allow_primitive = true }),
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(field.name, .{ .allow_underscore = true, .allow_primitive = true }),
353
+ std.zig.fmtIdFlags(field_name, .{ .allow_underscore = true, .allow_primitive = true }),
348
354
  type_name,
349
355
  });
350
356
  }
351
357
 
352
- if (field.defaultValue()) |default_value| {
358
+ if (field_attrs.defaultValue(field_type)) |default_value| {
353
359
  try out.appendSlice(gpa, " = ");
354
- switch (@typeInfo(@TypeOf(default_value))) {
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, @TypeOf(default_value), default_value, indent, null),
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.fields) |field| {
372
- try printUserDefinedType(options, out, field.type, 0);
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.fields) |field| {
393
+ inline for (struct_val.field_names) |field_name| {
388
394
  try out.appendNTimes(gpa, ' ', indent);
389
- try printType(options, out, @TypeOf(@field(val, field.name)), @field(val, field.name), indent, null);
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.fields) |field| {
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(field.name, .{ .allow_primitive = true, .allow_underscore = true }),
401
+ std.zig.fmtIdFlags(field_name, .{ .allow_primitive = true, .allow_underscore = true }),
396
402
  });
397
403
 
398
- const field_name = @field(val, field.name);
399
- switch (@typeInfo(@TypeOf(field_name))) {
400
- .@"enum" => try out.print(gpa, ".{s},\n", .{@tagName(field_name)}),
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, field_name, indent + 4);
408
+ try printStructValue(options, out, struct_info, field_val, indent + 4);
403
409
  },
404
- else => try printType(options, out, @TypeOf(field_name), field_name, indent, null),
410
+ else => try printType(options, out, @TypeOf(field_val), field_val, indent, null),
405
411
  }
406
412
  }
407
413
  }