BSD 4 release
[unix-history] / usr / src / cmd / f77 / exec.c
index cd00786..3cd9242 100644 (file)
@@ -27,7 +27,7 @@ if(ctlstack->ctltype == CTLIF)
        putif(p, ctlstack->elselabel);
        }
 
        putif(p, ctlstack->elselabel);
        }
 
-else   execerr("elseif out of place", 0);
+else   execerr("elseif out of place", CNULL);
 }
 
 
 }
 
 
@@ -45,7 +45,7 @@ if(ctlstack->ctltype==CTLIF)
        ctlstack->ctltype = CTLELSE;
        }
 
        ctlstack->ctltype = CTLELSE;
        }
 
-else   execerr("else out of place", 0);
+else   execerr("else out of place", CNULL);
 }
 
 
 }
 
 
@@ -65,7 +65,7 @@ else if(ctlstack->ctltype == CTLELSE)
        }
 
 else
        }
 
 else
-       execerr("endif out of place", 0);
+       execerr("endif out of place", CNULL);
 }
 
 
 }
 
 
@@ -149,7 +149,7 @@ else
        {
        if(parstate < INDATA)
                enddcl();
        {
        if(parstate < INDATA)
                enddcl();
-       puteq(mklhs(lp), rp);
+       puteq(mklhs(lp), fixtype(rp));
        }
 }
 
        }
 }
 
@@ -160,7 +160,7 @@ struct Primblock *lp;
 expptr rp;
 {
 register struct Primblock *p;
 expptr rp;
 {
 register struct Primblock *p;
-register struct Nameblock *np;
+register Namep np;
 chainp args;
 
 np = lp->namep;
 chainp args;
 
 np = lp->namep;
@@ -174,16 +174,18 @@ else
 np->vprocclass = PSTFUNCT;
 np->vstg = STGSTFUNCT;
 impldcl(np);
 np->vprocclass = PSTFUNCT;
 np->vstg = STGSTFUNCT;
 impldcl(np);
-args = (lp->argsp ? lp->argsp->listp : NULL);
-np->vardesc.vstfdesc = mkchain(args , rp );
+args = (lp->argsp ? lp->argsp->listp : CHNULL);
+np->varxptr.vstfdesc = mkchain(args , rp );
 
 for( ; args ; args = args->nextp)
 
 for( ; args ; args = args->nextp)
-       if( (p = args->datap)->tag!=TPRIM ||
-               p->argsp || p->fcharp || p->lcharp)
+       if( args->datap->tag!=TPRIM ||
+               (p = (struct Primblock *) (args->datap) )->argsp ||
+               p->fcharp || p->lcharp )
                err("non-variable argument in statement function definition");
        else
                {
                err("non-variable argument in statement function definition");
        else
                {
-               vardcl(args->datap = p->namep);
+               args->datap = (tagptr) (p->namep);
+               vardcl(p->namep);
                free(p);
                }
 }
                free(p);
                }
 }
@@ -191,15 +193,15 @@ for( ; args ; args = args->nextp)
 
 
 excall(name, args, nstars, labels)
 
 
 excall(name, args, nstars, labels)
