1#ifndef Py_OPCODE_H
2#define Py_OPCODE_H
3#ifdef __cplusplus
4extern "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 BINARY_POWER	19
26
27#define BINARY_MULTIPLY	20
28#define BINARY_DIVIDE	21
29#define BINARY_MODULO	22
30#define BINARY_ADD	23
31#define BINARY_SUBTRACT	24
32#define BINARY_SUBSCR	25
33#define BINARY_FLOOR_DIVIDE 26
34#define BINARY_TRUE_DIVIDE 27
35#define INPLACE_FLOOR_DIVIDE 28
36#define INPLACE_TRUE_DIVIDE 29
37
38#define SLICE		30
39/* Also uses 31-33 */
40
41#define STORE_SLICE	40
42/* Also uses 41-43 */
43
44#define DELETE_SLICE	50
45/* Also uses 51-53 */
46
47#define STORE_MAP	54
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#define WITH_CLEANUP    81
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#define POP_BLOCK	87
82#define END_FINALLY	88
83#define BUILD_CLASS	89
84
85#define HAVE_ARGUMENT	90	/* Opcodes from here have an argument: */
86
87#define STORE_NAME	90	/* Index in name list */
88#define DELETE_NAME	91	/* "" */
89#define UNPACK_SEQUENCE	92	/* Number of sequence items */
90#define FOR_ITER	93
91#define LIST_APPEND	94
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_SET	104     /* Number of set items */
103#define BUILD_MAP	105	/* Always zero for now */
104#define LOAD_ATTR	106	/* Index in name list */
105#define COMPARE_OP	107	/* Comparison operator */
106#define IMPORT_NAME	108	/* Index in name list */
107#define IMPORT_FROM	109	/* Index in name list */
108#define JUMP_FORWARD	110	/* Number of bytes to skip */
109
110#define JUMP_IF_FALSE_OR_POP 111 /* Target byte offset from beginning
111                                    of code */
112#define JUMP_IF_TRUE_OR_POP 112	/* "" */
113#define JUMP_ABSOLUTE	113	/* "" */
114#define POP_JUMP_IF_FALSE 114	/* "" */
115#define POP_JUMP_IF_TRUE 115	/* "" */
116
117#define LOAD_GLOBAL	116	/* Index in name list */
118
119#define CONTINUE_LOOP	119	/* Start of loop (absolute) */
120#define SETUP_LOOP	120	/* Target address (relative) */
121#define SETUP_EXCEPT	121	/* "" */
122#define SETUP_FINALLY	122	/* "" */
123
124#define LOAD_FAST	124	/* Local variable number */
125#define STORE_FAST	125	/* Local variable number */
126#define DELETE_FAST	126	/* Local variable number */
127
128#define RAISE_VARARGS	130	/* Number of raise arguments (1, 2 or 3) */
129/* CALL_FUNCTION_XXX opcodes defined below depend on this definition */
130#define CALL_FUNCTION	131	/* #args + (#kwargs<<8) */
131#define MAKE_FUNCTION	132	/* #defaults */
132#define BUILD_SLICE 	133	/* Number of items */
133
134#define MAKE_CLOSURE    134     /* #free vars */
135#define LOAD_CLOSURE    135     /* Load free variable from closure */
136#define LOAD_DEREF      136     /* Load and dereference from closure cell */
137#define STORE_DEREF     137     /* Store into cell */
138
139/* The next 3 opcodes must be contiguous and satisfy
140   (CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1  */
141#define CALL_FUNCTION_VAR          140	/* #args + (#kwargs<<8) */
142#define CALL_FUNCTION_KW           141	/* #args + (#kwargs<<8) */
143#define CALL_FUNCTION_VAR_KW       142	/* #args + (#kwargs<<8) */
144
145#define SETUP_WITH 143
146
147/* Support for opargs more than 16 bits long */
148#define EXTENDED_ARG  145
149
150#define SET_ADD         146
151#define MAP_ADD         147
152
153
154enum 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,
155	     PyCmp_IN, PyCmp_NOT_IN, PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD};
156
157#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
158
159#ifdef __cplusplus
160}
161#endif
162#endif /* !Py_OPCODE_H */
163