Fix bug with 0 based indexing into the operator table being
[unix-history] / usr / src / old / adb / adb.vax / expr.c
index 8880fdf..31d06eb 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #include "defs.h"
  */
 
 #include "defs.h"
-static char sccsid[] = "@(#)expr.c 4.3 %G%";
+static char sccsid[] = "@(#)expr.c     4.6 %G%";
 
 MSG            BADSYM;
 MSG            BADVAR;
 
 MSG            BADSYM;
 MSG            BADVAR;
@@ -28,7 +28,7 @@ CHAR          *lp;
 INT            radix;
 STRING         errflg;
 L_INT          localval;
 INT            radix;
 STRING         errflg;
 L_INT          localval;
-CHAR           isymbol[BSIZE];
+CHAR           isymbol[1024];
 
 CHAR           lastc,peekc;
 
 
 CHAR           lastc,peekc;
 
@@ -79,7 +79,7 @@ expr(a)
 
                    default:
                        lp--;
 
                    default:
                        lp--;
-               \19return rc);
+                       return(rc);
            }
        OD
        return(rc);
            }
        OD
        return(rc);
@@ -100,64 +100,6 @@ term(a)
                        term(a|1); expv = -expv; return(1);
 
                    case '~':
                        term(a|1); expv = -expv; return(1);
 
                    case '~':
-                       term(a|1); expv = ~expv; return(1);
-
-                   case '#':
-                       term(a|1); expv = !expv; return(1);
-
-                   case '(':
-                       expr(2);
-                       IF *lp!=')'
-                       THEN    error(BADSYN);
-                       ELSE    lp++; return(1);
-                       FI
-
-                   default:
-                       lp--;
-                       return(item(a));
-       }
-}
-
-item(a)
-{      /* name [ . local ] | number | . | ^ | <var | <register | 'x | | */
-       INT             base, d;
-       CHAR            savc;
-       BOOL            hex;
-       L_INT           frame;
-       register struct nlist *symp;
-       int regptr;
-
-       hex=FALSE;
-
-       readchar();
-       IF symchar(0)
-       THEN    readsym();
-               IF lastc=='.'
-               THEN    frame= *(ADDR *)(((ADDR)&u)+FP); lastframe=0;
-                       callpc= *(ADDR *)(((ADDR)&u)+PC);
-                       WHILE errflg==0
-                       DO  savpc=callpc;
-                               findsym(callpc,ISYM);
-                           IF  eqsym(cursym->n_un.n_name,isymbol,'~')
-                           THEN break;
-                           FI
-                               callpc=get(frame+16, DSP);
-                           lastframe=frame;
-                           frame=get(frame+12,DSP)&EVEN;
-                           IF frame==0
-                           THEN error(NOCFN);
-                           FI
-                       OD
-                       savlastf=lastframe; savframe=frame;
-                       readchar();
-                       IF symchar(0)
-                       THEN    chkloc(expv=frame);
-                       FI
-               ELIF (symp=lookup(isymbol))==0 THEN error(BADSYM);
-               ELSE expv = symp->n_value;
-               FI
-               lp--;
-
 
        ELIF getnum(readchar)
        THEN ;
 
        ELIF getnum(readchar)
        THEN ;
@@ -193,8 +135,7 @@ item(a)
        THEN    d=4; expv=0;
                WHILE quotchar()
                DO  IF d--
        THEN    d=4; expv=0;
                WHILE quotchar()
                DO  IF d--
-                   THEN IF d==1 THEN expv <<=16; FI
-                        expv |= ((d&1)?lastc:lastc<<8);
+                   THEN expv = (expv << 8) | lastc;
                    ELSE error(BADSYN);
                    FI
                OD
                    ELSE error(BADSYN);
                    FI
                OD