diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-04-04 06:46:31 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-04 06:46:31 -0600 |
commit | a1764f7690cfdc3e42724fcad29ef954b7e576a4 (patch) | |
tree | 1b621ebd7a6ef50687eeb2061740895096136e8a /cli/module_loader.rs | |
parent | 2dc20168371e827b86e2ce0d1d7787139fba68f3 (diff) |
refactor(core): Improve ergonomics of managing ASCII strings (#18498)
This is a follow-on to the earlier work in reducing string copies,
mainly focused on ensuring that ASCII strings are easy to provide to the
JS runtime.
While we are replacing a 16-byte reference in a number of places with a
24-byte structure (measured via `std::mem::size_of`), the reduction in
copies wins out over the additional size of the arguments passed into
functions.
Benchmarking shows approximately the same if not slightly less wallclock
time/instructions retired, but I believe this continues to open up
further refactoring opportunities.
Diffstat (limited to 'cli/module_loader.rs')
-rw-r--r-- | cli/module_loader.rs | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/cli/module_loader.rs b/cli/module_loader.rs index 7f6101d80..b7df15e31 100644 --- a/cli/module_loader.rs +++ b/cli/module_loader.rs @@ -78,7 +78,7 @@ impl CliModuleLoader { fn load_prepared_module( &self, specifier: &ModuleSpecifier, - maybe_referrer: Option<ModuleSpecifier>, + maybe_referrer: Option<&ModuleSpecifier>, ) -> Result<ModuleCodeSource, AnyError> { if specifier.scheme() == "node" { unreachable!(); // Node built-in modules should be handled internally. @@ -92,7 +92,7 @@ impl CliModuleLoader { specifier, .. })) => Ok(ModuleCodeSource { - code: source.into(), + code: source.clone().into(), found_url: specifier.clone(), media_type: *media_type, }), @@ -107,7 +107,7 @@ impl CliModuleLoader { | MediaType::Unknown | MediaType::Cjs | MediaType::Mjs - | MediaType::Json => source.into(), + | MediaType::Json => source.clone().into(), MediaType::Dts | MediaType::Dcts | MediaType::Dmts => { Default::default() } @@ -154,7 +154,7 @@ impl CliModuleLoader { fn load_sync( &self, specifier: &ModuleSpecifier, - maybe_referrer: Option<ModuleSpecifier>, + maybe_referrer: Option<&ModuleSpecifier>, is_dynamic: bool, ) -> Result<ModuleSource, AnyError> { let code_source = if self.ps.npm_resolver.in_npm_package(specifier) { @@ -210,15 +210,15 @@ impl CliModuleLoader { // because we don't need it code_without_source_map(code_source.code) }; - Ok(ModuleSource { - code, - module_url_specified: specifier.to_string(), - module_url_found: code_source.found_url.to_string(), - module_type: match code_source.media_type { + Ok(ModuleSource::new_with_redirect( + match code_source.media_type { MediaType::Json => ModuleType::Json, _ => ModuleType::JavaScript, }, - }) + code, + specifier, + &code_source.found_url, + )) } } @@ -240,7 +240,7 @@ impl ModuleLoader for CliModuleLoader { fn load( &self, specifier: &ModuleSpecifier, - maybe_referrer: Option<ModuleSpecifier>, + maybe_referrer: Option<&ModuleSpecifier>, is_dynamic: bool, ) -> Pin<Box<deno_core::ModuleSourceFuture>> { // NOTE: this block is async only because of `deno_core` interface |