@zigc/lib 0.16.0-test.1 → 0.17.0-dev.27

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 (253) hide show
  1. package/LICENSE +19 -0
  2. package/c/math.zig +148 -35
  3. package/c/stropts.zig +17 -0
  4. package/c.zig +1 -0
  5. package/compiler/aro/aro/Attribute/names.zig +604 -589
  6. package/compiler/aro/aro/Attribute.zig +202 -116
  7. package/compiler/aro/aro/Builtins/common.zig +874 -863
  8. package/compiler/aro/aro/Builtins/eval.zig +15 -7
  9. package/compiler/aro/aro/Builtins.zig +0 -1
  10. package/compiler/aro/aro/CodeGen.zig +3 -1
  11. package/compiler/aro/aro/Compilation.zig +120 -97
  12. package/compiler/aro/aro/Diagnostics.zig +21 -17
  13. package/compiler/aro/aro/Driver/GCCDetector.zig +635 -0
  14. package/compiler/aro/aro/Driver.zig +124 -50
  15. package/compiler/aro/aro/LangOpts.zig +12 -2
  16. package/compiler/aro/aro/Parser/Diagnostic.zig +79 -19
  17. package/compiler/aro/aro/Parser.zig +336 -142
  18. package/compiler/aro/aro/Preprocessor/Diagnostic.zig +21 -0
  19. package/compiler/aro/aro/Preprocessor.zig +127 -56
  20. package/compiler/aro/aro/Target.zig +17 -12
  21. package/compiler/aro/aro/Tokenizer.zig +31 -14
  22. package/compiler/aro/aro/Toolchain.zig +4 -7
  23. package/compiler/aro/aro/Tree.zig +178 -148
  24. package/compiler/aro/aro/TypeStore.zig +82 -24
  25. package/compiler/aro/aro/Value.zig +13 -17
  26. package/compiler/aro/aro/features.zig +1 -0
  27. package/compiler/aro/aro/pragmas/once.zig +0 -1
  28. package/compiler/aro/aro/record_layout.zig +3 -3
  29. package/compiler/aro/assembly_backend/x86_64.zig +3 -4
  30. package/compiler/aro/backend/Assembly.zig +1 -2
  31. package/compiler/aro/backend/Interner.zig +2 -2
  32. package/compiler/aro/backend/Ir.zig +100 -92
  33. package/compiler/aro/include/ptrcheck.h +49 -0
  34. package/compiler/aro/main.zig +26 -10
  35. package/compiler/build_runner.zig +1 -0
  36. package/compiler/objdump.zig +93 -0
  37. package/compiler/reduce.zig +5 -1
  38. package/compiler/resinator/compile.zig +2 -2
  39. package/compiler/resinator/main.zig +7 -1
  40. package/compiler/resinator/preprocess.zig +1 -3
  41. package/compiler/std-docs.zig +8 -1
  42. package/compiler/test_runner.zig +194 -62
  43. package/compiler/translate-c/MacroTranslator.zig +80 -11
  44. package/compiler/translate-c/PatternList.zig +1 -9
  45. package/compiler/translate-c/Scope.zig +43 -6
  46. package/compiler/translate-c/Translator.zig +364 -126
  47. package/compiler/translate-c/ast.zig +19 -11
  48. package/compiler/translate-c/main.zig +75 -16
  49. package/compiler_rt/cos.zig +141 -52
  50. package/compiler_rt/divmodei4.zig +40 -17
  51. package/compiler_rt/exp.zig +1 -4
  52. package/compiler_rt/exp2.zig +1 -4
  53. package/compiler_rt/exp_f128.zig +377 -0
  54. package/compiler_rt/limb64.zig +1126 -0
  55. package/compiler_rt/long_double.zig +37 -0
  56. package/compiler_rt/mulXi3.zig +1 -1
  57. package/compiler_rt/mulo.zig +6 -1
  58. package/compiler_rt/rem_pio2l.zig +173 -0
  59. package/compiler_rt/sin.zig +140 -55
  60. package/compiler_rt/sincos.zig +279 -72
  61. package/compiler_rt/ssp.zig +1 -1
  62. package/compiler_rt/tan.zig +118 -47
  63. package/compiler_rt/trig.zig +256 -6
  64. package/compiler_rt/udivmodei4.zig +28 -0
  65. package/compiler_rt.zig +2 -0
  66. package/fuzzer.zig +855 -307
  67. package/libc/musl/src/math/pow.c +343 -0
  68. package/package.json +1 -1
  69. package/std/Build/Fuzz.zig +6 -19
  70. package/std/Build/Module.zig +1 -1
  71. package/std/Build/Step/CheckObject.zig +3 -3
  72. package/std/Build/Step/Compile.zig +18 -0
  73. package/std/Build/Step/ConfigHeader.zig +49 -33
  74. package/std/Build/Step/InstallArtifact.zig +18 -0
  75. package/std/Build/Step/Run.zig +536 -87
  76. package/std/Build/Step/TranslateC.zig +0 -6
  77. package/std/Build/Step.zig +8 -15
  78. package/std/Build/WebServer.zig +29 -17
  79. package/std/Build/abi.zig +47 -11
  80. package/std/Build.zig +17 -14
  81. package/std/Io/Dispatch.zig +2 -0
  82. package/std/Io/File/Reader.zig +3 -1
  83. package/std/Io/File.zig +1 -0
  84. package/std/Io/Kqueue.zig +2 -2
  85. package/std/Io/Threaded.zig +181 -143
  86. package/std/Io/Uring.zig +2 -1
  87. package/std/Io/Writer.zig +41 -41
  88. package/std/Io.zig +970 -2
  89. package/std/Target.zig +3 -2
  90. package/std/Thread.zig +8 -3
  91. package/std/array_hash_map.zig +96 -555
  92. package/std/array_list.zig +22 -31
  93. package/std/bit_set.zig +22 -6
  94. package/std/builtin/assembly.zig +68 -0
  95. package/std/c.zig +17 -17
  96. package/std/compress/flate/Compress.zig +3 -3
  97. package/std/crypto/Certificate/Bundle.zig +15 -1
  98. package/std/crypto/codecs/asn1.zig +33 -18
  99. package/std/crypto/codecs/base64_hex_ct.zig +14 -4
  100. package/std/debug/Dwarf.zig +29 -9
  101. package/std/debug/Info.zig +4 -0
  102. package/std/debug/MachOFile.zig +46 -8
  103. package/std/debug/Pdb.zig +539 -36
  104. package/std/debug/SelfInfo/Elf.zig +19 -18
  105. package/std/debug/SelfInfo/MachO.zig +18 -7
  106. package/std/debug/SelfInfo/Windows.zig +138 -36
  107. package/std/debug.zig +179 -65
  108. package/std/enums.zig +25 -19
  109. package/std/heap/ArenaAllocator.zig +145 -154
  110. package/std/heap/debug_allocator.zig +7 -7
  111. package/std/http/Client.zig +10 -6
  112. package/std/http.zig +11 -9
  113. package/std/json/Stringify.zig +3 -3
  114. package/std/json/dynamic.zig +4 -4
  115. package/std/math/big/int.zig +16 -17
  116. package/std/mem/Allocator.zig +4 -5
  117. package/std/mem.zig +48 -0
  118. package/std/os/emscripten.zig +2 -18
  119. package/std/os/linux/arc.zig +144 -0
  120. package/std/os/linux.zig +21 -4
  121. package/std/os/windows.zig +2 -2
  122. package/std/pdb.zig +143 -4
  123. package/std/posix.zig +6 -12
  124. package/std/priority_dequeue.zig +13 -12
  125. package/std/priority_queue.zig +5 -4
  126. package/std/process/Child.zig +1 -1
  127. package/std/process/Environ.zig +1 -1
  128. package/std/start.zig +17 -4
  129. package/std/std.zig +19 -6
  130. package/std/testing/FailingAllocator.zig +4 -4
  131. package/std/testing/Smith.zig +37 -2
  132. package/std/zig/Ast/Render.zig +186 -458
  133. package/std/zig/Ast.zig +0 -4
  134. package/std/zig/AstGen.zig +44 -7
  135. package/std/zig/AstSmith.zig +2602 -0
  136. package/std/zig/Client.zig +8 -3
  137. package/std/zig/Parse.zig +83 -74
  138. package/std/zig/Server.zig +26 -0
  139. package/std/zig/Zir.zig +17 -0
  140. package/std/zig/c_translation/helpers.zig +14 -9
  141. package/std/zig/llvm/Builder.zig +107 -48
  142. package/std/zig/system.zig +20 -4
  143. package/std/zig/tokenizer.zig +2 -1
  144. package/std/zig.zig +6 -0
  145. package/compiler/aro/aro/Driver/Filesystem.zig +0 -241
  146. package/libc/mingw/complex/cabs.c +0 -48
  147. package/libc/mingw/complex/cabsf.c +0 -48
  148. package/libc/mingw/complex/cacos.c +0 -50
  149. package/libc/mingw/complex/cacosf.c +0 -50
  150. package/libc/mingw/complex/carg.c +0 -48
  151. package/libc/mingw/complex/cargf.c +0 -48
  152. package/libc/mingw/complex/casin.c +0 -50
  153. package/libc/mingw/complex/casinf.c +0 -50
  154. package/libc/mingw/complex/catan.c +0 -50
  155. package/libc/mingw/complex/catanf.c +0 -50
  156. package/libc/mingw/complex/ccos.c +0 -50
  157. package/libc/mingw/complex/ccosf.c +0 -50
  158. package/libc/mingw/complex/cexp.c +0 -48
  159. package/libc/mingw/complex/cexpf.c +0 -48
  160. package/libc/mingw/complex/cimag.c +0 -48
  161. package/libc/mingw/complex/cimagf.c +0 -48
  162. package/libc/mingw/complex/clog.c +0 -48
  163. package/libc/mingw/complex/clog10.c +0 -49
  164. package/libc/mingw/complex/clog10f.c +0 -49
  165. package/libc/mingw/complex/clogf.c +0 -48
  166. package/libc/mingw/complex/conj.c +0 -48
  167. package/libc/mingw/complex/conjf.c +0 -48
  168. package/libc/mingw/complex/cpow.c +0 -48
  169. package/libc/mingw/complex/cpowf.c +0 -48
  170. package/libc/mingw/complex/cproj.c +0 -48
  171. package/libc/mingw/complex/cprojf.c +0 -48
  172. package/libc/mingw/complex/creal.c +0 -48
  173. package/libc/mingw/complex/crealf.c +0 -48
  174. package/libc/mingw/complex/csin.c +0 -50
  175. package/libc/mingw/complex/csinf.c +0 -50
  176. package/libc/mingw/complex/csqrt.c +0 -48
  177. package/libc/mingw/complex/csqrtf.c +0 -48
  178. package/libc/mingw/complex/ctan.c +0 -50
  179. package/libc/mingw/complex/ctanf.c +0 -50
  180. package/libc/mingw/math/arm/s_rint.c +0 -86
  181. package/libc/mingw/math/arm/s_rintf.c +0 -51
  182. package/libc/mingw/math/arm/sincos.S +0 -30
  183. package/libc/mingw/math/arm-common/sincosl.c +0 -13
  184. package/libc/mingw/math/arm64/rint.c +0 -12
  185. package/libc/mingw/math/arm64/rintf.c +0 -12
  186. package/libc/mingw/math/arm64/sincos.S +0 -32
  187. package/libc/mingw/math/bsd_private_base.h +0 -148
  188. package/libc/mingw/math/fdiml.c +0 -24
  189. package/libc/mingw/math/frexpf.c +0 -13
  190. package/libc/mingw/math/frexpl.c +0 -71
  191. package/libc/mingw/math/x86/acosf.c +0 -29
  192. package/libc/mingw/math/x86/atanf.c +0 -23
  193. package/libc/mingw/math/x86/atanl.c +0 -18
  194. package/libc/mingw/math/x86/cos.def.h +0 -65
  195. package/libc/mingw/math/x86/cosl.c +0 -46
  196. package/libc/mingw/math/x86/cosl_internal.S +0 -55
  197. package/libc/mingw/math/x86/ldexp.c +0 -23
  198. package/libc/mingw/math/x86/scalbn.S +0 -41
  199. package/libc/mingw/math/x86/scalbnf.S +0 -40
  200. package/libc/mingw/math/x86/sin.def.h +0 -65
  201. package/libc/mingw/math/x86/sinl.c +0 -46
  202. package/libc/mingw/math/x86/sinl_internal.S +0 -58
  203. package/libc/mingw/math/x86/tanl.S +0 -62
  204. package/libc/mingw/misc/btowc.c +0 -28
  205. package/libc/mingw/misc/wcstof.c +0 -66
  206. package/libc/mingw/misc/wcstoimax.c +0 -132
  207. package/libc/mingw/misc/wcstoumax.c +0 -126
  208. package/libc/mingw/misc/wctob.c +0 -29
  209. package/libc/mingw/misc/winbs_uint64.c +0 -6
  210. package/libc/mingw/misc/winbs_ulong.c +0 -6
  211. package/libc/mingw/misc/winbs_ushort.c +0 -6
  212. package/libc/mingw/stdio/_Exit.c +0 -10
  213. package/libc/mingw/stdio/_findfirst64i32.c +0 -21
  214. package/libc/mingw/stdio/_findnext64i32.c +0 -21
  215. package/libc/mingw/stdio/_fstat64i32.c +0 -37
  216. package/libc/mingw/stdio/_stat64i32.c +0 -37
  217. package/libc/mingw/stdio/_wfindfirst64i32.c +0 -21
  218. package/libc/mingw/stdio/_wfindnext64i32.c +0 -21
  219. package/libc/mingw/stdio/_wstat64i32.c +0 -37
  220. package/libc/musl/src/legacy/isastream.c +0 -7
  221. package/libc/musl/src/legacy/valloc.c +0 -8
  222. package/libc/musl/src/math/__cosl.c +0 -96
  223. package/libc/musl/src/math/__sinl.c +0 -78
  224. package/libc/musl/src/math/__tanl.c +0 -143
  225. package/libc/musl/src/math/aarch64/lrint.c +0 -10
  226. package/libc/musl/src/math/aarch64/lrintf.c +0 -10
  227. package/libc/musl/src/math/aarch64/rintf.c +0 -7
  228. package/libc/musl/src/math/cosl.c +0 -39
  229. package/libc/musl/src/math/fdim.c +0 -10
  230. package/libc/musl/src/math/fdimf.c +0 -10
  231. package/libc/musl/src/math/fdiml.c +0 -18
  232. package/libc/musl/src/math/finite.c +0 -7
  233. package/libc/musl/src/math/finitef.c +0 -7
  234. package/libc/musl/src/math/frexp.c +0 -23
  235. package/libc/musl/src/math/frexpf.c +0 -23
  236. package/libc/musl/src/math/frexpl.c +0 -29
  237. package/libc/musl/src/math/i386/lrint.c +0 -8
  238. package/libc/musl/src/math/i386/lrintf.c +0 -8
  239. package/libc/musl/src/math/i386/rintf.c +0 -7
  240. package/libc/musl/src/math/lrint.c +0 -72
  241. package/libc/musl/src/math/lrintf.c +0 -8
  242. package/libc/musl/src/math/powerpc64/lrint.c +0 -16
  243. package/libc/musl/src/math/powerpc64/lrintf.c +0 -16
  244. package/libc/musl/src/math/rintf.c +0 -30
  245. package/libc/musl/src/math/s390x/rintf.c +0 -15
  246. package/libc/musl/src/math/sincosl.c +0 -60
  247. package/libc/musl/src/math/sinl.c +0 -41
  248. package/libc/musl/src/math/tanl.c +0 -29
  249. package/libc/musl/src/math/x32/lrint.s +0 -5
  250. package/libc/musl/src/math/x32/lrintf.s +0 -5
  251. package/libc/musl/src/math/x86_64/lrint.c +0 -8
  252. package/libc/musl/src/math/x86_64/lrintf.c +0 -8
  253. package/libc/wasi/libc-bottom-half/sources/reallocarray.c +0 -14
