@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.
Files changed (114) 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/aro/aro/Attribute.zig +52 -51
  5. package/compiler/aro/aro/Compilation.zig +5 -5
  6. package/compiler/aro/aro/Diagnostics.zig +7 -7
  7. package/compiler/aro/aro/Parser.zig +2 -2
  8. package/compiler/aro/aro/Tree.zig +11 -11
  9. package/compiler/aro/aro/features.zig +4 -4
  10. package/compiler/aro/aro/text_literal.zig +2 -2
  11. package/compiler/aro/backend/Interner.zig +14 -13
  12. package/compiler/configurer.zig +2 -2
  13. package/compiler/resinator/bmp.zig +3 -2
  14. package/compiler/resinator/code_pages.zig +14 -12
  15. package/compiler/resinator/cvtres.zig +11 -10
  16. package/compiler/resinator/errors.zig +18 -22
  17. package/compiler/resinator/lang.zig +7 -7
  18. package/compiler/resinator/parse.zig +1 -1
  19. package/compiler/translate-c/ast.zig +6 -6
  20. package/docs/wasm/markdown/Document.zig +3 -3
  21. package/docs/wasm/markdown/Parser.zig +3 -3
  22. package/package.json +1 -1
  23. package/std/Build/Cache.zig +2 -2
  24. package/std/Build/Configuration.zig +19 -16
  25. package/std/Build/Step/ConfigHeader.zig +3 -2
  26. package/std/Build/Step/Options.zig +28 -22
  27. package/std/Build.zig +52 -53
  28. package/std/Io/Kqueue.zig +2 -2
  29. package/std/Io/Reader.zig +1 -1
  30. package/std/Io/Threaded.zig +18 -15
  31. package/std/Io/Uring.zig +2 -2
  32. package/std/Io/Writer.zig +18 -18
  33. package/std/Io/net.zig +3 -1
  34. package/std/Io.zig +7 -6
  35. package/std/Progress.zig +2 -2
  36. package/std/Target/aarch64.zig +2 -2
  37. package/std/Target/alpha.zig +2 -2
  38. package/std/Target/amdgcn.zig +2 -2
  39. package/std/Target/arc.zig +2 -2
  40. package/std/Target/arm.zig +2 -2
  41. package/std/Target/avr.zig +2 -2
  42. package/std/Target/bpf.zig +2 -2
  43. package/std/Target/csky.zig +2 -2
  44. package/std/Target/hexagon.zig +2 -2
  45. package/std/Target/hppa.zig +2 -2
  46. package/std/Target/kvx.zig +2 -2
  47. package/std/Target/lanai.zig +2 -2
  48. package/std/Target/loongarch.zig +2 -2
  49. package/std/Target/m68k.zig +2 -2
  50. package/std/Target/mips.zig +2 -2
  51. package/std/Target/msp430.zig +2 -2
  52. package/std/Target/nvptx.zig +2 -2
  53. package/std/Target/powerpc.zig +2 -2
  54. package/std/Target/propeller.zig +2 -2
  55. package/std/Target/riscv.zig +2 -2
  56. package/std/Target/s390x.zig +2 -2
  57. package/std/Target/sparc.zig +2 -2
  58. package/std/Target/spirv.zig +2 -2
  59. package/std/Target/ve.zig +2 -2
  60. package/std/Target/wasm.zig +2 -2
  61. package/std/Target/x86.zig +2 -2
  62. package/std/Target/xcore.zig +2 -2
  63. package/std/Target/xtensa.zig +2 -2
  64. package/std/Target.zig +4 -4
  65. package/std/c/darwin.zig +1 -1
  66. package/std/coff.zig +1 -1
  67. package/std/crypto/codecs/asn1/Oid.zig +8 -8
  68. package/std/crypto/codecs/asn1/der/Decoder.zig +7 -7
  69. package/std/crypto/codecs/asn1/der/Encoder.zig +10 -8
  70. package/std/crypto/phc_encoding.zig +23 -20
  71. package/std/crypto/timing_safe.zig +1 -1
  72. package/std/crypto/tls/Client.zig +3 -3
  73. package/std/crypto/tls.zig +1 -1
  74. package/std/debug/Dwarf/Unwind/VirtualMachine.zig +11 -5
  75. package/std/debug/ElfFile.zig +12 -8
  76. package/std/debug/MachOFile.zig +2 -2
  77. package/std/debug/SelfInfo/MachO.zig +2 -2
  78. package/std/debug/SelfInfo/Windows.zig +2 -2
  79. package/std/elf.zig +7 -7
  80. package/std/enums.zig +66 -67
  81. package/std/gpu.zig +1 -1
  82. package/std/hash/auto_hash.zig +8 -8
  83. package/std/hash/verify.zig +3 -3
  84. package/std/http/Client.zig +2 -2
  85. package/std/json/Stringify.zig +14 -14
  86. package/std/json/static.zig +47 -31
  87. package/std/lang.zig +65 -97
  88. package/std/math.zig +2 -2
  89. package/std/mem/Allocator.zig +9 -9
  90. package/std/mem.zig +86 -102
  91. package/std/meta/trailer_flags.zig +26 -19
  92. package/std/meta.zig +131 -171
  93. package/std/multi_array_list.zig +49 -57
  94. package/std/os/uefi/protocol/device_path.zig +8 -7
  95. package/std/os/uefi/tables/boot_services.zig +1 -1
  96. package/std/os/windows.zig +9 -15
  97. package/std/start.zig +6 -6
  98. package/std/testing/Smith.zig +35 -21
  99. package/std/testing.zig +15 -15
  100. package/std/zig/Ast.zig +4 -4
  101. package/std/zig/AstGen.zig +42 -42
  102. package/std/zig/ErrorBundle.zig +16 -13
  103. package/std/zig/LibCInstallation.zig +11 -11
  104. package/std/zig/Parse.zig +6 -6
  105. package/std/zig/Zir.zig +10 -10
  106. package/std/zig/c_translation/helpers.zig +2 -2
  107. package/std/zig/llvm/BitcodeReader.zig +3 -3
  108. package/std/zig/llvm/Builder.zig +124 -93
  109. package/std/zig/llvm/bitcode_writer.zig +4 -4
  110. package/std/zig/system/windows.zig +11 -11
  111. package/std/zig/system.zig +4 -4
  112. package/std/zig.zig +4 -4
  113. package/std/zon/Serializer.zig +28 -23
  114. package/std/zon/parse.zig +58 -61
