@scriptc/runtime 0.0.0 → 0.0.1

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 +5036 -0
  43. package/src/scr_stream.c +2877 -0
  44. package/src/scr_string.c +1176 -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
package/src/scr_map.c ADDED
@@ -0,0 +1,591 @@
1
+ /* ES Map<K, V> — the compact-dict design (see scr_runtime.h for the API
2
+ * contract): a dense, insertion-ordered entries array plus an open-addressing
3
+ * bucket table of entry indices. Deletions tombstone their entry (key and
4
+ * value released immediately; the bucket slot keeps pointing at the dead
5
+ * entry so probe chains stay intact); tombstones are compacted away when the
6
+ * entries array grows — but never while an iteration is active (iter_depth),
7
+ * which is what keeps the forEach desugar's plain indices stable under
8
+ * arbitrary mutation from the callback.
9
+ *
10
+ * Cycle capability is per-map, decided at construction: val_trace non-NULL
11
+ * means the value type carries a collector header, so records/objects stored
12
+ * as values could point back at this map — the map allocates with the hidden
13
+ * cycle header, its trace visits every live value, and the collector
14
+ * teardown releases the complement (string keys) per the trace/teardown
15
+ * contract in scr_runtime.h. Scalar-, string- and array-valued maps keep the
16
+ * lean 1-word header and never touch the collector.
17
+ */
18
+ #include "scr_runtime.h"
19
+
20
+ #include <stdio.h>
21
+ #include <stdlib.h>
22
+ #include <string.h>
23
+
24
+ /* Live heap-map count for the RC audit lane (-DSCR_RC_AUDIT); same contract
25
+ * as scr_str_live_count in scr_string.c. */
26
+ #ifdef SCR_RC_AUDIT
27
+ static long scr_live_maps = 0;
28
+ long scr_map_live_count(void) { return scr_live_maps; }
29
+ #endif
30
+
31
+ #define SCR_MAP_EMPTY SIZE_MAX
32
+
33
+ static void scr_map_oom(void) {
34
+ fputs("scriptc: out of memory\n", stderr);
35
+ abort();
36
+ }
37
+
38
+ /* ── key normalization + hashing (SameValueZero) ───────────────────────
39
+ * -0 normalizes to +0 (JS Map stores the +0 key: [...m.keys()] shows 0
40
+ * after set(-0)) and every NaN collapses to one canonical bit pattern, so
41
+ * hashing the bit pattern IS SameValueZero hashing. */
42
+
43
+ static uint64_t scr_map_f64_bits(double k) {
44
+ if (k != k) return UINT64_C(0x7ff8000000000000); /* canonical NaN */
45
+ if (k == 0) k = 0; /* -0 -> +0 */
46
+ uint64_t bits;
47
+ memcpy(&bits, &k, sizeof bits);
48
+ return bits;
49
+ }
50
+
51
+ static uint64_t scr_map_fnv1a(const unsigned char *bytes, size_t n) {
52
+ uint64_t h = UINT64_C(0xcbf29ce484222325);
53
+ for (size_t i = 0; i < n; i++) {
54
+ h ^= bytes[i];
55
+ h *= UINT64_C(0x100000001b3);
56
+ }
57
+ return h;
58
+ }
59
+
60
+ static uint64_t scr_map_hash_str(const ScrStr *k) {
61
+ return scr_map_fnv1a((const unsigned char *)k->data, k->len);
62
+ }
63
+
64
+ /* ── slot packing (8-byte slots, like ScrArr) ──────────────────────────── */
65
+
66
+ static uint64_t scr_map_slot_from_f64(double v) {
67
+ uint64_t s;
68
+ memcpy(&s, &v, sizeof s);
69
+ return s;
70
+ }
71
+
72
+ static double scr_map_slot_to_f64(uint64_t s) {
73
+ double v;
74
+ memcpy(&v, &s, sizeof v);
75
+ return v;
76
+ }
77
+
78
+ static uint64_t scr_map_slot_from_ptr(void *p) { return (uint64_t)(uintptr_t)p; }
79
+
80
+ static void *scr_map_slot_to_ptr(uint64_t s) { return (void *)(uintptr_t)s; }
81
+
82
+ /* Stored keys are pre-normalized, so bit equality IS SameValueZero for f64
83
+ * keys (probe keys normalize through the same function). */
84
+ static bool scr_map_key_eq(const ScrMap *m, uint64_t stored, uint64_t probe) {
85
+ /* f64 keys are pre-normalized and REF keys are pointers, so bit equality
86
+ * IS the honest compare for both (SameValueZero; reference identity). */
87
+ if (m->key_kind != SCR_MAP_KEY_STR) return stored == probe;
88
+ return scr_str_eq((ScrStr *)scr_map_slot_to_ptr(stored),
89
+ (ScrStr *)scr_map_slot_to_ptr(probe));
90
+ }
91
+
92
+ /* ── lookup ────────────────────────────────────────────────────────────
93
+ * Returns the LIVE entry index holding the key, or SCR_MAP_EMPTY. Probes
94
+ * skip tombstoned entries (their bucket slots keep chains intact). */
95
+ static size_t scr_map_find(const ScrMap *m, uint64_t hash, uint64_t key) {
96
+ if (m->nbuckets == 0) return SCR_MAP_EMPTY;
97
+ size_t mask = m->nbuckets - 1;
98
+ for (size_t i = hash & mask;; i = (i + 1) & mask) {
99
+ size_t b = m->buckets[i];
100
+ if (b == SCR_MAP_EMPTY) return SCR_MAP_EMPTY;
101
+ if (m->entries[b].live && scr_map_key_eq(m, m->entries[b].key, key)) return b;
102
+ }
103
+ }
104
+
105
+ /* Rebuild the bucket table (size must be a power of two >= 2 * nentries):
106
+ * only live entries are inserted, in dense order — dead markers vanish. */
107
+ static void scr_map_rebuild_buckets(ScrMap *m, size_t nbuckets) {
108
+ size_t *buckets = malloc(nbuckets * sizeof *buckets);
109
+ if (!buckets) scr_map_oom();
110
+ for (size_t i = 0; i < nbuckets; i++) buckets[i] = SCR_MAP_EMPTY;
111
+ free(m->buckets);
112
+ m->buckets = buckets;
113
+ m->nbuckets = nbuckets;
114
+ size_t mask = nbuckets - 1;
115
+ for (size_t e = 0; e < m->nentries; e++) {
116
+ if (!m->entries[e].live) continue;
117
+ uint64_t hash = m->key_kind != SCR_MAP_KEY_STR
118
+ ? scr_map_fnv1a((const unsigned char *)&m->entries[e].key, 8)
119
+ : scr_map_hash_str((ScrStr *)scr_map_slot_to_ptr(m->entries[e].key));
120
+ size_t i = hash & mask;
121
+ while (buckets[i] != SCR_MAP_EMPTY) i = (i + 1) & mask;
122
+ buckets[i] = e;
123
+ }
124
+ }
125
+
126
+ /* Drop tombstones, preserving insertion order. Only legal when no iteration
127
+ * is active (the forEach desugar's indices would shift). */
128
+ static void scr_map_compact(ScrMap *m) {
129
+ size_t w = 0;
130
+ for (size_t r = 0; r < m->nentries; r++) {
131
+ if (m->entries[r].live) m->entries[w++] = m->entries[r];
132
+ }
133
+ m->nentries = w;
134
+ if (m->nbuckets > 0) scr_map_rebuild_buckets(m, m->nbuckets);
135
+ }
136
+
137
+ /* Make room to append one entry. Prefers compaction (tombstone-heavy maps
138
+ * reuse their storage) and grows otherwise; while an iteration is active it
139
+ * ONLY grows — indices must stay stable under callback mutation. */
140
+ static void scr_map_reserve_append(ScrMap *m) {
141
+ if (m->nentries < m->ecap && m->nbuckets >= 2 * (m->nentries + 1)) return;
142
+ if (m->iter_depth == 0 && m->nlive <= m->nentries / 2 && m->nentries > 0) {
143
+ scr_map_compact(m);
144
+ }
145
+ if (m->nentries == m->ecap) {
146
+ size_t cap = m->ecap ? m->ecap : 8;
147
+ while (cap < m->nentries + 1) {
148
+ if (cap > SIZE_MAX / 2 / sizeof(ScrMapEntry)) scr_map_oom();
149
+ cap *= 2;
150
+ }
151
+ ScrMapEntry *entries = realloc(m->entries, cap * sizeof *entries);
152
+ if (!entries) scr_map_oom();
153
+ m->entries = entries;
154
+ m->ecap = cap;
155
+ }
156
+ if (m->nbuckets < 2 * (m->nentries + 1)) {
157
+ size_t nbuckets = m->nbuckets ? m->nbuckets : 16;
158
+ while (nbuckets < 2 * (m->nentries + 1)) {
159
+ if (nbuckets > SIZE_MAX / 2 / sizeof(size_t)) scr_map_oom();
160
+ nbuckets *= 2;
161
+ }
162
+ scr_map_rebuild_buckets(m, nbuckets);
163
+ }
164
+ }
165
+
166
+ /* ── entry release helpers ─────────────────────────────────────────────── */
167
+
168
+ static void scr_map_release_key(ScrMap *m, uint64_t key) {
169
+ if (m->key_kind == SCR_MAP_KEY_STR) {
170
+ scr_str_release((ScrStr *)scr_map_slot_to_ptr(key));
171
+ } else if (m->key_kind == SCR_MAP_KEY_REF) {
172
+ m->key_release(scr_map_slot_to_ptr(key));
173
+ }
174
+ }
175
+
176
+ static void scr_map_release_val(ScrMap *m, uint64_t val) {
177
+ if (m->val_kind == SCR_MAP_VAL_REF) m->val_release(scr_map_slot_to_ptr(val));
178
+ }
179
+
180
+ /* ── lifecycle ─────────────────────────────────────────────────────────── */
181
+
182
+ static void scr_map_trace(void *o, ScrTraceVisit visit, void *ctx) {
183
+ ScrMap *m = (ScrMap *)o;
184
+ for (size_t e = 0; e < m->nentries; e++) {
185
+ if (m->entries[e].live) visit(scr_map_slot_to_ptr(m->entries[e].val), ctx);
186
+ }
187
+ }
188
+
189
+ /* Collector teardown: the trace visits every live VALUE (traced edges were
190
+ * already accounted), so the complement released here is the keys. */
191
+ static void scr_map_gcfree(void *o) {
192
+ ScrMap *m = (ScrMap *)o;
193
+ for (size_t e = 0; e < m->nentries; e++) {
194
+ if (m->entries[e].live) scr_map_release_key(m, m->entries[e].key);
195
+ }
196
+ free(m->entries);
197
+ free(m->buckets);
198
+ #ifdef SCR_RC_AUDIT
199
+ scr_live_maps--;
200
+ #endif
201
+ scr_cyc_free(m);
202
+ }
203
+
204
+ ScrMap *scr_map_new(ScrMapKeyKind key_kind, ScrMapValKind val_kind,
205
+ void *(*val_retain)(void *), void (*val_release)(void *),
206
+ ScrTraceFn val_trace) {
207
+ ScrMap *m;
208
+ if (val_trace) {
209
+ /* Cycle-capable values can point back: collector header + trace. */
210
+ m = scr_cyc_alloc(sizeof *m, &scr_map_trace, &scr_map_gcfree);
211
+ } else {
212
+ m = calloc(1, sizeof *m);
213
+ if (!m) scr_map_oom();
214
+ }
215
+ m->rc = 1;
216
+ m->key_kind = key_kind;
217
+ m->val_kind = val_kind;
218
+ m->val_retain = val_retain;
219
+ m->val_release = val_release;
220
+ m->val_trace = val_trace;
221
+ #ifdef SCR_RC_AUDIT
222
+ scr_live_maps++;
223
+ #endif
224
+ return m;
225
+ }
226
+
227
+ ScrMap *scr_map_retain(ScrMap *m) {
228
+ if (m->rc != SIZE_MAX) {
229
+ m->rc++;
230
+ if (m->val_trace) scr_cyc_mark_live(m);
231
+ }
232
+ return m;
233
+ }
234
+
235
+ void scr_map_release(ScrMap *m) {
236
+ if (!m || m->rc == SIZE_MAX) return; /* NULL: an uninitialized `let` local */
237
+ if (--m->rc == 0) {
238
+ if (m->val_trace) scr_cyc_on_dead(m);
239
+ for (size_t e = 0; e < m->nentries; e++) {
240
+ if (!m->entries[e].live) continue;
241
+ scr_map_release_key(m, m->entries[e].key);
242
+ scr_map_release_val(m, m->entries[e].val);
243
+ }
244
+ free(m->entries);
245
+ free(m->buckets);
246
+ #ifdef SCR_RC_AUDIT
247
+ scr_live_maps--;
248
+ #endif
249
+ if (m->val_trace) scr_cyc_free(m);
250
+ else free(m);
251
+ } else if (m->val_trace) {
252
+ scr_cyc_on_release(m); /* possible cycle root; may collect — m is done */
253
+ }
254
+ }
255
+
256
+ void *scr_map_retain_v(void *m) { return scr_map_retain((ScrMap *)m); }
257
+ void scr_map_release_v(void *m) { scr_map_release((ScrMap *)m); }
258
+ void scr_map_trace_v(void *m, ScrTraceVisit visit, void *ctx) {
259
+ scr_map_trace(m, visit, ctx);
260
+ }
261
+
262
+ double scr_map_size(const ScrMap *m) { return (double)m->nlive; }
263
+
264
+ void scr_map_clear(ScrMap *m) {
265
+ for (size_t e = 0; e < m->nentries; e++) {
266
+ if (!m->entries[e].live) continue;
267
+ m->entries[e].live = false;
268
+ scr_map_release_key(m, m->entries[e].key);
269
+ scr_map_release_val(m, m->entries[e].val);
270
+ }
271
+ m->nlive = 0;
272
+ if (m->iter_depth == 0) {
273
+ /* Full reset; an active iteration instead keeps the (now all-dead)
274
+ * entries so its indices stay stable — entries added by the callback
275
+ * after the clear append past them and ARE visited (Node-exact). */
276
+ m->nentries = 0;
277
+ }
278
+ for (size_t i = 0; i < m->nbuckets; i++) m->buckets[i] = SCR_MAP_EMPTY;
279
+ }
280
+
281
+ /* ── has / delete ──────────────────────────────────────────────────────── */
282
+
283
+ bool scr_map_has_f64(const ScrMap *m, double key) {
284
+ uint64_t k = scr_map_f64_bits(key);
285
+ return scr_map_find(m, scr_map_fnv1a((const unsigned char *)&k, 8), k) != SCR_MAP_EMPTY;
286
+ }
287
+
288
+ bool scr_map_has_str(const ScrMap *m, const ScrStr *key) {
289
+ uint64_t k = scr_map_slot_from_ptr((void *)key);
290
+ return scr_map_find(m, scr_map_hash_str(key), k) != SCR_MAP_EMPTY;
291
+ }
292
+
293
+ static bool scr_map_delete_found(ScrMap *m, size_t e) {
294
+ if (e == SCR_MAP_EMPTY) return false;
295
+ m->entries[e].live = false; /* bucket slot stays: probe chains intact */
296
+ m->nlive--;
297
+ scr_map_release_key(m, m->entries[e].key);
298
+ scr_map_release_val(m, m->entries[e].val);
299
+ return true;
300
+ }
301
+
302
+ bool scr_map_delete_f64(ScrMap *m, double key) {
303
+ uint64_t k = scr_map_f64_bits(key);
304
+ return scr_map_delete_found(m, scr_map_find(m, scr_map_fnv1a((const unsigned char *)&k, 8), k));
305
+ }
306
+
307
+ bool scr_map_delete_str(ScrMap *m, const ScrStr *key) {
308
+ uint64_t k = scr_map_slot_from_ptr((void *)key);
309
+ return scr_map_delete_found(m, scr_map_find(m, scr_map_hash_str(key), k));
310
+ }
311
+
312
+ /* REF keys: identity hashing over the pointer bits (see the header's
313
+ * SCR_MAP_KEY_REF note). Probes never retain; storage does. */
314
+ static size_t scr_map_find_ref(const ScrMap *m, const void *key) {
315
+ uint64_t k = scr_map_slot_from_ptr((void *)key);
316
+ return scr_map_find(m, scr_map_fnv1a((const unsigned char *)&k, 8), k);
317
+ }
318
+
319
+ bool scr_map_has_ref(const ScrMap *m, const void *key) {
320
+ return scr_map_find_ref(m, key) != SCR_MAP_EMPTY;
321
+ }
322
+
323
+ bool scr_map_delete_ref(ScrMap *m, const void *key) {
324
+ return scr_map_delete_found(m, scr_map_find_ref(m, key));
325
+ }
326
+
327
+ /* ── set ───────────────────────────────────────────────────────────────
328
+ * Overwrite keeps the entry (insertion position preserved, stored key kept
329
+ * — only the value is replaced-and-released). A new key appends: reserve
330
+ * space FIRST (compaction/growth may rebuild buckets), then probe for the
331
+ * insertion slot. */
332
+
333
+ static void scr_map_set(ScrMap *m, uint64_t hash, uint64_t key, uint64_t val) {
334
+ size_t e = scr_map_find(m, hash, key);
335
+ if (e != SCR_MAP_EMPTY) {
336
+ uint64_t old = m->entries[e].val;
337
+ m->entries[e].val = val; /* unlink before releasing (cycle collector) */
338
+ scr_map_release_val(m, old);
339
+ return;
340
+ }
341
+ scr_map_reserve_append(m);
342
+ size_t idx = m->nentries++;
343
+ m->entries[idx].key = key;
344
+ m->entries[idx].val = val;
345
+ m->entries[idx].live = true;
346
+ m->nlive++;
347
+ if (m->key_kind == SCR_MAP_KEY_STR) {
348
+ scr_str_retain((ScrStr *)scr_map_slot_to_ptr(key)); /* key is borrowed */
349
+ } else if (m->key_kind == SCR_MAP_KEY_REF) {
350
+ m->key_retain(scr_map_slot_to_ptr(key)); /* key is borrowed */
351
+ }
352
+ size_t mask = m->nbuckets - 1;
353
+ size_t i = hash & mask;
354
+ while (m->buckets[i] != SCR_MAP_EMPTY) i = (i + 1) & mask;
355
+ m->buckets[i] = idx;
356
+ }
357
+
358
+ static void scr_map_set_f64_key(ScrMap *m, double key, uint64_t val) {
359
+ uint64_t k = scr_map_f64_bits(key); /* stores +0 for -0, canonical NaN */
360
+ scr_map_set(m, scr_map_fnv1a((const unsigned char *)&k, 8), k, val);
361
+ }
362
+
363
+ static void scr_map_set_str_key(ScrMap *m, ScrStr *key, uint64_t val) {
364
+ scr_map_set(m, scr_map_hash_str(key), scr_map_slot_from_ptr(key), val);
365
+ }
366
+
367
+ void scr_map_set_f64_f64(ScrMap *m, double key, double v) {
368
+ scr_map_set_f64_key(m, key, scr_map_slot_from_f64(v));
369
+ }
370
+
371
+ void scr_map_set_f64_bool(ScrMap *m, double key, bool v) {
372
+ scr_map_set_f64_key(m, key, (uint64_t)(v ? 1 : 0));
373
+ }
374
+
375
+ void scr_map_set_f64_ref(ScrMap *m, double key, void *v) {
376
+ scr_map_set_f64_key(m, key, scr_map_slot_from_ptr(v));
377
+ }
378
+
379
+ void scr_map_set_str_f64(ScrMap *m, ScrStr *key, double v) {
380
+ scr_map_set_str_key(m, key, scr_map_slot_from_f64(v));
381
+ }
382
+
383
+ void scr_map_set_str_bool(ScrMap *m, ScrStr *key, bool v) {
384
+ scr_map_set_str_key(m, key, (uint64_t)(v ? 1 : 0));
385
+ }
386
+
387
+ void scr_map_set_str_ref(ScrMap *m, ScrStr *key, void *v) {
388
+ scr_map_set_str_key(m, key, scr_map_slot_from_ptr(v));
389
+ }
390
+
391
+ void scr_map_set_ref_f64(ScrMap *m, void *key, double v) {
392
+ uint64_t k = scr_map_slot_from_ptr(key);
393
+ scr_map_set(m, scr_map_fnv1a((const unsigned char *)&k, 8), k, scr_map_slot_from_f64(v));
394
+ }
395
+
396
+ ScrMap *scr_set_new_ref(void *(*elem_retain)(void *), void (*elem_release)(void *)) {
397
+ ScrMap *m = scr_map_new(SCR_MAP_KEY_REF, SCR_MAP_VAL_F64, NULL, NULL, NULL);
398
+ m->key_retain = elem_retain;
399
+ m->key_release = elem_release;
400
+ return m;
401
+ }
402
+
403
+ /* ── get ───────────────────────────────────────────────────────────────── */
404
+
405
+ static size_t scr_map_find_f64(const ScrMap *m, double key) {
406
+ uint64_t k = scr_map_f64_bits(key);
407
+ return scr_map_find(m, scr_map_fnv1a((const unsigned char *)&k, 8), k);
408
+ }
409
+
410
+ static size_t scr_map_find_str(const ScrMap *m, const ScrStr *key) {
411
+ return scr_map_find(m, scr_map_hash_str(key), scr_map_slot_from_ptr((void *)key));
412
+ }
413
+
414
+ bool scr_map_get_f64_f64(const ScrMap *m, double key, double *out) {
415
+ size_t e = scr_map_find_f64(m, key);
416
+ if (e == SCR_MAP_EMPTY) return false;
417
+ *out = scr_map_slot_to_f64(m->entries[e].val);
418
+ return true;
419
+ }
420
+
421
+ bool scr_map_get_f64_bool(const ScrMap *m, double key, bool *out) {
422
+ size_t e = scr_map_find_f64(m, key);
423
+ if (e == SCR_MAP_EMPTY) return false;
424
+ *out = m->entries[e].val != 0;
425
+ return true;
426
+ }
427
+
428
+ void *scr_map_get_f64_ref(const ScrMap *m, double key) {
429
+ size_t e = scr_map_find_f64(m, key);
430
+ if (e == SCR_MAP_EMPTY) return NULL;
431
+ return m->val_retain(scr_map_slot_to_ptr(m->entries[e].val)); /* +1 */
432
+ }
433
+
434
+ bool scr_map_get_str_f64(const ScrMap *m, const ScrStr *key, double *out) {
435
+ size_t e = scr_map_find_str(m, key);
436
+ if (e == SCR_MAP_EMPTY) return false;
437
+ *out = scr_map_slot_to_f64(m->entries[e].val);
438
+ return true;
439
+ }
440
+
441
+ bool scr_map_get_str_bool(const ScrMap *m, const ScrStr *key, bool *out) {
442
+ size_t e = scr_map_find_str(m, key);
443
+ if (e == SCR_MAP_EMPTY) return false;
444
+ *out = m->entries[e].val != 0;
445
+ return true;
446
+ }
447
+
448
+ void *scr_map_get_str_ref(const ScrMap *m, const ScrStr *key) {
449
+ size_t e = scr_map_find_str(m, key);
450
+ if (e == SCR_MAP_EMPTY) return NULL;
451
+ return m->val_retain(scr_map_slot_to_ptr(m->entries[e].val)); /* +1 */
452
+ }
453
+
454
+ /* ── iteration primitives (the forEach desugar) ────────────────────────── */
455
+
456
+ double scr_map_iter_count(const ScrMap *m) { return (double)m->nentries; }
457
+
458
+ bool scr_map_iter_live(const ScrMap *m, double i) {
459
+ if (!(i >= 0) || i >= (double)m->nentries) return false;
460
+ return m->entries[(size_t)i].live;
461
+ }
462
+
463
+ static const ScrMapEntry *scr_map_iter_at(const ScrMap *m, double i) {
464
+ if (!(i >= 0) || i >= (double)m->nentries || !m->entries[(size_t)i].live) {
465
+ fputs("scriptc: internal error: map iteration index out of range\n", stderr);
466
+ abort();
467
+ }
468
+ return &m->entries[(size_t)i];
469
+ }
470
+
471
+ double scr_map_iter_key_f64(const ScrMap *m, double i) {
472
+ return scr_map_slot_to_f64(scr_map_iter_at(m, i)->key);
473
+ }
474
+
475
+ ScrStr *scr_map_iter_key_str(const ScrMap *m, double i) {
476
+ return scr_str_retain((ScrStr *)scr_map_slot_to_ptr(scr_map_iter_at(m, i)->key));
477
+ }
478
+
479
+ void *scr_map_iter_key_ref(const ScrMap *m, double i) {
480
+ return m->key_retain(scr_map_slot_to_ptr(scr_map_iter_at(m, i)->key)); /* +1 */
481
+ }
482
+
483
+ double scr_map_iter_val_f64(const ScrMap *m, double i) {
484
+ return scr_map_slot_to_f64(scr_map_iter_at(m, i)->val);
485
+ }
486
+
487
+ bool scr_map_iter_val_bool(const ScrMap *m, double i) {
488
+ return scr_map_iter_at(m, i)->val != 0;
489
+ }
490
+
491
+ void *scr_map_iter_val_ref(const ScrMap *m, double i) {
492
+ return m->val_retain(scr_map_slot_to_ptr(scr_map_iter_at(m, i)->val)); /* +1 */
493
+ }
494
+
495
+ void scr_map_iter_enter(ScrMap *m) { m->iter_depth++; }
496
+
497
+ void scr_map_iter_exit(ScrMap *m) {
498
+ if (m->iter_depth > 0) m->iter_depth--;
499
+ /* A churny callback may have left many tombstones; with no iteration
500
+ * active they are safe to drop now (bounds memory under forEach-heavy
501
+ * add/delete workloads). */
502
+ if (m->iter_depth == 0 && m->nlive <= m->nentries / 2 && m->nentries >= 16) {
503
+ scr_map_compact(m);
504
+ }
505
+ }
506
+
507
+ /* ── seeded Set construction ───────────────────────────────────────────── */
508
+
509
+ /* `new Set(values)`: add() every element of one borrowed T[] in order —
510
+ * duplicates overwrite the unit value in place, so first insertion
511
+ * position wins (SameValueZero, exactly JS). The map is a set (value kind
512
+ * pinned to f64, every stored value 0); elements are the set's key kind —
513
+ * f64 or string, matching the array's element kind. */
514
+ void scr_set_add_all(ScrMap *set, ScrArr *values) {
515
+ size_t n = values->len;
516
+ for (size_t i = 0; i < n; i++) {
517
+ if (values->elem == SCR_ELEM_STR) {
518
+ ScrStr *s = (ScrStr *)scr_arr_get_ref(values, (double)i); /* +1 */
519
+ scr_map_set_str_f64(set, s, 0); /* borrows; retains stored copy */
520
+ scr_str_release(s);
521
+ } else if (set->key_kind == SCR_MAP_KEY_REF) {
522
+ void *p = scr_arr_get_ref(values, (double)i); /* +1 */
523
+ scr_map_set_ref_f64(set, p, 0); /* borrows; retains stored copy */
524
+ set->key_release(p);
525
+ } else {
526
+ scr_map_set_f64_f64(set, scr_arr_get_f64(values, (double)i), 0);
527
+ }
528
+ }
529
+ }
530
+
531
+ /* ── JS own-key ordering over the overflow map ─────────────────────────── */
532
+
533
+ /* Canonical array index test: "0".."4294967294" — digits only, no leading
534
+ * zero (except "0" itself), value <= 2^32 - 2. JS orders these OWN keys
535
+ * first, ascending numerically, before every other string key. */
536
+ static bool scr_map_key_array_index(const ScrStr *k, uint32_t *out) {
537
+ size_t n = k->len;
538
+ if (n == 0 || n > 10) return false;
539
+ const char *s = k->data;
540
+ if (s[0] == '0' && n > 1) return false;
541
+ uint64_t v = 0;
542
+ for (size_t i = 0; i < n; i++) {
543
+ if (s[i] < '0' || s[i] > '9') return false;
544
+ v = v * 10 + (uint64_t)(s[i] - '0');
545
+ }
546
+ if (v > UINT64_C(4294967294)) return false;
547
+ *out = (uint32_t)v;
548
+ return true;
549
+ }
550
+
551
+ /* The live STRING keys of `m` in JS OWN-KEY ORDER (Object.keys over the
552
+ * index-signature overflow): integer-like keys (canonical array indices)
553
+ * first in ascending numeric order, then the rest in insertion order.
554
+ * Returns a fresh ScrStr* array (+1); the map is borrowed. Insertion sort
555
+ * over the integer-like subset — overflow maps are small, and ties are
556
+ * impossible (keys are unique). */
557
+ ScrArr *scr_map_keys_js_order(const ScrMap *m) {
558
+ size_t n = m->nentries;
559
+ ScrArr *out = scr_arr_new(SCR_ELEM_STR, m->nlive);
560
+ size_t nidx = 0;
561
+ struct { uint32_t v; ScrStr *k; } *idx = NULL;
562
+ for (size_t i = 0; i < n; i++) {
563
+ if (!m->entries[i].live) continue;
564
+ ScrStr *k = (ScrStr *)scr_map_slot_to_ptr(m->entries[i].key);
565
+ uint32_t v;
566
+ if (!scr_map_key_array_index(k, &v)) continue;
567
+ if (nidx % 16 == 0) {
568
+ idx = realloc(idx, (nidx + 16) * sizeof *idx);
569
+ if (!idx) scr_map_oom();
570
+ }
571
+ size_t j = nidx++;
572
+ while (j > 0 && idx[j - 1].v > v) {
573
+ idx[j] = idx[j - 1];
574
+ j--;
575
+ }
576
+ idx[j].v = v;
577
+ idx[j].k = k;
578
+ }
579
+ for (size_t i = 0; i < nidx; i++) {
580
+ scr_arr_push_ref(out, scr_str_retain(idx[i].k));
581
+ }
582
+ free(idx);
583
+ for (size_t i = 0; i < n; i++) {
584
+ if (!m->entries[i].live) continue;
585
+ ScrStr *k = (ScrStr *)scr_map_slot_to_ptr(m->entries[i].key);
586
+ uint32_t v;
587
+ if (scr_map_key_array_index(k, &v)) continue;
588
+ scr_arr_push_ref(out, scr_str_retain(k));
589
+ }
590
+ return out;
591
+ }