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