void debug(void){A name,seq;C err,*sp,*spz,*spp;DC si; sp=scad; spz=sczad; spp=scpad; si=sitop; if(!debugb||!si) R; if(DCPARS==si->t) si=si->lnk; if(!si || DCDEFN!=si->t && DCSCRP!=si->t) R; err=jerr; jerr=0; if(!debadd(DCDEBG)){debugb=0; jsignal(EVSYSTEM); R;} sitop->ln=err; if(DCDEFN==si->t){ name=scnm(CSPARS); seq=srd(name,local); seq=append(sc(si->ln),seq); symbis(name,seq,local); susp(); scad=sp; sczad=spz; scpad=spp; switch(susact){ case SUSNON: break; case SUSRUN: break; case SUSRET: symbis(name, mtv, local); break; case SUSPOP: symbis(name, mtv, local); break; case SUSRES: break; case SUSNXT: symbis(name, behead(seq), local); break; }} else if(DCSCRP==si->t){ susp(); scad=sp; sczad=spz; scpad=spp; switch(susact){ case SUSNON: break; case SUSRUN: scad=scpad; break; case SUSRET: fa(qpopres); qpopres=0; case SUSPOP: scad=0; break; case SUSRES: break; case SUSNXT: break; }} susact=SUSNON; debz(); }
static DF2(xd){PROLOG;DECLFG;A f,*line,loc=local,name,seq,z=0;B b;DC dv; I i=0,n,old; b=a&&w; f=*(b+AAV(sv->h)); line=AAV(f); n=nline=AN(f); ASSERT(n,EVDOMAIN); GA(local,SYMB,twprimes[0],1,0); symbis(scnm(CALPHA),a,local); symbis(scnm(COMEGA),w,local); RZ(dv=debadd(DCDEFN)); dv->p=sv->s; drun=0; old=tbase+ttop; ra(self); for(;0<=i&&i<n;i++){ tpop(old); dv->ln=i; dv->n=1+(0!=a); z=parse(ca(line[i])); if(!debugb&&!z) break; } if(debugb&&!z){z=tpush(qpopres); qpopres=0;} z=car(z); ++AC(local); fa(local); local=loc; asgn=0; fa(self); debz(); if(!z) jsignal(EVRESULT); EPILOG(z); }
A jtstcreate(J jt,C k,I p,I n,C*u){A g,*pv,x,y;C s[20];I m,*nv;L*v; GA(g,SYMB,ptab[p],1,0); RZ(v=symnew(AV(g))); v->flag|=LINFO; v->sn=jt->symindex++; switch(k){ case 0: /* named locale */ RZ(x=nfs(n,u)); LOCNAME(g)=x; LOCPATH(g)=ra(1==n&&'z'==*u?vec(BOX,0L,0L):zpath); symbis(x,g,jt->stloc); break; case 1: /* numbered locale */ ASSERT(0<=jt->stmax,EVLOCALE); sprintf(s,FMTI,n); RZ(x=nfs(strlen(s),s)); LOCNAME(g)=x; LOCPATH(g)=ra(zpath); ++jt->stused; m=AN(jt->stnum); if(m<jt->stused){ x=ext(1,jt->stnum); y=ext(1,jt->stptr); RZ(x&&y); jt->stnum=x; jt->stptr=y; nv=m+AV(jt->stnum); pv=m+AAV(jt->stptr); DO(AN(x)-m, *nv++=-1; *pv++=0;); }