Macro esoteric_vm::esoteric_assembly
source · macro_rules! esoteric_assembly { () => { ... }; ({} data $data:expr) => { ... }; ({} DATA $data:expr) => { ... }; ({} byte $data:expr) => { ... }; ({} BYTE $data:expr) => { ... }; ({} nop) => { ... }; ({} NOP) => { ... }; ({} ldar $data:expr) => { ... }; ({} LDAR $data:expr) => { ... }; ({} ldar) => { ... }; ({} LDAR) => { ... }; ({} sba) => { ... }; ({} SBA) => { ... }; ({} clř) => { ... }; ({} CLŘ) => { ... }; ({} dumpř $data:expr) => { ... }; ({} DUMPŘ $data:expr) => { ... }; ({} dumpř) => { ... }; ({} DUMPŘ) => { ... }; ({} movař $data:expr) => { ... }; ({} MOVAŘ $data:expr) => { ... }; ({} movař) => { ... }; ({} MOVAŘ) => { ... }; ({} setř $data0:expr, $data1:expr) => { ... }; ({} SETŘ $data0:expr, $data1:expr) => { ... }; ({} setř) => { ... }; ({} SETŘ) => { ... }; ({} setř $data:expr) => { ... }; ({} SETŘ $data:expr) => { ... }; ({} setiř $data0:expr, $data1:expr) => { ... }; ({} SETIŘ $data0:expr, $data1:expr) => { ... }; ({} setiř) => { ... }; ({} SETIŘ) => { ... }; ({} setiř $data:expr) => { ... }; ({} SETIŘ $data:expr) => { ... }; ({} ldř $data:expr) => { ... }; ({} LDŘ $data:expr) => { ... }; ({} ldř) => { ... }; ({} LDŘ) => { ... }; ({} ldiř $data:expr) => { ... }; ({} LDIŘ $data:expr) => { ... }; ({} ldiř) => { ... }; ({} LDIŘ) => { ... }; ({} clß) => { ... }; ({} CLß) => { ... }; ({} dumpß $data:expr) => { ... }; ({} DUMPß $data:expr) => { ... }; ({} dumpß) => { ... }; ({} DUMPß) => { ... }; ({} writeß $data0:expr, $data1:expr) => { ... }; ({} WRITEß $data0:expr, $data1:expr) => { ... }; ({} writeß) => { ... }; ({} WRITEß) => { ... }; ({} writeß $data:expr) => { ... }; ({} WRITEß $data:expr) => { ... }; ({} movaß $data:expr) => { ... }; ({} MOVAß $data:expr) => { ... }; ({} movaß) => { ... }; ({} MOVAß) => { ... }; ({} setß $data0:expr, $data1:expr) => { ... }; ({} SETß $data0:expr, $data1:expr) => { ... }; ({} setß) => { ... }; ({} SETß) => { ... }; ({} setß $data:expr) => { ... }; ({} SETß $data:expr) => { ... }; ({} setiß $data0:expr, $data1:expr) => { ... }; ({} SETIß $data0:expr, $data1:expr) => { ... }; ({} setiß) => { ... }; ({} SETIß) => { ... }; ({} setiß $data:expr) => { ... }; ({} SETIß $data:expr) => { ... }; ({} ldß $data:expr) => { ... }; ({} LDß $data:expr) => { ... }; ({} ldß) => { ... }; ({} LDß) => { ... }; ({} pushß) => { ... }; ({} PUSHß) => { ... }; ({} popß) => { ... }; ({} POPß) => { ... }; ({} lenßa) => { ... }; ({} LENßA) => { ... }; ({} ldidp $data:expr) => { ... }; ({} LDIDP $data:expr) => { ... }; ({} ldidp) => { ... }; ({} LDIDP) => { ... }; ({} Ωchoiceset $data:expr) => { ... }; ({} ΩCHOICESET $data:expr) => { ... }; ({} Ωchoiceset) => { ... }; ({} ΩCHOICESET) => { ... }; ({} Ωchoicegeta) => { ... }; ({} ΩCHOICEGETA) => { ... }; ({} Ωgainapolymorphicdesires) => { ... }; ({} ΩGAINAPOLYMORPHICDESIRES) => { ... }; ({} Ωloseapolymorphicdesires) => { ... }; ({} ΩLOSEAPOLYMORPHICDESIRES) => { ... }; ({} Ωpushpolymorphicdesires) => { ... }; ({} ΩPUSHPOLYMORPHICDESIRES) => { ... }; ({} Ωtheendisnear) => { ... }; ({} ΩTHEENDISNEAR) => { ... }; ({} Ωskiptothechase) => { ... }; ({} ΩSKIPTOTHECHASE) => { ... }; ({} Ωsetsentience $data:expr) => { ... }; ({} ΩSETSENTIENCE $data:expr) => { ... }; ({} Ωsetsentience) => { ... }; ({} ΩSETSENTIENCE) => { ... }; ({} Ωsetpaperclipproduction $data:expr) => { ... }; ({} ΩSETPAPERCLIPPRODUCTION $data:expr) => { ... }; ({} Ωsetpaperclipproduction) => { ... }; ({} ΩSETPAPERCLIPPRODUCTION) => { ... }; ({} addbl) => { ... }; ({} ADDBL) => { ... }; ({} subbl) => { ... }; ({} SUBBL) => { ... }; ({} mulbl) => { ... }; ({} MULBL) => { ... }; ({} divbl) => { ... }; ({} DIVBL) => { ... }; ({} modbl) => { ... }; ({} MODBL) => { ... }; ({} notl) => { ... }; ({} NOTL) => { ... }; ({} andbl) => { ... }; ({} ANDBL) => { ... }; ({} orbl) => { ... }; ({} ORBL) => { ... }; ({} xorbl) => { ... }; ({} XORBL) => { ... }; ({} cmplb) => { ... }; ({} CMPLB) => { ... }; ({} tgflag) => { ... }; ({} TGFLAG) => { ... }; ({} clflag) => { ... }; ({} CLFLAG) => { ... }; ({} addf $data:expr) => { ... }; ({} ADDF $data:expr) => { ... }; ({} addf) => { ... }; ({} ADDF) => { ... }; ({} subf $data:expr) => { ... }; ({} SUBF $data:expr) => { ... }; ({} subf) => { ... }; ({} SUBF) => { ... }; ({} mulf $data:expr) => { ... }; ({} MULF $data:expr) => { ... }; ({} mulf) => { ... }; ({} MULF) => { ... }; ({} divf $data:expr) => { ... }; ({} DIVF $data:expr) => { ... }; ({} divf) => { ... }; ({} DIVF) => { ... }; ({} modf $data:expr) => { ... }; ({} MODF $data:expr) => { ... }; ({} modf) => { ... }; ({} MODF) => { ... }; ({} stackalloc $data:expr) => { ... }; ({} STACKALLOC $data:expr) => { ... }; ({} stackalloc) => { ... }; ({} STACKALLOC) => { ... }; ({} stackdealloc $data:expr) => { ... }; ({} STACKDEALLOC $data:expr) => { ... }; ({} stackdealloc) => { ... }; ({} STACKDEALLOC) => { ... }; ({} push $data:expr) => { ... }; ({} PUSH $data:expr) => { ... }; ({} push) => { ... }; ({} PUSH) => { ... }; ({} pushi $data:expr) => { ... }; ({} PUSHI $data:expr) => { ... }; ({} pushi) => { ... }; ({} PUSHI) => { ... }; ({} pop $data:expr) => { ... }; ({} POP $data:expr) => { ... }; ({} pop) => { ... }; ({} POP) => { ... }; ({} popa) => { ... }; ({} POPA) => { ... }; ({} pusha) => { ... }; ({} PUSHA) => { ... }; ({} popb) => { ... }; ({} POPB) => { ... }; ({} pushb) => { ... }; ({} PUSHB) => { ... }; ({} popl) => { ... }; ({} POPL) => { ... }; ({} pushl) => { ... }; ({} PUSHL) => { ... }; ({} popf) => { ... }; ({} POPF) => { ... }; ({} pushf) => { ... }; ({} PUSHF) => { ... }; ({} popch) => { ... }; ({} POPCH) => { ... }; ({} pushch) => { ... }; ({} PUSHCH) => { ... }; ({} popnum) => { ... }; ({} POPNUM) => { ... }; ({} pushnum) => { ... }; ({} PUSHNUM) => { ... }; ({} popep) => { ... }; ({} POPEP) => { ... }; ({} zpopep) => { ... }; ({} ZPOPEP) => { ... }; ({} ppopep) => { ... }; ({} PPOPEP) => { ... }; ({} npopep) => { ... }; ({} NPOPEP) => { ... }; ({} fpopep) => { ... }; ({} FPOPEP) => { ... }; ({} dpopep) => { ... }; ({} DPOPEP) => { ... }; ({} getchar) => { ... }; ({} GETCHAR) => { ... }; ({} getline) => { ... }; ({} GETLINE) => { ... }; ({} writechar) => { ... }; ({} WRITECHAR) => { ... }; ({} writelineß) => { ... }; ({} WRITELINEß) => { ... }; ({} writeline $data:expr) => { ... }; ({} WRITELINE $data:expr) => { ... }; ({} writeline) => { ... }; ({} WRITELINE) => { ... }; ({} toggledebug) => { ... }; ({} TOGGLEDEBUG) => { ... }; ({} debugmachinestate) => { ... }; ({} DEBUGMACHINESTATE) => { ... }; ({} debugmachinestatecompact) => { ... }; ({} DEBUGMACHINESTATECOMPACT) => { ... }; ({} debugmemoryregion $data0:expr, $data1:expr) => { ... }; ({} DEBUGMEMORYREGION $data0:expr, $data1:expr) => { ... }; ({} debugmemoryregion) => { ... }; ({} DEBUGMEMORYREGION) => { ... }; ({} debugmemoryregion $data:expr) => { ... }; ({} DEBUGMEMORYREGION $data:expr) => { ... }; ({} debugstackregion $data0:expr, $data1:expr) => { ... }; ({} DEBUGSTACKREGION $data0:expr, $data1:expr) => { ... }; ({} debugstackregion) => { ... }; ({} DEBUGSTACKREGION) => { ... }; ({} debugstackregion $data:expr) => { ... }; ({} DEBUGSTACKREGION $data:expr) => { ... }; ({} $($trash:tt)*) => { ... }; ($($($n:literal:)? $name:ident $($value:expr),*);* $(;)?) => { ... }; }
Expand description
Assembly compiler for esoteric VM.
Input format: <n>: <inst> <arg1?>, <arg2?>;, with:
<n>:being an optional helper prefix (usually an integer to denote he instruction’s location in memory),\<inst>being the instruction, and \<argx>being the argument (usually a number).
§Examples
let mut machine = Machine::default();
let assembly = esoteric_assembly!{
// you can prefix the instruction with an integer
// and use it to know where instructions are in memory,
// but it's not checked so be careful.
0: pushi 10;
2: pushi 25;
// you can omit the prefix
popl;
// you can set the prefix to an arbitrary amount
1_000_000: Ωtheendisnear;
// you can use any literal as the prefix
"hello": ΩSKIPTOTHECHASE;
};
machine.load(&assembly, 0);