opcode.h 4.29 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
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
The Netherlands.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its 
documentation for any purpose and without fee is hereby granted, 
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in 
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior permission.

STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

******************************************************************/

Guido van Rossum's avatar
Guido van Rossum committed
31 32
/* Instruction opcodes for compiled code */

Guido van Rossum's avatar
Guido van Rossum committed
33
#define STOP_CODE	0
Guido van Rossum's avatar
Guido van Rossum committed
34 35 36
#define POP_TOP		1
#define ROT_TWO		2
#define ROT_THREE	3
Guido van Rossum's avatar
Guido van Rossum committed
37
#define DUP_TOP		4
Guido van Rossum's avatar
Guido van Rossum committed
38 39 40 41 42 43

#define UNARY_POSITIVE	10
#define UNARY_NEGATIVE	11
#define UNARY_NOT	12
#define UNARY_CONVERT	13
#define UNARY_CALL	14
44
#define UNARY_INVERT	15
Guido van Rossum's avatar
Guido van Rossum committed
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

#define BINARY_MULTIPLY	20
#define BINARY_DIVIDE	21
#define BINARY_MODULO	22
#define BINARY_ADD	23
#define BINARY_SUBTRACT	24
#define BINARY_SUBSCR	25
#define BINARY_CALL	26

#define SLICE		30
/* Also uses 31-33 */

#define STORE_SLICE	40
/* Also uses 41-43 */

#define DELETE_SLICE	50
/* Also uses 51-53 */

#define STORE_SUBSCR	60
#define DELETE_SUBSCR	61

66 67 68 69 70 71 72
#define BINARY_LSHIFT	62
#define BINARY_RSHIFT	63
#define BINARY_AND	64
#define BINARY_XOR	65
#define BINARY_OR	66


Guido van Rossum's avatar
Guido van Rossum committed
73 74 75 76 77 78
#define PRINT_EXPR	70
#define PRINT_ITEM	71
#define PRINT_NEWLINE	72

#define BREAK_LOOP	80
#define RAISE_EXCEPTION	81
79
#define LOAD_LOCALS	82
Guido van Rossum's avatar
Guido van Rossum committed
80
#define RETURN_VALUE	83
81 82
#define LOAD_GLOBALS	84
#define EXEC_STMT	85
83

Guido van Rossum's avatar
Guido van Rossum committed
84 85 86
#define BUILD_FUNCTION	86
#define POP_BLOCK	87
#define END_FINALLY	88
87
#define BUILD_CLASS	89
Guido van Rossum's avatar
Guido van Rossum committed
88 89 90 91 92 93 94

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

#define STORE_NAME	90	/* Index in name list */
#define DELETE_NAME	91	/* "" */
#define UNPACK_TUPLE	92	/* Number of tuple items */
#define UNPACK_LIST	93	/* Number of list items */
Guido van Rossum's avatar
Guido van Rossum committed
95
#define UNPACK_ARG	94	/* Number of arguments */
Guido van Rossum's avatar
Guido van Rossum committed
96 97
#define STORE_ATTR	95	/* Index in name list */
#define DELETE_ATTR	96	/* "" */
98 99
#define STORE_GLOBAL	97	/* "" */
#define DELETE_GLOBAL	98	/* "" */
Guido van Rossum's avatar
Guido van Rossum committed
100
#define UNPACK_VARARG	99	/* Minimal number of arguments */
Guido van Rossum's avatar
Guido van Rossum committed
101 102 103 104 105 106 107 108 109 110

#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 */
#define BUILD_MAP	104	/* Always zero for now */
#define LOAD_ATTR	105	/* Index in name list */
#define COMPARE_OP	106	/* Comparison operator */
#define IMPORT_NAME	107	/* Index in name list */
#define IMPORT_FROM	108	/* Index in name list */
111
#define ACCESS_MODE	109	/* Name (mode is int on top of stack) */
Guido van Rossum's avatar
Guido van Rossum committed
112 113 114 115 116 117 118

#define JUMP_FORWARD	110	/* Number of bytes to skip */
#define JUMP_IF_FALSE	111	/* "" */
#define JUMP_IF_TRUE	112	/* "" */
#define JUMP_ABSOLUTE	113	/* Target byte offset from beginning of code */
#define FOR_LOOP	114	/* Number of bytes to skip */

119 120 121
#define LOAD_LOCAL	115	/* Index in name list */
#define LOAD_GLOBAL	116	/* Index in name list */

122 123
#define SET_FUNC_ARGS	117	/* Argcount */

Guido van Rossum's avatar
Guido van Rossum committed
124 125 126 127
#define SETUP_LOOP	120	/* Target address (absolute) */
#define SETUP_EXCEPT	121	/* "" */
#define SETUP_FINALLY	122	/* "" */

128 129 130 131 132
#define RESERVE_FAST	123	/* Number of local variables */
#define LOAD_FAST	124	/* Local variable number */
#define STORE_FAST	125	/* Local variable number */
#define DELETE_FAST	126	/* Local variable number */

Guido van Rossum's avatar
Guido van Rossum committed
133 134
#define SET_LINENO	127	/* Current line number */

Guido van Rossum's avatar
Guido van Rossum committed
135 136
/* Comparison operator codes (argument to COMPARE_OP) */
enum cmp_op {LT, LE, EQ, NE, GT, GE, IN, NOT_IN, IS, IS_NOT, EXC_MATCH, BAD};
Guido van Rossum's avatar
Guido van Rossum committed
137 138

#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
139 140 141 142 143

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