diff --git a/schala-lang/src/lib.rs b/schala-lang/src/lib.rs index c28e93a..e4fc19c 100644 --- a/schala-lang/src/lib.rs +++ b/schala-lang/src/lib.rs @@ -51,8 +51,10 @@ impl ProgrammingLanguageInterface for Schala { //tokenzing let tokens = tokenizing::tokenize(input); - let token_string = tokens.iter().map(|t| format!("{:?}", t.token_type, t.offset.0, t.offset.1)).join(", "); - evaluation.add_artifact(TraceArtifact::new("tokens", token_string)); + if options.debug.tokens { + let token_string = tokens.iter().map(|t| format!("{:?}", t.token_type, t.offset.0, t.offset.1)).join(", "); + evaluation.add_artifact(TraceArtifact::new("tokens", token_string)); + } { let token_errors: Vec<&String> = tokens.iter().filter_map(|t| t.get_error()).collect(); @@ -64,12 +66,18 @@ impl ProgrammingLanguageInterface for Schala { // parsing let ast = match parsing::parse(tokens) { (Ok(ast), trace) => { - evaluation.add_artifact(TraceArtifact::new_parse_trace(trace)); - evaluation.add_artifact(TraceArtifact::new("ast", format!("{:?}", ast))); + if options.debug.parse_tree { + evaluation.add_artifact(TraceArtifact::new_parse_trace(trace)); + } + if options.debug.ast { + evaluation.add_artifact(TraceArtifact::new("ast", format!("{:#?}", ast))); + } ast }, (Err(err), trace) => { - evaluation.add_artifact(TraceArtifact::new_parse_trace(trace)); + if options.debug.parse_tree { + evaluation.add_artifact(TraceArtifact::new_parse_trace(trace)); + } return evaluation.output(Err(format!("Parse error: {:?}\n", err.msg))); } }; @@ -85,12 +93,18 @@ impl ProgrammingLanguageInterface for Schala { //typechecking match self.type_context.type_check_ast(&ast) { - Ok(ty) => evaluation.add_artifact(TraceArtifact::new("type_check", format!("{:?}", ty))), + Ok(ty) => { + if options.debug.type_checking { + evaluation.add_artifact(TraceArtifact::new("type_check", format!("{:?}", ty))); + } + }, Err(msg) => evaluation.add_artifact(TraceArtifact::new("type_check", msg)), }; let text = self.type_context.debug_symbol_table(); - evaluation.add_artifact(TraceArtifact::new("symbol_table", text)); + if options.debug.symbol_table { + evaluation.add_artifact(TraceArtifact::new("symbol_table", text)); + } let evaluation_outputs = self.state.evaluate(ast); let text_output: String = evaluation_outputs.into_iter().intersperse(format!("\n")).collect();