use super::ast::{assign::AssignTarget, expr::Expr, literal::{LitSym, Literal}, paren::Paren};
pub(crate) trait Garbage {
fn garbage() -> Self;
}
macro_rules! garbage_tuple {
($($ty:ident),*) => {
impl<$($ty: Garbage),*> Garbage for ($($ty,)*) {
fn garbage() -> Self {
($($ty::garbage(),)*)
}
}
};
}
garbage_tuple!(A, B);
impl<T: Garbage, E> Garbage for Result<T, E> {
fn garbage() -> Self {
Ok(T::garbage())
}
}
impl<T: Garbage> Garbage for Option<T> {
fn garbage() -> Self {
Some(T::garbage())
}
}
impl Garbage for AssignTarget {
fn garbage() -> Self {
AssignTarget::Symbol(LitSym::garbage())
}
}
impl Garbage for Expr {
fn garbage() -> Self {
Expr::Literal(Literal::Symbol(LitSym::garbage()))
}
}
impl Garbage for LitSym {
fn garbage() -> Self {
Self { name: String::new(), span: 0..0 }
}
}
impl Garbage for Paren {
fn garbage() -> Self {
Self { expr: Box::new(Expr::garbage()), span: 0..0 }
}
}