@@ -40,8 +40,9 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
40
40
  }
41
41
 
42
42
  /// Free memory used by the dequeue.
43
- pub fn deinit(self: Self, allocator: Allocator) void {
43
+ pub fn deinit(self: *Self, allocator: Allocator) void {
44
44
  allocator.free(self.items);
45
+ self.* = undefined;
45
46
  }
46
47
 
47
48
  /// Insert a new element, maintaining priority.
@@ -77,7 +78,7 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
77
78
  return 1 == @clz(index +% 1) & 1;
78
79
  }
79
80
 
80
- fn nextIsMinLayer(self: Self) bool {
81
+ fn nextIsMinLayer(self: *const Self) bool {
81
82
  return isMinLayer(self.len);
82
83
  }
83
84
 
@@ -86,7 +87,7 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
86
87
  min_layer: bool,
87
88
  };
88
89
 
89
- fn getStartForSiftUp(self: Self, child: T, index: usize) StartIndexAndLayer {
90
+ fn getStartForSiftUp(self: *const Self, child: T, index: usize) StartIndexAndLayer {
90
91
  const child_index = index;
91
92
  const parent_index = parentIndex(child_index);
92
93
  const parent = self.items[parent_index];
@@ -136,20 +137,20 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
136
137
 
137
138
  /// Look at the smallest element in the dequeue. Returns
138
139
  /// `null` if empty.
139
- pub fn peekMin(self: *Self) ?T {
140
+ pub fn peekMin(self: *const Self) ?T {
140
141
  return if (self.len > 0) self.items[0] else null;
141
142
  }
142
143
 
143
144
  /// Look at the largest element in the dequeue. Returns
144
145
  /// `null` if empty.
145
- pub fn peekMax(self: *Self) ?T {
146
+ pub fn peekMax(self: *const Self) ?T {
146
147
  if (self.len == 0) return null;
147
148
  if (self.len == 1) return self.items[0];
148
149
  if (self.len == 2) return self.items[1];
149
150
  return self.bestItemAtIndices(1, 2, .gt).item;
150
151
  }
151
152
 
152
- fn maxIndex(self: Self) ?usize {
153
+ fn maxIndex(self: *const Self) ?usize {
153
154
  if (self.len == 0) return null;
154
155
  if (self.len == 1) return 0;
155
156
  if (self.len == 2) return 1;
@@ -261,14 +262,14 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
261
262
  index: usize,
262
263
  };
263
264
 
264
- fn getItem(self: Self, index: usize) ItemAndIndex {
265
+ fn getItem(self: *const Self, index: usize) ItemAndIndex {
265
266
  return .{
266
267
  .item = self.items[index],
267
268
  .index = index,
268
269
  };
269
270
  }
270
271
 
271
- fn bestItem(self: Self, item1: ItemAndIndex, item2: ItemAndIndex, target_order: Order) ItemAndIndex {
272
+ fn bestItem(self: *const Self, item1: ItemAndIndex, item2: ItemAndIndex, target_order: Order) ItemAndIndex {
272
273
  if (compareFn(self.context, item1.item, item2.item) == target_order) {
273
274
  return item1;
274
275
  } else {
@@ -276,13 +277,13 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
276
277
  }
277
278
  }
278
279
 
279
- fn bestItemAtIndices(self: Self, index1: usize, index2: usize, target_order: Order) ItemAndIndex {
280
+ fn bestItemAtIndices(self: *const Self, index1: usize, index2: usize, target_order: Order) ItemAndIndex {
280
281
  const item1 = self.getItem(index1);
281
282
  const item2 = self.getItem(index2);
282
283
  return self.bestItem(item1, item2, target_order);
283
284
  }
284
285
 
285
- fn bestDescendent(self: Self, first_child_index: usize, first_grandchild_index: usize, target_order: Order) ItemAndIndex {
286
+ fn bestDescendent(self: *const Self, first_child_index: usize, first_grandchild_index: usize, target_order: Order) ItemAndIndex {
286
287
  const second_child_index = first_child_index + 1;
287
288
  if (first_grandchild_index >= self.len) {
288
289
  // No grandchildren, find the best child (second may not exist)
@@ -314,13 +315,13 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
314
315
  }
315
316
 
316
317
  /// Return the number of elements remaining in the dequeue
317
- pub fn count(self: Self) usize {
318
+ pub fn count(self: *const Self) usize {
318
319
  return self.len;
319
320
  }
320
321
 
321
322
  /// Return the number of elements that can be added to the
322
323
  /// dequeue before more memory is allocated.
323
- pub fn capacity(self: Self) usize {
324
+ pub fn capacity(self: *const Self) usize {
324
325
  return self.items.len;
325
326
  }
326
327
 
@@ -41,6 +41,7 @@ pub fn PriorityQueue(comptime T: type, comptime Context: type, comptime compareF
41
41
  /// Free memory used by the queue.
42
42
  pub fn deinit(self: *Self, allocator: Allocator) void {
43
43
  allocator.free(self.allocatedSlice());
44
+ self.* = undefined;
44
45
  }
45
46
 
46
47
  /// Insert a new element, maintaining priority.
@@ -78,7 +79,7 @@ pub fn PriorityQueue(comptime T: type, comptime Context: type, comptime compareF
78
79
 
79
80
  /// Look at the highest priority element in the queue. Returns
80
81
  /// `null` if empty.
81
- pub fn peek(self: *Self) ?T {
82
+ pub fn peek(self: *const Self) ?T {
82
83
  return if (self.items.len > 0) self.items[0] else null;
83
84
  }
84
85
 
@@ -117,19 +118,19 @@ pub fn PriorityQueue(comptime T: type, comptime Context: type, comptime compareF
117
118
 
118
119
  /// Return the number of elements remaining in the priority
119
120
  /// queue.
120
- pub fn count(self: Self) usize {
121
+ pub fn count(self: *const Self) usize {
121
122
  return self.items.len;
122
123
  }
123
124
 
124
125
  /// Return the number of elements that can be added to the
125
126
  /// queue before more memory is allocated.
126
- pub fn capacity(self: Self) usize {
127
+ pub fn capacity(self: *const Self) usize {
127
128
  return self.cap;
128
129
  }
129
130
 
130
131
  /// Returns a slice of all the items plus the extra capacity, whose memory
131
132
  /// contents are `undefined`.
132
- fn allocatedSlice(self: Self) []T {
133
+ fn allocatedSlice(self: *const Self) []T {
133
134
  // `items.len` is the length, not the capacity.
134
135
  return self.items.ptr[0..self.cap];
135
136
  }
@@ -94,7 +94,7 @@ pub const ResourceUsageStatistics = struct {
94
94
  pub const Term = union(enum) {
95
95
  exited: u8,
96
96
  signal: std.posix.SIG,
97
- stopped: u32,
97
+ stopped: std.posix.SIG,
98
98
  unknown: u32,
99
99
  };
100
100
 
@@ -24,7 +24,7 @@ pub const empty: Environ = .{ .block = .empty };
24
24
  /// operating system `void` is also used.
25
25
  pub const Block = switch (native_os) {
26
26
  .windows => GlobalBlock,
27
- .wasi => switch (builtin.link_libc) {
27
+ .wasi, .emscripten => switch (builtin.link_libc) {
28
28
  false => GlobalBlock,
29
29
  true => PosixBlock,
30
30
  },
package/std/start.zig CHANGED
@@ -631,6 +631,7 @@ inline fn callMainWithArgs(argc: usize, argv: [*][*:0]u8, envp: [:null]?[*:0]u8)
631
631
  if (std.Options.debug_threaded_io) |t| {
632
632
  if (@sizeOf(std.Io.Threaded.Argv0) != 0) t.argv0.value = argv[0];
633
633
  t.environ = .{ .process_environ = .{ .block = env_block } };
634
+ t.environ_initialized = env_block.isEmpty();
634
635
  }
635
636
  std.Thread.maybeAttachSignalStack();
636
637
  std.debug.maybeEnableSegfaultHandler();
@@ -664,10 +665,22 @@ fn main(c_argc: c_int, c_argv: [*][*:0]c_char, c_envp: [*:null]?[*:0]c_char) cal
664
665
 
665
666
  fn mainWithoutEnv(c_argc: c_int, c_argv: [*][*:0]c_char) callconv(.c) c_int {
666
667
  const argv = @as([*][*:0]u8, @ptrCast(c_argv))[0..@intCast(c_argc)];
667
- if (@sizeOf(std.Io.Threaded.Argv0) != 0) {
668
- if (std.Options.debug_threaded_io) |t| t.argv0.value = argv[0];
668
+ const environ: [:null]?[*:0]u8 = switch (builtin.os.tag) {
669
+ .wasi, .emscripten => environ: {
670
+ const c_environ = std.c.environ;
671
+ var env_count: usize = 0;
672
+ while (c_environ[env_count] != null) : (env_count += 1) {}
673
+ break :environ c_environ[0..env_count :null];
674
+ },
675
+ else => &.{},
676
+ };
677
+ const env_block: std.process.Environ.Block = .{ .slice = environ };
678
+ if (std.Options.debug_threaded_io) |t| {
679
+ if (@sizeOf(std.Io.Threaded.Argv0) != 0) t.argv0.value = argv[0];
680
+ t.environ = .{ .process_environ = .{ .block = env_block } };
681
+ t.environ_initialized = env_block.isEmpty();
669
682
  }
670
- return callMain(argv, .empty);
683
+ return callMain(argv, env_block);
671
684
  }
672
685
 
673
686
  /// General error message for a malformed return type
@@ -748,7 +761,7 @@ inline fn wrapMain(result: anytype) u8 {
748
761
  std.log.err("{t}", .{err});
749
762
  switch (native_os) {
750
763
  .freestanding, .other => {},
751
- else => if (@errorReturnTrace()) |trace| std.debug.dumpStackTrace(trace),
764
+ else => if (@errorReturnTrace()) |trace| std.debug.dumpErrorReturnTrace(trace),
752
765
  }
753
766
  return 1;
754
767
  };
package/std/std.zig CHANGED
@@ -1,7 +1,3 @@
1
- pub const ArrayHashMap = array_hash_map.ArrayHashMap;
2
- pub const ArrayHashMapUnmanaged = array_hash_map.ArrayHashMapUnmanaged;
3
- pub const AutoArrayHashMap = array_hash_map.AutoArrayHashMap;
4
- pub const AutoArrayHashMapUnmanaged = array_hash_map.AutoArrayHashMapUnmanaged;
5
1
  pub const AutoHashMap = hash_map.AutoHashMap;
6
2
  pub const AutoHashMapUnmanaged = hash_map.AutoHashMapUnmanaged;
7
3
  pub const BitStack = @import("BitStack.zig");
@@ -31,14 +27,19 @@ pub const SinglyLinkedList = @import("SinglyLinkedList.zig");
31
27
  pub const StaticBitSet = bit_set.StaticBitSet;
32
28
  pub const StringHashMap = hash_map.StringHashMap;
33
29
  pub const StringHashMapUnmanaged = hash_map.StringHashMapUnmanaged;
34
- pub const StringArrayHashMap = array_hash_map.StringArrayHashMap;
35
- pub const StringArrayHashMapUnmanaged = array_hash_map.StringArrayHashMapUnmanaged;
36
30
  pub const Target = @import("Target.zig");
37
31
  pub const Thread = @import("Thread.zig");
38
32
  pub const Treap = @import("treap.zig").Treap;
39
33
  pub const Tz = tz.Tz;
40
34
  pub const Uri = @import("Uri.zig");
41
35
 
36
+ /// Deprecated; use `array_hash_map.Custom`.
37
+ pub const ArrayHashMapUnmanaged = array_hash_map.Custom;
38
+ /// Deprecated; use `array_hash_map.Auto`.
39
+ pub const AutoArrayHashMapUnmanaged = array_hash_map.Auto;
40
+ /// Deprecated; use `array_hash_map.String`.
41
+ pub const StringArrayHashMapUnmanaged = array_hash_map.String;
42
+
42
43
  /// A contiguous, growable list of items in memory. This is a wrapper around a
43
44
  /// slice of `T` values.
44
45
  ///
@@ -164,6 +165,8 @@ pub const Options = struct {
164
165
  /// * `debug.dumpCurrentStackTrace`
165
166
  /// * `debug.writeStackTrace`
166
167
  /// * `debug.dumpStackTrace`
168
+ /// * `debug.writeErrorReturnTrace`
169
+ /// * `debug.dumpErrorReturnTrace`
167
170
  ///
168
171
  /// Stack traces can generally be collected and printed when debug info is stripped, but are
169
172
  /// often less useful since they usually cannot be mapped to source locations and/or have bad
@@ -177,6 +180,16 @@ pub const Options = struct {
177
180
  /// Allows disabling networking in std.Io implementations.
178
181
  networking: bool = true,
179
182
 
183
+ /// Whether or not `error.Unexpected` will print its value and a stack trace.
184
+ ///
185
+ /// If this happens the fix is to add the error code to the corresponding
186
+ /// switch expression, possibly introduce a new error in the error set, and
187
+ /// send a patch to Zig.
188
+ unexpected_error_tracing: bool = @import("builtin").mode == .Debug and switch (@import("builtin").zig_backend) {
189
+ .stage2_llvm, .stage2_x86_64 => true,
190
+ else => false,
191
+ },
192
+
180
193
  /// TODO This is a separate decl instead of a field as a workaround around
181
194
  /// compilation errors due to zig not being lazy enough.
182
195
  pub const logTerminalMode: fn () Io.Terminal.Mode = log.defaultTerminalMode;
@@ -65,7 +65,7 @@ fn alloc(
65
65
  if (self.alloc_index == self.fail_index) {
66
66
  if (!self.has_induced_failure) {
67
67
  const st = std.debug.captureCurrentStackTrace(.{ .first_address = return_address }, &self.stack_addresses);
68
- @memset(self.stack_addresses[@min(st.index, self.stack_addresses.len)..], 0);
68
+ @memset(self.stack_addresses[@min(st.return_addresses.len, self.stack_addresses.len)..], 0);
69
69
  self.has_induced_failure = true;
70
70
  }
71
71
  return null;
@@ -131,15 +131,15 @@ fn free(
131
131
  }
132
132
 
133
133
  /// Only valid once `has_induced_failure == true`
134
- pub fn getStackTrace(self: *FailingAllocator) std.builtin.StackTrace {
134
+ pub fn getStackTrace(self: *FailingAllocator) std.debug.StackTrace {
135
135
  std.debug.assert(self.has_induced_failure);
136
136
  var len: usize = 0;
137
137
  while (len < self.stack_addresses.len and self.stack_addresses[len] != 0) {
138
138
  len += 1;
139
139
  }
140
140
  return .{
141
- .instruction_addresses = &self.stack_addresses,
142
- .index = len,
141
+ .return_addresses = self.stack_addresses[0..len],
142
+ .skipped = if (len == self.stack_addresses.len) .unknown else .none,
143
143
  };
144
144
  }
145
145
 
@@ -205,6 +205,24 @@ pub noinline fn valueRangeLessThan(s: *Smith, T: type, at_least: T, less_than: T
205
205
  return s.valueRangeLessThanWithHash(T, at_least, less_than, firstHash());
206
206
  }
207
207
 
208
+ /// It is asserted `len` is nonzero.
209
+ /// It is asserted `len` fits within 64 bits.
210
+ //
211
+ // `noinline` to capture a unique return address
212
+ pub noinline fn index(s: *Smith, len: usize) usize {
213
+ @disableInstrumentation();
214
+ return s.indexWithHash(len, firstHash());
215
+ }
216
+
217
+ /// It is asserted that the weight of `false` is non-zero.
218
+ /// It is asserted that the weight of `true` is non-zero.
219
+ //
220
+ // `noinline` to capture a unique return address
221
+ pub noinline fn boolWeighted(s: *Smith, false_weight: u64, true_weight: u64) bool {
222
+ @disableInstrumentation();
223
+ return s.boolWeightedWithHash(false_weight, true_weight, firstHash());
224
+ }
225
+
208
226
  /// This is similar to `value(bool)` however it is gauraunteed to eventually
209
227
  /// return `true` and provides the fuzzer with an extra hint about the data.
210
228
  //
@@ -228,6 +246,7 @@ pub noinline fn eosWeighted(s: *Smith, weights: []const Weight) bool {
228
246
  /// This is similar to `value(bool)` however it is gauraunteed to eventually
229
247
  /// return `true` and provides the fuzzer with an extra hint about the data.
230
248
  ///
249
+ /// It is asserted that the weight of `false` is non-zero.
231
250
  /// It is asserted that the weight of `true` is non-zero.
232
251
  //
233
252
  // `noinline` to capture a unique return address
@@ -463,6 +482,24 @@ pub fn valueRangeLessThanWithHash(s: *Smith, T: type, at_least: T, less_than: T,
463
482
  return s.valueWeightedWithHash(T, &.{.rangeLessThan(T, at_least, less_than, 1)}, hash);
464
483
  }
465
484
 
485
+ /// It is asserted `len` is nonzero.
486
+ /// It is asserted `len` fits within 64 bits.
487
+ pub fn indexWithHash(s: *Smith, len: usize, hash: u32) usize {
488
+ @disableInstrumentation();
489
+ assert(len != 0);
490
+ return @intCast(s.valueWeightedWithHash(u64, &.{.rangeLessThan(u64, 0, @intCast(len), 1)}, hash));
491
+ }
492
+
493
+ /// It is asserted that the weight of `false` is non-zero.
494
+ /// It is asserted that the weight of `true` is non-zero.
495
+ pub fn boolWeightedWithHash(s: *Smith, false_weight: u64, true_weight: u64, hash: u32) bool {
496
+ @disableInstrumentation();
497
+ return s.valueWeightedWithHash(bool, &.{
498
+ .value(bool, false, false_weight),
499
+ .value(bool, true, true_weight),
500
+ }, hash);
501
+ }
502
+
466
503
  /// This is similar to `value(bool)` however it is gauraunteed to eventually
467
504
  /// return `true` and provides the fuzzer with an extra hint about the data.
468
505
  pub fn eosWithHash(s: *Smith, hash: u32) bool {
@@ -504,8 +541,6 @@ pub fn eosWeightedWithHash(s: *Smith, weights: []const Weight, hash: u32) bool {
504
541
  ///
505
542
  /// It is asserted that the weight of `false` is non-zero.
506
543
  /// It is asserted that the weight of `true` is non-zero.
507
- //
508
- // `noinline` to capture a unique return address
509
544
  pub fn eosWeightedSimpleWithHash(s: *Smith, false_weight: u64, true_weight: u64, hash: u32) bool {
510
545
  @disableInstrumentation();
511
546
  return s.eosWeightedWithHash(&.{