diff --git a/.github/workflows/wasi-check.yml b/.github/workflows/wasi-check.yml index f5f85b99cee..eb1b3e123db 100644 --- a/.github/workflows/wasi-check.yml +++ b/.github/workflows/wasi-check.yml @@ -1,8 +1,13 @@ name: WASI Check -# Keeps `perry-runtime` building for the standalone WASI target -# (wasm32-wasip2). Tracking issue #11375; this gate is phase 2a (#11377). -# The check itself is `scripts/wasi_check.sh` — run it locally the same way. +# The standalone WASI target (wasm32-wasip2), tracking issue #11375: +# wasi-check `perry-runtime` builds for WASI (phase 2a, #11377; +# `scripts/wasi_check.sh`) and the runtime ABI checks. +# wasi-codegen a compiler built with `--features target-wasi` compiles +# sample programs for WASI and every runtime call in the IR +# matches the runtime's signature (#11378; +# `scripts/wasi_ir_check.sh`). +# Both scripts run locally the same way. # # Checked against CLAUDE.md's "four ways a gate can be unable to fail": # @@ -28,10 +33,21 @@ on: paths: - "crates/perry-runtime/**" - "crates/perry-dispatch/**" + # The ABI table is built from the runtime, stdlib and ext crates, and + # the codegen job builds the perry driver and compiles gap programs. + - "crates/perry-stdlib/**" + - "crates/perry-ext-*/**" + - "crates/perry/**" + - "crates/perry-codegen/Cargo.toml" + - "test-files/test_gap_*.ts" + - ".github/actions/setup-llvm22/**" + - "Cargo.toml" + - ".cargo/**" - "Cargo.lock" - "rust-toolchain.toml" - "scripts/wasi_check.sh" - "scripts/runtime_abi_check.py" + - "scripts/wasi_ir_check.sh" - "crates/perry-codegen/src/**" - ".github/workflows/wasi-check.yml" # Main-line arm: one daily sweep, not one run per merge — see @@ -78,3 +94,34 @@ jobs: run: python3 scripts/runtime_abi_check.py --self-test - name: Runtime ABI check (report) run: python3 scripts/runtime_abi_check.py + # The wasm32 lowering adapts calls to the runtime's real signatures as + # recorded in this table; a stale table would adapt to the wrong ones. + - name: wasm32 runtime ABI table is current + run: python3 scripts/runtime_abi_check.py --check-wasm-abi + + # The wasm32 codegen lowering (#11378), in a compiler built with the + # off-by-default `target-wasi` feature: sample programs compile for WASI and + # every runtime call in the emitted IR matches the runtime's real signature. + wasi-codegen: + if: github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'run-extended-tests') + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + + - name: Install Rust toolchain + run: rustup toolchain install nightly-2026-08-20 --profile minimal + - uses: ./.github/actions/setup-llvm22 + + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + with: + shared-key: "${{ runner.os }}-wasi-codegen" + save-if: ${{ github.ref == 'refs/heads/main' }} + + - name: Build perry with the WASI target + run: cargo build --locked --profile perry-dev -p perry --features target-wasi + + - name: wasm32 IR matches the runtime ABI + run: ./scripts/wasi_ir_check.sh target/perry-dev/perry diff --git a/changelog.d/11406-wasi-codegen-lowering.md b/changelog.d/11406-wasi-codegen-lowering.md new file mode 100644 index 00000000000..15f9f13f7c4 --- /dev/null +++ b/changelog.d/11406-wasi-codegen-lowering.md @@ -0,0 +1,23 @@ +Perry can emit wasm32 code for the standalone WASI target (`--target wasi`, +`wasm32-unknown-wasip2`) when the compiler is built with the new, +off-by-default `target-wasi` cargo feature (phase 3b of #11375, #11378). +Without the feature nothing compiles differently. With it, only wasm32 WASI +takes any new path; host IR from a baseline, the default build and a +`target-wasi` build is otherwise unchanged (125/130 gap modules byte-identical, +and the rest differ only in an ordering the baseline itself varies). + +- A wasm32-only pass rewrites each runtime declaration to the runtime's real + signature. Every call whose own type differs goes through an inlined adapter. + On LP64, codegen's i64-for-pointer convention matches the runtime; on wasm32 + it would be a link-time signature mismatch at ~1,200 sites. +- The signatures come from `crates/perry-codegen/src/wasm32/runtime_abi.tsv`. + `scripts/runtime_abi_check.py --emit-wasm-abi` generates it from the runtime + source, and `--check-wasm-abi` checks it is current. +- The shadow-frame push reads the 32-bit `frame_top` on wasm32. +- Inline shadow-slot stores, the Map entry fast path and inline arena + allocation take their runtime calls on wasm32. + +`runtime_abi_check.py --ir` verifies emitted wasm32 IR (27,946 runtime calls +across 54 gap modules, 0 mismatches). `scripts/wasi_ir_check.sh` runs it on +sample programs in the non-required `wasi-check` workflow's new +`wasi-codegen` job. Linking a `.wasm` is phase 4 (#11379). diff --git a/crates/perry-codegen/Cargo.toml b/crates/perry-codegen/Cargo.toml index d25680e9ec5..2184ca9d67b 100644 --- a/crates/perry-codegen/Cargo.toml +++ b/crates/perry-codegen/Cargo.toml @@ -27,6 +27,11 @@ workspace = true # `--no-default-features` still builds the text path for bisection. default = ["llvm-inprocess"] llvm-inprocess = ["dep:inkwell", "dep:llvm-sys"] +# Standalone WASI target (wasm32-wasip2, #11375/#11378). OFF BY DEFAULT: it +# links LLVM's WebAssembly backend into the compiler and enables the wasm32 +# lowering (runtime ABI adapters, ILP32 layouts). With it off, nothing about +# any other target's output changes — and every wasm32 path below is behind it. +target-wasi = ["llvm-inprocess", "inkwell?/target-webassembly"] # Test-support only (#7493): exposes `perry_codegen::testing`, whose # `NativeRootsPin` lets a test declare WHICH root lowering it asserts on. It is diff --git a/crates/perry-codegen/src/codegen/helpers.rs b/crates/perry-codegen/src/codegen/helpers.rs index bf02d634d75..7ac542ae007 100644 --- a/crates/perry-codegen/src/codegen/helpers.rs +++ b/crates/perry-codegen/src/codegen/helpers.rs @@ -244,6 +244,23 @@ pub(crate) fn set_native_roots_for_target(triple: &str) { NATIVE_ROOTS_TARGET_OK.with(|c| c.set(arch_ok && windows_ok)); } +thread_local! { + static ILP32_TARGET: std::cell::Cell = const { std::cell::Cell::new(false) }; +} + +/// Record, per module, whether this compile targets 32-bit pointers. Only the +/// wasm32 WASI lowering can get here with `true` (`compile_module` refuses +/// every other ILP32 triple), so on every other target the inline paths that +/// consult [`ilp32_target`] emit exactly what they always did. +pub(crate) fn set_ilp32_for_target(triple: &str) { + ILP32_TARGET.with(|c| c.set(crate::target_layout::target_is_ilp32(triple))); +} + +/// See [`set_ilp32_for_target`]. +pub(crate) fn ilp32_target() -> bool { + ILP32_TARGET.with(|c| c.get()) +} + /// Whether precise roots should use a native-stack metadata backend rather /// than Perry's heap-backed shadow frame. pub(crate) fn native_stack_roots_enabled() -> bool { @@ -1287,6 +1304,9 @@ pub fn resolve_target_triple(name: &str) -> Option { } "watchos" => Some("aarch64-apple-watchos".to_string()), "watchos-simulator" => Some("arm64-apple-watchos10.0-simulator".to_string()), + // Standalone WASI (#11375): only a compiler built with `target-wasi` + // knows the name; a default build keeps resolving it to None. + "wasi" if cfg!(feature = "target-wasi") => Some("wasm32-unknown-wasip2".to_string()), "tvos" => Some("aarch64-apple-tvos".to_string()), "tvos-simulator" => Some("arm64-apple-tvos17.0-simulator".to_string()), "harmonyos" => Some("aarch64-unknown-linux-ohos".to_string()), diff --git a/crates/perry-codegen/src/codegen/mod.rs b/crates/perry-codegen/src/codegen/mod.rs index c206ac6ae1a..5e16743a800 100644 --- a/crates/perry-codegen/src/codegen/mod.rs +++ b/crates/perry-codegen/src/codegen/mod.rs @@ -454,6 +454,9 @@ pub fn compile_module(hir: &HirModule, opts: CompileOptions) -> Result> // Native roots are the default lowering wherever the runtime can walk the // frames, and the shadow stack elsewhere. Same per-module discipline. helpers::set_native_roots_for_target(&triple); + // ILP32 (wasm32 WASI only): inline paths that bake in LP64 layouts take + // their runtime-call arms or ILP32 offsets. Same per-module discipline. + helpers::set_ilp32_for_target(&triple); // `--opt-report` (#6952): mark the closures that are iterating-builtin // callbacks before any region is lowered, so their denials carry the @@ -3779,7 +3782,15 @@ pub fn compile_module(hir: &HirModule, opts: CompileOptions) -> Result> // behavior). `emit_ir_only` wants the whole-module text, so it takes the // single-text path; the split path avoids materializing the full ~1GB IR // string at all (which would defeat the memory win). - let n_units = if opts.emit_ir_only { + // wasm32 WASI (#11378) takes the single-text path: its runtime-ABI pass + // rewrites the whole module text before object emission. Splitting it + // needs more than per-unit adaptation: the unit objects must be combined + // with `wasm-ld -r` (the host `ld -r` cannot read wasm), each trimmed of + // the buffer's trailing NUL, and the closure-ABI rewrite needs the + // module-wide set of closure bodies. Until then a large WASI module is + // compiled as one unit. + let wasm32 = crate::target_layout::wasm32_lowering(&triple); + let n_units = if opts.emit_ir_only || wasm32 { 1 } else { decide_codegen_units( @@ -3834,14 +3845,22 @@ pub fn compile_module(hir: &HirModule, opts: CompileOptions) -> Result> // textual); `=diff` builds both arms and diffs them. Unit-split and // emit_ir_only paths above stay textual (they fall into the in-process // *transport* under these values, so no clang subprocess either way). - if let Some(result) = - try_native_construction(&mut llmod, opts.target.as_deref(), &module_prefix) - { - return result; + if !wasm32 { + if let Some(result) = + try_native_construction(&mut llmod, opts.target.as_deref(), &module_prefix) + { + return result; + } } loop { let ll_text = llmod.to_ir(); + #[cfg(feature = "target-wasi")] + let ll_text = if wasm32 { + crate::wasm32::adapt_runtime_abi(&ll_text) + } else { + ll_text + }; log::debug!( "perry-codegen: emitted {} bytes of LLVM IR for '{}' ({} interned strings)", ll_text.len(), diff --git a/crates/perry-codegen/src/expr/array_literal.rs b/crates/perry-codegen/src/expr/array_literal.rs index e76458d9161..70223f7a6af 100644 --- a/crates/perry-codegen/src/expr/array_literal.rs +++ b/crates/perry-codegen/src/expr/array_literal.rs @@ -165,7 +165,9 @@ pub(crate) fn emit_array_from_lowered_values( // Inline bump-allocator path for small literals. Size threshold matches // `MAX_SCALAR_ARRAY_LEN` in collectors.rs so every candidate the escape // pass rejects can still benefit from the inline alloc. - if n <= INLINE_ARRAY_MAX_ELEMENTS { + // ILP32 (wasm32 WASI, #11378): the inline bump reads `InlineArenaState` + // at LP64 offsets; take the runtime call below instead. + if n <= INLINE_ARRAY_MAX_ELEMENTS && !crate::codegen::helpers::ilp32_target() { // Layout constants — must match `ArrayHeader` in array.rs and // `GcHeader` in gc.rs. Duplicated here because codegen emits raw // byte offsets; the runtime declarations are authoritative. diff --git a/crates/perry-codegen/src/expr/arrays_finds.rs b/crates/perry-codegen/src/expr/arrays_finds.rs index be98ce299a2..013aab20bc0 100644 --- a/crates/perry-codegen/src/expr/arrays_finds.rs +++ b/crates/perry-codegen/src/expr/arrays_finds.rs @@ -139,6 +139,14 @@ fn lower_map_entry_at_inline( let is_pointer = blk.icmp_eq(I64, &top16, POINTER_TAG_TOP16_I64); let above_band = blk.icmp_ugt(I64, &m_handle, HANDLE_BAND_TOP); let plausible = blk.and(I1, &is_pointer, &above_band); + // ILP32 (wasm32 WASI): the header reads below use LP64 offsets + // (`MAP_HEADER_USED_OFFSET`, an i64 `entries`); every read takes the + // runtime helper instead, and LLVM drops the dead fast path (#11378). + let plausible = if crate::codegen::helpers::ilp32_target() { + "false".to_string() + } else { + plausible + }; blk.cond_br(&plausible, &head_label, &slow_label); (m_handle, i_i32) }; diff --git a/crates/perry-codegen/src/expr/shadow_inline.rs b/crates/perry-codegen/src/expr/shadow_inline.rs index a3afea6b2af..07332941eeb 100644 --- a/crates/perry-codegen/src/expr/shadow_inline.rs +++ b/crates/perry-codegen/src/expr/shadow_inline.rs @@ -115,6 +115,11 @@ fn emit_inline_slot_write(ctx: &mut FnCtx<'_>, slot_idx: u32, what: InlineSlotWr if !crate::codegen::helpers::inline_shadow_slot_enabled() { return false; } + // ILP32 (wasm32 WASI): the inline sequence below reads LP64 offsets and + // i64 words; take the `js_shadow_slot_*` call arm instead (#11378). + if crate::codegen::helpers::ilp32_target() { + return false; + } let Some(state_slot) = ctx.func.shadow_state_slot().map(str::to_owned) else { return false; }; diff --git a/crates/perry-codegen/src/function.rs b/crates/perry-codegen/src/function.rs index 3fa2825d515..4a3b7335ef5 100644 --- a/crates/perry-codegen/src/function.rs +++ b/crates/perry-codegen/src/function.rs @@ -224,6 +224,26 @@ fn shadow_frame_handle_lines( handle_reg: &str, ) -> Vec { use crate::expr::shadow_inline::{SHADOW_STACK_HEADER_SLOTS, SHADOW_STATE_FRAME_TOP_OFFSET}; + if crate::codegen::helpers::ilp32_target() { + // ILP32 (wasm32 WASI, #11378): `ShadowStackState`'s words are 4 + // bytes, so `frame_top` is the fourth-byte-aligned word at 3 * 4 and + // is widened to the i64 handle every other use expects. + let top32 = format!("{top_reg}.w"); + return vec![ + format!(" store ptr {}, ptr {}", state_reg, state_slot), + format!( + " {} = getelementptr inbounds i8, ptr {}, i64 12", + top_ptr_reg, state_reg + ), + format!(" {} = load i32, ptr {}", top32, top_ptr_reg), + format!(" {} = zext i32 {} to i64", top_reg, top32), + format!( + " {} = sub i64 {}, {}", + handle_reg, top_reg, SHADOW_STACK_HEADER_SLOTS + ), + format!(" store i64 {}, ptr {}", handle_reg, handle_slot), + ]; + } vec![ format!(" store ptr {}, ptr {}", state_reg, state_slot), format!( diff --git a/crates/perry-codegen/src/inprocess.rs b/crates/perry-codegen/src/inprocess.rs index 2461db4fcc5..dbbbeecc56b 100644 --- a/crates/perry-codegen/src/inprocess.rs +++ b/crates/perry-codegen/src/inprocess.rs @@ -131,6 +131,10 @@ fn global_init(mllvm: &[String]) { let cfg = InitializationConfig::default(); Target::initialize_aarch64(&cfg); Target::initialize_x86(&cfg); + // Standalone WASI (#11375): only with the off-by-default `target-wasi` + // feature, so the shipped compiler does not carry the backend. + #[cfg(feature = "target-wasi")] + Target::initialize_webassembly(&cfg); if !mllvm.is_empty() { let mut argv: Vec = vec![CString::new("perry-llvm-inprocess").unwrap()]; for flag in mllvm { diff --git a/crates/perry-codegen/src/lib.rs b/crates/perry-codegen/src/lib.rs index 79708904302..66c74418758 100644 --- a/crates/perry-codegen/src/lib.rs +++ b/crates/perry-codegen/src/lib.rs @@ -80,6 +80,8 @@ pub mod typed_feedback_profile; pub(crate) mod typed_shape; pub mod types; pub mod unit_cache; +#[cfg(feature = "target-wasi")] +mod wasm32; pub use codegen::{ compile_module, context_free_ctor_abi, context_free_ctor_param_count, diff --git a/crates/perry-codegen/src/lower_call/new_alloc.rs b/crates/perry-codegen/src/lower_call/new_alloc.rs index 9e6e28d488e..91de56ecec6 100644 --- a/crates/perry-codegen/src/lower_call/new_alloc.rs +++ b/crates/perry-codegen/src/lower_call/new_alloc.rs @@ -545,7 +545,12 @@ fn emit_instance_alloc_inner( field_count, ) && image_size_agrees) || wide_birth_image; - if !descriptor_facts_exact || (!force_inline_new && !new_site_is_in_loop(ctx)) { + // ILP32 (wasm32 WASI, #11378): the inline bump below reads + // `InlineArenaState` at LP64 offsets; take the outlined call. + if !descriptor_facts_exact + || (!force_inline_new && !new_site_is_in_loop(ctx)) + || crate::codegen::helpers::ilp32_target() + { let keys_slot = if let Some(s) = ctx.class_keys_slots.get(class_name).cloned() { s } else { diff --git a/crates/perry-codegen/src/target_layout.rs b/crates/perry-codegen/src/target_layout.rs index f31416f8d94..d81a71610b7 100644 --- a/crates/perry-codegen/src/target_layout.rs +++ b/crates/perry-codegen/src/target_layout.rs @@ -62,6 +62,12 @@ pub fn target_is_ilp32(target_triple: &str) -> bool { /// makes those target-derived. The only ILP32 triple the driver produces is /// watchOS `arm64_32`, which is opt-in (`PERRY_WATCHOS_ARM64_32`). pub fn ilp32_codegen_refusal(target_triple: &str) -> Option { + // The one ILP32 target with a real lowering: wasm32 WASI, behind the + // off-by-default `target-wasi` feature (runtime ABI adapters in + // `crate::wasm32`, ILP32 shadow-stack/inline-path layouts). + if wasm32_lowering(target_triple) { + return None; + } target_is_ilp32(target_triple).then(|| { format!( "target `{target_triple}` has 32-bit pointers, and Perry's LLVM backend \ @@ -72,6 +78,15 @@ pub fn ilp32_codegen_refusal(target_triple: &str) -> Option { }) } +/// True when this compile targets wasm32 WASI AND the compiler was built with +/// the `target-wasi` feature — the only condition under which any wasm32 +/// lowering runs. Always false in a default build. +pub fn wasm32_lowering(target_triple: &str) -> bool { + cfg!(feature = "target-wasi") + && target_triple.starts_with("wasm32") + && target_triple.contains("wasi") +} + /// Exclusive upper bound accepted by the runtime's `is_valid_obj_ptr` for a /// candidate GC address. Linux-family AArch64 can use the full low 48-bit VA /// range; every other target keeps the canonical low-half 47-bit ceiling. @@ -326,7 +341,7 @@ mod tests { fn ilp32_targets_are_refused_and_lp64_targets_are_not() { for triple in [ "arm64_32-apple-watchos", - "wasm32-wasip2", + "wasm32-unknown-unknown", "i686-unknown-linux-gnu", // Not named anywhere: refused because they are not known 64-bit. "i586-unknown-linux-gnu", @@ -347,6 +362,55 @@ mod tests { ] { assert_eq!(ilp32_codegen_refusal(triple), None, "{triple}"); } + // wasm32 WASI has a real lowering, but only in a `target-wasi` build. + assert_eq!( + ilp32_codegen_refusal("wasm32-unknown-wasip2").is_none(), + cfg!(feature = "target-wasi"), + "wasm32 WASI is refused exactly when the feature is off" + ); + } + + #[test] + fn wasm32_lowering_needs_the_feature_and_a_wasi_triple() { + assert_eq!( + wasm32_lowering("wasm32-unknown-wasip2"), + cfg!(feature = "target-wasi") + ); + assert_eq!( + wasm32_lowering("wasm32-wasip1"), + cfg!(feature = "target-wasi") + ); + // Browser wasm has its own backend and never reaches this one. + assert!(!wasm32_lowering("wasm32-unknown-unknown")); + assert!(!wasm32_lowering("x86_64-unknown-linux-gnu")); + assert!(!wasm32_lowering("arm64_32-apple-watchos")); + } + + /// With the feature, a wasm32 WASI module compiles end to end and its + /// runtime calls come out adapted (the i64-handle call below would be a + /// link-time signature mismatch without the pass). + #[cfg(feature = "target-wasi")] + #[test] + fn compile_module_lowers_a_wasm32_wasi_module() { + let module = perry_hir::Module::new("wasi_smoke"); + let opts = crate::CompileOptions { + target: Some("wasm32-unknown-wasip2".into()), + emit_ir_only: true, + is_entry_module: true, + output_type: "executable".into(), + ..Default::default() + }; + let ir = String::from_utf8(crate::compile_module(&module, opts).expect("wasm32 compiles")) + .expect("IR is UTF-8"); + assert!( + ir.contains("target triple = \"wasm32-unknown-wasip2\""), + "{ir}" + ); + // Every runtime declaration is the runtime's real signature. + assert!( + ir.contains("declare ptr @js_string_from_bytes(ptr, i32)"), + "{ir}" + ); } /// The refusal must be reached by the real entry point, not just exist. diff --git a/crates/perry-codegen/src/wasm32/abi_adapt.rs b/crates/perry-codegen/src/wasm32/abi_adapt.rs new file mode 100644 index 00000000000..fed0b3d1bef --- /dev/null +++ b/crates/perry-codegen/src/wasm32/abi_adapt.rs @@ -0,0 +1,548 @@ +//! Route every runtime call through the runtime's real wasm32 signature. +//! +//! Codegen carries pointers as `i64` (NaN-box payloads, handles, raw heap +//! addresses), declares most runtime helpers that way, and lets each `call` +//! carry its own function type. On LP64 targets that is ABI-identical to the +//! runtime's `*mut T`/`usize` parameters. On wasm32 it is not: a pointer is +//! `i32`, and a call whose type differs from its callee's is a link-time +//! signature mismatch that traps (`scripts/runtime_abi_check.py` counts the +//! sites — over a thousand). +//! +//! Rather than retype every one of those sites (and risk LP64 output), this +//! pass rewrites the finished module text for wasm32 only: +//! +//! * each `declare` of a runtime symbol becomes the runtime's real signature, +//! read from `runtime_abi.tsv` — generated from the runtime's source by +//! `runtime_abi_check.py --emit-wasm-abi` and freshness-checked in CI; +//! * each `call`/`invoke` of such a symbol whose own type differs is pointed +//! at a small `internal alwaysinline` adapter with exactly the call's type, +//! which converts every argument to the real type (`trunc`/`inttoptr` for +//! i64 → pointer-width, zero/sign extension per the runtime type's +//! signedness on the way back) and calls the real function. +//! +//! After inlining the adapters cost nothing. Calls that already match are +//! left untouched, so the pass is the identity on a module with no +//! mismatches. + +use std::collections::HashMap; +use std::fmt::Write as _; +use std::sync::OnceLock; + +/// One ABI slot of a runtime signature, as `runtime_abi.tsv` spells it. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +enum Tok { + F64, + F32, + I64, + I32 { + signed: bool, + }, + I16 { + signed: bool, + }, + I8 { + signed: bool, + }, + Bool, + Ptr, + /// `usize`/`isize`: an `i32` on wasm32. + Size { + signed: bool, + }, + Void, +} + +impl Tok { + fn parse(s: &str) -> Option { + Some(match s { + "f64" => Tok::F64, + "f32" => Tok::F32, + "i64" => Tok::I64, + "i32s" => Tok::I32 { signed: true }, + "i32u" => Tok::I32 { signed: false }, + "i16s" => Tok::I16 { signed: true }, + "i16u" => Tok::I16 { signed: false }, + "i8s" => Tok::I8 { signed: true }, + "i8u" => Tok::I8 { signed: false }, + "bool" => Tok::Bool, + "ptr" => Tok::Ptr, + "isize" => Tok::Size { signed: true }, + "usize" => Tok::Size { signed: false }, + "void" => Tok::Void, + _ => return None, + }) + } + + fn ir(self) -> &'static str { + match self { + Tok::F64 => "double", + Tok::F32 => "float", + Tok::I64 => "i64", + Tok::I32 { .. } | Tok::Size { .. } => "i32", + Tok::I16 { .. } => "i16", + Tok::I8 { .. } => "i8", + Tok::Bool => "i1", + Tok::Ptr => "ptr", + Tok::Void => "void", + } + } + + /// Whether widening this value to a larger integer sign-extends. + fn signed(self) -> bool { + match self { + Tok::I32 { signed } + | Tok::I16 { signed } + | Tok::I8 { signed } + | Tok::Size { signed } => signed, + _ => false, + } + } +} + +struct Sig { + ret: Tok, + params: Vec, +} + +impl Sig { + fn ir_shape(&self) -> (&'static str, Vec<&'static str>) { + (self.ret.ir(), self.params.iter().map(|t| t.ir()).collect()) + } +} + +const TABLE_SRC: &str = include_str!("runtime_abi.tsv"); + +fn table() -> &'static HashMap<&'static str, Sig> { + static TABLE: OnceLock> = OnceLock::new(); + TABLE.get_or_init(|| parse_table(TABLE_SRC)) +} + +fn parse_table(src: &'static str) -> HashMap<&'static str, Sig> { + let mut out = HashMap::new(); + for line in src.lines() { + if line.is_empty() || line.starts_with('#') { + continue; + } + let mut cols = line.split('\t'); + let (Some(name), Some(ret), params) = (cols.next(), cols.next(), cols.next()) else { + panic!("runtime_abi.tsv: malformed line {line:?}"); + }; + let ret = + Tok::parse(ret).unwrap_or_else(|| panic!("runtime_abi.tsv: bad return in {line:?}")); + let params = params + .unwrap_or("") + .split(',') + .filter(|p| !p.is_empty()) + .map(|p| { + Tok::parse(p).unwrap_or_else(|| panic!("runtime_abi.tsv: bad param in {line:?}")) + }) + .collect(); + out.insert(name, Sig { ret, params }); + } + out +} + +/// A parsed call/invoke line: everything but the callee is kept verbatim. +struct CallSite<'a> { + /// The line up to and including the callee's `@`. + head: &'a str, + name: &'a str, + ret: &'a str, + /// `(type, value)` per argument. + args: Vec<(&'a str, &'a str)>, + /// Text from `(` (inclusive) to end of line. + tail: &'a str, +} + +/// `[%r = ][tail |musttail |notail ](call|invoke) [cc ] @name()…` +fn parse_call(line: &str) -> Option> { + let trimmed = line.trim_start(); + let mut rest = trimmed; + if rest.starts_with('%') { + let eq = rest.find(" = ")?; + rest = &rest[eq + 3..]; + } + for prefix in ["tail ", "musttail ", "notail "] { + if let Some(r) = rest.strip_prefix(prefix) { + rest = r; + break; + } + } + rest = rest + .strip_prefix("call ") + .or_else(|| rest.strip_prefix("invoke "))?; + let at = rest.find(" @")?; + let before = &rest[..at]; + // `before` is `[cc ]`; the return type is its last token. + let ret = before.rsplit(' ').next()?; + if ret.is_empty() || ret.contains('(') { + return None; // indirect call or a type we do not adapt + } + let after = &rest[at + 2..]; + let paren = after.find('(')?; + let name = &after[..paren]; + if name.is_empty() || name.starts_with('"') { + return None; + } + let args_start = paren + 1; + let close = matching_paren(after, paren)?; + let args_text = &after[args_start..close]; + let mut args = Vec::new(); + for a in split_top(args_text) { + let a = a.trim(); + let sp = a.find(' ')?; + args.push((&a[..sp], a[sp + 1..].trim())); + } + let head_len = line.len() - after.len(); + Some(CallSite { + head: &line[..head_len], + name, + ret, + args, + tail: &after[paren..], + }) +} + +fn matching_paren(s: &str, open: usize) -> Option { + let mut depth = 0i32; + let mut in_str = false; + for (i, ch) in s.char_indices().skip_while(|(i, _)| *i < open) { + match ch { + '"' => in_str = !in_str, + '(' | '[' | '{' | '<' if !in_str => depth += 1, + ')' | ']' | '}' | '>' if !in_str => { + depth -= 1; + if depth == 0 { + return Some(i); + } + } + _ => {} + } + } + None +} + +fn split_top(s: &str) -> Vec<&str> { + let (mut out, mut depth, mut start, mut in_str) = (Vec::new(), 0i32, 0usize, false); + for (i, ch) in s.char_indices() { + match ch { + '"' => in_str = !in_str, + '(' | '[' | '{' | '<' if !in_str => depth += 1, + ')' | ']' | '}' | '>' if !in_str => depth -= 1, + ',' if depth == 0 && !in_str => { + out.push(&s[start..i]); + start = i + 1; + } + _ => {} + } + } + if !s[start..].trim().is_empty() { + out.push(&s[start..]); + } + out +} + +/// `declare … @name()` → (name, suffix after `)`). +fn parse_declare(line: &str) -> Option<(&str, &str)> { + let rest = line.strip_prefix("declare ")?; + let at = rest.find(" @")?; + let after = &rest[at + 2..]; + let paren = after.find('(')?; + let close = matching_paren(after, paren)?; + Some((&after[..paren], &after[close + 1..])) +} + +fn int_bits(ty: &str) -> Option { + ty.strip_prefix('i').and_then(|b| b.parse().ok()) +} + +fn zero_of(ty: &str) -> &'static str { + match ty { + "double" | "float" => "0.0", + "ptr" => "null", + _ => "0", + } +} + +fn fresh(body: &mut String, n: &mut u32, inst: String) -> String { + *n += 1; + let r = format!("%c{n}"); + let _ = writeln!(body, " {r} = {inst}"); + r +} + +/// Emit instructions converting `val: from` to `to`, returning the new value. +/// `signed` decides sign- vs zero-extension when an integer widens. +fn convert( + body: &mut String, + n: &mut u32, + val: &str, + from: &str, + to: &str, + signed: bool, +) -> String { + if from == to { + return val.to_string(); + } + match (from, to) { + ("double", "float") => fresh(body, n, format!("fptrunc double {val} to float")), + ("float", "double") => fresh(body, n, format!("fpext float {val} to double")), + ("ptr", t) if int_bits(t).is_some() => fresh(body, n, format!("ptrtoint ptr {val} to {t}")), + (f, "ptr") if int_bits(f).is_some() => fresh(body, n, format!("inttoptr {f} {val} to ptr")), + (f, t) if int_bits(f).is_some() && int_bits(t).is_some() => { + let (fb, tb) = (int_bits(f).unwrap(), int_bits(t).unwrap()); + let op = if fb > tb { + "trunc" + } else if signed && fb > 1 { + "sext" + } else { + "zext" + }; + fresh(body, n, format!("{op} {f} {val} to {t}")) + } + // Mixed float/integer/pointer (the "class" mismatches the checker + // reports on every target): move the bits through i64, which is what + // those call sites assume when they box or unbox by hand. + ("double", t) => { + let bits = fresh(body, n, format!("bitcast double {val} to i64")); + convert(body, n, &bits, "i64", t, signed) + } + (f, "double") => { + let bits = convert(body, n, val, f, "i64", signed); + fresh(body, n, format!("bitcast i64 {bits} to double")) + } + ("float", t) => { + let bits = fresh(body, n, format!("bitcast float {val} to i32")); + convert(body, n, &bits, "i32", t, signed) + } + (f, "float") => { + let bits = convert(body, n, val, f, "i32", signed); + fresh(body, n, format!("bitcast i32 {bits} to float")) + } + _ => val.to_string(), + } +} + +fn adapter( + name: &str, + sig: &Sig, + call_ret: &str, + call_args: &[&str], + adapter_name: &str, +) -> String { + let (real_ret, real_params) = sig.ir_shape(); + let mut body = String::new(); + let mut n = 0u32; + let mut real_args = Vec::new(); + for (i, (real_ty, tok)) in real_params.iter().zip(&sig.params).enumerate() { + match call_args.get(i) { + Some(from) => { + let v = convert( + &mut body, + &mut n, + &format!("%a{i}"), + from, + real_ty, + tok.signed(), + ); + real_args.push(format!("{real_ty} {v}")); + } + // A call site passing fewer arguments than the runtime reads + // (an arity mismatch on every target): pass a defined zero. + None => real_args.push(format!("{real_ty} {}", zero_of(real_ty))), + } + } + let params: Vec = call_args + .iter() + .enumerate() + .map(|(i, t)| format!("{t} %a{i}")) + .collect(); + let call = format!("call {real_ret} @{name}({})", real_args.join(", ")); + if real_ret == "void" { + let _ = writeln!(body, " {call}"); + } else { + let _ = writeln!(body, " %r = {call}"); + } + if call_ret == "void" { + let _ = writeln!(body, " ret void"); + } else if real_ret == "void" { + let _ = writeln!(body, " ret {call_ret} {}", zero_of(call_ret)); + } else { + let v = convert( + &mut body, + &mut n, + "%r", + real_ret, + call_ret, + sig.ret.signed(), + ); + let _ = writeln!(body, " ret {call_ret} {v}"); + } + format!( + "define internal {call_ret} @{adapter_name}({}) alwaysinline {{\nentry:\n{body}}}\n", + params.join(", ") + ) +} + +/// Rewrite one module's IR text so every call to a runtime symbol matches the +/// runtime's real wasm32 signature. The identity on a module with nothing to +/// adapt. +pub(crate) fn adapt_runtime_abi(ir: &str) -> String { + adapt_with(ir, table()) +} + +fn adapt_with(ir: &str, table: &HashMap<&str, Sig>) -> String { + let mut out = String::with_capacity(ir.len() + 4096); + // (symbol, call ret, call arg types) -> adapter name + let mut adapters: HashMap<(String, String, Vec), String> = HashMap::new(); + let mut defs = String::new(); + for line in ir.split_inclusive('\n') { + let body = line.trim_end_matches('\n'); + let nl = &line[body.len()..]; + if let Some((name, suffix)) = parse_declare(body) { + if let Some(sig) = table.get(name) { + let (ret, params) = sig.ir_shape(); + let _ = write!( + out, + "declare {ret} @{name}({}){suffix}{nl}", + params.join(", ") + ); + continue; + } + } + if let Some(site) = parse_call(body) { + if let Some(sig) = table.get(site.name) { + let (real_ret, real_params) = sig.ir_shape(); + let call_args: Vec<&str> = site.args.iter().map(|(t, _)| *t).collect(); + if site.ret != real_ret || call_args != real_params { + let key = ( + site.name.to_string(), + site.ret.to_string(), + call_args.iter().map(|s| s.to_string()).collect(), + ); + let next = adapters.len(); + let adapter_name = adapters + .entry(key) + .or_insert_with(|| { + let an = format!("__perry_wabi.{}.{next}", site.name); + defs.push_str(&adapter(site.name, sig, site.ret, &call_args, &an)); + an + }) + .clone(); + let _ = write!(out, "{}{adapter_name}{}{nl}", site.head, site.tail); + continue; + } + } + } + out.push_str(line); + } + if !defs.is_empty() { + out.push_str("\n; wasm32 runtime ABI adapters (#11378)\n"); + out.push_str(&defs); + } + out +} + +#[cfg(test)] +mod tests { + use super::*; + + fn tbl() -> HashMap<&'static str, Sig> { + parse_table( + "# header\n\ + js_ptr_ret\tptr\tptr,i32u\n\ + js_usize_ret\tusize\t\n\ + js_signed\ti32s\tf64\n\ + js_takes_ptr\tvoid\tptr\n\ + js_two\tf64\tf64,f64\n", + ) + } + + #[test] + fn matching_calls_and_foreign_symbols_are_untouched() { + let ir = "declare double @js_two(double, double)\n\ + declare i64 @user_fn(i64)\n\ + define void @f() {\n\ + entry:\n %1 = call double @js_two(double 1.0, double 2.0)\n %2 = call i64 @user_fn(i64 3)\n ret void\n}\n"; + assert_eq!(adapt_with(ir, &tbl()), ir); + } + + #[test] + fn i64_pointer_calls_get_one_adapter_per_shape() { + let ir = "declare i64 @js_ptr_ret(i64, i32)\n\ + declare void @js_takes_ptr(i64)\n\ + define void @f(i64 %h) {\n\ + entry:\n %1 = call i64 @js_ptr_ret(i64 %h, i32 4)\n %2 = call i64 @js_ptr_ret(i64 %1, i32 5)\n call void @js_takes_ptr(i64 %2)\n ret void\n}\n"; + let out = adapt_with(ir, &tbl()); + // Declarations become the runtime's real signatures. + assert!(out.contains("declare ptr @js_ptr_ret(ptr, i32)\n"), "{out}"); + assert!(out.contains("declare void @js_takes_ptr(ptr)\n"), "{out}"); + // Both calls of the same shape share one adapter. + assert_eq!( + out.matches("@__perry_wabi.js_ptr_ret.0(").count(), + 3, + "{out}" + ); + assert!(out.contains("inttoptr i64 %a0 to ptr"), "{out}"); + assert!(out.contains("ptrtoint ptr %r to i64"), "{out}"); + assert!( + out.contains("call void @__perry_wabi.js_takes_ptr.1(i64 %2)"), + "{out}" + ); + } + + #[test] + fn narrow_returns_widen_by_the_runtime_types_signedness() { + let ir = " %1 = call i64 @js_usize_ret()\n %2 = call i64 @js_signed(double %x)\n"; + let out = adapt_with(ir, &tbl()); + assert!( + out.contains("zext i32 %r to i64"), + "usize widens unsigned: {out}" + ); + assert!( + out.contains("sext i32 %r to i64"), + "i32s widens signed: {out}" + ); + } + + #[test] + fn invoke_tail_and_short_calls_are_adapted() { + let ir = " %1 = invoke double @js_two(double %a) to label %ok unwind label %lp\n\ + \x20 %2 = tail call double @js_two(i64 %b, double %c)\n\ + \x20 call void @js_signed(double %d)\n"; + let out = adapt_with(ir, &tbl()); + // Missing argument: a defined zero, not garbage. + assert!( + out.contains("call double @js_two(double %a0, double 0.0)"), + "{out}" + ); + assert!( + out.contains( + "invoke double @__perry_wabi.js_two.0(double %a) to label %ok unwind label %lp" + ), + "{out}" + ); + assert!( + out.contains("tail call double @__perry_wabi.js_two.1(i64 %b, double %c)"), + "{out}" + ); + assert!(out.contains("bitcast i64 %a0 to double"), "{out}"); + // A value dropped by a void call site. + assert!( + out.contains("call void @__perry_wabi.js_signed.2(double %d)"), + "{out}" + ); + } + + #[test] + fn the_checked_in_table_parses() { + let t = table(); + assert!( + t.len() > 1000, + "runtime_abi.tsv looks truncated: {} symbols", + t.len() + ); + let s = &t["js_string_from_bytes"]; + assert_eq!(s.ir_shape(), ("ptr", vec!["ptr", "i32"])); + } +} diff --git a/crates/perry-codegen/src/wasm32/mod.rs b/crates/perry-codegen/src/wasm32/mod.rs new file mode 100644 index 00000000000..1a0ffe5e5d1 --- /dev/null +++ b/crates/perry-codegen/src/wasm32/mod.rs @@ -0,0 +1,9 @@ +//! wasm32 lowering for the standalone WASI target (#11375, #11378). +//! +//! Only compiled with the off-by-default `target-wasi` feature, and only ever +//! applied to a module whose triple is wasm32 — no other target's output can +//! reach anything in here. + +mod abi_adapt; + +pub(crate) use abi_adapt::adapt_runtime_abi; diff --git a/crates/perry-codegen/src/wasm32/runtime_abi.tsv b/crates/perry-codegen/src/wasm32/runtime_abi.tsv new file mode 100644 index 00000000000..5d8c7fd08ab --- /dev/null +++ b/crates/perry-codegen/src/wasm32/runtime_abi.tsv @@ -0,0 +1,4598 @@ +# GENERATED by scripts/runtime_abi_check.py --emit-wasm-abi; do not edit. +# The runtime's real extern "C" signatures as wasm32 sees them +# (#11378): symbolreturncomma-separated params. +clearImmediate void i64 +clearInterval void i64 +clearTimeout void i64 +gc_check_trigger_export void +global_this_builtin_noop_thunk f64 ptr,f64 +js_abort_controller_abort void ptr +js_abort_controller_abort_reason void ptr,f64 +js_abort_controller_new ptr +js_abort_controller_signal ptr ptr +js_abort_error_value f64 +js_abort_signal_abort ptr f64 +js_abort_signal_add_listener void ptr,f64,f64 +js_abort_signal_any ptr ptr +js_abort_signal_is_aborted i32s ptr +js_abort_signal_listener_count f64 ptr +js_abort_signal_listeners_copy ptr ptr +js_abort_signal_remove_listener void ptr,f64,f64 +js_abort_signal_resolve_ptr ptr f64 +js_abort_signal_throw_if_aborted f64 ptr +js_abort_signal_timeout ptr f64 +js_add i64 i64,i64 +js_add_throw_if_symbol void f64 +js_ads_banner_create f64 ptr,ptr +js_ads_banner_destroy void f64 +js_ads_interstitial_load ptr ptr +js_ads_interstitial_show ptr +js_ads_request_consent ptr +js_ads_rewarded_load ptr ptr +js_ads_rewarded_show ptr +js_aggregateerror_new ptr ptr,ptr +js_aggregateerror_new_full ptr f64,ptr,f64 +js_arena_alloc ptr i32u +js_arena_stats void ptr,ptr +js_argon2_hash ptr ptr +js_argon2_hash_options i64 +js_argon2_hash_sync ptr ptr +js_argon2_needs_rehash i32s ptr +js_argon2_verify ptr ptr,ptr +js_argon2_verify_sync i32s ptr,ptr +js_arguments_bundle_get_slow f64 f64,f64,f64,ptr,i32s +js_arguments_bundle_index_get f64 f64,f64 +js_arguments_object_alloc ptr f64,f64,i32s +js_arguments_object_map_index void ptr,i32u,ptr +js_array_alloc ptr i32u +js_array_alloc_literal ptr i32u +js_array_alloc_with_length ptr i32u +js_array_alloc_with_length_longlived ptr i32u +js_array_at f64 ptr,f64 +js_array_buffer_new ptr i32s +js_array_buffer_new_value ptr f64 +js_array_buffer_new_with_options ptr f64,f64 +js_array_clear_numeric_layout void ptr +js_array_clone ptr ptr +js_array_clone_for_spread ptr f64 +js_array_concat ptr ptr,ptr +js_array_concat_new ptr ptr,ptr +js_array_concat_variadic ptr ptr,ptr,i32s +js_array_constructor_single ptr f64 +js_array_copy_within ptr ptr,f64,f64,i32s,f64 +js_array_copy_within_value f64 f64,f64,f64,i32s,f64 +js_array_create i64 +js_array_declare_all_pointer_elements void ptr +js_array_delete i32s ptr,i32u +js_array_element_shape_check i32s ptr,i32s,i64 +js_array_element_shape_class i32s ptr +js_array_element_shape_epoch i64 +js_array_element_shape_version i64 ptr +js_array_ensure_element_shape i32s ptr +js_array_ensure_element_shape_ordinary i32s ptr +js_array_entries ptr ptr +js_array_entries_iter_obj i64 ptr +js_array_every f64 ptr,ptr +js_array_fill ptr ptr,f64 +js_array_fill_f64_const_extend ptr ptr,i32u,f64 +js_array_fill_f64_const_len_extend ptr ptr,f64 +js_array_fill_f64_iota_extend ptr ptr,i32u +js_array_fill_f64_iota_len_extend ptr ptr +js_array_fill_generic f64 f64,f64,i32s,f64,i32s,f64 +js_array_fill_range ptr ptr,f64,f64,f64 +js_array_fill_range_strided_tagged i64 f64,f64,f64,f64,i64 +js_array_filter ptr ptr,ptr +js_array_find f64 ptr,ptr +js_array_findIndex i32s ptr,ptr +js_array_find_last f64 ptr,ptr +js_array_find_last_index i32s ptr,ptr +js_array_flat ptr ptr +js_array_flatMap ptr ptr,ptr +js_array_flat_depth ptr ptr,f64 +js_array_forEach void ptr,ptr +js_array_from_arraylike_holey_value ptr f64 +js_array_from_async f64 f64,f64,f64 +js_array_from_f64 ptr ptr,i32u +js_array_from_jsvalue ptr ptr,i32u +js_array_from_mapped ptr f64,f64,f64 +js_array_from_value ptr f64 +js_array_from_values ptr ptr,i32u +js_array_get i64 ptr,i32u +js_array_get_element f64 i64,i64 +js_array_get_element_f64 f64 i64,i64 +js_array_get_f64 f64 ptr,i32u +js_array_get_f64_unchecked f64 ptr,i32u +js_array_get_index_or_string f64 ptr,f64 +js_array_get_jsvalue i64 ptr,i32u +js_array_get_length i64 i64 +js_array_grow ptr ptr,i32u +js_array_includes_f64 i32s ptr,f64 +js_array_includes_jsvalue i32s ptr,f64,f64,i32s +js_array_indexOf_f64 i32s ptr,f64 +js_array_indexOf_jsvalue i64 ptr,f64,f64,i32s +js_array_is_array f64 f64 +js_array_is_numeric_f64_layout i32s ptr +js_array_join ptr ptr,ptr +js_array_join_value ptr ptr,f64 +js_array_keys ptr ptr +js_array_keys_iter_obj i64 ptr +js_array_last_index_of_jsvalue i64 ptr,f64,f64,i32s +js_array_length i32u ptr +js_array_like_to_array ptr f64 +js_array_live_head i64 i64 +js_array_map ptr ptr,ptr +js_array_map_discard void ptr,ptr +js_array_mark_arguments_object ptr ptr +js_array_mark_numeric_f64_layout i32s ptr +js_array_note_numeric_write void ptr,i64 +js_array_numeric_get_f64_unboxed f64 ptr,i32u +js_array_numeric_push_f64_unboxed ptr ptr,f64 +js_array_numeric_range_add i64 f64,f64,f64,f64 +js_array_numeric_range_add_len i64 f64,f64,f64 +js_array_numeric_set_f64_unboxed i32s ptr,i32u,f64 +js_array_numeric_value_to_raw_f64 f64 f64 +js_array_pop_f64 f64 ptr +js_array_print void ptr +js_array_push ptr ptr,i64 +js_array_push_f64 ptr ptr,f64 +js_array_push_f64_spec ptr ptr,f64 +js_array_push_f64_spec_or_own i64 ptr,f64,ptr +js_array_push_f64_temp_rooted void i32u,f64 +js_array_push_guard void ptr +js_array_push_hole ptr ptr +js_array_push_jsvalue ptr ptr,i64 +js_array_push_spread_any ptr ptr,f64 +js_array_push_spread_f64 ptr ptr,ptr +js_array_push_u31_with_length ptr ptr,i32u,ptr +js_array_reduce f64 ptr,ptr,i32s,f64 +js_array_reduce_right f64 ptr,ptr,i32s,f64 +js_array_refresh_local_head f64 f64 +js_array_reverse ptr ptr +js_array_reverse_value f64 f64 +js_array_set void ptr,i32u,i64 +js_array_set_f64 void ptr,i32u,f64 +js_array_set_f64_extend ptr ptr,i32u,f64 +js_array_set_f64_extend_strict ptr ptr,i32u,f64 +js_array_set_f64_unchecked void ptr,i32u,f64 +js_array_set_index_or_string ptr ptr,f64,f64 +js_array_set_index_or_string_strict ptr ptr,f64,f64 +js_array_set_jsvalue void ptr,i32u,i64 +js_array_set_jsvalue_extend ptr ptr,i32u,i64 +js_array_set_length void ptr,f64 +js_array_set_length_strict void ptr,f64 +js_array_set_string_key ptr ptr,ptr,f64 +js_array_shift_f64 f64 ptr +js_array_slice ptr ptr,i32s,i32s +js_array_slice_values ptr ptr,f64,f64 +js_array_some f64 ptr,ptr +js_array_some_captureless f64 ptr,ptr +js_array_sort_default ptr ptr +js_array_sort_with_comparator ptr ptr,ptr +js_array_splice ptr ptr,i32s,i32s,ptr,i32u,ptr +js_array_splice_delete_count i32s f64 +js_array_spread_append ptr ptr,f64 +js_array_subclass_init f64 f64,f64 +js_array_subclass_init_args f64 f64,ptr,usize +js_array_to_locale_string ptr ptr,f64,f64 +js_array_to_reversed ptr ptr +js_array_to_sorted_default ptr ptr +js_array_to_sorted_with_comparator ptr ptr,ptr +js_array_to_spliced ptr ptr,f64,f64,ptr,i32u +js_array_unshift_f64 ptr ptr,f64 +js_array_unshift_jsvalue ptr ptr,i64 +js_array_unshift_variadic ptr ptr,ptr,i32u +js_array_values ptr ptr +js_array_values_iter_obj i64 ptr +js_array_with ptr ptr,f64,f64 +js_arraylike_at f64 f64,f64 +js_arraylike_concat f64 f64,ptr,i32s +js_arraylike_copy_within f64 f64,f64,f64,i32s,f64 +js_arraylike_every f64 f64,f64,f64 +js_arraylike_filter f64 f64,f64,f64 +js_arraylike_find f64 f64,f64,f64 +js_arraylike_findIndex f64 f64,f64,f64 +js_arraylike_findLast f64 f64,f64,f64 +js_arraylike_findLastIndex f64 f64,f64,f64 +js_arraylike_flat f64 f64,f64 +js_arraylike_forEach f64 f64,f64,f64 +js_arraylike_includes f64 f64,f64,f64,i32s +js_arraylike_indexOf f64 f64,f64,f64,i32s +js_arraylike_join f64 f64,f64 +js_arraylike_lastIndexOf f64 f64,f64,f64,i32s +js_arraylike_map f64 f64,f64,f64 +js_arraylike_pop f64 f64 +js_arraylike_push f64 f64,ptr,i32s +js_arraylike_reduce f64 f64,f64,i32s,f64 +js_arraylike_reduceRight f64 f64,f64,i32s,f64 +js_arraylike_shift f64 f64 +js_arraylike_slice f64 f64,f64,i32s,f64,i32s +js_arraylike_some f64 f64,f64,f64 +js_arraylike_sort f64 f64,f64 +js_arraylike_splice f64 f64,ptr,i32s +js_arraylike_unshift f64 f64,ptr,i32s +js_assert_assert_ctor f64 f64 +js_assert_assertion_error_ctor f64 f64 +js_assert_deep_equal f64 f64,f64,f64 +js_assert_deep_equal_skip_prototype f64 f64,f64,f64 +js_assert_deep_strict_equal f64 f64,f64,f64 +js_assert_deep_strict_equal_skip_prototype f64 f64,f64,f64 +js_assert_does_not_match f64 f64,f64,f64 +js_assert_does_not_reject f64 f64,f64,f64 +js_assert_does_not_throw f64 f64,f64,f64 +js_assert_equal f64 f64,f64,f64 +js_assert_fail f64 f64 +js_assert_if_error f64 f64 +js_assert_match f64 f64,f64,f64 +js_assert_not_deep_equal f64 f64,f64,f64 +js_assert_not_deep_equal_skip_prototype f64 f64,f64,f64 +js_assert_not_deep_strict_equal f64 f64,f64,f64 +js_assert_not_deep_strict_equal_skip_prototype f64 f64,f64,f64 +js_assert_not_equal f64 f64,f64,f64 +js_assert_not_strict_equal f64 f64,f64,f64 +js_assert_ok f64 f64,f64 +js_assert_partial_deep_strict_equal f64 f64,f64,f64 +js_assert_rejects f64 f64,f64,f64 +js_assert_strict_equal f64 f64,f64,f64 +js_assert_throws f64 f64,f64,f64 +js_assimilate_thenable f64 f64 +js_async_context_als_clear void i64 +js_async_context_als_enter_with void i64,f64 +js_async_context_als_exit_enter void i64 +js_async_context_als_get_store f64 i64 +js_async_context_als_run_enter void i64,f64 +js_async_context_als_scope_leave void +js_async_disposable_stack_dispose_async f64 ptr +js_async_disposable_stack_new ptr +js_async_disposable_stack_symbol_async_dispose f64 ptr +js_async_disposable_stack_use f64 ptr,f64 +js_async_first_call f64 f64 +js_async_fn_result ptr f64 +js_async_generator_resume f64 f64,f64,f64 +js_async_hook_disable i64 i64 +js_async_hook_enable i64 i64 +js_async_hooks_create_hook i64 f64 +js_async_hooks_execution_async_id f64 +js_async_hooks_execution_async_resource f64 +js_async_hooks_provider_defer_destroy void i64,i32u +js_async_hooks_provider_destroy void i64 +js_async_hooks_provider_enter void i64 +js_async_hooks_provider_init i64 ptr,usize +js_async_hooks_provider_init_with_trigger i64 ptr,usize,i64 +js_async_hooks_provider_leave void i64 +js_async_hooks_provider_run_catching f64 i64,ptr,ptr +js_async_hooks_provider_run_catching_deferred_destroy f64 i64,i32u,ptr,ptr +js_async_hooks_provider_run_catching_deferred_destroy_on_error f64 i64,i32u,ptr,ptr +js_async_hooks_provider_run_catching_with_this f64 i64,f64,i32s,ptr,ptr +js_async_hooks_trigger_async_id f64 +js_async_local_storage_disable void i64 +js_async_local_storage_enter_with void i64,f64 +js_async_local_storage_exit f64 i64,f64,i64 +js_async_local_storage_get_store f64 i64 +js_async_local_storage_new i64 +js_async_local_storage_run f64 i64,f64,f64,i64 +js_async_local_storage_static_bind_direct f64 f64,i64 +js_async_local_storage_static_snapshot_direct f64 i64 +js_async_local_storage_subclass_init f64 f64 +js_async_resource_async_id f64 i64 +js_async_resource_bind i64 i64,f64,f64 +js_async_resource_emit_destroy i64 i64 +js_async_resource_new i64 f64,f64 +js_async_resource_run_in_async_scope f64 i64,f64,f64,i64 +js_async_resource_set_event_emitter void i64,i64 +js_async_resource_static_bind i64 i64,f64 +js_async_resource_static_bind_direct f64 f64,f64,f64,i64 +js_async_resource_subclass_init f64 f64,f64,f64 +js_async_resource_trigger_async_id f64 i64 +js_async_step_chain ptr f64,ptr +js_async_step_done ptr f64,ptr +js_atob ptr f64 +js_atomics_add f64 ptr,f64,f64,f64 +js_atomics_and f64 ptr,f64,f64,f64 +js_atomics_compare_exchange f64 ptr,f64,f64,f64,f64 +js_atomics_exchange f64 ptr,f64,f64,f64 +js_atomics_is_lock_free f64 ptr,f64 +js_atomics_load f64 ptr,f64,f64 +js_atomics_notify f64 ptr,f64,f64,f64 +js_atomics_or f64 ptr,f64,f64,f64 +js_atomics_store f64 ptr,f64,f64,f64 +js_atomics_sub f64 ptr,f64,f64,f64 +js_atomics_wait f64 ptr,f64,f64,f64,f64 +js_atomics_wait_async f64 ptr,f64,f64,f64,f64 +js_atomics_xor f64 ptr,f64,f64,f64 +js_aux_has_active i32s +js_await_any_promise f64 f64 +js_await_js_promise f64 f64 +js_await_loop_tick_timers i32s +js_bcrypt_compare ptr ptr,ptr +js_bcrypt_compare_sync f64 ptr,ptr +js_bcrypt_gen_salt ptr f64 +js_bcrypt_hash ptr ptr,f64 +js_bcrypt_hash_sync i64 ptr,f64 +js_bigint_add ptr ptr,ptr +js_bigint_and ptr ptr,ptr +js_bigint_as_int_n ptr i32u,ptr +js_bigint_as_int_n_call f64 f64,f64 +js_bigint_as_uint_n ptr i32u,ptr +js_bigint_as_uint_n_call f64 f64,f64 +js_bigint_cmp i32s ptr,ptr +js_bigint_div ptr ptr,ptr +js_bigint_eq i32s ptr,ptr +js_bigint_error void ptr +js_bigint_from_f64 ptr f64 +js_bigint_from_i128_parts ptr i64,i64 +js_bigint_from_i64 ptr i64 +js_bigint_from_string ptr ptr,i32u +js_bigint_from_string_radix ptr ptr,i32u,i32s +js_bigint_from_u64 ptr i64 +js_bigint_is_negative i32s ptr +js_bigint_is_zero i32s ptr +js_bigint_mod ptr ptr,ptr +js_bigint_mul ptr ptr,ptr +js_bigint_neg ptr ptr +js_bigint_not ptr ptr +js_bigint_or ptr ptr,ptr +js_bigint_pow ptr ptr,ptr +js_bigint_print void ptr +js_bigint_shl ptr ptr,ptr +js_bigint_shr ptr ptr,ptr +js_bigint_sub ptr ptr,ptr +js_bigint_to_buffer ptr ptr,i32s +js_bigint_to_f64 f64 ptr +js_bigint_to_string ptr ptr +js_bigint_to_string_radix ptr ptr,i32s +js_bigint_warn void ptr +js_bigint_xor ptr ptr,ptr +js_blob_array_buffer ptr f64 +js_blob_bytes ptr f64 +js_blob_new f64 f64,f64 +js_blob_size f64 f64 +js_blob_slice f64 f64,f64,f64,ptr +js_blob_stream f64 f64 +js_blob_text ptr f64 +js_blob_type ptr f64 +js_bool_box_alloc ptr i32s +js_bool_box_get i32s ptr +js_bool_box_release void ptr +js_bool_box_scope_release void ptr +js_bool_box_set void ptr,i32s +js_bootstrap_cjs_main_module_placeholder void +js_box_alloc ptr f64 +js_box_alloc_bits ptr i64 +js_box_capture_cell_ptr i64 i64 +js_box_get f64 ptr +js_box_get_bits i64 ptr +js_box_get_bits_named i64 ptr,f64 +js_box_get_bits_trusted i64 ptr +js_box_get_bits_trusted_named i64 ptr,f64 +js_box_release void ptr +js_box_scope_release void ptr +js_box_set void ptr,f64 +js_box_set_bits void ptr,i64 +js_box_set_bits_trusted_no_barrier void ptr,i64 +js_boxed_bigint_new f64 f64 +js_boxed_boolean_new f64 f64 +js_boxed_number_new f64 f64 +js_boxed_string_new f64 f64,i32s +js_boxed_symbol_new f64 f64 +js_broadcast_channel_new f64 f64 +js_btoa ptr f64 +js_buffer_alloc ptr i32s,i32s +js_buffer_alloc_fill_value ptr i32s,f64,i32s +js_buffer_alloc_unsafe ptr i32s +js_buffer_byte_length i32s ptr +js_buffer_byte_length_value i32s f64,f64 +js_buffer_compare i32s ptr,ptr +js_buffer_compare_range i32s ptr,ptr,i32s,i32s,i32s,i32s +js_buffer_concat ptr ptr +js_buffer_concat_with_length ptr ptr,f64 +js_buffer_copy i32s ptr,ptr,i32s,i32s,i32s +js_buffer_copy_bytes_from ptr f64,f64,f64 +js_buffer_entries f64 f64 +js_buffer_equals i32s ptr,ptr +js_buffer_fill ptr ptr,i32s +js_buffer_fill_random f64 f64 +js_buffer_fill_range ptr ptr,i32s,i32s,i32s +js_buffer_fill_value_range ptr ptr,f64,i32s,i32s,i32s +js_buffer_from_array ptr ptr +js_buffer_from_arraybuffer_slice ptr i64,i32s,i32s +js_buffer_from_string ptr ptr,i32s +js_buffer_from_value ptr i64,i32s +js_buffer_get i32s ptr,i32s +js_buffer_includes i32s f64,f64,i32s +js_buffer_includes_enc i32s f64,f64,i32s,i32s +js_buffer_index_get_value f64 ptr,i32s +js_buffer_index_of i32s f64,f64,i32s +js_buffer_index_of_enc i32s f64,f64,i32s,i32s +js_buffer_is_ascii f64 f64 +js_buffer_is_buffer i32s i64 +js_buffer_is_encoding i32s f64 +js_buffer_is_node_buffer i32s i64 +js_buffer_is_utf8 f64 f64 +js_buffer_keys f64 f64 +js_buffer_last_index_of i32s f64,f64,i32s +js_buffer_last_index_of_enc i32s f64,f64,i32s,i32s +js_buffer_length i32s ptr +js_buffer_mark_as_crypto_key_external void usize,i8u,i8u,i8u,i8u,i32u,i32u +js_buffer_mark_as_uint8array_external void usize +js_buffer_print void ptr +js_buffer_read_bigint64_be f64 f64,i32s +js_buffer_read_bigint64_le f64 f64,i32s +js_buffer_read_biguint64_be f64 f64,i32s +js_buffer_read_biguint64_le f64 f64,i32s +js_buffer_read_double_be f64 f64,i32s +js_buffer_read_double_le f64 f64,i32s +js_buffer_read_float_be f64 f64,i32s +js_buffer_read_float_le f64 f64,i32s +js_buffer_read_int16_be f64 f64,i32s +js_buffer_read_int16_le f64 f64,i32s +js_buffer_read_int32_be f64 f64,i32s +js_buffer_read_int32_le f64 f64,i32s +js_buffer_read_int8 f64 f64,i32s +js_buffer_read_int_be f64 f64,i32s,i32s +js_buffer_read_int_le f64 f64,i32s,i32s +js_buffer_read_uint16_be f64 f64,i32s +js_buffer_read_uint16_le f64 f64,i32s +js_buffer_read_uint32_be f64 f64,i32s +js_buffer_read_uint32_le f64 f64,i32s +js_buffer_read_uint8 f64 f64,i32s +js_buffer_read_uint_be f64 f64,i32s,i32s +js_buffer_read_uint_le f64 f64,i32s,i32s +js_buffer_register_external void usize +js_buffer_resolve_object_url f64 f64 +js_buffer_set void ptr,i32s,i32s +js_buffer_set_from void ptr,ptr,i32s +js_buffer_set_from_value f64 ptr,f64,f64 +js_buffer_slice ptr ptr,i32s,i32s +js_buffer_swap16 void f64 +js_buffer_swap32 void f64 +js_buffer_swap64 void f64 +js_buffer_to_json f64 f64 +js_buffer_to_string ptr ptr,i32s +js_buffer_to_string_range ptr ptr,i32s,i32s,i32s +js_buffer_transcode ptr f64,f64,f64 +js_buffer_validate_concat_list i64 f64 +js_buffer_validate_size i32s f64 +js_buffer_values f64 f64 +js_buffer_write i32s ptr,ptr,i32s,i32s +js_buffer_write_bigint64_be void f64,f64,i32s +js_buffer_write_bigint64_le void f64,f64,i32s +js_buffer_write_biguint64_be void f64,f64,i32s +js_buffer_write_biguint64_le void f64,f64,i32s +js_buffer_write_double_be void f64,f64,i32s +js_buffer_write_double_le void f64,f64,i32s +js_buffer_write_float_be void f64,f64,i32s +js_buffer_write_float_le void f64,f64,i32s +js_buffer_write_int16_be void f64,f64,i32s +js_buffer_write_int16_le void f64,f64,i32s +js_buffer_write_int32_be void f64,f64,i32s +js_buffer_write_int32_le void f64,f64,i32s +js_buffer_write_int8 void f64,f64,i32s +js_buffer_write_int_be void f64,f64,i32s,i32s +js_buffer_write_int_le void f64,f64,i32s,i32s +js_buffer_write_len i32s ptr,ptr,i32s,i32s,i32s +js_buffer_write_uint16_be void f64,f64,i32s +js_buffer_write_uint16_le void f64,f64,i32s +js_buffer_write_uint32_be void f64,f64,i32s +js_buffer_write_uint32_le void f64,f64,i32s +js_buffer_write_uint8 void f64,f64,i32s +js_buffer_write_uint_be void f64,f64,i32s,i32s +js_buffer_write_uint_le void f64,f64,i32s,i32s +js_build_class_keys_array ptr i32u,i32u,ptr,i32u +js_builtin_prototype_method_value f64 ptr,usize,ptr,usize +js_builtin_subclass_construct f64 i32u,ptr,usize,ptr,usize +js_bun_ant_get_peer_pid f64 f64 +js_bun_ant_get_peer_uid f64 f64 +js_bun_ant_memory_pressure_level f64 +js_bun_build ptr f64 +js_bun_deep_equals f64 f64,f64,f64 +js_bun_ffi_has_active_threadsafe_callbacks i32s +js_bun_file f64 f64 +js_bun_gc f64 f64 +js_bun_generate_heap_snapshot f64 f64,f64 +js_bun_glob_new f64 f64 +js_bun_hash f64 f64,f64 +js_bun_http_request_from_json f64 ptr +js_bun_http_response_snapshot_json ptr f64 +js_bun_jsc_heap_stats f64 f64 +js_bun_platform_enabled i32s +js_bun_plugin f64 f64 +js_bun_serve i64 f64 +js_bun_server_request_ip f64 i64,f64 +js_bun_server_stop f64 i64,f64 +js_bun_spawn f64 f64,f64 +js_bun_sql_new f64 f64,f64 +js_bun_sqlite_database_call i64 f64,f64 +js_bun_sqlite_database_filename ptr i64 +js_bun_sqlite_database_new i64 f64,f64 +js_bun_sqlite_database_query i64 i64,f64 +js_bun_sqlite_database_run ptr i64,f64,ptr +js_bun_sqlite_database_transaction ptr i64,f64 +js_bun_sqlite_statement_finalize void i64 +js_bun_sqlite_statement_safe_integers f64 i64,f64 +js_bun_sqlite_statement_values ptr i64,ptr +js_bun_stderr f64 +js_bun_stdin f64 +js_bun_stdout f64 +js_bun_string_width f64 f64,f64 +js_bun_strip_ansi f64 f64 +js_bun_tcp_connect ptr f64 +js_bun_tcp_listen i64 f64 +js_bun_tcp_native_dispatch f64 ptr,usize,ptr,usize +js_bun_tcp_nm_install void +js_bun_terminal_new f64 f64 +js_bun_transpiler_new i64 f64 +js_bun_transpiler_scan ptr i64,ptr +js_bun_transpiler_scan_imports ptr i64,ptr +js_bun_transpiler_transform ptr i64,ptr,ptr +js_bun_transpiler_transform_sync ptr i64,ptr,ptr +js_bun_unsupported f64 f64 +js_bun_which f64 f64,f64 +js_bun_wrap_ansi f64 f64,f64,f64 +js_bun_write f64 f64,f64 +js_bun_zstd_decompress f64 f64 +js_bun_zstd_decompress_sync f64 f64 +js_byte_length_queuing_strategy_new f64 f64 +js_call_function f64 i64,i64,i64,i64,i64 +js_callback_timer_has_pending i32s +js_callback_timer_next_deadline f64 +js_callback_timer_tick i32s +js_cancel_frame void i64 +js_checkpoint void i32s +js_cheerio_load i64 ptr +js_cheerio_load_fragment i64 ptr +js_cheerio_select i64 i64,ptr +js_cheerio_selection_attr ptr i64,ptr +js_cheerio_selection_attrs ptr i64,ptr +js_cheerio_selection_children i64 i64,ptr +js_cheerio_selection_eq i64 i64,f64 +js_cheerio_selection_find i64 i64,ptr +js_cheerio_selection_first i64 i64 +js_cheerio_selection_has_class bool i64,ptr +js_cheerio_selection_html ptr i64 +js_cheerio_selection_is bool i64,ptr +js_cheerio_selection_last i64 i64 +js_cheerio_selection_length f64 i64 +js_cheerio_selection_parent i64 i64 +js_cheerio_selection_text ptr i64 +js_cheerio_selection_texts ptr i64 +js_cheerio_selection_to_array ptr i64 +js_child_process_exec f64 ptr,f64,f64 +js_child_process_exec_file f64 i64,f64,f64,f64 +js_child_process_exec_file_sync f64 i64,f64,f64 +js_child_process_exec_sync f64 ptr,ptr +js_child_process_fork f64 i64,i64,i64 +js_child_process_get_process_status ptr f64 +js_child_process_kill_process i32s f64 +js_child_process_new f64 +js_child_process_spawn ptr ptr,ptr,ptr +js_child_process_spawn_background ptr f64,i64,f64,f64 +js_child_process_spawn_detached f64 f64,i64,f64 +js_child_process_spawn_streams f64 i64,i64,i64 +js_child_process_spawn_sync ptr ptr,ptr,ptr +js_child_process_validate_args f64 f64 +js_child_process_validate_command f64 f64,ptr,i32u +js_child_process_validate_fork_module f64 f64 +js_child_process_validate_options f64 f64,i32s,i32s +js_child_process_validate_spawn_args f64 f64,i32s,i32s +js_class_capture_value f64 i32u,i32u +js_class_capture_value_for_receiver f64 f64,i32u,i32u +js_class_capture_value_or f64 i32u,i32u,f64 +js_class_computed_field_key f64 f64,i32u,ptr,usize +js_class_env_current f64 f64,i32u +js_class_env_evaluate void i32u,f64,f64 +js_class_env_get f64 f64,i32u,i32u +js_class_env_refresh void i32u,f64,f64 +js_class_env_register_slot void i32u,i32u,ptr +js_class_env_register_state void i32u,ptr +js_class_env_set void f64,i32u,i32u,f64 +js_class_env_stamp f64 f64,i32u,f64 +js_class_field_add f64 f64,f64,f64 +js_class_field_get_ic f64 i64,f64,i32u,i32u,ptr,i32u,i32s +js_class_field_set_fallback void i64,i64,i64,f64 +js_class_field_set_ic void i64,f64,i32u,i32u,ptr,i32u,f64,i32s +js_class_lexical_binding_get f64 f64 +js_class_lexical_binding_set f64 f64,f64 +js_class_method_bind f64 f64,ptr,usize +js_class_method_bind_by_id f64 f64,i64 +js_class_method_snapshot_bind f64 f64,ptr,usize +js_class_object_pin_parent void i64,i32u +js_class_object_refresh_capture_values void f64,i64,f64 +js_class_prototype_method_value f64 f64,f64 +js_class_register_capture_values void i32u,ptr,usize +js_class_register_static_field void i32u,ptr,usize,f64,ptr +js_class_register_static_symbol void i32u,f64,f64 +js_class_static_method_call f64 f64,ptr,usize,ptr,usize +js_clear_exception void +js_clear_immediate_value void f64 +js_clear_interval_value void f64 +js_clear_timeout_value void f64 +js_closure_alloc ptr ptr,i32u +js_closure_alloc_init ptr ptr,i32u,ptr +js_closure_alloc_singleton ptr ptr +js_closure_alloc_with_captures_singleton ptr ptr,i32u,ptr +js_closure_call0 f64 ptr +js_closure_call1 f64 ptr,f64 +js_closure_call10 f64 ptr,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64 +js_closure_call11 f64 ptr,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64 +js_closure_call12 f64 ptr,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64 +js_closure_call13 f64 ptr,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64 +js_closure_call14 f64 ptr,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64 +js_closure_call15 f64 ptr,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64 +js_closure_call16 f64 ptr,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64,f64 +js_closure_call1_receiverless f64 ptr,f64 +js_closure_call2 f64 ptr,f64,f64 +js_closure_call3 f64 ptr,f64,f64,f64 +js_closure_call4 f64 ptr,f64,f64,f64,f64 +js_closure_call5 f64 ptr,f64,f64,f64,f64,f64 +js_closure_call6 f64 ptr,f64,f64,f64,f64,f64,f64 +js_closure_call7 f64 ptr,f64,f64,f64,f64,f64,f64,f64 +js_closure_call8 f64 ptr,f64,f64,f64,f64,f64,f64,f64,f64 +js_closure_call9 f64 ptr,f64,f64,f64,f64,f64,f64,f64,f64,f64 +js_closure_call_apply_with_spread f64 f64,ptr,i64,i64 +js_closure_call_array f64 i64,ptr,i64 +js_closure_exact_func_guard i64 f64,ptr +js_closure_get_capture_bits i64 ptr,i32u +js_closure_get_capture_f64 f64 ptr,i32u +js_closure_get_capture_ptr i64 ptr,i32u +js_closure_get_func ptr ptr +js_closure_resolve_arrow_direct_call ptr ptr,i32u +js_closure_resolve_versioned_loop_direct_call ptr ptr,i32u +js_closure_set_box_capture_ptr void ptr,i32u,i64 +js_closure_set_capture_bits void ptr,i32u,i64 +js_closure_set_capture_f64 void ptr,i32u,f64 +js_closure_set_capture_ptr void ptr,i32u,i64 +js_closure_unbind_this f64 f64 +js_closure_unbox_callee_checked i64 f64 +js_closure_unbox_callee_checked_rebind i64 f64,f64 +js_cluster_disconnect f64 f64 +js_cluster_emit f64 f64,ptr +js_cluster_event_names f64 +js_cluster_fork f64 f64 +js_cluster_get_max_listeners f64 +js_cluster_listener_count f64 f64,f64 +js_cluster_listeners f64 f64 +js_cluster_on f64 f64,f64 +js_cluster_once f64 f64,f64 +js_cluster_prepend_listener f64 f64,f64 +js_cluster_prepend_once_listener f64 f64,f64 +js_cluster_raw_listeners f64 f64 +js_cluster_remove_all_listeners f64 f64,i32s +js_cluster_remove_all_listeners_args f64 ptr +js_cluster_remove_listener f64 f64,f64 +js_cluster_set_max_listeners f64 f64 +js_cluster_setup_primary f64 f64 +js_collection_method_dispatch f64 f64,ptr,usize,f64,f64 +js_color_parse_channel f64 f64,i32s +js_compose_api_logs ptr f64,f64 +js_compose_config ptr f64 +js_compose_down ptr f64,ptr +js_compose_exec ptr f64,ptr,ptr +js_compose_logs ptr f64,ptr,f64 +js_compose_ps ptr f64 +js_compose_restart ptr f64,ptr +js_compose_start ptr f64,ptr +js_compose_stop ptr f64,ptr +js_compose_up ptr ptr +js_compression_stream_new f64 +js_console_assert void f64,ptr +js_console_assert_spread void f64,i64 +js_console_clear void +js_console_context f64 f64 +js_console_count void ptr +js_console_count_reset void ptr +js_console_count_reset_value void f64 +js_console_count_value void f64 +js_console_create_task f64 f64 +js_console_debug_spread void ptr +js_console_dir_with_options void f64,f64 +js_console_error_dynamic void f64 +js_console_error_i32 void i32s +js_console_error_number void f64 +js_console_error_spread void ptr +js_console_group void ptr +js_console_group_begin void +js_console_group_end void +js_console_info_spread void ptr +js_console_log void i64 +js_console_log_as_closure f64 +js_console_log_dynamic void f64 +js_console_log_i32 void i32s +js_console_log_i64 void i64 +js_console_log_number void f64 +js_console_log_spread void ptr +js_console_method_by_value f64 f64 +js_console_new f64 f64 +js_console_new2 f64 f64,f64 +js_console_noop void +js_console_table void f64 +js_console_table_with_properties void f64,f64 +js_console_time void ptr +js_console_time_end void ptr +js_console_time_end_value void f64 +js_console_time_log void ptr +js_console_time_log_spread void f64,ptr +js_console_time_log_value void f64 +js_console_time_value void f64 +js_console_trace void f64 +js_console_trace_spread void ptr +js_console_warn_dynamic void f64 +js_console_warn_i32 void i32s +js_console_warn_number void f64 +js_console_warn_spread void ptr +js_container_api_exec ptr f64,f64,f64 +js_container_api_list ptr f64 +js_container_api_logs ptr f64,f64 +js_container_api_remove ptr f64,f64 +js_container_api_removeIfExists ptr f64,f64 +js_container_api_removeImage ptr f64,f64 +js_container_api_stop ptr f64,f64 +js_container_build ptr ptr,ptr +js_container_composeUp ptr ptr +js_container_compose_config ptr f64 +js_container_compose_down ptr f64,ptr +js_container_compose_exec ptr f64,ptr,ptr +js_container_compose_logs ptr f64,ptr,f64 +js_container_compose_ps ptr f64 +js_container_compose_restart ptr f64,ptr +js_container_compose_start ptr f64,ptr +js_container_compose_stop ptr f64,ptr +js_container_create ptr ptr +js_container_detectBackend ptr +js_container_downAll ptr ptr +js_container_downByProject ptr ptr,ptr +js_container_exec ptr ptr,ptr,ptr,ptr +js_container_getAvailableBackends ptr +js_container_getBackend ptr +js_container_getBackendPriority ptr +js_container_inspect ptr ptr +js_container_list ptr i32s +js_container_listImages ptr +js_container_logs ptr ptr,i32s +js_container_module_init void +js_container_pullImage ptr ptr +js_container_remove ptr ptr,i32s +js_container_removeIfExists ptr ptr,i32s +js_container_removeImage ptr ptr,i32s +js_container_run ptr ptr +js_container_selectBackendFor ptr ptr,ptr +js_container_setBackend ptr ptr +js_container_setBackends ptr ptr +js_container_start ptr ptr +js_container_stop ptr ptr,i32s +js_count_queuing_strategy_new f64 f64 +js_create_callback f64 i64,i64,i64 +js_create_namespace f64 i32s,ptr,ptr,ptr,ptr +js_create_native_module_namespace f64 ptr,usize +js_cron_timer_has_pending i32s +js_cron_timer_tick i32s +js_crypto_aes256_decrypt ptr ptr,ptr,ptr +js_crypto_aes256_encrypt ptr ptr,ptr,ptr +js_crypto_aes256_gcm_decrypt ptr ptr,ptr,ptr +js_crypto_aes256_gcm_encrypt ptr ptr,ptr,ptr +js_crypto_argon2_async f64 i64,f64,f64 +js_crypto_argon2_sync ptr i64,f64 +js_crypto_certificate_export_challenge f64 f64 +js_crypto_certificate_export_public_key f64 f64 +js_crypto_certificate_verify_spkac f64 f64 +js_crypto_check_prime_async f64 f64,f64,f64 +js_crypto_check_prime_sync f64 f64,f64 +js_crypto_create_cipheriv f64 i64,i64,i64,f64 +js_crypto_create_decipheriv f64 i64,i64,i64,f64 +js_crypto_create_diffie_hellman f64 f64,f64,f64 +js_crypto_create_ecdh f64 i64 +js_crypto_create_hash f64 i64 +js_crypto_create_hash_options f64 i64,f64 +js_crypto_create_hmac f64 i64,i64 +js_crypto_create_private_key_value ptr f64 +js_crypto_create_public_key ptr i64 +js_crypto_create_public_key_value ptr f64 +js_crypto_create_secret_key ptr i64,i64 +js_crypto_create_sign f64 i64 +js_crypto_create_verify f64 i64 +js_crypto_decapsulate ptr f64,f64 +js_crypto_decapsulate_async f64 f64,f64,f64 +js_crypto_diffie_hellman ptr f64 +js_crypto_ecdh_convert_key f64 f64,f64,f64,f64,f64 +js_crypto_ed25519_verify i32s i64,i64,i64 +js_crypto_encapsulate ptr f64 +js_crypto_encapsulate_async f64 f64,f64 +js_crypto_generate_key_async f64 i64,f64,f64 +js_crypto_generate_key_pair_async f64 i64,f64,f64 +js_crypto_generate_key_pair_sync f64 i64,i64 +js_crypto_generate_key_pair_sync_ec_p256 ptr f64 +js_crypto_generate_key_pair_sync_ed25519 ptr f64 +js_crypto_generate_key_pair_sync_rsa ptr f64 +js_crypto_generate_key_pair_sync_x25519 ptr f64 +js_crypto_generate_key_sync ptr i64,f64 +js_crypto_generate_prime_async f64 f64,f64,f64 +js_crypto_generate_prime_sync f64 f64,f64 +js_crypto_get_cipher_info f64 f64,f64 +js_crypto_get_ciphers ptr +js_crypto_get_curves ptr +js_crypto_get_diffie_hellman f64 f64 +js_crypto_get_hashes ptr +js_crypto_hkdf_async_alg f64 i64,i64,i64,i64,f64,f64 +js_crypto_hkdf_bytes_alg ptr i64,i64,i64,i64,f64 +js_crypto_hkdf_sha256 ptr ptr,ptr,ptr,f64 +js_crypto_hkdf_sync ptr i64,i64,i64,i64,f64 +js_crypto_hmac_sha256 ptr ptr,ptr +js_crypto_hmac_sha256_bytes ptr i64,i64 +js_crypto_md5 ptr ptr +js_crypto_native_dispatch f64 ptr,usize,ptr,usize +js_crypto_pbkdf2 ptr ptr,ptr,f64,f64 +js_crypto_pbkdf2_async_alg f64 i64,i64,f64,f64,i64,f64 +js_crypto_pbkdf2_bytes ptr i64,i64,f64,f64,i64 +js_crypto_private_decrypt ptr i64,i64 +js_crypto_private_encrypt ptr i64,i64 +js_crypto_public_decrypt ptr i64,i64 +js_crypto_public_encrypt ptr i64,i64 +js_crypto_random_bytes_async f64 f64,f64 +js_crypto_random_bytes_buffer ptr f64 +js_crypto_random_bytes_hex ptr f64 +js_crypto_random_fill_async f64 f64,f64,f64,f64 +js_crypto_random_fill_sync f64 f64,f64,f64 +js_crypto_random_int f64 f64,f64 +js_crypto_random_int_async f64 f64,f64,f64 +js_crypto_random_nonce ptr +js_crypto_random_uuid ptr f64 +js_crypto_random_uuidv7 ptr +js_crypto_scrypt ptr ptr,ptr,f64 +js_crypto_scrypt_async f64 i64,i64,f64,f64,f64 +js_crypto_scrypt_bytes ptr i64,i64,f64,f64 +js_crypto_scrypt_custom ptr ptr,ptr,f64,f64,f64,f64 +js_crypto_secure_heap_used ptr +js_crypto_sha256 ptr ptr +js_crypto_sha256_bytes ptr i64 +js_crypto_sign_async f64 i64,i64,f64,f64 +js_crypto_sign_rsa_sha256 ptr i64,i64,f64 +js_crypto_stream_process_pending i32s +js_crypto_timing_safe_equal f64 f64,f64 +js_crypto_verify_async f64 i64,i64,f64,i64,f64 +js_crypto_verify_rsa_sha256 f64 i64,i64,f64,i64 +js_crypto_x25519_keypair ptr +js_crypto_x25519_shared_secret ptr ptr,ptr +js_crypto_x509_new f64 i64 +js_ctor_return_override f64 f64,f64,i32s +js_custom_event_new ptr f64,f64,i32u +js_data_view_get_direct f64 f64,f64,f64,i32s,i32s +js_data_view_new f64 f64,f64,f64 +js_data_view_set_direct f64 f64,f64,f64,f64,i32s,i32s +js_date_apply_setter f64 f64,i32s,i32s,ptr,i32s +js_date_coerce_number f64 f64 +js_date_get_date f64 f64 +js_date_get_day f64 f64 +js_date_get_full_year f64 f64 +js_date_get_hours f64 f64 +js_date_get_milliseconds f64 f64 +js_date_get_minutes f64 f64 +js_date_get_month f64 f64 +js_date_get_seconds f64 f64 +js_date_get_time f64 f64 +js_date_get_timezone_offset f64 f64 +js_date_get_utc_date f64 f64 +js_date_get_utc_day f64 f64 +js_date_get_utc_full_year f64 f64 +js_date_get_utc_hours f64 f64 +js_date_get_utc_milliseconds f64 f64 +js_date_get_utc_minutes f64 f64 +js_date_get_utc_month f64 f64 +js_date_get_utc_seconds f64 f64 +js_date_new f64 +js_date_new_from_timestamp f64 f64 +js_date_new_from_value f64 f64 +js_date_new_local_components f64 f64,f64,f64,f64,f64,f64,f64 +js_date_now f64 +js_date_parse f64 ptr +js_date_to_date_string ptr f64 +js_date_to_iso_string ptr f64 +js_date_to_iso_string_or_throw ptr f64 +js_date_to_json ptr f64 +js_date_to_locale_date_string ptr f64 +js_date_to_locale_string ptr f64 +js_date_to_locale_time_string ptr f64 +js_date_to_string ptr f64 +js_date_to_time_string ptr f64 +js_date_to_utc_string ptr f64 +js_date_utc f64 ptr,i32s +js_date_value_of f64 f64 +js_debug_val void i32s,f64 +js_declared_map_get f64 f64,f64 +js_decode_uri i64 f64 +js_decode_uri_component i64 f64 +js_decompression_stream_new f64 +js_delete_result f64 i32s,i32s +js_derived_super_bind_current f64 +js_derived_super_scope_pop void +js_derived_super_scope_push void ptr +js_derived_this_check_current f64 +js_dgram_create_socket f64 ptr +js_dgram_socket_add_membership f64 i64,ptr +js_dgram_socket_add_source_membership f64 i64,ptr +js_dgram_socket_address f64 i64,ptr +js_dgram_socket_bind f64 i64,ptr +js_dgram_socket_chain f64 i64,ptr +js_dgram_socket_close f64 i64,ptr +js_dgram_socket_connect f64 i64,ptr +js_dgram_socket_disconnect f64 i64,ptr +js_dgram_socket_drop_membership f64 i64,ptr +js_dgram_socket_drop_source_membership f64 i64,ptr +js_dgram_socket_emit f64 i64,ptr +js_dgram_socket_event_names f64 i64,ptr +js_dgram_socket_get_recv_buffer_size f64 i64,ptr +js_dgram_socket_get_send_buffer_size f64 i64,ptr +js_dgram_socket_listener_count f64 i64,ptr +js_dgram_socket_noop f64 i64,ptr +js_dgram_socket_on f64 i64,ptr +js_dgram_socket_once f64 i64,ptr +js_dgram_socket_ref f64 i64,ptr +js_dgram_socket_remote_address f64 i64,ptr +js_dgram_socket_remove_listener f64 i64,ptr +js_dgram_socket_send f64 i64,ptr +js_dgram_socket_sendto f64 i64,ptr +js_dgram_socket_set_broadcast f64 i64,ptr +js_dgram_socket_set_multicast_interface f64 i64,ptr +js_dgram_socket_set_multicast_loopback f64 i64,ptr +js_dgram_socket_set_multicast_ttl f64 i64,ptr +js_dgram_socket_set_recv_buffer_size f64 i64,ptr +js_dgram_socket_set_send_buffer_size f64 i64,ptr +js_dgram_socket_set_ttl f64 i64,ptr +js_dgram_socket_unref f64 i64,ptr +js_dgram_socket_zero f64 i64,ptr +js_disposable_stack_adopt f64 ptr,f64,f64 +js_disposable_stack_defer f64 ptr,f64 +js_disposable_stack_dispose f64 ptr +js_disposable_stack_disposed f64 ptr +js_disposable_stack_move f64 ptr +js_disposable_stack_new ptr +js_disposable_stack_symbol_dispose f64 ptr +js_disposable_stack_use f64 ptr,f64 +js_div i64 i64,i64 +js_dns_get_default_result_order f64 i64 +js_dns_get_servers f64 i64 +js_dns_lookup f64 i64 +js_dns_lookup_service f64 i64 +js_dns_noop f64 i64 +js_dns_promises_get_servers f64 i64 +js_dns_promises_lookup f64 i64 +js_dns_promises_lookup_service f64 i64 +js_dns_promises_noop f64 i64 +js_dns_promises_resolve f64 i64 +js_dns_promises_resolve4 f64 i64 +js_dns_promises_resolve6 f64 i64 +js_dns_promises_resolve_any f64 i64 +js_dns_promises_resolve_caa f64 i64 +js_dns_promises_resolve_cname f64 i64 +js_dns_promises_resolve_mx f64 i64 +js_dns_promises_resolve_naptr f64 i64 +js_dns_promises_resolve_ns f64 i64 +js_dns_promises_resolve_ptr f64 i64 +js_dns_promises_resolve_soa f64 i64 +js_dns_promises_resolve_srv f64 i64 +js_dns_promises_resolve_tlsa f64 i64 +js_dns_promises_resolve_txt f64 i64 +js_dns_promises_resolver_new f64 i64 +js_dns_promises_resolver_resolve f64 i64,i64 +js_dns_promises_resolver_resolve4 f64 i64,i64 +js_dns_promises_resolver_resolve6 f64 i64,i64 +js_dns_promises_resolver_resolve_any f64 i64,i64 +js_dns_promises_resolver_resolve_caa f64 i64,i64 +js_dns_promises_resolver_resolve_cname f64 i64,i64 +js_dns_promises_resolver_resolve_mx f64 i64,i64 +js_dns_promises_resolver_resolve_naptr f64 i64,i64 +js_dns_promises_resolver_resolve_ns f64 i64,i64 +js_dns_promises_resolver_resolve_ptr f64 i64,i64 +js_dns_promises_resolver_resolve_soa f64 i64,i64 +js_dns_promises_resolver_resolve_srv f64 i64,i64 +js_dns_promises_resolver_resolve_tlsa f64 i64,i64 +js_dns_promises_resolver_resolve_txt f64 i64,i64 +js_dns_promises_resolver_reverse f64 i64,i64 +js_dns_promises_reverse f64 i64 +js_dns_promises_set_servers f64 i64 +js_dns_resolve f64 i64 +js_dns_resolve4 f64 i64 +js_dns_resolve6 f64 i64 +js_dns_resolve_any f64 i64 +js_dns_resolve_caa f64 i64 +js_dns_resolve_cname f64 i64 +js_dns_resolve_mx f64 i64 +js_dns_resolve_naptr f64 i64 +js_dns_resolve_ns f64 i64 +js_dns_resolve_ptr f64 i64 +js_dns_resolve_soa f64 i64 +js_dns_resolve_srv f64 i64 +js_dns_resolve_tlsa f64 i64 +js_dns_resolve_txt f64 i64 +js_dns_resolver_get_servers f64 i64,i64 +js_dns_resolver_new f64 i64 +js_dns_resolver_noop f64 i64,i64 +js_dns_resolver_resolve f64 i64,i64 +js_dns_resolver_resolve4 f64 i64,i64 +js_dns_resolver_resolve6 f64 i64,i64 +js_dns_resolver_resolve_any f64 i64,i64 +js_dns_resolver_resolve_caa f64 i64,i64 +js_dns_resolver_resolve_cname f64 i64,i64 +js_dns_resolver_resolve_mx f64 i64,i64 +js_dns_resolver_resolve_naptr f64 i64,i64 +js_dns_resolver_resolve_ns f64 i64,i64 +js_dns_resolver_resolve_ptr f64 i64,i64 +js_dns_resolver_resolve_soa f64 i64,i64 +js_dns_resolver_resolve_srv f64 i64,i64 +js_dns_resolver_resolve_tlsa f64 i64,i64 +js_dns_resolver_resolve_txt f64 i64,i64 +js_dns_resolver_reverse f64 i64,i64 +js_dns_resolver_set_servers f64 i64,i64 +js_dns_reverse f64 i64 +js_dns_set_default_result_order f64 i64 +js_dns_set_servers f64 i64 +js_dom_exception_new ptr f64,f64 +js_dom_exception_subclass_init f64 f64,f64,f64 +js_domain_add i64 i64,f64 +js_domain_bind f64 i64,f64 +js_domain_create i64 +js_domain_emit f64 i64,ptr,ptr +js_domain_emit_error bool i64,f64,f64,bool +js_domain_enter f64 i64 +js_domain_exit f64 i64 +js_domain_intercept f64 i64,f64 +js_domain_native_dispatch f64 ptr,usize,ptr,usize +js_domain_on i64 i64,ptr,i64 +js_domain_remove i64 i64,f64 +js_domain_run f64 i64,f64,ptr +js_drain_queued_microtasks void +js_dyn_index_get f64 f64,f64 +js_dyn_index_set f64 f64,f64,f64 +js_dyn_index_set_strict f64 f64,f64,f64,i32s +js_dynamic_add f64 f64,f64 +js_dynamic_array_find f64 f64,ptr +js_dynamic_array_findIndex f64 f64,ptr +js_dynamic_array_get f64 f64,i32s +js_dynamic_array_length i32s f64 +js_dynamic_bitand f64 f64,f64 +js_dynamic_bitnot f64 f64 +js_dynamic_bitor f64 f64,f64 +js_dynamic_bitxor f64 f64,f64 +js_dynamic_div f64 f64,f64 +js_dynamic_mod f64 f64,f64 +js_dynamic_mul f64 f64,f64 +js_dynamic_neg f64 f64 +js_dynamic_object_get_property f64 f64,ptr,usize +js_dynamic_object_keys ptr i64 +js_dynamic_pos f64 f64 +js_dynamic_pow f64 f64,f64 +js_dynamic_shl f64 f64,f64 +js_dynamic_shr f64 f64,f64 +js_dynamic_string_equals i32s f64,f64 +js_dynamic_string_or_number_add f64 f64,f64 +js_dynamic_sub f64 f64,f64 +js_dynamic_ushr f64 f64,f64 +js_eh_try_push void +js_encode_uri i64 f64 +js_encode_uri_component i64 f64 +js_encoding_tag_from_value i32s f64 +js_ensure_string_ptr i64 f64 +js_enter_finally void +js_eq i64 i64,i64 +js_error_apply_cause_to_object void ptr,f64 +js_error_capture_stack_trace f64 f64,f64 +js_error_get_cause f64 ptr +js_error_get_errors ptr ptr +js_error_get_kind i32u ptr +js_error_get_message ptr ptr +js_error_get_name ptr ptr +js_error_get_stack ptr ptr +js_error_is_error f64 f64 +js_error_new ptr +js_error_new_from_value ptr f64 +js_error_new_kind_from_value ptr i32u,f64 +js_error_new_kind_with_options ptr i32u,ptr,f64 +js_error_new_kind_with_options_from_value ptr i32u,f64,f64 +js_error_new_with_cause ptr ptr,f64 +js_error_new_with_cause_from_value ptr f64,f64 +js_error_new_with_message ptr ptr +js_error_subclass_capture_stack void f64 +js_error_subclass_default_init void f64,f64 +js_error_subclass_default_init_with_options void f64,f64,f64 +js_error_to_string ptr ptr +js_error_value_with_code f64 ptr,usize,ptr,usize,i32s +js_escape i64 f64 +js_ethers_format_ether ptr ptr +js_ethers_format_units ptr ptr,f64 +js_ethers_get_address ptr ptr +js_ethers_parse_ether ptr ptr +js_ethers_parse_units ptr ptr,f64 +js_ethers_wallet_create_random ptr +js_evalerror_new ptr ptr +js_event_emitter_async_resource_async_id f64 i64 +js_event_emitter_async_resource_async_resource f64 i64 +js_event_emitter_async_resource_call f64 f64 +js_event_emitter_async_resource_emit_destroy f64 i64 +js_event_emitter_async_resource_new i64 f64 +js_event_emitter_async_resource_subclass_backing i64 i64 +js_event_emitter_async_resource_subclass_init f64 f64,f64 +js_event_emitter_async_resource_trigger_async_id f64 i64 +js_event_emitter_domain_value f64 i64 +js_event_emitter_emit f64 i64,i64,ptr +js_event_emitter_emit0 f64 i64,i64 +js_event_emitter_event_names ptr i64 +js_event_emitter_get_domain i64 i64 +js_event_emitter_get_max_listeners f64 i64 +js_event_emitter_is_handle bool i64 +js_event_emitter_listener_count f64 i64,i64,i64 +js_event_emitter_listeners ptr i64,i64 +js_event_emitter_new i64 +js_event_emitter_new_with_options i64 f64 +js_event_emitter_on i64 i64,i64,i64 +js_event_emitter_once i64 i64,i64,i64 +js_event_emitter_prepend_listener i64 i64,i64,i64 +js_event_emitter_prepend_once_listener i64 i64,i64,i64 +js_event_emitter_raw_listeners ptr i64,i64 +js_event_emitter_remove_all_listeners i64 i64,ptr +js_event_emitter_remove_listener i64 i64,i64,i64 +js_event_emitter_set_domain i32s i64,i64 +js_event_emitter_set_max_listeners i64 i64,f64 +js_event_emitter_subclass_init f64 f64 +js_event_loop_check_phase i32s +js_event_loop_host_driven i32s +js_event_loop_poll_callbacks i32s +js_event_loop_timers_phase i32s +js_event_new ptr f64,f64,i32u +js_event_subclass_init f64 f64,f64,f64,i32u,i32u +js_event_target_add_event_listener void ptr,ptr,i64 +js_event_target_add_event_listener_with_options void ptr,ptr,i64,f64 +js_event_target_dispatch_event f64 ptr,f64 +js_event_target_get_event_listeners ptr ptr,ptr +js_event_target_get_max_listeners f64 ptr +js_event_target_is_event_target i32s ptr +js_event_target_new ptr +js_event_target_remove_event_listener void ptr,ptr,i64 +js_event_target_remove_event_listener_with_options void ptr,ptr,i64,f64 +js_event_target_set_max_listeners i32s ptr,f64 +js_events_add_abort_listener i64 f64,f64 +js_events_get_event_listeners ptr f64,ptr +js_events_get_max_listeners f64 f64 +js_events_init f64 +js_events_listener_count f64 f64,ptr +js_events_native_dispatch f64 ptr,usize,ptr,usize +js_events_on ptr f64,ptr,f64 +js_events_once ptr f64,ptr,f64 +js_events_set_max_listeners f64 f64,ptr +js_ext_http2_session_dispatch_method f64 i64,ptr,usize,ptr,usize +js_ext_http2_session_dispatch_property f64 i64,ptr,usize +js_ext_http2_session_is_handle i32s i64 +js_ext_http2_stream_dispatch_method f64 i64,ptr,usize,ptr,usize +js_ext_http2_stream_dispatch_property f64 i64,ptr,usize +js_ext_http2_stream_is_handle i32s i64 +js_ext_http_agent_dispatch_method f64 i64,ptr,usize,ptr,usize +js_ext_http_agent_dispatch_property f64 i64,ptr,usize +js_ext_http_agent_dispatch_property_set i32s i64,ptr,usize,f64 +js_ext_http_agent_is_handle i32s i64 +js_ext_http_client_incoming_message_is_handle i32s i64 +js_ext_http_client_incoming_message_set_encoding i64 i64,ptr +js_ext_http_client_inflight i32s +js_ext_http_client_request_dispatch_method f64 i64,ptr,usize,ptr,usize +js_ext_http_client_request_dispatch_property f64 i64,ptr,usize +js_ext_http_client_request_is_handle i32s i64 +js_ext_http_incoming_message_dispatch_method f64 i64,ptr,usize,ptr,usize +js_ext_http_incoming_message_dispatch_property f64 i64,ptr,usize +js_ext_http_incoming_message_dispatch_property_set i32s i64,ptr,usize,f64 +js_ext_http_incoming_message_is_handle i32s i64 +js_ext_http_native_dispatch f64 ptr,usize,ptr,usize,ptr,usize +js_ext_http_nm_install void +js_ext_http_server_dispatch_method f64 i64,ptr,usize,ptr,usize +js_ext_http_server_dispatch_property f64 i64,ptr,usize +js_ext_http_server_is_handle i32s i64 +js_ext_http_server_response_dispatch_method f64 i64,ptr,usize,ptr,usize +js_ext_http_server_response_dispatch_property f64 i64,ptr,usize +js_ext_http_server_response_dispatch_property_set i32s i64,ptr,usize,f64 +js_ext_http_server_response_is_handle i32s i64 +js_ext_net_create_server i64 i64,i64 +js_ext_net_destroy_socket void i64 +js_ext_net_drain_pending i32s +js_ext_net_handle_method_dispatch i32s i64,ptr,usize,ptr,usize,ptr +js_ext_net_handle_property_dispatch i32s i64,ptr,usize,ptr +js_ext_net_handle_property_set_dispatch i32s i64,ptr,usize,f64 +js_ext_net_has_active_handles i32s +js_ext_net_is_block_list_handle i32s i64 +js_ext_net_is_server_handle i32s i64 +js_ext_net_is_socket_address_handle i32s i64 +js_ext_net_is_socket_handle i32s i64 +js_ext_net_nm_install void +js_ext_net_register_http_agent_socket_event_hook void ptr +js_ext_net_set_http_agent_phase void i64,i32s +js_ext_net_set_tls_metadata void i64,i32s,ptr,usize,ptr,usize,i64,i32s +js_ext_net_socket_connect i64 f64,f64,f64 +js_ext_net_socket_emit f64 i64,i64,ptr,usize +js_ext_net_socket_emit_abort_error void i64 +js_ext_net_socket_end void i64,i64 +js_ext_net_socket_end3 void i64,f64,f64,f64 +js_ext_net_socket_get_max_listeners f64 i64 +js_ext_net_socket_has_ref i32s i64 +js_ext_net_socket_listener_count f64 i64,i64 +js_ext_net_socket_listeners i64 i64,i64 +js_ext_net_socket_method_connect void i64,f64,f64,f64 +js_ext_net_socket_on i64 i64,i64,i64 +js_ext_net_socket_once i64 i64,i64,i64 +js_ext_net_socket_peer_certificate_json ptr i64 +js_ext_net_socket_read f64 i64,f64 +js_ext_net_socket_remove_all_listeners i64 i64,i64 +js_ext_net_socket_remove_listener i64 i64,i64,i64 +js_ext_net_socket_set_max_listeners f64 i64,f64 +js_ext_net_socket_set_ref void i64,i32s +js_ext_net_socket_tls_authorized f64 i64 +js_ext_net_socket_tls_encrypted f64 i64 +js_ext_net_socket_tls_servername f64 i64 +js_ext_net_socket_tls_session ptr i64 +js_ext_net_socket_tls_session_reused f64 i64 +js_ext_net_socket_write f64 i64,i64 +js_ext_net_socket_write3 f64 i64,f64,f64,f64 +js_ext_tls_connect i64 f64,f64,f64,f64 +js_ext_ws_handle_property_dispatch i32s i64,ptr,usize,ptr +js_ext_zlib_dispatch_method f64 i64,ptr,usize,ptr,usize +js_ext_zlib_has_active_handles i32s +js_ext_zlib_is_stream_handle i32s i64 +js_ext_zlib_native_dispatch f64 ptr,usize,ptr,usize +js_ext_zlib_process_pending i32s +js_ext_zlib_stream_bytes_written f64 i64 +js_fetch_get ptr ptr +js_fetch_get_with_auth ptr ptr,ptr +js_fetch_handle_kind i8u usize +js_fetch_headers_to_json i64 f64 +js_fetch_input_ptr i64 f64 +js_fetch_notify_signal_aborted void i64 +js_fetch_or_value_super f64 f64,f64,ptr,usize +js_fetch_post ptr ptr,ptr,ptr +js_fetch_post_with_auth ptr ptr,ptr,ptr +js_fetch_response_count i64 +js_fetch_response_json ptr f64 +js_fetch_response_ok f64 f64 +js_fetch_response_redirected f64 f64 +js_fetch_response_status f64 f64 +js_fetch_response_status_text ptr f64 +js_fetch_response_text ptr f64 +js_fetch_response_type ptr f64 +js_fetch_response_url ptr f64 +js_fetch_set_global_proxy f64 ptr,ptr +js_fetch_set_pending_redirect void f64 +js_fetch_set_pending_signal void f64 +js_fetch_stream_close f64 f64 +js_fetch_stream_poll ptr f64 +js_fetch_stream_start f64 ptr,ptr,ptr,ptr +js_fetch_stream_status f64 f64 +js_fetch_take_pending_redirect i32s +js_fetch_take_pending_signal f64 +js_fetch_text ptr ptr +js_fetch_unwrap_handle f64 f64 +js_fetch_with_options ptr ptr,ptr,ptr,ptr +js_ffi_root_get_heap_addr i64 usize +js_ffi_root_get_nanbox i64 usize +js_ffi_root_push_heap_addr usize i64 +js_ffi_root_push_nanbox usize i64 +js_ffi_root_scope_enter usize +js_ffi_root_scope_exit void usize +js_file_last_modified f64 f64 +js_file_name ptr f64 +js_file_new f64 f64,f64,f64,f64 +js_finalize_namespace f64 f64 +js_finreg_new ptr f64 +js_finreg_register f64 f64,f64,f64,f64 +js_finreg_unregister f64 f64,f64 +js_for_in_keys_stable_value ptr f64 +js_for_in_keys_value ptr f64 +js_for_of_next f64 f64 +js_for_of_to_array f64 f64 +js_foreach_register void f64,i64,f64 +js_form_data_append f64 f64,f64,f64,f64 +js_form_data_delete f64 f64,ptr +js_form_data_entries f64 f64 +js_form_data_for_each f64 f64,f64 +js_form_data_get f64 f64,ptr +js_form_data_get_all f64 f64,ptr +js_form_data_has f64 f64,ptr +js_form_data_keys f64 f64 +js_form_data_new f64 +js_form_data_set f64 f64,f64,f64,f64 +js_form_data_values f64 f64 +js_frame_has_pending i32s +js_frame_pump_default i32s +js_frame_tick i32s f64 +js_fs_access_callback f64 f64,f64,f64 +js_fs_access_sync i32s f64 +js_fs_access_sync_mode i32s f64,f64 +js_fs_access_sync_throw f64 f64 +js_fs_access_sync_throw_mode f64 f64,f64 +js_fs_append_file_callback f64 f64,f64,f64,f64 +js_fs_append_file_sync i32s f64,f64 +js_fs_append_file_sync_options i32s f64,f64,f64 +js_fs_chmod_callback f64 f64,f64,f64 +js_fs_chmod_sync i32s f64,f64 +js_fs_chown_callback f64 f64,f64,f64,f64 +js_fs_chown_sync i32s f64,f64,f64 +js_fs_close_callback f64 f64,f64 +js_fs_close_sync i32s f64 +js_fs_copy_file_callback f64 f64,f64,f64,f64 +js_fs_copy_file_sync i32s f64,f64 +js_fs_copy_file_sync_flags i32s f64,f64,f64 +js_fs_cp_callback f64 f64,f64,f64,f64 +js_fs_cp_sync i32s f64,f64 +js_fs_cp_sync_options i32s f64,f64,f64 +js_fs_create_read_stream f64 f64,f64 +js_fs_create_write_stream f64 f64,f64 +js_fs_exists_callback f64 f64,f64 +js_fs_exists_sync i32s f64 +js_fs_fchmod_callback f64 f64,f64,f64 +js_fs_fchmod_sync i32s f64,f64 +js_fs_fchown_callback f64 f64,f64,f64,f64 +js_fs_fchown_sync i32s f64,f64,f64 +js_fs_fdatasync_callback f64 f64,f64 +js_fs_fdatasync_sync i32s f64 +js_fs_filehandle_open f64 f64,f64 +js_fs_fstat_callback f64 f64,f64,f64 +js_fs_fstat_sync f64 f64 +js_fs_fstat_sync_options f64 f64,f64 +js_fs_fsync_callback f64 f64,f64 +js_fs_fsync_sync i32s f64 +js_fs_ftruncate_callback f64 f64,f64,f64 +js_fs_ftruncate_sync i32s f64,f64 +js_fs_futimes_callback f64 f64,f64,f64,f64 +js_fs_futimes_sync i32s f64,f64,f64 +js_fs_glob_callback f64 f64,f64,f64 +js_fs_glob_sync f64 f64 +js_fs_glob_sync_options f64 f64,f64 +js_fs_is_directory i32s f64 +js_fs_lchmod_callback f64 f64,f64,f64 +js_fs_lchmod_sync i32s f64,f64 +js_fs_lchown_callback f64 f64,f64,f64,f64 +js_fs_lchown_sync i32s f64,f64,f64 +js_fs_link_callback f64 f64,f64,f64 +js_fs_link_sync i32s f64,f64 +js_fs_lstat_callback f64 f64,f64,f64 +js_fs_lstat_sync f64 f64 +js_fs_lstat_sync_options f64 f64,f64 +js_fs_lutimes_callback f64 f64,f64,f64,f64 +js_fs_lutimes_sync i32s f64,f64,f64 +js_fs_mkdir_callback f64 f64,f64,f64 +js_fs_mkdir_sync i32s f64 +js_fs_mkdir_sync_options i32s f64,f64 +js_fs_mkdtemp_callback f64 f64,f64,f64 +js_fs_mkdtemp_dispatch f64 f64,f64 +js_fs_mkdtemp_disposable_sync f64 f64,f64 +js_fs_mkdtemp_sync i64 f64 +js_fs_mkdtemp_sync_options i64 f64,f64 +js_fs_open_as_blob f64 f64,f64 +js_fs_open_callback f64 f64,f64,f64,f64 +js_fs_open_sync f64 f64,f64 +js_fs_opendir_callback f64 f64,f64,f64 +js_fs_opendir_sync f64 f64 +js_fs_promises_append_file f64 f64,f64,f64 +js_fs_promises_mkdir f64 f64,f64 +js_fs_promises_read_file f64 f64,f64 +js_fs_promises_rmdir f64 f64,f64 +js_fs_promises_write_file f64 f64,f64,f64 +js_fs_read_callback f64 f64,f64,f64,f64,f64,f64 +js_fs_read_callback_options f64 f64,f64,f64,f64 +js_fs_read_file_binary ptr f64 +js_fs_read_file_binary_options ptr f64,f64 +js_fs_read_file_callback f64 f64,f64,f64 +js_fs_read_file_dispatch f64 f64,f64 +js_fs_read_file_sync ptr f64 +js_fs_read_file_sync_options ptr f64,f64 +js_fs_read_sync f64 f64,f64,f64,f64,f64 +js_fs_read_sync_options f64 f64,f64,f64 +js_fs_readdir_callback f64 f64,f64,f64 +js_fs_readdir_sync f64 f64,f64 +js_fs_readlink_callback f64 f64,f64,f64 +js_fs_readlink_dispatch f64 f64,f64 +js_fs_readlink_sync i64 f64 +js_fs_readlink_sync_options i64 f64,f64 +js_fs_readv_callback f64 f64,f64,f64,f64 +js_fs_readv_sync f64 f64,f64,f64 +js_fs_realpath_callback f64 f64,f64,f64 +js_fs_realpath_dispatch f64 f64,f64 +js_fs_realpath_promises_dispatch f64 f64,f64 +js_fs_realpath_sync i64 f64 +js_fs_realpath_sync_options i64 f64,f64 +js_fs_rename_callback f64 f64,f64,f64 +js_fs_rename_sync i32s f64,f64 +js_fs_rm_callback f64 f64,f64,f64 +js_fs_rm_recursive i32s f64 +js_fs_rm_recursive_options i32s f64,f64 +js_fs_rmdir_callback f64 f64,f64,f64 +js_fs_rmdir_sync i32s f64 +js_fs_rmdir_sync_options i32s f64,f64 +js_fs_stat_callback f64 f64,f64,f64 +js_fs_stat_sync f64 f64 +js_fs_stat_sync_options f64 f64,f64 +js_fs_statfs_callback f64 f64,f64,f64 +js_fs_statfs_sync f64 f64 +js_fs_statfs_sync_options f64 f64,f64 +js_fs_stats_is_directory f64 f64 +js_fs_stats_is_file f64 f64 +js_fs_symlink_callback f64 f64,f64,f64,f64 +js_fs_symlink_sync i32s f64,f64 +js_fs_to_unix_timestamp f64 f64 +js_fs_truncate_callback f64 f64,f64,f64 +js_fs_truncate_sync i32s f64,f64 +js_fs_unlink_callback f64 f64,f64 +js_fs_unlink_sync i32s f64 +js_fs_unwatch_file f64 f64,f64 +js_fs_utf8_stream_call_without_new f64 f64 +js_fs_utf8_stream_destroy f64 f64 +js_fs_utf8_stream_emit f64 f64,f64,f64 +js_fs_utf8_stream_end f64 f64,f64 +js_fs_utf8_stream_flush f64 f64,f64 +js_fs_utf8_stream_flush_sync f64 f64 +js_fs_utf8_stream_listener_count f64 f64,f64 +js_fs_utf8_stream_new f64 f64 +js_fs_utf8_stream_off f64 f64,f64,f64 +js_fs_utf8_stream_on f64 f64,f64,f64 +js_fs_utf8_stream_once f64 f64,f64,f64 +js_fs_utf8_stream_remove_all f64 f64,f64 +js_fs_utf8_stream_reopen f64 f64,f64 +js_fs_utf8_stream_write f64 f64,f64 +js_fs_utimes_callback f64 f64,f64,f64,f64 +js_fs_utimes_sync i32s f64,f64,f64 +js_fs_watch f64 f64,f64,f64 +js_fs_watch_file f64 f64,f64,f64 +js_fs_write_buffer_callback f64 f64,f64,f64,f64,f64,f64 +js_fs_write_buffer_callback_options f64 f64,f64,f64,f64 +js_fs_write_buffer_sync f64 f64,f64,f64,f64,f64 +js_fs_write_callback f64 f64,f64,f64 +js_fs_write_file_callback f64 f64,f64,f64,f64 +js_fs_write_file_sync i32s f64,f64 +js_fs_write_file_sync_options i32s f64,f64,f64 +js_fs_write_string_sync_options f64 f64,f64,f64 +js_fs_write_sync f64 f64,f64 +js_fs_write_sync_options_dispatch f64 f64,f64,f64 +js_fs_writev_callback f64 f64,f64,f64,f64 +js_fs_writev_sync f64 f64,f64,f64 +js_function_apply_proxy f64 f64,f64,f64 +js_function_bind f64 f64,ptr,usize +js_function_ctor_from_strings f64 ptr,usize +js_function_prototype_value_for_read f64 f64 +js_gc_collect void +js_gc_declare_typed_shape_layout void i64,i32u,ptr,i32u,ptr,i32u +js_gc_enter_unsafe_zone void +js_gc_exit_unsafe_zone void +js_gc_forget_object_layout void i64 +js_gc_init void +js_gc_init_typed_shape_layout void i64,i32u,ptr,i32u,ptr,i32u +js_gc_key_add_layout_unknown void i64 +js_gc_loop_safepoint void +js_gc_memory_pressure i32u i32u +js_gc_module_collect f64 +js_gc_module_idle_hint f64 +js_gc_module_minor f64 +js_gc_note_slot_layout void i64,i32u,i64 +js_gc_note_slot_layout_aware void i64,i32u,i64,i64 +js_gc_pause_stats void ptr,ptr,ptr,ptr +js_gc_pin_user_ptr void ptr +js_gc_register_global_root void i64 +js_gc_release_current_thread_collection_side_allocations void +js_gc_safepoint i32u ptr +js_gc_stats void ptr,ptr,ptr +js_gc_step_status i32u ptr +js_gc_step_us i32u i64,ptr +js_gc_step_work_units i32u i64,ptr +js_gc_temp_root_get i64 i32u +js_gc_temp_root_push i32u i64 +js_gc_temp_root_set void i32u,i64 +js_gc_temp_root_truncate void i32u +js_gc_typed_shape_id_for_keys i32u i32u,i64,i32u,ptr,i32u,ptr,i32u +js_gc_write_barriers_emitted void i32u +js_ge i64 i64,i64 +js_generator_attach_closure_prototype f64 f64,ptr +js_generator_attach_prototype f64 f64,i32s +js_get_async_iterator f64 f64 +js_get_cjs_main_module f64 +js_get_current_step_closure ptr +js_get_dynamic_parent_value f64 i32u +js_get_empty_string ptr +js_get_exception f64 +js_get_export f64 i64,i64,i64 +js_get_function_prototype_method f64 f64,ptr,usize +js_get_global_this f64 +js_get_global_this_builtin_value f64 ptr,usize +js_get_iterator f64 f64 +js_get_property f64 f64,i64,i64 +js_get_string_pointer_unified i64 f64 +js_getenv ptr ptr +js_getenv_value f64 ptr +js_global_assign_existing_or_throw f64 f64,f64 +js_global_get_optional f64 f64 +js_global_get_or_throw_unresolved f64 f64 +js_global_or_console_property_by_name f64 ptr +js_global_update f64 f64,f64,f64 +js_globalthis_seed_async_local_storage void +js_gt i64 i64,i64 +js_handle_array_get f64 f64,i32s +js_handle_array_length i32s f64 +js_handle_clear_side_tables void i64 +js_handle_count i64 +js_handle_method_dispatch f64 i64,ptr,usize,ptr,usize +js_handle_own_property_names_dispatch f64 i64 +js_handle_property_dispatch f64 i64,ptr,usize +js_handle_property_set_dispatch void i64,ptr,usize,f64 +js_handle_prototype_dispatch f64 i64 +js_has_exception i32s +js_has_path_module f64 f64 +js_headers_append f64 f64,ptr,ptr +js_headers_delete f64 f64,ptr +js_headers_entries f64 f64 +js_headers_fetch_object_json ptr f64 +js_headers_for_each f64 f64,f64 +js_headers_from_value f64 f64 +js_headers_get ptr f64,ptr +js_headers_get_set_cookie f64 f64 +js_headers_has f64 f64,ptr +js_headers_init_from_value f64 f64,f64 +js_headers_keys f64 f64 +js_headers_method_value f64 f64,ptr,usize +js_headers_new f64 +js_headers_set f64 f64,ptr,ptr +js_headers_setheaders_entries_json ptr f64 +js_headers_values f64 f64 +js_http_agent_create_connection i64 i64 +js_http_agent_create_socket i64 i64 +js_http_agent_default_port f64 i64 +js_http_agent_destroy i64 i64 +js_http_agent_destroyed f64 i64 +js_http_agent_free_sockets f64 i64 +js_http_agent_get_name ptr i64,f64 +js_http_agent_keep_alive f64 i64 +js_http_agent_keep_alive_msecs f64 i64 +js_http_agent_keep_alive_timeout_buffer f64 i64 +js_http_agent_max_free_sockets f64 i64 +js_http_agent_max_sockets f64 i64 +js_http_agent_max_total_sockets f64 i64 +js_http_agent_new i64 f64 +js_http_agent_noop_self i64 i64 +js_http_agent_protocol ptr i64 +js_http_agent_requests f64 i64 +js_http_agent_set_create_connection void i64,i64 +js_http_agent_set_create_socket void i64,i64 +js_http_agent_set_keep_alive void i64,f64 +js_http_agent_set_keep_alive_msecs void i64,f64 +js_http_agent_set_keep_alive_timeout_buffer void i64,f64 +js_http_agent_set_max_free_sockets void i64,f64 +js_http_agent_set_max_sockets void i64,f64 +js_http_agent_set_max_total_sockets void i64,f64 +js_http_agent_set_protocol void i64,ptr +js_http_agent_sockets f64 i64 +js_http_agent_total_socket_count f64 i64 +js_http_client_request_abort f64 i64 +js_http_client_request_aborted f64 i64 +js_http_client_request_destroy i64 i64,f64 +js_http_client_request_destroyed f64 i64 +js_http_client_request_end i64 i64,f64 +js_http_client_request_end_full i64 i64,f64,i64,i64 +js_http_client_request_finished f64 i64 +js_http_client_request_flush_headers f64 i64,f64,f64 +js_http_client_request_get_header f64 i64,ptr +js_http_client_request_get_header_names f64 i64 +js_http_client_request_get_headers f64 i64 +js_http_client_request_get_raw_header_names f64 i64 +js_http_client_request_has_header f64 i64,ptr +js_http_client_request_host ptr i64 +js_http_client_request_listener_count f64 i64,ptr +js_http_client_request_max_headers_count f64 i64 +js_http_client_request_method ptr i64 +js_http_client_request_noop_undefined f64 i64,f64,f64 +js_http_client_request_path ptr i64 +js_http_client_request_protocol ptr i64 +js_http_client_request_remove_header f64 i64,ptr +js_http_client_request_reused_socket f64 i64 +js_http_client_request_socket f64 i64 +js_http_client_request_standalone_new i64 f64 +js_http_client_request_writable_ended f64 i64 +js_http_client_request_writable_finished f64 i64 +js_http_client_request_write i64 i64,f64 +js_http_client_request_write_full f64 i64,f64,i64,i64 +js_http_connection_listener_noop f64 f64 +js_http_get i64 f64,i64 +js_http_get_overload i64 i64 +js_http_has_pending i32s +js_http_incoming_message_pipe f64 i64,f64 +js_http_incoming_message_req f64 i64 +js_http_incoming_message_set_encoding i64 i64,ptr +js_http_incoming_message_socket f64 i64 +js_http_is_incoming_message i32s i64 +js_http_on i64 i64,ptr,i64 +js_http_once i64 i64,ptr,i64 +js_http_process_pending i32s +js_http_request i64 f64,i64 +js_http_request_body ptr i64 +js_http_request_body_length f64 i64 +js_http_request_content_type ptr i64 +js_http_request_has_header bool i64,ptr +js_http_request_header ptr i64,ptr +js_http_request_headers_all ptr i64 +js_http_request_id f64 i64 +js_http_request_is_method bool i64,ptr +js_http_request_method ptr i64 +js_http_request_overload i64 i64 +js_http_request_path ptr i64 +js_http_request_query ptr i64 +js_http_request_query_all ptr i64 +js_http_request_query_param ptr i64,ptr +js_http_respond f64 i64,f64,ptr,ptr +js_http_respond_error f64 i64,f64,ptr +js_http_respond_html f64 i64,f64,ptr +js_http_respond_json f64 i64,f64,ptr +js_http_respond_not_found f64 i64 +js_http_respond_redirect f64 i64,ptr,f64 +js_http_respond_status_text ptr f64 +js_http_respond_text f64 i64,f64,ptr +js_http_respond_with_headers f64 i64,f64,ptr,ptr +js_http_response_complete f64 i64 +js_http_response_headers f64 i64 +js_http_response_http_version ptr i64 +js_http_response_http_version_major f64 i64 +js_http_response_http_version_minor f64 i64 +js_http_response_raw_headers f64 i64 +js_http_response_trailers f64 i64 +js_http_server_accept i64 i64 +js_http_server_accept_v2 i64 i64 +js_http_server_close f64 i64 +js_http_server_construct_with_this f64 f64,f64,f64 +js_http_server_create i64 f64 +js_http_set_header i64 i64,ptr,ptr +js_http_set_timeout i64 i64,f64 +js_http_set_timeout_full i64 i64,f64,i64 +js_http_setter_noop f64 f64 +js_http_status_code f64 i64 +js_http_status_message ptr i64 +js_http_validate_header_name f64 f64,f64 +js_http_validate_header_value f64 f64,f64 +js_https_agent_new i64 f64 +js_https_get i64 f64,i64 +js_https_get_overload i64 i64 +js_https_global_agent_emit void ptr,usize,f64,f64 +js_https_global_agent_override_value f64 +js_https_global_agent_sync_maps void f64,f64,f64 +js_https_request i64 f64,i64 +js_https_request_overload i64 i64 +js_https_server_construct_with_this f64 f64,f64,f64 +js_i32_box_alloc ptr i32s +js_i32_box_get i32s ptr +js_i32_box_release void ptr +js_i32_box_scope_release void ptr +js_i32_box_set void ptr,i32s +js_ic_diag_note_hit void i64,i32s +js_immediate_has_pending i32s +js_implicit_this_get f64 +js_implicit_this_get_sloppy f64 +js_implicit_this_set f64 f64 +js_import_meta_resolve f64 f64,f64,f64 +js_import_meta_resolve_value f64 f64 +js_in_operator f64 f64,f64 +js_in_operator_presence_ic f64 f64,f64,ptr +js_inherited_read_cache_hit_f64 f64 ptr,ptr +js_inherited_read_cache_stats f64 i32s +js_inline_arena_slow_alloc ptr ptr,usize,usize +js_inline_arena_state ptr +js_install_global_value_surfaces void +js_instanceof f64 f64,i32u +js_instanceof_dynamic f64 f64,f64 +js_instanceof_noncallable_rhs f64 +js_interval_timer_has_pending i32s +js_interval_timer_next_deadline f64 +js_interval_timer_tick i32s +js_is_finite f64 f64 +js_is_nan f64 f64 +js_is_promise i32s ptr +js_is_registered_ffi_handle i32s i64 +js_is_registered_net_socket_handle i32s i64 +js_is_symbol i32s f64 +js_is_truthy i32s f64 +js_is_undefined_or_bare_nan i32s f64 +js_iter_result_get_done f64 +js_iter_result_get_value f64 +js_iter_result_get_value_f64 f64 +js_iter_result_get_value_i1 i32s +js_iter_result_get_value_i32 i32s +js_iter_result_set f64 f64,i32s +js_iter_result_set_f64 f64 f64,i32s +js_iter_result_set_i1 f64 i32s,i32s +js_iter_result_set_i32 f64 i32s,i32s +js_iterator_close_if_not_done f64 f64,f64 +js_iterator_from f64 f64 +js_iterator_next_result f64 f64 +js_iterator_rest_to_array f64 f64,f64 +js_iterator_result_validate f64 f64 +js_iterator_to_array ptr f64 +js_json_get_bool bool ptr,ptr +js_json_get_number f64 ptr,ptr +js_json_get_string ptr ptr,ptr +js_json_is_raw_json f64 f64 +js_json_is_valid f64 ptr +js_json_parse i64 ptr +js_json_parse_or_null i64 ptr +js_json_parse_typed_array i64 ptr,ptr,i32u,i32u +js_json_parse_with_reviver i64 ptr,i64 +js_json_raw_json f64 f64 +js_json_stringify ptr f64,i32u +js_json_stringify_bool ptr bool +js_json_stringify_full i64 f64,f64,f64 +js_json_stringify_null ptr +js_json_stringify_number ptr f64 +js_json_stringify_string ptr ptr +js_json_stringify_with_replacer ptr f64,i32u,i64 +js_json_text_to_string ptr f64 +js_jsvalue_compare i32s f64,f64 +js_jsvalue_equals i32s f64,f64 +js_jsvalue_loose_equals i32s f64,f64 +js_jsvalue_same_value_zero i32s f64,f64 +js_jsvalue_to_string ptr f64 +js_jsvalue_to_string_coerce ptr f64 +js_jsvalue_to_string_method ptr f64 +js_jsvalue_to_string_method_box f64 f64 +js_jsvalue_to_string_radix ptr f64,f64 +js_jsx f64 f64,f64 +js_jsx_render_stream_from_value f64 f64 +js_jsxs f64 f64,f64 +js_keccak256_native ptr i64 +js_keccak256_native_bytes ptr i64 +js_lazy_array_index_probe f64 i64,i64 +js_le i64 i64,i64 +js_leave_finally void +js_link_path_module_parent void f64 +js_literal_shape_initialize void f64,ptr,ptr,i32u +js_load_module i64 i64,i64 +js_lodash_camel_case ptr ptr +js_lodash_capitalize ptr ptr +js_lodash_chunk ptr ptr,f64 +js_lodash_clamp f64 f64,f64,f64 +js_lodash_compact ptr ptr +js_lodash_concat ptr ptr,ptr +js_lodash_difference ptr ptr,ptr +js_lodash_drop ptr ptr,f64 +js_lodash_drop_right ptr ptr,f64 +js_lodash_ends_with f64 +js_lodash_escape f64 +js_lodash_fill ptr ptr,i64,f64,f64 +js_lodash_first f64 ptr +js_lodash_flatten ptr ptr +js_lodash_in_range f64 f64,f64,f64 +js_lodash_includes f64 +js_lodash_initial ptr ptr +js_lodash_is_empty i32s f64 +js_lodash_is_nil i32s f64 +js_lodash_kebab_case ptr ptr +js_lodash_last f64 ptr +js_lodash_lower_case ptr ptr +js_lodash_lower_first f64 +js_lodash_max f64 ptr +js_lodash_max_by f64 ptr,f64 +js_lodash_mean f64 ptr +js_lodash_mean_by f64 ptr,f64 +js_lodash_min f64 ptr +js_lodash_min_by f64 ptr,f64 +js_lodash_pad ptr ptr,f64,ptr +js_lodash_pad_end ptr ptr,f64,ptr +js_lodash_pad_start ptr ptr,f64,ptr +js_lodash_random f64 f64,f64,bool +js_lodash_range ptr f64,f64,f64 +js_lodash_repeat ptr ptr,f64 +js_lodash_replace f64 +js_lodash_reverse ptr ptr +js_lodash_size f64 f64 +js_lodash_snake_case ptr ptr +js_lodash_split f64 +js_lodash_start_case f64 +js_lodash_starts_with f64 +js_lodash_sum f64 ptr +js_lodash_sum_by f64 ptr,f64 +js_lodash_tail ptr ptr +js_lodash_take ptr ptr,f64 +js_lodash_take_right ptr ptr,f64 +js_lodash_times ptr f64 +js_lodash_trim ptr ptr,ptr +js_lodash_trim_end ptr ptr,ptr +js_lodash_trim_start ptr ptr,ptr +js_lodash_truncate ptr ptr,f64 +js_lodash_unescape f64 +js_lodash_uniq ptr ptr +js_lodash_upper_case ptr ptr +js_lodash_upper_first f64 +js_loose_eq i64 i64,i64 +js_lt i64 i64,i64 +js_main_thread_notified i32s +js_make_single_value_async_iterator f64 f64 +js_map_alloc ptr i32u +js_map_clear void ptr +js_map_compaction_epoch f64 f64 +js_map_cursor_next f64 f64,f64,f64 +js_map_delete i32s ptr,f64 +js_map_delete_number_key i32s ptr,f64 +js_map_delete_string_key i32s ptr,ptr +js_map_entries ptr ptr +js_map_entries_iter_obj i64 ptr +js_map_entry_key_at f64 ptr,i32u +js_map_entry_key_raw_at f64 ptr,i32u +js_map_entry_value_at f64 ptr,i32u +js_map_entry_value_raw_at f64 ptr,i32u +js_map_find_key_index f64 f64,f64 +js_map_foreach void ptr,f64,f64 +js_map_from_array ptr ptr +js_map_from_iterable ptr f64 +js_map_get f64 ptr,f64 +js_map_get_number_key f64 ptr,f64 +js_map_get_string_key f64 ptr,ptr +js_map_group_by f64 f64,f64 +js_map_has i32s ptr,f64 +js_map_has_number_key i32s ptr,f64 +js_map_has_string_key i32s ptr,ptr +js_map_keys ptr ptr +js_map_keys_iter_obj i64 ptr +js_map_set ptr ptr,f64,f64 +js_map_set_number_key ptr ptr,f64,f64 +js_map_set_string_bool ptr ptr,ptr,i32s +js_map_set_string_f32 ptr ptr,ptr,f32 +js_map_set_string_i32 ptr ptr,ptr,i32s +js_map_set_string_key ptr ptr,ptr,f64 +js_map_set_string_number ptr ptr,ptr,f64 +js_map_set_string_string ptr ptr,ptr,ptr +js_map_set_string_u32 ptr ptr,ptr,i32u +js_map_set_subclass_init f64 f64,i32s,f64 +js_map_size i32u ptr +js_map_values ptr ptr +js_map_values_iter_obj i64 ptr +js_mark_entry_module_esm void +js_math_acos f64 f64 +js_math_acosh f64 f64 +js_math_asin f64 f64 +js_math_asinh f64 f64 +js_math_atan f64 f64 +js_math_atan2 f64 f64,f64 +js_math_atanh f64 f64 +js_math_cbrt f64 f64 +js_math_clz32 f64 f64 +js_math_cos f64 f64 +js_math_cosh f64 f64 +js_math_expm1 f64 f64 +js_math_f16round f64 f64 +js_math_fmod f64 f64,f64 +js_math_fround f64 f64 +js_math_hypot f64 f64,f64 +js_math_imul f64 f64,f64 +js_math_log f64 f64 +js_math_log10 f64 f64 +js_math_log1p f64 f64 +js_math_log2 f64 f64 +js_math_max2 f64 f64,f64 +js_math_max_array f64 i64 +js_math_min2 f64 f64,f64 +js_math_min_array f64 i64 +js_math_pow f64 f64,f64 +js_math_random f64 +js_math_round f64 f64 +js_math_sign f64 f64 +js_math_sin f64 f64 +js_math_sinh f64 f64 +js_math_tan f64 f64 +js_math_tanh f64 f64 +js_math_to_number f64 f64 +js_math_trunc f64 f64 +js_message_channel_new f64 +js_message_port_constructor_error f64 +js_method_direct_shape_class i32u f64,ptr,i32u +js_method_direct_shape_guard i32s f64,i32u,i32u,i32u +js_microtasks_pending i32s +js_migrate_stdin_listeners_to_provider void +js_mod i64 i64,i64 +js_module_ambient_require f64 +js_module_ambient_require_apply f64 f64 +js_module_builtin_modules f64 +js_module_constants f64 +js_module_create_require f64 f64 +js_module_create_require_devirt f64 f64 +js_module_dynamic_import_apply_hooks f64 f64 +js_module_dynamic_import_deferred f64 f64,f64,f64 +js_module_dynamic_import_fallback f64 f64,f64 +js_module_enable_compile_cache f64 f64 +js_module_find_package_json f64 f64,f64,f64 +js_module_find_path f64 f64,f64,f64 +js_module_find_source_map f64 f64 +js_module_flush_compile_cache f64 +js_module_get_compile_cache_dir f64 +js_module_get_source_maps_support f64 +js_module_init_paths f64 +js_module_is_builtin f64 f64 +js_module_load f64 f64,f64,f64 +js_module_module_new f64 f64,f64 +js_module_node_module_paths f64 f64 +js_module_preload_modules f64 f64 +js_module_register f64 f64,f64,f64 +js_module_register_hooks f64 f64 +js_module_resolve_filename f64 f64,f64,f64,f64 +js_module_resolve_lookup_paths f64 f64,f64 +js_module_run_main f64 +js_module_set_source_maps_support f64 f64,f64 +js_module_source_map_new f64 f64,f64 +js_module_strip_typescript_types f64 f64,f64 +js_module_sync_builtin_esm_exports f64 +js_module_top_this f64 +js_mul i64 i64,i64 +js_multipart_parse ptr ptr,ptr +js_multipart_parse_with_sizes ptr ptr,ptr +js_nanbox_bigint f64 i64 +js_nanbox_get_bigint i64 f64 +js_nanbox_get_pointer i64 f64 +js_nanbox_get_string_pointer i64 f64 +js_nanbox_is_bigint i32s f64 +js_nanbox_is_pointer i32s f64 +js_nanbox_is_string i32s f64 +js_nanbox_pointer f64 i64 +js_nanbox_string f64 i64 +js_native_abi_check_buffer_byte_len usize f64 +js_native_abi_check_buffer_data_ptr ptr f64 +js_native_abi_check_f32 f32 f64 +js_native_abi_check_f64 f64 f64 +js_native_abi_check_i16 i16s f64 +js_native_abi_check_i32 i32s f64 +js_native_abi_check_i64 i64 f64 +js_native_abi_check_i8 i8s f64 +js_native_abi_check_isize isize f64 +js_native_abi_check_pod_object i64 f64 +js_native_abi_check_pod_view_data_ptr ptr f64,i64 +js_native_abi_check_pod_view_record_count usize f64,i64 +js_native_abi_check_promise i64 f64 +js_native_abi_check_ptr i64 f64 +js_native_abi_check_string_ptr i64 f64 +js_native_abi_check_u16 i16u f64 +js_native_abi_check_u32 i32u f64 +js_native_abi_check_u64 i64 f64 +js_native_abi_check_u8 i8u f64 +js_native_abi_check_usize usize f64 +js_native_abi_materialize_i64 f64 i64 +js_native_abi_materialize_u64 f64 i64 +js_native_arena_alloc ptr i64 +js_native_arena_dispose void i64 +js_native_arena_view ptr i64,i32s,i64,i64 +js_native_async_completion_attach_handle i32s ptr,i64,i32u +js_native_async_completion_cancel i32s ptr +js_native_async_completion_new ptr i32u +js_native_async_completion_promise ptr ptr +js_native_async_completion_reject_bits i32s ptr,i64 +js_native_async_completion_reject_promise_bits i32s ptr,i64 +js_native_async_completion_reject_string i32s ptr,ptr,usize +js_native_async_completion_resolve_bits i32s ptr,i64 +js_native_async_completion_resolve_promise_bits i32s ptr,i64 +js_native_async_drop_promise_token void ptr +js_native_async_has_active i32s +js_native_async_process_pending i32s +js_native_buffer_byte_len usize f64 +js_native_buffer_data_ptr ptr f64 +js_native_call_method f64 f64,ptr,usize,ptr,usize +js_native_call_method_apply f64 f64,ptr,usize,i64 +js_native_call_method_apply_by_id f64 f64,i64,i64 +js_native_call_method_by_id f64 f64,i64,ptr,usize +js_native_call_method_nullsafe f64 f64,ptr,usize,ptr,usize +js_native_call_method_str_key f64 f64,i64,ptr,usize +js_native_call_method_value f64 f64,f64,ptr,usize +js_native_call_method_value_apply f64 f64,f64,i64 +js_native_call_value f64 f64,ptr,usize +js_native_handle_dispose i32s f64 +js_native_handle_mark_main_thread void +js_native_handle_new_borrowed f64 i64,i64,i32s,i32s,ptr,i64 +js_native_handle_new_owned f64 i64,i64,i32s,i32s,ptr,ptr,i64 +js_native_handle_type_id i64 ptr,usize +js_native_handle_unwrap i64 f64,i64,i32s,i32s,i32s +js_native_memory_copy void i64,i64 +js_native_memory_fill_u32 void i64,f64 +js_native_module_bind_method f64 f64,ptr,usize +js_native_module_esm_export_value f64 f64,f64 +js_native_module_named_esm_export_value f64 f64,f64 +js_native_module_property_by_name f64 ptr,usize,ptr,usize +js_native_pod_view ptr i64,i64,i64,i64,i64,i64 +js_native_pod_view_length f64 f64 +js_native_work_submitted void +js_navigator_object f64 +js_navstack_register_route void f64,f64,i64 +js_net_block_list_add_address f64 i64,i64,i64 +js_net_block_list_add_range f64 i64,i64,i64,i64 +js_net_block_list_add_subnet f64 i64,i64,f64,i64 +js_net_block_list_check f64 i64,i64,i64 +js_net_block_list_from_json f64 i64,f64 +js_net_block_list_is_block_list f64 f64 +js_net_block_list_new i64 +js_net_block_list_rules ptr i64 +js_net_block_list_to_json f64 i64 +js_net_callback_ptr i64 f64 +js_net_create_connection f64 i32s,ptr,ptr +js_net_create_server f64 ptr,ptr +js_net_create_server_handle_stub f64 f64,f64,f64,f64,f64 +js_net_get_default_auto_select_family f64 +js_net_get_default_auto_select_family_attempt_timeout f64 +js_net_has_pending i32s +js_net_is_ip f64 i64 +js_net_is_ipv4 f64 i64 +js_net_is_ipv6 f64 i64 +js_net_normalize_args f64 f64 +js_net_process_pending i32s +js_net_server_address ptr f64 +js_net_server_close i32s f64 +js_net_server_event_names ptr i64 +js_net_server_get_connections f64 i64 +js_net_server_get_drop_max_connection f64 i64 +js_net_server_get_listening f64 i64 +js_net_server_get_max_connections f64 i64 +js_net_server_listen i32s f64,i32s,ptr,ptr +js_net_server_listener_count f64 i64,i64 +js_net_server_listeners i64 i64,i64 +js_net_server_listening i32s i64 +js_net_server_noop_self i64 i64 +js_net_server_on void i64,i64,i64 +js_net_server_once i64 i64,i64,i64 +js_net_server_prepend_listener i64 i64,i64,i64 +js_net_server_prepend_once_listener i64 i64,i64,i64 +js_net_server_raw_listeners i64 i64,i64 +js_net_server_remove_all_listeners i64 i64,i64 +js_net_server_remove_listener i64 i64,i64,i64 +js_net_server_set_drop_max_connection f64 i64,f64 +js_net_server_set_max_connections f64 i64,f64 +js_net_set_default_auto_select_family f64 f64 +js_net_set_default_auto_select_family_attempt_timeout f64 f64 +js_net_socket_address ptr i64 +js_net_socket_address_get_address ptr i64 +js_net_socket_address_get_family ptr i64 +js_net_socket_address_get_flowlabel f64 i64 +js_net_socket_address_get_port f64 i64 +js_net_socket_address_new i64 f64 +js_net_socket_address_parse f64 i64 +js_net_socket_alloc i64 +js_net_socket_connect i64 f64,f64,f64 +js_net_socket_destroy i32s f64 +js_net_socket_end i32s f64 +js_net_socket_event_names ptr i64 +js_net_socket_get_auto_select_family_attempted_addresses f64 i64 +js_net_socket_get_buffer_size f64 i64 +js_net_socket_get_bytes_read f64 i64 +js_net_socket_get_bytes_written f64 i64 +js_net_socket_get_connecting f64 i64 +js_net_socket_get_destroyed f64 i64 +js_net_socket_get_local_address f64 i64 +js_net_socket_get_local_family f64 i64 +js_net_socket_get_local_port f64 i64 +js_net_socket_get_pending f64 i64 +js_net_socket_get_readable f64 i64 +js_net_socket_get_readable_ended f64 i64 +js_net_socket_get_readable_state ptr i64 +js_net_socket_get_ready_state ptr i64 +js_net_socket_get_remote_address f64 i64 +js_net_socket_get_remote_family f64 i64 +js_net_socket_get_remote_port f64 i64 +js_net_socket_get_timeout f64 i64 +js_net_socket_get_type_of_service f64 i64 +js_net_socket_get_writable f64 i64 +js_net_socket_get_writable_ended f64 i64 +js_net_socket_get_writable_high_water_mark f64 i64 +js_net_socket_get_writable_length f64 i64 +js_net_socket_get_writable_need_drain f64 i64 +js_net_socket_get_writable_state ptr i64 +js_net_socket_listener_count f64 i64,i64 +js_net_socket_listeners i64 i64,i64 +js_net_socket_method_connect void i64,f64,i64 +js_net_socket_noop_self i64 i64 +js_net_socket_on void i64,i64,i64 +js_net_socket_once i64 i64,i64,i64 +js_net_socket_pipe f64 i64,f64,f64 +js_net_socket_prepend_listener i64 i64,i64,i64 +js_net_socket_prepend_once_listener i64 i64,i64,i64 +js_net_socket_raw_listeners i64 i64,i64 +js_net_socket_read ptr f64,i32s +js_net_socket_ref i64 i64 +js_net_socket_remote_address ptr f64 +js_net_socket_remote_port i32s f64 +js_net_socket_remove_all_listeners i64 i64,i64 +js_net_socket_remove_listener i64 i64,i64,i64 +js_net_socket_reset_and_destroy i64 i64 +js_net_socket_set_encoding i64 i64,i64 +js_net_socket_set_no_delay i64 i64,i64 +js_net_socket_set_timeout i64 i64,f64,i64 +js_net_socket_set_type_of_service i64 i64,f64 +js_net_socket_unpipe i64 i64,f64 +js_net_socket_unref i64 i64 +js_net_socket_upgrade_tls ptr i64,i64,f64 +js_net_socket_write i32s f64,ptr +js_net_throw_invalid_address void +js_net_validate_block_list_prefix i32s f64,f64 +js_net_validate_connect_port void f64 +js_net_validate_create_server_options void f64 +js_net_validate_default_auto_select_family i32s f64 +js_net_validate_default_auto_select_family_attempt_timeout i32s f64 +js_net_validate_listen_port void f64 +js_net_validate_socket_timeout void f64 +js_net_validate_tos i32s f64 +js_new_from_handle f64 f64,i64,i64 +js_new_function_construct f64 f64,ptr,usize +js_new_function_construct_apply f64 f64,f64 +js_new_function_construct_with_new_target f64 f64,ptr,usize,f64 +js_new_instance f64 i64,i64,i64,i64,i64 +js_new_target_get f64 +js_new_target_set f64 f64 +js_new_target_value f64 +js_nm_enable_install_all void +js_nm_install_all void +js_nm_install_assert void +js_nm_install_async_hooks void +js_nm_install_bigint void +js_nm_install_buffer void +js_nm_install_bun void +js_nm_install_bun_ffi void +js_nm_install_child_process void +js_nm_install_cluster void +js_nm_install_console void +js_nm_install_crypto void +js_nm_install_dgram void +js_nm_install_dns void +js_nm_install_domain void +js_nm_install_events void +js_nm_install_fs void +js_nm_install_http void +js_nm_install_inspector void +js_nm_install_module void +js_nm_install_net void +js_nm_install_node_pty void +js_nm_install_os void +js_nm_install_path void +js_nm_install_perf void +js_nm_install_process void +js_nm_install_punycode void +js_nm_install_querystring void +js_nm_install_readline void +js_nm_install_repl void +js_nm_install_sea void +js_nm_install_sqlite void +js_nm_install_stream void +js_nm_install_timers void +js_nm_install_tls void +js_nm_install_tty void +js_nm_install_url void +js_nm_install_util void +js_nm_install_v8 void +js_nm_install_vm void +js_nm_install_wasi void +js_nm_install_zlib void +js_node_http2_connect i64 f64,f64,i64 +js_node_http2_create_secure_server i64 f64,i64 +js_node_http2_create_server i64 f64,f64 +js_node_http2_get_default_settings ptr +js_node_http2_get_packed_settings ptr i64 +js_node_http2_get_unpacked_settings ptr i64 +js_node_http2_server_address_json ptr i64 +js_node_http2_server_close void i64,i64 +js_node_http2_server_listen i64 i64,i64 +js_node_http2_server_on f64 i64,ptr,i64 +js_node_http_create_server i64 i64 +js_node_http_create_server_with_options i64 f64,f64 +js_node_http_im_aborted i32s i64 +js_node_http_im_add_header_line void i64,f64,f64,f64 +js_node_http_im_complete i32s i64 +js_node_http_im_destroy void i64 +js_node_http_im_destroyed i32s i64 +js_node_http_im_headers_distinct_json ptr i64 +js_node_http_im_headers_json ptr i64 +js_node_http_im_http_version ptr i64 +js_node_http_im_http_version_major f64 i64 +js_node_http_im_http_version_minor f64 i64 +js_node_http_im_method ptr i64 +js_node_http_im_on f64 i64,ptr,i64 +js_node_http_im_once f64 i64,ptr,i64 +js_node_http_im_pause void i64 +js_node_http_im_pause_self i64 i64 +js_node_http_im_raw_body f64 i64 +js_node_http_im_raw_headers_json ptr i64 +js_node_http_im_raw_trailers_json ptr i64 +js_node_http_im_read f64 i64 +js_node_http_im_readable i32s i64 +js_node_http_im_remote_address ptr i64 +js_node_http_im_remote_port f64 i64 +js_node_http_im_resume void i64 +js_node_http_im_resume_self i64 i64 +js_node_http_im_set_encoding i64 i64,ptr +js_node_http_im_set_timeout i64 i64,f64,i64 +js_node_http_im_signal f64 i64 +js_node_http_im_trailers_distinct_json ptr i64 +js_node_http_im_trailers_json ptr i64 +js_node_http_im_url ptr i64 +js_node_http_incoming_message_standalone_new i64 f64 +js_node_http_outgoing_message_new i64 +js_node_http_res_add_trailers void i64,f64 +js_node_http_res_append_header i64 i64,ptr,ptr +js_node_http_res_assign_socket void i64,f64 +js_node_http_res_cork void i64 +js_node_http_res_detach_socket void i64,f64 +js_node_http_res_end void i64,f64 +js_node_http_res_end_full void i64,f64,i64,i64 +js_node_http_res_end_with_cb void i64,f64,i64 +js_node_http_res_finished i32s i64 +js_node_http_res_flush_headers void i64 +js_node_http_res_get_header f64 i64,ptr +js_node_http_res_get_header_names_json ptr i64 +js_node_http_res_get_headers_json ptr i64 +js_node_http_res_get_status f64 i64 +js_node_http_res_get_status_message f64 i64 +js_node_http_res_has_header i32s i64,ptr +js_node_http_res_has_header_value f64 i64,ptr +js_node_http_res_headers_sent i32s i64 +js_node_http_res_on f64 i64,ptr,i64 +js_node_http_res_once f64 i64,ptr,i64 +js_node_http_res_remove_header void i64,ptr +js_node_http_res_req_handle i64 i64 +js_node_http_res_send_date i32s i64 +js_node_http_res_set_header void i64,ptr,f64 +js_node_http_res_set_header_self i64 i64,ptr,f64 +js_node_http_res_set_headers i64 i64,f64 +js_node_http_res_set_send_date void i64,f64 +js_node_http_res_set_status void i64,f64 +js_node_http_res_set_status_message void i64,ptr +js_node_http_res_set_strict_content_length void i64,f64 +js_node_http_res_set_timeout i64 i64,f64,i64 +js_node_http_res_strict_content_length i32s i64 +js_node_http_res_uncork void i64 +js_node_http_res_writable_ended i32s i64 +js_node_http_res_writable_finished i32s i64 +js_node_http_res_write i32s i64,f64 +js_node_http_res_write_continue void i64 +js_node_http_res_write_early_hints void i64,f64,i64 +js_node_http_res_write_full f64 i64,f64,i64,i64 +js_node_http_res_write_head void i64,f64,i64,i64 +js_node_http_res_write_processing void i64 +js_node_http_res_write_with_cb i32s i64,f64,i64 +js_node_http_server_address_json ptr i64 +js_node_http_server_close void i64,i64 +js_node_http_server_close_all_connections void i64 +js_node_http_server_close_idle_connections void i64 +js_node_http_server_has_active i32s +js_node_http_server_listen i64 i64,i64 +js_node_http_server_listening i32s i64 +js_node_http_server_listening_value f64 i64 +js_node_http_server_on f64 i64,ptr,i64 +js_node_http_server_process_pending i32s +js_node_http_server_ref i64 i64 +js_node_http_server_remove_all_listeners f64 i64,ptr +js_node_http_server_remove_listener f64 i64,ptr,i64 +js_node_http_server_response_standalone_new i64 f64 +js_node_http_server_set_request_timeout f64 i64,f64 +js_node_http_server_set_timeout_method i64 i64,f64,i64 +js_node_http_server_unref i64 i64 +js_node_https_create_server i64 f64,i64 +js_node_https_server_address_json ptr i64 +js_node_https_server_close void i64,i64 +js_node_https_server_close_all_connections void i64 +js_node_https_server_close_idle_connections void i64 +js_node_https_server_listen i64 i64,i64 +js_node_https_server_listening_value f64 i64 +js_node_https_server_on f64 i64,ptr,i64 +js_node_https_server_ref i64 i64 +js_node_https_server_set_request_timeout f64 i64,f64 +js_node_https_server_set_timeout_method i64 i64,f64,i64 +js_node_https_server_unref i64 i64 +js_node_inspector_close f64 +js_node_inspector_console_debug f64 f64,f64,f64 +js_node_inspector_console_error f64 f64,f64,f64 +js_node_inspector_console_info f64 f64,f64,f64 +js_node_inspector_console_log f64 f64,f64,f64 +js_node_inspector_console_object f64 +js_node_inspector_console_warn f64 f64,f64,f64 +js_node_inspector_open f64 f64,f64,f64 +js_node_inspector_promises_session_new f64 +js_node_inspector_promises_session_post f64 i64,f64,f64,f64 +js_node_inspector_session_call_without_new f64 +js_node_inspector_session_connect f64 i64 +js_node_inspector_session_connect_to_main_thread f64 i64 +js_node_inspector_session_disconnect f64 i64 +js_node_inspector_session_listener_count f64 i64,f64 +js_node_inspector_session_new f64 +js_node_inspector_session_off f64 i64,f64,f64 +js_node_inspector_session_on f64 i64,f64,f64 +js_node_inspector_session_once f64 i64,f64,f64 +js_node_inspector_session_post f64 i64,f64,f64,f64 +js_node_inspector_session_remove_all_listeners f64 i64,f64 +js_node_inspector_url f64 +js_node_inspector_wait_for_debugger f64 +js_node_setheaders_entries_json ptr f64 +js_node_sqlite_backup ptr f64,f64,f64 +js_node_sqlite_database_sync_aggregate i32s i64,f64,f64 +js_node_sqlite_database_sync_apply_changeset f64 i64,f64,f64 +js_node_sqlite_database_sync_call i64 f64,f64 +js_node_sqlite_database_sync_close i32s i64 +js_node_sqlite_database_sync_create_session i64 i64,f64 +js_node_sqlite_database_sync_create_tag_store i64 i64,f64 +js_node_sqlite_database_sync_deserialize i32s i64,f64 +js_node_sqlite_database_sync_dispose i32s i64 +js_node_sqlite_database_sync_enable_defensive i32s i64,f64 +js_node_sqlite_database_sync_enable_load_extension i32s i64,f64 +js_node_sqlite_database_sync_exec i32s i64,f64 +js_node_sqlite_database_sync_function i32s i64,f64,f64,f64 +js_node_sqlite_database_sync_is_open f64 i64 +js_node_sqlite_database_sync_is_transaction f64 i64 +js_node_sqlite_database_sync_limits i64 i64 +js_node_sqlite_database_sync_load_extension i32s i64,f64 +js_node_sqlite_database_sync_location f64 i64,f64 +js_node_sqlite_database_sync_new i64 f64,f64 +js_node_sqlite_database_sync_open i32s i64 +js_node_sqlite_database_sync_prepare i64 i64,f64,f64 +js_node_sqlite_database_sync_serialize ptr i64,f64 +js_node_sqlite_database_sync_set_authorizer i32s i64,f64 +js_node_sqlite_is_database_sync_handle i32s i64 +js_node_sqlite_is_limits_handle i32s i64 +js_node_sqlite_is_session_handle i32s i64 +js_node_sqlite_is_statement_sync_handle i32s i64 +js_node_sqlite_is_tag_store_handle i32s i64 +js_node_sqlite_native_dispatch f64 ptr,usize,ptr,usize,i32s +js_node_sqlite_session_call i64 f64,f64 +js_node_sqlite_session_changeset ptr i64 +js_node_sqlite_session_close i32s i64 +js_node_sqlite_session_dispose i32s i64 +js_node_sqlite_session_new i64 f64,f64 +js_node_sqlite_session_patchset ptr i64 +js_node_sqlite_sql_tag_store_all ptr i64,ptr +js_node_sqlite_sql_tag_store_capacity f64 i64 +js_node_sqlite_sql_tag_store_clear i32s i64 +js_node_sqlite_sql_tag_store_db i64 i64 +js_node_sqlite_sql_tag_store_get f64 i64,ptr +js_node_sqlite_sql_tag_store_iterate f64 i64,ptr +js_node_sqlite_sql_tag_store_run ptr i64,ptr +js_node_sqlite_sql_tag_store_size f64 i64 +js_node_sqlite_statement_sync_all ptr i64,ptr +js_node_sqlite_statement_sync_call i64 f64,f64 +js_node_sqlite_statement_sync_columns ptr i64 +js_node_sqlite_statement_sync_expanded_sql ptr i64 +js_node_sqlite_statement_sync_get f64 i64,ptr +js_node_sqlite_statement_sync_iterate f64 i64,ptr +js_node_sqlite_statement_sync_new i64 f64,f64 +js_node_sqlite_statement_sync_run ptr i64,ptr +js_node_sqlite_statement_sync_set_allow_bare_named_parameters i32s i64,f64 +js_node_sqlite_statement_sync_set_allow_unknown_named_parameters i32s i64,f64 +js_node_sqlite_statement_sync_set_read_bigints i32s i64,f64 +js_node_sqlite_statement_sync_set_return_arrays i32s i64,f64 +js_node_sqlite_statement_sync_source_sql ptr i64 +js_node_stream_add_abort_signal f64 f64,f64 +js_node_stream_compose f64 ptr +js_node_stream_duplex_from_options f64 f64,f64 +js_node_stream_duplex_from_web f64 f64,f64 +js_node_stream_duplex_new f64 f64 +js_node_stream_duplex_pair f64 f64 +js_node_stream_duplex_subclass_init f64 f64,f64 +js_node_stream_duplex_to_web f64 f64 +js_node_stream_finished f64 ptr +js_node_stream_from_web f64 f64 +js_node_stream_get_default_hwm f64 f64 +js_node_stream_is_array_buffer_view f64 f64 +js_node_stream_is_destroyed f64 f64 +js_node_stream_is_disturbed f64 f64 +js_node_stream_is_errored f64 f64 +js_node_stream_is_readable f64 f64 +js_node_stream_is_uint8_array f64 f64 +js_node_stream_is_writable f64 f64 +js_node_stream_legacy_subclass_init f64 f64 +js_node_stream_method_allow_half_open f64 i64 +js_node_stream_method_closed f64 i64 +js_node_stream_method_cork f64 i64 +js_node_stream_method_destroy f64 i64,f64 +js_node_stream_method_destroyed f64 i64 +js_node_stream_method_emit f64 i64,f64,f64 +js_node_stream_method_emit_args f64 i64,f64,i64 +js_node_stream_method_end f64 i64,f64 +js_node_stream_method_end3 f64 i64,f64,f64,f64 +js_node_stream_method_errored f64 i64 +js_node_stream_method_event_names i64 i64 +js_node_stream_method_get_max_listeners f64 i64 +js_node_stream_method_is_paused f64 i64 +js_node_stream_method_listener_count f64 i64,f64 +js_node_stream_method_listeners i64 i64,f64 +js_node_stream_method_off f64 i64,f64,f64 +js_node_stream_method_on f64 i64,f64,f64 +js_node_stream_method_once f64 i64,f64,f64 +js_node_stream_method_pause f64 i64 +js_node_stream_method_pipe f64 i64,f64,f64 +js_node_stream_method_prepend_listener f64 i64,f64,f64 +js_node_stream_method_prepend_once_listener f64 i64,f64,f64 +js_node_stream_method_push f64 i64,f64 +js_node_stream_method_raw_listeners i64 i64,f64 +js_node_stream_method_read f64 i64,f64 +js_node_stream_method_readable f64 i64 +js_node_stream_method_readable_aborted f64 i64 +js_node_stream_method_readable_did_read f64 i64 +js_node_stream_method_readable_encoding f64 i64 +js_node_stream_method_readable_ended f64 i64 +js_node_stream_method_readable_flowing f64 i64 +js_node_stream_method_readable_hwm f64 i64 +js_node_stream_method_readable_length f64 i64 +js_node_stream_method_readable_object_mode f64 i64 +js_node_stream_method_remove_all_listeners f64 i64,f64 +js_node_stream_method_remove_listener f64 i64,f64,f64 +js_node_stream_method_resume f64 i64 +js_node_stream_method_set_encoding f64 i64,f64 +js_node_stream_method_set_max_listeners f64 i64,f64 +js_node_stream_method_uncork f64 i64 +js_node_stream_method_unpipe f64 i64,f64 +js_node_stream_method_unshift f64 i64,f64 +js_node_stream_method_writable f64 i64 +js_node_stream_method_writable_corked f64 i64 +js_node_stream_method_writable_ended f64 i64 +js_node_stream_method_writable_finished f64 i64 +js_node_stream_method_writable_hwm f64 i64 +js_node_stream_method_writable_length f64 i64 +js_node_stream_method_writable_need_drain f64 i64 +js_node_stream_method_writable_object_mode f64 i64 +js_node_stream_method_write f64 i64,f64,f64,f64 +js_node_stream_method_write3 f64 i64,f64,f64,f64 +js_node_stream_passthrough_new f64 f64 +js_node_stream_passthrough_subclass_init f64 f64,f64 +js_node_stream_pipeline f64 ptr +js_node_stream_readable_from f64 f64 +js_node_stream_readable_from_options f64 f64,f64 +js_node_stream_readable_from_web f64 f64,f64 +js_node_stream_readable_new f64 f64 +js_node_stream_readable_subclass_init f64 f64,f64 +js_node_stream_readable_to_web f64 f64 +js_node_stream_set_default_hwm f64 f64,f64 +js_node_stream_to_web f64 f64 +js_node_stream_transform_new f64 f64 +js_node_stream_transform_subclass_init f64 f64,f64 +js_node_stream_uint8_array_to_buffer f64 f64 +js_node_stream_writable_from_web f64 f64,f64 +js_node_stream_writable_new f64 f64 +js_node_stream_writable_subclass_init f64 f64,f64 +js_node_stream_writable_to_web f64 f64 +js_node_submod_enable_install_all void +js_node_submod_install_all void +js_node_submod_install_diagnostics_channel void +js_node_submod_install_fs_promises void +js_node_submod_install_hono_jsx_server void +js_node_submod_install_hono_jsx_streaming void +js_node_submod_install_readline_promises void +js_node_submod_install_stream_consumers void +js_node_submod_install_stream_promises void +js_node_submod_install_stream_web void +js_node_submod_install_sys void +js_node_submod_install_test void +js_node_submod_install_test_reporters void +js_node_submod_install_timers void +js_node_submod_install_timers_promises void +js_node_submod_install_trace_events void +js_node_submod_install_vm void +js_node_submodule_export_as_function f64 ptr,i32u,ptr,i32u +js_node_submodule_namespace f64 ptr,i32u +js_node_submodule_namespace_member f64 ptr,i32u,ptr,i32u +js_node_system_error_value f64 ptr,usize,ptr,usize,ptr,usize,f64 +js_node_test_after f64 f64 +js_node_test_after_each f64 f64 +js_node_test_before f64 f64 +js_node_test_before_each f64 f64 +js_node_test_mock_fn f64 f64,f64,f64 +js_node_test_mock_getter f64 f64,f64,f64,f64 +js_node_test_mock_method f64 f64,f64,f64,f64 +js_node_test_mock_property f64 f64,f64,f64 +js_node_test_mock_property_with_presence f64 f64,f64,f64,i32s +js_node_test_mock_reset f64 +js_node_test_mock_restore_all f64 +js_node_test_mock_setter f64 f64,f64,f64,f64 +js_node_test_mock_timers_enable f64 f64 +js_node_test_mock_timers_reset f64 +js_node_test_mock_timers_run_all f64 +js_node_test_mock_timers_set_time f64 f64 +js_node_test_mock_timers_tick f64 f64 +js_node_test_only f64 f64,f64,f64 +js_node_test_register f64 f64,f64,f64 +js_node_test_run f64 f64 +js_node_test_skip f64 f64,f64,f64 +js_node_test_snapshot_set_default_serializers f64 f64 +js_node_test_snapshot_set_resolve_snapshot_path f64 f64 +js_node_test_suite f64 f64,f64,f64 +js_node_test_todo f64 f64,f64,f64 +js_nodemailer_create_transport f64 f64 +js_nodemailer_send_mail ptr i64,i64 +js_nodemailer_verify ptr i64 +js_notify_main_thread void +js_number_coerce f64 f64 +js_number_is_finite f64 f64 +js_number_is_integer f64 f64 +js_number_is_nan f64 f64 +js_number_is_safe_integer f64 f64 +js_number_to_exponential ptr f64,f64 +js_number_to_fixed ptr f64,f64 +js_number_to_locale_string ptr f64 +js_number_to_precision ptr f64,f64 +js_number_to_string ptr f64 +js_number_to_string_box f64 f64 +js_numeric_step f64 f64,i32s +js_object_alloc ptr i32u,i32u +js_object_alloc_class_dynamic_parent ptr i32u,i32u,ptr,i32u +js_object_alloc_class_inline_keys ptr i32u,i32u,i32u,ptr +js_object_alloc_class_inline_keys_stamped ptr i32u,i32u,i32u,ptr,i32u +js_object_alloc_class_with_keys ptr i32u,i32u,i32u,ptr,i32u +js_object_alloc_fast ptr i32u,i32u +js_object_alloc_fast_with_parent ptr i32u,i32u,i32u +js_object_alloc_null_proto ptr i32u,i32u +js_object_alloc_with_parent ptr i32u,i32u,i32u +js_object_alloc_with_shape ptr i32u,i32u,ptr,i32u +js_object_array_keytable_write_guard i32s f64,f64,i32u,i32u,ptr +js_object_array_numeric_write2_guard i64 f64,f64,f64,i32u +js_object_array_numeric_write_guard i64 f64,f64,f64,f64,f64,i32u,i32u +js_object_array_numeric_write_range_guard i64 f64,f64,f64,f64,f64,i32u,i32u,i32u +js_object_assign_one f64 f64,f64 +js_object_assign_validate_target f64 f64 +js_object_clone_with_extra ptr f64,i32u,ptr,i32u +js_object_coerce f64 f64 +js_object_copy_own_fields void i64,f64 +js_object_create f64 f64 +js_object_create_with_props f64 f64,f64 +js_object_define_accessor f64 f64,f64,f64,f64 +js_object_define_get_accessor f64 f64,f64,f64 +js_object_define_getter f64 f64,f64,f64 +js_object_define_properties f64 f64,f64 +js_object_define_property f64 f64,f64,f64 +js_object_define_setter f64 f64,f64,f64 +js_object_delete_dynamic i32s ptr,f64 +js_object_delete_dynamic_value i32s f64,f64 +js_object_delete_field i32s ptr,ptr +js_object_delete_field_value i32s f64,ptr +js_object_entries ptr ptr +js_object_entries_value ptr f64 +js_object_free void ptr +js_object_freeze f64 f64 +js_object_from_entries f64 f64 +js_object_get_class_id i32u ptr +js_object_get_field i64 ptr,i32u +js_object_get_field_by_name i64 ptr,ptr +js_object_get_field_by_name_boxed f64 f64,ptr +js_object_get_field_by_name_f64 f64 ptr,ptr +js_object_get_field_by_property_id_f64 f64 ptr,i64 +js_object_get_field_f64 f64 ptr,i32u +js_object_get_field_ic f64 i64,ptr,i64,ptr +js_object_get_field_ic_miss f64 ptr,ptr,ptr +js_object_get_field_ic_miss_packed f64 ptr,ptr,ptr,ptr +js_object_get_field_ic_nonptr f64 i64,ptr,i64 +js_object_get_field_ic_overflow_load f64 ptr,ptr,i32s,ptr +js_object_get_field_ic_slow f64 i64,ptr,ptr,ptr +js_object_get_index_polymorphic f64 i64,f64 +js_object_get_own_field_or_undef f64 f64,ptr,usize +js_object_get_own_property_descriptor f64 f64,f64 +js_object_get_own_property_descriptors f64 f64 +js_object_get_own_property_names f64 f64 +js_object_get_own_property_symbols i64 f64 +js_object_get_property_key f64 f64,f64 +js_object_get_prototype_of f64 f64 +js_object_get_symbol_property f64 f64,f64 +js_object_get_symbol_property_ic_miss f64 f64,f64,ptr +js_object_get_symbol_then_field_ic_miss f64 f64,f64,ptr,i64,ptr,ptr +js_object_group_by f64 f64,f64 +js_object_has_own f64 f64,f64 +js_object_has_own_symbol bool f64,f64 +js_object_has_property f64 f64,f64 +js_object_is f64 f64,f64 +js_object_is_extensible f64 f64 +js_object_is_frozen f64 f64 +js_object_is_sealed f64 f64 +js_object_keys ptr ptr +js_object_keys_value ptr f64 +js_object_literal_infer_computed_function_name f64 f64,f64 +js_object_literal_set_computed f64 f64,f64,f64 +js_object_literal_set_prototype f64 f64,f64 +js_object_literal_to_property_key f64 f64 +js_object_live_slot_count i32u ptr +js_object_lookup_getter f64 f64,f64 +js_object_lookup_setter f64 f64,f64 +js_object_mark_class void i64 +js_object_own_method_cache_miss i64 f64,i32u,i32u,ptr,usize,ptr,ptr +js_object_prevent_extensions f64 f64 +js_object_property_is_enumerable f64 f64,f64 +js_object_rest ptr ptr,ptr +js_object_seal f64 f64 +js_object_set_field void ptr,i32u,i64 +js_object_set_field_by_index void ptr,ptr,i32u,f64 +js_object_set_field_by_name void ptr,ptr,f64 +js_object_set_field_by_name_nonconfigurable void ptr,ptr,f64 +js_object_set_field_by_name_nonenum void ptr,ptr,f64 +js_object_set_field_by_name_transition_fast i32s ptr,ptr,f64 +js_object_set_field_by_property_id void ptr,i64,f64 +js_object_set_field_f64 void ptr,i32u,f64 +js_object_set_index_polymorphic void i64,f64,f64 +js_object_set_keys void ptr,ptr +js_object_set_method_by_name f64 f64,f64,f64 +js_object_set_property_key f64 f64,f64,f64 +js_object_set_property_key_method f64 f64,f64,f64 +js_object_set_prototype_of f64 f64,f64 +js_object_set_symbol_method f64 f64,f64,f64 +js_object_set_symbol_property f64 f64,f64,f64 +js_object_shape_id_for_class_keys i32u i64,i32u,i32u +js_object_shape_id_for_class_keys_live i32u i64,i32u,i32u,i32u +js_object_shape_id_for_keys i32u i64,i32u +js_object_super_call f64 f64,f64,f64,ptr,usize +js_object_super_get f64 f64,f64,f64 +js_object_super_put_value_set f64 f64,f64,f64,f64,i32s +js_object_to_string f64 f64 +js_object_to_value i64 ptr +js_object_values ptr ptr +js_object_values_value ptr f64 +js_on_frame_callback i64 i64 +js_os_arch ptr +js_os_available_parallelism f64 +js_os_cpus ptr +js_os_dev_null ptr +js_os_endianness ptr +js_os_eol ptr +js_os_freemem f64 +js_os_get_priority f64 f64 +js_os_homedir ptr +js_os_hostname ptr +js_os_loadavg ptr +js_os_machine ptr +js_os_network_interfaces ptr +js_os_platform ptr +js_os_release ptr +js_os_set_priority f64 f64,f64 +js_os_tmpdir ptr +js_os_totalmem f64 +js_os_type ptr +js_os_uptime f64 +js_os_user_info ptr +js_os_user_info_buffer ptr +js_os_user_info_options ptr i64 +js_os_version ptr +js_packed_arraylike_index_get f64 f64,f64,ptr +js_packed_arraylike_loop_guard i32s f64,f64,i32s,ptr +js_packed_arraylike_loop_guard_live i64 f64,f64,i32s,ptr +js_packed_arraylike_loop_revalidate_live i64 f64,f64,i32s,ptr +js_packed_ecs_u32_loop_guard i64 f64,f64,f64,f64,f64,f64,i32s,ptr +js_param_or_class_capture_value f64 f64,i32u,i32u +js_param_type_guard i32s f64,ptr,i32u +js_parcel_watcher_get_events_since ptr ptr,ptr,f64 +js_parcel_watcher_has_active i32s +js_parcel_watcher_native_event_count f64 +js_parcel_watcher_process_pending i32s +js_parcel_watcher_subscribe ptr ptr,i64,f64 +js_parcel_watcher_unsubscribe ptr ptr,i64,f64 +js_parcel_watcher_write_snapshot ptr ptr,ptr,f64 +js_parse_float f64 ptr +js_parse_int f64 ptr,f64 +js_path_arg_header i64 f64 +js_path_basename ptr ptr +js_path_basename_ext ptr ptr,ptr +js_path_delimiter_get ptr +js_path_dirname ptr ptr +js_path_extname ptr ptr +js_path_format ptr f64 +js_path_is_absolute i32s ptr +js_path_join ptr ptr,ptr +js_path_matches_glob i32s ptr,ptr +js_path_normalize ptr ptr +js_path_parse ptr ptr +js_path_relative ptr ptr,ptr +js_path_relative_checked ptr f64,f64 +js_path_resolve ptr ptr +js_path_resolve_join ptr ptr,ptr +js_path_sep_get ptr +js_path_to_namespaced_path ptr ptr +js_path_to_namespaced_path_value f64 f64 +js_path_win32_basename ptr ptr +js_path_win32_basename_ext ptr ptr,ptr +js_path_win32_delimiter_get ptr +js_path_win32_dirname ptr ptr +js_path_win32_extname ptr ptr +js_path_win32_format ptr f64 +js_path_win32_is_absolute i32s ptr +js_path_win32_join ptr ptr,ptr +js_path_win32_matches_glob i32s ptr,ptr +js_path_win32_normalize ptr ptr +js_path_win32_parse ptr ptr +js_path_win32_relative ptr ptr,ptr +js_path_win32_relative_checked ptr f64,f64 +js_path_win32_resolve ptr ptr +js_path_win32_resolve_join ptr ptr,ptr +js_path_win32_sep_get ptr +js_path_win32_to_namespaced_path ptr ptr +js_path_win32_to_namespaced_path_value f64 f64 +js_pdf_add_line void i64,f64,f64,f64,f64 +js_pdf_add_text void i64,ptr,f64,f64,f64 +js_pdf_create_pdf i64 f64 +js_pdf_new_page void i64 +js_pdf_save void i64 +js_perf_clear_marks f64 f64 +js_perf_clear_measures f64 f64 +js_perf_clear_resource_timings f64 +js_perf_create_histogram f64 f64 +js_perf_event_loop_utilization f64 f64,f64 +js_perf_get_entries f64 +js_perf_get_entries_by_name f64 f64,f64 +js_perf_get_entries_by_type f64 f64 +js_perf_illegal_constructor f64 +js_perf_mark f64 f64,f64 +js_perf_mark_constructor f64 f64,f64 +js_perf_mark_resource_timing f64 f64,f64,f64,f64,f64,f64,f64,f64 +js_perf_measure f64 f64,f64,f64 +js_perf_monitor_event_loop_delay f64 f64 +js_perf_node_timing f64 +js_perf_observer_disconnect f64 f64 +js_perf_observer_flush_all f64 ptr +js_perf_observer_new f64 f64 +js_perf_observer_observe f64 f64,f64 +js_perf_observer_take_records f64 f64 +js_perf_set_resource_timing_buffer_size f64 f64 +js_perf_supported_entry_types f64 +js_perf_timerify f64 f64,f64 +js_perf_to_json f64 +js_performance_now f64 +js_perry_agent_post i32s ptr,ptr +js_perry_agent_post_available i32s +js_perry_agent_post_dispatched i64 +js_perry_embedded_files ptr +js_perry_net_abi_layout i64 +js_perry_net_accept_start i32s i64,ptr +js_perry_net_adopt_stream i32s i64,i32s,i64,ptr +js_perry_net_available i32s +js_perry_net_close i32s i64,ptr +js_perry_net_completion_bytes ptr ptr,ptr +js_perry_net_errno_for_code i32s ptr,usize +js_perry_net_error_from_os i32s i32s,ptr,usize,ptr +js_perry_net_is_live i32s i64 +js_perry_net_live_handles usize +js_perry_net_local_address i32s i64,ptr,usize,ptr,ptr,ptr +js_perry_net_peer_address i32s i64,ptr,usize,ptr,ptr,ptr +js_perry_net_pipe_connect i32s i64,i32s,ptr,usize,ptr +js_perry_net_pipe_listen i32s i64,i32s,ptr,usize,i32u,ptr +js_perry_net_queued_bytes usize i64 +js_perry_net_read_start i32s i64,ptr +js_perry_net_register_sink i32s i32s,ptr,ptr +js_perry_net_set_ref i32s i64,i32s +js_perry_net_shutdown i32s i64,i64,ptr +js_perry_net_sink_installed i32s i32s +js_perry_net_tcp_connect i32s i64,i32s,ptr,usize,i16u,i32s,ptr +js_perry_net_tcp_listen i32s i64,i32s,ptr,usize,i16u,i32u,i32s,i32s,ptr +js_perry_net_timer_arm i32s i64,i32s,i64,ptr +js_perry_net_timer_cancel i32s i64,ptr +js_perry_net_timer_park i32s i64,ptr +js_perry_net_transfer i32s i64,i32s,ptr +js_perry_net_write i32s i64,ptr,usize,i64,ptr,ptr +js_perry_read_embedded ptr f64 +js_perry_smtp_add_recipient void i64,ptr,usize +js_perry_smtp_available i32s +js_perry_smtp_begin i64 +js_perry_smtp_cancel void i64 +js_perry_smtp_set_auth void i64,ptr,usize,ptr,usize +js_perry_smtp_set_client_name void i64,ptr,usize +js_perry_smtp_set_from void i64,ptr,usize +js_perry_smtp_set_message void i64,ptr,usize,ptr,usize +js_perry_smtp_set_server void i64,ptr,usize,i16u,i32s,i32s +js_perry_smtp_submit i32s i64,i32s,usize,ptr +js_perry_tui_animated_spinner i64 f64,i64 +js_perry_tui_app_exit f64 i64 +js_perry_tui_app_wait_until_exit f64 i64 +js_perry_tui_box i64 +js_perry_tui_box_add_child f64 i64,i64 +js_perry_tui_box_add_children_array f64 i64,i64 +js_perry_tui_box_set_align_items f64 i64,ptr +js_perry_tui_box_set_flex_basis f64 i64,f64 +js_perry_tui_box_set_flex_basis_pct f64 i64,f64 +js_perry_tui_box_set_flex_direction f64 i64,ptr +js_perry_tui_box_set_flex_grow f64 i64,f64 +js_perry_tui_box_set_flex_shrink f64 i64,f64 +js_perry_tui_box_set_gap f64 i64,f64 +js_perry_tui_box_set_height f64 i64,f64 +js_perry_tui_box_set_height_pct f64 i64,f64 +js_perry_tui_box_set_justify_content f64 i64,ptr +js_perry_tui_box_set_padding f64 i64,f64 +js_perry_tui_box_set_padding_each f64 i64,f64,f64,f64,f64 +js_perry_tui_box_set_width f64 i64,f64 +js_perry_tui_box_set_width_pct f64 i64,f64 +js_perry_tui_enter f64 +js_perry_tui_exit f64 +js_perry_tui_focus f64 f64 +js_perry_tui_focus_manager_focus f64 i64,f64 +js_perry_tui_focus_manager_focus_next f64 i64 +js_perry_tui_focus_manager_focus_previous f64 i64 +js_perry_tui_focus_next f64 +js_perry_tui_focus_previous f64 +js_perry_tui_input i64 ptr +js_perry_tui_input_at i64 ptr,f64 +js_perry_tui_list i64 i64,f64 +js_perry_tui_progress_bar i64 f64,f64,f64 +js_perry_tui_ref_get f64 i64 +js_perry_tui_ref_set f64 i64,f64 +js_perry_tui_render f64 i64 +js_perry_tui_run f64 i64 +js_perry_tui_select i64 i64,f64 +js_perry_tui_spacer i64 +js_perry_tui_spinner i64 f64 +js_perry_tui_state_alloc i64 f64 +js_perry_tui_state_get f64 i64 +js_perry_tui_state_set f64 i64,f64 +js_perry_tui_stdout_columns f64 i64 +js_perry_tui_stdout_rows f64 i64 +js_perry_tui_stdout_write f64 i64,ptr +js_perry_tui_table i64 i64,i64,f64 +js_perry_tui_tabs i64 i64,f64,i64 +js_perry_tui_text i64 ptr +js_perry_tui_text_area i64 ptr +js_perry_tui_text_styled i64 ptr,ptr,ptr,f64 +js_perry_tui_use_app i64 +js_perry_tui_use_effect f64 i64,i64 +js_perry_tui_use_focus f64 f64,f64 +js_perry_tui_use_focus_manager i64 +js_perry_tui_use_input f64 i64 +js_perry_tui_use_memo f64 i64,i64 +js_perry_tui_use_ref i64 f64 +js_perry_tui_use_state f64 f64 +js_perry_tui_use_state_set f64 f64,f64 +js_perry_tui_use_state_slot f64 f64 +js_perry_tui_use_state_tuple i64 f64 +js_perry_tui_use_stdout i64 +js_perry_tui_wait_until_exit f64 +js_pod_scalar_write_compatible i32s f64,i32s +js_pointer_event_new f64 f64,f64,i32u,i32u +js_private_brand_add f64 f64,i32u +js_private_brand_check f64 f64,f64,i32u,ptr,i32u,i32u,i32u +js_private_field_add f64 f64,i32u,f64,f64 +js_private_guard f64 f64,f64,i32u,ptr,i32u,i32u,i32u +js_private_guard_site f64 f64,f64,i32u,ptr,i32u,i32u,i32u,ptr +js_private_lexical_brand_capture f64 f64,i32s +js_private_lexical_brand_pop f64 +js_private_lexical_brand_push f64 f64 +js_private_method_call f64 f64,f64,i32u,ptr,i32u,ptr,usize,ptr +js_private_method_guard f64 f64,f64,i32u,ptr,i32u,ptr +js_process_abort void +js_process_active_resources_info f64 +js_process_add_listener f64 i64,i64 +js_process_add_uncaught_exception_capture_callback f64 f64 +js_process_argv ptr +js_process_available_memory f64 +js_process_binding f64 f64 +js_process_chdir void ptr +js_process_chdir_jsv void f64 +js_process_constrained_memory f64 +js_process_cpu_usage f64 f64 +js_process_cwd ptr +js_process_debug_end f64 +js_process_debug_process f64 +js_process_dlopen f64 f64,f64,f64 +js_process_emit f64 i64,ptr +js_process_emit_before_exit void f64 +js_process_emit_before_exit_pending void +js_process_emit_exit void f64 +js_process_emit_warning void f64,f64,f64 +js_process_env f64 +js_process_event_names ptr +js_process_execve f64 f64,f64,f64 +js_process_exit void f64 +js_process_exit_code_get f64 +js_process_exit_code_set f64 f64 +js_process_fatal_exception f64 f64,f64 +js_process_get_active_handles f64 +js_process_get_active_requests f64 +js_process_get_builtin_module f64 f64 +js_process_get_builtin_module_devirt f64 f64 +js_process_get_max_listeners f64 +js_process_getegid f64 +js_process_geteuid f64 +js_process_getgid f64 +js_process_getgroups f64 +js_process_getuid f64 +js_process_has_uncaught_exception_capture_callback f64 +js_process_hrtime f64 f64 +js_process_hrtime_bigint f64 +js_process_initgroups void f64,f64 +js_process_internal_kill f64 +js_process_ipc_drain i32s +js_process_ipc_has_active i32s +js_process_kill f64 f64,f64 +js_process_linked_binding f64 f64 +js_process_listener_count f64 i64,i64 +js_process_listeners ptr i64 +js_process_load_env_file void f64 +js_process_memory_usage f64 +js_process_next_tick void i64,ptr +js_process_off f64 i64,i64 +js_process_on f64 i64,i64 +js_process_once f64 i64,i64 +js_process_open_stdin f64 +js_process_pending_exit_code i32s +js_process_pid f64 +js_process_ppid f64 +js_process_prepend_listener f64 i64,i64 +js_process_prepend_once_listener f64 i64,i64 +js_process_raw_debug f64 +js_process_raw_listeners ptr i64 +js_process_really_exit f64 +js_process_ref f64 f64 +js_process_remove_all_listeners f64 i64 +js_process_remove_listener f64 i64,i64 +js_process_resource_usage f64 +js_process_run_exit_sequence void +js_process_run_finalization_before_exit void +js_process_run_finalization_exit void +js_process_set_max_listeners f64 f64 +js_process_set_source_maps_enabled f64 f64 +js_process_set_title void f64 +js_process_set_uncaught_exception_capture_callback f64 f64 +js_process_setegid void f64 +js_process_seteuid void f64 +js_process_setgid void f64 +js_process_setgroups void f64 +js_process_setuid void f64 +js_process_source_maps_enabled f64 +js_process_start_profiler_idle_notifier f64 +js_process_stderr f64 +js_process_stderr_isatty f64 +js_process_stdin f64 +js_process_stdin_isatty f64 +js_process_stdout f64 +js_process_stdout_columns f64 +js_process_stdout_isatty f64 +js_process_stdout_on f64 ptr,i64 +js_process_stdout_rows f64 +js_process_stop_profiler_idle_notifier f64 +js_process_thread_cpu_usage f64 f64 +js_process_tick_callback f64 +js_process_title f64 +js_process_umask f64 +js_process_umask_set f64 f64 +js_process_unref f64 f64 +js_process_uptime f64 +js_process_version ptr +js_process_versions f64 +js_promise_all ptr ptr +js_promise_all_iterable ptr f64 +js_promise_all_settled ptr ptr +js_promise_all_settled_iterable ptr f64 +js_promise_all_settled_spec f64 f64,f64 +js_promise_all_spec f64 f64,f64 +js_promise_any ptr ptr +js_promise_any_iterable ptr f64 +js_promise_any_spec f64 f64,f64 +js_promise_catch ptr ptr,ptr +js_promise_catch_checked f64 f64,f64 +js_promise_closure_arg i64 f64 +js_promise_finally ptr ptr,ptr +js_promise_finally_checked f64 f64,f64 +js_promise_free void ptr +js_promise_mark_internally_handled void ptr +js_promise_new ptr +js_promise_new_cross_thread ptr +js_promise_new_with_executor ptr ptr +js_promise_race ptr ptr +js_promise_race_iterable ptr f64 +js_promise_race_spec f64 f64,f64 +js_promise_reason f64 ptr +js_promise_reject void ptr,f64 +js_promise_reject_spec f64 f64,f64 +js_promise_rejected ptr f64 +js_promise_report_unhandled_rejections void +js_promise_resolve void ptr,f64 +js_promise_resolve_spec f64 f64,f64 +js_promise_resolve_with_promise void ptr,ptr +js_promise_resolved ptr f64 +js_promise_resolved_then ptr f64,ptr,ptr +js_promise_result f64 ptr +js_promise_run_before_exit_checkpoint i32s +js_promise_run_microtasks i32s +js_promise_run_microtasks_await_loop i32s +js_promise_run_microtasks_event_loop i32s +js_promise_run_promise_jobs i32s +js_promise_schedule_resolve void ptr,f64 +js_promise_state i32s ptr +js_promise_static_function_value f64 ptr,usize +js_promise_subclass_init f64 f64,f64 +js_promise_then ptr ptr,ptr,ptr +js_promise_then_checked f64 f64,f64,f64 +js_promise_try ptr f64,ptr +js_promise_try_spec f64 f64,f64,f64 +js_promise_value f64 ptr +js_promise_with_resolvers ptr +js_promise_with_resolvers_spec f64 f64 +js_proxy_apply f64 f64,f64,f64 +js_proxy_construct f64 f64,f64,f64 +js_proxy_delete f64 f64,f64 +js_proxy_get f64 f64,f64 +js_proxy_handler f64 f64 +js_proxy_has f64 f64,f64 +js_proxy_is_proxy i32s f64 +js_proxy_is_revoked i32s f64 +js_proxy_new f64 f64,f64 +js_proxy_own_keys f64 f64 +js_proxy_revocable f64 f64,f64 +js_proxy_revoke void f64 +js_proxy_set f64 f64,f64,f64 +js_proxy_target f64 f64 +js_pty_spawn f64 i64,i64,i64 +js_punycode_decode f64 f64 +js_punycode_encode f64 f64 +js_punycode_to_ascii f64 f64 +js_punycode_to_unicode f64 f64 +js_punycode_ucs2_decode f64 f64 +js_punycode_ucs2_encode f64 f64 +js_put_value_set f64 f64,f64,f64,f64,i32s +js_put_value_set_dyn_ic f64 ptr,f64,f64,f64,i32s +js_put_value_set_dyn_ic_miss f64 ptr,f64,f64,f64,i32s +js_put_value_set_ic_miss f64 f64,ptr,f64,i32s,ptr,i32s +js_put_value_set_packed_miss f64 f64,ptr,f64,i32s,ptr,ptr +js_querystring_escape f64 f64 +js_querystring_native_dispatch f64 ptr,usize,ptr,usize +js_querystring_parse ptr f64,f64,f64,f64 +js_querystring_stringify f64 f64,f64,f64,f64 +js_querystring_unescape f64 f64 +js_querystring_unescape_buffer ptr f64,f64 +js_queue_microtask void i64 +js_queue_next_tick void i64 +js_queue_next_tick_args void i64,ptr,i32s +js_rangeerror_new ptr ptr +js_readable_stream_cancel ptr f64,f64 +js_readable_stream_controller_byob_request f64 f64 +js_readable_stream_controller_close f64 f64 +js_readable_stream_controller_desired_size f64 f64 +js_readable_stream_controller_enqueue f64 f64,f64 +js_readable_stream_controller_error f64 f64,f64 +js_readable_stream_deferred_byte_source f64 f64,f64 +js_readable_stream_from_blob f64 f64 +js_readable_stream_from_iterable f64 f64 +js_readable_stream_from_response f64 f64 +js_readable_stream_get_byob_reader f64 f64 +js_readable_stream_get_reader f64 f64 +js_readable_stream_get_reader_with_options f64 f64,f64 +js_readable_stream_locked f64 f64 +js_readable_stream_new f64 f64,f64,f64,f64 +js_readable_stream_new_from_source_object f64 f64,f64 +js_readable_stream_new_with_source_type f64 f64,f64,f64,f64,f64 +js_readable_stream_new_with_strategy_and_source_type f64 f64,f64,f64,f64,f64 +js_readable_stream_pipe_through f64 f64,f64,f64 +js_readable_stream_pipe_through_validate f64 f64,f64,f64,f64 +js_readable_stream_pipe_to ptr f64,f64,f64 +js_readable_stream_subclass_init f64 f64,f64,f64,f64,f64 +js_readable_stream_tee f64 f64 +js_readable_stream_values f64 f64 +js_reader_cancel ptr f64,f64 +js_reader_closed ptr f64 +js_reader_read ptr f64 +js_reader_read_with_view ptr f64,f64 +js_reader_release_lock f64 f64 +js_readline_clear_line_args f64 ptr +js_readline_clear_screen_down_args f64 ptr +js_readline_close f64 i64 +js_readline_create_interface i64 f64 +js_readline_cursor_to_args f64 ptr +js_readline_emit_keypress_events_args f64 ptr +js_readline_get_cursor_pos i64 i64 +js_readline_get_prompt ptr i64 +js_readline_has_active i32s +js_readline_iterator i64 i64 +js_readline_line ptr i64 +js_readline_move_cursor_args f64 ptr +js_readline_on f64 i64,ptr,i64 +js_readline_pause i64 i64 +js_readline_process_pending i32s +js_readline_promises_readline_new f64 f64,f64 +js_readline_prompt f64 i64 +js_readline_question f64 i64,ptr,i64 +js_readline_resume i64 i64 +js_readline_set_prompt f64 i64,ptr +js_readline_set_raw_mode f64 f64 +js_readline_stdin_destroy f64 +js_readline_stdin_on f64 ptr,i64 +js_readline_stdin_pause f64 +js_readline_stdin_ref f64 +js_readline_stdin_remove_listener f64 ptr,i64 +js_readline_stdin_resume f64 +js_readline_stdin_unref f64 +js_readline_terminal f64 i64 +js_readline_write f64 i64,f64 +js_readonly_set_has f64 f64,f64 +js_receiver_may_own_named_method i32s f64,ptr,usize +js_recv_route_note void i32u +js_referenceerror_new ptr ptr +js_reflect_apply f64 f64,f64,f64 +js_reflect_construct f64 f64,f64,f64 +js_reflect_define_metadata f64 f64,f64,f64,f64 +js_reflect_define_property f64 f64,f64,f64 +js_reflect_delete f64 f64,f64 +js_reflect_delete_metadata f64 f64,f64,f64 +js_reflect_get f64 f64,f64,f64 +js_reflect_get_metadata f64 f64,f64,f64 +js_reflect_get_metadata_keys f64 f64,f64 +js_reflect_get_own_metadata f64 f64,f64,f64 +js_reflect_get_own_metadata_keys f64 f64,f64 +js_reflect_get_own_property_descriptor f64 f64,f64 +js_reflect_get_prototype_of f64 f64 +js_reflect_has f64 f64,f64 +js_reflect_has_metadata f64 f64,f64,f64 +js_reflect_has_own_metadata f64 f64,f64,f64 +js_reflect_is_extensible f64 f64 +js_reflect_own_keys f64 f64 +js_reflect_prevent_extensions f64 f64 +js_reflect_set f64 f64,f64,f64,f64 +js_reflect_set_prototype_of f64 f64,f64 +js_regexp_compile_value f64 ptr,f64,f64 +js_regexp_construct ptr f64,f64 +js_regexp_construct_call ptr f64,f64 +js_regexp_empty_source ptr +js_regexp_escape f64 f64 +js_regexp_exec ptr ptr,ptr +js_regexp_exec_get_groups i64 +js_regexp_exec_get_index f64 +js_regexp_get_flags ptr ptr +js_regexp_get_last_index f64 ptr +js_regexp_get_source ptr ptr +js_regexp_new ptr ptr,ptr +js_regexp_new_factory_site ptr ptr,ptr,i64,i64 +js_regexp_new_site ptr ptr,ptr,i64 +js_regexp_set_last_index void ptr,f64 +js_regexp_site_factory_call_method f64 i64,f64,f64 +js_regexp_site_factory_call_value f64 i64,f64 +js_regexp_site_test_dispatch f64 i64,f64,f64,f64 +js_regexp_site_test_get_method f64 i64,f64 +js_regexp_site_test_new ptr ptr,ptr,i64 +js_regexp_test i32s ptr,ptr +js_regexp_to_string ptr ptr +js_region_guard_pack i64 i32u,i32u,i64,i64,i64,i64,i64 +js_region_guard_prime i64 ptr,i32u,i32u,i64,i64,i64,i64,i64 +js_register_anon_shape_class_id void i32u +js_register_aux_has_active void ptr +js_register_aux_pump void ptr +js_register_aux_tick_begin void ptr +js_register_class_computed_accessor void i64,f64,i64,i64,i64,i64 +js_register_class_computed_method void i64,f64,i64,i64,i64,i64,i64 +js_register_class_constructor void i64,i64,i64,i64 +js_register_class_constructor_flags void i64,i64,i64 +js_register_class_extends_data_view void i32u +js_register_class_extends_error void i32u +js_register_class_extends_typed_array void i32u +js_register_class_generic_origin void i32u,i32u +js_register_class_getter void i64,ptr,i64,i64 +js_register_class_has_instance void i32u,i64 +js_register_class_id void i32u +js_register_class_length void i32u,i32u +js_register_class_method void i64,ptr,i64,i64,i64,i64,i64 +js_register_class_method_bind_length void i64,ptr,i64,i64 +js_register_class_name void i32u,ptr,i32u +js_register_class_parent void i32u,i32u +js_register_class_parent_dynamic void i32u,f64 +js_register_class_setter void i64,ptr,i64,i64 +js_register_class_source void i32u,ptr,i32u +js_register_class_static_getter void i64,ptr,i64,i64 +js_register_class_static_method void i64,ptr,i64,i64,i64,i64 +js_register_class_static_method_bind_length void i64,ptr,i64,i64 +js_register_class_static_setter void i64,ptr,i64,i64 +js_register_class_string_member_order void i64,ptr,i64,i64,i64 +js_register_class_to_string_tag void i32u,i64 +js_register_closure_arity void ptr,i32u +js_register_closure_arrow_function void ptr +js_register_closure_async_function void ptr +js_register_closure_async_generator_function void ptr +js_register_closure_generator_function void ptr +js_register_closure_length void ptr,i32u +js_register_closure_rest void ptr,i32u +js_register_closure_rest_and_arguments void ptr,i32u +js_register_closure_strict_function void ptr +js_register_closure_synthetic_arguments void ptr,i32u +js_register_closure_trusted_direct void ptr,ptr,i32u,i64 +js_register_closure_versioned_loop_direct void ptr,ptr,i32u,i64 +js_register_embedded_asset void ptr,usize,ptr,usize +js_register_embedded_text_asset void ptr,usize,ptr,usize +js_register_embedded_zstd_asset i32s ptr,usize,ptr,usize,usize,i32u +js_register_embedded_zstd_asset_lazy i32s ptr,usize,ptr,usize,usize,i32u +js_register_event_emitter_async_resource_dispatch void ptr +js_register_event_emitter_async_resource_handle_probe void ptr +js_register_event_emitter_get_domain void ptr +js_register_event_emitter_handle_probe void ptr +js_register_event_emitter_method_dispatch void ptr +js_register_event_emitter_on void ptr +js_register_event_emitter_property_dispatch void ptr +js_register_event_emitter_set_domain void ptr +js_register_ext_pump void ptr +js_register_fetch_handle_kind_probe void ptr +js_register_ffi_handle_exists_probe void ptr +js_register_filehandle_readable_web_stream_factory void ptr +js_register_foreach_render_handler void ptr +js_register_foreign_promise_adapter void ptr +js_register_function_name void ptr,ptr,i32u +js_register_function_name_static void ptr,ptr,i32u +js_register_function_prototype_method i32u f64,ptr,usize,f64 +js_register_function_source void ptr,ptr,i32u,i32s +js_register_function_source_static void ptr,ptr,i32u,i32s +js_register_global_fetch_body_init_ptr void ptr +js_register_global_fetch_constructors void ptr,ptr,ptr,ptr,ptr,ptr,ptr,ptr,ptr +js_register_global_fetch_notify_abort void ptr +js_register_global_fetch_with_options void ptr +js_register_global_headers_entries_json void ptr +js_register_global_headers_object_json void ptr +js_register_handle_method_dispatch void ptr +js_register_handle_method_dispatch_extension void ptr +js_register_handle_own_property_names_dispatch void ptr +js_register_handle_property_dispatch void ptr +js_register_handle_property_dispatch_extension void ptr +js_register_handle_property_set_dispatch void ptr +js_register_handle_property_set_dispatch_extension void ptr +js_register_handle_prototype_dispatch void ptr +js_register_http_agent_handle_probe void ptr +js_register_imported_class_shape_slot void i32u,i32u,ptr,ptr,ptr +js_register_jsx_render_stream void ptr +js_register_native_inflight void ptr +js_register_net_socket_handle_probe void ptr +js_register_node_stream_web_adapter_callbacks void ptr,ptr,ptr,ptr,ptr,ptr,ptr,ptr,ptr,ptr,ptr +js_register_path_init void ptr,i64,i64 +js_register_path_module void f64,f64 +js_register_path_module_partial void f64,f64 +js_register_prototype_method void i32u,ptr,usize,f64 +js_register_set_text_handler void ptr +js_register_show_toast_handler void ptr +js_register_stdin_flow_ops void ptr,ptr +js_register_stdin_listener_ops void ptr,ptr,ptr +js_register_stdin_listeners_provider void ptr +js_register_stdin_reader_consumer void ptr,ptr +js_register_stdlib_has_active void ptr +js_register_stdlib_next_wake void ptr +js_register_stdlib_pump void ptr +js_register_stream_consumer_callbacks void ptr,usize +js_register_stream_expando_set void ptr +js_register_stream_handle_kind_probe void ptr +js_register_stream_handle_probe void ptr +js_register_text_id_handler void ptr +js_register_tls_handle_kind_probe void ptr +js_register_wait_driver void ptr,ptr,ptr +js_register_widget_hidden_handler void ptr +js_register_worker_threads_messaging_constructors void ptr,ptr +js_register_worker_threads_namespace_getters void ptr,ptr,ptr,ptr,ptr +js_rel_ge f64 f64,f64 +js_rel_gt f64 f64,f64 +js_rel_le f64 f64,f64 +js_rel_lt f64 f64,f64 +js_removeenv void ptr +js_repl_recoverable_new f64 f64 +js_repl_repl_server_new f64 f64 +js_repl_start f64 f64 +js_request_array_buffer ptr f64 +js_request_blob ptr f64 +js_request_body_used f64 f64 +js_request_bytes ptr f64 +js_request_clone f64 f64 +js_request_form_data ptr f64 +js_request_get_body f64 f64 +js_request_get_cache ptr f64 +js_request_get_credentials ptr f64 +js_request_get_destination ptr f64 +js_request_get_duplex ptr f64 +js_request_get_headers f64 f64 +js_request_get_integrity ptr f64 +js_request_get_keepalive f64 f64 +js_request_get_method ptr f64 +js_request_get_mode ptr f64 +js_request_get_redirect ptr f64 +js_request_get_referrer ptr f64 +js_request_get_referrer_policy ptr f64 +js_request_get_signal f64 f64 +js_request_get_url ptr f64 +js_request_input_to_url ptr f64 +js_request_json ptr f64 +js_request_new f64 ptr,ptr,ptr,f64,ptr,ptr,ptr,ptr,ptr,ptr,ptr,f64,ptr,f64 +js_request_new_from_init f64 ptr,f64 +js_request_subclass_init f64 f64,f64,f64 +js_request_text ptr f64 +js_require_json_disk f64 f64 +js_require_object_coercible f64 f64 +js_require_path_module f64 f64 +js_require_resolve_node_modules f64 f64,f64 +js_response_array_buffer ptr f64 +js_response_blob ptr f64 +js_response_body f64 f64 +js_response_body_init_ptr i64 f64 +js_response_body_init_reset f64 +js_response_body_used f64 f64 +js_response_bytes ptr f64 +js_response_clone f64 f64 +js_response_form_data ptr f64 +js_response_get_headers f64 f64 +js_response_new f64 ptr,f64,ptr,f64 +js_response_static_error f64 +js_response_static_json f64 f64,f64,ptr,f64 +js_response_static_redirect f64 ptr,f64 +js_response_subclass_init f64 f64,f64,f64 +js_run_ext_pump void +js_run_module_init_catching void i64 +js_run_stdlib_pump void +js_runtime_init void +js_runtime_validate_crypto_key_arg void f64,ptr,i32u +js_runtime_validate_integer_arg void f64,ptr,i32u,f64,f64 +js_runtime_validate_string_arg void f64,ptr,i32u +js_sea_get_asset f64 f64,f64 +js_sea_get_asset_as_blob f64 f64,f64 +js_sea_get_asset_keys f64 +js_sea_get_raw_asset f64 f64 +js_sea_is_sea f64 +js_segments_view_code_point_at f64 f64,f64 +js_segments_view_next f64 f64 +js_segments_view_open f64 f64,f64 +js_segments_view_regexp_test f64 f64,f64 +js_segments_view_segment f64 f64 +js_set_add ptr ptr,f64 +js_set_add_bool ptr ptr,i32s +js_set_add_f32 ptr ptr,f32 +js_set_add_i32 ptr ptr,i32s +js_set_add_number ptr ptr,f64 +js_set_add_string ptr ptr,ptr +js_set_add_u32 ptr ptr,i32u +js_set_alloc ptr i32u +js_set_bun_platform void +js_set_call_location void ptr,usize,i32u +js_set_cjs_main_module void f64 +js_set_clear void ptr +js_set_compaction_epoch f64 f64 +js_set_crypto_key_death_hook void ptr +js_set_cursor_next f64 f64,f64,f64 +js_set_delete i32s ptr,f64 +js_set_delete_bool i32s ptr,i32s +js_set_delete_f32 i32s ptr,f32 +js_set_delete_i32 i32s ptr,i32s +js_set_delete_number i32s ptr,f64 +js_set_delete_string i32s ptr,ptr +js_set_delete_u32 i32s ptr,i32u +js_set_difference ptr ptr,f64 +js_set_entries_iter_obj i64 ptr +js_set_event_loop_host_driven void i32s +js_set_find_value_index f64 f64,f64 +js_set_foreach void ptr,f64,f64 +js_set_from_array ptr ptr +js_set_from_iterable ptr f64 +js_set_function_prototype i32u f64,f64 +js_set_handle_array_get void ptr +js_set_handle_array_length void ptr +js_set_handle_call_method void ptr +js_set_handle_object_get_property void ptr +js_set_handle_to_string void ptr +js_set_handle_typeof void ptr +js_set_has i32s ptr,f64 +js_set_has_bool i32s ptr,i32s +js_set_has_f32 i32s ptr,f32 +js_set_has_i32 i32s ptr,i32s +js_set_has_number i32s ptr,f64 +js_set_has_string i32s ptr,ptr +js_set_has_u32 i32s ptr,i32u +js_set_immediate_callback i64 i64 +js_set_immediate_callback_args i64 i64,ptr,i32s +js_set_intersection ptr ptr,f64 +js_set_interval_callback_args i64 i64,f64,ptr,i32s +js_set_is_disjoint_from i32s ptr,f64 +js_set_is_subset_of i32s ptr,f64 +js_set_is_superset_of i32s ptr,f64 +js_set_keys_iter_obj i64 ptr +js_set_native_async_hooks_construct void ptr +js_set_native_async_local_storage_subclass_init void ptr +js_set_native_bun_tcp_dispatch void ptr +js_set_native_crypto_dispatch void ptr +js_set_native_domain_dispatch void ptr +js_set_native_events_construct void ptr +js_set_native_events_dispatch void ptr +js_set_native_http_dispatch void ptr +js_set_native_module_js_loader void ptr +js_set_native_net_dispatch void ptr +js_set_native_querystring_dispatch void ptr +js_set_native_sqlite_dispatch void ptr +js_set_native_tls_dispatch void ptr +js_set_native_webcrypto_dispatch void ptr +js_set_native_zlib_dispatch void ptr +js_set_new_from_handle_v8 void ptr +js_set_process_entry_path void ptr,i32u +js_set_property void f64,i64,i64,f64 +js_set_prototype_property f64 f64,f64,i32s +js_set_size i32u ptr +js_set_symmetric_difference ptr ptr,f64 +js_set_timeout ptr f64 +js_set_timeout_callback i64 i64,f64 +js_set_timeout_callback_args i64 i64,f64,ptr,i32s +js_set_timeout_value ptr f64,f64 +js_set_timeout_value_ref ptr f64,f64,i32s +js_set_to_array ptr ptr +js_set_union ptr ptr,f64 +js_set_value_at f64 ptr,i32u +js_set_value_raw_at f64 ptr,i32u +js_set_values_iter_obj i64 ptr +js_setenv void ptr,f64 +js_shadow_frame_enter ptr i32u +js_shadow_frame_pop void i64 +js_shadow_frame_push i64 i32u +js_shadow_slot_bind void i32u,ptr +js_shadow_slot_get i64 i32u +js_shadow_slot_set void i32u,i64 +js_shadow_state_addr ptr +js_shape_ordinary_inline_slot_for_key i32s i32u,i64 +js_shared_array_buffer_new ptr i32s +js_shared_array_buffer_new_value ptr f64 +js_sharp_auto_orient i64 i64 +js_sharp_avif i64 i64,f64 +js_sharp_blur i64 i64,f64 +js_sharp_composite i64 i64,f64 +js_sharp_crop i64 i64,f64,f64,f64,f64 +js_sharp_extend i64 i64,f64 +js_sharp_extract i64 i64,f64 +js_sharp_flip i64 i64 +js_sharp_flop i64 i64 +js_sharp_from_buffer i64 ptr +js_sharp_from_file i64 ptr +js_sharp_from_input i64 i64 +js_sharp_grayscale i64 i64 +js_sharp_height f64 i64 +js_sharp_jpeg i64 i64,f64 +js_sharp_metadata ptr i64 +js_sharp_negate i64 +js_sharp_png i64 i64 +js_sharp_quality i64 +js_sharp_resize i64 i64,f64,f64 +js_sharp_rotate i64 i64,f64 +js_sharp_sharpen i64 i64 +js_sharp_to_buffer ptr i64 +js_sharp_to_file ptr i64,ptr +js_sharp_to_format i64 +js_sharp_trim i64 i64 +js_sharp_webp i64 i64,f64 +js_sharp_width f64 i64 +js_short_packed_spread_values i32s f64,ptr +js_sleep_ms void f64 +js_spread_tail_fallback_args i64 ptr,usize,f64 +js_sqlite_begin_transaction i32s i64 +js_sqlite_close i32s i64 +js_sqlite_commit i32s i64 +js_sqlite_exec i32s i64,ptr +js_sqlite_in_transaction i32s i64 +js_sqlite_is_db_handle i32s i64 +js_sqlite_is_stmt_handle i32s i64 +js_sqlite_open i64 ptr +js_sqlite_pragma ptr i64,ptr,ptr +js_sqlite_prepare i64 i64,ptr +js_sqlite_rollback i32s i64 +js_sqlite_stmt_all ptr i64,ptr +js_sqlite_stmt_columns ptr i64 +js_sqlite_stmt_get f64 i64,ptr +js_sqlite_stmt_raw i64 i64 +js_sqlite_stmt_run ptr i64,ptr +js_sqlite_transaction ptr i64,i64 +js_state_get f64 f64 +js_state_init void f64,f64 +js_state_set void f64,f64 +js_static_this_arm_classref void i32u +js_static_this_arm_value void f64 +js_static_this_resolve f64 f64 +js_stdlib_has_active_handles i32s +js_stdlib_init_dispatch void +js_stdlib_process_pending i32s +js_stream_handle_is_registered bool usize +js_stream_handle_kind i8u usize +js_stream_unwrap_handle f64 f64 +js_stream_web_compression_stream_new f64 f64 +js_stream_web_decompression_stream_new f64 f64 +js_stream_web_text_decoder_stream_new f64 f64,f64 +js_stream_web_text_encoder_stream_new f64 +js_streams_strategy_high_water_mark f64 f64 +js_string_add_value f64 f64,f64 +js_string_addref void ptr +js_string_addref_if_heap_string void f64 +js_string_alloc_space ptr +js_string_append ptr ptr,ptr +js_string_append_chain ptr ptr,i32s +js_string_append_known_heap ptr ptr,ptr +js_string_array_range_loop_guard i32s f64,i32s,i32s +js_string_at f64 ptr,i32s +js_string_builder_new ptr i32u +js_string_char_at ptr ptr,i32s +js_string_char_code_at f64 ptr,i32s +js_string_code_point_at f64 ptr,i32s +js_string_coerce ptr f64 +js_string_coerce_box f64 f64 +js_string_coerce_method_this ptr f64,ptr,usize +js_string_compare i32s ptr,ptr +js_string_compare_value i32s f64,f64 +js_string_concat ptr ptr,ptr +js_string_concat_box f64 f64,f64 +js_string_concat_chain ptr ptr,i32s +js_string_concat_site_value f64 ptr,ptr,f64 +js_string_concat_value ptr ptr,f64 +js_string_concat_value_box f64 ptr,f64 +js_string_decoder_end f64 i64,f64 +js_string_decoder_new i64 i64 +js_string_decoder_write f64 i64,f64 +js_string_end_index_to_i32 i32s f64,i32s +js_string_ends_with i32s ptr,ptr +js_string_ends_with_at i32s ptr,ptr,i32s +js_string_equals i32s ptr,ptr +js_string_error void ptr +js_string_from_bytes ptr ptr,i32u +js_string_from_bytes_longlived ptr ptr,i32u +js_string_from_bytes_with_capacity ptr ptr,i32u,i32u +js_string_from_char_code ptr f64 +js_string_from_char_code_array ptr f64 +js_string_from_code_point ptr f64 +js_string_from_wtf8_bytes ptr ptr,i32u +js_string_index_get f64 ptr,f64 +js_string_index_get_boxed f64 f64,f64 +js_string_index_of i32s ptr,ptr +js_string_index_of_from i32s ptr,ptr,i32s +js_string_index_to_i32 i32s f64 +js_string_intern ptr ptr,i64 +js_string_is_well_formed f64 ptr +js_string_last_index_of i32s ptr,ptr +js_string_last_index_of_from i32s ptr,ptr,f64,i32s +js_string_length i32u ptr +js_string_locale_compare f64 ptr,ptr +js_string_locale_compare_opts f64 ptr,ptr,f64 +js_string_match_all_js f64 f64,f64 +js_string_match_all_value f64 ptr,f64 +js_string_match_js f64 f64,f64 +js_string_match_value f64 ptr,f64 +js_string_materialize_to_heap ptr f64 +js_string_new_sso f64 ptr,i32u +js_string_normalize ptr ptr,f64 +js_string_pad_end ptr ptr,f64,ptr +js_string_pad_fill ptr f64 +js_string_pad_start ptr ptr,f64,ptr +js_string_position_to_index i32s f64 +js_string_print void ptr +js_string_raw ptr f64,f64 +js_string_repeat ptr ptr,f64 +js_string_replace_all_js f64 f64,f64,f64 +js_string_replace_all_regex_dyn ptr ptr,ptr,f64 +js_string_replace_all_search_dyn ptr ptr,f64,f64 +js_string_replace_all_string ptr ptr,ptr,ptr +js_string_replace_all_string_dyn ptr ptr,ptr,f64 +js_string_replace_all_string_fn ptr ptr,ptr,f64 +js_string_replace_js f64 f64,f64,f64 +js_string_replace_regex_dyn ptr ptr,ptr,f64 +js_string_replace_search_dyn ptr ptr,f64,f64 +js_string_replace_string ptr ptr,ptr,ptr +js_string_replace_string_dyn ptr ptr,ptr,f64 +js_string_replace_string_fn ptr ptr,ptr,f64 +js_string_search_js f64 f64,f64 +js_string_search_value f64 ptr,f64 +js_string_search_value_to_string ptr f64,i32s +js_string_slice ptr ptr,i32s,i32s +js_string_split ptr ptr,ptr +js_string_split_js f64 f64,f64,f64 +js_string_split_n ptr ptr,ptr,i32s +js_string_split_part_utf16_length f64 ptr,ptr,i32s +js_string_split_part_value f64 ptr,ptr,i32s +js_string_split_regex ptr ptr,ptr +js_string_split_regex_n ptr ptr,ptr,i32s +js_string_split_value ptr ptr,f64,f64 +js_string_starts_with i32s ptr,ptr +js_string_starts_with_at i32s ptr,ptr,i32s +js_string_substr ptr ptr,f64,f64 +js_string_substring ptr ptr,i32s,i32s +js_string_suffix_advance void f64,ptr,i32s +js_string_suffix_char_code_at f64 f64,ptr,i32s +js_string_suffix_length f64 f64,ptr +js_string_to_char_array i64 i64 +js_string_to_locale_lower_case ptr ptr,f64 +js_string_to_locale_upper_case ptr ptr,f64 +js_string_to_lower_case ptr ptr +js_string_to_upper_case ptr ptr +js_string_to_upper_case_index_of i32s ptr,ptr +js_string_to_upper_case_split_part_utf16_length f64 ptr,ptr,i32s +js_string_to_well_formed ptr ptr +js_string_trim ptr ptr +js_string_trim_end ptr ptr +js_string_trim_start ptr ptr +js_string_validate_collator_args void f64,f64 +js_string_warn void ptr +js_structured_clone f64 f64 +js_structured_clone_with_options f64 f64,f64 +js_sub i64 i64,i64 +js_super_accessor_get f64 i32u,f64,f64 +js_super_construct_apply f64 i32u,f64,f64 +js_super_method_call_dynamic f64 i32u,ptr,usize,f64,ptr,usize +js_super_method_call_dynamic_apply f64 i32u,ptr,usize,f64,f64 +js_super_put_value_set f64 i32u,f64,f64,f64,i32s +js_suppressed_error_new f64 f64,f64,f64 +js_switch_strict_equals i32s f64,f64 +js_symbol_computed_member f64 f64,f64 +js_symbol_description f64 f64 +js_symbol_equals i32s f64,f64 +js_symbol_for f64 f64 +js_symbol_key_for f64 f64 +js_symbol_new f64 f64 +js_symbol_new_empty f64 +js_symbol_to_string i64 f64 +js_symbol_typeof ptr +js_symbol_well_known_async_iterator f64 +js_symbol_well_known_iterator f64 +js_syntaxerror_new ptr ptr +js_tagged_template_get_or_init ptr i64,ptr,ptr +js_tagged_template_register_raw ptr ptr,ptr +js_tdz_suppress_begin void +js_tdz_suppress_end void +js_template_raw i64 ptr +js_template_string_coerce ptr f64 +js_template_string_coerce_box f64 f64 +js_text_decoder_decode i64 i64 +js_text_decoder_decode_llvm i64 f64,f64 +js_text_decoder_encoding ptr f64 +js_text_decoder_fatal f64 f64 +js_text_decoder_ignore_bom f64 f64 +js_text_decoder_new i64 f64,f64,f64 +js_text_decoder_stream_new f64 +js_text_encoder_encode i64 f64 +js_text_encoder_encode_into_llvm i64 f64,f64 +js_text_encoder_encode_llvm i64 f64 +js_text_encoder_new i64 +js_text_encoder_stream_new f64 +js_text_encoding_stream_new f64 +js_thread_has_pending i32s +js_thread_parallel_filter f64 f64,f64 +js_thread_parallel_map f64 f64,f64 +js_thread_process_pending i32s +js_thread_spawn f64 f64 +js_throw void f64 +js_throw_bigint_constructor_type_error f64 +js_throw_collection_receiver_type_error void f64,ptr,usize +js_throw_error_with_code void ptr,usize,ptr,usize,i32s +js_throw_eval_syntax_error f64 f64 +js_throw_illegal_constructor_type_error f64 +js_throw_json_constructor_type_error f64 +js_throw_math_constructor_type_error f64 +js_throw_not_a_constructor f64 +js_throw_reference_error_super_delete f64 +js_throw_reference_error_tdz f64 f64 +js_throw_reference_error_this_before_super f64 +js_throw_reference_error_unresolvable_assignment f64 f64 +js_throw_reference_error_unresolved_assignment f64 +js_throw_reference_error_unresolved_get f64 +js_throw_restricted_function_property_assignment f64 +js_throw_strict_eval_arguments_syntax_error f64 +js_throw_symbol_constructor_type_error f64 +js_throw_type_error_const_assignment f64 f64 +js_throw_type_error_immutable_write void i32u,ptr,usize +js_throw_type_error_not_a_function void ptr,usize,ptr,usize +js_throw_type_error_property_access void i32u,ptr,usize +js_timer_has_pending i32s +js_timer_has_ref i32s i64 +js_timer_next_deadline f64 +js_timer_now f64 +js_timer_ref void i64 +js_timer_refresh void i64 +js_timer_tick i32s +js_timer_tick_if_refed i32s +js_timer_unref void i64 +js_timer_validate_callback i64 f64,i32s +js_tls_check_server_identity f64 f64,f64 +js_tls_client_check_identity f64 i64,f64 +js_tls_client_check_identity_from_metadata f64 i64 +js_tls_client_is_connected i32s i64 +js_tls_client_preflight i32s f64,ptr,usize,f64 +js_tls_client_record_closed void i64 +js_tls_client_record_connected void i64,i32s,ptr,usize,ptr,usize,ptr,usize,ptr,usize,ptr,usize +js_tls_client_record_start void i64,f64,ptr,usize +js_tls_connect i64 f64,f64,f64,f64 +js_tls_convert_alpn_protocols f64 f64,f64 +js_tls_create_secure_context f64 f64 +js_tls_create_server i64 i64,i64 +js_tls_default_ca_is_configured i32s +js_tls_effective_version_mask i32s f64 +js_tls_get_ca_certificates f64 f64 +js_tls_get_certificate_compression_algorithms f64 +js_tls_get_ciphers f64 +js_tls_hot_claim_slot i32u ptr,usize,usize +js_tls_hot_claimed_slots i32u +js_tls_prepare_connect void +js_tls_process_pending i32s +js_tls_secure_context_new f64 f64 +js_tls_server_add_context f64 i64,f64,f64 +js_tls_server_address ptr i64 +js_tls_server_close i64 i64,i64 +js_tls_server_event_names ptr i64 +js_tls_server_get_ticket_keys f64 i64 +js_tls_server_listen i64 i64,f64,i64,i64 +js_tls_server_listener_count f64 i64,i64 +js_tls_server_on i64 i64,i64,i64 +js_tls_server_once i64 i64,i64,i64 +js_tls_server_remove_all_listeners i64 i64,i64 +js_tls_server_remove_listener i64 i64,i64,i64 +js_tls_server_set_secure_context void i64,i64 +js_tls_server_set_ticket_keys void i64,i64 +js_tls_set_default_ca_certificates f64 f64 +js_tls_socket_export_keying_material f64 i64,f64,i64,i64 +js_tls_socket_get_certificate f64 i64 +js_tls_socket_get_cipher f64 i64 +js_tls_socket_get_ephemeral_key_info f64 i64 +js_tls_socket_get_finished f64 i64 +js_tls_socket_get_peer_certificate f64 i64,f64 +js_tls_socket_get_peer_finished f64 i64 +js_tls_socket_get_peer_x509_certificate f64 i64 +js_tls_socket_get_protocol f64 i64 +js_tls_socket_get_session f64 i64 +js_tls_socket_get_shared_sigalgs f64 i64 +js_tls_socket_get_x509_certificate f64 i64 +js_tls_socket_is_session_reused f64 i64 +js_tls_socket_set_key_cert f64 i64,f64 +js_tls_socket_set_max_send_fragment f64 i64,f64 +js_tls_tlssocket_constructor i64 i64,i64 +js_tls_validate_connect_options void f64 +js_tls_validate_positional_connect_options void f64 +js_to_integer_or_infinity f64 f64 +js_to_numeric f64 f64 +js_to_primitive f64 f64,i32s +js_to_primitive_default_for_add f64 f64 +js_to_property_key f64 f64 +js_trace_events_flush_output void +js_transform_stream_new f64 f64,f64,f64,f64,f64 +js_transform_stream_new_from_transformer_object f64 f64,f64,f64 +js_transform_stream_readable f64 f64 +js_transform_stream_subclass_init f64 f64,f64,f64,f64 +js_transform_stream_writable f64 f64 +js_transition_ic_note_hit void +js_transition_ic_probe_report void +js_transition_ic_spill_append i32s f64,i64,i32u,f64 +js_try_end void +js_try_push ptr +js_tty_isatty f64 f64 +js_tty_read_stream_new f64 f64 +js_tty_read_stream_set_raw_mode f64 ptr,f64 +js_tty_resize_drain i32s +js_tty_write_stream_clear_line f64 ptr,f64,f64 +js_tty_write_stream_clear_screen_down f64 ptr,f64 +js_tty_write_stream_cursor_to f64 ptr,f64,f64,f64 +js_tty_write_stream_get_color_depth f64 ptr,f64 +js_tty_write_stream_get_window_size f64 ptr +js_tty_write_stream_has_colors f64 ptr,f64,f64 +js_tty_write_stream_move_cursor f64 ptr,f64,f64,f64 +js_tty_write_stream_new f64 f64 +js_tty_write_stream_on f64 ptr,f64,f64 +js_tty_write_stream_refresh_size f64 ptr +js_tty_write_stream_remove_all_listeners f64 ptr,f64 +js_tty_write_stream_remove_listener f64 ptr,f64,f64 +js_typed_array_at f64 ptr,f64 +js_typed_array_copy_within ptr ptr,f64,f64,f64 +js_typed_array_every f64 ptr,ptr +js_typed_array_fill ptr ptr,f64,i32s,f64,i32s,f64 +js_typed_array_filter ptr ptr,ptr +js_typed_array_find f64 ptr,ptr +js_typed_array_find_index f64 ptr,ptr +js_typed_array_find_last f64 ptr,ptr +js_typed_array_find_last_index f64 ptr,ptr +js_typed_array_for_each f64 ptr,ptr +js_typed_array_get f64 ptr,i32s +js_typed_array_index_get_dynamic f64 ptr,f64 +js_typed_array_index_set_dynamic f64 ptr,f64,f64 +js_typed_array_join ptr ptr,ptr +js_typed_array_join_value ptr ptr,f64 +js_typed_array_length i32s ptr +js_typed_array_map ptr ptr,ptr +js_typed_array_masked_window_data_ptr i64 f64 +js_typed_array_new ptr i32s,f64 +js_typed_array_new_empty ptr i32s,i32s +js_typed_array_new_from_array ptr i32s,ptr +js_typed_array_read_f64 f64 ptr,i32s +js_typed_array_read_int32 i32s ptr,i32s +js_typed_array_reduce f64 ptr,ptr,i32s,f64 +js_typed_array_reduce_right f64 ptr,ptr,i32s,f64 +js_typed_array_reverse ptr ptr +js_typed_array_set void ptr,i32s,f64 +js_typed_array_set_from f64 ptr,f64,f64 +js_typed_array_slice ptr ptr,i32s,i32s +js_typed_array_some f64 ptr,ptr +js_typed_array_sort_default ptr ptr +js_typed_array_sort_with_comparator ptr ptr,ptr +js_typed_array_subarray ptr ptr,i32s,f64,i32s,f64 +js_typed_array_to_reversed ptr ptr +js_typed_array_to_sorted_default ptr ptr +js_typed_array_to_sorted_with_comparator ptr ptr,ptr +js_typed_array_view ptr i32s,f64,f64,f64 +js_typed_array_with ptr ptr,f64,f64 +js_typed_f64_arg_guard i32s f64 +js_typed_f64_arg_to_raw f64 f64 +js_typed_feedback_array_get_f64 f64 i64,ptr,i32u +js_typed_feedback_array_index_get_fallback_boxed f64 i64,f64,f64 +js_typed_feedback_array_index_set_fallback_boxed f64 i64,f64,f64,f64,i32s +js_typed_feedback_array_set_f64 void i64,ptr,i32u,f64 +js_typed_feedback_array_set_f64_extend ptr i64,ptr,i32u,f64 +js_typed_feedback_array_set_index_or_string ptr i64,ptr,f64,f64,i32s +js_typed_feedback_array_set_string_key ptr i64,ptr,ptr,f64 +js_typed_feedback_class_field_get_guard i32s i64,f64,i32u,i32u,ptr,i32u,i32s +js_typed_feedback_class_field_set_guard i32s i64,f64,i32u,i32u,ptr,i32u,f64,i32s +js_typed_feedback_closure_direct_call_guard i32s i64,f64,ptr,i32u,i32u +js_typed_feedback_masked_window_ta_kind i32s i64,f64,i32s,i32s +js_typed_feedback_maybe_dump_trace void +js_typed_feedback_method_direct_call_guard i32s i64,f64,i32u,i32u,ptr,usize,ptr +js_typed_feedback_native_call_method f64 i64,f64,ptr,usize,ptr,usize +js_typed_feedback_native_call_method_apply f64 i64,f64,ptr,usize,i64 +js_typed_feedback_native_call_method_apply_by_id f64 i64,f64,i64,i64 +js_typed_feedback_native_call_method_by_id f64 i64,f64,i64,ptr,usize +js_typed_feedback_numeric_array_index_get_guard i32s i64,f64,i32s,i32s +js_typed_feedback_numeric_array_index_set_guard i32s i64,f64,i32s,f64,i32s +js_typed_feedback_numeric_array_push_guard i32s i64,f64,f64 +js_typed_feedback_object_get_field_by_name_f64 f64 i64,ptr,ptr +js_typed_feedback_object_get_field_by_value_f64 f64 i64,ptr,f64 +js_typed_feedback_object_set_field_by_name void i64,ptr,ptr,f64 +js_typed_feedback_object_set_field_by_name_fast void i64,ptr,ptr,f64 +js_typed_feedback_object_set_index_polymorphic void i64,i64,f64,f64 +js_typed_feedback_object_set_unboxed_f64_field void i64,ptr,i32u,ptr,f64 +js_typed_feedback_observe_array_element void i64,ptr,i32u +js_typed_feedback_observe_helper_return f64 i64,f64 +js_typed_feedback_observe_property_get void i64,ptr,ptr +js_typed_feedback_observe_property_set void i64,ptr,ptr +js_typed_feedback_packed_f64_array_loop_guard i32s i64,f64 +js_typed_feedback_packed_f64_range_loop_guard i32s i64,f64,i32s,i32s +js_typed_feedback_packed_f64_range_loop_guard_dense i32s i64,f64,i32s,i32s +js_typed_feedback_packed_f64_range_loop_guard_dense_i32 i32s i64,f64,i32s,i32s +js_typed_feedback_packed_i32_array_loop_guard i32s i64,f64 +js_typed_feedback_packed_u32_array_loop_guard i32s i64,f64 +js_typed_feedback_plain_array_index_get_guard i32s i64,f64,i32s,i32s +js_typed_feedback_plain_array_index_set_guard i32s i64,f64,i32s,f64,i32s +js_typed_feedback_record_fallback_call void i64 +js_typed_feedback_record_guard_fail void i64 +js_typed_feedback_record_guard_pass void i64 +js_typed_feedback_register_site void i64,i32u,ptr,usize,ptr,usize,ptr,usize,ptr,usize,ptr,usize,ptr,usize +js_typed_i1_arg_guard i32s f64 +js_typed_i1_arg_to_raw i32s f64 +js_typed_i32_arg_guard i32s f64 +js_typed_i32_arg_to_raw i32s f64 +js_typed_string_arg_guard i32s f64 +js_typed_string_arg_to_raw i64 f64 +js_typeerror_new ptr ptr +js_typeerror_new_with_cause ptr ptr,f64 +js_typescript_flatten_diagnostic_message_text ptr f64,ptr,f64 +js_typescript_transpile_module ptr ptr,f64 +js_u8_buffer_read_f64 f64 ptr,i32s +js_u8_from_base64 ptr i64,f64 +js_u8_from_hex ptr i64 +js_u8_set_from_base64 f64 i64,i64,f64 +js_u8_set_from_hex f64 i64,i64 +js_u8_to_base64 ptr i64,f64 +js_u8_to_hex ptr i64 +js_uint8array_alloc ptr i32s +js_uint8array_from_array ptr ptr +js_uint8array_get i32s ptr,i32s +js_uint8array_index_get_value f64 ptr,i32s +js_uint8array_new ptr f64 +js_uint8array_set void ptr,i32s,i32s +js_uint8array_view ptr f64,f64,f64 +js_undici_agent_close ptr i64 +js_undici_agent_destroy ptr i64 +js_undici_agent_new i64 ptr +js_undici_get_global_dispatcher i64 +js_undici_proxy_agent_new i64 ptr +js_undici_request ptr ptr,ptr +js_undici_set_global_dispatcher void i64 +js_unescape i64 f64 +js_unresolved_default_call f64 +js_unresolved_namespace_stub f64 +js_unsettled_top_level_await_exit void +js_urierror_new ptr ptr +js_url_can_parse i32s ptr +js_url_can_parse_with_base i32s ptr,ptr +js_url_coerce_string ptr f64 +js_url_create_object_url ptr f64 +js_url_domain_to_ascii f64 f64 +js_url_domain_to_unicode f64 f64 +js_url_file_url_to_path f64 f64,f64 +js_url_file_url_to_path_buffer f64 f64,f64 +js_url_format f64 f64,f64 +js_url_get_hash f64 ptr +js_url_get_host f64 ptr +js_url_get_hostname f64 ptr +js_url_get_href f64 ptr +js_url_get_origin f64 ptr +js_url_get_pathname f64 ptr +js_url_get_port f64 ptr +js_url_get_protocol f64 ptr +js_url_get_search f64 ptr +js_url_get_search_params f64 ptr +js_url_href_if_url f64 f64 +js_url_legacy_parse f64 f64,f64,f64 +js_url_legacy_resolve f64 f64,f64 +js_url_legacy_resolve_object f64 f64,f64 +js_url_legacy_url_new f64 +js_url_new ptr ptr +js_url_new_with_base ptr ptr,ptr +js_url_parse ptr ptr +js_url_parse_with_base ptr ptr,ptr +js_url_path_to_file_url f64 f64,f64 +js_url_pattern_constructor_call f64 f64,f64 +js_url_pattern_exec f64 ptr,f64,f64 +js_url_pattern_new ptr f64,f64 +js_url_pattern_test f64 ptr,f64,f64 +js_url_revoke_object_url void f64 +js_url_search_params_append void ptr,f64,f64 +js_url_search_params_delete void ptr,f64 +js_url_search_params_delete2 void ptr,f64,f64 +js_url_search_params_entries_arr f64 ptr +js_url_search_params_for_each void ptr,f64,f64 +js_url_search_params_get ptr ptr,f64 +js_url_search_params_get_all f64 ptr,f64 +js_url_search_params_has f64 ptr,f64 +js_url_search_params_has2 f64 ptr,f64,f64 +js_url_search_params_keys_arr f64 ptr +js_url_search_params_new ptr ptr +js_url_search_params_new_any ptr f64 +js_url_search_params_new_empty ptr +js_url_search_params_set void ptr,f64,f64 +js_url_search_params_size i32s ptr +js_url_search_params_sort void ptr +js_url_search_params_subclass_init f64 f64,f64 +js_url_search_params_throw_missing_args f64 i32s +js_url_search_params_to_string ptr ptr +js_url_search_params_values_arr f64 ptr +js_url_set_hash void ptr,f64 +js_url_set_host void ptr,f64 +js_url_set_hostname void ptr,f64 +js_url_set_href void ptr,f64 +js_url_set_password void ptr,f64 +js_url_set_pathname void ptr,f64 +js_url_set_port void ptr,f64 +js_url_set_protocol void ptr,f64 +js_url_set_search void ptr,f64 +js_url_set_username void ptr,f64 +js_url_to_http_options f64 f64 +js_util_aborted f64 f64,f64 +js_util_callbackify f64 f64 +js_util_convert_process_signal_to_exit_code f64 f64 +js_util_debuglog f64 f64,f64 +js_util_deprecate f64 f64,f64,f64 +js_util_diff f64 f64,f64 +js_util_errno_exception f64 f64,f64,f64 +js_util_exception_with_host_port f64 f64,f64,f64,f64,f64 +js_util_extend f64 f64,f64 +js_util_format f64 ptr +js_util_format_with_options f64 f64,ptr +js_util_get_call_sites f64 f64,f64 +js_util_get_system_error_map f64 +js_util_get_system_error_message f64 f64 +js_util_get_system_error_name f64 f64 +js_util_inherits f64 f64,f64 +js_util_inspect f64 f64,f64 +js_util_is_deep_strict_equal f64 f64,f64 +js_util_mime_params_new f64 +js_util_mime_type_new f64 f64 +js_util_parse_args f64 f64 +js_util_parse_env f64 f64 +js_util_promisify f64 f64 +js_util_set_trace_sig_int f64 f64 +js_util_strip_vt_control_characters f64 f64 +js_util_style_text f64 f64,f64,f64 +js_util_to_usv_string f64 f64 +js_util_transferable_abort_controller f64 +js_util_transferable_abort_signal f64 f64 +js_util_types_is_any_array_buffer f64 f64 +js_util_types_is_arguments_object f64 f64 +js_util_types_is_array_buffer f64 f64 +js_util_types_is_array_buffer_view f64 f64 +js_util_types_is_async_function f64 f64 +js_util_types_is_big_int64_array f64 f64 +js_util_types_is_big_int_object f64 f64 +js_util_types_is_big_uint64_array f64 f64 +js_util_types_is_boolean_object f64 f64 +js_util_types_is_boxed_primitive f64 f64 +js_util_types_is_crypto_key f64 f64 +js_util_types_is_data_view f64 f64 +js_util_types_is_date f64 f64 +js_util_types_is_external f64 f64 +js_util_types_is_float16_array f64 f64 +js_util_types_is_float32_array f64 f64 +js_util_types_is_float64_array f64 f64 +js_util_types_is_generator_function f64 f64 +js_util_types_is_generator_object f64 f64 +js_util_types_is_int16_array f64 f64 +js_util_types_is_int32_array f64 f64 +js_util_types_is_int8_array f64 f64 +js_util_types_is_key_object f64 f64 +js_util_types_is_map f64 f64 +js_util_types_is_map_iterator f64 f64 +js_util_types_is_module_namespace_object f64 f64 +js_util_types_is_native_error f64 f64 +js_util_types_is_number_object f64 f64 +js_util_types_is_promise f64 f64 +js_util_types_is_proxy f64 f64 +js_util_types_is_reg_exp f64 f64 +js_util_types_is_set f64 f64 +js_util_types_is_set_iterator f64 f64 +js_util_types_is_shared_array_buffer f64 f64 +js_util_types_is_string_object f64 f64 +js_util_types_is_symbol_object f64 f64 +js_util_types_is_typed_array f64 f64 +js_util_types_is_uint16_array f64 f64 +js_util_types_is_uint32_array f64 f64 +js_util_types_is_uint8_array f64 f64 +js_util_types_is_uint8_clamped_array f64 f64 +js_util_types_is_weak_map f64 f64 +js_util_types_is_weak_set f64 f64 +js_v8_cached_data_version_tag f64 +js_v8_deserialize f64 f64 +js_v8_deserializer_new f64 f64 +js_v8_gc_profiler_new f64 +js_v8_gc_profiler_report f64 +js_v8_gc_profiler_start f64 f64 +js_v8_gc_profiler_stop f64 f64 +js_v8_get_heap_code_statistics f64 +js_v8_get_heap_snapshot f64 f64 +js_v8_get_heap_space_statistics f64 +js_v8_get_heap_statistics f64 +js_v8_is_building_snapshot f64 +js_v8_namespace f64 ptr,usize +js_v8_noop_undefined f64 +js_v8_promise_hook_register f64 +js_v8_promise_hooks_create_hook f64 f64 +js_v8_promise_hooks_on_after f64 f64 +js_v8_promise_hooks_on_before f64 f64 +js_v8_promise_hooks_on_init f64 f64 +js_v8_promise_hooks_on_settled f64 f64 +js_v8_serialize f64 f64 +js_v8_serializer_new f64 f64 +js_v8_throw_not_building_snapshot f64 +js_v8_write_heap_snapshot f64 f64,f64 +js_validate_array_callback i64 f64 +js_validate_array_comparator i64 f64 +js_validate_array_map_callback i64 i64,f64 +js_validate_event_listener i64 i64,ptr,i32u +js_value_add_string f64 f64,f64 +js_value_buffer_or_typedarray_data ptr f64,ptr +js_value_concat_string ptr f64,ptr +js_value_from_const_descriptor f64 ptr,i32u +js_value_from_literal_descriptor f64 ptr,i32u,ptr,i32u +js_value_is_closure i32s i64 +js_value_is_promise i32s f64 +js_value_length_f64 f64 f64 +js_value_length_property_f64 f64 f64 +js_value_length_property_ic_f64 f64 f64,ptr +js_value_to_locale_string f64 f64 +js_value_to_object ptr i64 +js_value_to_str_ptr_for_ffi i64 f64 +js_value_to_string_with_encoding ptr f64,i32s +js_value_to_string_with_encoding_or_radix ptr f64,i32s,f64 +js_value_typeof ptr f64 +js_value_typeof_tag i32u f64 +js_vm_compile_function f64 f64,f64,f64 +js_vm_create_context f64 f64,f64 +js_vm_create_script f64 f64,f64 +js_vm_create_script_branded f64 f64,f64 +js_vm_is_context f64 f64 +js_vm_measure_memory f64 f64 +js_vm_module_call f64 +js_vm_module_constructor_error f64 +js_vm_module_error f64 i64 +js_vm_module_evaluate f64 i64,f64 +js_vm_module_identifier f64 i64 +js_vm_module_link f64 i64,f64 +js_vm_module_namespace f64 i64 +js_vm_module_status f64 i64 +js_vm_run_in_context f64 f64,f64,f64 +js_vm_run_in_new_context f64 f64,f64,f64 +js_vm_run_in_this_context f64 f64,f64 +js_vm_script_call f64 f64,f64 +js_vm_source_text_module_create_cached_data f64 i64 +js_vm_source_text_module_dependency_specifiers f64 i64 +js_vm_source_text_module_has_async_graph f64 i64 +js_vm_source_text_module_has_top_level_await f64 i64 +js_vm_source_text_module_instantiate f64 i64 +js_vm_source_text_module_link_requests f64 i64,f64 +js_vm_source_text_module_module_requests f64 i64 +js_vm_source_text_module_new f64 f64,f64 +js_vm_synthetic_module_new f64 f64,f64,f64 +js_vm_synthetic_module_set_export f64 i64,f64,f64 +js_wait_for_event void +js_wasi_constructor_call f64 f64 +js_wasi_emit_warning f64 +js_wasi_finalize_bindings f64 ptr,f64,f64 +js_wasi_get_import_object f64 ptr +js_wasi_import_stub f64 ptr,f64,f64,f64,f64 +js_wasi_initialize f64 ptr,f64 +js_wasi_new f64 f64 +js_wasi_start f64 ptr,f64 +js_weak_collection_subclass_init f64 f64,i32s,f64 +js_weak_throw_primitive f64 +js_weakmap_delete f64 f64,f64 +js_weakmap_get f64 f64,f64 +js_weakmap_has f64 f64,f64 +js_weakmap_init_iterable f64 f64,f64 +js_weakmap_new ptr +js_weakmap_set f64 f64,f64,f64 +js_weakref_deref f64 f64 +js_weakref_new ptr f64 +js_weakset_add f64 f64,f64 +js_weakset_delete f64 f64,f64 +js_weakset_has f64 f64,f64 +js_weakset_init_iterable f64 f64,f64 +js_weakset_new ptr +js_webassembly_call_export_0 f64 f64,f64 +js_webassembly_call_export_1 f64 f64,f64,f64 +js_webassembly_call_export_2 f64 f64,f64,f64,f64 +js_webassembly_call_export_3 f64 f64,f64,f64,f64,f64 +js_webassembly_call_export_4 f64 f64,f64,f64,f64,f64,f64 +js_webassembly_compile f64 f64 +js_webassembly_global_new f64 f64,f64,f64 +js_webassembly_instance_new f64 f64,f64,f64 +js_webassembly_instantiate f64 f64,f64 +js_webassembly_memory_grow f64 f64,i32u +js_webassembly_memory_new f64 i32u,i32u,f64 +js_webassembly_module_custom_sections f64 f64,f64 +js_webassembly_module_exports f64 f64 +js_webassembly_module_imports f64 f64 +js_webassembly_module_new f64 f64 +js_webassembly_table_new f64 f64,f64 +js_webassembly_validate f64 f64 +js_webcrypto_decrypt ptr f64,f64,f64 +js_webcrypto_derive_bits ptr f64,f64,f64 +js_webcrypto_derive_key ptr f64,f64,f64,f64,f64 +js_webcrypto_digest ptr f64,f64 +js_webcrypto_encrypt ptr f64,f64,f64 +js_webcrypto_export_key ptr f64,f64 +js_webcrypto_generate_key ptr f64,f64,f64 +js_webcrypto_illegal_constructor f64 +js_webcrypto_import_key ptr f64,f64,f64,f64,f64 +js_webcrypto_native_dispatch f64 ptr,usize,ptr,usize +js_webcrypto_sign ptr f64,f64,f64 +js_webcrypto_supports f64 f64,f64,f64 +js_webcrypto_unwrap_key ptr f64,f64,f64,f64,f64,f64,f64 +js_webcrypto_verify ptr f64,f64,f64,f64 +js_webcrypto_wrap_key ptr f64,f64,f64,f64 +js_with_delete_binding i32s f64,ptr +js_with_get_binding f64 f64,ptr +js_with_has_binding i32s f64,ptr +js_with_implicit_read f64 f64,f64 +js_with_implicit_unset f64 +js_with_set_binding f64 f64,ptr,f64,i32s +js_worker_threads_broadcast_channel_new f64 f64 +js_worker_threads_channels_has_pending i32s +js_worker_threads_channels_process_pending i32s +js_worker_threads_get_environment_data f64 f64 +js_worker_threads_get_worker_data f64 +js_worker_threads_has_pending i32s +js_worker_threads_is_main_thread f64 +js_worker_threads_is_marked_as_untransferable f64 f64 +js_worker_threads_locks_query f64 +js_worker_threads_locks_request f64 f64,f64,f64 +js_worker_threads_mark_as_uncloneable f64 f64 +js_worker_threads_mark_as_untransferable f64 f64 +js_worker_threads_message_channel_new f64 +js_worker_threads_move_message_port_to_context f64 f64,f64 +js_worker_threads_on f64 i64,i64 +js_worker_threads_parent_port f64 +js_worker_threads_post_message f64 f64 +js_worker_threads_post_message_to_thread f64 f64,f64,f64,f64 +js_worker_threads_process_pending i32s +js_worker_threads_receive_message_on_port f64 f64 +js_worker_threads_resource_limits f64 +js_worker_threads_set_environment_data f64 f64,f64 +js_worker_threads_thread_name f64 +js_worker_threads_worker_add_event_listener f64 i64,f64,i64 +js_worker_threads_worker_cpu_usage f64 i64,f64 +js_worker_threads_worker_get_heap_snapshot f64 i64,f64 +js_worker_threads_worker_get_heap_statistics f64 i64 +js_worker_threads_worker_new f64 i64,f64 +js_worker_threads_worker_off f64 i64,f64,i64 +js_worker_threads_worker_on f64 i64,f64,i64 +js_worker_threads_worker_once f64 i64,f64,i64 +js_worker_threads_worker_post_message f64 i64,f64 +js_worker_threads_worker_ref f64 i64 +js_worker_threads_worker_reload f64 i64 +js_worker_threads_worker_remove_event_listener f64 i64,f64,i64 +js_worker_threads_worker_start_cpu_profile f64 i64 +js_worker_threads_worker_start_heap_profile f64 i64 +js_worker_threads_worker_terminate f64 i64 +js_worker_threads_worker_unref f64 i64 +js_workload_api_inspectGraph ptr f64 +js_workload_graph ptr ptr,ptr +js_workload_handle_down ptr i64,i32s +js_workload_handle_exec ptr i64,ptr,ptr +js_workload_handle_graph ptr i64 +js_workload_handle_logs ptr i64,ptr,i32s +js_workload_handle_ps ptr i64 +js_workload_handle_status ptr i64 +js_workload_inspectGraph ptr i64 +js_workload_node ptr ptr,ptr +js_workload_runGraph ptr ptr,ptr +js_writable_stream_abort ptr f64,f64 +js_writable_stream_close ptr f64 +js_writable_stream_get_writer f64 f64 +js_writable_stream_locked f64 f64 +js_writable_stream_new f64 f64,f64,f64,f64,f64 +js_writable_stream_new_from_sink_object f64 f64,f64 +js_writable_stream_new_with_sink_type f64 f64,f64,f64,f64,f64,f64 +js_writable_stream_subclass_init f64 f64,f64,f64,f64,f64 +js_writable_stream_throw_invalid_sink f64 +js_write_barrier void i64,i64 +js_write_barrier_root_heap_word void i64 +js_write_barrier_root_nanbox void i64 +js_write_barrier_slot void i64,i64,i64 +js_write_barrier_slot_validated_parent void i64,i64,i64 +js_writer_abort ptr f64,f64 +js_writer_close ptr f64 +js_writer_closed ptr f64 +js_writer_desired_size f64 f64 +js_writer_ready ptr f64 +js_writer_release_lock f64 f64 +js_writer_write ptr f64,f64 +js_ws_close void i64 +js_ws_close_client void f64 +js_ws_close_client_i64 void i64 +js_ws_close_with void i64,f64,f64 +js_ws_close_with_client_i64 void i64,f64,f64 +js_ws_connect ptr ptr +js_ws_connect_start f64 f64 +js_ws_handle_to_i64 i64 f64 +js_ws_handle_upgrade void i64,f64,f64,f64,i64 +js_ws_has_pending i32s +js_ws_is_open f64 i64 +js_ws_message_count f64 i64 +js_ws_on i64 i64,ptr,i64 +js_ws_on_client_i64 i64 i64,ptr,i64 +js_ws_ping void i64,f64 +js_ws_pong void i64,f64 +js_ws_process_pending i32s +js_ws_ready_state f64 i64 +js_ws_receive ptr i64 +js_ws_send void i64,ptr +js_ws_send_client_i64 void i64,ptr +js_ws_send_to_client void f64,ptr +js_ws_send_value void i64,f64,f64 +js_ws_send_value_client_i64 void i64,f64,f64 +js_ws_server_address f64 i64 +js_ws_server_clients f64 i64 +js_ws_server_close void i64 +js_ws_server_close_with void i64,f64 +js_ws_server_emit i32s i64,ptr,f64,f64 +js_ws_server_new i64 f64 +js_ws_terminate void i64 +js_ws_wait_for_message ptr i64,f64 +js_yoga_calculate_layout f64 f64,f64,f64,f64 +js_yoga_child_count f64 f64 +js_yoga_get_computed f64 f64,f64 +js_yoga_get_computed_edge f64 f64,f64,f64 +js_yoga_insert_child f64 f64,f64,f64 +js_yoga_node_free f64 f64 +js_yoga_node_new f64 +js_yoga_remove_child f64 f64,f64 +js_yoga_set_edge f64 f64,f64,f64,f64,f64 +js_yoga_set_enum f64 f64,f64,f64 +js_yoga_set_gap f64 f64,f64,f64,f64 +js_yoga_set_measure_func f64 f64,f64 +js_yoga_set_number f64 f64,f64,f64,f64 +js_yoga_unset_measure_func f64 f64 +js_zlib_brotli_compress void f64,f64 +js_zlib_brotli_compress_sync ptr i64 +js_zlib_brotli_decompress void f64,f64 +js_zlib_brotli_decompress_sync ptr i64 +js_zlib_crc32 f64 f64,f64 +js_zlib_create_brotli_compress i64 f64 +js_zlib_create_brotli_decompress i64 f64 +js_zlib_create_deflate i64 f64 +js_zlib_create_deflate_raw i64 f64 +js_zlib_create_gunzip i64 f64 +js_zlib_create_gzip i64 f64 +js_zlib_create_inflate i64 f64 +js_zlib_create_inflate_raw i64 f64 +js_zlib_create_unzip i64 f64 +js_zlib_create_zstd_compress i64 f64 +js_zlib_create_zstd_decompress i64 f64 +js_zlib_deflate void f64,f64 +js_zlib_deflate_raw void f64,f64 +js_zlib_deflate_raw_sync ptr f64,f64 +js_zlib_deflate_sync ptr i64,f64 +js_zlib_gunzip void f64,f64 +js_zlib_gunzip_sync ptr i64 +js_zlib_gzip void f64,f64 +js_zlib_gzip_sync ptr i64,f64 +js_zlib_inflate void f64,f64 +js_zlib_inflate_raw void f64,f64 +js_zlib_inflate_raw_sync ptr f64 +js_zlib_inflate_sync ptr i64 +js_zlib_native_dispatch f64 ptr,usize,ptr,usize +js_zlib_process_pending i32s +js_zlib_resolve_level i32s f64 +js_zlib_unzip void f64,f64 +js_zlib_unzip_sync ptr f64 +js_zlib_validate_buffer_arg void i64 +js_zlib_validate_callback i64 f64 +js_zlib_validate_options void f64,i32s +js_zlib_validate_params i32s f64,f64 +js_zlib_zstd_compress void f64,f64 +js_zlib_zstd_compress_sync ptr f64,f64 +js_zlib_zstd_decompress void f64,f64 +js_zlib_zstd_decompress_sync ptr f64,f64 +main i32s +napi_acquire_threadsafe_function i32s ptr +napi_add_async_cleanup_hook i32s ptr,ptr,ptr,ptr +napi_add_env_cleanup_hook i32s ptr,ptr,ptr +napi_add_finalizer i32s ptr,ptr,ptr,ptr,ptr,ptr +napi_adjust_external_memory i32s ptr,i64,ptr +napi_async_destroy i32s ptr,ptr +napi_async_init i32s ptr,ptr,ptr,ptr +napi_call_function i32s ptr,ptr,ptr,usize,ptr,ptr +napi_cancel_async_work i32s ptr,ptr +napi_check_object_type_tag i32s ptr,ptr,ptr,ptr +napi_close_callback_scope i32s ptr,ptr +napi_close_escapable_handle_scope i32s ptr,ptr +napi_close_handle_scope i32s ptr,ptr +napi_coerce_to_bool i32s ptr,ptr,ptr +napi_coerce_to_number i32s ptr,ptr,ptr +napi_coerce_to_object i32s ptr,ptr,ptr +napi_coerce_to_string i32s ptr,ptr,ptr +napi_create_array i32s ptr,ptr +napi_create_array_with_length i32s ptr,usize,ptr +napi_create_arraybuffer i32s ptr,usize,ptr,ptr +napi_create_async_work i32s ptr,ptr,ptr,ptr,ptr,ptr,ptr +napi_create_bigint_int64 i32s ptr,i64,ptr +napi_create_bigint_uint64 i32s ptr,i64,ptr +napi_create_bigint_words i32s ptr,i32s,usize,ptr,ptr +napi_create_buffer i32s ptr,usize,ptr,ptr +napi_create_buffer_copy i32s ptr,usize,ptr,ptr,ptr +napi_create_dataview i32s ptr,usize,ptr,usize,ptr +napi_create_date i32s ptr,f64,ptr +napi_create_double i32s ptr,f64,ptr +napi_create_error i32s ptr,ptr,ptr,ptr +napi_create_external i32s ptr,ptr,ptr,ptr,ptr +napi_create_external_arraybuffer i32s ptr,ptr,usize,ptr,ptr,ptr +napi_create_external_buffer i32s ptr,usize,ptr,ptr,ptr,ptr +napi_create_function i32s ptr,ptr,usize,usize,ptr,ptr +napi_create_int32 i32s ptr,i32s,ptr +napi_create_int64 i32s ptr,i64,ptr +napi_create_object i32s ptr,ptr +napi_create_promise i32s ptr,ptr,ptr +napi_create_range_error i32s ptr,ptr,ptr,ptr +napi_create_reference i32s ptr,ptr,i32u,ptr +napi_create_string_latin1 i32s ptr,ptr,usize,ptr +napi_create_string_utf16 i32s ptr,ptr,usize,ptr +napi_create_string_utf8 i32s ptr,ptr,usize,ptr +napi_create_symbol i32s ptr,ptr,ptr +napi_create_threadsafe_function i32s ptr,ptr,ptr,ptr,usize,usize,ptr,ptr,ptr,ptr,ptr +napi_create_type_error i32s ptr,ptr,ptr,ptr +napi_create_uint32 i32s ptr,i32u,ptr +napi_define_class i32s ptr,ptr,usize,usize,ptr,usize,ptr,ptr +napi_define_properties i32s ptr,ptr,usize,ptr +napi_delete_async_work i32s ptr,ptr +napi_delete_element i32s ptr,ptr,i32u,ptr +napi_delete_property i32s ptr,ptr,ptr,ptr +napi_delete_reference i32s ptr,ptr +napi_detach_arraybuffer i32s ptr,ptr +napi_escape_handle i32s ptr,ptr,ptr,ptr +napi_fatal_error void ptr,usize,ptr,usize +napi_fatal_exception i32s ptr,ptr +napi_get_and_clear_last_exception i32s ptr,ptr +napi_get_array_length i32s ptr,ptr,ptr +napi_get_arraybuffer_info i32s ptr,ptr,ptr,ptr +napi_get_boolean i32s ptr,bool,ptr +napi_get_buffer_info i32s ptr,ptr,ptr,ptr +napi_get_cb_info i32s ptr,ptr,ptr,ptr,ptr,ptr +napi_get_dataview_info i32s ptr,ptr,ptr,ptr,ptr,ptr +napi_get_date_value i32s ptr,ptr,ptr +napi_get_element i32s ptr,ptr,i32u,ptr +napi_get_global i32s ptr,ptr +napi_get_instance_data i32s ptr,ptr +napi_get_last_error_info i32s ptr,ptr +napi_get_named_property i32s ptr,ptr,ptr,ptr +napi_get_new_target i32s ptr,ptr,ptr +napi_get_node_version i32s ptr,ptr +napi_get_null i32s ptr,ptr +napi_get_property i32s ptr,ptr,ptr,ptr +napi_get_property_names i32s ptr,ptr,ptr +napi_get_prototype i32s ptr,ptr,ptr +napi_get_reference_value i32s ptr,ptr,ptr +napi_get_threadsafe_function_context i32s ptr,ptr +napi_get_typedarray_info i32s ptr,ptr,ptr,ptr,ptr,ptr,ptr +napi_get_undefined i32s ptr,ptr +napi_get_uv_event_loop i32s ptr,ptr +napi_get_value_bigint_int64 i32s ptr,ptr,ptr,ptr +napi_get_value_bigint_uint64 i32s ptr,ptr,ptr,ptr +napi_get_value_bigint_words i32s ptr,ptr,ptr,ptr,ptr +napi_get_value_bool i32s ptr,ptr,ptr +napi_get_value_double i32s ptr,ptr,ptr +napi_get_value_external i32s ptr,ptr,ptr +napi_get_value_int32 i32s ptr,ptr,ptr +napi_get_value_int64 i32s ptr,ptr,ptr +napi_get_value_string_latin1 i32s ptr,ptr,ptr,usize,ptr +napi_get_value_string_utf16 i32s ptr,ptr,ptr,usize,ptr +napi_get_value_string_utf8 i32s ptr,ptr,ptr,usize,ptr +napi_get_value_uint32 i32s ptr,ptr,ptr +napi_get_version i32s ptr,ptr +napi_has_element i32s ptr,ptr,i32u,ptr +napi_has_named_property i32s ptr,ptr,ptr,ptr +napi_has_own_property i32s ptr,ptr,ptr,ptr +napi_has_property i32s ptr,ptr,ptr,ptr +napi_instanceof i32s ptr,ptr,ptr,ptr +napi_is_array i32s ptr,ptr,ptr +napi_is_arraybuffer i32s ptr,ptr,ptr +napi_is_buffer i32s ptr,ptr,ptr +napi_is_dataview i32s ptr,ptr,ptr +napi_is_date i32s ptr,ptr,ptr +napi_is_detached_arraybuffer i32s ptr,ptr,ptr +napi_is_error i32s ptr,ptr,ptr +napi_is_exception_pending i32s ptr,ptr +napi_is_promise i32s ptr,ptr,ptr +napi_is_typedarray i32s ptr,ptr,ptr +napi_make_callback i32s ptr,ptr,ptr,ptr,usize,ptr,ptr +napi_module_register void ptr +napi_new_instance i32s ptr,ptr,usize,ptr,ptr +napi_object_freeze i32s ptr,ptr +napi_object_seal i32s ptr,ptr +napi_open_callback_scope i32s ptr,ptr,ptr,ptr +napi_open_escapable_handle_scope i32s ptr,ptr +napi_open_handle_scope i32s ptr,ptr +napi_queue_async_work i32s ptr,ptr +napi_ref_threadsafe_function i32s ptr,ptr +napi_reference_ref i32s ptr,ptr,ptr +napi_reference_unref i32s ptr,ptr,ptr +napi_reject_deferred i32s ptr,ptr,ptr +napi_remove_async_cleanup_hook i32s ptr +napi_remove_env_cleanup_hook i32s ptr,ptr,ptr +napi_remove_wrap i32s ptr,ptr,ptr +napi_resolve_deferred i32s ptr,ptr,ptr +napi_run_script i32s ptr,ptr,ptr +napi_set_element i32s ptr,ptr,i32u,ptr +napi_set_instance_data i32s ptr,ptr,ptr,ptr +napi_set_named_property i32s ptr,ptr,ptr,ptr +napi_set_property i32s ptr,ptr,ptr,ptr +napi_strict_equals i32s ptr,ptr,ptr,ptr +napi_throw i32s ptr,ptr +napi_throw_error i32s ptr,ptr,ptr +napi_throw_range_error i32s ptr,ptr,ptr +napi_throw_type_error i32s ptr,ptr,ptr +napi_type_tag_object i32s ptr,ptr,ptr +napi_typeof i32s ptr,ptr,ptr +napi_unref_threadsafe_function i32s ptr,ptr +napi_unwrap i32s ptr,ptr,ptr +napi_wrap i32s ptr,ptr,ptr,ptr,ptr,ptr +node_api_create_buffer_from_arraybuffer i32s ptr,ptr,usize,usize,ptr +node_api_create_external_string_latin1 i32s ptr,ptr,usize,ptr,ptr,ptr,ptr +node_api_create_external_string_utf16 i32s ptr,ptr,usize,ptr,ptr,ptr,ptr +node_api_create_property_key_latin1 i32s ptr,ptr,usize,ptr +node_api_create_property_key_utf16 i32s ptr,ptr,usize,ptr +node_api_create_property_key_utf8 i32s ptr,ptr,usize,ptr +node_api_create_syntax_error i32s ptr,ptr,ptr,ptr +node_api_get_module_file_name i32s ptr,ptr +node_api_symbol_for i32s ptr,ptr,usize,ptr +node_api_throw_syntax_error i32s ptr,ptr,ptr +perry_app_group_init void ptr,i32s +perry_app_group_suite_name ptr ptr +perry_arkts_drain_toast f64 +perry_arkts_invoke_callback f64 i64 +perry_arkts_invoke_callback1 f64 i64,f64 +perry_arkts_register_callback void i64,f64 +perry_arkts_register_text_id void i64,f64 +perry_arkts_set_content_view void f64,f64 +perry_arkts_set_text void f64,f64 +perry_arkts_set_visibility void f64,f64 +perry_arkts_show_toast void f64 +perry_cluster_compute_key_id i32u ptr,i32u,i32s,i32s +perry_cluster_is_worker i32s +perry_cluster_worker_listening void ptr,i32u,i32s,i32s +perry_cluster_worker_query_listen i32s ptr,i32u,i32s,i32s,i32s +perry_cluster_worker_recv_fd i32s i32u +perry_cluster_worker_sched_is_rr i32s +perry_debug_trace_init void i64,ptr,i64 +perry_debug_trace_init_done void i64 +perry_eh_personality i32s i32s,i32s,i64,ptr,ptr +perry_ffi_callback_dispatch i64 usize,ptr,ptr +perry_ffi_gc_register_fetch_trace void ptr,ptr +perry_ffi_gc_register_mutable_root_scanner void ptr +perry_ffi_gc_register_mutable_root_scanner_named void ptr,usize,usize,ptr +perry_ffi_gc_register_root_scanner void ptr +perry_ffi_gc_request_handle_collection void +perry_ffi_gc_root_visitor_is_full_mark bool ptr +perry_ffi_native_async_attach_handle i32s ptr,i64,i32u +perry_ffi_native_async_cancel i32s ptr +perry_ffi_native_async_new ptr i32u +perry_ffi_native_async_promise ptr ptr +perry_ffi_native_async_reject_bits i32s ptr,i64 +perry_ffi_native_async_reject_string i32s ptr,ptr,usize +perry_ffi_native_async_resolve_bits i32s ptr,i64 +perry_ffi_pool_cancel i32s i64 +perry_ffi_pool_submit i64 ptr,ptr,ptr +perry_ffi_pool_turn void i64 +perry_ffi_promise_new ptr +perry_ffi_promise_reject_bits void ptr,i64 +perry_ffi_promise_reject_deferred void ptr,ptr,ptr +perry_ffi_promise_resolve_bits void ptr,i64 +perry_ffi_promise_resolve_deferred void ptr,ptr,ptr +perry_ffi_run_pending void i64 +perry_ffi_spawn_async void ptr +perry_ffi_spawn_blocking void ptr,ptr +perry_ffi_spawn_blocking_with_reactor void ptr,ptr +perry_geisterhand_find_by_shortcut f64 ptr,usize +perry_geisterhand_free_string void ptr,usize +perry_geisterhand_get_closure f64 i64,i8u +perry_geisterhand_get_registry_json ptr ptr +perry_geisterhand_pump void +perry_geisterhand_queue_action void f64 +perry_geisterhand_queue_action1 void f64,f64 +perry_geisterhand_queue_apply_style void i64,i32u,f64,f64,f64,f64 +perry_geisterhand_queue_scroll void i64,f64,f64 +perry_geisterhand_queue_set_text void i64,ptr,usize +perry_geisterhand_queue_state_set void i64,f64 +perry_geisterhand_register void i64,i8u,i8u,f64,ptr +perry_geisterhand_register_apply_style void ptr +perry_geisterhand_register_query_tree void ptr +perry_geisterhand_register_read_value void ptr +perry_geisterhand_register_screenshot_capture void ptr +perry_geisterhand_register_scroll_set void ptr +perry_geisterhand_register_state_set void ptr +perry_geisterhand_register_textfield_set_string void ptr +perry_geisterhand_register_with_shortcut void i64,i8u,i8u,f64,ptr,ptr,usize +perry_geisterhand_registry_count usize +perry_geisterhand_request_screenshot ptr ptr +perry_geisterhand_request_tree ptr ptr +perry_geisterhand_request_value ptr i64,ptr +perry_has_work i32s +perry_i18n_format_currency ptr f64,i32s +perry_i18n_format_currency_default ptr f64 +perry_i18n_format_date ptr f64,i32s,i32s +perry_i18n_format_date_long ptr f64 +perry_i18n_format_date_short ptr f64 +perry_i18n_format_number ptr f64,i32s +perry_i18n_format_number_default ptr f64 +perry_i18n_format_percent ptr f64,i32s +perry_i18n_format_percent_default ptr f64 +perry_i18n_format_raw ptr f64 +perry_i18n_format_time ptr f64,i32s +perry_i18n_format_time_default ptr f64 +perry_i18n_get_locale_index i32s +perry_i18n_init void ptr,ptr,i32u,i32s +perry_i18n_interpolate ptr ptr,ptr,ptr,i32u +perry_i18n_locale_index_for i32s ptr,i32s +perry_i18n_plural_category i32s i32s,f64 +perry_i18n_set_currencies void ptr,i32u +perry_i18n_set_locale_index void i32s +perry_i18n_set_plural_locales void ptr,ptr,i32u +perry_init_guard_check_and_set i32s i64 +perry_ios_classes_registered void +perry_ios_get_connected_scene i64 +perry_key_content_hash i64 ptr +perry_macos_bundle_chdir void +perry_media_create_player i64 i64 +perry_media_destroy void f64 +perry_media_get_current_time f64 f64 +perry_media_get_duration f64 f64 +perry_media_get_state i64 f64 +perry_media_is_playing f64 f64 +perry_media_on_state_change void f64,f64 +perry_media_on_time_update void f64,f64 +perry_media_pause void f64 +perry_media_play void f64 +perry_media_seek void f64,f64 +perry_media_set_now_playing void f64,i64,i64,i64,i64 +perry_media_set_rate void f64,f64 +perry_media_set_volume void f64,f64 +perry_media_stop void f64 +perry_next_wake_ms f64 +perry_object_header_abi_revision i32u +perry_plugin_count i64 +perry_plugin_discover f64 f64 +perry_plugin_emit f64 i64,f64,f64 +perry_plugin_emit_event f64 f64,f64 +perry_plugin_emit_hook f64 f64,f64 +perry_plugin_get_config f64 i64,f64 +perry_plugin_init void +perry_plugin_invoke_tool f64 f64,f64 +perry_plugin_list_hooks f64 +perry_plugin_list_plugins f64 +perry_plugin_list_tools f64 +perry_plugin_load i64 f64 +perry_plugin_log f64 i64,i64,f64 +perry_plugin_off f64 i64,f64,f64 +perry_plugin_on f64 i64,f64,f64 +perry_plugin_register_hook f64 i64,f64,f64 +perry_plugin_register_hook_ex f64 i64,f64,f64,i64,i64 +perry_plugin_register_route f64 i64,f64,f64 +perry_plugin_register_service f64 i64,f64,f64,f64 +perry_plugin_register_tool f64 i64,f64,f64,f64 +perry_plugin_set_config f64 f64,f64 +perry_plugin_set_metadata f64 i64,f64,f64,f64 +perry_plugin_unload void i64 +perry_plugin_unregister_hook f64 i64,f64,f64 +perry_plugin_unregister_route f64 i64,f64 +perry_plugin_unregister_service f64 i64,f64 +perry_plugin_unregister_tool f64 i64,f64 +perry_poll i32s +perry_register_static_plugin void ptr,f64 +perry_resolve_static_plugin f64 ptr +perry_runtime_widget_init void +perry_safe_area_insets_make f64 f64,f64,f64,f64 +perry_set_wake_callback void ptr,ptr +perry_store_census_arm void +perry_string_header_abi_revision i32u +perry_stub_warn_ffi void ptr,ptr,ptr +perry_transition_cache_base ptr +perry_tui_state_setter_trampoline f64 ptr,f64 +perry_update_notify_startup void ptr,i32s +perry_updater_check_headers ptr f64 +perry_updater_check_url ptr f64 +perry_updater_get_config ptr +perry_updater_record_response i64 f64 +perry_updater_refresh_due i64 +perry_watchos_classes_registered void +setInterval i64 i64,f64 diff --git a/crates/perry/Cargo.toml b/crates/perry/Cargo.toml index 274bf6692e6..147648b92e0 100644 --- a/crates/perry/Cargo.toml +++ b/crates/perry/Cargo.toml @@ -155,6 +155,8 @@ native-cli = [] # links LLVM 22 statically and ships self-contained. See that crate's manifest # for why this is load-bearing rather than an optimization. llvm-inprocess = ["perry-codegen/llvm-inprocess"] +# Standalone WASI target (#11375). Off by default; see perry-codegen's manifest. +target-wasi = ["perry-codegen/target-wasi"] # Codegen backends for non-native targets. Each enables one backend crate; # `all-codegen-backends` (in full-cli) turns them all on so the default build is diff --git a/scripts/runtime_abi_check.py b/scripts/runtime_abi_check.py index ba236a8dea0..bc014fef11e 100755 --- a/scripts/runtime_abi_check.py +++ b/scripts/runtime_abi_check.py @@ -628,6 +628,128 @@ def check(codegen_files: dict[str, str], rust_files: dict[str, str]) -> Report: return rep +# --------------------------------------------------------------------------- +# wasm32 runtime ABI table (#11378): the runtime's real signatures, as the +# wasm32 lowering needs them to adapt codegen's call sites. +# --------------------------------------------------------------------------- +WASM_ABI_TABLE = ROOT / "crates/perry-codegen/src/wasm32/runtime_abi.tsv" +# Crates linked into a WASI program. UI/host-only crates never are. +WASM_ABI_CRATES = ("perry-runtime/", "perry-stdlib/", "perry-ext-") + +SIGNED_BASES = {"i64", "i32", "i16", "i8", "isize", "c_int", "c_long", "c_longlong", + "c_short", "c_schar", "ssize_t", "intptr_t", "c_char"} + + +def base_type(ty: str, aliases: dict[str, set[str]], depth: int = 0) -> str: + """The Rust scalar a type reduces to (`*` for any pointer-like).""" + t = " ".join(ty.split()) + if depth > 8: + return t + if PTR_PREFIX_RE.match(t) or FN_PTR_RE.match(t) or re.match(r"^(?:[\w:]+::)?(Option|NonNull|Box)\s*<", t): + return "*" + last = t.split("::")[-1] + if last in RUST_SCALARS: + return last + targets = aliases.get(last) + if targets and len(targets) == 1: + return base_type(next(iter(targets)), aliases, depth + 1) + return t + + +def wasm_token(ty: str, aliases: dict[str, set[str]]) -> str | None: + """wasm32 ABI token for one runtime type, or None if unclassifiable. + + Tokens carry what an adapter needs: the IR type and, for integers that + are narrower than codegen's i64, how to widen them back.""" + cls = classify(ty, aliases) + if cls.startswith("?"): + return None + base = base_type(ty, aliases) + if cls == PTRW: + if base == "*": + return "ptr" + return "isize" if base in SIGNED_BASES else "usize" + if cls in (I32, I16, I8): + return f"{cls}{'s' if base in SIGNED_BASES else 'u'}" + if cls == NEVER: + return "void" + return cls # f64, f32, i64, bool, void + + +def emit_wasm_abi(rust_files: dict[str, str]) -> str: + defs, aliases = parse_rust(rust_files) + lines = [ + "# GENERATED by scripts/runtime_abi_check.py --emit-wasm-abi; do not edit.", + "# The runtime's real extern \"C\" signatures as wasm32 sees them", + "# (#11378): symbolreturncomma-separated params.", + ] + for name in sorted(defs): + rfs = [rf for rf in defs[name] if any(f"crates/{c}" in rf.where for c in WASM_ABI_CRATES)] + if not rfs: + continue + rf = min(rfs, key=lambda r: definition_rank(r.where)) + toks = [wasm_token(p, aliases) for p in rf.params] + ret = wasm_token(rf.ret, aliases) + if ret is None or any(t is None for t in toks): + continue # unclassifiable: the lowering leaves such calls alone + lines.append(f"{name}\t{ret}\t{','.join(toks)}") + return "\n".join(lines) + "\n" + + +TOKEN_IR = { + "f64": "double", "f32": "float", "i64": "i64", "i32s": "i32", "i32u": "i32", + "i16s": "i16", "i16u": "i16", "i8s": "i8", "i8u": "i8", "bool": "i1", + "ptr": "ptr", "usize": "i32", "isize": "i32", "void": "void", +} +IR_CALL_RE = re.compile( + r"(?:^|\s)(?:(?:tail|musttail|notail) )?(?:call|invoke) (?:[a-z_]+cc |cc \d+ )?(\S+) @([\w.$]+)\(" +) +IR_DECL_RE = re.compile(r"^declare (?:[^@]* )?(\S+) @([\w.$]+)\((.*?)\)", re.M) +IR_DEFINE_RE = re.compile(r"^define [^@]*@([\w.$\"]+)\(", re.M) + + +def check_ir(paths: list[pathlib.Path]) -> int: + """Verify emitted wasm32 IR: every call/declare of a runtime symbol uses + the runtime's real types (the adapter pass's invariant), and report + external callees the table does not cover.""" + table = {} + for line in WASM_ABI_TABLE.read_text().splitlines(): + if line and not line.startswith("#"): + name, ret, params = (line.split("\t") + [""])[:3] + table[name] = (TOKEN_IR[ret], [TOKEN_IR[p] for p in params.split(",") if p]) + bad, uncovered, calls = [], defaultdict(set), 0 + for path in paths: + text = path.read_text(errors="replace") + defined = {d.strip('"') for d in IR_DEFINE_RE.findall(text)} + for m in IR_DECL_RE.finditer(text): + ret, name, params = m.groups() + if name in table: + got = (ret, [p.strip() for p in split_top(params)] if params.strip() else []) + if got != (table[name][0], table[name][1]): + bad.append(f"{path.name}: declare {name}: {got} vs runtime {table[name]}") + for line in text.splitlines(): + for m in IR_CALL_RE.finditer(line): + ret, name = m.groups() + if name.startswith("llvm.") or name in defined: + continue + if name not in table: + uncovered[name].add(path.name) + continue + calls += 1 + o = line.index("(", m.end() - 1) + c = balanced(line, o) + args = [a.strip().split(" ", 1)[0] for a in split_top(line[o + 1 : c - 1])] if c > 0 else None + if (ret, args) != table[name]: + bad.append(f"{path.name}: call {name}: {ret}({', '.join(args or [])}) vs runtime {table[name]}") + print(f"runtime_abi_check --ir: {len(paths)} modules, {calls} runtime calls checked, " + f"{len(bad)} mismatched, {len(uncovered)} external callees not in the table") + for b in bad[:40]: + print(" MISMATCH " + b) + for name, files in sorted(uncovered.items()): + print(f" uncovered {name} ({len(files)} modules)") + return 1 if bad else 0 + + def load(paths) -> dict[str, str]: out = {} for p in paths: @@ -776,9 +898,31 @@ def main() -> int: ap.add_argument("--list", metavar="CATEGORY", choices=CATEGORIES) ap.add_argument("--json", metavar="PATH") ap.add_argument("--self-test", action="store_true") + ap.add_argument("--ir", nargs="+", metavar="LL", + help="verify emitted wasm32 .ll files against the runtime ABI table") + ap.add_argument("--emit-wasm-abi", action="store_true", + help=f"regenerate {WASM_ABI_TABLE.relative_to(ROOT)}") + ap.add_argument("--check-wasm-abi", action="store_true", + help="fail if the checked-in wasm32 ABI table is stale") args = ap.parse_args() if args.self_test: return self_test() + if args.ir: + return check_ir([pathlib.Path(p) for p in args.ir]) + if args.emit_wasm_abi or args.check_wasm_abi: + table = emit_wasm_abi(load(rust_sources())) + if args.emit_wasm_abi: + WASM_ABI_TABLE.parent.mkdir(parents=True, exist_ok=True) + WASM_ABI_TABLE.write_text(table) + print(f"wrote {WASM_ABI_TABLE.relative_to(ROOT)} ({table.count(chr(10)) - 3} symbols)") + return 0 + current = WASM_ABI_TABLE.read_text() if WASM_ABI_TABLE.exists() else "" + if current != table: + print(f"{WASM_ABI_TABLE.relative_to(ROOT)} is stale; regenerate with " + "scripts/runtime_abi_check.py --emit-wasm-abi", file=sys.stderr) + return 1 + print(f"{WASM_ABI_TABLE.relative_to(ROOT)} is current") + return 0 rep = check(load(codegen_sources()), load(rust_sources())) print(summary(rep)) if args.list: diff --git a/scripts/wasi_ir_check.sh b/scripts/wasi_ir_check.sh new file mode 100755 index 00000000000..85d2b232dc5 --- /dev/null +++ b/scripts/wasi_ir_check.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env bash +# +# Compile sample programs for the standalone WASI target and verify the +# emitted wasm32 IR against the runtime's real signatures (#11378): +# +# cargo build --profile perry-dev -p perry --features target-wasi +# ./scripts/wasi_ir_check.sh target/perry-dev/perry +# +# Linking a `.wasm` is phase 4 (#11379), so the compile is expected to fail +# at the link step for now; what this checks is the codegen output, which +# `PERRY_SAVE_LL` captures before that. A program that produces no IR fails, +# and so does one whose objects fail to compile ("Error compiling module") or +# whose compile times out or is killed: only the link may fail. +# +# Liveness: every saved module must carry the wasm32 triple (a host compile +# would pass the ABI check vacuously against nothing) and the ABI check must +# have verified a non-zero number of runtime calls. + +set -euo pipefail + +PERRY="$(realpath "${1:?usage: $0 }")" +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +OUT="$(mktemp -d)" +trap 'rm -rf "$OUT"' EXIT + +# A fixed spread of the gap suite: strings, arrays, closures, classes, maps, +# JSON, regex, async, errors. Named, not globbed, so the sample is stable. +SAMPLES=( + test_gap_array_methods + test_gap_string_methods + test_gap_closures + test_gap_class_advanced + test_gap_map_set_extended + test_gap_json_advanced + test_gap_regexp_advanced + test_gap_async_advanced + test_gap_error_extensions + test_gap_object_methods +) + +# The IR is saved before object emission, so saved IR alone does not show the +# objects compiled: reject a failure before the (expected) link failure. +require_objects() { + if grep -q "Error compiling module" "$2"; then + echo "::error::$1 failed to compile to wasm32 objects" >&2 + grep -A6 "Error compiling module" "$2" >&2 + exit 1 + fi +} + +n=0 +for name in "${SAMPLES[@]}"; do + src="$ROOT/test-files/$name.ts" + if [[ ! -f "$src" ]]; then + echo "::error::sample $name.ts no longer exists; update SAMPLES in $0" >&2 + exit 1 + fi + dir="$OUT/$name" + mkdir -p "$dir" + # The link step fails until #11379; the IR is saved before it runs. + status=0 + ( cd "$dir" && PERRY_SAVE_LL="$dir" PERRY_NO_AUTO_OPTIMIZE=1 PERRY_NO_CACHE=1 \ + timeout 300 "$PERRY" compile "$src" -o "$dir/out" --target wasi >"$dir/log.txt" 2>&1 ) || status=$? + # A link failure is an ordinary error exit; a timeout (124) or a death by + # signal (128+N) can land after the IR is saved and before objects exist. + if ((status == 124 || status >= 128)); then + echo "::error::$name compile did not finish (exit $status)" >&2 + tail -20 "$dir/log.txt" >&2 + exit 1 + fi + if ! compgen -G "$dir/*.ll" >/dev/null; then + echo "::error::$name produced no IR" >&2 + tail -20 "$dir/log.txt" >&2 + exit 1 + fi + require_objects "$name" "$dir/log.txt" + for ll in "$dir"/*.ll; do + if ! grep -q '^target triple = "wasm32-' "$ll"; then + echo "::error::$ll is not wasm32 IR; was perry built with --features target-wasi?" >&2 + exit 1 + fi + n=$((n + 1)) + done +done + +# A mismatch exits 1: capture it so the report still prints, then fail. +status=0 +report="$(python3 "$ROOT/scripts/runtime_abi_check.py" --ir "$OUT"/*/*.ll)" || status=$? +echo "$report" +if ((status != 0)); then + exit "$status" +fi +calls="$(sed -n 's/.*modules, \([0-9]*\) runtime calls checked.*/\1/p' <<<"$report" | head -1)" +if [[ -z "$calls" || "$calls" -eq 0 ]]; then + echo "::error::the ABI check verified no runtime calls; nothing was checked" >&2 + exit 1 +fi +if grep -q "MISMATCH" <<<"$report"; then + exit 1 +fi +echo "OK: $n wasm32 modules, $calls runtime calls match the runtime's signatures"