diff --git a/src/main.rs b/src/main.rs index 48258983cf..624eb951a6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -112,20 +112,25 @@ fn main() -> std::io::Result<()> { } if let Some(path) = std::env::args().nth(1) { - let parser_state = parser_state.borrow(); - let mut working_set = ParserWorkingSet::new(&*parser_state); + let parser_state = parser_state; let file = std::fs::read(&path)?; - let (block, err) = working_set.parse_file(&path, &file, false); + let (block, delta) = { + let parser_state = parser_state.borrow(); + let mut working_set = ParserWorkingSet::new(&*parser_state); + let (output, err) = working_set.parse_file(&path, &file, false); + if let Some(err) = err { + eprintln!("Error: {:?}", err); + std::process::exit(1); + } + (output, working_set.render()) + }; - if let Some(err) = err { - eprintln!("Error: {:?}", err); - std::process::exit(1); - } + ParserState::merge_delta(&mut *parser_state.borrow_mut(), delta); let state = State { - parser_state: &*parser_state, + parser_state: &*parser_state.borrow(), }; let stack = Stack::new(); diff --git a/src/tests.rs b/src/tests.rs index 49e7cdbc26..86048546ee 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -61,3 +61,13 @@ fn add_simple2() -> TestResult { fn broken_math() -> TestResult { fail_test("3 + ", "Incomplete") } + +#[test] +fn if_test1() -> TestResult { + run_test("if $true { 10 } else { 20 } ", "10") +} + +#[test] +fn if_test2() -> TestResult { + run_test("if $false { 10 } else { 20 } ", "20") +}