Chris@87: Chris@87: /* Parse tree node interface */ Chris@87: Chris@87: #ifndef Py_NODE_H Chris@87: #define Py_NODE_H Chris@87: #ifdef __cplusplus Chris@87: extern "C" { Chris@87: #endif Chris@87: Chris@87: typedef struct _node { Chris@87: short n_type; Chris@87: char *n_str; Chris@87: int n_lineno; Chris@87: int n_col_offset; Chris@87: int n_nchildren; Chris@87: struct _node *n_child; Chris@87: } node; Chris@87: Chris@87: PyAPI_FUNC(node *) PyNode_New(int type); Chris@87: PyAPI_FUNC(int) PyNode_AddChild(node *n, int type, Chris@87: char *str, int lineno, int col_offset); Chris@87: PyAPI_FUNC(void) PyNode_Free(node *n); Chris@87: PyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n); Chris@87: Chris@87: /* Node access functions */ Chris@87: #define NCH(n) ((n)->n_nchildren) Chris@87: Chris@87: #define CHILD(n, i) (&(n)->n_child[i]) Chris@87: #define RCHILD(n, i) (CHILD(n, NCH(n) + i)) Chris@87: #define TYPE(n) ((n)->n_type) Chris@87: #define STR(n) ((n)->n_str) Chris@87: Chris@87: /* Assert that the type of a node is what we expect */ Chris@87: #define REQ(n, type) assert(TYPE(n) == (type)) Chris@87: Chris@87: PyAPI_FUNC(void) PyNode_ListTree(node *); Chris@87: Chris@87: #ifdef __cplusplus Chris@87: } Chris@87: #endif Chris@87: #endif /* !Py_NODE_H */