30 lines
559 B
Rust
Raw Normal View History

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
}