@scriptc/runtime 0.0.0 → 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 (416) hide show
  1. package/LICENSE +202 -0
  2. package/package.json +16 -6
  3. package/src/scr_array.c +488 -0
  4. package/src/scr_assert.c +1393 -0
  5. package/src/scr_async.c +2593 -0
  6. package/src/scr_async_dyn.c +607 -0
  7. package/src/scr_bytes.c +1425 -0
  8. package/src/scr_bytes_io.c +161 -0
  9. package/src/scr_child.c +3587 -0
  10. package/src/scr_closure.c +214 -0
  11. package/src/scr_console.c +143 -0
  12. package/src/scr_cycle.c +218 -0
  13. package/src/scr_dc.c +805 -0
  14. package/src/scr_dgram.c +1007 -0
  15. package/src/scr_dyn_handle.c +154 -0
  16. package/src/scr_dyn_invoke.c +644 -0
  17. package/src/scr_error.c +332 -0
  18. package/src/scr_events.c +714 -0
  19. package/src/scr_events_emitter.c +699 -0
  20. package/src/scr_exception.c +242 -0
  21. package/src/scr_fetch.c +1130 -0
  22. package/src/scr_fetch_curl.c +654 -0
  23. package/src/scr_http.c +3482 -0
  24. package/src/scr_http2.c +3030 -0
  25. package/src/scr_inspect.c +803 -0
  26. package/src/scr_inspect_island.c +51 -0
  27. package/src/scr_island.c +9363 -0
  28. package/src/scr_json.c +2151 -0
  29. package/src/scr_lib.c +3612 -0
  30. package/src/scr_loop_epoll.c +241 -0
  31. package/src/scr_loop_kqueue.c +121 -0
  32. package/src/scr_loop_wsapoll.c +208 -0
  33. package/src/scr_map.c +591 -0
  34. package/src/scr_net.c +3017 -0
  35. package/src/scr_net_island.c +458 -0
  36. package/src/scr_number.c +115 -0
  37. package/src/scr_object.c +25 -0
  38. package/src/scr_path.c +1266 -0
  39. package/src/scr_platform.h +119 -0
  40. package/src/scr_readline.c +287 -0
  41. package/src/scr_regex.c +1080 -0
  42. package/src/scr_runtime.h +5046 -0
  43. package/src/scr_stream.c +2877 -0
  44. package/src/scr_string.c +1264 -0
  45. package/src/scr_symbol.c +132 -0
  46. package/src/scr_test.c +662 -0
  47. package/src/scr_tls.c +1520 -0
  48. package/src/scr_union.c +105 -0
  49. package/src/scr_url.c +911 -0
  50. package/src/scr_url_internal.h +29 -0
  51. package/src/scr_url_params.c +561 -0
  52. package/src/scr_watch.c +568 -0
  53. package/src/scr_web.c +1778 -0
  54. package/src/scr_win.c +76 -0
  55. package/src/scr_zlib.c +197 -0
  56. package/src/scr_zlib_island.c +15 -0
  57. package/vendor/README.md +52 -0
  58. package/vendor/curl/COPYRIGHT +534 -0
  59. package/vendor/curl/include/curl/curl.h +3214 -0
  60. package/vendor/curl/include/curl/curlver.h +79 -0
  61. package/vendor/curl/include/curl/easy.h +125 -0
  62. package/vendor/curl/include/curl/header.h +74 -0
  63. package/vendor/curl/include/curl/mprintf.h +52 -0
  64. package/vendor/curl/include/curl/multi.h +460 -0
  65. package/vendor/curl/include/curl/options.h +70 -0
  66. package/vendor/curl/include/curl/stdcheaders.h +35 -0
  67. package/vendor/curl/include/curl/system.h +508 -0
  68. package/vendor/curl/include/curl/typecheck-gcc.h +716 -0
  69. package/vendor/curl/include/curl/urlapi.h +149 -0
  70. package/vendor/curl/include/curl/websockets.h +84 -0
  71. package/vendor/mbedtls/LICENSE +553 -0
  72. package/vendor/mbedtls/include/CMakeLists.txt +22 -0
  73. package/vendor/mbedtls/include/mbedtls/aes.h +631 -0
  74. package/vendor/mbedtls/include/mbedtls/aria.h +343 -0
  75. package/vendor/mbedtls/include/mbedtls/asn1.h +642 -0
  76. package/vendor/mbedtls/include/mbedtls/asn1write.h +390 -0
  77. package/vendor/mbedtls/include/mbedtls/base64.h +82 -0
  78. package/vendor/mbedtls/include/mbedtls/bignum.h +1088 -0
  79. package/vendor/mbedtls/include/mbedtls/block_cipher.h +76 -0
  80. package/vendor/mbedtls/include/mbedtls/build_info.h +194 -0
  81. package/vendor/mbedtls/include/mbedtls/camellia.h +305 -0
  82. package/vendor/mbedtls/include/mbedtls/ccm.h +526 -0
  83. package/vendor/mbedtls/include/mbedtls/chacha20.h +209 -0
  84. package/vendor/mbedtls/include/mbedtls/chachapoly.h +351 -0
  85. package/vendor/mbedtls/include/mbedtls/check_config.h +1149 -0
  86. package/vendor/mbedtls/include/mbedtls/cipher.h +1250 -0
  87. package/vendor/mbedtls/include/mbedtls/cmac.h +246 -0
  88. package/vendor/mbedtls/include/mbedtls/compat-2.x.h +46 -0
  89. package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_crypto.h +578 -0
  90. package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_from_psa.h +873 -0
  91. package/vendor/mbedtls/include/mbedtls/config_adjust_psa_from_legacy.h +359 -0
  92. package/vendor/mbedtls/include/mbedtls/config_adjust_psa_superset_legacy.h +145 -0
  93. package/vendor/mbedtls/include/mbedtls/config_adjust_ssl.h +91 -0
  94. package/vendor/mbedtls/include/mbedtls/config_adjust_x509.h +35 -0
  95. package/vendor/mbedtls/include/mbedtls/config_psa.h +61 -0
  96. package/vendor/mbedtls/include/mbedtls/constant_time.h +36 -0
  97. package/vendor/mbedtls/include/mbedtls/ctr_drbg.h +596 -0
  98. package/vendor/mbedtls/include/mbedtls/debug.h +156 -0
  99. package/vendor/mbedtls/include/mbedtls/des.h +385 -0
  100. package/vendor/mbedtls/include/mbedtls/dhm.h +972 -0
  101. package/vendor/mbedtls/include/mbedtls/ecdh.h +455 -0
  102. package/vendor/mbedtls/include/mbedtls/ecdsa.h +674 -0
  103. package/vendor/mbedtls/include/mbedtls/ecjpake.h +298 -0
  104. package/vendor/mbedtls/include/mbedtls/ecp.h +1517 -0
  105. package/vendor/mbedtls/include/mbedtls/entropy.h +274 -0
  106. package/vendor/mbedtls/include/mbedtls/error.h +201 -0
  107. package/vendor/mbedtls/include/mbedtls/gcm.h +387 -0
  108. package/vendor/mbedtls/include/mbedtls/hkdf.h +124 -0
  109. package/vendor/mbedtls/include/mbedtls/hmac_drbg.h +434 -0
  110. package/vendor/mbedtls/include/mbedtls/lms.h +440 -0
  111. package/vendor/mbedtls/include/mbedtls/mbedtls_config.h +4446 -0
  112. package/vendor/mbedtls/include/mbedtls/md.h +526 -0
  113. package/vendor/mbedtls/include/mbedtls/md5.h +190 -0
  114. package/vendor/mbedtls/include/mbedtls/memory_buffer_alloc.h +142 -0
  115. package/vendor/mbedtls/include/mbedtls/net_sockets.h +299 -0
  116. package/vendor/mbedtls/include/mbedtls/nist_kw.h +166 -0
  117. package/vendor/mbedtls/include/mbedtls/oid.h +727 -0
  118. package/vendor/mbedtls/include/mbedtls/pem.h +160 -0
  119. package/vendor/mbedtls/include/mbedtls/pk.h +1303 -0
  120. package/vendor/mbedtls/include/mbedtls/pkcs12.h +186 -0
  121. package/vendor/mbedtls/include/mbedtls/pkcs5.h +198 -0
  122. package/vendor/mbedtls/include/mbedtls/pkcs7.h +252 -0
  123. package/vendor/mbedtls/include/mbedtls/platform.h +516 -0
  124. package/vendor/mbedtls/include/mbedtls/platform_time.h +79 -0
  125. package/vendor/mbedtls/include/mbedtls/platform_util.h +247 -0
  126. package/vendor/mbedtls/include/mbedtls/poly1305.h +168 -0
  127. package/vendor/mbedtls/include/mbedtls/private_access.h +20 -0
  128. package/vendor/mbedtls/include/mbedtls/psa_util.h +207 -0
  129. package/vendor/mbedtls/include/mbedtls/ripemd160.h +136 -0
  130. package/vendor/mbedtls/include/mbedtls/rsa.h +1170 -0
  131. package/vendor/mbedtls/include/mbedtls/sha1.h +219 -0
  132. package/vendor/mbedtls/include/mbedtls/sha256.h +200 -0
  133. package/vendor/mbedtls/include/mbedtls/sha3.h +172 -0
  134. package/vendor/mbedtls/include/mbedtls/sha512.h +208 -0
  135. package/vendor/mbedtls/include/mbedtls/ssl.h +5887 -0
  136. package/vendor/mbedtls/include/mbedtls/ssl_cache.h +187 -0
  137. package/vendor/mbedtls/include/mbedtls/ssl_ciphersuites.h +482 -0
  138. package/vendor/mbedtls/include/mbedtls/ssl_cookie.h +106 -0
  139. package/vendor/mbedtls/include/mbedtls/ssl_ticket.h +199 -0
  140. package/vendor/mbedtls/include/mbedtls/threading.h +167 -0
  141. package/vendor/mbedtls/include/mbedtls/timing.h +94 -0
  142. package/vendor/mbedtls/include/mbedtls/version.h +78 -0
  143. package/vendor/mbedtls/include/mbedtls/x509.h +500 -0
  144. package/vendor/mbedtls/include/mbedtls/x509_crl.h +184 -0
  145. package/vendor/mbedtls/include/mbedtls/x509_crt.h +1208 -0
  146. package/vendor/mbedtls/include/mbedtls/x509_csr.h +382 -0
  147. package/vendor/mbedtls/include/psa/build_info.h +20 -0
  148. package/vendor/mbedtls/include/psa/crypto.h +4998 -0
  149. package/vendor/mbedtls/include/psa/crypto_adjust_auto_enabled.h +31 -0
  150. package/vendor/mbedtls/include/psa/crypto_adjust_config_dependencies.h +51 -0
  151. package/vendor/mbedtls/include/psa/crypto_adjust_config_key_pair_types.h +101 -0
  152. package/vendor/mbedtls/include/psa/crypto_adjust_config_synonyms.h +49 -0
  153. package/vendor/mbedtls/include/psa/crypto_builtin_composites.h +214 -0
  154. package/vendor/mbedtls/include/psa/crypto_builtin_key_derivation.h +118 -0
  155. package/vendor/mbedtls/include/psa/crypto_builtin_primitives.h +114 -0
  156. package/vendor/mbedtls/include/psa/crypto_compat.h +230 -0
  157. package/vendor/mbedtls/include/psa/crypto_config.h +145 -0
  158. package/vendor/mbedtls/include/psa/crypto_driver_common.h +44 -0
  159. package/vendor/mbedtls/include/psa/crypto_driver_contexts_composites.h +151 -0
  160. package/vendor/mbedtls/include/psa/crypto_driver_contexts_key_derivation.h +52 -0
  161. package/vendor/mbedtls/include/psa/crypto_driver_contexts_primitives.h +105 -0
  162. package/vendor/mbedtls/include/psa/crypto_extra.h +2145 -0
  163. package/vendor/mbedtls/include/psa/crypto_legacy.h +88 -0
  164. package/vendor/mbedtls/include/psa/crypto_platform.h +102 -0
  165. package/vendor/mbedtls/include/psa/crypto_se_driver.h +1383 -0
  166. package/vendor/mbedtls/include/psa/crypto_sizes.h +1319 -0
  167. package/vendor/mbedtls/include/psa/crypto_struct.h +527 -0
  168. package/vendor/mbedtls/include/psa/crypto_types.h +508 -0
  169. package/vendor/mbedtls/include/psa/crypto_values.h +2782 -0
  170. package/vendor/mbedtls/library/aes.c +2294 -0
  171. package/vendor/mbedtls/library/aesce.c +624 -0
  172. package/vendor/mbedtls/library/aesce.h +136 -0
  173. package/vendor/mbedtls/library/aesni.c +846 -0
  174. package/vendor/mbedtls/library/aesni.h +162 -0
  175. package/vendor/mbedtls/library/alignment.h +704 -0
  176. package/vendor/mbedtls/library/aria.c +969 -0
  177. package/vendor/mbedtls/library/asn1parse.c +468 -0
  178. package/vendor/mbedtls/library/asn1write.c +440 -0
  179. package/vendor/mbedtls/library/base64.c +322 -0
  180. package/vendor/mbedtls/library/base64_internal.h +45 -0
  181. package/vendor/mbedtls/library/bignum.c +2583 -0
  182. package/vendor/mbedtls/library/bignum_core.c +1240 -0
  183. package/vendor/mbedtls/library/bignum_core.h +872 -0
  184. package/vendor/mbedtls/library/bignum_core_invasive.h +38 -0
  185. package/vendor/mbedtls/library/bignum_internal.h +122 -0
  186. package/vendor/mbedtls/library/bignum_mod.c +394 -0
  187. package/vendor/mbedtls/library/bignum_mod.h +452 -0
  188. package/vendor/mbedtls/library/bignum_mod_raw.c +276 -0
  189. package/vendor/mbedtls/library/bignum_mod_raw.h +416 -0
  190. package/vendor/mbedtls/library/bignum_mod_raw_invasive.h +34 -0
  191. package/vendor/mbedtls/library/block_cipher.c +207 -0
  192. package/vendor/mbedtls/library/block_cipher_internal.h +99 -0
  193. package/vendor/mbedtls/library/bn_mul.h +1094 -0
  194. package/vendor/mbedtls/library/camellia.c +1058 -0
  195. package/vendor/mbedtls/library/ccm.c +777 -0
  196. package/vendor/mbedtls/library/chacha20.c +563 -0
  197. package/vendor/mbedtls/library/chacha20_internal.h +23 -0
  198. package/vendor/mbedtls/library/chachapoly.c +487 -0
  199. package/vendor/mbedtls/library/check_crypto_config.h +136 -0
  200. package/vendor/mbedtls/library/cipher.c +1712 -0
  201. package/vendor/mbedtls/library/cipher_invasive.h +28 -0
  202. package/vendor/mbedtls/library/cipher_wrap.c +2482 -0
  203. package/vendor/mbedtls/library/cipher_wrap.h +178 -0
  204. package/vendor/mbedtls/library/cmac.c +1067 -0
  205. package/vendor/mbedtls/library/common.h +487 -0
  206. package/vendor/mbedtls/library/constant_time.c +247 -0
  207. package/vendor/mbedtls/library/constant_time_impl.h +541 -0
  208. package/vendor/mbedtls/library/constant_time_internal.h +579 -0
  209. package/vendor/mbedtls/library/ctr.h +35 -0
  210. package/vendor/mbedtls/library/ctr_drbg.c +1016 -0
  211. package/vendor/mbedtls/library/debug.c +475 -0
  212. package/vendor/mbedtls/library/debug_internal.h +185 -0
  213. package/vendor/mbedtls/library/des.c +1042 -0
  214. package/vendor/mbedtls/library/dhm.c +700 -0
  215. package/vendor/mbedtls/library/ecdh.c +696 -0
  216. package/vendor/mbedtls/library/ecdsa.c +858 -0
  217. package/vendor/mbedtls/library/ecjpake.c +1216 -0
  218. package/vendor/mbedtls/library/ecp.c +3674 -0
  219. package/vendor/mbedtls/library/ecp_curves.c +6125 -0
  220. package/vendor/mbedtls/library/ecp_curves_new.c +9 -0
  221. package/vendor/mbedtls/library/ecp_internal_alt.h +287 -0
  222. package/vendor/mbedtls/library/ecp_invasive.h +305 -0
  223. package/vendor/mbedtls/library/entropy.c +680 -0
  224. package/vendor/mbedtls/library/entropy_poll.c +233 -0
  225. package/vendor/mbedtls/library/entropy_poll.h +64 -0
  226. package/vendor/mbedtls/library/error.c +878 -0
  227. package/vendor/mbedtls/library/gcm.c +1330 -0
  228. package/vendor/mbedtls/library/hkdf.c +161 -0
  229. package/vendor/mbedtls/library/hmac_drbg.c +633 -0
  230. package/vendor/mbedtls/library/lmots.c +789 -0
  231. package/vendor/mbedtls/library/lmots.h +288 -0
  232. package/vendor/mbedtls/library/lms.c +778 -0
  233. package/vendor/mbedtls/library/md.c +1108 -0
  234. package/vendor/mbedtls/library/md5.c +426 -0
  235. package/vendor/mbedtls/library/md_psa.h +26 -0
  236. package/vendor/mbedtls/library/md_wrap.h +46 -0
  237. package/vendor/mbedtls/library/memory_buffer_alloc.c +751 -0
  238. package/vendor/mbedtls/library/mps_common.h +181 -0
  239. package/vendor/mbedtls/library/mps_error.h +89 -0
  240. package/vendor/mbedtls/library/mps_reader.c +538 -0
  241. package/vendor/mbedtls/library/mps_reader.h +366 -0
  242. package/vendor/mbedtls/library/mps_trace.c +112 -0
  243. package/vendor/mbedtls/library/mps_trace.h +154 -0
  244. package/vendor/mbedtls/library/net_sockets.c +694 -0
  245. package/vendor/mbedtls/library/nist_kw.c +729 -0
  246. package/vendor/mbedtls/library/oid.c +1166 -0
  247. package/vendor/mbedtls/library/padlock.c +157 -0
  248. package/vendor/mbedtls/library/padlock.h +111 -0
  249. package/vendor/mbedtls/library/pem.c +554 -0
  250. package/vendor/mbedtls/library/pk.c +1602 -0
  251. package/vendor/mbedtls/library/pk_ecc.c +261 -0
  252. package/vendor/mbedtls/library/pk_internal.h +241 -0
  253. package/vendor/mbedtls/library/pk_wrap.c +1618 -0
  254. package/vendor/mbedtls/library/pk_wrap.h +138 -0
  255. package/vendor/mbedtls/library/pkcs12.c +437 -0
  256. package/vendor/mbedtls/library/pkcs5.c +500 -0
  257. package/vendor/mbedtls/library/pkcs7.c +787 -0
  258. package/vendor/mbedtls/library/pkparse.c +1392 -0
  259. package/vendor/mbedtls/library/pkwrite.c +631 -0
  260. package/vendor/mbedtls/library/pkwrite.h +121 -0
  261. package/vendor/mbedtls/library/platform.c +402 -0
  262. package/vendor/mbedtls/library/platform_util.c +258 -0
  263. package/vendor/mbedtls/library/poly1305.c +492 -0
  264. package/vendor/mbedtls/library/psa_crypto.c +9532 -0
  265. package/vendor/mbedtls/library/psa_crypto_aead.c +646 -0
  266. package/vendor/mbedtls/library/psa_crypto_aead.h +499 -0
  267. package/vendor/mbedtls/library/psa_crypto_cipher.c +747 -0
  268. package/vendor/mbedtls/library/psa_crypto_cipher.h +316 -0
  269. package/vendor/mbedtls/library/psa_crypto_client.c +22 -0
  270. package/vendor/mbedtls/library/psa_crypto_core.h +983 -0
  271. package/vendor/mbedtls/library/psa_crypto_core_common.h +52 -0
  272. package/vendor/mbedtls/library/psa_crypto_driver_wrappers.h +2896 -0
  273. package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.c +256 -0
  274. package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.h +31 -0
  275. package/vendor/mbedtls/library/psa_crypto_ecp.c +594 -0
  276. package/vendor/mbedtls/library/psa_crypto_ecp.h +267 -0
  277. package/vendor/mbedtls/library/psa_crypto_ffdh.c +361 -0
  278. package/vendor/mbedtls/library/psa_crypto_ffdh.h +131 -0
  279. package/vendor/mbedtls/library/psa_crypto_hash.c +470 -0
  280. package/vendor/mbedtls/library/psa_crypto_hash.h +211 -0
  281. package/vendor/mbedtls/library/psa_crypto_invasive.h +92 -0
  282. package/vendor/mbedtls/library/psa_crypto_its.h +131 -0
  283. package/vendor/mbedtls/library/psa_crypto_mac.c +505 -0
  284. package/vendor/mbedtls/library/psa_crypto_mac.h +264 -0
  285. package/vendor/mbedtls/library/psa_crypto_pake.c +571 -0
  286. package/vendor/mbedtls/library/psa_crypto_pake.h +159 -0
  287. package/vendor/mbedtls/library/psa_crypto_random.c +181 -0
  288. package/vendor/mbedtls/library/psa_crypto_random.h +72 -0
  289. package/vendor/mbedtls/library/psa_crypto_random_impl.h +200 -0
  290. package/vendor/mbedtls/library/psa_crypto_rsa.c +714 -0
  291. package/vendor/mbedtls/library/psa_crypto_rsa.h +321 -0
  292. package/vendor/mbedtls/library/psa_crypto_se.c +373 -0
  293. package/vendor/mbedtls/library/psa_crypto_se.h +192 -0
  294. package/vendor/mbedtls/library/psa_crypto_slot_management.c +1137 -0
  295. package/vendor/mbedtls/library/psa_crypto_slot_management.h +344 -0
  296. package/vendor/mbedtls/library/psa_crypto_storage.c +481 -0
  297. package/vendor/mbedtls/library/psa_crypto_storage.h +392 -0
  298. package/vendor/mbedtls/library/psa_its_file.c +254 -0
  299. package/vendor/mbedtls/library/psa_util.c +614 -0
  300. package/vendor/mbedtls/library/psa_util_internal.h +100 -0
  301. package/vendor/mbedtls/library/ripemd160.c +490 -0
  302. package/vendor/mbedtls/library/rsa.c +3121 -0
  303. package/vendor/mbedtls/library/rsa_alt_helpers.c +455 -0
  304. package/vendor/mbedtls/library/rsa_alt_helpers.h +209 -0
  305. package/vendor/mbedtls/library/rsa_internal.h +188 -0
  306. package/vendor/mbedtls/library/sha1.c +480 -0
  307. package/vendor/mbedtls/library/sha256.c +983 -0
  308. package/vendor/mbedtls/library/sha3.c +721 -0
  309. package/vendor/mbedtls/library/sha512.c +1115 -0
  310. package/vendor/mbedtls/library/ssl_cache.c +410 -0
  311. package/vendor/mbedtls/library/ssl_ciphersuites.c +2050 -0
  312. package/vendor/mbedtls/library/ssl_ciphersuites_internal.h +154 -0
  313. package/vendor/mbedtls/library/ssl_client.c +1023 -0
  314. package/vendor/mbedtls/library/ssl_client.h +22 -0
  315. package/vendor/mbedtls/library/ssl_cookie.c +384 -0
  316. package/vendor/mbedtls/library/ssl_debug_helpers.h +85 -0
  317. package/vendor/mbedtls/library/ssl_debug_helpers_generated.c +251 -0
  318. package/vendor/mbedtls/library/ssl_misc.h +3198 -0
  319. package/vendor/mbedtls/library/ssl_msg.c +6619 -0
  320. package/vendor/mbedtls/library/ssl_ticket.c +556 -0
  321. package/vendor/mbedtls/library/ssl_tls.c +10234 -0
  322. package/vendor/mbedtls/library/ssl_tls12_client.c +3688 -0
  323. package/vendor/mbedtls/library/ssl_tls12_server.c +4311 -0
  324. package/vendor/mbedtls/library/ssl_tls13_client.c +3208 -0
  325. package/vendor/mbedtls/library/ssl_tls13_generic.c +1793 -0
  326. package/vendor/mbedtls/library/ssl_tls13_invasive.h +23 -0
  327. package/vendor/mbedtls/library/ssl_tls13_keys.c +1918 -0
  328. package/vendor/mbedtls/library/ssl_tls13_keys.h +668 -0
  329. package/vendor/mbedtls/library/ssl_tls13_server.c +3624 -0
  330. package/vendor/mbedtls/library/threading.c +193 -0
  331. package/vendor/mbedtls/library/threading_internal.h +28 -0
  332. package/vendor/mbedtls/library/timing.c +152 -0
  333. package/vendor/mbedtls/library/version.c +32 -0
  334. package/vendor/mbedtls/library/version_features.c +856 -0
  335. package/vendor/mbedtls/library/x509.c +1776 -0
  336. package/vendor/mbedtls/library/x509_create.c +570 -0
  337. package/vendor/mbedtls/library/x509_crl.c +708 -0
  338. package/vendor/mbedtls/library/x509_crt.c +3311 -0
  339. package/vendor/mbedtls/library/x509_csr.c +648 -0
  340. package/vendor/mbedtls/library/x509_internal.h +101 -0
  341. package/vendor/mbedtls/library/x509write.c +174 -0
  342. package/vendor/mbedtls/library/x509write_crt.c +688 -0
  343. package/vendor/mbedtls/library/x509write_csr.c +336 -0
  344. package/vendor/quickjs-ng/CMakeLists.txt +566 -0
  345. package/vendor/quickjs-ng/LICENSE +24 -0
  346. package/vendor/quickjs-ng/README.md +24 -0
  347. package/vendor/quickjs-ng/api-test.c +1195 -0
  348. package/vendor/quickjs-ng/builtin-array-fromasync.h +119 -0
  349. package/vendor/quickjs-ng/builtin-iterator-zip-keyed.h +332 -0
  350. package/vendor/quickjs-ng/builtin-iterator-zip.h +337 -0
  351. package/vendor/quickjs-ng/cutils.h +1998 -0
  352. package/vendor/quickjs-ng/dtoa.c +1619 -0
  353. package/vendor/quickjs-ng/dtoa.h +87 -0
  354. package/vendor/quickjs-ng/gen/function_source.c +81 -0
  355. package/vendor/quickjs-ng/gen/hello.c +53 -0
  356. package/vendor/quickjs-ng/gen/hello_module.c +106 -0
  357. package/vendor/quickjs-ng/gen/repl.c +3036 -0
  358. package/vendor/quickjs-ng/gen/standalone.c +323 -0
  359. package/vendor/quickjs-ng/gen/test_fib.c +81 -0
  360. package/vendor/quickjs-ng/libregexp-opcode.h +73 -0
  361. package/vendor/quickjs-ng/libregexp.c +3474 -0
  362. package/vendor/quickjs-ng/libregexp.h +101 -0
  363. package/vendor/quickjs-ng/libunicode-table.h +5173 -0
  364. package/vendor/quickjs-ng/libunicode.c +2069 -0
  365. package/vendor/quickjs-ng/libunicode.h +172 -0
  366. package/vendor/quickjs-ng/list.h +107 -0
  367. package/vendor/quickjs-ng/lre-test.c +52 -0
  368. package/vendor/quickjs-ng/qjs.c +762 -0
  369. package/vendor/quickjs-ng/qjsc.c +673 -0
  370. package/vendor/quickjs-ng/quickjs-atom.h +280 -0
  371. package/vendor/quickjs-ng/quickjs-c-atomics.h +54 -0
  372. package/vendor/quickjs-ng/quickjs-libc.c +5037 -0
  373. package/vendor/quickjs-ng/quickjs-libc.h +87 -0
  374. package/vendor/quickjs-ng/quickjs-opcode.h +377 -0
  375. package/vendor/quickjs-ng/quickjs.c +64041 -0
  376. package/vendor/quickjs-ng/quickjs.h +1447 -0
  377. package/vendor/quickjs-ng/run-test262.c +2374 -0
  378. package/vendor/quickjs-ng/unicode_gen.c +3121 -0
  379. package/vendor/quickjs-ng/unicode_gen_def.h +310 -0
  380. package/vendor/ryu/LICENSE-Boost +23 -0
  381. package/vendor/ryu/common.h +114 -0
  382. package/vendor/ryu/d2s.c +509 -0
  383. package/vendor/ryu/d2s_full_table.h +367 -0
  384. package/vendor/ryu/d2s_intrinsics.h +357 -0
  385. package/vendor/ryu/d2s_small_table.h +186 -0
  386. package/vendor/ryu/digit_table.h +35 -0
  387. package/vendor/ryu/ryu.h +46 -0
  388. package/vendor/zlib/LICENSE +22 -0
  389. package/vendor/zlib/adler32.c +164 -0
  390. package/vendor/zlib/compress.c +75 -0
  391. package/vendor/zlib/crc32.c +1049 -0
  392. package/vendor/zlib/crc32.h +9446 -0
  393. package/vendor/zlib/deflate.c +2139 -0
  394. package/vendor/zlib/deflate.h +377 -0
  395. package/vendor/zlib/gzclose.c +23 -0
  396. package/vendor/zlib/gzguts.h +214 -0
  397. package/vendor/zlib/gzlib.c +582 -0
  398. package/vendor/zlib/gzread.c +602 -0
  399. package/vendor/zlib/gzwrite.c +631 -0
  400. package/vendor/zlib/infback.c +628 -0
  401. package/vendor/zlib/inffast.c +320 -0
  402. package/vendor/zlib/inffast.h +11 -0
  403. package/vendor/zlib/inffixed.h +94 -0
  404. package/vendor/zlib/inflate.c +1526 -0
  405. package/vendor/zlib/inflate.h +126 -0
  406. package/vendor/zlib/inftrees.c +299 -0
  407. package/vendor/zlib/inftrees.h +62 -0
  408. package/vendor/zlib/trees.c +1117 -0
  409. package/vendor/zlib/trees.h +128 -0
  410. package/vendor/zlib/uncompr.c +85 -0
  411. package/vendor/zlib/zconf.h +543 -0
  412. package/vendor/zlib/zlib.h +1938 -0
  413. package/vendor/zlib/zutil.c +299 -0
  414. package/vendor/zlib/zutil.h +254 -0
  415. package/README.md +0 -3
  416. package/index.js +0 -2
