mf_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 { with_return: bool },
47 Len,
48 IncrementIt,
49 IncrementCount,
50 GetCount,
51 GetLen,
52 Pointer,
53 Begin,
54 End,
55 CallFunction { kind: FunctionKind, arg_count: u32 },
56 CallMethod { kind: MethodKind, arg_count: u32 },
57 Interval { left_bracket: Bracket, right_bracket: Bracket },
58}
59
60#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
61pub enum Jump {
62 Forward,
63 Backward,
64 IfTrue,
65 IfFalse,
66 IfNotNull,
67 IfEnd,
68}
69
70#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
71pub enum Compare {
72 More,
73 Less,
74 MoreOrEqual,
75 LessOrEqual,
76}