Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | #ifndef Py_OPCODE_H |
2 | #define Py_OPCODE_H | |
3 | #ifdef __cplusplus | |
4 | extern "C" { | |
5 | #endif | |
6 | ||
7 | ||
8 | /* Instruction opcodes for compiled code */ | |
9 | ||
10 | #define STOP_CODE 0 | |
11 | #define POP_TOP 1 | |
12 | #define ROT_TWO 2 | |
13 | #define ROT_THREE 3 | |
14 | #define DUP_TOP 4 | |
15 | #define ROT_FOUR 5 | |
16 | #define NOP 9 | |
17 | ||
18 | #define UNARY_POSITIVE 10 | |
19 | #define UNARY_NEGATIVE 11 | |
20 | #define UNARY_NOT 12 | |
21 | #define UNARY_CONVERT 13 | |
22 | ||
23 | #define UNARY_INVERT 15 | |
24 | ||
25 | #define LIST_APPEND 18 | |
26 | #define BINARY_POWER 19 | |
27 | ||
28 | #define BINARY_MULTIPLY 20 | |
29 | #define BINARY_DIVIDE 21 | |
30 | #define BINARY_MODULO 22 | |
31 | #define BINARY_ADD 23 | |
32 | #define BINARY_SUBTRACT 24 | |
33 | #define BINARY_SUBSCR 25 | |
34 | #define BINARY_FLOOR_DIVIDE 26 | |
35 | #define BINARY_TRUE_DIVIDE 27 | |
36 | #define INPLACE_FLOOR_DIVIDE 28 | |
37 | #define INPLACE_TRUE_DIVIDE 29 | |
38 | ||
39 | #define SLICE 30 | |
40 | /* Also uses 31-33 */ | |
41 | ||
42 | #define STORE_SLICE 40 | |
43 | /* Also uses 41-43 */ | |
44 | ||
45 | #define DELETE_SLICE 50 | |
46 | /* Also uses 51-53 */ | |
47 | ||
48 | #define INPLACE_ADD 55 | |
49 | #define INPLACE_SUBTRACT 56 | |
50 | #define INPLACE_MULTIPLY 57 | |
51 | #define INPLACE_DIVIDE 58 | |
52 | #define INPLACE_MODULO 59 | |
53 | #define STORE_SUBSCR 60 | |
54 | #define DELETE_SUBSCR 61 | |
55 | ||
56 | #define BINARY_LSHIFT 62 | |
57 | #define BINARY_RSHIFT 63 | |
58 | #define BINARY_AND 64 | |
59 | #define BINARY_XOR 65 | |
60 | #define BINARY_OR 66 | |
61 | #define INPLACE_POWER 67 | |
62 | #define GET_ITER 68 | |
63 | ||
64 | #define PRINT_EXPR 70 | |
65 | #define PRINT_ITEM 71 | |
66 | #define PRINT_NEWLINE 72 | |
67 | #define PRINT_ITEM_TO 73 | |
68 | #define PRINT_NEWLINE_TO 74 | |
69 | #define INPLACE_LSHIFT 75 | |
70 | #define INPLACE_RSHIFT 76 | |
71 | #define INPLACE_AND 77 | |
72 | #define INPLACE_XOR 78 | |
73 | #define INPLACE_OR 79 | |
74 | #define BREAK_LOOP 80 | |
75 | ||
76 | #define LOAD_LOCALS 82 | |
77 | #define RETURN_VALUE 83 | |
78 | #define IMPORT_STAR 84 | |
79 | #define EXEC_STMT 85 | |
80 | #define YIELD_VALUE 86 | |
81 | ||
82 | #define POP_BLOCK 87 | |
83 | #define END_FINALLY 88 | |
84 | #define BUILD_CLASS 89 | |
85 | ||
86 | #define HAVE_ARGUMENT 90 /* Opcodes from here have an argument: */ | |
87 | ||
88 | #define STORE_NAME 90 /* Index in name list */ | |
89 | #define DELETE_NAME 91 /* "" */ | |
90 | #define UNPACK_SEQUENCE 92 /* Number of sequence items */ | |
91 | #define FOR_ITER 93 | |
92 | ||
93 | #define STORE_ATTR 95 /* Index in name list */ | |
94 | #define DELETE_ATTR 96 /* "" */ | |
95 | #define STORE_GLOBAL 97 /* "" */ | |
96 | #define DELETE_GLOBAL 98 /* "" */ | |
97 | #define DUP_TOPX 99 /* number of items to duplicate */ | |
98 | #define LOAD_CONST 100 /* Index in const list */ | |
99 | #define LOAD_NAME 101 /* Index in name list */ | |
100 | #define BUILD_TUPLE 102 /* Number of tuple items */ | |
101 | #define BUILD_LIST 103 /* Number of list items */ | |
102 | #define BUILD_MAP 104 /* Always zero for now */ | |
103 | #define LOAD_ATTR 105 /* Index in name list */ | |
104 | #define COMPARE_OP 106 /* Comparison operator */ | |
105 | #define IMPORT_NAME 107 /* Index in name list */ | |
106 | #define IMPORT_FROM 108 /* Index in name list */ | |
107 | ||
108 | #define JUMP_FORWARD 110 /* Number of bytes to skip */ | |
109 | #define JUMP_IF_FALSE 111 /* "" */ | |
110 | #define JUMP_IF_TRUE 112 /* "" */ | |
111 | #define JUMP_ABSOLUTE 113 /* Target byte offset from beginning of code */ | |
112 | ||
113 | #define LOAD_GLOBAL 116 /* Index in name list */ | |
114 | ||
115 | #define CONTINUE_LOOP 119 /* Start of loop (absolute) */ | |
116 | #define SETUP_LOOP 120 /* Target address (absolute) */ | |
117 | #define SETUP_EXCEPT 121 /* "" */ | |
118 | #define SETUP_FINALLY 122 /* "" */ | |
119 | ||
120 | #define LOAD_FAST 124 /* Local variable number */ | |
121 | #define STORE_FAST 125 /* Local variable number */ | |
122 | #define DELETE_FAST 126 /* Local variable number */ | |
123 | ||
124 | #define RAISE_VARARGS 130 /* Number of raise arguments (1, 2 or 3) */ | |
125 | /* CALL_FUNCTION_XXX opcodes defined below depend on this definition */ | |
126 | #define CALL_FUNCTION 131 /* #args + (#kwargs<<8) */ | |
127 | #define MAKE_FUNCTION 132 /* #defaults */ | |
128 | #define BUILD_SLICE 133 /* Number of items */ | |
129 | ||
130 | #define MAKE_CLOSURE 134 /* #free vars */ | |
131 | #define LOAD_CLOSURE 135 /* Load free variable from closure */ | |
132 | #define LOAD_DEREF 136 /* Load and dereference from closure cell */ | |
133 | #define STORE_DEREF 137 /* Store into cell */ | |
134 | ||
135 | /* The next 3 opcodes must be contiguous and satisfy | |
136 | (CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1 */ | |
137 | #define CALL_FUNCTION_VAR 140 /* #args + (#kwargs<<8) */ | |
138 | #define CALL_FUNCTION_KW 141 /* #args + (#kwargs<<8) */ | |
139 | #define CALL_FUNCTION_VAR_KW 142 /* #args + (#kwargs<<8) */ | |
140 | ||
141 | /* Support for opargs more than 16 bits long */ | |
142 | #define EXTENDED_ARG 143 | |
143 | ||
144 | ||
145 | enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE, PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, | |
146 | PyCmp_IN, PyCmp_NOT_IN, PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD}; | |
147 | ||
148 | #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT) | |
149 | ||
150 | #ifdef __cplusplus | |
151 | } | |
152 | #endif | |
153 | #endif /* !Py_OPCODE_H */ |