lib: fixed nan on floats
[nit.git] / c_src / string_search.sep.1.c
1 #include "string_search.sep.0.h"
2 /* method string_search#Pattern#search_index_in for (self: Pattern, String, Int): Int */
3 long string_search__Pattern__search_index_in(val* self, val* p0, long p1) {
4 long var /* : Int */;
5 const char* var_class_name;
6 var_class_name = self == NULL ? "null" : self->type->name;
7 fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "search_index_in", var_class_name);
8 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 20);
9 show_backtrace(1);
10 RET_LABEL:;
11 return var;
12 }
13 /* method string_search#Pattern#search_index_in for (self: Object, String, Int): Int */
14 long VIRTUAL_string_search__Pattern__search_index_in(val* self, val* p0, long p1) {
15 long var /* : Int */;
16 long var1 /* : Int */;
17 var1 = string_search__Pattern__search_index_in(self, p0, p1);
18 var = var1;
19 RET_LABEL:;
20 return var;
21 }
22 /* method string_search#Pattern#search_in for (self: Pattern, String, Int): nullable Match */
23 val* string_search__Pattern__search_in(val* self, val* p0, long p1) {
24 val* var /* : nullable Match */;
25 const char* var_class_name;
26 var_class_name = self == NULL ? "null" : self->type->name;
27 fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "search_in", var_class_name);
28 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 25);
29 show_backtrace(1);
30 RET_LABEL:;
31 return var;
32 }
33 /* method string_search#Pattern#search_in for (self: Object, String, Int): nullable Match */
34 val* VIRTUAL_string_search__Pattern__search_in(val* self, val* p0, long p1) {
35 val* var /* : nullable Match */;
36 val* var1 /* : nullable Match */;
37 var1 = string_search__Pattern__search_in(self, p0, p1);
38 var = var1;
39 RET_LABEL:;
40 return var;
41 }
42 /* method string_search#Pattern#search_all_in for (self: Pattern, String): Array[Match] */
43 val* string_search__Pattern__search_all_in(val* self, val* p0) {
44 val* var /* : Array[Match] */;
45 val* var_s /* var s: String */;
46 val* var1 /* : Array[Match] */;
47 val* var_res /* var res: Array[Match] */;
48 long var2 /* : Int */;
49 val* var3 /* : nullable Match */;
50 val* var_match /* var match: nullable Match */;
51 val* var4 /* : null */;
52 short int var5 /* : Bool */;
53 long var6 /* : Int */;
54 val* var7 /* : nullable Match */;
55 var_s = p0;
56 var1 = NEW_array__Array(&type_array__Arraystring_search__Match);
57 ((void (*)(val*))(var1->class->vft[COLOR_array__Array__init]))(var1) /* init on <var1:Array[Match]>*/;
58 var_res = var1;
59 var2 = 0;
60 var3 = ((val* (*)(val*, val*, long))(self->class->vft[COLOR_string_search__Pattern__search_in]))(self, var_s, var2) /* search_in on <self:Pattern>*/;
61 var_match = var3;
62 for(;;) {
63 var4 = NULL;
64 if (var_match == NULL) {
65 var5 = 0; /* is null */
66 } else {
67 var5 = 1; /* arg is null and recv is not */
68 }
69 if (!var5) break;
70 ((void (*)(val*, val*))(var_res->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_res, var_match) /* add on <var_res:Array[Match]>*/;
71 var6 = ((long (*)(val*))(var_match->class->vft[COLOR_string_search__Match__after]))(var_match) /* after on <var_match:nullable Match(Match)>*/;
72 var7 = ((val* (*)(val*, val*, long))(self->class->vft[COLOR_string_search__Pattern__search_in]))(self, var_s, var6) /* search_in on <self:Pattern>*/;
73 var_match = var7;
74 CONTINUE_label: (void)0;
75 }
76 BREAK_label: (void)0;
77 var = var_res;
78 goto RET_LABEL;
79 RET_LABEL:;
80 return var;
81 }
82 /* method string_search#Pattern#search_all_in for (self: Object, String): Array[Match] */
83 val* VIRTUAL_string_search__Pattern__search_all_in(val* self, val* p0) {
84 val* var /* : Array[Match] */;
85 val* var1 /* : Array[Match] */;
86 var1 = string_search__Pattern__search_all_in(self, p0);
87 var = var1;
88 RET_LABEL:;
89 return var;
90 }
91 /* method string_search#Pattern#split_in for (self: Pattern, String): Array[Match] */
92 val* string_search__Pattern__split_in(val* self, val* p0) {
93 val* var /* : Array[Match] */;
94 val* var_s /* var s: String */;
95 val* var1 /* : Array[Match] */;
96 val* var_res /* var res: Array[Match] */;
97 long var2 /* : Int */;
98 long var_i /* var i: Int */;
99 long var3 /* : Int */;
100 val* var4 /* : nullable Match */;
101 val* var_match /* var match: nullable Match */;
102 val* var5 /* : null */;
103 short int var6 /* : Bool */;
104 long var7 /* : Int */;
105 long var8 /* : Int */;
106 long var10 /* : Int */;
107 long var_len /* var len: Int */;
108 val* var11 /* : Match */;
109 long var12 /* : Int */;
110 val* var13 /* : nullable Match */;
111 val* var14 /* : Match */;
112 long var15 /* : Int */;
113 long var16 /* : Int */;
114 long var18 /* : Int */;
115 var_s = p0;
116 var1 = NEW_array__Array(&type_array__Arraystring_search__Match);
117 ((void (*)(val*))(var1->class->vft[COLOR_array__Array__init]))(var1) /* init on <var1:Array[Match]>*/;
118 var_res = var1;
119 var2 = 0;
120 var_i = var2;
121 var3 = 0;
122 var4 = ((val* (*)(val*, val*, long))(self->class->vft[COLOR_string_search__Pattern__search_in]))(self, var_s, var3) /* search_in on <self:Pattern>*/;
123 var_match = var4;
124 for(;;) {
125 var5 = NULL;
126 if (var_match == NULL) {
127 var6 = 0; /* is null */
128 } else {
129 var6 = 1; /* arg is null and recv is not */
130 }
131 if (!var6) break;
132 var7 = ((long (*)(val*))(var_match->class->vft[COLOR_string_search__Match__from]))(var_match) /* from on <var_match:nullable Match(Match)>*/;
133 { /* Inline kernel#Int#- (var7,var_i) */
134 var10 = var7 - var_i;
135 var8 = var10;
136 goto RET_LABEL9;
137 RET_LABEL9:(void)0;
138 }
139 var_len = var8;
140 var11 = NEW_string_search__Match(&type_string_search__Match);
141 ((void (*)(val*, val*, long, long))(var11->class->vft[COLOR_string_search__Match__init]))(var11, var_s, var_i, var_len) /* init on <var11:Match>*/;
142 ((void (*)(val*, val*))(var_res->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_res, var11) /* add on <var_res:Array[Match]>*/;
143 var12 = ((long (*)(val*))(var_match->class->vft[COLOR_string_search__Match__after]))(var_match) /* after on <var_match:nullable Match(Match)>*/;
144 var_i = var12;
145 var13 = ((val* (*)(val*, val*, long))(self->class->vft[COLOR_string_search__Pattern__search_in]))(self, var_s, var_i) /* search_in on <self:Pattern>*/;
146 var_match = var13;
147 CONTINUE_label: (void)0;
148 }
149 BREAK_label: (void)0;
150 var14 = NEW_string_search__Match(&type_string_search__Match);
151 var15 = ((long (*)(val*))(var_s->class->vft[COLOR_abstract_collection__Collection__length]))(var_s) /* length on <var_s:String>*/;
152 { /* Inline kernel#Int#- (var15,var_i) */
153 var18 = var15 - var_i;
154 var16 = var18;
155 goto RET_LABEL17;
156 RET_LABEL17:(void)0;
157 }
158 ((void (*)(val*, val*, long, long))(var14->class->vft[COLOR_string_search__Match__init]))(var14, var_s, var_i, var16) /* init on <var14:Match>*/;
159 ((void (*)(val*, val*))(var_res->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_res, var14) /* add on <var_res:Array[Match]>*/;
160 var = var_res;
161 goto RET_LABEL;
162 RET_LABEL:;
163 return var;
164 }
165 /* method string_search#Pattern#split_in for (self: Object, String): Array[Match] */
166 val* VIRTUAL_string_search__Pattern__split_in(val* self, val* p0) {
167 val* var /* : Array[Match] */;
168 val* var1 /* : Array[Match] */;
169 var1 = string_search__Pattern__split_in(self, p0);
170 var = var1;
171 RET_LABEL:;
172 return var;
173 }
174 /* method string_search#BM_Pattern#to_s for (self: BM_Pattern): String */
175 val* string_search__BM_Pattern__to_s(val* self) {
176 val* var /* : String */;
177 val* var1 /* : String */;
178 var1 = self->attrs[COLOR_string_search__BM_Pattern___motif].val; /* _motif on <self:BM_Pattern> */
179 if (var1 == NULL) {
180 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _motif");
181 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 67);
182 show_backtrace(1);
183 }
184 var = var1;
185 goto RET_LABEL;
186 RET_LABEL:;
187 return var;
188 }
189 /* method string_search#BM_Pattern#to_s for (self: Object): String */
190 val* VIRTUAL_string_search__BM_Pattern__to_s(val* self) {
191 val* var /* : String */;
192 val* var1 /* : String */;
193 var1 = string_search__BM_Pattern__to_s(self);
194 var = var1;
195 RET_LABEL:;
196 return var;
197 }
198 /* method string_search#BM_Pattern#search_index_in for (self: BM_Pattern, String, Int): Int */
199 long string_search__BM_Pattern__search_index_in(val* self, val* p0, long p1) {
200 long var /* : Int */;
201 val* var_s /* var s: String */;
202 long var_from /* var from: Int */;
203 long var1 /* : Int */;
204 short int var2 /* : Bool */;
205 short int var4 /* : Bool */;
206 int cltype;
207 int idtype;
208 const char* var_class_name;
209 short int var5 /* : Bool */;
210 long var6 /* : Int */;
211 long var_n /* var n: Int */;
212 long var7 /* : Int */;
213 long var_m /* var m: Int */;
214 long var_j /* var j: Int */;
215 long var8 /* : Int */;
216 long var10 /* : Int */;
217 long var11 /* : Int */;
218 long var12 /* : Int */;
219 long var14 /* : Int */;
220 short int var15 /* : Bool */;
221 short int var17 /* : Bool */;
222 int cltype18;
223 int idtype19;
224 const char* var_class_name20;
225 short int var21 /* : Bool */;
226 long var22 /* : Int */;
227 long var23 /* : Int */;
228 long var25 /* : Int */;
229 long var_i /* var i: Int */;
230 short int var26 /* : Bool */;
231 long var27 /* : Int */;
232 short int var28 /* : Bool */;
233 short int var30 /* : Bool */;
234 int cltype31;
235 int idtype32;
236 const char* var_class_name33;
237 short int var34 /* : Bool */;
238 short int var_ /* var : Bool */;
239 val* var35 /* : String */;
240 val* var36 /* : nullable Object */;
241 long var37 /* : Int */;
242 long var39 /* : Int */;
243 val* var40 /* : nullable Object */;
244 short int var41 /* : Bool */;
245 short int var43 /* : Bool */;
246 long var44 /* : Int */;
247 long var45 /* : Int */;
248 long var47 /* : Int */;
249 long var48 /* : Int */;
250 short int var49 /* : Bool */;
251 short int var51 /* : Bool */;
252 int cltype52;
253 int idtype53;
254 const char* var_class_name54;
255 short int var55 /* : Bool */;
256 val* var56 /* : Array[Int] */;
257 val* var57 /* : nullable Object */;
258 long var58 /* : Int */;
259 long var_gs /* var gs: Int */;
260 long var59 /* : Int */;
261 long var61 /* : Int */;
262 val* var62 /* : nullable Object */;
263 long var63 /* : Int */;
264 char var64 /* : Char */;
265 long var65 /* : Int */;
266 long var67 /* : Int */;
267 long var68 /* : Int */;
268 long var69 /* : Int */;
269 long var71 /* : Int */;
270 long var72 /* : Int */;
271 long var74 /* : Int */;
272 long var_bc /* var bc: Int */;
273 short int var75 /* : Bool */;
274 short int var77 /* : Bool */;
275 int cltype78;
276 int idtype79;
277 const char* var_class_name80;
278 short int var81 /* : Bool */;
279 long var82 /* : Int */;
280 long var84 /* : Int */;
281 long var85 /* : Int */;
282 long var87 /* : Int */;
283 long var89 /* : Int */;
284 long var90 /* : Int */;
285 long var92 /* : Int */;
286 var_s = p0;
287 var_from = p1;
288 var1 = 0;
289 { /* Inline kernel#Int#>= (var_from,var1) */
290 /* Covariant cast for argument 0 (i) <var1:Int> isa OTHER */
291 /* <var1:Int> isa OTHER */
292 var4 = 1; /* easy <var1:Int> isa OTHER*/
293 if (!var4) {
294 var_class_name = type_kernel__Int.name;
295 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
296 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
297 show_backtrace(1);
298 }
299 var5 = var_from >= var1;
300 var2 = var5;
301 goto RET_LABEL3;
302 RET_LABEL3:(void)0;
303 }
304 if (!var2) {
305 fprintf(stderr, "Runtime error: %s", "Assert failed");
306 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 72);
307 show_backtrace(1);
308 }
309 var6 = ((long (*)(val*))(var_s->class->vft[COLOR_abstract_collection__Collection__length]))(var_s) /* length on <var_s:String>*/;
310 var_n = var6;
311 var7 = self->attrs[COLOR_string_search__BM_Pattern___length].l; /* _length on <self:BM_Pattern> */
312 var_m = var7;
313 var_j = var_from;
314 for(;;) {
315 { /* Inline kernel#Int#- (var_n,var_m) */
316 var10 = var_n - var_m;
317 var8 = var10;
318 goto RET_LABEL9;
319 RET_LABEL9:(void)0;
320 }
321 var11 = 1;
322 { /* Inline kernel#Int#+ (var8,var11) */
323 var14 = var8 + var11;
324 var12 = var14;
325 goto RET_LABEL13;
326 RET_LABEL13:(void)0;
327 }
328 { /* Inline kernel#Int#< (var_j,var12) */
329 /* Covariant cast for argument 0 (i) <var12:Int> isa OTHER */
330 /* <var12:Int> isa OTHER */
331 var17 = 1; /* easy <var12:Int> isa OTHER*/
332 if (!var17) {
333 var_class_name20 = type_kernel__Int.name;
334 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name20);
335 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
336 show_backtrace(1);
337 }
338 var21 = var_j < var12;
339 var15 = var21;
340 goto RET_LABEL16;
341 RET_LABEL16:(void)0;
342 }
343 if (!var15) break;
344 var22 = 1;
345 { /* Inline kernel#Int#- (var_m,var22) */
346 var25 = var_m - var22;
347 var23 = var25;
348 goto RET_LABEL24;
349 RET_LABEL24:(void)0;
350 }
351 var_i = var23;
352 for(;;) {
353 var27 = 0;
354 { /* Inline kernel#Int#>= (var_i,var27) */
355 /* Covariant cast for argument 0 (i) <var27:Int> isa OTHER */
356 /* <var27:Int> isa OTHER */
357 var30 = 1; /* easy <var27:Int> isa OTHER*/
358 if (!var30) {
359 var_class_name33 = type_kernel__Int.name;
360 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name33);
361 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
362 show_backtrace(1);
363 }
364 var34 = var_i >= var27;
365 var28 = var34;
366 goto RET_LABEL29;
367 RET_LABEL29:(void)0;
368 }
369 var_ = var28;
370 if (var28){
371 var35 = self->attrs[COLOR_string_search__BM_Pattern___motif].val; /* _motif on <self:BM_Pattern> */
372 if (var35 == NULL) {
373 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _motif");
374 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 79);
375 show_backtrace(1);
376 }
377 var36 = ((val* (*)(val*, long))(var35->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var35, var_i) /* [] on <var35:String>*/;
378 { /* Inline kernel#Int#+ (var_i,var_j) */
379 var39 = var_i + var_j;
380 var37 = var39;
381 goto RET_LABEL38;
382 RET_LABEL38:(void)0;
383 }
384 var40 = ((val* (*)(val*, long))(var_s->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_s, var37) /* [] on <var_s:String>*/;
385 { /* Inline kernel#Char#== (var36,var40) */
386 var43 = var36 == var40 || (((struct instance_kernel__Char*)var36)->value == ((struct instance_kernel__Char*)var40)->value);
387 var41 = var43;
388 goto RET_LABEL42;
389 RET_LABEL42:(void)0;
390 }
391 var26 = var41;
392 } else {
393 var26 = var_;
394 }
395 if (!var26) break;
396 var44 = 1;
397 { /* Inline kernel#Int#- (var_i,var44) */
398 var47 = var_i - var44;
399 var45 = var47;
400 goto RET_LABEL46;
401 RET_LABEL46:(void)0;
402 }
403 var_i = var45;
404 CONTINUE_label: (void)0;
405 }
406 BREAK_label: (void)0;
407 var48 = 0;
408 { /* Inline kernel#Int#< (var_i,var48) */
409 /* Covariant cast for argument 0 (i) <var48:Int> isa OTHER */
410 /* <var48:Int> isa OTHER */
411 var51 = 1; /* easy <var48:Int> isa OTHER*/
412 if (!var51) {
413 var_class_name54 = type_kernel__Int.name;
414 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name54);
415 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
416 show_backtrace(1);
417 }
418 var55 = var_i < var48;
419 var49 = var55;
420 goto RET_LABEL50;
421 RET_LABEL50:(void)0;
422 }
423 if (var49){
424 var = var_j;
425 goto RET_LABEL;
426 } else {
427 var56 = self->attrs[COLOR_string_search__BM_Pattern___gs].val; /* _gs on <self:BM_Pattern> */
428 if (var56 == NULL) {
429 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _gs");
430 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 83);
431 show_backtrace(1);
432 }
433 var57 = ((val* (*)(val*, long))(var56->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var56, var_i) /* [] on <var56:Array[Int]>*/;
434 var58 = ((struct instance_kernel__Int*)var57)->value; /* autounbox from nullable Object to Int */;
435 var_gs = var58;
436 { /* Inline kernel#Int#+ (var_i,var_j) */
437 var61 = var_i + var_j;
438 var59 = var61;
439 goto RET_LABEL60;
440 RET_LABEL60:(void)0;
441 }
442 var62 = ((val* (*)(val*, long))(var_s->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_s, var59) /* [] on <var_s:String>*/;
443 var64 = ((struct instance_kernel__Char*)var62)->value; /* autounbox from nullable Object to Char */;
444 var63 = ((long (*)(val*, char))(self->class->vft[COLOR_string_search__BM_Pattern__bc]))(self, var64) /* bc on <self:BM_Pattern>*/;
445 { /* Inline kernel#Int#- (var63,var_m) */
446 var67 = var63 - var_m;
447 var65 = var67;
448 goto RET_LABEL66;
449 RET_LABEL66:(void)0;
450 }
451 var68 = 1;
452 { /* Inline kernel#Int#+ (var65,var68) */
453 var71 = var65 + var68;
454 var69 = var71;
455 goto RET_LABEL70;
456 RET_LABEL70:(void)0;
457 }
458 { /* Inline kernel#Int#+ (var69,var_i) */
459 var74 = var69 + var_i;
460 var72 = var74;
461 goto RET_LABEL73;
462 RET_LABEL73:(void)0;
463 }
464 var_bc = var72;
465 { /* Inline kernel#Int#> (var_gs,var_bc) */
466 /* Covariant cast for argument 0 (i) <var_bc:Int> isa OTHER */
467 /* <var_bc:Int> isa OTHER */
468 var77 = 1; /* easy <var_bc:Int> isa OTHER*/
469 if (!var77) {
470 var_class_name80 = type_kernel__Int.name;
471 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name80);
472 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 263);
473 show_backtrace(1);
474 }
475 var81 = var_gs > var_bc;
476 var75 = var81;
477 goto RET_LABEL76;
478 RET_LABEL76:(void)0;
479 }
480 if (var75){
481 { /* Inline kernel#Int#+ (var_j,var_gs) */
482 var84 = var_j + var_gs;
483 var82 = var84;
484 goto RET_LABEL83;
485 RET_LABEL83:(void)0;
486 }
487 var_j = var82;
488 } else {
489 { /* Inline kernel#Int#+ (var_j,var_bc) */
490 var87 = var_j + var_bc;
491 var85 = var87;
492 goto RET_LABEL86;
493 RET_LABEL86:(void)0;
494 }
495 var_j = var85;
496 }
497 }
498 CONTINUE_label88: (void)0;
499 }
500 BREAK_label88: (void)0;
501 var89 = 1;
502 { /* Inline kernel#Int#unary - (var89) */
503 var92 = -var89;
504 var90 = var92;
505 goto RET_LABEL91;
506 RET_LABEL91:(void)0;
507 }
508 var = var90;
509 goto RET_LABEL;
510 RET_LABEL:;
511 return var;
512 }
513 /* method string_search#BM_Pattern#search_index_in for (self: Object, String, Int): Int */
514 long VIRTUAL_string_search__BM_Pattern__search_index_in(val* self, val* p0, long p1) {
515 long var /* : Int */;
516 long var1 /* : Int */;
517 var1 = string_search__BM_Pattern__search_index_in(self, p0, p1);
518 var = var1;
519 RET_LABEL:;
520 return var;
521 }
522 /* method string_search#BM_Pattern#search_in for (self: BM_Pattern, String, Int): nullable Match */
523 val* string_search__BM_Pattern__search_in(val* self, val* p0, long p1) {
524 val* var /* : nullable Match */;
525 val* var_s /* var s: String */;
526 long var_from /* var from: Int */;
527 long var1 /* : Int */;
528 long var_to /* var to: Int */;
529 long var2 /* : Int */;
530 short int var3 /* : Bool */;
531 short int var5 /* : Bool */;
532 int cltype;
533 int idtype;
534 const char* var_class_name;
535 short int var6 /* : Bool */;
536 val* var7 /* : null */;
537 val* var8 /* : Match */;
538 long var9 /* : Int */;
539 var_s = p0;
540 var_from = p1;
541 var1 = ((long (*)(val*, val*, long))(self->class->vft[COLOR_string_search__Pattern__search_index_in]))(self, var_s, var_from) /* search_index_in on <self:BM_Pattern>*/;
542 var_to = var1;
543 var2 = 0;
544 { /* Inline kernel#Int#< (var_to,var2) */
545 /* Covariant cast for argument 0 (i) <var2:Int> isa OTHER */
546 /* <var2:Int> isa OTHER */
547 var5 = 1; /* easy <var2:Int> isa OTHER*/
548 if (!var5) {
549 var_class_name = type_kernel__Int.name;
550 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
551 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
552 show_backtrace(1);
553 }
554 var6 = var_to < var2;
555 var3 = var6;
556 goto RET_LABEL4;
557 RET_LABEL4:(void)0;
558 }
559 if (var3){
560 var7 = NULL;
561 var = var7;
562 goto RET_LABEL;
563 } else {
564 var8 = NEW_string_search__Match(&type_string_search__Match);
565 var9 = self->attrs[COLOR_string_search__BM_Pattern___length].l; /* _length on <self:BM_Pattern> */
566 ((void (*)(val*, val*, long, long))(var8->class->vft[COLOR_string_search__Match__init]))(var8, var_s, var_to, var9) /* init on <var8:Match>*/;
567 var = var8;
568 goto RET_LABEL;
569 }
570 RET_LABEL:;
571 return var;
572 }
573 /* method string_search#BM_Pattern#search_in for (self: Object, String, Int): nullable Match */
574 val* VIRTUAL_string_search__BM_Pattern__search_in(val* self, val* p0, long p1) {
575 val* var /* : nullable Match */;
576 val* var1 /* : nullable Match */;
577 var1 = string_search__BM_Pattern__search_in(self, p0, p1);
578 var = var1;
579 RET_LABEL:;
580 return var;
581 }
582 /* method string_search#BM_Pattern#init for (self: BM_Pattern, String) */
583 void string_search__BM_Pattern__init(val* self, val* p0) {
584 val* var_motif /* var motif: String */;
585 long var /* : Int */;
586 val* var1 /* : Array[Int] */;
587 long var2 /* : Int */;
588 val* var3 /* : ArrayMap[Char, Int] */;
589 var_motif = p0;
590 self->attrs[COLOR_string_search__BM_Pattern___motif].val = var_motif; /* _motif on <self:BM_Pattern> */
591 var = ((long (*)(val*))(var_motif->class->vft[COLOR_abstract_collection__Collection__length]))(var_motif) /* length on <var_motif:String>*/;
592 self->attrs[COLOR_string_search__BM_Pattern___length].l = var; /* _length on <self:BM_Pattern> */
593 var1 = NEW_array__Array(&type_array__Arraykernel__Int);
594 var2 = self->attrs[COLOR_string_search__BM_Pattern___length].l; /* _length on <self:BM_Pattern> */
595 ((void (*)(val*, long))(var1->class->vft[COLOR_array__Array__with_capacity]))(var1, var2) /* with_capacity on <var1:Array[Int]>*/;
596 self->attrs[COLOR_string_search__BM_Pattern___gs].val = var1; /* _gs on <self:BM_Pattern> */
597 var3 = NEW_array__ArrayMap(&type_array__ArrayMapkernel__Charkernel__Int);
598 ((void (*)(val*))(var3->class->vft[COLOR_array__ArrayMap__init]))(var3) /* init on <var3:ArrayMap[Char, Int]>*/;
599 self->attrs[COLOR_string_search__BM_Pattern___bc_table].val = var3; /* _bc_table on <self:BM_Pattern> */
600 ((void (*)(val*))(self->class->vft[COLOR_string_search__BM_Pattern__compute_gs]))(self) /* compute_gs on <self:BM_Pattern>*/;
601 ((void (*)(val*))(self->class->vft[COLOR_string_search__BM_Pattern__compute_bc]))(self) /* compute_bc on <self:BM_Pattern>*/;
602 RET_LABEL:;
603 }
604 /* method string_search#BM_Pattern#init for (self: Object, String) */
605 void VIRTUAL_string_search__BM_Pattern__init(val* self, val* p0) {
606 string_search__BM_Pattern__init(self, p0);
607 RET_LABEL:;
608 }
609 /* method string_search#BM_Pattern#bc for (self: BM_Pattern, Char): Int */
610 long string_search__BM_Pattern__bc(val* self, char p0) {
611 long var /* : Int */;
612 char var_e /* var e: Char */;
613 val* var1 /* : Map[Char, Int] */;
614 short int var2 /* : Bool */;
615 val* var3 /* : Object */;
616 val* var4 /* : Map[Char, Int] */;
617 val* var5 /* : nullable Object */;
618 val* var6 /* : Object */;
619 long var7 /* : Int */;
620 long var8 /* : Int */;
621 var_e = p0;
622 var1 = self->attrs[COLOR_string_search__BM_Pattern___bc_table].val; /* _bc_table on <self:BM_Pattern> */
623 if (var1 == NULL) {
624 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _bc_table");
625 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 126);
626 show_backtrace(1);
627 }
628 var3 = BOX_kernel__Char(var_e); /* autobox from Char to Object */
629 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var1, var3) /* has_key on <var1:Map[Char, Int]>*/;
630 if (var2){
631 var4 = self->attrs[COLOR_string_search__BM_Pattern___bc_table].val; /* _bc_table on <self:BM_Pattern> */
632 if (var4 == NULL) {
633 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _bc_table");
634 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 127);
635 show_backtrace(1);
636 }
637 var6 = BOX_kernel__Char(var_e); /* autobox from Char to Object */
638 var5 = ((val* (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var4, var6) /* [] on <var4:Map[Char, Int]>*/;
639 var7 = ((struct instance_kernel__Int*)var5)->value; /* autounbox from nullable Object to Int */;
640 var = var7;
641 goto RET_LABEL;
642 } else {
643 var8 = self->attrs[COLOR_string_search__BM_Pattern___length].l; /* _length on <self:BM_Pattern> */
644 var = var8;
645 goto RET_LABEL;
646 }
647 RET_LABEL:;
648 return var;
649 }
650 /* method string_search#BM_Pattern#bc for (self: Object, Char): Int */
651 long VIRTUAL_string_search__BM_Pattern__bc(val* self, char p0) {
652 long var /* : Int */;
653 long var1 /* : Int */;
654 var1 = string_search__BM_Pattern__bc(self, p0);
655 var = var1;
656 RET_LABEL:;
657 return var;
658 }
659 /* method string_search#BM_Pattern#compute_bc for (self: BM_Pattern) */
660 void string_search__BM_Pattern__compute_bc(val* self) {
661 val* var /* : String */;
662 val* var_x /* var x: String */;
663 long var1 /* : Int */;
664 long var_m /* var m: Int */;
665 long var2 /* : Int */;
666 long var_i /* var i: Int */;
667 long var3 /* : Int */;
668 long var4 /* : Int */;
669 long var6 /* : Int */;
670 short int var7 /* : Bool */;
671 short int var9 /* : Bool */;
672 int cltype;
673 int idtype;
674 const char* var_class_name;
675 short int var10 /* : Bool */;
676 val* var11 /* : Map[Char, Int] */;
677 val* var12 /* : nullable Object */;
678 long var13 /* : Int */;
679 long var15 /* : Int */;
680 long var16 /* : Int */;
681 long var17 /* : Int */;
682 long var19 /* : Int */;
683 val* var20 /* : nullable Object */;
684 long var21 /* : Int */;
685 long var22 /* : Int */;
686 long var24 /* : Int */;
687 var = self->attrs[COLOR_string_search__BM_Pattern___motif].val; /* _motif on <self:BM_Pattern> */
688 if (var == NULL) {
689 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _motif");
690 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 141);
691 show_backtrace(1);
692 }
693 var_x = var;
694 var1 = self->attrs[COLOR_string_search__BM_Pattern___length].l; /* _length on <self:BM_Pattern> */
695 var_m = var1;
696 var2 = 0;
697 var_i = var2;
698 for(;;) {
699 var3 = 1;
700 { /* Inline kernel#Int#- (var_m,var3) */
701 var6 = var_m - var3;
702 var4 = var6;
703 goto RET_LABEL5;
704 RET_LABEL5:(void)0;
705 }
706 { /* Inline kernel#Int#< (var_i,var4) */
707 /* Covariant cast for argument 0 (i) <var4:Int> isa OTHER */
708 /* <var4:Int> isa OTHER */
709 var9 = 1; /* easy <var4:Int> isa OTHER*/
710 if (!var9) {
711 var_class_name = type_kernel__Int.name;
712 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
713 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
714 show_backtrace(1);
715 }
716 var10 = var_i < var4;
717 var7 = var10;
718 goto RET_LABEL8;
719 RET_LABEL8:(void)0;
720 }
721 if (!var7) break;
722 var11 = self->attrs[COLOR_string_search__BM_Pattern___bc_table].val; /* _bc_table on <self:BM_Pattern> */
723 if (var11 == NULL) {
724 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _bc_table");
725 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 145);
726 show_backtrace(1);
727 }
728 var12 = ((val* (*)(val*, long))(var_x->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_x, var_i) /* [] on <var_x:String>*/;
729 { /* Inline kernel#Int#- (var_m,var_i) */
730 var15 = var_m - var_i;
731 var13 = var15;
732 goto RET_LABEL14;
733 RET_LABEL14:(void)0;
734 }
735 var16 = 1;
736 { /* Inline kernel#Int#- (var13,var16) */
737 var19 = var13 - var16;
738 var17 = var19;
739 goto RET_LABEL18;
740 RET_LABEL18:(void)0;
741 }
742 var20 = BOX_kernel__Int(var17); /* autobox from Int to nullable Object */
743 ((void (*)(val*, val*, val*))(var11->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var11, var12, var20) /* []= on <var11:Map[Char, Int]>*/;
744 var21 = 1;
745 { /* Inline kernel#Int#+ (var_i,var21) */
746 var24 = var_i + var21;
747 var22 = var24;
748 goto RET_LABEL23;
749 RET_LABEL23:(void)0;
750 }
751 var_i = var22;
752 CONTINUE_label: (void)0;
753 }
754 BREAK_label: (void)0;
755 RET_LABEL:;
756 }
757 /* method string_search#BM_Pattern#compute_bc for (self: Object) */
758 void VIRTUAL_string_search__BM_Pattern__compute_bc(val* self) {
759 string_search__BM_Pattern__compute_bc(self);
760 RET_LABEL:;
761 }
762 /* method string_search#BM_Pattern#suffixes for (self: BM_Pattern): Array[Int] */
763 val* string_search__BM_Pattern__suffixes(val* self) {
764 val* var /* : Array[Int] */;
765 val* var1 /* : String */;
766 val* var_x /* var x: String */;
767 long var2 /* : Int */;
768 long var_m /* var m: Int */;
769 val* var3 /* : Array[Int] */;
770 val* var4 /* : nullable Object */;
771 val* var_suff /* var suff: Array[Int] */;
772 long var5 /* : Int */;
773 long var_f /* var f: Int */;
774 long var6 /* : Int */;
775 long var7 /* : Int */;
776 long var9 /* : Int */;
777 long var_g /* var g: Int */;
778 long var10 /* : Int */;
779 long var11 /* : Int */;
780 long var13 /* : Int */;
781 long var_i /* var i: Int */;
782 long var14 /* : Int */;
783 short int var15 /* : Bool */;
784 short int var17 /* : Bool */;
785 int cltype;
786 int idtype;
787 const char* var_class_name;
788 short int var18 /* : Bool */;
789 short int var19 /* : Bool */;
790 short int var20 /* : Bool */;
791 short int var22 /* : Bool */;
792 int cltype23;
793 int idtype24;
794 const char* var_class_name25;
795 short int var26 /* : Bool */;
796 short int var_ /* var : Bool */;
797 long var27 /* : Int */;
798 long var29 /* : Int */;
799 long var30 /* : Int */;
800 long var31 /* : Int */;
801 long var33 /* : Int */;
802 long var34 /* : Int */;
803 long var36 /* : Int */;
804 val* var37 /* : nullable Object */;
805 long var38 /* : Int */;
806 long var40 /* : Int */;
807 short int var41 /* : Bool */;
808 short int var43 /* : Bool */;
809 int cltype44;
810 int idtype45;
811 const char* var_class_name46;
812 long var47 /* : Int */;
813 short int var48 /* : Bool */;
814 long var49 /* : Int */;
815 long var51 /* : Int */;
816 long var52 /* : Int */;
817 long var53 /* : Int */;
818 long var55 /* : Int */;
819 long var56 /* : Int */;
820 long var58 /* : Int */;
821 val* var59 /* : nullable Object */;
822 short int var60 /* : Bool */;
823 short int var62 /* : Bool */;
824 int cltype63;
825 int idtype64;
826 const char* var_class_name65;
827 short int var66 /* : Bool */;
828 short int var67 /* : Bool */;
829 long var68 /* : Int */;
830 short int var69 /* : Bool */;
831 short int var71 /* : Bool */;
832 int cltype72;
833 int idtype73;
834 const char* var_class_name74;
835 short int var75 /* : Bool */;
836 short int var_76 /* var : Bool */;
837 val* var77 /* : nullable Object */;
838 long var78 /* : Int */;
839 long var80 /* : Int */;
840 long var81 /* : Int */;
841 long var82 /* : Int */;
842 long var84 /* : Int */;
843 long var85 /* : Int */;
844 long var87 /* : Int */;
845 val* var88 /* : nullable Object */;
846 short int var89 /* : Bool */;
847 short int var91 /* : Bool */;
848 long var92 /* : Int */;
849 long var93 /* : Int */;
850 long var95 /* : Int */;
851 long var96 /* : Int */;
852 long var98 /* : Int */;
853 val* var99 /* : nullable Object */;
854 long var100 /* : Int */;
855 long var101 /* : Int */;
856 long var103 /* : Int */;
857 var1 = self->attrs[COLOR_string_search__BM_Pattern___motif].val; /* _motif on <self:BM_Pattern> */
858 if (var1 == NULL) {
859 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _motif");
860 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 152);
861 show_backtrace(1);
862 }
863 var_x = var1;
864 var2 = self->attrs[COLOR_string_search__BM_Pattern___length].l; /* _length on <self:BM_Pattern> */
865 var_m = var2;
866 var3 = NEW_array__Array(&type_array__Arraykernel__Int);
867 var4 = BOX_kernel__Int(var_m); /* autobox from Int to nullable Object */
868 ((void (*)(val*, val*, long))(var3->class->vft[COLOR_array__Array__filled_with]))(var3, var4, var_m) /* filled_with on <var3:Array[Int]>*/;
869 var_suff = var3;
870 var5 = 0;
871 var_f = var5;
872 var6 = 1;
873 { /* Inline kernel#Int#- (var_m,var6) */
874 var9 = var_m - var6;
875 var7 = var9;
876 goto RET_LABEL8;
877 RET_LABEL8:(void)0;
878 }
879 var_g = var7;
880 var10 = 2;
881 { /* Inline kernel#Int#- (var_m,var10) */
882 var13 = var_m - var10;
883 var11 = var13;
884 goto RET_LABEL12;
885 RET_LABEL12:(void)0;
886 }
887 var_i = var11;
888 for(;;) {
889 var14 = 0;
890 { /* Inline kernel#Int#>= (var_i,var14) */
891 /* Covariant cast for argument 0 (i) <var14:Int> isa OTHER */
892 /* <var14:Int> isa OTHER */
893 var17 = 1; /* easy <var14:Int> isa OTHER*/
894 if (!var17) {
895 var_class_name = type_kernel__Int.name;
896 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
897 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
898 show_backtrace(1);
899 }
900 var18 = var_i >= var14;
901 var15 = var18;
902 goto RET_LABEL16;
903 RET_LABEL16:(void)0;
904 }
905 if (!var15) break;
906 { /* Inline kernel#Int#> (var_i,var_g) */
907 /* Covariant cast for argument 0 (i) <var_g:Int> isa OTHER */
908 /* <var_g:Int> isa OTHER */
909 var22 = 1; /* easy <var_g:Int> isa OTHER*/
910 if (!var22) {
911 var_class_name25 = type_kernel__Int.name;
912 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name25);
913 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 263);
914 show_backtrace(1);
915 }
916 var26 = var_i > var_g;
917 var20 = var26;
918 goto RET_LABEL21;
919 RET_LABEL21:(void)0;
920 }
921 var_ = var20;
922 if (var20){
923 { /* Inline kernel#Int#+ (var_i,var_m) */
924 var29 = var_i + var_m;
925 var27 = var29;
926 goto RET_LABEL28;
927 RET_LABEL28:(void)0;
928 }
929 var30 = 1;
930 { /* Inline kernel#Int#- (var27,var30) */
931 var33 = var27 - var30;
932 var31 = var33;
933 goto RET_LABEL32;
934 RET_LABEL32:(void)0;
935 }
936 { /* Inline kernel#Int#- (var31,var_f) */
937 var36 = var31 - var_f;
938 var34 = var36;
939 goto RET_LABEL35;
940 RET_LABEL35:(void)0;
941 }
942 var37 = ((val* (*)(val*, long))(var_suff->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_suff, var34) /* [] on <var_suff:Array[Int]>*/;
943 { /* Inline kernel#Int#- (var_i,var_g) */
944 var40 = var_i - var_g;
945 var38 = var40;
946 goto RET_LABEL39;
947 RET_LABEL39:(void)0;
948 }
949 { /* Inline kernel#Int#< (var37,var38) */
950 /* Covariant cast for argument 0 (i) <var38:Int> isa OTHER */
951 /* <var38:Int> isa OTHER */
952 var43 = 1; /* easy <var38:Int> isa OTHER*/
953 if (!var43) {
954 var_class_name46 = type_kernel__Int.name;
955 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name46);
956 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
957 show_backtrace(1);
958 }
959 var47 = ((struct instance_kernel__Int*)var37)->value; /* autounbox from nullable Object to Int */;
960 var48 = var47 < var38;
961 var41 = var48;
962 goto RET_LABEL42;
963 RET_LABEL42:(void)0;
964 }
965 var19 = var41;
966 } else {
967 var19 = var_;
968 }
969 if (var19){
970 { /* Inline kernel#Int#+ (var_i,var_m) */
971 var51 = var_i + var_m;
972 var49 = var51;
973 goto RET_LABEL50;
974 RET_LABEL50:(void)0;
975 }
976 var52 = 1;
977 { /* Inline kernel#Int#- (var49,var52) */
978 var55 = var49 - var52;
979 var53 = var55;
980 goto RET_LABEL54;
981 RET_LABEL54:(void)0;
982 }
983 { /* Inline kernel#Int#- (var53,var_f) */
984 var58 = var53 - var_f;
985 var56 = var58;
986 goto RET_LABEL57;
987 RET_LABEL57:(void)0;
988 }
989 var59 = ((val* (*)(val*, long))(var_suff->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_suff, var56) /* [] on <var_suff:Array[Int]>*/;
990 ((void (*)(val*, long, val*))(var_suff->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_suff, var_i, var59) /* []= on <var_suff:Array[Int]>*/;
991 } else {
992 { /* Inline kernel#Int#< (var_i,var_g) */
993 /* Covariant cast for argument 0 (i) <var_g:Int> isa OTHER */
994 /* <var_g:Int> isa OTHER */
995 var62 = 1; /* easy <var_g:Int> isa OTHER*/
996 if (!var62) {
997 var_class_name65 = type_kernel__Int.name;
998 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name65);
999 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
1000 show_backtrace(1);
1001 }
1002 var66 = var_i < var_g;
1003 var60 = var66;
1004 goto RET_LABEL61;
1005 RET_LABEL61:(void)0;
1006 }
1007 if (var60){
1008 var_g = var_i;
1009 } else {
1010 }
1011 var_f = var_i;
1012 for(;;) {
1013 var68 = 0;
1014 { /* Inline kernel#Int#>= (var_g,var68) */
1015 /* Covariant cast for argument 0 (i) <var68:Int> isa OTHER */
1016 /* <var68:Int> isa OTHER */
1017 var71 = 1; /* easy <var68:Int> isa OTHER*/
1018 if (!var71) {
1019 var_class_name74 = type_kernel__Int.name;
1020 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name74);
1021 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
1022 show_backtrace(1);
1023 }
1024 var75 = var_g >= var68;
1025 var69 = var75;
1026 goto RET_LABEL70;
1027 RET_LABEL70:(void)0;
1028 }
1029 var_76 = var69;
1030 if (var69){
1031 var77 = ((val* (*)(val*, long))(var_x->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_x, var_g) /* [] on <var_x:String>*/;
1032 { /* Inline kernel#Int#+ (var_g,var_m) */
1033 var80 = var_g + var_m;
1034 var78 = var80;
1035 goto RET_LABEL79;
1036 RET_LABEL79:(void)0;
1037 }
1038 var81 = 1;
1039 { /* Inline kernel#Int#- (var78,var81) */
1040 var84 = var78 - var81;
1041 var82 = var84;
1042 goto RET_LABEL83;
1043 RET_LABEL83:(void)0;
1044 }
1045 { /* Inline kernel#Int#- (var82,var_f) */
1046 var87 = var82 - var_f;
1047 var85 = var87;
1048 goto RET_LABEL86;
1049 RET_LABEL86:(void)0;
1050 }
1051 var88 = ((val* (*)(val*, long))(var_x->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_x, var85) /* [] on <var_x:String>*/;
1052 { /* Inline kernel#Char#== (var77,var88) */
1053 var91 = var77 == var88 || (((struct instance_kernel__Char*)var77)->value == ((struct instance_kernel__Char*)var88)->value);
1054 var89 = var91;
1055 goto RET_LABEL90;
1056 RET_LABEL90:(void)0;
1057 }
1058 var67 = var89;
1059 } else {
1060 var67 = var_76;
1061 }
1062 if (!var67) break;
1063 var92 = 1;
1064 { /* Inline kernel#Int#- (var_g,var92) */
1065 var95 = var_g - var92;
1066 var93 = var95;
1067 goto RET_LABEL94;
1068 RET_LABEL94:(void)0;
1069 }
1070 var_g = var93;
1071 CONTINUE_label: (void)0;
1072 }
1073 BREAK_label: (void)0;
1074 { /* Inline kernel#Int#- (var_f,var_g) */
1075 var98 = var_f - var_g;
1076 var96 = var98;
1077 goto RET_LABEL97;
1078 RET_LABEL97:(void)0;
1079 }
1080 var99 = BOX_kernel__Int(var96); /* autobox from Int to nullable Object */
1081 ((void (*)(val*, long, val*))(var_suff->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_suff, var_i, var99) /* []= on <var_suff:Array[Int]>*/;
1082 }
1083 var100 = 1;
1084 { /* Inline kernel#Int#- (var_i,var100) */
1085 var103 = var_i - var100;
1086 var101 = var103;
1087 goto RET_LABEL102;
1088 RET_LABEL102:(void)0;
1089 }
1090 var_i = var101;
1091 CONTINUE_label104: (void)0;
1092 }
1093 BREAK_label104: (void)0;
1094 var = var_suff;
1095 goto RET_LABEL;
1096 RET_LABEL:;
1097 return var;
1098 }
1099 /* method string_search#BM_Pattern#suffixes for (self: Object): Array[Int] */
1100 val* VIRTUAL_string_search__BM_Pattern__suffixes(val* self) {
1101 val* var /* : Array[Int] */;
1102 val* var1 /* : Array[Int] */;
1103 var1 = string_search__BM_Pattern__suffixes(self);
1104 var = var1;
1105 RET_LABEL:;
1106 return var;
1107 }
1108 /* method string_search#BM_Pattern#compute_gs for (self: BM_Pattern) */
1109 void string_search__BM_Pattern__compute_gs(val* self) {
1110 val* var /* : String */;
1111 val* var_x /* var x: String */;
1112 long var1 /* : Int */;
1113 long var_m /* var m: Int */;
1114 val* var2 /* : Array[Int] */;
1115 val* var_suff /* var suff: Array[Int] */;
1116 long var3 /* : Int */;
1117 long var_i /* var i: Int */;
1118 short int var4 /* : Bool */;
1119 short int var6 /* : Bool */;
1120 int cltype;
1121 int idtype;
1122 const char* var_class_name;
1123 short int var7 /* : Bool */;
1124 val* var8 /* : Array[Int] */;
1125 val* var9 /* : nullable Object */;
1126 long var10 /* : Int */;
1127 long var11 /* : Int */;
1128 long var13 /* : Int */;
1129 long var14 /* : Int */;
1130 long var_j /* var j: Int */;
1131 long var15 /* : Int */;
1132 long var16 /* : Int */;
1133 long var18 /* : Int */;
1134 long var19 /* : Int */;
1135 long var20 /* : Int */;
1136 long var22 /* : Int */;
1137 short int var23 /* : Bool */;
1138 short int var25 /* : Bool */;
1139 int cltype26;
1140 int idtype27;
1141 const char* var_class_name28;
1142 short int var29 /* : Bool */;
1143 short int var30 /* : Bool */;
1144 long var31 /* : Int */;
1145 long var32 /* : Int */;
1146 long var34 /* : Int */;
1147 short int var35 /* : Bool */;
1148 short int var37 /* : Bool */;
1149 short int var_ /* var : Bool */;
1150 val* var38 /* : nullable Object */;
1151 long var39 /* : Int */;
1152 long var40 /* : Int */;
1153 long var42 /* : Int */;
1154 short int var43 /* : Bool */;
1155 short int var45 /* : Bool */;
1156 long var46 /* : Int */;
1157 long var47 /* : Int */;
1158 long var48 /* : Int */;
1159 long var50 /* : Int */;
1160 long var51 /* : Int */;
1161 long var53 /* : Int */;
1162 short int var54 /* : Bool */;
1163 short int var56 /* : Bool */;
1164 int cltype57;
1165 int idtype58;
1166 const char* var_class_name59;
1167 short int var60 /* : Bool */;
1168 val* var61 /* : Array[Int] */;
1169 val* var62 /* : nullable Object */;
1170 short int var63 /* : Bool */;
1171 short int var65 /* : Bool */;
1172 long var66 /* : Int */;
1173 val* var67 /* : Array[Int] */;
1174 long var68 /* : Int */;
1175 long var69 /* : Int */;
1176 long var71 /* : Int */;
1177 long var72 /* : Int */;
1178 long var74 /* : Int */;
1179 val* var75 /* : nullable Object */;
1180 long var76 /* : Int */;
1181 long var77 /* : Int */;
1182 long var79 /* : Int */;
1183 long var81 /* : Int */;
1184 long var82 /* : Int */;
1185 long var84 /* : Int */;
1186 long var86 /* : Int */;
1187 long var87 /* : Int */;
1188 long var88 /* : Int */;
1189 long var90 /* : Int */;
1190 short int var91 /* : Bool */;
1191 short int var93 /* : Bool */;
1192 int cltype94;
1193 int idtype95;
1194 const char* var_class_name96;
1195 short int var97 /* : Bool */;
1196 val* var98 /* : Array[Int] */;
1197 long var99 /* : Int */;
1198 long var100 /* : Int */;
1199 long var102 /* : Int */;
1200 val* var103 /* : nullable Object */;
1201 long var104 /* : Int */;
1202 long var106 /* : Int */;
1203 long var107 /* : Int */;
1204 long var108 /* : Int */;
1205 long var109 /* : Int */;
1206 long var111 /* : Int */;
1207 long var112 /* : Int */;
1208 long var114 /* : Int */;
1209 val* var115 /* : nullable Object */;
1210 long var116 /* : Int */;
1211 long var117 /* : Int */;
1212 long var119 /* : Int */;
1213 var = self->attrs[COLOR_string_search__BM_Pattern___motif].val; /* _motif on <self:BM_Pattern> */
1214 if (var == NULL) {
1215 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _motif");
1216 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 175);
1217 show_backtrace(1);
1218 }
1219 var_x = var;
1220 var1 = self->attrs[COLOR_string_search__BM_Pattern___length].l; /* _length on <self:BM_Pattern> */
1221 var_m = var1;
1222 var2 = ((val* (*)(val*))(self->class->vft[COLOR_string_search__BM_Pattern__suffixes]))(self) /* suffixes on <self:BM_Pattern>*/;
1223 var_suff = var2;
1224 var3 = 0;
1225 var_i = var3;
1226 for(;;) {
1227 { /* Inline kernel#Int#< (var_i,var_m) */
1228 /* Covariant cast for argument 0 (i) <var_m:Int> isa OTHER */
1229 /* <var_m:Int> isa OTHER */
1230 var6 = 1; /* easy <var_m:Int> isa OTHER*/
1231 if (!var6) {
1232 var_class_name = type_kernel__Int.name;
1233 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1234 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
1235 show_backtrace(1);
1236 }
1237 var7 = var_i < var_m;
1238 var4 = var7;
1239 goto RET_LABEL5;
1240 RET_LABEL5:(void)0;
1241 }
1242 if (!var4) break;
1243 var8 = self->attrs[COLOR_string_search__BM_Pattern___gs].val; /* _gs on <self:BM_Pattern> */
1244 if (var8 == NULL) {
1245 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _gs");
1246 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 180);
1247 show_backtrace(1);
1248 }
1249 var9 = BOX_kernel__Int(var_m); /* autobox from Int to nullable Object */
1250 ((void (*)(val*, long, val*))(var8->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var8, var_i, var9) /* []= on <var8:Array[Int]>*/;
1251 var10 = 1;
1252 { /* Inline kernel#Int#+ (var_i,var10) */
1253 var13 = var_i + var10;
1254 var11 = var13;
1255 goto RET_LABEL12;
1256 RET_LABEL12:(void)0;
1257 }
1258 var_i = var11;
1259 CONTINUE_label: (void)0;
1260 }
1261 BREAK_label: (void)0;
1262 var14 = 0;
1263 var_j = var14;
1264 var15 = 1;
1265 { /* Inline kernel#Int#- (var_m,var15) */
1266 var18 = var_m - var15;
1267 var16 = var18;
1268 goto RET_LABEL17;
1269 RET_LABEL17:(void)0;
1270 }
1271 var_i = var16;
1272 for(;;) {
1273 var19 = 1;
1274 { /* Inline kernel#Int#unary - (var19) */
1275 var22 = -var19;
1276 var20 = var22;
1277 goto RET_LABEL21;
1278 RET_LABEL21:(void)0;
1279 }
1280 { /* Inline kernel#Int#>= (var_i,var20) */
1281 /* Covariant cast for argument 0 (i) <var20:Int> isa OTHER */
1282 /* <var20:Int> isa OTHER */
1283 var25 = 1; /* easy <var20:Int> isa OTHER*/
1284 if (!var25) {
1285 var_class_name28 = type_kernel__Int.name;
1286 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name28);
1287 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
1288 show_backtrace(1);
1289 }
1290 var29 = var_i >= var20;
1291 var23 = var29;
1292 goto RET_LABEL24;
1293 RET_LABEL24:(void)0;
1294 }
1295 if (!var23) break;
1296 var31 = 1;
1297 { /* Inline kernel#Int#unary - (var31) */
1298 var34 = -var31;
1299 var32 = var34;
1300 goto RET_LABEL33;
1301 RET_LABEL33:(void)0;
1302 }
1303 { /* Inline kernel#Int#== (var_i,var32) */
1304 var37 = var_i == var32;
1305 var35 = var37;
1306 goto RET_LABEL36;
1307 RET_LABEL36:(void)0;
1308 }
1309 var_ = var35;
1310 if (var35){
1311 var30 = var_;
1312 } else {
1313 var38 = ((val* (*)(val*, long))(var_suff->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_suff, var_i) /* [] on <var_suff:Array[Int]>*/;
1314 var39 = 1;
1315 { /* Inline kernel#Int#+ (var_i,var39) */
1316 var42 = var_i + var39;
1317 var40 = var42;
1318 goto RET_LABEL41;
1319 RET_LABEL41:(void)0;
1320 }
1321 { /* Inline kernel#Int#== (var38,var40) */
1322 var45 = (var38 != NULL) && (var38->class == &class_kernel__Int);
1323 if (var45) {
1324 var46 = ((struct instance_kernel__Int*)var38)->value; /* autounbox from nullable Object to Int */;
1325 var45 = (var46 == var40);
1326 }
1327 var43 = var45;
1328 goto RET_LABEL44;
1329 RET_LABEL44:(void)0;
1330 }
1331 var30 = var43;
1332 }
1333 if (var30){
1334 for(;;) {
1335 var47 = 1;
1336 { /* Inline kernel#Int#- (var_m,var47) */
1337 var50 = var_m - var47;
1338 var48 = var50;
1339 goto RET_LABEL49;
1340 RET_LABEL49:(void)0;
1341 }
1342 { /* Inline kernel#Int#- (var48,var_i) */
1343 var53 = var48 - var_i;
1344 var51 = var53;
1345 goto RET_LABEL52;
1346 RET_LABEL52:(void)0;
1347 }
1348 { /* Inline kernel#Int#< (var_j,var51) */
1349 /* Covariant cast for argument 0 (i) <var51:Int> isa OTHER */
1350 /* <var51:Int> isa OTHER */
1351 var56 = 1; /* easy <var51:Int> isa OTHER*/
1352 if (!var56) {
1353 var_class_name59 = type_kernel__Int.name;
1354 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name59);
1355 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
1356 show_backtrace(1);
1357 }
1358 var60 = var_j < var51;
1359 var54 = var60;
1360 goto RET_LABEL55;
1361 RET_LABEL55:(void)0;
1362 }
1363 if (!var54) break;
1364 var61 = self->attrs[COLOR_string_search__BM_Pattern___gs].val; /* _gs on <self:BM_Pattern> */
1365 if (var61 == NULL) {
1366 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _gs");
1367 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 188);
1368 show_backtrace(1);
1369 }
1370 var62 = ((val* (*)(val*, long))(var61->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var61, var_j) /* [] on <var61:Array[Int]>*/;
1371 { /* Inline kernel#Int#== (var62,var_m) */
1372 var65 = (var62 != NULL) && (var62->class == &class_kernel__Int);
1373 if (var65) {
1374 var66 = ((struct instance_kernel__Int*)var62)->value; /* autounbox from nullable Object to Int */;
1375 var65 = (var66 == var_m);
1376 }
1377 var63 = var65;
1378 goto RET_LABEL64;
1379 RET_LABEL64:(void)0;
1380 }
1381 if (var63){
1382 var67 = self->attrs[COLOR_string_search__BM_Pattern___gs].val; /* _gs on <self:BM_Pattern> */
1383 if (var67 == NULL) {
1384 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _gs");
1385 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 188);
1386 show_backtrace(1);
1387 }
1388 var68 = 1;
1389 { /* Inline kernel#Int#- (var_m,var68) */
1390 var71 = var_m - var68;
1391 var69 = var71;
1392 goto RET_LABEL70;
1393 RET_LABEL70:(void)0;
1394 }
1395 { /* Inline kernel#Int#- (var69,var_i) */
1396 var74 = var69 - var_i;
1397 var72 = var74;
1398 goto RET_LABEL73;
1399 RET_LABEL73:(void)0;
1400 }
1401 var75 = BOX_kernel__Int(var72); /* autobox from Int to nullable Object */
1402 ((void (*)(val*, long, val*))(var67->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var67, var_j, var75) /* []= on <var67:Array[Int]>*/;
1403 } else {
1404 }
1405 var76 = 1;
1406 { /* Inline kernel#Int#+ (var_j,var76) */
1407 var79 = var_j + var76;
1408 var77 = var79;
1409 goto RET_LABEL78;
1410 RET_LABEL78:(void)0;
1411 }
1412 var_j = var77;
1413 CONTINUE_label80: (void)0;
1414 }
1415 BREAK_label80: (void)0;
1416 } else {
1417 }
1418 var81 = 1;
1419 { /* Inline kernel#Int#- (var_i,var81) */
1420 var84 = var_i - var81;
1421 var82 = var84;
1422 goto RET_LABEL83;
1423 RET_LABEL83:(void)0;
1424 }
1425 var_i = var82;
1426 CONTINUE_label85: (void)0;
1427 }
1428 BREAK_label85: (void)0;
1429 var86 = 0;
1430 var_i = var86;
1431 for(;;) {
1432 var87 = 1;
1433 { /* Inline kernel#Int#- (var_m,var87) */
1434 var90 = var_m - var87;
1435 var88 = var90;
1436 goto RET_LABEL89;
1437 RET_LABEL89:(void)0;
1438 }
1439 { /* Inline kernel#Int#< (var_i,var88) */
1440 /* Covariant cast for argument 0 (i) <var88:Int> isa OTHER */
1441 /* <var88:Int> isa OTHER */
1442 var93 = 1; /* easy <var88:Int> isa OTHER*/
1443 if (!var93) {
1444 var_class_name96 = type_kernel__Int.name;
1445 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name96);
1446 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
1447 show_backtrace(1);
1448 }
1449 var97 = var_i < var88;
1450 var91 = var97;
1451 goto RET_LABEL92;
1452 RET_LABEL92:(void)0;
1453 }
1454 if (!var91) break;
1455 var98 = self->attrs[COLOR_string_search__BM_Pattern___gs].val; /* _gs on <self:BM_Pattern> */
1456 if (var98 == NULL) {
1457 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _gs");
1458 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 196);
1459 show_backtrace(1);
1460 }
1461 var99 = 1;
1462 { /* Inline kernel#Int#- (var_m,var99) */
1463 var102 = var_m - var99;
1464 var100 = var102;
1465 goto RET_LABEL101;
1466 RET_LABEL101:(void)0;
1467 }
1468 var103 = ((val* (*)(val*, long))(var_suff->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_suff, var_i) /* [] on <var_suff:Array[Int]>*/;
1469 { /* Inline kernel#Int#- (var100,var103) */
1470 var106 = ((struct instance_kernel__Int*)var103)->value; /* autounbox from nullable Object to Int */;
1471 var107 = var100 - var106;
1472 var104 = var107;
1473 goto RET_LABEL105;
1474 RET_LABEL105:(void)0;
1475 }
1476 var108 = 1;
1477 { /* Inline kernel#Int#- (var_m,var108) */
1478 var111 = var_m - var108;
1479 var109 = var111;
1480 goto RET_LABEL110;
1481 RET_LABEL110:(void)0;
1482 }
1483 { /* Inline kernel#Int#- (var109,var_i) */
1484 var114 = var109 - var_i;
1485 var112 = var114;
1486 goto RET_LABEL113;
1487 RET_LABEL113:(void)0;
1488 }
1489 var115 = BOX_kernel__Int(var112); /* autobox from Int to nullable Object */
1490 ((void (*)(val*, long, val*))(var98->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var98, var104, var115) /* []= on <var98:Array[Int]>*/;
1491 var116 = 1;
1492 { /* Inline kernel#Int#+ (var_i,var116) */
1493 var119 = var_i + var116;
1494 var117 = var119;
1495 goto RET_LABEL118;
1496 RET_LABEL118:(void)0;
1497 }
1498 var_i = var117;
1499 CONTINUE_label120: (void)0;
1500 }
1501 BREAK_label120: (void)0;
1502 RET_LABEL:;
1503 }
1504 /* method string_search#BM_Pattern#compute_gs for (self: Object) */
1505 void VIRTUAL_string_search__BM_Pattern__compute_gs(val* self) {
1506 string_search__BM_Pattern__compute_gs(self);
1507 RET_LABEL:;
1508 }
1509 /* method string_search#BM_Pattern#hash for (self: BM_Pattern): Int */
1510 long string_search__BM_Pattern__hash(val* self) {
1511 long var /* : Int */;
1512 val* var1 /* : String */;
1513 long var2 /* : Int */;
1514 var1 = self->attrs[COLOR_string_search__BM_Pattern___motif].val; /* _motif on <self:BM_Pattern> */
1515 if (var1 == NULL) {
1516 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _motif");
1517 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 201);
1518 show_backtrace(1);
1519 }
1520 var2 = ((long (*)(val*))(var1->class->vft[COLOR_kernel__Object__hash]))(var1) /* hash on <var1:String>*/;
1521 var = var2;
1522 goto RET_LABEL;
1523 RET_LABEL:;
1524 return var;
1525 }
1526 /* method string_search#BM_Pattern#hash for (self: Object): Int */
1527 long VIRTUAL_string_search__BM_Pattern__hash(val* self) {
1528 long var /* : Int */;
1529 long var1 /* : Int */;
1530 var1 = string_search__BM_Pattern__hash(self);
1531 var = var1;
1532 RET_LABEL:;
1533 return var;
1534 }
1535 /* method string_search#BM_Pattern#== for (self: BM_Pattern, nullable Object): Bool */
1536 short int string_search__BM_Pattern___61d_61d(val* self, val* p0) {
1537 short int var /* : Bool */;
1538 val* var_o /* var o: nullable Object */;
1539 short int var1 /* : Bool */;
1540 short int var2 /* : Bool */;
1541 int cltype;
1542 int idtype;
1543 short int var_ /* var : Bool */;
1544 val* var3 /* : String */;
1545 val* var4 /* : String */;
1546 short int var5 /* : Bool */;
1547 var_o = p0;
1548 /* <var_o:nullable Object> isa BM_Pattern */
1549 cltype = type_string_search__BM_Pattern.color;
1550 idtype = type_string_search__BM_Pattern.id;
1551 if(var_o == NULL) {
1552 var2 = 0;
1553 } else {
1554 if(cltype >= var_o->type->table_size) {
1555 var2 = 0;
1556 } else {
1557 var2 = var_o->type->type_table[cltype] == idtype;
1558 }
1559 }
1560 var_ = var2;
1561 if (var2){
1562 var3 = var_o->attrs[COLOR_string_search__BM_Pattern___motif].val; /* _motif on <var_o:nullable Object(BM_Pattern)> */
1563 if (var3 == NULL) {
1564 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _motif");
1565 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 202);
1566 show_backtrace(1);
1567 }
1568 var4 = self->attrs[COLOR_string_search__BM_Pattern___motif].val; /* _motif on <self:BM_Pattern> */
1569 if (var4 == NULL) {
1570 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _motif");
1571 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 202);
1572 show_backtrace(1);
1573 }
1574 var5 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_kernel__Object___61d_61d]))(var3, var4) /* == on <var3:String>*/;
1575 var1 = var5;
1576 } else {
1577 var1 = var_;
1578 }
1579 var = var1;
1580 goto RET_LABEL;
1581 RET_LABEL:;
1582 return var;
1583 }
1584 /* method string_search#BM_Pattern#== for (self: Object, nullable Object): Bool */
1585 short int VIRTUAL_string_search__BM_Pattern___61d_61d(val* self, val* p0) {
1586 short int var /* : Bool */;
1587 short int var1 /* : Bool */;
1588 var1 = string_search__BM_Pattern___61d_61d(self, p0);
1589 var = var1;
1590 RET_LABEL:;
1591 return var;
1592 }
1593 /* method string_search#Match#string for (self: Match): String */
1594 val* string_search__Match__string(val* self) {
1595 val* var /* : String */;
1596 val* var1 /* : String */;
1597 var1 = self->attrs[COLOR_string_search__Match___string].val; /* _string on <self:Match> */
1598 if (var1 == NULL) {
1599 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _string");
1600 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 207);
1601 show_backtrace(1);
1602 }
1603 var = var1;
1604 RET_LABEL:;
1605 return var;
1606 }
1607 /* method string_search#Match#string for (self: Object): String */
1608 val* VIRTUAL_string_search__Match__string(val* self) {
1609 val* var /* : String */;
1610 val* var1 /* : String */;
1611 var1 = string_search__Match__string(self);
1612 var = var1;
1613 RET_LABEL:;
1614 return var;
1615 }
1616 /* method string_search#Match#from for (self: Match): Int */
1617 long string_search__Match__from(val* self) {
1618 long var /* : Int */;
1619 long var1 /* : Int */;
1620 var1 = self->attrs[COLOR_string_search__Match___from].l; /* _from on <self:Match> */
1621 var = var1;
1622 RET_LABEL:;
1623 return var;
1624 }
1625 /* method string_search#Match#from for (self: Object): Int */
1626 long VIRTUAL_string_search__Match__from(val* self) {
1627 long var /* : Int */;
1628 long var1 /* : Int */;
1629 var1 = string_search__Match__from(self);
1630 var = var1;
1631 RET_LABEL:;
1632 return var;
1633 }
1634 /* method string_search#Match#length for (self: Match): Int */
1635 long string_search__Match__length(val* self) {
1636 long var /* : Int */;
1637 long var1 /* : Int */;
1638 var1 = self->attrs[COLOR_string_search__Match___length].l; /* _length on <self:Match> */
1639 var = var1;
1640 RET_LABEL:;
1641 return var;
1642 }
1643 /* method string_search#Match#length for (self: Object): Int */
1644 long VIRTUAL_string_search__Match__length(val* self) {
1645 long var /* : Int */;
1646 long var1 /* : Int */;
1647 var1 = string_search__Match__length(self);
1648 var = var1;
1649 RET_LABEL:;
1650 return var;
1651 }
1652 /* method string_search#Match#after for (self: Match): Int */
1653 long string_search__Match__after(val* self) {
1654 long var /* : Int */;
1655 long var1 /* : Int */;
1656 long var2 /* : Int */;
1657 long var3 /* : Int */;
1658 long var5 /* : Int */;
1659 var1 = self->attrs[COLOR_string_search__Match___from].l; /* _from on <self:Match> */
1660 var2 = self->attrs[COLOR_string_search__Match___length].l; /* _length on <self:Match> */
1661 { /* Inline kernel#Int#+ (var1,var2) */
1662 var5 = var1 + var2;
1663 var3 = var5;
1664 goto RET_LABEL4;
1665 RET_LABEL4:(void)0;
1666 }
1667 var = var3;
1668 goto RET_LABEL;
1669 RET_LABEL:;
1670 return var;
1671 }
1672 /* method string_search#Match#after for (self: Object): Int */
1673 long VIRTUAL_string_search__Match__after(val* self) {
1674 long var /* : Int */;
1675 long var1 /* : Int */;
1676 var1 = string_search__Match__after(self);
1677 var = var1;
1678 RET_LABEL:;
1679 return var;
1680 }
1681 /* method string_search#Match#to_s for (self: Match): String */
1682 val* string_search__Match__to_s(val* self) {
1683 val* var /* : String */;
1684 val* var1 /* : String */;
1685 long var2 /* : Int */;
1686 long var3 /* : Int */;
1687 val* var4 /* : String */;
1688 var1 = self->attrs[COLOR_string_search__Match___string].val; /* _string on <self:Match> */
1689 if (var1 == NULL) {
1690 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _string");
1691 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 221);
1692 show_backtrace(1);
1693 }
1694 var2 = self->attrs[COLOR_string_search__Match___from].l; /* _from on <self:Match> */
1695 var3 = self->attrs[COLOR_string_search__Match___length].l; /* _length on <self:Match> */
1696 var4 = ((val* (*)(val*, long, long))(var1->class->vft[COLOR_string__AbstractString__substring]))(var1, var2, var3) /* substring on <var1:String>*/;
1697 var = var4;
1698 goto RET_LABEL;
1699 RET_LABEL:;
1700 return var;
1701 }
1702 /* method string_search#Match#to_s for (self: Object): String */
1703 val* VIRTUAL_string_search__Match__to_s(val* self) {
1704 val* var /* : String */;
1705 val* var1 /* : String */;
1706 var1 = string_search__Match__to_s(self);
1707 var = var1;
1708 RET_LABEL:;
1709 return var;
1710 }
1711 /* method string_search#Match#init for (self: Match, String, Int, Int) */
1712 void string_search__Match__init(val* self, val* p0, long p1, long p2) {
1713 val* var_s /* var s: String */;
1714 long var_f /* var f: Int */;
1715 long var_len /* var len: Int */;
1716 long var /* : Int */;
1717 short int var1 /* : Bool */;
1718 short int var3 /* : Bool */;
1719 int cltype;
1720 int idtype;
1721 const char* var_class_name;
1722 short int var4 /* : Bool */;
1723 long var5 /* : Int */;
1724 short int var6 /* : Bool */;
1725 short int var8 /* : Bool */;
1726 int cltype9;
1727 int idtype10;
1728 const char* var_class_name11;
1729 short int var12 /* : Bool */;
1730 long var13 /* : Int */;
1731 long var15 /* : Int */;
1732 long var16 /* : Int */;
1733 short int var17 /* : Bool */;
1734 short int var19 /* : Bool */;
1735 int cltype20;
1736 int idtype21;
1737 const char* var_class_name22;
1738 short int var23 /* : Bool */;
1739 var_s = p0;
1740 var_f = p1;
1741 var_len = p2;
1742 var = 0;
1743 { /* Inline kernel#Int#>= (var_len,var) */
1744 /* Covariant cast for argument 0 (i) <var:Int> isa OTHER */
1745 /* <var:Int> isa OTHER */
1746 var3 = 1; /* easy <var:Int> isa OTHER*/
1747 if (!var3) {
1748 var_class_name = type_kernel__Int.name;
1749 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1750 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
1751 show_backtrace(1);
1752 }
1753 var4 = var_len >= var;
1754 var1 = var4;
1755 goto RET_LABEL2;
1756 RET_LABEL2:(void)0;
1757 }
1758 if (!var1) {
1759 fprintf(stderr, "Runtime error: %s", "Assert \'positive_length\' failed");
1760 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 226);
1761 show_backtrace(1);
1762 }
1763 var5 = 0;
1764 { /* Inline kernel#Int#>= (var_f,var5) */
1765 /* Covariant cast for argument 0 (i) <var5:Int> isa OTHER */
1766 /* <var5:Int> isa OTHER */
1767 var8 = 1; /* easy <var5:Int> isa OTHER*/
1768 if (!var8) {
1769 var_class_name11 = type_kernel__Int.name;
1770 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name11);
1771 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
1772 show_backtrace(1);
1773 }
1774 var12 = var_f >= var5;
1775 var6 = var12;
1776 goto RET_LABEL7;
1777 RET_LABEL7:(void)0;
1778 }
1779 if (!var6) {
1780 fprintf(stderr, "Runtime error: %s", "Assert \'valid_from\' failed");
1781 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 227);
1782 show_backtrace(1);
1783 }
1784 { /* Inline kernel#Int#+ (var_f,var_len) */
1785 var15 = var_f + var_len;
1786 var13 = var15;
1787 goto RET_LABEL14;
1788 RET_LABEL14:(void)0;
1789 }
1790 var16 = ((long (*)(val*))(var_s->class->vft[COLOR_abstract_collection__Collection__length]))(var_s) /* length on <var_s:String>*/;
1791 { /* Inline kernel#Int#<= (var13,var16) */
1792 /* Covariant cast for argument 0 (i) <var16:Int> isa OTHER */
1793 /* <var16:Int> isa OTHER */
1794 var19 = 1; /* easy <var16:Int> isa OTHER*/
1795 if (!var19) {
1796 var_class_name22 = type_kernel__Int.name;
1797 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name22);
1798 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
1799 show_backtrace(1);
1800 }
1801 var23 = var13 <= var16;
1802 var17 = var23;
1803 goto RET_LABEL18;
1804 RET_LABEL18:(void)0;
1805 }
1806 if (!var17) {
1807 fprintf(stderr, "Runtime error: %s", "Assert \'valid_after\' failed");
1808 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 228);
1809 show_backtrace(1);
1810 }
1811 self->attrs[COLOR_string_search__Match___string].val = var_s; /* _string on <self:Match> */
1812 self->attrs[COLOR_string_search__Match___from].l = var_f; /* _from on <self:Match> */
1813 self->attrs[COLOR_string_search__Match___length].l = var_len; /* _length on <self:Match> */
1814 RET_LABEL:;
1815 }
1816 /* method string_search#Match#init for (self: Object, String, Int, Int) */
1817 void VIRTUAL_string_search__Match__init(val* self, val* p0, long p1, long p2) {
1818 string_search__Match__init(self, p0, p1, p2);
1819 RET_LABEL:;
1820 }
1821 /* method string_search#Char#search_index_in for (self: Char, String, Int): Int */
1822 long string_search__Char__search_index_in(char self, val* p0, long p1) {
1823 long var /* : Int */;
1824 val* var_s /* var s: String */;
1825 long var_from /* var from: Int */;
1826 long var1 /* : Int */;
1827 long var_stop /* var stop: Int */;
1828 short int var2 /* : Bool */;
1829 short int var4 /* : Bool */;
1830 int cltype;
1831 int idtype;
1832 const char* var_class_name;
1833 short int var5 /* : Bool */;
1834 val* var6 /* : nullable Object */;
1835 short int var7 /* : Bool */;
1836 short int var9 /* : Bool */;
1837 char var10 /* : Char */;
1838 long var11 /* : Int */;
1839 long var12 /* : Int */;
1840 long var14 /* : Int */;
1841 long var15 /* : Int */;
1842 long var16 /* : Int */;
1843 long var18 /* : Int */;
1844 var_s = p0;
1845 var_from = p1;
1846 var1 = ((long (*)(val*))(var_s->class->vft[COLOR_abstract_collection__Collection__length]))(var_s) /* length on <var_s:String>*/;
1847 var_stop = var1;
1848 for(;;) {
1849 { /* Inline kernel#Int#< (var_from,var_stop) */
1850 /* Covariant cast for argument 0 (i) <var_stop:Int> isa OTHER */
1851 /* <var_stop:Int> isa OTHER */
1852 var4 = 1; /* easy <var_stop:Int> isa OTHER*/
1853 if (!var4) {
1854 var_class_name = type_kernel__Int.name;
1855 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1856 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
1857 show_backtrace(1);
1858 }
1859 var5 = var_from < var_stop;
1860 var2 = var5;
1861 goto RET_LABEL3;
1862 RET_LABEL3:(void)0;
1863 }
1864 if (!var2) break;
1865 var6 = ((val* (*)(val*, long))(var_s->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_s, var_from) /* [] on <var_s:String>*/;
1866 { /* Inline kernel#Char#== (var6,self) */
1867 var9 = (var6 != NULL) && (var6->class == &class_kernel__Char);
1868 if (var9) {
1869 var10 = ((struct instance_kernel__Char*)var6)->value; /* autounbox from nullable Object to Char */;
1870 var9 = (var10 == self);
1871 }
1872 var7 = var9;
1873 goto RET_LABEL8;
1874 RET_LABEL8:(void)0;
1875 }
1876 if (var7){
1877 var = var_from;
1878 goto RET_LABEL;
1879 } else {
1880 }
1881 var11 = 1;
1882 { /* Inline kernel#Int#+ (var_from,var11) */
1883 var14 = var_from + var11;
1884 var12 = var14;
1885 goto RET_LABEL13;
1886 RET_LABEL13:(void)0;
1887 }
1888 var_from = var12;
1889 CONTINUE_label: (void)0;
1890 }
1891 BREAK_label: (void)0;
1892 var15 = 1;
1893 { /* Inline kernel#Int#unary - (var15) */
1894 var18 = -var15;
1895 var16 = var18;
1896 goto RET_LABEL17;
1897 RET_LABEL17:(void)0;
1898 }
1899 var = var16;
1900 goto RET_LABEL;
1901 RET_LABEL:;
1902 return var;
1903 }
1904 /* method string_search#Char#search_index_in for (self: Object, String, Int): Int */
1905 long VIRTUAL_string_search__Char__search_index_in(val* self, val* p0, long p1) {
1906 long var /* : Int */;
1907 long var1 /* : Int */;
1908 char var2 /* : Char */;
1909 var2 = ((struct instance_kernel__Char*)self)->value; /* autounbox from Object to Char */;
1910 var1 = string_search__Char__search_index_in(var2, p0, p1);
1911 var = var1;
1912 RET_LABEL:;
1913 return var;
1914 }
1915 /* method string_search#Char#search_in for (self: Char, String, Int): nullable Match */
1916 val* string_search__Char__search_in(char self, val* p0, long p1) {
1917 val* var /* : nullable Match */;
1918 val* var_s /* var s: String */;
1919 long var_from /* var from: Int */;
1920 long var1 /* : Int */;
1921 long var_pos /* var pos: Int */;
1922 long var2 /* : Int */;
1923 short int var3 /* : Bool */;
1924 short int var5 /* : Bool */;
1925 int cltype;
1926 int idtype;
1927 const char* var_class_name;
1928 short int var6 /* : Bool */;
1929 val* var7 /* : null */;
1930 val* var8 /* : Match */;
1931 long var9 /* : Int */;
1932 var_s = p0;
1933 var_from = p1;
1934 var1 = string_search__Char__search_index_in(self, var_s, var_from);
1935 var_pos = var1;
1936 var2 = 0;
1937 { /* Inline kernel#Int#< (var_pos,var2) */
1938 /* Covariant cast for argument 0 (i) <var2:Int> isa OTHER */
1939 /* <var2:Int> isa OTHER */
1940 var5 = 1; /* easy <var2:Int> isa OTHER*/
1941 if (!var5) {
1942 var_class_name = type_kernel__Int.name;
1943 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1944 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
1945 show_backtrace(1);
1946 }
1947 var6 = var_pos < var2;
1948 var3 = var6;
1949 goto RET_LABEL4;
1950 RET_LABEL4:(void)0;
1951 }
1952 if (var3){
1953 var7 = NULL;
1954 var = var7;
1955 goto RET_LABEL;
1956 } else {
1957 var8 = NEW_string_search__Match(&type_string_search__Match);
1958 var9 = 1;
1959 ((void (*)(val*, val*, long, long))(var8->class->vft[COLOR_string_search__Match__init]))(var8, var_s, var_pos, var9) /* init on <var8:Match>*/;
1960 var = var8;
1961 goto RET_LABEL;
1962 }
1963 RET_LABEL:;
1964 return var;
1965 }
1966 /* method string_search#Char#search_in for (self: Object, String, Int): nullable Match */
1967 val* VIRTUAL_string_search__Char__search_in(val* self, val* p0, long p1) {
1968 val* var /* : nullable Match */;
1969 val* var1 /* : nullable Match */;
1970 char var2 /* : Char */;
1971 var2 = ((struct instance_kernel__Char*)self)->value; /* autounbox from Object to Char */;
1972 var1 = string_search__Char__search_in(var2, p0, p1);
1973 var = var1;
1974 RET_LABEL:;
1975 return var;
1976 }
1977 /* method string_search#String#search_index_in for (self: String, String, Int): Int */
1978 long string_search__String__search_index_in(val* self, val* p0, long p1) {
1979 long var /* : Int */;
1980 val* var_s /* var s: String */;
1981 long var_from /* var from: Int */;
1982 long var1 /* : Int */;
1983 short int var2 /* : Bool */;
1984 short int var4 /* : Bool */;
1985 int cltype;
1986 int idtype;
1987 const char* var_class_name;
1988 short int var5 /* : Bool */;
1989 long var6 /* : Int */;
1990 long var7 /* : Int */;
1991 long var8 /* : Int */;
1992 long var10 /* : Int */;
1993 long var11 /* : Int */;
1994 long var12 /* : Int */;
1995 long var14 /* : Int */;
1996 long var_stop /* var stop: Int */;
1997 short int var15 /* : Bool */;
1998 short int var17 /* : Bool */;
1999 int cltype18;
2000 int idtype19;
2001 const char* var_class_name20;
2002 short int var21 /* : Bool */;
2003 long var22 /* : Int */;
2004 long var23 /* : Int */;
2005 long var24 /* : Int */;
2006 long var26 /* : Int */;
2007 long var_i /* var i: Int */;
2008 short int var27 /* : Bool */;
2009 long var28 /* : Int */;
2010 short int var29 /* : Bool */;
2011 short int var31 /* : Bool */;
2012 int cltype32;
2013 int idtype33;
2014 const char* var_class_name34;
2015 short int var35 /* : Bool */;
2016 short int var_ /* var : Bool */;
2017 val* var36 /* : nullable Object */;
2018 long var37 /* : Int */;
2019 long var39 /* : Int */;
2020 val* var40 /* : nullable Object */;
2021 short int var41 /* : Bool */;
2022 short int var43 /* : Bool */;
2023 long var44 /* : Int */;
2024 long var45 /* : Int */;
2025 long var47 /* : Int */;
2026 long var48 /* : Int */;
2027 short int var49 /* : Bool */;
2028 short int var51 /* : Bool */;
2029 int cltype52;
2030 int idtype53;
2031 const char* var_class_name54;
2032 short int var55 /* : Bool */;
2033 long var56 /* : Int */;
2034 long var57 /* : Int */;
2035 long var59 /* : Int */;
2036 long var61 /* : Int */;
2037 long var62 /* : Int */;
2038 long var64 /* : Int */;
2039 var_s = p0;
2040 var_from = p1;
2041 var1 = 0;
2042 { /* Inline kernel#Int#>= (var_from,var1) */
2043 /* Covariant cast for argument 0 (i) <var1:Int> isa OTHER */
2044 /* <var1:Int> isa OTHER */
2045 var4 = 1; /* easy <var1:Int> isa OTHER*/
2046 if (!var4) {
2047 var_class_name = type_kernel__Int.name;
2048 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
2049 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
2050 show_backtrace(1);
2051 }
2052 var5 = var_from >= var1;
2053 var2 = var5;
2054 goto RET_LABEL3;
2055 RET_LABEL3:(void)0;
2056 }
2057 if (!var2) {
2058 fprintf(stderr, "Runtime error: %s", "Assert failed");
2059 fprintf(stderr, " (%s:%d)\n", "lib/standard/string_search.nit", 264);
2060 show_backtrace(1);
2061 }
2062 var6 = ((long (*)(val*))(var_s->class->vft[COLOR_abstract_collection__Collection__length]))(var_s) /* length on <var_s:String>*/;
2063 var7 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:String>*/;
2064 { /* Inline kernel#Int#- (var6,var7) */
2065 var10 = var6 - var7;
2066 var8 = var10;
2067 goto RET_LABEL9;
2068 RET_LABEL9:(void)0;
2069 }
2070 var11 = 1;
2071 { /* Inline kernel#Int#+ (var8,var11) */
2072 var14 = var8 + var11;
2073 var12 = var14;
2074 goto RET_LABEL13;
2075 RET_LABEL13:(void)0;
2076 }
2077 var_stop = var12;
2078 for(;;) {
2079 { /* Inline kernel#Int#< (var_from,var_stop) */
2080 /* Covariant cast for argument 0 (i) <var_stop:Int> isa OTHER */
2081 /* <var_stop:Int> isa OTHER */
2082 var17 = 1; /* easy <var_stop:Int> isa OTHER*/
2083 if (!var17) {
2084 var_class_name20 = type_kernel__Int.name;
2085 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name20);
2086 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
2087 show_backtrace(1);
2088 }
2089 var21 = var_from < var_stop;
2090 var15 = var21;
2091 goto RET_LABEL16;
2092 RET_LABEL16:(void)0;
2093 }
2094 if (!var15) break;
2095 var22 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:String>*/;
2096 var23 = 1;
2097 { /* Inline kernel#Int#- (var22,var23) */
2098 var26 = var22 - var23;
2099 var24 = var26;
2100 goto RET_LABEL25;
2101 RET_LABEL25:(void)0;
2102 }
2103 var_i = var24;
2104 for(;;) {
2105 var28 = 0;
2106 { /* Inline kernel#Int#>= (var_i,var28) */
2107 /* Covariant cast for argument 0 (i) <var28:Int> isa OTHER */
2108 /* <var28:Int> isa OTHER */
2109 var31 = 1; /* easy <var28:Int> isa OTHER*/
2110 if (!var31) {
2111 var_class_name34 = type_kernel__Int.name;
2112 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name34);
2113 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
2114 show_backtrace(1);
2115 }
2116 var35 = var_i >= var28;
2117 var29 = var35;
2118 goto RET_LABEL30;
2119 RET_LABEL30:(void)0;
2120 }
2121 var_ = var29;
2122 if (var29){
2123 var36 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:String>*/;
2124 { /* Inline kernel#Int#+ (var_i,var_from) */
2125 var39 = var_i + var_from;
2126 var37 = var39;
2127 goto RET_LABEL38;
2128 RET_LABEL38:(void)0;
2129 }
2130 var40 = ((val* (*)(val*, long))(var_s->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_s, var37) /* [] on <var_s:String>*/;
2131 { /* Inline kernel#Char#== (var36,var40) */
2132 var43 = var36 == var40 || (((struct instance_kernel__Char*)var36)->value == ((struct instance_kernel__Char*)var40)->value);
2133 var41 = var43;
2134 goto RET_LABEL42;
2135 RET_LABEL42:(void)0;
2136 }
2137 var27 = var41;
2138 } else {
2139 var27 = var_;
2140 }
2141 if (!var27) break;
2142 var44 = 1;
2143 { /* Inline kernel#Int#- (var_i,var44) */
2144 var47 = var_i - var44;
2145 var45 = var47;
2146 goto RET_LABEL46;
2147 RET_LABEL46:(void)0;
2148 }
2149 var_i = var45;
2150 CONTINUE_label: (void)0;
2151 }
2152 BREAK_label: (void)0;
2153 var48 = 0;
2154 { /* Inline kernel#Int#< (var_i,var48) */
2155 /* Covariant cast for argument 0 (i) <var48:Int> isa OTHER */
2156 /* <var48:Int> isa OTHER */
2157 var51 = 1; /* easy <var48:Int> isa OTHER*/
2158 if (!var51) {
2159 var_class_name54 = type_kernel__Int.name;
2160 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name54);
2161 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
2162 show_backtrace(1);
2163 }
2164 var55 = var_i < var48;
2165 var49 = var55;
2166 goto RET_LABEL50;
2167 RET_LABEL50:(void)0;
2168 }
2169 if (var49){
2170 var = var_from;
2171 goto RET_LABEL;
2172 } else {
2173 }
2174 var56 = 1;
2175 { /* Inline kernel#Int#+ (var_from,var56) */
2176 var59 = var_from + var56;
2177 var57 = var59;
2178 goto RET_LABEL58;
2179 RET_LABEL58:(void)0;
2180 }
2181 var_from = var57;
2182 CONTINUE_label60: (void)0;
2183 }
2184 BREAK_label60: (void)0;
2185 var61 = 1;
2186 { /* Inline kernel#Int#unary - (var61) */
2187 var64 = -var61;
2188 var62 = var64;
2189 goto RET_LABEL63;
2190 RET_LABEL63:(void)0;
2191 }
2192 var = var62;
2193 goto RET_LABEL;
2194 RET_LABEL:;
2195 return var;
2196 }
2197 /* method string_search#String#search_index_in for (self: Object, String, Int): Int */
2198 long VIRTUAL_string_search__String__search_index_in(val* self, val* p0, long p1) {
2199 long var /* : Int */;
2200 long var1 /* : Int */;
2201 var1 = string_search__String__search_index_in(self, p0, p1);
2202 var = var1;
2203 RET_LABEL:;
2204 return var;
2205 }
2206 /* method string_search#String#search_in for (self: String, String, Int): nullable Match */
2207 val* string_search__String__search_in(val* self, val* p0, long p1) {
2208 val* var /* : nullable Match */;
2209 val* var_s /* var s: String */;
2210 long var_from /* var from: Int */;
2211 long var1 /* : Int */;
2212 long var_pos /* var pos: Int */;
2213 long var2 /* : Int */;
2214 short int var3 /* : Bool */;
2215 short int var5 /* : Bool */;
2216 int cltype;
2217 int idtype;
2218 const char* var_class_name;
2219 short int var6 /* : Bool */;
2220 val* var7 /* : null */;
2221 val* var8 /* : Match */;
2222 long var9 /* : Int */;
2223 var_s = p0;
2224 var_from = p1;
2225 var1 = ((long (*)(val*, val*, long))(self->class->vft[COLOR_string_search__Pattern__search_index_in]))(self, var_s, var_from) /* search_index_in on <self:String>*/;
2226 var_pos = var1;
2227 var2 = 0;
2228 { /* Inline kernel#Int#< (var_pos,var2) */
2229 /* Covariant cast for argument 0 (i) <var2:Int> isa OTHER */
2230 /* <var2:Int> isa OTHER */
2231 var5 = 1; /* easy <var2:Int> isa OTHER*/
2232 if (!var5) {
2233 var_class_name = type_kernel__Int.name;
2234 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
2235 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
2236 show_backtrace(1);
2237 }
2238 var6 = var_pos < var2;
2239 var3 = var6;
2240 goto RET_LABEL4;
2241 RET_LABEL4:(void)0;
2242 }
2243 if (var3){
2244 var7 = NULL;
2245 var = var7;
2246 goto RET_LABEL;
2247 } else {
2248 var8 = NEW_string_search__Match(&type_string_search__Match);
2249 var9 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:String>*/;
2250 ((void (*)(val*, val*, long, long))(var8->class->vft[COLOR_string_search__Match__init]))(var8, var_s, var_pos, var9) /* init on <var8:Match>*/;
2251 var = var8;
2252 goto RET_LABEL;
2253 }
2254 RET_LABEL:;
2255 return var;
2256 }
2257 /* method string_search#String#search_in for (self: Object, String, Int): nullable Match */
2258 val* VIRTUAL_string_search__String__search_in(val* self, val* p0, long p1) {
2259 val* var /* : nullable Match */;
2260 val* var1 /* : nullable Match */;
2261 var1 = string_search__String__search_in(self, p0, p1);
2262 var = var1;
2263 RET_LABEL:;
2264 return var;
2265 }
2266 /* method string_search#String#search for (self: String, Pattern): nullable Match */
2267 val* string_search__String__search(val* self, val* p0) {
2268 val* var /* : nullable Match */;
2269 val* var_p /* var p: Pattern */;
2270 long var1 /* : Int */;
2271 val* var2 /* : nullable Match */;
2272 var_p = p0;
2273 var1 = 0;
2274 var2 = ((val* (*)(val*, val*, long))(var_p->class->vft[COLOR_string_search__Pattern__search_in]))(var_p, self, var1) /* search_in on <var_p:Pattern>*/;
2275 var = var2;
2276 goto RET_LABEL;
2277 RET_LABEL:;
2278 return var;
2279 }
2280 /* method string_search#String#search for (self: Object, Pattern): nullable Match */
2281 val* VIRTUAL_string_search__String__search(val* self, val* p0) {
2282 val* var /* : nullable Match */;
2283 val* var1 /* : nullable Match */;
2284 var1 = string_search__String__search(self, p0);
2285 var = var1;
2286 RET_LABEL:;
2287 return var;
2288 }
2289 /* method string_search#String#search_from for (self: String, Pattern, Int): nullable Match */
2290 val* string_search__String__search_from(val* self, val* p0, long p1) {
2291 val* var /* : nullable Match */;
2292 val* var_p /* var p: Pattern */;
2293 long var_from /* var from: Int */;
2294 val* var1 /* : nullable Match */;
2295 var_p = p0;
2296 var_from = p1;
2297 var1 = ((val* (*)(val*, val*, long))(var_p->class->vft[COLOR_string_search__Pattern__search_in]))(var_p, self, var_from) /* search_in on <var_p:Pattern>*/;
2298 var = var1;
2299 goto RET_LABEL;
2300 RET_LABEL:;
2301 return var;
2302 }
2303 /* method string_search#String#search_from for (self: Object, Pattern, Int): nullable Match */
2304 val* VIRTUAL_string_search__String__search_from(val* self, val* p0, long p1) {
2305 val* var /* : nullable Match */;
2306 val* var1 /* : nullable Match */;
2307 var1 = string_search__String__search_from(self, p0, p1);
2308 var = var1;
2309 RET_LABEL:;
2310 return var;
2311 }
2312 /* method string_search#String#search_all for (self: String, Pattern): Array[Match] */
2313 val* string_search__String__search_all(val* self, val* p0) {
2314 val* var /* : Array[Match] */;
2315 val* var_p /* var p: Pattern */;
2316 val* var1 /* : Array[Match] */;
2317 var_p = p0;
2318 var1 = ((val* (*)(val*, val*))(var_p->class->vft[COLOR_string_search__Pattern__search_all_in]))(var_p, self) /* search_all_in on <var_p:Pattern>*/;
2319 var = var1;
2320 goto RET_LABEL;
2321 RET_LABEL:;
2322 return var;
2323 }
2324 /* method string_search#String#search_all for (self: Object, Pattern): Array[Match] */
2325 val* VIRTUAL_string_search__String__search_all(val* self, val* p0) {
2326 val* var /* : Array[Match] */;
2327 val* var1 /* : Array[Match] */;
2328 var1 = string_search__String__search_all(self, p0);
2329 var = var1;
2330 RET_LABEL:;
2331 return var;
2332 }
2333 /* method string_search#String#split for (self: String, Pattern): Array[String] */
2334 val* string_search__String__split(val* self, val* p0) {
2335 val* var /* : Array[String] */;
2336 val* var_p /* var p: Pattern */;
2337 val* var1 /* : Array[Match] */;
2338 val* var_matches /* var matches: Array[Match] */;
2339 val* var2 /* : Array[String] */;
2340 long var3 /* : Int */;
2341 val* var_res /* var res: Array[String] */;
2342 val* var4 /* : Iterator[nullable Object] */;
2343 short int var5 /* : Bool */;
2344 val* var6 /* : nullable Object */;
2345 val* var_m /* var m: Match */;
2346 val* var7 /* : String */;
2347 var_p = p0;
2348 var1 = ((val* (*)(val*, val*))(var_p->class->vft[COLOR_string_search__Pattern__split_in]))(var_p, self) /* split_in on <var_p:Pattern>*/;
2349 var_matches = var1;
2350 var2 = NEW_array__Array(&type_array__Arraystring__String);
2351 var3 = ((long (*)(val*))(var_matches->class->vft[COLOR_abstract_collection__Collection__length]))(var_matches) /* length on <var_matches:Array[Match]>*/;
2352 ((void (*)(val*, long))(var2->class->vft[COLOR_array__Array__with_capacity]))(var2, var3) /* with_capacity on <var2:Array[String]>*/;
2353 var_res = var2;
2354 var4 = ((val* (*)(val*))(var_matches->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_matches) /* iterator on <var_matches:Array[Match]>*/;
2355 for(;;) {
2356 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var4) /* is_ok on <var4:Iterator[nullable Object]>*/;
2357 if(!var5) break;
2358 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__item]))(var4) /* item on <var4:Iterator[nullable Object]>*/;
2359 var_m = var6;
2360 var7 = ((val* (*)(val*))(var_m->class->vft[COLOR_string__Object__to_s]))(var_m) /* to_s on <var_m:Match>*/;
2361 ((void (*)(val*, val*))(var_res->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_res, var7) /* add on <var_res:Array[String]>*/;
2362 CONTINUE_label: (void)0;
2363 ((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__next]))(var4) /* next on <var4:Iterator[nullable Object]>*/;
2364 }
2365 BREAK_label: (void)0;
2366 var = var_res;
2367 goto RET_LABEL;
2368 RET_LABEL:;
2369 return var;
2370 }
2371 /* method string_search#String#split for (self: Object, Pattern): Array[String] */
2372 val* VIRTUAL_string_search__String__split(val* self, val* p0) {
2373 val* var /* : Array[String] */;
2374 val* var1 /* : Array[String] */;
2375 var1 = string_search__String__split(self, p0);
2376 var = var1;
2377 RET_LABEL:;
2378 return var;
2379 }
2380 /* method string_search#String#split_with for (self: String, Pattern): Array[String] */
2381 val* string_search__String__split_with(val* self, val* p0) {
2382 val* var /* : Array[String] */;
2383 val* var_p /* var p: Pattern */;
2384 val* var1 /* : Array[String] */;
2385 var_p = p0;
2386 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_string_search__String__split]))(self, var_p) /* split on <self:String>*/;
2387 var = var1;
2388 goto RET_LABEL;
2389 RET_LABEL:;
2390 return var;
2391 }
2392 /* method string_search#String#split_with for (self: Object, Pattern): Array[String] */
2393 val* VIRTUAL_string_search__String__split_with(val* self, val* p0) {
2394 val* var /* : Array[String] */;
2395 val* var1 /* : Array[String] */;
2396 var1 = string_search__String__split_with(self, p0);
2397 var = var1;
2398 RET_LABEL:;
2399 return var;
2400 }
2401 /* method string_search#String#replace for (self: String, Pattern, String): String */
2402 val* string_search__String__replace(val* self, val* p0, val* p1) {
2403 val* var /* : String */;
2404 val* var_p /* var p: Pattern */;
2405 val* var_string /* var string: String */;
2406 val* var1 /* : Array[String] */;
2407 val* var2 /* : String */;
2408 var_p = p0;
2409 var_string = p1;
2410 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_string_search__String__split_with]))(self, var_p) /* split_with on <self:String>*/;
2411 var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_string__Collection__join]))(var1, var_string) /* join on <var1:Array[String]>*/;
2412 var = var2;
2413 goto RET_LABEL;
2414 RET_LABEL:;
2415 return var;
2416 }
2417 /* method string_search#String#replace for (self: Object, Pattern, String): String */
2418 val* VIRTUAL_string_search__String__replace(val* self, val* p0, val* p1) {
2419 val* var /* : String */;
2420 val* var1 /* : String */;
2421 var1 = string_search__String__replace(self, p0, p1);
2422 var = var1;
2423 RET_LABEL:;
2424 return var;
2425 }
2426 /* method string_search#String#html_escape for (self: String): String */
2427 val* string_search__String__html_escape(val* self) {
2428 val* var /* : String */;
2429 val* var_ret /* var ret: String */;
2430 char var1 /* : Char */;
2431 short int var2 /* : Bool */;
2432 val* var3 /* : nullable Object */;
2433 char var4 /* : Char */;
2434 static val* varonce;
2435 val* var5 /* : String */;
2436 char* var6 /* : NativeString */;
2437 long var7 /* : Int */;
2438 val* var8 /* : String */;
2439 val* var9 /* : String */;
2440 val* var10 /* : Pattern */;
2441 char var11 /* : Char */;
2442 short int var12 /* : Bool */;
2443 val* var13 /* : nullable Object */;
2444 char var14 /* : Char */;
2445 static val* varonce15;
2446 val* var16 /* : String */;
2447 char* var17 /* : NativeString */;
2448 long var18 /* : Int */;
2449 val* var19 /* : String */;
2450 val* var20 /* : String */;
2451 val* var21 /* : Pattern */;
2452 char var22 /* : Char */;
2453 short int var23 /* : Bool */;
2454 val* var24 /* : nullable Object */;
2455 char var25 /* : Char */;
2456 static val* varonce26;
2457 val* var27 /* : String */;
2458 char* var28 /* : NativeString */;
2459 long var29 /* : Int */;
2460 val* var30 /* : String */;
2461 val* var31 /* : String */;
2462 val* var32 /* : Pattern */;
2463 char var33 /* : Char */;
2464 short int var34 /* : Bool */;
2465 val* var35 /* : nullable Object */;
2466 char var36 /* : Char */;
2467 static val* varonce37;
2468 val* var38 /* : String */;
2469 char* var39 /* : NativeString */;
2470 long var40 /* : Int */;
2471 val* var41 /* : String */;
2472 val* var42 /* : String */;
2473 val* var43 /* : Pattern */;
2474 var_ret = self;
2475 var1 = '&';
2476 var3 = BOX_kernel__Char(var1); /* autobox from Char to nullable Object */
2477 var2 = ((short int (*)(val*, val*))(var_ret->class->vft[COLOR_abstract_collection__Collection__has]))(var_ret, var3) /* has on <var_ret:String>*/;
2478 if (var2){
2479 var4 = '&';
2480 if (varonce) {
2481 var5 = varonce;
2482 } else {
2483 var6 = "&amp;";
2484 var7 = 5;
2485 var8 = string__NativeString__to_s_with_length(var6, var7);
2486 var5 = var8;
2487 varonce = var5;
2488 }
2489 var10 = BOX_kernel__Char(var4); /* autobox from Char to Pattern */
2490 var9 = ((val* (*)(val*, val*, val*))(var_ret->class->vft[COLOR_string_search__String__replace]))(var_ret, var10, var5) /* replace on <var_ret:String>*/;
2491 var_ret = var9;
2492 } else {
2493 }
2494 var11 = '<';
2495 var13 = BOX_kernel__Char(var11); /* autobox from Char to nullable Object */
2496 var12 = ((short int (*)(val*, val*))(var_ret->class->vft[COLOR_abstract_collection__Collection__has]))(var_ret, var13) /* has on <var_ret:String>*/;
2497 if (var12){
2498 var14 = '<';
2499 if (varonce15) {
2500 var16 = varonce15;
2501 } else {
2502 var17 = "&lt;";
2503 var18 = 4;
2504 var19 = string__NativeString__to_s_with_length(var17, var18);
2505 var16 = var19;
2506 varonce15 = var16;
2507 }
2508 var21 = BOX_kernel__Char(var14); /* autobox from Char to Pattern */
2509 var20 = ((val* (*)(val*, val*, val*))(var_ret->class->vft[COLOR_string_search__String__replace]))(var_ret, var21, var16) /* replace on <var_ret:String>*/;
2510 var_ret = var20;
2511 } else {
2512 }
2513 var22 = '>';
2514 var24 = BOX_kernel__Char(var22); /* autobox from Char to nullable Object */
2515 var23 = ((short int (*)(val*, val*))(var_ret->class->vft[COLOR_abstract_collection__Collection__has]))(var_ret, var24) /* has on <var_ret:String>*/;
2516 if (var23){
2517 var25 = '>';
2518 if (varonce26) {
2519 var27 = varonce26;
2520 } else {
2521 var28 = "&gt;";
2522 var29 = 4;
2523 var30 = string__NativeString__to_s_with_length(var28, var29);
2524 var27 = var30;
2525 varonce26 = var27;
2526 }
2527 var32 = BOX_kernel__Char(var25); /* autobox from Char to Pattern */
2528 var31 = ((val* (*)(val*, val*, val*))(var_ret->class->vft[COLOR_string_search__String__replace]))(var_ret, var32, var27) /* replace on <var_ret:String>*/;
2529 var_ret = var31;
2530 } else {
2531 }
2532 var33 = '\"';
2533 var35 = BOX_kernel__Char(var33); /* autobox from Char to nullable Object */
2534 var34 = ((short int (*)(val*, val*))(var_ret->class->vft[COLOR_abstract_collection__Collection__has]))(var_ret, var35) /* has on <var_ret:String>*/;
2535 if (var34){
2536 var36 = '\"';
2537 if (varonce37) {
2538 var38 = varonce37;
2539 } else {
2540 var39 = "&quot;";
2541 var40 = 6;
2542 var41 = string__NativeString__to_s_with_length(var39, var40);
2543 var38 = var41;
2544 varonce37 = var38;
2545 }
2546 var43 = BOX_kernel__Char(var36); /* autobox from Char to Pattern */
2547 var42 = ((val* (*)(val*, val*, val*))(var_ret->class->vft[COLOR_string_search__String__replace]))(var_ret, var43, var38) /* replace on <var_ret:String>*/;
2548 var_ret = var42;
2549 } else {
2550 }
2551 var = var_ret;
2552 goto RET_LABEL;
2553 RET_LABEL:;
2554 return var;
2555 }
2556 /* method string_search#String#html_escape for (self: Object): String */
2557 val* VIRTUAL_string_search__String__html_escape(val* self) {
2558 val* var /* : String */;
2559 val* var1 /* : String */;
2560 var1 = string_search__String__html_escape(self);
2561 var = var1;
2562 RET_LABEL:;
2563 return var;
2564 }