summaryrefslogtreecommitdiff
path: root/core/extensions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/extensions.rs')
-rw-r--r--core/extensions.rs38
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);