BSD 3 development
[unix-history] / usr / src / cmd / mip / reader.c
index c1dec2f..a932096 100644 (file)
@@ -13,6 +13,7 @@ int lineno;
 
 int nrecur;
 int lflag;
 
 int nrecur;
 int lflag;
+extern int Wflag;
 int edebug = 0;
 int xdebug = 0;
 int udebug = 0;
 int edebug = 0;
 int xdebug = 0;
 int udebug = 0;
@@ -51,6 +52,10 @@ p2init( argc, argv ) char *argv[];{
                                        ++lflag;
                                        break;
 
                                        ++lflag;
                                        break;
 
+                               case 'W': /*Shut up warning: etc. */
+                                       ++Wflag;
+                                       break;
+
                                case 'e':  /* expressions */
                                        ++edebug;
                                        break;
                                case 'e':  /* expressions */
                                        ++edebug;
                                        break;
@@ -312,6 +317,11 @@ delay2( p ) register NODE *p; {
                /* inside of a call */
                return;
 
                /* inside of a call */
                return;
 
+       case UNARY MUL:
+               /* if *p++, do not rewrite */
+               if( autoincr( p ) ) return;
+               break;
+
        case INCR:
        case DECR:
                if( deltest( p ) ){
        case INCR:
        case DECR:
                if( deltest( p ) ){
@@ -586,6 +596,8 @@ order(p,cook) NODE *p; {
                        return;
                        }
                offstar( p->left );
                        return;
                        }
                offstar( p->left );
+               canon(p);
+               if( canaddr(p) && cook != INTEMP ) goto cleanup;
                goto again;
 
        case INCR:  /* INCR and DECR */
                goto again;
 
        case INCR:  /* INCR and DECR */
@@ -1175,39 +1187,16 @@ oreg2( p ) register NODE *p; {
 
                /* look for doubly indexed expressions */
 
 
                /* look for doubly indexed expressions */
 
-               if( q->op==PLUS && qr->op==REG && ql->op==REG &&
-                               (szty(ql->type)==1||szty(qr->type)==1) ) {
-                       temp = 0;
-                       cp = ql->name;
-                       if( *cp ){
-                               if( *qr->name ) return;
-                               }
-                       else {
-                               cp = qr->name;
+               if( q->op == PLUS) {
+                       if( (r=base(ql))>=0 && (i=offset(qr, tlen(p)))>=0) {
+                               makeor2(p, ql, r, i);
+                               return;
+                       } else if( (r=base(qr))>=0 && (i=offset(ql, tlen(p)))>=0) {
+                               makeor2(p, qr, r, i);
+                               return;
                                }
                                }
-                       if( szty(qr->type)>1) r = R2PACK(qr->rval,ql->rval);
-                       else r = R2PACK(ql->rval,qr->rval);
-                       goto ormake;
                        }
 
                        }
 
-               if( (q->op==PLUS||q->op==MINUS) && qr->op==ICON && ql->op==PLUS &&
-                               ql->left->op==REG &&
-                               ql->right->op==REG ){
-                       temp = qr->lval;
-                       cp = qr->name;
-                       if( q->op == MINUS ){
-                               if( *cp ) return;
-                               temp = -temp;
-                               }
-                       if( *cp ){
-                               if( *ql->name ) return;
-                               }
-                       else {
-                               cp = ql->name;
-                               }
-                       r = R2PACK(ql->left->rval,ql->right->rval);
-                       goto ormake;
-                       }
 
 #endif
 
 
 #endif