From df8834dddc96d028a4b9303e01ff2220950560b7 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Tue, 26 Mar 2019 20:44:35 -0400 Subject: [PATCH] FIX: Grouped Expressions store their position properly now. --- src/ast/mod.rs | 7 +++---- src/ast/walk.rs | 2 +- src/build/mod.rs | 2 +- src/parse/mod.rs | 7 ++++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 761dd5e..7b1d7fc 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -639,8 +639,7 @@ pub enum Expression { // Complex Expressions Copy(CopyDef), Range(RangeDef), - // TODO(jwall): This should really store it's position :-( - Grouped(Box), + Grouped(Box, Position), Format(FormatDef), Include(IncludeDef), Import(ImportDef), @@ -662,7 +661,7 @@ impl Expression { &Expression::Binary(ref def) => &def.pos, &Expression::Copy(ref def) => &def.pos, &Expression::Range(ref def) => &def.pos, - &Expression::Grouped(ref expr) => expr.pos(), + &Expression::Grouped(_, ref pos) => pos, &Expression::Format(ref def) => &def.pos, &Expression::Call(ref def) => &def.pos, &Expression::Func(ref def) => &def.pos, @@ -695,7 +694,7 @@ impl fmt::Display for Expression { &Expression::Range(_) => { write!(w, "")?; } - &Expression::Grouped(_) => { + &Expression::Grouped(_, _) => { write!(w, "()")?; } &Expression::Format(_) => { diff --git a/src/ast/walk.rs b/src/ast/walk.rs index 1910d8d..4758453 100644 --- a/src/ast/walk.rs +++ b/src/ast/walk.rs @@ -91,7 +91,7 @@ impl<'a> AstWalker<'a> { self.walk_expression(def.left.as_mut()); self.walk_expression(def.right.as_mut()); } - Expression::Grouped(ref mut expr) => { + Expression::Grouped(ref mut expr, _) => { self.walk_expression(expr); } Expression::Func(ref mut def) => self.walk_expression(def.fields.as_mut()), diff --git a/src/build/mod.rs b/src/build/mod.rs index d4a6485..172ffa1 100644 --- a/src/build/mod.rs +++ b/src/build/mod.rs @@ -1905,7 +1905,7 @@ impl<'a> FileBuilder<'a> { &Expression::Binary(ref def) => self.eval_binary(def, scope), &Expression::Copy(ref def) => self.eval_copy(def, scope), &Expression::Range(ref def) => self.eval_range(def, scope), - &Expression::Grouped(ref expr) => self.eval_expr(expr, scope), + &Expression::Grouped(ref expr, _) => self.eval_expr(expr, scope), &Expression::Format(ref def) => self.eval_format(def, scope), &Expression::Call(ref def) => self.eval_call(def, scope), &Expression::Func(ref def) => { diff --git a/src/parse/mod.rs b/src/parse/mod.rs index eb83232..8dc4b66 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -299,20 +299,21 @@ make_fn!( ) ); -fn expression_to_grouped_expression(e: Expression) -> Expression { - Expression::Grouped(Box::new(e)) +fn expression_to_grouped_expression(e: Expression, pos: Position) -> Expression { + Expression::Grouped(Box::new(e), pos) } make_fn!( grouped_expression, Expression>, do_each!( + pos => pos, _ => punct!("("), expr => do_each!( expr => trace_parse!(expression), _ => must!(punct!(")")), (expr) ), - (expression_to_grouped_expression(expr)) + (expression_to_grouped_expression(expr, pos)) ) );