blob: 9730e5734ef28ffcd0475d87661ef8f84502ebca [file] [log] [blame]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001/* Parse tree node interface */
2
3typedef struct _node {
4 int n_type;
5 char *n_str;
6 int n_nchildren;
7 struct _node *n_child;
8} node;
9
10extern node *newnode PROTO((int type));
11extern node *addchild PROTO((node *n, int type, char *str));
Guido van Rossumcc398d11990-11-18 17:37:25 +000012extern void freenode PROTO((node *n));
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000013
14/* Node access functions */
15#define NCH(n) ((n)->n_nchildren)
16#define CHILD(n, i) (&(n)->n_child[i])
17#define TYPE(n) ((n)->n_type)
18#define STR(n) ((n)->n_str)
19
20/* Assert that the type of a node is what we expect */
21#ifndef DEBUG
22#define REQ(n, type) { /*pass*/ ; }
23#else
24#define REQ(n, type) \
25 { if (TYPE(n) != (type)) { \
26 fprintf(stderr, "FATAL: node type %d, required %d\n", \
27 TYPE(n), type); \
28 abort(); \
29 } }
30#endif