zen_expression/compiler/
opcode.rs

1use crate::functions::FunctionKind;
2use crate::lexer::Bracket;
3use rust_decimal::Decimal;
4use std::sync::Arc;
5use strum_macros::Display;
6
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum FetchFastTarget {
9    Root,
10    String(Arc<str>),
11    Number(u32),
12}
13
14/// Machine code interpreted by VM
15#[derive(Debug, PartialEq, Eq, Clone, Display)]
16pub enum Opcode {
17    PushNull,
18    PushBool(bool),
19    PushString(Arc<str>),
20    PushNumber(Decimal),
21    Pop,
22    Flatten,
23    Join,
24    Fetch,
25    FetchRootEnv,
26    FetchEnv(Arc<str>),
27    FetchFast(Vec<FetchFastTarget>),
28    Negate,
29    Not,
30    Equal,
31    Jump(Jump, u32),
32    In,
33    Less,
34    More,
35    LessOrEqual,
36    MoreOrEqual,
37    Add,
38    Subtract,
39    Multiply,
40    Divide,
41    Modulo,
42    Exponent,
43    Slice,
44    Array,
45    Object,
46    Len,
47    IncrementIt,
48    IncrementCount,
49    GetCount,
50    GetLen,
51    Pointer,
52    Begin,
53    End,
54    CallFunction {
55        kind: FunctionKind,
56        arg_count: u32,
57    },
58    Interval {
59        left_bracket: Bracket,
60        right_bracket: Bracket,
61    },
62}
63
64#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
65pub enum Jump {
66    Forward,
67    Backward,
68    IfTrue,
69    IfFalse,
70    IfNotNull,
71    IfEnd,
72}