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());
|
|
}
|
|
}
|
|
}
|