From 3052f7d7a88afcaac64e2abd7c6c48dbfe63520b Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Mon, 25 May 2020 10:57:55 -0400 Subject: [PATCH] DEV: Improve the Walk trait a bit. --- src/ast/walk.rs | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/src/ast/walk.rs b/src/ast/walk.rs index fea500b..ea8a90c 100644 --- a/src/ast/walk.rs +++ b/src/ast/walk.rs @@ -104,10 +104,17 @@ pub trait Walker { self.walk_fieldset(&mut def.tuple); } Expression::Simple(ref mut val) => { - self.visit_value(val); + self.walk_value(val); } - Expression::Import(_) | Expression::Include(_) | Expression::Fail(_) => { - //noop + + Expression::Import(i) => { + self.visit_import(i); + } + Expression::Include(i) => { + self.visit_include(i); + } + Expression::Fail(f) => { + self.visit_fail(f); } Expression::Not(ref mut def) => { self.walk_expression(def.expr.as_mut()); @@ -118,6 +125,35 @@ pub trait Walker { } } + fn walk_value(&mut self, val: &mut Value) { + match val { + Value::Empty(_) + | Value::Symbol(_) + | Value::Boolean(_) + | Value::Int(_) + | Value::Float(_) + | Value::Str(_) => self.visit_value(val), + Value::Tuple(fs) => self.walk_fieldset(&mut fs.val), + Value::List(vs) => { + for e in &mut vs.elems { + self.walk_expression(e); + } + } + } + } + + fn visit_import(&mut self, i: &mut ImportDef) { + // noop by default; + } + + fn visit_include(&mut self, i: &mut IncludeDef) { + // noop by default; + } + + fn visit_fail(&mut self, f: &mut FailDef) { + // noop by default; + } + fn visit_value(&mut self, val: &mut Value); fn visit_expression(&mut self, expr: &mut Expression);