diff options
Diffstat (limited to 'Include/node.h')
-rw-r--r-- | Include/node.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Include/node.h b/Include/node.h new file mode 100644 index 0000000..d01128b --- /dev/null +++ b/Include/node.h @@ -0,0 +1,29 @@ +/* Parse tree node interface */ + +typedef struct _node { + int n_type; + char *n_str; + int n_nchildren; + struct _node *n_child; +} node; + +extern node *newnode PROTO((int type)); +extern node *addchild PROTO((node *n, int type, char *str)); + +/* Node access functions */ +#define NCH(n) ((n)->n_nchildren) +#define CHILD(n, i) (&(n)->n_child[i]) +#define TYPE(n) ((n)->n_type) +#define STR(n) ((n)->n_str) + +/* Assert that the type of a node is what we expect */ +#ifndef DEBUG +#define REQ(n, type) { /*pass*/ ; } +#else +#define REQ(n, type) \ + { if (TYPE(n) != (type)) { \ + fprintf(stderr, "FATAL: node type %d, required %d\n", \ + TYPE(n), type); \ + abort(); \ + } } +#endif |