deimos-lang/ast-generator/src/walk.rs

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