visaljs 0.0.0-stage → 0.0.2

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 (520) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -2
  3. package/cli.js +8084 -0
  4. package/node/include/js_node.h +46 -0
  5. package/node/prelude/async_hooks.js +88 -0
  6. package/node/prelude/buffer.js +31 -0
  7. package/node/prelude/crypto.js +114 -0
  8. package/node/prelude/events.js +227 -0
  9. package/node/prelude/fs.js +79 -0
  10. package/node/prelude/http.js +536 -0
  11. package/node/prelude/http2.js +30 -0
  12. package/node/prelude/internal/crypto/asym.js +333 -0
  13. package/node/prelude/internal/crypto/cipher.js +205 -0
  14. package/node/prelude/internal/crypto/hash.js +137 -0
  15. package/node/prelude/internal/crypto/kdf.js +182 -0
  16. package/node/prelude/internal/crypto/keys.js +603 -0
  17. package/node/prelude/internal/crypto/random.js +118 -0
  18. package/node/prelude/internal/crypto/util.js +76 -0
  19. package/node/prelude/internal/errors.js +88 -0
  20. package/node/prelude/internal/querystring.js +105 -0
  21. package/node/prelude/module.js +53 -0
  22. package/node/prelude/net.js +51 -0
  23. package/node/prelude/os.js +129 -0
  24. package/node/prelude/path.js +257 -0
  25. package/node/prelude/process.js +21 -0
  26. package/node/prelude/querystring.js +469 -0
  27. package/node/prelude/stream.js +1327 -0
  28. package/node/prelude/stream_promises.js +7 -0
  29. package/node/prelude/stream_web.js +6 -0
  30. package/node/prelude/string_decoder.js +236 -0
  31. package/node/prelude/tty.js +18 -0
  32. package/node/prelude/url.js +1156 -0
  33. package/node/prelude/util.js +64 -0
  34. package/node/prelude/zlib.js +81 -0
  35. package/node/src/host_fs.c +126 -0
  36. package/node/src/host_http.c +486 -0
  37. package/node/src/host_os.c +505 -0
  38. package/node/src/host_sys.c +78 -0
  39. package/node/third_party/libuv/LICENSE +19 -0
  40. package/node/third_party/libuv/include/uv/aix.h +32 -0
  41. package/node/third_party/libuv/include/uv/bsd.h +34 -0
  42. package/node/third_party/libuv/include/uv/darwin.h +61 -0
  43. package/node/third_party/libuv/include/uv/errno.h +483 -0
  44. package/node/third_party/libuv/include/uv/linux.h +34 -0
  45. package/node/third_party/libuv/include/uv/os390.h +33 -0
  46. package/node/third_party/libuv/include/uv/posix.h +31 -0
  47. package/node/third_party/libuv/include/uv/sunos.h +44 -0
  48. package/node/third_party/libuv/include/uv/threadpool.h +37 -0
  49. package/node/third_party/libuv/include/uv/tree.h +521 -0
  50. package/node/third_party/libuv/include/uv/unix.h +512 -0
  51. package/node/third_party/libuv/include/uv/version.h +43 -0
  52. package/node/third_party/libuv/include/uv/win.h +698 -0
  53. package/node/third_party/libuv/include/uv.h +1990 -0
  54. package/node/third_party/libuv/src/fs-poll.c +290 -0
  55. package/node/third_party/libuv/src/heap-inl.h +245 -0
  56. package/node/third_party/libuv/src/idna.c +560 -0
  57. package/node/third_party/libuv/src/idna.h +31 -0
  58. package/node/third_party/libuv/src/inet.c +298 -0
  59. package/node/third_party/libuv/src/queue.h +90 -0
  60. package/node/third_party/libuv/src/random.c +123 -0
  61. package/node/third_party/libuv/src/strscpy.c +38 -0
  62. package/node/third_party/libuv/src/strscpy.h +39 -0
  63. package/node/third_party/libuv/src/strtok.c +52 -0
  64. package/node/third_party/libuv/src/strtok.h +27 -0
  65. package/node/third_party/libuv/src/thread-common.c +175 -0
  66. package/node/third_party/libuv/src/threadpool.c +419 -0
  67. package/node/third_party/libuv/src/timer.c +200 -0
  68. package/node/third_party/libuv/src/unix/async.c +418 -0
  69. package/node/third_party/libuv/src/unix/bsd-ifaddrs.c +164 -0
  70. package/node/third_party/libuv/src/unix/core.c +2104 -0
  71. package/node/third_party/libuv/src/unix/darwin-proctitle.c +176 -0
  72. package/node/third_party/libuv/src/unix/darwin-stub.h +97 -0
  73. package/node/third_party/libuv/src/unix/darwin-syscalls.h +17 -0
  74. package/node/third_party/libuv/src/unix/darwin.c +237 -0
  75. package/node/third_party/libuv/src/unix/dl.c +80 -0
  76. package/node/third_party/libuv/src/unix/fs.c +2303 -0
  77. package/node/third_party/libuv/src/unix/fsevents.c +906 -0
  78. package/node/third_party/libuv/src/unix/getaddrinfo.c +252 -0
  79. package/node/third_party/libuv/src/unix/getnameinfo.c +121 -0
  80. package/node/third_party/libuv/src/unix/internal.h +530 -0
  81. package/node/third_party/libuv/src/unix/kqueue.c +667 -0
  82. package/node/third_party/libuv/src/unix/linux.c +2761 -0
  83. package/node/third_party/libuv/src/unix/loop-watcher.c +68 -0
  84. package/node/third_party/libuv/src/unix/loop.c +240 -0
  85. package/node/third_party/libuv/src/unix/pipe.c +555 -0
  86. package/node/third_party/libuv/src/unix/poll.c +159 -0
  87. package/node/third_party/libuv/src/unix/process.c +1123 -0
  88. package/node/third_party/libuv/src/unix/procfs-exepath.c +45 -0
  89. package/node/third_party/libuv/src/unix/proctitle.c +157 -0
  90. package/node/third_party/libuv/src/unix/random-devurandom.c +93 -0
  91. package/node/third_party/libuv/src/unix/random-getentropy.c +57 -0
  92. package/node/third_party/libuv/src/unix/random-getrandom.c +86 -0
  93. package/node/third_party/libuv/src/unix/random-sysctl-linux.c +99 -0
  94. package/node/third_party/libuv/src/unix/signal.c +581 -0
  95. package/node/third_party/libuv/src/unix/stream.c +1567 -0
  96. package/node/third_party/libuv/src/unix/tcp.c +673 -0
  97. package/node/third_party/libuv/src/unix/thread.c +975 -0
  98. package/node/third_party/libuv/src/unix/tty.c +510 -0
  99. package/node/third_party/libuv/src/unix/udp.c +1434 -0
  100. package/node/third_party/libuv/src/uv-common.c +1051 -0
  101. package/node/third_party/libuv/src/uv-common.h +474 -0
  102. package/node/third_party/libuv/src/uv-data-getter-setters.c +119 -0
  103. package/node/third_party/libuv/src/version.c +45 -0
  104. package/node/third_party/llhttp/LICENSE +22 -0
  105. package/node/third_party/llhttp/api.c +509 -0
  106. package/node/third_party/llhttp/http.c +170 -0
  107. package/node/third_party/llhttp/llhttp.c +10099 -0
  108. package/node/third_party/llhttp/llhttp.h +907 -0
  109. package/package.json +25 -4
  110. package/runtime/include/js_atoms.gen.h +68 -0
  111. package/runtime/include/js_atoms.h +54 -0
  112. package/runtime/include/js_bigint.h +93 -0
  113. package/runtime/include/js_buffer.h +79 -0
  114. package/runtime/include/js_builtins.h +168 -0
  115. package/runtime/include/js_console.h +58 -0
  116. package/runtime/include/js_convert.h +22 -0
  117. package/runtime/include/js_core.def +188 -0
  118. package/runtime/include/js_crypto.h +58 -0
  119. package/runtime/include/js_error.h +37 -0
  120. package/runtime/include/js_exception.h +65 -0
  121. package/runtime/include/js_function.h +167 -0
  122. package/runtime/include/js_gc.h +195 -0
  123. package/runtime/include/js_generator.h +96 -0
  124. package/runtime/include/js_host.h +19 -0
  125. package/runtime/include/js_jobs.h +84 -0
  126. package/runtime/include/js_module.h +16 -0
  127. package/runtime/include/js_object.h +384 -0
  128. package/runtime/include/js_ops.h +111 -0
  129. package/runtime/include/js_promise.h +45 -0
  130. package/runtime/include/js_regexp.h +25 -0
  131. package/runtime/include/js_runtime.h +30 -0
  132. package/runtime/include/js_symbol.h +62 -0
  133. package/runtime/include/js_web.h +110 -0
  134. package/runtime/include/jscell.h +48 -0
  135. package/runtime/include/jscontext.h +240 -0
  136. package/runtime/include/jsnum.h +42 -0
  137. package/runtime/include/jsstring.h +161 -0
  138. package/runtime/include/jsvalue.h +142 -0
  139. package/runtime/src/arguments.c +115 -0
  140. package/runtime/src/array.c +1145 -0
  141. package/runtime/src/arraybuffer.c +608 -0
  142. package/runtime/src/async_iter.c +479 -0
  143. package/runtime/src/atoms.c +157 -0
  144. package/runtime/src/base64.c +107 -0
  145. package/runtime/src/bigint.c +1189 -0
  146. package/runtime/src/blob.c +371 -0
  147. package/runtime/src/buffer.c +1357 -0
  148. package/runtime/src/builtin_table.c +100 -0
  149. package/runtime/src/builtins.c +987 -0
  150. package/runtime/src/builtins_util.h +53 -0
  151. package/runtime/src/collections.c +912 -0
  152. package/runtime/src/components.c +28 -0
  153. package/runtime/src/console.c +637 -0
  154. package/runtime/src/convert.c +82 -0
  155. package/runtime/src/core_all.c +21 -0
  156. package/runtime/src/crypto.c +116 -0
  157. package/runtime/src/crypto_asym.c +644 -0
  158. package/runtime/src/crypto_cipher.c +671 -0
  159. package/runtime/src/crypto_hash.c +260 -0
  160. package/runtime/src/crypto_host.c +414 -0
  161. package/runtime/src/crypto_internal.h +304 -0
  162. package/runtime/src/crypto_kdf.c +143 -0
  163. package/runtime/src/crypto_key.c +171 -0
  164. package/runtime/src/crypto_pkey.c +794 -0
  165. package/runtime/src/crypto_subtle.c +1675 -0
  166. package/runtime/src/date.c +940 -0
  167. package/runtime/src/domexception.c +169 -0
  168. package/runtime/src/elements.c +312 -0
  169. package/runtime/src/elements.h +45 -0
  170. package/runtime/src/encoding.c +485 -0
  171. package/runtime/src/error.c +297 -0
  172. package/runtime/src/events.c +793 -0
  173. package/runtime/src/exception.c +56 -0
  174. package/runtime/src/fetch.c +772 -0
  175. package/runtime/src/function.c +530 -0
  176. package/runtime/src/gc.c +803 -0
  177. package/runtime/src/generator.c +218 -0
  178. package/runtime/src/global.c +119 -0
  179. package/runtime/src/headers.c +557 -0
  180. package/runtime/src/inspect.c +1792 -0
  181. package/runtime/src/internal.h +80 -0
  182. package/runtime/src/iterate.c +94 -0
  183. package/runtime/src/iterator.c +409 -0
  184. package/runtime/src/jobs.c +337 -0
  185. package/runtime/src/jsnum.c +353 -0
  186. package/runtime/src/json.c +1028 -0
  187. package/runtime/src/math.c +243 -0
  188. package/runtime/src/module.c +336 -0
  189. package/runtime/src/number.c +176 -0
  190. package/runtime/src/object.c +1265 -0
  191. package/runtime/src/ops.c +322 -0
  192. package/runtime/src/os.c +196 -0
  193. package/runtime/src/os.h +29 -0
  194. package/runtime/src/process.c +432 -0
  195. package/runtime/src/promise.c +721 -0
  196. package/runtime/src/proxy.c +570 -0
  197. package/runtime/src/reflect.c +194 -0
  198. package/runtime/src/regexp.c +1141 -0
  199. package/runtime/src/regexp_anchor.h +34 -0
  200. package/runtime/src/regexp_message.h +32 -0
  201. package/runtime/src/shape.c +294 -0
  202. package/runtime/src/shape.h +46 -0
  203. package/runtime/src/streams.c +1046 -0
  204. package/runtime/src/streams.h +47 -0
  205. package/runtime/src/string.c +364 -0
  206. package/runtime/src/string_builtins.c +837 -0
  207. package/runtime/src/symbol.c +143 -0
  208. package/runtime/src/test_host.c +59 -0
  209. package/runtime/src/typedarray.c +1330 -0
  210. package/runtime/src/tznames.gen.h +712 -0
  211. package/runtime/src/uri.c +169 -0
  212. package/runtime/src/url.c +2116 -0
  213. package/runtime/src/weak.c +486 -0
  214. package/runtime/src/web.c +214 -0
  215. package/runtime/src/wrapper.c +59 -0
  216. package/runtime/src/writable.c +1486 -0
  217. package/runtime/third_party/ada-idna/LICENSE-MIT +18 -0
  218. package/runtime/third_party/ada-idna/README.md +27 -0
  219. package/runtime/third_party/ada-idna/convert.mjs +83 -0
  220. package/runtime/third_party/ada-idna/idna.c +416 -0
  221. package/runtime/third_party/ada-idna/idna.h +15 -0
  222. package/runtime/third_party/ada-idna/idna_tables.h +2657 -0
  223. package/runtime/third_party/bearssl/LICENSE.txt +21 -0
  224. package/runtime/third_party/bearssl/README.txt +136 -0
  225. package/runtime/third_party/bearssl/VERSION +1 -0
  226. package/runtime/third_party/bearssl/inc/bearssl.h +183 -0
  227. package/runtime/third_party/bearssl/inc/bearssl_aead.h +1059 -0
  228. package/runtime/third_party/bearssl/inc/bearssl_block.h +2618 -0
  229. package/runtime/third_party/bearssl/inc/bearssl_ec.h +967 -0
  230. package/runtime/third_party/bearssl/inc/bearssl_hash.h +1346 -0
  231. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +241 -0
  232. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +284 -0
  233. package/runtime/third_party/bearssl/inc/bearssl_pem.h +294 -0
  234. package/runtime/third_party/bearssl/inc/bearssl_prf.h +150 -0
  235. package/runtime/third_party/bearssl/inc/bearssl_rand.h +397 -0
  236. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +1655 -0
  237. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +4296 -0
  238. package/runtime/third_party/bearssl/inc/bearssl_x509.h +1474 -0
  239. package/runtime/third_party/bearssl/src/aead/ccm.c +346 -0
  240. package/runtime/third_party/bearssl/src/aead/eax.c +525 -0
  241. package/runtime/third_party/bearssl/src/aead/gcm.c +318 -0
  242. package/runtime/third_party/bearssl/src/codec/ccopy.c +44 -0
  243. package/runtime/third_party/bearssl/src/codec/dec16be.c +38 -0
  244. package/runtime/third_party/bearssl/src/codec/dec16le.c +38 -0
  245. package/runtime/third_party/bearssl/src/codec/dec32be.c +38 -0
  246. package/runtime/third_party/bearssl/src/codec/dec32le.c +38 -0
  247. package/runtime/third_party/bearssl/src/codec/dec64be.c +38 -0
  248. package/runtime/third_party/bearssl/src/codec/dec64le.c +38 -0
  249. package/runtime/third_party/bearssl/src/codec/enc16be.c +38 -0
  250. package/runtime/third_party/bearssl/src/codec/enc16le.c +38 -0
  251. package/runtime/third_party/bearssl/src/codec/enc32be.c +38 -0
  252. package/runtime/third_party/bearssl/src/codec/enc32le.c +38 -0
  253. package/runtime/third_party/bearssl/src/codec/enc64be.c +38 -0
  254. package/runtime/third_party/bearssl/src/codec/enc64le.c +38 -0
  255. package/runtime/third_party/bearssl/src/codec/pemdec.c +526 -0
  256. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +314 -0
  257. package/runtime/third_party/bearssl/src/codec/pemenc.c +173 -0
  258. package/runtime/third_party/bearssl/src/config.h +247 -0
  259. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +121 -0
  260. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +171 -0
  261. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +398 -0
  262. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +390 -0
  263. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +1478 -0
  264. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +800 -0
  265. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +605 -0
  266. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +831 -0
  267. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +46 -0
  268. package/runtime/third_party/bearssl/src/ec/ec_default.c +36 -0
  269. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +86 -0
  270. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +2124 -0
  271. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +1469 -0
  272. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +1765 -0
  273. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +1781 -0
  274. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +824 -0
  275. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +826 -0
  276. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +85 -0
  277. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +51 -0
  278. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +57 -0
  279. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +64 -0
  280. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +134 -0
  281. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +36 -0
  282. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +36 -0
  283. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +36 -0
  284. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +36 -0
  285. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +47 -0
  286. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +45 -0
  287. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +174 -0
  288. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +48 -0
  289. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +166 -0
  290. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +47 -0
  291. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +45 -0
  292. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +173 -0
  293. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +48 -0
  294. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +165 -0
  295. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +121 -0
  296. package/runtime/third_party/bearssl/src/hash/dig_oid.c +84 -0
  297. package/runtime/third_party/bearssl/src/hash/dig_size.c +50 -0
  298. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +345 -0
  299. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +251 -0
  300. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +154 -0
  301. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +389 -0
  302. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +411 -0
  303. package/runtime/third_party/bearssl/src/hash/md5.c +208 -0
  304. package/runtime/third_party/bearssl/src/hash/md5sha1.c +141 -0
  305. package/runtime/third_party/bearssl/src/hash/mgf1.c +56 -0
  306. package/runtime/third_party/bearssl/src/hash/multihash.c +166 -0
  307. package/runtime/third_party/bearssl/src/hash/sha1.c +191 -0
  308. package/runtime/third_party/bearssl/src/hash/sha2big.c +285 -0
  309. package/runtime/third_party/bearssl/src/hash/sha2small.c +341 -0
  310. package/runtime/third_party/bearssl/src/inner.h +2577 -0
  311. package/runtime/third_party/bearssl/src/int/i15_add.c +46 -0
  312. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +44 -0
  313. package/runtime/third_party/bearssl/src/int/i15_decmod.c +124 -0
  314. package/runtime/third_party/bearssl/src/int/i15_decode.c +56 -0
  315. package/runtime/third_party/bearssl/src/int/i15_decred.c +100 -0
  316. package/runtime/third_party/bearssl/src/int/i15_encode.c +56 -0
  317. package/runtime/third_party/bearssl/src/int/i15_fmont.c +59 -0
  318. package/runtime/third_party/bearssl/src/int/i15_iszero.c +39 -0
  319. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +465 -0
  320. package/runtime/third_party/bearssl/src/int/i15_modpow.c +50 -0
  321. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +160 -0
  322. package/runtime/third_party/bearssl/src/int/i15_montmul.c +184 -0
  323. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +61 -0
  324. package/runtime/third_party/bearssl/src/int/i15_muladd.c +173 -0
  325. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +38 -0
  326. package/runtime/third_party/bearssl/src/int/i15_reduce.c +66 -0
  327. package/runtime/third_party/bearssl/src/int/i15_rshift.c +47 -0
  328. package/runtime/third_party/bearssl/src/int/i15_sub.c +46 -0
  329. package/runtime/third_party/bearssl/src/int/i15_tmont.c +36 -0
  330. package/runtime/third_party/bearssl/src/int/i31_add.c +46 -0
  331. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +44 -0
  332. package/runtime/third_party/bearssl/src/int/i31_decmod.c +124 -0
  333. package/runtime/third_party/bearssl/src/int/i31_decode.c +57 -0
  334. package/runtime/third_party/bearssl/src/int/i31_decred.c +103 -0
  335. package/runtime/third_party/bearssl/src/int/i31_encode.c +79 -0
  336. package/runtime/third_party/bearssl/src/int/i31_fmont.c +60 -0
  337. package/runtime/third_party/bearssl/src/int/i31_iszero.c +39 -0
  338. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +488 -0
  339. package/runtime/third_party/bearssl/src/int/i31_modpow.c +65 -0
  340. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +160 -0
  341. package/runtime/third_party/bearssl/src/int/i31_montmul.c +127 -0
  342. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +74 -0
  343. package/runtime/third_party/bearssl/src/int/i31_muladd.c +157 -0
  344. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +39 -0
  345. package/runtime/third_party/bearssl/src/int/i31_reduce.c +66 -0
  346. package/runtime/third_party/bearssl/src/int/i31_rshift.c +47 -0
  347. package/runtime/third_party/bearssl/src/int/i31_sub.c +46 -0
  348. package/runtime/third_party/bearssl/src/int/i31_tmont.c +36 -0
  349. package/runtime/third_party/bearssl/src/int/i32_add.c +51 -0
  350. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +44 -0
  351. package/runtime/third_party/bearssl/src/int/i32_decmod.c +77 -0
  352. package/runtime/third_party/bearssl/src/int/i32_decode.c +63 -0
  353. package/runtime/third_party/bearssl/src/int/i32_decred.c +107 -0
  354. package/runtime/third_party/bearssl/src/int/i32_div32.c +56 -0
  355. package/runtime/third_party/bearssl/src/int/i32_encode.c +72 -0
  356. package/runtime/third_party/bearssl/src/int/i32_fmont.c +60 -0
  357. package/runtime/third_party/bearssl/src/int/i32_iszero.c +39 -0
  358. package/runtime/third_party/bearssl/src/int/i32_modpow.c +65 -0
  359. package/runtime/third_party/bearssl/src/int/i32_montmul.c +69 -0
  360. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +56 -0
  361. package/runtime/third_party/bearssl/src/int/i32_muladd.c +138 -0
  362. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +39 -0
  363. package/runtime/third_party/bearssl/src/int/i32_reduce.c +66 -0
  364. package/runtime/third_party/bearssl/src/int/i32_sub.c +51 -0
  365. package/runtime/third_party/bearssl/src/int/i32_tmont.c +36 -0
  366. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +493 -0
  367. package/runtime/third_party/bearssl/src/kdf/hkdf.c +107 -0
  368. package/runtime/third_party/bearssl/src/kdf/shake.c +590 -0
  369. package/runtime/third_party/bearssl/src/mac/hmac.c +122 -0
  370. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +193 -0
  371. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +206 -0
  372. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +157 -0
  373. package/runtime/third_party/bearssl/src/rand/sysrng.c +252 -0
  374. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +38 -0
  375. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +36 -0
  376. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +38 -0
  377. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +38 -0
  378. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +38 -0
  379. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +38 -0
  380. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +38 -0
  381. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +36 -0
  382. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +38 -0
  383. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +38 -0
  384. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +38 -0
  385. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +36 -0
  386. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +583 -0
  387. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +99 -0
  388. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +41 -0
  389. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +44 -0
  390. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +37 -0
  391. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +43 -0
  392. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +209 -0
  393. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +320 -0
  394. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +40 -0
  395. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +44 -0
  396. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +113 -0
  397. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +152 -0
  398. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +37 -0
  399. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +608 -0
  400. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +99 -0
  401. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +41 -0
  402. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +44 -0
  403. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +37 -0
  404. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +43 -0
  405. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +203 -0
  406. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +318 -0
  407. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +40 -0
  408. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +44 -0
  409. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +106 -0
  410. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +152 -0
  411. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +41 -0
  412. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +44 -0
  413. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +37 -0
  414. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +43 -0
  415. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +160 -0
  416. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +40 -0
  417. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +44 -0
  418. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +77 -0
  419. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +57 -0
  420. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +61 -0
  421. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +64 -0
  422. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +57 -0
  423. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +63 -0
  424. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +223 -0
  425. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +60 -0
  426. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +64 -0
  427. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +125 -0
  428. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +112 -0
  429. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +145 -0
  430. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +100 -0
  431. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +121 -0
  432. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +106 -0
  433. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +121 -0
  434. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +52 -0
  435. package/runtime/third_party/bearssl/src/settings.c +306 -0
  436. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +69 -0
  437. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +67 -0
  438. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +84 -0
  439. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +142 -0
  440. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +254 -0
  441. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +157 -0
  442. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +112 -0
  443. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +328 -0
  444. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +398 -0
  445. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +104 -0
  446. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +81 -0
  447. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +114 -0
  448. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +433 -0
  449. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +159 -0
  450. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +115 -0
  451. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +111 -0
  452. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +91 -0
  453. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +116 -0
  454. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +422 -0
  455. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +170 -0
  456. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +112 -0
  457. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +445 -0
  458. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +670 -0
  459. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +417 -0
  460. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +717 -0
  461. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +946 -0
  462. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +69 -0
  463. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +67 -0
  464. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +84 -0
  465. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +142 -0
  466. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +176 -0
  467. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +129 -0
  468. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +240 -0
  469. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +223 -0
  470. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +122 -0
  471. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +211 -0
  472. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +596 -0
  473. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +106 -0
  474. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +237 -0
  475. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +411 -0
  476. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +87 -0
  477. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +69 -0
  478. package/runtime/third_party/bearssl/src/symcipher/des_support.c +166 -0
  479. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +310 -0
  480. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +85 -0
  481. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +67 -0
  482. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +260 -0
  483. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +297 -0
  484. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +475 -0
  485. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +221 -0
  486. package/runtime/third_party/bearssl/src/x509/asn1.t0 +757 -0
  487. package/runtime/third_party/bearssl/src/x509/asn1enc.c +93 -0
  488. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +110 -0
  489. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +161 -0
  490. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +97 -0
  491. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +96 -0
  492. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +653 -0
  493. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +376 -0
  494. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +776 -0
  495. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +324 -0
  496. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +105 -0
  497. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +1722 -0
  498. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +1526 -0
  499. package/runtime/third_party/bearssl/src/x509/x509_minimal_full.c +59 -0
  500. package/runtime/third_party/quickjs-dtoa/LICENSE +22 -0
  501. package/runtime/third_party/quickjs-dtoa/README.md +23 -0
  502. package/runtime/third_party/quickjs-dtoa/dtoa.c +1640 -0
  503. package/runtime/third_party/quickjs-dtoa/dtoa.h +83 -0
  504. package/runtime/third_party/quickjs-dtoa/dtoa_compat.h +89 -0
  505. package/runtime/third_party/quickjs-regexp/LICENSE +22 -0
  506. package/runtime/third_party/quickjs-regexp/README.md +22 -0
  507. package/runtime/third_party/quickjs-regexp/cutils.c +641 -0
  508. package/runtime/third_party/quickjs-regexp/cutils.h +457 -0
  509. package/runtime/third_party/quickjs-regexp/libregexp-opcode.h +73 -0
  510. package/runtime/third_party/quickjs-regexp/libregexp.c +3448 -0
  511. package/runtime/third_party/quickjs-regexp/libregexp.h +65 -0
  512. package/runtime/third_party/quickjs-regexp/libunicode-table.h +5206 -0
  513. package/runtime/third_party/quickjs-regexp/libunicode.c +2124 -0
  514. package/runtime/third_party/quickjs-regexp/libunicode.h +196 -0
  515. package/runtime/third_party/v8-ieee754/LICENSE +61 -0
  516. package/runtime/third_party/v8-ieee754/README.md +22 -0
  517. package/runtime/third_party/v8-ieee754/convert.py +84 -0
  518. package/runtime/third_party/v8-ieee754/ieee754.c +3030 -0
  519. package/runtime/third_party/v8-ieee754/ieee754.h +27 -0
  520. package/runtime/tools/regexp_compile.c +90 -0
