Damien George | 8725f8f | 2014-02-15 19:33:11 +0000 | [diff] [blame] | 1 | // taken from python source, Include/code.h |
| 2 | #define MP_SCOPE_FLAG_OPTIMISED 0x01 |
| 3 | #define MP_SCOPE_FLAG_NEWLOCALS 0x02 |
| 4 | #define MP_SCOPE_FLAG_VARARGS 0x04 |
| 5 | #define MP_SCOPE_FLAG_VARKEYWORDS 0x08 |
| 6 | #define MP_SCOPE_FLAG_NESTED 0x10 |
| 7 | #define MP_SCOPE_FLAG_GENERATOR 0x20 |
| 8 | /* The MP_SCOPE_FLAG_NOFREE flag is set if there are no free or cell variables. |
| 9 | This information is redundant, but it allows a single flag test |
| 10 | to determine whether there is any extra work to be done when the |
| 11 | call frame is setup. |
| 12 | */ |
| 13 | #define MP_SCOPE_FLAG_NOFREE 0x40 |
| 14 | |
Damien | d99b052 | 2013-12-21 18:17:45 +0000 | [diff] [blame] | 15 | typedef enum { |
Damien George | d17926d | 2014-03-30 13:35:08 +0100 | [diff] [blame] | 16 | MP_UNARY_OP_BOOL, // __bool__ |
| 17 | MP_UNARY_OP_LEN, // __len__ |
| 18 | MP_UNARY_OP_POSITIVE, |
| 19 | MP_UNARY_OP_NEGATIVE, |
| 20 | MP_UNARY_OP_INVERT, |
Damien George | 9aa2a52 | 2014-02-01 23:04:09 +0000 | [diff] [blame] | 21 | // these are not supported by the runtime and must be synthesised by the emitter |
Damien George | d17926d | 2014-03-30 13:35:08 +0100 | [diff] [blame] | 22 | MP_UNARY_OP_NOT, |
| 23 | } mp_unary_op_t; |
Damien | d99b052 | 2013-12-21 18:17:45 +0000 | [diff] [blame] | 24 | |
| 25 | typedef enum { |
Damien George | d17926d | 2014-03-30 13:35:08 +0100 | [diff] [blame] | 26 | MP_BINARY_OP_SUBSCR, |
| 27 | MP_BINARY_OP_OR, |
| 28 | MP_BINARY_OP_XOR, |
| 29 | MP_BINARY_OP_AND, |
| 30 | MP_BINARY_OP_LSHIFT, |
| 31 | MP_BINARY_OP_RSHIFT, |
| 32 | MP_BINARY_OP_ADD, |
| 33 | MP_BINARY_OP_SUBTRACT, |
| 34 | MP_BINARY_OP_MULTIPLY, |
| 35 | MP_BINARY_OP_FLOOR_DIVIDE, |
| 36 | MP_BINARY_OP_TRUE_DIVIDE, |
| 37 | MP_BINARY_OP_MODULO, |
| 38 | MP_BINARY_OP_POWER, |
| 39 | MP_BINARY_OP_INPLACE_OR, |
| 40 | MP_BINARY_OP_INPLACE_XOR, |
| 41 | MP_BINARY_OP_INPLACE_AND, |
| 42 | MP_BINARY_OP_INPLACE_LSHIFT, |
| 43 | MP_BINARY_OP_INPLACE_RSHIFT, |
| 44 | MP_BINARY_OP_INPLACE_ADD, |
| 45 | MP_BINARY_OP_INPLACE_SUBTRACT, |
| 46 | MP_BINARY_OP_INPLACE_MULTIPLY, |
| 47 | MP_BINARY_OP_INPLACE_FLOOR_DIVIDE, |
| 48 | MP_BINARY_OP_INPLACE_TRUE_DIVIDE, |
| 49 | MP_BINARY_OP_INPLACE_MODULO, |
| 50 | MP_BINARY_OP_INPLACE_POWER, |
Damien George | 9aa2a52 | 2014-02-01 23:04:09 +0000 | [diff] [blame] | 51 | // these should return a bool |
Damien George | d17926d | 2014-03-30 13:35:08 +0100 | [diff] [blame] | 52 | MP_BINARY_OP_LESS, |
| 53 | MP_BINARY_OP_MORE, |
| 54 | MP_BINARY_OP_EQUAL, |
| 55 | MP_BINARY_OP_LESS_EQUAL, |
| 56 | MP_BINARY_OP_MORE_EQUAL, |
| 57 | MP_BINARY_OP_NOT_EQUAL, |
| 58 | MP_BINARY_OP_IN, |
| 59 | MP_BINARY_OP_IS, |
| 60 | MP_BINARY_OP_EXCEPTION_MATCH, |
Damien George | 9aa2a52 | 2014-02-01 23:04:09 +0000 | [diff] [blame] | 61 | // these are not supported by the runtime and must be synthesised by the emitter |
Damien George | d17926d | 2014-03-30 13:35:08 +0100 | [diff] [blame] | 62 | MP_BINARY_OP_NOT_IN, |
| 63 | MP_BINARY_OP_IS_NOT, |
| 64 | } mp_binary_op_t; |
Damien | d99b052 | 2013-12-21 18:17:45 +0000 | [diff] [blame] | 65 | |
| 66 | typedef enum { |
Damien George | d17926d | 2014-03-30 13:35:08 +0100 | [diff] [blame] | 67 | MP_F_LOAD_CONST_DEC = 0, |
| 68 | MP_F_LOAD_CONST_STR, |
| 69 | MP_F_LOAD_NAME, |
| 70 | MP_F_LOAD_GLOBAL, |
| 71 | MP_F_LOAD_BUILD_CLASS, |
| 72 | MP_F_LOAD_ATTR, |
| 73 | MP_F_LOAD_METHOD, |
| 74 | MP_F_STORE_NAME, |
| 75 | MP_F_STORE_ATTR, |
| 76 | MP_F_STORE_SUBSCR, |
| 77 | MP_F_OBJ_IS_TRUE, |
| 78 | MP_F_UNARY_OP, |
| 79 | MP_F_BINARY_OP, |
| 80 | MP_F_BUILD_TUPLE, |
| 81 | MP_F_BUILD_LIST, |
| 82 | MP_F_LIST_APPEND, |
| 83 | MP_F_BUILD_MAP, |
| 84 | MP_F_STORE_MAP, |
| 85 | MP_F_BUILD_SET, |
| 86 | MP_F_STORE_SET, |
| 87 | MP_F_MAKE_FUNCTION_FROM_ID, |
| 88 | MP_F_CALL_FUNCTION_N_KW_FOR_NATIVE, |
| 89 | MP_F_CALL_METHOD_N_KW, |
| 90 | MP_F_GETITER, |
| 91 | MP_F_ITERNEXT, |
| 92 | MP_F_NUMBER_OF, |
| 93 | } mp_fun_kind_t; |
Damien | d99b052 | 2013-12-21 18:17:45 +0000 | [diff] [blame] | 94 | |
Damien George | d17926d | 2014-03-30 13:35:08 +0100 | [diff] [blame] | 95 | extern void *const mp_fun_table[MP_F_NUMBER_OF]; |