From 96713f6cb1ae627772e7bb52796e112ec8c73e44 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Fri, 11 Nov 1994 21:46:57 +0000 Subject: [PATCH] No more nodetype.h file. --- Makefile | 4 ++-- cupl.h | 3 +++ execute.c | 4 +--- interpret.c | 26 +++++++++++++++++++++++++- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 559c1a9..581aaac 100644 --- a/Makefile +++ b/Makefile @@ -26,8 +26,8 @@ grammar.o: grammar.c cupl.h tokdump.o: tokdump.c toktab.h lexer.o: lexer.c tokens.h cupl.h interpret.o: interpret.c tokens.h cupl.h -interpret.o: interpret.c tokens.h nodetype.h cupl.h -execute.o: execute.c tokens.h nodetype.h cupl.h +interpret.o: interpret.c tokens.h cupl.h +execute.o: execute.c tokens.h cupl.h monitor.o: monitor.c tokens.h cupl.h toktab.h: tokens.h diff --git a/cupl.h b/cupl.h index 54835d9..1d02d7b 100644 --- a/cupl.h +++ b/cupl.h @@ -65,6 +65,9 @@ node; #define NULLNODE (node *)NULL +#define car u.n.left +#define cdr u.n.right + #define for_cdr(x, t) for (x = (t); x; x = x->u.n.right) /* this structure represents a CUPL value */ diff --git a/execute.c b/execute.c index d35f789..d1bb5ab 100644 --- a/execute.c +++ b/execute.c @@ -641,9 +641,7 @@ void execute(node *tree) } /* break the link to the data */ - if (!data) - warn("no data supplied\n"); - else if (last) + if (data && last) last->cdr = cons(END, NULLNODE, NULLNODE); /* first, setjmp so we can use STOP to exit */ diff --git a/interpret.c b/interpret.c index ecde385..fd7c1d1 100644 --- a/interpret.c +++ b/interpret.c @@ -19,7 +19,31 @@ differently if we get a compiler back end. #include #include "cupl.h" #include "tokens.h" -#include "nodetype.h" + +/* nodetype.h -- macros that describe the semantics of nodes */ + +/* + * Define token classes for consistency checks here. The theory is + * that by separating this from the tree-traversal machinery below, we + * may be able to parametrize for different source languages someday. + */ +/* does the node represent an atom? */ +#define ATOMIC(n) ((n) == IDENTIFIER || (n) == NUMBER || (n) == STRING) +/* does the node reference a statement label? */ +#define SLABELREF(n) ((n) == GO || (n) == OG) +/* does the node reference a block label? */ +#define BLABELREF(n) ((n) == PERFORM) +/* does the node set a variable? */ +#define VARSET(n) ((n) == LET || (n) == READ || (n) == ITERATE) +/* does the (non-VARSET) node refer to its left operand as a variable? */ +#define LEFTREF(n) ((n) != FOR && (n) != GO && (n) != OG && (n) != LABEL \ + && (n) != ALLOCATE && (n) != WATCH \ + && (n) != ITERATE && (n) != FROM \ + && (n) != PERFORM) +/* does the (non-VARSET) node refer to its right operand? */ +#define RIGHTREF(n) ((n) != PERFORM) + +/* nodetype.h ends here */ #ifdef PARSEDEBUG /* -- 2.43.0