@@ -0,0 +1,195 @@
1
+ /*
2
+ * js_gc.h — heap and garbage collector (ADR 0002).
3
+ *
4
+ * Non-moving mark-sweep. Cells come from 64 KiB aligned blocks, one size
5
+ * class per block, or from the large-object space. Mark and allocation bits
6
+ * live in side bitmaps in the block header, never in the cell.
7
+ */
8
+ #ifndef JS_GC_H
9
+ #define JS_GC_H
10
+
11
+ #include <assert.h>
12
+ #include <stddef.h>
13
+ #include <stdint.h>
14
+ #if defined(_MSC_VER) && !defined(__clang__)
15
+ #include <intrin.h>
16
+ #endif
17
+
18
+ #include "jscell.h"
19
+ #include "jsvalue.h"
20
+
21
+ typedef struct JSRuntime JSRuntime;
22
+ typedef struct JSContext JSContext;
23
+
24
+ /* ---- Blocks and size classes ------------------------------------------- */
25
+
26
+ #define JS_BLOCK_SIZE ((size_t)64 * 1024)
27
+ #define JS_CELL_ALIGN 16
28
+ #define JS_MAX_SMALL_SIZE 8192
29
+ #define JS_NUM_SIZE_CLASSES 32
30
+ #define JS_BLOCK_MAX_CELLS (JS_BLOCK_SIZE / JS_CELL_ALIGN)
31
+ #define JS_BITMAP_WORDS (JS_BLOCK_MAX_CELLS / 64)
32
+
33
+ /* Collection policy (ADR 0002). */
34
+ #define JS_GC_MIN_HEAP ((size_t)4 << 20) /* never collect before this much is allocated */
35
+ #define JS_EMPTY_POOL_MAX 32 /* empty blocks kept; the rest go back to the OS */
36
+
37
+ typedef struct JSFreeCell { struct JSFreeCell *next; } JSFreeCell;
38
+
39
+ /* The header of a 64 KiB block of same-size cells, or of a large object:
40
+ * a 64 KiB-aligned mapping holding exactly one cell (is_large). Either way
41
+ * js_block_of(cell) finds it. */
42
+ typedef struct JSBlock {
43
+ struct JSBlock *next; /* in its size class's list, or in the empty pool */
44
+ size_t map_size; /* JS_BLOCK_SIZE, or the large object's mapping */
45
+ uint32_t cell_size;
46
+ uint32_t cell_count;
47
+ uint8_t size_class;
48
+ uint8_t is_large;
49
+ uint8_t unswept; /* marked by the last GC, not swept yet */
50
+ uint8_t has_finalizable;
51
+ uint8_t pad_[4];
52
+ uint64_t mark_bits[JS_BITMAP_WORDS];
53
+ uint64_t alloc_bits[JS_BITMAP_WORDS]; /* exact only while the world is stopped */
54
+ } JSBlock;
55
+
56
+ #define JS_BLOCK_FIRST_CELL \
57
+ ((sizeof(JSBlock) + JS_CELL_ALIGN - 1) & ~(size_t)(JS_CELL_ALIGN - 1))
58
+
59
+ static inline JSBlock *js_block_of(const void *p) {
60
+ return (JSBlock *)((uintptr_t)p & ~(uintptr_t)(JS_BLOCK_SIZE - 1));
61
+ }
62
+
63
+ /* Cell size of each class: 16…128 in steps of 16, then 4 classes per doubling up to 8192. */
64
+ extern const uint16_t js_size_class_bytes[JS_NUM_SIZE_CLASSES];
65
+
66
+ /* The class for 1 <= size <= JS_MAX_SMALL_SIZE. Folds to a constant for constant sizes. */
67
+ static inline unsigned js_size_class(size_t size) {
68
+ if (size <= 128) return (unsigned)((size + 15) / 16) - (size != 0);
69
+ unsigned s = (unsigned)size - 1;
70
+ #if defined(_MSC_VER) && !defined(__clang__)
71
+ unsigned long b;
72
+ _BitScanReverse(&b, s);
73
+ #else
74
+ unsigned b = 31 - (unsigned)__builtin_clz(s); /* floor(log2(s)): 7…12 */
75
+ #endif
76
+ return 8 + (unsigned)(b - 7) * 4 + ((s >> (b - 2)) - 4);
77
+ }
78
+
79
+ /* ---- Heap -------------------------------------------------------------- */
80
+
81
+ typedef struct JSHeap {
82
+ JSFreeCell *free[JS_NUM_SIZE_CLASSES]; /* hot: popped by the inline fast path */
83
+ JSBlock *current[JS_NUM_SIZE_CLASSES]; /* the block `free` points into */
84
+ JSBlock *blocks[JS_NUM_SIZE_CLASSES]; /* every block of the class */
85
+ JSBlock **sweep_link[JS_NUM_SIZE_CLASSES]; /* link to the next block to sweep lazily */
86
+ JSBlock *empty; /* pool of empty blocks, any class */
87
+ size_t block_count;
88
+ size_t empty_count;
89
+ JSBlock **large; /* large objects, sorted by address (malloc'd) */
90
+ size_t large_count;
91
+ size_t large_cap;
92
+ size_t large_bytes;
93
+
94
+ /* Precise roots (malloc'd arrays). */
95
+ struct JSRootTable { JSValue *slots; size_t n; } *root_tables;
96
+ size_t root_table_count, root_table_cap;
97
+ JSValue **roots;
98
+ size_t root_count, root_cap;
99
+
100
+ /* Conservative pointer test (ADR 0002). */
101
+ uintptr_t *block_set; /* open addressing over block addresses; 0 = empty */
102
+ size_t block_set_cap, block_set_count;
103
+ uint64_t block_bloom[4]; /* 256-bit Bloom filter over block_set */
104
+ uintptr_t min_addr, max_addr; /* bounds of every mapping the heap made */
105
+ void *stack_base; /* highest stack address of the owning thread */
106
+
107
+ JSCell **mark_stack; /* malloc'd; reused across collections */
108
+ size_t mark_stack_cap;
109
+ size_t gc_count;
110
+ int in_gc;
111
+
112
+ /* Policy: collect when allocated_since_gc > max(min_heap, live_after_gc). */
113
+ size_t allocated_since_gc; /* bytes handed to the allocator */
114
+ size_t live_after_gc; /* bytes marked by the last collection */
115
+ size_t min_heap;
116
+ size_t heap_limit; /* 0 = unlimited; env JS_HEAP_LIMIT_MB */
117
+ size_t stress_interval, stress_counter; /* JS_GC_STRESS builds; env JS_GC_STRESS_INTERVAL */
118
+ } JSHeap;
119
+
120
+ /* ---- Cell classes and tracing ---------------------------------------- */
121
+
122
+ typedef struct JSTracer JSTracer;
123
+
124
+ typedef struct JSCellClass {
125
+ const char *name;
126
+ void (*visit)(JSCell *cell, JSTracer *trc); /* trace every JSValue the cell holds */
127
+ void (*finalize)(JSRuntime *rt, JSCell *cell); /* NULL for almost all kinds */
128
+ } JSCellClass;
129
+
130
+ /* Ignores non-cells and static cells. */
131
+ void js_trace_value(JSTracer *trc, JSValue v);
132
+ void js_trace_cell(JSTracer *trc, JSCell *cell);
133
+
134
+ /* ---- Allocation -------------------------------------------------------- */
135
+
136
+ /* Any size. Returns a zero-filled cell with its header set. Never NULL. */
137
+ JSCell *js_alloc_cell(JSContext *ctx, JSCellKind kind, size_t size);
138
+
139
+ void *js_alloc_slow(JSContext *ctx, unsigned size_class);
140
+
141
+ /* JS_CELL_VALUE_ARRAY: a fixed-length JSValue array, all JS_EMPTY initially. */
142
+ typedef struct JSValueArray {
143
+ JSCell cell; /* aux = length */
144
+ JSValue values[];
145
+ } JSValueArray;
146
+
147
+ JSValueArray *js_alloc_value_array(JSContext *ctx, uint32_t length);
148
+
149
+ /* JS_CELL_HOST: `size` bytes, starting with a JSHostCell, traced and finalized by `cls`. */
150
+ typedef struct JSHostCell {
151
+ JSCell cell;
152
+ const JSCellClass *cls;
153
+ } JSHostCell;
154
+
155
+ JSHostCell *js_alloc_host_cell(JSContext *ctx, const JSCellClass *cls, size_t size);
156
+
157
+ /* ---- Stores into heap cells (ABI hook, ADR 0002) ---------------------- */
158
+
159
+ /* Every store of a JSValue into a cell that may already be reachable.
160
+ * A plain store today; a generational or incremental barrier goes here. */
161
+ static inline void js_store(JSContext *ctx, JSCell *owner, JSValue *slot, JSValue v) {
162
+ (void)ctx;
163
+ (void)owner;
164
+ assert(!js_is_exception(v) && "JS_EXCEPTION stored into a cell (ADR 0004, invariant 3)");
165
+ *slot = v;
166
+ }
167
+
168
+ /* Initializing store into a cell allocated with no allocation in between. */
169
+ static inline void js_init_slot(JSValue *slot, JSValue v) { *slot = v; }
170
+
171
+ /* Keeps `v` visibly live to the conservative scan up to this point. */
172
+ #if defined(__GNUC__) || defined(__clang__)
173
+ #define js_keep_alive(v) __asm__ volatile("" ::"r"((v).bits))
174
+ #else
175
+ #define js_keep_alive(v) ((void)*(volatile uint64_t *)&(v).bits)
176
+ #endif
177
+
178
+ /* ---- Roots ------------------------------------------------------------- */
179
+
180
+ void js_register_roots(JSRuntime *rt, JSValue *slots, size_t n); /* module globals, once */
181
+ /* A JSValue in malloc'd memory. It must hold a valid value (e.g. JS_UNDEFINED)
182
+ * before it's added: any allocation may collect and read it. */
183
+ void js_add_root(JSRuntime *rt, JSValue *slot);
184
+ void js_remove_root(JSRuntime *rt, JSValue *slot);
185
+
186
+ /* ---- Control ----------------------------------------------------------- */
187
+
188
+ void js_gc(JSContext *ctx); /* full collection */
189
+
190
+ /* Exits with "heap limit reached" when the cells would need more than `bytes`. 0 = no limit. */
191
+ void js_set_heap_limit(JSRuntime *rt, size_t bytes);
192
+ /* Bytes currently mapped for cells: blocks (including empty ones) and large objects. */
193
+ size_t js_heap_size(const JSRuntime *rt);
194
+
195
+ #endif /* JS_GC_H */
@@ -0,0 +1,96 @@
1
+ /*
2
+ * js_generator.h — generators (ECMAScript §27.5; ADR 0007).
3
+ *
4
+ * The compiler turns a function* into an entry (its prologue, which ends by creating the
5
+ * generator with js_generator_new) and a resume function: a state machine that saves the
6
+ * values live across each pause point into the generator's frame.
7
+ */
8
+ #ifndef JS_GENERATOR_H
9
+ #define JS_GENERATOR_H
10
+
11
+ #include "js_object.h"
12
+
13
+ typedef struct JSGenerator JSGenerator;
14
+
15
+ /* Runs from the pause point g->state to the next one (returns the yielded value, status
16
+ * SUSPENDED) or to the end (returns the result or JS_EXCEPTION, status still EXECUTING). */
17
+ typedef JSValue (*JSGeneratorResume)(JSContext *ctx, JSGenerator *g, JSValue sent, int mode);
18
+
19
+ enum { JS_RESUME_NEXT, JS_RESUME_THROW, JS_RESUME_RETURN };
20
+ enum {
21
+ JS_GEN_START, JS_GEN_SUSPENDED, JS_GEN_EXECUTING, JS_GEN_COMPLETED,
22
+ JS_GEN_AWAITING, /* async: paused at an await (still running, to the async generator's queue) */
23
+ JS_GEN_AWAITING_RETURN, /* async generator: awaiting a return(v)'s value after completing */
24
+ };
25
+ enum { JS_GEN_SYNC, JS_GEN_ASYNC_FUNCTION, JS_GEN_ASYNC_GENERATOR }; /* JSGenerator.kind */
26
+
27
+ struct JSGenerator {
28
+ JSObject obj;
29
+ JSGeneratorResume resume;
30
+ JSValue frame; /* a value array: the saved live values; undefined once completed */
31
+ JSValue driver; /* async functions: the promise the call returned */
32
+ uint32_t state; /* the pause point to resume at: 0 = the start of the body */
33
+ uint8_t status; /* JS_GEN_* */
34
+ uint8_t raw; /* the last pause handed on yield*'s inner result object as it is */
35
+ uint8_t kind; /* JS_GEN_SYNC, ASYNC_FUNCTION, ASYNC_GENERATOR */
36
+ };
37
+
38
+ static inline JSGenerator *js_as_generator(JSValue v) { return (JSGenerator *)js_as_object(v); }
39
+
40
+ /* The entry's last step: a generator whose prototype is callee.prototype (or the realm's
41
+ * %GeneratorPrototype%), with `slots` frame slots. */
42
+ JSValue js_generator_new(JSContext *ctx, JSValue callee, JSGeneratorResume resume, uint32_t slots);
43
+
44
+ static inline void js_generator_save(JSContext *ctx, JSGenerator *g, uint32_t slot, JSValue v) {
45
+ JSValueArray *f = (JSValueArray *)js_as_cell(g->frame);
46
+ js_store(ctx, &f->cell, &f->values[slot], v);
47
+ }
48
+ static inline JSValue js_generator_load(JSGenerator *g, uint32_t slot) {
49
+ return ((JSValueArray *)js_as_cell(g->frame))->values[slot];
50
+ }
51
+
52
+ /* yield* (§15.5.5): the inner iterator as a record, one step forwarding a resume (mode as a
53
+ * number) to it, and that step's outcome: 0 yield the value (an inner result object),
54
+ * 1 done (the value is yield*'s), 2 return the value from the generator. */
55
+ JSValue js_yield_star_start(JSContext *ctx, JSValue iterable);
56
+ JSValue js_yield_star_step(JSContext *ctx, JSValue rec, JSValue received, JSValue mode);
57
+ JSValue js_yield_star_status(JSValue rec);
58
+
59
+ /* ---- Async functions (§27.7; ADR 0007) ------------------------------------------------- */
60
+
61
+ /* An async call's state: a generator-like object nothing in JS can reach. */
62
+ JSValue js_async_new(JSContext *ctx, JSGeneratorResume resume, uint32_t slots);
63
+ /* The entry's last step: runs the body to its first await (or the end) and returns the
64
+ * promise, which the body's outcome settles. Never throws. */
65
+ JSValue js_async_start(JSContext *ctx, JSGenerator *g);
66
+ /* await v: registers the resume on PromiseResolve(v); 0 (paused: status AWAITING), or -1
67
+ * if PromiseResolve threw (the exception is pending, at the await). */
68
+ JS_WARN_UNUSED int js_await(JSContext *ctx, JSGenerator *g, JSValue v);
69
+ /* Resumes a paused async call or async generator (a promise reaction job): mode NEXT with
70
+ * the value, THROW with the reason. */
71
+ void js_async_resume(JSContext *ctx, JSGenerator *g, JSValue value, int mode);
72
+
73
+ /* ---- Async generators and async iteration (§27.6, §27.1; async_iter.c) ---------------- */
74
+
75
+ /* The entry's last step for an async function*: like js_generator_new. */
76
+ JSValue js_async_generator_new(JSContext *ctx, JSValue callee, JSGeneratorResume resume, uint32_t slots);
77
+ void js_async_generator_resume(JSContext *ctx, JSGenerator *g, JSValue value, int mode);
78
+ /* for await: GetIterator(v, async) as a record (a sync iterator is wrapped,
79
+ * CreateAsyncFromSyncIterator); next() called; the awaited result's value (EMPTY when done);
80
+ * return() called (EMPTY: none, or the record is done); an awaited return() result checked. */
81
+ JSValue js_async_iter_start(JSContext *ctx, JSValue v);
82
+ JSValue js_async_iter_next(JSContext *ctx, JSValue rec);
83
+ JSValue js_async_iter_value(JSContext *ctx, JSValue rec, JSValue result);
84
+ JSValue js_async_iter_return(JSContext *ctx, JSValue rec);
85
+ JSValue js_async_iter_check(JSContext *ctx, JSValue result);
86
+ /* yield* in an async generator: a step (mode as a number) gives a value to await; settling
87
+ * it with the awaited value gives the outcome: status 0 yield it, 1 done (yield*'s value),
88
+ * 2 return it from the generator, 3 await it and settle again. */
89
+ JSValue js_async_yield_star_step(JSContext *ctx, JSValue rec, JSValue received, JSValue mode);
90
+ JSValue js_async_yield_star_settled(JSContext *ctx, JSValue rec, JSValue awaited);
91
+ JSValue js_async_yield_star_status(JSValue rec);
92
+ void js_async_iter_realm_init(JSContext *ctx);
93
+
94
+ void js_generator_realm_init(JSContext *ctx);
95
+
96
+ #endif /* JS_GENERATOR_H */
@@ -0,0 +1,19 @@
1
+ /* js_host.h — the host's layer 1 in the runtime (ADR 0012): console, process and global,
2
+ * installed before the program runs, and what host packages (node/) build on. Host packages
3
+ * declare their own primitives (node/include/js_node.h); the generated code declares the ones
4
+ * it uses. */
5
+ #ifndef JS_HOST_H
6
+ #define JS_HOST_H
7
+
8
+ #include "js_function.h"
9
+
10
+ /* process.c: console, process and global, installed before the program runs (main);
11
+ * the exit status (process.exitCode) unless the program failed; a process warning on stderr */
12
+ int js_host_init(JSContext *ctx, int argc, char **argv);
13
+ int js_host_exit_code(void);
14
+ void js_emit_warning(JSContext *ctx, JSValue message, const char *type, const char *code);
15
+
16
+ /* cwd(): the working directory (process.cwd()), also a host primitive of node:path; -errno on failure. */
17
+ JSValue js_host_cwd(JSContext *ctx, JSValue callee, JSValue this_val, uint32_t argc, const JSValue *argv, JSValue new_target);
18
+
19
+ #endif /* JS_HOST_H */
@@ -0,0 +1,84 @@
1
+ /*
2
+ * js_jobs.h — the job queue and the event loop (ADR 0008).
3
+ *
4
+ * Layer 1 (spec): microtasks, run at checkpoints when no JS is on the stack, then the
5
+ * unhandled rejections are processed. Layer 2 (host): the event loop that runs the
6
+ * main script, then runs timers, one per iteration with a checkpoint after each, until
7
+ * nothing is pending.
8
+ */
9
+ #ifndef JS_JOBS_H
10
+ #define JS_JOBS_H
11
+
12
+ #include "jsvalue.h"
13
+
14
+ typedef struct JSContext JSContext;
15
+ typedef struct JSRuntime JSRuntime;
16
+
17
+ enum {
18
+ JS_JOB_PROMISE_REACTION, /* a: reaction record, b: argument, c: int32 settled state */
19
+ JS_JOB_RESOLVE_THENABLE, /* a: promise to resolve, b: thenable, c: its then */
20
+ JS_JOB_CALLBACK, /* a: function (queueMicrotask), b: an array of its arguments, or undefined */
21
+ };
22
+
23
+ /* Every queued job's values are precise GC roots. */
24
+ typedef struct JSJob {
25
+ uint8_t kind;
26
+ JSContext *realm; /* set by js_enqueue_microtask: the realm that queued it */
27
+ JSValue a, b, c;
28
+ } JSJob;
29
+
30
+ typedef struct JSJobQueue {
31
+ JSJob *items; /* a ring buffer (malloc'd) */
32
+ size_t head, count, cap;
33
+ } JSJobQueue;
34
+
35
+ /* A setTimeout / setInterval (ADR 0008). Its values are GC roots. */
36
+ typedef struct JSTimer {
37
+ uint64_t deadline; /* in the loop's milliseconds */
38
+ uint64_t seq; /* creation order: breaks ties */
39
+ uint32_t id; /* what setTimeout returned: a positive integer */
40
+ uint32_t repeat; /* setInterval: its delay in ms; 0 for setTimeout */
41
+ uint8_t unref; /* doesn't keep the program alive (AbortSignal.timeout's) */
42
+ JSContext *realm;
43
+ JSValue fn;
44
+ JSValue args; /* an array of the extra arguments, or undefined */
45
+ } JSTimer;
46
+
47
+ typedef struct JSTimers {
48
+ JSTimer *heap; /* a min-heap on (deadline, seq) (malloc'd) */
49
+ size_t count, cap;
50
+ uint64_t now; /* the loop's clock, cached like libuv's: refreshed only when nothing is due */
51
+ uint64_t seq;
52
+ uint32_t next_id;
53
+ size_t refed; /* timers that keep the program alive: those not unref'd */
54
+ uint32_t running; /* the interval whose callback is running, or 0 */
55
+ uint8_t running_cleared;
56
+ } JSTimers;
57
+
58
+ /* What a checkpoint does with promises still rejected and unhandled at its end. */
59
+ typedef enum JSRejectionMode {
60
+ JS_REJECTIONS_STRICT, /* the default: print "Uncaught (in promise) …", stop, exit status 1 */
61
+ JS_REJECTIONS_WARN, /* print the same, keep running */
62
+ JS_REJECTIONS_NONE, /* ignore them */
63
+ } JSRejectionMode;
64
+
65
+ void js_enqueue_microtask(JSContext *ctx, const JSJob *job);
66
+ /* The checkpoint: runs every queued job (and the ones they queue), then processes
67
+ * unhandled rejections. A nested call does nothing. 0, or -1 after an uncaught error
68
+ * or a strict unhandled rejection (already reported). */
69
+ int js_run_microtasks(JSContext *ctx);
70
+ void js_set_rejection_mode(JSRuntime *rt, JSRejectionMode mode);
71
+
72
+ /* HostPromiseRejectionTracker (§27.2.1.9): `rejected` true for "reject" (a promise was
73
+ * rejected with no handler), false for "handle" (a handler was added later). */
74
+ void js_track_rejection(JSContext *ctx, JSValue promise, bool rejected);
75
+
76
+ /* A one-shot timer from C: fn() after `delay` ms (clamped as setTimeout clamps it). An unref'd
77
+ * one doesn't keep the program alive, as Node's timer.unref(). Its id (clearTimeout's). */
78
+ uint32_t js_add_timer(JSContext *ctx, JSValue fn, double delay, bool unref);
79
+
80
+ /* Runs the program after its main script returned `main_result`: reports an uncaught
81
+ * error, else checkpoints until nothing is pending. The process exit status. */
82
+ int js_run_event_loop(JSContext *ctx, JSValue main_result);
83
+
84
+ #endif /* JS_JOBS_H */
@@ -0,0 +1,16 @@
1
+ /* js_module.h — module-level host behavior (ADR 0009): import.meta and import(). */
2
+ #ifndef JS_MODULE_H
3
+ #define JS_MODULE_H
4
+
5
+ #include "js_function.h"
6
+
7
+ /* import.meta of the original module at `file` (an absolute path): created on first use and
8
+ * kept in *cache (a module slot, so the GC sees it), with null prototype and Node's
9
+ * properties dirname, filename, main, resolve and url. */
10
+ JSValue js_import_meta(JSContext *ctx, JSValue *cache, const char *file, bool main);
11
+
12
+ /* import(specifier, options) in the module at `importer`, for a specifier the bundler left in
13
+ * the program: a promise, rejected (ERR_MODULE_NOT_FOUND unless an argument check fails). */
14
+ JSValue js_dynamic_import(JSContext *ctx, JSValue specifier, JSValue options, const char *importer);
15
+
16
+ #endif /* JS_MODULE_H */