visaljs 0.0.0-stage → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -2
  3. package/cli.js +8084 -0
  4. package/node/include/js_node.h +46 -0
  5. package/node/prelude/async_hooks.js +88 -0
  6. package/node/prelude/buffer.js +31 -0
  7. package/node/prelude/crypto.js +114 -0
  8. package/node/prelude/events.js +227 -0
  9. package/node/prelude/fs.js +79 -0
  10. package/node/prelude/http.js +536 -0
  11. package/node/prelude/http2.js +30 -0
  12. package/node/prelude/internal/crypto/asym.js +333 -0
  13. package/node/prelude/internal/crypto/cipher.js +205 -0
  14. package/node/prelude/internal/crypto/hash.js +137 -0
  15. package/node/prelude/internal/crypto/kdf.js +182 -0
  16. package/node/prelude/internal/crypto/keys.js +603 -0
  17. package/node/prelude/internal/crypto/random.js +118 -0
  18. package/node/prelude/internal/crypto/util.js +76 -0
  19. package/node/prelude/internal/errors.js +88 -0
  20. package/node/prelude/internal/querystring.js +105 -0
  21. package/node/prelude/module.js +53 -0
  22. package/node/prelude/net.js +51 -0
  23. package/node/prelude/os.js +129 -0
  24. package/node/prelude/path.js +257 -0
  25. package/node/prelude/process.js +21 -0
  26. package/node/prelude/querystring.js +469 -0
  27. package/node/prelude/stream.js +1327 -0
  28. package/node/prelude/stream_promises.js +7 -0
  29. package/node/prelude/stream_web.js +6 -0
  30. package/node/prelude/string_decoder.js +236 -0
  31. package/node/prelude/tty.js +18 -0
  32. package/node/prelude/url.js +1156 -0
  33. package/node/prelude/util.js +64 -0
  34. package/node/prelude/zlib.js +81 -0
  35. package/node/src/host_fs.c +126 -0
  36. package/node/src/host_http.c +486 -0
  37. package/node/src/host_os.c +505 -0
  38. package/node/src/host_sys.c +78 -0
  39. package/node/third_party/libuv/LICENSE +19 -0
  40. package/node/third_party/libuv/include/uv/aix.h +32 -0
  41. package/node/third_party/libuv/include/uv/bsd.h +34 -0
  42. package/node/third_party/libuv/include/uv/darwin.h +61 -0
  43. package/node/third_party/libuv/include/uv/errno.h +483 -0
  44. package/node/third_party/libuv/include/uv/linux.h +34 -0
  45. package/node/third_party/libuv/include/uv/os390.h +33 -0
  46. package/node/third_party/libuv/include/uv/posix.h +31 -0
  47. package/node/third_party/libuv/include/uv/sunos.h +44 -0
  48. package/node/third_party/libuv/include/uv/threadpool.h +37 -0
  49. package/node/third_party/libuv/include/uv/tree.h +521 -0
  50. package/node/third_party/libuv/include/uv/unix.h +512 -0
  51. package/node/third_party/libuv/include/uv/version.h +43 -0
  52. package/node/third_party/libuv/include/uv/win.h +698 -0
  53. package/node/third_party/libuv/include/uv.h +1990 -0
  54. package/node/third_party/libuv/src/fs-poll.c +290 -0
  55. package/node/third_party/libuv/src/heap-inl.h +245 -0
  56. package/node/third_party/libuv/src/idna.c +560 -0
  57. package/node/third_party/libuv/src/idna.h +31 -0
  58. package/node/third_party/libuv/src/inet.c +298 -0
  59. package/node/third_party/libuv/src/queue.h +90 -0
  60. package/node/third_party/libuv/src/random.c +123 -0
  61. package/node/third_party/libuv/src/strscpy.c +38 -0
  62. package/node/third_party/libuv/src/strscpy.h +39 -0
  63. package/node/third_party/libuv/src/strtok.c +52 -0
  64. package/node/third_party/libuv/src/strtok.h +27 -0
  65. package/node/third_party/libuv/src/thread-common.c +175 -0
  66. package/node/third_party/libuv/src/threadpool.c +419 -0
  67. package/node/third_party/libuv/src/timer.c +200 -0
  68. package/node/third_party/libuv/src/unix/async.c +418 -0
  69. package/node/third_party/libuv/src/unix/bsd-ifaddrs.c +164 -0
  70. package/node/third_party/libuv/src/unix/core.c +2104 -0
  71. package/node/third_party/libuv/src/unix/darwin-proctitle.c +176 -0
  72. package/node/third_party/libuv/src/unix/darwin-stub.h +97 -0
  73. package/node/third_party/libuv/src/unix/darwin-syscalls.h +17 -0
  74. package/node/third_party/libuv/src/unix/darwin.c +237 -0
  75. package/node/third_party/libuv/src/unix/dl.c +80 -0
  76. package/node/third_party/libuv/src/unix/fs.c +2303 -0
  77. package/node/third_party/libuv/src/unix/fsevents.c +906 -0
  78. package/node/third_party/libuv/src/unix/getaddrinfo.c +252 -0
  79. package/node/third_party/libuv/src/unix/getnameinfo.c +121 -0
  80. package/node/third_party/libuv/src/unix/internal.h +530 -0
  81. package/node/third_party/libuv/src/unix/kqueue.c +667 -0
  82. package/node/third_party/libuv/src/unix/linux.c +2761 -0
  83. package/node/third_party/libuv/src/unix/loop-watcher.c +68 -0
  84. package/node/third_party/libuv/src/unix/loop.c +240 -0
  85. package/node/third_party/libuv/src/unix/pipe.c +555 -0
  86. package/node/third_party/libuv/src/unix/poll.c +159 -0
  87. package/node/third_party/libuv/src/unix/process.c +1123 -0
  88. package/node/third_party/libuv/src/unix/procfs-exepath.c +45 -0
  89. package/node/third_party/libuv/src/unix/proctitle.c +157 -0
  90. package/node/third_party/libuv/src/unix/random-devurandom.c +93 -0
  91. package/node/third_party/libuv/src/unix/random-getentropy.c +57 -0
  92. package/node/third_party/libuv/src/unix/random-getrandom.c +86 -0
  93. package/node/third_party/libuv/src/unix/random-sysctl-linux.c +99 -0
  94. package/node/third_party/libuv/src/unix/signal.c +581 -0
  95. package/node/third_party/libuv/src/unix/stream.c +1567 -0
  96. package/node/third_party/libuv/src/unix/tcp.c +673 -0
  97. package/node/third_party/libuv/src/unix/thread.c +975 -0
  98. package/node/third_party/libuv/src/unix/tty.c +510 -0
  99. package/node/third_party/libuv/src/unix/udp.c +1434 -0
  100. package/node/third_party/libuv/src/uv-common.c +1051 -0
  101. package/node/third_party/libuv/src/uv-common.h +474 -0
  102. package/node/third_party/libuv/src/uv-data-getter-setters.c +119 -0
  103. package/node/third_party/libuv/src/version.c +45 -0
  104. package/node/third_party/llhttp/LICENSE +22 -0
  105. package/node/third_party/llhttp/api.c +509 -0
  106. package/node/third_party/llhttp/http.c +170 -0
  107. package/node/third_party/llhttp/llhttp.c +10099 -0
  108. package/node/third_party/llhttp/llhttp.h +907 -0
  109. package/package.json +25 -4
  110. package/runtime/include/js_atoms.gen.h +68 -0
  111. package/runtime/include/js_atoms.h +54 -0
  112. package/runtime/include/js_bigint.h +93 -0
  113. package/runtime/include/js_buffer.h +79 -0
  114. package/runtime/include/js_builtins.h +168 -0
  115. package/runtime/include/js_console.h +58 -0
  116. package/runtime/include/js_convert.h +22 -0
  117. package/runtime/include/js_core.def +188 -0
  118. package/runtime/include/js_crypto.h +58 -0
  119. package/runtime/include/js_error.h +37 -0
  120. package/runtime/include/js_exception.h +65 -0
  121. package/runtime/include/js_function.h +167 -0
  122. package/runtime/include/js_gc.h +195 -0
  123. package/runtime/include/js_generator.h +96 -0
  124. package/runtime/include/js_host.h +19 -0
  125. package/runtime/include/js_jobs.h +84 -0
  126. package/runtime/include/js_module.h +16 -0
  127. package/runtime/include/js_object.h +384 -0
  128. package/runtime/include/js_ops.h +111 -0
  129. package/runtime/include/js_promise.h +45 -0
  130. package/runtime/include/js_regexp.h +25 -0
  131. package/runtime/include/js_runtime.h +30 -0
  132. package/runtime/include/js_symbol.h +62 -0
  133. package/runtime/include/js_web.h +110 -0
  134. package/runtime/include/jscell.h +48 -0
  135. package/runtime/include/jscontext.h +240 -0
  136. package/runtime/include/jsnum.h +42 -0
  137. package/runtime/include/jsstring.h +161 -0
  138. package/runtime/include/jsvalue.h +142 -0
  139. package/runtime/src/arguments.c +115 -0
  140. package/runtime/src/array.c +1145 -0
  141. package/runtime/src/arraybuffer.c +608 -0
  142. package/runtime/src/async_iter.c +479 -0
  143. package/runtime/src/atoms.c +157 -0
  144. package/runtime/src/base64.c +107 -0
  145. package/runtime/src/bigint.c +1189 -0
  146. package/runtime/src/blob.c +371 -0
  147. package/runtime/src/buffer.c +1357 -0
  148. package/runtime/src/builtin_table.c +100 -0
  149. package/runtime/src/builtins.c +987 -0
  150. package/runtime/src/builtins_util.h +53 -0
  151. package/runtime/src/collections.c +912 -0
  152. package/runtime/src/components.c +28 -0
  153. package/runtime/src/console.c +637 -0
  154. package/runtime/src/convert.c +82 -0
  155. package/runtime/src/core_all.c +21 -0
  156. package/runtime/src/crypto.c +116 -0
  157. package/runtime/src/crypto_asym.c +644 -0
  158. package/runtime/src/crypto_cipher.c +671 -0
  159. package/runtime/src/crypto_hash.c +260 -0
  160. package/runtime/src/crypto_host.c +414 -0
  161. package/runtime/src/crypto_internal.h +304 -0
  162. package/runtime/src/crypto_kdf.c +143 -0
  163. package/runtime/src/crypto_key.c +171 -0
  164. package/runtime/src/crypto_pkey.c +794 -0
  165. package/runtime/src/crypto_subtle.c +1675 -0
  166. package/runtime/src/date.c +940 -0
  167. package/runtime/src/domexception.c +169 -0
  168. package/runtime/src/elements.c +312 -0
  169. package/runtime/src/elements.h +45 -0
  170. package/runtime/src/encoding.c +485 -0
  171. package/runtime/src/error.c +297 -0
  172. package/runtime/src/events.c +793 -0
  173. package/runtime/src/exception.c +56 -0
  174. package/runtime/src/fetch.c +772 -0
  175. package/runtime/src/function.c +530 -0
  176. package/runtime/src/gc.c +803 -0
  177. package/runtime/src/generator.c +218 -0
  178. package/runtime/src/global.c +119 -0
  179. package/runtime/src/headers.c +557 -0
  180. package/runtime/src/inspect.c +1792 -0
  181. package/runtime/src/internal.h +80 -0
  182. package/runtime/src/iterate.c +94 -0
  183. package/runtime/src/iterator.c +409 -0
  184. package/runtime/src/jobs.c +337 -0
  185. package/runtime/src/jsnum.c +353 -0
  186. package/runtime/src/json.c +1028 -0
  187. package/runtime/src/math.c +243 -0
  188. package/runtime/src/module.c +336 -0
  189. package/runtime/src/number.c +176 -0
  190. package/runtime/src/object.c +1265 -0
  191. package/runtime/src/ops.c +322 -0
  192. package/runtime/src/os.c +196 -0
  193. package/runtime/src/os.h +29 -0
  194. package/runtime/src/process.c +432 -0
  195. package/runtime/src/promise.c +721 -0
  196. package/runtime/src/proxy.c +570 -0
  197. package/runtime/src/reflect.c +194 -0
  198. package/runtime/src/regexp.c +1141 -0
  199. package/runtime/src/regexp_anchor.h +34 -0
  200. package/runtime/src/regexp_message.h +32 -0
  201. package/runtime/src/shape.c +294 -0
  202. package/runtime/src/shape.h +46 -0
  203. package/runtime/src/streams.c +1046 -0
  204. package/runtime/src/streams.h +47 -0
  205. package/runtime/src/string.c +364 -0
  206. package/runtime/src/string_builtins.c +837 -0
  207. package/runtime/src/symbol.c +143 -0
  208. package/runtime/src/test_host.c +59 -0
  209. package/runtime/src/typedarray.c +1330 -0
  210. package/runtime/src/tznames.gen.h +712 -0
  211. package/runtime/src/uri.c +169 -0
  212. package/runtime/src/url.c +2116 -0
  213. package/runtime/src/weak.c +486 -0
  214. package/runtime/src/web.c +214 -0
  215. package/runtime/src/wrapper.c +59 -0
  216. package/runtime/src/writable.c +1486 -0
  217. package/runtime/third_party/ada-idna/LICENSE-MIT +18 -0
  218. package/runtime/third_party/ada-idna/README.md +27 -0
  219. package/runtime/third_party/ada-idna/convert.mjs +83 -0
  220. package/runtime/third_party/ada-idna/idna.c +416 -0
  221. package/runtime/third_party/ada-idna/idna.h +15 -0
  222. package/runtime/third_party/ada-idna/idna_tables.h +2657 -0
  223. package/runtime/third_party/bearssl/LICENSE.txt +21 -0
  224. package/runtime/third_party/bearssl/README.txt +136 -0
  225. package/runtime/third_party/bearssl/VERSION +1 -0
  226. package/runtime/third_party/bearssl/inc/bearssl.h +183 -0
  227. package/runtime/third_party/bearssl/inc/bearssl_aead.h +1059 -0
  228. package/runtime/third_party/bearssl/inc/bearssl_block.h +2618 -0
  229. package/runtime/third_party/bearssl/inc/bearssl_ec.h +967 -0
  230. package/runtime/third_party/bearssl/inc/bearssl_hash.h +1346 -0
  231. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +241 -0
  232. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +284 -0
  233. package/runtime/third_party/bearssl/inc/bearssl_pem.h +294 -0
  234. package/runtime/third_party/bearssl/inc/bearssl_prf.h +150 -0
  235. package/runtime/third_party/bearssl/inc/bearssl_rand.h +397 -0
  236. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +1655 -0
  237. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +4296 -0
  238. package/runtime/third_party/bearssl/inc/bearssl_x509.h +1474 -0
  239. package/runtime/third_party/bearssl/src/aead/ccm.c +346 -0
  240. package/runtime/third_party/bearssl/src/aead/eax.c +525 -0
  241. package/runtime/third_party/bearssl/src/aead/gcm.c +318 -0
  242. package/runtime/third_party/bearssl/src/codec/ccopy.c +44 -0
  243. package/runtime/third_party/bearssl/src/codec/dec16be.c +38 -0
  244. package/runtime/third_party/bearssl/src/codec/dec16le.c +38 -0
  245. package/runtime/third_party/bearssl/src/codec/dec32be.c +38 -0
  246. package/runtime/third_party/bearssl/src/codec/dec32le.c +38 -0
  247. package/runtime/third_party/bearssl/src/codec/dec64be.c +38 -0
  248. package/runtime/third_party/bearssl/src/codec/dec64le.c +38 -0
  249. package/runtime/third_party/bearssl/src/codec/enc16be.c +38 -0
  250. package/runtime/third_party/bearssl/src/codec/enc16le.c +38 -0
  251. package/runtime/third_party/bearssl/src/codec/enc32be.c +38 -0
  252. package/runtime/third_party/bearssl/src/codec/enc32le.c +38 -0
  253. package/runtime/third_party/bearssl/src/codec/enc64be.c +38 -0
  254. package/runtime/third_party/bearssl/src/codec/enc64le.c +38 -0
  255. package/runtime/third_party/bearssl/src/codec/pemdec.c +526 -0
  256. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +314 -0
  257. package/runtime/third_party/bearssl/src/codec/pemenc.c +173 -0
  258. package/runtime/third_party/bearssl/src/config.h +247 -0
  259. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +121 -0
  260. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +171 -0
  261. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +398 -0
  262. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +390 -0
  263. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +1478 -0
  264. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +800 -0
  265. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +605 -0
  266. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +831 -0
  267. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +46 -0
  268. package/runtime/third_party/bearssl/src/ec/ec_default.c +36 -0
  269. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +86 -0
  270. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +2124 -0
  271. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +1469 -0
  272. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +1765 -0
  273. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +1781 -0
  274. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +824 -0
  275. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +826 -0
  276. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +85 -0
  277. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +51 -0
  278. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +57 -0
  279. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +64 -0
  280. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +134 -0
  281. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +36 -0
  282. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +36 -0
  283. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +36 -0
  284. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +36 -0
  285. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +47 -0
  286. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +45 -0
  287. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +174 -0
  288. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +48 -0
  289. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +166 -0
  290. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +47 -0
  291. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +45 -0
  292. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +173 -0
  293. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +48 -0
  294. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +165 -0
  295. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +121 -0
  296. package/runtime/third_party/bearssl/src/hash/dig_oid.c +84 -0
  297. package/runtime/third_party/bearssl/src/hash/dig_size.c +50 -0
  298. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +345 -0
  299. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +251 -0
  300. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +154 -0
  301. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +389 -0
  302. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +411 -0
  303. package/runtime/third_party/bearssl/src/hash/md5.c +208 -0
  304. package/runtime/third_party/bearssl/src/hash/md5sha1.c +141 -0
  305. package/runtime/third_party/bearssl/src/hash/mgf1.c +56 -0
  306. package/runtime/third_party/bearssl/src/hash/multihash.c +166 -0
  307. package/runtime/third_party/bearssl/src/hash/sha1.c +191 -0
  308. package/runtime/third_party/bearssl/src/hash/sha2big.c +285 -0
  309. package/runtime/third_party/bearssl/src/hash/sha2small.c +341 -0
  310. package/runtime/third_party/bearssl/src/inner.h +2577 -0
  311. package/runtime/third_party/bearssl/src/int/i15_add.c +46 -0
  312. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +44 -0
  313. package/runtime/third_party/bearssl/src/int/i15_decmod.c +124 -0
  314. package/runtime/third_party/bearssl/src/int/i15_decode.c +56 -0
  315. package/runtime/third_party/bearssl/src/int/i15_decred.c +100 -0
  316. package/runtime/third_party/bearssl/src/int/i15_encode.c +56 -0
  317. package/runtime/third_party/bearssl/src/int/i15_fmont.c +59 -0
  318. package/runtime/third_party/bearssl/src/int/i15_iszero.c +39 -0
  319. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +465 -0
  320. package/runtime/third_party/bearssl/src/int/i15_modpow.c +50 -0
  321. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +160 -0
  322. package/runtime/third_party/bearssl/src/int/i15_montmul.c +184 -0
  323. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +61 -0
  324. package/runtime/third_party/bearssl/src/int/i15_muladd.c +173 -0
  325. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +38 -0
  326. package/runtime/third_party/bearssl/src/int/i15_reduce.c +66 -0
  327. package/runtime/third_party/bearssl/src/int/i15_rshift.c +47 -0
  328. package/runtime/third_party/bearssl/src/int/i15_sub.c +46 -0
  329. package/runtime/third_party/bearssl/src/int/i15_tmont.c +36 -0
  330. package/runtime/third_party/bearssl/src/int/i31_add.c +46 -0
  331. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +44 -0
  332. package/runtime/third_party/bearssl/src/int/i31_decmod.c +124 -0
  333. package/runtime/third_party/bearssl/src/int/i31_decode.c +57 -0
  334. package/runtime/third_party/bearssl/src/int/i31_decred.c +103 -0
  335. package/runtime/third_party/bearssl/src/int/i31_encode.c +79 -0
  336. package/runtime/third_party/bearssl/src/int/i31_fmont.c +60 -0
  337. package/runtime/third_party/bearssl/src/int/i31_iszero.c +39 -0
  338. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +488 -0
  339. package/runtime/third_party/bearssl/src/int/i31_modpow.c +65 -0
  340. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +160 -0
  341. package/runtime/third_party/bearssl/src/int/i31_montmul.c +127 -0
  342. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +74 -0
  343. package/runtime/third_party/bearssl/src/int/i31_muladd.c +157 -0
  344. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +39 -0
  345. package/runtime/third_party/bearssl/src/int/i31_reduce.c +66 -0
  346. package/runtime/third_party/bearssl/src/int/i31_rshift.c +47 -0
  347. package/runtime/third_party/bearssl/src/int/i31_sub.c +46 -0
  348. package/runtime/third_party/bearssl/src/int/i31_tmont.c +36 -0
  349. package/runtime/third_party/bearssl/src/int/i32_add.c +51 -0
  350. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +44 -0
  351. package/runtime/third_party/bearssl/src/int/i32_decmod.c +77 -0
  352. package/runtime/third_party/bearssl/src/int/i32_decode.c +63 -0
  353. package/runtime/third_party/bearssl/src/int/i32_decred.c +107 -0
  354. package/runtime/third_party/bearssl/src/int/i32_div32.c +56 -0
  355. package/runtime/third_party/bearssl/src/int/i32_encode.c +72 -0
  356. package/runtime/third_party/bearssl/src/int/i32_fmont.c +60 -0
  357. package/runtime/third_party/bearssl/src/int/i32_iszero.c +39 -0
  358. package/runtime/third_party/bearssl/src/int/i32_modpow.c +65 -0
  359. package/runtime/third_party/bearssl/src/int/i32_montmul.c +69 -0
  360. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +56 -0
  361. package/runtime/third_party/bearssl/src/int/i32_muladd.c +138 -0
  362. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +39 -0
  363. package/runtime/third_party/bearssl/src/int/i32_reduce.c +66 -0
  364. package/runtime/third_party/bearssl/src/int/i32_sub.c +51 -0
  365. package/runtime/third_party/bearssl/src/int/i32_tmont.c +36 -0
  366. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +493 -0
  367. package/runtime/third_party/bearssl/src/kdf/hkdf.c +107 -0
  368. package/runtime/third_party/bearssl/src/kdf/shake.c +590 -0
  369. package/runtime/third_party/bearssl/src/mac/hmac.c +122 -0
  370. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +193 -0
  371. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +206 -0
  372. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +157 -0
  373. package/runtime/third_party/bearssl/src/rand/sysrng.c +252 -0
  374. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +38 -0
  375. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +36 -0
  376. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +38 -0
  377. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +38 -0
  378. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +38 -0
  379. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +38 -0
  380. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +38 -0
  381. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +36 -0
  382. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +38 -0
  383. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +38 -0
  384. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +38 -0
  385. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +36 -0
  386. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +583 -0
  387. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +99 -0
  388. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +41 -0
  389. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +44 -0
  390. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +37 -0
  391. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +43 -0
  392. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +209 -0
  393. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +320 -0
  394. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +40 -0
  395. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +44 -0
  396. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +113 -0
  397. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +152 -0
  398. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +37 -0
  399. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +608 -0
  400. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +99 -0
  401. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +41 -0
  402. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +44 -0
  403. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +37 -0
  404. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +43 -0
  405. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +203 -0
  406. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +318 -0
  407. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +40 -0
  408. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +44 -0
  409. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +106 -0
  410. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +152 -0
  411. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +41 -0
  412. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +44 -0
  413. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +37 -0
  414. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +43 -0
  415. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +160 -0
  416. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +40 -0
  417. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +44 -0
  418. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +77 -0
  419. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +57 -0
  420. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +61 -0
  421. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +64 -0
  422. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +57 -0
  423. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +63 -0
  424. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +223 -0
  425. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +60 -0
  426. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +64 -0
  427. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +125 -0
  428. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +112 -0
  429. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +145 -0
  430. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +100 -0
  431. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +121 -0
  432. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +106 -0
  433. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +121 -0
  434. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +52 -0
  435. package/runtime/third_party/bearssl/src/settings.c +306 -0
  436. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +69 -0
  437. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +67 -0
  438. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +84 -0
  439. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +142 -0
  440. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +254 -0
  441. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +157 -0
  442. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +112 -0
  443. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +328 -0
  444. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +398 -0
  445. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +104 -0
  446. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +81 -0
  447. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +114 -0
  448. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +433 -0
  449. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +159 -0
  450. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +115 -0
  451. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +111 -0
  452. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +91 -0
  453. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +116 -0
  454. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +422 -0
  455. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +170 -0
  456. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +112 -0
  457. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +445 -0
  458. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +670 -0
  459. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +417 -0
  460. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +717 -0
  461. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +946 -0
  462. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +69 -0
  463. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +67 -0
  464. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +84 -0
  465. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +142 -0
  466. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +176 -0
  467. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +129 -0
  468. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +240 -0
  469. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +223 -0
  470. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +122 -0
  471. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +211 -0
  472. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +596 -0
  473. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +106 -0
  474. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +237 -0
  475. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +411 -0
  476. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +87 -0
  477. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +69 -0
  478. package/runtime/third_party/bearssl/src/symcipher/des_support.c +166 -0
  479. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +310 -0
  480. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +85 -0
  481. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +67 -0
  482. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +260 -0
  483. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +297 -0
  484. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +475 -0
  485. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +221 -0
  486. package/runtime/third_party/bearssl/src/x509/asn1.t0 +757 -0
  487. package/runtime/third_party/bearssl/src/x509/asn1enc.c +93 -0
  488. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +110 -0
  489. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +161 -0
  490. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +97 -0
  491. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +96 -0
  492. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +653 -0
  493. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +376 -0
  494. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +776 -0
  495. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +324 -0
  496. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +105 -0
  497. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +1722 -0
  498. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +1526 -0
  499. package/runtime/third_party/bearssl/src/x509/x509_minimal_full.c +59 -0
  500. package/runtime/third_party/quickjs-dtoa/LICENSE +22 -0
  501. package/runtime/third_party/quickjs-dtoa/README.md +23 -0
  502. package/runtime/third_party/quickjs-dtoa/dtoa.c +1640 -0
  503. package/runtime/third_party/quickjs-dtoa/dtoa.h +83 -0
  504. package/runtime/third_party/quickjs-dtoa/dtoa_compat.h +89 -0
  505. package/runtime/third_party/quickjs-regexp/LICENSE +22 -0
  506. package/runtime/third_party/quickjs-regexp/README.md +22 -0
  507. package/runtime/third_party/quickjs-regexp/cutils.c +641 -0
  508. package/runtime/third_party/quickjs-regexp/cutils.h +457 -0
  509. package/runtime/third_party/quickjs-regexp/libregexp-opcode.h +73 -0
  510. package/runtime/third_party/quickjs-regexp/libregexp.c +3448 -0
  511. package/runtime/third_party/quickjs-regexp/libregexp.h +65 -0
  512. package/runtime/third_party/quickjs-regexp/libunicode-table.h +5206 -0
  513. package/runtime/third_party/quickjs-regexp/libunicode.c +2124 -0
  514. package/runtime/third_party/quickjs-regexp/libunicode.h +196 -0
  515. package/runtime/third_party/v8-ieee754/LICENSE +61 -0
  516. package/runtime/third_party/v8-ieee754/README.md +22 -0
  517. package/runtime/third_party/v8-ieee754/convert.py +84 -0
  518. package/runtime/third_party/v8-ieee754/ieee754.c +3030 -0
  519. package/runtime/third_party/v8-ieee754/ieee754.h +27 -0
  520. package/runtime/tools/regexp_compile.c +90 -0
