@scriptc/runtime 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/package.json +16 -6
- package/src/scr_array.c +488 -0
- package/src/scr_assert.c +1393 -0
- package/src/scr_async.c +2593 -0
- package/src/scr_async_dyn.c +607 -0
- package/src/scr_bytes.c +1425 -0
- package/src/scr_bytes_io.c +161 -0
- package/src/scr_child.c +3587 -0
- package/src/scr_closure.c +214 -0
- package/src/scr_console.c +143 -0
- package/src/scr_cycle.c +218 -0
- package/src/scr_dc.c +805 -0
- package/src/scr_dgram.c +1007 -0
- package/src/scr_dyn_handle.c +154 -0
- package/src/scr_dyn_invoke.c +644 -0
- package/src/scr_error.c +332 -0
- package/src/scr_events.c +714 -0
- package/src/scr_events_emitter.c +699 -0
- package/src/scr_exception.c +242 -0
- package/src/scr_fetch.c +1130 -0
- package/src/scr_fetch_curl.c +654 -0
- package/src/scr_http.c +3482 -0
- package/src/scr_http2.c +3030 -0
- package/src/scr_inspect.c +803 -0
- package/src/scr_inspect_island.c +51 -0
- package/src/scr_island.c +9363 -0
- package/src/scr_json.c +2151 -0
- package/src/scr_lib.c +3612 -0
- package/src/scr_loop_epoll.c +241 -0
- package/src/scr_loop_kqueue.c +121 -0
- package/src/scr_loop_wsapoll.c +208 -0
- package/src/scr_map.c +591 -0
- package/src/scr_net.c +3017 -0
- package/src/scr_net_island.c +458 -0
- package/src/scr_number.c +115 -0
- package/src/scr_object.c +25 -0
- package/src/scr_path.c +1266 -0
- package/src/scr_platform.h +119 -0
- package/src/scr_readline.c +287 -0
- package/src/scr_regex.c +1080 -0
- package/src/scr_runtime.h +5036 -0
- package/src/scr_stream.c +2877 -0
- package/src/scr_string.c +1176 -0
- package/src/scr_symbol.c +132 -0
- package/src/scr_test.c +662 -0
- package/src/scr_tls.c +1520 -0
- package/src/scr_union.c +105 -0
- package/src/scr_url.c +911 -0
- package/src/scr_url_internal.h +29 -0
- package/src/scr_url_params.c +561 -0
- package/src/scr_watch.c +568 -0
- package/src/scr_web.c +1778 -0
- package/src/scr_win.c +76 -0
- package/src/scr_zlib.c +197 -0
- package/src/scr_zlib_island.c +15 -0
- package/vendor/README.md +52 -0
- package/vendor/curl/COPYRIGHT +534 -0
- package/vendor/curl/include/curl/curl.h +3214 -0
- package/vendor/curl/include/curl/curlver.h +79 -0
- package/vendor/curl/include/curl/easy.h +125 -0
- package/vendor/curl/include/curl/header.h +74 -0
- package/vendor/curl/include/curl/mprintf.h +52 -0
- package/vendor/curl/include/curl/multi.h +460 -0
- package/vendor/curl/include/curl/options.h +70 -0
- package/vendor/curl/include/curl/stdcheaders.h +35 -0
- package/vendor/curl/include/curl/system.h +508 -0
- package/vendor/curl/include/curl/typecheck-gcc.h +716 -0
- package/vendor/curl/include/curl/urlapi.h +149 -0
- package/vendor/curl/include/curl/websockets.h +84 -0
- package/vendor/mbedtls/LICENSE +553 -0
- package/vendor/mbedtls/include/CMakeLists.txt +22 -0
- package/vendor/mbedtls/include/mbedtls/aes.h +631 -0
- package/vendor/mbedtls/include/mbedtls/aria.h +343 -0
- package/vendor/mbedtls/include/mbedtls/asn1.h +642 -0
- package/vendor/mbedtls/include/mbedtls/asn1write.h +390 -0
- package/vendor/mbedtls/include/mbedtls/base64.h +82 -0
- package/vendor/mbedtls/include/mbedtls/bignum.h +1088 -0
- package/vendor/mbedtls/include/mbedtls/block_cipher.h +76 -0
- package/vendor/mbedtls/include/mbedtls/build_info.h +194 -0
- package/vendor/mbedtls/include/mbedtls/camellia.h +305 -0
- package/vendor/mbedtls/include/mbedtls/ccm.h +526 -0
- package/vendor/mbedtls/include/mbedtls/chacha20.h +209 -0
- package/vendor/mbedtls/include/mbedtls/chachapoly.h +351 -0
- package/vendor/mbedtls/include/mbedtls/check_config.h +1149 -0
- package/vendor/mbedtls/include/mbedtls/cipher.h +1250 -0
- package/vendor/mbedtls/include/mbedtls/cmac.h +246 -0
- package/vendor/mbedtls/include/mbedtls/compat-2.x.h +46 -0
- package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_crypto.h +578 -0
- package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_from_psa.h +873 -0
- package/vendor/mbedtls/include/mbedtls/config_adjust_psa_from_legacy.h +359 -0
- package/vendor/mbedtls/include/mbedtls/config_adjust_psa_superset_legacy.h +145 -0
- package/vendor/mbedtls/include/mbedtls/config_adjust_ssl.h +91 -0
- package/vendor/mbedtls/include/mbedtls/config_adjust_x509.h +35 -0
- package/vendor/mbedtls/include/mbedtls/config_psa.h +61 -0
- package/vendor/mbedtls/include/mbedtls/constant_time.h +36 -0
- package/vendor/mbedtls/include/mbedtls/ctr_drbg.h +596 -0
- package/vendor/mbedtls/include/mbedtls/debug.h +156 -0
- package/vendor/mbedtls/include/mbedtls/des.h +385 -0
- package/vendor/mbedtls/include/mbedtls/dhm.h +972 -0
- package/vendor/mbedtls/include/mbedtls/ecdh.h +455 -0
- package/vendor/mbedtls/include/mbedtls/ecdsa.h +674 -0
- package/vendor/mbedtls/include/mbedtls/ecjpake.h +298 -0
- package/vendor/mbedtls/include/mbedtls/ecp.h +1517 -0
- package/vendor/mbedtls/include/mbedtls/entropy.h +274 -0
- package/vendor/mbedtls/include/mbedtls/error.h +201 -0
- package/vendor/mbedtls/include/mbedtls/gcm.h +387 -0
- package/vendor/mbedtls/include/mbedtls/hkdf.h +124 -0
- package/vendor/mbedtls/include/mbedtls/hmac_drbg.h +434 -0
- package/vendor/mbedtls/include/mbedtls/lms.h +440 -0
- package/vendor/mbedtls/include/mbedtls/mbedtls_config.h +4446 -0
- package/vendor/mbedtls/include/mbedtls/md.h +526 -0
- package/vendor/mbedtls/include/mbedtls/md5.h +190 -0
- package/vendor/mbedtls/include/mbedtls/memory_buffer_alloc.h +142 -0
- package/vendor/mbedtls/include/mbedtls/net_sockets.h +299 -0
- package/vendor/mbedtls/include/mbedtls/nist_kw.h +166 -0
- package/vendor/mbedtls/include/mbedtls/oid.h +727 -0
- package/vendor/mbedtls/include/mbedtls/pem.h +160 -0
- package/vendor/mbedtls/include/mbedtls/pk.h +1303 -0
- package/vendor/mbedtls/include/mbedtls/pkcs12.h +186 -0
- package/vendor/mbedtls/include/mbedtls/pkcs5.h +198 -0
- package/vendor/mbedtls/include/mbedtls/pkcs7.h +252 -0
- package/vendor/mbedtls/include/mbedtls/platform.h +516 -0
- package/vendor/mbedtls/include/mbedtls/platform_time.h +79 -0
- package/vendor/mbedtls/include/mbedtls/platform_util.h +247 -0
- package/vendor/mbedtls/include/mbedtls/poly1305.h +168 -0
- package/vendor/mbedtls/include/mbedtls/private_access.h +20 -0
- package/vendor/mbedtls/include/mbedtls/psa_util.h +207 -0
- package/vendor/mbedtls/include/mbedtls/ripemd160.h +136 -0
- package/vendor/mbedtls/include/mbedtls/rsa.h +1170 -0
- package/vendor/mbedtls/include/mbedtls/sha1.h +219 -0
- package/vendor/mbedtls/include/mbedtls/sha256.h +200 -0
- package/vendor/mbedtls/include/mbedtls/sha3.h +172 -0
- package/vendor/mbedtls/include/mbedtls/sha512.h +208 -0
- package/vendor/mbedtls/include/mbedtls/ssl.h +5887 -0
- package/vendor/mbedtls/include/mbedtls/ssl_cache.h +187 -0
- package/vendor/mbedtls/include/mbedtls/ssl_ciphersuites.h +482 -0
- package/vendor/mbedtls/include/mbedtls/ssl_cookie.h +106 -0
- package/vendor/mbedtls/include/mbedtls/ssl_ticket.h +199 -0
- package/vendor/mbedtls/include/mbedtls/threading.h +167 -0
- package/vendor/mbedtls/include/mbedtls/timing.h +94 -0
- package/vendor/mbedtls/include/mbedtls/version.h +78 -0
- package/vendor/mbedtls/include/mbedtls/x509.h +500 -0
- package/vendor/mbedtls/include/mbedtls/x509_crl.h +184 -0
- package/vendor/mbedtls/include/mbedtls/x509_crt.h +1208 -0
- package/vendor/mbedtls/include/mbedtls/x509_csr.h +382 -0
- package/vendor/mbedtls/include/psa/build_info.h +20 -0
- package/vendor/mbedtls/include/psa/crypto.h +4998 -0
- package/vendor/mbedtls/include/psa/crypto_adjust_auto_enabled.h +31 -0
- package/vendor/mbedtls/include/psa/crypto_adjust_config_dependencies.h +51 -0
- package/vendor/mbedtls/include/psa/crypto_adjust_config_key_pair_types.h +101 -0
- package/vendor/mbedtls/include/psa/crypto_adjust_config_synonyms.h +49 -0
- package/vendor/mbedtls/include/psa/crypto_builtin_composites.h +214 -0
- package/vendor/mbedtls/include/psa/crypto_builtin_key_derivation.h +118 -0
- package/vendor/mbedtls/include/psa/crypto_builtin_primitives.h +114 -0
- package/vendor/mbedtls/include/psa/crypto_compat.h +230 -0
- package/vendor/mbedtls/include/psa/crypto_config.h +145 -0
- package/vendor/mbedtls/include/psa/crypto_driver_common.h +44 -0
- package/vendor/mbedtls/include/psa/crypto_driver_contexts_composites.h +151 -0
- package/vendor/mbedtls/include/psa/crypto_driver_contexts_key_derivation.h +52 -0
- package/vendor/mbedtls/include/psa/crypto_driver_contexts_primitives.h +105 -0
- package/vendor/mbedtls/include/psa/crypto_extra.h +2145 -0
- package/vendor/mbedtls/include/psa/crypto_legacy.h +88 -0
- package/vendor/mbedtls/include/psa/crypto_platform.h +102 -0
- package/vendor/mbedtls/include/psa/crypto_se_driver.h +1383 -0
- package/vendor/mbedtls/include/psa/crypto_sizes.h +1319 -0
- package/vendor/mbedtls/include/psa/crypto_struct.h +527 -0
- package/vendor/mbedtls/include/psa/crypto_types.h +508 -0
- package/vendor/mbedtls/include/psa/crypto_values.h +2782 -0
- package/vendor/mbedtls/library/aes.c +2294 -0
- package/vendor/mbedtls/library/aesce.c +624 -0
- package/vendor/mbedtls/library/aesce.h +136 -0
- package/vendor/mbedtls/library/aesni.c +846 -0
- package/vendor/mbedtls/library/aesni.h +162 -0
- package/vendor/mbedtls/library/alignment.h +704 -0
- package/vendor/mbedtls/library/aria.c +969 -0
- package/vendor/mbedtls/library/asn1parse.c +468 -0
- package/vendor/mbedtls/library/asn1write.c +440 -0
- package/vendor/mbedtls/library/base64.c +322 -0
- package/vendor/mbedtls/library/base64_internal.h +45 -0
- package/vendor/mbedtls/library/bignum.c +2583 -0
- package/vendor/mbedtls/library/bignum_core.c +1240 -0
- package/vendor/mbedtls/library/bignum_core.h +872 -0
- package/vendor/mbedtls/library/bignum_core_invasive.h +38 -0
- package/vendor/mbedtls/library/bignum_internal.h +122 -0
- package/vendor/mbedtls/library/bignum_mod.c +394 -0
- package/vendor/mbedtls/library/bignum_mod.h +452 -0
- package/vendor/mbedtls/library/bignum_mod_raw.c +276 -0
- package/vendor/mbedtls/library/bignum_mod_raw.h +416 -0
- package/vendor/mbedtls/library/bignum_mod_raw_invasive.h +34 -0
- package/vendor/mbedtls/library/block_cipher.c +207 -0
- package/vendor/mbedtls/library/block_cipher_internal.h +99 -0
- package/vendor/mbedtls/library/bn_mul.h +1094 -0
- package/vendor/mbedtls/library/camellia.c +1058 -0
- package/vendor/mbedtls/library/ccm.c +777 -0
- package/vendor/mbedtls/library/chacha20.c +563 -0
- package/vendor/mbedtls/library/chacha20_internal.h +23 -0
- package/vendor/mbedtls/library/chachapoly.c +487 -0
- package/vendor/mbedtls/library/check_crypto_config.h +136 -0
- package/vendor/mbedtls/library/cipher.c +1712 -0
- package/vendor/mbedtls/library/cipher_invasive.h +28 -0
- package/vendor/mbedtls/library/cipher_wrap.c +2482 -0
- package/vendor/mbedtls/library/cipher_wrap.h +178 -0
- package/vendor/mbedtls/library/cmac.c +1067 -0
- package/vendor/mbedtls/library/common.h +487 -0
- package/vendor/mbedtls/library/constant_time.c +247 -0
- package/vendor/mbedtls/library/constant_time_impl.h +541 -0
- package/vendor/mbedtls/library/constant_time_internal.h +579 -0
- package/vendor/mbedtls/library/ctr.h +35 -0
- package/vendor/mbedtls/library/ctr_drbg.c +1016 -0
- package/vendor/mbedtls/library/debug.c +475 -0
- package/vendor/mbedtls/library/debug_internal.h +185 -0
- package/vendor/mbedtls/library/des.c +1042 -0
- package/vendor/mbedtls/library/dhm.c +700 -0
- package/vendor/mbedtls/library/ecdh.c +696 -0
- package/vendor/mbedtls/library/ecdsa.c +858 -0
- package/vendor/mbedtls/library/ecjpake.c +1216 -0
- package/vendor/mbedtls/library/ecp.c +3674 -0
- package/vendor/mbedtls/library/ecp_curves.c +6125 -0
- package/vendor/mbedtls/library/ecp_curves_new.c +9 -0
- package/vendor/mbedtls/library/ecp_internal_alt.h +287 -0
- package/vendor/mbedtls/library/ecp_invasive.h +305 -0
- package/vendor/mbedtls/library/entropy.c +680 -0
- package/vendor/mbedtls/library/entropy_poll.c +233 -0
- package/vendor/mbedtls/library/entropy_poll.h +64 -0
- package/vendor/mbedtls/library/error.c +878 -0
- package/vendor/mbedtls/library/gcm.c +1330 -0
- package/vendor/mbedtls/library/hkdf.c +161 -0
- package/vendor/mbedtls/library/hmac_drbg.c +633 -0
- package/vendor/mbedtls/library/lmots.c +789 -0
- package/vendor/mbedtls/library/lmots.h +288 -0
- package/vendor/mbedtls/library/lms.c +778 -0
- package/vendor/mbedtls/library/md.c +1108 -0
- package/vendor/mbedtls/library/md5.c +426 -0
- package/vendor/mbedtls/library/md_psa.h +26 -0
- package/vendor/mbedtls/library/md_wrap.h +46 -0
- package/vendor/mbedtls/library/memory_buffer_alloc.c +751 -0
- package/vendor/mbedtls/library/mps_common.h +181 -0
- package/vendor/mbedtls/library/mps_error.h +89 -0
- package/vendor/mbedtls/library/mps_reader.c +538 -0
- package/vendor/mbedtls/library/mps_reader.h +366 -0
- package/vendor/mbedtls/library/mps_trace.c +112 -0
- package/vendor/mbedtls/library/mps_trace.h +154 -0
- package/vendor/mbedtls/library/net_sockets.c +694 -0
- package/vendor/mbedtls/library/nist_kw.c +729 -0
- package/vendor/mbedtls/library/oid.c +1166 -0
- package/vendor/mbedtls/library/padlock.c +157 -0
- package/vendor/mbedtls/library/padlock.h +111 -0
- package/vendor/mbedtls/library/pem.c +554 -0
- package/vendor/mbedtls/library/pk.c +1602 -0
- package/vendor/mbedtls/library/pk_ecc.c +261 -0
- package/vendor/mbedtls/library/pk_internal.h +241 -0
- package/vendor/mbedtls/library/pk_wrap.c +1618 -0
- package/vendor/mbedtls/library/pk_wrap.h +138 -0
- package/vendor/mbedtls/library/pkcs12.c +437 -0
- package/vendor/mbedtls/library/pkcs5.c +500 -0
- package/vendor/mbedtls/library/pkcs7.c +787 -0
- package/vendor/mbedtls/library/pkparse.c +1392 -0
- package/vendor/mbedtls/library/pkwrite.c +631 -0
- package/vendor/mbedtls/library/pkwrite.h +121 -0
- package/vendor/mbedtls/library/platform.c +402 -0
- package/vendor/mbedtls/library/platform_util.c +258 -0
- package/vendor/mbedtls/library/poly1305.c +492 -0
- package/vendor/mbedtls/library/psa_crypto.c +9532 -0
- package/vendor/mbedtls/library/psa_crypto_aead.c +646 -0
- package/vendor/mbedtls/library/psa_crypto_aead.h +499 -0
- package/vendor/mbedtls/library/psa_crypto_cipher.c +747 -0
- package/vendor/mbedtls/library/psa_crypto_cipher.h +316 -0
- package/vendor/mbedtls/library/psa_crypto_client.c +22 -0
- package/vendor/mbedtls/library/psa_crypto_core.h +983 -0
- package/vendor/mbedtls/library/psa_crypto_core_common.h +52 -0
- package/vendor/mbedtls/library/psa_crypto_driver_wrappers.h +2896 -0
- package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.c +256 -0
- package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.h +31 -0
- package/vendor/mbedtls/library/psa_crypto_ecp.c +594 -0
- package/vendor/mbedtls/library/psa_crypto_ecp.h +267 -0
- package/vendor/mbedtls/library/psa_crypto_ffdh.c +361 -0
- package/vendor/mbedtls/library/psa_crypto_ffdh.h +131 -0
- package/vendor/mbedtls/library/psa_crypto_hash.c +470 -0
- package/vendor/mbedtls/library/psa_crypto_hash.h +211 -0
- package/vendor/mbedtls/library/psa_crypto_invasive.h +92 -0
- package/vendor/mbedtls/library/psa_crypto_its.h +131 -0
- package/vendor/mbedtls/library/psa_crypto_mac.c +505 -0
- package/vendor/mbedtls/library/psa_crypto_mac.h +264 -0
- package/vendor/mbedtls/library/psa_crypto_pake.c +571 -0
- package/vendor/mbedtls/library/psa_crypto_pake.h +159 -0
- package/vendor/mbedtls/library/psa_crypto_random.c +181 -0
- package/vendor/mbedtls/library/psa_crypto_random.h +72 -0
- package/vendor/mbedtls/library/psa_crypto_random_impl.h +200 -0
- package/vendor/mbedtls/library/psa_crypto_rsa.c +714 -0
- package/vendor/mbedtls/library/psa_crypto_rsa.h +321 -0
- package/vendor/mbedtls/library/psa_crypto_se.c +373 -0
- package/vendor/mbedtls/library/psa_crypto_se.h +192 -0
- package/vendor/mbedtls/library/psa_crypto_slot_management.c +1137 -0
- package/vendor/mbedtls/library/psa_crypto_slot_management.h +344 -0
- package/vendor/mbedtls/library/psa_crypto_storage.c +481 -0
- package/vendor/mbedtls/library/psa_crypto_storage.h +392 -0
- package/vendor/mbedtls/library/psa_its_file.c +254 -0
- package/vendor/mbedtls/library/psa_util.c +614 -0
- package/vendor/mbedtls/library/psa_util_internal.h +100 -0
- package/vendor/mbedtls/library/ripemd160.c +490 -0
- package/vendor/mbedtls/library/rsa.c +3121 -0
- package/vendor/mbedtls/library/rsa_alt_helpers.c +455 -0
- package/vendor/mbedtls/library/rsa_alt_helpers.h +209 -0
- package/vendor/mbedtls/library/rsa_internal.h +188 -0
- package/vendor/mbedtls/library/sha1.c +480 -0
- package/vendor/mbedtls/library/sha256.c +983 -0
- package/vendor/mbedtls/library/sha3.c +721 -0
- package/vendor/mbedtls/library/sha512.c +1115 -0
- package/vendor/mbedtls/library/ssl_cache.c +410 -0
- package/vendor/mbedtls/library/ssl_ciphersuites.c +2050 -0
- package/vendor/mbedtls/library/ssl_ciphersuites_internal.h +154 -0
- package/vendor/mbedtls/library/ssl_client.c +1023 -0
- package/vendor/mbedtls/library/ssl_client.h +22 -0
- package/vendor/mbedtls/library/ssl_cookie.c +384 -0
- package/vendor/mbedtls/library/ssl_debug_helpers.h +85 -0
- package/vendor/mbedtls/library/ssl_debug_helpers_generated.c +251 -0
- package/vendor/mbedtls/library/ssl_misc.h +3198 -0
- package/vendor/mbedtls/library/ssl_msg.c +6619 -0
- package/vendor/mbedtls/library/ssl_ticket.c +556 -0
- package/vendor/mbedtls/library/ssl_tls.c +10234 -0
- package/vendor/mbedtls/library/ssl_tls12_client.c +3688 -0
- package/vendor/mbedtls/library/ssl_tls12_server.c +4311 -0
- package/vendor/mbedtls/library/ssl_tls13_client.c +3208 -0
- package/vendor/mbedtls/library/ssl_tls13_generic.c +1793 -0
- package/vendor/mbedtls/library/ssl_tls13_invasive.h +23 -0
- package/vendor/mbedtls/library/ssl_tls13_keys.c +1918 -0
- package/vendor/mbedtls/library/ssl_tls13_keys.h +668 -0
- package/vendor/mbedtls/library/ssl_tls13_server.c +3624 -0
- package/vendor/mbedtls/library/threading.c +193 -0
- package/vendor/mbedtls/library/threading_internal.h +28 -0
- package/vendor/mbedtls/library/timing.c +152 -0
- package/vendor/mbedtls/library/version.c +32 -0
- package/vendor/mbedtls/library/version_features.c +856 -0
- package/vendor/mbedtls/library/x509.c +1776 -0
- package/vendor/mbedtls/library/x509_create.c +570 -0
- package/vendor/mbedtls/library/x509_crl.c +708 -0
- package/vendor/mbedtls/library/x509_crt.c +3311 -0
- package/vendor/mbedtls/library/x509_csr.c +648 -0
- package/vendor/mbedtls/library/x509_internal.h +101 -0
- package/vendor/mbedtls/library/x509write.c +174 -0
- package/vendor/mbedtls/library/x509write_crt.c +688 -0
- package/vendor/mbedtls/library/x509write_csr.c +336 -0
- package/vendor/quickjs-ng/CMakeLists.txt +566 -0
- package/vendor/quickjs-ng/LICENSE +24 -0
- package/vendor/quickjs-ng/README.md +24 -0
- package/vendor/quickjs-ng/api-test.c +1195 -0
- package/vendor/quickjs-ng/builtin-array-fromasync.h +119 -0
- package/vendor/quickjs-ng/builtin-iterator-zip-keyed.h +332 -0
- package/vendor/quickjs-ng/builtin-iterator-zip.h +337 -0
- package/vendor/quickjs-ng/cutils.h +1998 -0
- package/vendor/quickjs-ng/dtoa.c +1619 -0
- package/vendor/quickjs-ng/dtoa.h +87 -0
- package/vendor/quickjs-ng/gen/function_source.c +81 -0
- package/vendor/quickjs-ng/gen/hello.c +53 -0
- package/vendor/quickjs-ng/gen/hello_module.c +106 -0
- package/vendor/quickjs-ng/gen/repl.c +3036 -0
- package/vendor/quickjs-ng/gen/standalone.c +323 -0
- package/vendor/quickjs-ng/gen/test_fib.c +81 -0
- package/vendor/quickjs-ng/libregexp-opcode.h +73 -0
- package/vendor/quickjs-ng/libregexp.c +3474 -0
- package/vendor/quickjs-ng/libregexp.h +101 -0
- package/vendor/quickjs-ng/libunicode-table.h +5173 -0
- package/vendor/quickjs-ng/libunicode.c +2069 -0
- package/vendor/quickjs-ng/libunicode.h +172 -0
- package/vendor/quickjs-ng/list.h +107 -0
- package/vendor/quickjs-ng/lre-test.c +52 -0
- package/vendor/quickjs-ng/qjs.c +762 -0
- package/vendor/quickjs-ng/qjsc.c +673 -0
- package/vendor/quickjs-ng/quickjs-atom.h +280 -0
- package/vendor/quickjs-ng/quickjs-c-atomics.h +54 -0
- package/vendor/quickjs-ng/quickjs-libc.c +5037 -0
- package/vendor/quickjs-ng/quickjs-libc.h +87 -0
- package/vendor/quickjs-ng/quickjs-opcode.h +377 -0
- package/vendor/quickjs-ng/quickjs.c +64041 -0
- package/vendor/quickjs-ng/quickjs.h +1447 -0
- package/vendor/quickjs-ng/run-test262.c +2374 -0
- package/vendor/quickjs-ng/unicode_gen.c +3121 -0
- package/vendor/quickjs-ng/unicode_gen_def.h +310 -0
- package/vendor/ryu/LICENSE-Boost +23 -0
- package/vendor/ryu/common.h +114 -0
- package/vendor/ryu/d2s.c +509 -0
- package/vendor/ryu/d2s_full_table.h +367 -0
- package/vendor/ryu/d2s_intrinsics.h +357 -0
- package/vendor/ryu/d2s_small_table.h +186 -0
- package/vendor/ryu/digit_table.h +35 -0
- package/vendor/ryu/ryu.h +46 -0
- package/vendor/zlib/LICENSE +22 -0
- package/vendor/zlib/adler32.c +164 -0
- package/vendor/zlib/compress.c +75 -0
- package/vendor/zlib/crc32.c +1049 -0
- package/vendor/zlib/crc32.h +9446 -0
- package/vendor/zlib/deflate.c +2139 -0
- package/vendor/zlib/deflate.h +377 -0
- package/vendor/zlib/gzclose.c +23 -0
- package/vendor/zlib/gzguts.h +214 -0
- package/vendor/zlib/gzlib.c +582 -0
- package/vendor/zlib/gzread.c +602 -0
- package/vendor/zlib/gzwrite.c +631 -0
- package/vendor/zlib/infback.c +628 -0
- package/vendor/zlib/inffast.c +320 -0
- package/vendor/zlib/inffast.h +11 -0
- package/vendor/zlib/inffixed.h +94 -0
- package/vendor/zlib/inflate.c +1526 -0
- package/vendor/zlib/inflate.h +126 -0
- package/vendor/zlib/inftrees.c +299 -0
- package/vendor/zlib/inftrees.h +62 -0
- package/vendor/zlib/trees.c +1117 -0
- package/vendor/zlib/trees.h +128 -0
- package/vendor/zlib/uncompr.c +85 -0
- package/vendor/zlib/zconf.h +543 -0
- package/vendor/zlib/zlib.h +1938 -0
- package/vendor/zlib/zutil.c +299 -0
- package/vendor/zlib/zutil.h +254 -0
- package/README.md +0 -3
- package/index.js +0 -2
package/src/scr_array.c
ADDED
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
#include "scr_runtime.h"
|
|
2
|
+
|
|
3
|
+
#include <math.h>
|
|
4
|
+
#include <stdio.h>
|
|
5
|
+
#include <stdlib.h>
|
|
6
|
+
#include <string.h>
|
|
7
|
+
|
|
8
|
+
/* Live heap-array count for the RC audit lane (-DSCR_RC_AUDIT); same
|
|
9
|
+
* contract as scr_str_live_count in scr_string.c. */
|
|
10
|
+
#ifdef SCR_RC_AUDIT
|
|
11
|
+
static long scr_live_arrays = 0;
|
|
12
|
+
long scr_arr_live_count(void) { return scr_live_arrays; }
|
|
13
|
+
#endif
|
|
14
|
+
|
|
15
|
+
static void scr_arr_oom(void) {
|
|
16
|
+
fputs("scriptc: out of memory\n", stderr);
|
|
17
|
+
abort();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* JS would return undefined for an OOB read and create holes for a far OOB
|
|
21
|
+
* write; both are unrepresentable here (see SEMANTICS.md), so any invalid
|
|
22
|
+
* index — negative, fractional, NaN, or past the allowed end — traps. */
|
|
23
|
+
static void scr_arr_trap_oob(double i, size_t len) {
|
|
24
|
+
char buf[32];
|
|
25
|
+
scr_f64_to_str(i, buf);
|
|
26
|
+
fprintf(stderr,
|
|
27
|
+
"scriptc: RangeError: array index %s out of bounds (length %zu)\n",
|
|
28
|
+
buf, len);
|
|
29
|
+
abort();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Validate i as an element index. limit is a->len for reads, a->len + 1 for
|
|
33
|
+
* writes (i == len appends). NaN fails the >= 0 test; fractional indices
|
|
34
|
+
* fail the trunc test. */
|
|
35
|
+
static size_t scr_arr_check_index(const ScrArr *a, double i, bool allow_append) {
|
|
36
|
+
size_t limit = a->len + (allow_append ? 1 : 0);
|
|
37
|
+
if (!(i >= 0) || i != trunc(i) || i >= (double)limit) {
|
|
38
|
+
scr_arr_trap_oob(i, a->len);
|
|
39
|
+
}
|
|
40
|
+
return (size_t)i;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* ── slot packing: 8-byte slots hold doubles, bools, or pointers ───────── */
|
|
44
|
+
|
|
45
|
+
static uint64_t scr_slot_from_f64(double v) {
|
|
46
|
+
uint64_t s;
|
|
47
|
+
memcpy(&s, &v, sizeof s);
|
|
48
|
+
return s;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static double scr_slot_to_f64(uint64_t s) {
|
|
52
|
+
double v;
|
|
53
|
+
memcpy(&v, &s, sizeof v);
|
|
54
|
+
return v;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static uint64_t scr_slot_from_ptr(void *p) { return (uint64_t)(uintptr_t)p; }
|
|
58
|
+
|
|
59
|
+
static void *scr_slot_to_ptr(uint64_t s) { return (void *)(uintptr_t)s; }
|
|
60
|
+
|
|
61
|
+
static bool scr_elem_is_ref(ScrElemKind k) {
|
|
62
|
+
return k == SCR_ELEM_STR || k == SCR_ELEM_ARR || k == SCR_ELEM_BYTES ||
|
|
63
|
+
k == SCR_ELEM_REF;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
static void scr_elem_release(const ScrArr *a, uint64_t slot) {
|
|
67
|
+
void *p = scr_slot_to_ptr(slot);
|
|
68
|
+
if (a->elem == SCR_ELEM_STR) scr_str_release((ScrStr *)p);
|
|
69
|
+
else if (a->elem == SCR_ELEM_ARR) scr_arr_release((ScrArr *)p);
|
|
70
|
+
else if (a->elem == SCR_ELEM_BYTES) scr_bytes_release((ScrBytes *)p);
|
|
71
|
+
else if (a->elem == SCR_ELEM_REF) a->elem_release(p);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* ── lifecycle ─────────────────────────────────────────────────────────── */
|
|
75
|
+
|
|
76
|
+
static void scr_arr_grow(ScrArr *a, size_t need) {
|
|
77
|
+
if (need <= a->cap) return;
|
|
78
|
+
size_t cap = a->cap ? a->cap : 4;
|
|
79
|
+
while (cap < need) {
|
|
80
|
+
if (cap > SIZE_MAX / 2 / sizeof(uint64_t)) scr_arr_oom();
|
|
81
|
+
cap *= 2;
|
|
82
|
+
}
|
|
83
|
+
uint64_t *data = realloc(a->data, cap * sizeof(uint64_t));
|
|
84
|
+
if (!data) scr_arr_oom();
|
|
85
|
+
a->data = data;
|
|
86
|
+
a->cap = cap;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
ScrArr *scr_arr_new(ScrElemKind elem, size_t initial_cap) {
|
|
90
|
+
ScrArr *a = malloc(sizeof(ScrArr));
|
|
91
|
+
if (!a) scr_arr_oom();
|
|
92
|
+
a->rc = 1;
|
|
93
|
+
a->len = 0;
|
|
94
|
+
a->cap = 0;
|
|
95
|
+
a->elem = elem;
|
|
96
|
+
a->elem_retain = NULL;
|
|
97
|
+
a->elem_release = NULL;
|
|
98
|
+
a->elem_trace = NULL;
|
|
99
|
+
a->data = NULL;
|
|
100
|
+
if (initial_cap > 0) scr_arr_grow(a, initial_cap);
|
|
101
|
+
#ifdef SCR_RC_AUDIT
|
|
102
|
+
scr_live_arrays++;
|
|
103
|
+
#endif
|
|
104
|
+
return a;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* Collector trace of a cycle-capable array: every element is a headered
|
|
108
|
+
* child (elem_trace non-NULL means the element TYPE carries a header, and
|
|
109
|
+
* arrays are monomorphic), so trace visits all of them and the teardown
|
|
110
|
+
* below releases none — the complement contract in scr_runtime.h. */
|
|
111
|
+
void scr_arr_trace_v(void *a0, ScrTraceVisit visit, void *ctx) {
|
|
112
|
+
ScrArr *a = (ScrArr *)a0;
|
|
113
|
+
for (size_t i = 0; i < a->len; i++) visit(scr_slot_to_ptr(a->data[i]), ctx);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
static void scr_arr_gc_free(void *a0) {
|
|
117
|
+
ScrArr *a = (ScrArr *)a0;
|
|
118
|
+
free(a->data);
|
|
119
|
+
#ifdef SCR_RC_AUDIT
|
|
120
|
+
scr_live_arrays--;
|
|
121
|
+
#endif
|
|
122
|
+
scr_cyc_free(a);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
ScrArr *scr_arr_new_ref(void *(*elem_retain)(void *),
|
|
126
|
+
void (*elem_release)(void *),
|
|
127
|
+
ScrTraceFn elem_trace, size_t initial_cap) {
|
|
128
|
+
ScrArr *a;
|
|
129
|
+
if (elem_trace) {
|
|
130
|
+
a = scr_cyc_alloc(sizeof(ScrArr), &scr_arr_trace_v, &scr_arr_gc_free);
|
|
131
|
+
} else {
|
|
132
|
+
a = malloc(sizeof(ScrArr));
|
|
133
|
+
if (!a) scr_arr_oom();
|
|
134
|
+
}
|
|
135
|
+
a->rc = 1;
|
|
136
|
+
a->len = 0;
|
|
137
|
+
a->cap = 0;
|
|
138
|
+
a->elem = SCR_ELEM_REF;
|
|
139
|
+
a->elem_retain = elem_retain;
|
|
140
|
+
a->elem_release = elem_release;
|
|
141
|
+
a->elem_trace = elem_trace;
|
|
142
|
+
a->data = NULL;
|
|
143
|
+
if (initial_cap > 0) scr_arr_grow(a, initial_cap);
|
|
144
|
+
#ifdef SCR_RC_AUDIT
|
|
145
|
+
scr_live_arrays++;
|
|
146
|
+
#endif
|
|
147
|
+
return a;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
void scr_arr_release(ScrArr *a) {
|
|
151
|
+
if (!a || a->rc == SIZE_MAX) return; /* NULL: an uninitialized `let` local */
|
|
152
|
+
if (--a->rc == 0) {
|
|
153
|
+
if (a->elem_trace) scr_cyc_on_dead(a);
|
|
154
|
+
if (scr_elem_is_ref(a->elem)) {
|
|
155
|
+
for (size_t i = 0; i < a->len; i++) scr_elem_release(a, a->data[i]);
|
|
156
|
+
}
|
|
157
|
+
if (a->elem_trace) {
|
|
158
|
+
scr_arr_gc_free(a);
|
|
159
|
+
} else {
|
|
160
|
+
free(a->data);
|
|
161
|
+
#ifdef SCR_RC_AUDIT
|
|
162
|
+
scr_live_arrays--;
|
|
163
|
+
#endif
|
|
164
|
+
free(a);
|
|
165
|
+
}
|
|
166
|
+
} else if (a->elem_trace) {
|
|
167
|
+
scr_cyc_on_release(a); /* possible cycle root; may collect */
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
double scr_arr_len(ScrArr *a) { return (double)a->len; }
|
|
172
|
+
|
|
173
|
+
/* ── Math.max/min over one spread number[] ─────────────────────────────
|
|
174
|
+
* The JS fold exactly (ECMA Math.max/min applied to the elements): any
|
|
175
|
+
* NaN poisons the result, +0 beats -0 for max (the reverse for min), and
|
|
176
|
+
* the empty array yields the zero-argument constants. Borrows the array. */
|
|
177
|
+
double scr_math_max_arr(ScrArr *a) {
|
|
178
|
+
double best = -INFINITY;
|
|
179
|
+
for (size_t i = 0; i < a->len; i++) {
|
|
180
|
+
double v = scr_slot_to_f64(a->data[i]);
|
|
181
|
+
if (isnan(v)) return v;
|
|
182
|
+
if (v > best || (v == 0.0 && best == 0.0 && !signbit(v))) best = v;
|
|
183
|
+
}
|
|
184
|
+
return best;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
double scr_math_min_arr(ScrArr *a) {
|
|
188
|
+
double best = INFINITY;
|
|
189
|
+
for (size_t i = 0; i < a->len; i++) {
|
|
190
|
+
double v = scr_slot_to_f64(a->data[i]);
|
|
191
|
+
if (isnan(v)) return v;
|
|
192
|
+
if (v < best || (v == 0.0 && best == 0.0 && signbit(v))) best = v;
|
|
193
|
+
}
|
|
194
|
+
return best;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/* ── reads ─────────────────────────────────────────────────────────────── */
|
|
198
|
+
|
|
199
|
+
double scr_arr_get_f64(ScrArr *a, double i) {
|
|
200
|
+
return scr_slot_to_f64(a->data[scr_arr_check_index(a, i, false)]);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
bool scr_arr_get_bool(ScrArr *a, double i) {
|
|
204
|
+
return a->data[scr_arr_check_index(a, i, false)] != 0;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
void *scr_arr_get_ref(ScrArr *a, double i) {
|
|
208
|
+
void *p = scr_slot_to_ptr(a->data[scr_arr_check_index(a, i, false)]);
|
|
209
|
+
if (a->elem == SCR_ELEM_STR) scr_str_retain((ScrStr *)p);
|
|
210
|
+
else if (a->elem == SCR_ELEM_BYTES) scr_bytes_retain((ScrBytes *)p);
|
|
211
|
+
else if (a->elem == SCR_ELEM_REF) p = a->elem_retain(p);
|
|
212
|
+
else scr_arr_retain((ScrArr *)p);
|
|
213
|
+
return p;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* ── writes: i == len appends ──────────────────────────────────────────── */
|
|
217
|
+
|
|
218
|
+
static void scr_arr_set_slot(ScrArr *a, double i, uint64_t slot) {
|
|
219
|
+
size_t idx = scr_arr_check_index(a, i, true);
|
|
220
|
+
if (idx == a->len) {
|
|
221
|
+
scr_arr_grow(a, a->len + 1);
|
|
222
|
+
a->len++;
|
|
223
|
+
a->data[idx] = slot;
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
/* Unlink-then-release: a release can trigger a cycle collection, which
|
|
227
|
+
* must never see a heap edge whose count was already given up. */
|
|
228
|
+
uint64_t old = a->data[idx];
|
|
229
|
+
a->data[idx] = slot;
|
|
230
|
+
if (scr_elem_is_ref(a->elem)) scr_elem_release(a, old);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
void scr_arr_set_f64(ScrArr *a, double i, double v) {
|
|
234
|
+
scr_arr_set_slot(a, i, scr_slot_from_f64(v));
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
void scr_arr_set_bool(ScrArr *a, double i, bool v) {
|
|
238
|
+
scr_arr_set_slot(a, i, (uint64_t)(v ? 1 : 0));
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
void scr_arr_set_ref(ScrArr *a, double i, void *v) {
|
|
242
|
+
scr_arr_set_slot(a, i, scr_slot_from_ptr(v));
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/* ── push / pop ────────────────────────────────────────────────────────── */
|
|
246
|
+
|
|
247
|
+
static double scr_arr_push_slot(ScrArr *a, uint64_t slot) {
|
|
248
|
+
scr_arr_grow(a, a->len + 1);
|
|
249
|
+
a->data[a->len++] = slot;
|
|
250
|
+
return (double)a->len;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
double scr_arr_push_f64(ScrArr *a, double v) {
|
|
254
|
+
return scr_arr_push_slot(a, scr_slot_from_f64(v));
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
double scr_arr_push_bool(ScrArr *a, bool v) {
|
|
258
|
+
return scr_arr_push_slot(a, (uint64_t)(v ? 1 : 0));
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
double scr_arr_push_ref(ScrArr *a, void *v) {
|
|
262
|
+
return scr_arr_push_slot(a, scr_slot_from_ptr(v));
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
static uint64_t scr_arr_pop_slot(ScrArr *a) {
|
|
266
|
+
if (a->len == 0) {
|
|
267
|
+
fputs("scriptc: RangeError: pop() on an empty array\n", stderr);
|
|
268
|
+
abort();
|
|
269
|
+
}
|
|
270
|
+
return a->data[--a->len];
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
double scr_arr_pop_f64(ScrArr *a) { return scr_slot_to_f64(scr_arr_pop_slot(a)); }
|
|
274
|
+
|
|
275
|
+
bool scr_arr_pop_bool(ScrArr *a) { return scr_arr_pop_slot(a) != 0; }
|
|
276
|
+
|
|
277
|
+
void *scr_arr_pop_ref(ScrArr *a) { return scr_slot_to_ptr(scr_arr_pop_slot(a)); }
|
|
278
|
+
|
|
279
|
+
/* ── shift ─────────────────────────────────────────────────────────────
|
|
280
|
+
* The first element out, tail sliding down. The EMITTER guards the empty
|
|
281
|
+
* array (JS answers undefined there — the `elem | undefined` union), so
|
|
282
|
+
* an empty receiver here is an internal error, pop's discipline. Ref
|
|
283
|
+
* ownership moves out to the caller (no retain). */
|
|
284
|
+
static uint64_t scr_arr_shift_slot(ScrArr *a) {
|
|
285
|
+
if (a->len == 0) {
|
|
286
|
+
fputs("scriptc: internal error: shift() on an empty array\n", stderr);
|
|
287
|
+
abort();
|
|
288
|
+
}
|
|
289
|
+
uint64_t s = a->data[0];
|
|
290
|
+
a->len--;
|
|
291
|
+
memmove(a->data, a->data + 1, a->len * sizeof(uint64_t));
|
|
292
|
+
return s;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
double scr_arr_shift_f64(ScrArr *a) { return scr_slot_to_f64(scr_arr_shift_slot(a)); }
|
|
296
|
+
|
|
297
|
+
bool scr_arr_shift_bool(ScrArr *a) { return scr_arr_shift_slot(a) != 0; }
|
|
298
|
+
|
|
299
|
+
void *scr_arr_shift_ref(ScrArr *a) { return scr_slot_to_ptr(scr_arr_shift_slot(a)); }
|
|
300
|
+
|
|
301
|
+
/* ── splice (the removal forms) ────────────────────────────────────────
|
|
302
|
+
* a.splice(start, deleteCount) with Node's exact index handling: start
|
|
303
|
+
* goes through ToIntegerOrInfinity with negative-from-the-end resolution
|
|
304
|
+
* and clamps to [0, len]; deleteCount clamps to [0, len - start] (the
|
|
305
|
+
* omitted-count form passes +Infinity — remove to the end). The removed
|
|
306
|
+
* elements come back as a fresh +1 array IN ORDER, their ownership MOVED
|
|
307
|
+
* out of the receiver (no retain/release churn); the tail slides down.
|
|
308
|
+
* Borrows a. */
|
|
309
|
+
ScrArr *scr_arr_splice(ScrArr *a, double start, double deleteCount) {
|
|
310
|
+
double len = (double)a->len;
|
|
311
|
+
double s0 = isnan(start) ? 0 : trunc(start);
|
|
312
|
+
if (s0 < 0) s0 += len;
|
|
313
|
+
size_t from = s0 <= 0 ? 0 : s0 >= len ? a->len : (size_t)s0;
|
|
314
|
+
double avail = len - (double)from;
|
|
315
|
+
double d0 = isnan(deleteCount) ? 0 : trunc(deleteCount);
|
|
316
|
+
size_t n = d0 <= 0 ? 0 : d0 >= avail ? (size_t)avail : (size_t)d0;
|
|
317
|
+
ScrArr *out =
|
|
318
|
+
a->elem == SCR_ELEM_REF
|
|
319
|
+
? scr_arr_new_ref(a->elem_retain, a->elem_release, a->elem_trace, n ? n : 1)
|
|
320
|
+
: scr_arr_new(a->elem, n ? n : 1);
|
|
321
|
+
if (n > 0) {
|
|
322
|
+
memcpy(out->data, a->data + from, n * sizeof(uint64_t));
|
|
323
|
+
out->len = n;
|
|
324
|
+
memmove(a->data + from, a->data + from + n, (a->len - from - n) * sizeof(uint64_t));
|
|
325
|
+
a->len -= n;
|
|
326
|
+
}
|
|
327
|
+
return out;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/* ── indexOf / includes ────────────────────────────────────────────────
|
|
331
|
+
* indexOf uses JS strict equality (===): NaN never matches (NaN !== NaN),
|
|
332
|
+
* -0 matches 0 (C == agrees on both). includes uses SameValueZero: the one
|
|
333
|
+
* difference is that NaN DOES match NaN. Reference elements: strings by
|
|
334
|
+
* content (JS strings are primitive values), arrays by pointer identity.
|
|
335
|
+
* All needles are borrowed. */
|
|
336
|
+
|
|
337
|
+
static bool scr_arr_ref_eq(const ScrArr *a, uint64_t slot, void *v) {
|
|
338
|
+
void *p = scr_slot_to_ptr(slot);
|
|
339
|
+
if (a->elem == SCR_ELEM_STR) return scr_str_eq((ScrStr *)p, (ScrStr *)v);
|
|
340
|
+
return p == v;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
double scr_arr_index_of_f64(ScrArr *a, double v) {
|
|
344
|
+
for (size_t i = 0; i < a->len; i++) {
|
|
345
|
+
if (scr_slot_to_f64(a->data[i]) == v) return (double)i; /* NaN: never */
|
|
346
|
+
}
|
|
347
|
+
return -1;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
double scr_arr_index_of_bool(ScrArr *a, bool v) {
|
|
351
|
+
for (size_t i = 0; i < a->len; i++) {
|
|
352
|
+
if ((a->data[i] != 0) == v) return (double)i;
|
|
353
|
+
}
|
|
354
|
+
return -1;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
double scr_arr_index_of_ref(ScrArr *a, void *v) {
|
|
358
|
+
for (size_t i = 0; i < a->len; i++) {
|
|
359
|
+
if (scr_arr_ref_eq(a, a->data[i], v)) return (double)i;
|
|
360
|
+
}
|
|
361
|
+
return -1;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
bool scr_arr_includes_f64(ScrArr *a, double v) {
|
|
365
|
+
for (size_t i = 0; i < a->len; i++) {
|
|
366
|
+
double x = scr_slot_to_f64(a->data[i]);
|
|
367
|
+
if (x == v || (x != x && v != v)) return true; /* SameValueZero: NaN hits */
|
|
368
|
+
}
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
bool scr_arr_includes_bool(ScrArr *a, bool v) {
|
|
373
|
+
return scr_arr_index_of_bool(a, v) >= 0;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
bool scr_arr_includes_ref(ScrArr *a, void *v) {
|
|
377
|
+
return scr_arr_index_of_ref(a, v) >= 0;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/* ── join ──────────────────────────────────────────────────────────────── */
|
|
381
|
+
|
|
382
|
+
static void scr_join_append(char **buf, size_t *len, size_t *cap,
|
|
383
|
+
const char *bytes, size_t n) {
|
|
384
|
+
if (*len + n > *cap) {
|
|
385
|
+
size_t cap2 = *cap;
|
|
386
|
+
while (*len + n > cap2) {
|
|
387
|
+
if (cap2 > SIZE_MAX / 2) scr_arr_oom();
|
|
388
|
+
cap2 *= 2;
|
|
389
|
+
}
|
|
390
|
+
char *grown = realloc(*buf, cap2);
|
|
391
|
+
if (!grown) scr_arr_oom();
|
|
392
|
+
*buf = grown;
|
|
393
|
+
*cap = cap2;
|
|
394
|
+
}
|
|
395
|
+
memcpy(*buf + *len, bytes, n);
|
|
396
|
+
*len += n;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/* `a.slice(start?, end?)` — a fresh shallow copy of the index range,
|
|
400
|
+
* JS-exact: indices go through ToIntegerOrInfinity (the emitter fills the
|
|
401
|
+
* omitted defaults 0 / +Infinity), negatives count from the end, both
|
|
402
|
+
* clamp to [0, len]. Ref elements RETAIN into the copy — the same
|
|
403
|
+
* references, exactly JS's shallow copy. Borrows a; returns +1. */
|
|
404
|
+
ScrArr *scr_arr_slice(ScrArr *a, double start, double end) {
|
|
405
|
+
/* ToIntegerOrInfinity + relative-index resolution over the LENGTH. */
|
|
406
|
+
double len = (double)a->len;
|
|
407
|
+
double s0 = isnan(start) ? 0 : trunc(start);
|
|
408
|
+
double e0 = isnan(end) ? 0 : trunc(end);
|
|
409
|
+
if (s0 < 0) s0 += len;
|
|
410
|
+
if (e0 < 0) e0 += len;
|
|
411
|
+
size_t from = s0 <= 0 ? 0 : s0 >= len ? a->len : (size_t)s0;
|
|
412
|
+
size_t to = e0 <= 0 ? 0 : e0 >= len ? a->len : (size_t)e0;
|
|
413
|
+
size_t n = to > from ? to - from : 0;
|
|
414
|
+
ScrArr *out =
|
|
415
|
+
a->elem == SCR_ELEM_REF
|
|
416
|
+
? scr_arr_new_ref(a->elem_retain, a->elem_release, a->elem_trace, n ? n : 1)
|
|
417
|
+
: scr_arr_new(a->elem, n ? n : 1);
|
|
418
|
+
for (size_t i = 0; i < n; i++) {
|
|
419
|
+
uint64_t slot = a->data[from + i];
|
|
420
|
+
if (scr_elem_is_ref(a->elem)) {
|
|
421
|
+
void *pv = scr_slot_to_ptr(slot);
|
|
422
|
+
if (a->elem == SCR_ELEM_STR) scr_str_retain((ScrStr *)pv);
|
|
423
|
+
else if (a->elem == SCR_ELEM_ARR) scr_arr_retain((ScrArr *)pv);
|
|
424
|
+
else if (a->elem == SCR_ELEM_BYTES) scr_bytes_retain((ScrBytes *)pv);
|
|
425
|
+
else pv = a->elem_retain(pv);
|
|
426
|
+
slot = scr_slot_from_ptr(pv);
|
|
427
|
+
}
|
|
428
|
+
out->data[out->len++] = slot;
|
|
429
|
+
}
|
|
430
|
+
return out;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
ScrStr *scr_arr_join(ScrArr *a, ScrStr *sep) {
|
|
434
|
+
size_t cap = 64, len = 0;
|
|
435
|
+
char *buf = malloc(cap);
|
|
436
|
+
if (!buf) scr_arr_oom();
|
|
437
|
+
for (size_t i = 0; i < a->len; i++) {
|
|
438
|
+
if (i > 0) scr_join_append(&buf, &len, &cap, sep->data, sep->len);
|
|
439
|
+
switch (a->elem) {
|
|
440
|
+
case SCR_ELEM_F64: {
|
|
441
|
+
char nb[32];
|
|
442
|
+
size_t n = scr_f64_to_str(scr_slot_to_f64(a->data[i]), nb);
|
|
443
|
+
scr_join_append(&buf, &len, &cap, nb, n);
|
|
444
|
+
break;
|
|
445
|
+
}
|
|
446
|
+
case SCR_ELEM_BOOL:
|
|
447
|
+
if (a->data[i] != 0) scr_join_append(&buf, &len, &cap, "true", 4);
|
|
448
|
+
else scr_join_append(&buf, &len, &cap, "false", 5);
|
|
449
|
+
break;
|
|
450
|
+
case SCR_ELEM_STR: {
|
|
451
|
+
const ScrStr *s = (const ScrStr *)scr_slot_to_ptr(a->data[i]);
|
|
452
|
+
scr_join_append(&buf, &len, &cap, s->data, s->len);
|
|
453
|
+
break;
|
|
454
|
+
}
|
|
455
|
+
case SCR_ELEM_ARR:
|
|
456
|
+
case SCR_ELEM_BYTES:
|
|
457
|
+
case SCR_ELEM_REF:
|
|
458
|
+
/* The compiler rejects join on ref-element arrays (SC1090). */
|
|
459
|
+
fputs("scriptc: internal error: join on a ref-element array\n", stderr);
|
|
460
|
+
abort();
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
ScrStr *out = scr_str_new(buf, len);
|
|
464
|
+
free(buf);
|
|
465
|
+
return out;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/* String.raw over the template's raw literals and PRE-STRINGIFIED
|
|
469
|
+
* substitutions (the frontend applies the static ToString per value):
|
|
470
|
+
* raw[0] sub[0] raw[1] sub[1] ... — substitutions beyond raw.len-1 drop,
|
|
471
|
+
* missing ones skip, exactly the spec's loop. Both arrays are
|
|
472
|
+
* SCR_ELEM_STR; borrows both; +1 result. Never throws. */
|
|
473
|
+
ScrStr *scr_str_raw(ScrArr *raw, ScrArr *subs) {
|
|
474
|
+
size_t cap = 64, len = 0;
|
|
475
|
+
char *buf = malloc(cap);
|
|
476
|
+
if (!buf) scr_arr_oom();
|
|
477
|
+
for (size_t i = 0; i < raw->len; i++) {
|
|
478
|
+
const ScrStr *s = (const ScrStr *)scr_slot_to_ptr(raw->data[i]);
|
|
479
|
+
scr_join_append(&buf, &len, &cap, s->data, s->len);
|
|
480
|
+
if (i + 1 < raw->len && i < subs->len) {
|
|
481
|
+
const ScrStr *v = (const ScrStr *)scr_slot_to_ptr(subs->data[i]);
|
|
482
|
+
scr_join_append(&buf, &len, &cap, v->data, v->len);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
ScrStr *out = scr_str_new(buf, len);
|
|
486
|
+
free(buf);
|
|
487
|
+
return out;
|
|
488
|
+
}
|