@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,1195 @@
1
+ #ifdef NDEBUG
2
+ #undef NDEBUG
3
+ #endif
4
+ #include <assert.h>
5
+ #include <stdlib.h>
6
+ #include <string.h>
7
+ #include "quickjs.h"
8
+ #include "cutils.h"
9
+
10
+ static JSRuntime *new_runtime(void)
11
+ {
12
+ JSRuntime *rt = JS_NewRuntime();
13
+
14
+ if (rt)
15
+ JS_SetDumpFlags(rt, JS_ABORT_ON_LEAKS);
16
+ return rt;
17
+ }
18
+
19
+ static JSValue eval(JSContext *ctx, const char *code)
20
+ {
21
+ return JS_Eval(ctx, code, strlen(code), "<input>", JS_EVAL_TYPE_GLOBAL);
22
+ }
23
+
24
+ static JSValue cfunc_callback(JSContext *ctx, JSValueConst this_val,
25
+ int argc, JSValueConst *argv)
26
+ {
27
+ return JS_ThrowTypeError(ctx, "from cfunc");
28
+ }
29
+
30
+ static JSValue cfuncdata_callback(JSContext *ctx, JSValueConst this_val,
31
+ int argc, JSValueConst *argv,
32
+ int magic, JSValueConst *func_data)
33
+ {
34
+ return JS_ThrowTypeError(ctx, "from cfuncdata");
35
+ }
36
+
37
+ static JSValue cclosure_callback(JSContext *ctx, JSValueConst this_val,
38
+ int argc, JSValueConst *argv,
39
+ int magic, void *func_data)
40
+ {
41
+ return JS_ThrowTypeError(ctx, "from cclosure");
42
+ }
43
+
44
+ static bool closure_finalized = false;
45
+
46
+ static void cclosure_opaque_finalize(void *opaque)
47
+ {
48
+ if ((intptr_t)opaque == 12)
49
+ closure_finalized = true;
50
+ }
51
+
52
+ static void cfunctions(void)
53
+ {
54
+ uint32_t length;
55
+ const char *s;
56
+ JSValue ret, stack;
57
+
58
+ JSRuntime *rt = new_runtime();
59
+ JSContext *ctx = JS_NewContext(rt);
60
+ JSValue cfunc = JS_NewCFunction(ctx, cfunc_callback, "cfunc", 42);
61
+ JSValue cfuncdata =
62
+ JS_NewCFunctionData2(ctx, cfuncdata_callback, "cfuncdata",
63
+ /*length*/1337, /*magic*/0, /*data_len*/0, NULL);
64
+ JSValue cclosure =
65
+ JS_NewCClosure(ctx, cclosure_callback, "cclosure", cclosure_opaque_finalize,
66
+ /*length*/0xC0DE, /*magic*/11, /*opaque*/(void*)12);
67
+ JSValue global = JS_GetGlobalObject(ctx);
68
+ JS_SetPropertyStr(ctx, global, "cfunc", cfunc);
69
+ JS_SetPropertyStr(ctx, global, "cfuncdata", cfuncdata);
70
+ JS_SetPropertyStr(ctx, global, "cclosure", cclosure);
71
+ JS_FreeValue(ctx, global);
72
+
73
+ ret = eval(ctx, "cfunc.name");
74
+ assert(!JS_IsException(ret));
75
+ assert(JS_IsString(ret));
76
+ s = JS_ToCString(ctx, ret);
77
+ JS_FreeValue(ctx, ret);
78
+ assert(s);
79
+ assert(!strcmp(s, "cfunc"));
80
+ JS_FreeCString(ctx, s);
81
+ ret = eval(ctx, "cfunc.length");
82
+ assert(!JS_IsException(ret));
83
+ assert(JS_IsNumber(ret));
84
+ assert(0 == JS_ToUint32(ctx, &length, ret));
85
+ assert(length == 42);
86
+
87
+ ret = eval(ctx, "cfuncdata.name");
88
+ assert(!JS_IsException(ret));
89
+ assert(JS_IsString(ret));
90
+ s = JS_ToCString(ctx, ret);
91
+ JS_FreeValue(ctx, ret);
92
+ assert(s);
93
+ assert(!strcmp(s, "cfuncdata"));
94
+ JS_FreeCString(ctx, s);
95
+ ret = eval(ctx, "cfuncdata.length");
96
+ assert(!JS_IsException(ret));
97
+ assert(JS_IsNumber(ret));
98
+ assert(0 == JS_ToUint32(ctx, &length, ret));
99
+ assert(length == 1337);
100
+
101
+ ret = eval(ctx, "cclosure.name");
102
+ assert(!JS_IsException(ret));
103
+ assert(JS_IsString(ret));
104
+ s = JS_ToCString(ctx, ret);
105
+ JS_FreeValue(ctx, ret);
106
+ assert(s);
107
+ assert(!strcmp(s, "cclosure"));
108
+ JS_FreeCString(ctx, s);
109
+ ret = eval(ctx, "cclosure.length");
110
+ assert(!JS_IsException(ret));
111
+ assert(JS_IsNumber(ret));
112
+ assert(0 == JS_ToUint32(ctx, &length, ret));
113
+ assert(length == 0xC0DE);
114
+
115
+ ret = eval(ctx, "cfunc()");
116
+ assert(JS_IsException(ret));
117
+ ret = JS_GetException(ctx);
118
+ assert(JS_IsError(ret));
119
+ stack = JS_GetPropertyStr(ctx, ret, "stack");
120
+ assert(JS_IsString(stack));
121
+ s = JS_ToCString(ctx, stack);
122
+ JS_FreeValue(ctx, stack);
123
+ assert(s);
124
+ assert(!strcmp(s, " at cfunc (native)\n at <eval> (<input>:1:1)\n"));
125
+ JS_FreeCString(ctx, s);
126
+ s = JS_ToCString(ctx, ret);
127
+ JS_FreeValue(ctx, ret);
128
+ assert(s);
129
+ assert(!strcmp(s, "TypeError: from cfunc"));
130
+ JS_FreeCString(ctx, s);
131
+
132
+ ret = eval(ctx, "cfuncdata()");
133
+ assert(JS_IsException(ret));
134
+ ret = JS_GetException(ctx);
135
+ assert(JS_IsError(ret));
136
+ stack = JS_GetPropertyStr(ctx, ret, "stack");
137
+ assert(JS_IsString(stack));
138
+ s = JS_ToCString(ctx, stack);
139
+ JS_FreeValue(ctx, stack);
140
+ assert(s);
141
+ assert(!strcmp(s, " at cfuncdata (native)\n at <eval> (<input>:1:1)\n"));
142
+ JS_FreeCString(ctx, s);
143
+ s = JS_ToCString(ctx, ret);
144
+ JS_FreeValue(ctx, ret);
145
+ assert(s);
146
+ assert(!strcmp(s, "TypeError: from cfuncdata"));
147
+ JS_FreeCString(ctx, s);
148
+
149
+ ret = eval(ctx, "cclosure()");
150
+ assert(JS_IsException(ret));
151
+ ret = JS_GetException(ctx);
152
+ assert(JS_IsError(ret));
153
+ stack = JS_GetPropertyStr(ctx, ret, "stack");
154
+ assert(JS_IsString(stack));
155
+ s = JS_ToCString(ctx, stack);
156
+ JS_FreeValue(ctx, stack);
157
+ assert(s);
158
+ assert(!strcmp(s, " at cclosure (native)\n at <eval> (<input>:1:1)\n"));
159
+ JS_FreeCString(ctx, s);
160
+ s = JS_ToCString(ctx, ret);
161
+ JS_FreeValue(ctx, ret);
162
+ assert(s);
163
+ assert(!strcmp(s, "TypeError: from cclosure"));
164
+ JS_FreeCString(ctx, s);
165
+
166
+ JS_FreeContext(ctx);
167
+ JS_FreeRuntime(rt);
168
+
169
+ assert(closure_finalized);
170
+ }
171
+
172
+ #define MAX_TIME 10
173
+
174
+ static int timeout_interrupt_handler(JSRuntime *rt, void *opaque)
175
+ {
176
+ int *time = (int *)opaque;
177
+ if (*time <= MAX_TIME)
178
+ *time += 1;
179
+ return *time > MAX_TIME;
180
+ }
181
+
182
+ static void sync_call(void)
183
+ {
184
+ static const char code[] =
185
+ "(function() { \
186
+ try { \
187
+ while (true) {} \
188
+ } catch (e) {} \
189
+ })();";
190
+
191
+ JSRuntime *rt = new_runtime();
192
+ JSContext *ctx = JS_NewContext(rt);
193
+ int time = 0;
194
+ JS_SetInterruptHandler(rt, timeout_interrupt_handler, &time);
195
+ JSValue ret = eval(ctx, code);
196
+ assert(time > MAX_TIME);
197
+ assert(JS_IsException(ret));
198
+ JS_FreeValue(ctx, ret);
199
+ assert(JS_HasException(ctx));
200
+ JSValue e = JS_GetException(ctx);
201
+ assert(JS_IsUncatchableError(e));
202
+ JS_FreeValue(ctx, e);
203
+ JS_FreeContext(ctx);
204
+ JS_FreeRuntime(rt);
205
+ }
206
+
207
+ static void async_call(void)
208
+ {
209
+ static const char code[] =
210
+ "(async function() { \
211
+ const loop = async () => { \
212
+ await Promise.resolve(); \
213
+ while (true) {} \
214
+ }; \
215
+ await loop().catch(() => {}); \
216
+ })();";
217
+
218
+ JSRuntime *rt = new_runtime();
219
+ JSContext *ctx = JS_NewContext(rt);
220
+ int time = 0;
221
+ JS_SetInterruptHandler(rt, timeout_interrupt_handler, &time);
222
+ JSValue ret = eval(ctx, code);
223
+ assert(!JS_IsException(ret));
224
+ JS_FreeValue(ctx, ret);
225
+ assert(JS_IsJobPending(rt));
226
+ int r = 0;
227
+ while (JS_IsJobPending(rt)) {
228
+ r = JS_ExecutePendingJob(rt, &ctx);
229
+ }
230
+ assert(time > MAX_TIME);
231
+ assert(r == -1);
232
+ assert(JS_HasException(ctx));
233
+ JSValue e = JS_GetException(ctx);
234
+ assert(JS_IsUncatchableError(e));
235
+ JS_FreeValue(ctx, e);
236
+ JS_FreeContext(ctx);
237
+ JS_FreeRuntime(rt);
238
+ }
239
+
240
+ static JSValue save_value(JSContext *ctx, JSValueConst this_val,
241
+ int argc, JSValueConst *argv)
242
+ {
243
+ assert(argc == 1);
244
+ JSValue *p = (JSValue *)JS_GetContextOpaque(ctx);
245
+ *p = JS_DupValue(ctx, argv[0]);
246
+ return JS_UNDEFINED;
247
+ }
248
+
249
+ static void async_call_stack_overflow(void)
250
+ {
251
+ static const char code[] =
252
+ "(async function() { \
253
+ const f = () => f(); \
254
+ try { \
255
+ await Promise.resolve(); \
256
+ f(); \
257
+ } catch (e) { \
258
+ save_value(e); \
259
+ } \
260
+ })();";
261
+
262
+ JSRuntime *rt = new_runtime();
263
+ JSContext *ctx = JS_NewContext(rt);
264
+ JSValue value = JS_UNDEFINED;
265
+ JS_SetContextOpaque(ctx, &value);
266
+ JSValue global = JS_GetGlobalObject(ctx);
267
+ JS_SetPropertyStr(ctx, global, "save_value", JS_NewCFunction(ctx, save_value, "save_value", 1));
268
+ JS_FreeValue(ctx, global);
269
+ JSValue ret = eval(ctx, code);
270
+ assert(!JS_IsException(ret));
271
+ JS_FreeValue(ctx, ret);
272
+ assert(JS_IsJobPending(rt));
273
+ int r = 0;
274
+ while (JS_IsJobPending(rt)) {
275
+ r = JS_ExecutePendingJob(rt, &ctx);
276
+ }
277
+ assert(r == 1);
278
+ assert(!JS_HasException(ctx));
279
+ assert(JS_IsError(value)); // stack overflow should be caught
280
+ JS_FreeValue(ctx, value);
281
+ JS_FreeContext(ctx);
282
+ JS_FreeRuntime(rt);
283
+ }
284
+
285
+ // https://github.com/quickjs-ng/quickjs/issues/914
286
+ static void raw_context_global_var(void)
287
+ {
288
+ JSRuntime *rt = new_runtime();
289
+ JSContext *ctx = JS_NewContextRaw(rt);
290
+ JS_AddIntrinsicEval(ctx);
291
+ {
292
+ JSValue ret = eval(ctx, "globalThis");
293
+ assert(JS_IsException(ret));
294
+ JS_FreeValue(ctx, ret);
295
+ }
296
+ {
297
+ JSValue ret = eval(ctx, "var x = 42");
298
+ assert(JS_IsUndefined(ret));
299
+ JS_FreeValue(ctx, ret);
300
+ }
301
+ {
302
+ JSValue ret = eval(ctx, "function f() {}");
303
+ assert(JS_IsUndefined(ret));
304
+ JS_FreeValue(ctx, ret);
305
+ }
306
+ JS_FreeContext(ctx);
307
+ JS_FreeRuntime(rt);
308
+ }
309
+
310
+ static void is_array(void)
311
+ {
312
+ JSRuntime *rt = new_runtime();
313
+ JSContext *ctx = JS_NewContext(rt);
314
+ {
315
+ JSValue ret = eval(ctx, "[]");
316
+ assert(!JS_IsException(ret));
317
+ assert(JS_IsArray(ret));
318
+ JS_FreeValue(ctx, ret);
319
+ }
320
+ {
321
+ JSValue ret = eval(ctx, "new Proxy([], {})");
322
+ assert(!JS_IsException(ret));
323
+ assert(!JS_IsArray(ret));
324
+ assert(JS_IsProxy(ret));
325
+ JSValue handler = JS_GetProxyHandler(ctx, ret);
326
+ JSValue target = JS_GetProxyTarget(ctx, ret);
327
+ assert(!JS_IsException(handler));
328
+ assert(!JS_IsException(target));
329
+ assert(!JS_IsProxy(handler));
330
+ assert(!JS_IsProxy(target));
331
+ assert(JS_IsObject(handler));
332
+ assert(JS_IsArray(target));
333
+ JS_FreeValue(ctx, handler);
334
+ JS_FreeValue(ctx, target);
335
+ JS_FreeValue(ctx, ret);
336
+ }
337
+ JS_FreeContext(ctx);
338
+ JS_FreeRuntime(rt);
339
+ }
340
+
341
+ static int loader_calls;
342
+
343
+ static JSModuleDef *loader(JSContext *ctx, const char *name, void *opaque)
344
+ {
345
+ loader_calls++;
346
+ assert(!strcmp(name, "b"));
347
+ static const char code[] = "export function f(x){}";
348
+ JSValue ret = JS_Eval(ctx, code, strlen(code), "b",
349
+ JS_EVAL_TYPE_MODULE|JS_EVAL_FLAG_COMPILE_ONLY);
350
+ assert(!JS_IsException(ret));
351
+ JSModuleDef *m = JS_VALUE_GET_PTR(ret);
352
+ assert(m);
353
+ JS_FreeValue(ctx, ret);
354
+ return m;
355
+ }
356
+
357
+ static void module_serde(void)
358
+ {
359
+ JSRuntime *rt = new_runtime();
360
+ //JS_SetDumpFlags(rt, JS_DUMP_MODULE_RESOLVE);
361
+ JS_SetModuleLoaderFunc(rt, NULL, loader, NULL);
362
+ JSContext *ctx = JS_NewContext(rt);
363
+ static const char code[] = "import {f} from 'b'; f()";
364
+ assert(loader_calls == 0);
365
+ JSValue mod = JS_Eval(ctx, code, strlen(code), "a",
366
+ JS_EVAL_TYPE_MODULE|JS_EVAL_FLAG_COMPILE_ONLY);
367
+ assert(loader_calls == 1);
368
+ assert(!JS_IsException(mod));
369
+ assert(JS_IsModule(mod));
370
+ size_t len = 0;
371
+ uint8_t *buf = JS_WriteObject(ctx, &len, mod,
372
+ JS_WRITE_OBJ_BYTECODE|JS_WRITE_OBJ_REFERENCE);
373
+ assert(buf);
374
+ assert(len > 0);
375
+ JS_FreeValue(ctx, mod);
376
+ assert(loader_calls == 1);
377
+ mod = JS_ReadObject(ctx, buf, len, JS_READ_OBJ_BYTECODE);
378
+ js_free(ctx, buf);
379
+ assert(loader_calls == 1); // 'b' is returned from cache
380
+ assert(!JS_IsException(mod));
381
+ JSValue ret = JS_EvalFunction(ctx, mod);
382
+ assert(!JS_IsException(ret));
383
+ assert(JS_IsPromise(ret));
384
+ JSValue result = JS_PromiseResult(ctx, ret);
385
+ assert(!JS_IsException(result));
386
+ assert(JS_IsUndefined(result));
387
+ JS_FreeValue(ctx, result);
388
+ JS_FreeValue(ctx, ret);
389
+ JS_FreeValue(ctx, mod);
390
+ JS_FreeContext(ctx);
391
+ JS_FreeRuntime(rt);
392
+ }
393
+
394
+ static void runtime_cstring_free(void)
395
+ {
396
+ JSRuntime *rt = new_runtime();
397
+ JSContext *ctx = JS_NewContext(rt);
398
+ // string -> cstring + JS_FreeCStringRT
399
+ {
400
+ JSValue ret = eval(ctx, "\"testStringPleaseIgnore\"");
401
+ assert(JS_IsString(ret));
402
+ const char *s = JS_ToCString(ctx, ret);
403
+ assert(s);
404
+ assert(strcmp(s, "testStringPleaseIgnore") == 0);
405
+ JS_FreeCStringRT(rt, s);
406
+ JS_FreeValue(ctx, ret);
407
+ }
408
+ // string -> cstring + JS_FreeCStringRT, destroying the source value first
409
+ {
410
+ JSValue ret = eval(ctx, "\"testStringPleaseIgnore\"");
411
+ assert(JS_IsString(ret));
412
+ const char *s = JS_ToCString(ctx, ret);
413
+ assert(s);
414
+ JS_FreeValue(ctx, ret);
415
+ assert(strcmp(s, "testStringPleaseIgnore") == 0);
416
+ JS_FreeCStringRT(rt, s);
417
+ }
418
+ // number -> cstring + JS_FreeCStringRT
419
+ {
420
+ JSValue ret = eval(ctx, "123987");
421
+ assert(JS_IsNumber(ret));
422
+ const char *s = JS_ToCString(ctx, ret);
423
+ assert(s);
424
+ assert(strcmp(s, "123987") == 0);
425
+ JS_FreeCStringRT(rt, s);
426
+ JS_FreeValue(ctx, ret);
427
+ }
428
+ JS_FreeContext(ctx);
429
+ JS_FreeRuntime(rt);
430
+ }
431
+
432
+ static void utf16_string(void)
433
+ {
434
+ JSRuntime *rt = new_runtime();
435
+ JSContext *ctx = JS_NewContext(rt);
436
+ {
437
+ JSValue v = JS_NewStringUTF16(ctx, NULL, 0);
438
+ assert(!JS_IsException(v));
439
+ const char *s = JS_ToCString(ctx, v);
440
+ assert(s);
441
+ assert(!strcmp(s, ""));
442
+ JS_FreeCString(ctx, s);
443
+ JS_FreeValue(ctx, v);
444
+ }
445
+ {
446
+ JSValue v = JS_NewStringUTF16(ctx, (uint16_t[]){'o','k'}, 2);
447
+ assert(!JS_IsException(v));
448
+ const char *s = JS_ToCString(ctx, v);
449
+ assert(s);
450
+ assert(!strcmp(s, "ok"));
451
+ JS_FreeCString(ctx, s);
452
+ size_t n;
453
+ const uint16_t *u = JS_ToCStringLenUTF16(ctx, &n, v);
454
+ assert(u);
455
+ assert(n == 2);
456
+ assert(u[0] == 'o');
457
+ assert(u[1] == 'k');
458
+ JS_FreeCStringUTF16(ctx, u);
459
+ JS_FreeValue(ctx, v);
460
+ }
461
+ {
462
+ JSValue v = JS_NewStringUTF16(ctx, (uint16_t[]){0xD800}, 1);
463
+ assert(!JS_IsException(v));
464
+ const char *s = JS_ToCString(ctx, v);
465
+ assert(s);
466
+ // questionable but surrogates don't map to UTF-8 without WTF-8
467
+ assert(!strcmp(s, "\xED\xA0\x80"));
468
+ JS_FreeCString(ctx, s);
469
+ size_t n;
470
+ const uint16_t *u = JS_ToCStringLenUTF16(ctx, &n, v);
471
+ assert(u);
472
+ assert(n == 1);
473
+ assert(u[0] == 0xD800);
474
+ JS_FreeCStringUTF16(ctx, u);
475
+ JS_FreeValue(ctx, v);
476
+ }
477
+ {
478
+ JSValue v = JS_NewStringLen(ctx, "ok", 2); // ascii -> ucs
479
+ assert(!JS_IsException(v));
480
+ size_t n;
481
+ const uint16_t *u = JS_ToCStringLenUTF16(ctx, &n, v);
482
+ assert(u);
483
+ assert(n == 2);
484
+ assert(u[0] == 'o');
485
+ assert(u[1] == 'k');
486
+ JS_FreeCStringUTF16(ctx, u);
487
+ JS_FreeValue(ctx, v);
488
+ }
489
+ {
490
+ JSValue v = JS_NewStringUTF16(ctx, NULL, (size_t)INT_MAX + 1);
491
+ assert(JS_IsException(v));
492
+ JSValue e = JS_GetException(ctx);
493
+ assert(JS_IsError(e));
494
+ const char *s = JS_ToCString(ctx, e);
495
+ assert(s);
496
+ assert(strstr(s, "invalid string length") != NULL);
497
+ JS_FreeCString(ctx, s);
498
+ JS_FreeValue(ctx, e);
499
+ }
500
+ JS_FreeContext(ctx);
501
+ JS_FreeRuntime(rt);
502
+ }
503
+
504
+ static void weak_map_gc_check(void)
505
+ {
506
+ static const char init_code[] =
507
+ "const map = new WeakMap(); \
508
+ function addItem() { \
509
+ const k = { \
510
+ text: 'a', \
511
+ }; \
512
+ map.set(k, {k}); \
513
+ }";
514
+ static const char test_code[] = "addItem()";
515
+
516
+ JSRuntime *rt = new_runtime();
517
+ JSContext *ctx = JS_NewContext(rt);
518
+
519
+ JSValue ret = eval(ctx, init_code);
520
+ assert(!JS_IsException(ret));
521
+
522
+ JSValue ret_test = eval(ctx, test_code);
523
+ assert(!JS_IsException(ret_test));
524
+ JS_RunGC(rt);
525
+ JSMemoryUsage memory_usage;
526
+ JS_ComputeMemoryUsage(rt, &memory_usage);
527
+
528
+ for (int i = 0; i < 3; i++) {
529
+ JSValue ret_test2 = eval(ctx, test_code);
530
+ assert(!JS_IsException(ret_test2));
531
+ JS_RunGC(rt);
532
+ JSMemoryUsage memory_usage2;
533
+ JS_ComputeMemoryUsage(rt, &memory_usage2);
534
+
535
+ assert(memory_usage.memory_used_count == memory_usage2.memory_used_count);
536
+ assert(memory_usage.memory_used_size == memory_usage2.memory_used_size);
537
+ JS_FreeValue(ctx, ret_test2);
538
+ }
539
+
540
+ JS_FreeValue(ctx, ret);
541
+ JS_FreeValue(ctx, ret_test);
542
+ JS_FreeContext(ctx);
543
+ JS_FreeRuntime(rt);
544
+ }
545
+
546
+ struct {
547
+ int hook_type_call_count[4];
548
+ } promise_hook_state;
549
+
550
+ static void promise_hook_cb(JSContext *ctx, JSPromiseHookType type,
551
+ JSValueConst promise, JSValueConst parent_promise,
552
+ void *opaque)
553
+ {
554
+ assert(type == JS_PROMISE_HOOK_INIT ||
555
+ type == JS_PROMISE_HOOK_BEFORE ||
556
+ type == JS_PROMISE_HOOK_AFTER ||
557
+ type == JS_PROMISE_HOOK_RESOLVE);
558
+ promise_hook_state.hook_type_call_count[type]++;
559
+ assert(opaque == (void *)&promise_hook_state);
560
+ if (!JS_IsUndefined(parent_promise)) {
561
+ JSValue global_object = JS_GetGlobalObject(ctx);
562
+ JS_SetPropertyStr(ctx, global_object, "actual",
563
+ JS_DupValue(ctx, parent_promise));
564
+ JS_FreeValue(ctx, global_object);
565
+ }
566
+ }
567
+
568
+ static void promise_hook(void)
569
+ {
570
+ int *cc = promise_hook_state.hook_type_call_count;
571
+ JSContext *unused;
572
+ JSRuntime *rt = new_runtime();
573
+ //JS_SetDumpFlags(rt, JS_DUMP_PROMISE);
574
+ JS_SetPromiseHook(rt, promise_hook_cb, &promise_hook_state);
575
+ JSContext *ctx = JS_NewContext(rt);
576
+ JSValue global_object = JS_GetGlobalObject(ctx);
577
+ {
578
+ // empty module; creates an outer and inner module promise;
579
+ // JS_Eval returns the outer promise
580
+ JSValue ret = JS_Eval(ctx, "", 0, "<input>", JS_EVAL_TYPE_MODULE);
581
+ assert(!JS_IsException(ret));
582
+ assert(JS_IsPromise(ret));
583
+ assert(JS_PROMISE_FULFILLED == JS_PromiseState(ctx, ret));
584
+ JS_FreeValue(ctx, ret);
585
+ assert(2 == cc[JS_PROMISE_HOOK_INIT]);
586
+ assert(0 == cc[JS_PROMISE_HOOK_BEFORE]);
587
+ assert(0 == cc[JS_PROMISE_HOOK_AFTER]);
588
+ assert(2 == cc[JS_PROMISE_HOOK_RESOLVE]);
589
+ assert(!JS_IsJobPending(rt));
590
+ }
591
+ memset(&promise_hook_state, 0, sizeof(promise_hook_state));
592
+ {
593
+ // module with unresolved promise; the outer and inner module promises
594
+ // are resolved but not the user's promise
595
+ static const char code[] = "new Promise(() => {})";
596
+ JSValue ret = JS_Eval(ctx, code, strlen(code), "<input>", JS_EVAL_TYPE_MODULE);
597
+ assert(!JS_IsException(ret));
598
+ assert(JS_IsPromise(ret));
599
+ assert(JS_PROMISE_FULFILLED == JS_PromiseState(ctx, ret)); // outer module promise
600
+ JS_FreeValue(ctx, ret);
601
+ assert(3 == cc[JS_PROMISE_HOOK_INIT]);
602
+ assert(0 == cc[JS_PROMISE_HOOK_BEFORE]);
603
+ assert(0 == cc[JS_PROMISE_HOOK_AFTER]);
604
+ assert(2 == cc[JS_PROMISE_HOOK_RESOLVE]); // outer and inner module promise
605
+ assert(!JS_IsJobPending(rt));
606
+ }
607
+ memset(&promise_hook_state, 0, sizeof(promise_hook_state));
608
+ {
609
+ // module with resolved promise
610
+ static const char code[] = "new Promise((resolve,reject) => resolve())";
611
+ JSValue ret = JS_Eval(ctx, code, strlen(code), "<input>", JS_EVAL_TYPE_MODULE);
612
+ assert(!JS_IsException(ret));
613
+ assert(JS_IsPromise(ret));
614
+ assert(JS_PROMISE_FULFILLED == JS_PromiseState(ctx, ret)); // outer module promise
615
+ JS_FreeValue(ctx, ret);
616
+ assert(3 == cc[JS_PROMISE_HOOK_INIT]);
617
+ assert(0 == cc[JS_PROMISE_HOOK_BEFORE]);
618
+ assert(0 == cc[JS_PROMISE_HOOK_AFTER]);
619
+ assert(3 == cc[JS_PROMISE_HOOK_RESOLVE]);
620
+ assert(!JS_IsJobPending(rt));
621
+ }
622
+ memset(&promise_hook_state, 0, sizeof(promise_hook_state));
623
+ {
624
+ // module with rejected promise
625
+ static const char code[] = "new Promise((resolve,reject) => reject())";
626
+ JSValue ret = JS_Eval(ctx, code, strlen(code), "<input>", JS_EVAL_TYPE_MODULE);
627
+ assert(!JS_IsException(ret));
628
+ assert(JS_IsPromise(ret));
629
+ assert(JS_PROMISE_FULFILLED == JS_PromiseState(ctx, ret)); // outer module promise
630
+ JS_FreeValue(ctx, ret);
631
+ assert(3 == cc[JS_PROMISE_HOOK_INIT]);
632
+ assert(0 == cc[JS_PROMISE_HOOK_BEFORE]);
633
+ assert(0 == cc[JS_PROMISE_HOOK_AFTER]);
634
+ assert(2 == cc[JS_PROMISE_HOOK_RESOLVE]);
635
+ assert(!JS_IsJobPending(rt));
636
+ }
637
+ memset(&promise_hook_state, 0, sizeof(promise_hook_state));
638
+ {
639
+ // module with promise chain
640
+ static const char code[] =
641
+ "globalThis.count = 0;"
642
+ "globalThis.actual = undefined;" // set by promise_hook_cb
643
+ "globalThis.expected = new Promise(resolve => resolve());"
644
+ "expected.then(_ => count++)";
645
+ JSValue ret = JS_Eval(ctx, code, strlen(code), "<input>", JS_EVAL_TYPE_MODULE);
646
+ assert(!JS_IsException(ret));
647
+ assert(JS_IsPromise(ret));
648
+ assert(JS_PROMISE_FULFILLED == JS_PromiseState(ctx, ret)); // outer module promise
649
+ JS_FreeValue(ctx, ret);
650
+ assert(4 == cc[JS_PROMISE_HOOK_INIT]);
651
+ assert(0 == cc[JS_PROMISE_HOOK_BEFORE]);
652
+ assert(0 == cc[JS_PROMISE_HOOK_AFTER]);
653
+ assert(3 == cc[JS_PROMISE_HOOK_RESOLVE]);
654
+ JSValue v = JS_GetPropertyStr(ctx, global_object, "count");
655
+ assert(!JS_IsException(v));
656
+ int32_t count;
657
+ assert(0 == JS_ToInt32(ctx, &count, v));
658
+ assert(0 == count);
659
+ JS_FreeValue(ctx, v);
660
+ assert(JS_IsJobPending(rt));
661
+ assert(1 == JS_ExecutePendingJob(rt, &unused));
662
+ assert(!JS_HasException(ctx));
663
+ assert(4 == cc[JS_PROMISE_HOOK_INIT]);
664
+ assert(0 == cc[JS_PROMISE_HOOK_BEFORE]);
665
+ assert(0 == cc[JS_PROMISE_HOOK_AFTER]);
666
+ assert(4 == cc[JS_PROMISE_HOOK_RESOLVE]);
667
+ assert(!JS_IsJobPending(rt));
668
+ v = JS_GetPropertyStr(ctx, global_object, "count");
669
+ assert(!JS_IsException(v));
670
+ assert(0 == JS_ToInt32(ctx, &count, v));
671
+ assert(1 == count);
672
+ JS_FreeValue(ctx, v);
673
+ JSValue actual = JS_GetPropertyStr(ctx, global_object, "actual");
674
+ JSValue expected = JS_GetPropertyStr(ctx, global_object, "expected");
675
+ assert(!JS_IsException(actual));
676
+ assert(!JS_IsException(expected));
677
+ assert(JS_IsSameValue(ctx, actual, expected));
678
+ JS_FreeValue(ctx, actual);
679
+ JS_FreeValue(ctx, expected);
680
+ }
681
+ memset(&promise_hook_state, 0, sizeof(promise_hook_state));
682
+ {
683
+ // module with thenable; fires before and after hooks
684
+ static const char code[] =
685
+ "new Promise(resolve => resolve({then(resolve){ resolve() }}))";
686
+ JSValue ret = JS_Eval(ctx, code, strlen(code), "<input>", JS_EVAL_TYPE_MODULE);
687
+ assert(!JS_IsException(ret));
688
+ assert(JS_IsPromise(ret));
689
+ assert(JS_PROMISE_FULFILLED == JS_PromiseState(ctx, ret)); // outer module promise
690
+ JS_FreeValue(ctx, ret);
691
+ assert(3 == cc[JS_PROMISE_HOOK_INIT]);
692
+ assert(0 == cc[JS_PROMISE_HOOK_BEFORE]);
693
+ assert(0 == cc[JS_PROMISE_HOOK_AFTER]);
694
+ assert(2 == cc[JS_PROMISE_HOOK_RESOLVE]);
695
+ assert(JS_IsJobPending(rt));
696
+ assert(1 == JS_ExecutePendingJob(rt, &unused));
697
+ assert(!JS_HasException(ctx));
698
+ assert(3 == cc[JS_PROMISE_HOOK_INIT]);
699
+ assert(1 == cc[JS_PROMISE_HOOK_BEFORE]);
700
+ assert(1 == cc[JS_PROMISE_HOOK_AFTER]);
701
+ assert(3 == cc[JS_PROMISE_HOOK_RESOLVE]);
702
+ assert(!JS_IsJobPending(rt));
703
+ }
704
+ JS_FreeValue(ctx, global_object);
705
+ JS_FreeContext(ctx);
706
+ JS_FreeRuntime(rt);
707
+ }
708
+
709
+ static void dump_memory_usage(void)
710
+ {
711
+ JSMemoryUsage stats;
712
+
713
+ JSRuntime *rt = NULL;
714
+ JSContext *ctx = NULL;
715
+
716
+ rt = new_runtime();
717
+ ctx = JS_NewContext(rt);
718
+
719
+ //JS_SetDumpFlags(rt, JS_DUMP_PROMISE);
720
+
721
+ static const char code[] =
722
+ "globalThis.count = 0;"
723
+ "globalThis.actual = undefined;" // set by promise_hook_cb
724
+ "globalThis.expected = new Promise(resolve => resolve());"
725
+ "expected.then(_ => count++)";
726
+
727
+ JSValue evalVal = JS_Eval(ctx, code, strlen(code), "<input>", 0);
728
+ JS_FreeValue(ctx, evalVal);
729
+
730
+ FILE *temp = tmpfile();
731
+ assert(temp != NULL);
732
+ JS_ComputeMemoryUsage(rt, &stats);
733
+ JS_DumpMemoryUsage(temp, &stats, rt);
734
+ // JS_DumpMemoryUsage(stdout, &stats, rt);
735
+ fclose(temp);
736
+
737
+ JS_FreeContext(ctx);
738
+ JS_FreeRuntime(rt);
739
+ }
740
+
741
+ static void new_errors(void)
742
+ {
743
+ typedef struct {
744
+ const char name[16];
745
+ JSValue (*func)(JSContext *, const char *, ...);
746
+ } Entry;
747
+ static const Entry entries[] = {
748
+ {"Error", JS_NewPlainError},
749
+ {"InternalError", JS_NewInternalError},
750
+ {"RangeError", JS_NewRangeError},
751
+ {"ReferenceError", JS_NewReferenceError},
752
+ {"SyntaxError", JS_NewSyntaxError},
753
+ {"TypeError", JS_NewTypeError},
754
+ };
755
+ const Entry *e;
756
+
757
+ JSRuntime *rt = new_runtime();
758
+ JSContext *ctx = JS_NewContext(rt);
759
+ for (e = entries; e < endof(entries); e++) {
760
+ JSValue obj = (*e->func)(ctx, "the %s", "needle");
761
+ assert(!JS_IsException(obj));
762
+ assert(JS_IsObject(obj));
763
+ assert(JS_IsError(obj));
764
+ const char *haystack = JS_ToCString(ctx, obj);
765
+ char needle[256];
766
+ snprintf(needle, sizeof(needle), "%s: the needle", e->name);
767
+ assert(strstr(haystack, needle));
768
+ JS_FreeCString(ctx, haystack);
769
+ JSValue stack = JS_GetPropertyStr(ctx, obj, "stack");
770
+ assert(!JS_IsException(stack));
771
+ assert(JS_IsString(stack));
772
+ JS_FreeValue(ctx, stack);
773
+ JS_FreeValue(ctx, obj);
774
+ }
775
+ JS_FreeContext(ctx);
776
+ JS_FreeRuntime(rt);
777
+ }
778
+
779
+ static void backtrace_oom_current_exception(void)
780
+ {
781
+ static const char setup_code[] =
782
+ "globalThis.f = function() { missing; };\n"
783
+ "Object.defineProperty(f, 'name', { value: 'x'.repeat(2 * 1024 * 1024) });";
784
+ JSMemoryUsage stats;
785
+ JSValue ret, exception;
786
+ JSRuntime *rt;
787
+ JSContext *ctx;
788
+
789
+ rt = new_runtime();
790
+ ctx = JS_NewContext(rt);
791
+
792
+ ret = eval(ctx, setup_code);
793
+ assert(!JS_IsException(ret));
794
+ JS_FreeValue(ctx, ret);
795
+
796
+ JS_ComputeMemoryUsage(rt, &stats);
797
+ JS_SetMemoryLimit(rt, (size_t)stats.malloc_size + 128 * 1024);
798
+
799
+ ret = eval(ctx, "f()");
800
+ assert(JS_IsException(ret));
801
+ assert(JS_HasException(ctx));
802
+ exception = JS_GetException(ctx);
803
+ JS_FreeValue(ctx, exception);
804
+ JS_SetMemoryLimit(rt, 0);
805
+
806
+ JS_FreeContext(ctx);
807
+ JS_FreeRuntime(rt);
808
+ }
809
+
810
+ static int gop_get_own_property(JSContext *ctx, JSPropertyDescriptor *desc,
811
+ JSValueConst obj, JSAtom prop)
812
+ {
813
+ const char *name;
814
+ int found;
815
+
816
+ found = 0;
817
+ name = JS_AtomToCString(ctx, prop);
818
+ if (!name)
819
+ return -1;
820
+ if (!strcmp(name, "answer")) {
821
+ found = 1;
822
+ *desc = (JSPropertyDescriptor){
823
+ .value = JS_NewInt32(ctx, 42),
824
+ .flags = JS_PROP_C_W_E | JS_PROP_HAS_VALUE,
825
+ };
826
+ }
827
+ JS_FreeCString(ctx, name);
828
+ return found;
829
+ }
830
+
831
+ static void global_object_prototype(void)
832
+ {
833
+ static const char code[] = "answer";
834
+ JSValue global_object, proto, ret;
835
+ JSClassID class_id;
836
+ JSRuntime *rt;
837
+ JSContext *ctx;
838
+ int32_t answer;
839
+ int res;
840
+
841
+ {
842
+ rt = new_runtime();
843
+ ctx = JS_NewContext(rt);
844
+ proto = JS_NewObject(ctx);
845
+ assert(JS_IsObject(proto));
846
+ JSCFunctionListEntry prop = JS_PROP_INT32_DEF("answer", 42, JS_PROP_C_W_E);
847
+ JS_SetPropertyFunctionList(ctx, proto, &prop, 1);
848
+ global_object = JS_GetGlobalObject(ctx);
849
+ res = JS_SetPrototype(ctx, global_object, proto);
850
+ assert(res == true);
851
+ JS_FreeValue(ctx, global_object);
852
+ JS_FreeValue(ctx, proto);
853
+ ret = eval(ctx, code);
854
+ assert(!JS_IsException(ret));
855
+ assert(JS_IsNumber(ret));
856
+ res = JS_ToInt32(ctx, &answer, ret);
857
+ assert(res == 0);
858
+ assert(answer == 42);
859
+ JS_FreeValue(ctx, ret);
860
+ JS_FreeContext(ctx);
861
+ JS_FreeRuntime(rt);
862
+ }
863
+ {
864
+ JSClassExoticMethods exotic = (JSClassExoticMethods){
865
+ .get_own_property = gop_get_own_property,
866
+ };
867
+ JSClassDef def = (JSClassDef){
868
+ .class_name = "Global Object",
869
+ .exotic = &exotic,
870
+ };
871
+ rt = new_runtime();
872
+ class_id = 0;
873
+ JS_NewClassID(rt, &class_id);
874
+ res = JS_NewClass(rt, class_id, &def);
875
+ assert(res == 0);
876
+ ctx = JS_NewContext(rt);
877
+ proto = JS_NewObjectClass(ctx, class_id);
878
+ assert(JS_IsObject(proto));
879
+ global_object = JS_GetGlobalObject(ctx);
880
+ res = JS_SetPrototype(ctx, global_object, proto);
881
+ assert(res == true);
882
+ JS_FreeValue(ctx, global_object);
883
+ JS_FreeValue(ctx, proto);
884
+ ret = eval(ctx, code);
885
+ assert(!JS_IsException(ret));
886
+ assert(JS_IsNumber(ret));
887
+ res = JS_ToInt32(ctx, &answer, ret);
888
+ assert(res == 0);
889
+ assert(answer == 42);
890
+ JS_FreeValue(ctx, ret);
891
+ JS_FreeContext(ctx);
892
+ JS_FreeRuntime(rt);
893
+ }
894
+ }
895
+
896
+ // https://github.com/quickjs-ng/quickjs/issues/1178
897
+ static void slice_string_tocstring(void)
898
+ {
899
+ JSRuntime *rt = new_runtime();
900
+ JSContext *ctx = JS_NewContext(rt);
901
+ JSValue ret = eval(ctx, "'.'.repeat(16384).slice(1, -1)");
902
+ assert(!JS_IsException(ret));
903
+ assert(JS_IsString(ret));
904
+ const char *str = JS_ToCString(ctx, ret);
905
+ assert(strlen(str) == 16382);
906
+ JS_FreeCString(ctx, str);
907
+ JS_FreeValue(ctx, ret);
908
+ JS_FreeContext(ctx);
909
+ JS_FreeRuntime(rt);
910
+ }
911
+
912
+ static void immutable_array_buffer(void)
913
+ {
914
+ JSValue obj, ret;
915
+ bool immutable;
916
+ char buf[96];
917
+ int i, v;
918
+
919
+ JSRuntime *rt = new_runtime();
920
+ JSContext *ctx = JS_NewContext(rt);
921
+ for (i = 0; i < 2; i++) {
922
+ obj = JS_NewObject(ctx);
923
+ immutable = (i == 0);
924
+ assert(-1 == JS_IsImmutableArrayBuffer(JS_NULL));
925
+ assert(-1 == JS_IsImmutableArrayBuffer(JS_UNDEFINED));
926
+ assert(-1 == JS_IsImmutableArrayBuffer(obj));
927
+ assert(-1 == JS_SetImmutableArrayBuffer(JS_NULL, immutable));
928
+ assert(-1 == JS_SetImmutableArrayBuffer(JS_UNDEFINED, immutable));
929
+ assert(-1 == JS_SetImmutableArrayBuffer(obj, immutable));
930
+ JS_FreeValue(ctx, obj);
931
+ }
932
+ obj = eval(ctx, "globalThis.ab = new ArrayBuffer(1)");
933
+ assert(!JS_IsException(obj));
934
+ assert(JS_IsArrayBuffer(obj));
935
+ assert(!JS_IsImmutableArrayBuffer(obj));
936
+ for (i = 1; i <= 3; i++) {
937
+ immutable = (i == 2);
938
+ if (i > 1)
939
+ JS_SetImmutableArrayBuffer(obj, immutable);
940
+ assert(immutable == JS_IsImmutableArrayBuffer(obj));
941
+ snprintf(buf, sizeof(buf),
942
+ "var ta = new Uint8Array(ab); ta[0] = %d; ta[0]", i);
943
+ ret = eval(ctx, buf);
944
+ assert(!JS_IsException(ret));
945
+ assert(JS_IsNumber(ret));
946
+ assert(0 == JS_ToInt32(ctx, &v, ret));
947
+ JS_FreeValue(ctx, ret);
948
+ if (immutable) {
949
+ assert(v != i);
950
+ } else {
951
+ assert(v == i);
952
+ }
953
+ }
954
+ JS_FreeValue(ctx, obj);
955
+ JS_FreeContext(ctx);
956
+ JS_FreeRuntime(rt);
957
+ }
958
+
959
+ static void *sab_test_alloc(void *opaque, size_t size)
960
+ {
961
+ return malloc(size);
962
+ }
963
+
964
+ static void sab_test_free(void *opaque, void *ptr)
965
+ {
966
+ free(ptr);
967
+ }
968
+
969
+ static void shared_array_buffer_growth(void)
970
+ {
971
+ JSRuntime *rt = new_runtime();
972
+ JSContext *ctx = JS_NewContext(rt);
973
+ JSValue ret, exception;
974
+
975
+ ret = eval(ctx, "new SharedArrayBuffer(16)");
976
+ assert(!JS_IsException(ret));
977
+ JS_FreeValue(ctx, ret);
978
+
979
+ ret = eval(ctx,
980
+ "const sab = new SharedArrayBuffer(16, { maxByteLength: 16 });"
981
+ "sab.grow(16);"
982
+ "sab.byteLength === 16 && sab.maxByteLength === 16");
983
+ assert(!JS_IsException(ret));
984
+ assert(JS_IsBool(ret));
985
+ assert(JS_VALUE_GET_BOOL(ret));
986
+ JS_FreeValue(ctx, ret);
987
+
988
+ ret = eval(ctx, "new SharedArrayBuffer(16, { maxByteLength: 16384 })");
989
+ assert(JS_IsException(ret));
990
+ assert(JS_HasException(ctx));
991
+ exception = JS_GetException(ctx);
992
+ assert(JS_IsError(exception));
993
+ JS_FreeValue(ctx, exception);
994
+
995
+ JS_FreeContext(ctx);
996
+ JS_FreeRuntime(rt);
997
+
998
+ JSSharedArrayBufferFunctions funcs = {
999
+ .sab_alloc = sab_test_alloc,
1000
+ .sab_free = sab_test_free,
1001
+ .sab_dup = NULL,
1002
+ .sab_opaque = NULL,
1003
+ };
1004
+
1005
+ rt = new_runtime();
1006
+ JS_SetSharedArrayBufferFunctions(rt, &funcs);
1007
+ ctx = JS_NewContext(rt);
1008
+ ret = eval(ctx,
1009
+ "const sab = new SharedArrayBuffer(16, { maxByteLength: 16384 });"
1010
+ "const u8 = new Uint8Array(sab);"
1011
+ "sab.grow(16384);"
1012
+ "u8[1024] === 0 && u8.byteLength === 16384");
1013
+ assert(!JS_IsException(ret));
1014
+ assert(JS_IsBool(ret));
1015
+ assert(JS_VALUE_GET_BOOL(ret));
1016
+ JS_FreeValue(ctx, ret);
1017
+ JS_FreeContext(ctx);
1018
+ JS_FreeRuntime(rt);
1019
+ }
1020
+
1021
+ static void get_uint8array(void)
1022
+ {
1023
+ JSRuntime *rt = new_runtime();
1024
+ JSContext *ctx = JS_NewContext(rt);
1025
+ JSValue val;
1026
+ uint8_t *p;
1027
+ size_t size;
1028
+ uint8_t buf[3] = { 1, 2, 3 };
1029
+
1030
+ val = eval(ctx, "new Uint8Array(0)");
1031
+ assert(!JS_IsException(val));
1032
+ p = JS_GetUint8Array(ctx, &size, val);
1033
+ assert(p != NULL);
1034
+ assert(size == 0);
1035
+ JS_FreeValue(ctx, val);
1036
+
1037
+ val = JS_NewUint8Array(ctx, NULL, 0, NULL, NULL, false);
1038
+ assert(!JS_IsException(val));
1039
+ p = JS_GetUint8Array(ctx, &size, val);
1040
+ assert(p != NULL);
1041
+ assert(size == 0);
1042
+ JS_FreeValue(ctx, val);
1043
+
1044
+ val = JS_NewUint8ArrayCopy(ctx, NULL, 0);
1045
+ assert(!JS_IsException(val));
1046
+ p = JS_GetUint8Array(ctx, &size, val);
1047
+ assert(p != NULL);
1048
+ assert(size == 0);
1049
+ JS_FreeValue(ctx, val);
1050
+
1051
+ val = JS_NewUint8ArrayCopy(ctx, buf, sizeof(buf));
1052
+ assert(!JS_IsException(val));
1053
+ p = JS_GetUint8Array(ctx, &size, val);
1054
+ assert(p != NULL);
1055
+ assert(size == 3);
1056
+ assert(p[0] == 1 && p[1] == 2 && p[2] == 3);
1057
+ JS_FreeValue(ctx, val);
1058
+
1059
+ val = eval(ctx, "new Uint8Array([4, 5, 6])");
1060
+ assert(!JS_IsException(val));
1061
+ p = JS_GetUint8Array(ctx, &size, val);
1062
+ assert(p != NULL);
1063
+ assert(size == 3);
1064
+ assert(p[0] == 4 && p[1] == 5 && p[2] == 6);
1065
+ JS_FreeValue(ctx, val);
1066
+
1067
+ val = eval(ctx, "new Int32Array(4)");
1068
+ assert(!JS_IsException(val));
1069
+ p = JS_GetUint8Array(ctx, &size, val);
1070
+ assert(p == NULL);
1071
+ assert(size == 0);
1072
+ JS_FreeValue(ctx, val);
1073
+
1074
+ JS_FreeContext(ctx);
1075
+ JS_FreeRuntime(rt);
1076
+ }
1077
+
1078
+ static void new_symbol(void)
1079
+ {
1080
+ JSRuntime *rt = new_runtime();
1081
+ JSContext *ctx = JS_NewContext(rt);
1082
+ JSValue global = JS_GetGlobalObject(ctx);
1083
+ JSValue sym, ret;
1084
+
1085
+ /* Local symbol with NULL description -> Symbol() */
1086
+ sym = JS_NewSymbol(ctx, NULL, false);
1087
+ assert(!JS_IsException(sym));
1088
+ assert(JS_IsSymbol(sym));
1089
+ JS_SetPropertyStr(ctx, global, "sym_local_null", sym);
1090
+
1091
+ ret = eval(ctx, "typeof sym_local_null === 'symbol' && sym_local_null.description === undefined && Symbol.keyFor(sym_local_null) === undefined");
1092
+ assert(JS_IsBool(ret));
1093
+ assert(JS_VALUE_GET_BOOL(ret));
1094
+ JS_FreeValue(ctx, ret);
1095
+
1096
+ /* Global symbol with NULL description -> Symbol.for() -> Symbol.for('undefined') */
1097
+ sym = JS_NewSymbol(ctx, NULL, true);
1098
+ assert(!JS_IsException(sym));
1099
+ assert(JS_IsSymbol(sym));
1100
+ JS_SetPropertyStr(ctx, global, "sym_global_null", sym);
1101
+
1102
+ ret = eval(ctx, "typeof sym_global_null === 'symbol' && sym_global_null.description === 'undefined' && Symbol.keyFor(sym_global_null) === 'undefined'");
1103
+ assert(JS_IsBool(ret));
1104
+ assert(JS_VALUE_GET_BOOL(ret));
1105
+ JS_FreeValue(ctx, ret);
1106
+
1107
+ /* Local symbol with description -> Symbol('test_local') */
1108
+ sym = JS_NewSymbol(ctx, "test_local", false);
1109
+ assert(!JS_IsException(sym));
1110
+ assert(JS_IsSymbol(sym));
1111
+ JS_SetPropertyStr(ctx, global, "sym_local_str", sym);
1112
+
1113
+ ret = eval(ctx, "sym_local_str.description === 'test_local' && Symbol.keyFor(sym_local_str) === undefined");
1114
+ assert(JS_IsBool(ret));
1115
+ assert(JS_VALUE_GET_BOOL(ret));
1116
+ JS_FreeValue(ctx, ret);
1117
+
1118
+ /* Global symbol with description -> Symbol.for('test_global') */
1119
+ sym = JS_NewSymbol(ctx, "test_global", true);
1120
+ assert(!JS_IsException(sym));
1121
+ assert(JS_IsSymbol(sym));
1122
+ JS_SetPropertyStr(ctx, global, "sym_global_str", sym);
1123
+
1124
+ ret = eval(ctx, "sym_global_str.description === 'test_global' && Symbol.keyFor(sym_global_str) === 'test_global'");
1125
+ assert(JS_IsBool(ret));
1126
+ assert(JS_VALUE_GET_BOOL(ret));
1127
+ JS_FreeValue(ctx, ret);
1128
+
1129
+ JS_FreeValue(ctx, global);
1130
+ JS_FreeContext(ctx);
1131
+ JS_FreeRuntime(rt);
1132
+ }
1133
+
1134
+ static void bulk_free_macros(void) {
1135
+ JSRuntime *rt = new_runtime();
1136
+ JSContext *ctx = JS_NewContext(rt);
1137
+
1138
+ JSValue val0 = JS_NewObject(ctx);
1139
+ JSValue val1 = JS_NewArray(ctx);
1140
+ JSValue val2 = JS_NewDate(ctx, 0.0);
1141
+
1142
+ JSMemoryUsage mem_usage;
1143
+ JS_ComputeMemoryUsage(rt, &mem_usage);
1144
+ int obj_count = mem_usage.obj_count;
1145
+
1146
+ JS_FreeValues(ctx, val0, val1);
1147
+ JS_FreeValuesRT(rt, val2);
1148
+
1149
+ // silly atoms to ensure qjs doesn't find built-ins that match
1150
+ JSAtom atom0 = JS_NewAtom(ctx, "ALL!!");
1151
+ JSAtom atom1 = JS_NewAtom(ctx, "YOUR!!");
1152
+ JSAtom atom2 = JS_NewAtom(ctx, "ATOMS!!");
1153
+ JSAtom atom3 = JS_NewAtom(ctx, "ARE!!");
1154
+ JSAtom atom4 = JS_NewAtom(ctx, "BELONG!!");
1155
+ JSAtom atom5 = JS_NewAtom(ctx, "TO US!!");
1156
+
1157
+ JS_ComputeMemoryUsage(rt, &mem_usage);
1158
+ assert((obj_count - 3) == mem_usage.obj_count);
1159
+ int atom_count = mem_usage.atom_count;
1160
+
1161
+ JS_FreeAtoms(ctx, atom1, atom3, atom4);
1162
+ JS_FreeAtomsRT(rt, atom0, atom2, atom5);
1163
+
1164
+ JS_ComputeMemoryUsage(rt, &mem_usage);
1165
+ assert((atom_count - 6) == mem_usage.atom_count);
1166
+
1167
+ JS_FreeContext(ctx);
1168
+ JS_FreeRuntime(rt);
1169
+ }
1170
+
1171
+ int main(void)
1172
+ {
1173
+ cfunctions();
1174
+ sync_call();
1175
+ async_call();
1176
+ async_call_stack_overflow();
1177
+ raw_context_global_var();
1178
+ is_array();
1179
+ module_serde();
1180
+ runtime_cstring_free();
1181
+ utf16_string();
1182
+ weak_map_gc_check();
1183
+ promise_hook();
1184
+ dump_memory_usage();
1185
+ new_errors();
1186
+ backtrace_oom_current_exception();
1187
+ global_object_prototype();
1188
+ slice_string_tocstring();
1189
+ immutable_array_buffer();
1190
+ shared_array_buffer_growth();
1191
+ get_uint8array();
1192
+ new_symbol();
1193
+ bulk_free_macros();
1194
+ return 0;
1195
+ }