@@ -0,0 +1,214 @@
1
+ #include "scr_runtime.h"
2
+
3
+ #include <stdio.h>
4
+ #include <stdlib.h>
5
+ #include <string.h>
6
+
7
+ #ifdef SCR_RC_AUDIT
8
+ static long scr_live_boxes = 0;
9
+ static long scr_live_closures = 0;
10
+ long scr_box_live_count(void) { return scr_live_boxes; }
11
+ long scr_closure_live_count(void) { return scr_live_closures; }
12
+ #endif
13
+
14
+ /* ── boxes ──────────────────────────────────────────────────────────────
15
+ * Every box carries a cycle header (a captured binding can hold anything,
16
+ * including the closure that captures it — the canonical cycle). The box's
17
+ * trace visits its payload when the payload type itself carries a header:
18
+ * closures always do; SCR_BOX_OBJ payloads iff the compiler passed a trace
19
+ * (obj_trace doubles as that flag); strings/scalars never. SCR_BOX_ARR
20
+ * holds acyclic arrays only — a CYCLE-CAPABLE array (traced ref elements)
21
+ * rides a SCR_BOX_OBJ box with the array's `_v` adapters + scr_arr_trace_v,
22
+ * so its edge stays visible to the collector. */
23
+
24
+ static void *scr_box_ptr(const ScrBox *b) {
25
+ void *p;
26
+ memcpy(&p, &b->slot, sizeof p);
27
+ return p;
28
+ }
29
+
30
+ static void scr_box_trace(void *o, ScrTraceVisit visit, void *ctx) {
31
+ ScrBox *b = (ScrBox *)o;
32
+ void *p = scr_box_ptr(b);
33
+ if (!p) return; /* freshly-created boxes hold NULL until first write */
34
+ switch (b->kind) {
35
+ case SCR_BOX_FUNC:
36
+ visit(p, ctx);
37
+ break;
38
+ case SCR_BOX_OBJ:
39
+ if (b->obj_trace) visit(p, ctx);
40
+ break;
41
+ default:
42
+ break;
43
+ }
44
+ }
45
+
46
+ /* Teardown for the collector: release exactly the payloads the trace does
47
+ * NOT visit (the complement — see the contract in scr_runtime.h). */
48
+ static void scr_box_gcfree(void *o) {
49
+ ScrBox *b = (ScrBox *)o;
50
+ void *p = scr_box_ptr(b);
51
+ if (p) {
52
+ switch (b->kind) {
53
+ case SCR_BOX_STR:
54
+ scr_str_release((ScrStr *)p);
55
+ break;
56
+ case SCR_BOX_ARR:
57
+ scr_arr_release((ScrArr *)p);
58
+ break;
59
+ case SCR_BOX_OBJ:
60
+ if (!b->obj_trace) b->obj_release(p);
61
+ break;
62
+ default: /* FUNC is traced; scalars own nothing */
63
+ break;
64
+ }
65
+ }
66
+ #ifdef SCR_RC_AUDIT
67
+ scr_live_boxes--;
68
+ #endif
69
+ scr_cyc_free(b);
70
+ }
71
+
72
+ ScrBox *scr_box_new(ScrBoxKind kind) {
73
+ ScrBox *b = scr_cyc_alloc(sizeof(ScrBox), &scr_box_trace, &scr_box_gcfree);
74
+ b->rc = 1;
75
+ b->kind = kind;
76
+ #ifdef SCR_RC_AUDIT
77
+ scr_live_boxes++;
78
+ #endif
79
+ return b;
80
+ }
81
+
82
+ ScrBox *scr_box_new_obj(void *(*retain)(void *), void (*release)(void *),
83
+ ScrTraceFn trace) {
84
+ ScrBox *b = scr_box_new(SCR_BOX_OBJ);
85
+ b->obj_retain = retain;
86
+ b->obj_release = release;
87
+ b->obj_trace = trace;
88
+ return b;
89
+ }
90
+
91
+ /* Release one payload pointer by the box's kind. Factored so set_ref can
92
+ * release the value it REPLACED after the slot is already overwritten
93
+ * (mutators must unlink before releasing — see scr_cycle.c). */
94
+ static void scr_box_release_payload(ScrBox *b, void *p) {
95
+ if (!p) return;
96
+ switch (b->kind) {
97
+ case SCR_BOX_STR:
98
+ scr_str_release((ScrStr *)p);
99
+ break;
100
+ case SCR_BOX_ARR:
101
+ scr_arr_release((ScrArr *)p);
102
+ break;
103
+ case SCR_BOX_FUNC:
104
+ scr_closure_release((ScrClosure *)p);
105
+ break;
106
+ case SCR_BOX_OBJ:
107
+ b->obj_release(p);
108
+ break;
109
+ case SCR_BOX_F64:
110
+ case SCR_BOX_BOOL:
111
+ break;
112
+ }
113
+ }
114
+
115
+ void scr_box_release(ScrBox *b) {
116
+ if (!b || b->rc == SIZE_MAX) return; /* NULL: a switch jumped past the decl */
117
+ if (--b->rc == 0) {
118
+ scr_cyc_on_dead(b);
119
+ scr_box_release_payload(b, scr_box_ptr(b));
120
+ #ifdef SCR_RC_AUDIT
121
+ scr_live_boxes--;
122
+ #endif
123
+ scr_cyc_free(b);
124
+ } else {
125
+ scr_cyc_on_release(b); /* possible cycle root; may collect — b is done */
126
+ }
127
+ }
128
+
129
+ double scr_box_get_f64(ScrBox *b) {
130
+ double v;
131
+ memcpy(&v, &b->slot, sizeof v);
132
+ return v;
133
+ }
134
+
135
+ bool scr_box_get_bool(ScrBox *b) { return b->slot != 0; }
136
+
137
+ void *scr_box_get_ref(ScrBox *b) {
138
+ void *p = scr_box_ptr(b);
139
+ switch (b->kind) {
140
+ case SCR_BOX_STR:
141
+ return scr_str_retain((ScrStr *)p);
142
+ case SCR_BOX_ARR:
143
+ return scr_arr_retain((ScrArr *)p);
144
+ case SCR_BOX_FUNC:
145
+ return scr_closure_retain((ScrClosure *)p);
146
+ case SCR_BOX_OBJ:
147
+ return b->obj_retain(p);
148
+ default:
149
+ fputs("scriptc: internal error: box_get_ref on a scalar box\n", stderr);
150
+ abort();
151
+ }
152
+ }
153
+
154
+ void scr_box_set_f64(ScrBox *b, double v) { memcpy(&b->slot, &v, sizeof v); }
155
+
156
+ void scr_box_set_bool(ScrBox *b, bool v) { b->slot = v ? 1 : 0; }
157
+
158
+ void scr_box_set_ref(ScrBox *b, void *v) {
159
+ /* Unlink-then-release: the slot must already hold the new value when the
160
+ * old one's release runs (it can trigger a collection, which must not
161
+ * walk the b→old edge whose count was just given up). */
162
+ void *old = scr_box_ptr(b);
163
+ memcpy(&b->slot, &v, sizeof v);
164
+ scr_box_release_payload(b, old);
165
+ }
166
+
167
+ /* ── closures ─────────────────────────────────────────────────────────── */
168
+
169
+ static void scr_closure_trace(void *o, ScrTraceVisit visit, void *ctx) {
170
+ ScrClosure *c = (ScrClosure *)o;
171
+ for (size_t i = 0; i < c->ncaps; i++) visit(c->caps[i], ctx);
172
+ }
173
+
174
+ static void scr_closure_gcfree(void *o) {
175
+ /* Caps are all boxes — all traced. The own-property table (props) is
176
+ * an untraced box: released here like any external owned edge. */
177
+ scr_box_release(((ScrClosure *)o)->props);
178
+ #ifdef SCR_RC_AUDIT
179
+ scr_live_closures--;
180
+ #endif
181
+ scr_cyc_free(o);
182
+ }
183
+
184
+ ScrClosure *scr_closure_new(void *fn, size_t ncaps) {
185
+ ScrClosure *c = scr_cyc_alloc(sizeof(ScrClosure) + ncaps * sizeof(ScrBox *),
186
+ &scr_closure_trace, &scr_closure_gcfree);
187
+ c->rc = 1;
188
+ c->fn = fn;
189
+ c->ncaps = ncaps;
190
+ c->props = NULL; /* lazily allocated by Object.defineProperties */
191
+ #ifdef SCR_RC_AUDIT
192
+ scr_live_closures++;
193
+ #endif
194
+ return c;
195
+ }
196
+
197
+ void scr_closure_release(ScrClosure *c) {
198
+ if (!c || c->rc == SIZE_MAX) return; /* NULL: an uninitialized `let` local */
199
+ if (--c->rc == 0) {
200
+ scr_cyc_on_dead(c);
201
+ for (size_t i = 0; i < c->ncaps; i++) scr_box_release(c->caps[i]);
202
+ scr_box_release(c->props); /* NULL-tolerant */
203
+ #ifdef SCR_RC_AUDIT
204
+ scr_live_closures--;
205
+ #endif
206
+ scr_cyc_free(c);
207
+ } else {
208
+ scr_cyc_on_release(c); /* possible cycle root; may collect — c is done */
209
+ }
210
+ }
211
+
212
+ void scr_closure_trace_v(void *c, ScrTraceVisit visit, void *ctx) {
213
+ scr_closure_trace(c, visit, ctx);
214
+ }
@@ -0,0 +1,143 @@
1
+ #include "scr_runtime.h"
2
+
3
+ #include <math.h>
4
+ #include <stdio.h>
5
+ #include <stdlib.h>
6
+ #ifdef _WIN32
7
+ #include <fcntl.h> /* _O_BINARY */
8
+ #include <io.h> /* _setmode, _fileno */
9
+ #endif
10
+
11
+ /* Set by scr_async.c at loop exhaustion; lives here (unconditionally) so
12
+ * binaries that link the console without the async runtime still link, and
13
+ * plain builds satisfy scr_async's reference. */
14
+ static long scr_abandoned_fibers = 0;
15
+ void scr_note_abandoned_fibers(long n) { scr_abandoned_fibers = n; }
16
+
17
+ #ifdef SCR_RC_AUDIT
18
+ extern long scr_str_live_count(void); /* scr_string.c */
19
+ extern long scr_arr_live_count(void); /* scr_array.c */
20
+ extern long scr_map_live_count(void); /* scr_map.c */
21
+ extern long scr_box_live_count(void); /* scr_closure.c */
22
+ extern long scr_closure_live_count(void); /* scr_closure.c */
23
+ extern long scr_obj_live_count(void); /* scr_object.c */
24
+ extern long scr_union_live_count(void); /* scr_union.c */
25
+ extern long scr_dyn_live_count(void); /* scr_json.c */
26
+ extern long scr_bytes_live_count(void); /* scr_bytes.c */
27
+ #ifdef SCR_DYNAMIC
28
+ extern long scr_jsval_live_count(void); /* scr_island.c */
29
+ #endif
30
+
31
+ static void scr_rc_audit_at_exit(void) {
32
+ /* Fibers suspended forever at loop exhaustion (awaits nobody resolves —
33
+ * Node exits 0 there too) still hold their stacks and owned values by
34
+ * design; a strict audit would only report that deliberate abandonment. */
35
+ if (scr_abandoned_fibers > 0) {
36
+ fprintf(stderr, "scriptc RC audit skipped: %ld fiber(s) never resumed\n",
37
+ scr_abandoned_fibers);
38
+ return;
39
+ }
40
+ long strings = scr_str_live_count();
41
+ long arrays = scr_arr_live_count();
42
+ long maps = scr_map_live_count();
43
+ long boxes = scr_box_live_count();
44
+ long closures = scr_closure_live_count();
45
+ long objects = scr_obj_live_count();
46
+ long unions = scr_union_live_count();
47
+ long dyns = scr_dyn_live_count();
48
+ long bytes = scr_bytes_live_count();
49
+ #ifdef SCR_DYNAMIC
50
+ long jsvals = scr_jsval_live_count();
51
+ #else
52
+ long jsvals = 0;
53
+ #endif
54
+ if (strings != 0 || arrays != 0 || maps != 0 || boxes != 0 || closures != 0 ||
55
+ objects != 0 || unions != 0 || dyns != 0 || bytes != 0 || jsvals != 0) {
56
+ fflush(stdout);
57
+ fprintf(stderr,
58
+ "scriptc RC AUDIT FAILED: %ld heap string(s), %ld array(s), "
59
+ "%ld map(s), %ld box(es), %ld closure(s), %ld object(s), "
60
+ "%ld union(s), %ld dyn value(s), %ld bytes value(s), "
61
+ "%ld island value(s) live at exit\n",
62
+ strings, arrays, maps, boxes, closures, objects, unions, dyns,
63
+ bytes, jsvals);
64
+ _Exit(99);
65
+ }
66
+ }
67
+ #endif
68
+
69
+ static void scr_flush_at_exit(void) { fflush(stdout); }
70
+
71
+ static void scr_collect_cycles_at_exit(void) { scr_collect_cycles(); }
72
+
73
+ void scr_init(void) {
74
+ #ifdef _WIN32
75
+ /* The CRT opens std streams in TEXT mode, which writes \n as \r\n. Node
76
+ * on Windows does NOT translate — console.log emits \n whether stdout is
77
+ * a pipe or the console (libuv writes the bytes as given) — so the
78
+ * streams switch to binary here or every line would differ from the
79
+ * oracle by a byte. stdin too: readFileSync(0) must see the bytes on the
80
+ * pipe, not a CRLF-collapsed view. */
81
+ _setmode(_fileno(stdout), _O_BINARY);
82
+ _setmode(_fileno(stderr), _O_BINARY);
83
+ _setmode(_fileno(stdin), _O_BINARY);
84
+ #endif
85
+ /* Full buffering matches Node writing to a pipe (the differential harness
86
+ * never runs either side on a TTY) and makes output-heavy programs fast. */
87
+ static char outbuf[1 << 16];
88
+ setvbuf(stdout, outbuf, _IOFBF, sizeof outbuf);
89
+ /* atexit is LIFO; registration order makes exit run: library cleanup
90
+ * (registered later, in scr_lib_init) → cycle collection → RC audit →
91
+ * flush. The final collection frees cycles the program dropped, so the
92
+ * audit (and ASan's leak check) see them as freed, not leaked. */
93
+ atexit(scr_flush_at_exit);
94
+ #ifdef SCR_RC_AUDIT
95
+ atexit(scr_rc_audit_at_exit);
96
+ #endif
97
+ atexit(scr_collect_cycles_at_exit);
98
+ }
99
+
100
+ /* ONE formatter for both console streams — console.error/warn print
101
+ * byte-identically to console.log in Node (same inspect rendering), only
102
+ * the stream differs. */
103
+ static void scr_console_write(FILE *out, size_t n, const ScrLogArg *args) {
104
+ char numbuf[32];
105
+ for (size_t i = 0; i < n; i++) {
106
+ if (i > 0) fputc(' ', out);
107
+ const ScrLogArg *a = &args[i];
108
+ switch (a->tag) {
109
+ case SCR_ARG_F64: {
110
+ /* console.log renders numbers via inspect, which distinguishes -0
111
+ * (String(-0) is "0", but console.log(-0) prints "-0"). */
112
+ if (a->v.f == 0 && signbit(a->v.f)) {
113
+ fputs("-0", out);
114
+ break;
115
+ }
116
+ size_t len = scr_f64_to_str(a->v.f, numbuf);
117
+ fwrite(numbuf, 1, len, out);
118
+ break;
119
+ }
120
+ case SCR_ARG_STR:
121
+ fwrite(a->v.s->data, 1, a->v.s->len, out);
122
+ break;
123
+ case SCR_ARG_BOOL:
124
+ fputs(a->v.b ? "true" : "false", out);
125
+ break;
126
+ }
127
+ }
128
+ fputc('\n', out);
129
+ }
130
+
131
+ void scr_console_log(size_t n, const ScrLogArg *args) {
132
+ scr_console_write(stdout, n, args);
133
+ }
134
+
135
+ /* console.error and console.warn. stderr is UNBUFFERED (C's default; Node
136
+ * writes stderr synchronously too), and stdout FLUSHES first so a merged
137
+ * redirection (2>&1) sees writes in source order despite stdout's full
138
+ * buffering — Node's piped stdout/stderr preserve write order the same
139
+ * way. */
140
+ void scr_console_error(size_t n, const ScrLogArg *args) {
141
+ fflush(stdout);
142
+ scr_console_write(stderr, n, args);
143
+ }
@@ -0,0 +1,218 @@
1
+ /* Reference-cycle collector: synchronous Bacon–Rajan trial deletion (see
2
+ * "Concurrent Cycle Collection in Reference Counted Systems", the
3
+ * synchronous algorithm) over cycle-headered objects only — the object
4
+ * model and the trace/teardown contract live in scr_runtime.h.
5
+ *
6
+ * Life of a candidate: a release that leaves rc > 0 buffers the object
7
+ * (purple). Collection walks the buffer in three phases over the graph
8
+ * reachable from it:
9
+ * markGray trial-delete: decrement rc once per internal edge;
10
+ * scan nodes still rc > 0 are externally referenced — re-blacken
11
+ * their subgraph and restore the trial decrements;
12
+ * collectWhite everything left white is a dead cycle: free it, releasing
13
+ * only edges that LEAVE the white set (each member's
14
+ * teardown releases its untraced children; traced edges were
15
+ * already accounted by markGray).
16
+ * The white set is gathered first and freed after the walk — freeing
17
+ * during the walk would leave dangling sibling edges for later visits.
18
+ *
19
+ * Correctness leans on two global invariants (docs/memory.md):
20
+ * - every strong reference is counted: stacks, locals, and runtime-owned
21
+ * buffers (timer callbacks, unhandled-rejection tracking) all hold +1,
22
+ * so trial deletion can never free something a root still reaches;
23
+ * - mutators unlink before they release: a heap object's stored pointer is
24
+ * overwritten BEFORE the old value's release runs, so a threshold
25
+ * collection triggered inside that release never sees an edge whose
26
+ * count was already given up (which would over-decrement and free live
27
+ * data).
28
+ *
29
+ * Recursion depth equals the traced structure's depth — same property as
30
+ * the existing recursive releases (deep lists recurse deeply; acceptable
31
+ * for now, revisit with an explicit stack if it ever traps).
32
+ */
33
+ #include "scr_runtime.h"
34
+
35
+ #include <stdio.h>
36
+ #include <stdlib.h>
37
+
38
+ /* Every heap object's first member is `size_t rc`. */
39
+ #define SCR_RC(obj) (*(size_t *)(obj))
40
+
41
+ static void scr_cyc_oom(void) {
42
+ fputs("scriptc: out of memory\n", stderr);
43
+ abort();
44
+ }
45
+
46
+ void *scr_cyc_alloc(size_t size, ScrTraceFn trace, ScrCycFreeFn free_fn) {
47
+ ScrCycHdr *h = calloc(1, sizeof(ScrCycHdr) + size);
48
+ if (!h) scr_cyc_oom();
49
+ h->trace = trace;
50
+ h->free_fn = free_fn;
51
+ h->color = SCR_CYC_BLACK;
52
+ return h + 1;
53
+ }
54
+
55
+ void scr_cyc_free(void *obj) { free(scr_cyc_hdr(obj)); }
56
+
57
+ /* ── the candidate-root buffer ────────────────────────────────────────── */
58
+
59
+ static void **scr_roots = NULL;
60
+ static size_t scr_nroots = 0, scr_roots_cap = 0;
61
+ static bool scr_collecting = false;
62
+
63
+ static size_t scr_cyc_threshold(void) {
64
+ static size_t cached = 0;
65
+ if (cached == 0) {
66
+ const char *env = getenv("SCR_CYCLE_THRESHOLD");
67
+ long v = env ? strtol(env, NULL, 10) : 0;
68
+ cached = v > 0 ? (size_t)v : 256;
69
+ }
70
+ return cached;
71
+ }
72
+
73
+ void scr_cyc_on_dead(void *obj) {
74
+ ScrCycHdr *h = scr_cyc_hdr(obj);
75
+ if (!h->buffered) return;
76
+ /* O(1) removal: swap the last entry into the hole. */
77
+ size_t i = h->buf_index;
78
+ void *last = scr_roots[--scr_nroots];
79
+ scr_roots[i] = last;
80
+ if (last != obj) scr_cyc_hdr(last)->buf_index = i;
81
+ h->buffered = 0;
82
+ }
83
+
84
+ void scr_cyc_on_release(void *obj) {
85
+ ScrCycHdr *h = scr_cyc_hdr(obj);
86
+ h->color = SCR_CYC_PURPLE;
87
+ if (!h->buffered) {
88
+ if (scr_nroots == scr_roots_cap) {
89
+ scr_roots_cap = scr_roots_cap ? scr_roots_cap * 2 : 64;
90
+ scr_roots = realloc(scr_roots, scr_roots_cap * sizeof *scr_roots);
91
+ if (!scr_roots) scr_cyc_oom();
92
+ }
93
+ h->buffered = 1;
94
+ h->buf_index = scr_nroots;
95
+ scr_roots[scr_nroots++] = obj;
96
+ }
97
+ /* Threshold trigger. Never re-entered: a teardown's releases of untraced
98
+ * children can buffer new candidates mid-collection, but they only wait
99
+ * for the next pass. */
100
+ if (!scr_collecting && scr_nroots >= scr_cyc_threshold()) {
101
+ scr_collect_cycles();
102
+ }
103
+ }
104
+
105
+ /* ── trial deletion ───────────────────────────────────────────────────── */
106
+
107
+ /* Child filter shared by every phase: nothing to do for NULL (unassigned
108
+ * slots) or immortal (interned statics have no header at all). */
109
+ #define SCR_CYC_SKIP(child) ((child) == NULL || SCR_RC(child) == SIZE_MAX)
110
+
111
+ static void scr_mark_gray(void *obj);
112
+ static void scr_mg_visit(void *child, void *ctx) {
113
+ (void)ctx;
114
+ if (SCR_CYC_SKIP(child)) return;
115
+ SCR_RC(child) -= 1; /* trial-delete this internal edge */
116
+ scr_mark_gray(child);
117
+ }
118
+ static void scr_mark_gray(void *obj) {
119
+ ScrCycHdr *h = scr_cyc_hdr(obj);
120
+ if (h->color == SCR_CYC_GRAY) return;
121
+ h->color = SCR_CYC_GRAY;
122
+ h->trace(obj, scr_mg_visit, NULL);
123
+ }
124
+
125
+ static void scr_scan_black(void *obj);
126
+ static void scr_sb_visit(void *child, void *ctx) {
127
+ (void)ctx;
128
+ if (SCR_CYC_SKIP(child)) return;
129
+ SCR_RC(child) += 1; /* restore the trial decrement */
130
+ if (scr_cyc_hdr(child)->color != SCR_CYC_BLACK) scr_scan_black(child);
131
+ }
132
+ static void scr_scan_black(void *obj) {
133
+ scr_cyc_hdr(obj)->color = SCR_CYC_BLACK;
134
+ scr_cyc_hdr(obj)->trace(obj, scr_sb_visit, NULL);
135
+ }
136
+
137
+ static void scr_scan(void *obj);
138
+ static void scr_scan_visit(void *child, void *ctx) {
139
+ (void)ctx;
140
+ if (SCR_CYC_SKIP(child)) return;
141
+ scr_scan(child);
142
+ }
143
+ static void scr_scan(void *obj) {
144
+ ScrCycHdr *h = scr_cyc_hdr(obj);
145
+ if (h->color != SCR_CYC_GRAY) return;
146
+ if (SCR_RC(obj) > 0) {
147
+ /* Externally referenced: this whole subgraph stays. */
148
+ scr_scan_black(obj);
149
+ return;
150
+ }
151
+ h->color = SCR_CYC_WHITE;
152
+ h->trace(obj, scr_scan_visit, NULL);
153
+ }
154
+
155
+ /* The gathered white set (freed after the walk completes). */
156
+ static void **scr_white = NULL;
157
+ static size_t scr_nwhite = 0, scr_white_cap = 0;
158
+
159
+ static void scr_collect_white(void *obj);
160
+ static void scr_cw_visit(void *child, void *ctx) {
161
+ (void)ctx;
162
+ if (SCR_CYC_SKIP(child)) return;
163
+ scr_collect_white(child);
164
+ }
165
+ static void scr_collect_white(void *obj) {
166
+ ScrCycHdr *h = scr_cyc_hdr(obj);
167
+ if (h->color != SCR_CYC_WHITE || h->buffered) return;
168
+ h->color = SCR_CYC_BLACK; /* visited marker — prevents re-gathering */
169
+ h->trace(obj, scr_cw_visit, NULL);
170
+ if (scr_nwhite == scr_white_cap) {
171
+ scr_white_cap = scr_white_cap ? scr_white_cap * 2 : 64;
172
+ scr_white = realloc(scr_white, scr_white_cap * sizeof *scr_white);
173
+ if (!scr_white) scr_cyc_oom();
174
+ }
175
+ scr_white[scr_nwhite++] = obj;
176
+ }
177
+
178
+ void scr_collect_cycles(void) {
179
+ if (scr_collecting || scr_nroots == 0) return;
180
+ scr_collecting = true;
181
+
182
+ /* markRoots: keep live candidates (still purple), drop the rest — an
183
+ * object re-retained since buffering is black; one grayed by an earlier
184
+ * candidate's walk is already covered by that candidate's subgraph. */
185
+ size_t out = 0;
186
+ for (size_t i = 0; i < scr_nroots; i++) {
187
+ void *obj = scr_roots[i];
188
+ ScrCycHdr *h = scr_cyc_hdr(obj);
189
+ if (h->color == SCR_CYC_PURPLE) {
190
+ scr_mark_gray(obj);
191
+ h->buf_index = out;
192
+ scr_roots[out++] = obj;
193
+ } else {
194
+ h->buffered = 0;
195
+ }
196
+ }
197
+ scr_nroots = out;
198
+
199
+ for (size_t i = 0; i < scr_nroots; i++) scr_scan(scr_roots[i]);
200
+
201
+ /* collectWhite over a drained buffer: clear every buffered flag first so
202
+ * the recursion can gather buffered members of an earlier root's cycle. */
203
+ size_t n = scr_nroots;
204
+ scr_nroots = 0;
205
+ for (size_t i = 0; i < n; i++) scr_cyc_hdr(scr_roots[i])->buffered = 0;
206
+ scr_nwhite = 0;
207
+ for (size_t i = 0; i < n; i++) scr_collect_white(scr_roots[i]);
208
+ /* Teardowns run after the full walk. They may release untraced children
209
+ * (plain RC) — which can re-buffer survivors for the NEXT pass — but
210
+ * never touch traced (white, already-accounted) edges. */
211
+ for (size_t i = 0; i < scr_nwhite; i++) {
212
+ void *obj = scr_white[i];
213
+ scr_cyc_hdr(obj)->free_fn(obj);
214
+ }
215
+ scr_nwhite = 0;
216
+
217
+ scr_collecting = false;
218
+ }