Skip to main content

neo_decompiler/
opcodes_generated.rs

1// This file is @generated by tools/generate_opcodes.py. Do not edit manually.
2#[allow(non_camel_case_types)]
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
4pub enum OpCode {
5    Pushint8,
6    Pushint16,
7    Pushint32,
8    Pushint64,
9    Pushint128,
10    Pushint256,
11    PushT,
12    PushF,
13    PushA,
14    PushNull,
15    Pushdata1,
16    Pushdata2,
17    Pushdata4,
18    PushM1,
19    Push0,
20    Push1,
21    Push2,
22    Push3,
23    Push4,
24    Push5,
25    Push6,
26    Push7,
27    Push8,
28    Push9,
29    Push10,
30    Push11,
31    Push12,
32    Push13,
33    Push14,
34    Push15,
35    Push16,
36    Nop,
37    Jmp,
38    Jmp_L,
39    Jmpif,
40    Jmpif_L,
41    Jmpifnot,
42    Jmpifnot_L,
43    JmpEq,
44    JmpEq_L,
45    JmpNe,
46    JmpNe_L,
47    JmpGt,
48    JmpGt_L,
49    JmpGe,
50    JmpGe_L,
51    JmpLt,
52    JmpLt_L,
53    JmpLe,
54    JmpLe_L,
55    Call,
56    Call_L,
57    CallA,
58    CallT,
59    Abort,
60    Assert,
61    Throw,
62    Try,
63    TryL,
64    Endtry,
65    EndtryL,
66    Endfinally,
67    Ret,
68    Syscall,
69    Depth,
70    Drop,
71    Nip,
72    Xdrop,
73    Clear,
74    Dup,
75    Over,
76    Pick,
77    Tuck,
78    Swap,
79    Rot,
80    Roll,
81    Reverse3,
82    Reverse4,
83    Reversen,
84    Initsslot,
85    Initslot,
86    Ldsfld0,
87    Ldsfld1,
88    Ldsfld2,
89    Ldsfld3,
90    Ldsfld4,
91    Ldsfld5,
92    Ldsfld6,
93    Ldsfld,
94    Stsfld0,
95    Stsfld1,
96    Stsfld2,
97    Stsfld3,
98    Stsfld4,
99    Stsfld5,
100    Stsfld6,
101    Stsfld,
102    Ldloc0,
103    Ldloc1,
104    Ldloc2,
105    Ldloc3,
106    Ldloc4,
107    Ldloc5,
108    Ldloc6,
109    Ldloc,
110    Stloc0,
111    Stloc1,
112    Stloc2,
113    Stloc3,
114    Stloc4,
115    Stloc5,
116    Stloc6,
117    Stloc,
118    Ldarg0,
119    Ldarg1,
120    Ldarg2,
121    Ldarg3,
122    Ldarg4,
123    Ldarg5,
124    Ldarg6,
125    Ldarg,
126    Starg0,
127    Starg1,
128    Starg2,
129    Starg3,
130    Starg4,
131    Starg5,
132    Starg6,
133    Starg,
134    Newbuffer,
135    Memcpy,
136    Cat,
137    Substr,
138    Left,
139    Right,
140    Invert,
141    And,
142    Or,
143    Xor,
144    Equal,
145    Notequal,
146    Sign,
147    Abs,
148    Negate,
149    Inc,
150    Dec,
151    Add,
152    Sub,
153    Mul,
154    Div,
155    Mod,
156    Pow,
157    Sqrt,
158    Modmul,
159    Modpow,
160    Shl,
161    Shr,
162    Not,
163    Booland,
164    Boolor,
165    Nz,
166    Numequal,
167    Numnotequal,
168    Lt,
169    Le,
170    Gt,
171    Ge,
172    Min,
173    Max,
174    Within,
175    Packmap,
176    Packstruct,
177    Pack,
178    Unpack,
179    Newarray0,
180    Newarray,
181    NewarrayT,
182    Newstruct0,
183    Newstruct,
184    Newmap,
185    Size,
186    Haskey,
187    Keys,
188    Values,
189    Pickitem,
190    Append,
191    Setitem,
192    Reverseitems,
193    Remove,
194    Clearitems,
195    Popitem,
196    Isnull,
197    Istype,
198    Convert,
199    Abortmsg,
200    Assertmsg,
201    Unknown(u8),
202}
203
204impl OpCode {
205    pub fn from_byte(byte: u8) -> Self {
206        match byte {
207            0x00 => OpCode::Pushint8,
208            0x01 => OpCode::Pushint16,
209            0x02 => OpCode::Pushint32,
210            0x03 => OpCode::Pushint64,
211            0x04 => OpCode::Pushint128,
212            0x05 => OpCode::Pushint256,
213            0x08 => OpCode::PushT,
214            0x09 => OpCode::PushF,
215            0x0A => OpCode::PushA,
216            0x0B => OpCode::PushNull,
217            0x0C => OpCode::Pushdata1,
218            0x0D => OpCode::Pushdata2,
219            0x0E => OpCode::Pushdata4,
220            0x0F => OpCode::PushM1,
221            0x10 => OpCode::Push0,
222            0x11 => OpCode::Push1,
223            0x12 => OpCode::Push2,
224            0x13 => OpCode::Push3,
225            0x14 => OpCode::Push4,
226            0x15 => OpCode::Push5,
227            0x16 => OpCode::Push6,
228            0x17 => OpCode::Push7,
229            0x18 => OpCode::Push8,
230            0x19 => OpCode::Push9,
231            0x1A => OpCode::Push10,
232            0x1B => OpCode::Push11,
233            0x1C => OpCode::Push12,
234            0x1D => OpCode::Push13,
235            0x1E => OpCode::Push14,
236            0x1F => OpCode::Push15,
237            0x20 => OpCode::Push16,
238            0x21 => OpCode::Nop,
239            0x22 => OpCode::Jmp,
240            0x23 => OpCode::Jmp_L,
241            0x24 => OpCode::Jmpif,
242            0x25 => OpCode::Jmpif_L,
243            0x26 => OpCode::Jmpifnot,
244            0x27 => OpCode::Jmpifnot_L,
245            0x28 => OpCode::JmpEq,
246            0x29 => OpCode::JmpEq_L,
247            0x2A => OpCode::JmpNe,
248            0x2B => OpCode::JmpNe_L,
249            0x2C => OpCode::JmpGt,
250            0x2D => OpCode::JmpGt_L,
251            0x2E => OpCode::JmpGe,
252            0x2F => OpCode::JmpGe_L,
253            0x30 => OpCode::JmpLt,
254            0x31 => OpCode::JmpLt_L,
255            0x32 => OpCode::JmpLe,
256            0x33 => OpCode::JmpLe_L,
257            0x34 => OpCode::Call,
258            0x35 => OpCode::Call_L,
259            0x36 => OpCode::CallA,
260            0x37 => OpCode::CallT,
261            0x38 => OpCode::Abort,
262            0x39 => OpCode::Assert,
263            0x3A => OpCode::Throw,
264            0x3B => OpCode::Try,
265            0x3C => OpCode::TryL,
266            0x3D => OpCode::Endtry,
267            0x3E => OpCode::EndtryL,
268            0x3F => OpCode::Endfinally,
269            0x40 => OpCode::Ret,
270            0x41 => OpCode::Syscall,
271            0x43 => OpCode::Depth,
272            0x45 => OpCode::Drop,
273            0x46 => OpCode::Nip,
274            0x48 => OpCode::Xdrop,
275            0x49 => OpCode::Clear,
276            0x4A => OpCode::Dup,
277            0x4B => OpCode::Over,
278            0x4D => OpCode::Pick,
279            0x4E => OpCode::Tuck,
280            0x50 => OpCode::Swap,
281            0x51 => OpCode::Rot,
282            0x52 => OpCode::Roll,
283            0x53 => OpCode::Reverse3,
284            0x54 => OpCode::Reverse4,
285            0x55 => OpCode::Reversen,
286            0x56 => OpCode::Initsslot,
287            0x57 => OpCode::Initslot,
288            0x58 => OpCode::Ldsfld0,
289            0x59 => OpCode::Ldsfld1,
290            0x5A => OpCode::Ldsfld2,
291            0x5B => OpCode::Ldsfld3,
292            0x5C => OpCode::Ldsfld4,
293            0x5D => OpCode::Ldsfld5,
294            0x5E => OpCode::Ldsfld6,
295            0x5F => OpCode::Ldsfld,
296            0x60 => OpCode::Stsfld0,
297            0x61 => OpCode::Stsfld1,
298            0x62 => OpCode::Stsfld2,
299            0x63 => OpCode::Stsfld3,
300            0x64 => OpCode::Stsfld4,
301            0x65 => OpCode::Stsfld5,
302            0x66 => OpCode::Stsfld6,
303            0x67 => OpCode::Stsfld,
304            0x68 => OpCode::Ldloc0,
305            0x69 => OpCode::Ldloc1,
306            0x6A => OpCode::Ldloc2,
307            0x6B => OpCode::Ldloc3,
308            0x6C => OpCode::Ldloc4,
309            0x6D => OpCode::Ldloc5,
310            0x6E => OpCode::Ldloc6,
311            0x6F => OpCode::Ldloc,
312            0x70 => OpCode::Stloc0,
313            0x71 => OpCode::Stloc1,
314            0x72 => OpCode::Stloc2,
315            0x73 => OpCode::Stloc3,
316            0x74 => OpCode::Stloc4,
317            0x75 => OpCode::Stloc5,
318            0x76 => OpCode::Stloc6,
319            0x77 => OpCode::Stloc,
320            0x78 => OpCode::Ldarg0,
321            0x79 => OpCode::Ldarg1,
322            0x7A => OpCode::Ldarg2,
323            0x7B => OpCode::Ldarg3,
324            0x7C => OpCode::Ldarg4,
325            0x7D => OpCode::Ldarg5,
326            0x7E => OpCode::Ldarg6,
327            0x7F => OpCode::Ldarg,
328            0x80 => OpCode::Starg0,
329            0x81 => OpCode::Starg1,
330            0x82 => OpCode::Starg2,
331            0x83 => OpCode::Starg3,
332            0x84 => OpCode::Starg4,
333            0x85 => OpCode::Starg5,
334            0x86 => OpCode::Starg6,
335            0x87 => OpCode::Starg,
336            0x88 => OpCode::Newbuffer,
337            0x89 => OpCode::Memcpy,
338            0x8B => OpCode::Cat,
339            0x8C => OpCode::Substr,
340            0x8D => OpCode::Left,
341            0x8E => OpCode::Right,
342            0x90 => OpCode::Invert,
343            0x91 => OpCode::And,
344            0x92 => OpCode::Or,
345            0x93 => OpCode::Xor,
346            0x97 => OpCode::Equal,
347            0x98 => OpCode::Notequal,
348            0x99 => OpCode::Sign,
349            0x9A => OpCode::Abs,
350            0x9B => OpCode::Negate,
351            0x9C => OpCode::Inc,
352            0x9D => OpCode::Dec,
353            0x9E => OpCode::Add,
354            0x9F => OpCode::Sub,
355            0xA0 => OpCode::Mul,
356            0xA1 => OpCode::Div,
357            0xA2 => OpCode::Mod,
358            0xA3 => OpCode::Pow,
359            0xA4 => OpCode::Sqrt,
360            0xA5 => OpCode::Modmul,
361            0xA6 => OpCode::Modpow,
362            0xA8 => OpCode::Shl,
363            0xA9 => OpCode::Shr,
364            0xAA => OpCode::Not,
365            0xAB => OpCode::Booland,
366            0xAC => OpCode::Boolor,
367            0xB1 => OpCode::Nz,
368            0xB3 => OpCode::Numequal,
369            0xB4 => OpCode::Numnotequal,
370            0xB5 => OpCode::Lt,
371            0xB6 => OpCode::Le,
372            0xB7 => OpCode::Gt,
373            0xB8 => OpCode::Ge,
374            0xB9 => OpCode::Min,
375            0xBA => OpCode::Max,
376            0xBB => OpCode::Within,
377            0xBE => OpCode::Packmap,
378            0xBF => OpCode::Packstruct,
379            0xC0 => OpCode::Pack,
380            0xC1 => OpCode::Unpack,
381            0xC2 => OpCode::Newarray0,
382            0xC3 => OpCode::Newarray,
383            0xC4 => OpCode::NewarrayT,
384            0xC5 => OpCode::Newstruct0,
385            0xC6 => OpCode::Newstruct,
386            0xC8 => OpCode::Newmap,
387            0xCA => OpCode::Size,
388            0xCB => OpCode::Haskey,
389            0xCC => OpCode::Keys,
390            0xCD => OpCode::Values,
391            0xCE => OpCode::Pickitem,
392            0xCF => OpCode::Append,
393            0xD0 => OpCode::Setitem,
394            0xD1 => OpCode::Reverseitems,
395            0xD2 => OpCode::Remove,
396            0xD3 => OpCode::Clearitems,
397            0xD4 => OpCode::Popitem,
398            0xD8 => OpCode::Isnull,
399            0xD9 => OpCode::Istype,
400            0xDB => OpCode::Convert,
401            0xE0 => OpCode::Abortmsg,
402            0xE1 => OpCode::Assertmsg,
403            other => OpCode::Unknown(other),
404        }
405    }
406
407    pub fn byte(self) -> u8 {
408        match self {
409            OpCode::Pushint8 => 0x00,
410            OpCode::Pushint16 => 0x01,
411            OpCode::Pushint32 => 0x02,
412            OpCode::Pushint64 => 0x03,
413            OpCode::Pushint128 => 0x04,
414            OpCode::Pushint256 => 0x05,
415            OpCode::PushT => 0x08,
416            OpCode::PushF => 0x09,
417            OpCode::PushA => 0x0A,
418            OpCode::PushNull => 0x0B,
419            OpCode::Pushdata1 => 0x0C,
420            OpCode::Pushdata2 => 0x0D,
421            OpCode::Pushdata4 => 0x0E,
422            OpCode::PushM1 => 0x0F,
423            OpCode::Push0 => 0x10,
424            OpCode::Push1 => 0x11,
425            OpCode::Push2 => 0x12,
426            OpCode::Push3 => 0x13,
427            OpCode::Push4 => 0x14,
428            OpCode::Push5 => 0x15,
429            OpCode::Push6 => 0x16,
430            OpCode::Push7 => 0x17,
431            OpCode::Push8 => 0x18,
432            OpCode::Push9 => 0x19,
433            OpCode::Push10 => 0x1A,
434            OpCode::Push11 => 0x1B,
435            OpCode::Push12 => 0x1C,
436            OpCode::Push13 => 0x1D,
437            OpCode::Push14 => 0x1E,
438            OpCode::Push15 => 0x1F,
439            OpCode::Push16 => 0x20,
440            OpCode::Nop => 0x21,
441            OpCode::Jmp => 0x22,
442            OpCode::Jmp_L => 0x23,
443            OpCode::Jmpif => 0x24,
444            OpCode::Jmpif_L => 0x25,
445            OpCode::Jmpifnot => 0x26,
446            OpCode::Jmpifnot_L => 0x27,
447            OpCode::JmpEq => 0x28,
448            OpCode::JmpEq_L => 0x29,
449            OpCode::JmpNe => 0x2A,
450            OpCode::JmpNe_L => 0x2B,
451            OpCode::JmpGt => 0x2C,
452            OpCode::JmpGt_L => 0x2D,
453            OpCode::JmpGe => 0x2E,
454            OpCode::JmpGe_L => 0x2F,
455            OpCode::JmpLt => 0x30,
456            OpCode::JmpLt_L => 0x31,
457            OpCode::JmpLe => 0x32,
458            OpCode::JmpLe_L => 0x33,
459            OpCode::Call => 0x34,
460            OpCode::Call_L => 0x35,
461            OpCode::CallA => 0x36,
462            OpCode::CallT => 0x37,
463            OpCode::Abort => 0x38,
464            OpCode::Assert => 0x39,
465            OpCode::Throw => 0x3A,
466            OpCode::Try => 0x3B,
467            OpCode::TryL => 0x3C,
468            OpCode::Endtry => 0x3D,
469            OpCode::EndtryL => 0x3E,
470            OpCode::Endfinally => 0x3F,
471            OpCode::Ret => 0x40,
472            OpCode::Syscall => 0x41,
473            OpCode::Depth => 0x43,
474            OpCode::Drop => 0x45,
475            OpCode::Nip => 0x46,
476            OpCode::Xdrop => 0x48,
477            OpCode::Clear => 0x49,
478            OpCode::Dup => 0x4A,
479            OpCode::Over => 0x4B,
480            OpCode::Pick => 0x4D,
481            OpCode::Tuck => 0x4E,
482            OpCode::Swap => 0x50,
483            OpCode::Rot => 0x51,
484            OpCode::Roll => 0x52,
485            OpCode::Reverse3 => 0x53,
486            OpCode::Reverse4 => 0x54,
487            OpCode::Reversen => 0x55,
488            OpCode::Initsslot => 0x56,
489            OpCode::Initslot => 0x57,
490            OpCode::Ldsfld0 => 0x58,
491            OpCode::Ldsfld1 => 0x59,
492            OpCode::Ldsfld2 => 0x5A,
493            OpCode::Ldsfld3 => 0x5B,
494            OpCode::Ldsfld4 => 0x5C,
495            OpCode::Ldsfld5 => 0x5D,
496            OpCode::Ldsfld6 => 0x5E,
497            OpCode::Ldsfld => 0x5F,
498            OpCode::Stsfld0 => 0x60,
499            OpCode::Stsfld1 => 0x61,
500            OpCode::Stsfld2 => 0x62,
501            OpCode::Stsfld3 => 0x63,
502            OpCode::Stsfld4 => 0x64,
503            OpCode::Stsfld5 => 0x65,
504            OpCode::Stsfld6 => 0x66,
505            OpCode::Stsfld => 0x67,
506            OpCode::Ldloc0 => 0x68,
507            OpCode::Ldloc1 => 0x69,
508            OpCode::Ldloc2 => 0x6A,
509            OpCode::Ldloc3 => 0x6B,
510            OpCode::Ldloc4 => 0x6C,
511            OpCode::Ldloc5 => 0x6D,
512            OpCode::Ldloc6 => 0x6E,
513            OpCode::Ldloc => 0x6F,
514            OpCode::Stloc0 => 0x70,
515            OpCode::Stloc1 => 0x71,
516            OpCode::Stloc2 => 0x72,
517            OpCode::Stloc3 => 0x73,
518            OpCode::Stloc4 => 0x74,
519            OpCode::Stloc5 => 0x75,
520            OpCode::Stloc6 => 0x76,
521            OpCode::Stloc => 0x77,
522            OpCode::Ldarg0 => 0x78,
523            OpCode::Ldarg1 => 0x79,
524            OpCode::Ldarg2 => 0x7A,
525            OpCode::Ldarg3 => 0x7B,
526            OpCode::Ldarg4 => 0x7C,
527            OpCode::Ldarg5 => 0x7D,
528            OpCode::Ldarg6 => 0x7E,
529            OpCode::Ldarg => 0x7F,
530            OpCode::Starg0 => 0x80,
531            OpCode::Starg1 => 0x81,
532            OpCode::Starg2 => 0x82,
533            OpCode::Starg3 => 0x83,
534            OpCode::Starg4 => 0x84,
535            OpCode::Starg5 => 0x85,
536            OpCode::Starg6 => 0x86,
537            OpCode::Starg => 0x87,
538            OpCode::Newbuffer => 0x88,
539            OpCode::Memcpy => 0x89,
540            OpCode::Cat => 0x8B,
541            OpCode::Substr => 0x8C,
542            OpCode::Left => 0x8D,
543            OpCode::Right => 0x8E,
544            OpCode::Invert => 0x90,
545            OpCode::And => 0x91,
546            OpCode::Or => 0x92,
547            OpCode::Xor => 0x93,
548            OpCode::Equal => 0x97,
549            OpCode::Notequal => 0x98,
550            OpCode::Sign => 0x99,
551            OpCode::Abs => 0x9A,
552            OpCode::Negate => 0x9B,
553            OpCode::Inc => 0x9C,
554            OpCode::Dec => 0x9D,
555            OpCode::Add => 0x9E,
556            OpCode::Sub => 0x9F,
557            OpCode::Mul => 0xA0,
558            OpCode::Div => 0xA1,
559            OpCode::Mod => 0xA2,
560            OpCode::Pow => 0xA3,
561            OpCode::Sqrt => 0xA4,
562            OpCode::Modmul => 0xA5,
563            OpCode::Modpow => 0xA6,
564            OpCode::Shl => 0xA8,
565            OpCode::Shr => 0xA9,
566            OpCode::Not => 0xAA,
567            OpCode::Booland => 0xAB,
568            OpCode::Boolor => 0xAC,
569            OpCode::Nz => 0xB1,
570            OpCode::Numequal => 0xB3,
571            OpCode::Numnotequal => 0xB4,
572            OpCode::Lt => 0xB5,
573            OpCode::Le => 0xB6,
574            OpCode::Gt => 0xB7,
575            OpCode::Ge => 0xB8,
576            OpCode::Min => 0xB9,
577            OpCode::Max => 0xBA,
578            OpCode::Within => 0xBB,
579            OpCode::Packmap => 0xBE,
580            OpCode::Packstruct => 0xBF,
581            OpCode::Pack => 0xC0,
582            OpCode::Unpack => 0xC1,
583            OpCode::Newarray0 => 0xC2,
584            OpCode::Newarray => 0xC3,
585            OpCode::NewarrayT => 0xC4,
586            OpCode::Newstruct0 => 0xC5,
587            OpCode::Newstruct => 0xC6,
588            OpCode::Newmap => 0xC8,
589            OpCode::Size => 0xCA,
590            OpCode::Haskey => 0xCB,
591            OpCode::Keys => 0xCC,
592            OpCode::Values => 0xCD,
593            OpCode::Pickitem => 0xCE,
594            OpCode::Append => 0xCF,
595            OpCode::Setitem => 0xD0,
596            OpCode::Reverseitems => 0xD1,
597            OpCode::Remove => 0xD2,
598            OpCode::Clearitems => 0xD3,
599            OpCode::Popitem => 0xD4,
600            OpCode::Isnull => 0xD8,
601            OpCode::Istype => 0xD9,
602            OpCode::Convert => 0xDB,
603            OpCode::Abortmsg => 0xE0,
604            OpCode::Assertmsg => 0xE1,
605            OpCode::Unknown(value) => value,
606        }
607    }
608
609    pub fn mnemonic(self) -> &'static str {
610        match self {
611            OpCode::Pushint8 => "PUSHINT8",
612            OpCode::Pushint16 => "PUSHINT16",
613            OpCode::Pushint32 => "PUSHINT32",
614            OpCode::Pushint64 => "PUSHINT64",
615            OpCode::Pushint128 => "PUSHINT128",
616            OpCode::Pushint256 => "PUSHINT256",
617            OpCode::PushT => "PUSHT",
618            OpCode::PushF => "PUSHF",
619            OpCode::PushA => "PUSHA",
620            OpCode::PushNull => "PUSHNULL",
621            OpCode::Pushdata1 => "PUSHDATA1",
622            OpCode::Pushdata2 => "PUSHDATA2",
623            OpCode::Pushdata4 => "PUSHDATA4",
624            OpCode::PushM1 => "PUSHM1",
625            OpCode::Push0 => "PUSH0",
626            OpCode::Push1 => "PUSH1",
627            OpCode::Push2 => "PUSH2",
628            OpCode::Push3 => "PUSH3",
629            OpCode::Push4 => "PUSH4",
630            OpCode::Push5 => "PUSH5",
631            OpCode::Push6 => "PUSH6",
632            OpCode::Push7 => "PUSH7",
633            OpCode::Push8 => "PUSH8",
634            OpCode::Push9 => "PUSH9",
635            OpCode::Push10 => "PUSH10",
636            OpCode::Push11 => "PUSH11",
637            OpCode::Push12 => "PUSH12",
638            OpCode::Push13 => "PUSH13",
639            OpCode::Push14 => "PUSH14",
640            OpCode::Push15 => "PUSH15",
641            OpCode::Push16 => "PUSH16",
642            OpCode::Nop => "NOP",
643            OpCode::Jmp => "JMP",
644            OpCode::Jmp_L => "JMP_L",
645            OpCode::Jmpif => "JMPIF",
646            OpCode::Jmpif_L => "JMPIF_L",
647            OpCode::Jmpifnot => "JMPIFNOT",
648            OpCode::Jmpifnot_L => "JMPIFNOT_L",
649            OpCode::JmpEq => "JMPEQ",
650            OpCode::JmpEq_L => "JMPEQ_L",
651            OpCode::JmpNe => "JMPNE",
652            OpCode::JmpNe_L => "JMPNE_L",
653            OpCode::JmpGt => "JMPGT",
654            OpCode::JmpGt_L => "JMPGT_L",
655            OpCode::JmpGe => "JMPGE",
656            OpCode::JmpGe_L => "JMPGE_L",
657            OpCode::JmpLt => "JMPLT",
658            OpCode::JmpLt_L => "JMPLT_L",
659            OpCode::JmpLe => "JMPLE",
660            OpCode::JmpLe_L => "JMPLE_L",
661            OpCode::Call => "CALL",
662            OpCode::Call_L => "CALL_L",
663            OpCode::CallA => "CALLA",
664            OpCode::CallT => "CALLT",
665            OpCode::Abort => "ABORT",
666            OpCode::Assert => "ASSERT",
667            OpCode::Throw => "THROW",
668            OpCode::Try => "TRY",
669            OpCode::TryL => "TRY_L",
670            OpCode::Endtry => "ENDTRY",
671            OpCode::EndtryL => "ENDTRY_L",
672            OpCode::Endfinally => "ENDFINALLY",
673            OpCode::Ret => "RET",
674            OpCode::Syscall => "SYSCALL",
675            OpCode::Depth => "DEPTH",
676            OpCode::Drop => "DROP",
677            OpCode::Nip => "NIP",
678            OpCode::Xdrop => "XDROP",
679            OpCode::Clear => "CLEAR",
680            OpCode::Dup => "DUP",
681            OpCode::Over => "OVER",
682            OpCode::Pick => "PICK",
683            OpCode::Tuck => "TUCK",
684            OpCode::Swap => "SWAP",
685            OpCode::Rot => "ROT",
686            OpCode::Roll => "ROLL",
687            OpCode::Reverse3 => "REVERSE3",
688            OpCode::Reverse4 => "REVERSE4",
689            OpCode::Reversen => "REVERSEN",
690            OpCode::Initsslot => "INITSSLOT",
691            OpCode::Initslot => "INITSLOT",
692            OpCode::Ldsfld0 => "LDSFLD0",
693            OpCode::Ldsfld1 => "LDSFLD1",
694            OpCode::Ldsfld2 => "LDSFLD2",
695            OpCode::Ldsfld3 => "LDSFLD3",
696            OpCode::Ldsfld4 => "LDSFLD4",
697            OpCode::Ldsfld5 => "LDSFLD5",
698            OpCode::Ldsfld6 => "LDSFLD6",
699            OpCode::Ldsfld => "LDSFLD",
700            OpCode::Stsfld0 => "STSFLD0",
701            OpCode::Stsfld1 => "STSFLD1",
702            OpCode::Stsfld2 => "STSFLD2",
703            OpCode::Stsfld3 => "STSFLD3",
704            OpCode::Stsfld4 => "STSFLD4",
705            OpCode::Stsfld5 => "STSFLD5",
706            OpCode::Stsfld6 => "STSFLD6",
707            OpCode::Stsfld => "STSFLD",
708            OpCode::Ldloc0 => "LDLOC0",
709            OpCode::Ldloc1 => "LDLOC1",
710            OpCode::Ldloc2 => "LDLOC2",
711            OpCode::Ldloc3 => "LDLOC3",
712            OpCode::Ldloc4 => "LDLOC4",
713            OpCode::Ldloc5 => "LDLOC5",
714            OpCode::Ldloc6 => "LDLOC6",
715            OpCode::Ldloc => "LDLOC",
716            OpCode::Stloc0 => "STLOC0",
717            OpCode::Stloc1 => "STLOC1",
718            OpCode::Stloc2 => "STLOC2",
719            OpCode::Stloc3 => "STLOC3",
720            OpCode::Stloc4 => "STLOC4",
721            OpCode::Stloc5 => "STLOC5",
722            OpCode::Stloc6 => "STLOC6",
723            OpCode::Stloc => "STLOC",
724            OpCode::Ldarg0 => "LDARG0",
725            OpCode::Ldarg1 => "LDARG1",
726            OpCode::Ldarg2 => "LDARG2",
727            OpCode::Ldarg3 => "LDARG3",
728            OpCode::Ldarg4 => "LDARG4",
729            OpCode::Ldarg5 => "LDARG5",
730            OpCode::Ldarg6 => "LDARG6",
731            OpCode::Ldarg => "LDARG",
732            OpCode::Starg0 => "STARG0",
733            OpCode::Starg1 => "STARG1",
734            OpCode::Starg2 => "STARG2",
735            OpCode::Starg3 => "STARG3",
736            OpCode::Starg4 => "STARG4",
737            OpCode::Starg5 => "STARG5",
738            OpCode::Starg6 => "STARG6",
739            OpCode::Starg => "STARG",
740            OpCode::Newbuffer => "NEWBUFFER",
741            OpCode::Memcpy => "MEMCPY",
742            OpCode::Cat => "CAT",
743            OpCode::Substr => "SUBSTR",
744            OpCode::Left => "LEFT",
745            OpCode::Right => "RIGHT",
746            OpCode::Invert => "INVERT",
747            OpCode::And => "AND",
748            OpCode::Or => "OR",
749            OpCode::Xor => "XOR",
750            OpCode::Equal => "EQUAL",
751            OpCode::Notequal => "NOTEQUAL",
752            OpCode::Sign => "SIGN",
753            OpCode::Abs => "ABS",
754            OpCode::Negate => "NEGATE",
755            OpCode::Inc => "INC",
756            OpCode::Dec => "DEC",
757            OpCode::Add => "ADD",
758            OpCode::Sub => "SUB",
759            OpCode::Mul => "MUL",
760            OpCode::Div => "DIV",
761            OpCode::Mod => "MOD",
762            OpCode::Pow => "POW",
763            OpCode::Sqrt => "SQRT",
764            OpCode::Modmul => "MODMUL",
765            OpCode::Modpow => "MODPOW",
766            OpCode::Shl => "SHL",
767            OpCode::Shr => "SHR",
768            OpCode::Not => "NOT",
769            OpCode::Booland => "BOOLAND",
770            OpCode::Boolor => "BOOLOR",
771            OpCode::Nz => "NZ",
772            OpCode::Numequal => "NUMEQUAL",
773            OpCode::Numnotequal => "NUMNOTEQUAL",
774            OpCode::Lt => "LT",
775            OpCode::Le => "LE",
776            OpCode::Gt => "GT",
777            OpCode::Ge => "GE",
778            OpCode::Min => "MIN",
779            OpCode::Max => "MAX",
780            OpCode::Within => "WITHIN",
781            OpCode::Packmap => "PACKMAP",
782            OpCode::Packstruct => "PACKSTRUCT",
783            OpCode::Pack => "PACK",
784            OpCode::Unpack => "UNPACK",
785            OpCode::Newarray0 => "NEWARRAY0",
786            OpCode::Newarray => "NEWARRAY",
787            OpCode::NewarrayT => "NEWARRAY_T",
788            OpCode::Newstruct0 => "NEWSTRUCT0",
789            OpCode::Newstruct => "NEWSTRUCT",
790            OpCode::Newmap => "NEWMAP",
791            OpCode::Size => "SIZE",
792            OpCode::Haskey => "HASKEY",
793            OpCode::Keys => "KEYS",
794            OpCode::Values => "VALUES",
795            OpCode::Pickitem => "PICKITEM",
796            OpCode::Append => "APPEND",
797            OpCode::Setitem => "SETITEM",
798            OpCode::Reverseitems => "REVERSEITEMS",
799            OpCode::Remove => "REMOVE",
800            OpCode::Clearitems => "CLEARITEMS",
801            OpCode::Popitem => "POPITEM",
802            OpCode::Isnull => "ISNULL",
803            OpCode::Istype => "ISTYPE",
804            OpCode::Convert => "CONVERT",
805            OpCode::Abortmsg => "ABORTMSG",
806            OpCode::Assertmsg => "ASSERTMSG",
807            OpCode::Unknown(_) => "UNKNOWN",
808        }
809    }
810
811    pub fn operand_encoding(self) -> OperandEncoding {
812        match self {
813            OpCode::Pushint8 => OperandEncoding::I8,
814            OpCode::Pushint16 => OperandEncoding::I16,
815            OpCode::Pushint32 => OperandEncoding::I32,
816            OpCode::Pushint64 => OperandEncoding::I64,
817            OpCode::Pushint128 => OperandEncoding::Bytes(16),
818            OpCode::Pushint256 => OperandEncoding::Bytes(32),
819            OpCode::PushT => OperandEncoding::None,
820            OpCode::PushF => OperandEncoding::None,
821            OpCode::PushA => OperandEncoding::U32,
822            OpCode::PushNull => OperandEncoding::None,
823            OpCode::Pushdata1 => OperandEncoding::Data1,
824            OpCode::Pushdata2 => OperandEncoding::Data2,
825            OpCode::Pushdata4 => OperandEncoding::Data4,
826            OpCode::PushM1 => OperandEncoding::None,
827            OpCode::Push0 => OperandEncoding::None,
828            OpCode::Push1 => OperandEncoding::None,
829            OpCode::Push2 => OperandEncoding::None,
830            OpCode::Push3 => OperandEncoding::None,
831            OpCode::Push4 => OperandEncoding::None,
832            OpCode::Push5 => OperandEncoding::None,
833            OpCode::Push6 => OperandEncoding::None,
834            OpCode::Push7 => OperandEncoding::None,
835            OpCode::Push8 => OperandEncoding::None,
836            OpCode::Push9 => OperandEncoding::None,
837            OpCode::Push10 => OperandEncoding::None,
838            OpCode::Push11 => OperandEncoding::None,
839            OpCode::Push12 => OperandEncoding::None,
840            OpCode::Push13 => OperandEncoding::None,
841            OpCode::Push14 => OperandEncoding::None,
842            OpCode::Push15 => OperandEncoding::None,
843            OpCode::Push16 => OperandEncoding::None,
844            OpCode::Nop => OperandEncoding::None,
845            OpCode::Jmp => OperandEncoding::Jump8,
846            OpCode::Jmp_L => OperandEncoding::Jump32,
847            OpCode::Jmpif => OperandEncoding::Jump8,
848            OpCode::Jmpif_L => OperandEncoding::Jump32,
849            OpCode::Jmpifnot => OperandEncoding::Jump8,
850            OpCode::Jmpifnot_L => OperandEncoding::Jump32,
851            OpCode::JmpEq => OperandEncoding::Jump8,
852            OpCode::JmpEq_L => OperandEncoding::Jump32,
853            OpCode::JmpNe => OperandEncoding::Jump8,
854            OpCode::JmpNe_L => OperandEncoding::Jump32,
855            OpCode::JmpGt => OperandEncoding::Jump8,
856            OpCode::JmpGt_L => OperandEncoding::Jump32,
857            OpCode::JmpGe => OperandEncoding::Jump8,
858            OpCode::JmpGe_L => OperandEncoding::Jump32,
859            OpCode::JmpLt => OperandEncoding::Jump8,
860            OpCode::JmpLt_L => OperandEncoding::Jump32,
861            OpCode::JmpLe => OperandEncoding::Jump8,
862            OpCode::JmpLe_L => OperandEncoding::Jump32,
863            OpCode::Call => OperandEncoding::Jump8,
864            OpCode::Call_L => OperandEncoding::Jump32,
865            OpCode::CallA => OperandEncoding::None,
866            OpCode::CallT => OperandEncoding::U16,
867            OpCode::Abort => OperandEncoding::None,
868            OpCode::Assert => OperandEncoding::None,
869            OpCode::Throw => OperandEncoding::None,
870            OpCode::Try => OperandEncoding::Bytes(2),
871            OpCode::TryL => OperandEncoding::Bytes(8),
872            OpCode::Endtry => OperandEncoding::Jump8,
873            OpCode::EndtryL => OperandEncoding::Jump32,
874            OpCode::Endfinally => OperandEncoding::None,
875            OpCode::Ret => OperandEncoding::None,
876            OpCode::Syscall => OperandEncoding::Syscall,
877            OpCode::Depth => OperandEncoding::None,
878            OpCode::Drop => OperandEncoding::None,
879            OpCode::Nip => OperandEncoding::None,
880            OpCode::Xdrop => OperandEncoding::None,
881            OpCode::Clear => OperandEncoding::None,
882            OpCode::Dup => OperandEncoding::None,
883            OpCode::Over => OperandEncoding::None,
884            OpCode::Pick => OperandEncoding::None,
885            OpCode::Tuck => OperandEncoding::None,
886            OpCode::Swap => OperandEncoding::None,
887            OpCode::Rot => OperandEncoding::None,
888            OpCode::Roll => OperandEncoding::None,
889            OpCode::Reverse3 => OperandEncoding::None,
890            OpCode::Reverse4 => OperandEncoding::None,
891            OpCode::Reversen => OperandEncoding::None,
892            OpCode::Initsslot => OperandEncoding::U8,
893            OpCode::Initslot => OperandEncoding::Bytes(2),
894            OpCode::Ldsfld0 => OperandEncoding::None,
895            OpCode::Ldsfld1 => OperandEncoding::None,
896            OpCode::Ldsfld2 => OperandEncoding::None,
897            OpCode::Ldsfld3 => OperandEncoding::None,
898            OpCode::Ldsfld4 => OperandEncoding::None,
899            OpCode::Ldsfld5 => OperandEncoding::None,
900            OpCode::Ldsfld6 => OperandEncoding::None,
901            OpCode::Ldsfld => OperandEncoding::U8,
902            OpCode::Stsfld0 => OperandEncoding::None,
903            OpCode::Stsfld1 => OperandEncoding::None,
904            OpCode::Stsfld2 => OperandEncoding::None,
905            OpCode::Stsfld3 => OperandEncoding::None,
906            OpCode::Stsfld4 => OperandEncoding::None,
907            OpCode::Stsfld5 => OperandEncoding::None,
908            OpCode::Stsfld6 => OperandEncoding::None,
909            OpCode::Stsfld => OperandEncoding::U8,
910            OpCode::Ldloc0 => OperandEncoding::None,
911            OpCode::Ldloc1 => OperandEncoding::None,
912            OpCode::Ldloc2 => OperandEncoding::None,
913            OpCode::Ldloc3 => OperandEncoding::None,
914            OpCode::Ldloc4 => OperandEncoding::None,
915            OpCode::Ldloc5 => OperandEncoding::None,
916            OpCode::Ldloc6 => OperandEncoding::None,
917            OpCode::Ldloc => OperandEncoding::U8,
918            OpCode::Stloc0 => OperandEncoding::None,
919            OpCode::Stloc1 => OperandEncoding::None,
920            OpCode::Stloc2 => OperandEncoding::None,
921            OpCode::Stloc3 => OperandEncoding::None,
922            OpCode::Stloc4 => OperandEncoding::None,
923            OpCode::Stloc5 => OperandEncoding::None,
924            OpCode::Stloc6 => OperandEncoding::None,
925            OpCode::Stloc => OperandEncoding::U8,
926            OpCode::Ldarg0 => OperandEncoding::None,
927            OpCode::Ldarg1 => OperandEncoding::None,
928            OpCode::Ldarg2 => OperandEncoding::None,
929            OpCode::Ldarg3 => OperandEncoding::None,
930            OpCode::Ldarg4 => OperandEncoding::None,
931            OpCode::Ldarg5 => OperandEncoding::None,
932            OpCode::Ldarg6 => OperandEncoding::None,
933            OpCode::Ldarg => OperandEncoding::U8,
934            OpCode::Starg0 => OperandEncoding::None,
935            OpCode::Starg1 => OperandEncoding::None,
936            OpCode::Starg2 => OperandEncoding::None,
937            OpCode::Starg3 => OperandEncoding::None,
938            OpCode::Starg4 => OperandEncoding::None,
939            OpCode::Starg5 => OperandEncoding::None,
940            OpCode::Starg6 => OperandEncoding::None,
941            OpCode::Starg => OperandEncoding::U8,
942            OpCode::Newbuffer => OperandEncoding::None,
943            OpCode::Memcpy => OperandEncoding::None,
944            OpCode::Cat => OperandEncoding::None,
945            OpCode::Substr => OperandEncoding::None,
946            OpCode::Left => OperandEncoding::None,
947            OpCode::Right => OperandEncoding::None,
948            OpCode::Invert => OperandEncoding::None,
949            OpCode::And => OperandEncoding::None,
950            OpCode::Or => OperandEncoding::None,
951            OpCode::Xor => OperandEncoding::None,
952            OpCode::Equal => OperandEncoding::None,
953            OpCode::Notequal => OperandEncoding::None,
954            OpCode::Sign => OperandEncoding::None,
955            OpCode::Abs => OperandEncoding::None,
956            OpCode::Negate => OperandEncoding::None,
957            OpCode::Inc => OperandEncoding::None,
958            OpCode::Dec => OperandEncoding::None,
959            OpCode::Add => OperandEncoding::None,
960            OpCode::Sub => OperandEncoding::None,
961            OpCode::Mul => OperandEncoding::None,
962            OpCode::Div => OperandEncoding::None,
963            OpCode::Mod => OperandEncoding::None,
964            OpCode::Pow => OperandEncoding::None,
965            OpCode::Sqrt => OperandEncoding::None,
966            OpCode::Modmul => OperandEncoding::None,
967            OpCode::Modpow => OperandEncoding::None,
968            OpCode::Shl => OperandEncoding::None,
969            OpCode::Shr => OperandEncoding::None,
970            OpCode::Not => OperandEncoding::None,
971            OpCode::Booland => OperandEncoding::None,
972            OpCode::Boolor => OperandEncoding::None,
973            OpCode::Nz => OperandEncoding::None,
974            OpCode::Numequal => OperandEncoding::None,
975            OpCode::Numnotequal => OperandEncoding::None,
976            OpCode::Lt => OperandEncoding::None,
977            OpCode::Le => OperandEncoding::None,
978            OpCode::Gt => OperandEncoding::None,
979            OpCode::Ge => OperandEncoding::None,
980            OpCode::Min => OperandEncoding::None,
981            OpCode::Max => OperandEncoding::None,
982            OpCode::Within => OperandEncoding::None,
983            OpCode::Packmap => OperandEncoding::None,
984            OpCode::Packstruct => OperandEncoding::None,
985            OpCode::Pack => OperandEncoding::None,
986            OpCode::Unpack => OperandEncoding::None,
987            OpCode::Newarray0 => OperandEncoding::None,
988            OpCode::Newarray => OperandEncoding::None,
989            OpCode::NewarrayT => OperandEncoding::U8,
990            OpCode::Newstruct0 => OperandEncoding::None,
991            OpCode::Newstruct => OperandEncoding::None,
992            OpCode::Newmap => OperandEncoding::None,
993            OpCode::Size => OperandEncoding::None,
994            OpCode::Haskey => OperandEncoding::None,
995            OpCode::Keys => OperandEncoding::None,
996            OpCode::Values => OperandEncoding::None,
997            OpCode::Pickitem => OperandEncoding::None,
998            OpCode::Append => OperandEncoding::None,
999            OpCode::Setitem => OperandEncoding::None,
1000            OpCode::Reverseitems => OperandEncoding::None,
1001            OpCode::Remove => OperandEncoding::None,
1002            OpCode::Clearitems => OperandEncoding::None,
1003            OpCode::Popitem => OperandEncoding::None,
1004            OpCode::Isnull => OperandEncoding::None,
1005            OpCode::Istype => OperandEncoding::U8,
1006            OpCode::Convert => OperandEncoding::U8,
1007            OpCode::Abortmsg => OperandEncoding::None,
1008            OpCode::Assertmsg => OperandEncoding::None,
1009            OpCode::Unknown(_) => OperandEncoding::None,
1010        }
1011    }
1012}