blob: ff2ca7c49a9276f61e60b9475191785919b019a7 [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;
Guido van Rossum3f5da241990-12-20 15:06:42 +00006 int n_lineno;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00007 int n_nchildren;
8 struct _node *n_child;
9} node;
10
Guido van Rossum3f5da241990-12-20 15:06:42 +000011extern node *newtree PROTO((int type));
12extern node *addchild PROTO((node *n, int type, char *str, int lineno));
13extern void freetree PROTO((node *n));
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000014
15/* Node access functions */
16#define NCH(n) ((n)->n_nchildren)
17#define CHILD(n, i) (&(n)->n_child[i])
18#define TYPE(n) ((n)->n_type)
19#define STR(n) ((n)->n_str)
20
21/* Assert that the type of a node is what we expect */
22#ifndef DEBUG
23#define REQ(n, type) { /*pass*/ ; }
24#else
25#define REQ(n, type) \
26 { if (TYPE(n) != (type)) { \
27 fprintf(stderr, "FATAL: node type %d, required %d\n", \
28 TYPE(n), type); \
29 abort(); \
30 } }
31#endif
Guido van Rossum3f5da241990-12-20 15:06:42 +000032
33extern void listtree PROTO((node *));
34extern void listnode PROTO((FILE *, node *));