19 lines
		
	
	
		
			505 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			19 lines
		
	
	
		
			505 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
use crate::spec::BuildSpec;
 | 
						|
use proc_macro2::TokenStream;
 | 
						|
use quote::quote;
 | 
						|
 | 
						|
pub fn make_walk_fn(specs: &[BuildSpec]) -> TokenStream {
 | 
						|
    quote! {
 | 
						|
        use crate::ast::node::*;
 | 
						|
        use crate::ast::ast_node::*;
 | 
						|
 | 
						|
        pub fn walk_depth_first<'a>(node: &'a dyn AstNode<'a>, f: &mut impl FnMut(AstNodeRef<'a>)) {
 | 
						|
            use AstNodeRef::*;
 | 
						|
            for child in node.children() {
 | 
						|
                walk_depth_first(child, f);
 | 
						|
            }
 | 
						|
            f(node.as_node_ref());
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |