Merge pull request #688 from powdr-labs/visitor_for_fun_val_def

Visitor for FunctionValueDefinition
This commit is contained in:
chriseth
2023-10-10 14:42:55 +00:00
committed by GitHub

View File

@@ -79,3 +79,35 @@ impl<Expr: ExpressionVisitable<Expr>> ExpressionVisitable<Expr> for Identity<Exp
.try_for_each(move |item| item.visit_expressions(f, o))
}
}
impl<T> ExpressionVisitable<Expression<T>> for FunctionValueDefinition<T> {
fn visit_expressions_mut<F, B>(&mut self, f: &mut F, o: VisitOrder) -> ControlFlow<B>
where
F: FnMut(&mut Expression<T>) -> ControlFlow<B>,
{
match self {
FunctionValueDefinition::Mapping(e)
| FunctionValueDefinition::Query(e)
| FunctionValueDefinition::Expression(e) => e.visit_expressions_mut(f, o),
FunctionValueDefinition::Array(array) => array
.iter_mut()
.flat_map(|a| a.pattern.iter_mut())
.try_for_each(move |item| item.visit_expressions_mut(f, o)),
}
}
fn visit_expressions<F, B>(&self, f: &mut F, o: VisitOrder) -> ControlFlow<B>
where
F: FnMut(&Expression<T>) -> ControlFlow<B>,
{
match self {
FunctionValueDefinition::Mapping(e)
| FunctionValueDefinition::Query(e)
| FunctionValueDefinition::Expression(e) => e.visit_expressions(f, o),
FunctionValueDefinition::Array(array) => array
.iter()
.flat_map(|a| a.pattern().iter())
.try_for_each(move |item| item.visit_expressions(f, o)),
}
}
}