summaryrefslogtreecommitdiff
path: root/core/extensions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/extensions.rs')
-rw-r--r--core/extensions.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/core/extensions.rs b/core/extensions.rs
index bba37ca3e..801f5f1a6 100644
--- a/core/extensions.rs
+++ b/core/extensions.rs
@@ -53,6 +53,7 @@ pub struct OpDecl {
pub is_unstable: bool,
pub is_v8: bool,
pub fast_fn: Option<Box<dyn FastFunction>>,
+ pub force_registration: bool,
}
impl OpDecl {
@@ -240,6 +241,7 @@ macro_rules! extension {
#[inline(always)]
#[allow(unused_variables)]
+ #[allow(clippy::redundant_closure_call)]
fn with_customizer(ext: &mut $crate::ExtensionBuilder) {
$( ($customizer_fn)(ext); )?
}
@@ -325,6 +327,7 @@ pub struct Extension {
enabled: bool,
name: &'static str,
deps: Option<&'static [&'static str]>,
+ force_op_registration: bool,
}
// Note: this used to be a trait, but we "downgraded" it to a single concrete type
@@ -394,6 +397,7 @@ impl Extension {
let mut ops = self.ops.take()?;
for op in ops.iter_mut() {
op.enabled = self.enabled && op.enabled;
+ op.force_registration = self.force_op_registration;
}
Some(ops)
}
@@ -447,6 +451,7 @@ pub struct ExtensionBuilder {
event_loop_middleware: Option<Box<OpEventLoopFn>>,
name: &'static str,
deps: &'static [&'static str],
+ force_op_registration: bool,
}
impl ExtensionBuilder {
@@ -511,6 +516,15 @@ impl ExtensionBuilder {
self
}
+ /// Mark that ops from this extension should be added to `Deno.core.ops`
+ /// unconditionally. This is useful is some ops are not available
+ /// during snapshotting, as ops are not registered by default when a
+ /// `JsRuntime` is created with an existing snapshot.
+ pub fn force_op_registration(&mut self) -> &mut Self {
+ self.force_op_registration = true;
+ self
+ }
+
/// Consume the [`ExtensionBuilder`] and return an [`Extension`].
pub fn take(self) -> Extension {
let js_files = Some(self.js);
@@ -528,6 +542,7 @@ impl ExtensionBuilder {
initialized: false,
enabled: true,
name: self.name,
+ force_op_registration: self.force_op_registration,
deps,
}
}
@@ -549,6 +564,7 @@ impl ExtensionBuilder {
enabled: true,
name: self.name,
deps,
+ force_op_registration: self.force_op_registration,
}
}
}