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