grass_ir/
field_expr.rs

1use serde::{Deserialize, Serialize};
2
3use crate::ConstOrEnv;
4
5#[derive(Serialize, Deserialize, Debug, Clone)]
6#[serde(tag = "opcode")]
7pub enum FieldExpression {
8    And(BinaryParam),
9    Or(BinaryParam),
10    Xor(BinaryParam),
11    Not(UnaryParam),
12    Add(BinaryParam),
13    Sub(BinaryParam),
14    Mul(BinaryParam),
15    Div(BinaryParam),
16    Mod(BinaryParam),
17    Eq(BinaryParam),
18    Ne(BinaryParam),
19    LessThan(BinaryParam),
20    GreaterThan(BinaryParam),
21    LessEqualThan(BinaryParam),
22    GreaterEqualThan(BinaryParam),
23    RightShift(BinaryParam),
24    LeftShift(BinaryParam),
25    Neg(UnaryParam),
26    Cond(CondParam),
27    FieldRef(FieldRefParam),
28    NumberOfComponents,
29    ComponentFieldRef(ComponentFieldRefParam),
30    ConstValue(ConstParam),
31    FullRecordRef,
32    RecordRef(RecordRefParam),
33    StringRepr(StringRepr),
34}
35
36#[derive(Serialize, Deserialize, Debug, Clone)]
37pub struct RecordRefParam {
38    pub id: i32,
39}
40
41#[derive(Serialize, Deserialize, Debug, Clone)]
42#[serde(untagged)]
43pub enum ConstValue {
44    Str(String),
45    Number(i64),
46    Float(f64),
47}
48
49#[derive(Serialize, Deserialize, Debug, Clone)]
50pub struct ConstParam {
51    pub value: ConstOrEnv<ConstValue>,
52}
53
54#[derive(Serialize, Deserialize, Debug, Clone)]
55pub struct UnaryParam {
56    pub operand: Box<FieldExpression>,
57}
58
59#[derive(Serialize, Deserialize, Debug, Clone)]
60pub struct BinaryParam {
61    pub lhs: Box<FieldExpression>,
62    pub rhs: Box<FieldExpression>,
63}
64
65#[derive(Serialize, Deserialize, Debug, Clone)]
66pub struct CondParam {
67    pub cond: Box<FieldExpression>,
68    pub then: Box<FieldExpression>,
69    pub elze: Box<FieldExpression>,
70}
71
72#[derive(Serialize, Deserialize, Debug, Clone)]
73pub struct StringRepr {
74    pub value: Box<FieldExpression>,
75}
76
77#[derive(Serialize, Deserialize, Debug, Clone)]
78pub struct FieldRefParam {
79    pub field: String,
80}
81
82#[derive(Serialize, Deserialize, Debug, Clone)]
83pub struct ComponentFieldRefParam {
84    pub target: i32,
85    pub field_name: String,
86}