summaryrefslogtreecommitdiff
path: root/core/runtime/jsruntime.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2023-06-25 08:35:31 +0100
committerGitHub <noreply@github.com>2023-06-25 09:35:31 +0200
commit28a4f3d0f5383695b1d49ccdc8b0f799a715b2c2 (patch)
treecd75b05db0bbfdadf3e565ca120d1f5d9ca39942 /core/runtime/jsruntime.rs
parenta181ceb0e3791c842db6e8e6f528cf9ce320642a (diff)
Reland "refactor(core): cleanup feature flags for js source inclusion" (#19519)
Relands #19463. This time the `ExtensionFileSourceCode` enum is preserved, so this effectively just splits feature `include_js_for_snapshotting` into `exclude_js_sources` and `runtime_js_sources`, adds a `force_include_js_sources` option on `extension!()`, and unifies `ext::Init_ops_and_esm()` and `ext::init_ops()` into `ext::init()`.
Diffstat (limited to 'core/runtime/jsruntime.rs')
-rw-r--r--core/runtime/jsruntime.rs59
1 files changed, 28 insertions, 31 deletions
diff --git a/core/runtime/jsruntime.rs b/core/runtime/jsruntime.rs
index 2e473e7c9..e6b531d61 100644
--- a/core/runtime/jsruntime.rs
+++ b/core/runtime/jsruntime.rs
@@ -505,7 +505,7 @@ impl JsRuntime {
maybe_load_callback: Option<ExtModuleLoaderCb>,
) -> JsRuntime {
let init_mode = InitMode::from_options(&options);
- let (op_state, ops) = Self::create_opstate(&mut options, init_mode);
+ let (op_state, ops) = Self::create_opstate(&mut options);
let op_state = Rc::new(RefCell::new(op_state));
// Collect event-loop middleware
@@ -844,29 +844,25 @@ impl JsRuntime {
for extension in &extensions {
let maybe_esm_entry_point = extension.get_esm_entry_point();
- if let Some(esm_files) = extension.get_esm_sources() {
- for file_source in esm_files {
- self
- .load_side_module(
- &ModuleSpecifier::parse(file_source.specifier)?,
- None,
- )
- .await?;
- }
+ for file_source in extension.get_esm_sources() {
+ self
+ .load_side_module(
+ &ModuleSpecifier::parse(file_source.specifier)?,
+ None,
+ )
+ .await?;
}
if let Some(entry_point) = maybe_esm_entry_point {
esm_entrypoints.push(entry_point);
}
- if let Some(js_files) = extension.get_js_sources() {
- for file_source in js_files {
- realm.execute_script(
- self.v8_isolate(),
- file_source.specifier,
- file_source.load()?,
- )?;
- }
+ for file_source in extension.get_js_sources() {
+ realm.execute_script(
+ self.v8_isolate(),
+ file_source.specifier,
+ file_source.load()?,
+ )?;
}
if extension.is_core {
@@ -884,6 +880,16 @@ impl JsRuntime {
panic!("{} not present in the module map", specifier)
})
};
+ {
+ let module_map_rc = self.module_map.clone();
+ let module_map = module_map_rc.borrow();
+ let handle = module_map.handles.get(mod_id).unwrap().clone();
+ let mut scope = realm.handle_scope(self.v8_isolate());
+ let handle = v8::Local::new(&mut scope, handle);
+ if handle.get_status() == v8::ModuleStatus::Evaluated {
+ continue;
+ }
+ }
let receiver = self.mod_evaluate(mod_id);
self.run_event_loop(false).await?;
receiver
@@ -967,20 +973,11 @@ impl JsRuntime {
}
/// Initializes ops of provided Extensions
- fn create_opstate(
- options: &mut RuntimeOptions,
- init_mode: InitMode,
- ) -> (OpState, Vec<OpDecl>) {
+ fn create_opstate(options: &mut RuntimeOptions) -> (OpState, Vec<OpDecl>) {
// Add built-in extension
- if init_mode == InitMode::FromSnapshot {
- options
- .extensions
- .insert(0, crate::ops_builtin::core::init_ops());
- } else {
- options
- .extensions
- .insert(0, crate::ops_builtin::core::init_ops_and_esm());
- }
+ options
+ .extensions
+ .insert(0, crate::ops_builtin::core::init_ext());
let ops = Self::collect_ops(&mut options.extensions);