]> thyrsus.com Git - cupl.git/commitdiff
One more step towards PERFORMs.
authorEric S. Raymond <esr@thyrsus.com>
Fri, 11 Nov 1994 18:57:09 +0000 (18:57 +0000)
committerEric S. Raymond <esr@thyrsus.com>
Fri, 11 Nov 1994 18:57:09 +0000 (18:57 +0000)
execute.c

index cdd7a622dc5d1ed587673e9d47887a44d7fb0eca..0afb607c4c225aa1492a36ed44cc63d1f2a60bd9 100644 (file)
--- 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)