@zigc/lib 0.16.0 → 0.17.0-dev.135

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 (268) hide show
  1. package/c/fcntl.zig +6 -1
  2. package/c/inttypes.zig +0 -10
  3. package/c/math.zig +46 -122
  4. package/c/pthread.zig +57 -0
  5. package/c/search.zig +1 -27
  6. package/c/stdlib/drand48.zig +0 -57
  7. package/c/stdlib.zig +0 -100
  8. package/c/string.zig +20 -7
  9. package/c/strings.zig +0 -38
  10. package/c/unistd.zig +27 -26
  11. package/c/wchar.zig +10 -0
  12. package/c.zig +2 -2
  13. package/compiler/aro/aro/CodeGen.zig +5 -6
  14. package/compiler/aro/aro/Compilation.zig +17 -14
  15. package/compiler/aro/aro/Driver.zig +14 -13
  16. package/compiler/aro/aro/Parser.zig +20 -15
  17. package/compiler/aro/aro/Pragma.zig +3 -2
  18. package/compiler/aro/aro/Preprocessor.zig +9 -6
  19. package/compiler/aro/aro/pragmas/message.zig +3 -2
  20. package/compiler/aro/aro/text_literal.zig +3 -2
  21. package/compiler/aro/assembly_backend/x86_64.zig +4 -4
  22. package/compiler/build_runner.zig +0 -2
  23. package/compiler/reduce/Walk.zig +7 -7
  24. package/compiler/test_runner.zig +2 -2
  25. package/compiler/translate-c/Translator.zig +6 -2
  26. package/compiler/translate-c/main.zig +1 -1
  27. package/compiler_rt/cos.zig +0 -2
  28. package/compiler_rt/divmodei4.zig +40 -17
  29. package/compiler_rt/exp.zig +1 -6
  30. package/compiler_rt/exp2.zig +1 -6
  31. package/compiler_rt/exp_f128.zig +377 -0
  32. package/compiler_rt/fabs.zig +0 -2
  33. package/compiler_rt/fma.zig +0 -2
  34. package/compiler_rt/fmax.zig +0 -2
  35. package/compiler_rt/fmin.zig +0 -2
  36. package/compiler_rt/fmod.zig +0 -2
  37. package/compiler_rt/limb64.zig +876 -15
  38. package/compiler_rt/log.zig +0 -2
  39. package/compiler_rt/log10.zig +0 -2
  40. package/compiler_rt/log2.zig +0 -2
  41. package/compiler_rt/mulXi3.zig +1 -1
  42. package/compiler_rt/round.zig +0 -2
  43. package/compiler_rt/sin.zig +0 -2
  44. package/compiler_rt/sincos.zig +0 -2
  45. package/compiler_rt/sqrt.zig +0 -2
  46. package/compiler_rt/ssp.zig +1 -1
  47. package/compiler_rt/tan.zig +0 -2
  48. package/compiler_rt/trunc.zig +0 -2
  49. package/compiler_rt/udivmodei4.zig +28 -0
  50. package/fuzzer.zig +2 -0
  51. package/libc/include/aarch64-linux-any/asm/hwcap.h +1 -0
  52. package/libc/include/aarch64-linux-any/asm/unistd_64.h +1 -0
  53. package/libc/include/any-linux-any/asm-generic/errno.h +2 -0
  54. package/libc/include/any-linux-any/asm-generic/unistd.h +4 -1
  55. package/libc/include/any-linux-any/drm/amdgpu_drm.h +20 -6
  56. package/libc/include/any-linux-any/drm/amdxdna_accel.h +8 -0
  57. package/libc/include/any-linux-any/drm/drm_fourcc.h +6 -6
  58. package/libc/include/any-linux-any/drm/panfrost_drm.h +75 -1
  59. package/libc/include/any-linux-any/drm/panthor_drm.h +154 -3
  60. package/libc/include/any-linux-any/drm/rocket_accel.h +74 -24
  61. package/libc/include/any-linux-any/drm/xe_drm.h +89 -6
  62. package/libc/include/any-linux-any/linux/android/binder.h +1 -1
  63. package/libc/include/any-linux-any/linux/bpf.h +28 -0
  64. package/libc/include/any-linux-any/linux/btrfs.h +1 -0
  65. package/libc/include/any-linux-any/linux/btrfs_tree.h +32 -2
  66. package/libc/include/any-linux-any/linux/dma-buf.h +1 -0
  67. package/libc/include/any-linux-any/linux/dpll.h +1 -0
  68. package/libc/include/any-linux-any/linux/elf.h +2 -0
  69. package/libc/include/any-linux-any/linux/ethtool.h +21 -5
  70. package/libc/include/any-linux-any/linux/fs.h +1 -0
  71. package/libc/include/any-linux-any/linux/hyperv.h +1 -1
  72. package/libc/include/any-linux-any/linux/idxd.h +134 -134
  73. package/libc/include/any-linux-any/linux/if_alg.h +1 -1
  74. package/libc/include/any-linux-any/linux/if_link.h +1 -0
  75. package/libc/include/any-linux-any/linux/input-event-codes.h +4 -0
  76. package/libc/include/any-linux-any/linux/io_uring/bpf_filter.h +68 -0
  77. package/libc/include/any-linux-any/linux/io_uring/query.h +5 -1
  78. package/libc/include/any-linux-any/linux/io_uring.h +33 -2
  79. package/libc/include/any-linux-any/linux/iommufd.h +39 -0
  80. package/libc/include/any-linux-any/linux/kfd_ioctl.h +13 -3
  81. package/libc/include/any-linux-any/linux/kfd_sysfs.h +2 -1
  82. package/libc/include/any-linux-any/linux/kvm.h +30 -6
  83. package/libc/include/any-linux-any/linux/landlock.h +22 -8
  84. package/libc/include/any-linux-any/linux/magic.h +1 -0
  85. package/libc/include/any-linux-any/linux/mempolicy.h +3 -0
  86. package/libc/include/any-linux-any/linux/mount.h +11 -2
  87. package/libc/include/any-linux-any/linux/mptcp_pm.h +1 -1
  88. package/libc/include/any-linux-any/linux/mshv.h +2 -0
  89. package/libc/include/any-linux-any/linux/netfilter_bridge.h +5 -4
  90. package/libc/include/any-linux-any/linux/netfilter_ipv4.h +4 -5
  91. package/libc/include/any-linux-any/linux/netfilter_ipv6.h +3 -4
  92. package/libc/include/any-linux-any/linux/nfs.h +1 -1
  93. package/libc/include/any-linux-any/linux/nfsd_netlink.h +1 -0
  94. package/libc/include/any-linux-any/linux/nilfs2_api.h +2 -2
  95. package/libc/include/any-linux-any/linux/nilfs2_ondisk.h +97 -66
  96. package/libc/include/any-linux-any/linux/nl80211.h +104 -3
  97. package/libc/include/any-linux-any/linux/pci.h +7 -0
  98. package/libc/include/any-linux-any/linux/pci_regs.h +65 -6
  99. package/libc/include/any-linux-any/linux/pcitest.h +1 -0
  100. package/libc/include/any-linux-any/linux/perf_event.h +24 -3
  101. package/libc/include/any-linux-any/linux/pkt_sched.h +1 -0
  102. package/libc/include/any-linux-any/linux/prctl.h +30 -0
  103. package/libc/include/any-linux-any/linux/rseq.h +62 -5
  104. package/libc/include/any-linux-any/linux/shm.h +0 -1
  105. package/libc/include/any-linux-any/linux/stddef.h +4 -0
  106. package/libc/include/any-linux-any/linux/sysctl.h +1 -2
  107. package/libc/include/any-linux-any/linux/taskstats.h +12 -1
  108. package/libc/include/any-linux-any/linux/tcp.h +23 -3
  109. package/libc/include/any-linux-any/linux/typelimits.h +8 -0
  110. package/libc/include/any-linux-any/linux/ublk_cmd.h +120 -1
  111. package/libc/include/any-linux-any/linux/v4l2-controls.h +63 -0
  112. package/libc/include/any-linux-any/linux/vbox_vmmdev_types.h +2 -2
  113. package/libc/include/any-linux-any/linux/vduse.h +80 -5
  114. package/libc/include/any-linux-any/linux/version.h +3 -3
  115. package/libc/include/any-linux-any/linux/vfio.h +4 -0
  116. package/libc/include/any-linux-any/linux/videodev2.h +3 -0
  117. package/libc/include/any-linux-any/linux/virtio_ring.h +1 -2
  118. package/libc/include/any-linux-any/linux/vmclock-abi.h +20 -0
  119. package/libc/include/any-linux-any/rdma/bnxt_re-abi.h +16 -0
  120. package/libc/include/any-linux-any/rdma/ib_user_ioctl_cmds.h +16 -0
  121. package/libc/include/any-linux-any/rdma/mana-abi.h +3 -0
  122. package/libc/include/any-linux-any/scsi/scsi_bsg_ufs.h +8 -9
  123. package/libc/include/any-linux-any/sound/sof/tokens.h +6 -0
  124. package/libc/include/arc-linux-any/asm/swab.h +0 -63
  125. package/libc/include/arc-linux-any/asm/unistd_32.h +1 -0
  126. package/libc/include/arm-linux-any/asm/ptrace.h +0 -9
  127. package/libc/include/arm-linux-any/asm/unistd-eabi.h +1 -0
  128. package/libc/include/arm-linux-any/asm/unistd-oabi.h +1 -0
  129. package/libc/include/csky-linux-any/asm/unistd_32.h +1 -0
  130. package/libc/include/hexagon-linux-any/asm/unistd_32.h +1 -0
  131. package/libc/include/loongarch-linux-any/asm/hwcap.h +1 -0
  132. package/libc/include/loongarch-linux-any/asm/kvm.h +1 -0
  133. package/libc/include/loongarch-linux-any/asm/kvm_para.h +1 -0
  134. package/libc/include/loongarch-linux-any/asm/unistd_32.h +2 -0
  135. package/libc/include/loongarch-linux-any/asm/unistd_64.h +2 -0
  136. package/libc/include/m68k-linux-any/asm/unistd_32.h +1 -0
  137. package/libc/include/mips-linux-any/asm/errno.h +2 -0
  138. package/libc/include/mips-linux-any/asm/unistd_n32.h +1 -0
  139. package/libc/include/mips-linux-any/asm/unistd_n64.h +1 -0
  140. package/libc/include/mips-linux-any/asm/unistd_o32.h +1 -0
  141. package/libc/include/powerpc-linux-any/asm/unistd_32.h +1 -0
  142. package/libc/include/powerpc-linux-any/asm/unistd_64.h +1 -0
  143. package/libc/include/riscv-linux-any/asm/hwprobe.h +4 -0
  144. package/libc/include/riscv-linux-any/asm/kvm.h +3 -0
  145. package/libc/include/riscv-linux-any/asm/ptrace.h +37 -0
  146. package/libc/include/riscv-linux-any/asm/sigcontext.h +1 -0
  147. package/libc/include/riscv-linux-any/asm/unistd_32.h +1 -0
  148. package/libc/include/riscv-linux-any/asm/unistd_64.h +1 -0
  149. package/libc/include/s390x-linux-any/asm/unistd_64.h +1 -0
  150. package/libc/include/sparc-linux-any/asm/errno.h +2 -0
  151. package/libc/include/sparc-linux-any/asm/ioctls.h +4 -4
  152. package/libc/include/sparc-linux-any/asm/unistd_32.h +2 -0
  153. package/libc/include/sparc-linux-any/asm/unistd_64.h +2 -0
  154. package/libc/include/x86-linux-any/asm/auxvec.h +0 -4
  155. package/libc/include/x86-linux-any/asm/kvm.h +13 -8
  156. package/libc/include/x86-linux-any/asm/svm.h +16 -16
  157. package/libc/include/x86-linux-any/asm/unistd_32.h +1 -0
  158. package/libc/include/x86-linux-any/asm/unistd_64.h +1 -0
  159. package/libc/include/x86-linux-any/asm/unistd_x32.h +1 -0
  160. package/libc/include/xtensa-linux-any/asm/unistd_32.h +1 -0
  161. package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
  162. package/package.json +1 -1
  163. package/std/Build/Cache.zig +6 -6
  164. package/std/Build/Step/Compile.zig +0 -1
  165. package/std/Build/Step/Run.zig +2 -2
  166. package/std/Build/Step.zig +2 -4
  167. package/std/Build/WebServer.zig +2 -2
  168. package/std/Build.zig +0 -3
  169. package/std/Io/Dir.zig +7 -2
  170. package/std/Io/Dispatch.zig +3 -13
  171. package/std/Io/File/Writer.zig +8 -6
  172. package/std/Io/Reader.zig +8 -9
  173. package/std/Io/Semaphore.zig +112 -17
  174. package/std/Io/Terminal.zig +1 -1
  175. package/std/Io/Threaded.zig +171 -37
  176. package/std/Io/Uring.zig +13 -15
  177. package/std/Io/Writer.zig +46 -42
  178. package/std/Io/net.zig +11 -11
  179. package/std/Io.zig +90 -26
  180. package/std/SemanticVersion.zig +1 -1
  181. package/std/Target/Query.zig +2 -2
  182. package/std/Target.zig +50 -5
  183. package/std/array_hash_map.zig +9 -18
  184. package/std/builtin.zig +4 -0
  185. package/std/c/haiku.zig +3 -0
  186. package/std/c/serenity.zig +1 -6
  187. package/std/c.zig +89 -7
  188. package/std/compress/flate/Decompress.zig +2 -3
  189. package/std/compress/zstd/Decompress.zig +2 -4
  190. package/std/crypto/Certificate.zig +13 -1
  191. package/std/crypto/ascon.zig +75 -33
  192. package/std/crypto/codecs/asn1/Oid.zig +12 -1
  193. package/std/crypto/codecs/base64_hex_ct.zig +2 -4
  194. package/std/crypto/ml_kem.zig +2 -9
  195. package/std/crypto/tls/Client.zig +79 -4
  196. package/std/crypto/tls.zig +1 -1
  197. package/std/crypto.zig +1 -0
  198. package/std/debug/Pdb.zig +1 -1
  199. package/std/debug.zig +4 -3
  200. package/std/fmt.zig +8 -3
  201. package/std/fs/path.zig +6 -4
  202. package/std/heap/BufferFirstAllocator.zig +165 -0
  203. package/std/heap.zig +2 -126
  204. package/std/http/Client.zig +21 -24
  205. package/std/http.zig +3 -4
  206. package/std/json/Scanner.zig +2 -2
  207. package/std/os/emscripten.zig +1 -1
  208. package/std/os/linux/IoUring.zig +2 -0
  209. package/std/os/linux/aarch64.zig +41 -12
  210. package/std/os/linux/arc.zig +173 -0
  211. package/std/os/linux/arm.zig +41 -12
  212. package/std/os/linux/hexagon.zig +33 -11
  213. package/std/os/linux/loongarch32.zig +41 -13
  214. package/std/os/linux/loongarch64.zig +41 -12
  215. package/std/os/linux/m68k.zig +41 -13
  216. package/std/os/linux/mips.zig +67 -36
  217. package/std/os/linux/mips64.zig +60 -29
  218. package/std/os/linux/mipsn32.zig +60 -29
  219. package/std/os/linux/or1k.zig +41 -12
  220. package/std/os/linux/powerpc.zig +41 -12
  221. package/std/os/linux/powerpc64.zig +41 -12
  222. package/std/os/linux/riscv32.zig +41 -12
  223. package/std/os/linux/riscv64.zig +41 -12
  224. package/std/os/linux/s390x.zig +44 -7
  225. package/std/os/linux/sparc64.zig +83 -52
  226. package/std/os/linux/syscalls.zig +26 -1
  227. package/std/os/linux/thumb.zig +52 -36
  228. package/std/os/linux/x32.zig +41 -12
  229. package/std/os/linux/x86.zig +42 -13
  230. package/std/os/linux/x86_64.zig +41 -12
  231. package/std/os/linux.zig +412 -436
  232. package/std/os/uefi/tables/boot_services.zig +9 -8
  233. package/std/os.zig +41 -0
  234. package/std/process.zig +1 -1
  235. package/std/sort.zig +3 -3
  236. package/std/zig/Ast/Render.zig +3 -3
  237. package/std/zig/AstGen.zig +44 -98
  238. package/std/zig/AstRlAnnotate.zig +0 -11
  239. package/std/zig/BuiltinFn.zig +0 -32
  240. package/std/zig/LibCInstallation.zig +4 -3
  241. package/std/zig/Parse.zig +7 -7
  242. package/std/zig/WindowsSdk.zig +13 -13
  243. package/std/zig/Zir.zig +50 -63
  244. package/std/zig/ZonGen.zig +6 -5
  245. package/std/zig/llvm/Builder.zig +12 -12
  246. package/std/zig.zig +1 -10
  247. package/std/zip.zig +5 -5
  248. package/zig.h +340 -1
  249. package/libc/include/hexagon-linux-any/asm/signal.h +0 -29
  250. package/libc/include/s390x-linux-any/asm/tape390.h +0 -103
  251. package/libc/mingw/math/fdiml.c +0 -24
  252. package/libc/mingw/winpthreads/spinlock.c +0 -82
  253. package/libc/musl/src/linux/tee.c +0 -8
  254. package/libc/musl/src/math/fdimf.c +0 -10
  255. package/libc/musl/src/math/fdiml.c +0 -18
  256. package/libc/musl/src/string/strdup.c +0 -10
  257. package/libc/musl/src/string/strndup.c +0 -12
  258. package/libc/musl/src/string/wcsdup.c +0 -10
  259. package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
  260. package/libc/musl/src/thread/pthread_spin_init.c +0 -6
  261. package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
  262. package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
  263. package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
  264. package/libc/musl/src/unistd/dup2.c +0 -20
  265. package/libc/musl/src/unistd/dup3.c +0 -26
  266. package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
  267. package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
  268. package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
