dampen_core/expr/
ast.rs

1use crate::ir::span::Span;
2
3/// A parsed binding expression
4#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
5pub struct BindingExpr {
6    pub expr: Expr,
7    pub span: Span,
8}
9
10/// Expression AST node
11#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
12pub enum Expr {
13    FieldAccess(FieldAccessExpr),
14    MethodCall(MethodCallExpr),
15    BinaryOp(BinaryOpExpr),
16    UnaryOp(UnaryOpExpr),
17    Conditional(ConditionalExpr),
18    Literal(LiteralExpr),
19}
20
21/// Field access path
22#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
23pub struct FieldAccessExpr {
24    pub path: Vec<String>,
25}
26
27/// Method call with arguments
28#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
29pub struct MethodCallExpr {
30    pub receiver: Box<Expr>,
31    pub method: String,
32    pub args: Vec<Expr>,
33}
34
35/// Binary operation
36#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
37pub struct BinaryOpExpr {
38    pub left: Box<Expr>,
39    pub op: BinaryOp,
40    pub right: Box<Expr>,
41}
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
44pub enum BinaryOp {
45    Eq,
46    Ne,
47    Lt,
48    Le,
49    Gt,
50    Ge,
51    And,
52    Or,
53    Add,
54    Sub,
55    Mul,
56    Div,
57}
58
59/// Unary operation
60#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
61pub struct UnaryOpExpr {
62    pub op: UnaryOp,
63    pub operand: Box<Expr>,
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
67pub enum UnaryOp {
68    Not,
69    Neg,
70}
71
72/// Conditional expression
73#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
74pub struct ConditionalExpr {
75    pub condition: Box<Expr>,
76    pub then_branch: Box<Expr>,
77    pub else_branch: Box<Expr>,
78}
79
80/// Literal value
81#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
82pub enum LiteralExpr {
83    String(String),
84    Integer(i64),
85    Float(f64),
86    Bool(bool),
87}