mirror of
https://github.com/gorules/zen.git
synced 2026-10-05 00:02:26 +00:00
87 lines
1.4 KiB
Rust
87 lines
1.4 KiB
Rust
use crate::vm::Variable;
|
|
use strum_macros::Display;
|
|
|
|
/// Machine code interpreted by VM
|
|
#[derive(Debug, PartialEq, Eq, Clone, Display)]
|
|
pub enum Opcode<'a> {
|
|
Push(Variable<'a>),
|
|
Pop,
|
|
Rot,
|
|
Fetch,
|
|
FetchEnv(&'a str),
|
|
Negate,
|
|
Not,
|
|
Equal,
|
|
Jump(usize),
|
|
JumpIfTrue(usize),
|
|
JumpIfFalse(usize),
|
|
JumpIfEnd(usize),
|
|
JumpBackward(usize),
|
|
In,
|
|
Less,
|
|
More,
|
|
LessOrEqual,
|
|
MoreOrEqual,
|
|
Abs,
|
|
Average,
|
|
Median,
|
|
Mode,
|
|
Min,
|
|
Max,
|
|
Round,
|
|
Floor,
|
|
Ceil,
|
|
Sum,
|
|
Random,
|
|
Add,
|
|
Subtract,
|
|
Multiply,
|
|
Divide,
|
|
Modulo,
|
|
Exponent,
|
|
Interval {
|
|
left_bracket: &'a str,
|
|
right_bracket: &'a str,
|
|
},
|
|
Contains,
|
|
DateFunction(&'a str),
|
|
DateManipulation(&'a str),
|
|
Uppercase,
|
|
Lowercase,
|
|
StartsWith,
|
|
EndsWith,
|
|
Matches,
|
|
Extract,
|
|
Slice,
|
|
Array,
|
|
Len,
|
|
ParseDateTime,
|
|
ParseTime,
|
|
ParseDuration,
|
|
IncrementIt,
|
|
IncrementCount,
|
|
GetCount,
|
|
GetLen,
|
|
Pointer,
|
|
Begin,
|
|
End,
|
|
Flatten,
|
|
TypeConversion(TypeConversionKind),
|
|
TypeCheck(TypeCheckKind),
|
|
}
|
|
|
|
/// Metadata for TypeConversion Opcode
|
|
#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
|
|
pub enum TypeConversionKind {
|
|
Number,
|
|
String,
|
|
Bool,
|
|
Json,
|
|
}
|
|
|
|
/// Metadata for TypeCheck Opcode
|
|
#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
|
|
pub enum TypeCheckKind {
|
|
Numeric,
|
|
}
|