annotate w.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 /* Words: Word Formation */
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 "w.h"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
8
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
9 #define SS 0 /* space */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
10 #define SX 1 /* other */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
11 #define SA 2 /* alphanumeric */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
12 #define SN 3 /* N */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
13 #define SNB 4 /* NB */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
14 #define SNZ 5 /* NB. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
15 #define S9 6 /* numeric */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
16 #define SQ 7 /* quote */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
17 #define SQQ 8 /* even quotes */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
18 #define SZ 9 /* trailing comment */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
19
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
20 #define EI 1 /* emit (b,i-1); b=.i */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
21 #define EN 2 /* b=.i */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
22
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
23 typedef struct {C new,effect;} ST;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
24
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
25 static ST state[10][9]={
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
26 /*SS */ {{SX,EN},{SS,0 },{SA,EN},{SN,EN},{SA,EN},{S9,EN},{SX,EN},{SX,EN},{SQ,EN}},
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
27 /*SX */ {{SX,EI},{SS,EI},{SA,EI},{SN,EI},{SA,EI},{S9,EI},{SX,0 },{SX,0 },{SQ,EI}},
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
28 /*SA */ {{SX,EI},{SS,EI},{SA,0 },{SA,0 },{SA,0 },{SA,0 },{SX,0 },{SX,0 },{SQ,EI}},
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
29 /*SN */ {{SX,EI},{SS,EI},{SA,0 },{SA,0 },{SNB,0},{SA,0 },{SX,0 },{SX,0 },{SQ,EI}},
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
30 /*SNB*/ {{SX,EI},{SS,EI},{SA,0 },{SA,0 },{SA,0 },{SA,0 },{SNZ,0},{SX,0 },{SQ,EI}},
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
31 /*SNZ*/ {{SZ,0 },{SZ,0 },{SZ,0 },{SZ,0 },{SZ,0 },{SZ,0 },{SX,0 },{SX,0 },{SZ,0 }},
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
32 /*S9 */ {{SX,EI},{SS,EI},{S9,0 },{S9,0 },{S9,0 },{S9,0 },{S9,0 },{SX,0 },{SQ,EI}},
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
33 /*SQ */ {{SQ,0 },{SQ,0 },{SQ,0 },{SQ,0 },{SQ,0 },{SQ,0 },{SQ,0 },{SQ,0 },{SQQ,0}},
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
34 /*SQQ*/ {{SX,EI},{SS,EI},{SA,EI},{SN,EI},{SA,EI},{S9,EI},{SX,EI},{SX,EI},{SQ,0 }},
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
35 /*SZ */ {{SZ,0 },{SZ,0 },{SZ,0 },{SZ,0 },{SZ,0 },{SZ,0 },{SZ,0 },{SZ,0 },{SZ,0 }}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
36 };
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
37 /* CX CS CA CN CB C9 CD CC CQ */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
38
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
39 F1(jtwordil){A z;C e,nv,s,t=0;I b,i,m,n,*x,xb,xe;ST p;UC*v;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
40 RZ(w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
41 nv=0; s=SS;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
42 n=AN(w); v=UAV(w); GA(z,INT,1+n+n,1,0); x=1+AV(z);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
43 for(i=0;i<n;++i){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
44 p=state[s][wtype[v[i]]]; e=p.effect;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
45 if(e==EI){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
46 t&=s==S9;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
47 if(t){if(!nv){nv=1; xb=b;} xe=i;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
48 else{if(nv){nv=0; *x++=xb; *x++=xe-xb;} *x++=b; *x++=i-b;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
49 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
50 s=p.new;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
51 if(e){b=i; t=s==S9;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
52 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
53 if(s==SQ){jsignal3(EVOPENQ,w,b); R 0;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
54 t&=s==S9;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
55 if(t){*x++=xb=nv?xb:b; *x++=n-xb;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
56 else{if(nv){*x++=xb; *x++=xe-xb;} if(s!=SS){*x++=b; *x++=n-b;}}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
57 m=x-AV(z); *AV(z)=s==SZ||s==SNZ?-m/2:m/2;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
58 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
59 } /* word index & length; z is (# words),(i0,l0),(i1,l1),... */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
60
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
61 /* locals in wordil: */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
62 /* b: beginning index of current word */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
63 /* e: current effect */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
64 /* i: index of current character being scanned */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
65 /* m: 2 * actual number of words */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
66 /* n: length of input string w */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
67 /* nv: 1 iff numeric constant vector being built */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
68 /* p: state table entry per current state & character */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
69 /* s: current state */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
70 /* t: 1 iff current state is S9 */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
71 /* v: ptr to input string */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
72 /* x: ptr to current element of z being computed */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
73 /* xb: beginning index of current numeric vector */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
74 /* xe: end index of current numeric vector */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
75 /* z: result; maximum of n words */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
76
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
77 F1(jtwords){A t,*x,z;C*s;I k,n,*y;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
78 F1RANK(1,jtwords,0);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
79 RZ(w=vs(w));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
80 RZ(t=wordil(w));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
81 s=CAV(w); y=AV(t); n=*y++; n=0>n?-n:n;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
82 GA(z,BOX,n,1,0); x=AAV(z);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
83 DO(n, k=*y++; RZ(*x++=str(*y++,s+k)););
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
84 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
85 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
86
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
87
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
88 static A jtconstr(J jt,I n,C*s){A z;C b,c,p,*t,*x;I m=0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
89 p=0; t=s; DO(n-2, c=*++t; b=c==CQUOTE; if(!b||p)m++; p=b&&!p;);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
90 if(0==m)R aqq; else if(1==m&&(z=chr[(UC)s[1]]))R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
91 GA(z,LIT,m,1!=m,0); x=CAV(z);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
92 p=0; t=s; DO(n-2, c=*++t; b=c==CQUOTE; if(!b||p)*x++=c; p=b&&!p;);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
93 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
94 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
95
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
96 #define TNAME(i) (NAME&AT(v[i]))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
97 #define TASGN(i) (ASGN&AT(v[i]))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
98 #define TRBRACE(i) (y=v[i], CRBRACE==ID(y))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
99 #define TVERB(i,c) (y=v[i], c ==ID(y))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
100 #define TAIA(i,j) (TASGN(1) && TNAME(i) && TNAME(j) && AN(v[i])==AN(v[j]) && \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
101 !memcmp(NAV(v[i])->s,NAV(v[j])->s,AN(v[i])))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
102
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
103 F2(jtenqueue){A*v,*x,y,z;B b;C d,e,p,*s,*wi;I i,n,*u,wl;UC c;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
104 RZ(a&&w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
105 s=CAV(w); u=AV(a); n=*u++; n=0>n?-(1+n):n;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
106 GA(z,BOX,n,1,0); x=v=AAV(z);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
107 for(i=0;i<n;i++){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
108 wi=s+*u++; wl=*u++; c=e=*wi; p=ctype[c]; b=0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
109 if(1<wl){d=*(wi+wl-1); if(b=p!=C9&&d==CESC1||d==CESC2)e=spellin(wl,wi);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
110 if(128>c&&(y=ds(e)))*x++=y;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
111 else if(e==CFCONS)RZ(*x++=FCONS(connum(wl-1,wi)))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
112 else switch(b?0:p){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
113 default: jsignal3(EVSPELL,w,wi-s); R 0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
114 case C9: RZ(*x++=connum(wl,wi)); break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
115 case CQ: RZ(*x++=constr(wl,wi)); break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
116 case CA: ASSERTN(vnm(wl,wi),EVILNAME,nfs(wl,wi)); RZ(*x++=nfs(wl,wi));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
117 }}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
118 if(6<=n && TAIA(0,n-1) && ((b=TRBRACE(n-2)) || RPAR&AT(v[n-2])&&TRBRACE(n-3))){I c,j,p,q;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
119 /* abc=:pqr xyz}abc or abc=:pqr (xyz})abc */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
120 j=2; p=q=0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
121 DO(n-j, y=v[j++]; c=AT(y); if(c&LPAR)++p; else if(c&RPAR)--p; if(!p)break;);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
122 DO(n-j, y=v[j++]; c=AT(y); if(c&LPAR)++q; else if(c&RPAR)--q; if(!q)break;);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
123 if(!p&&!q&&j>=n-2)v[b+n-3]=ds(CAMIP);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
124 }else if(5<=n && TAIA(0,2)){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
125 if(TVERB(3,CCOMMA) && !(AT(v[4])&ADV+CONJ) &&
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
126 !(AT(v[4])&NAME&&(y=symbrd(v[4]),jt->etxn=jt->jerr=0,y)&&AT(y)&ADV+CONJ))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
127 v[3]=ds(CAPIP); /* abc=: abc,blah */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
128 else if(7<=n&&!(AT(v[3])&VERB+ADV+CONJ)){I c,j,q;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
129 /* abc=:abc xyz}~ pqr */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
130 j=3; q=0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
131 DO(n-j, y=v[j++]; c=AT(y); if(c&LPAR)++q; else if(c&RPAR)--q; if(!q)break;);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
132 if(!q&&j<n-2&&TRBRACE(j)&&v[1+j]==ds(CTILDE))v[j]=ds(CAMIP);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
133 }}else if(7<=n && TNAME(0) && TASGN(1) && TNAME(2) && TRBRACE(3) && TVERB(n-2,CLAMIN)){A p,*yv,z1;I c,j,k,m;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
134 /* abc=: pqr}x,y,:z */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
135 b=1; m=(n-3)/2;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
136 j=4; DO(m, if(!TNAME(j) ){b=0; break;} j+=2;);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
137 j=5; if(b)DO(m-2, if(!TVERB(j,CCOMMA)){b=0; break;} j+=2;);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
138 if(b){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
139 GA(z1,BOX,4,1,0); x=AAV(z1);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
140 GA(y,BOX,m+3,1,0); yv=AAV(y);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
141 c=-1; k=AN(v[0]); s=NAV(v[0])->s;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
142 j=4; DO(m, yv[i]=p=v[j]; j+=2; if(AN(p)&&!memcmp(s,NAV(p)->s,k))c=i;);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
143 yv[m]=v[2]; RZ(yv[m+1]=sc(c)); yv[m+2]=z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
144 x[0]=v[0]; x[1]=v[1]; x[2]=ds(CCASEV); x[3]=y;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
145 R z1;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
146 }}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
147 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
148 } /* produce boxed list of words suitable for parsing */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
149
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
150 /* locals in enqueue: */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
151 /* b: 1 iff current word is a primitive spelled with . or : */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
152 /* c: first character in current word */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
153 /* d: last character in current word */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
154 /* e: first character in current word, after spellin */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
155 /* i: index of current word */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
156 /* n: number of words */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
157 /* p: character type of current character */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
158 /* s: ptr to value part of input string w */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
159 /* u: ptr to value part of word index & length info a */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
160 /* v: ptr to value part of z */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
161 /* wi: index of current word in input string */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
162 /* wl: length of current word */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
163 /* x: ptr to result word being built */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
164 /* y: array temp */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
165 /* z: result array of boxed list of words */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
166
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
167
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
168 F1(jttokens){R enqueue(wordil(w),w);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
169
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
170
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
171 #define CHKJ(j) ASSERT(0<=(j),EVINDEX);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
172 #define EXTZ(T,p) while(uu<p+u){k=u-(T*)AV(z); RZ(z=ext(0,z)); u=k+(T*)AV(z); uu=(T*)AV(z)+AN(z);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
173
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
174 #define EMIT0c(T,j,i,r,c) {CHKJ(j); p=(i)-(j); EXTZ(T,1); RZ(*u++=str(p,(j)+wv));}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
175 #define EMIT0b(T,j,i,r,c) {CHKJ(j); p=(i)-(j); EXTZ(T,1); RZ(*u++=vec(B01,p,(j)+wv));}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
176 #define EMIT0x(T,j,i,r,c) {CHKJ(j); p=(i)-(j); EXTZ(T,1); GA(x,t0,p*wm,wr,AS(w0)); \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
177 *AS(x)=p; MC(AV(x),wv0+wk*(j),wk*p); *u++=x;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
178 #define EMIT1(T,j,i,r,c) {CHKJ(j); p=(i)-(j); cc=(j)+wv; DO(p, *u++=*cc++;);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
179 #define EMIT1x(T,j,i,r,c) {CHKJ(j); p=wk*((i)-(j)); MC(u,wv0+j*wk,p); u+=p;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
180 #define EMIT2(T,j,i,r,c) {CHKJ(j); p=(i)-(j); EXTZ(T,2); *u++=(j); *u++=p;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
181 #define EMIT3(T,j,i,r,c) {CHKJ(j); EXTZ(T,1); *u++=(c)+q*(r);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
182 #define EMIT4(T,j,i,r,c) {CHKJ(j); p=(i)-(j); EXTZ(T,3); *u++=(j); *u++=p; *u++=(c)+q*(r);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
183 #define EMIT5(T,j,x,r,c) {if(0>(j))i=n;}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
184
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
185 #define DO_ONE(T,EMIT) \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
186 switch(e=v[1]){ \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
187 case 6: i=n; break; \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
188 case 2: case 3: if(0<=vi){EMIT(T,vj,vi,vr,vc); vi=vr=-1;} EMIT(T,j,i,r,c); j=2==e?i:-1; break; \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
189 case 4: case 5: if(r!=vr){if(0<=vi)EMIT(T,vj,vi,vr,vc); vj=j; vr=r; vc=c;} vi=i; j=4==e?i:-1; break; \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
190 case 1: j=i; \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
191 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
192
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
193 #define ZVAx {}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
194 #define ZVA5 {*zv++=i; *zv++=j; *zv++=r; *zv++=c; *zv++=v[0]; *zv++=v[1];}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
195
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
196 #define FSMF(T,zt,zr,zm,cexp,EMIT,ZVA) \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
197 {T*u,*uu; \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
198 RZ(z=exta((zt),(zr),(zm),1==f||5==f?n:n/3)); \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
199 if(1<(zr)){I*s=AS(z); s[1]=(zm); if(1==f&&2<wr)ICPY(1+s,1+AS(w0),wr-1);} \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
200 zv=AV(z); u=(T*)zv; uu=u+AN(z); \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
201 for(;i<n;++i,r=*v){c=(cexp); v=sv+2*(c+r*q); ZVA; DO_ONE(T,EMIT);} \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
202 if(6!=e){ \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
203 if(0<=d) {c=d; v=sv+2*(c+r*q); ZVA; DO_ONE(T,EMIT);} \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
204 else{ \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
205 if(0<=vi )EMIT(T,vj,r==vr?n:vi,vr,vc); \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
206 if(r!=vr&&0<=j)EMIT(T,j,n,r,c); \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
207 }} \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
208 if(5==f)u=(T*)zv; \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
209 i=AN(z); AN(z)=j=u-(T*)AV(z); *AS(z)=j/(zm); if(i>3*j)RZ(z=ca(z)); \
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
210 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
211
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
212 static A jtfsmdo(J jt,I f,A s,A m,I*ijrd,A w,A w0){A x,z;C*cc,*wv0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
213 I c,d,e,i,j,k,*mv,n,p,q,r,*sv,t,t0,*v,vc,vi,vj,vr,wk,wm,wr,*zv;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
214 n=IC(w); t=AT(w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
215 q=*(1+AS(s));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
216 sv=AV(s); mv=AV(m);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
217 i=ijrd[0]; j=ijrd[1]; r=ijrd[2]; d=ijrd[3]; vi=vj=vr=vc=-1;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
218 if(t&INT){t0=AT(w0); wr=AR(w0); wm=aii(w0); wk=wm*bp(AT(w0)); wv0=CAV(w0);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
219 switch(f+(t&B01?0:t&LIT?10:20)){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
220 case 0: {B *wv=BAV(w); FSMF(A,BOX,1, 1, wv[i] ,EMIT0b,ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
221 case 1: {B *wv=UAV(w); FSMF(B,B01,1, 1, wv[i] ,EMIT1, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
222 case 2: {B *wv=BAV(w); FSMF(I,INT,2, 2, wv[i] ,EMIT2, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
223 case 3: {B *wv=BAV(w); FSMF(I,INT,1, 1, wv[i] ,EMIT3, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
224 case 4: {B *wv=BAV(w); FSMF(I,INT,2, 3, wv[i] ,EMIT4, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
225 case 5: {B *wv=BAV(w); FSMF(I,INT,2, 6, wv[i] ,EMIT5, ZVA5);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
226
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
227 case 10: {UC*wv=UAV(w); FSMF(A,BOX,1, 1,mv[wv[i]],EMIT0c,ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
228 case 11: {UC*wv=UAV(w); FSMF(C,LIT,1, 1,mv[wv[i]],EMIT1, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
229 case 12: {UC*wv=UAV(w); FSMF(I,INT,2, 2,mv[wv[i]],EMIT2, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
230 case 13: {UC*wv=UAV(w); FSMF(I,INT,1, 1,mv[wv[i]],EMIT3, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
231 case 14: {UC*wv=UAV(w); FSMF(I,INT,2, 3,mv[wv[i]],EMIT4, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
232 case 15: {UC*wv=UAV(w); FSMF(I,INT,2, 6,mv[wv[i]],EMIT5, ZVA5);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
233
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
234 case 20: {I *wv= AV(w); FSMF(A,BOX,1, 1, wv[i] ,EMIT0x,ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
235 case 21: {I *wv= AV(w); FSMF(C,t0, wr,wm, wv[i] ,EMIT1x,ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
236 case 22: {I *wv= AV(w); FSMF(I,INT,2, 2, wv[i] ,EMIT2, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
237 case 23: {I *wv= AV(w); FSMF(I,INT,1, 1, wv[i] ,EMIT3, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
238 case 24: {I *wv= AV(w); FSMF(I,INT,2, 3, wv[i] ,EMIT4, ZVAx);} break;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
239 case 25: {I *wv= AV(w); FSMF(I,INT,2, 6, wv[i] ,EMIT5, ZVA5);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
240 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
241 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
242 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
243
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
244 F1(jtfsmvfya){PROLOG;A a,*av,m,s,x,z,*zv;I ad,an,c,e,f,ijrd[4],k,p,q,*sv,*v;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
245 RZ(a=w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
246 ASSERT(1==AR(a),EVRANK);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
247 ASSERT(BOX&AT(a),EVDOMAIN);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
248 an=AN(a); av=AAV(a); ad=(I)a*ARELATIVE(a);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
249 ASSERT(2<=an&&an<=4,EVLENGTH);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
250 RE(f=i0(AVR(0)));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
251 ASSERT(0<=f&&f<=5,EVINDEX);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
252 RZ(s=vi(AVR(1))); sv=AV(s);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
253 ASSERT(3==AR(s),EVRANK);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
254 v=AS(s); p=v[0]; q=v[1]; ASSERT(2==v[2],EVLENGTH);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
255 v=sv; DO(p*q, k=*v++; e=*v++; ASSERT(0<=k&&k<p&&0<=e&&e<=6,EVINDEX););
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
256 ijrd[0]=0; ijrd[1]=-1; ijrd[2]=0; ijrd[3]=-1;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
257 if(4==an){I d,i,j,n,r;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
258 RZ(x=vi(AVR(3))); n=AN(x); v=AV(x);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
259 ASSERT(1==AR(x),EVRANK);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
260 ASSERT(4>=n,EVLENGTH);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
261 if(1<=n) ijrd[0]=i=*v++;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
262 if(2<=n){ijrd[1]=j=*v++; ASSERT(j==-1||0<=j&&j<i,EVINDEX);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
263 if(3<=n){ijrd[2]=r=*v++; ASSERT( 0<=r&&r<p,EVINDEX);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
264 if(4==n){ijrd[3]=d=*v++; ASSERT(d==-1||0<=d&&d<q,EVINDEX);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
265 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
266 m=2==an?mtv:AVR(2); c=AN(m);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
267 ASSERT(1>=AR(m),EVRANK);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
268 if(!c&&1==AR(m)){ /* m is empty; w must be integer vector */ }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
269 else if(NUMERIC&AT(m)){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
270 ASSERT(c==AN(alp),EVLENGTH);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
271 RZ(m=vi(m)); v=AV(m); DO(c, k=v[i]; ASSERT(0<=k&&k<q,EVINDEX););
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
272 }else ASSERT(BOX&AT(m),EVDOMAIN);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
273 GA(z,BOX,4,1,0); zv=AAV(z);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
274 RZ(zv[0]=sc(f)); zv[1]=s; zv[2]=m; RZ(zv[3]=vec(INT,4L,ijrd));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
275 R z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
276 } /* check left argument of x;:y */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
277
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
278 static A jtfsm0(J jt,A a,A w,C chka){PROLOG;A*av,m,s,x,w0=w;B b;I ad,c,f,*ijrd,k,md,n,p,q,*v;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
279 RZ(a&&w);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
280 if(chka)RZ(a=fsmvfya(a));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
281 av=AAV(a); ad=(I)a*ARELATIVE(a);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
282 f=i0(AVR(0)); s=AVR(1); m=AVR(2); ijrd=AV(AVR(3));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
283 n=AN(w); v=AS(s); p=v[0]; q=v[1];
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
284 ASSERT(0<=ijrd[0]&&ijrd[0]<n,EVINDEX);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
285 b=1>=AR(w)&&(!n||LIT&AT(w)); c=AN(m);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
286 if(!c&&1==AR(m)){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
287 ASSERT(1>=AR(w),EVRANK);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
288 if(!(B01&AT(w))){RZ(w=w0=vi(w)); v=AV(w); DO(n, k=v[i]; ASSERT(0<=k&&k<q,EVINDEX););}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
289 }else if(NUMERIC&AT(m)){
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
290 ASSERT(b,EVDOMAIN);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
291 ASSERT(1>=AR(w),EVRANK);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
292 }else{A*mv,t,y;I j,r;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
293 ASSERT(BOX&AT(m),EVDOMAIN);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
294 RZ(y=raze(m)); r=AR(y); k=AN(y);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
295 ASSERT(r==AR(w)||r==1+AR(w),EVRANK);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
296 GA(x,INT,1+k,1,0); v=AV(x); v[k]=c; mv=AAV(m); md=(I)m*ARELATIVE(m);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
297 DO(c, j=i; t=AADR(md,mv[i]); if(r&&r==AR(t))DO(*AS(t), *v++=j;) else *v++=j;);
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
298 if(b){RZ(m=from(indexof(y,alp),x)); v=AV(m); DO(AN(alp), k=v[i]; ASSERT(0<=k&&k<q,EVINDEX););}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
299 else {ASSERT(q>c,EVINDEX); RZ(w=from(indexof(y,w),x));}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
300 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
301 EPILOG(fsmdo(f,s,m,ijrd,w,w0));
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
302 }
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
303
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
304 F2(jtfsm){R fsm0(a,w,1);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
305 /* x;:y */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
306
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
307 DF1(jtfsmfx){RZ(w&&self); R fsm0(VAV(self)->f,w,0);}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
308 /* x&;: y */