]>
Commit | Line | Data |
---|---|---|
3257aa99 DM |
1 | \r |
2 | """\r | |
3 | opcode module - potentially shared between dis and other modules which\r | |
4 | operate on bytecodes (e.g. peephole optimizers).\r | |
5 | """\r | |
6 | \r | |
7 | __all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs",\r | |
8 | "haslocal", "hascompare", "hasfree", "opname", "opmap",\r | |
9 | "HAVE_ARGUMENT", "EXTENDED_ARG"]\r | |
10 | \r | |
11 | cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',\r | |
12 | 'is not', 'exception match', 'BAD')\r | |
13 | \r | |
14 | hasconst = []\r | |
15 | hasname = []\r | |
16 | hasjrel = []\r | |
17 | hasjabs = []\r | |
18 | haslocal = []\r | |
19 | hascompare = []\r | |
20 | hasfree = []\r | |
21 | \r | |
22 | opmap = {}\r | |
23 | opname = [''] * 256\r | |
24 | for op in range(256): opname[op] = '<%r>' % (op,)\r | |
25 | del op\r | |
26 | \r | |
27 | def def_op(name, op):\r | |
28 | opname[op] = name\r | |
29 | opmap[name] = op\r | |
30 | \r | |
31 | def name_op(name, op):\r | |
32 | def_op(name, op)\r | |
33 | hasname.append(op)\r | |
34 | \r | |
35 | def jrel_op(name, op):\r | |
36 | def_op(name, op)\r | |
37 | hasjrel.append(op)\r | |
38 | \r | |
39 | def jabs_op(name, op):\r | |
40 | def_op(name, op)\r | |
41 | hasjabs.append(op)\r | |
42 | \r | |
43 | # Instruction opcodes for compiled code\r | |
44 | # Blank lines correspond to available opcodes\r | |
45 | \r | |
46 | def_op('STOP_CODE', 0)\r | |
47 | def_op('POP_TOP', 1)\r | |
48 | def_op('ROT_TWO', 2)\r | |
49 | def_op('ROT_THREE', 3)\r | |
50 | def_op('DUP_TOP', 4)\r | |
51 | def_op('ROT_FOUR', 5)\r | |
52 | \r | |
53 | def_op('NOP', 9)\r | |
54 | def_op('UNARY_POSITIVE', 10)\r | |
55 | def_op('UNARY_NEGATIVE', 11)\r | |
56 | def_op('UNARY_NOT', 12)\r | |
57 | def_op('UNARY_CONVERT', 13)\r | |
58 | \r | |
59 | def_op('UNARY_INVERT', 15)\r | |
60 | \r | |
61 | def_op('BINARY_POWER', 19)\r | |
62 | def_op('BINARY_MULTIPLY', 20)\r | |
63 | def_op('BINARY_DIVIDE', 21)\r | |
64 | def_op('BINARY_MODULO', 22)\r | |
65 | def_op('BINARY_ADD', 23)\r | |
66 | def_op('BINARY_SUBTRACT', 24)\r | |
67 | def_op('BINARY_SUBSCR', 25)\r | |
68 | def_op('BINARY_FLOOR_DIVIDE', 26)\r | |
69 | def_op('BINARY_TRUE_DIVIDE', 27)\r | |
70 | def_op('INPLACE_FLOOR_DIVIDE', 28)\r | |
71 | def_op('INPLACE_TRUE_DIVIDE', 29)\r | |
72 | def_op('SLICE+0', 30)\r | |
73 | def_op('SLICE+1', 31)\r | |
74 | def_op('SLICE+2', 32)\r | |
75 | def_op('SLICE+3', 33)\r | |
76 | \r | |
77 | def_op('STORE_SLICE+0', 40)\r | |
78 | def_op('STORE_SLICE+1', 41)\r | |
79 | def_op('STORE_SLICE+2', 42)\r | |
80 | def_op('STORE_SLICE+3', 43)\r | |
81 | \r | |
82 | def_op('DELETE_SLICE+0', 50)\r | |
83 | def_op('DELETE_SLICE+1', 51)\r | |
84 | def_op('DELETE_SLICE+2', 52)\r | |
85 | def_op('DELETE_SLICE+3', 53)\r | |
86 | \r | |
87 | def_op('STORE_MAP', 54)\r | |
88 | def_op('INPLACE_ADD', 55)\r | |
89 | def_op('INPLACE_SUBTRACT', 56)\r | |
90 | def_op('INPLACE_MULTIPLY', 57)\r | |
91 | def_op('INPLACE_DIVIDE', 58)\r | |
92 | def_op('INPLACE_MODULO', 59)\r | |
93 | def_op('STORE_SUBSCR', 60)\r | |
94 | def_op('DELETE_SUBSCR', 61)\r | |
95 | def_op('BINARY_LSHIFT', 62)\r | |
96 | def_op('BINARY_RSHIFT', 63)\r | |
97 | def_op('BINARY_AND', 64)\r | |
98 | def_op('BINARY_XOR', 65)\r | |
99 | def_op('BINARY_OR', 66)\r | |
100 | def_op('INPLACE_POWER', 67)\r | |
101 | def_op('GET_ITER', 68)\r | |
102 | \r | |
103 | def_op('PRINT_EXPR', 70)\r | |
104 | def_op('PRINT_ITEM', 71)\r | |
105 | def_op('PRINT_NEWLINE', 72)\r | |
106 | def_op('PRINT_ITEM_TO', 73)\r | |
107 | def_op('PRINT_NEWLINE_TO', 74)\r | |
108 | def_op('INPLACE_LSHIFT', 75)\r | |
109 | def_op('INPLACE_RSHIFT', 76)\r | |
110 | def_op('INPLACE_AND', 77)\r | |
111 | def_op('INPLACE_XOR', 78)\r | |
112 | def_op('INPLACE_OR', 79)\r | |
113 | def_op('BREAK_LOOP', 80)\r | |
114 | def_op('WITH_CLEANUP', 81)\r | |
115 | def_op('LOAD_LOCALS', 82)\r | |
116 | def_op('RETURN_VALUE', 83)\r | |
117 | def_op('IMPORT_STAR', 84)\r | |
118 | def_op('EXEC_STMT', 85)\r | |
119 | def_op('YIELD_VALUE', 86)\r | |
120 | def_op('POP_BLOCK', 87)\r | |
121 | def_op('END_FINALLY', 88)\r | |
122 | def_op('BUILD_CLASS', 89)\r | |
123 | \r | |
124 | HAVE_ARGUMENT = 90 # Opcodes from here have an argument:\r | |
125 | \r | |
126 | name_op('STORE_NAME', 90) # Index in name list\r | |
127 | name_op('DELETE_NAME', 91) # ""\r | |
128 | def_op('UNPACK_SEQUENCE', 92) # Number of tuple items\r | |
129 | jrel_op('FOR_ITER', 93)\r | |
130 | def_op('LIST_APPEND', 94)\r | |
131 | name_op('STORE_ATTR', 95) # Index in name list\r | |
132 | name_op('DELETE_ATTR', 96) # ""\r | |
133 | name_op('STORE_GLOBAL', 97) # ""\r | |
134 | name_op('DELETE_GLOBAL', 98) # ""\r | |
135 | def_op('DUP_TOPX', 99) # number of items to duplicate\r | |
136 | def_op('LOAD_CONST', 100) # Index in const list\r | |
137 | hasconst.append(100)\r | |
138 | name_op('LOAD_NAME', 101) # Index in name list\r | |
139 | def_op('BUILD_TUPLE', 102) # Number of tuple items\r | |
140 | def_op('BUILD_LIST', 103) # Number of list items\r | |
141 | def_op('BUILD_SET', 104) # Number of set items\r | |
142 | def_op('BUILD_MAP', 105) # Number of dict entries (upto 255)\r | |
143 | name_op('LOAD_ATTR', 106) # Index in name list\r | |
144 | def_op('COMPARE_OP', 107) # Comparison operator\r | |
145 | hascompare.append(107)\r | |
146 | name_op('IMPORT_NAME', 108) # Index in name list\r | |
147 | name_op('IMPORT_FROM', 109) # Index in name list\r | |
148 | jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip\r | |
149 | jabs_op('JUMP_IF_FALSE_OR_POP', 111) # Target byte offset from beginning of code\r | |
150 | jabs_op('JUMP_IF_TRUE_OR_POP', 112) # ""\r | |
151 | jabs_op('JUMP_ABSOLUTE', 113) # ""\r | |
152 | jabs_op('POP_JUMP_IF_FALSE', 114) # ""\r | |
153 | jabs_op('POP_JUMP_IF_TRUE', 115) # ""\r | |
154 | \r | |
155 | name_op('LOAD_GLOBAL', 116) # Index in name list\r | |
156 | \r | |
157 | jabs_op('CONTINUE_LOOP', 119) # Target address\r | |
158 | jrel_op('SETUP_LOOP', 120) # Distance to target address\r | |
159 | jrel_op('SETUP_EXCEPT', 121) # ""\r | |
160 | jrel_op('SETUP_FINALLY', 122) # ""\r | |
161 | \r | |
162 | def_op('LOAD_FAST', 124) # Local variable number\r | |
163 | haslocal.append(124)\r | |
164 | def_op('STORE_FAST', 125) # Local variable number\r | |
165 | haslocal.append(125)\r | |
166 | def_op('DELETE_FAST', 126) # Local variable number\r | |
167 | haslocal.append(126)\r | |
168 | \r | |
169 | def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3)\r | |
170 | def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8)\r | |
171 | def_op('MAKE_FUNCTION', 132) # Number of args with default values\r | |
172 | def_op('BUILD_SLICE', 133) # Number of items\r | |
173 | def_op('MAKE_CLOSURE', 134)\r | |
174 | def_op('LOAD_CLOSURE', 135)\r | |
175 | hasfree.append(135)\r | |
176 | def_op('LOAD_DEREF', 136)\r | |
177 | hasfree.append(136)\r | |
178 | def_op('STORE_DEREF', 137)\r | |
179 | hasfree.append(137)\r | |
180 | \r | |
181 | def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8)\r | |
182 | def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8)\r | |
183 | def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8)\r | |
184 | \r | |
185 | jrel_op('SETUP_WITH', 143)\r | |
186 | \r | |
187 | def_op('EXTENDED_ARG', 145)\r | |
188 | EXTENDED_ARG = 145\r | |
189 | def_op('SET_ADD', 146)\r | |
190 | def_op('MAP_ADD', 147)\r | |
191 | \r | |
192 | del def_op, name_op, jrel_op, jabs_op\r |