Checking for bad branches.
authorPete Elmore <1337p337@gmail.com>
Thu, 1 Apr 2010 07:17:40 +0000 (00:17 -0700)
committerPete Elmore <1337p337@gmail.com>
Thu, 1 Apr 2010 07:17:40 +0000 (00:17 -0700)
pez.c

diff --git a/pez.c b/pez.c
index c6ade0f3b3c1d805345f494ffdba318dfed1c081..e8572ea2871f8c01894507ffbb8bbafc5d38c3bf 100644 (file)
--- a/pez.c
+++ b/pez.c
@@ -3249,6 +3249,10 @@ prim P_exit(pez_instance *p)
 prim P_branch(pez_instance *p)
 {
        p->ip += (pez_stackitem) *p->ip;
+       if(!*p->ip)
+               trouble(p,
+                       "Zero branch!  Non-terminated if/do/begin are "
+                       "likely culprits");
 }
 
 /*
@@ -3257,10 +3261,15 @@ prim P_branch(pez_instance *p)
 prim P_qbranch(pez_instance *p)
 {
        Sl(1);
-       if(S0 == 0)
+       if(S0 == 0) {
                p->ip += (pez_stackitem) *p->ip;
-       else
+               if(!*p->ip)
+                       trouble(p,
+                               "Zero branch!  Non-terminated if/do/begin are "
+                               "likely culprits");
+       } else {
                p->ip++;        // Skip the in-line address.
+       }
        Pop;
 }