{
if (sp <= stack)
die("too many END statements\n");
- return(*sp--);
+ return(*--sp);
}
static void pushstack(node *st)
/* recursively evaluate a CUPL parse tree */
{
node *pc; /* pointer to statement being evaluated */
- static node *next; /* the statement node to evaluate next */
+ node *next; /* the statement node to evaluate next */
static jmp_buf nextbuf; /* end-of-statement handling */
value leftside, rightside, result, cond;
next = pc->cdr;
if (setjmp(nextbuf) == 0)
(void) cupl_eval(pc->car);
+ else
+ next = popstack();
break;
}
}
return(result);
case GO:
- next = tree->car;
+ pushstack(tree->car);
longjmp(nextbuf, 1);
case IF: