1pub const POP_TOP: u8 = 1;
2pub const ROT_TWO: u8 = 2;
3pub const ROT_THREE: u8 = 3;
4pub const DUP_TOP: u8 = 4;
5pub const DUP_TOP_TWO: u8 = 5;
6pub const ROT_FOUR: u8 = 6;
7pub const NOP: u8 = 9;
8pub const UNARY_POSITIVE: u8 = 10;
9pub const UNARY_NEGATIVE: u8 = 11;
10pub const UNARY_NOT: u8 = 12;
11pub const UNARY_INVERT: u8 = 15;
12pub const BINARY_MATRIX_MULTIPLY: u8 = 16;
13pub const INPLACE_MATRIX_MULTIPLY: u8 = 17;
14pub const BINARY_POWER: u8 = 19;
15pub const BINARY_MULTIPLY: u8 = 20;
16pub const BINARY_MODULO: u8 = 22;
17pub const BINARY_ADD: u8 = 23;
18pub const BINARY_SUBTRACT: u8 = 24;
19pub const BINARY_SUBSCR: u8 = 25;
20pub const BINARY_FLOOR_DIVIDE: u8 = 26;
21pub const BINARY_TRUE_DIVIDE: u8 = 27;
22pub const INPLACE_FLOOR_DIVIDE: u8 = 28;
23pub const INPLACE_TRUE_DIVIDE: u8 = 29;
24pub const RERAISE: u8 = 48;
25pub const WITH_EXCEPT_START: u8 = 49;
26pub const GET_AITER: u8 = 50;
27pub const GET_ANEXT: u8 = 51;
28pub const BEFORE_ASYNC_WITH: u8 = 52;
29pub const END_ASYNC_FOR: u8 = 54;
30pub const INPLACE_ADD: u8 = 55;
31pub const INPLACE_SUBTRACT: u8 = 56;
32pub const INPLACE_MULTIPLY: u8 = 57;
33pub const INPLACE_MODULO: u8 = 59;
34pub const STORE_SUBSCR: u8 = 60;
35pub const DELETE_SUBSCR: u8 = 61;
36pub const BINARY_LSHIFT: u8 = 62;
37pub const BINARY_RSHIFT: u8 = 63;
38pub const BINARY_AND: u8 = 64;
39pub const BINARY_XOR: u8 = 65;
40pub const BINARY_OR: u8 = 66;
41pub const INPLACE_POWER: u8 = 67;
42pub const GET_ITER: u8 = 68;
43pub const GET_YIELD_FROM_ITER: u8 = 69;
44pub const PRINT_EXPR: u8 = 70;
45pub const LOAD_BUILD_CLASS: u8 = 71;
46pub const YIELD_FROM: u8 = 72;
47pub const GET_AWAITABLE: u8 = 73;
48pub const LOAD_ASSERTION_ERROR: u8 = 74;
49pub const INPLACE_LSHIFT: u8 = 75;
50pub const INPLACE_RSHIFT: u8 = 76;
51pub const INPLACE_AND: u8 = 77;
52pub const INPLACE_XOR: u8 = 78;
53pub const INPLACE_OR: u8 = 79;
54pub const LIST_TO_TUPLE: u8 = 82;
55pub const RETURN_VALUE: u8 = 83;
56pub const IMPORT_STAR: u8 = 84;
57pub const SETUP_ANNOTATIONS: u8 = 85;
58pub const YIELD_VALUE: u8 = 86;
59pub const POP_BLOCK: u8 = 87;
60pub const POP_EXCEPT: u8 = 89;
61pub const HAVE_ARGUMENT: u8 = 90;
62pub const STORE_NAME: u8 = 90;
63pub const DELETE_NAME: u8 = 91;
64pub const UNPACK_SEQUENCE: u8 = 92;
65pub const FOR_ITER: u8 = 93;
66pub const UNPACK_EX: u8 = 94;
67pub const STORE_ATTR: u8 = 95;
68pub const DELETE_ATTR: u8 = 96;
69pub const STORE_GLOBAL: u8 = 97;
70pub const DELETE_GLOBAL: u8 = 98;
71pub const LOAD_CONST: u8 = 100;
72pub const LOAD_NAME: u8 = 101;
73pub const BUILD_TUPLE: u8 = 102;
74pub const BUILD_LIST: u8 = 103;
75pub const BUILD_SET: u8 = 104;
76pub const BUILD_MAP: u8 = 105;
77pub const LOAD_ATTR: u8 = 106;
78pub const COMPARE_OP: u8 = 107;
79pub const IMPORT_NAME: u8 = 108;
80pub const IMPORT_FROM: u8 = 109;
81pub const JUMP_FORWARD: u8 = 110;
82pub const JUMP_IF_FALSE_OR_POP: u8 = 111;
83pub const JUMP_IF_TRUE_OR_POP: u8 = 112;
84pub const JUMP_ABSOLUTE: u8 = 113;
85pub const POP_JUMP_IF_FALSE: u8 = 114;
86pub const POP_JUMP_IF_TRUE: u8 = 115;
87pub const LOAD_GLOBAL: u8 = 116;
88pub const IS_OP: u8 = 117;
89pub const CONTAINS_OP: u8 = 118;
90pub const JUMP_IF_NOT_EXC_MATCH: u8 = 121;
91pub const SETUP_FINALLY: u8 = 122;
92pub const LOAD_FAST: u8 = 124;
93pub const STORE_FAST: u8 = 125;
94pub const DELETE_FAST: u8 = 126;
95pub const RAISE_VARARGS: u8 = 130;
96pub const CALL_FUNCTION: u8 = 131;
97pub const MAKE_FUNCTION: u8 = 132;
98pub const BUILD_SLICE: u8 = 133;
99pub const LOAD_CLOSURE: u8 = 135;
100pub const LOAD_DEREF: u8 = 136;
101pub const STORE_DEREF: u8 = 137;
102pub const DELETE_DEREF: u8 = 138;
103pub const CALL_FUNCTION_KW: u8 = 141;
104pub const CALL_FUNCTION_EX: u8 = 142;
105pub const SETUP_WITH: u8 = 143;
106pub const EXTENDED_ARG: u8 = 144;
107pub const LIST_APPEND: u8 = 145;
108pub const SET_ADD: u8 = 146;
109pub const MAP_ADD: u8 = 147;
110pub const LOAD_CLASSDEREF: u8 = 148;
111pub const SETUP_ASYNC_WITH: u8 = 154;
112pub const FORMAT_VALUE: u8 = 155;
113pub const BUILD_CONST_KEY_MAP: u8 = 156;
114pub const BUILD_STRING: u8 = 157;
115pub const LOAD_METHOD: u8 = 160;
116pub const CALL_METHOD: u8 = 161;
117pub const LIST_EXTEND: u8 = 162;
118pub const SET_UPDATE: u8 = 163;
119pub const DICT_MERGE: u8 = 164;
120pub const DICT_UPDATE: u8 = 165;
121
122pub fn to_string(opcode: u8) -> String {
123 macro_rules! op {
124 ($op:tt) => {
125 if opcode == $op {
126 return stringify!($op).to_string();
127 }
128 };
129 }
130
131 op!(BINARY_ADD);
132 op!(BUILD_LIST);
133 op!(CALL_FUNCTION);
134 op!(DELETE_FAST);
135 op!(IMPORT_FROM);
136 op!(IMPORT_NAME);
137 op!(LOAD_BUILD_CLASS);
138 op!(LOAD_CONST);
139 op!(LOAD_FAST);
140 op!(LOAD_GLOBAL);
141 op!(LOAD_NAME);
142 op!(MAKE_FUNCTION);
143 op!(POP_TOP);
144 op!(RETURN_VALUE);
145 op!(STORE_FAST);
146 op!(STORE_NAME);
147 op!(BUILD_CONST_KEY_MAP);
148 op!(BINARY_SUBSCR);
149 op!(COMPARE_OP);
150 op!(POP_JUMP_IF_TRUE);
151
152 format!("unknown code {}", opcode)
153}
154
155#[derive(Debug, Clone, PartialEq)]
156pub struct Opcode {
157 pub op: u8,
158 pub arg: u8,
159}