File tree 2 files changed +28
-0
lines changed
2 files changed +28
-0
lines changed Original file line number Diff line number Diff line change 1
1
mod ast;
2
2
mod ast_factory;
3
3
mod precedence;
4
+ mod visit;
4
5
5
6
pub use ast:: * ;
6
7
pub use ast_factory:: * ;
Original file line number Diff line number Diff line change
1
+ // based on https://rust-unofficial.github.io/patterns/patterns/behavioural/visitor.html
2
+
3
+ use crate :: ast:: * ;
4
+
5
+ macro_rules! visit_list {
6
+ ( $visitor: ident, $method: ident, $list: expr) => {
7
+ todo!( )
8
+ } ;
9
+ }
10
+
11
+ pub trait Visitor < ' ast > : Sized {
12
+ fn visit_chunk ( & mut self , chunk : & ' ast Chunk ) {
13
+ walk_block ( self , & chunk. body )
14
+ }
15
+
16
+ fn visit_statement ( & mut self , statement : & ' ast Statement ) {
17
+ walk_statement ( self , & statement)
18
+ }
19
+ }
20
+
21
+ pub fn walk_block < ' ast , V : Visitor < ' ast > > ( visitor : & mut V , block : & ' ast Block ) {
22
+ visit_list ! ( visitor, visit_statement, block. statements)
23
+ }
24
+
25
+ pub fn walk_statement < ' ast , V : Visitor < ' ast > > ( visitor : & mut V , statement : & ' ast Statement ) {
26
+ todo ! ( )
27
+ }
You can’t perform that action at this time.
0 commit comments