Skip to main content

mist_parser/ast/
expr.rs

1use serde::Serialize;
2
3use super::*;
4
5#[derive(Debug, Clone, Serialize)]
6pub enum BinaryOp {
7    Plus,
8    Minus,
9    Multiply,
10    Divide,
11    Modulo,
12    Equal,
13    NotEqual,
14    LessThan,
15    GreaterThan,
16    LessThanOrEqual,
17    GreaterThanOrEqual,
18    And,
19    Or,
20    ShiftLeft,
21    ShiftRight,
22    RangeInclusive,
23    RangeExclusive,
24    BitAnd,
25    BitOr,
26    BitXor,
27}
28
29#[derive(Debug, Clone, Serialize)]
30pub enum Expression {
31    Literal(Literal),
32    Path(ExprPath),
33    Fix {
34        initial: Box<Expression>,
35        prefixes: Vec<Prefix>,
36        postfixes: Vec<Postfix>,
37    },
38    Binary {
39        lhs: Box<Expression>,
40        op: BinaryOp,
41        rhs: Box<Expression>,
42    },
43}
44
45#[derive(Debug, Clone, Serialize)]
46pub enum Literal {
47    String(String),
48    Int(i64),
49    Float(f64),
50    Bool(bool),
51    Tuple(Vec<Expression>),
52    Array(Vec<Expression>),
53    ArrayRepeat(Box<Expression>, Box<Expression>),
54}
55
56#[derive(Debug, Clone, Serialize)]
57pub enum Pattern {
58    NamedTuple(Path, Vec<Identifier>),
59    Struct(Path, Vec<Identifier>),
60    Tuple(Vec<Identifier>),
61    Literal(Literal),
62    Path(Path),
63    Id(Identifier),
64}
65
66#[derive(Debug, Clone, Serialize)]
67pub enum Postfix {
68    FieldAccess(Identifier, Option<Generics>),
69    Call(Vec<Expression>),
70    MacroCall(String),
71    StructCall(Vec<(Identifier, Expression)>),
72    Index(Expression),
73    As(TypeExpr),
74    Try,
75}
76
77#[derive(Debug, Clone, Serialize)]
78pub enum Prefix {
79    Ref,
80    RefMut,
81    Deref,
82    New(Option<Generics>),
83    Not,
84    Neg,
85}
86
87#[derive(Debug, Clone, Serialize)]
88pub struct ExprPathSegment {
89    pub ident: Identifier,
90    pub generics: Option<Generics>,
91}
92
93#[derive(Debug, Clone, Serialize)]
94pub struct ExprPath(pub Vec<ExprPathSegment>);
95
96#[derive(Debug, Clone, Serialize)]
97pub struct Generics(pub Vec<Generic>);
98
99#[derive(Debug, Clone, Serialize)]
100pub enum Generic {
101    Lifetime(Identifier),
102    Type(TypeExpr),
103}