2020-09-03 18:32:22 -07:00
|
|
|
use crate::syn::ast::*;
|
|
|
|
|
|
|
|
|
|
pub trait Accept<V: Visit + ?Sized> {
|
|
|
|
|
fn accept(&self, visitor: &mut V) -> V::Out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub trait DefaultAccept<V: Visit + ?Sized> {
|
|
|
|
|
fn default_accept(&self, visitor: &mut V) -> V::Out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub trait Visit {
|
|
|
|
|
type Out;
|
|
|
|
|
|
2020-09-03 18:47:48 -07:00
|
|
|
fn visit_body(&mut self, body: &Body) -> Self::Out;
|
2020-09-03 18:32:22 -07:00
|
|
|
fn visit_stmt(&mut self, stmt: &Stmt) -> Self::Out;
|
|
|
|
|
fn visit_assign_stmt(&mut self, assign: &AssignStmt) -> Self::Out;
|
|
|
|
|
fn visit_lhs_expr(&mut self, lhs_expr: &LhsExpr) -> Self::Out;
|
|
|
|
|
fn visit_expr(&mut self, expr: &Expr) -> Self::Out;
|
|
|
|
|
fn visit_bin_expr(&mut self, expr: &BinExpr) -> Self::Out;
|
|
|
|
|
fn visit_un_expr(&mut self, expr: &UnExpr) -> Self::Out;
|
|
|
|
|
fn visit_call_expr(&mut self, expr: &CallExpr) -> Self::Out;
|
|
|
|
|
fn visit_index_expr(&mut self, expr: &IndexExpr) -> Self::Out;
|
|
|
|
|
fn visit_access_expr(&mut self, expr: &AccessExpr) -> Self::Out;
|
2020-09-18 16:39:06 -07:00
|
|
|
fn visit_fun_expr(&mut self, expr: &FunExpr) -> Self::Out;
|
2020-09-03 18:32:22 -07:00
|
|
|
fn visit_atom(&mut self, atom: &Atom) -> Self::Out;
|
|
|
|
|
}
|
2020-09-16 17:18:31 -07:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
copy/paste of default_accepts
|
|
|
|
|
|
|
|
|
|
fn visit_body(&mut self, body: &Body) -> Self::Out { DefaultAccept::default_accept(body, self); }
|
|
|
|
|
fn visit_stmt(&mut self, stmt: &Stmt) -> Self::Out { DefaultAccept::default_accept(stmt, self); }
|
|
|
|
|
fn visit_assign_stmt(&mut self, assign: &AssignStmt) -> Self::Out { DefaultAccept::default_accept(assign, self); }
|
|
|
|
|
fn visit_lhs_expr(&mut self, lhs_expr: &LhsExpr) -> Self::Out { DefaultAccept::default_accept(lhs_expr, self); }
|
|
|
|
|
fn visit_expr(&mut self, expr: &Expr) -> Self::Out { DefaultAccept::default_accept(expr, self); }
|
|
|
|
|
fn visit_bin_expr(&mut self, expr: &BinExpr) -> Self::Out { DefaultAccept::default_accept(expr, self); }
|
|
|
|
|
fn visit_un_expr(&mut self, expr: &UnExpr) -> Self::Out { DefaultAccept::default_accept(expr, self); }
|
|
|
|
|
fn visit_call_expr(&mut self, expr: &CallExpr) -> Self::Out { DefaultAccept::default_accept(expr, self); }
|
|
|
|
|
fn visit_index_expr(&mut self, expr: &IndexExpr) -> Self::Out { DefaultAccept::default_accept(expr, self); }
|
|
|
|
|
fn visit_access_expr(&mut self, expr: &AccessExpr) -> Self::Out { DefaultAccept::default_accept(expr, self); }
|
2020-09-18 16:39:06 -07:00
|
|
|
fn visit_fun_expr(&mut self, expr: &FunExpr) -> Self::Out { DefaultAccept::default_accept(expr, self); }
|
2020-09-16 17:18:31 -07:00
|
|
|
fn visit_atom(&mut self, atom: &Atom) -> Self::Out { DefaultAccept(atom, self); }
|
|
|
|
|
|
|
|
|
|
*/
|