@@ -0,0 +1,987 @@
1
+ /* The first built-ins (roadmap M3: what the test262 harness needs): Object,
2
+ * Function.prototype, Array, String, Number and Boolean basics. */
3
+ #include <math.h>
4
+ #include <stdio.h>
5
+ #include <stdlib.h>
6
+ #include <string.h>
7
+
8
+ #include "internal.h"
9
+ #include "builtins_util.h"
10
+ #include "js_atoms.h"
11
+ #include "js_convert.h"
12
+ #include "js_error.h"
13
+ #include "js_ops.h"
14
+ #include "js_symbol.h"
15
+ #include "jsnum.h"
16
+
17
+
18
+ /* ---- Helpers --------------------------------------------------------------------------- */
19
+
20
+ static JSValue cstr(JSContext *ctx, const char *s) {
21
+ JSValue v = js_new_string_cstr(ctx, s);
22
+ return v;
23
+ }
24
+
25
+ /* ToIntegerOrInfinity (§7.1.5). */
26
+ static int to_integer(JSContext *ctx, double *out, JSValue v) {
27
+ double d;
28
+ if (js_to_number(ctx, &d, v) < 0) return -1;
29
+ *out = isnan(d) ? 0 : isinf(d) ? d : trunc(d) + 0.0;
30
+ return 0;
31
+ }
32
+
33
+ /* LengthOfArrayLike: ToLength(obj.length) (§7.3.18). */
34
+ int js_length_of_array_like(JSContext *ctx, JSValue obj, double *out) {
35
+ JSValue len = js_get_value(ctx, obj, JS_ATOM(length));
36
+ if (js_is_exception(len)) return -1;
37
+ double d;
38
+ if (to_integer(ctx, &d, len) < 0) return -1;
39
+ *out = d <= 0 ? 0 : d > 9007199254740991.0 ? 9007199254740991.0 : d;
40
+ return 0;
41
+ }
42
+
43
+ /* A property key for index d (below 2^53). */
44
+ static JSValue index_key(JSContext *ctx, double d) {
45
+ if (d <= 4294967294.0) return js_index_key((uint32_t)d);
46
+ JSValue k = js_to_property_key(ctx, js_double(d)); /* a canonical numeric string */
47
+ return k;
48
+ }
49
+
50
+ /* HasProperty on any value that isn't nullish (primitives: their own properties, then the prototype). */
51
+ static int has_value(JSContext *ctx, JSValue v, JSValue key) {
52
+ if (js_is_object(v)) return js_has_property(ctx, js_as_object(v), key);
53
+ if (js_is_string(v)) {
54
+ if (js_same_bits(key, JS_ATOM(length))) return 1;
55
+ if (js_key_is_index(key) && js_key_index(key) < js_string_length(v)) return 1;
56
+ }
57
+ return js_has_property(ctx, js_primitive_prototype(ctx, v), key);
58
+ }
59
+
60
+ /* RequireObjectCoercible for a method's `this`. */
61
+ static bool require_coercible(JSContext *ctx, JSValue v, const char *method) {
62
+ if (!js_is_nullish(v)) return true;
63
+ js_discard(js_throw_type_error(ctx, "%s called on null or undefined", method));
64
+ return false;
65
+ }
66
+
67
+ static JSValue require_object(JSContext *ctx, JSValue v, const char *what) {
68
+ if (js_is_object(v)) return v;
69
+ return js_throw_type_error(ctx, "%s called on non-object", what);
70
+ }
71
+
72
+ /* A key as a string (index keys are numbers). */
73
+ static JSValue key_string(JSContext *ctx, JSValue key) {
74
+ return js_is_number(key) ? js_to_string(ctx, key) : key;
75
+ }
76
+
77
+ /* The helpers other built-in files share (builtins_util.h). */
78
+ int js_to_integer_or_infinity(JSContext *ctx, double *out, JSValue v) { return to_integer(ctx, out, v); }
79
+ JSValue js_index_key_of(JSContext *ctx, double d) { return index_key(ctx, d); }
80
+ int js_has_value(JSContext *ctx, JSValue v, JSValue key) { return has_value(ctx, v, key); }
81
+ bool js_require_this(JSContext *ctx, JSValue v, const char *method) { return require_coercible(ctx, v, method); }
82
+
83
+ void js_describe_value(JSContext *ctx, JSValue v, char *buf, size_t cap) {
84
+ if (js_is_symbol(v)) {
85
+ JSValue d = js_symbol_description(v);
86
+ char desc[96] = "";
87
+ if (js_is_string(d)) desc[js_view_to_utf8(js_string_view(ctx, d), desc, sizeof desc - 1)] = '\0';
88
+ snprintf(buf, cap, "Symbol(%s)", desc);
89
+ return;
90
+ }
91
+ if (!js_is_object(v)) {
92
+ JSValue s = js_to_string(ctx, v);
93
+ if (js_is_exception(s)) {
94
+ js_discard(js_take_exception(ctx));
95
+ snprintf(buf, cap, "value");
96
+ return;
97
+ }
98
+ buf[js_view_to_utf8(js_string_view(ctx, s), buf, cap - 1)] = '\0';
99
+ return;
100
+ }
101
+ const JSClass *cls = js_as_object(v)->shape->cls;
102
+ if (js_is_array(v) || strstr(cls->name, " Iterator")) {
103
+ snprintf(buf, cap, "[object %s]", js_is_array(v) ? "Array" : cls->name);
104
+ return;
105
+ }
106
+ const char *name = js_is_function(v) ? "Function" : "Object";
107
+ for (JSValue o = js_get_prototype_of(js_as_object(v)); js_is_object(o); o = js_get_prototype_of(js_as_object(o))) {
108
+ JSPropertyDescriptor d, n;
109
+ if (js_get_own_property(ctx, js_as_object(o), JS_ATOM(constructor), &d) == 1 && (d.has & JS_DESC_VALUE) && js_is_function(d.value) &&
110
+ js_get_own_property(ctx, js_as_object(d.value), JS_ATOM(name), &n) == 1 && (n.has & JS_DESC_VALUE) && js_is_string(n.value) &&
111
+ js_string_length(n.value) != 0) {
112
+ char s[96];
113
+ s[js_view_to_utf8(js_string_view(ctx, n.value), s, sizeof s - 1)] = '\0';
114
+ snprintf(buf, cap, "#<%s>", s);
115
+ return;
116
+ }
117
+ }
118
+ snprintf(buf, cap, "#<%s>", name);
119
+ }
120
+
121
+ /* ---- Property descriptors (§6.2.6.4, §6.2.6.5) ------------------------------------------- */
122
+
123
+ static int to_descriptor(JSContext *ctx, JSValue v, JSPropertyDescriptor *d) {
124
+ if (!js_is_object(v)) {
125
+ JSValue s = js_to_string(ctx, v);
126
+ char buf[64] = "";
127
+ if (!js_is_exception(s)) buf[js_view_to_utf8(js_string_view(ctx, s), buf, sizeof buf - 1)] = '\0';
128
+ else js_discard(js_take_exception(ctx));
129
+ js_discard(js_throw_type_error(ctx, "Property description must be an object: %s", buf));
130
+ return -1;
131
+ }
132
+ JSObject *o = js_as_object(v);
133
+ memset(d, 0, sizeof *d);
134
+ d->value = d->get = d->set = JS_UNDEFINED;
135
+ static const struct { const char *name; uint8_t has, attr; } flags[] = {
136
+ { "enumerable", JS_DESC_ENUMERABLE, JS_PROP_ENUMERABLE },
137
+ { "configurable", JS_DESC_CONFIGURABLE, JS_PROP_CONFIGURABLE },
138
+ };
139
+ for (unsigned i = 0; i < 2; i++) {
140
+ JSValue key = js_atom_from_cstr(ctx, flags[i].name);
141
+ int has = js_has_property(ctx, o, key);
142
+ if (has < 0) return -1;
143
+ if (!has) continue;
144
+ JSValue x = js_get(ctx, o, key, v);
145
+ if (js_is_exception(x)) return -1;
146
+ d->has |= flags[i].has;
147
+ if (js_truthy(x)) d->attrs |= flags[i].attr;
148
+ }
149
+ int has = js_has_property(ctx, o, JS_ATOM(value));
150
+ if (has < 0) return -1;
151
+ if (has) {
152
+ d->value = js_get(ctx, o, JS_ATOM(value), v);
153
+ if (js_is_exception(d->value)) return -1;
154
+ d->has |= JS_DESC_VALUE;
155
+ }
156
+ JSValue writable = js_atom_from_cstr(ctx, "writable");
157
+ has = js_has_property(ctx, o, writable);
158
+ if (has < 0) return -1;
159
+ if (has) {
160
+ JSValue x = js_get(ctx, o, writable, v);
161
+ if (js_is_exception(x)) return -1;
162
+ d->has |= JS_DESC_WRITABLE;
163
+ if (js_truthy(x)) d->attrs |= JS_PROP_WRITABLE;
164
+ }
165
+ for (int accessor = 0; accessor < 2; accessor++) {
166
+ JSValue key = accessor ? JS_ATOM(set) : JS_ATOM(get);
167
+ has = js_has_property(ctx, o, key);
168
+ if (has < 0) return -1;
169
+ if (!has) continue;
170
+ JSValue f = js_get(ctx, o, key, v);
171
+ if (js_is_exception(f)) return -1;
172
+ if (!js_is_undefined(f) && !js_is_callable(f)) {
173
+ js_discard(js_throw_type_error(ctx, "%s must be a function", accessor ? "Setter" : "Getter"));
174
+ return -1;
175
+ }
176
+ if (accessor) d->set = f;
177
+ else d->get = f;
178
+ d->has |= accessor ? JS_DESC_SET : JS_DESC_GET;
179
+ }
180
+ if ((d->has & (JS_DESC_GET | JS_DESC_SET)) && (d->has & (JS_DESC_VALUE | JS_DESC_WRITABLE))) {
181
+ js_discard(js_throw_type_error(ctx, "Invalid property descriptor. Cannot both specify accessors and a value or writable attribute, #<Object>"));
182
+ return -1;
183
+ }
184
+ return 0;
185
+ }
186
+
187
+ static JSValue from_descriptor(JSContext *ctx, const JSPropertyDescriptor *d);
188
+ int js_to_property_descriptor(JSContext *ctx, JSValue v, JSPropertyDescriptor *d) { return to_descriptor(ctx, v, d); }
189
+ JSValue js_from_property_descriptor(JSContext *ctx, const JSPropertyDescriptor *d) { return from_descriptor(ctx, d); }
190
+
191
+ static JSValue from_descriptor(JSContext *ctx, const JSPropertyDescriptor *d) {
192
+ JSValue r = js_new_object(ctx);
193
+ JSObject *o = js_as_object(r);
194
+ if (d->has & JS_DESC_VALUE) js_define_data(ctx, o, JS_ATOM(value), d->value, JS_PROP_DEFAULT);
195
+ if (d->has & JS_DESC_WRITABLE) js_define_data(ctx, o, js_atom_from_cstr(ctx, "writable"), js_bool(d->attrs & JS_PROP_WRITABLE), JS_PROP_DEFAULT);
196
+ if (d->has & JS_DESC_GET) js_define_data(ctx, o, JS_ATOM(get), d->get, JS_PROP_DEFAULT);
197
+ if (d->has & JS_DESC_SET) js_define_data(ctx, o, JS_ATOM(set), d->set, JS_PROP_DEFAULT);
198
+ js_define_data(ctx, o, js_atom_from_cstr(ctx, "enumerable"), js_bool(d->attrs & JS_PROP_ENUMERABLE), JS_PROP_DEFAULT);
199
+ js_define_data(ctx, o, js_atom_from_cstr(ctx, "configurable"), js_bool(d->attrs & JS_PROP_CONFIGURABLE), JS_PROP_DEFAULT);
200
+ return r;
201
+ }
202
+
203
+ /* ---- Object (§20.1) -------------------------------------------------------------------------- */
204
+
205
+ BUILTIN(object_ctor) {
206
+ UNUSED_ARGS;
207
+ /* new Object() from a subclass: OrdinaryCreateFromConstructor */
208
+ if (!js_is_undefined(new_target) && !js_same_bits(new_target, callee))
209
+ return js_create_from_constructor(ctx, new_target, JS_INTRINSIC_OBJECT_PROTOTYPE);
210
+ JSValue v = ARG(0);
211
+ if (js_is_object(v)) return v;
212
+ if (js_is_nullish(v)) return js_new_object(ctx);
213
+ return js_new_wrapper(ctx, v, JS_UNDEFINED);
214
+ }
215
+
216
+ CORE(object_define_property) {
217
+ UNUSED_ARGS;
218
+ JSValue o = require_object(ctx, ARG(0), "Object.defineProperty");
219
+ if (js_is_exception(o)) return JS_EXCEPTION;
220
+ JSValue key = js_to_property_key(ctx, ARG(1));
221
+ if (js_is_exception(key)) return JS_EXCEPTION;
222
+ JSPropertyDescriptor d;
223
+ if (to_descriptor(ctx, ARG(2), &d) < 0) return JS_EXCEPTION;
224
+ if (js_define_own_property(ctx, js_as_object(o), key, &d, true) < 0) return JS_EXCEPTION;
225
+ return o;
226
+ }
227
+
228
+ /* Object.defineProperties(o, props) (§20.1.2.3.1): descriptors first, then the definitions. */
229
+ static JSValue define_properties(JSContext *ctx, JSValue o, JSValue props) {
230
+ if (js_is_nullish(props)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
231
+ if (!js_is_object(props)) return o;
232
+ JSValue all = js_own_keys(ctx, js_as_object(props));
233
+ if (js_is_exception(all)) return all;
234
+ JSValueArray *keys = (JSValueArray *)js_as_cell(all);
235
+ uint32_t n = keys->cell.aux;
236
+ JSValueArray *descs = js_alloc_value_array(ctx, 4 * n); /* each descriptor object and its values, for the GC */
237
+ JSPropertyDescriptor *ds = n ? calloc(n, sizeof *ds) : NULL;
238
+ uint32_t count = 0;
239
+ JSValue result = o;
240
+ for (uint32_t i = 0; i < n; i++) {
241
+ JSPropertyDescriptor own;
242
+ int r = js_get_own_property(ctx, js_as_object(props), keys->values[i], &own);
243
+ if (r < 0) { result = JS_EXCEPTION; goto done; }
244
+ if (!r || !(own.attrs & JS_PROP_ENUMERABLE)) continue;
245
+ JSValue dv = js_get(ctx, js_as_object(props), keys->values[i], props);
246
+ if (js_is_exception(dv)) { result = JS_EXCEPTION; goto done; }
247
+ js_store(ctx, &descs->cell, &descs->values[4 * count], dv);
248
+ if (to_descriptor(ctx, dv, &ds[count]) < 0) { result = JS_EXCEPTION; goto done; }
249
+ js_store(ctx, &descs->cell, &descs->values[4 * count + 1], ds[count].value);
250
+ js_store(ctx, &descs->cell, &descs->values[4 * count + 2], ds[count].get);
251
+ js_store(ctx, &descs->cell, &descs->values[4 * count + 3], ds[count].set);
252
+ keys->values[count] = keys->values[i];
253
+ count++;
254
+ }
255
+ for (uint32_t i = 0; i < count; i++)
256
+ if (js_define_own_property(ctx, js_as_object(o), keys->values[i], &ds[i], true) < 0) { result = JS_EXCEPTION; goto done; }
257
+ done:
258
+ free(ds);
259
+ JSValue held = js_cell(&descs->cell);
260
+ js_keep_alive(held);
261
+ return result;
262
+ }
263
+
264
+ CORE(object_define_properties) {
265
+ UNUSED_ARGS;
266
+ JSValue o = require_object(ctx, ARG(0), "Object.defineProperties");
267
+ if (js_is_exception(o)) return JS_EXCEPTION;
268
+ return define_properties(ctx, o, ARG(1));
269
+ }
270
+
271
+ /* The own property of any value (primitives: a string's length and indices). */
272
+ static int own_property_of(JSContext *ctx, JSValue v, JSValue key, JSPropertyDescriptor *d) {
273
+ if (js_is_object(v)) return js_get_own_property(ctx, js_as_object(v), key, d);
274
+ if (!js_is_string(v)) return 0;
275
+ JSValue x = js_get_value(ctx, v, key);
276
+ if (js_is_exception(x)) return -1;
277
+ bool own = js_same_bits(key, JS_ATOM(length)) || (js_key_is_index(key) && js_key_index(key) < js_string_length(v));
278
+ if (!own) return 0;
279
+ *d = js_data_descriptor(x, js_same_bits(key, JS_ATOM(length)) ? 0 : JS_PROP_ENUMERABLE);
280
+ return 1;
281
+ }
282
+
283
+ CORE(object_get_own_property_descriptor) {
284
+ UNUSED_ARGS;
285
+ if (js_is_nullish(ARG(0))) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
286
+ JSValue key = js_to_property_key(ctx, ARG(1));
287
+ if (js_is_exception(key)) return JS_EXCEPTION;
288
+ JSPropertyDescriptor d;
289
+ int r = own_property_of(ctx, ARG(0), key, &d);
290
+ if (r < 0) return JS_EXCEPTION;
291
+ return r ? from_descriptor(ctx, &d) : JS_UNDEFINED;
292
+ }
293
+
294
+ /* Own string keys of any value, as an array; `enumerable_only` for Object.keys. */
295
+ static JSValue own_string_keys(JSContext *ctx, JSValue v, bool enumerable_only) {
296
+ if (js_is_nullish(v)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
297
+ JSValue result = js_new_array(ctx, 0);
298
+ if (js_is_string(v)) {
299
+ uint32_t n = js_string_length(v);
300
+ for (uint32_t i = 0; i < n; i++) {
301
+ JSValue s = js_to_string(ctx, js_int32((int32_t)i));
302
+ if (js_is_exception(s) || js_array_push(ctx, js_as_object(result), s) < 0) return JS_EXCEPTION;
303
+ }
304
+ if (!enumerable_only && js_array_push(ctx, js_as_object(result), JS_ATOM(length)) < 0) return JS_EXCEPTION;
305
+ return result;
306
+ }
307
+ if (!js_is_object(v)) return result;
308
+ JSObject *o = js_as_object(v);
309
+ JSValue all = js_own_keys(ctx, o);
310
+ if (js_is_exception(all)) return all;
311
+ JSValueArray *keys = (JSValueArray *)js_as_cell(all);
312
+ for (uint32_t i = 0; i < keys->cell.aux; i++) {
313
+ JSValue k = keys->values[i];
314
+ if (js_is_symbol(k)) continue; /* last for ordinary objects; a proxy's ownKeys may mix them */
315
+ if (enumerable_only) {
316
+ JSPropertyDescriptor d;
317
+ int r = js_get_own_property(ctx, o, k, &d);
318
+ if (r < 0) return JS_EXCEPTION;
319
+ if (!r || !(d.attrs & JS_PROP_ENUMERABLE)) continue;
320
+ }
321
+ JSValue s = key_string(ctx, k);
322
+ if (js_is_exception(s) || js_array_push(ctx, js_as_object(result), s) < 0) return JS_EXCEPTION;
323
+ }
324
+ return result;
325
+ }
326
+
327
+ CORE(object_get_own_property_names) {
328
+ UNUSED_ARGS;
329
+ return own_string_keys(ctx, ARG(0), false);
330
+ }
331
+
332
+ /* Object.getOwnPropertySymbols (§20.1.2.11) */
333
+ CORE(object_get_own_property_symbols) {
334
+ UNUSED_ARGS;
335
+ JSValue v = ARG(0);
336
+ if (js_is_nullish(v)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
337
+ JSValue result = js_new_array(ctx, 0);
338
+ if (!js_is_object(v)) return result;
339
+ JSValue all = js_own_keys(ctx, js_as_object(v));
340
+ if (js_is_exception(all)) return all;
341
+ JSValueArray *keys = (JSValueArray *)js_as_cell(all);
342
+ for (uint32_t i = 0; i < keys->cell.aux; i++)
343
+ if (js_is_symbol(keys->values[i]) && js_array_push(ctx, js_as_object(result), keys->values[i]) < 0) return JS_EXCEPTION;
344
+ return result;
345
+ }
346
+
347
+ CORE(object_keys) {
348
+ UNUSED_ARGS;
349
+ return own_string_keys(ctx, ARG(0), true);
350
+ }
351
+
352
+ static JSValue proto_of_value(JSContext *ctx, JSValue v) {
353
+ if (js_is_nullish(v)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
354
+ if (js_is_object(v)) return js_object_get_prototype_of(ctx, js_as_object(v));
355
+ return js_object_value(js_primitive_prototype(ctx, v));
356
+ }
357
+
358
+ CORE(object_get_prototype_of) {
359
+ UNUSED_ARGS;
360
+ return proto_of_value(ctx, ARG(0));
361
+ }
362
+
363
+ CORE(object_set_prototype_of) {
364
+ UNUSED_ARGS;
365
+ JSValue o = ARG(0), proto = ARG(1);
366
+ if (js_is_nullish(o)) return js_throw_type_error(ctx, "Object.setPrototypeOf called on null or undefined");
367
+ if (!js_is_object(proto) && !js_is_null(proto)) return js_throw_type_error(ctx, "Object prototype may only be an Object or null");
368
+ if (!js_is_object(o)) return o;
369
+ int r = js_set_prototype_of(ctx, js_as_object(o), proto);
370
+ if (r < 0) return JS_EXCEPTION;
371
+ if (!r && !js_is_empty(js_proxy_target(o))) return js_throw_type_error(ctx, "'setPrototypeOf' on proxy: trap returned falsish for property 'undefined'");
372
+ if (!r) return js_throw_type_error(ctx, "Cannot set the prototype of this object");
373
+ return o;
374
+ }
375
+
376
+ CORE(object_create) {
377
+ UNUSED_ARGS;
378
+ JSValue proto = ARG(0);
379
+ if (!js_is_object(proto) && !js_is_null(proto)) return js_throw_type_error(ctx, "Object prototype may only be an Object or null");
380
+ JSValue o = js_new_object_proto(ctx, proto, JS_DEFAULT_INLINE_SLOTS);
381
+ if (js_is_undefined(ARG(1))) return o;
382
+ return define_properties(ctx, o, ARG(1));
383
+ }
384
+
385
+ CORE(object_prevent_extensions) {
386
+ UNUSED_ARGS;
387
+ if (!js_is_object(ARG(0))) return ARG(0);
388
+ int r = js_prevent_extensions(ctx, js_as_object(ARG(0)));
389
+ if (r == 0 && !js_is_empty(js_proxy_target(ARG(0)))) return js_throw_type_error(ctx, "'preventExtensions' on proxy: trap returned falsish");
390
+ if (r == 0) return js_throw_type_error(ctx, "Cannot prevent extensions on this object"); /* a view of a resizable buffer */
391
+ return r < 0 ? JS_EXCEPTION : ARG(0);
392
+ }
393
+
394
+ CORE(object_is_extensible) {
395
+ UNUSED_ARGS;
396
+ if (!js_is_object(ARG(0))) return JS_FALSE;
397
+ int r = js_object_is_extensible(ctx, js_as_object(ARG(0)));
398
+ return r < 0 ? JS_EXCEPTION : js_bool(r);
399
+ }
400
+
401
+ /* Object.prototype.toString (§20.1.3.6), without Symbol.toStringTag. */
402
+ CORE(object_proto_to_string) {
403
+ UNUSED_ARGS;
404
+ const char *tag = "Object";
405
+ if (js_is_undefined(this_val)) tag = "Undefined";
406
+ else if (js_is_null(this_val)) tag = "Null";
407
+ JSValue prim = js_is_wrapper(this_val) ? js_wrapped_value(this_val) : this_val; /* [[StringData]], … */
408
+ int is_array = js_is_nullish(this_val) ? 0 : js_is_array_spec(ctx, this_val);
409
+ if (is_array < 0) return JS_EXCEPTION;
410
+ if (js_is_nullish(this_val)) {
411
+ } else if (js_is_string(prim)) tag = "String";
412
+ else if (js_is_number(prim)) tag = "Number";
413
+ else if (js_is_bool(prim)) tag = "Boolean";
414
+ else if (is_array) tag = "Array";
415
+ else if (js_is_callable(this_val)) tag = "Function";
416
+ else if (js_is_error(this_val)) tag = "Error";
417
+ else if (js_is_arguments(this_val)) tag = "Arguments";
418
+ else if (js_is_object(this_val) && strcmp(js_as_object(this_val)->shape->cls->name, "Date") == 0) tag = "Date";
419
+ else if (js_is_object(this_val) && strcmp(js_as_object(this_val)->shape->cls->name, "RegExp") == 0) tag = "RegExp";
420
+ if (!js_is_nullish(this_val)) { /* a string @@toStringTag wins (Promise, Symbol, Generator, …) */
421
+ JSValue t = js_get_value(ctx, this_val, JS_SYMBOL(toStringTag));
422
+ if (js_is_exception(t)) return JS_EXCEPTION;
423
+ if (js_is_string(t)) {
424
+ JSValue head = js_concat(ctx, cstr(ctx, "[object "), t);
425
+ if (js_is_exception(head)) return JS_EXCEPTION;
426
+ return js_concat(ctx, head, cstr(ctx, "]"));
427
+ }
428
+ }
429
+ char buf[32];
430
+ snprintf(buf, sizeof buf, "[object %s]", tag);
431
+ return cstr(ctx, buf);
432
+ }
433
+
434
+ CORE(object_proto_value_of) {
435
+ UNUSED_ARGS;
436
+ return js_to_object(ctx, this_val);
437
+ }
438
+
439
+ CORE(object_proto_has_own_property) {
440
+ UNUSED_ARGS;
441
+ JSValue key = js_to_property_key(ctx, ARG(0));
442
+ if (js_is_exception(key)) return JS_EXCEPTION;
443
+ if (js_is_nullish(this_val)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
444
+ JSPropertyDescriptor d;
445
+ int r = own_property_of(ctx, this_val, key, &d);
446
+ return r < 0 ? JS_EXCEPTION : js_bool(r);
447
+ }
448
+
449
+ CORE(object_proto_property_is_enumerable) {
450
+ UNUSED_ARGS;
451
+ JSValue key = js_to_property_key(ctx, ARG(0));
452
+ if (js_is_exception(key)) return JS_EXCEPTION;
453
+ if (js_is_nullish(this_val)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
454
+ JSPropertyDescriptor d;
455
+ int r = own_property_of(ctx, this_val, key, &d);
456
+ if (r < 0) return JS_EXCEPTION;
457
+ return js_bool(r && (d.attrs & JS_PROP_ENUMERABLE));
458
+ }
459
+
460
+ CORE(object_proto_is_prototype_of) {
461
+ UNUSED_ARGS;
462
+ JSValue v = ARG(0);
463
+ if (!js_is_object(v)) return JS_FALSE;
464
+ if (js_is_nullish(this_val)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
465
+ JSValue o = js_to_object(ctx, this_val);
466
+ if (js_is_exception(o)) return o;
467
+ for (JSValue p = js_object_get_prototype_of(ctx, js_as_object(v));; p = js_object_get_prototype_of(ctx, js_as_object(p))) {
468
+ if (js_is_exception(p)) return p;
469
+ if (!js_is_object(p)) return JS_FALSE;
470
+ if (js_same_bits(p, o)) return JS_TRUE;
471
+ }
472
+ }
473
+
474
+ /* ---- Object, ES2015 and later (§20.1.2) ------------------------------------------------------- */
475
+
476
+
477
+ /* CreateDataPropertyOrThrow (§7.3.7). */
478
+ static int create_data_property(JSContext *ctx, JSValue o, JSValue key, JSValue v) {
479
+ JSPropertyDescriptor d = js_data_descriptor(v, JS_PROP_DEFAULT);
480
+ return js_define_own_property(ctx, js_as_object(o), key, &d, true) < 0 ? -1 : 0;
481
+ }
482
+
483
+ /* ToObject where only the check matters: the statics that read a value's own properties take
484
+ * primitives as they are (own_property_of, own_string_keys), without allocating a wrapper. */
485
+ static JSValue to_object_or_throw(JSContext *ctx, JSValue v) {
486
+ if (js_is_nullish(v)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
487
+ return v;
488
+ }
489
+
490
+ /* The values of a value's own enumerable string keys (Object.values / entries): each key is
491
+ * checked again before its Get (§7.3.24 EnumerableOwnProperties). */
492
+ static JSValue enumerable_own(JSContext *ctx, JSValue v, bool entries) {
493
+ if (js_is_exception(to_object_or_throw(ctx, v))) return JS_EXCEPTION;
494
+ JSValue keys = own_string_keys(ctx, v, false);
495
+ if (js_is_exception(keys)) return keys;
496
+ JSValue result = js_new_array(ctx, 0);
497
+ uint32_t n = js_array_length(js_as_object(keys));
498
+ for (uint32_t i = 0; i < n; i++) {
499
+ JSValue name = js_get_elem(ctx, keys, js_index_key(i));
500
+ JSValue key = js_is_exception(name) ? name : js_to_property_key(ctx, name);
501
+ if (js_is_exception(key)) return JS_EXCEPTION;
502
+ JSPropertyDescriptor d;
503
+ int r = own_property_of(ctx, v, key, &d);
504
+ if (r < 0) return JS_EXCEPTION;
505
+ if (!r || !(d.attrs & JS_PROP_ENUMERABLE)) continue;
506
+ JSValue value = js_get_value(ctx, v, key);
507
+ if (js_is_exception(value)) return value;
508
+ JSValue item = value;
509
+ if (entries) {
510
+ JSValue pair[2] = { name, value };
511
+ item = js_new_array_from(ctx, pair, 2);
512
+ if (js_is_exception(item)) return item;
513
+ }
514
+ if (js_array_push(ctx, js_as_object(result), item) < 0) return JS_EXCEPTION;
515
+ }
516
+ js_keep_alive(keys);
517
+ return result;
518
+ }
519
+
520
+ CORE(object_values) {
521
+ UNUSED_ARGS;
522
+ return enumerable_own(ctx, ARG(0), false);
523
+ }
524
+
525
+ CORE(object_entries) {
526
+ UNUSED_ARGS;
527
+ return enumerable_own(ctx, ARG(0), true);
528
+ }
529
+
530
+ /* Object.assign(target, ...sources) (§20.1.2.1) */
531
+ CORE(object_assign) {
532
+ UNUSED_ARGS;
533
+ JSValue target = js_to_object(ctx, ARG(0));
534
+ if (js_is_exception(target)) return target;
535
+ for (uint32_t s = 1; s < argc; s++) {
536
+ JSValue from = argv[s];
537
+ if (js_is_nullish(from)) continue;
538
+ if (js_is_string(from)) { /* its characters: own, enumerable */
539
+ uint32_t n = js_string_length(from);
540
+ for (uint32_t i = 0; i < n; i++)
541
+ if (js_set_value(ctx, target, js_index_key(i), js_substring(ctx, from, i, i + 1), true) < 0) return JS_EXCEPTION;
542
+ continue;
543
+ }
544
+ if (!js_is_object(from)) continue;
545
+ JSValue keys = js_own_keys(ctx, js_as_object(from));
546
+ if (js_is_exception(keys)) return keys;
547
+ JSValueArray *list = (JSValueArray *)js_as_cell(keys);
548
+ for (uint32_t i = 0; i < list->cell.aux; i++) {
549
+ JSPropertyDescriptor d;
550
+ int r = js_get_own_property(ctx, js_as_object(from), list->values[i], &d);
551
+ if (r < 0) return JS_EXCEPTION;
552
+ if (!r || !(d.attrs & JS_PROP_ENUMERABLE)) continue;
553
+ JSValue v = js_get(ctx, js_as_object(from), list->values[i], from);
554
+ if (js_is_exception(v) || js_set_value(ctx, target, list->values[i], v, true) < 0) return JS_EXCEPTION;
555
+ }
556
+ js_keep_alive(keys);
557
+ }
558
+ return target;
559
+ }
560
+
561
+ /* Object.fromEntries(iterable) (§20.1.2.7) */
562
+ CORE(object_from_entries) {
563
+ UNUSED_ARGS;
564
+ if (js_is_nullish(ARG(0))) return js_throw_type_error(ctx, "Object.fromEntries requires an iterable");
565
+ JSValue result = js_new_object(ctx);
566
+ JSValue rec = js_iter_start(ctx, ARG(0));
567
+ if (js_is_exception(rec)) return rec;
568
+ for (;;) {
569
+ JSValue entry = js_iter_next(ctx, rec);
570
+ if (js_is_exception(entry)) return entry;
571
+ if (js_is_empty(entry)) return result;
572
+ if (!js_is_object(entry)) {
573
+ JSValue e = js_throw_type_error(ctx, "Iterator value is not an entry object");
574
+ (void)e;
575
+ js_iter_close_throw(ctx, rec);
576
+ return JS_EXCEPTION;
577
+ }
578
+ JSValue k = js_get_elem(ctx, entry, js_index_key(0));
579
+ JSValue v = js_is_exception(k) ? k : js_get_elem(ctx, entry, js_index_key(1));
580
+ JSValue key = js_is_exception(v) ? v : js_to_property_key(ctx, k);
581
+ if (js_is_exception(key) || create_data_property(ctx, result, key, v) < 0) {
582
+ js_iter_close_throw(ctx, rec);
583
+ return JS_EXCEPTION;
584
+ }
585
+ }
586
+ }
587
+
588
+ /* SetIntegrityLevel / TestIntegrityLevel (§7.3.15, §7.3.16): sealed (frozen: also read-only). */
589
+ static int seal(JSContext *ctx, JSObject *o) {
590
+ int r = js_prevent_extensions(ctx, o);
591
+ if (r == 0) js_discard(js_throw_type_error(ctx, "'preventExtensions' on proxy: trap returned falsish"));
592
+ if (r <= 0) return -1;
593
+ JSValue keys = js_own_keys(ctx, o);
594
+ if (js_is_exception(keys)) return -1;
595
+ JSValueArray *list = (JSValueArray *)js_as_cell(keys);
596
+ for (uint32_t i = 0; i < list->cell.aux; i++) {
597
+ JSPropertyDescriptor d = { JS_DESC_CONFIGURABLE, 0, JS_UNDEFINED, JS_UNDEFINED, JS_UNDEFINED };
598
+ if (js_define_own_property(ctx, o, list->values[i], &d, true) < 0) return -1;
599
+ }
600
+ js_keep_alive(keys);
601
+ return 0;
602
+ }
603
+
604
+ static JSValue test_integrity(JSContext *ctx, JSValue v, bool frozen) {
605
+ if (!js_is_object(v)) return JS_TRUE;
606
+ JSObject *o = js_as_object(v);
607
+ int extensible = js_object_is_extensible(ctx, o);
608
+ if (extensible) return extensible < 0 ? JS_EXCEPTION : JS_FALSE;
609
+ JSValue keys = js_own_keys(ctx, o);
610
+ if (js_is_exception(keys)) return keys;
611
+ JSValueArray *list = (JSValueArray *)js_as_cell(keys);
612
+ for (uint32_t i = 0; i < list->cell.aux; i++) {
613
+ JSPropertyDescriptor d;
614
+ int r = js_get_own_property(ctx, o, list->values[i], &d);
615
+ if (r < 0) return JS_EXCEPTION;
616
+ if (!r) continue;
617
+ if (d.attrs & JS_PROP_CONFIGURABLE) return JS_FALSE;
618
+ if (frozen && (d.has & JS_DESC_VALUE) && (d.attrs & JS_PROP_WRITABLE)) return JS_FALSE;
619
+ }
620
+ js_keep_alive(keys);
621
+ return JS_TRUE;
622
+ }
623
+
624
+ CORE(object_freeze) {
625
+ UNUSED_ARGS;
626
+ if (js_is_object(ARG(0)) && js_freeze(ctx, js_as_object(ARG(0))) < 0) return JS_EXCEPTION;
627
+ return ARG(0);
628
+ }
629
+
630
+ CORE(object_seal) {
631
+ UNUSED_ARGS;
632
+ if (js_is_object(ARG(0)) && seal(ctx, js_as_object(ARG(0))) < 0) return JS_EXCEPTION;
633
+ return ARG(0);
634
+ }
635
+
636
+ CORE(object_is_frozen) {
637
+ UNUSED_ARGS;
638
+ return test_integrity(ctx, ARG(0), true);
639
+ }
640
+
641
+ CORE(object_is_sealed) {
642
+ UNUSED_ARGS;
643
+ return test_integrity(ctx, ARG(0), false);
644
+ }
645
+
646
+ /* Object.getOwnPropertyDescriptors (§20.1.2.9) */
647
+ CORE(object_get_own_property_descriptors) {
648
+ UNUSED_ARGS;
649
+ JSValue v = to_object_or_throw(ctx, ARG(0));
650
+ if (js_is_exception(v)) return v;
651
+ JSValue result = js_new_object(ctx);
652
+ if (js_is_string(v)) {
653
+ JSValue names = own_string_keys(ctx, v, false);
654
+ if (js_is_exception(names)) return names;
655
+ for (uint32_t i = 0; i < js_array_length(js_as_object(names)); i++) {
656
+ JSValue key = js_to_property_key(ctx, js_get_elem(ctx, names, js_index_key(i)));
657
+ JSPropertyDescriptor d;
658
+ if (js_is_exception(key) || own_property_of(ctx, v, key, &d) < 0) return JS_EXCEPTION;
659
+ if (create_data_property(ctx, result, key, from_descriptor(ctx, &d)) < 0) return JS_EXCEPTION;
660
+ }
661
+ return result;
662
+ }
663
+ if (!js_is_object(v)) return result;
664
+ JSValue keys = js_own_keys(ctx, js_as_object(v));
665
+ if (js_is_exception(keys)) return keys;
666
+ JSValueArray *list = (JSValueArray *)js_as_cell(keys);
667
+ for (uint32_t i = 0; i < list->cell.aux; i++) {
668
+ JSPropertyDescriptor d;
669
+ int r = js_get_own_property(ctx, js_as_object(v), list->values[i], &d);
670
+ if (r < 0) return JS_EXCEPTION;
671
+ if (!r) continue;
672
+ JSValue desc = from_descriptor(ctx, &d);
673
+ if (js_is_exception(desc) || create_data_property(ctx, result, list->values[i], desc) < 0) return JS_EXCEPTION;
674
+ }
675
+ js_keep_alive(keys);
676
+ return result;
677
+ }
678
+
679
+ /* Object.groupBy(items, callback) (§20.1.2.12): a null-prototype object of arrays. */
680
+ CORE(object_group_by) {
681
+ UNUSED_ARGS;
682
+ JSValue items = ARG(0), callback = ARG(1);
683
+ if (js_is_nullish(items)) return js_throw_type_error(ctx, "Object.groupBy requires an iterable");
684
+ if (!js_is_callable(callback)) return js_throw_type_error(ctx, "Object.groupBy: the callback is not a function");
685
+ JSValue groups = js_new_object_proto(ctx, JS_NULL, JS_DEFAULT_INLINE_SLOTS);
686
+ JSValue rec = js_iter_start(ctx, items);
687
+ if (js_is_exception(rec)) return rec;
688
+ for (double k = 0;; k++) {
689
+ JSValue v = js_iter_next(ctx, rec);
690
+ if (js_is_exception(v)) return v;
691
+ if (js_is_empty(v)) return groups;
692
+ JSValue args[2] = { v, js_number(k) };
693
+ JSValue key = js_call(ctx, callback, JS_UNDEFINED, 2, args);
694
+ if (!js_is_exception(key)) key = js_to_property_key(ctx, key);
695
+ if (js_is_exception(key)) {
696
+ js_iter_close_throw(ctx, rec);
697
+ return JS_EXCEPTION;
698
+ }
699
+ JSValue group = js_get(ctx, js_as_object(groups), key, groups);
700
+ if (js_is_undefined(group)) {
701
+ group = js_new_array(ctx, 0);
702
+ if (create_data_property(ctx, groups, key, group) < 0) return JS_EXCEPTION;
703
+ }
704
+ if (js_is_exception(group) || js_array_push(ctx, js_as_object(group), v) < 0) return JS_EXCEPTION;
705
+ }
706
+ }
707
+
708
+ /* Object.hasOwn(o, key) (§20.1.2.13) */
709
+ CORE(object_has_own) {
710
+ UNUSED_ARGS;
711
+ JSValue v = to_object_or_throw(ctx, ARG(0));
712
+ if (js_is_exception(v)) return v;
713
+ JSValue key = js_to_property_key(ctx, ARG(1));
714
+ if (js_is_exception(key)) return key;
715
+ JSPropertyDescriptor d;
716
+ int r = own_property_of(ctx, v, key, &d);
717
+ return r < 0 ? JS_EXCEPTION : js_bool(r);
718
+ }
719
+
720
+ /* Object.is (§20.1.2.14): SameValue. */
721
+ CORE(object_is) {
722
+ UNUSED_ARGS;
723
+ return js_bool(js_same_value(ctx, ARG(0), ARG(1)));
724
+ }
725
+
726
+ /* ---- Object.prototype: toLocaleString, __proto__ and the legacy accessor methods (Annex B) ---- */
727
+
728
+ CORE(object_proto_to_locale_string) {
729
+ UNUSED_ARGS;
730
+ JSValue f = js_get_value(ctx, this_val, JS_ATOM(toString));
731
+ if (js_is_exception(f)) return f;
732
+ return js_call(ctx, f, this_val, 0, NULL);
733
+ }
734
+
735
+ CORE(object_proto_get_proto) {
736
+ UNUSED_ARGS;
737
+ return proto_of_value(ctx, this_val);
738
+ }
739
+
740
+ CORE(object_proto_set_proto) {
741
+ UNUSED_ARGS;
742
+ JSValue proto = ARG(0);
743
+ if (js_is_nullish(this_val)) return js_throw_type_error(ctx, "Object.prototype.__proto__ called on null or undefined");
744
+ if ((!js_is_object(proto) && !js_is_null(proto)) || !js_is_object(this_val)) return JS_UNDEFINED;
745
+ int r = js_set_prototype_of(ctx, js_as_object(this_val), proto);
746
+ if (r < 0) return JS_EXCEPTION;
747
+ if (!r) return js_throw_type_error(ctx, "Object.prototype.__proto__ setter failed");
748
+ return JS_UNDEFINED;
749
+ }
750
+
751
+ static JSValue define_legacy_accessor(JSContext *ctx, JSValue this_val, uint32_t argc, const JSValue *argv, bool getter) {
752
+ if (js_is_nullish(this_val)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
753
+ if (!js_is_callable(ARG(1))) return js_throw_type_error(ctx, getter ? "Object.prototype.__defineGetter__: Expecting function" : "Object.prototype.__defineSetter__: Expecting function");
754
+ JSValue key = js_to_property_key(ctx, ARG(0));
755
+ if (js_is_exception(key)) return key;
756
+ if (!js_is_object(this_val)) return JS_UNDEFINED;
757
+ JSPropertyDescriptor d = { (uint8_t)((getter ? JS_DESC_GET : JS_DESC_SET) | JS_DESC_ENUMERABLE | JS_DESC_CONFIGURABLE),
758
+ JS_PROP_ENUMERABLE | JS_PROP_CONFIGURABLE, JS_UNDEFINED, getter ? ARG(1) : JS_UNDEFINED, getter ? JS_UNDEFINED : ARG(1) };
759
+ return js_define_own_property(ctx, js_as_object(this_val), key, &d, true) < 0 ? JS_EXCEPTION : JS_UNDEFINED;
760
+ }
761
+
762
+ static JSValue lookup_legacy_accessor(JSContext *ctx, JSValue this_val, uint32_t argc, const JSValue *argv, bool getter) {
763
+ if (js_is_nullish(this_val)) return js_throw_type_error(ctx, "Cannot convert undefined or null to object");
764
+ JSValue key = js_to_property_key(ctx, ARG(0));
765
+ if (js_is_exception(key)) return key;
766
+ for (JSValue o = js_is_object(this_val) ? this_val : proto_of_value(ctx, this_val); js_is_object(o); o = js_object_get_prototype_of(ctx, js_as_object(o))) {
767
+ JSPropertyDescriptor d;
768
+ int r = js_get_own_property(ctx, js_as_object(o), key, &d);
769
+ if (r < 0) return JS_EXCEPTION;
770
+ if (r) return (d.has & JS_DESC_VALUE) ? JS_UNDEFINED : getter ? d.get : d.set;
771
+ }
772
+ return JS_UNDEFINED;
773
+ }
774
+
775
+ CORE(object_proto_define_getter) {
776
+ UNUSED_ARGS;
777
+ return define_legacy_accessor(ctx, this_val, argc, argv, true);
778
+ }
779
+
780
+ CORE(object_proto_define_setter) {
781
+ UNUSED_ARGS;
782
+ return define_legacy_accessor(ctx, this_val, argc, argv, false);
783
+ }
784
+
785
+ CORE(object_proto_lookup_getter) {
786
+ UNUSED_ARGS;
787
+ return lookup_legacy_accessor(ctx, this_val, argc, argv, true);
788
+ }
789
+
790
+ CORE(object_proto_lookup_setter) {
791
+ UNUSED_ARGS;
792
+ return lookup_legacy_accessor(ctx, this_val, argc, argv, false);
793
+ }
794
+
795
+ /* ---- Function.prototype (§20.2.3) --------------------------------------------------------------- */
796
+
797
+ BUILTIN(function_proto_call) {
798
+ UNUSED_ARGS;
799
+ if (!js_is_callable(this_val)) return js_throw_type_error(ctx, "Function.prototype.call called on a non-function");
800
+ return js_call(ctx, this_val, ARG(0), argc > 1 ? argc - 1 : 0, argv + (argc > 1 ? 1 : argc));
801
+ }
802
+
803
+ /* CreateListFromArrayLike (§7.3.20), into a GC-visible array. */
804
+ static JSValueArray *list_from_array_like(JSContext *ctx, JSValue v) {
805
+ if (!js_is_object(v)) {
806
+ js_discard(js_throw_type_error(ctx, "CreateListFromArrayLike called on non-object"));
807
+ return NULL;
808
+ }
809
+ double len;
810
+ if (js_length_of_array_like(ctx, v, &len) < 0) return NULL;
811
+ if (len > 65535) {
812
+ js_discard(js_throw_range_error(ctx, "Maximum call stack size exceeded")); /* V8's limit on apply */
813
+ return NULL;
814
+ }
815
+ JSValueArray *list = js_alloc_value_array(ctx, (uint32_t)len);
816
+ for (uint32_t i = 0; i < (uint32_t)len; i++) {
817
+ JSValue x = js_get_value(ctx, v, js_index_key(i));
818
+ if (js_is_exception(x)) return NULL;
819
+ js_store(ctx, &list->cell, &list->values[i], x);
820
+ }
821
+ return list;
822
+ }
823
+
824
+ JSValueArray *js_list_from_array_like(JSContext *ctx, JSValue v) { return list_from_array_like(ctx, v); }
825
+
826
+ BUILTIN(function_proto_apply) {
827
+ UNUSED_ARGS;
828
+ if (!js_is_callable(this_val)) return js_throw_type_error(ctx, "Function.prototype.apply was called on a non-function");
829
+ if (js_is_nullish(ARG(1))) return js_call(ctx, this_val, ARG(0), 0, NULL);
830
+ JSValueArray *list = list_from_array_like(ctx, ARG(1));
831
+ if (!list) return JS_EXCEPTION;
832
+ JSValue r = js_call(ctx, this_val, ARG(0), list->cell.aux, list->values);
833
+ JSValue held = js_cell(&list->cell);
834
+ js_keep_alive(held);
835
+ return r;
836
+ }
837
+
838
+ BUILTIN(function_proto_bind) {
839
+ UNUSED_ARGS;
840
+ if (!js_is_callable(this_val)) return js_throw_type_error(ctx, "Bind must be called on a function");
841
+ return js_bind_function(ctx, this_val, ARG(0), argc > 1 ? argc - 1 : 0, argc > 1 ? argv + 1 : NULL);
842
+ }
843
+
844
+ BUILTIN(function_proto_to_string) {
845
+ UNUSED_ARGS;
846
+ if (!js_is_callable(this_val)) return js_throw_type_error(ctx, "Function.prototype.toString requires that 'this' be a Function");
847
+ /* compiled functions: their exact source text (§20.2.3.5 step 2), a slice of the module's */
848
+ const JSFunctionInfo *info = js_as_function(this_val)->info;
849
+ if (info && info->source_text) {
850
+ JSValue text = js_cell((JSCell *)info->source_text);
851
+ return js_substring(ctx, text, info->source_start, info->source_start + info->source_length);
852
+ }
853
+ /* builtins, bound functions and proxies: NativeFunction syntax */
854
+ if ((js_as_function(this_val)->flags & JS_FN_BOUND) || !js_is_empty(js_proxy_target(this_val))) return cstr(ctx, "function () { [native code] }");
855
+ JSValue name = js_get_value(ctx, this_val, JS_ATOM(name));
856
+ if (js_is_exception(name)) return JS_EXCEPTION;
857
+ JSValue s = cstr(ctx, "function ");
858
+ if (js_is_string(name)) s = js_concat(ctx, s, name);
859
+ if (js_is_exception(s)) return JS_EXCEPTION;
860
+ return js_concat(ctx, s, cstr(ctx, "() { [native code] }"));
861
+ }
862
+
863
+ /* Function(...) compiles source text at runtime: that needs eval, a non-goal (ADR 0009). */
864
+ BUILTIN(function_ctor) {
865
+ UNUSED_ARGS;
866
+ return js_throw_type_error(ctx, "Function() constructor needs eval, which isn't supported");
867
+ }
868
+
869
+ /* eval (§19.2.1): a non-string comes back as is; source text would need compiling at run time.
870
+ * Present so code can reference it (get-intrinsic lists %eval%). */
871
+ CORE(global_eval) {
872
+ UNUSED_ARGS;
873
+ if (!js_is_string(ARG(0))) return ARG(0);
874
+ return js_throw_type_error(ctx, "eval() isn't supported: code can't be compiled at run time");
875
+ }
876
+
877
+ /* A relative index argument (slice, indexOf's fromIndex): clamped to 0..len. */
878
+ static int relative_index(JSContext *ctx, JSValue v, double len, double dflt, double *out) {
879
+ if (js_is_undefined(v)) {
880
+ *out = dflt;
881
+ return 0;
882
+ }
883
+ double d;
884
+ if (to_integer(ctx, &d, v) < 0) return -1;
885
+ *out = d < 0 ? fmax(len + d, 0) : fmin(d, len);
886
+ return 0;
887
+ }
888
+
889
+ /* ---- Number and Boolean (§21.1, §20.3) ---------------------------------------------------------- */
890
+
891
+ BUILTIN(boolean_ctor) {
892
+ UNUSED_ARGS;
893
+ JSValue b = js_bool(js_truthy(ARG(0)));
894
+ if (js_is_undefined(new_target)) return b;
895
+ JSValue proto = js_get_prototype_from_constructor(ctx, new_target, JS_INTRINSIC_BOOLEAN_PROTOTYPE);
896
+ return js_is_exception(proto) ? proto : js_new_wrapper(ctx, b, proto);
897
+ }
898
+
899
+ BUILTIN(boolean_proto_to_string) {
900
+ UNUSED_ARGS;
901
+ JSValue b = js_this_primitive(this_val, js_is_bool);
902
+ if (js_is_empty(b)) return js_throw_type_error(ctx, "Boolean.prototype.toString requires that 'this' be a Boolean");
903
+ return js_as_bool(b) ? JS_ATOM(true) : JS_ATOM(false);
904
+ }
905
+
906
+ BUILTIN(boolean_proto_value_of) {
907
+ UNUSED_ARGS;
908
+ JSValue b = js_this_primitive(this_val, js_is_bool);
909
+ if (js_is_empty(b)) return js_throw_type_error(ctx, "Boolean.prototype.valueOf requires that 'this' be a Boolean");
910
+ return b;
911
+ }
912
+
913
+ /* ---- Realm --------------------------------------------------------------------------------------- */
914
+
915
+ /* A constructor with its prototype, linked both ways, defined on the global object. */
916
+ static JSValue define_constructor(JSContext *ctx, JSObject *global, const char *name, JSNativeFn fn, uint32_t length, JSValue proto) {
917
+ JSValue key = js_atom_from_cstr(ctx, name);
918
+ JSValue ctor = js_new_native(ctx, fn, key, length, JS_FN_STRICT | JS_FN_CONSTRUCTOR);
919
+ js_define_data(ctx, js_as_object(ctor), JS_ATOM(prototype), proto, 0);
920
+ js_define_data(ctx, js_as_object(proto), JS_ATOM(constructor), ctor, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
921
+ js_define_data(ctx, global, key, ctor, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
922
+ return ctor;
923
+ }
924
+
925
+ /* Function.prototype[@@hasInstance](V): OrdinaryHasInstance(this, V) */
926
+ BUILTIN(function_proto_has_instance) {
927
+ (void)callee, (void)new_target;
928
+ return js_ordinary_has_instance(ctx, this_val, ARG(0));
929
+ }
930
+
931
+ void js_builtins_realm_init(JSContext *ctx, JSObject *global) {
932
+ JSValue *in = ctx->intrinsics;
933
+
934
+ JSValue object = define_constructor(ctx, global, "Object", object_ctor, 1, in[JS_INTRINSIC_OBJECT_PROTOTYPE]);
935
+ static const JSBuiltin function_proto[] = {
936
+ JS_BUILTIN_FN("call", function_proto_call, 1),
937
+ JS_BUILTIN_FN("apply", function_proto_apply, 2),
938
+ JS_BUILTIN_FN("bind", function_proto_bind, 1),
939
+ JS_BUILTIN_FN("toString", function_proto_to_string, 0),
940
+ };
941
+ js_define_builtins(ctx, js_as_object(in[JS_INTRINSIC_FUNCTION_PROTOTYPE]), function_proto, JS_COUNTOF(function_proto));
942
+ /* Function.prototype[@@hasInstance] (§20.2.3.6): not writable, enumerable or configurable */
943
+ JSValue has_instance = js_new_native(ctx, function_proto_has_instance, js_new_string_cstr(ctx, "[Symbol.hasInstance]"), 1, JS_FN_STRICT);
944
+ in[JS_INTRINSIC_FUNCTION_HAS_INSTANCE] = has_instance;
945
+ js_define_data(ctx, js_as_object(in[JS_INTRINSIC_FUNCTION_PROTOTYPE]), JS_SYMBOL(hasInstance), has_instance, 0);
946
+ define_constructor(ctx, global, "Function", function_ctor, 1, in[JS_INTRINSIC_FUNCTION_PROTOTYPE]);
947
+
948
+ JSValue core[JS_CORE_TARGET_COUNT];
949
+ core[JS_CORE_OBJECT] = object;
950
+ core[JS_CORE_OBJECT_PROTO] = in[JS_INTRINSIC_OBJECT_PROTOTYPE];
951
+ core[JS_CORE_ARRAY] = js_array_realm_init(ctx, global, define_constructor); /* array.c */
952
+ core[JS_CORE_ARRAY_PROTO] = in[JS_INTRINSIC_ARRAY_PROTOTYPE];
953
+ core[JS_CORE_STRING] = js_string_realm_init(ctx, global, define_constructor); /* string_builtins.c */
954
+ core[JS_CORE_STRING_PROTO] = in[JS_INTRINSIC_STRING_PROTOTYPE];
955
+ core[JS_CORE_NUMBER] = js_number_realm_init(ctx, global, define_constructor); /* number.c */
956
+ core[JS_CORE_NUMBER_PROTO] = in[JS_INTRINSIC_NUMBER_PROTOTYPE];
957
+ core[JS_CORE_GLOBAL] = in[JS_INTRINSIC_GLOBAL_OBJECT];
958
+ /* the methods the program names (js_core.def, in V8's order) */
959
+ js_install_core(ctx, core);
960
+ js_array_realm_finish(ctx);
961
+
962
+ define_constructor(ctx, global, "Boolean", boolean_ctor, 1, in[JS_INTRINSIC_BOOLEAN_PROTOTYPE]);
963
+ static const JSBuiltin boolean_proto[] = {
964
+ JS_BUILTIN_FN("toString", boolean_proto_to_string, 0),
965
+ JS_BUILTIN_FN("valueOf", boolean_proto_value_of, 0),
966
+ };
967
+ js_define_builtins(ctx, js_as_object(in[JS_INTRINSIC_BOOLEAN_PROTOTYPE]), boolean_proto, JS_COUNTOF(boolean_proto));
968
+ }
969
+
970
+ /* ---- Shared with the other built-in files (builtins_util.h) -------------------------------------- */
971
+
972
+ int js_relative_index(JSContext *ctx, JSValue v, double len, double dflt, double *out) {
973
+ return relative_index(ctx, v, len, dflt, out);
974
+ }
975
+
976
+ int js_create_data_property(JSContext *ctx, JSValue o, JSValue key, JSValue v) {
977
+ return create_data_property(ctx, o, key, v);
978
+ }
979
+
980
+ JSValue js_get_own_enumerable_string_keys(JSContext *ctx, JSValue v) {
981
+ return own_string_keys(ctx, v, true);
982
+ }
983
+
984
+ JSValue js_object_to_string_tag(JSContext *ctx, JSValue v) {
985
+ return js_core_object_proto_to_string(ctx, JS_UNDEFINED, v, 0, NULL, JS_UNDEFINED);
986
+ }
987
+