annotate dsusp.c @ 0:e0bbaa717f41 draft default tip

lol J
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Mon, 25 Nov 2013 11:56:30 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
1 /* Copyright 1990-2011, Jsoftware Inc. All rights reserved. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
2 /* License in license.txt. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
3 /* */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
4 /* Debug: Suspension */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
5
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
6 #include "j.h"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
7 #include "d.h"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
8 #include "w.h"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
9
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
10
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
11 /* deba() and debz() must be coded and executed in pairs */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
12 /* in particular, do NOT do error exits between them */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
13 /* e.g. the following is a NO NO: */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
14 /* d=deba(...); */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
15 /* ASSERT(blah,EVDOMAIN); */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
16 /* debz() */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
17
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
18 DC jtdeba(J jt,C t,A x,A y,A fs){A q;DC d;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
19 GA(q,LIT,sizeof(DST),1,0); d=(DC)AV(q);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
20 memset(d,C0,sizeof(DST));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
21 d->dctype=t; d->dclnk=jt->sitop; jt->sitop=d;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
22 switch(t){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
23 case DCPARSE: d->dcy=y; break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
24 case DCSCRIPT: d->dcy=y; d->dcm=(I)fs; break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
25 case DCCALL:
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
26 d->dcx=x; d->dcy=y; d->dcf=fs;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
27 d->dca=jt->curname; d->dcm=NAV(jt->curname)->m;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
28 d->dcn=(I)jt->cursymb;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
29 d->dcstop=-2;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
30 if(jt->dbss==SSSTEPINTO){d->dcss=SSSTEPINTO; jt->dbssd=d; jt->dbss=0;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
31 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
32 R d;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
33 } /* create new top of si stack */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
34
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
35 void jtdebz(J jt){jt->sitop=jt->sitop->dclnk;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
36 /* remove top of si stack */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
37
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
38 F1(jtsiinfo){A z,*zv;DC d;I c=5,n,*s;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
39 ASSERTMTV(w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
40 n=0; d=jt->sitop; while(d){++n; d=d->dclnk;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
41 GA(z,BOX,c*n,2,0); s=AS(z); s[0]=n; s[1]=c; zv=AAV(z);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
42 d=jt->sitop;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
43 while(d){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
44 RZ(zv[0]=sc(d->dctype));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
45 RZ(zv[1]=d->dcsusp?scc('*'):scc(' '));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
46 RZ(zv[2]=sc((I)d->dcss));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
47 RZ(zv[3]=d->dctype==DCCALL?sc(lnumsi(d)):mtv);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
48 switch(d->dctype){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
49 case DCPARSE: RZ(zv[4]=unparse(d->dcy)); break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
50 case DCCALL: RZ(zv[4]=sfn(0,d->dca)); break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
51 case DCSCRIPT: zv[4]=d->dcy; break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
52 case DCJUNK: zv[4]=mtv; break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
53 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
54 zv+=c; d=d->dclnk;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
55 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
56 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
57 } /* 13!:32 si info */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
58
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
59 I lnumcw(I j,A w){CW*u;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
60 if(0>j)R -2;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
61 else if(!w)R j;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
62 else{u=(CW*)AV(w); DO(AN(w), if(j<=u[i].source)R i;) R IMAX/2;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
63 } /* line number in CW corresp. to j */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
64
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
65 I lnumsi(DC d){A c;I i;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
66 if(c=d->dcc){i=*(I*)d->dci; R(MIN(i,AN(c)-1)+(CW*)AV(c))->source;}else R 0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
67 } /* source line number from stack entry */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
68
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
69
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
70
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
71 static DC suspset(DC d){DC e;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
72 while(d&&DCCALL!=d->dctype){e=d; d=d->dclnk;} /* find topmost call */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
73 if(!(d&&DCCALL==d->dctype))R 0; /* don't suspend if no such call */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
74 if(d->dcc)e->dcsusp=1; /* if explicit, set susp on line */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
75 else d->dcsusp=1; /* if not explicit, set susp on call */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
76 R d;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
77 } /* find topmost call and set suspension flag */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
78
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
79 static B jterrcap(J jt){A y,*yv;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
80 jt->dbsusact=SUSCLEAR;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
81 GA(y,BOX,4,1,0); yv=AAV(y);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
82 RZ(yv[0]=sc(jt->jerr1));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
83 RZ(yv[1]=str(jt->etxn1,jt->etx));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
84 RZ(yv[2]=dbcall(mtv));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
85 RZ(yv[3]=locname(mtv));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
86 RZ(symbis(nfs(22L,"STACK_ERROR_INFO_base_"),y,mark));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
87 R 1;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
88 } /* error capture */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
89
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
90 static void jtsusp(J jt){B t;DC d;I old=jt->tbase+jt->ttop;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
91 jt->dbsusact=SUSCONT;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
92 d=jt->dcs; t=jt->tostdout;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
93 jt->dcs=0; jt->tostdout=1;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
94 jt->fdepn =MIN(NFDEP ,jt->fdepn +NFDEP /10);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
95 jt->fcalln=MIN(NFCALL,jt->fcalln+NFCALL/10);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
96 if (jt->dbssexec){RESETERR; immex(jt->dbssexec); tpop(old);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
97 else if(jt->dbtrap ){RESETERR; immex(jt->dbtrap ); tpop(old);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
98 while(jt->dbsusact==SUSCONT){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
99 jt->jerr=0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
100 if(jt->iepdo&&jt->iep){jt->iepdo=0; immex(jt->iep); tpop(old);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
101 immex(jgets(" "));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
102 tpop(old);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
103 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
104 if(jt->dbuser){jt->fdepn-=NFDEP/10; jt->fcalln-=NFCALL/10;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
105 else {jt->fdepn =NFDEP; jt->fcalln =NFCALL; }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
106 jt->dcs=d; jt->tostdout=t;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
107 } /* user keyboard loop while suspended */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
108
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
109 static A jtdebug(J jt){A z=0;C e;DC c,d;I*v;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
110 if(jt->dbssd){jt->dbssd->dcss=0; jt->dbssd=0;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
111 RZ(d=suspset(jt->sitop));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
112 v=(I*)d->dci;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
113 if(0>*v)R 0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
114 e=jt->jerr; jt->jerr=0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
115 if(DBERRCAP==jt->db)errcap(); else susp();
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
116 switch(jt->dbsusact){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
117 case SUSRUN:
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
118 --*v; break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
119 case SUSRET:
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
120 *v=-2; z=jt->dbresult; jt->dbresult=0; break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
121 case SUSJUMP:
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
122 *v=lnumcw(jt->dbjump,d->dcc)-1; break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
123 case SUSCLEAR:
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
124 jt->jerr=e;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
125 c=jt->sitop;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
126 while(c){if(DCCALL==c->dctype)*(I*)(c->dci)=-2; c=c->dclnk;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
127 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
128 if(jt->dbsusact!=SUSCLEAR)jt->dbsusact=SUSCONT;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
129 d->dcsusp=0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
130 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
131 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
132
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
133
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
134 static A jtparseas(J jt,B as,A w){A*u,*v,y,z;I n;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
135 n=AN(w); v=AAV(w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
136 GA(y,BOX,5+n,1,0); u=AAV(y);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
137 *u++=mark; DO(n, *u++=*v++;); *u++=mark; *u++=mark; *u++=mark; *u++=mark;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
138 z=parsea(y); /* y is destroyed by parsea */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
139 if(as&&z)ASSERT(NOUN&AT(z)&&all1(eq(one,z)),EVASSERT);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
140 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
141 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
142
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
143 /* parsex: parse an explicit defn line */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
144 /* w - line to be parsed */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
145 /* lk - 1 iff locked function */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
146 /* ci - current row of control matrix */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
147 /* c - stack entry for dbunquote for this function */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
148
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
149 A jtparsex(J jt,A w,B lk,CW*ci,DC c){A z;B as,s;DC d,t=jt->sitop;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
150 RZ(w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
151 JATTN;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
152 as=ci->type==CASSERT;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
153 if(lk)R parseas(as,w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
154 RZ(d=deba(DCPARSE,0L,w,0L));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
155 if(0==c)z=parseas(as,w); /* anonymous or not debug */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
156 else{ /* named and debug */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
157 if(s=dbstop(c,ci->source)){z=0; jsignal(EVSTOP);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
158 else {z=parseas(as,w); }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
159 if(!z&&(s||DBTRY!=jt->db)){t->dcj=d->dcj=jt->jerr; z=debug(); t->dcj=0;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
160 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
161 debz();
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
162 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
163 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
164
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
165 DF2(jtdbunquote){A t,z;B b=0,s;DC d;I i;V*sv;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
166 sv=VAV(self); t=sv->f;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
167 RZ(d=deba(DCCALL,a,w,self));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
168 if(CCOLON==sv->id&&t&&NOUN&AT(t)){ /* explicit */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
169 ra(self); z=a?dfs2(a,w,self):dfs1(w,self); fa(self);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
170 }else{ /* tacit */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
171 i=0; d->dci=(I)&i;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
172 while(0==i){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
173 if(s=dbstop(d,0L)){z=0; jsignal(EVSTOP);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
174 else {ra(self); z=a?dfs2(a,w,self):dfs1(w,self); fa(self);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
175 if(!z&&(s||DBTRY!=jt->db)){d->dcj=jt->jerr; z=debug(); if(self!=jt->sitop->dcf)self=jt->sitop->dcf;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
176 if(b){fa(a); fa(w);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
177 if(b=jt->dbalpha||jt->dbomega){a=jt->dbalpha; w=jt->dbomega; jt->dbalpha=jt->dbomega=0;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
178 ++i;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
179 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
180 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
181 if(d->dcss)ssnext(d,d->dcss);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
182 if(jt->dbss==SSSTEPINTOs)jt->dbss=0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
183 debz();
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
184 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
185 } /* function call, debug version */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
186
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
187
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
188 F1(jtdbc){I k;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
189 RZ(w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
190 if(AN(w)){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
191 RE(k=i0(w));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
192 ASSERT(!k||k==DB1||k==DBERRCAP,EVDOMAIN);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
193 ASSERT(!k||!jt->glock,EVDOMAIN);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
194 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
195 jt->redefined=0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
196 if(AN(w)){jt->db=jt->dbuser=k; jt->fdepn=NFDEP/(k?2:1); jt->fcalln=NFCALL/(k?2:1);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
197 jt->dbsusact=SUSCLEAR;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
198 R mtm;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
199 } /* 13!:0 clear stack; enable/disable suspension */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
200
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
201 F1(jtdbq){ASSERTMTV(w); R sc(jt->dbuser);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
202 /* 13!:17 debug flag */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
203
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
204 F1(jtdbrun ){ASSERTMTV(w); jt->dbsusact=SUSRUN; R mtm;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
205 /* 13!:4 run again */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
206
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
207 F1(jtdbnext){ASSERTMTV(w); jt->dbsusact=SUSNEXT; R mtm;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
208 /* 13!:5 run next */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
209
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
210 F1(jtdbret ){RZ(w); jt->dbsusact=SUSRET; jt->dbresult=ra(w); R mtm;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
211 /* 13!:6 exit with result */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
212
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
213 F1(jtdbjump){RE(jt->dbjump=i0(w)); jt->dbsusact=SUSJUMP; R mtm;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
214 /* 13!:7 resume at line n (return result error if out of range) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
215
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
216 static F2(jtdbrr){DC d;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
217 RE(0);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
218 d=jt->sitop; while(d&&DCCALL!=d->dctype)d=d->dclnk;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
219 ASSERT(d&&VERB&AT(d->dcf)&&!d->dcc,EVDOMAIN); /* must be explicit verb */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
220 jt->dbalpha=ra(a); jt->dbomega=ra(w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
221 jt->dbsusact=SUSRUN;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
222 R mtm;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
223 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
224
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
225 F1(jtdbrr1 ){R dbrr(0L,w);} /* 13!:9 re-run with arg(s) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
226 F2(jtdbrr2 ){R dbrr(a, w);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
227
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
228 F1(jtdbtrapq){ASSERTMTV(w); R jt->dbtrap?jt->dbtrap:mtv;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
229 /* 13!:14 query trap */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
230
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
231 F1(jtdbtraps){RZ(w=vs(w)); fa(jt->dbtrap); jt->dbtrap=AN(w)?ra(w):0L; R mtm;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
232 /* 13!:15 set trap */