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