From fb5247e98f3d49319745ee2ff23ffd3d3444cedb Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Thu, 30 Aug 2018 19:20:17 -0500 Subject: [PATCH] FEATURE: Use offsets for errors when parsing an assert. --- example_errors/tuple_errors_test.ucg | 2 ++ src/build/mod.rs | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 example_errors/tuple_errors_test.ucg diff --git a/example_errors/tuple_errors_test.ucg b/example_errors/tuple_errors_test.ucg new file mode 100644 index 0000000..655aba7 --- /dev/null +++ b/example_errors/tuple_errors_test.ucg @@ -0,0 +1,2 @@ +assert |macro |; +assert |{ foo = hello world}|; \ No newline at end of file diff --git a/src/build/mod.rs b/src/build/mod.rs index a518c03..c0fa3e5 100644 --- a/src/build/mod.rs +++ b/src/build/mod.rs @@ -243,9 +243,8 @@ impl<'a> Builder<'a> { Ok(()) } - /// Evaluate an input string as UCG. - pub fn eval_string(&mut self, input: &str) -> Result, Box> { - match parse(Span::new(input)) { + fn eval_span(&mut self, input: Span) -> Result, Box> { + match parse(input) { Ok(stmts) => { //panic!("Successfully parsed {}", input); let mut out: Option> = None; @@ -268,6 +267,11 @@ impl<'a> Builder<'a> { } } + /// Evaluate an input string as UCG. + pub fn eval_string(&mut self, input: &str) -> Result, Box> { + self.eval_span(Span::new(input)) + } + /// Builds a ucg file at the named path. pub fn build_file(&mut self, name: &'a str) -> BuildResult { self.curr_file = Some(name); @@ -988,7 +992,12 @@ impl<'a> Builder<'a> { let expr = &tok.fragment; expr_as_stmt.push_str(expr); expr_as_stmt.push_str(";"); - let ok = match self.eval_string(&expr_as_stmt) { + let assert_input = Span { + fragment: &expr_as_stmt, + line: tok.pos.line as u32, + offset: tok.pos.column, + }; + let ok = match self.eval_span(assert_input) { Ok(v) => v, Err(e) => { // failure!