diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-03-18 18:30:04 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-18 18:30:04 -0400 |
commit | 3c9771deb2d615c47a2570023039c6a71f1c774b (patch) | |
tree | 759ce45a956798ddae58108286eafee29414d913 /core/extensions.rs | |
parent | a5ad3a44b5476909f12ae90501d8c7c451669be6 (diff) |
Reland "perf(core): preserve ops between snapshots (#18080)" (#18272)
Relanding 4b6305f4f25fc76f974bbdcc9cdb139d5ab8f5f4
Diffstat (limited to 'core/extensions.rs')
-rw-r--r-- | core/extensions.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/core/extensions.rs b/core/extensions.rs index 728ebd512..2a578429b 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 { @@ -494,6 +499,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); @@ -511,6 +525,7 @@ impl ExtensionBuilder { initialized: false, enabled: true, name: self.name, + force_op_registration: self.force_op_registration, deps, } } @@ -532,6 +547,7 @@ impl ExtensionBuilder { enabled: true, name: self.name, deps, + force_op_registration: self.force_op_registration, } } } |