-struct Hashentry *name;
+Namep name;
 struct Listblock *args;
 int nstars;
 struct Labelblock *labels[ ];
 {
 register expptr p;
 
 struct Listblock *args;
 int nstars;
 struct Labelblock *labels[ ];
 {
 register expptr p;
 
-settype(name, TYSUBR, NULL);
-p = mkfunct( mkprim(name, args, NULL, NULL) );
+settype(name, TYSUBR, ENULL);
+p = mkfunct( mkprim(name, args, CHNULL) );
 p->exprblock.vtype = p->exprblock.leftp->headblock.vtype = TYINT;
 if(nstars > 0)
        putcmgo(p, nstars, labels);
 p->exprblock.vtype = p->exprblock.leftp->headblock.vtype = TYINT;
 if(nstars > 0)
        putcmgo(p, nstars, labels);
@@ -214,15 +216,15 @@ register expptr p;
 {
 char *q;
 int n;
 {
 char *q;
 int n;
-struct Constblock *mkstrcon();
+expptr mkstrcon();
 
 if(p)
        {
        if( ! ISCONST(p) )
                {
 
 if(p)
        {
        if( ! ISCONST(p) )
                {
-               execerr("pause/stop argument must be constant", 0);
+               execerr("pause/stop argument must be constant", CNULL);
                frexpr(p);
                frexpr(p);
-               p = mkstrcon(0, 0);
+               p = mkstrcon(0, CNULL);
                }
        else if( ISINT(p->constblock.vtype) )
                {
                }
        else if( ISINT(p->constblock.vtype) )
                {
@@ -232,18 +234,18 @@ if(p)
                        {
                        p->constblock.const.ccp = copyn(n, q);
                        p->constblock.vtype = TYCHAR;
                        {
                        p->constblock.const.ccp = copyn(n, q);
                        p->constblock.vtype = TYCHAR;
-                       p->constblock.vleng = ICON(n);
+                       p->constblock.vleng = (expptr) ICON(n);
                        }
                else
                        }
                else
-                       p = mkstrcon(0, 0);
+                       p = (expptr) mkstrcon(0, CNULL);
                }
        else if(p->constblock.vtype != TYCHAR)
                {
                }
        else if(p->constblock.vtype != TYCHAR)
                {
-               execerr("pause/stop argument must be integer or string", 0);
-               p = mkstrcon(0, 0);
+               execerr("pause/stop argument must be integer or string", CNULL);
+               p = (expptr) mkstrcon(0, CNULL);
                }
        }
                }
        }
-else   p = mkstrcon(0, 0);
+else   p = (expptr) mkstrcon(0, CNULL);
 
 putexpr( call1(TYSUBR, (stop ? "s_stop" : "s_paus"), p) );
 }
 
 putexpr( call1(TYSUBR, (stop ? "s_stop" : "s_paus"), p) );
 }
@@ -264,17 +266,17 @@ int range;
 chainp spec;
 {
 register expptr p, q;
 chainp spec;
 {
 register expptr p, q;
-expptr *q1;
-register struct Nameblock *np;
+expptr q1;
+register Namep np;
 chainp cp;
 register int i;
 int dotype, incsign;
 chainp cp;
 register int i;
 int dotype, incsign;
-struct Addrblock *dovarp, *dostgp;
+Addrp dovarp, dostgp;
 expptr par[3];
 
 pushctl(CTLDO);
 dorange = ctlstack->dolabel = range;
 expptr par[3];
 
 pushctl(CTLDO);
 dorange = ctlstack->dolabel = range;
-np = spec->datap;
+np = (Namep) (spec->datap);
 ctlstack->donamep = NULL;
 if(np->vdovar)
        {
 ctlstack->donamep = NULL;
 if(np->vdovar)
        {
@@ -283,7 +285,7 @@ if(np->vdovar)
        return;
        }
 
        return;
        }
 
-dovarp = mklhs( mkprim(np, 0,0,0) );
+dovarp = mkplace(np);
 if( ! ONEOF(dovarp->vtype, MSKINT|MSKREAL) )
        {
        err("bad type on do variable");
 if( ! ONEOF(dovarp->vtype, MSKINT|MSKREAL) )
        {
        err("bad type on do variable");
@@ -296,7 +298,7 @@ if( enregister(np) )
        {
        /* stgp points to a storage version, varp to a register version */
        dostgp = dovarp;
        {
        /* stgp points to a storage version, varp to a register version */
        dostgp = dovarp;
-       dovarp = mklhs( mkprim(np, 0,0,0) );
+       dovarp = mkplace(np);
        }
 else
        dostgp = NULL;
        }
 else
        dostgp = NULL;
@@ -325,7 +327,7 @@ switch(i)
                return;
 
        case 2:
                return;
 
        case 2:
-               DOINCR = ICON(1);
+               DOINCR = (expptr) ICON(1);
 
        case 3:
                break;
 
        case 3:
                break;
@@ -337,7 +339,7 @@ ctlstack->dobodylabel = newlabel();
 if( ISCONST(DOLIMIT) )
        ctlstack->domax = mkconv(dotype, DOLIMIT);
 else
 if( ISCONST(DOLIMIT) )
        ctlstack->domax = mkconv(dotype, DOLIMIT);
 else
-       ctlstack->domax = mktemp(dotype, NULL);
+       ctlstack->domax = (expptr) mktemp(dotype, PNULL);
 
 if( ISCONST(DOINCR) )
        {
 
 if( ISCONST(DOINCR) )
        {
@@ -348,7 +350,7 @@ if( ISCONST(DOINCR) )
        }
 else
        {
        }
 else
        {
-       ctlstack->dostep = mktemp(dotype, NULL);
+       ctlstack->dostep = (expptr) mktemp(dotype, PNULL);
        ctlstack->dostepsign = VARSTEP;
        ctlstack->doposlabel = newlabel();
        ctlstack->doneglabel = newlabel();
        ctlstack->dostepsign = VARSTEP;
        ctlstack->doposlabel = newlabel();
        ctlstack->doneglabel = newlabel();
@@ -374,7 +376,7 @@ if( ISCONST(ctlstack->domax) && ISCONST(DOINIT) && ctlstack->dostepsign!=VARSTEP
 else if(ctlstack->dostepsign!=VARSTEP && !onetripflag)
        {
        if( ISCONST(ctlstack->domax) )
 else if(ctlstack->dostepsign!=VARSTEP && !onetripflag)
        {
        if( ISCONST(ctlstack->domax) )
-               q = cpexpr(ctlstack->domax);
+               q = (expptr) cpexpr(ctlstack->domax);
        else
                q = mkexpr(OPASSIGN, cpexpr(ctlstack->domax), DOLIMIT);
 
        else
                q = mkexpr(OPASSIGN, cpexpr(ctlstack->domax), DOLIMIT);
 
@@ -421,15 +423,15 @@ int here;
 {
 register struct Ctlframe *q;
 register expptr t;
 {
 register struct Ctlframe *q;
 register expptr t;
-struct Nameblock *np;
-struct Addrblock *ap;
+Namep np;
+Addrp ap;
 register int i;
 
 while(here == dorange)
        {
        if(np = ctlstack->donamep)
                {
 register int i;
 
 while(here == dorange)
        {
        if(np = ctlstack->donamep)
                {
-               t = mkexpr(OPPLUSEQ, mklhs(mkprim(ctlstack->donamep, 0,0,0)),
+               t = mkexpr(OPPLUSEQ, mkplace(ctlstack->donamep),
                        cpexpr(ctlstack->dostep) );
        
                if(ctlstack->dostepsign == VARSTEP)
                        cpexpr(ctlstack->dostep) );
        
                if(ctlstack->dostepsign == VARSTEP)
@@ -444,7 +446,7 @@ while(here == dorange)
                                ctlstack->dobodylabel);
                putlabel(ctlstack->endlabel);
                if(ap = memversion(np))
                                ctlstack->dobodylabel);
                putlabel(ctlstack->endlabel);
                if(ap = memversion(np))
-                       puteq(ap, mklhs( mkprim(np,0,0,0)) );
+                       puteq(ap, mkplace(np));
                for(i = 0 ; i < 4 ; ++i)
                        ctlstack->ctlabels[i] = 0;
                deregister(ctlstack->donamep);
                for(i = 0 ; i < 4 ; ++i)
                        ctlstack->ctlabels[i] = 0;
                deregister(ctlstack->donamep);
@@ -465,13 +467,13 @@ while(here == dorange)
 }
 \f
 exassign(vname, labelval)
 }
 \f
 exassign(vname, labelval)
-struct Nameblock *vname;
+Namep vname;
 struct Labelblock *labelval;
 {
 struct Labelblock *labelval;
 {
-struct Addrblock *p;
-struct Constblock *mkaddcon();
+Addrp p;
+expptr mkaddcon();
 
 
-p = mklhs(mkprim(vname,0,0,0));
+p = mkplace(vname);
 if( ! ONEOF(p->vtype, MSKINT|MSKADDR) )
        err("noninteger assign variable");
 else
 if( ! ONEOF(p->vtype, MSKINT|MSKADDR) )
        err("noninteger assign variable");
 else
@@ -546,9 +548,9 @@ else
 exasgoto(labvar)
 struct Hashentry *labvar;
 {
 exasgoto(labvar)
 struct Hashentry *labvar;
 {
-register struct Addrblock *p;
+register Addrp p;
 
 
-p = mklhs( mkprim(labvar,0,0,0) );
+p = mkplace(labvar);
 if( ! ISINT(p->vtype) )
        err("assigned goto variable must be integer");
 else
 if( ! ISINT(p->vtype) )
        err("assigned goto variable must be integer");
 else