PrefixOp have Node

This commit is contained in:
greg 2019-01-05 16:02:30 -08:00
parent 2590def3be
commit 215e2bbb0d
3 changed files with 7 additions and 6 deletions

View File

@ -111,7 +111,7 @@ pub enum ExpressionType {
StringLiteral(Rc<String>),
BoolLiteral(bool),
BinExp(BinOp, Box<Node<Expression>>, Box<Node<Expression>>),
PrefixExp(PrefixOp, Box<Expression>),
PrefixExp(PrefixOp, Box<Node<Expression>>),
TupleLiteral(Vec<Expression>),
Value(Rc<String>),
NamedStruct {

View File

@ -581,8 +581,9 @@ impl Parser {
};
let expr = self.primary()?;
Ok(Expression(
ExpressionType::PrefixExp(PrefixOp::from_sigil(sigil.as_str()), bx!(expr)),
None))
ExpressionType::PrefixExp(PrefixOp::from_sigil(sigil.as_str()), bx!(expr.into())),
None
))
},
_ => self.call_expr()
}
@ -1161,7 +1162,7 @@ mod parse_tests {
($op:expr, $lhs:expr, $rhs:expr) => { BinExp(BinOp::from_sigil($op), bx!(Expression($lhs, None).into()), bx!(Expression($rhs, None).into())) }
}
macro_rules! prefexp {
($op:expr, $lhs:expr) => { PrefixExp(PrefixOp::from_sigil($op), bx!(Expression($lhs, None))) }
($op:expr, $lhs:expr) => { PrefixExp(PrefixOp::from_sigil($op), bx!(Expression($lhs, None).into())) }
}
macro_rules! exst {
($expr_type:expr) => { Node::new(Statement::ExpressionStatement(Expression($expr_type, None).into())) };

View File

@ -391,8 +391,8 @@ impl BinOp {
}
impl PrefixOp {
fn reduce(&self, symbol_table: &SymbolTable, arg: &Box<Expression>) -> Expr {
fn reduce(&self, symbol_table: &SymbolTable, arg: &Box<Node<Expression>>) -> Expr {
let f = Box::new(Expr::Func(Func::BuiltIn(self.sigil().clone())));
Expr::Call { f, args: vec![arg.reduce(symbol_table)]}
Expr::Call { f, args: vec![arg.node().reduce(symbol_table)]}
}
}