zen_expression/compiler/
opcode.rs1use 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 Begin,
11 String(Arc<str>),
12 Number(u32),
13}
14
15#[derive(Debug, PartialEq, Eq, Clone, Display)]
17pub enum Opcode {
18 PushNull,
19 PushBool(bool),
20 PushString(Arc<str>),
21 PushNumber(Decimal),
22 Pop,
23 Flatten,
24 Join,
25 Fetch,
26 FetchRootEnv,
27 FetchEnv(Arc<str>),
28 FetchFast(Vec<FetchFastTarget>),
29 Negate,
30 Not,
31 Equal,
32 Jump(Jump, u32),
33 In,
34 Compare(Compare),
35 Add,
36 Subtract,
37 Multiply,
38 Divide,
39 Modulo,
40 Exponent,
41 Slice,
42 Array,
43 Object,
44 AssignedObjectBegin,
45 AssignedObjectStep,
46 AssignedObjectEnd {
47 with_return: bool,
48 },
49 Len,
50 IncrementIt,
51 IncrementCount,
52 GetCount,
53 GetLen,
54 Pointer(u32),
56 Begin,
57 End,
58 CallFunction {
59 kind: FunctionKind,
60 arg_count: u32,
61 },
62 CallMethod {
63 kind: MethodKind,
64 arg_count: u32,
65 },
66 Interval {
67 left_bracket: Bracket,
68 right_bracket: Bracket,
69 },
70}
71
72#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
73pub enum Jump {
74 Forward,
75 Backward,
76 IfTrue,
77 IfFalse,
78 IfNotNull,
79 IfEnd,
80}
81
82#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
83pub enum Compare {
84 More,
85 Less,
86 MoreOrEqual,
87 LessOrEqual,
88}