14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Parse tree node interface */ 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef Py_NODE_H 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_NODE_H 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef __cplusplus 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern "C" { 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef struct _node { 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao short n_type; 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao char *n_str; 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int n_lineno; 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int n_col_offset; 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int n_nchildren; 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao struct _node *n_child; 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao} node; 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 194adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoPyAPI_FUNC(node *) PyNode_New(int type); 204adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoPyAPI_FUNC(int) PyNode_AddChild(node *n, int type, 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao char *str, int lineno, int col_offset); 224adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoPyAPI_FUNC(void) PyNode_Free(node *n); 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef Py_LIMITED_API 244adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoPyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n); 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Node access functions */ 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define NCH(n) ((n)->n_nchildren) 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define CHILD(n, i) (&(n)->n_child[i]) 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define RCHILD(n, i) (CHILD(n, NCH(n) + i)) 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define TYPE(n) ((n)->n_type) 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define STR(n) ((n)->n_str) 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Assert that the type of a node is what we expect */ 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define REQ(n, type) assert(TYPE(n) == (type)) 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 384adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoPyAPI_FUNC(void) PyNode_ListTree(node *); 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef __cplusplus 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao} 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* !Py_NODE_H */ 44