@@ -461,6 +461,7 @@
461
461
  #define __NR_file_getattr 468
462
462
  #define __NR_file_setattr 469
463
463
  #define __NR_listns 470
464
+ #define __NR_rseq_slice_yield 471
464
465
 
465
466
 
466
467
  #endif /* _ASM_UNISTD_32_H */
@@ -385,6 +385,7 @@
385
385
  #define __NR_file_getattr 468
386
386
  #define __NR_file_setattr 469
387
387
  #define __NR_listns 470
388
+ #define __NR_rseq_slice_yield 471
388
389
 
389
390
 
390
391
  #endif /* _ASM_UNISTD_64_H */
@@ -338,6 +338,7 @@
338
338
  #define __NR_file_getattr (__X32_SYSCALL_BIT + 468)
339
339
  #define __NR_file_setattr (__X32_SYSCALL_BIT + 469)
340
340
  #define __NR_listns (__X32_SYSCALL_BIT + 470)
341
+ #define __NR_rseq_slice_yield (__X32_SYSCALL_BIT + 471)
341
342
  #define __NR_rt_sigaction (__X32_SYSCALL_BIT + 512)
342
343
  #define __NR_rt_sigreturn (__X32_SYSCALL_BIT + 513)
343
344
  #define __NR_ioctl (__X32_SYSCALL_BIT + 514)
