#![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 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 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 } } }