blob: ece713ee39d8ef839917a79423732408c0605899 [file] [log] [blame]
Guido van Rossuma3309961993-07-28 09:05:47 +00001#ifndef Py_OPCODE_H
2#define Py_OPCODE_H
3#ifdef __cplusplus
4extern "C" {
5#endif
6
Guido van Rossumf70e43a1991-02-19 12:39:46 +00007
Guido van Rossum10dc2e81990-11-18 17:27:39 +00008/* Instruction opcodes for compiled code */
9
Guido van Rossum10dc2e81990-11-18 17:27:39 +000010#define POP_TOP 1
11#define ROT_TWO 2
12#define ROT_THREE 3
Guido van Rossum3f5da241990-12-20 15:06:42 +000013#define DUP_TOP 4
Antoine Pitrou74a69fa2010-09-04 18:43:52 +000014#define DUP_TOP_TWO 5
Raymond Hettinger9c18e812004-06-21 16:31:15 +000015#define NOP 9
Guido van Rossum10dc2e81990-11-18 17:27:39 +000016
17#define UNARY_POSITIVE 10
18#define UNARY_NEGATIVE 11
19#define UNARY_NOT 12
Guido van Rossum884afd61995-07-18 14:21:06 +000020
Guido van Rossum7928cd71991-10-24 14:59:31 +000021#define UNARY_INVERT 15
Guido van Rossum10dc2e81990-11-18 17:27:39 +000022
Guido van Rossum3d1f0951996-01-12 00:51:44 +000023#define BINARY_POWER 19
24
Guido van Rossum10dc2e81990-11-18 17:27:39 +000025#define BINARY_MULTIPLY 20
Neal Norwitzc6d210c2006-03-16 06:02:10 +000026
Guido van Rossum10dc2e81990-11-18 17:27:39 +000027#define BINARY_MODULO 22
28#define BINARY_ADD 23
29#define BINARY_SUBTRACT 24
30#define BINARY_SUBSCR 25
Guido van Rossum4668b002001-08-08 05:00:18 +000031#define BINARY_FLOOR_DIVIDE 26
32#define BINARY_TRUE_DIVIDE 27
33#define INPLACE_FLOOR_DIVIDE 28
34#define INPLACE_TRUE_DIVIDE 29
Guido van Rossum10dc2e81990-11-18 17:27:39 +000035
Christian Heimes99170a52007-12-19 02:07:34 +000036#define STORE_MAP 54
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +000037#define INPLACE_ADD 55
38#define INPLACE_SUBTRACT 56
39#define INPLACE_MULTIPLY 57
Neal Norwitze7086d42006-03-17 08:59:09 +000040
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +000041#define INPLACE_MODULO 59
Guido van Rossum10dc2e81990-11-18 17:27:39 +000042#define STORE_SUBSCR 60
43#define DELETE_SUBSCR 61
44
Guido van Rossum7928cd71991-10-24 14:59:31 +000045#define BINARY_LSHIFT 62
46#define BINARY_RSHIFT 63
47#define BINARY_AND 64
48#define BINARY_XOR 65
49#define BINARY_OR 66
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +000050#define INPLACE_POWER 67
Guido van Rossum59d1d2b2001-04-20 19:13:02 +000051#define GET_ITER 68
Guido van Rossum52cc1d82007-03-18 15:41:51 +000052#define STORE_LOCALS 69
Guido van Rossum10dc2e81990-11-18 17:27:39 +000053#define PRINT_EXPR 70
Guido van Rossum52cc1d82007-03-18 15:41:51 +000054#define LOAD_BUILD_CLASS 71
Georg Brandl88fc6642007-02-09 21:28:07 +000055
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +000056#define INPLACE_LSHIFT 75
57#define INPLACE_RSHIFT 76
58#define INPLACE_AND 77
59#define INPLACE_XOR 78
60#define INPLACE_OR 79
Guido van Rossum10dc2e81990-11-18 17:27:39 +000061#define BREAK_LOOP 80
Guido van Rossumc2e20742006-02-27 22:32:47 +000062#define WITH_CLEANUP 81
Guido van Rossum52cc1d82007-03-18 15:41:51 +000063
Guido van Rossum10dc2e81990-11-18 17:27:39 +000064#define RETURN_VALUE 83
Thomas Wouters52152252000-08-17 22:55:00 +000065#define IMPORT_STAR 84
Guido van Rossum98297ee2007-11-06 21:34:58 +000066
Tim Peters5ca576e2001-06-18 22:08:13 +000067#define YIELD_VALUE 86
Guido van Rossum10dc2e81990-11-18 17:27:39 +000068#define POP_BLOCK 87
69#define END_FINALLY 88
Benjamin Petersoneec3d712008-06-11 15:59:43 +000070#define POP_EXCEPT 89
Guido van Rossum10dc2e81990-11-18 17:27:39 +000071
72#define HAVE_ARGUMENT 90 /* Opcodes from here have an argument: */
73
74#define STORE_NAME 90 /* Index in name list */
75#define DELETE_NAME 91 /* "" */
Thomas Wouters0be5aab2000-08-11 22:15:52 +000076#define UNPACK_SEQUENCE 92 /* Number of sequence items */
Guido van Rossum59d1d2b2001-04-20 19:13:02 +000077#define FOR_ITER 93
Guido van Rossum0368b722007-05-11 16:50:42 +000078#define UNPACK_EX 94 /* Num items before variable part +
79 (Num items after variable part << 8) */
Thomas Wouters0be5aab2000-08-11 22:15:52 +000080
Guido van Rossum10dc2e81990-11-18 17:27:39 +000081#define STORE_ATTR 95 /* Index in name list */
82#define DELETE_ATTR 96 /* "" */
Guido van Rossum97ff5301991-12-10 13:59:17 +000083#define STORE_GLOBAL 97 /* "" */
84#define DELETE_GLOBAL 98 /* "" */
Antoine Pitrou74a69fa2010-09-04 18:43:52 +000085
Guido van Rossum10dc2e81990-11-18 17:27:39 +000086#define LOAD_CONST 100 /* Index in const list */
87#define LOAD_NAME 101 /* Index in name list */
88#define BUILD_TUPLE 102 /* Number of tuple items */
89#define BUILD_LIST 103 /* Number of list items */
Guido van Rossum86e58e22006-08-28 15:27:34 +000090#define BUILD_SET 104 /* Number of set items */
91#define BUILD_MAP 105 /* Always zero for now */
92#define LOAD_ATTR 106 /* Index in name list */
93#define COMPARE_OP 107 /* Comparison operator */
94#define IMPORT_NAME 108 /* Index in name list */
95#define IMPORT_FROM 109 /* Index in name list */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000096
97#define JUMP_FORWARD 110 /* Number of bytes to skip */
Jeffrey Yasskin9de7ec72009-02-25 02:25:04 +000098#define JUMP_IF_FALSE_OR_POP 111 /* Target byte offset from beginning of code */
99#define JUMP_IF_TRUE_OR_POP 112 /* "" */
100#define JUMP_ABSOLUTE 113 /* "" */
101#define POP_JUMP_IF_FALSE 114 /* "" */
102#define POP_JUMP_IF_TRUE 115 /* "" */
Guido van Rossum10dc2e81990-11-18 17:27:39 +0000103
Guido van Rossum054ff1f1991-04-04 10:45:01 +0000104#define LOAD_GLOBAL 116 /* Index in name list */
105
Jeremy Hylton3faa52e2001-02-01 22:48:12 +0000106#define CONTINUE_LOOP 119 /* Start of loop (absolute) */
Guido van Rossumb5a755e2007-07-18 18:15:48 +0000107#define SETUP_LOOP 120 /* Target address (relative) */
Guido van Rossum10dc2e81990-11-18 17:27:39 +0000108#define SETUP_EXCEPT 121 /* "" */
109#define SETUP_FINALLY 122 /* "" */
110
Guido van Rossum8b17d6b1993-03-30 13:18:41 +0000111#define LOAD_FAST 124 /* Local variable number */
112#define STORE_FAST 125 /* Local variable number */
113#define DELETE_FAST 126 /* Local variable number */
114
Guido van Rossum3b46a501995-07-07 22:32:10 +0000115#define RAISE_VARARGS 130 /* Number of raise arguments (1, 2 or 3) */
Jeremy Hylton76901512000-03-28 23:49:17 +0000116/* CALL_FUNCTION_XXX opcodes defined below depend on this definition */
Guido van Rossum3b46a501995-07-07 22:32:10 +0000117#define CALL_FUNCTION 131 /* #args + (#kwargs<<8) */
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000118#define MAKE_FUNCTION 132 /* #defaults + #kwdefaults<<8 + #annotations<<16 */
Guido van Rossumdb3b0411996-07-30 16:41:26 +0000119#define BUILD_SLICE 133 /* Number of items */
Guido van Rossum3b46a501995-07-07 22:32:10 +0000120
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000121#define MAKE_CLOSURE 134 /* same as MAKE_FUNCTION */
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000122#define LOAD_CLOSURE 135 /* Load free variable from closure */
123#define LOAD_DEREF 136 /* Load and dereference from closure cell */
124#define STORE_DEREF 137 /* Store into cell */
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +0000125#define DELETE_DEREF 138 /* Delete closure cell */
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000126
Jeremy Hylton76901512000-03-28 23:49:17 +0000127/* The next 3 opcodes must be contiguous and satisfy
Jeremy Hyltona403d7d2000-03-29 00:10:03 +0000128 (CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1 */
Jeremy Hylton76901512000-03-28 23:49:17 +0000129#define CALL_FUNCTION_VAR 140 /* #args + (#kwargs<<8) */
130#define CALL_FUNCTION_KW 141 /* #args + (#kwargs<<8) */
131#define CALL_FUNCTION_VAR_KW 142 /* #args + (#kwargs<<8) */
132
Benjamin Peterson876b2f22009-06-28 03:18:59 +0000133#define SETUP_WITH 143
134
Fred Drakeef8ace32000-08-24 00:32:09 +0000135/* Support for opargs more than 16 bits long */
Benjamin Peterson876b2f22009-06-28 03:18:59 +0000136#define EXTENDED_ARG 144
Fred Drakeef8ace32000-08-24 00:32:09 +0000137
Antoine Pitrouf289ae62008-12-18 11:06:25 +0000138#define LIST_APPEND 145
139#define SET_ADD 146
140#define MAP_ADD 147
141
Martin v. Löwis7198a522002-01-01 19:59:11 +0000142
Benjamin Petersoneec3d712008-06-11 15:59:43 +0000143/* EXCEPT_HANDLER is a special, implicit block type which is created when
144 entering an except handler. It is not an opcode but we define it here
145 as we want it to be available to both frameobject.c and ceval.c, while
146 remaining private.*/
147#define EXCEPT_HANDLER 257
148
149
Martin v. Löwis7198a522002-01-01 19:59:11 +0000150enum 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,
151 PyCmp_IN, PyCmp_NOT_IN, PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD};
Guido van Rossum3f5da241990-12-20 15:06:42 +0000152
153#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
Guido van Rossuma3309961993-07-28 09:05:47 +0000154
155#ifdef __cplusplus
156}
157#endif
158#endif /* !Py_OPCODE_H */