cl-ast: Move ExprKind::Assign outside the box, to be more consistent with other uses of Expr

This commit is contained in:
John 2024-03-28 16:34:24 -05:00
parent ba148ef5de
commit 8ee318f26b
2 changed files with 10 additions and 3 deletions

View File

@ -292,7 +292,7 @@ pub struct Expr {
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum ExprKind {
/// An [Assign]ment expression: [`Expr`] ([`AssignKind`] [`Expr`])\+
Assign(Box<Assign>),
Assign(Assign),
/// A [Binary] expression: [`Expr`] ([`BinaryKind`] [`Expr`])\+
Binary(Binary),
/// A [Unary] expression: [`UnaryKind`]\* [`Expr`]
@ -338,7 +338,7 @@ pub enum ExprKind {
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Assign {
pub head: Expr,
pub head: Box<Expr>,
pub op: AssignKind,
pub tail: Box<Expr>,
}

View File

@ -675,7 +675,14 @@ impl<'t> Parser<'t> {
let Ok(op) = self.assign_op() else {
return Ok(head.kind);
};
Ok(Assign { head, op, tail: self.expr_from(Self::exprkind_assign)?.into() }.into())
Ok(
Assign {
head: Box::new(head),
op,
tail: self.expr_from(Self::exprkind_assign)?.into(),
}
.into(),
)
}
// TODO: use a pratt parser for binary expressions, to simplify this
binary! {