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,530 @@
1
+ /* Function objects and calls (ADR 0006; ECMAScript §10.2, §10.3). */
2
+ #include "js_function.h"
3
+
4
+ #include <math.h>
5
+ #include <stdio.h>
6
+ #include <string.h>
7
+
8
+ #include "builtins_util.h"
9
+ #include "internal.h"
10
+ #include "js_atoms.h"
11
+ #include "js_convert.h"
12
+ #include "js_ops.h"
13
+ #include "jscontext.h"
14
+
15
+ /* cell.reserved: `prototype` hasn't been created yet (ADR 0006: lazily, on first observation) */
16
+ #define PROTOTYPE_PENDING 0x40u
17
+
18
+ /* ---- The class: lazy `prototype`, GC fields ------------------------------- */
19
+
20
+ /* Creates F.prototype = { constructor: F } if it's still pending. */
21
+ static void materialize_prototype(JSContext *ctx, JSObject *f) {
22
+ if (!(f->cell.reserved & PROTOTYPE_PENDING)) return;
23
+ f->cell.reserved &= (uint8_t)~PROTOTYPE_PENDING;
24
+ JSValue proto = js_new_object(ctx);
25
+ js_define_data(ctx, js_as_object(proto), JS_ATOM(constructor), js_object_value(f), JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
26
+ js_define_data(ctx, f, JS_ATOM(prototype), proto, JS_PROP_WRITABLE);
27
+ }
28
+
29
+ static bool is_prototype(JSValue key) { return js_same_bits(key, JS_ATOM(prototype)); }
30
+
31
+ /* Functions with and without a pending `prototype` share shapes, so a missing `prototype` (an
32
+ * arrow's, a bound function's) isn't cached: it would answer for a pending one too. */
33
+ static int fn_get_own(JSContext *ctx, JSObject *f, JSValue key, JSPropertyDescriptor *out) {
34
+ if (!is_prototype(key)) return JS_ORDINARY;
35
+ materialize_prototype(ctx, f);
36
+ return js_ordinary_get_own_property(ctx, f, key, out) > 0 ? JS_ORDINARY : JS_ORDINARY_UNCACHED;
37
+ }
38
+
39
+ static int fn_define(JSContext *ctx, JSObject *f, JSValue key, const JSPropertyDescriptor *desc, bool throw_on_fail) {
40
+ (void)desc, (void)throw_on_fail;
41
+ if (is_prototype(key)) materialize_prototype(ctx, f);
42
+ return JS_ORDINARY;
43
+ }
44
+
45
+ static int fn_delete(JSContext *ctx, JSObject *f, JSValue key, bool throw_on_fail) {
46
+ (void)throw_on_fail;
47
+ if (is_prototype(key)) materialize_prototype(ctx, f);
48
+ return JS_ORDINARY;
49
+ }
50
+
51
+ static uint32_t fn_extra_keys(JSContext *ctx, JSObject *f, JSValue *out) {
52
+ (void)out;
53
+ materialize_prototype(ctx, f); /* enumerating observes it */
54
+ return 0;
55
+ }
56
+
57
+ static void fn_visit(JSCell *c, JSTracer *trc) {
58
+ JSFunction *f = (JSFunction *)c;
59
+ js_trace_value(trc, f->home_object);
60
+ js_trace_value(trc, f->bound_this);
61
+ if (f->env) js_trace_cell(trc, &f->env->cell);
62
+ }
63
+
64
+ const JSClass js_class_function = {
65
+ "Function", sizeof(JSFunction), fn_get_own, fn_define, fn_delete, fn_extra_keys, fn_visit, NULL, NULL,
66
+ };
67
+
68
+ /* ---- Creation --------------------------------------------------------------- */
69
+
70
+ static JSFunction *alloc_function(JSContext *ctx, JSNativeFn entry, uint32_t flags, JSValue name, uint32_t length) {
71
+ /* a generator function inherits from %GeneratorFunction.prototype% (§27.3.3), an async
72
+ * function from %AsyncFunction.prototype% (§27.7.3) */
73
+ bool gen = flags & JS_FN_GENERATOR, async = flags & JS_FN_ASYNC;
74
+ JSIntrinsic proto = gen && async ? JS_INTRINSIC_ASYNC_GENERATOR_FUNCTION_PROTOTYPE
75
+ : gen ? JS_INTRINSIC_GENERATOR_FUNCTION_PROTOTYPE
76
+ : async ? JS_INTRINSIC_ASYNC_FUNCTION_PROTOTYPE
77
+ : JS_INTRINSIC_FUNCTION_PROTOTYPE;
78
+ JSIntrinsic cache = gen && async ? JS_INTRINSIC_ASYNC_GENERATOR_FUNCTION_SHAPE
79
+ : gen ? JS_INTRINSIC_GENERATOR_FUNCTION_SHAPE
80
+ : async ? JS_INTRINSIC_ASYNC_FUNCTION_SHAPE
81
+ : JS_INTRINSIC_FUNCTION_SHAPE;
82
+ /* length, then name (§10.2.9 order): configurable only, in the shape already */
83
+ JSValue keys[2] = { JS_ATOM(length), JS_ATOM(name) };
84
+ JSShape *shape = js_cached_shape(ctx, cache, &js_class_function, ctx->intrinsics[proto], 3, 2, keys, JS_PROP_CONFIGURABLE);
85
+ JSFunction *f = (JSFunction *)js_alloc_object(ctx, JS_CELL_FUNCTION, shape);
86
+ f->entry = entry;
87
+ f->home_object = JS_UNDEFINED;
88
+ f->bound_this = JS_EMPTY;
89
+ f->realm = ctx;
90
+ f->flags = flags;
91
+ js_init_slot(js_object_slot(&f->obj, 0), js_number((double)length));
92
+ js_init_slot(js_object_slot(&f->obj, 1), name);
93
+ return f;
94
+ }
95
+
96
+ JSValue js_new_function(JSContext *ctx, const JSFunctionInfo *info) {
97
+ JSValue name = info->name ? js_cell((JSCell *)info->name) : js_empty_string();
98
+ JSFunction *f = alloc_function(ctx, info->generic, info->flags, name, info->length);
99
+ f->info = info;
100
+ if ((info->flags & (JS_FN_CONSTRUCTOR | JS_FN_ORDINARY)) == (JS_FN_CONSTRUCTOR | JS_FN_ORDINARY))
101
+ f->obj.cell.reserved |= PROTOTYPE_PENDING;
102
+ if (info->flags & JS_FN_GENERATOR) {
103
+ /* its own prototype: what its generators inherit from; no `constructor` (§15.5.4) */
104
+ JSIntrinsic gp = info->flags & JS_FN_ASYNC ? JS_INTRINSIC_ASYNC_GENERATOR_PROTOTYPE : JS_INTRINSIC_GENERATOR_PROTOTYPE;
105
+ JSValue proto = js_new_object_proto(ctx, ctx->intrinsics[gp], JS_DEFAULT_INLINE_SLOTS);
106
+ js_define_data(ctx, &f->obj, JS_ATOM(prototype), proto, JS_PROP_WRITABLE);
107
+ }
108
+ return js_object_value(&f->obj);
109
+ }
110
+
111
+ JSValue js_new_closure(JSContext *ctx, const JSFunctionInfo *info, JSValue env) {
112
+ JSValue f = js_new_function(ctx, info);
113
+ js_as_function(f)->env = js_as_env(env); /* a fresh cell: no barrier needed (ADR 0002) */
114
+ return f;
115
+ }
116
+
117
+ /* ---- Environments ---------------------------------------------------------------- */
118
+
119
+ static void env_visit(JSCell *c, JSTracer *trc) {
120
+ JSEnv *e = (JSEnv *)c;
121
+ if (e->parent) js_trace_cell(trc, &e->parent->cell);
122
+ for (uint32_t i = 0; i < c->aux; i++) js_trace_value(trc, e->vars[i]);
123
+ }
124
+ const JSCellClass js_env_cell_class = { "Env", env_visit, NULL };
125
+
126
+ JSValue js_new_env(JSContext *ctx, JSValue parent, uint32_t count) {
127
+ JSEnv *e = (JSEnv *)js_alloc_cell(ctx, JS_CELL_ENV, sizeof(JSEnv) + (size_t)count * sizeof(JSValue));
128
+ e->cell.aux = count;
129
+ e->parent = js_as_env(parent);
130
+ return js_cell(&e->cell);
131
+ }
132
+
133
+ JSValue js_env_copy(JSContext *ctx, JSValue env) {
134
+ JSEnv *from = js_as_env(env);
135
+ JSValue copy = js_new_env(ctx, from->parent ? js_cell(&from->parent->cell) : JS_UNDEFINED, from->cell.aux);
136
+ JSEnv *to = js_as_env(copy);
137
+ memcpy(to->vars, from->vars, from->cell.aux * sizeof(JSValue)); /* a fresh cell: no barrier */
138
+ return copy;
139
+ }
140
+
141
+ JSValue js_new_native(JSContext *ctx, JSNativeFn fn, JSValue name, uint32_t length, uint32_t flags) {
142
+ return js_object_value(&alloc_function(ctx, fn, flags, name, length)->obj);
143
+ }
144
+
145
+ JSValue js_define_method(JSContext *ctx, JSObject *o, const char *name, JSNativeFn fn, uint32_t length) {
146
+ JSValue key = js_atom_from_cstr(ctx, name);
147
+ JSValue f = js_new_native(ctx, fn, key, length, JS_FN_STRICT);
148
+ js_define_data(ctx, o, key, f, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
149
+ return f;
150
+ }
151
+
152
+ /* ---- Calls ---------------------------------------------------------------------- */
153
+
154
+ static JSValue not_callable(JSContext *ctx, JSValue f, const char *callee_text, const char *what) {
155
+ if (callee_text) return js_throw_type_error(ctx, "%s is not a %s", callee_text, what);
156
+ /* no source text: describe the value like V8 does for primitives */
157
+ char buf[64] = "value";
158
+ if (js_is_number(f) || js_is_bool(f) || js_is_nullish(f)) {
159
+ JSValue s = js_to_string(ctx, f);
160
+ if (!js_is_exception(s)) buf[js_view_to_utf8(js_string_view(ctx, s), buf, sizeof buf - 1)] = '\0';
161
+ }
162
+ return js_throw_type_error(ctx, "%s is not a %s", buf, what);
163
+ }
164
+
165
+ JSValue js_call_site(JSContext *ctx, JSValue f, JSValue this_val, uint32_t argc, const JSValue *argv, const char *callee_text) {
166
+ if (JS_UNLIKELY(!js_is_function(f))) return not_callable(ctx, f, callee_text, "function");
167
+ JSFunction *fn = js_as_function(f);
168
+ if (JS_UNLIKELY(fn->flags & JS_FN_CLASS_CTOR)) {
169
+ char name[64] = "";
170
+ JSValue n = js_get_value(ctx, f, JS_ATOM(name));
171
+ if (js_is_exception(n)) return JS_EXCEPTION;
172
+ if (js_is_string(n)) name[js_view_to_utf8(js_string_view(ctx, n), name, sizeof name - 1)] = '\0';
173
+ return js_throw_type_error(ctx, "Class constructor %s cannot be invoked without 'new'", name);
174
+ }
175
+ /* the callee's own realm; a proxy has none (its traps run in the caller's) */
176
+ return fn->entry(JS_UNLIKELY(fn->flags & JS_FN_PROXY) ? ctx : fn->realm, f, this_val, argc, argv, JS_UNDEFINED);
177
+ }
178
+
179
+ JSValue js_call(JSContext *ctx, JSValue f, JSValue this_val, uint32_t argc, const JSValue *argv) {
180
+ return js_call_site(ctx, f, this_val, argc, argv, NULL);
181
+ }
182
+
183
+ /* The arguments of a spread call, from the array the caller built (dense, no holes:
184
+ * js_array_append/js_array_spread only push). The array stays referenced by `args`. */
185
+ static const JSValue *spread_args(JSValue args, uint32_t *argc) {
186
+ JSObject *a = js_as_object(args);
187
+ *argc = js_array_length(a);
188
+ return *argc ? a->elements->data : NULL;
189
+ }
190
+
191
+ JSValue js_call_spread(JSContext *ctx, JSValue f, JSValue this_val, JSValue args, const char *callee_text) {
192
+ uint32_t argc;
193
+ const JSValue *argv = spread_args(args, &argc);
194
+ JSValue r = js_call_site(ctx, f, this_val, argc, argv, callee_text);
195
+ js_keep_alive(args);
196
+ return r;
197
+ }
198
+
199
+ JSValue js_construct_spread(JSContext *ctx, JSValue f, JSValue args, const char *callee_text) {
200
+ uint32_t argc;
201
+ const JSValue *argv = spread_args(args, &argc);
202
+ JSValue r = js_construct(ctx, f, argc, argv, JS_UNDEFINED, callee_text);
203
+ js_keep_alive(args);
204
+ return r;
205
+ }
206
+
207
+ /* GetFunctionRealm (§7.3.24): a function's own realm, a proxy's target's; NULL with a
208
+ * TypeError for a revoked proxy. */
209
+ JSContext *js_function_realm(JSContext *ctx, JSValue f) {
210
+ for (;;) {
211
+ if (!js_is_function(f)) return ctx;
212
+ if (!(js_as_function(f)->flags & JS_FN_PROXY)) return js_as_function(f)->realm;
213
+ f = js_proxy_target(f);
214
+ if (js_is_null(f)) {
215
+ js_discard(js_throw_type_error(ctx, "Cannot perform 'construct' on a proxy that has been revoked"));
216
+ return NULL;
217
+ }
218
+ }
219
+ }
220
+
221
+ JSValue js_get_prototype_from_constructor(JSContext *ctx, JSValue new_target, JSIntrinsic fallback) {
222
+ JSValue proto = js_get_value(ctx, new_target, JS_ATOM(prototype));
223
+ if (js_is_exception(proto) || js_is_object(proto)) return proto;
224
+ JSContext *realm = js_function_realm(ctx, new_target);
225
+ return realm ? realm->intrinsics[fallback] : JS_EXCEPTION;
226
+ }
227
+
228
+ JSValue js_create_from_constructor(JSContext *ctx, JSValue new_target, JSIntrinsic fallback) {
229
+ JSValue proto = js_get_prototype_from_constructor(ctx, new_target, fallback);
230
+ if (js_is_exception(proto)) return JS_EXCEPTION;
231
+ return js_new_object_proto(ctx, proto, JS_DEFAULT_INLINE_SLOTS);
232
+ }
233
+
234
+ JSValue js_construct(JSContext *ctx, JSValue f, uint32_t argc, const JSValue *argv, JSValue new_target, const char *callee_text) {
235
+ if (JS_UNLIKELY(!js_is_constructor(f))) return not_callable(ctx, f, callee_text, "constructor");
236
+ JSFunction *fn = js_as_function(f);
237
+ if (js_is_undefined(new_target)) new_target = f;
238
+ if (!(fn->flags & JS_FN_ORDINARY)) /* builtins create their own object; a derived constructor gets it from super() */
239
+ return fn->entry(fn->flags & JS_FN_PROXY ? ctx : fn->realm, f, JS_UNDEFINED, argc, argv, new_target);
240
+ /* [[Construct]] of an ordinary function (§10.2.2): this = a new object; an object result wins */
241
+ JSValue this_val = js_create_from_constructor(fn->realm, new_target, JS_INTRINSIC_OBJECT_PROTOTYPE);
242
+ if (js_is_exception(this_val)) return JS_EXCEPTION;
243
+ JSValue r = fn->entry(fn->realm, f, this_val, argc, argv, new_target);
244
+ if (js_is_exception(r)) return JS_EXCEPTION;
245
+ return js_is_object(r) ? r : this_val;
246
+ }
247
+
248
+ /* ---- Classes and super ------------------------------------------------------------- */
249
+
250
+ static void describe_value(JSContext *ctx, JSValue v, char *buf, size_t cap) {
251
+ snprintf(buf, cap, "%s", js_is_object(v) ? "[object Object]" : "value");
252
+ if (js_is_object(v)) return;
253
+ JSValue s = js_to_string(ctx, v);
254
+ if (js_is_exception(s)) {
255
+ js_discard(js_take_exception(ctx));
256
+ return;
257
+ }
258
+ buf[js_view_to_utf8(js_string_view(ctx, s), buf, cap - 1)] = '\0';
259
+ }
260
+
261
+ JSValue js_class_setup(JSContext *ctx, JSValue ctor, JSValue heritage) {
262
+ JSValue proto_parent = ctx->intrinsics[JS_INTRINSIC_OBJECT_PROTOTYPE];
263
+ JSValue ctor_parent = ctx->intrinsics[JS_INTRINSIC_FUNCTION_PROTOTYPE];
264
+ if (js_is_null(heritage)) {
265
+ proto_parent = JS_NULL;
266
+ } else if (!js_is_empty(heritage)) {
267
+ char buf[64];
268
+ if (!js_is_constructor(heritage)) {
269
+ describe_value(ctx, heritage, buf, sizeof buf);
270
+ return js_throw_type_error(ctx, "Class extends value %s is not a constructor or null", buf);
271
+ }
272
+ proto_parent = js_get_value(ctx, heritage, JS_ATOM(prototype));
273
+ if (js_is_exception(proto_parent)) return JS_EXCEPTION;
274
+ if (!js_is_object(proto_parent) && !js_is_null(proto_parent)) {
275
+ describe_value(ctx, proto_parent, buf, sizeof buf);
276
+ return js_throw_type_error(ctx, "Class extends value does not have valid prototype property %s", buf);
277
+ }
278
+ ctor_parent = heritage;
279
+ }
280
+ JSValue proto = js_new_object_proto(ctx, proto_parent, JS_DEFAULT_INLINE_SLOTS);
281
+ JSObject *f = js_as_object(ctor);
282
+ f->cell.reserved &= (uint8_t)~PROTOTYPE_PENDING; /* set here, not lazily */
283
+ if (!js_same_bits(ctor_parent, ctx->intrinsics[JS_INTRINSIC_FUNCTION_PROTOTYPE])) {
284
+ int r = js_set_prototype_of(ctx, f, ctor_parent); /* a fresh function: can't fail */
285
+ (void)r;
286
+ }
287
+ js_define_data(ctx, f, JS_ATOM(prototype), proto, 0);
288
+ js_define_data(ctx, js_as_object(proto), JS_ATOM(constructor), ctor, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
289
+ js_set_home_object(ctx, ctor, proto);
290
+ return proto;
291
+ }
292
+
293
+ void js_set_home_object(JSContext *ctx, JSValue fn, JSValue home) {
294
+ JSFunction *f = js_as_function(fn);
295
+ js_store(ctx, &f->obj.cell, &f->home_object, home);
296
+ }
297
+
298
+ void js_define_class_member(JSContext *ctx, JSObject *target, JSValue key, int kind, JSValue fn) {
299
+ JSPropertyDescriptor d = { JS_DESC_ENUMERABLE | JS_DESC_CONFIGURABLE, JS_PROP_CONFIGURABLE, JS_UNDEFINED, JS_UNDEFINED, JS_UNDEFINED };
300
+ if (kind == 0) {
301
+ d.has |= JS_DESC_VALUE | JS_DESC_WRITABLE;
302
+ d.attrs |= JS_PROP_WRITABLE;
303
+ d.value = fn;
304
+ } else if (kind == 1) {
305
+ d.has |= JS_DESC_GET;
306
+ d.get = fn;
307
+ } else {
308
+ d.has |= JS_DESC_SET;
309
+ d.set = fn;
310
+ }
311
+ int r = js_define_own_property(ctx, target, key, &d, true); /* e.g. a static "prototype" is an early error */
312
+ if (r < 0) js_discard(js_take_exception(ctx));
313
+ }
314
+
315
+ /* GetSuperBase: the home object's [[Prototype]]. */
316
+ static JSValue super_base(JSContext *ctx, JSValue callee) {
317
+ JSValue home = js_as_function(callee)->home_object;
318
+ if (!js_is_object(home)) return js_throw_syntax_error(ctx, "'super' keyword unexpected here");
319
+ JSValue base = js_get_prototype_of(js_as_object(home));
320
+ if (!js_is_object(base))
321
+ return js_throw_type_error(ctx, "Cannot read properties of %s (super)", js_is_null(base) ? "null" : "undefined");
322
+ return base;
323
+ }
324
+
325
+ JSValue js_super_get(JSContext *ctx, JSValue callee, JSValue key, JSValue this_val) {
326
+ JSValue base = super_base(ctx, callee);
327
+ if (js_is_exception(base)) return JS_EXCEPTION;
328
+ JSValue k = js_to_property_key(ctx, key);
329
+ if (js_is_exception(k)) return JS_EXCEPTION;
330
+ return js_get(ctx, js_as_object(base), k, this_val);
331
+ }
332
+
333
+ int js_super_set(JSContext *ctx, JSValue callee, JSValue key, JSValue v, JSValue this_val) {
334
+ JSValue base = super_base(ctx, callee);
335
+ if (js_is_exception(base)) return -1;
336
+ JSValue k = js_to_property_key(ctx, key);
337
+ if (js_is_exception(k)) return -1;
338
+ return js_set(ctx, js_as_object(base), k, v, this_val, true); /* class code is strict */
339
+ }
340
+
341
+ JSValue js_super_construct(JSContext *ctx, JSValue callee, JSValue new_target, uint32_t argc, const JSValue *argv) {
342
+ JSValue parent = js_get_prototype_of(js_as_object(callee));
343
+ if (!js_is_constructor(parent)) return js_throw_type_error(ctx, "Super constructor is not a constructor");
344
+ return js_construct(ctx, parent, argc, argv, new_target, NULL);
345
+ }
346
+
347
+ JSValue js_super_construct_spread(JSContext *ctx, JSValue callee, JSValue new_target, JSValue args) {
348
+ JSObject *a = js_as_object(args);
349
+ uint32_t argc = js_array_length(a);
350
+ JSValue r = js_super_construct(ctx, callee, new_target, argc, argc ? a->elements->data : NULL);
351
+ js_keep_alive(args);
352
+ return r;
353
+ }
354
+
355
+ JSValue js_bind_this(JSContext *ctx, JSValue current, JSValue v) {
356
+ if (!js_is_empty(current)) return js_throw_reference_error(ctx, "Super constructor may only be called once");
357
+ return v;
358
+ }
359
+
360
+ JSValue js_check_this(JSContext *ctx, JSValue this_val) {
361
+ if (js_is_empty(this_val))
362
+ return js_throw_reference_error(ctx, "Must call super constructor in derived class before accessing 'this' or returning from derived constructor");
363
+ return this_val;
364
+ }
365
+
366
+ JSValue js_derived_return(JSContext *ctx, JSValue v, JSValue this_val) {
367
+ if (js_is_object(v)) return v;
368
+ if (!js_is_undefined(v)) return js_throw_type_error(ctx, "Derived constructors may only return object or undefined");
369
+ return js_check_this(ctx, this_val);
370
+ }
371
+
372
+ /* ---- Bound functions (§10.4.1) ------------------------------------------------------ */
373
+
374
+ /* The bound arguments live in an environment cell: a GC'd array the function already traces. */
375
+ static JSValue bound_entry(JSContext *ctx, JSValue callee, JSValue this_val, uint32_t argc, const JSValue *argv, JSValue new_target) {
376
+ (void)this_val;
377
+ JSFunction *b = js_as_function(callee);
378
+ JSValue target = b->home_object;
379
+ uint32_t nbound = b->env ? b->env->cell.aux : 0;
380
+ JSValueArray *all = js_alloc_value_array(ctx, nbound + argc); /* GC-visible while the callee runs */
381
+ for (uint32_t i = 0; i < nbound; i++) all->values[i] = b->env->vars[i];
382
+ for (uint32_t i = 0; i < argc; i++) all->values[nbound + i] = argv[i];
383
+ JSValue held = js_cell(&all->cell);
384
+ JSValue r;
385
+ if (js_is_undefined(new_target)) {
386
+ r = js_call(ctx, target, b->bound_this, nbound + argc, all->values);
387
+ } else {
388
+ /* new on a bound function: construct the target; new_target, if it's the bound function, becomes the target */
389
+ if (js_same_bits(new_target, callee)) new_target = target;
390
+ r = js_construct(ctx, target, nbound + argc, all->values, new_target, NULL);
391
+ }
392
+ js_keep_alive(held);
393
+ return r;
394
+ }
395
+
396
+ JSValue js_bind_function(JSContext *ctx, JSValue target, JSValue bound_this, uint32_t argc, const JSValue *argv) {
397
+ /* length: max(0, target.length - argc) when target has an own numeric length (§20.2.3.2 steps 4–7) */
398
+ double length = 0;
399
+ JSPropertyDescriptor d;
400
+ int has = js_get_own_property(ctx, js_as_object(target), JS_ATOM(length), &d);
401
+ if (has < 0) return JS_EXCEPTION;
402
+ if (has) {
403
+ JSValue len = js_get_value(ctx, target, JS_ATOM(length));
404
+ if (js_is_exception(len)) return JS_EXCEPTION;
405
+ if (js_is_number(len)) {
406
+ double t = js_as_number(len);
407
+ if (t == INFINITY) length = INFINITY;
408
+ else if (t != -INFINITY && t == t) {
409
+ t = trunc(t) - argc;
410
+ length = t > 0 ? t : 0;
411
+ }
412
+ }
413
+ }
414
+ JSValue name = js_get_value(ctx, target, JS_ATOM(name));
415
+ if (js_is_exception(name)) return JS_EXCEPTION;
416
+ if (!js_is_string(name)) name = js_empty_string();
417
+ JSValue full = js_concat(ctx, js_new_string_cstr(ctx, "bound "), name);
418
+ if (js_is_exception(full)) return JS_EXCEPTION;
419
+ uint32_t flags = JS_FN_BOUND | (js_is_constructor(target) ? JS_FN_CONSTRUCTOR : 0);
420
+ JSValue f = js_new_native(ctx, bound_entry, full, 0, flags);
421
+ JSFunction *b = js_as_function(f);
422
+ /* the bound function's [[Prototype]] is the target's */
423
+ JSValue proto = js_object_get_prototype_of(ctx, js_as_object(target));
424
+ if (js_is_exception(proto)) return proto;
425
+ if (!js_same_bits(proto, ctx->intrinsics[JS_INTRINSIC_FUNCTION_PROTOTYPE])) {
426
+ int r = js_set_prototype_of(ctx, &b->obj, proto);
427
+ (void)r;
428
+ }
429
+ JSPropertyDescriptor len = { JS_DESC_VALUE, 0, js_number(length), JS_UNDEFINED, JS_UNDEFINED };
430
+ int r = js_define_own_property(ctx, &b->obj, JS_ATOM(length), &len, false);
431
+ (void)r;
432
+ js_store(ctx, &b->obj.cell, &b->home_object, target);
433
+ js_store(ctx, &b->obj.cell, &b->bound_this, bound_this);
434
+ if (argc) {
435
+ JSValue env = js_new_env(ctx, JS_UNDEFINED, argc);
436
+ for (uint32_t i = 0; i < argc; i++) js_as_env(env)->vars[i] = argv[i];
437
+ b->env = js_as_env(env);
438
+ }
439
+ return f;
440
+ }
441
+
442
+ /* ---- instanceof and in ------------------------------------------------------------ */
443
+
444
+ /* OrdinaryHasInstance (§7.3.21): a bound function defers to its target. */
445
+ JSValue js_ordinary_has_instance(JSContext *ctx, JSValue target, JSValue v) {
446
+ if (!js_is_callable(target)) return JS_FALSE;
447
+ if (js_as_function(target)->flags & JS_FN_BOUND) return js_instanceof(ctx, v, js_as_function(target)->home_object);
448
+ if (!js_is_object(v)) return JS_FALSE;
449
+ JSValue proto = js_get_value(ctx, target, JS_ATOM(prototype));
450
+ if (js_is_exception(proto)) return JS_EXCEPTION;
451
+ if (!js_is_object(proto)) return js_throw_type_error(ctx, "Function has non-object prototype in instanceof check");
452
+ for (JSValue p = js_object_get_prototype_of(ctx, js_as_object(v));; p = js_object_get_prototype_of(ctx, js_as_object(p))) {
453
+ if (js_is_exception(p)) return p;
454
+ if (!js_is_object(p)) return JS_FALSE;
455
+ if (js_same_bits(p, proto)) return JS_TRUE;
456
+ }
457
+ }
458
+
459
+ /* InstanceofOperator (§13.10.2): the target's @@hasInstance decides, when it has one; the
460
+ * built-in Function.prototype[@@hasInstance] goes straight to OrdinaryHasInstance. */
461
+ JSValue js_instanceof(JSContext *ctx, JSValue v, JSValue target) {
462
+ if (!js_is_object(target)) return js_throw_type_error(ctx, "Right-hand side of 'instanceof' is not an object");
463
+ JSValue handler = js_get_value(ctx, target, JS_SYMBOL(hasInstance));
464
+ if (js_is_exception(handler)) return handler;
465
+ if (!js_is_nullish(handler) && !js_same_bits(handler, ctx->intrinsics[JS_INTRINSIC_FUNCTION_HAS_INSTANCE])) {
466
+ if (!js_is_callable(handler)) {
467
+ char d[96];
468
+ js_describe_value(ctx, handler, d, sizeof d);
469
+ return js_throw_type_error(ctx, "%s%s is not a function", js_is_number(handler) ? "number " : "", d);
470
+ }
471
+ JSValue r = js_call(ctx, handler, target, 1, &v);
472
+ return js_is_exception(r) ? r : js_bool(js_truthy(r));
473
+ }
474
+ if (!js_is_callable(target)) return js_throw_type_error(ctx, "Right-hand side of 'instanceof' is not callable");
475
+ return js_ordinary_has_instance(ctx, target, v);
476
+ }
477
+
478
+ JSValue js_in(JSContext *ctx, JSValue key, JSValue obj) {
479
+ if (!js_is_object(obj)) {
480
+ char k[64] = "", o[64] = "";
481
+ JSValue ks = js_to_string(ctx, key);
482
+ if (js_is_exception(ks)) return JS_EXCEPTION;
483
+ k[js_view_to_utf8(js_string_view(ctx, ks), k, sizeof k - 1)] = '\0';
484
+ JSValue os = js_is_string(obj) ? obj : js_to_string(ctx, obj);
485
+ if (js_is_exception(os)) return JS_EXCEPTION;
486
+ o[js_view_to_utf8(js_string_view(ctx, os), o, sizeof o - 1)] = '\0';
487
+ return js_throw_type_error(ctx, "Cannot use 'in' operator to search for '%s' in %s", k, o);
488
+ }
489
+ JSValue k = js_to_property_key(ctx, key);
490
+ if (js_is_exception(k)) return JS_EXCEPTION;
491
+ int r = js_has_property(ctx, js_as_object(obj), k);
492
+ return r < 0 ? JS_EXCEPTION : js_bool(r);
493
+ }
494
+
495
+ /* ---- Realm --------------------------------------------------------------------- */
496
+
497
+ /* %Function.prototype% (§20.2.3) is itself a function: it accepts anything and returns undefined. */
498
+ static JSValue function_prototype_call(JSContext *ctx, JSValue callee, JSValue this_val,
499
+ uint32_t argc, const JSValue *argv, JSValue new_target) {
500
+ (void)ctx, (void)callee, (void)this_val, (void)argc, (void)argv, (void)new_target;
501
+ return JS_UNDEFINED;
502
+ }
503
+
504
+ /* %ThrowTypeError% (§10.2.4.1). */
505
+ static JSValue throw_type_error_fn(JSContext *ctx, JSValue callee, JSValue this_val,
506
+ uint32_t argc, const JSValue *argv, JSValue new_target) {
507
+ (void)callee, (void)this_val, (void)argc, (void)argv, (void)new_target;
508
+ return js_throw_type_error(ctx, "'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them");
509
+ }
510
+
511
+ void js_function_realm_init(JSContext *ctx) {
512
+ JSShape *shape = js_shape_root(ctx, &js_class_function, ctx->intrinsics[JS_INTRINSIC_OBJECT_PROTOTYPE], 3);
513
+ JSFunction *f = (JSFunction *)js_alloc_object(ctx, JS_CELL_FUNCTION, shape);
514
+ f->entry = function_prototype_call;
515
+ f->home_object = JS_UNDEFINED;
516
+ f->bound_this = JS_EMPTY;
517
+ f->realm = ctx;
518
+ ctx->intrinsics[JS_INTRINSIC_FUNCTION_PROTOTYPE] = js_object_value(&f->obj);
519
+ js_define_data(ctx, &f->obj, JS_ATOM(length), js_int32(0), JS_PROP_CONFIGURABLE);
520
+ js_define_data(ctx, &f->obj, JS_ATOM(name), js_empty_string(), JS_PROP_CONFIGURABLE);
521
+
522
+ /* %ThrowTypeError%: length and name fixed, not extensible */
523
+ JSValue thrower = js_new_native(ctx, throw_type_error_fn, js_empty_string(), 0, JS_FN_STRICT);
524
+ JSPropertyDescriptor fixed = { JS_DESC_CONFIGURABLE, 0, JS_UNDEFINED, JS_UNDEFINED, JS_UNDEFINED };
525
+ int r = js_define_own_property(ctx, js_as_object(thrower), JS_ATOM(length), &fixed, false);
526
+ r = js_define_own_property(ctx, js_as_object(thrower), JS_ATOM(name), &fixed, false);
527
+ r = js_prevent_extensions(ctx, js_as_object(thrower));
528
+ (void)r;
529
+ ctx->intrinsics[JS_INTRINSIC_THROW_TYPE_ERROR] = thrower;
530
+ }