From 215e2bbb0d518c83f6af763ddae1c23304c4f5c2 Mon Sep 17 00:00:00 2001 From: greg Date: Sat, 5 Jan 2019 16:02:30 -0800 Subject: [PATCH] PrefixOp have Node --- schala-lang/language/src/ast.rs | 2 +- schala-lang/language/src/parsing.rs | 7 ++++--- schala-lang/language/src/reduced_ast.rs | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/schala-lang/language/src/ast.rs b/schala-lang/language/src/ast.rs index 9517bd3..4286eeb 100644 --- a/schala-lang/language/src/ast.rs +++ b/schala-lang/language/src/ast.rs @@ -111,7 +111,7 @@ pub enum ExpressionType { StringLiteral(Rc), BoolLiteral(bool), BinExp(BinOp, Box>, Box>), - PrefixExp(PrefixOp, Box), + PrefixExp(PrefixOp, Box>), TupleLiteral(Vec), Value(Rc), NamedStruct { diff --git a/schala-lang/language/src/parsing.rs b/schala-lang/language/src/parsing.rs index 8e8b044..dd4738c 100644 --- a/schala-lang/language/src/parsing.rs +++ b/schala-lang/language/src/parsing.rs @@ -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())) }; diff --git a/schala-lang/language/src/reduced_ast.rs b/schala-lang/language/src/reduced_ast.rs index f70821d..cececab 100644 --- a/schala-lang/language/src/reduced_ast.rs +++ b/schala-lang/language/src/reduced_ast.rs @@ -391,8 +391,8 @@ impl BinOp { } impl PrefixOp { - fn reduce(&self, symbol_table: &SymbolTable, arg: &Box) -> Expr { + fn reduce(&self, symbol_table: &SymbolTable, arg: &Box>) -> 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)]} } }