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 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 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}