package/std/Build.zig CHANGED
@@ -389,9 +389,10 @@ fn createChild(
389
389
 
390
390
  fn userInputOptionsFromArgs(arena: Allocator, args: anytype) UserInputOptionsMap {
391
391
  var map = UserInputOptionsMap.init(arena);
392
- inline for (@typeInfo(@TypeOf(args)).@"struct".fields) |field| {
393
- if (field.type == @TypeOf(null)) continue;
394
- addUserInputOptionFromArg(arena, &map, field, field.type, @field(args, field.name));
392
+ const args_info = @typeInfo(@TypeOf(args)).@"struct";
393
+ inline for (args_info.field_names, args_info.field_types) |field_name, field_type| {
394
+ if (field_type == @TypeOf(null)) continue;
395
+ addUserInputOptionFromArg(arena, &map, field_name, field_type, @field(args, field_name));
395
396
  }
396
397
  return map;
397
398
  }
@@ -399,15 +400,15 @@ fn userInputOptionsFromArgs(arena: Allocator, args: anytype) UserInputOptionsMap
399
400
  fn addUserInputOptionFromArg(
400
401
  arena: Allocator,
401
402
  map: *UserInputOptionsMap,
402
- field: std.builtin.Type.StructField,
403
+ field_name: [:0]const u8,
403
404
  comptime T: type,
404
405
  /// If null, the value won't be added, but `T` will still be type-checked.
405
406
  maybe_value: ?T,
406
407
  ) void {
407
408
  switch (T) {
408
409
  Target.Query => return if (maybe_value) |v| {
409
- map.put(field.name, .{
410
- .name = field.name,
410
+ map.put(field_name, .{
411
+ .name = field_name,
411
412
  .value = .{ .scalar = v.zigTriple(arena) catch @panic("OOM") },
412
413
  .used = false,
413
414
  }) catch @panic("OOM");
@@ -418,8 +419,8 @@ fn addUserInputOptionFromArg(
418
419
  }) catch @panic("OOM");
419
420
  },
420
421
  ResolvedTarget => return if (maybe_value) |v| {
421
- map.put(field.name, .{
422
- .name = field.name,
422
+ map.put(field_name, .{
423
+ .name = field_name,
423
424
  .value = .{ .scalar = v.query.zigTriple(arena) catch @panic("OOM") },
424
425
  .used = false,
425
426
  }) catch @panic("OOM");
@@ -430,15 +431,15 @@ fn addUserInputOptionFromArg(
430
431
  }) catch @panic("OOM");
431
432
  },
432
433
  std.zig.BuildId => return if (maybe_value) |v| {
433
- map.put(field.name, .{
434
- .name = field.name,
434
+ map.put(field_name, .{
435
+ .name = field_name,
435
436
  .value = .{ .scalar = std.fmt.allocPrint(arena, "{f}", .{v}) catch @panic("OOM") },
436
437
  .used = false,
437
438
  }) catch @panic("OOM");
438
439
  },
439
440
  LazyPath => return if (maybe_value) |v| {
440
- map.put(field.name, .{
441
- .name = field.name,
441
+ map.put(field_name, .{
442
+ .name = field_name,
442
443
  .value = .{ .lazy_path = v.dupeInner(arena) },
443
444
  .used = false,
444
445
  }) catch @panic("OOM");
@@ -446,15 +447,15 @@ fn addUserInputOptionFromArg(
446
447
  []const LazyPath => return if (maybe_value) |v| {
447
448
  var list = std.array_list.Managed(LazyPath).initCapacity(arena, v.len) catch @panic("OOM");
448
449
  for (v) |lp| list.appendAssumeCapacity(lp.dupeInner(arena));
449
- map.put(field.name, .{
450
- .name = field.name,
450
+ map.put(field_name, .{
451
+ .name = field_name,
451
452
  .value = .{ .lazy_path_list = list },
452
453
  .used = false,
453
454
  }) catch @panic("OOM");
454
455
  },
455
456
  []const u8 => return if (maybe_value) |v| {
456
- map.put(field.name, .{
457
- .name = field.name,
457
+ map.put(field_name, .{
458
+ .name = field_name,
458
459
  .value = .{ .scalar = arena.dupe(u8, v) catch @panic("OOM") },
459
460
  .used = false,
460
461
  }) catch @panic("OOM");
@@ -462,37 +463,37 @@ fn addUserInputOptionFromArg(
462
463
  []const []const u8 => return if (maybe_value) |v| {
463
464
  var list = std.array_list.Managed([]const u8).initCapacity(arena, v.len) catch @panic("OOM");
464
465
  for (v) |s| list.appendAssumeCapacity(arena.dupe(u8, s) catch @panic("OOM"));
465
- map.put(field.name, .{
466
- .name = field.name,
466
+ map.put(field_name, .{
467
+ .name = field_name,
467
468
  .value = .{ .list = list },
468
469
  .used = false,
469
470
  }) catch @panic("OOM");
470
471
  },
471
472
  else => switch (@typeInfo(T)) {
472
473
  .bool => return if (maybe_value) |v| {
473
- map.put(field.name, .{
474
- .name = field.name,
474
+ map.put(field_name, .{
475
+ .name = field_name,
475
476
  .value = .{ .scalar = if (v) "true" else "false" },
476
477
  .used = false,
477
478
  }) catch @panic("OOM");
478
479
  },
479
480
  .@"enum", .enum_literal => return if (maybe_value) |v| {
480
- map.put(field.name, .{
481
- .name = field.name,
481
+ map.put(field_name, .{
482
+ .name = field_name,
482
483
  .value = .{ .scalar = @tagName(v) },
483
484
  .used = false,
484
485
  }) catch @panic("OOM");
485
486
  },
486
487
  .comptime_int, .int => return if (maybe_value) |v| {
487
- map.put(field.name, .{
488
- .name = field.name,
488
+ map.put(field_name, .{
489
+ .name = field_name,
489
490
  .value = .{ .scalar = std.fmt.allocPrint(arena, "{d}", .{v}) catch @panic("OOM") },
490
491
  .used = false,
491
492
  }) catch @panic("OOM");
492
493
  },
493
494
  .comptime_float, .float => return if (maybe_value) |v| {
494
- map.put(field.name, .{
495
- .name = field.name,
495
+ map.put(field_name, .{
496
+ .name = field_name,
496
497
  .value = .{ .scalar = std.fmt.allocPrint(arena, "{x}", .{v}) catch @panic("OOM") },
497
498
  .used = false,
498
499
  }) catch @panic("OOM");
@@ -503,7 +504,7 @@ fn addUserInputOptionFromArg(
503
504
  addUserInputOptionFromArg(
504
505
  arena,
505
506
  map,
506
- field,
507
+ field_name,
507
508
  @Pointer(.slice, .{ .@"const" = true }, array_info.child, null),
508
509
  maybe_value orelse null,
509
510
  );
@@ -515,8 +516,8 @@ fn addUserInputOptionFromArg(
515
516
  .@"enum" => return if (maybe_value) |v| {
516
517
  var list = std.array_list.Managed([]const u8).initCapacity(arena, v.len) catch @panic("OOM");
517
518
  for (v) |tag| list.appendAssumeCapacity(@tagName(tag));
518
- map.put(field.name, .{
519
- .name = field.name,
519
+ map.put(field_name, .{
520
+ .name = field_name,
520
521
  .value = .{ .list = list },
521
522
  .used = false,
522
523
  }) catch @panic("OOM");
@@ -525,7 +526,7 @@ fn addUserInputOptionFromArg(
525
526
  addUserInputOptionFromArg(
526
527
  arena,
527
528
  map,
528
- field,
529
+ field_name,
529
530
  @Pointer(ptr_info.size, .{ .@"const" = true }, ptr_info.child, null),
530
531
  maybe_value orelse null,
531
532
  );
@@ -541,7 +542,7 @@ fn addUserInputOptionFromArg(
541
542
  addUserInputOptionFromArg(
542
543
  arena,
543
544
  map,
544
- field,
545
+ field_name,
545
546
  info.child,
546
547
  maybe_value orelse null,
547
548
  );
@@ -551,7 +552,7 @@ fn addUserInputOptionFromArg(
551
552
  else => {},
552
553
  },
553
554
  }
554
- @compileError("option '" ++ field.name ++ "' has unsupported type: " ++ @typeName(field.type));
555
+ @compileError("option '" ++ field_name ++ "' has unsupported type: " ++ @typeName(T));
555
556
  }
556
557
 
557
558
  const OrderedUserValue = union(enum) {
@@ -1114,11 +1115,11 @@ pub fn option(b: *Build, comptime T: type, name_raw: []const u8, description_raw
1114
1115
  const type_id = comptime typeToEnum(T);
1115
1116
  const enum_options = if (type_id == .@"enum" or type_id == .enum_list) blk: {
1116
1117
  const EnumType = if (type_id == .enum_list) @typeInfo(T).pointer.child else T;
1117
- const fields = comptime std.meta.fields(EnumType);
1118
- var options = std.array_list.Managed([]const u8).initCapacity(arena, fields.len) catch @panic("OOM");
1118
+ const field_names = comptime std.meta.fieldNames(EnumType);
1119
+ var options = std.array_list.Managed([]const u8).initCapacity(b.allocator, field_names.len) catch @panic("OOM");
1119
1120
 
1120
- inline for (fields) |field| {
1121
- options.appendAssumeCapacity(field.name);
1121
+ inline for (field_names) |field_name| {
1122
+ options.appendAssumeCapacity(field_name);
1122
1123
  }
1123
1124
 
1124
1125
  break :blk options.toOwnedSlice() catch @panic("OOM");
@@ -1407,8 +1408,8 @@ pub fn parseTargetQuery(options: std.Target.Query.ParseOptions) error{ParseFaile
1407
1408
  \\available operating systems:
1408
1409
  \\
1409
1410
  , .{diags.os_name.?});
1410
- inline for (std.meta.fields(Target.Os.Tag)) |field| {
1411
- std.debug.print(" {s}\n", .{field.name});
1411
+ inline for (comptime std.meta.fieldNames(Target.Os.Tag)) |field_name| {
1412
+ std.debug.print(" {s}\n", .{field_name});
1412
1413
  }
1413
1414
  return error.ParseFailed;
1414
1415
  },
@@ -1811,8 +1812,8 @@ pub fn findProgram(b: *Build, options: FindProgramOptions) ?[]const u8 {
1811
1812
  }
1812
1813
 
1813
1814
  fn supportedWindowsProgramExtension(ext: []const u8) bool {
1814
- inline for (@typeInfo(std.process.WindowsExtension).@"enum".fields) |field| {
1815
- if (std.ascii.eqlIgnoreCase(ext, "." ++ field.name)) return true;
1815
+ inline for (@typeInfo(std.process.WindowsExtension).@"enum".field_names) |field_name| {
1816
+ if (std.ascii.eqlIgnoreCase(ext, "." ++ field_name)) return true;
1816
1817
  }
1817
1818
  return false;
1818
1819
  }
@@ -2072,8 +2073,7 @@ inline fn findImportPkgHashOrFatal(b: *Build, comptime asking_build_zig: type, c
2072
2073
  const deps = build_runner.dependencies;
2073
2074
  const arena = b.graph.arena;
2074
2075
 
2075
- const b_pkg_hash, const b_pkg_deps = comptime for (@typeInfo(deps.packages).@"struct".decls) |decl| {
2076
- const pkg_hash = decl.name;
2076
+ const b_pkg_hash, const b_pkg_deps = comptime for (@typeInfo(deps.packages).@"struct".decl_names) |pkg_hash| {
2077
2077
  const pkg = @field(deps.packages, pkg_hash);
2078
2078
  if (@hasDecl(pkg, "build_zig") and pkg.build_zig == asking_build_zig) break .{ pkg_hash, pkg.deps };
2079
2079
  } else .{ "", deps.root_deps };
@@ -2116,9 +2116,9 @@ pub fn lazyDependency(b: *Build, name: []const u8, args: anytype) ?*Dependency {
2116
2116
  const deps = build_runner.dependencies;
2117
2117
  const pkg_hash = findPkgHashOrFatal(b, name);
2118
2118
 
2119
- inline for (@typeInfo(deps.packages).@"struct".decls) |decl| {
2120
- if (mem.eql(u8, decl.name, pkg_hash)) {
2121
- const pkg = @field(deps.packages, decl.name);
2119
+ inline for (@typeInfo(deps.packages).@"struct".decl_names) |decl_name| {
2120
+ if (mem.eql(u8, decl_name, pkg_hash)) {
2121
+ const pkg = @field(deps.packages, decl_name);
2122
2122
  const available = !@hasDecl(pkg, "available") or pkg.available;
2123
2123
  if (!available) {
2124
2124
  markNeededLazyDep(b, pkg_hash);
@@ -2136,9 +2136,9 @@ pub fn dependency(b: *Build, name: []const u8, args: anytype) *Dependency {
2136
2136
  const deps = build_runner.dependencies;
2137
2137
  const pkg_hash = findPkgHashOrFatal(b, name);
2138
2138
 
2139
- inline for (@typeInfo(deps.packages).@"struct".decls) |decl| {
2140
- if (mem.eql(u8, decl.name, pkg_hash)) {
2141
- const pkg = @field(deps.packages, decl.name);
2139
+ inline for (@typeInfo(deps.packages).@"struct".decl_names) |decl_name| {
2140
+ if (mem.eql(u8, decl_name, pkg_hash)) {
2141
+ const pkg = @field(deps.packages, decl_name);
2142
2142
  if (@hasDecl(pkg, "available")) {
2143
2143
  panic("dependency '{s}{s}' is marked as lazy in build.zig.zon which means it must use the lazyDependency function instead", .{ b.dep_prefix, name });
2144
2144
  }
@@ -2166,9 +2166,9 @@ pub inline fn lazyImport(
2166
2166
  const deps = build_runner.dependencies;
2167
2167
  const pkg_hash = findImportPkgHashOrFatal(b, asking_build_zig, dep_name);
2168
2168
 
2169
- inline for (@typeInfo(deps.packages).@"struct".decls) |decl| {
2170
- if (comptime mem.eql(u8, decl.name, pkg_hash)) {
2171
- const pkg = @field(deps.packages, decl.name);
2169
+ inline for (@typeInfo(deps.packages).@"struct".decl_names) |decl_name| {
2170
+ if (comptime mem.eql(u8, decl_name, pkg_hash)) {
2171
+ const pkg = @field(deps.packages, decl_name);
2172
2172
  const available = !@hasDecl(pkg, "available") or pkg.available;
2173
2173
  if (!available) {
2174
2174
  markNeededLazyDep(b, pkg_hash);
@@ -2197,8 +2197,7 @@ pub fn dependencyFromBuildZig(
2197
2197
  const arena = graph.arena;
2198
2198
 
2199
2199
  find_dep: {
2200
- const pkg, const pkg_hash = inline for (@typeInfo(deps.packages).@"struct".decls) |decl| {
2201
- const pkg_hash = decl.name;
2200
+ const pkg, const pkg_hash = inline for (@typeInfo(deps.packages).@"struct".decl_names) |pkg_hash| {
2202
2201
  const pkg = @field(deps.packages, pkg_hash);
2203
2202
  if (@hasDecl(pkg, "build_zig") and pkg.build_zig == build_zig) break .{ pkg, pkg_hash };
2204
2203
  } else break :find_dep;
package/std/Io/Kqueue.zig CHANGED
@@ -1401,9 +1401,9 @@ fn openSocketPosix(
1401
1401
  };
1402
1402
  errdefer closeFd(socket_fd);
1403
1403
 
1404
- if (options.ip6_only) {
1404
+ if (options.ip6_only) |ip6_only| {
1405
1405
  if (posix.IPV6 == void) return error.OptionUnsupported;
1406
- try setSocketOption(k, socket_fd, posix.IPPROTO.IPV6, posix.IPV6.V6ONLY, 1);
1406
+ try setSocketOption(k, socket_fd, posix.IPPROTO.IPV6, posix.IPV6.V6ONLY, @intFromBool(ip6_only));
1407
1407
  }
1408
1408
 
1409
1409
  return socket_fd;
package/std/Io/Reader.zig CHANGED
@@ -1277,7 +1277,7 @@ pub fn takeEnum(r: *Reader, comptime Enum: type, endian: std.builtin.Endian) Tak
1277
1277
  /// Asserts the buffer was initialized with a capacity at least `@sizeOf(Enum)`.
1278
1278
  pub fn takeEnumNonexhaustive(r: *Reader, comptime Enum: type, endian: std.builtin.Endian) Error!Enum {
1279
1279
  const info = @typeInfo(Enum).@"enum";
1280
- comptime assert(!info.is_exhaustive);
1280
+ comptime assert(info.mode != .exhaustive);
1281
1281
  comptime assert(@bitSizeOf(info.tag_type) == @sizeOf(info.tag_type) * 8);
1282
1282
  return takeEnum(r, Enum, endian) catch |err| switch (err) {
1283
1283
  error.InvalidEnumTag => unreachable,
@@ -332,8 +332,8 @@ pub const Environ = struct {
332
332
  .flags = .{ .nonblocking = true },
333
333
  };
334
334
  };
335
- } else inline for (@typeInfo(String).@"struct".fields) |field| {
336
- if (std.mem.eql(u8, key, field.name)) @field(environ.string, field.name) = value;
335
+ } else inline for (@typeInfo(String).@"struct".field_names) |field_name| {
336
+ if (std.mem.eql(u8, key, field_name)) @field(environ.string, field_name) = value;
337
337
  }
338
338
  }
339
339
  }
@@ -11785,8 +11785,8 @@ fn sleepWasi(t: *Threaded, timeout: Io.Timeout) Io.Cancelable!void {
11785
11785
 
11786
11786
  fn sleepNanosleep(t: *Threaded, timeout: Io.Timeout) Io.Cancelable!void {
11787
11787
  const t_io = io(t);
11788
- const sec_type = @typeInfo(posix.timespec).@"struct".fields[0].type;
11789
- const nsec_type = @typeInfo(posix.timespec).@"struct".fields[1].type;
11788
+ const sec_type = @typeInfo(posix.timespec).@"struct".field_types[0];
11789
+ const nsec_type = @typeInfo(posix.timespec).@"struct".field_types[1];
11790
11790
 
11791
11791
  var timespec: posix.timespec = t: {
11792
11792
  const d = timeout.toDurationFromNow(t_io) orelse break :t .{
@@ -12407,9 +12407,9 @@ fn openSocketPosix(
12407
12407
  };
12408
12408
  errdefer closeFd(socket_fd);
12409
12409
 
12410
- if (options.ip6_only) {
12410
+ if (options.ip6_only) |ip6_only| {
12411
12411
  if (posix.IPV6 == void) return error.OptionUnsupported;
12412
- try setSocketOptionPosix(socket_fd, posix.IPPROTO.IPV6, posix.IPV6.V6ONLY, 1);
12412
+ try setSocketOptionPosix(socket_fd, posix.IPPROTO.IPV6, posix.IPV6.V6ONLY, @intFromBool(ip6_only));
12413
12413
  }
12414
12414
 
12415
12415
  return socket_fd;
@@ -13627,12 +13627,15 @@ fn netLookupFallible(
13627
13627
 
13628
13628
  // On Linux, glibc provides getaddrinfo_a which is capable of supporting our semantics.
13629
13629
  // However, musl's POSIX-compliant getaddrinfo is not, so we bypass it.
13630
+ const is_glibc = builtin.link_libc and builtin.target.isGnuLibC();
13630
13631
 
13631
- if (builtin.target.isGnuLibC()) {
13632
+ if (is_glibc) {
13632
13633
  // TODO use getaddrinfo_a / gai_cancel
13633
13634
  }
13634
13635
 
13635
- if (native_os == .linux or is_windows) {
13636
+ // On Linux, we have to go through glibc because of the Name Service Switch feature.
13637
+ const non_glibc_linux = native_os == .linux and !is_glibc;
13638
+ if (non_glibc_linux or is_windows) {
13636
13639
  if (IpAddress.parseIp6(name, options.port)) |addr| {
13637
13640
  if (options.family == .ip4) return error.UnknownHostName;
13638
13641
  if (copyCanon(options.canonical_name_buffer, name)) |canon| {
@@ -14493,7 +14496,7 @@ fn lookupDns(
14493
14496
  var socket = s: {
14494
14497
  if (any_ip6) ip6: {
14495
14498
  const ip6_addr: IpAddress = .{ .ip6 = .unspecified(0) };
14496
- const socket = ip6_addr.bind(t_io, .{ .ip6_only = true, .mode = .dgram }) catch |err| switch (err) {
14499
+ const socket = ip6_addr.bind(t_io, .{ .ip6_only = false, .mode = .dgram }) catch |err| switch (err) {
14497
14500
  error.AddressFamilyUnsupported => break :ip6,
14498
14501
  else => |e| return e,
14499
14502
  };
@@ -14923,9 +14926,9 @@ const WindowsEnvironStrings = struct {
14923
14926
 
14924
14927
  i += 1; // skip over null byte
14925
14928
 
14926
- inline for (@typeInfo(WindowsEnvironStrings).@"struct".fields) |field| {
14927
- const field_name_w = comptime std.unicode.wtf8ToWtf16LeStringLiteral(field.name);
14928
- if (windows.eqlIgnoreCaseWtf16(key_w, field_name_w)) @field(result, field.name) = value_w;
14929
+ inline for (@typeInfo(WindowsEnvironStrings).@"struct".field_names) |field_name| {
14930
+ const field_name_w = comptime std.unicode.wtf8ToWtf16LeStringLiteral(field_name);
14931
+ if (windows.eqlIgnoreCaseWtf16(key_w, field_name_w)) @field(result, field_name) = value_w;
14929
14932
  }
14930
14933
  }
14931
14934
 
@@ -16190,7 +16193,7 @@ fn windowsCreateProcessPathExt(
16190
16193
  }
16191
16194
  var io_status: windows.IO_STATUS_BLOCK = undefined;
16192
16195
 
16193
- const num_supported_pathext = @typeInfo(process.WindowsExtension).@"enum".fields.len;
16196
+ const num_supported_pathext = @typeInfo(process.WindowsExtension).@"enum".field_names.len;
16194
16197
  var pathext_seen: [num_supported_pathext]bool = @splat(false);
16195
16198
  var any_pathext_seen = false;
16196
16199
  var unappended_exists = false;
@@ -16435,8 +16438,8 @@ fn windowsCreateProcess(
16435
16438
  fn windowsCreateProcessSupportsExtension(ext: []const u16) ?process.WindowsExtension {
16436
16439
  comptime {
16437
16440
  // Ensures keeping this function in sync with the enum.
16438
- const fields = @typeInfo(process.WindowsExtension).@"enum".fields;
16439
- assert(fields.len == 4);
16441
+ const field_names = @typeInfo(process.WindowsExtension).@"enum".field_names;
16442
+ assert(field_names.len == 4);
16440
16443
  assert(@intFromEnum(process.WindowsExtension.bat) == 0);
16441
16444
  assert(@intFromEnum(process.WindowsExtension.cmd) == 1);
16442
16445
  assert(@intFromEnum(process.WindowsExtension.com) == 2);
package/std/Io/Uring.zig CHANGED
@@ -5984,9 +5984,9 @@ fn socket(
5984
5984
  };
5985
5985
  errdefer ev.closeAsync(socket_fd);
5986
5986
 
5987
- if (options.ip6_only) {
5987
+ if (options.ip6_only) |ip6_only| {
5988
5988
  if (linux.IPV6 == void) return error.OptionUnsupported;
5989
- try ev.setsockopt(cancel_region, socket_fd, linux.IPPROTO.IPV6, linux.IPV6.V6ONLY, 1);
5989
+ try ev.setsockopt(cancel_region, socket_fd, linux.IPPROTO.IPV6, linux.IPV6.V6ONLY, @intFromBool(ip6_only));
5990
5990
  }
5991
5991
 
5992
5992
  return socket_fd;
package/std/Io/Writer.zig CHANGED
@@ -620,14 +620,14 @@ pub fn print(w: *Writer, comptime fmt: []const u8, args: anytype) Error!void {
620
620
  @compileError("expected tuple or struct argument, found " ++ @typeName(ArgsType));
621
621
  }
622
622
 
623
- const fields_info = args_type_info.@"struct".fields;
623
+ const field_names = args_type_info.@"struct".field_names;
624
624
  const max_format_args = @typeInfo(std.fmt.ArgSetType).int.bits;
625
- if (fields_info.len > max_format_args) {
625
+ if (field_names.len > max_format_args) {
626
626
  @compileError("32 arguments max are supported per format call");
627
627
  }
628
628
 
629
629
  @setEvalBranchQuota(@as(comptime_int, fmt.len) * 1000); // NOTE: We're upcasting as 16-bit usize overflows.
630
- comptime var arg_state: std.fmt.ArgState = .{ .args_len = fields_info.len };
630
+ comptime var arg_state: std.fmt.ArgState = .{ .args_len = field_names.len };
631
631
  comptime var i = 0;
632
632
  comptime var literal: []const u8 = "";
633
633
  inline while (true) {
@@ -728,7 +728,7 @@ pub fn print(w: *Writer, comptime fmt: []const u8, args: anytype) Error!void {
728
728
  .width = width,
729
729
  .precision = precision,
730
730
  },
731
- @field(args, fields_info[arg_to_print].name),
731
+ @field(args, field_names[arg_to_print]),
732
732
  std.options.fmt_max_depth,
733
733
  );
734
734
  }
@@ -1290,7 +1290,7 @@ pub fn printValue(
1290
1290
  .@"enum" => |info| {
1291
1291
  if (!is_any and fmt.len != 0) invalidFmtError(fmt, value);
1292
1292
  optionsForbidden(options);
1293
- if (info.is_exhaustive) {
1293
+ if (info.mode == .exhaustive) {
1294
1294
  return printEnumExhaustive(w, value);
1295
1295
  } else {
1296
1296
  return printEnumNonexhaustive(w, value);
@@ -1309,9 +1309,9 @@ pub fn printValue(
1309
1309
  try w.writeAll(".{ .");
1310
1310
  try w.writeAll(@tagName(@as(UnionTagType, value)));
1311
1311
  try w.writeAll(" = ");
1312
- inline for (info.fields) |u_field| {
1313
- if (value == @field(UnionTagType, u_field.name)) {
1314
- try w.printValue(ANY, options, @field(value, u_field.name), max_depth - 1);
1312
+ inline for (info.field_names) |u_field_name| {
1313
+ if (value == @field(UnionTagType, u_field_name)) {
1314
+ try w.printValue(ANY, options, @field(value, u_field_name), max_depth - 1);
1315
1315
  }
1316
1316
  }
1317
1317
  try w.writeAll(" }");
@@ -1320,14 +1320,14 @@ pub fn printValue(
1320
1320
  return w.writeAll(".{ ... }");
1321
1321
  },
1322
1322
  .@"extern", .@"packed" => {
1323
- if (info.fields.len == 0) return w.writeAll(".{}");
1323
+ if (info.field_names.len == 0) return w.writeAll(".{}");
1324
1324
  try w.writeAll(".{ ");
1325
- inline for (info.fields, 1..) |field, i| {
1325
+ inline for (info.field_names, 1..) |field_name, i| {
1326
1326
  try w.writeByte('.');
1327
- try w.writeAll(field.name);
1327
+ try w.writeAll(field_name);
1328
1328
  try w.writeAll(" = ");
1329
- try w.printValue(ANY, options, @field(value, field.name), max_depth - 1);
1330
- try w.writeAll(if (i < info.fields.len) ", " else " }");
1329
+ try w.printValue(ANY, options, @field(value, field_name), max_depth - 1);
1330
+ try w.writeAll(if (i < info.field_names.len) ", " else " }");
1331
1331
  }
1332
1332
  },
1333
1333
  }
@@ -1344,13 +1344,13 @@ pub fn printValue(
1344
1344
  return;
1345
1345
  }
1346
1346
  try w.writeAll(".{");
1347
- inline for (info.fields, 0..) |f, i| {
1347
+ inline for (info.field_names, 0..) |f_name, i| {
1348
1348
  if (i == 0) {
1349
1349
  try w.writeAll(" ");
1350
1350
  } else {
1351
1351
  try w.writeAll(", ");
1352
1352
  }
1353
- try w.printValue(ANY, options, @field(value, f.name), max_depth - 1);
1353
+ try w.printValue(ANY, options, @field(value, f_name), max_depth - 1);
1354
1354
  }
1355
1355
  try w.writeAll(" }");
1356
1356
  return;
@@ -1360,15 +1360,15 @@ pub fn printValue(
1360
1360
  return;
1361
1361
  }
1362
1362
  try w.writeAll(".{");
1363
- inline for (info.fields, 0..) |f, i| {
1363
+ inline for (info.field_names, 0..) |f_name, i| {
1364
1364
  if (i == 0) {
1365
1365
  try w.writeAll(" .");
1366
1366
  } else {
1367
1367
  try w.writeAll(", .");
1368
1368
  }
1369
- try w.writeAll(f.name);
1369
+ try w.writeAll(f_name);
1370
1370
  try w.writeAll(" = ");
1371
- try w.printValue(ANY, options, @field(value, f.name), max_depth - 1);
1371
+ try w.printValue(ANY, options, @field(value, f_name), max_depth - 1);
1372
1372
  }
1373
1373
  try w.writeAll(" }");
1374
1374
  },
package/std/Io/net.zig CHANGED
@@ -281,7 +281,9 @@ pub const IpAddress = union(enum) {
281
281
  /// The socket is restricted to sending and receiving IPv6 packets only.
282
282
  /// In this case, an IPv4 and an IPv6 application can bind to a single port
283
283
  /// at the same time.
284
- ip6_only: bool = false,
284
+ ///
285
+ /// The default is determined by system configuration.
286
+ ip6_only: ?bool = null,
285
287
  /// Allow the socket to send datagrams to broadcast addresses.
286
288
  /// When not enabled any attempt to send datagrams to a broadcast address
287
289
  /// will fail with `error.AccessDenied`
package/std/Io.zig CHANGED
@@ -396,12 +396,13 @@ pub const Operation = union(enum) {
396
396
  };
397
397
 
398
398
  pub const Result = Result: {
399
- const operation_fields = @typeInfo(Operation).@"union".fields;
400
- var field_names: [operation_fields.len][]const u8 = undefined;
401
- var field_types: [operation_fields.len]type = undefined;
402
- for (operation_fields, &field_names, &field_types) |field, *field_name, *field_type| {
403
- field_name.* = field.name;
404
- field_type.* = if (field.type == noreturn) noreturn else field.type.Result;
399
+ const operation_info = @typeInfo(Operation).@"union";
400
+ const operation_count = operation_info.field_names.len;
401
+ var field_names: [operation_count][]const u8 = undefined;
402
+ var field_types: [operation_count]type = undefined;
403
+ for (operation_info.field_names, operation_info.field_types, &field_names, &field_types) |f_name, f_type, *field_name, *field_type| {
404
+ field_name.* = f_name;
405
+ field_type.* = if (f_type == noreturn) noreturn else f_type.Result;
405
406
  }
406
407
  break :Result @Union(.auto, Tag, &field_names, &field_types, &@splat(.{}));
407
408
  };
package/std/Progress.zig CHANGED
@@ -867,8 +867,8 @@ const TreeSymbol = enum {
867
867
 
868
868
  fn maxByteLen(symbol: TreeSymbol) usize {
869
869
  var max: usize = 0;
870
- inline for (@typeInfo(Encoding).@"enum".fields) |field| {
871
- const len = symbol.bytes(@field(Encoding, field.name)).len;
870
+ inline for (@typeInfo(Encoding).@"enum".field_names) |field_name| {
871
+ const len = symbol.bytes(@field(Encoding, field_name)).len;
872
872
  max = @max(max, len);
873
873
  }
874
874
  return max;
@@ -291,7 +291,7 @@ pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
291
291
 
292
292
  pub const all_features = blk: {
293
293
  @setEvalBranchQuota(2000);
294
- const len = @typeInfo(Feature).@"enum".fields.len;
294
+ const len = @typeInfo(Feature).@"enum".field_names.len;
295
295
  std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
296
296
  var result: [len]CpuFeature = undefined;
297
297
  result[@intFromEnum(Feature.a320)] = .{
@@ -2019,7 +2019,7 @@ pub const all_features = blk: {
2019
2019
  const ti = @typeInfo(Feature);
2020
2020
  for (&result, 0..) |*elem, i| {
2021
2021
  elem.index = i;
2022
- elem.name = ti.@"enum".fields[i].name;
2022
+ elem.name = ti.@"enum".field_names[i];
2023
2023
  }
2024
2024
  break :blk result;
2025
2025
  };
@@ -17,7 +17,7 @@ pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
17
17
  pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
18
18
 
19
19
  pub const all_features = blk: {
20
- const len = @typeInfo(Feature).@"enum".fields.len;
20
+ const len = @typeInfo(Feature).@"enum".field_names.len;
21
21
  std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
22
22
  var result: [len]CpuFeature = undefined;
23
23
  result[@intFromEnum(Feature.bwx)] = .{
@@ -43,7 +43,7 @@ pub const all_features = blk: {
43
43
  const ti = @typeInfo(Feature);
44
44
  for (&result, 0..) |*elem, i| {
45
45
  elem.index = i;
46
- elem.name = ti.@"enum".fields[i].name;
46
+ elem.name = ti.@"enum".field_names[i];
47
47
  }
48
48
  break :blk result;
49
49
  };
@@ -268,7 +268,7 @@ pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
268
268
 
269
269
  pub const all_features = blk: {
270
270
  @setEvalBranchQuota(2000);
271
- const len = @typeInfo(Feature).@"enum".fields.len;
271
+ const len = @typeInfo(Feature).@"enum".field_names.len;
272
272
  std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
273
273
  var result: [len]CpuFeature = undefined;
274
274
  result[@intFromEnum(Feature.@"1024_addressable_vgprs")] = .{
@@ -1877,7 +1877,7 @@ pub const all_features = blk: {
1877
1877
  const ti = @typeInfo(Feature);
1878
1878
  for (&result, 0..) |*elem, i| {
1879
1879
  elem.index = i;
1880
- elem.name = ti.@"enum".fields[i].name;
1880
+ elem.name = ti.@"enum".field_names[i];
1881
1881
  }
1882
1882
  break :blk result;
1883
1883
  };
@@ -14,7 +14,7 @@ pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
14
14
  pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
15
15
 
16
16
  pub const all_features = blk: {
17
- const len = @typeInfo(Feature).@"enum".fields.len;
17
+ const len = @typeInfo(Feature).@"enum".field_names.len;
18
18
  std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
19
19
  var result: [len]CpuFeature = undefined;
20
20
  result[@intFromEnum(Feature.norm)] = .{
@@ -25,7 +25,7 @@ pub const all_features = blk: {
25
25
  const ti = @typeInfo(Feature);
26
26
  for (&result, 0..) |*elem, i| {
27
27
  elem.index = i;
28
- elem.name = ti.@"enum".fields[i].name;
28
+ elem.name = ti.@"enum".field_names[i];
29
29
  }
30
30
  break :blk result;
31
31
  };
@@ -215,7 +215,7 @@ pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
215
215
 
216
216
  pub const all_features = blk: {
217
217
  @setEvalBranchQuota(10000);
218
- const len = @typeInfo(Feature).@"enum".fields.len;
218
+ const len = @typeInfo(Feature).@"enum".field_names.len;
219
219
  std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
220
220
  var result: [len]CpuFeature = undefined;
221
221
  result[@intFromEnum(Feature.@"32bit")] = .{
@@ -1736,7 +1736,7 @@ pub const all_features = blk: {
1736
1736
  const ti = @typeInfo(Feature);
1737
1737
  for (&result, 0..) |*elem, i| {
1738
1738
  elem.index = i;
1739
- elem.name = ti.@"enum".fields[i].name;
1739
+ elem.name = ti.@"enum".field_names[i];
1740
1740
  }
1741
1741
  break :blk result;
1742
1742
  };