//! Compiled operation variants for the Forth VM instruction set. use std::sync::Arc; use super::types::SourceSpan; /// Single VM instruction produced by the compiler. #[derive(Clone, Debug, PartialEq)] pub enum Op { PushInt(i64, Option), PushFloat(f64, Option), PushStr(Arc, Option), Dup, Dupn, Drop, Swap, Over, Rot, Nip, Tuck, Dup2, Drop2, Swap2, Over2, Rev, Shuffle, Sort, RSort, Sum, Prod, Forget, Add, Sub, Mul, Div, Mod, Neg, Abs, Floor, Ceil, Round, Min, Max, Pow, Sqrt, Sin, Cos, Log, Eq, Ne, Lt, Gt, Le, Ge, And, Or, Not, Xor, Nand, Nor, IfElse, Pick, BranchIfZero(usize, Option, Option), Branch(usize), NewCmd, SetParam(&'static str), Emit, Print, Get, Set, SetKeep, GetContext(&'static str), Rand(Option), ExpRand(Option), LogRand(Option), Seed, Cycle(Option), PCycle(Option), Choose(Option), Bounce(Option), PBounce(Option), WChoose(Option), ChanceExec(Option), ProbExec(Option), Coin(Option), Mtof, Ftom, SetTempo, Every(Option), Except(Option), EveryOffset(Option), ExceptOffset(Option), Bjork(Option), PBjork(Option), Quotation(Arc<[Op]>, Option), When, Unless, Adsr, Ad, Apply, Ramp, Triangle, Range, LinMap, ExpMap, Perlin, Loop, Degree(&'static [i64]), Oct, ClearCmd, SetSpeed, At, Arp, IntRange, StepRange, Generate, GeomRange, Euclid, EuclidRot, Times, Chord(&'static [i64]), Transpose, Invert, DownInvert, VoiceDrop2, VoiceDrop3, SetKey, DiatonicTriad(&'static [i64]), DiatonicSeventh(&'static [i64]), // Audio-rate modulation DSL ModLfo(u8), ModSlide(u8), ModRnd(u8), ModEnv, // Global params EmitAll, ClearGlobal, // MIDI MidiEmit, GetMidiCC, MidiClock, MidiStart, MidiStop, MidiContinue, // Recording Rec, Overdub, Orec, Odub, // Bracket syntax (mark/count for auto-counting) Mark, Count(Option), Index(Option), }