@@ -417,6 +417,7 @@
417
417
  #define __NR_file_getattr 468
418
418
  #define __NR_file_setattr 469
419
419
  #define __NR_listns 470
420
+ #define __NR_rseq_slice_yield 471
420
421
 
421
422
 
422
423
  #endif /* _ASM_UNISTD_32_H */
@@ -1,6 +1,9 @@
1
1
  #define __SYSCALL_LL_E(x) (x)
2
2
  #define __SYSCALL_LL_O(x) (x)
3
3
 
4
+ #define __scc(X) sizeof(1?(X):0ULL) < 8 ? (unsigned long) (X) : (long long) (X)
5
+ typedef long long syscall_arg_t;
6
+
4
7
  #define SYSCALL_RLIM_INFINITY (-1UL/2)
5
8
 
6
9
  #if __mips_isa_rev >= 6
@@ -13,9 +16,9 @@
13
16
  "$14", "$15", "$24", "$25", "hi", "lo", "memory"
14
17
  #endif
15
18
 
16
- static inline long __syscall0(long n)
19
+ static inline long __syscall0(long long n)
17
20
  {
18
- register long r7 __asm__("$7");
21
+ register long long r7 __asm__("$7");
19
22
  register long r2 __asm__("$2");
20
23
  __asm__ __volatile__ (
21
24
  "daddu $2,$0,%2 ; syscall"
@@ -25,10 +28,10 @@ static inline long __syscall0(long n)
25
28
  return r7 && r2>0 ? -r2 : r2;
26
29
  }
27
30
 
28
- static inline long __syscall1(long n, long a)
31
+ static inline long __syscall1(long long n, long long a)
29
32
  {
30
- register long r4 __asm__("$4") = a;
31
- register long r7 __asm__("$7");
33
+ register long long r4 __asm__("$4") = a;
34
+ register long long r7 __asm__("$7");
32
35
  register long r2 __asm__("$2");
33
36
  __asm__ __volatile__ (
34
37
  "daddu $2,$0,%2 ; syscall"
@@ -38,11 +41,11 @@ static inline long __syscall1(long n, long a)
38
41
  return r7 && r2>0 ? -r2 : r2;
39
42
  }
40
43
 
41
- static inline long __syscall2(long n, long a, long b)
44
+ static inline long __syscall2(long long n, long long a, long long b)
42
45
  {
43
- register long r4 __asm__("$4") = a;
44
- register long r5 __asm__("$5") = b;
45
- register long r7 __asm__("$7");
46
+ register long long r4 __asm__("$4") = a;
47
+ register long long r5 __asm__("$5") = b;
48
+ register long long r7 __asm__("$7");
46
49
  register long r2 __asm__("$2");
47
50
 
48
51
  __asm__ __volatile__ (
@@ -53,12 +56,12 @@ static inline long __syscall2(long n, long a, long b)
53
56
  return r7 && r2>0 ? -r2 : r2;
54
57
  }
55
58
 
56
- static inline long __syscall3(long n, long a, long b, long c)
59
+ static inline long __syscall3(long long n, long long a, long long b, long long c)
57
60
  {
58
- register long r4 __asm__("$4") = a;
59
- register long r5 __asm__("$5") = b;
60
- register long r6 __asm__("$6") = c;
61
- register long r7 __asm__("$7");
61
+ register long long r4 __asm__("$4") = a;
62
+ register long long r5 __asm__("$5") = b;
63
+ register long long r6 __asm__("$6") = c;
64
+ register long long r7 __asm__("$7");
62
65
  register long r2 __asm__("$2");
63
66
 
64
67
  __asm__ __volatile__ (
@@ -69,12 +72,12 @@ static inline long __syscall3(long n, long a, long b, long c)
69
72
  return r7 && r2>0 ? -r2 : r2;
70
73
  }
71
74
 
72
- static inline long __syscall4(long n, long a, long b, long c, long d)
75
+ static inline long __syscall4(long long n, long long a, long long b, long long c, long long d)
73
76
  {
74
- register long r4 __asm__("$4") = a;
75
- register long r5 __asm__("$5") = b;
76
- register long r6 __asm__("$6") = c;
77
- register long r7 __asm__("$7") = d;
77
+ register long long r4 __asm__("$4") = a;
78
+ register long long r5 __asm__("$5") = b;
79
+ register long long r6 __asm__("$6") = c;
80
+ register long long r7 __asm__("$7") = d;
78
81
  register long r2 __asm__("$2");
79
82
 
80
83
  __asm__ __volatile__ (
@@ -85,13 +88,13 @@ static inline long __syscall4(long n, long a, long b, long c, long d)
85
88
  return r7 && r2>0 ? -r2 : r2;
86
89
  }
87
90
 
88
- static inline long __syscall5(long n, long a, long b, long c, long d, long e)
91
+ static inline long __syscall5(long long n, long long a, long long b, long long c, long long d, long long e)
89
92
  {
90
- register long r4 __asm__("$4") = a;
91
- register long r5 __asm__("$5") = b;
92
- register long r6 __asm__("$6") = c;
93
- register long r7 __asm__("$7") = d;
94
- register long r8 __asm__("$8") = e;
93
+ register long long r4 __asm__("$4") = a;
94
+ register long long r5 __asm__("$5") = b;
95
+ register long long r6 __asm__("$6") = c;
96
+ register long long r7 __asm__("$7") = d;
97
+ register long long r8 __asm__("$8") = e;
95
98
  register long r2 __asm__("$2");
96
99
 
97
100
  __asm__ __volatile__ (
@@ -102,14 +105,14 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e)
102
105
  return r7 && r2>0 ? -r2 : r2;
103
106
  }
104
107
 
105
- static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
108
+ static inline long __syscall6(long long n, long long a, long long b, long long c, long long d, long long e, long long f)
106
109
  {
107
- register long r4 __asm__("$4") = a;
108
- register long r5 __asm__("$5") = b;
109
- register long r6 __asm__("$6") = c;
110
- register long r7 __asm__("$7") = d;
111
- register long r8 __asm__("$8") = e;
112
- register long r9 __asm__("$9") = f;
110
+ register long long r4 __asm__("$4") = a;
111
+ register long long r5 __asm__("$5") = b;
112
+ register long long r6 __asm__("$6") = c;
113
+ register long long r7 __asm__("$7") = d;
114
+ register long long r8 __asm__("$8") = e;
115
+ register long long r9 __asm__("$9") = f;
113
116
  register long r2 __asm__("$2");
114
117
 
115
118
  __asm__ __volatile__ (
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zigc/lib",
3
- "version": "0.16.0",
3
+ "version": "0.17.0-dev.135",
4
4
  "description": "Zig standard library and libc headers (shared across all platforms)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -562,14 +562,14 @@ pub const Manifest = struct {
562
562
  self.diagnostic = .{ .manifest_create = error.FileNotFound };
563
563
  return error.CacheCheckFailed;
564
564
  },
565
- error.Canceled => return error.Canceled,
565
+ error.Canceled => |e| return e,
566
566
  else => |e| {
567
567
  self.diagnostic = .{ .manifest_create = e };
568
568
  return error.CacheCheckFailed;
569
569
  },
570
570
  }
571
571
  },
572
- error.Canceled => return error.Canceled,
572
+ error.Canceled => |e| return e,
573
573
  else => |e| {
574
574
  self.diagnostic = .{ .manifest_create = e };
575
575
  return error.CacheCheckFailed;
@@ -675,7 +675,7 @@ pub const Manifest = struct {
675
675
  var manifest_reader = self.manifest_file.?.reader(io, &tiny_buffer); // Reads positionally from zero.
676
676
  const limit: std.Io.Limit = .limited(manifest_file_size_max);
677
677
  const file_contents = manifest_reader.interface.allocRemaining(gpa, limit) catch |err| switch (err) {
678
- error.OutOfMemory => return error.OutOfMemory,
678
+ error.OutOfMemory => |e| return e,
679
679
  error.StreamTooLong => return error.OutOfMemory,
680
680
  error.ReadFailed => {
681
681
  self.diagnostic = .{ .manifest_read = manifest_reader.err.? };
@@ -767,7 +767,7 @@ pub const Manifest = struct {
767
767
  // Every digest before this one has been populated successfully.
768
768
  return .{ .miss = .{ .file_digests_populated = idx } };
769
769
  },
770
- error.Canceled => return error.Canceled,
770
+ error.Canceled => |e| return e,
771
771
  else => |e| {
772
772
  self.diagnostic = .{ .file_open = .{
773
773
  .file_index = idx,
@@ -880,14 +880,14 @@ pub const Manifest = struct {
880
880
  .read = true,
881
881
  .truncate = true,
882
882
  }) catch |err| switch (err) {
883
- error.Canceled => return error.Canceled,
883
+ error.Canceled => |e| return e,
884
884
  else => return true,
885
885
  };
886
886
  defer file.close(io);
887
887
 
888
888
  // Save locally and also save globally (we still hold the global lock).
889
889
  const stat = file.stat(io) catch |err| switch (err) {
890
- error.Canceled => return error.Canceled,
890
+ error.Canceled => |e| return e,
891
891
  else => return true,
892
892
  };
893
893
  man.recent_problematic_timestamp = stat.mtime;
@@ -1393,7 +1393,6 @@ fn getZigArgs(compile: *Compile, fuzz: bool) ![][]const u8 {
1393
1393
  try zig_args.append("--debug-incremental");
1394
1394
  }
1395
1395
 
1396
- if (b.verbose_cimport) try zig_args.append("--verbose-cimport");
1397
1396
  if (b.verbose_air) try zig_args.append("--verbose-air");
1398
1397
  if (b.verbose_llvm_ir) |path| try zig_args.append(b.fmt("--verbose-llvm-ir={s}", .{path}));
1399
1398
  if (b.verbose_llvm_bc) |path| try zig_args.append(b.fmt("--verbose-llvm-bc={s}", .{path}));
@@ -2704,7 +2704,7 @@ fn evalGeneric(run: *Run, spawn_options: process.SpawnOptions) !EvalGenericResul
2704
2704
  } else {
2705
2705
  var stdout_reader = stdout.readerStreaming(io, &.{});
2706
2706
  stdout_bytes = stdout_reader.interface.allocRemaining(arena, run.stdio_limit) catch |err| switch (err) {
2707
- error.OutOfMemory => return error.OutOfMemory,
2707
+ error.OutOfMemory => |e| return e,
2708
2708
  error.ReadFailed => return stdout_reader.err.?,
2709
2709
  error.StreamTooLong => return error.StdoutStreamTooLong,
2710
2710
  };
@@ -2712,7 +2712,7 @@ fn evalGeneric(run: *Run, spawn_options: process.SpawnOptions) !EvalGenericResul
2712
2712
  } else if (child.stderr) |stderr| {
2713
2713
  var stderr_reader = stderr.readerStreaming(io, &.{});
2714
2714
  stderr_bytes = stderr_reader.interface.allocRemaining(arena, run.stdio_limit) catch |err| switch (err) {
2715
- error.OutOfMemory => return error.OutOfMemory,
2715
+ error.OutOfMemory => |e| return e,
2716
2716
  error.ReadFailed => return stderr_reader.err.?,
2717
2717
  error.StreamTooLong => return error.StderrStreamTooLong,
2718
2718
  };
@@ -282,8 +282,7 @@ pub fn make(s: *Step, options: MakeOptions) error{ MakeFailed, MakeSkipped }!voi
282
282
  }
283
283
 
284
284
  make_result catch |err| switch (err) {
285
- error.MakeFailed => return error.MakeFailed,
286
- error.MakeSkipped => return error.MakeSkipped,
285
+ error.MakeFailed, error.MakeSkipped => |e| return e,
287
286
  else => {
288
287
  s.result_error_msgs.append(arena, @errorName(err)) catch @panic("OOM");
289
288
  return error.MakeFailed;
@@ -845,8 +844,7 @@ fn failWithCacheError(
845
844
  });
846
845
  },
847
846
  },
848
- error.OutOfMemory => return error.OutOfMemory,
849
- error.Canceled => return error.Canceled,
847
+ error.OutOfMemory, error.Canceled => |e| return e,
850
848
  error.InvalidFormat => return s.fail("failed to check cache: invalid manifest file format", .{}),
851
849
  }
852
850
  }
@@ -622,8 +622,8 @@ fn buildClientWasm(ws: *WebServer, arena: Allocator, optimize: std.builtin.Optim
622
622
  defer body_buffer.deinit(gpa);
623
623
 
624
624
  while (true) {
625
- const header = stdout.takeStruct(Header, .little) catch |e| switch (e) {
626
- error.ReadFailed => return error.ReadFailed,
625
+ const header = stdout.takeStruct(Header, .little) catch |err| switch (err) {
626
+ error.ReadFailed => |e| return e,
627
627
  error.EndOfStream => break,
628
628
  };
629
629
  body_buffer.clearRetainingCapacity();
package/std/Build.zig CHANGED
@@ -38,7 +38,6 @@ verbose_cc: bool,
38
38
  verbose_air: bool,
39
39
  verbose_llvm_ir: ?[]const u8,
40
40
  verbose_llvm_bc: ?[]const u8,
41
- verbose_cimport: bool,
42
41
  verbose_llvm_cpu_features: bool,
43
42
  reference_trace: ?u32 = null,
44
43
  invalid_user_input: bool,
@@ -278,7 +277,6 @@ pub fn create(
278
277
  .verbose_air = false,
279
278
  .verbose_llvm_ir = null,
280
279
  .verbose_llvm_bc = null,
281
- .verbose_cimport = false,
282
280
  .verbose_llvm_cpu_features = false,
283
281
  .invalid_user_input = false,
284
282
  .allocator = arena,
@@ -377,7 +375,6 @@ fn createChildOnly(
377
375
  .verbose_air = parent.verbose_air,
378
376
  .verbose_llvm_ir = parent.verbose_llvm_ir,
379
377
  .verbose_llvm_bc = parent.verbose_llvm_bc,
380
- .verbose_cimport = parent.verbose_cimport,
381
378
  .verbose_llvm_cpu_features = parent.verbose_llvm_cpu_features,
382
379
  .reference_trace = parent.reference_trace,
383
380
  .invalid_user_input = false,
package/std/Io/Dir.zig CHANGED
@@ -1993,7 +1993,7 @@ pub fn setFileOwner(
1993
1993
  owner: ?File.Uid,
1994
1994
  group: ?File.Gid,
1995
1995
  options: SetFileOwnerOptions,
1996
- ) SetOwnerError!void {
1996
+ ) SetFileOwnerError!void {
1997
1997
  return io.vtable.dirSetFileOwner(io.userdata, dir, sub_path, owner, group, options);
1998
1998
  }
1999
1999
 
@@ -2032,9 +2032,14 @@ pub fn setTimestampsNow(
2032
2032
  sub_path: []const u8,
2033
2033
  options: SetTimestampsNowOptions,
2034
2034
  ) SetTimestampsError!void {
2035
- return io.vtable.fileSetTimestamps(io.userdata, dir, sub_path, .{
2035
+ return io.vtable.dirSetTimestamps(io.userdata, dir, sub_path, .{
2036
2036
  .follow_symlinks = options.follow_symlinks,
2037
2037
  .access_timestamp = .now,
2038
2038
  .modify_timestamp = .now,
2039
2039
  });
2040
2040
  }
2041
+
2042
+ test {
2043
+ _ = &setFileOwner;
2044
+ _ = &setTimestampsNow;
2045
+ }
@@ -459,7 +459,6 @@ pub fn io(ev: *Evented) Io {
459
459
  .netConnectUnix = netConnectUnixUnavailable,
460
460
  .netSocketCreatePair = netSocketCreatePairUnavailable,
461
461
  .netSend = netSendUnavailable,
462
- .netRead = netReadUnavailable,
463
462
  .netWrite = netWriteUnavailable,
464
463
  .netWriteFile = netWriteFileUnavailable,
465
464
  .netClose = netClose,
@@ -1713,6 +1712,7 @@ fn operate(userdata: ?*anyopaque, operation: Io.Operation) Io.Cancelable!Io.Oper
1713
1712
  },
1714
1713
  .device_io_control => |*o| return .{ .device_io_control = try deviceIoControl(o) },
1715
1714
  .net_receive => @panic("TODO implement net_receive operation"),
1715
+ .net_read => @panic("TODO implement net_read operation"),
1716
1716
  }
1717
1717
  }
1718
1718
 
@@ -2134,6 +2134,7 @@ fn batchDrainSubmitted(
2134
2134
  },
2135
2135
  .device_io_control => {},
2136
2136
  .net_receive => @panic("TODO implement batched net_receive"),
2137
+ .net_read => @panic("TODO implement batched net_read"),
2137
2138
  };
2138
2139
  if (concurrency) return error.ConcurrencyUnavailable;
2139
2140
  break :result try operate(ev, storage.submission.operation);
@@ -2193,6 +2194,7 @@ fn batchSourceEvent(context: ?*anyopaque) callconv(.c) void {
2193
2194
  },
2194
2195
  .device_io_control => unreachable,
2195
2196
  .net_receive => @panic("TODO implement batched net_receive"),
2197
+ .net_read => @panic("TODO implement batched net_read"),
2196
2198
  };
2197
2199
 
2198
2200
  switch (pending.node.prev) {
@@ -4877,18 +4879,6 @@ fn netSendUnavailable(
4877
4879
  return .{ error.NetworkDown, 0 };
4878
4880
  }
4879
4881
 
4880
- fn netReadUnavailable(
4881
- userdata: ?*anyopaque,
4882
- fd: net.Socket.Handle,
4883
- data: [][]u8,
4884
- ) net.Stream.Reader.Error!usize {
4885
- const ev: *Evented = @ptrCast(@alignCast(userdata));
4886
- _ = ev;
4887
- _ = fd;
4888
- _ = data;
4889
- return error.NetworkDown;
4890
- }
4891
-
4892
4882
  fn netWriteUnavailable(
4893
4883
  userdata: ?*anyopaque,
4894
4884
  handle: net.Socket.Handle,
@@ -162,9 +162,10 @@ fn sendFilePositional(w: *Writer, file_reader: *Io.File.Reader, limit: Io.Limit)
162
162
  w.err = error.Canceled;
163
163
  return error.WriteFailed;
164
164
  },
165
- error.EndOfStream => return error.EndOfStream,
166
- error.Unimplemented => return error.Unimplemented,
167
- error.ReadFailed => return error.ReadFailed,
165
+ error.EndOfStream,
166
+ error.Unimplemented,
167
+ error.ReadFailed,
168
+ => |e| return e,
168
169
  else => |e| {
169
170
  w.write_file_err = e;
170
171
  return error.WriteFailed;
@@ -182,9 +183,10 @@ fn sendFileStreaming(w: *Writer, file_reader: *Io.File.Reader, limit: Io.Limit)
182
183
  w.err = error.Canceled;
183
184
  return error.WriteFailed;
184
185
  },
185
- error.EndOfStream => return error.EndOfStream,
186
- error.Unimplemented => return error.Unimplemented,
187
- error.ReadFailed => return error.ReadFailed,
186
+ error.EndOfStream,
187
+ error.Unimplemented,
188
+ error.ReadFailed,
189
+ => |e| return e,
188
190
  else => |e| {
189
191
  w.write_file_err = e;
190
192
  return error.WriteFailed;
package/std/Io/Reader.zig CHANGED
@@ -200,8 +200,7 @@ pub fn defaultDiscard(r: *Reader, limit: Limit) Error!usize {
200
200
  var d: Writer.Discarding = .init(r.buffer);
201
201
  var n = r.stream(&d.writer, limit) catch |err| switch (err) {
202
202
  error.WriteFailed => unreachable,
203
- error.ReadFailed => return error.ReadFailed,
204
- error.EndOfStream => return error.EndOfStream,
203
+ error.ReadFailed, error.EndOfStream => |e| return e,
205
204
  };
206
205
  // If `stream` wrote to `r.buffer` without going through the writer,
207
206
  // we need to discard as much of the buffered data as possible.
@@ -379,7 +378,7 @@ pub fn appendRemainingAligned(
379
378
  const n = stream(r, &a.writer, remaining) catch |err| switch (err) {
380
379
  error.EndOfStream => return,
381
380
  error.WriteFailed => return error.OutOfMemory,
382
- error.ReadFailed => return error.ReadFailed,
381
+ error.ReadFailed => |e| return e,
383
382
  };
384
383
  remaining = remaining.subtract(n).?;
385
384
  }
@@ -400,7 +399,7 @@ pub fn appendRemainingUnlimited(r: *Reader, gpa: Allocator, list: *ArrayList(u8)
400
399
  }
401
400
  _ = streamRemaining(r, &a.writer) catch |err| switch (err) {
402
401
  error.WriteFailed => return error.OutOfMemory,
403
- error.ReadFailed => return error.ReadFailed,
402
+ error.ReadFailed => |e| return e,
404
403
  };
405
404
  }
406
405
 
@@ -428,7 +427,7 @@ pub fn readVec(r: *Reader, data: [][]u8) Error!usize {
428
427
  defer data[i] = buf;
429
428
  return n + (r.vtable.readVec(r, data[i..]) catch |err| switch (err) {
430
429
  error.EndOfStream => if (n == 0) return error.EndOfStream else 0,
431
- error.ReadFailed => return error.ReadFailed,
430
+ error.ReadFailed => |e| return e,
432
431
  });
433
432
  }
434
433
  const n = seek - r.seek;
@@ -639,7 +638,7 @@ pub fn discardShort(r: *Reader, n: usize) ShortError!usize {
639
638
  while (true) {
640
639
  const discard_len = r.vtable.discard(r, .limited(remaining)) catch |err| switch (err) {
641
640
  error.EndOfStream => return n - remaining,
642
- error.ReadFailed => return error.ReadFailed,
641
+ error.ReadFailed => |e| return e,
643
642
  };
644
643
  remaining -= discard_len;
645
644
  if (remaining == 0) return n;
@@ -687,7 +686,7 @@ pub fn readSliceShort(r: *Reader, buffer: []u8) ShortError!usize {
687
686
  data[0] = buffer[i..];
688
687
  i += readVec(r, &data) catch |err| switch (err) {
689
688
  error.EndOfStream => return i,
690
- error.ReadFailed => return error.ReadFailed,
689
+ error.ReadFailed => |e| return e,
691
690
  };
692
691
  if (buffer.len - i == 0) return buffer.len;
693
692
  }
@@ -1009,7 +1008,7 @@ pub fn streamDelimiterLimit(
1009
1008
  var remaining = @intFromEnum(limit);
1010
1009
  while (remaining != 0) {
1011
1010
  const available = Limit.limited(remaining).slice(r.peekGreedy(1) catch |err| switch (err) {
1012
- error.ReadFailed => return error.ReadFailed,
1011
+ error.ReadFailed => |e| return e,
1013
1012
  error.EndOfStream => return @intFromEnum(limit) - remaining,
1014
1013
  });
1015
1014
  if (std.mem.findScalar(u8, available, delimiter)) |delimiter_index| {
@@ -1080,7 +1079,7 @@ pub fn discardDelimiterLimit(r: *Reader, delimiter: u8, limit: Limit) DiscardDel
1080
1079
  var remaining = @intFromEnum(limit);
1081
1080
  while (remaining != 0) {
1082
1081
  const available = Limit.limited(remaining).slice(r.peekGreedy(1) catch |err| switch (err) {
1083
- error.ReadFailed => return error.ReadFailed,
1082
+ error.ReadFailed => |e| return e,
1084
1083
  error.EndOfStream => return @intFromEnum(limit) - remaining,
1085
1084
  });
1086
1085
  if (std.mem.findScalar(u8, available, delimiter)) |delimiter_index| {
@@ -15,14 +15,42 @@ cond: Io.Condition = .init,
15
15
  /// It is OK to initialize this field to any value.
16
16
  permits: usize = 0,
17
17
 
18
+ /// Blocks until a `permit` is available and consumes a single one.
19
+ /// Unblocks without consuming a `permit` when canceled.
20
+ ///
21
+ /// See also:
22
+ /// * `waitTimeout`
23
+ /// * `waitUncancelable`
18
24
  pub fn wait(s: *Semaphore, io: Io) Io.Cancelable!void {
25
+ s.waitTimeout(io, .none) catch |err| switch (err) {
26
+ error.Timeout => unreachable,
27
+ error.Canceled => |e| return e,
28
+ };
29
+ }
30
+
31
+ pub const WaitTimeoutError = Io.Cancelable || Io.Timeout.Error;
32
+
33
+ /// Blocks until a `permit` is available and consumes a single one.
34
+ /// Unblocks without consuming a `permit` when canceled or when the provided
35
+ /// timeout expires before a `permit` is available.
36
+ ///
37
+ /// See also:
38
+ /// * `wait`
39
+ /// * `waitUncancelable`
40
+ pub fn waitTimeout(s: *Semaphore, io: Io, timeout: Io.Timeout) WaitTimeoutError!void {
41
+ const deadline = timeout.toDeadline(io);
19
42
  try s.mutex.lock(io);
20
43
  defer s.mutex.unlock(io);
21
- while (s.permits == 0) try s.cond.wait(io, &s.mutex);
44
+ while (s.permits == 0) try s.cond.waitTimeout(io, &s.mutex, deadline);
22
45
  s.permits -= 1;
23
46
  if (s.permits > 0) s.cond.signal(io);
24
47
  }
25
48
 
49
+ /// Blocks until a `permit` is available and consumes a single one.
50
+ ///
51
+ /// See also:
52
+ /// * `wait`
53
+ /// * `waitTimeout`
26
54
  pub fn waitUncancelable(s: *Semaphore, io: Io) void {
27
55
  s.mutex.lockUncancelable(io);
28
56
  defer s.mutex.unlock(io);
@@ -31,6 +59,7 @@ pub fn waitUncancelable(s: *Semaphore, io: Io) void {
31
59
  if (s.permits > 0) s.cond.signal(io);
32
60
  }
33
61
 
62
+ /// Makes an additional `permit` available.
34
63
  pub fn post(s: *Semaphore, io: Io) void {
35
64
  s.mutex.lockUncancelable(io);
36
65
  defer s.mutex.unlock(io);
@@ -39,27 +68,93 @@ pub fn post(s: *Semaphore, io: Io) void {
39
68
  s.cond.signal(io);
40
69
  }
41
70
 
42
- test Semaphore {
43
- if (builtin.single_threaded) return error.SkipZigTest;
71
+ test wait {
44
72
  const io = testing.io;
45
73
 
46
- const TestContext = struct {
47
- sem: *Semaphore,
48
- n: *i32,
74
+ const Context = struct {
75
+ sem: Semaphore = .{ .permits = 1 },
76
+ n: u32 = 0,
77
+
49
78
  fn worker(ctx: *@This()) !void {
50
79
  try ctx.sem.wait(io);
51
- ctx.n.* += 1;
80
+ ctx.n += 1;
52
81
  ctx.sem.post(io);
53
82
  }
54
83
  };
55
- const num_threads = 3;
56
- var sem: Semaphore = .{ .permits = 1 };
57
- var threads: [num_threads]std.Thread = undefined;
58
- var n: i32 = 0;
59
- var ctx = TestContext{ .sem = &sem, .n = &n };
60
-
61
- for (&threads) |*t| t.* = try std.Thread.spawn(.{}, TestContext.worker, .{&ctx});
62
- for (threads) |t| t.join();
63
- try sem.wait(io);
64
- try testing.expect(n == num_threads);
84
+
85
+ var ctx: Context = .{};
86
+
87
+ var group: Io.Group = .init;
88
+ defer group.cancel(io);
89
+
90
+ const num_workers = 3;
91
+ for (0..num_workers) |_| group.async(io, Context.worker, .{&ctx});
92
+
93
+ try group.await(io);
94
+ try testing.expectEqual(num_workers, ctx.n);
95
+ }
96
+
97
+ test waitTimeout {
98
+ const io = testing.io;
99
+
100
+ const Context = struct {
101
+ ready: Io.Event = .unset,
102
+ sem: Semaphore = .{ .permits = 0 },
103
+ value: u32 = 0,
104
+
105
+ fn worker(ctx: *@This()) !void {
106
+ defer ctx.ready.set(io);
107
+
108
+ try testing.expectError(error.Timeout, ctx.sem.waitTimeout(io, .{ .duration = .{
109
+ .raw = .fromMilliseconds(1),
110
+ .clock = .awake,
111
+ } }));
112
+ try testing.expectEqual(0, ctx.value);
113
+
114
+ ctx.ready.set(io);
115
+
116
+ while (ctx.value == 0) try ctx.sem.wait(io);
117
+ try testing.expectEqual(1, ctx.value);
118
+ }
119
+ };
120
+
121
+ var ctx: Context = .{};
122
+
123
+ var future = io.concurrent(Context.worker, .{&ctx}) catch |err| switch (err) {
124
+ error.ConcurrencyUnavailable => return error.SkipZigTest,
125
+ };
126
+ defer future.cancel(io) catch {};
127
+
128
+ try ctx.ready.wait(io);
129
+
130
+ ctx.value = 1;
131
+ ctx.sem.post(io);
132
+
133
+ try future.await(io);
134
+ }
135
+
136
+ test waitUncancelable {
137
+ const io = testing.io;
138
+
139
+ const Context = struct {
140
+ sem: Semaphore = .{ .permits = 1 },
141
+ n: u32 = 0,
142
+
143
+ fn worker(ctx: *@This()) !void {
144
+ ctx.sem.waitUncancelable(io);
145
+ ctx.n += 1;
146
+ ctx.sem.post(io);
147
+ }
148
+ };
149
+
150
+ var ctx: Context = .{};
151
+
152
+ var group: Io.Group = .init;
153
+ defer group.cancel(io);
154
+
155
+ const num_workers = 3;
156
+ for (0..num_workers) |_| group.async(io, Context.worker, .{&ctx});
157
+
158
+ try group.await(io);
159
+ try testing.expectEqual(num_workers, ctx.n);
65
160
  }
@@ -61,7 +61,7 @@ pub const Mode = union(enum) {
61
61
  if (file.enableAnsiEscapeCodes(io)) |_| {
62
62
  return .escape_codes;
63
63
  } else |err| switch (err) {
64
- error.Canceled => return error.Canceled,
64
+ error.Canceled => |e| return e,
65
65
  error.NotTerminalDevice, error.Unexpected => {},
66
66
  }
67
67