opcode.h 4.61 KB
Newer Older
1 2 3 4 5 6
#ifndef Py_OPCODE_H
#define Py_OPCODE_H
#ifdef __cplusplus
extern "C" {
#endif

7

Guido van Rossum's avatar
Guido van Rossum committed
8 9 10 11 12
/* Instruction opcodes for compiled code */

#define POP_TOP		1
#define ROT_TWO		2
#define ROT_THREE	3
Guido van Rossum's avatar
Guido van Rossum committed
13
#define DUP_TOP		4
14
#define DUP_TOP_TWO     5
15
#define NOP		9
Guido van Rossum's avatar
Guido van Rossum committed
16 17 18 19

#define UNARY_POSITIVE	10
#define UNARY_NEGATIVE	11
#define UNARY_NOT	12
20

21
#define UNARY_INVERT	15
Guido van Rossum's avatar
Guido van Rossum committed
22

23 24
#define BINARY_POWER	19

Guido van Rossum's avatar
Guido van Rossum committed
25
#define BINARY_MULTIPLY	20
26

Guido van Rossum's avatar
Guido van Rossum committed
27 28 29 30
#define BINARY_MODULO	22
#define BINARY_ADD	23
#define BINARY_SUBTRACT	24
#define BINARY_SUBSCR	25
31 32 33 34
#define BINARY_FLOOR_DIVIDE 26
#define BINARY_TRUE_DIVIDE 27
#define INPLACE_FLOOR_DIVIDE 28
#define INPLACE_TRUE_DIVIDE 29
Guido van Rossum's avatar
Guido van Rossum committed
35

36
#define STORE_MAP	54
37 38 39
#define INPLACE_ADD	55
#define INPLACE_SUBTRACT	56
#define INPLACE_MULTIPLY	57
40

41
#define INPLACE_MODULO	59
Guido van Rossum's avatar
Guido van Rossum committed
42 43 44
#define STORE_SUBSCR	60
#define DELETE_SUBSCR	61

45 46 47 48 49
#define BINARY_LSHIFT	62
#define BINARY_RSHIFT	63
#define BINARY_AND	64
#define BINARY_XOR	65
#define BINARY_OR	66
50
#define INPLACE_POWER	67
51
#define GET_ITER	68
52
#define STORE_LOCALS	69
Guido van Rossum's avatar
Guido van Rossum committed
53
#define PRINT_EXPR	70
54
#define LOAD_BUILD_CLASS 71
55

56 57 58 59 60
#define INPLACE_LSHIFT	75
#define INPLACE_RSHIFT	76
#define INPLACE_AND	77
#define INPLACE_XOR	78
#define INPLACE_OR	79
Guido van Rossum's avatar
Guido van Rossum committed
61
#define BREAK_LOOP	80
62
#define WITH_CLEANUP    81
63

Guido van Rossum's avatar
Guido van Rossum committed
64
#define RETURN_VALUE	83
65
#define IMPORT_STAR	84
66

67
#define YIELD_VALUE	86
Guido van Rossum's avatar
Guido van Rossum committed
68 69
#define POP_BLOCK	87
#define END_FINALLY	88
70
#define POP_EXCEPT	89
Guido van Rossum's avatar
Guido van Rossum committed
71 72 73 74 75

#define HAVE_ARGUMENT	90	/* Opcodes from here have an argument: */

#define STORE_NAME	90	/* Index in name list */
#define DELETE_NAME	91	/* "" */
76
#define UNPACK_SEQUENCE	92	/* Number of sequence items */
77
#define FOR_ITER	93
78 79
#define UNPACK_EX       94      /* Num items before variable part +
                                   (Num items after variable part << 8) */
80

Guido van Rossum's avatar
Guido van Rossum committed
81 82
#define STORE_ATTR	95	/* Index in name list */
#define DELETE_ATTR	96	/* "" */
83 84
#define STORE_GLOBAL	97	/* "" */
#define DELETE_GLOBAL	98	/* "" */
85

Guido van Rossum's avatar
Guido van Rossum committed
86 87 88 89
#define LOAD_CONST	100	/* Index in const list */
#define LOAD_NAME	101	/* Index in name list */
#define BUILD_TUPLE	102	/* Number of tuple items */
#define BUILD_LIST	103	/* Number of list items */
90 91 92 93 94 95
#define BUILD_SET	104     /* Number of set items */
#define BUILD_MAP	105	/* Always zero for now */
#define LOAD_ATTR	106	/* Index in name list */
#define COMPARE_OP	107	/* Comparison operator */
#define IMPORT_NAME	108	/* Index in name list */
#define IMPORT_FROM	109	/* Index in name list */
Guido van Rossum's avatar
Guido van Rossum committed
96 97

#define JUMP_FORWARD	110	/* Number of bytes to skip */
98 99 100 101 102
#define JUMP_IF_FALSE_OR_POP 111	/* Target byte offset from beginning of code */
#define JUMP_IF_TRUE_OR_POP 112	/* "" */
#define JUMP_ABSOLUTE	113	/* "" */
#define POP_JUMP_IF_FALSE 114	/* "" */
#define POP_JUMP_IF_TRUE 115	/* "" */
Guido van Rossum's avatar
Guido van Rossum committed
103

104 105
#define LOAD_GLOBAL	116	/* Index in name list */

106
#define CONTINUE_LOOP	119	/* Start of loop (absolute) */
107
#define SETUP_LOOP	120	/* Target address (relative) */
Guido van Rossum's avatar
Guido van Rossum committed
108 109 110
#define SETUP_EXCEPT	121	/* "" */
#define SETUP_FINALLY	122	/* "" */

111 112 113 114
#define LOAD_FAST	124	/* Local variable number */
#define STORE_FAST	125	/* Local variable number */
#define DELETE_FAST	126	/* Local variable number */

115
#define RAISE_VARARGS	130	/* Number of raise arguments (1, 2 or 3) */
116
/* CALL_FUNCTION_XXX opcodes defined below depend on this definition */
117
#define CALL_FUNCTION	131	/* #args + (#kwargs<<8) */
118
#define MAKE_FUNCTION	132	/* #defaults + #kwdefaults<<8 + #annotations<<16 */
119
#define BUILD_SLICE 	133	/* Number of items */
120

121
#define MAKE_CLOSURE    134     /* same as MAKE_FUNCTION */
Jeremy Hylton's avatar
Jeremy Hylton committed
122 123 124
#define LOAD_CLOSURE    135     /* Load free variable from closure */
#define LOAD_DEREF      136     /* Load and dereference from closure cell */ 
#define STORE_DEREF     137     /* Store into cell */ 
125
#define DELETE_DEREF    138     /* Delete closure cell */ 
Jeremy Hylton's avatar
Jeremy Hylton committed
126

127
/* The next 3 opcodes must be contiguous and satisfy
128
   (CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1  */
129 130 131 132
#define CALL_FUNCTION_VAR          140	/* #args + (#kwargs<<8) */
#define CALL_FUNCTION_KW           141	/* #args + (#kwargs<<8) */
#define CALL_FUNCTION_VAR_KW       142	/* #args + (#kwargs<<8) */

133 134
#define SETUP_WITH 143

135
/* Support for opargs more than 16 bits long */
136
#define EXTENDED_ARG  144
137

138 139 140 141
#define LIST_APPEND     145
#define SET_ADD         146
#define MAP_ADD         147

142

143 144 145 146 147 148 149
/* EXCEPT_HANDLER is a special, implicit block type which is created when
   entering an except handler. It is not an opcode but we define it here
   as we want it to be available to both frameobject.c and ceval.c, while
   remaining private.*/
#define EXCEPT_HANDLER 257


150 151
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,
	     PyCmp_IN, PyCmp_NOT_IN, PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD};
Guido van Rossum's avatar
Guido van Rossum committed
152 153

#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
154 155 156 157 158

#ifdef __cplusplus
}
#endif
#endif /* !Py_OPCODE_H */