This commit is contained in:
greg 2018-05-12 12:56:39 -07:00
parent e2703121d8
commit 1f6e6d9b31
2 changed files with 16 additions and 1 deletions

View File

@ -20,6 +20,7 @@ pub enum Stmt {
pub enum Expr {
Unit,
Lit(Lit),
Tuple(Vec<Expr>),
Func(Func),
Val(Rc<String>),
Call {
@ -88,7 +89,8 @@ impl Expression {
f: Box::new(f.reduce()),
args: arguments.iter().map(|arg| arg.reduce()).collect(),
},
e => Expr::UnimplementedSigilValue,
TupleLiteral(exprs) => Expr::Tuple(exprs.iter().map(|e| e.reduce()).collect()),
_ => Expr::UnimplementedSigilValue,
}
}
}

View File

@ -298,6 +298,18 @@ impl Expr {
UserDefined { name: None, .. } => format!("<function>"),
UserDefined { name: Some(name), .. } => format!("<function {}>", name),
},
Expr::Tuple(exprs) => {
let mut buf = String::new();
write!(buf, "(").unwrap();
for term in exprs.iter().map(|e| Some(e)).intersperse(None) {
match term {
Some(e) => write!(buf, "{}", e.to_repl()).unwrap(),
None => write!(buf, ", ").unwrap(),
};
}
write!(buf, ")").unwrap();
buf
},
_ => format!("{:?}", self),
}
}
@ -343,6 +355,7 @@ impl<'a> State<'a> {
},
Val(v) => self.value(v),
func @ Func(_) => Ok(func),
Tuple(exprs) => Ok(Tuple(exprs.into_iter().map(|expr| self.expression(expr)).collect::<Result<Vec<Expr>,_>>()?)),
Assign { box val, box expr } => {
let name = match val {
Expr::Val(name) => name,