From 14fe4f9f1be4ba68bf91e6ebc35eeb385427b2ae Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Sat, 9 Jan 2021 23:26:50 +0800 Subject: [PATCH] Change resolve_ast return type. --- src/engine_api.rs | 12 +++++--- src/module/mod.rs | 55 +++++++++++++++++++++++++----------- src/module/resolvers/file.rs | 16 ++++++----- src/module/resolvers/mod.rs | 4 +-- 4 files changed, 57 insertions(+), 30 deletions(-) diff --git a/src/engine_api.rs b/src/engine_api.rs index db3e3efa..4f899fd7 100644 --- a/src/engine_api.rs +++ b/src/engine_api.rs @@ -936,11 +936,15 @@ impl Engine { while let Some(path) = imports.iter().next() { let path = path.clone(); - if let Some(module_ast) = - self.module_resolver - .resolve_ast(self, &path, Position::NONE)? + match self + .module_resolver + .resolve_ast(self, &path, Position::NONE) { - collect_imports(&module_ast, &mut resolver, &mut imports); + Some(Ok(module_ast)) => { + collect_imports(&module_ast, &mut resolver, &mut imports) + } + Some(err @ Err(_)) => return err, + None => (), } let module = shared_take_or_clone(self.module_resolver.resolve( diff --git a/src/module/mod.rs b/src/module/mod.rs index e7cda5d4..fab754e1 100644 --- a/src/module/mod.rs +++ b/src/module/mod.rs @@ -168,27 +168,48 @@ impl fmt::Debug for Module { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, - "Module({}\n modules: {}\n vars: {}\n functions: {}\n)", + "Module({}\n{}{}{})", if let Some(ref id) = self.id { - format!("id: {:?}", id) + format!("id: {:?},", id) } else { "".to_string() }, - self.modules - .keys() - .map(|m| m.as_str()) - .collect::>() - .join(", "), - self.variables - .iter() - .map(|(k, v)| format!("{}={:?}", k, v)) - .collect::>() - .join(", "), - self.functions - .values() - .map(|FuncInfo { func, .. }| func.to_string()) - .collect::>() - .join(", "), + if !self.modules.is_empty() { + format!( + " modules: {}\n", + self.modules + .keys() + .map(|m| m.as_str()) + .collect::>() + .join(", ") + ) + } else { + "".to_string() + }, + if !self.variables.is_empty() { + format!( + " vars: {}\n", + self.variables + .iter() + .map(|(k, v)| format!("{}={:?}", k, v)) + .collect::>() + .join(", ") + ) + } else { + "".to_string() + }, + if !self.functions.is_empty() { + format!( + " functions: {}\n", + self.functions + .values() + .map(|FuncInfo { func, .. }| func.to_string()) + .collect::>() + .join(", ") + ) + } else { + "".to_string() + } ) } } diff --git a/src/module/resolvers/file.rs b/src/module/resolvers/file.rs index f7e41386..4226eb71 100644 --- a/src/module/resolvers/file.rs +++ b/src/module/resolvers/file.rs @@ -233,22 +233,24 @@ impl ModuleResolver for FileModuleResolver { engine: &Engine, path: &str, pos: Position, - ) -> Result, Box> { + ) -> Option>> { // Construct the script file path let mut file_path = self.base_path.clone(); file_path.push(path); file_path.set_extension(&self.extension); // Force extension // Load the script file and compile it - let mut ast = engine.compile_file(file_path).map_err(|err| match *err { + match engine.compile_file(file_path).map_err(|err| match *err { EvalAltResult::ErrorSystem(_, err) if err.is::() => { Box::new(EvalAltResult::ErrorModuleNotFound(path.to_string(), pos)) } _ => Box::new(EvalAltResult::ErrorInModule(path.to_string(), err, pos)), - })?; - - ast.set_source(path); - - Ok(Some(ast)) + }) { + Ok(mut ast) => { + ast.set_source(path); + Some(Ok(ast)) + } + err @ Err(_) => Some(err), + } } } diff --git a/src/module/resolvers/mod.rs b/src/module/resolvers/mod.rs index 17e0c0ac..917c4941 100644 --- a/src/module/resolvers/mod.rs +++ b/src/module/resolvers/mod.rs @@ -44,7 +44,7 @@ pub trait ModuleResolver: SendSync { engine: &Engine, path: &str, pos: Position, - ) -> Result, Box> { - Ok(None) + ) -> Option>> { + None } }