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,
55 Begin,
56 End,
57 CallFunction {
58 kind: FunctionKind,
59 arg_count: u32,
60 },
61 CallMethod {
62 kind: MethodKind,
63 arg_count: u32,
64 },
65 Interval {
66 left_bracket: Bracket,
67 right_bracket: Bracket,
68 },
69}
70
71#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
72pub enum Jump {
73 Forward,
74 Backward,
75 IfTrue,
76 IfFalse,
77 IfNotNull,
78 IfEnd,
79}
80
81#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
82pub enum Compare {
83 More,
84 Less,
85 MoreOrEqual,
86 LessOrEqual,
87}