1 2 /* Parse tree node interface */ 3 4 #ifndef Py_NODE_H 5 #define Py_NODE_H 6 #ifdef __cplusplus 7 extern "C" { 8 #endif 9 10 typedef struct _node { 11 short n_type; 12 char *n_str; 13 int n_lineno; 14 int n_col_offset; 15 int n_nchildren; 16 struct _node *n_child; 17 } node; 18 19 PyAPI_FUNC(node *) PyNode_New(int type); 20 PyAPI_FUNC(int) PyNode_AddChild(node *n, int type, 21 char *str, int lineno, int col_offset); 22 PyAPI_FUNC(void) PyNode_Free(node *n); 23 #ifndef Py_LIMITED_API 24 PyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n); 25 #endif 26 27 /* Node access functions */ 28 #define NCH(n) ((n)->n_nchildren) 29 30 #define CHILD(n, i) (&(n)->n_child[i]) 31 #define RCHILD(n, i) (CHILD(n, NCH(n) + i)) 32 #define TYPE(n) ((n)->n_type) 33 #define STR(n) ((n)->n_str) 34 #define LINENO(n) ((n)->n_lineno) 35 36 /* Assert that the type of a node is what we expect */ 37 #define REQ(n, type) assert(TYPE(n) == (type)) 38 39 PyAPI_FUNC(void) PyNode_ListTree(node *); 40 41 #ifdef __cplusplus 42 } 43 #endif 44 #endif /* !Py_NODE_H */ 45