ayin/src/ast/helpers.rs
2025-12-19 00:12:50 +02:00

41 lines
766 B
Rust

use super::types::*;
pub fn name(str: &str) -> Name {
Name(str.into())
}
pub fn label(str: &str) -> Label {
Label(str.into())
}
pub fn var(str: &str) -> Expr {
Expr::Var(name(str))
}
pub fn record(rec: Vec<(&str, Expr)>) -> Expr {
Expr::Record(
rec.into_iter()
.map(|(lbl, val)| (Label(lbl.into()), val))
.collect(),
)
}
pub fn assign(name: &str, expr: Expr) -> Statement {
Statement::Let(define_expr(name, expr))
}
pub fn stmt_expr(expr: Expr) -> Statement {
Statement::Expr(expr)
}
pub fn define_expr(name: &str, expr: Expr) -> Definition {
Definition {
mutable: false,
name: name.into(),
expr,
}
}
pub fn func(func: Fn) -> Expr {
Expr::Func(Box::new(func))
}