38
38
* forward declarations, up here so forward datatypes etc. are defined early
39
39
*/
40
40
/* === regcomp.c === */
41
- static void moresubs (struct vars * , int );
42
- static int freev (struct vars * , int );
43
- static void makesearch (struct vars * , struct nfa * );
44
- static struct subre * parse (struct vars * , int , int , struct state * , struct state * );
45
- static struct subre * parsebranch (struct vars * , int , int , struct state * , struct state * , int );
46
- static struct subre * parseqatom (struct vars * , int , int , struct state * , struct state * , struct subre * );
47
- static void nonword (struct vars * , int , struct state * , struct state * );
48
- static void word (struct vars * , int , struct state * , struct state * );
49
- static void charclass (struct vars * , enum char_classes ,
50
- struct state * , struct state * );
51
- static void charclasscomplement (struct vars * , enum char_classes ,
52
- struct state * , struct state * );
53
- static int scannum (struct vars * );
54
- static void repeat (struct vars * , struct state * , struct state * , int , int );
55
- static void bracket (struct vars * , struct state * , struct state * );
56
- static void cbracket (struct vars * , struct state * , struct state * );
57
- static void brackpart (struct vars * , struct state * , struct state * , bool * );
58
- static const chr * scanplain (struct vars * );
59
- static void onechr (struct vars * , chr , struct state * , struct state * );
60
- static void optimizebracket (struct vars * , struct state * , struct state * );
61
- static void wordchrs (struct vars * );
62
- static void processlacon (struct vars * , struct state * , struct state * , int ,
63
- struct state * , struct state * );
64
- static struct subre * subre (struct vars * , int , int , struct state * , struct state * );
65
- static void freesubre (struct vars * , struct subre * );
66
- static void freesubreandsiblings (struct vars * , struct subre * );
67
- static void freesrnode (struct vars * , struct subre * );
68
- static void removecaptures (struct vars * , struct subre * );
69
- static int numst (struct subre * , int );
70
- static void markst (struct subre * );
71
- static void cleanst (struct vars * );
72
- static long nfatree (struct vars * , struct subre * , FILE * );
73
- static long nfanode (struct vars * , struct subre * , int , FILE * );
74
- static int newlacon (struct vars * , struct state * , struct state * , int );
75
- static void freelacons (struct subre * , int );
76
- static void rfree (regex_t * );
41
+ static void moresubs (struct vars * v , int wanted );
42
+ static int freev (struct vars * v , int err );
43
+ static void makesearch (struct vars * v , struct nfa * nfa );
44
+ static struct subre * parse (struct vars * v , int stopper , int type ,
45
+ struct state * init , struct state * final );
46
+ static struct subre * parsebranch (struct vars * v , int stopper , int type ,
47
+ struct state * left , struct state * right ,
48
+ int partial );
49
+ static struct subre * parseqatom (struct vars * v , int stopper , int type ,
50
+ struct state * lp , struct state * rp ,
51
+ struct subre * top );
52
+ static void nonword (struct vars * v , int dir , struct state * lp ,
53
+ struct state * rp );
54
+ static void word (struct vars * v , int dir , struct state * lp , struct state * rp );
55
+ static void charclass (struct vars * v , enum char_classes cls , struct state * lp ,
56
+ struct state * rp );
57
+ static void charclasscomplement (struct vars * v , enum char_classes cls ,
58
+ struct state * lp , struct state * rp );
59
+ static int scannum (struct vars * v );
60
+ static void repeat (struct vars * v , struct state * lp , struct state * rp ,
61
+ int m , int n );
62
+ static void bracket (struct vars * v , struct state * lp , struct state * rp );
63
+ static void cbracket (struct vars * v , struct state * lp , struct state * rp );
64
+ static void brackpart (struct vars * v , struct state * lp , struct state * rp ,
65
+ bool * have_cclassc );
66
+ static const chr * scanplain (struct vars * v );
67
+ static void onechr (struct vars * v , chr c , struct state * lp , struct state * rp );
68
+ static void optimizebracket (struct vars * v , struct state * lp , struct state * rp );
69
+ static void wordchrs (struct vars * v );
70
+ static void processlacon (struct vars * v , struct state * begin ,
71
+ struct state * end , int latype ,
72
+ struct state * lp , struct state * rp );
73
+ static struct subre * subre (struct vars * v , int op , int flags ,
74
+ struct state * begin , struct state * end );
75
+ static void freesubre (struct vars * v , struct subre * sr );
76
+ static void freesubreandsiblings (struct vars * v , struct subre * sr );
77
+ static void freesrnode (struct vars * v , struct subre * sr );
78
+ static void removecaptures (struct vars * v , struct subre * t );
79
+ static int numst (struct subre * t , int start );
80
+ static void markst (struct subre * t );
81
+ static void cleanst (struct vars * v );
82
+ static long nfatree (struct vars * v , struct subre * t , FILE * f );
83
+ static long nfanode (struct vars * v , struct subre * t ,
84
+ int converttosearch , FILE * f );
85
+ static int newlacon (struct vars * v , struct state * begin , struct state * end ,
86
+ int latype );
87
+ static void freelacons (struct subre * subs , int n );
88
+ static void rfree (regex_t * re );
77
89
static int rcancelrequested (void );
78
90
static int rstacktoodeep (void );
79
91
80
92
#ifdef REG_DEBUG
81
- static void dump (regex_t * , FILE * );
82
- static void dumpst (struct subre * , FILE * , int );
83
- static void stdump (struct subre * , FILE * , int );
84
- static const char * stid (struct subre * , char * , size_t );
93
+ static void dump (regex_t * re , FILE * f );
94
+ static void dumpst (struct subre * t , FILE * f , int nfapresent );
95
+ static void stdump (struct subre * t , FILE * f , int nfapresent );
96
+ static const char * stid (struct subre * t , char * buf , size_t bufsize );
85
97
#endif
86
98
/* === regc_lex.c === */
87
- static void lexstart (struct vars * );
88
- static void prefixes (struct vars * );
89
- static int next (struct vars * );
90
- static int lexescape (struct vars * );
91
- static chr lexdigits (struct vars * , int , int , int );
92
- static int brenext (struct vars * , chr );
93
- static void skip (struct vars * );
99
+ static void lexstart (struct vars * v );
100
+ static void prefixes (struct vars * v );
101
+ static int next (struct vars * v );
102
+ static int lexescape (struct vars * v );
103
+ static chr lexdigits (struct vars * v , int base , int minlen , int maxlen );
104
+ static int brenext (struct vars * v , chr c );
105
+ static void skip (struct vars * v );
94
106
static chr newline (void );
95
- static chr chrnamed (struct vars * , const chr * , const chr * , chr );
107
+ static chr chrnamed (struct vars * v , const chr * startp , const chr * endp ,
108
+ chr lastresort );
96
109
97
110
/* === regc_color.c === */
98
- static void initcm (struct vars * , struct colormap * );
99
- static void freecm (struct colormap * );
100
- static color maxcolor (struct colormap * );
101
- static color newcolor (struct colormap * );
102
- static void freecolor (struct colormap * , color );
103
- static color pseudocolor (struct colormap * );
104
- static color subcolor (struct colormap * , chr );
105
- static color subcolorhi (struct colormap * , color * );
106
- static color newsub (struct colormap * , color );
107
- static int newhicolorrow (struct colormap * , int );
108
- static void newhicolorcols (struct colormap * );
109
- static void subcolorcvec (struct vars * , struct cvec * , struct state * , struct state * );
110
- static void subcoloronechr (struct vars * , chr , struct state * , struct state * , color * );
111
- static void subcoloronerange (struct vars * , chr , chr , struct state * , struct state * , color * );
112
- static void subcoloronerow (struct vars * , int , struct state * , struct state * , color * );
113
- static void okcolors (struct nfa * , struct colormap * );
114
- static void colorchain (struct colormap * , struct arc * );
115
- static void uncolorchain (struct colormap * , struct arc * );
116
- static void rainbow (struct nfa * , struct colormap * , int , color , struct state * , struct state * );
117
- static void colorcomplement (struct nfa * , struct colormap * , int , struct state * , struct state * , struct state * );
111
+ static void initcm (struct vars * v , struct colormap * cm );
112
+ static void freecm (struct colormap * cm );
113
+ static color maxcolor (struct colormap * cm );
114
+ static color newcolor (struct colormap * cm );
115
+ static void freecolor (struct colormap * cm , color co );
116
+ static color pseudocolor (struct colormap * cm );
117
+ static color subcolor (struct colormap * cm , chr c );
118
+ static color subcolorhi (struct colormap * cm , color * pco );
119
+ static color newsub (struct colormap * cm , color co );
120
+ static int newhicolorrow (struct colormap * cm , int oldrow );
121
+ static void newhicolorcols (struct colormap * cm );
122
+ static void subcolorcvec (struct vars * v , struct cvec * cv , struct state * lp ,
123
+ struct state * rp );
124
+ static void subcoloronechr (struct vars * v , chr ch , struct state * lp ,
125
+ struct state * rp , color * lastsubcolor );
126
+ static void subcoloronerange (struct vars * v , chr from , chr to ,
127
+ struct state * lp , struct state * rp ,
128
+ color * lastsubcolor );
129
+ static void subcoloronerow (struct vars * v , int rownum , struct state * lp ,
130
+ struct state * rp , color * lastsubcolor );
131
+ static void okcolors (struct nfa * nfa , struct colormap * cm );
132
+ static void colorchain (struct colormap * cm , struct arc * a );
133
+ static void uncolorchain (struct colormap * cm , struct arc * a );
134
+ static void rainbow (struct nfa * nfa , struct colormap * cm , int type , color but ,
135
+ struct state * from , struct state * to );
136
+ static void colorcomplement (struct nfa * nfa , struct colormap * cm , int type ,
137
+ struct state * of , struct state * from ,
138
+ struct state * to );
118
139
119
140
#ifdef REG_DEBUG
120
- static void dumpcolors (struct colormap * , FILE * );
121
- static void dumpchr (chr , FILE * );
141
+ static void dumpcolors (struct colormap * cm , FILE * f );
142
+ static void dumpchr (chr c , FILE * f );
122
143
#endif
123
144
/* === regc_nfa.c === */
124
- static struct nfa * newnfa (struct vars * , struct colormap * , struct nfa * );
125
- static void freenfa (struct nfa * );
126
- static struct state * newstate (struct nfa * );
127
- static struct state * newfstate (struct nfa * , int flag );
128
- static void dropstate (struct nfa * , struct state * );
129
- static void freestate (struct nfa * , struct state * );
130
- static void newarc (struct nfa * , int , color , struct state * , struct state * );
131
- static void createarc (struct nfa * , int , color , struct state * , struct state * );
132
- static struct arc * allocarc (struct nfa * );
133
- static void freearc (struct nfa * , struct arc * );
134
- static void changearcsource (struct arc * , struct state * );
135
- static void changearctarget (struct arc * , struct state * );
136
- static int hasnonemptyout (struct state * );
137
- static struct arc * findarc (struct state * , int , color );
138
- static void cparc (struct nfa * , struct arc * , struct state * , struct state * );
139
- static void sortins (struct nfa * , struct state * );
140
- static int sortins_cmp (const void * , const void * );
141
- static void sortouts (struct nfa * , struct state * );
142
- static int sortouts_cmp (const void * , const void * );
143
- static void moveins (struct nfa * , struct state * , struct state * );
144
- static void copyins (struct nfa * , struct state * , struct state * );
145
- static void mergeins (struct nfa * , struct state * , struct arc * * , int );
146
- static void moveouts (struct nfa * , struct state * , struct state * );
147
- static void copyouts (struct nfa * , struct state * , struct state * );
148
- static void cloneouts (struct nfa * , struct state * , struct state * , struct state * , int );
149
- static void delsub (struct nfa * , struct state * , struct state * );
150
- static void deltraverse (struct nfa * , struct state * , struct state * );
151
- static void dupnfa (struct nfa * , struct state * , struct state * , struct state * , struct state * );
152
- static void duptraverse (struct nfa * , struct state * , struct state * );
153
- static void removeconstraints (struct nfa * , struct state * , struct state * );
154
- static void removetraverse (struct nfa * , struct state * );
155
- static void cleartraverse (struct nfa * , struct state * );
156
- static struct state * single_color_transition (struct state * , struct state * );
157
- static void specialcolors (struct nfa * );
158
- static long optimize (struct nfa * , FILE * );
159
- static void pullback (struct nfa * , FILE * );
160
- static int pull (struct nfa * , struct arc * , struct state * * );
161
- static void pushfwd (struct nfa * , FILE * );
162
- static int push (struct nfa * , struct arc * , struct state * * );
145
+ static struct nfa * newnfa (struct vars * v , struct colormap * cm ,
146
+ struct nfa * parent );
147
+ static void freenfa (struct nfa * nfa );
148
+ static struct state * newstate (struct nfa * nfa );
149
+ static struct state * newfstate (struct nfa * nfa , int flag );
150
+ static void dropstate (struct nfa * nfa , struct state * s );
151
+ static void freestate (struct nfa * nfa , struct state * s );
152
+ static void newarc (struct nfa * nfa , int t , color co ,
153
+ struct state * from , struct state * to );
154
+ static void createarc (struct nfa * nfa , int t , color co ,
155
+ struct state * from , struct state * to );
156
+ static struct arc * allocarc (struct nfa * nfa );
157
+ static void freearc (struct nfa * nfa , struct arc * victim );
158
+ static void changearcsource (struct arc * a , struct state * newfrom );
159
+ static void changearctarget (struct arc * a , struct state * newto );
160
+ static int hasnonemptyout (struct state * s );
161
+ static struct arc * findarc (struct state * s , int type , color co );
162
+ static void cparc (struct nfa * nfa , struct arc * oa ,
163
+ struct state * from , struct state * to );
164
+ static void sortins (struct nfa * nfa , struct state * s );
165
+ static int sortins_cmp (const void * a , const void * b );
166
+ static void sortouts (struct nfa * nfa , struct state * s );
167
+ static int sortouts_cmp (const void * a , const void * b );
168
+ static void moveins (struct nfa * nfa , struct state * oldState ,
169
+ struct state * newState );
170
+ static void copyins (struct nfa * nfa , struct state * oldState ,
171
+ struct state * newState );
172
+ static void mergeins (struct nfa * nfa , struct state * s ,
173
+ struct arc * * arcarray , int arccount );
174
+ static void moveouts (struct nfa * nfa , struct state * oldState ,
175
+ struct state * newState );
176
+ static void copyouts (struct nfa * nfa , struct state * oldState ,
177
+ struct state * newState );
178
+ static void cloneouts (struct nfa * nfa , struct state * old , struct state * from ,
179
+ struct state * to , int type );
180
+ static void delsub (struct nfa * nfa , struct state * lp , struct state * rp );
181
+ static void deltraverse (struct nfa * nfa , struct state * leftend ,
182
+ struct state * s );
183
+ static void dupnfa (struct nfa * nfa , struct state * start , struct state * stop ,
184
+ struct state * from , struct state * to );
185
+ static void duptraverse (struct nfa * nfa , struct state * s , struct state * stmp );
186
+ static void removeconstraints (struct nfa * nfa , struct state * start , struct state * stop );
187
+ static void removetraverse (struct nfa * nfa , struct state * s );
188
+ static void cleartraverse (struct nfa * nfa , struct state * s );
189
+ static struct state * single_color_transition (struct state * s1 ,
190
+ struct state * s2 );
191
+ static void specialcolors (struct nfa * nfa );
192
+ static long optimize (struct nfa * nfa , FILE * f );
193
+ static void pullback (struct nfa * nfa , FILE * f );
194
+ static int pull (struct nfa * nfa , struct arc * con ,
195
+ struct state * * intermediates );
196
+ static void pushfwd (struct nfa * nfa , FILE * f );
197
+ static int push (struct nfa * nfa , struct arc * con ,
198
+ struct state * * intermediates );
163
199
164
200
#define INCOMPATIBLE 1 /* destroys arc */
165
201
#define SATISFIED 2 /* constraint satisfied */
166
202
#define COMPATIBLE 3 /* compatible but not satisfied yet */
167
203
#define REPLACEARC 4 /* replace arc's color with constraint color */
168
204
static int combine (struct nfa * nfa , struct arc * con , struct arc * a );
169
- static void fixempties (struct nfa * , FILE * );
170
- static struct state * emptyreachable (struct nfa * , struct state * ,
171
- struct state * , struct arc * * );
172
- static int isconstraintarc (struct arc * );
173
- static int hasconstraintout (struct state * );
174
- static void fixconstraintloops (struct nfa * , FILE * );
175
- static int findconstraintloop (struct nfa * , struct state * );
176
- static void breakconstraintloop (struct nfa * , struct state * );
177
- static void clonesuccessorstates (struct nfa * , struct state * , struct state * ,
178
- struct state * , struct arc * ,
179
- char * , char * , int );
180
- static void cleanup (struct nfa * );
181
- static void markreachable (struct nfa * , struct state * , struct state * , struct state * );
182
- static void markcanreach (struct nfa * , struct state * , struct state * , struct state * );
183
- static long analyze (struct nfa * );
184
- static void checkmatchall (struct nfa * );
185
- static bool checkmatchall_recurse (struct nfa * , struct state * , bool * * );
186
- static bool check_out_colors_match (struct state * , color , color );
187
- static bool check_in_colors_match (struct state * , color , color );
188
- static void compact (struct nfa * , struct cnfa * );
189
- static void carcsort (struct carc * , size_t );
190
- static int carc_cmp (const void * , const void * );
191
- static void freecnfa (struct cnfa * );
192
- static void dumpnfa (struct nfa * , FILE * );
205
+ static void fixempties (struct nfa * nfa , FILE * f );
206
+ static struct state * emptyreachable (struct nfa * nfa , struct state * s ,
207
+ struct state * lastfound ,
208
+ struct arc * * inarcsorig );
209
+ static int isconstraintarc (struct arc * a );
210
+ static int hasconstraintout (struct state * s );
211
+ static void fixconstraintloops (struct nfa * nfa , FILE * f );
212
+ static int findconstraintloop (struct nfa * nfa , struct state * s );
213
+ static void breakconstraintloop (struct nfa * nfa , struct state * sinitial );
214
+ static void clonesuccessorstates (struct nfa * nfa , struct state * ssource ,
215
+ struct state * sclone ,
216
+ struct state * spredecessor ,
217
+ struct arc * refarc , char * curdonemap ,
218
+ char * outerdonemap , int nstates );
219
+ static void cleanup (struct nfa * nfa );
220
+ static void markreachable (struct nfa * nfa , struct state * s ,
221
+ struct state * okay , struct state * mark );
222
+ static void markcanreach (struct nfa * nfa , struct state * s , struct state * okay ,
223
+ struct state * mark );
224
+ static long analyze (struct nfa * nfa );
225
+ static void checkmatchall (struct nfa * nfa );
226
+ static bool checkmatchall_recurse (struct nfa * nfa , struct state * s ,
227
+ bool * * haspaths );
228
+ static bool check_out_colors_match (struct state * s , color co1 , color co2 );
229
+ static bool check_in_colors_match (struct state * s , color co1 , color co2 );
230
+ static void compact (struct nfa * nfa , struct cnfa * cnfa );
231
+ static void carcsort (struct carc * first , size_t n );
232
+ static int carc_cmp (const void * a , const void * b );
233
+ static void freecnfa (struct cnfa * cnfa );
234
+ static void dumpnfa (struct nfa * nfa , FILE * f );
193
235
194
236
#ifdef REG_DEBUG
195
237
static void dumpstate (struct state * , FILE * );
@@ -199,12 +241,12 @@ static void dumpcnfa(struct cnfa *, FILE *);
199
241
static void dumpcstate (int , struct cnfa * , FILE * );
200
242
#endif
201
243
/* === regc_cvec.c === */
202
- static struct cvec * newcvec (int , int );
203
- static struct cvec * clearcvec (struct cvec * );
204
- static void addchr (struct cvec * , chr );
205
- static void addrange (struct cvec * , chr , chr );
206
- static struct cvec * getcvec (struct vars * , int , int );
207
- static void freecvec (struct cvec * );
244
+ static struct cvec * newcvec (int nchrs , int nranges );
245
+ static struct cvec * clearcvec (struct cvec * cv );
246
+ static void addchr (struct cvec * cv , chr c );
247
+ static void addrange (struct cvec * cv , chr from , chr to );
248
+ static struct cvec * getcvec (struct vars * v , int nchrs , int nranges );
249
+ static void freecvec (struct cvec * cv );
208
250
209
251
/* === regc_pg_locale.c === */
210
252
static int pg_wc_isdigit (pg_wchar c );
@@ -221,16 +263,18 @@ static pg_wchar pg_wc_toupper(pg_wchar c);
221
263
static pg_wchar pg_wc_tolower (pg_wchar c );
222
264
223
265
/* === regc_locale.c === */
224
- static chr element (struct vars * , const chr * , const chr * );
225
- static struct cvec * range (struct vars * , chr , chr , int );
226
- static int before (chr , chr );
227
- static struct cvec * eclass (struct vars * , chr , int );
228
- static enum char_classes lookupcclass (struct vars * , const chr * , const chr * );
229
- static struct cvec * cclasscvec (struct vars * , enum char_classes , int );
230
- static int cclass_column_index (struct colormap * , chr );
231
- static struct cvec * allcases (struct vars * , chr );
232
- static int cmp (const chr * , const chr * , size_t );
233
- static int casecmp (const chr * , const chr * , size_t );
266
+ static chr element (struct vars * v , const chr * startp , const chr * endp );
267
+ static struct cvec * range (struct vars * v , chr a , chr b , int cases );
268
+ static int before (chr x , chr y );
269
+ static struct cvec * eclass (struct vars * v , chr c , int cases );
270
+ static enum char_classes lookupcclass (struct vars * v , const chr * startp ,
271
+ const chr * endp );
272
+ static struct cvec * cclasscvec (struct vars * v , enum char_classes cclasscode ,
273
+ int cases );
274
+ static int cclass_column_index (struct colormap * cm , chr c );
275
+ static struct cvec * allcases (struct vars * v , chr c );
276
+ static int cmp (const chr * x , const chr * y , size_t len );
277
+ static int casecmp (const chr * x , const chr * y , size_t len );
234
278
235
279
236
280
/* internal variables, bundled for easy passing around */
0 commit comments