putif(p, ctlstack->elselabel);
}
-else execerr("elseif out of place", 0);
+else execerr("elseif out of place", CNULL);
}
ctlstack->ctltype = CTLELSE;
}
-else execerr("else out of place", 0);
+else execerr("else out of place", CNULL);
}
}
else
- execerr("endif out of place", 0);
+ execerr("endif out of place", CNULL);
}
{
if(parstate < INDATA)
enddcl();
- puteq(mklhs(lp), rp);
+ puteq(mklhs(lp), fixtype(rp));
}
}
expptr rp;
{
register struct Primblock *p;
-register struct Nameblock *np;
+register Namep np;
chainp args;
np = lp->namep;
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)
- 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
{
- vardcl(args->datap = p->namep);
+ args->datap = (tagptr) (p->namep);
+ vardcl(p->namep);
free(p);
}
}
excall(name, args, nstars, labels)
-struct Hashentry *name;
+Namep name;
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);
{
char *q;
int n;
-struct Constblock *mkstrcon();
+expptr mkstrcon();
if(p)
{
if( ! ISCONST(p) )
{
- execerr("pause/stop argument must be constant", 0);
+ execerr("pause/stop argument must be constant", CNULL);
frexpr(p);
- p = mkstrcon(0, 0);
+ p = mkstrcon(0, CNULL);
}
else if( ISINT(p->constblock.vtype) )
{
{
p->constblock.const.ccp = copyn(n, q);
p->constblock.vtype = TYCHAR;
- p->constblock.vleng = ICON(n);
+ p->constblock.vleng = (expptr) ICON(n);
}
else
- p = mkstrcon(0, 0);
+ p = (expptr) mkstrcon(0, CNULL);
}
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) );
}
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;
-struct Addrblock *dovarp, *dostgp;
+Addrp dovarp, dostgp;
expptr par[3];
pushctl(CTLDO);
dorange = ctlstack->dolabel = range;
-np = spec->datap;
+np = (Namep) (spec->datap);
ctlstack->donamep = NULL;
if(np->vdovar)
{
return;
}
-dovarp = mklhs( mkprim(np, 0,0,0) );
+dovarp = mkplace(np);
if( ! ONEOF(dovarp->vtype, MSKINT|MSKREAL) )
{
err("bad type on do variable");
{
/* 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;
return;
case 2:
- DOINCR = ICON(1);
+ DOINCR = (expptr) ICON(1);
case 3:
break;
if( ISCONST(DOLIMIT) )
ctlstack->domax = mkconv(dotype, DOLIMIT);
else
- ctlstack->domax = mktemp(dotype, NULL);
+ ctlstack->domax = (expptr) mktemp(dotype, PNULL);
if( ISCONST(DOINCR) )
{
}
else
{
- ctlstack->dostep = mktemp(dotype, NULL);
+ ctlstack->dostep = (expptr) mktemp(dotype, PNULL);
ctlstack->dostepsign = VARSTEP;
ctlstack->doposlabel = newlabel();
ctlstack->doneglabel = newlabel();
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);
{
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)
{
- t = mkexpr(OPPLUSEQ, mklhs(mkprim(ctlstack->donamep, 0,0,0)),
+ t = mkexpr(OPPLUSEQ, mkplace(ctlstack->donamep),
cpexpr(ctlstack->dostep) );
if(ctlstack->dostepsign == VARSTEP)
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);
}
\f
exassign(vname, labelval)
-struct Nameblock *vname;
+Namep vname;
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
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