mago_ast/ast/
assignment.rs1use serde::Deserialize;
2use serde::Serialize;
3use strum::Display;
4
5use mago_span::HasSpan;
6use mago_span::Span;
7
8use crate::ast::expression::Expression;
9
10#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord, Display)]
12#[serde(tag = "type", content = "value")]
13#[repr(C, u8)]
14pub enum AssignmentOperator {
15 Assign(Span),
16 Addition(Span),
17 Subtraction(Span),
18 Multiplication(Span),
19 Division(Span),
20 Modulo(Span),
21 Exponentiation(Span),
22 Concat(Span),
23 BitwiseAnd(Span),
24 BitwiseOr(Span),
25 BitwiseXor(Span),
26 LeftShift(Span),
27 RightShift(Span),
28 Coalesce(Span),
29}
30
31#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord)]
33#[repr(C)]
34pub struct Assignment {
35 pub lhs: Box<Expression>,
36 pub operator: AssignmentOperator,
37 pub rhs: Box<Expression>,
38}
39
40impl HasSpan for AssignmentOperator {
41 fn span(&self) -> Span {
42 match self {
43 Self::Assign(span) => *span,
44 Self::Addition(span) => *span,
45 Self::Subtraction(span) => *span,
46 Self::Multiplication(span) => *span,
47 Self::Division(span) => *span,
48 Self::Modulo(span) => *span,
49 Self::Exponentiation(span) => *span,
50 Self::Concat(span) => *span,
51 Self::BitwiseAnd(span) => *span,
52 Self::BitwiseOr(span) => *span,
53 Self::BitwiseXor(span) => *span,
54 Self::LeftShift(span) => *span,
55 Self::RightShift(span) => *span,
56 Self::Coalesce(span) => *span,
57 }
58 }
59}
60
61impl HasSpan for Assignment {
62 fn span(&self) -> Span {
63 self.lhs.span().join(self.rhs.span())
64 }
65}