mirror of
https://github.com/gorules/zen.git
synced 2026-10-06 08:02:18 +00:00
* feat: expression function system * cleanup * improve parser * revert test changes * add more tests * minor fixes
73 lines
1.2 KiB
Rust
73 lines
1.2 KiB
Rust
use crate::functions::FunctionKind;
|
|
use crate::lexer::Bracket;
|
|
use rust_decimal::Decimal;
|
|
use std::sync::Arc;
|
|
use strum_macros::Display;
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub enum FetchFastTarget {
|
|
Root,
|
|
String(Arc<str>),
|
|
Number(u32),
|
|
}
|
|
|
|
/// Machine code interpreted by VM
|
|
#[derive(Debug, PartialEq, Eq, Clone, Display)]
|
|
pub enum Opcode {
|
|
PushNull,
|
|
PushBool(bool),
|
|
PushString(Arc<str>),
|
|
PushNumber(Decimal),
|
|
Pop,
|
|
Flatten,
|
|
Join,
|
|
Fetch,
|
|
FetchRootEnv,
|
|
FetchEnv(Arc<str>),
|
|
FetchFast(Vec<FetchFastTarget>),
|
|
Negate,
|
|
Not,
|
|
Equal,
|
|
Jump(Jump, u32),
|
|
In,
|
|
Less,
|
|
More,
|
|
LessOrEqual,
|
|
MoreOrEqual,
|
|
Add,
|
|
Subtract,
|
|
Multiply,
|
|
Divide,
|
|
Modulo,
|
|
Exponent,
|
|
Slice,
|
|
Array,
|
|
Object,
|
|
Len,
|
|
IncrementIt,
|
|
IncrementCount,
|
|
GetCount,
|
|
GetLen,
|
|
Pointer,
|
|
Begin,
|
|
End,
|
|
CallFunction {
|
|
kind: FunctionKind,
|
|
arg_count: u32,
|
|
},
|
|
Interval {
|
|
left_bracket: Bracket,
|
|
right_bracket: Bracket,
|
|
},
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
|
|
pub enum Jump {
|
|
Forward,
|
|
Backward,
|
|
IfTrue,
|
|
IfFalse,
|
|
IfNotNull,
|
|
IfEnd,
|
|
}
|