This commit is contained in:
2026-04-11 03:50:43 -04:00
parent 29316e6353
commit 229b026573
16 changed files with 266 additions and 136 deletions
+36 -3
View File
@@ -1,11 +1,44 @@
mod block;
mod expr;
mod ident;
mod item;
mod module;
mod statement;
pub use block::*;
mod ty;
pub use expr::*;
pub use ident::*;
pub use item::*;
pub use module::*;
pub use statement::*;
pub use ty::*;
use super::{DisplayCtx, FmtNode, Id, Lit, Parsable, ParseCtx, Token};
use super::{DisplayCtx, FmtNode, Id, Lit, Node, NodeVec, Parsable, ParseCtx, Token};
use crate::io::CompilerMsg;
def_nodes! {
exprs: Expr,
idents: Ident,
statements: Statement,
blocks: Module,
lits: Lit,
types: Type,
items: Item,
}
macro_rules! def_nodes {
{$($field:ident: $ty:ident,)*} => {
#[derive(Default)]
pub struct Nodes {
$(pub $field: NodeVec<$ty>,)*
}
$(impl Node for $ty {
fn vec(nodes: &Nodes) -> &NodeVec<Self> {
&nodes.$field
}
fn vec_mut(nodes: &mut Nodes) -> &mut NodeVec<Self> {
&mut nodes.$field
}
})*
};
}
use def_nodes;