warn1("Name %s hidden by a new declaration", p
->namep
);
hidlist
= mkchain(p
->varp
, hidlist
);
/* remove all symbol table entries in terminated block,
register struct stentry
*s
;
for(hp
= hashtab
; hp
<hashend
; ++hp
)
if( (v
= s
->varp
) && v
->blklevel
== blklevel
)
laberr("%s never defined",
else { /* move label out a level */
TEST
fprintf(diagfile
,"gone(%s) level %d\n",
gonelist
= mkchain(s
->varp
, gonelist
);
for( p
=hidlist
; p
&& ((v
= (q
=p
->datap
)->sthead
)->varp
==NULL
) ; p
=hidlist
)
if(v
->blklevel
> q
->blklevel
)
v
->blklevel
= q
->blklevel
;
TEST
fprintf(diagfile
, "unhide(%s), blklevel %d\n", v
->namep
, v
->blklevel
);
sprintf(msg
, "%d declarations leftover at block level %d",
ndecl
[blklevel
], blklevel
);
fatal("leftover hidden variables");
if(thisexec
&& thisexec
->copylab
)
p
->labelno
= thisexec
->labelno
;
p
->labused
= thisexec
->labused
;
tempvarlist
= hookup(q
->temps
, tempvarlist
);
p
->brnchend
= q
->brnchend
;
p
->labeled
|= q
->labeled
;
p
->uniffable
|= q
->uniffable
;
if(q
->labelno
&& !(q
->labused
))
else q
->nxtlabno
= q
->labelno
;
if(p
->labelno
&& !(p
->labused
))
p
->labelno
= q
->nxtlabno
;
exifgo( mknode(TNOTOP
,OPNOT
,vp
,PNULL
),
q
->breaklab
= nextlab() );
else thisexec
->copylab
= 1;
indifs
[q
->indifn
] = q
->xlab
;
putic(ICLABEL
, q
->nextlab
);
p
= mknode(TASGNOP
,OPASGN
,vp
->dovar
,vp
->dopar
[0]);
fatal1("pushctl: invalid control block type %d", t
);
int first
, deflabno
, blab
, cmin
, cmax
, range
, caseval
, optcase
;
fatal("empty control stack popped");
/* if(thisexec->brnchend == 0) */
if(thisctl
->breaklab
== 0)
thisctl
->breaklab
= nextlab();
exgoto(thisctl
->breaklab
);
optcase
= (thisctl
->loopvar
->vtype
== TYINT
);
for(p
=thisctl
->loopctl
; p
!=0 ; p
= p
->nextcase
)
laberr("undefined case label", CNULL
);
else if( isicon(p
->casexpr
, &caseval
))
if(optcase
&& ncases
>2 && range
<2*ncases
&& range
<MAXSWITCH
)
for(p
=thisctl
->loopctl
; p
!=0 ; p
= p
->nextcase
)
if(p
->labdefined
&& p
->casexpr
)
isicon(p
->casexpr
, &caseval
);
labp
[caseval
-cmin
] = p
->labelno
;
blab
= (deflabno
? deflabno
: thisctl
->breaklab
);
for(i
=range
-1 ; i
>=0 ; --i
)
q
= mkchain(labp
[i
] ? labp
[i
] : blab
, q
);
excompgoto(q
, mknode(TAROP
,OPPLUS
, mkint(1-cmin
),
cpexpr(thisctl
->loopvar
) ));
for(p
=thisctl
->loopctl
; p
!=0 ; p
= p
->nextcase
)
if(p
->labdefined
&& p
->casexpr
)
exifgo( mknode(TRELOP
,OPEQ
,
cpexpr(thisctl
->loopvar
),p
->casexpr
),
for(p
= thisctl
->loopctl
; p
; p
= newp
)
exgoto(thisctl
->nextlab
);
exgoto(thisctl
->nextlab
);
putic(ICKEYWORD
,FCONTINUE
);
fatal1("popctl: invalid control block type %d",
if(thisctl
->breaklab
!= 0)
thisexec
->nxtlabno
= thisctl
->breaklab
;