fe1aebe806053c071ee8a7622af4c7bd5fade866
[nit.git] / c_src / string_search._sep.c
1 /* This C file is generated by NIT to compile module string_search. */
2 #include "string_search._sep.h"
3 val_t string_search___Pattern___search_index_in(val_t self, val_t param0, val_t param1) {
4 struct trace_t trace = {NULL, NULL, 21, LOCATE_string_search___Pattern___search_index_in};
5 trace.prev = tracehead; tracehead = &trace;
6 trace.file = LOCATE_string_search;
7 fprintf(stderr, "Deferred method %s called");
8 fprintf(stderr, " (%s:%d)\n", LOCATE_string_search, 21);
9 nit_exit(1);
10 tracehead = trace.prev;
11 return NIT_NULL;
12 }
13 val_t string_search___Pattern___search_in(val_t self, val_t param0, val_t param1) {
14 struct trace_t trace = {NULL, NULL, 26, LOCATE_string_search___Pattern___search_in};
15 trace.prev = tracehead; tracehead = &trace;
16 trace.file = LOCATE_string_search;
17 fprintf(stderr, "Deferred method %s called");
18 fprintf(stderr, " (%s:%d)\n", LOCATE_string_search, 26);
19 nit_exit(1);
20 tracehead = trace.prev;
21 return NIT_NULL;
22 }
23 val_t string_search___Pattern___search_all_in(val_t self, val_t param0) {
24 struct trace_t trace = {NULL, NULL, 30, LOCATE_string_search___Pattern___search_all_in};
25 val_t variable0;
26 val_t variable1;
27 val_t variable2;
28 val_t variable3;
29 trace.prev = tracehead; tracehead = &trace;
30 trace.file = LOCATE_string_search;
31 variable0 = param0;
32 variable2 = NEW_Array_array___Array___init(); /*new Array[Match]*/
33 variable1 = variable2;
34 variable3 = ((string_search___Pattern___search_in_t)CALL( self,COLOR_string_search___Pattern___search_in))( self, variable0 /*s*/, TAG_Int(0)) /*Pattern::search_in*/;
35 variable2 = variable3;
36 while (true) { /*while*/
37 variable3 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable2 /*match*/ == NIT_NULL /*null*/) || (( variable2 /*match*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable2 /*match*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable2 /*match*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable2 /*match*/,COLOR_kernel___Object_____eqeq))( variable2 /*match*/, NIT_NULL /*null*/) /*Object::==*/)))))));
38 if (!UNTAG_Bool(variable3)) break; /* while*/
39 ((array___AbstractArray___add_t)CALL( variable1 /*res*/,COLOR_abstract_collection___SimpleCollection___add))( variable1 /*res*/, variable2 /*match*/) /*AbstractArray::add*/;
40 variable3 = ((string_search___Match___after_t)CALL( variable2 /*match*/,COLOR_string_search___Match___after))( variable2 /*match*/) /*Match::after*/;
41 variable3 = ((string_search___Pattern___search_in_t)CALL( self,COLOR_string_search___Pattern___search_in))( self, variable0 /*s*/, variable3) /*Pattern::search_in*/;
42 variable2 = variable3 /*match=*/;
43 continue_1: while(0);
44 }
45 break_1: while(0);
46 variable1 = variable1 /*res*/;
47 goto return_label0;
48 return_label0: while(false);
49 tracehead = trace.prev;
50 return variable1;
51 }
52 val_t string_search___Pattern___split_in(val_t self, val_t param0) {
53 struct trace_t trace = {NULL, NULL, 42, LOCATE_string_search___Pattern___split_in};
54 val_t variable0;
55 val_t variable1;
56 val_t variable2;
57 val_t variable3;
58 val_t variable4;
59 val_t variable5;
60 trace.prev = tracehead; tracehead = &trace;
61 trace.file = LOCATE_string_search;
62 variable0 = param0;
63 variable2 = NEW_Array_array___Array___init(); /*new Array[Match]*/
64 variable1 = variable2;
65 variable2 = TAG_Int(0);
66 variable4 = ((string_search___Pattern___search_in_t)CALL( self,COLOR_string_search___Pattern___search_in))( self, variable0 /*s*/, TAG_Int(0)) /*Pattern::search_in*/;
67 variable3 = variable4;
68 while (true) { /*while*/
69 variable4 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable3 /*match*/ == NIT_NULL /*null*/) || (( variable3 /*match*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable3 /*match*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable3 /*match*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable3 /*match*/,COLOR_kernel___Object_____eqeq))( variable3 /*match*/, NIT_NULL /*null*/) /*Object::==*/)))))));
70 if (!UNTAG_Bool(variable4)) break; /* while*/
71 variable5 = ((string_search___Match___from_t)CALL( variable3 /*match*/,COLOR_string_search___Match___from))( variable3 /*match*/) /*Match::from*/;
72 variable5 = TAG_Int(UNTAG_Int(variable5)-UNTAG_Int( variable2 /*i*/));
73 variable4 = variable5;
74 variable5 = NEW_Match_string_search___Match___init( variable0 /*s*/, variable2 /*i*/, variable4 /*len*/); /*new Match*/
75 ((array___AbstractArray___add_t)CALL( variable1 /*res*/,COLOR_abstract_collection___SimpleCollection___add))( variable1 /*res*/, variable5) /*AbstractArray::add*/;
76 variable5 = ((string_search___Match___after_t)CALL( variable3 /*match*/,COLOR_string_search___Match___after))( variable3 /*match*/) /*Match::after*/;
77 variable2 = variable5 /*i=*/;
78 variable5 = ((string_search___Pattern___search_in_t)CALL( self,COLOR_string_search___Pattern___search_in))( self, variable0 /*s*/, variable2 /*i*/) /*Pattern::search_in*/;
79 variable3 = variable5 /*match=*/;
80 continue_3: while(0);
81 }
82 break_3: while(0);
83 variable4 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
84 variable4 = TAG_Int(UNTAG_Int(variable4)-UNTAG_Int( variable2 /*i*/));
85 variable5 = NEW_Match_string_search___Match___init( variable0 /*s*/, variable2 /*i*/, variable4); /*new Match*/
86 variable4 = variable5;
87 ((array___AbstractArray___add_t)CALL( variable1 /*res*/,COLOR_abstract_collection___SimpleCollection___add))( variable1 /*res*/, variable4) /*AbstractArray::add*/;
88 variable1 = variable1 /*res*/;
89 goto return_label2;
90 return_label2: while(false);
91 tracehead = trace.prev;
92 return variable1;
93 }
94 void string_search___Pattern___init(val_t self, int* init_table) {
95 struct trace_t trace = {NULL, NULL, 0, LOCATE_string_search___Pattern___init};
96 trace.prev = tracehead; tracehead = &trace;
97 trace.file = LOCATE_string_search;
98 tracehead = trace.prev;
99 return;
100 }
101 val_t string_search___BM_Pattern___to_s(val_t self) {
102 struct trace_t trace = {NULL, NULL, 67, LOCATE_string_search___BM_Pattern___to_s};
103 val_t variable0;
104 trace.prev = tracehead; tracehead = &trace;
105 trace.file = LOCATE_string_search;
106 variable0 = ATTR_string_search___BM_Pattern____motif( self) /*BM_Pattern::_motif*/;
107 goto return_label4;
108 return_label4: while(false);
109 tracehead = trace.prev;
110 return variable0;
111 }
112 val_t string_search___BM_Pattern___search_index_in(val_t self, val_t param0, val_t param1) {
113 struct trace_t trace = {NULL, NULL, 69, LOCATE_string_search___BM_Pattern___search_index_in};
114 val_t variable0;
115 val_t variable1;
116 val_t variable2;
117 val_t variable3;
118 val_t variable4;
119 val_t variable5;
120 val_t variable6;
121 val_t variable7;
122 val_t variable8;
123 val_t variable9;
124 val_t variable10;
125 trace.prev = tracehead; tracehead = &trace;
126 trace.file = LOCATE_string_search;
127 variable0 = param0;
128 variable1 = param1;
129 variable2 = TAG_Bool(UNTAG_Int( variable1 /*from*/)>=UNTAG_Int( TAG_Int(0)));
130 if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string_search___BM_Pattern___search_index_in, LOCATE_string_search, 72); nit_exit(1);}
131 variable3 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
132 variable2 = variable3;
133 variable4 = ATTR_string_search___BM_Pattern____length( self) /*BM_Pattern::_length*/;
134 variable3 = variable4;
135 variable4 = variable1 /*from*/;
136 while (true) { /*while*/
137 variable5 = TAG_Int(UNTAG_Int( variable2 /*n*/)-UNTAG_Int( variable3 /*m*/));
138 variable5 = TAG_Int(UNTAG_Int(variable5)+UNTAG_Int( TAG_Int(1)));
139 variable5 = TAG_Bool(UNTAG_Int( variable4 /*j*/)<UNTAG_Int(variable5));
140 if (!UNTAG_Bool(variable5)) break; /* while*/
141 variable6 = TAG_Int(UNTAG_Int( variable3 /*m*/)-UNTAG_Int( TAG_Int(1)));
142 variable5 = variable6;
143 while (true) { /*while*/
144 variable6 = TAG_Bool(UNTAG_Int( variable5 /*i*/)>=UNTAG_Int( TAG_Int(0)));
145 variable7 = variable6;
146 if (UNTAG_Bool(variable7)) { /* and */
147 variable7 = ATTR_string_search___BM_Pattern____motif( self) /*BM_Pattern::_motif*/;
148 variable7 = ((string___String_____bra_t)CALL(variable7,COLOR_abstract_collection___Map_____bra))(variable7, variable5 /*i*/) /*String::[]*/;
149 variable8 = TAG_Int(UNTAG_Int( variable5 /*i*/)+UNTAG_Int( variable4 /*j*/));
150 variable8 = ((string___String_____bra_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Map_____bra))( variable0 /*s*/, variable8) /*String::[]*/;
151 variable7 = TAG_Bool((variable7)==(variable8));
152 }
153 variable6 = variable7;
154 if (!UNTAG_Bool(variable6)) break; /* while*/
155 variable5 = TAG_Int(UNTAG_Int(variable5)-UNTAG_Int( TAG_Int(1))) /*i*/;
156 continue_7: while(0);
157 }
158 break_7: while(0);
159 variable6 = TAG_Bool(UNTAG_Int( variable5 /*i*/)<UNTAG_Int( TAG_Int(0)));
160 if (UNTAG_Bool(variable6)) { /*if*/
161 variable2 = variable4 /*j*/;
162 goto return_label5;
163 } else { /*if*/
164 variable7 = ATTR_string_search___BM_Pattern____gs( self) /*BM_Pattern::_gs*/;
165 variable8 = variable5 /*i*/;
166 variable9 = TAG_Bool(UNTAG_Int( variable8 /*index*/)>=UNTAG_Int( TAG_Int(0)));
167 variable10 = variable9;
168 if (UNTAG_Bool(variable10)) { /* and */
169 variable10 = variable7;
170 variable10 = ATTR_array___AbstractArray____length(variable10) /*AbstractArray::_length*/;
171 variable10 = TAG_Bool(UNTAG_Int( variable8 /*index*/)<UNTAG_Int(variable10));
172 }
173 variable9 = variable10;
174 if (!UNTAG_Bool(variable9)) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_string_search, 229); nit_exit(1);}
175 variable9 = variable7;
176 variable9 = ATTR_array___Array____items(variable9) /*Array::_items*/;
177 variable9 = UNBOX_NativeArray(variable9)[UNTAG_Int( variable8 /*index*/)];
178 goto return_label8;
179 return_label8: while(false);
180 variable7 = variable9;
181 variable6 = variable7;
182 variable8 = TAG_Int(UNTAG_Int( variable5 /*i*/)+UNTAG_Int( variable4 /*j*/));
183 variable8 = ((string___String_____bra_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Map_____bra))( variable0 /*s*/, variable8) /*String::[]*/;
184 variable8 = ((string_search___BM_Pattern___bc_t)CALL( self,COLOR_string_search___BM_Pattern___bc))( self, variable8) /*BM_Pattern::bc*/;
185 variable8 = TAG_Int(UNTAG_Int(variable8)-UNTAG_Int( variable3 /*m*/));
186 variable8 = TAG_Int(UNTAG_Int(variable8)+UNTAG_Int( TAG_Int(1)));
187 variable8 = TAG_Int(UNTAG_Int(variable8)+UNTAG_Int( variable5 /*i*/));
188 variable7 = variable8;
189 variable8 = TAG_Bool(UNTAG_Int( variable6 /*gs*/)>UNTAG_Int( variable7 /*bc*/));
190 if (UNTAG_Bool(variable8)) { /*if*/
191 variable4 = TAG_Int(UNTAG_Int(variable4)+UNTAG_Int( variable6 /*gs*/)) /*j*/;
192 } else { /*if*/
193 variable4 = TAG_Int(UNTAG_Int(variable4)+UNTAG_Int( variable7 /*bc*/)) /*j*/;
194 }
195 }
196 continue_6: while(0);
197 }
198 break_6: while(0);
199 variable5 = TAG_Int(-UNTAG_Int( TAG_Int(1)));
200 variable2 = variable5;
201 goto return_label5;
202 return_label5: while(false);
203 tracehead = trace.prev;
204 return variable2;
205 }
206 val_t string_search___BM_Pattern___search_in(val_t self, val_t param0, val_t param1) {
207 struct trace_t trace = {NULL, NULL, 96, LOCATE_string_search___BM_Pattern___search_in};
208 val_t variable0;
209 val_t variable1;
210 val_t variable2;
211 val_t variable3;
212 val_t variable4;
213 trace.prev = tracehead; tracehead = &trace;
214 trace.file = LOCATE_string_search;
215 variable0 = param0;
216 variable1 = param1;
217 variable3 = ((string_search___BM_Pattern___search_index_in_t)CALL( self,COLOR_string_search___Pattern___search_index_in))( self, variable0 /*s*/, variable1 /*from*/) /*BM_Pattern::search_index_in*/;
218 variable2 = variable3;
219 variable3 = TAG_Bool(UNTAG_Int( variable2 /*to*/)<UNTAG_Int( TAG_Int(0)));
220 if (UNTAG_Bool(variable3)) { /*if*/
221 variable2 = NIT_NULL /*null*/;
222 goto return_label9;
223 } else { /*if*/
224 variable3 = ATTR_string_search___BM_Pattern____length( self) /*BM_Pattern::_length*/;
225 variable4 = NEW_Match_string_search___Match___init( variable0 /*s*/, variable2 /*to*/, variable3); /*new Match*/
226 variable3 = variable4;
227 variable2 = variable3;
228 goto return_label9;
229 }
230 return_label9: while(false);
231 tracehead = trace.prev;
232 return variable2;
233 }
234 void string_search___BM_Pattern___init(val_t self, val_t param0, int* init_table) {
235 struct trace_t trace = {NULL, NULL, 107, LOCATE_string_search___BM_Pattern___init};
236 val_t variable0;
237 val_t variable1;
238 val_t variable2;
239 trace.prev = tracehead; tracehead = &trace;
240 trace.file = LOCATE_string_search;
241 variable0 = param0;
242 if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_BM_Pattern].i]) return;
243 ATTR_string_search___BM_Pattern____motif( self) /*BM_Pattern::_motif*/ = variable0 /*motif*/;
244 variable1 = ((array___AbstractArray___length_t)CALL( variable0 /*motif*/,COLOR_abstract_collection___Collection___length))( variable0 /*motif*/) /*AbstractArray::length*/;
245 ATTR_string_search___BM_Pattern____length( self) /*BM_Pattern::_length*/ = variable1;
246 variable1 = ATTR_string_search___BM_Pattern____length( self) /*BM_Pattern::_length*/;
247 variable2 = NEW_Array_array___Array___with_capacity(variable1); /*new Array[Int]*/
248 variable1 = variable2;
249 ATTR_string_search___BM_Pattern____gs( self) /*BM_Pattern::_gs*/ = variable1;
250 variable1 = NEW_ArrayMap_array___ArrayMap___init(); /*new ArrayMap[Char, Int]*/
251 ATTR_string_search___BM_Pattern____bc_table( self) /*BM_Pattern::_bc_table*/ = variable1;
252 ((string_search___BM_Pattern___compute_gs_t)CALL( self,COLOR_string_search___BM_Pattern___compute_gs))( self) /*BM_Pattern::compute_gs*/;
253 ((string_search___BM_Pattern___compute_bc_t)CALL( self,COLOR_string_search___BM_Pattern___compute_bc))( self) /*BM_Pattern::compute_bc*/;
254 init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_BM_Pattern].i] = 1;
255 tracehead = trace.prev;
256 return;
257 }
258 val_t string_search___BM_Pattern___bc(val_t self, val_t param0) {
259 struct trace_t trace = {NULL, NULL, 124, LOCATE_string_search___BM_Pattern___bc};
260 val_t variable0;
261 val_t variable1;
262 trace.prev = tracehead; tracehead = &trace;
263 trace.file = LOCATE_string_search;
264 variable0 = param0;
265 variable1 = ATTR_string_search___BM_Pattern____bc_table( self) /*BM_Pattern::_bc_table*/;
266 variable1 = ((abstract_collection___Map___has_key_t)CALL(variable1,COLOR_abstract_collection___Map___has_key))(variable1, variable0 /*e*/) /*Map::has_key*/;
267 if (UNTAG_Bool(variable1)) { /*if*/
268 variable1 = ATTR_string_search___BM_Pattern____bc_table( self) /*BM_Pattern::_bc_table*/;
269 variable1 = ((abstract_collection___Map_____bra_t)CALL(variable1,COLOR_abstract_collection___Map_____bra))(variable1, variable0 /*e*/) /*Map::[]*/;
270 goto return_label11;
271 } else { /*if*/
272 variable1 = ATTR_string_search___BM_Pattern____length( self) /*BM_Pattern::_length*/;
273 goto return_label11;
274 }
275 return_label11: while(false);
276 tracehead = trace.prev;
277 return variable1;
278 }
279 void string_search___BM_Pattern___compute_bc(val_t self) {
280 struct trace_t trace = {NULL, NULL, 139, LOCATE_string_search___BM_Pattern___compute_bc};
281 val_t variable0;
282 val_t variable1;
283 val_t variable2;
284 val_t variable3;
285 val_t variable4;
286 val_t variable5;
287 trace.prev = tracehead; tracehead = &trace;
288 trace.file = LOCATE_string_search;
289 variable1 = ATTR_string_search___BM_Pattern____motif( self) /*BM_Pattern::_motif*/;
290 variable0 = variable1;
291 variable2 = ATTR_string_search___BM_Pattern____length( self) /*BM_Pattern::_length*/;
292 variable1 = variable2;
293 variable2 = TAG_Int(0);
294 while (true) { /*while*/
295 variable3 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( TAG_Int(1)));
296 variable3 = TAG_Bool(UNTAG_Int( variable2 /*i*/)<UNTAG_Int(variable3));
297 if (!UNTAG_Bool(variable3)) break; /* while*/
298 variable3 = ATTR_string_search___BM_Pattern____bc_table( self) /*BM_Pattern::_bc_table*/;
299 variable4 = ((string___String_____bra_t)CALL( variable0 /*x*/,COLOR_abstract_collection___Map_____bra))( variable0 /*x*/, variable2 /*i*/) /*String::[]*/;
300 variable5 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( variable2 /*i*/));
301 variable5 = TAG_Int(UNTAG_Int(variable5)-UNTAG_Int( TAG_Int(1)));
302 ((abstract_collection___Map_____braeq_t)CALL(variable3,COLOR_abstract_collection___Map_____braeq))(variable3, variable4, variable5) /*Map::[]=*/;
303 variable2 = TAG_Int(UNTAG_Int(variable2)+UNTAG_Int( TAG_Int(1))) /*i*/;
304 continue_13: while(0);
305 }
306 break_13: while(0);
307 tracehead = trace.prev;
308 return;
309 }
310 val_t string_search___BM_Pattern___suffixes(val_t self) {
311 struct trace_t trace = {NULL, NULL, 150, LOCATE_string_search___BM_Pattern___suffixes};
312 val_t variable0;
313 val_t variable1;
314 val_t variable2;
315 val_t variable3;
316 val_t variable4;
317 val_t variable5;
318 val_t variable6;
319 val_t variable7;
320 val_t variable8;
321 val_t variable9;
322 val_t variable10;
323 trace.prev = tracehead; tracehead = &trace;
324 trace.file = LOCATE_string_search;
325 variable1 = ATTR_string_search___BM_Pattern____motif( self) /*BM_Pattern::_motif*/;
326 variable0 = variable1;
327 variable2 = ATTR_string_search___BM_Pattern____length( self) /*BM_Pattern::_length*/;
328 variable1 = variable2;
329 variable3 = NEW_Array_array___Array___filled_with( variable1 /*m*/, variable1 /*m*/); /*new Array[Int]*/
330 variable2 = variable3;
331 variable3 = TAG_Int(0);
332 variable5 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( TAG_Int(1)));
333 variable4 = variable5;
334 variable6 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( TAG_Int(2)));
335 variable5 = variable6;
336 while (true) { /*while*/
337 variable6 = TAG_Bool(UNTAG_Int( variable5 /*i*/)>=UNTAG_Int( TAG_Int(0)));
338 if (!UNTAG_Bool(variable6)) break; /* while*/
339 variable6 = TAG_Bool(UNTAG_Int( variable5 /*i*/)>UNTAG_Int( variable4 /*g*/));
340 variable7 = variable6;
341 if (UNTAG_Bool(variable7)) { /* and */
342 variable7 = TAG_Int(UNTAG_Int( variable5 /*i*/)+UNTAG_Int( variable1 /*m*/));
343 variable7 = TAG_Int(UNTAG_Int(variable7)-UNTAG_Int( TAG_Int(1)));
344 variable7 = TAG_Int(UNTAG_Int(variable7)-UNTAG_Int( variable3 /*f*/));
345 variable8 = variable7;
346 variable9 = TAG_Bool(UNTAG_Int( variable8 /*index*/)>=UNTAG_Int( TAG_Int(0)));
347 variable10 = variable9;
348 if (UNTAG_Bool(variable10)) { /* and */
349 variable10 = ATTR_array___AbstractArray____length( variable2 /*suff*/) /*AbstractArray::_length*/;
350 variable10 = TAG_Bool(UNTAG_Int( variable8 /*index*/)<UNTAG_Int(variable10));
351 }
352 variable9 = variable10;
353 if (!UNTAG_Bool(variable9)) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_string_search, 229); nit_exit(1);}
354 variable9 = ATTR_array___Array____items( variable2 /*suff*/) /*Array::_items*/;
355 variable9 = UNBOX_NativeArray(variable9)[UNTAG_Int( variable8 /*index*/)];
356 goto return_label16;
357 return_label16: while(false);
358 variable7 = variable9;
359 variable8 = TAG_Int(UNTAG_Int( variable5 /*i*/)-UNTAG_Int( variable4 /*g*/));
360 variable7 = TAG_Bool(UNTAG_Int(variable7)<UNTAG_Int(variable8));
361 }
362 variable6 = variable7;
363 if (UNTAG_Bool(variable6)) { /*if*/
364 variable6 = TAG_Int(UNTAG_Int( variable5 /*i*/)+UNTAG_Int( variable1 /*m*/));
365 variable6 = TAG_Int(UNTAG_Int(variable6)-UNTAG_Int( TAG_Int(1)));
366 variable6 = TAG_Int(UNTAG_Int(variable6)-UNTAG_Int( variable3 /*f*/));
367 variable7 = variable6;
368 variable8 = TAG_Bool(UNTAG_Int( variable7 /*index*/)>=UNTAG_Int( TAG_Int(0)));
369 variable9 = variable8;
370 if (UNTAG_Bool(variable9)) { /* and */
371 variable9 = ATTR_array___AbstractArray____length( variable2 /*suff*/) /*AbstractArray::_length*/;
372 variable9 = TAG_Bool(UNTAG_Int( variable7 /*index*/)<UNTAG_Int(variable9));
373 }
374 variable8 = variable9;
375 if (!UNTAG_Bool(variable8)) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_string_search, 229); nit_exit(1);}
376 variable8 = ATTR_array___Array____items( variable2 /*suff*/) /*Array::_items*/;
377 variable8 = UNBOX_NativeArray(variable8)[UNTAG_Int( variable7 /*index*/)];
378 goto return_label17;
379 return_label17: while(false);
380 variable6 = variable8;
381 ((array___Array_____braeq_t)CALL( variable2 /*suff*/,COLOR_abstract_collection___Map_____braeq))( variable2 /*suff*/, variable5 /*i*/, variable6) /*Array::[]=*/;
382 } else { /*if*/
383 variable6 = TAG_Bool(UNTAG_Int( variable5 /*i*/)<UNTAG_Int( variable4 /*g*/));
384 if (UNTAG_Bool(variable6)) { /*if*/
385 variable4 = variable5 /*i*/ /*g=*/;
386 }
387 variable3 = variable5 /*i*/ /*f=*/;
388 while (true) { /*while*/
389 variable6 = TAG_Bool(UNTAG_Int( variable4 /*g*/)>=UNTAG_Int( TAG_Int(0)));
390 variable7 = variable6;
391 if (UNTAG_Bool(variable7)) { /* and */
392 variable7 = ((string___String_____bra_t)CALL( variable0 /*x*/,COLOR_abstract_collection___Map_____bra))( variable0 /*x*/, variable4 /*g*/) /*String::[]*/;
393 variable8 = TAG_Int(UNTAG_Int( variable4 /*g*/)+UNTAG_Int( variable1 /*m*/));
394 variable8 = TAG_Int(UNTAG_Int(variable8)-UNTAG_Int( TAG_Int(1)));
395 variable8 = TAG_Int(UNTAG_Int(variable8)-UNTAG_Int( variable3 /*f*/));
396 variable8 = ((string___String_____bra_t)CALL( variable0 /*x*/,COLOR_abstract_collection___Map_____bra))( variable0 /*x*/, variable8) /*String::[]*/;
397 variable7 = TAG_Bool((variable7)==(variable8));
398 }
399 variable6 = variable7;
400 if (!UNTAG_Bool(variable6)) break; /* while*/
401 variable4 = TAG_Int(UNTAG_Int(variable4)-UNTAG_Int( TAG_Int(1))) /*g*/;
402 continue_18: while(0);
403 }
404 break_18: while(0);
405 variable6 = TAG_Int(UNTAG_Int( variable3 /*f*/)-UNTAG_Int( variable4 /*g*/));
406 ((array___Array_____braeq_t)CALL( variable2 /*suff*/,COLOR_abstract_collection___Map_____braeq))( variable2 /*suff*/, variable5 /*i*/, variable6) /*Array::[]=*/;
407 }
408 variable5 = TAG_Int(UNTAG_Int(variable5)-UNTAG_Int( TAG_Int(1))) /*i*/;
409 continue_15: while(0);
410 }
411 break_15: while(0);
412 variable0 = variable2 /*suff*/;
413 goto return_label14;
414 return_label14: while(false);
415 tracehead = trace.prev;
416 return variable0;
417 }
418 void string_search___BM_Pattern___compute_gs(val_t self) {
419 struct trace_t trace = {NULL, NULL, 173, LOCATE_string_search___BM_Pattern___compute_gs};
420 val_t variable0;
421 val_t variable1;
422 val_t variable2;
423 val_t variable3;
424 val_t variable4;
425 val_t variable5;
426 val_t variable6;
427 val_t variable7;
428 val_t variable8;
429 val_t variable9;
430 trace.prev = tracehead; tracehead = &trace;
431 trace.file = LOCATE_string_search;
432 variable1 = ATTR_string_search___BM_Pattern____motif( self) /*BM_Pattern::_motif*/;
433 variable0 = variable1;
434 variable2 = ATTR_string_search___BM_Pattern____length( self) /*BM_Pattern::_length*/;
435 variable1 = variable2;
436 variable3 = ((string_search___BM_Pattern___suffixes_t)CALL( self,COLOR_string_search___BM_Pattern___suffixes))( self) /*BM_Pattern::suffixes*/;
437 variable2 = variable3;
438 variable3 = TAG_Int(0);
439 while (true) { /*while*/
440 variable4 = TAG_Bool(UNTAG_Int( variable3 /*i*/)<UNTAG_Int( variable1 /*m*/));
441 if (!UNTAG_Bool(variable4)) break; /* while*/
442 variable4 = ATTR_string_search___BM_Pattern____gs( self) /*BM_Pattern::_gs*/;
443 ((array___Array_____braeq_t)CALL(variable4,COLOR_abstract_collection___Map_____braeq))(variable4, variable3 /*i*/, variable1 /*m*/) /*Array::[]=*/;
444 variable3 = TAG_Int(UNTAG_Int(variable3)+UNTAG_Int( TAG_Int(1))) /*i*/;
445 continue_20: while(0);
446 }
447 break_20: while(0);
448 variable4 = TAG_Int(0);
449 variable5 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( TAG_Int(1)));
450 variable3 = variable5 /*i=*/;
451 while (true) { /*while*/
452 variable5 = TAG_Int(-UNTAG_Int( TAG_Int(1)));
453 variable5 = TAG_Bool(UNTAG_Int( variable3 /*i*/)>=UNTAG_Int(variable5));
454 if (!UNTAG_Bool(variable5)) break; /* while*/
455 variable5 = TAG_Int(-UNTAG_Int( TAG_Int(1)));
456 variable5 = TAG_Bool(( variable3 /*i*/)==(variable5));
457 variable6 = variable5;
458 if (!UNTAG_Bool(variable6)) { /* or */
459 variable6 = variable3 /*i*/;
460 variable7 = TAG_Bool(UNTAG_Int( variable6 /*index*/)>=UNTAG_Int( TAG_Int(0)));
461 variable8 = variable7;
462 if (UNTAG_Bool(variable8)) { /* and */
463 variable8 = ATTR_array___AbstractArray____length( variable2 /*suff*/) /*AbstractArray::_length*/;
464 variable8 = TAG_Bool(UNTAG_Int( variable6 /*index*/)<UNTAG_Int(variable8));
465 }
466 variable7 = variable8;
467 if (!UNTAG_Bool(variable7)) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_string_search, 229); nit_exit(1);}
468 variable7 = ATTR_array___Array____items( variable2 /*suff*/) /*Array::_items*/;
469 variable7 = UNBOX_NativeArray(variable7)[UNTAG_Int( variable6 /*index*/)];
470 goto return_label22;
471 return_label22: while(false);
472 variable6 = variable7;
473 variable7 = TAG_Int(UNTAG_Int( variable3 /*i*/)+UNTAG_Int( TAG_Int(1)));
474 variable6 = TAG_Bool((variable6)==(variable7));
475 }
476 variable5 = variable6;
477 if (UNTAG_Bool(variable5)) { /*if*/
478 while (true) { /*while*/
479 variable5 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( TAG_Int(1)));
480 variable5 = TAG_Int(UNTAG_Int(variable5)-UNTAG_Int( variable3 /*i*/));
481 variable5 = TAG_Bool(UNTAG_Int( variable4 /*j*/)<UNTAG_Int(variable5));
482 if (!UNTAG_Bool(variable5)) break; /* while*/
483 variable5 = ATTR_string_search___BM_Pattern____gs( self) /*BM_Pattern::_gs*/;
484 variable6 = variable4 /*j*/;
485 variable7 = TAG_Bool(UNTAG_Int( variable6 /*index*/)>=UNTAG_Int( TAG_Int(0)));
486 variable8 = variable7;
487 if (UNTAG_Bool(variable8)) { /* and */
488 variable8 = variable5;
489 variable8 = ATTR_array___AbstractArray____length(variable8) /*AbstractArray::_length*/;
490 variable8 = TAG_Bool(UNTAG_Int( variable6 /*index*/)<UNTAG_Int(variable8));
491 }
492 variable7 = variable8;
493 if (!UNTAG_Bool(variable7)) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_string_search, 229); nit_exit(1);}
494 variable7 = variable5;
495 variable7 = ATTR_array___Array____items(variable7) /*Array::_items*/;
496 variable7 = UNBOX_NativeArray(variable7)[UNTAG_Int( variable6 /*index*/)];
497 goto return_label24;
498 return_label24: while(false);
499 variable5 = variable7;
500 variable5 = TAG_Bool((variable5)==( variable1 /*m*/));
501 if (UNTAG_Bool(variable5)) { /*if*/
502 variable5 = ATTR_string_search___BM_Pattern____gs( self) /*BM_Pattern::_gs*/;
503 variable6 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( TAG_Int(1)));
504 variable6 = TAG_Int(UNTAG_Int(variable6)-UNTAG_Int( variable3 /*i*/));
505 ((array___Array_____braeq_t)CALL(variable5,COLOR_abstract_collection___Map_____braeq))(variable5, variable4 /*j*/, variable6) /*Array::[]=*/;
506 }
507 variable4 = TAG_Int(UNTAG_Int(variable4)+UNTAG_Int( TAG_Int(1))) /*j*/;
508 continue_23: while(0);
509 }
510 break_23: while(0);
511 }
512 variable3 = TAG_Int(UNTAG_Int(variable3)-UNTAG_Int( TAG_Int(1))) /*i*/;
513 continue_21: while(0);
514 }
515 break_21: while(0);
516 variable3 = TAG_Int(0) /*i=*/;
517 while (true) { /*while*/
518 variable5 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( TAG_Int(1)));
519 variable5 = TAG_Bool(UNTAG_Int( variable3 /*i*/)<UNTAG_Int(variable5));
520 if (!UNTAG_Bool(variable5)) break; /* while*/
521 variable5 = ATTR_string_search___BM_Pattern____gs( self) /*BM_Pattern::_gs*/;
522 variable6 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( TAG_Int(1)));
523 variable7 = variable3 /*i*/;
524 variable8 = TAG_Bool(UNTAG_Int( variable7 /*index*/)>=UNTAG_Int( TAG_Int(0)));
525 variable9 = variable8;
526 if (UNTAG_Bool(variable9)) { /* and */
527 variable9 = ATTR_array___AbstractArray____length( variable2 /*suff*/) /*AbstractArray::_length*/;
528 variable9 = TAG_Bool(UNTAG_Int( variable7 /*index*/)<UNTAG_Int(variable9));
529 }
530 variable8 = variable9;
531 if (!UNTAG_Bool(variable8)) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_string_search, 229); nit_exit(1);}
532 variable8 = ATTR_array___Array____items( variable2 /*suff*/) /*Array::_items*/;
533 variable8 = UNBOX_NativeArray(variable8)[UNTAG_Int( variable7 /*index*/)];
534 goto return_label26;
535 return_label26: while(false);
536 variable7 = variable8;
537 variable6 = TAG_Int(UNTAG_Int(variable6)-UNTAG_Int(variable7));
538 variable7 = TAG_Int(UNTAG_Int( variable1 /*m*/)-UNTAG_Int( TAG_Int(1)));
539 variable7 = TAG_Int(UNTAG_Int(variable7)-UNTAG_Int( variable3 /*i*/));
540 ((array___Array_____braeq_t)CALL(variable5,COLOR_abstract_collection___Map_____braeq))(variable5, variable6, variable7) /*Array::[]=*/;
541 variable3 = TAG_Int(UNTAG_Int(variable3)+UNTAG_Int( TAG_Int(1))) /*i*/;
542 continue_25: while(0);
543 }
544 break_25: while(0);
545 tracehead = trace.prev;
546 return;
547 }
548 val_t string_search___Match___string(val_t self) {
549 struct trace_t trace = {NULL, NULL, 204, LOCATE_string_search___Match___string};
550 trace.prev = tracehead; tracehead = &trace;
551 trace.file = LOCATE_string_search;
552 tracehead = trace.prev;
553 return ATTR_string_search___Match____string( self) /*Match::_string*/;
554 }
555 val_t string_search___Match___from(val_t self) {
556 struct trace_t trace = {NULL, NULL, 207, LOCATE_string_search___Match___from};
557 trace.prev = tracehead; tracehead = &trace;
558 trace.file = LOCATE_string_search;
559 tracehead = trace.prev;
560 return ATTR_string_search___Match____from( self) /*Match::_from*/;
561 }
562 val_t string_search___Match___length(val_t self) {
563 struct trace_t trace = {NULL, NULL, 210, LOCATE_string_search___Match___length};
564 trace.prev = tracehead; tracehead = &trace;
565 trace.file = LOCATE_string_search;
566 tracehead = trace.prev;
567 return ATTR_string_search___Match____length( self) /*Match::_length*/;
568 }
569 val_t string_search___Match___after(val_t self) {
570 struct trace_t trace = {NULL, NULL, 213, LOCATE_string_search___Match___after};
571 val_t variable0;
572 val_t variable1;
573 trace.prev = tracehead; tracehead = &trace;
574 trace.file = LOCATE_string_search;
575 variable0 = ATTR_string_search___Match____from( self) /*Match::_from*/;
576 variable1 = ATTR_string_search___Match____length( self) /*Match::_length*/;
577 variable0 = TAG_Int(UNTAG_Int(variable0)+UNTAG_Int(variable1));
578 goto return_label27;
579 return_label27: while(false);
580 tracehead = trace.prev;
581 return variable0;
582 }
583 val_t string_search___Match___to_s(val_t self) {
584 struct trace_t trace = {NULL, NULL, 217, LOCATE_string_search___Match___to_s};
585 val_t variable0;
586 val_t variable1;
587 val_t variable2;
588 trace.prev = tracehead; tracehead = &trace;
589 trace.file = LOCATE_string_search;
590 variable0 = ATTR_string_search___Match____string( self) /*Match::_string*/;
591 variable1 = ATTR_string_search___Match____from( self) /*Match::_from*/;
592 variable2 = ATTR_string_search___Match____length( self) /*Match::_length*/;
593 variable0 = ((string___String___substring_t)CALL(variable0,COLOR_string___String___substring))(variable0, variable1, variable2) /*String::substring*/;
594 goto return_label28;
595 return_label28: while(false);
596 tracehead = trace.prev;
597 return variable0;
598 }
599 void string_search___Match___init(val_t self, val_t param0, val_t param1, val_t param2, int* init_table) {
600 struct trace_t trace = {NULL, NULL, 220, LOCATE_string_search___Match___init};
601 val_t variable0;
602 val_t variable1;
603 val_t variable2;
604 val_t variable3;
605 val_t variable4;
606 trace.prev = tracehead; tracehead = &trace;
607 trace.file = LOCATE_string_search;
608 variable0 = param0;
609 variable1 = param1;
610 variable2 = param2;
611 if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_Match].i]) return;
612 variable3 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable0 /*s*/ == NIT_NULL /*null*/) || (( variable0 /*s*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable0 /*s*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable0 /*s*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable0 /*s*/,COLOR_kernel___Object_____eqeq))( variable0 /*s*/, NIT_NULL /*null*/) /*Object::==*/)))))));
613 if (!UNTAG_Bool(variable3)) { fprintf(stderr, "Assert%s failed", " 'non_null_string' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string_search___Match___init, LOCATE_string_search, 223); nit_exit(1);}
614 variable3 = TAG_Bool(UNTAG_Int( variable2 /*len*/)>=UNTAG_Int( TAG_Int(0)));
615 if (!UNTAG_Bool(variable3)) { fprintf(stderr, "Assert%s failed", " 'positive_length' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string_search___Match___init, LOCATE_string_search, 224); nit_exit(1);}
616 variable3 = TAG_Bool(UNTAG_Int( variable1 /*f*/)>=UNTAG_Int( TAG_Int(0)));
617 if (!UNTAG_Bool(variable3)) { fprintf(stderr, "Assert%s failed", " 'valid_from' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string_search___Match___init, LOCATE_string_search, 225); nit_exit(1);}
618 variable3 = TAG_Int(UNTAG_Int( variable1 /*f*/)+UNTAG_Int( variable2 /*len*/));
619 variable4 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
620 variable3 = TAG_Bool(UNTAG_Int(variable3)<=UNTAG_Int(variable4));
621 if (!UNTAG_Bool(variable3)) { fprintf(stderr, "Assert%s failed", " 'valid_after' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string_search___Match___init, LOCATE_string_search, 226); nit_exit(1);}
622 ATTR_string_search___Match____string( self) /*Match::_string*/ = variable0 /*s*/;
623 ATTR_string_search___Match____from( self) /*Match::_from*/ = variable1 /*f*/;
624 ATTR_string_search___Match____length( self) /*Match::_length*/ = variable2 /*len*/;
625 init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_Match].i] = 1;
626 tracehead = trace.prev;
627 return;
628 }
629 val_t string_search___Char___search_index_in(val_t self, val_t param0, val_t param1) {
630 struct trace_t trace = {NULL, NULL, 235, LOCATE_string_search___Char___search_index_in};
631 val_t variable0;
632 val_t variable1;
633 val_t variable2;
634 val_t variable3;
635 trace.prev = tracehead; tracehead = &trace;
636 trace.file = LOCATE_string_search;
637 variable0 = param0;
638 variable1 = param1;
639 variable3 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
640 variable2 = variable3;
641 while (true) { /*while*/
642 variable3 = TAG_Bool(UNTAG_Int( variable1 /*from*/)<UNTAG_Int( variable2 /*stop*/));
643 if (!UNTAG_Bool(variable3)) break; /* while*/
644 variable3 = ((string___String_____bra_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Map_____bra))( variable0 /*s*/, variable1 /*from*/) /*String::[]*/;
645 variable3 = TAG_Bool((variable3)==( self));
646 if (UNTAG_Bool(variable3)) { /*if*/
647 variable2 = variable1 /*from*/;
648 goto return_label30;
649 }
650 variable1 = TAG_Int(UNTAG_Int(variable1)+UNTAG_Int( TAG_Int(1))) /*from*/;
651 continue_31: while(0);
652 }
653 break_31: while(0);
654 variable3 = TAG_Int(-UNTAG_Int( TAG_Int(1)));
655 variable2 = variable3;
656 goto return_label30;
657 return_label30: while(false);
658 tracehead = trace.prev;
659 return variable2;
660 }
661 val_t string_search___Char___search_in(val_t self, val_t param0, val_t param1) {
662 struct trace_t trace = {NULL, NULL, 245, LOCATE_string_search___Char___search_in};
663 val_t variable0;
664 val_t variable1;
665 val_t variable2;
666 val_t variable3;
667 trace.prev = tracehead; tracehead = &trace;
668 trace.file = LOCATE_string_search;
669 variable0 = param0;
670 variable1 = param1;
671 variable3 = ((string_search___Char___search_index_in_t)CALL( self,COLOR_string_search___Pattern___search_index_in))( self, variable0 /*s*/, variable1 /*from*/) /*Char::search_index_in*/;
672 variable2 = variable3;
673 variable3 = TAG_Bool(UNTAG_Int( variable2 /*pos*/)<UNTAG_Int( TAG_Int(0)));
674 if (UNTAG_Bool(variable3)) { /*if*/
675 variable2 = NIT_NULL /*null*/;
676 goto return_label32;
677 } else { /*if*/
678 variable3 = NEW_Match_string_search___Match___init( variable0 /*s*/, variable2 /*pos*/, TAG_Int(1)); /*new Match*/
679 variable2 = variable3;
680 goto return_label32;
681 }
682 return_label32: while(false);
683 tracehead = trace.prev;
684 return variable2;
685 }
686 val_t string_search___String___search_index_in(val_t self, val_t param0, val_t param1) {
687 struct trace_t trace = {NULL, NULL, 258, LOCATE_string_search___String___search_index_in};
688 val_t variable0;
689 val_t variable1;
690 val_t variable2;
691 val_t variable3;
692 val_t variable4;
693 val_t variable5;
694 val_t variable6;
695 trace.prev = tracehead; tracehead = &trace;
696 trace.file = LOCATE_string_search;
697 variable0 = param0;
698 variable1 = param1;
699 variable2 = TAG_Bool(UNTAG_Int( variable1 /*from*/)>=UNTAG_Int( TAG_Int(0)));
700 if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string_search___String___search_index_in, LOCATE_string_search, 260); nit_exit(1);}
701 variable3 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
702 variable4 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
703 variable3 = TAG_Int(UNTAG_Int(variable3)-UNTAG_Int(variable4));
704 variable3 = TAG_Int(UNTAG_Int(variable3)+UNTAG_Int( TAG_Int(1)));
705 variable2 = variable3;
706 while (true) { /*while*/
707 variable3 = TAG_Bool(UNTAG_Int( variable1 /*from*/)<UNTAG_Int( variable2 /*stop*/));
708 if (!UNTAG_Bool(variable3)) break; /* while*/
709 variable4 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
710 variable4 = TAG_Int(UNTAG_Int(variable4)-UNTAG_Int( TAG_Int(1)));
711 variable3 = variable4;
712 while (true) { /*while*/
713 variable4 = TAG_Bool(UNTAG_Int( variable3 /*i*/)>=UNTAG_Int( TAG_Int(0)));
714 variable5 = variable4;
715 if (UNTAG_Bool(variable5)) { /* and */
716 variable5 = ((string___String_____bra_t)CALL( self,COLOR_abstract_collection___Map_____bra))( self, variable3 /*i*/) /*String::[]*/;
717 variable6 = TAG_Int(UNTAG_Int( variable3 /*i*/)+UNTAG_Int( variable1 /*from*/));
718 variable6 = ((string___String_____bra_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Map_____bra))( variable0 /*s*/, variable6) /*String::[]*/;
719 variable5 = TAG_Bool((variable5)==(variable6));
720 }
721 variable4 = variable5;
722 if (!UNTAG_Bool(variable4)) break; /* while*/
723 variable3 = TAG_Int(UNTAG_Int(variable3)-UNTAG_Int( TAG_Int(1))) /*i*/;
724 continue_35: while(0);
725 }
726 break_35: while(0);
727 variable4 = TAG_Bool(UNTAG_Int( variable3 /*i*/)<UNTAG_Int( TAG_Int(0)));
728 if (UNTAG_Bool(variable4)) { /*if*/
729 variable2 = variable1 /*from*/;
730 goto return_label33;
731 }
732 variable1 = TAG_Int(UNTAG_Int(variable1)+UNTAG_Int( TAG_Int(1))) /*from*/;
733 continue_34: while(0);
734 }
735 break_34: while(0);
736 variable3 = TAG_Int(-UNTAG_Int( TAG_Int(1)));
737 variable2 = variable3;
738 goto return_label33;
739 return_label33: while(false);
740 tracehead = trace.prev;
741 return variable2;
742 }
743 val_t string_search___String___search_in(val_t self, val_t param0, val_t param1) {
744 struct trace_t trace = {NULL, NULL, 273, LOCATE_string_search___String___search_in};
745 val_t variable0;
746 val_t variable1;
747 val_t variable2;
748 val_t variable3;
749 val_t variable4;
750 trace.prev = tracehead; tracehead = &trace;
751 trace.file = LOCATE_string_search;
752 variable0 = param0;
753 variable1 = param1;
754 variable3 = ((string_search___String___search_index_in_t)CALL( self,COLOR_string_search___Pattern___search_index_in))( self, variable0 /*s*/, variable1 /*from*/) /*String::search_index_in*/;
755 variable2 = variable3;
756 variable3 = TAG_Bool(UNTAG_Int( variable2 /*pos*/)<UNTAG_Int( TAG_Int(0)));
757 if (UNTAG_Bool(variable3)) { /*if*/
758 variable2 = NIT_NULL /*null*/;
759 goto return_label36;
760 } else { /*if*/
761 variable3 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
762 variable4 = NEW_Match_string_search___Match___init( variable0 /*s*/, variable2 /*pos*/, variable3); /*new Match*/
763 variable3 = variable4;
764 variable2 = variable3;
765 goto return_label36;
766 }
767 return_label36: while(false);
768 tracehead = trace.prev;
769 return variable2;
770 }
771 val_t string_search___String___search(val_t self, val_t param0) {
772 struct trace_t trace = {NULL, NULL, 283, LOCATE_string_search___String___search};
773 val_t variable0;
774 val_t variable1;
775 trace.prev = tracehead; tracehead = &trace;
776 trace.file = LOCATE_string_search;
777 variable0 = param0;
778 variable1 = ((string_search___Pattern___search_in_t)CALL( variable0 /*p*/,COLOR_string_search___Pattern___search_in))( variable0 /*p*/, self, TAG_Int(0)) /*Pattern::search_in*/;
779 goto return_label37;
780 return_label37: while(false);
781 tracehead = trace.prev;
782 return variable1;
783 }
784 val_t string_search___String___search_from(val_t self, val_t param0, val_t param1) {
785 struct trace_t trace = {NULL, NULL, 286, LOCATE_string_search___String___search_from};
786 val_t variable0;
787 val_t variable1;
788 val_t variable2;
789 trace.prev = tracehead; tracehead = &trace;
790 trace.file = LOCATE_string_search;
791 variable0 = param0;
792 variable1 = param1;
793 variable2 = ((string_search___Pattern___search_in_t)CALL( variable0 /*p*/,COLOR_string_search___Pattern___search_in))( variable0 /*p*/, self, variable1 /*from*/) /*Pattern::search_in*/;
794 goto return_label38;
795 return_label38: while(false);
796 tracehead = trace.prev;
797 return variable2;
798 }
799 val_t string_search___String___search_all(val_t self, val_t param0) {
800 struct trace_t trace = {NULL, NULL, 291, LOCATE_string_search___String___search_all};
801 val_t variable0;
802 val_t variable1;
803 trace.prev = tracehead; tracehead = &trace;
804 trace.file = LOCATE_string_search;
805 variable0 = param0;
806 variable1 = ((string_search___Pattern___search_all_in_t)CALL( variable0 /*p*/,COLOR_string_search___Pattern___search_all_in))( variable0 /*p*/, self) /*Pattern::search_all_in*/;
807 goto return_label39;
808 return_label39: while(false);
809 tracehead = trace.prev;
810 return variable1;
811 }
812 val_t string_search___String___split_with(val_t self, val_t param0) {
813 struct trace_t trace = {NULL, NULL, 300, LOCATE_string_search___String___split_with};
814 val_t variable0;
815 val_t variable1;
816 val_t variable2;
817 val_t variable3;
818 val_t variable4;
819 val_t variable5;
820 trace.prev = tracehead; tracehead = &trace;
821 trace.file = LOCATE_string_search;
822 variable0 = param0;
823 variable2 = ((string_search___Pattern___split_in_t)CALL( variable0 /*p*/,COLOR_string_search___Pattern___split_in))( variable0 /*p*/, self) /*Pattern::split_in*/;
824 variable1 = variable2;
825 variable3 = ((array___AbstractArray___length_t)CALL( variable1 /*matches*/,COLOR_abstract_collection___Collection___length))( variable1 /*matches*/) /*AbstractArray::length*/;
826 variable4 = NEW_Array_array___Array___with_capacity(variable3); /*new Array[String]*/
827 variable3 = variable4;
828 variable2 = variable3;
829 variable3 = ((array___AbstractArray___iterator_t)CALL( variable1 /*matches*/,COLOR_abstract_collection___Collection___iterator))( variable1 /*matches*/) /*AbstractArray::iterator*/;
830 while (true) { /*for*/
831 variable4 = ((array___ArrayIterator___is_ok_t)CALL(variable3,COLOR_abstract_collection___Iterator___is_ok))(variable3) /*ArrayIterator::is_ok*/;
832 if (!UNTAG_Bool(variable4)) break; /*for*/
833 variable4 = ((array___ArrayIterator___item_t)CALL(variable3,COLOR_abstract_collection___Iterator___item))(variable3) /*ArrayIterator::item*/;
834 variable5 = ((string_search___Match___to_s_t)CALL( variable4 /*m*/,COLOR_string___Object___to_s))( variable4 /*m*/) /*Match::to_s*/;
835 ((array___AbstractArray___add_t)CALL( variable2 /*res*/,COLOR_abstract_collection___SimpleCollection___add))( variable2 /*res*/, variable5) /*AbstractArray::add*/;
836 continue_41: while(0);
837 ((array___ArrayIterator___next_t)CALL(variable3,COLOR_abstract_collection___Iterator___next))(variable3) /*ArrayIterator::next*/;
838 }
839 break_41: while(0);
840 variable1 = variable2 /*res*/;
841 goto return_label40;
842 return_label40: while(false);
843 tracehead = trace.prev;
844 return variable1;
845 }
846 val_t string_search___String___split(val_t self) {
847 struct trace_t trace = {NULL, NULL, 310, LOCATE_string_search___String___split};
848 val_t variable0;
849 trace.prev = tracehead; tracehead = &trace;
850 trace.file = LOCATE_string_search;
851 variable0 = ((string_search___String___split_with_t)CALL( self,COLOR_string_search___String___split_with))( self, TAG_Char('\n')) /*String::split_with*/;
852 goto return_label42;
853 return_label42: while(false);
854 tracehead = trace.prev;
855 return variable0;
856 }