@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,644 @@
1
+ /* Prototype-method dispatch on checked-dynamic receivers (scr_dyn_invoke)
2
+ * and its companions: JS String() over the DOM (scr_dyn_display — join
3
+ * and the error texts need it standalone) and Object.defineProperties
4
+ * over DOM values (scr_dyn_define_props). Linked only when the IR
5
+ * carries dynInvoke nodes or dyn.defineProps calls (cc.ts gates on
6
+ * moduleUsesDynInvoke — the scr_assert.c precedent), so dispatch-free
7
+ * binaries keep their exact size class. The DOM itself lives in
8
+ * scr_json.c; this unit uses only its public surface plus ScrJsonBuf.
9
+ */
10
+ #include "scr_runtime.h"
11
+
12
+ #include <math.h>
13
+ #include <stdio.h>
14
+ #include <stdlib.h> /* malloc/free in the sort snapshot */
15
+ #include <string.h>
16
+
17
+ /* ── checked-dynamic METHOD DISPATCH (scr_dyn_invoke) ──────────────────
18
+ *
19
+ * `recv.m(args)` where recv is a DOM value and `m` is a name a
20
+ * DOM-representable prototype declares (Array/String/Function shared
21
+ * names — push, slice, forEach, apply, ...): a stored-member read would
22
+ * silently mis-answer real methods, so the dispatch runs HERE, over the
23
+ * receiver's runtime kind. test/common's mustCall internals are the
24
+ * canonical caller (mustCallChecks.push/filter/forEach, fn.apply).
25
+ *
26
+ * Honesty ladder, per (kind, name):
27
+ * - implemented: JS-exact semantics below;
28
+ * - the name exists on that kind's JS prototype but has no
29
+ * implementation here: a LOUD "not supported yet" Error — never a
30
+ * silent wrong answer;
31
+ * - the name does not exist on that kind's prototype: Node's own
32
+ * TypeError ("<spelling> is not a function"), because that IS the
33
+ * JS answer;
34
+ * - OBJ receivers: the own member calls (own properties shadow the
35
+ * prototype in JS too), otherwise "<spelling> is not a function";
36
+ * - undefined/null receivers: Node's "Cannot read properties of ...".
37
+ *
38
+ * recv/args are BORROWED; the result is owned (+1). MAY THROW (returns
39
+ * NULL with the exception pending). */
40
+
41
+ /* JS String() over a DOM value, runtime-side (join needs it standalone —
42
+ * the emitted sc_ds walker exists only in programs that spell
43
+ * String(unknown) themselves). Same rules: arrays join with "," and
44
+ * null/undefined elements print empty, the DOM's error encoding renders
45
+ * "name: message", functions render the native-code form, plain objects
46
+ * are [object Object]. */
47
+ static void scr_dyn_display_buf(ScrJsonBuf *b, const ScrDyn *d) {
48
+ switch (d->kind) {
49
+ case SCR_DYN_UNDEF: scr_jb_puts(b, "undefined"); return;
50
+ case SCR_DYN_NULL: scr_jb_puts(b, "null"); return;
51
+ case SCR_DYN_BOOL: scr_jb_puts(b, d->v.b ? "true" : "false"); return;
52
+ case SCR_DYN_NUM: {
53
+ ScrStr *s = scr_f64_to_scrstr(d->v.num);
54
+ for (size_t i = 0; i < s->len; i++) scr_jb_putc(b, s->data[i]);
55
+ scr_str_release(s);
56
+ return;
57
+ }
58
+ case SCR_DYN_STR:
59
+ for (size_t i = 0; i < d->v.str->len; i++) scr_jb_putc(b, d->v.str->data[i]);
60
+ return;
61
+ case SCR_DYN_ARR:
62
+ for (size_t i = 0; i < d->v.arr.len; i++) {
63
+ if (i > 0) scr_jb_putc(b, ',');
64
+ const ScrDyn *e = d->v.arr.items[i];
65
+ if (e->kind == SCR_DYN_UNDEF || e->kind == SCR_DYN_NULL) continue;
66
+ scr_dyn_display_buf(b, e);
67
+ }
68
+ return;
69
+ case SCR_DYN_OBJ: {
70
+ const ScrDyn *marker = scr_dyn_obj_get(d, "%error", 6);
71
+ if (marker) {
72
+ const ScrDyn *en = scr_dyn_obj_get(d, "name", 4);
73
+ const ScrDyn *em = scr_dyn_obj_get(d, "message", 7);
74
+ const ScrStr *ens = (en && en->kind == SCR_DYN_STR) ? en->v.str : NULL;
75
+ const ScrStr *ems = (em && em->kind == SCR_DYN_STR) ? em->v.str : NULL;
76
+ if (ens) for (size_t i = 0; i < ens->len; i++) scr_jb_putc(b, ens->data[i]);
77
+ if (ens && ens->len && ems && ems->len) scr_jb_puts(b, ": ");
78
+ if (ems) for (size_t i = 0; i < ems->len; i++) scr_jb_putc(b, ems->data[i]);
79
+ return;
80
+ }
81
+ scr_jb_puts(b, "[object Object]");
82
+ return;
83
+ }
84
+ case SCR_DYN_BYTES:
85
+ if (d->buffer) {
86
+ /* Buffer-flavored values (stream chunks) coerce utf8 (Node's
87
+ * Buffer.toString); plain Uint8Array joins its elements. */
88
+ ScrStr *enc = scr_str_new("utf8", 4);
89
+ ScrStr *txt = scr_bytes_to_str(d->v.bytes, enc);
90
+ scr_str_release(enc);
91
+ for (size_t i = 0; i < txt->len; i++) scr_jb_putc(b, txt->data[i]);
92
+ scr_str_release(txt);
93
+ return;
94
+ }
95
+ for (size_t i = 0; i < d->v.bytes->len; i++) {
96
+ if (i > 0) scr_jb_putc(b, ',');
97
+ char n[16];
98
+ snprintf(n, sizeof n, "%u", (unsigned)d->v.bytes->data[i]);
99
+ scr_jb_puts(b, n);
100
+ }
101
+ return;
102
+ case SCR_DYN_FUNC:
103
+ scr_jb_puts(b, "function ");
104
+ if (d->v.fn.name) scr_jb_puts(b, d->v.fn.name);
105
+ scr_jb_puts(b, "() { [native code] }");
106
+ return;
107
+ case SCR_DYN_HANDLE:
108
+ /* Object.prototype.toString — Node's String() over these classes. */
109
+ scr_jb_puts(b, "[object Object]");
110
+ return;
111
+ case SCR_DYN_PROMISE:
112
+ /* Object.prototype.toString — promises carry no own toString, and
113
+ * their @@toStringTag is not modeled here; Node's String() answer
114
+ * for a bare promise is "[object Promise]". */
115
+ scr_jb_puts(b, "[object Promise]");
116
+ return;
117
+ }
118
+ }
119
+
120
+ ScrStr *scr_dyn_display(const ScrDyn *d) {
121
+ ScrJsonBuf b;
122
+ scr_jb_init(&b);
123
+ scr_dyn_display_buf(&b, d);
124
+ return scr_jb_finish(&b);
125
+ }
126
+
127
+ static void dyn_throw_not_fn(const char *what) {
128
+ ScrJsonBuf b;
129
+ scr_jb_init(&b);
130
+ scr_jb_puts(&b, what);
131
+ scr_jb_puts(&b, " is not a function");
132
+ scr_throw_error(SCR_ERR_TYPE, scr_jb_finish(&b));
133
+ }
134
+
135
+ static void dyn_throw_unsupported(const char *proto, const char *method) {
136
+ ScrJsonBuf b;
137
+ scr_jb_init(&b);
138
+ scr_jb_putc(&b, '\'');
139
+ scr_jb_puts(&b, proto);
140
+ scr_jb_puts(&b, ".prototype.");
141
+ scr_jb_puts(&b, method);
142
+ scr_jb_puts(&b, "' on a dynamic value is not supported yet");
143
+ scr_throw_error(SCR_ERR_ERROR, scr_jb_finish(&b));
144
+ }
145
+
146
+ /* ToIntegerOrInfinity over an OPTIONAL index argument: missing/undefined
147
+ * answers dflt; a NUM truncates toward zero (NaN -> 0, like JS); any
148
+ * other kind throws the loud fence (Node would ToNumber-coerce — a
149
+ * documented gap, never a silent misread). */
150
+ static double dyn_index_arg(ScrDyn *const *args, size_t argc, size_t i, double dflt, const char *what) {
151
+ if (i >= argc || args[i]->kind == SCR_DYN_UNDEF) return dflt;
152
+ if (args[i]->kind == SCR_DYN_NUM) {
153
+ double n = args[i]->v.num;
154
+ if (n != n) return 0;
155
+ return trunc(n);
156
+ }
157
+ ScrJsonBuf b;
158
+ scr_jb_init(&b);
159
+ scr_jb_puts(&b, what);
160
+ scr_jb_puts(&b, ": non-number index arguments on a dynamic receiver are not supported yet");
161
+ scr_throw_error(SCR_ERR_TYPE, scr_jb_finish(&b));
162
+ return 0;
163
+ }
164
+
165
+ /* JS relative-index normalization (slice's rule). */
166
+ static size_t dyn_rel_index(double rel, size_t len) {
167
+ if (rel < 0) {
168
+ double r = (double)len + rel;
169
+ return r < 0 ? 0 : (size_t)r;
170
+ }
171
+ return rel > (double)len ? len : (size_t)rel;
172
+ }
173
+
174
+ /* The array callback runner (forEach/map/filter/some/every/find/
175
+ * findIndex): calls cb(item, i, recv) per element through the boxed
176
+ * thunk. Returns the owned result or NULL with the exception pending. */
177
+ static ScrDyn *dyn_call_cb(ScrDyn *cb, ScrDyn *item, size_t i, ScrDyn *recv) {
178
+ ScrDyn *idx = scr_dyn_new_num((double)i);
179
+ ScrDyn *cbargs[3] = { item, idx, recv };
180
+ ScrDyn *r = scr_dyn_call(cb, cbargs, 3, "callback");
181
+ scr_dyn_release(idx);
182
+ return r;
183
+ }
184
+
185
+ /* The callable-callback gate: JS's "<String(cb)> is not a function". */
186
+ static bool dyn_cb_check(ScrDyn *const *args, size_t argc) {
187
+ ScrDyn *cb = argc > 0 ? args[0] : scr_dyn_undefined();
188
+ if (cb->kind == SCR_DYN_FUNC) return true;
189
+ ScrJsonBuf b;
190
+ scr_jb_init(&b);
191
+ scr_dyn_display_buf(&b, cb);
192
+ scr_jb_puts(&b, " is not a function");
193
+ scr_throw_error(SCR_ERR_TYPE, scr_jb_finish(&b));
194
+ return false;
195
+ }
196
+
197
+ static bool dyn_name_is(const char *m, const char *n) { return strcmp(m, n) == 0; }
198
+
199
+ /* Handle receivers: hand the whole call to the tag's ops (installed by
200
+ * the owning unit at main() — a missing install is an internal error the
201
+ * accessor reports). */
202
+ static ScrDyn *scr_dynh_dispatch(ScrDyn *recv, const char *method, ScrDyn *const *args, size_t argc, const char *what) {
203
+ const ScrDynHandleOps *ops = scr_dyn_handle_ops_of(recv);
204
+ return ops->invoke(recv->v.handle.ptr, recv, method, args, argc, what);
205
+ }
206
+
207
+ /* JS Array.prototype.sort over a DOM array: the spec's snapshot-sort —
208
+ * elements copy (retained) into a work list, a stable merge sort orders
209
+ * it (undefined elements sink to the end before any comparator runs),
210
+ * and the ordered list writes back index by index, so a comparator that
211
+ * mutates the receiver mid-sort never dangles the items being ordered.
212
+ * The default comparator compares ToString images (scr_dyn_display_buf —
213
+ * join's conversion) bytewise: code-POINT order, where JS orders UTF-16
214
+ * code units — identical through the BMP, divergent only across the
215
+ * surrogate boundary (SEMANTICS.md). A comparator result converts
216
+ * loosely to number; NaN and non-numeric answers count as 0 (ToNumber's
217
+ * common cases; exotic ToString-of-object coercions stay 0). */
218
+ static ScrStr *dyn_sort_str(const ScrDyn *e) {
219
+ ScrJsonBuf b;
220
+ scr_jb_init(&b);
221
+ scr_dyn_display_buf(&b, e);
222
+ return scr_jb_finish(&b);
223
+ }
224
+ static int dyn_sort_compare(ScrDyn *x, ScrDyn *y, ScrDyn *cmp, bool *failed) {
225
+ bool xu = x->kind == SCR_DYN_UNDEF, yu = y->kind == SCR_DYN_UNDEF;
226
+ if (xu || yu) return (xu && yu) ? 0 : xu ? 1 : -1;
227
+ if (cmp) {
228
+ ScrDyn *argv[2] = { x, y };
229
+ ScrDyn *r = scr_dyn_call(cmp, argv, 2, "comparefn");
230
+ if (!r) { *failed = true; return 0; }
231
+ double v = r->kind == SCR_DYN_NUM ? r->v.num : r->kind == SCR_DYN_BOOL ? (r->v.b ? 1 : 0) : 0;
232
+ scr_dyn_release(r);
233
+ return v < 0 ? -1 : v > 0 ? 1 : 0;
234
+ }
235
+ ScrStr *xs = dyn_sort_str(x);
236
+ ScrStr *ys = dyn_sort_str(y);
237
+ int c = scr_str_cmp(xs, ys);
238
+ scr_str_release(xs);
239
+ scr_str_release(ys);
240
+ return c < 0 ? -1 : c > 0 ? 1 : 0;
241
+ }
242
+ /* Merge sort work[lo, hi) stably (ties keep first-seen order — `<=`
243
+ * takes the left run's element). False when a comparator threw. */
244
+ static bool dyn_arr_sort_range(ScrDyn **work, ScrDyn **tmp, size_t lo, size_t hi, ScrDyn *cmp) {
245
+ if (hi - lo < 2) return true;
246
+ size_t mid = lo + (hi - lo) / 2;
247
+ if (!dyn_arr_sort_range(work, tmp, lo, mid, cmp)) return false;
248
+ if (!dyn_arr_sort_range(work, tmp, mid, hi, cmp)) return false;
249
+ size_t i = lo, j = mid, k = lo;
250
+ bool failed = false;
251
+ while (i < mid && j < hi) {
252
+ int c = dyn_sort_compare(work[i], work[j], cmp, &failed);
253
+ if (failed) return false;
254
+ tmp[k++] = c <= 0 ? work[i++] : work[j++];
255
+ }
256
+ while (i < mid) tmp[k++] = work[i++];
257
+ while (j < hi) tmp[k++] = work[j++];
258
+ memcpy(work + lo, tmp + lo, (hi - lo) * sizeof(ScrDyn *));
259
+ return true;
260
+ }
261
+ static bool dyn_arr_sort(ScrDyn *recv, ScrDyn *cmp) {
262
+ size_t len = recv->v.arr.len;
263
+ ScrDyn **buf = (ScrDyn **)malloc(2 * len * sizeof(ScrDyn *));
264
+ if (!buf) return true; /* OOM: answer the array unsorted over crashing */
265
+ ScrDyn **work = buf, **tmp = buf + len;
266
+ for (size_t i = 0; i < len; i++) work[i] = scr_dyn_retain(recv->v.arr.items[i]);
267
+ bool ok = dyn_arr_sort_range(work, tmp, 0, len, cmp);
268
+ if (ok) {
269
+ /* Write back into whatever the array holds NOW (a mutating comparator
270
+ * may have replaced entries): the work list's +1 moves in, the
271
+ * displaced entry releases. Elements beyond the current length (a
272
+ * shrinking comparator) just release. */
273
+ for (size_t i = 0; i < len; i++) {
274
+ if (i < recv->v.arr.len) {
275
+ ScrDyn *old = recv->v.arr.items[i];
276
+ recv->v.arr.items[i] = work[i];
277
+ scr_dyn_release(old);
278
+ } else {
279
+ scr_dyn_release(work[i]);
280
+ }
281
+ }
282
+ } else {
283
+ for (size_t i = 0; i < len; i++) scr_dyn_release(work[i]);
284
+ }
285
+ free(buf);
286
+ return ok;
287
+ }
288
+
289
+ /* Names each prototype declares BEYOND what's implemented here — these
290
+ * fence loudly instead of mis-answering "is not a function". */
291
+ static bool dyn_arr_proto_unimpl(const char *m) {
292
+ static const char *names[] = { "splice", "reduce", "reduceRight", "flat", "flatMap",
293
+ "fill", "copyWithin", "keys", "values", "entries", "toReversed", "toSorted", "toSpliced",
294
+ "with", "toString", "toLocaleString", NULL };
295
+ for (size_t i = 0; names[i]; i++) if (dyn_name_is(m, names[i])) return true;
296
+ return false;
297
+ }
298
+ static bool dyn_bytes_proto_real(const char *m) {
299
+ static const char *names[] = { "slice", "at", "indexOf", "lastIndexOf", "includes", "join",
300
+ "forEach", "map", "filter", "some", "every", "find", "findIndex", "reverse", "fill", "set",
301
+ "subarray", "sort", "keys", "values", "entries", "reduce", "reduceRight", "copyWithin",
302
+ "toString", "toLocaleString", NULL };
303
+ for (size_t i = 0; names[i]; i++) if (dyn_name_is(m, names[i])) return true;
304
+ return false;
305
+ }
306
+
307
+ ScrDyn *scr_dyn_invoke(ScrDyn *recv, const char *method, ScrDyn *const *args, size_t argc, const char *what) {
308
+ if (recv->kind == SCR_DYN_UNDEF || recv->kind == SCR_DYN_NULL) {
309
+ ScrJsonBuf b;
310
+ scr_jb_init(&b);
311
+ scr_jb_puts(&b, "Cannot read properties of ");
312
+ scr_jb_puts(&b, recv->kind == SCR_DYN_UNDEF ? "undefined" : "null");
313
+ scr_jb_puts(&b, " (reading '");
314
+ scr_jb_puts(&b, method);
315
+ scr_jb_puts(&b, "')");
316
+ scr_throw_error(SCR_ERR_TYPE, scr_jb_finish(&b));
317
+ return NULL;
318
+ }
319
+
320
+ /* Native handles dispatch through the tag's ops onto the same entry
321
+ * points the static lowerings use (scr_http/scr_net register them at
322
+ * main()); the ladder inside covers real-but-unimplemented members
323
+ * loudly. */
324
+ if (recv->kind == SCR_DYN_HANDLE) {
325
+ return scr_dynh_dispatch(recv, method, args, argc, what);
326
+ }
327
+
328
+ /* OBJ: the own member calls (own properties shadow prototypes in JS
329
+ * too); anything else is Node's is-not-a-function. */
330
+ if (recv->kind == SCR_DYN_OBJ) {
331
+ ScrDyn *m = scr_dyn_obj_get(recv, method, strlen(method));
332
+ if (m && m->kind == SCR_DYN_FUNC) {
333
+ /* JS binds the receiver for the call (`obj.method()` — this === obj):
334
+ * the ambient-receiver window (scr_runtime.h). */
335
+ scr_dyn_this_push_dyn(recv);
336
+ ScrDyn *r = scr_dyn_call(m, args, argc, what);
337
+ scr_dyn_this_pop();
338
+ return r;
339
+ }
340
+ dyn_throw_not_fn(what);
341
+ return NULL;
342
+ }
343
+
344
+ if (recv->kind == SCR_DYN_FUNC) {
345
+ if (dyn_name_is(method, "apply")) {
346
+ /* fn.apply(thisArg, argsArray) — thisArg binds the ambient receiver
347
+ * for the call window (the mustCall wrapper's `fn.apply(this,
348
+ * arguments)` forwards whatever receiver the wrapper ran under). */
349
+ const ScrDyn *thisv = argc >= 1 ? args[0] : scr_dyn_undefined();
350
+ ScrDyn *list = argc >= 2 ? args[1] : NULL;
351
+ if (list == NULL || list->kind == SCR_DYN_UNDEF || list->kind == SCR_DYN_NULL) {
352
+ scr_dyn_this_push_dyn(thisv);
353
+ ScrDyn *r = scr_dyn_call(recv, NULL, 0, what);
354
+ scr_dyn_this_pop();
355
+ return r;
356
+ }
357
+ if (list->kind != SCR_DYN_ARR) {
358
+ scr_throw_error_msg(SCR_ERR_TYPE, "CreateListFromArrayLike called on non-object",
359
+ strlen("CreateListFromArrayLike called on non-object"));
360
+ return NULL;
361
+ }
362
+ scr_dyn_this_push_dyn(thisv);
363
+ ScrDyn *r = scr_dyn_call(recv, list->v.arr.items, list->v.arr.len, what);
364
+ scr_dyn_this_pop();
365
+ return r;
366
+ }
367
+ if (dyn_name_is(method, "call")) {
368
+ scr_dyn_this_push_dyn(argc >= 1 ? args[0] : scr_dyn_undefined());
369
+ ScrDyn *r = scr_dyn_call(recv, argc > 1 ? args + 1 : NULL, argc > 1 ? argc - 1 : 0, what);
370
+ scr_dyn_this_pop();
371
+ return r;
372
+ }
373
+ if (dyn_name_is(method, "bind") || dyn_name_is(method, "toString")) {
374
+ dyn_throw_unsupported("Function", method);
375
+ return NULL;
376
+ }
377
+ dyn_throw_not_fn(what);
378
+ return NULL;
379
+ }
380
+
381
+ if (recv->kind == SCR_DYN_STR) {
382
+ ScrStr *s = recv->v.str;
383
+ if (dyn_name_is(method, "slice")) {
384
+ double start = dyn_index_arg(args, argc, 0, 0, what);
385
+ if (scr_exc_pending()) return NULL;
386
+ double end = dyn_index_arg(args, argc, 1, scr_str_utf16_len(s), what);
387
+ if (scr_exc_pending()) return NULL;
388
+ ScrStr *piece = scr_str_slice(s, start, end);
389
+ ScrDyn *r = scr_dyn_new_str(piece); /* retains */
390
+ scr_str_release(piece);
391
+ return r;
392
+ }
393
+ if (dyn_name_is(method, "at") || dyn_name_is(method, "concat") ||
394
+ dyn_name_is(method, "indexOf") || dyn_name_is(method, "lastIndexOf") ||
395
+ dyn_name_is(method, "includes")) {
396
+ if ((dyn_name_is(method, "indexOf") || dyn_name_is(method, "lastIndexOf") ||
397
+ dyn_name_is(method, "includes")) &&
398
+ argc >= 1 && args[0]->kind == SCR_DYN_STR) {
399
+ if (dyn_name_is(method, "includes")) return scr_dyn_new_bool(scr_str_includes(s, args[0]->v.str));
400
+ if (dyn_name_is(method, "indexOf")) return scr_dyn_new_num(scr_str_index_of(s, args[0]->v.str, 0));
401
+ return scr_dyn_new_num(scr_str_last_index_of(s, args[0]->v.str));
402
+ }
403
+ dyn_throw_unsupported("String", method);
404
+ return NULL;
405
+ }
406
+ dyn_throw_not_fn(what);
407
+ return NULL;
408
+ }
409
+
410
+ if (recv->kind == SCR_DYN_ARR) {
411
+ size_t len = recv->v.arr.len;
412
+ if (dyn_name_is(method, "push")) {
413
+ for (size_t i = 0; i < argc; i++) scr_dyn_arr_push(recv, scr_dyn_retain(args[i]));
414
+ return scr_dyn_new_num((double)recv->v.arr.len);
415
+ }
416
+ if (dyn_name_is(method, "pop")) {
417
+ if (len == 0) return scr_dyn_retain(scr_dyn_undefined());
418
+ return recv->v.arr.items[--recv->v.arr.len]; /* ownership moves out */
419
+ }
420
+ if (dyn_name_is(method, "shift")) {
421
+ if (len == 0) return scr_dyn_retain(scr_dyn_undefined());
422
+ ScrDyn *first = recv->v.arr.items[0];
423
+ memmove(recv->v.arr.items, recv->v.arr.items + 1, (len - 1) * sizeof(ScrDyn *));
424
+ recv->v.arr.len = len - 1;
425
+ return first; /* ownership moves out */
426
+ }
427
+ if (dyn_name_is(method, "unshift")) {
428
+ /* Append first (the push path grows capacity and takes the +1s),
429
+ * then rotate: the old block moves up and the SAME retained
430
+ * pointers land at the front (args[] still names them, so the
431
+ * memmove clobbering the appended slots loses nothing). */
432
+ for (size_t i = 0; i < argc; i++) scr_dyn_arr_push(recv, scr_dyn_retain(args[i]));
433
+ memmove(recv->v.arr.items + argc, recv->v.arr.items, len * sizeof(ScrDyn *));
434
+ for (size_t i = 0; i < argc; i++) recv->v.arr.items[i] = args[i];
435
+ return scr_dyn_new_num((double)recv->v.arr.len);
436
+ }
437
+ if (dyn_name_is(method, "slice")) {
438
+ double startD = dyn_index_arg(args, argc, 0, 0, what);
439
+ if (scr_exc_pending()) return NULL;
440
+ double endD = dyn_index_arg(args, argc, 1, (double)len, what);
441
+ if (scr_exc_pending()) return NULL;
442
+ size_t start = dyn_rel_index(startD, len);
443
+ size_t end = dyn_rel_index(endD, len);
444
+ ScrDyn *out = scr_dyn_new_arr();
445
+ for (size_t i = start; i < end; i++) scr_dyn_arr_push(out, scr_dyn_retain(recv->v.arr.items[i]));
446
+ return out;
447
+ }
448
+ if (dyn_name_is(method, "at")) {
449
+ double iD = dyn_index_arg(args, argc, 0, 0, what);
450
+ if (scr_exc_pending()) return NULL;
451
+ double idx = iD < 0 ? (double)len + iD : iD;
452
+ if (idx < 0 || idx >= (double)len) return scr_dyn_retain(scr_dyn_undefined());
453
+ return scr_dyn_retain(recv->v.arr.items[(size_t)idx]);
454
+ }
455
+ if (dyn_name_is(method, "indexOf") || dyn_name_is(method, "lastIndexOf") ||
456
+ dyn_name_is(method, "includes")) {
457
+ ScrDyn *needle = argc > 0 ? args[0] : scr_dyn_undefined();
458
+ if (dyn_name_is(method, "lastIndexOf")) {
459
+ for (size_t i = len; i > 0; i--) {
460
+ if (scr_dyn_strict_eq(recv->v.arr.items[i - 1], needle)) return scr_dyn_new_num((double)(i - 1));
461
+ }
462
+ return scr_dyn_new_num(-1);
463
+ }
464
+ for (size_t i = 0; i < len; i++) {
465
+ if (scr_dyn_strict_eq(recv->v.arr.items[i], needle)) {
466
+ return dyn_name_is(method, "includes") ? scr_dyn_new_bool(true) : scr_dyn_new_num((double)i);
467
+ }
468
+ }
469
+ return dyn_name_is(method, "includes") ? scr_dyn_new_bool(false) : scr_dyn_new_num(-1);
470
+ }
471
+ if (dyn_name_is(method, "join")) {
472
+ ScrJsonBuf b;
473
+ scr_jb_init(&b);
474
+ for (size_t i = 0; i < len; i++) {
475
+ if (i > 0) {
476
+ if (argc > 0 && args[0]->kind != SCR_DYN_UNDEF) scr_dyn_display_buf(&b, args[0]);
477
+ else scr_jb_putc(&b, ',');
478
+ }
479
+ const ScrDyn *e = recv->v.arr.items[i];
480
+ if (e->kind == SCR_DYN_UNDEF || e->kind == SCR_DYN_NULL) continue;
481
+ scr_dyn_display_buf(&b, e);
482
+ }
483
+ ScrStr *joined = scr_jb_finish(&b);
484
+ ScrDyn *r = scr_dyn_new_str(joined); /* retains */
485
+ scr_str_release(joined);
486
+ return r;
487
+ }
488
+ if (dyn_name_is(method, "concat")) {
489
+ ScrDyn *out = scr_dyn_new_arr();
490
+ for (size_t i = 0; i < len; i++) scr_dyn_arr_push(out, scr_dyn_retain(recv->v.arr.items[i]));
491
+ for (size_t a = 0; a < argc; a++) {
492
+ if (args[a]->kind == SCR_DYN_ARR) {
493
+ for (size_t i = 0; i < args[a]->v.arr.len; i++) {
494
+ scr_dyn_arr_push(out, scr_dyn_retain(args[a]->v.arr.items[i]));
495
+ }
496
+ } else {
497
+ scr_dyn_arr_push(out, scr_dyn_retain(args[a]));
498
+ }
499
+ }
500
+ return out;
501
+ }
502
+ if (dyn_name_is(method, "reverse")) {
503
+ for (size_t i = 0; i < len / 2; i++) {
504
+ ScrDyn *tmp = recv->v.arr.items[i];
505
+ recv->v.arr.items[i] = recv->v.arr.items[len - 1 - i];
506
+ recv->v.arr.items[len - 1 - i] = tmp;
507
+ }
508
+ return scr_dyn_retain(recv);
509
+ }
510
+ if (dyn_name_is(method, "forEach") || dyn_name_is(method, "map") ||
511
+ dyn_name_is(method, "filter") || dyn_name_is(method, "some") ||
512
+ dyn_name_is(method, "every") || dyn_name_is(method, "find") ||
513
+ dyn_name_is(method, "findIndex")) {
514
+ if (!dyn_cb_check(args, argc)) return NULL;
515
+ ScrDyn *cb = args[0];
516
+ ScrDyn *out = (dyn_name_is(method, "map") || dyn_name_is(method, "filter")) ? scr_dyn_new_arr() : NULL;
517
+ /* JS iterates the LIVE array (a push mid-loop is visited); reading
518
+ * len fresh each step matches that. */
519
+ for (size_t i = 0; i < recv->v.arr.len; i++) {
520
+ ScrDyn *item = scr_dyn_retain(recv->v.arr.items[i]);
521
+ ScrDyn *r = dyn_call_cb(cb, item, i, recv);
522
+ if (!r) { scr_dyn_release(item); scr_dyn_release(out); return NULL; }
523
+ if (dyn_name_is(method, "map")) {
524
+ scr_dyn_arr_push(out, r); /* ownership moves in */
525
+ r = NULL;
526
+ } else {
527
+ bool truthy = scr_dyn_truthy(r);
528
+ scr_dyn_release(r);
529
+ if (dyn_name_is(method, "filter") && truthy) scr_dyn_arr_push(out, scr_dyn_retain(item));
530
+ if (dyn_name_is(method, "some") && truthy) { scr_dyn_release(item); return scr_dyn_new_bool(true); }
531
+ if (dyn_name_is(method, "every") && !truthy) { scr_dyn_release(item); return scr_dyn_new_bool(false); }
532
+ if (dyn_name_is(method, "find") && truthy) return item; /* +1 moves out */
533
+ if (dyn_name_is(method, "findIndex") && truthy) { scr_dyn_release(item); return scr_dyn_new_num((double)i); }
534
+ }
535
+ scr_dyn_release(item);
536
+ }
537
+ if (out) return out;
538
+ if (dyn_name_is(method, "some")) return scr_dyn_new_bool(false);
539
+ if (dyn_name_is(method, "every")) return scr_dyn_new_bool(true);
540
+ if (dyn_name_is(method, "find")) return scr_dyn_retain(scr_dyn_undefined());
541
+ if (dyn_name_is(method, "findIndex")) return scr_dyn_new_num(-1);
542
+ return scr_dyn_retain(scr_dyn_undefined()); /* forEach */
543
+ }
544
+ if (dyn_name_is(method, "sort")) {
545
+ ScrDyn *cmp = argc > 0 ? args[0] : scr_dyn_undefined();
546
+ if (cmp->kind != SCR_DYN_UNDEF && cmp->kind != SCR_DYN_FUNC) {
547
+ /* V8 appends the received value's string image. */
548
+ ScrJsonBuf b;
549
+ scr_jb_init(&b);
550
+ scr_jb_puts(&b, "The comparison function must be either a function or undefined: ");
551
+ scr_dyn_display_buf(&b, cmp);
552
+ scr_throw_error(SCR_ERR_TYPE, scr_jb_finish(&b));
553
+ return NULL;
554
+ }
555
+ if (len > 1 && !dyn_arr_sort(recv, cmp->kind == SCR_DYN_FUNC ? cmp : NULL)) return NULL;
556
+ return scr_dyn_retain(recv);
557
+ }
558
+ if (dyn_arr_proto_unimpl(method)) {
559
+ dyn_throw_unsupported("Array", method);
560
+ return NULL;
561
+ }
562
+ dyn_throw_not_fn(what);
563
+ return NULL;
564
+ }
565
+
566
+ /* PROMISE receivers: the then/catch/finally reactions ride the fiber
567
+ * machinery (scr_dyn_promise_then — microtask-exact ordering); every
568
+ * other Promise.prototype name is `then`-adjacent sugar JS doesn't
569
+ * have, so the not-a-function answer IS the JS answer. */
570
+ if (recv->kind == SCR_DYN_PROMISE) {
571
+ if (dyn_name_is(method, "then")) {
572
+ return scr_dyn_promise_then(recv->v.promise, argc >= 1 ? args[0] : NULL,
573
+ argc >= 2 ? args[1] : NULL, NULL);
574
+ }
575
+ if (dyn_name_is(method, "catch")) {
576
+ return scr_dyn_promise_then(recv->v.promise, NULL, argc >= 1 ? args[0] : NULL, NULL);
577
+ }
578
+ if (dyn_name_is(method, "finally")) {
579
+ return scr_dyn_promise_then(recv->v.promise, NULL, NULL, argc >= 1 ? args[0] : NULL);
580
+ }
581
+ dyn_throw_not_fn(what);
582
+ return NULL;
583
+ }
584
+
585
+ if (recv->kind == SCR_DYN_BYTES && dyn_bytes_proto_real(method)) {
586
+ dyn_throw_unsupported("Uint8Array", method);
587
+ return NULL;
588
+ }
589
+
590
+ /* NUM/BOOL/BYTES-remainder: the name is no method of this kind — JS's
591
+ * own answer. */
592
+ dyn_throw_not_fn(what);
593
+ return NULL;
594
+ }
595
+
596
+ /* Object.defineProperties over DOM values (see scr_runtime.h). Value
597
+ * descriptors only: writable/enumerable/configurable accepted and IGNORED
598
+ * (DOM properties are plain data properties — SEMANTICS.md); get/set
599
+ * throw the loud unsupported Error, never a silent drop. */
600
+ ScrDyn *scr_dyn_define_props(ScrDyn *target, ScrDyn *descs) {
601
+ if (target->kind != SCR_DYN_OBJ && target->kind != SCR_DYN_FUNC) {
602
+ scr_throw_error_msg(SCR_ERR_TYPE, "Object.defineProperties called on non-object",
603
+ strlen("Object.defineProperties called on non-object"));
604
+ return NULL;
605
+ }
606
+ if (descs->kind != SCR_DYN_OBJ) {
607
+ scr_throw_error_msg(SCR_ERR_TYPE, "Object.defineProperties called on non-object",
608
+ strlen("Object.defineProperties called on non-object"));
609
+ return NULL;
610
+ }
611
+ for (size_t i = 0; i < descs->v.obj.len; i++) {
612
+ ScrDynEntry *ent = &descs->v.obj.entries[i];
613
+ if (ent->value->kind != SCR_DYN_OBJ) {
614
+ ScrJsonBuf b;
615
+ scr_jb_init(&b);
616
+ scr_jb_puts(&b, "Property description must be an object: ");
617
+ scr_dyn_display_buf(&b, ent->value);
618
+ scr_throw_error(SCR_ERR_TYPE, scr_jb_finish(&b));
619
+ return NULL;
620
+ }
621
+ if (scr_dyn_obj_get(ent->value, "get", 3) || scr_dyn_obj_get(ent->value, "set", 3)) {
622
+ scr_throw_error_msg(SCR_ERR_ERROR,
623
+ "accessor (get/set) property descriptors on a dynamic value are not supported yet",
624
+ strlen("accessor (get/set) property descriptors on a dynamic value are not supported yet"));
625
+ return NULL;
626
+ }
627
+ ScrDyn *value = scr_dyn_obj_get(ent->value, "value", 5);
628
+ if (!value) value = scr_dyn_undefined();
629
+ if (target->kind == SCR_DYN_OBJ) {
630
+ scr_dyn_obj_set(target, ent->key, ent->key_len, scr_dyn_retain(value));
631
+ } else {
632
+ if (!target->v.fn.clo->props) {
633
+ ScrBox *box = scr_box_new_obj(&scr_dyn_retain_v, &scr_dyn_release_v, NULL);
634
+ ScrDyn *table = scr_dyn_new_obj();
635
+ scr_box_set_ref(box, table); /* the box owns the fresh table */
636
+ target->v.fn.clo->props = box;
637
+ }
638
+ ScrDyn *table = (ScrDyn *)scr_box_get_ref(target->v.fn.clo->props); /* +1 */
639
+ scr_dyn_obj_set(table, ent->key, ent->key_len, scr_dyn_retain(value));
640
+ scr_dyn_release(table);
641
+ }
642
+ }
643
+ return scr_dyn_retain(target);
644
+ }