From 5e48eb2deedd971081a256216cff6a5c179c4a62 Mon Sep 17 00:00:00 2001 From: greg Date: Fri, 6 Jul 2018 03:17:37 -0700 Subject: [PATCH] Broken - some pass abstraction work --- schala-codegen/src/lib.rs | 4 ++-- schala-lang/src/lib.rs | 2 +- schala-repl/src/language.rs | 8 +++++++- schala-repl/src/lib.rs | 22 +++++++++++----------- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/schala-codegen/src/lib.rs b/schala-codegen/src/lib.rs index 0c02bf2..5ed41be 100644 --- a/schala-codegen/src/lib.rs +++ b/schala-codegen/src/lib.rs @@ -65,8 +65,8 @@ pub fn derive_programming_language_interface(input: TokenStream) -> TokenStream let mut chain = pass_chain![self, options; #(#passes),* ]; chain(input) } - fn get_passes(&self) -> Vec { - vec![ #(#pass_names.to_string()),* ] + fn get_passes(&self) -> Vec { + vec![ #(PassDescriptor { name: #pass_names.to_string(), debug_options: vec![] }),* ] } } }; diff --git a/schala-lang/src/lib.rs b/schala-lang/src/lib.rs index e07f954..f1d9481 100644 --- a/schala-lang/src/lib.rs +++ b/schala-lang/src/lib.rs @@ -87,7 +87,7 @@ fn parsing(_handle: &mut Schala, input: Vec, comp: Option<&mu Some(ref s) if s == "compact" => comp.add_artifact(TraceArtifact::new("ast", format!("{:?}", ast))), Some(ref s) if s == "expanded" => comp.add_artifact(TraceArtifact::new("ast", format!("{:#?}", ast))), Some(ref s) if s == "trace" => comp.add_artifact(TraceArtifact::new_parse_trace(trace)), - Some(ref x) => println!("Bad parsing option: {}", x), + Some(ref x) => println!("Bad parsing debug option: {}", x), }; }); ast.map_err(|err| err.msg) diff --git a/schala-repl/src/language.rs b/schala-repl/src/language.rs index 90979de..500a65a 100644 --- a/schala-repl/src/language.rs +++ b/schala-repl/src/language.rs @@ -10,6 +10,12 @@ pub struct EvalOptions { pub debug_passes: HashMap, } +#[derive(Debug, Hash, PartialEq)] +pub struct PassDescriptor { + pub name: String, + pub debug_options: Vec +} + #[derive(Debug, Serialize, Deserialize)] pub struct PassDebugDescriptor { pub opts: Vec, @@ -127,7 +133,7 @@ pub trait ProgrammingLanguageInterface { fn get_language_name(&self) -> String; fn get_source_file_suffix(&self) -> String; - fn get_passes(&self) -> Vec { + fn get_passes(&self) -> Vec { vec![] } fn handle_custom_interpreter_directives(&mut self, _commands: &Vec<&str>) -> Option { diff --git a/schala-repl/src/lib.rs b/schala-repl/src/lib.rs index 3c7edfb..bc9a7cc 100644 --- a/schala-repl/src/lib.rs +++ b/schala-repl/src/lib.rs @@ -112,7 +112,7 @@ fn run_noninteractive(filename: &str, languages: Vec Some( passes.into_iter() - .map(|p| { - if self.options.debug_passes.contains_key(&p) { + .map(|desc| { + if self.options.debug_passes.contains_key(&desc.name) { let color = "green"; - format!("*{}", p.color(color)) + format!("*{}", desc.name.color(color)) } else { - p + desc.name } }) .intersperse(format!(" -> ")) @@ -453,16 +453,16 @@ impl Repl { None => return Some(format!("Must specify a stage to debug")), }; let pass_opt = commands.get(3); - if let Some(stage) = passes.iter().find(|stage_name| **stage_name == debug_pass) { + if let Some(desc) = passes.iter().find(|desc| desc.name == debug_pass) { let mut opts = vec![]; if let Some(opt) = pass_opt { opts.push(opt.to_string()); } - let msg = format!("{} debug for stage {}", if show { "Enabling" } else { "Disabling" }, debug_pass); + let msg = format!("{} debug for pass {}", if show { "Enabling" } else { "Disabling" }, debug_pass); if show { - self.options.debug_passes.insert(stage.clone(), PassDebugDescriptor { opts }); + self.options.debug_passes.insert(desc.name.clone(), PassDebugDescriptor { opts }); } else { - self.options.debug_passes.remove(stage); + self.options.debug_passes.remove(&desc.name); } Some(msg) } else {