zen_expression/compiler/
opcode.rs1use 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#[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}