2019-07-11 10:06:07 -07:00
|
|
|
use std::error::Error;
|
2019-07-11 18:57:54 -07:00
|
|
|
use crate::ast::*;
|
2019-07-11 10:06:07 -07:00
|
|
|
|
2019-07-11 18:57:54 -07:00
|
|
|
pub type VResult = Result<(), Box<dyn Error>>;
|
2019-07-11 10:06:07 -07:00
|
|
|
|
2019-07-11 18:57:54 -07:00
|
|
|
pub trait ASTVisitor {
|
|
|
|
fn visit_expression(&mut self, _: &mut Expression) -> VResult {
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait Visitable {
|
|
|
|
fn visit(&mut self, v: &mut dyn ASTVisitor) -> VResult;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Visitable for AST {
|
|
|
|
fn visit(&mut self, v: &mut dyn ASTVisitor) -> VResult {
|
|
|
|
for s in self.0.iter_mut() {
|
|
|
|
s.node_mut().visit(v)?
|
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|
2019-07-11 10:06:07 -07:00
|
|
|
|
2019-07-11 18:57:54 -07:00
|
|
|
impl Visitable for Statement {
|
|
|
|
fn visit(&mut self, _v: &mut dyn ASTVisitor) -> VResult {
|
|
|
|
Ok(())
|
|
|
|
}
|
2019-07-11 10:06:07 -07:00
|
|
|
}
|