From 568773274bd6eec0979d865ba101c86143a0718b Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 27 Apr 2024 21:27:54 +0200 Subject: rebel-parse: split combined assignment into assignment + binary op --- crates/rebel-parse/src/ast.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'crates/rebel-parse') 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>; #[derive(Debug, Clone, PartialEq, Eq)] pub enum BodyStmt<'a> { - Assign { - left: Box>, - op: Option, - right: Box>, - }, + Assign { dest: TypedExpr<'a>, expr: Expr<'a> }, } impl<'a> BodyStmt<'a> { - pub(crate) fn assign(left: TypedExpr<'a>, op: Option, right: Expr<'a>) -> Self { - BodyStmt::Assign { - left: Box::new(left), - op, - right: Box::new(right), + pub(crate) fn assign(dest: TypedExpr<'a>, op: Option, 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 }, } } } -- cgit v1.2.3