pub struct ModuleLoader;Implementations§
Source§impl ModuleLoader
impl ModuleLoader
Sourcepub fn init_thread_local(cx: &JSContext)
pub fn init_thread_local(cx: &JSContext)
Register module hooks on servo’s JSContext (parasitic mode). Gets JSRuntime from the JSContext pointer via JS_GetRuntime.
pub fn eval_module( cx: &mut JSContext, source: &str, filename: &str, global_setup: Option<unsafe fn(&mut JSContext, Handle<'_, *mut JSObject>)>, post_eval_hook: Option<fn(&mut JSContext) -> bool>, ) -> Result<JsValue, JsError>
Sourcepub fn eval_module_then<R>(
cx: &mut JSContext,
source: &str,
filename: &str,
global_setup: Option<unsafe fn(&mut JSContext, Handle<'_, *mut JSObject>)>,
post_eval_hook: Option<fn(&mut JSContext) -> bool>,
after_eval: impl FnOnce(&mut JSContext) -> R,
) -> Result<R, JsError>
pub fn eval_module_then<R>( cx: &mut JSContext, source: &str, filename: &str, global_setup: Option<unsafe fn(&mut JSContext, Handle<'_, *mut JSObject>)>, post_eval_hook: Option<fn(&mut JSContext) -> bool>, after_eval: impl FnOnce(&mut JSContext) -> R, ) -> Result<R, JsError>
Evaluate source as an ES module under a fresh realm, then invoke
after_eval while that realm is still alive. Used by bao test so the
test runner (globalThis.__run_bun_tests()) executes against the same
global object that registered the suites.
after_eval receives the live JSContext (still inside AutoRealm),
so it can read state installed by the module.
Sourcepub fn eval_module_in_realm(
cx: &mut JSContext,
source: &str,
filename: &str,
post_eval_hook: Option<fn(&mut JSContext) -> bool>,
global: Handle<'_, *mut JSObject>,
) -> Result<JsValue, JsError>
pub fn eval_module_in_realm( cx: &mut JSContext, source: &str, filename: &str, post_eval_hook: Option<fn(&mut JSContext) -> bool>, global: Handle<'_, *mut JSObject>, ) -> Result<JsValue, JsError>
Evaluate source as an ES module INSIDE AN EXISTING realm’s global.
Realm-per-context variant (ECMA-262/Node semantics): the caller passes
the persistent realm global — obtained from
JsContext::ensure_realm_global / bao_engine::context::thread_realm_global
— and this fn does NOT create a new global and does NOT apply
global_setup. The realm already has its globals installed (by the
first eval / ensure_realm_global); a module evaluated here shares
globalThis, require singletons, and registered handlers with every
script eval on the same context.
Module compile/link/evaluate + microtask drain + post_eval_hook all run
inside AutoRealm(global), matching eval_module exactly minus the
realm-creation block. Returns the module evaluation result.
Sourcepub fn eval_module_in_realm_then<R>(
cx: &mut JSContext,
source: &str,
filename: &str,
post_eval_hook: Option<fn(&mut JSContext) -> bool>,
global: Handle<'_, *mut JSObject>,
after_eval: impl FnOnce(&mut JSContext) -> R,
) -> Result<R, JsError>
pub fn eval_module_in_realm_then<R>( cx: &mut JSContext, source: &str, filename: &str, post_eval_hook: Option<fn(&mut JSContext) -> bool>, global: Handle<'_, *mut JSObject>, after_eval: impl FnOnce(&mut JSContext) -> R, ) -> Result<R, JsError>
Realm-per-context variant of eval_module_then: evaluate source as
an ES module inside the existing realm’s global, then invoke
after_eval while that realm is still entered. Used by bao test so
globalThis.__run_bun_tests() executes against the same realm that
registered the suites (which, in realm-per-context, is also the same
realm as every prior script eval).
See [eval_module_in_realm] for the realm contract (caller-supplied
global; no JS_NewGlobalObject; no global_setup).
Auto Trait Implementations§
impl Freeze for ModuleLoader
impl RefUnwindSafe for ModuleLoader
impl Send for ModuleLoader
impl Sync for ModuleLoader
impl Unpin for ModuleLoader
impl UnsafeUnpin for ModuleLoader
impl UnwindSafe for ModuleLoader
Blanket Implementations§
Source§impl<T> AsCtxPtr for Twhere
T: ?Sized,
impl<T> AsCtxPtr for Twhere
T: ?Sized,
Source§fn as_ctx_ptr(&self) -> *mut Selfwhere
Self: Sized,
fn as_ctx_ptr(&self) -> *mut Selfwhere
Self: Sized,
self’s address as *mut Self for deferred-task / scopeguard /
ref_guard ctx slots. The closures/trampolines deref it as shared
(&*p) — every method they reach is &self post-R-2, so no write
provenance is required; the *mut spelling is purely to match the
existing DerefOnDrop / HasAutoFlush / RefCount ABI.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
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
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 more