#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum OpCode {
Pushint8,
Pushint16,
Pushint32,
Pushint64,
Pushint128,
Pushint256,
PushT,
PushF,
PushA,
PushNull,
Pushdata1,
Pushdata2,
Pushdata4,
PushM1,
Push0,
Push1,
Push2,
Push3,
Push4,
Push5,
Push6,
Push7,
Push8,
Push9,
Push10,
Push11,
Push12,
Push13,
Push14,
Push15,
Push16,
Nop,
Jmp,
Jmp_L,
Jmpif,
Jmpif_L,
Jmpifnot,
Jmpifnot_L,
JmpEq,
JmpEq_L,
JmpNe,
JmpNe_L,
JmpGt,
JmpGt_L,
JmpGe,
JmpGe_L,
JmpLt,
JmpLt_L,
JmpLe,
JmpLe_L,
Call,
Call_L,
CallA,
CallT,
Abort,
Assert,
Throw,
Try,
TryL,
Endtry,
EndtryL,
Endfinally,
Ret,
Syscall,
Depth,
Drop,
Nip,
Xdrop,
Clear,
Dup,
Over,
Pick,
Tuck,
Swap,
Rot,
Roll,
Reverse3,
Reverse4,
Reversen,
Initsslot,
Initslot,
Ldsfld0,
Ldsfld1,
Ldsfld2,
Ldsfld3,
Ldsfld4,
Ldsfld5,
Ldsfld6,
Ldsfld,
Stsfld0,
Stsfld1,
Stsfld2,
Stsfld3,
Stsfld4,
Stsfld5,
Stsfld6,
Stsfld,
Ldloc0,
Ldloc1,
Ldloc2,
Ldloc3,
Ldloc4,
Ldloc5,
Ldloc6,
Ldloc,
Stloc0,
Stloc1,
Stloc2,
Stloc3,
Stloc4,
Stloc5,
Stloc6,
Stloc,
Ldarg0,
Ldarg1,
Ldarg2,
Ldarg3,
Ldarg4,
Ldarg5,
Ldarg6,
Ldarg,
Starg0,
Starg1,
Starg2,
Starg3,
Starg4,
Starg5,
Starg6,
Starg,
Newbuffer,
Memcpy,
Cat,
Substr,
Left,
Right,
Invert,
And,
Or,
Xor,
Equal,
Notequal,
Sign,
Abs,
Negate,
Inc,
Dec,
Add,
Sub,
Mul,
Div,
Mod,
Pow,
Sqrt,
Modmul,
Modpow,
Shl,
Shr,
Not,
Booland,
Boolor,
Nz,
Numequal,
Numnotequal,
Lt,
Le,
Gt,
Ge,
Min,
Max,
Within,
Packmap,
Packstruct,
Pack,
Unpack,
Newarray0,
Newarray,
NewarrayT,
Newstruct0,
Newstruct,
Newmap,
Size,
Haskey,
Keys,
Values,
Pickitem,
Append,
Setitem,
Reverseitems,
Remove,
Clearitems,
Popitem,
Isnull,
Istype,
Convert,
Abortmsg,
Assertmsg,
Unknown(u8),
}
impl OpCode {
pub fn from_byte(byte: u8) -> Self {
match byte {
0x00 => OpCode::Pushint8,
0x01 => OpCode::Pushint16,
0x02 => OpCode::Pushint32,
0x03 => OpCode::Pushint64,
0x04 => OpCode::Pushint128,
0x05 => OpCode::Pushint256,
0x08 => OpCode::PushT,
0x09 => OpCode::PushF,
0x0A => OpCode::PushA,
0x0B => OpCode::PushNull,
0x0C => OpCode::Pushdata1,
0x0D => OpCode::Pushdata2,
0x0E => OpCode::Pushdata4,
0x0F => OpCode::PushM1,
0x10 => OpCode::Push0,
0x11 => OpCode::Push1,
0x12 => OpCode::Push2,
0x13 => OpCode::Push3,
0x14 => OpCode::Push4,
0x15 => OpCode::Push5,
0x16 => OpCode::Push6,
0x17 => OpCode::Push7,
0x18 => OpCode::Push8,
0x19 => OpCode::Push9,
0x1A => OpCode::Push10,
0x1B => OpCode::Push11,
0x1C => OpCode::Push12,
0x1D => OpCode::Push13,
0x1E => OpCode::Push14,
0x1F => OpCode::Push15,
0x20 => OpCode::Push16,
0x21 => OpCode::Nop,
0x22 => OpCode::Jmp,
0x23 => OpCode::Jmp_L,
0x24 => OpCode::Jmpif,
0x25 => OpCode::Jmpif_L,
0x26 => OpCode::Jmpifnot,
0x27 => OpCode::Jmpifnot_L,
0x28 => OpCode::JmpEq,
0x29 => OpCode::JmpEq_L,
0x2A => OpCode::JmpNe,
0x2B => OpCode::JmpNe_L,
0x2C => OpCode::JmpGt,
0x2D => OpCode::JmpGt_L,
0x2E => OpCode::JmpGe,
0x2F => OpCode::JmpGe_L,
0x30 => OpCode::JmpLt,
0x31 => OpCode::JmpLt_L,
0x32 => OpCode::JmpLe,
0x33 => OpCode::JmpLe_L,
0x34 => OpCode::Call,
0x35 => OpCode::Call_L,
0x36 => OpCode::CallA,
0x37 => OpCode::CallT,
0x38 => OpCode::Abort,
0x39 => OpCode::Assert,
0x3A => OpCode::Throw,
0x3B => OpCode::Try,
0x3C => OpCode::TryL,
0x3D => OpCode::Endtry,
0x3E => OpCode::EndtryL,
0x3F => OpCode::Endfinally,
0x40 => OpCode::Ret,
0x41 => OpCode::Syscall,
0x43 => OpCode::Depth,
0x45 => OpCode::Drop,
0x46 => OpCode::Nip,
0x48 => OpCode::Xdrop,
0x49 => OpCode::Clear,
0x4A => OpCode::Dup,
0x4B => OpCode::Over,
0x4D => OpCode::Pick,
0x4E => OpCode::Tuck,
0x50 => OpCode::Swap,
0x51 => OpCode::Rot,
0x52 => OpCode::Roll,
0x53 => OpCode::Reverse3,
0x54 => OpCode::Reverse4,
0x55 => OpCode::Reversen,
0x56 => OpCode::Initsslot,
0x57 => OpCode::Initslot,
0x58 => OpCode::Ldsfld0,
0x59 => OpCode::Ldsfld1,
0x5A => OpCode::Ldsfld2,
0x5B => OpCode::Ldsfld3,
0x5C => OpCode::Ldsfld4,
0x5D => OpCode::Ldsfld5,
0x5E => OpCode::Ldsfld6,
0x5F => OpCode::Ldsfld,
0x60 => OpCode::Stsfld0,
0x61 => OpCode::Stsfld1,
0x62 => OpCode::Stsfld2,
0x63 => OpCode::Stsfld3,
0x64 => OpCode::Stsfld4,
0x65 => OpCode::Stsfld5,
0x66 => OpCode::Stsfld6,
0x67 => OpCode::Stsfld,
0x68 => OpCode::Ldloc0,
0x69 => OpCode::Ldloc1,
0x6A => OpCode::Ldloc2,
0x6B => OpCode::Ldloc3,
0x6C => OpCode::Ldloc4,
0x6D => OpCode::Ldloc5,
0x6E => OpCode::Ldloc6,
0x6F => OpCode::Ldloc,
0x70 => OpCode::Stloc0,
0x71 => OpCode::Stloc1,
0x72 => OpCode::Stloc2,
0x73 => OpCode::Stloc3,
0x74 => OpCode::Stloc4,
0x75 => OpCode::Stloc5,
0x76 => OpCode::Stloc6,
0x77 => OpCode::Stloc,
0x78 => OpCode::Ldarg0,
0x79 => OpCode::Ldarg1,
0x7A => OpCode::Ldarg2,
0x7B => OpCode::Ldarg3,
0x7C => OpCode::Ldarg4,
0x7D => OpCode::Ldarg5,
0x7E => OpCode::Ldarg6,
0x7F => OpCode::Ldarg,
0x80 => OpCode::Starg0,
0x81 => OpCode::Starg1,
0x82 => OpCode::Starg2,
0x83 => OpCode::Starg3,
0x84 => OpCode::Starg4,
0x85 => OpCode::Starg5,
0x86 => OpCode::Starg6,
0x87 => OpCode::Starg,
0x88 => OpCode::Newbuffer,
0x89 => OpCode::Memcpy,
0x8B => OpCode::Cat,
0x8C => OpCode::Substr,
0x8D => OpCode::Left,
0x8E => OpCode::Right,
0x90 => OpCode::Invert,
0x91 => OpCode::And,
0x92 => OpCode::Or,
0x93 => OpCode::Xor,
0x97 => OpCode::Equal,
0x98 => OpCode::Notequal,
0x99 => OpCode::Sign,
0x9A => OpCode::Abs,
0x9B => OpCode::Negate,
0x9C => OpCode::Inc,
0x9D => OpCode::Dec,
0x9E => OpCode::Add,
0x9F => OpCode::Sub,
0xA0 => OpCode::Mul,
0xA1 => OpCode::Div,
0xA2 => OpCode::Mod,
0xA3 => OpCode::Pow,
0xA4 => OpCode::Sqrt,
0xA5 => OpCode::Modmul,
0xA6 => OpCode::Modpow,
0xA8 => OpCode::Shl,
0xA9 => OpCode::Shr,
0xAA => OpCode::Not,
0xAB => OpCode::Booland,
0xAC => OpCode::Boolor,
0xB1 => OpCode::Nz,
0xB3 => OpCode::Numequal,
0xB4 => OpCode::Numnotequal,
0xB5 => OpCode::Lt,
0xB6 => OpCode::Le,
0xB7 => OpCode::Gt,
0xB8 => OpCode::Ge,
0xB9 => OpCode::Min,
0xBA => OpCode::Max,
0xBB => OpCode::Within,
0xBE => OpCode::Packmap,
0xBF => OpCode::Packstruct,
0xC0 => OpCode::Pack,
0xC1 => OpCode::Unpack,
0xC2 => OpCode::Newarray0,
0xC3 => OpCode::Newarray,
0xC4 => OpCode::NewarrayT,
0xC5 => OpCode::Newstruct0,
0xC6 => OpCode::Newstruct,
0xC8 => OpCode::Newmap,
0xCA => OpCode::Size,
0xCB => OpCode::Haskey,
0xCC => OpCode::Keys,
0xCD => OpCode::Values,
0xCE => OpCode::Pickitem,
0xCF => OpCode::Append,
0xD0 => OpCode::Setitem,
0xD1 => OpCode::Reverseitems,
0xD2 => OpCode::Remove,
0xD3 => OpCode::Clearitems,
0xD4 => OpCode::Popitem,
0xD8 => OpCode::Isnull,
0xD9 => OpCode::Istype,
0xDB => OpCode::Convert,
0xE0 => OpCode::Abortmsg,
0xE1 => OpCode::Assertmsg,
other => OpCode::Unknown(other),
}
}
pub fn byte(self) -> u8 {
match self {
OpCode::Pushint8 => 0x00,
OpCode::Pushint16 => 0x01,
OpCode::Pushint32 => 0x02,
OpCode::Pushint64 => 0x03,
OpCode::Pushint128 => 0x04,
OpCode::Pushint256 => 0x05,
OpCode::PushT => 0x08,
OpCode::PushF => 0x09,
OpCode::PushA => 0x0A,
OpCode::PushNull => 0x0B,
OpCode::Pushdata1 => 0x0C,
OpCode::Pushdata2 => 0x0D,
OpCode::Pushdata4 => 0x0E,
OpCode::PushM1 => 0x0F,
OpCode::Push0 => 0x10,
OpCode::Push1 => 0x11,
OpCode::Push2 => 0x12,
OpCode::Push3 => 0x13,
OpCode::Push4 => 0x14,
OpCode::Push5 => 0x15,
OpCode::Push6 => 0x16,
OpCode::Push7 => 0x17,
OpCode::Push8 => 0x18,
OpCode::Push9 => 0x19,
OpCode::Push10 => 0x1A,
OpCode::Push11 => 0x1B,
OpCode::Push12 => 0x1C,
OpCode::Push13 => 0x1D,
OpCode::Push14 => 0x1E,
OpCode::Push15 => 0x1F,
OpCode::Push16 => 0x20,
OpCode::Nop => 0x21,
OpCode::Jmp => 0x22,
OpCode::Jmp_L => 0x23,
OpCode::Jmpif => 0x24,
OpCode::Jmpif_L => 0x25,
OpCode::Jmpifnot => 0x26,
OpCode::Jmpifnot_L => 0x27,
OpCode::JmpEq => 0x28,
OpCode::JmpEq_L => 0x29,
OpCode::JmpNe => 0x2A,
OpCode::JmpNe_L => 0x2B,
OpCode::JmpGt => 0x2C,
OpCode::JmpGt_L => 0x2D,
OpCode::JmpGe => 0x2E,
OpCode::JmpGe_L => 0x2F,
OpCode::JmpLt => 0x30,
OpCode::JmpLt_L => 0x31,
OpCode::JmpLe => 0x32,
OpCode::JmpLe_L => 0x33,
OpCode::Call => 0x34,
OpCode::Call_L => 0x35,
OpCode::CallA => 0x36,
OpCode::CallT => 0x37,
OpCode::Abort => 0x38,
OpCode::Assert => 0x39,
OpCode::Throw => 0x3A,
OpCode::Try => 0x3B,
OpCode::TryL => 0x3C,
OpCode::Endtry => 0x3D,
OpCode::EndtryL => 0x3E,
OpCode::Endfinally => 0x3F,
OpCode::Ret => 0x40,
OpCode::Syscall => 0x41,
OpCode::Depth => 0x43,
OpCode::Drop => 0x45,
OpCode::Nip => 0x46,
OpCode::Xdrop => 0x48,
OpCode::Clear => 0x49,
OpCode::Dup => 0x4A,
OpCode::Over => 0x4B,
OpCode::Pick => 0x4D,
OpCode::Tuck => 0x4E,
OpCode::Swap => 0x50,
OpCode::Rot => 0x51,
OpCode::Roll => 0x52,
OpCode::Reverse3 => 0x53,
OpCode::Reverse4 => 0x54,
OpCode::Reversen => 0x55,
OpCode::Initsslot => 0x56,
OpCode::Initslot => 0x57,
OpCode::Ldsfld0 => 0x58,
OpCode::Ldsfld1 => 0x59,
OpCode::Ldsfld2 => 0x5A,
OpCode::Ldsfld3 => 0x5B,
OpCode::Ldsfld4 => 0x5C,
OpCode::Ldsfld5 => 0x5D,
OpCode::Ldsfld6 => 0x5E,
OpCode::Ldsfld => 0x5F,
OpCode::Stsfld0 => 0x60,
OpCode::Stsfld1 => 0x61,
OpCode::Stsfld2 => 0x62,
OpCode::Stsfld3 => 0x63,
OpCode::Stsfld4 => 0x64,
OpCode::Stsfld5 => 0x65,
OpCode::Stsfld6 => 0x66,
OpCode::Stsfld => 0x67,
OpCode::Ldloc0 => 0x68,
OpCode::Ldloc1 => 0x69,
OpCode::Ldloc2 => 0x6A,
OpCode::Ldloc3 => 0x6B,
OpCode::Ldloc4 => 0x6C,
OpCode::Ldloc5 => 0x6D,
OpCode::Ldloc6 => 0x6E,
OpCode::Ldloc => 0x6F,
OpCode::Stloc0 => 0x70,
OpCode::Stloc1 => 0x71,
OpCode::Stloc2 => 0x72,
OpCode::Stloc3 => 0x73,
OpCode::Stloc4 => 0x74,
OpCode::Stloc5 => 0x75,
OpCode::Stloc6 => 0x76,
OpCode::Stloc => 0x77,
OpCode::Ldarg0 => 0x78,
OpCode::Ldarg1 => 0x79,
OpCode::Ldarg2 => 0x7A,
OpCode::Ldarg3 => 0x7B,
OpCode::Ldarg4 => 0x7C,
OpCode::Ldarg5 => 0x7D,
OpCode::Ldarg6 => 0x7E,
OpCode::Ldarg => 0x7F,
OpCode::Starg0 => 0x80,
OpCode::Starg1 => 0x81,
OpCode::Starg2 => 0x82,
OpCode::Starg3 => 0x83,
OpCode::Starg4 => 0x84,
OpCode::Starg5 => 0x85,
OpCode::Starg6 => 0x86,
OpCode::Starg => 0x87,
OpCode::Newbuffer => 0x88,
OpCode::Memcpy => 0x89,
OpCode::Cat => 0x8B,
OpCode::Substr => 0x8C,
OpCode::Left => 0x8D,
OpCode::Right => 0x8E,
OpCode::Invert => 0x90,
OpCode::And => 0x91,
OpCode::Or => 0x92,
OpCode::Xor => 0x93,
OpCode::Equal => 0x97,
OpCode::Notequal => 0x98,
OpCode::Sign => 0x99,
OpCode::Abs => 0x9A,
OpCode::Negate => 0x9B,
OpCode::Inc => 0x9C,
OpCode::Dec => 0x9D,
OpCode::Add => 0x9E,
OpCode::Sub => 0x9F,
OpCode::Mul => 0xA0,
OpCode::Div => 0xA1,
OpCode::Mod => 0xA2,
OpCode::Pow => 0xA3,
OpCode::Sqrt => 0xA4,
OpCode::Modmul => 0xA5,
OpCode::Modpow => 0xA6,
OpCode::Shl => 0xA8,
OpCode::Shr => 0xA9,
OpCode::Not => 0xAA,
OpCode::Booland => 0xAB,
OpCode::Boolor => 0xAC,
OpCode::Nz => 0xB1,
OpCode::Numequal => 0xB3,
OpCode::Numnotequal => 0xB4,
OpCode::Lt => 0xB5,
OpCode::Le => 0xB6,
OpCode::Gt => 0xB7,
OpCode::Ge => 0xB8,
OpCode::Min => 0xB9,
OpCode::Max => 0xBA,
OpCode::Within => 0xBB,
OpCode::Packmap => 0xBE,
OpCode::Packstruct => 0xBF,
OpCode::Pack => 0xC0,
OpCode::Unpack => 0xC1,
OpCode::Newarray0 => 0xC2,
OpCode::Newarray => 0xC3,
OpCode::NewarrayT => 0xC4,
OpCode::Newstruct0 => 0xC5,
OpCode::Newstruct => 0xC6,
OpCode::Newmap => 0xC8,
OpCode::Size => 0xCA,
OpCode::Haskey => 0xCB,
OpCode::Keys => 0xCC,
OpCode::Values => 0xCD,
OpCode::Pickitem => 0xCE,
OpCode::Append => 0xCF,
OpCode::Setitem => 0xD0,
OpCode::Reverseitems => 0xD1,
OpCode::Remove => 0xD2,
OpCode::Clearitems => 0xD3,
OpCode::Popitem => 0xD4,
OpCode::Isnull => 0xD8,
OpCode::Istype => 0xD9,
OpCode::Convert => 0xDB,
OpCode::Abortmsg => 0xE0,
OpCode::Assertmsg => 0xE1,
OpCode::Unknown(value) => value,
}
}
pub fn mnemonic(self) -> &'static str {
match self {
OpCode::Pushint8 => "PUSHINT8",
OpCode::Pushint16 => "PUSHINT16",
OpCode::Pushint32 => "PUSHINT32",
OpCode::Pushint64 => "PUSHINT64",
OpCode::Pushint128 => "PUSHINT128",
OpCode::Pushint256 => "PUSHINT256",
OpCode::PushT => "PUSHT",
OpCode::PushF => "PUSHF",
OpCode::PushA => "PUSHA",
OpCode::PushNull => "PUSHNULL",
OpCode::Pushdata1 => "PUSHDATA1",
OpCode::Pushdata2 => "PUSHDATA2",
OpCode::Pushdata4 => "PUSHDATA4",
OpCode::PushM1 => "PUSHM1",
OpCode::Push0 => "PUSH0",
OpCode::Push1 => "PUSH1",
OpCode::Push2 => "PUSH2",
OpCode::Push3 => "PUSH3",
OpCode::Push4 => "PUSH4",
OpCode::Push5 => "PUSH5",
OpCode::Push6 => "PUSH6",
OpCode::Push7 => "PUSH7",
OpCode::Push8 => "PUSH8",
OpCode::Push9 => "PUSH9",
OpCode::Push10 => "PUSH10",
OpCode::Push11 => "PUSH11",
OpCode::Push12 => "PUSH12",
OpCode::Push13 => "PUSH13",
OpCode::Push14 => "PUSH14",
OpCode::Push15 => "PUSH15",
OpCode::Push16 => "PUSH16",
OpCode::Nop => "NOP",
OpCode::Jmp => "JMP",
OpCode::Jmp_L => "JMP_L",
OpCode::Jmpif => "JMPIF",
OpCode::Jmpif_L => "JMPIF_L",
OpCode::Jmpifnot => "JMPIFNOT",
OpCode::Jmpifnot_L => "JMPIFNOT_L",
OpCode::JmpEq => "JMPEQ",
OpCode::JmpEq_L => "JMPEQ_L",
OpCode::JmpNe => "JMPNE",
OpCode::JmpNe_L => "JMPNE_L",
OpCode::JmpGt => "JMPGT",
OpCode::JmpGt_L => "JMPGT_L",
OpCode::JmpGe => "JMPGE",
OpCode::JmpGe_L => "JMPGE_L",
OpCode::JmpLt => "JMPLT",
OpCode::JmpLt_L => "JMPLT_L",
OpCode::JmpLe => "JMPLE",
OpCode::JmpLe_L => "JMPLE_L",
OpCode::Call => "CALL",
OpCode::Call_L => "CALL_L",
OpCode::CallA => "CALLA",
OpCode::CallT => "CALLT",
OpCode::Abort => "ABORT",
OpCode::Assert => "ASSERT",
OpCode::Throw => "THROW",
OpCode::Try => "TRY",
OpCode::TryL => "TRY_L",
OpCode::Endtry => "ENDTRY",
OpCode::EndtryL => "ENDTRY_L",
OpCode::Endfinally => "ENDFINALLY",
OpCode::Ret => "RET",
OpCode::Syscall => "SYSCALL",
OpCode::Depth => "DEPTH",
OpCode::Drop => "DROP",
OpCode::Nip => "NIP",
OpCode::Xdrop => "XDROP",
OpCode::Clear => "CLEAR",
OpCode::Dup => "DUP",
OpCode::Over => "OVER",
OpCode::Pick => "PICK",
OpCode::Tuck => "TUCK",
OpCode::Swap => "SWAP",
OpCode::Rot => "ROT",
OpCode::Roll => "ROLL",
OpCode::Reverse3 => "REVERSE3",
OpCode::Reverse4 => "REVERSE4",
OpCode::Reversen => "REVERSEN",
OpCode::Initsslot => "INITSSLOT",
OpCode::Initslot => "INITSLOT",
OpCode::Ldsfld0 => "LDSFLD0",
OpCode::Ldsfld1 => "LDSFLD1",
OpCode::Ldsfld2 => "LDSFLD2",
OpCode::Ldsfld3 => "LDSFLD3",
OpCode::Ldsfld4 => "LDSFLD4",
OpCode::Ldsfld5 => "LDSFLD5",
OpCode::Ldsfld6 => "LDSFLD6",
OpCode::Ldsfld => "LDSFLD",
OpCode::Stsfld0 => "STSFLD0",
OpCode::Stsfld1 => "STSFLD1",
OpCode::Stsfld2 => "STSFLD2",
OpCode::Stsfld3 => "STSFLD3",
OpCode::Stsfld4 => "STSFLD4",
OpCode::Stsfld5 => "STSFLD5",
OpCode::Stsfld6 => "STSFLD6",
OpCode::Stsfld => "STSFLD",
OpCode::Ldloc0 => "LDLOC0",
OpCode::Ldloc1 => "LDLOC1",
OpCode::Ldloc2 => "LDLOC2",
OpCode::Ldloc3 => "LDLOC3",
OpCode::Ldloc4 => "LDLOC4",
OpCode::Ldloc5 => "LDLOC5",
OpCode::Ldloc6 => "LDLOC6",
OpCode::Ldloc => "LDLOC",
OpCode::Stloc0 => "STLOC0",
OpCode::Stloc1 => "STLOC1",
OpCode::Stloc2 => "STLOC2",
OpCode::Stloc3 => "STLOC3",
OpCode::Stloc4 => "STLOC4",
OpCode::Stloc5 => "STLOC5",
OpCode::Stloc6 => "STLOC6",
OpCode::Stloc => "STLOC",
OpCode::Ldarg0 => "LDARG0",
OpCode::Ldarg1 => "LDARG1",
OpCode::Ldarg2 => "LDARG2",
OpCode::Ldarg3 => "LDARG3",
OpCode::Ldarg4 => "LDARG4",
OpCode::Ldarg5 => "LDARG5",
OpCode::Ldarg6 => "LDARG6",
OpCode::Ldarg => "LDARG",
OpCode::Starg0 => "STARG0",
OpCode::Starg1 => "STARG1",
OpCode::Starg2 => "STARG2",
OpCode::Starg3 => "STARG3",
OpCode::Starg4 => "STARG4",
OpCode::Starg5 => "STARG5",
OpCode::Starg6 => "STARG6",
OpCode::Starg => "STARG",
OpCode::Newbuffer => "NEWBUFFER",
OpCode::Memcpy => "MEMCPY",
OpCode::Cat => "CAT",
OpCode::Substr => "SUBSTR",
OpCode::Left => "LEFT",
OpCode::Right => "RIGHT",
OpCode::Invert => "INVERT",
OpCode::And => "AND",
OpCode::Or => "OR",
OpCode::Xor => "XOR",
OpCode::Equal => "EQUAL",
OpCode::Notequal => "NOTEQUAL",
OpCode::Sign => "SIGN",
OpCode::Abs => "ABS",
OpCode::Negate => "NEGATE",
OpCode::Inc => "INC",
OpCode::Dec => "DEC",
OpCode::Add => "ADD",
OpCode::Sub => "SUB",
OpCode::Mul => "MUL",
OpCode::Div => "DIV",
OpCode::Mod => "MOD",
OpCode::Pow => "POW",
OpCode::Sqrt => "SQRT",
OpCode::Modmul => "MODMUL",
OpCode::Modpow => "MODPOW",
OpCode::Shl => "SHL",
OpCode::Shr => "SHR",
OpCode::Not => "NOT",
OpCode::Booland => "BOOLAND",
OpCode::Boolor => "BOOLOR",
OpCode::Nz => "NZ",
OpCode::Numequal => "NUMEQUAL",
OpCode::Numnotequal => "NUMNOTEQUAL",
OpCode::Lt => "LT",
OpCode::Le => "LE",
OpCode::Gt => "GT",
OpCode::Ge => "GE",
OpCode::Min => "MIN",
OpCode::Max => "MAX",
OpCode::Within => "WITHIN",
OpCode::Packmap => "PACKMAP",
OpCode::Packstruct => "PACKSTRUCT",
OpCode::Pack => "PACK",
OpCode::Unpack => "UNPACK",
OpCode::Newarray0 => "NEWARRAY0",
OpCode::Newarray => "NEWARRAY",
OpCode::NewarrayT => "NEWARRAY_T",
OpCode::Newstruct0 => "NEWSTRUCT0",
OpCode::Newstruct => "NEWSTRUCT",
OpCode::Newmap => "NEWMAP",
OpCode::Size => "SIZE",
OpCode::Haskey => "HASKEY",
OpCode::Keys => "KEYS",
OpCode::Values => "VALUES",
OpCode::Pickitem => "PICKITEM",
OpCode::Append => "APPEND",
OpCode::Setitem => "SETITEM",
OpCode::Reverseitems => "REVERSEITEMS",
OpCode::Remove => "REMOVE",
OpCode::Clearitems => "CLEARITEMS",
OpCode::Popitem => "POPITEM",
OpCode::Isnull => "ISNULL",
OpCode::Istype => "ISTYPE",
OpCode::Convert => "CONVERT",
OpCode::Abortmsg => "ABORTMSG",
OpCode::Assertmsg => "ASSERTMSG",
OpCode::Unknown(_) => "UNKNOWN",
}
}
pub fn operand_encoding(self) -> OperandEncoding {
match self {
OpCode::Pushint8 => OperandEncoding::I8,
OpCode::Pushint16 => OperandEncoding::I16,
OpCode::Pushint32 => OperandEncoding::I32,
OpCode::Pushint64 => OperandEncoding::I64,
OpCode::Pushint128 => OperandEncoding::Bytes(16),
OpCode::Pushint256 => OperandEncoding::Bytes(32),
OpCode::PushT => OperandEncoding::None,
OpCode::PushF => OperandEncoding::None,
OpCode::PushA => OperandEncoding::I32,
OpCode::PushNull => OperandEncoding::None,
OpCode::Pushdata1 => OperandEncoding::Data1,
OpCode::Pushdata2 => OperandEncoding::Data2,
OpCode::Pushdata4 => OperandEncoding::Data4,
OpCode::PushM1 => OperandEncoding::None,
OpCode::Push0 => OperandEncoding::None,
OpCode::Push1 => OperandEncoding::None,
OpCode::Push2 => OperandEncoding::None,
OpCode::Push3 => OperandEncoding::None,
OpCode::Push4 => OperandEncoding::None,
OpCode::Push5 => OperandEncoding::None,
OpCode::Push6 => OperandEncoding::None,
OpCode::Push7 => OperandEncoding::None,
OpCode::Push8 => OperandEncoding::None,
OpCode::Push9 => OperandEncoding::None,
OpCode::Push10 => OperandEncoding::None,
OpCode::Push11 => OperandEncoding::None,
OpCode::Push12 => OperandEncoding::None,
OpCode::Push13 => OperandEncoding::None,
OpCode::Push14 => OperandEncoding::None,
OpCode::Push15 => OperandEncoding::None,
OpCode::Push16 => OperandEncoding::None,
OpCode::Nop => OperandEncoding::None,
OpCode::Jmp => OperandEncoding::Jump8,
OpCode::Jmp_L => OperandEncoding::Jump32,
OpCode::Jmpif => OperandEncoding::Jump8,
OpCode::Jmpif_L => OperandEncoding::Jump32,
OpCode::Jmpifnot => OperandEncoding::Jump8,
OpCode::Jmpifnot_L => OperandEncoding::Jump32,
OpCode::JmpEq => OperandEncoding::Jump8,
OpCode::JmpEq_L => OperandEncoding::Jump32,
OpCode::JmpNe => OperandEncoding::Jump8,
OpCode::JmpNe_L => OperandEncoding::Jump32,
OpCode::JmpGt => OperandEncoding::Jump8,
OpCode::JmpGt_L => OperandEncoding::Jump32,
OpCode::JmpGe => OperandEncoding::Jump8,
OpCode::JmpGe_L => OperandEncoding::Jump32,
OpCode::JmpLt => OperandEncoding::Jump8,
OpCode::JmpLt_L => OperandEncoding::Jump32,
OpCode::JmpLe => OperandEncoding::Jump8,
OpCode::JmpLe_L => OperandEncoding::Jump32,
OpCode::Call => OperandEncoding::Jump8,
OpCode::Call_L => OperandEncoding::Jump32,
OpCode::CallA => OperandEncoding::None,
OpCode::CallT => OperandEncoding::U16,
OpCode::Abort => OperandEncoding::None,
OpCode::Assert => OperandEncoding::None,
OpCode::Throw => OperandEncoding::None,
OpCode::Try => OperandEncoding::Bytes(2),
OpCode::TryL => OperandEncoding::Bytes(8),
OpCode::Endtry => OperandEncoding::Jump8,
OpCode::EndtryL => OperandEncoding::Jump32,
OpCode::Endfinally => OperandEncoding::None,
OpCode::Ret => OperandEncoding::None,
OpCode::Syscall => OperandEncoding::Syscall,
OpCode::Depth => OperandEncoding::None,
OpCode::Drop => OperandEncoding::None,
OpCode::Nip => OperandEncoding::None,
OpCode::Xdrop => OperandEncoding::None,
OpCode::Clear => OperandEncoding::None,
OpCode::Dup => OperandEncoding::None,
OpCode::Over => OperandEncoding::None,
OpCode::Pick => OperandEncoding::None,
OpCode::Tuck => OperandEncoding::None,
OpCode::Swap => OperandEncoding::None,
OpCode::Rot => OperandEncoding::None,
OpCode::Roll => OperandEncoding::None,
OpCode::Reverse3 => OperandEncoding::None,
OpCode::Reverse4 => OperandEncoding::None,
OpCode::Reversen => OperandEncoding::None,
OpCode::Initsslot => OperandEncoding::U8,
OpCode::Initslot => OperandEncoding::Bytes(2),
OpCode::Ldsfld0 => OperandEncoding::None,
OpCode::Ldsfld1 => OperandEncoding::None,
OpCode::Ldsfld2 => OperandEncoding::None,
OpCode::Ldsfld3 => OperandEncoding::None,
OpCode::Ldsfld4 => OperandEncoding::None,
OpCode::Ldsfld5 => OperandEncoding::None,
OpCode::Ldsfld6 => OperandEncoding::None,
OpCode::Ldsfld => OperandEncoding::U8,
OpCode::Stsfld0 => OperandEncoding::None,
OpCode::Stsfld1 => OperandEncoding::None,
OpCode::Stsfld2 => OperandEncoding::None,
OpCode::Stsfld3 => OperandEncoding::None,
OpCode::Stsfld4 => OperandEncoding::None,
OpCode::Stsfld5 => OperandEncoding::None,
OpCode::Stsfld6 => OperandEncoding::None,
OpCode::Stsfld => OperandEncoding::U8,
OpCode::Ldloc0 => OperandEncoding::None,
OpCode::Ldloc1 => OperandEncoding::None,
OpCode::Ldloc2 => OperandEncoding::None,
OpCode::Ldloc3 => OperandEncoding::None,
OpCode::Ldloc4 => OperandEncoding::None,
OpCode::Ldloc5 => OperandEncoding::None,
OpCode::Ldloc6 => OperandEncoding::None,
OpCode::Ldloc => OperandEncoding::U8,
OpCode::Stloc0 => OperandEncoding::None,
OpCode::Stloc1 => OperandEncoding::None,
OpCode::Stloc2 => OperandEncoding::None,
OpCode::Stloc3 => OperandEncoding::None,
OpCode::Stloc4 => OperandEncoding::None,
OpCode::Stloc5 => OperandEncoding::None,
OpCode::Stloc6 => OperandEncoding::None,
OpCode::Stloc => OperandEncoding::U8,
OpCode::Ldarg0 => OperandEncoding::None,
OpCode::Ldarg1 => OperandEncoding::None,
OpCode::Ldarg2 => OperandEncoding::None,
OpCode::Ldarg3 => OperandEncoding::None,
OpCode::Ldarg4 => OperandEncoding::None,
OpCode::Ldarg5 => OperandEncoding::None,
OpCode::Ldarg6 => OperandEncoding::None,
OpCode::Ldarg => OperandEncoding::U8,
OpCode::Starg0 => OperandEncoding::None,
OpCode::Starg1 => OperandEncoding::None,
OpCode::Starg2 => OperandEncoding::None,
OpCode::Starg3 => OperandEncoding::None,
OpCode::Starg4 => OperandEncoding::None,
OpCode::Starg5 => OperandEncoding::None,
OpCode::Starg6 => OperandEncoding::None,
OpCode::Starg => OperandEncoding::U8,
OpCode::Newbuffer => OperandEncoding::None,
OpCode::Memcpy => OperandEncoding::None,
OpCode::Cat => OperandEncoding::None,
OpCode::Substr => OperandEncoding::None,
OpCode::Left => OperandEncoding::None,
OpCode::Right => OperandEncoding::None,
OpCode::Invert => OperandEncoding::None,
OpCode::And => OperandEncoding::None,
OpCode::Or => OperandEncoding::None,
OpCode::Xor => OperandEncoding::None,
OpCode::Equal => OperandEncoding::None,
OpCode::Notequal => OperandEncoding::None,
OpCode::Sign => OperandEncoding::None,
OpCode::Abs => OperandEncoding::None,
OpCode::Negate => OperandEncoding::None,
OpCode::Inc => OperandEncoding::None,
OpCode::Dec => OperandEncoding::None,
OpCode::Add => OperandEncoding::None,
OpCode::Sub => OperandEncoding::None,
OpCode::Mul => OperandEncoding::None,
OpCode::Div => OperandEncoding::None,
OpCode::Mod => OperandEncoding::None,
OpCode::Pow => OperandEncoding::None,
OpCode::Sqrt => OperandEncoding::None,
OpCode::Modmul => OperandEncoding::None,
OpCode::Modpow => OperandEncoding::None,
OpCode::Shl => OperandEncoding::None,
OpCode::Shr => OperandEncoding::None,
OpCode::Not => OperandEncoding::None,
OpCode::Booland => OperandEncoding::None,
OpCode::Boolor => OperandEncoding::None,
OpCode::Nz => OperandEncoding::None,
OpCode::Numequal => OperandEncoding::None,
OpCode::Numnotequal => OperandEncoding::None,
OpCode::Lt => OperandEncoding::None,
OpCode::Le => OperandEncoding::None,
OpCode::Gt => OperandEncoding::None,
OpCode::Ge => OperandEncoding::None,
OpCode::Min => OperandEncoding::None,
OpCode::Max => OperandEncoding::None,
OpCode::Within => OperandEncoding::None,
OpCode::Packmap => OperandEncoding::None,
OpCode::Packstruct => OperandEncoding::None,
OpCode::Pack => OperandEncoding::None,
OpCode::Unpack => OperandEncoding::None,
OpCode::Newarray0 => OperandEncoding::None,
OpCode::Newarray => OperandEncoding::None,
OpCode::NewarrayT => OperandEncoding::U8,
OpCode::Newstruct0 => OperandEncoding::None,
OpCode::Newstruct => OperandEncoding::None,
OpCode::Newmap => OperandEncoding::None,
OpCode::Size => OperandEncoding::None,
OpCode::Haskey => OperandEncoding::None,
OpCode::Keys => OperandEncoding::None,
OpCode::Values => OperandEncoding::None,
OpCode::Pickitem => OperandEncoding::None,
OpCode::Append => OperandEncoding::None,
OpCode::Setitem => OperandEncoding::None,
OpCode::Reverseitems => OperandEncoding::None,
OpCode::Remove => OperandEncoding::None,
OpCode::Clearitems => OperandEncoding::None,
OpCode::Popitem => OperandEncoding::None,
OpCode::Isnull => OperandEncoding::None,
OpCode::Istype => OperandEncoding::U8,
OpCode::Convert => OperandEncoding::U8,
OpCode::Abortmsg => OperandEncoding::None,
OpCode::Assertmsg => OperandEncoding::None,
OpCode::Unknown(_) => OperandEncoding::None,
}
}
}