From: Eric S. Raymond Date: Fri, 4 Nov 1994 00:42:17 +0000 (+0000) Subject: Avoid a core dump. X-Git-Tag: 1-2~79 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=abcef25702f4928aae407298961f9c4001b33fee;p=cupl.git Avoid a core dump. --- diff --git a/execute.c b/execute.c index c8ff0a3..11054f9 100644 --- a/execute.c +++ b/execute.c @@ -13,9 +13,59 @@ handed off to execute(). *****************************************************************************/ /*LINTLIBRARY*/ #include "cupl.h" +#include "tokens.h" + +#define car u.n.left +#define cdr u.n.right + +static node *pc; /* the statement node to evaluate next */ + +static void cupl_read(node *tp) +/* evaluate a READ item */ +{ +} + +static void cupl_write(node *tp) +/* evaluate a WRITE item */ +{ +} + +static value cupl_eval(node *tree) +/* recursively evaluate a CUPL parse tree */ +{ + value leftside, rightside; + node *np; + + switch(tree->type) + { + case READ: + for_cdr(np, tree->car) + cupl_read(np->car); + break; + + case WRITE: + for_cdr(np, tree->car) + cupl_write(np->car); + break; + + default: + die("unknown node type %d (%s), cannot execute\n",tokdump(tree->type)); + break; + } +} void execute(node *tree) +/* execute a CUPL program described by a parse tree */ { +#ifdef FOO + node *next; + + for (pc = tree; pc; pc = next) + { + next = pc->cdr; + (void) cupl_eval(pc->car); + } +#endif /* FOO */ } /* execute.c ends here */ diff --git a/interpret.c b/interpret.c index d993deb..62cbb67 100644 --- a/interpret.c +++ b/interpret.c @@ -330,7 +330,7 @@ static void rewrite(node *tree) endnode->car->car->u.string) == 0) { found = TRUE; - np->syminf->endnode = endnode; + sp->car->syminf->endnode = endnode; break; } if (!found)