pub struct JsHost {
pub funcs: Vec<FuncDef>,
pub tries: Vec<TryDef>,
pub error: Option<String>,
pub exc: Option<Value>,
pub signal: Option<Signal>,
pub nextticks: VecDeque<Task>,
pub microtasks: VecDeque<Task>,
pub macrotasks: Vec<Timer>,
/* private fields */
}Expand description
The JavaScript runtime.
Fields§
§funcs: Vec<FuncDef>Function templates, indexed by def id.
tries: Vec<TryDef>try/catch/finally block templates, indexed by try id.
error: Option<String>§exc: Option<Value>The in-flight thrown value, if any (JS throw).
signal: Option<Signal>§nextticks: VecDeque<Task>process.nextTick callbacks (drained before promise microtasks).
microtasks: VecDeque<Task>Promise-reaction / queueMicrotask microtasks.
macrotasks: Vec<Timer>setTimeout/setInterval/setImmediate macrotasks.
Implementations§
Source§impl JsHost
impl JsHost
pub fn new() -> JsHost
Sourcepub fn proto_of(&self, v: &Value) -> Option<Value>
pub fn proto_of(&self, v: &Value) -> Option<Value>
The [[Prototype]] of a heap value, if explicitly linked.
Sourcepub fn set_proto(&mut self, v: &Value, proto: Value)
pub fn set_proto(&mut self, v: &Value, proto: Value)
Set v’s [[Prototype]] to proto. Null links the object as an explicit
null-prototype object (recorded so instanceof Object reads false);
undefined just clears any link without the null marker.
Sourcepub fn has_null_proto(&self, v: &Value) -> bool
pub fn has_null_proto(&self, v: &Value) -> bool
Whether v’s [[Prototype]] was explicitly set to null.
pub fn object_proto(&self) -> Value
Sourcepub fn tag_proto_class(&mut self, proto: &Value, class_val: Value)
pub fn tag_proto_class(&mut self, proto: &Value, class_val: Value)
Record that the prototype object proto belongs to the class constructor
class_val (so instances can recover their constructor).
Sourcepub fn class_of(&self, obj: &Value) -> Option<Value>
pub fn class_of(&self, obj: &Value) -> Option<Value>
The class constructor value nearest in obj’s prototype chain, if any.
Sourcepub fn ctor_name(&self, obj: &Value) -> String
pub fn ctor_name(&self, obj: &Value) -> String
The constructor display name of obj for util.inspect (empty ⇒ plain
object, no prefix).
Sourcepub fn fn_prop(&self, v: &Value, name: &str) -> Option<Value>
pub fn fn_prop(&self, v: &Value, name: &str) -> Option<Value>
A function’s own-property table (created on demand).
Sourcepub fn class_static(&self, class_val: &Value, name: &str) -> Option<Value>
pub fn class_static(&self, class_val: &Value, name: &str) -> Option<Value>
A class static member, inherited down the constructor chain: a subclass
sees its superclass’s static methods/fields (Sub.create → Base.create).
pub fn set_fn_prop(&mut self, v: &Value, name: &str, val: Value)
Sourcepub fn builtin_static(&self, ns: &str, name: &str) -> Option<Value>
pub fn builtin_static(&self, ns: &str, name: &str) -> Option<Value>
A user-assigned static on a builtin namespace (Error.prepareStackTrace).
Sourcepub fn set_builtin_static(&mut self, ns: &str, name: &str, val: Value)
pub fn set_builtin_static(&mut self, ns: &str, name: &str, val: Value)
Assign a static on a builtin namespace (persists across fresh Builtin
handles for the same namespace).
pub fn fn_prop_keys(&self, v: &Value) -> Vec<String>
Sourcepub fn set_accessor(
&mut self,
owner: &Value,
key: &str,
get: Option<Value>,
set: Option<Value>,
)
pub fn set_accessor( &mut self, owner: &Value, key: &str, get: Option<Value>, set: Option<Value>, )
Install an accessor (get, set) for key on the object owner.
Sourcepub fn own_accessor(
&self,
owner: &Value,
key: &str,
) -> Option<(Option<Value>, Option<Value>)>
pub fn own_accessor( &self, owner: &Value, key: &str, ) -> Option<(Option<Value>, Option<Value>)>
The accessor (get, set) for key directly on owner (no chain walk).
Sourcepub fn new_symbol(&mut self, desc: Option<String>) -> Value
pub fn new_symbol(&mut self, desc: Option<String>) -> Value
A fresh unique Symbol(desc) value.
Sourcepub fn symbol_for(&mut self, key: &str) -> Value
pub fn symbol_for(&mut self, key: &str) -> Value
The shared Symbol.for(key) value (interned by description).
Sourcepub fn well_known_iterator(&mut self) -> Value
pub fn well_known_iterator(&mut self) -> Value
The well-known Symbol.iterator (a fixed shared symbol whose internal
property key is @@iterator).
Sourcepub fn well_known_async_iterator(&mut self) -> Value
pub fn well_known_async_iterator(&mut self) -> Value
The well-known Symbol.asyncIterator (internal key @@asyncIterator).
Sourcepub fn property_key(&self, v: &Value) -> String
pub fn property_key(&self, v: &Value) -> String
The internal property-key string for a value used as a key. A Symbol
maps to a stable per-symbol string so symbol-keyed props round-trip;
Symbol.iterator maps to the sentinel @@iterator.
pub fn null(&self) -> Value
pub fn is_null(&self, v: &Value) -> bool
pub fn program_offsets(&self) -> (usize, usize)
pub fn load_program(&mut self, funcs: Vec<FuncDef>, tries: Vec<TryDef>)
pub fn try_def(&self, id: usize) -> Option<TryDef>
pub fn alloc(&mut self, obj: JsObj) -> Value
pub fn get(&self, v: &Value) -> Option<&JsObj>
pub fn get_mut(&mut self, v: &Value) -> Option<&mut JsObj>
pub fn new_str(&mut self, s: impl Into<String>) -> Value
pub fn new_array(&mut self, items: Vec<Value>) -> Value
pub fn new_object(&mut self, props: IndexMap<String, Value>) -> Value
pub fn as_str(&self, v: &Value) -> Option<String>
Sourcepub fn frame_depth(&self) -> usize
pub fn frame_depth(&self) -> usize
Number of active call frames (the debugger’s step-depth reference).
Sourcepub fn set_cur_line(&mut self, line: u32)
pub fn set_cur_line(&mut self, line: u32)
Record the source line the innermost frame is executing (DAP line hook).
Sourcepub fn dbg_stack(&self) -> Vec<(String, u32)>
pub fn dbg_stack(&self) -> Vec<(String, u32)>
The call stack as (frame name, line) pairs, innermost first — for the DAP
stackTrace. owner carries the function name where known.
Sourcepub fn dbg_locals(&self) -> Vec<(String, String)>
pub fn dbg_locals(&self) -> Vec<(String, String)>
The innermost frame’s locals as (name, inspect) pairs — for DAP variables.
Sourcepub fn read_name(&self, name: &str) -> Option<Value>
pub fn read_name(&self, name: &str) -> Option<Value>
Scope-chain read: local + enclosing chain, then globals.
pub fn read_global(&self, name: &str) -> Option<Value>
Sourcepub fn set_name(&mut self, name: &str, val: Value)
pub fn set_name(&mut self, name: &str, val: Value)
Assign to an existing binding up the scope chain, else create a global (JS assignment to an undeclared name targets the global object).
Sourcepub fn declare_name(&mut self, name: &str, val: Value)
pub fn declare_name(&mut self, name: &str, val: Value)
Declare a new binding in the current scope (let/const/var).
pub fn set_global(&mut self, name: &str, val: Value)
pub fn del_name(&mut self, name: &str)
pub fn current_this(&self) -> Option<Value>
pub fn current_env_capture(&self) -> Env
pub fn current_new_target(&self) -> Option<Value>
Sourcepub fn super_context(&self) -> (Option<Value>, Vec<(String, Value)>)
pub fn super_context(&self) -> (Option<Value>, Vec<(String, Value)>)
The (parent_ctor, this_class_fields) for a running constructor’s
super(...), derived from the frame’s home class.
Sourcepub fn super_resolve(&self, name: &str) -> SuperRef
pub fn super_resolve(&self, name: &str) -> SuperRef
Resolve super.name to either the parent-prototype getter (to be invoked
by the caller, outside any host borrow) or a directly-usable value.
pub fn take_error(&mut self) -> Option<String>
pub fn raise_str(&mut self, class: &str, msg: &str) -> String
Source§impl JsHost
impl JsHost
Sourcepub fn truthy(&self, v: &Value) -> bool
pub fn truthy(&self, v: &Value) -> bool
JS truthiness: false / 0 / -0 / NaN / “” / null / undefined are falsy.
Sourcepub fn to_number(&self, v: &Value) -> f64
pub fn to_number(&self, v: &Value) -> f64
Coerce to a number (ToNumber): the arithmetic-context conversion.
Sourcepub fn str_of(&self, v: &Value) -> String
pub fn str_of(&self, v: &Value) -> String
String(v) — the string-coercion form (raw, unquoted).
Sourcepub fn console_format(&self, v: &Value) -> String
pub fn console_format(&self, v: &Value) -> String
console.log-style rendering of a top-level argument: bare strings print
raw; everything else uses inspect.
Sourcepub fn inspect(&self, v: &Value) -> String
pub fn inspect(&self, v: &Value) -> String
util.inspect-style rendering (nested; strings quoted).
Sourcepub fn callable_name(&self, v: &Value) -> String
pub fn callable_name(&self, v: &Value) -> String
The .name of any callable (function/class/builtin/bound).
Sourcepub fn strict_eq(&self, a: &Value, b: &Value) -> bool
pub fn strict_eq(&self, a: &Value, b: &Value) -> bool
Strict equality (===): same type and same value, no coercion.
Sourcepub fn is_nullish(&self, v: &Value) -> bool
pub fn is_nullish(&self, v: &Value) -> bool
Whether v is null or undefined.
Sourcepub fn loose_eq(&self, a: &Value, b: &Value) -> bool
pub fn loose_eq(&self, a: &Value, b: &Value) -> bool
Loose equality (==) following the ECMAScript Abstract Equality Comparison.
Objects reduce via ToPrimitive (which for our heap objects is always their
string toString), so [0] == "0" is true (string compare of "0") but
[0] == "" is false — never a number coercion of the object.
Sourcepub fn arith(
&mut self,
op: NumOp,
a: &Value,
b: &Value,
) -> Result<Value, String>
pub fn arith( &mut self, op: NumOp, a: &Value, b: &Value, ) -> Result<Value, String>
The numeric-hook arithmetic/relational fallback for non-native operands
(called by fusevm when at least one operand isn’t Int/Float).
Sourcepub fn bitwise(
&mut self,
tag: i64,
a: &Value,
b: &Value,
) -> Result<Value, String>
pub fn bitwise( &mut self, tag: i64, a: &Value, b: &Value, ) -> Result<Value, String>
Bitwise/shift ops with JS ToInt32/ToUint32 semantics — or true arbitrary-width BigInt bitwise when both operands are BigInt (mixing a BigInt with a Number throws, matching Node).
Sourcepub fn is_bigint_val(&self, v: &Value) -> bool
pub fn is_bigint_val(&self, v: &Value) -> bool
Whether v is a heap BigInt.
Sourcepub fn as_bigint(&self, v: &Value) -> Option<BigInt>
pub fn as_bigint(&self, v: &Value) -> Option<BigInt>
The BigInt value of v (a heap bigint), else None.
Sourcepub fn new_bigint(&mut self, b: BigInt) -> Value
pub fn new_bigint(&mut self, b: BigInt) -> Value
Allocate a heap BigInt.
Source§impl JsHost
impl JsHost
Source§impl JsHost
impl JsHost
Sourcepub fn ensure_error_protos(&mut self)
pub fn ensure_error_protos(&mut self)
Lazily build the builtin error prototype chain: Error.prototype → Object.prototype, and every specific error’s prototype → Error.prototype.
Populated once; instances link to these so e instanceof TypeError and
e instanceof Error both hold.
Source§impl JsHost
impl JsHost
Sourcepub fn new_promise(&mut self) -> Value
pub fn new_promise(&mut self) -> Value
Allocate a fresh pending promise, returning its heap value.
pub fn promise_id(&self, v: &Value) -> Option<u32>
pub fn promise_state(&self, id: u32) -> PromiseState
pub fn promise_value(&self, id: u32) -> Value
pub fn promise_mark_handled(&mut self, id: u32)
Sourcepub fn take_reactions(&mut self, id: u32) -> Vec<PromiseReaction>
pub fn take_reactions(&mut self, id: u32) -> Vec<PromiseReaction>
Take the pending reactions of a promise (called on settle).
pub fn add_reaction(&mut self, id: u32, r: PromiseReaction)
pub fn settle_promise(&mut self, id: u32, state: PromiseState, value: Value)
pub fn queue_micro(&mut self, cb: Value, args: Vec<Value>)
pub fn queue_nexttick(&mut self, cb: Value, args: Vec<Value>)
Sourcepub fn queue_micro_native(&mut self, f: Box<dyn FnOnce() -> Result<(), String>>)
pub fn queue_micro_native(&mut self, f: Box<dyn FnOnce() -> Result<(), String>>)
Schedule a native (Rust) microtask — used by Promise reactions and async resumption.
pub fn add_timer( &mut self, delay: f64, callback: Value, args: Vec<Value>, ) -> u64
Sourcepub fn incr_handle(&mut self)
pub fn incr_handle(&mut self)
Register a live handle (listener/socket/ref’d resource) keeping the loop alive.
Sourcepub fn decr_handle(&mut self)
pub fn decr_handle(&mut self)
Release a handle; the loop exits once this reaches 0 with empty queues.
pub fn open_handles(&self) -> usize
pub fn cancel_timer(&mut self, id: u64)
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for JsHost
impl !Send for JsHost
impl !Sync for JsHost
impl !UnwindSafe for JsHost
impl Freeze for JsHost
impl Unpin for JsHost
impl UnsafeUnpin for JsHost
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.