zen_expression/compiler/
opcode.rs

1use crate::functions::{FunctionKind, MethodKind};
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    Compare(Compare),
34    Add,
35    Subtract,
36    Multiply,
37    Divide,
38    Modulo,
39    Exponent,
40    Slice,
41    Array,
42    Object,
43    Len,
44    IncrementIt,
45    IncrementCount,
46    GetCount,
47    GetLen,
48    Pointer,
49    Begin,
50    End,
51    CallFunction {
52        kind: FunctionKind,
53        arg_count: u32,
54    },
55    CallMethod {
56        kind: MethodKind,
57        arg_count: u32,
58    },
59    Interval {
60        left_bracket: Bracket,
61        right_bracket: Bracket,
62    },
63}
64
65#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
66pub enum Jump {
67    Forward,
68    Backward,
69    IfTrue,
70    IfFalse,
71    IfNotNull,
72    IfEnd,
73}
74
75#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
76pub enum Compare {
77    More,
78    Less,
79    MoreOrEqual,
80    LessOrEqual,
81}