diff options
Diffstat (limited to 'core/extensions.rs')
-rw-r--r-- | core/extensions.rs | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/core/extensions.rs b/core/extensions.rs index 94c4a2a79..9b4fb203a 100644 --- a/core/extensions.rs +++ b/core/extensions.rs @@ -23,23 +23,43 @@ pub enum ExtensionFileSourceCode { LoadedFromFsDuringSnapshot(PathBuf), } -impl ExtensionFileSourceCode { +#[derive(Clone, Debug)] +pub struct ExtensionFileSource { + pub specifier: &'static str, + pub code: ExtensionFileSourceCode, +} + +impl ExtensionFileSource { + fn find_non_ascii(s: &str) -> String { + s.chars().filter(|c| !c.is_ascii()).collect::<String>() + } + pub fn load(&self) -> Result<ModuleCode, Error> { - match self { - ExtensionFileSourceCode::IncludedInBinary(code) => Ok((*code).into()), + match &self.code { + ExtensionFileSourceCode::IncludedInBinary(code) => { + debug_assert!( + code.is_ascii(), + "Extension code must be 7-bit ASCII: {} (found {})", + self.specifier, + Self::find_non_ascii(code) + ); + Ok((*code).into()) + } ExtensionFileSourceCode::LoadedFromFsDuringSnapshot(path) => { let msg = || format!("Failed to read \"{}\"", path.display()); - Ok(std::fs::read_to_string(path).with_context(msg)?.into()) + let s = std::fs::read_to_string(path).with_context(msg)?; + debug_assert!( + s.is_ascii(), + "Extension code must be 7-bit ASCII: {} (found {})", + self.specifier, + Self::find_non_ascii(&s) + ); + Ok(s.into()) } } } } -#[derive(Clone, Debug)] -pub struct ExtensionFileSource { - pub specifier: &'static str, - pub code: ExtensionFileSourceCode, -} pub type OpFnRef = v8::FunctionCallback; pub type OpMiddlewareFn = dyn Fn(OpDecl) -> OpDecl; pub type OpStateFn = dyn FnOnce(&mut OpState); |