diff options
Diffstat (limited to 'crates/rebel-parse')
-rw-r--r-- | crates/rebel-parse/src/ast.rs | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/crates/rebel-parse/src/ast.rs b/crates/rebel-parse/src/ast.rs index ef27ecf..16df2ad 100644 --- a/crates/rebel-parse/src/ast.rs +++ b/crates/rebel-parse/src/ast.rs @@ -20,19 +20,20 @@ pub type Body<'a> = Vec<BodyStmt<'a>>; #[derive(Debug, Clone, PartialEq, Eq)] pub enum BodyStmt<'a> { - Assign { - left: Box<TypedExpr<'a>>, - op: Option<OpBinary>, - right: Box<Expr<'a>>, - }, + Assign { dest: TypedExpr<'a>, expr: Expr<'a> }, } impl<'a> BodyStmt<'a> { - pub(crate) fn assign(left: TypedExpr<'a>, op: Option<OpBinary>, right: Expr<'a>) -> Self { - BodyStmt::Assign { - left: Box::new(left), - op, - right: Box::new(right), + pub(crate) fn assign(dest: TypedExpr<'a>, op: Option<OpBinary>, expr: Expr<'a>) -> Self { + match op { + Some(op) => { + let dest_expr = dest.expr.clone(); + BodyStmt::Assign { + dest, + expr: Expr::binary(dest_expr, op, expr), + } + } + None => BodyStmt::Assign { dest, expr }, } } } |