diff options
Diffstat (limited to 'core/runtime/jsruntime.rs')
-rw-r--r-- | core/runtime/jsruntime.rs | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/core/runtime/jsruntime.rs b/core/runtime/jsruntime.rs index e6b531d61..2e473e7c9 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); + let (op_state, ops) = Self::create_opstate(&mut options, init_mode); let op_state = Rc::new(RefCell::new(op_state)); // Collect event-loop middleware @@ -844,25 +844,29 @@ impl JsRuntime { for extension in &extensions { let maybe_esm_entry_point = extension.get_esm_entry_point(); - for file_source in extension.get_esm_sources() { - self - .load_side_module( - &ModuleSpecifier::parse(file_source.specifier)?, - None, - ) - .await?; + 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?; + } } if let Some(entry_point) = maybe_esm_entry_point { esm_entrypoints.push(entry_point); } - for file_source in extension.get_js_sources() { - realm.execute_script( - self.v8_isolate(), - file_source.specifier, - file_source.load()?, - )?; + 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()?, + )?; + } } if extension.is_core { @@ -880,16 +884,6 @@ 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 @@ -973,11 +967,20 @@ impl JsRuntime { } /// Initializes ops of provided Extensions - fn create_opstate(options: &mut RuntimeOptions) -> (OpState, Vec<OpDecl>) { + fn create_opstate( + options: &mut RuntimeOptions, + init_mode: InitMode, + ) -> (OpState, Vec<OpDecl>) { // Add built-in extension - options - .extensions - .insert(0, crate::ops_builtin::core::init_ext()); + 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()); + } let ops = Self::collect_ops(&mut options.extensions); |