initial import
[ICEs.git] / hppa-ICE-insn-constraints / regex.i.2
1 enum {
2 _NL_COLLATE_NRULES,
3 _NL_COLLATE_TABLEMB,
4 _NL_CTYPE_TOLOWER,
5 _NL_CTYPE_CODESET_NAME,
6 _NL_CTYPE_MAP_TO_NONASCII,
7 };
8 struct locale_data {
9 unsigned int nstrings;
10 union locale_data_value {
11 const char *string;
12 unsigned int word;
13 }
14 values [];
15 };
16 extern __thread struct locale_data *const *_nl_current_LC_COLLATE __attribute__ ((tls_model ("initial-exec")));
17 extern __thread struct locale_data *const *_nl_current_LC_CTYPE __attribute__ ((tls_model ("initial-exec")));
18 typedef unsigned long int reg_syntax_t;
19 extern reg_syntax_t re_syntax_options;
20 typedef enum {
21 REG_ENOSYS = -1, REG_NOERROR = 0, REG_NOMATCH, REG_BADPAT, REG_ECOLLATE, REG_ECTYPE, REG_EESCAPE, REG_ESUBREG, REG_EBRACK, REG_EPAREN, REG_EBRACE, REG_BADBR, REG_ERANGE, REG_ESPACE, REG_BADRPT, REG_EEND, REG_ESIZE, REG_ERPAREN }
22 reg_errcode_t;
23 struct re_pattern_buffer {
24 unsigned char *buffer;
25 reg_syntax_t syntax;
26 char *fastmap;
27 unsigned char * translate;
28 unsigned int re_nsub;
29 unsigned can_be_null : 1;
30 unsigned regs_allocated : 2;
31 unsigned fastmap_accurate : 1;
32 unsigned not_bol : 1;
33 unsigned not_eol : 1;
34 };
35 typedef struct re_pattern_buffer regex_t;
36 extern __thread void *__libc_tsd_CTYPE_TOLOWER __attribute__ ((tls_model ("initial-exec")));
37 extern inline const int ** __attribute__ ((const)) __ctype_tolower_loc (void) {
38 union {
39 void **ptr;
40 const int **tablep;
41 }
42 u;
43 u.ptr = (&__libc_tsd_CTYPE_TOLOWER);
44 if (__builtin_expect (*u.tablep == 0, 0)) *u.tablep = ((int *) ((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_TOLOWER) & 0xffff)].string) + 128);
45 return u.tablep;
46 }
47 extern __inline int __attribute__ ((__nothrow__)) tolower (int __c) {
48 return __c >= -128 && __c < 256 ? (*__ctype_tolower_loc ())[__c] : __c;
49 }
50 typedef struct {
51 }
52 __mbstate_t;
53 typedef __mbstate_t mbstate_t;
54 typedef unsigned long int bitset_word_t;
55 typedef bitset_word_t bitset_t[(256 / (sizeof (bitset_word_t) * 8))];
56 typedef bitset_word_t *re_bitset_ptr_t;
57 typedef enum {
58 LINE_FIRST = 0x0010,
59 LINE_LAST = 0x0020,
60 BUF_FIRST = 0x0040,
61 BUF_LAST = 0x0080,
62 }
63 re_context_type;
64 typedef struct {
65 int nelem;
66 int *elems;
67 }
68 re_node_set;
69 typedef enum {
70 NON_TYPE = 0, CHARACTER = 1, END_OF_RE = 2, SIMPLE_BRACKET = 3, OP_BACK_REF = 4, OP_PERIOD = 5, COMPLEX_BRACKET = 6, OP_UTF8_PERIOD = 7, OP_OPEN_SUBEXP = 8 | 0, OP_CLOSE_SUBEXP = 8 | 1, OP_ALT = 8 | 2, OP_DUP_ASTERISK = 8 | 3, ANCHOR = 8 | 4, CONCAT = 16, SUBEXP = 17, OP_DUP_PLUS = 18, OP_DUP_QUESTION, OP_OPEN_BRACKET, OP_CLOSE_BRACKET, OP_CHARSET_RANGE, OP_OPEN_DUP_NUM, OP_CLOSE_DUP_NUM, OP_NON_MATCH_LIST, OP_OPEN_COLL_ELEM, OP_CLOSE_COLL_ELEM, OP_OPEN_EQUIV_CLASS, OP_CLOSE_EQUIV_CLASS, OP_OPEN_CHAR_CLASS, OP_CLOSE_CHAR_CLASS, OP_WORD, OP_NOTWORD, OP_SPACE, OP_NOTSPACE, BACK_SLASH }
71 re_token_type_t;
72 typedef struct {
73 long int *mbchars;
74 unsigned int non_match : 1;
75 int nmbchars;
76 int ncoll_syms;
77 int nequiv_classes;
78 int nranges;
79 int nchar_classes;
80 }
81 re_charset_t;
82 typedef struct {
83 union {
84 unsigned char c;
85 re_bitset_ptr_t sbcset;
86 re_charset_t *mbcset;
87 int idx;
88 }
89 opr;
90 re_token_type_t type : 8;
91 }
92 re_token_t;
93 struct re_string_t {
94 };
95 typedef struct re_string_t re_string_t;
96 typedef struct re_dfa_t re_dfa_t;
97 struct bin_tree_t {
98 };
99 typedef struct bin_tree_t bin_tree_t;
100 struct re_dfastate_t {
101 re_node_set nodes;
102 };
103 typedef struct re_dfastate_t re_dfastate_t;
104 struct re_dfa_t {
105 re_token_t *nodes;
106 unsigned int nodes_alloc;
107 unsigned int nodes_len;
108 int *nexts;
109 int *org_indices;
110 re_node_set *edests;
111 re_node_set *eclosures;
112 struct re_state_table_entry *state_table;
113 re_dfastate_t *init_state;
114 bin_tree_t *str_tree;
115 re_bitset_ptr_t sb_char;
116 int str_tree_storage_idx;
117 int nbackref;
118 unsigned int has_mb_node : 1;
119 unsigned int is_utf8 : 1;
120 unsigned int map_notascii : 1;
121 int mb_cur_max;
122 int *subexp_map;
123 };
124 static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, unsigned int length, reg_syntax_t syntax);
125 static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap);
126 static reg_errcode_t init_dfa (re_dfa_t *dfa, unsigned int pat_len);
127 static void optimize_utf8 (re_dfa_t *dfa);
128 static reg_errcode_t analyze (regex_t *preg);
129 static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node);
130 const unsigned int __re_error_msgid_idx[] = {
131 0, (0 + sizeof "Success"), ((0 + sizeof "Success") + sizeof "No match"), (((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression"), ((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character"), (((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name"), ((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash"), (((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference"), ((((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference") + sizeof "Unmatched [ or [^"), (((((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference") + sizeof "Unmatched [ or [^") + sizeof "Unmatched ( or \\("), ((((((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference") + sizeof "Unmatched [ or [^") + sizeof "Unmatched ( or \\(") + sizeof "Unmatched \\{"), (((((((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference") + sizeof "Unmatched [ or [^") + sizeof "Unmatched ( or \\(") + sizeof "Unmatched \\{") + sizeof "Invalid content of \\{\\}"), ((((((((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference") + sizeof "Unmatched [ or [^") + sizeof "Unmatched ( or \\(") + sizeof "Unmatched \\{") + sizeof "Invalid content of \\{\\}") + sizeof "Invalid range end"), (((((((((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference") + sizeof "Unmatched [ or [^") + sizeof "Unmatched ( or \\(") + sizeof "Unmatched \\{") + sizeof "Invalid content of \\{\\}") + sizeof "Invalid range end") + sizeof "Memory exhausted"), ((((((((((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference") + sizeof "Unmatched [ or [^") + sizeof "Unmatched ( or \\(") + sizeof "Unmatched \\{") + sizeof "Invalid content of \\{\\}") + sizeof "Invalid range end") + sizeof "Memory exhausted") + sizeof "Invalid preceding regular expression"), (((((((((((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference") + sizeof "Unmatched [ or [^") + sizeof "Unmatched ( or \\(") + sizeof "Unmatched \\{") + sizeof "Invalid content of \\{\\}") + sizeof "Invalid range end") + sizeof "Memory exhausted") + sizeof "Invalid preceding regular expression") + sizeof "Premature end of regular expression"), ((((((((((((((((0 + sizeof "Success") + sizeof "No match") + sizeof "Invalid regular expression") + sizeof "Invalid collation character") + sizeof "Invalid character class name") + sizeof "Trailing backslash") + sizeof "Invalid back reference") + sizeof "Unmatched [ or [^") + sizeof "Unmatched ( or \\(") + sizeof "Unmatched \\{") + sizeof "Invalid content of \\{\\}") + sizeof "Invalid range end") + sizeof "Memory exhausted") + sizeof "Invalid preceding regular expression") + sizeof "Premature end of regular expression") + sizeof "Regular expression too big") };
132 const char * __re_compile_pattern (pattern, length, bufp) const char *pattern;
133 {
134 reg_errcode_t ret;
135 ret = re_compile_internal (bufp, pattern, length, re_syntax_options);
136 }
137 int __re_compile_fastmap (bufp) struct re_pattern_buffer *bufp;
138 {
139 re_dfa_t *dfa = (re_dfa_t *) bufp->buffer;
140 char *fastmap = bufp->fastmap;
141 re_compile_fastmap_iter (bufp, dfa->init_state, fastmap);
142 }
143 static inline void __attribute__ ((always_inline)) re_set_fastmap (char *fastmap, int icase, int ch) {
144 if (icase) fastmap[(__extension__ ({
145 int __res;
146 if (sizeof (ch) > 1) {
147 if (__builtin_constant_p (ch)) {
148 }
149 else __res = tolower (ch);
150 }
151 __res;
152 }
153 ))] = 1;
154 }
155 static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap) {
156 re_dfa_t *dfa = (re_dfa_t *) bufp->buffer;
157 int node_cnt;
158 int icase = (dfa->mb_cur_max == 1 && (bufp->syntax & ((((((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)));
159 for (node_cnt = 0;
160 node_cnt < init_state->nodes.nelem;
161 ++node_cnt) {
162 int node = init_state->nodes.elems[node_cnt];
163 re_token_type_t type = dfa->nodes[node].type;
164 if (type == CHARACTER) {
165 if ((bufp->syntax & ((((((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)) && dfa->mb_cur_max > 1) {
166 unsigned char *buf = __builtin_alloca (dfa->mb_cur_max), *p;
167 }
168 int i; int ch;
169 for (i = 0, ch = 0;
170 i < (256 / (sizeof (bitset_word_t) * 8));
171 ++i) {
172 int j;
173 bitset_word_t w = dfa->nodes[node].opr.sbcset[i];
174 for (j = 0;
175 j < (sizeof (bitset_word_t) * 8);
176 ++j, ++ch) if (w & ((bitset_word_t) 1 << j)) re_set_fastmap (fastmap, icase, ch);
177 }
178 }
179 else if (type == COMPLEX_BRACKET) {
180 int i;
181 re_charset_t *cset = dfa->nodes[node].opr.mbcset;
182 if (cset->non_match || cset->ncoll_syms || cset->nequiv_classes || cset->nranges || cset->nchar_classes) {
183 if (((unsigned int) (*_nl_current_LC_COLLATE)->values[((int) (_NL_COLLATE_NRULES) & 0xffff)].word) != 0) {
184 const int *table = (const int *) ((*_nl_current_LC_COLLATE)->values[((int) (_NL_COLLATE_TABLEMB) & 0xffff)].string);
185 for (i = 0;
186 i < 256;
187 ++i) if (table[i] < 0) re_set_fastmap (fastmap, icase, i);
188 }
189 }
190 for (i = 0;
191 i < cset->nmbchars;
192 ++i) {
193 char buf[256];
194 mbstate_t state;
195 if (__wcrtomb (buf, cset->mbchars[i], &state) != (unsigned int) -1) re_set_fastmap (fastmap, icase, *(unsigned char *) buf);
196 if ((bufp->syntax & ((((((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)) && dfa->mb_cur_max > 1) {
197 if (__wcrtomb (buf, towlower (cset->mbchars[i]), &state) != (unsigned int) -1) re_set_fastmap (fastmap, 0, *(unsigned char *) buf);
198 }
199 }
200 }
201 else if (type == OP_PERIOD || type == OP_UTF8_PERIOD || type == END_OF_RE) {
202 memset (fastmap, '\1', sizeof (char) * 256);
203 if (type == END_OF_RE) bufp->can_be_null = 1;
204 return;
205 }
206 }
207 }
208 static const bitset_t utf8_sb_map;
209 static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, unsigned int length, reg_syntax_t syntax) {
210 reg_errcode_t err = REG_NOERROR;
211 re_dfa_t *dfa;
212 re_string_t regexp;
213 preg->fastmap_accurate = 0;
214 preg->not_bol = preg->not_eol = 0;
215 preg->can_be_null = 0;
216 preg->regs_allocated = 0;
217 err = init_dfa (dfa, length);
218 err = re_string_construct (&regexp, pattern, length, preg->translate, syntax & ((((((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1), dfa);
219 dfa->str_tree = parse (&regexp, preg, syntax, &err);
220 err = analyze (preg);
221 if (dfa->is_utf8 && !(syntax & ((((((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)) && preg->translate == 0) optimize_utf8 (dfa);
222 }
223 static reg_errcode_t init_dfa (re_dfa_t *dfa, unsigned int pat_len) {
224 memset (dfa, '\0', sizeof (re_dfa_t));
225 dfa->str_tree_storage_idx = ((1024 - sizeof (void *)) / sizeof (bin_tree_t));
226 if (pat_len == (4294967295U)) return REG_ESPACE;
227 if (dfa->mb_cur_max == 6 && __extension__ ({
228 unsigned int __s1_len, __s2_len;
229 (__builtin_constant_p (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)) && __builtin_constant_p ("UTF-8") && (__s1_len = strlen (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)), __s2_len = strlen ("UTF-8"), (!((unsigned int)(const void *)((((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)) + 1) - (unsigned int)(const void *)(((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)) == 1) || __s1_len >= 4) && (!((unsigned int)(const void *)(("UTF-8") + 1) - (unsigned int)(const void *)("UTF-8") == 1) || __s2_len >= 4)) ? __builtin_strcmp (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string), "UTF-8") : (__builtin_constant_p (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)) && ((unsigned int)(const void *)((((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)) + 1) - (unsigned int)(const void *)(((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)) == 1) && (__s1_len = strlen (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)), __s1_len < 4) ? (__builtin_constant_p ("UTF-8") && ((unsigned int)(const void *)(("UTF-8") + 1) - (unsigned int)(const void *)("UTF-8") == 1) ? __builtin_strcmp (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string), "UTF-8") : (__extension__ ({
230 __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("UTF-8");
231 register int __result = (((__const unsigned char *) (__const char *) (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)))[0] - __s2[0]);
232 __result;
233 }
234 ))) : (__builtin_constant_p ("UTF-8") && ((unsigned int)(const void *)(("UTF-8") + 1) - (unsigned int)(const void *)("UTF-8") == 1) && (__s2_len = strlen ("UTF-8"), __s2_len < 4) ? (__builtin_constant_p (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)) && ((unsigned int)(const void *)((((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)) + 1) - (unsigned int)(const void *)(((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string)) == 1) ? __builtin_strcmp (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string), "UTF-8") : (__extension__ ({
235 __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string));
236 register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("UTF-8"))[0];
237 if (__s2_len > 0 && __result == 0) {
238 if (__s2_len > 1 && __result == 0) {
239 }
240 }
241 __result;
242 }
243 ))) : __builtin_strcmp (((*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_CODESET_NAME) & 0xffff)].string), "UTF-8"))));
244 }
245 ) == 0) dfa->is_utf8 = 1;
246 dfa->map_notascii = (((unsigned int) (*_nl_current_LC_CTYPE)->values[((int) (_NL_CTYPE_MAP_TO_NONASCII) & 0xffff)].word) != 0);
247 if (dfa->mb_cur_max > 1) {
248 if (dfa->is_utf8) dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map;
249 else {
250 int i, j, ch;
251 dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
252 if (__builtin_expect (dfa->sb_char == 0, 0)) return REG_ESPACE;
253 for (i = 0, ch = 0;
254 i < (256 / (sizeof (bitset_word_t) * 8));
255 ++i) for (j = 0;
256 j < (sizeof (bitset_word_t) * 8);
257 ++j, ++ch) {
258 unsigned int wch = __btowc (ch);
259 if (wch != (0xffffffffu)) dfa->sb_char[i] |= (bitset_word_t) 1 << j;
260 }
261 }
262 }
263 if (__builtin_expect (dfa->nodes == 0 || dfa->state_table == 0, 0)) return REG_ESPACE;
264 return REG_NOERROR;
265 }
266 static void optimize_utf8 (re_dfa_t *dfa) {
267 int node, i, mb_chars = 0, has_period = 0;
268 for (node = 0;
269 node < dfa->nodes_len;
270 ++node)
271 switch (dfa->nodes[node].type) {
272 case CHARACTER:
273 if (dfa->nodes[node].opr.c >= 0x80) mb_chars = 1;
274 case ANCHOR:
275 switch (dfa->nodes[node].opr.idx) {
276 case LINE_FIRST: case LINE_LAST: case BUF_FIRST: case BUF_LAST: break;
277 default: return;
278 }
279 case OP_PERIOD: has_period = 1;
280 case SIMPLE_BRACKET: ((0x80 % (sizeof (bitset_word_t) * 8) == 0) ? (void) (0) : (__assert_fail ("0x80 % (sizeof (bitset_word_t) * 8) == 0", "regcomp.c", 1059, __PRETTY_FUNCTION__), (void) (0)));
281 for (i = 0x80 / (sizeof (bitset_word_t) * 8);
282 i < (256 / (sizeof (bitset_word_t) * 8));
283 ++i) if (dfa->nodes[node].opr.sbcset[i]) return;
284 }
285 dfa->has_mb_node = dfa->nbackref > 0 || has_period;
286 }
287 static reg_errcode_t analyze (regex_t *preg) {
288 re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
289 dfa->nexts = ((int *) malloc ((dfa->nodes_alloc) * sizeof (int)));
290 dfa->org_indices = ((int *) malloc ((dfa->nodes_alloc) * sizeof (int)));
291 dfa->edests = ((re_node_set *) malloc ((dfa->nodes_alloc) * sizeof (re_node_set)));
292 dfa->eclosures = ((re_node_set *) malloc ((dfa->nodes_alloc) * sizeof (re_node_set)));
293 if (__builtin_expect (dfa->nexts == 0 || dfa->org_indices == 0 || dfa->edests == 0 || dfa->eclosures == 0, 0)) return REG_ESPACE;
294 if (dfa->subexp_map != 0) {
295 int i;
296 for (i = 0;
297 i < preg->re_nsub;
298 i++) dfa->subexp_map[i] = i;
299 preorder (dfa->str_tree, optimize_subexps, dfa);
300 for (i = 0;
301 i < preg->re_nsub;
302 i++) if (dfa->subexp_map[i] != i) break;
303 }
304 }