zen_expression/compiler/
opcode.rs

1use crate::lexer::Bracket;
2use rust_decimal::Decimal;
3use std::sync::Arc;
4use strum_macros::Display;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub enum FetchFastTarget {
8    Root,
9    String(Arc<str>),
10    Number(u32),
11}
12
13/// Machine code interpreted by VM
14#[derive(Debug, PartialEq, Eq, Clone, Display)]
15pub enum Opcode {
16    PushNull,
17    PushBool(bool),
18    PushString(Arc<str>),
19    PushNumber(Decimal),
20    Pop,
21    Rot,
22    Fetch,
23    FetchRootEnv,
24    FetchEnv(Arc<str>),
25    FetchFast(Vec<FetchFastTarget>),
26    Negate,
27    Not,
28    Equal,
29    Jump(Jump, u32),
30    In,
31    Less,
32    More,
33    LessOrEqual,
34    MoreOrEqual,
35    Abs,
36    Average,
37    Median,
38    Mode,
39    Min,
40    Max,
41    Round,
42    Floor,
43    Ceil,
44    Sum,
45    Random,
46    Add,
47    Subtract,
48    Multiply,
49    Divide,
50    Modulo,
51    Exponent,
52    Interval {
53        left_bracket: Bracket,
54        right_bracket: Bracket,
55    },
56    Contains,
57    Keys,
58    Values,
59    DateFunction(Arc<str>),
60    DateManipulation(Arc<str>),
61    Uppercase,
62    Lowercase,
63    StartsWith,
64    EndsWith,
65    Matches,
66    FuzzyMatch,
67    Join,
68    Split,
69    Extract,
70    Trim,
71    Slice,
72    Array,
73    Object,
74    Len,
75    ParseDateTime,
76    ParseTime,
77    ParseDuration,
78    IncrementIt,
79    IncrementCount,
80    GetCount,
81    GetLen,
82    Pointer,
83    Begin,
84    End,
85    Flatten,
86    GetType,
87    TypeConversion(TypeConversionKind),
88    TypeCheck(TypeCheckKind),
89}
90
91#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
92pub enum Jump {
93    Forward,
94    Backward,
95    IfTrue,
96    IfFalse,
97    IfNotNull,
98    IfEnd,
99}
100
101/// Metadata for TypeConversion Opcode
102#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
103pub enum TypeConversionKind {
104    Number,
105    String,
106    Bool,
107}
108
109/// Metadata for TypeCheck Opcode
110#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
111pub enum TypeCheckKind {
112    Numeric,
113}