blob: 8a78a2304bbeb53b9b3adc77ad04040ee66a12f2 [file] [log] [blame]
Damien George8725f8f2014-02-15 19:33:11 +00001// 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
Damiend99b0522013-12-21 18:17:45 +000015typedef enum {
Damien Georged17926d2014-03-30 13:35:08 +010016 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 George9aa2a522014-02-01 23:04:09 +000021 // these are not supported by the runtime and must be synthesised by the emitter
Damien Georged17926d2014-03-30 13:35:08 +010022 MP_UNARY_OP_NOT,
23} mp_unary_op_t;
Damiend99b0522013-12-21 18:17:45 +000024
25typedef enum {
Damien Georged17926d2014-03-30 13:35:08 +010026 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 George9aa2a522014-02-01 23:04:09 +000051 // these should return a bool
Damien Georged17926d2014-03-30 13:35:08 +010052 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 George9aa2a522014-02-01 23:04:09 +000061 // these are not supported by the runtime and must be synthesised by the emitter
Damien Georged17926d2014-03-30 13:35:08 +010062 MP_BINARY_OP_NOT_IN,
63 MP_BINARY_OP_IS_NOT,
64} mp_binary_op_t;
Damiend99b0522013-12-21 18:17:45 +000065
66typedef enum {
Damien Georged17926d2014-03-30 13:35:08 +010067 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;
Damiend99b0522013-12-21 18:17:45 +000094
Damien Georged17926d2014-03-30 13:35:08 +010095extern void *const mp_fun_table[MP_F_NUMBER_OF];