From: Eric S. Raymond Date: Fri, 11 Nov 1994 18:57:09 +0000 (+0000) Subject: One more step towards PERFORMs. X-Git-Tag: 1-2~42 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=98a547008a125b264c6d68ba2309b0ee8597b91c;p=cupl.git One more step towards PERFORMs. --- diff --git a/execute.c b/execute.c index cdd7a62..0afb607 100644 --- a/execute.c +++ b/execute.c @@ -553,25 +553,32 @@ static value cupl_eval(node *tree) (void) printf("statement %2d: %x (%-10s of %9x, %9x)\n", pc->number, pc, tokdump(pc->type), pc->car, pc->cdr); - next = pc->cdr; - if (setjmp(nextbuf) == 0) - (void) cupl_eval(pc->car); + switch (pc->car->type) + { + case BLOCK: + next = pc->endnode->cdr; + break; + + case OG: + /* FIXME: GOTO END ignores labels */ + case END: + next = NULLNODE; + break; + + default: + next = pc->cdr; + if (setjmp(nextbuf) == 0) + (void) cupl_eval(pc->car); + break; + } } result.rank = FAIL; return(result); - case BLOCK: - next = pc->endnode->cdr; - longjmp(nextbuf, 1); - case GO: next = tree->car; longjmp(nextbuf, 1); - - case OG: - case END: - longjmp(jmpperf, 1); - + case IF: leftside = EVAL_WRAP(cupl_eval(tree->car)); if (leftside.rank)