Node for TupleLiteral
This commit is contained in:
parent
215e2bbb0d
commit
2efac109ef
@ -112,7 +112,7 @@ pub enum ExpressionType {
|
||||
BoolLiteral(bool),
|
||||
BinExp(BinOp, Box<Node<Expression>>, Box<Node<Expression>>),
|
||||
PrefixExp(PrefixOp, Box<Node<Expression>>),
|
||||
TupleLiteral(Vec<Expression>),
|
||||
TupleLiteral(Vec<Node<Expression>>),
|
||||
Value(Rc<String>),
|
||||
NamedStruct {
|
||||
name: Rc<String>,
|
||||
|
@ -672,7 +672,10 @@ impl Parser {
|
||||
match inner.len() {
|
||||
0 => Ok(Expression(TupleLiteral(vec![]), None)),
|
||||
1 => Ok(inner.pop().unwrap()),
|
||||
_ => Ok(Expression(TupleLiteral(inner), None)),
|
||||
_ => {
|
||||
let inner: Vec<Node<Expression>> = inner.into_iter().map(|ex| ex.into()).collect();
|
||||
Ok(Expression(TupleLiteral(inner), None))
|
||||
}
|
||||
}
|
||||
};
|
||||
self.restrictions.no_struct_literal = old_struct_value;
|
||||
@ -1224,12 +1227,12 @@ mod parse_tests {
|
||||
parse_test!("()", AST(vec![exst!(TupleLiteral(vec![]))]));
|
||||
parse_test!("(\"hella\", 34)", AST(vec![exst!(
|
||||
TupleLiteral(
|
||||
vec![ex!(s r#""hella""#), ex!(s "34")]
|
||||
vec![ex!(s r#""hella""#).into(), ex!(s "34").into()]
|
||||
)
|
||||
)]));
|
||||
parse_test!("((1+2), \"slough\")", AST(vec![exst!(TupleLiteral(vec![
|
||||
ex!(binexp!("+", NatLiteral(1), NatLiteral(2))),
|
||||
ex!(StringLiteral(rc!(slough))),
|
||||
ex!(binexp!("+", NatLiteral(1), NatLiteral(2))).into(),
|
||||
ex!(StringLiteral(rc!(slough))).into(),
|
||||
]))]))
|
||||
}
|
||||
|
||||
|
@ -142,7 +142,7 @@ impl Expression {
|
||||
f: Box::new(f.reduce(symbol_table)),
|
||||
args: arguments.iter().map(|arg| arg.reduce(symbol_table)).collect(),
|
||||
},
|
||||
TupleLiteral(exprs) => Expr::Tuple(exprs.iter().map(|e| e.reduce(symbol_table)).collect()),
|
||||
TupleLiteral(exprs) => Expr::Tuple(exprs.iter().map(|e| e.node().reduce(symbol_table)).collect()),
|
||||
IfExpression { discriminator, body } => reduce_if_expression(discriminator, body, symbol_table),
|
||||
Lambda { params, body, .. } => reduce_lambda(params, body, symbol_table),
|
||||
NamedStruct { .. } => Expr::UnimplementedSigilValue,
|
||||
|
Loading…
Reference in New Issue
Block a user