blob: d01128b2b9e10608e2679a1d71b74dd6a9d969fd [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));
12
13/* Node access functions */
14#define NCH(n) ((n)->n_nchildren)
15#define CHILD(n, i) (&(n)->n_child[i])
16#define TYPE(n) ((n)->n_type)
17#define STR(n) ((n)->n_str)
18
19/* Assert that the type of a node is what we expect */
20#ifndef DEBUG
21#define REQ(n, type) { /*pass*/ ; }
22#else
23#define REQ(n, type) \
24 { if (TYPE(n) != (type)) { \
25 fprintf(stderr, "FATAL: node type %d, required %d\n", \
26 TYPE(n), type); \
27 abort(); \
28 } }
29#endif