diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-09-06 16:50:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-06 16:50:49 +0200 |
commit | 803bdd37c759ee859d89e7e957d2764d0db72af4 (patch) | |
tree | 0c055191e134803b893af818f97f8b38eba8142f /core/modules.rs | |
parent | c821e8f2f1fb8ad5e9eb00854277cafc8c80b2f5 (diff) |
refactor(core): merge CoreIsolate and EsIsolate (#7370)
Diffstat (limited to 'core/modules.rs')
-rw-r--r-- | core/modules.rs | 85 |
1 files changed, 67 insertions, 18 deletions
diff --git a/core/modules.rs b/core/modules.rs index 817e1f25e..7b1e0c5a3 100644 --- a/core/modules.rs +++ b/core/modules.rs @@ -65,7 +65,7 @@ pub trait ModuleLoader { &self, specifier: &str, referrer: &str, - is_main: bool, + _is_main: bool, ) -> Result<ModuleSpecifier, ErrBox>; /// Given ModuleSpecifier, load its source code. @@ -98,6 +98,31 @@ pub trait ModuleLoader { } } +/// Placeholder structure used when creating +/// isolate that doesn't support module loading. +pub(crate) struct NoopModuleLoader; + +impl ModuleLoader for NoopModuleLoader { + fn resolve( + &self, + _specifier: &str, + _referrer: &str, + _is_main: bool, + ) -> Result<ModuleSpecifier, ErrBox> { + Err(ErrBox::error("Module loading is not supported")) + } + + fn load( + &self, + _module_specifier: &ModuleSpecifier, + _maybe_referrer: Option<ModuleSpecifier>, + _is_dyn_import: bool, + ) -> Pin<Box<ModuleSourceFuture>> { + async { Err(ErrBox::error("Module loading is not supported")) } + .boxed_local() + } +} + #[derive(Debug, Eq, PartialEq)] enum Kind { Main, @@ -520,9 +545,9 @@ impl fmt::Display for Deps { #[cfg(test)] mod tests { use super::*; - use crate::es_isolate::EsIsolate; use crate::js_check; use crate::BasicState; + use crate::CoreIsolate; use crate::StartupData; use futures::future::FutureExt; use std::error::Error; @@ -700,8 +725,12 @@ mod tests { fn test_recursive_load() { let loader = MockLoader::new(); let loads = loader.loads.clone(); - let mut isolate = - EsIsolate::new(loader, BasicState::new(), StartupData::None, false); + let mut isolate = CoreIsolate::new_with_loader( + loader, + BasicState::new(), + StartupData::None, + false, + ); let spec = ModuleSpecifier::resolve_url("file:///a.js").unwrap(); let a_id_fut = isolate.load_module(&spec, None); let a_id = futures::executor::block_on(a_id_fut).expect("Failed to load"); @@ -718,7 +747,7 @@ mod tests { ] ); - let state_rc = EsIsolate::state(&isolate); + let state_rc = CoreIsolate::state(&isolate); let state = state_rc.borrow(); let modules = &state.modules; assert_eq!(modules.get_id("file:///a.js"), Some(a_id)); @@ -763,8 +792,12 @@ mod tests { fn test_circular_load() { let loader = MockLoader::new(); let loads = loader.loads.clone(); - let mut isolate = - EsIsolate::new(loader, BasicState::new(), StartupData::None, false); + let mut isolate = CoreIsolate::new_with_loader( + loader, + BasicState::new(), + StartupData::None, + false, + ); let fut = async move { let spec = ModuleSpecifier::resolve_url("file:///circular1.js").unwrap(); @@ -783,7 +816,7 @@ mod tests { ] ); - let state_rc = EsIsolate::state(&isolate); + let state_rc = CoreIsolate::state(&isolate); let state = state_rc.borrow(); let modules = &state.modules; @@ -837,8 +870,12 @@ mod tests { fn test_redirect_load() { let loader = MockLoader::new(); let loads = loader.loads.clone(); - let mut isolate = - EsIsolate::new(loader, BasicState::new(), StartupData::None, false); + let mut isolate = CoreIsolate::new_with_loader( + loader, + BasicState::new(), + StartupData::None, + false, + ); let fut = async move { let spec = ModuleSpecifier::resolve_url("file:///redirect1.js").unwrap(); @@ -857,7 +894,7 @@ mod tests { ] ); - let state_rc = EsIsolate::state(&isolate); + let state_rc = CoreIsolate::state(&isolate); let state = state_rc.borrow(); let modules = &state.modules; @@ -902,8 +939,12 @@ mod tests { run_in_task(|mut cx| { let loader = MockLoader::new(); let loads = loader.loads.clone(); - let mut isolate = - EsIsolate::new(loader, BasicState::new(), StartupData::None, false); + let mut isolate = CoreIsolate::new_with_loader( + loader, + BasicState::new(), + StartupData::None, + false, + ); let spec = ModuleSpecifier::resolve_url("file:///main.js").unwrap(); let mut recursive_load = isolate.load_module(&spec, None).boxed_local(); @@ -948,8 +989,12 @@ mod tests { fn loader_disappears_after_error() { run_in_task(|mut cx| { let loader = MockLoader::new(); - let mut isolate = - EsIsolate::new(loader, BasicState::new(), StartupData::None, false); + let mut isolate = CoreIsolate::new_with_loader( + loader, + BasicState::new(), + StartupData::None, + false, + ); let spec = ModuleSpecifier::resolve_url("file:///bad_import.js").unwrap(); let mut load_fut = isolate.load_module(&spec, None).boxed_local(); let result = load_fut.poll_unpin(&mut cx); @@ -977,8 +1022,12 @@ mod tests { fn recursive_load_main_with_code() { let loader = MockLoader::new(); let loads = loader.loads.clone(); - let mut isolate = - EsIsolate::new(loader, BasicState::new(), StartupData::None, false); + let mut isolate = CoreIsolate::new_with_loader( + loader, + BasicState::new(), + StartupData::None, + false, + ); // In default resolution code should be empty. // Instead we explicitly pass in our own code. // The behavior should be very similar to /a.js. @@ -998,7 +1047,7 @@ mod tests { vec!["file:///b.js", "file:///c.js", "file:///d.js"] ); - let state_rc = EsIsolate::state(&isolate); + let state_rc = CoreIsolate::state(&isolate); let state = state_rc.borrow(); let modules = &state.modules; |