void newproc() { if(parstate != OUTSIDE) { execerr("missing end statement"); endproc(); } parstate = INSIDE; procclass = CLMAIN; /* default */ }
execlab(ftnint stateno) #endif { register struct Labelblock *lp; if(lp = mklabel(stateno)) { if(lp->labinacc) warn1("illegal branch to inner block, statement label %s", convic(stateno) ); else if(lp->labdefined == NO) lp->blklevel = blklevel; if(lp->labtype == LABFORMAT) err("may not branch to a format"); else lp->labtype = LABEXEC; } else execerr("illegal label %s", convic(stateno)); return(lp); }
void putcmgo(bigptr x, int nlab, struct labelblock *labels[]) { bigptr y; int i; if (!ISINT(x->vtype)) { execerr("computed goto index must be integer", NULL); return; } y = fmktemp(x->vtype, NULL); putexpr(mkexpr(OPASSIGN, cpexpr(y), x)); #ifdef notyet /* target-specific computed goto */ vaxgoto(y, nlab, labels); #else /* * Primitive implementation, should use table here. */ for(i = 0 ; i < nlab ; ++i) putif(mkexpr(OPNE, cpexpr(y), MKICON(i+1)), labels[i]->labelno); frexpr(y); #endif }