use crate::common::{
span::Spanned,
data::Data,
};
#[derive(Debug, Clone, PartialEq)]
pub enum AST {
Symbol,
Data(Data),
Block(Vec<Spanned<AST>>),
Assign {
pattern: Box<Spanned<AST>>, expression: Box<Spanned<AST>>,
},
Lambda {
pattern: Box<Spanned<AST>>,
expression: Box<Spanned<AST>>,
},
Call {
fun: Box<Spanned<AST>>,
arg: Box<Spanned<AST>>,
},
Print(Box<Spanned<AST>>),
}
impl AST {
pub fn assign(
pattern: Spanned<AST>,
expression: Spanned<AST>
) -> AST {
AST::Assign {
pattern: Box::new(pattern),
expression: Box::new(expression)
}
}
pub fn lambda(
pattern: Spanned<AST>,
expression: Spanned<AST>
) -> AST {
AST::Lambda {
pattern: Box::new(pattern),
expression: Box::new(expression)
}
}
pub fn call(
fun: Spanned<AST>,
arg: Spanned<AST>
) -> AST {
AST::Call {
fun: Box::new(fun),
arg: Box::new(arg)
}
}
}