• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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     int                 n_end_lineno;
18     int                 n_end_col_offset;
19 } node;
20 
21 PyAPI_FUNC(node *) PyNode_New(int type);
22 PyAPI_FUNC(int) PyNode_AddChild(node *n, int type,
23                                 char *str, int lineno, int col_offset,
24                                 int end_lineno, int end_col_offset);
25 PyAPI_FUNC(void) PyNode_Free(node *n);
26 #ifndef Py_LIMITED_API
27 PyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n);
28 #endif
29 
30 /* Node access functions */
31 #define NCH(n)          ((n)->n_nchildren)
32 
33 #define CHILD(n, i)     (&(n)->n_child[i])
34 #define RCHILD(n, i)    (CHILD(n, NCH(n) + i))
35 #define TYPE(n)         ((n)->n_type)
36 #define STR(n)          ((n)->n_str)
37 #define LINENO(n)       ((n)->n_lineno)
38 
39 /* Assert that the type of a node is what we expect */
40 #define REQ(n, type) assert(TYPE(n) == (type))
41 
42 PyAPI_FUNC(void) PyNode_ListTree(node *);
43 void _PyNode_FinalizeEndPos(node *n);  // helper also used in parsetok.c
44 
45 #ifdef __cplusplus
46 }
47 #endif
48 #endif /* !Py_NODE_H */
49