#![allow(non_camel_case_types)]
#[derive(Debug)]
pub enum OpCode {
LOAD,
VAR,
REF,
ASN,
ASNARR,
DECL,
ADD,
SUB,
MUL,
DIV,
MOD,
BITAND,
BITXOR,
BITOR,
EQ,
NE,
GR,
GE,
LS,
LE,
OR,
AND,
NOT,
NEG,
JMP,
JMP_UP,
JNE,
CALL,
RET,
LIST,
SCR,
POP,
PRINT,
ERR,
}
impl From<OpCode> for u8 {
fn from(value: OpCode) -> Self {
use OpCode::*;
match value {
LOAD => 0x00,
VAR => 0x01,
REF => 0x02,
ASN => 0x03,
ASNARR => 0x04,
DECL => 0x05,
ADD => 0x06,
SUB => 0x07,
MUL => 0x08,
DIV => 0x09,
MOD => 0x0A,
BITAND => 0x0B,
BITXOR => 0x0C,
BITOR => 0x0D,
EQ => 0x0E,
NE => 0x0F,
GR => 0x10,
GE => 0x11,
LS => 0x12,
LE => 0x13,
OR => 0x14,
AND => 0x15,
NOT => 0x16,
NEG => 0x17,
JMP => 0x18,
JMP_UP => 0x19,
JNE => 0x1A,
CALL => 0x1B,
RET => 0x1C,
LIST => 0x1D,
SCR => 0x1E,
POP => 0xFD,
PRINT => 0xFE,
ERR => 0xFF,
}
}
}
impl From<u8> for OpCode {
fn from(value: u8) -> Self {
use OpCode::*;
match value {
0x00 => LOAD,
0x01 => VAR,
0x02 => REF,
0x03 => ASN,
0x04 => ASNARR,
0x05 => DECL,
0x06 => ADD,
0x07 => SUB,
0x08 => MUL,
0x09 => DIV,
0x0A => MOD,
0x0B => BITAND,
0x0c => BITXOR,
0x0d => BITOR,
0x0E => EQ,
0x0F => NE,
0x10 => GR,
0x11 => GE,
0x12 => LS,
0x13 => LE,
0x14 => OR,
0x15 => AND,
0x16 => NOT,
0x17 => NEG,
0x18 => JMP,
0x19 => JMP_UP,
0x1A => JNE,
0x1B => CALL,
0x1c => RET,
0x1D => LIST,
0x1E => SCR,
0xFD => POP,
0xFE => PRINT,
_ => ERR,
}
}
}