41 lines
766 B
Rust
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))
|
|
}
|