c_src: update with new intern methods
[nit.git] / c_src / opts.sep.1.c
1 #include "opts.sep.0.h"
2 /* method opts#Option#names for (self: Option): Array[String] */
3 val* opts__Option__names(val* self) {
4 val* var /* : Array[String] */;
5 val* var1 /* : Array[String] */;
6 var1 = self->attrs[COLOR_opts__Option___names].val; /* _names on <self:Option> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _names");
9 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 19);
10 show_backtrace(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method opts#Option#names for (self: Object): Array[String] */
17 val* VIRTUAL_opts__Option__names(val* self) {
18 val* var /* : Array[String] */;
19 val* var1 /* : Array[String] */;
20 var1 = opts__Option__names(self);
21 var = var1;
22 RET_LABEL:;
23 return var;
24 }
25 /* method opts#Option#helptext for (self: Option): String */
26 val* opts__Option__helptext(val* self) {
27 val* var /* : String */;
28 val* var1 /* : String */;
29 var1 = self->attrs[COLOR_opts__Option___helptext].val; /* _helptext on <self:Option> */
30 if (var1 == NULL) {
31 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _helptext");
32 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 25);
33 show_backtrace(1);
34 }
35 var = var1;
36 RET_LABEL:;
37 return var;
38 }
39 /* method opts#Option#helptext for (self: Object): String */
40 val* VIRTUAL_opts__Option__helptext(val* self) {
41 val* var /* : String */;
42 val* var1 /* : String */;
43 var1 = opts__Option__helptext(self);
44 var = var1;
45 RET_LABEL:;
46 return var;
47 }
48 /* method opts#Option#errors for (self: Option): Array[String] */
49 val* opts__Option__errors(val* self) {
50 val* var /* : Array[String] */;
51 val* var1 /* : Array[String] */;
52 var1 = self->attrs[COLOR_opts__Option___errors].val; /* _errors on <self:Option> */
53 if (var1 == NULL) {
54 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _errors");
55 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 28);
56 show_backtrace(1);
57 }
58 var = var1;
59 RET_LABEL:;
60 return var;
61 }
62 /* method opts#Option#errors for (self: Object): Array[String] */
63 val* VIRTUAL_opts__Option__errors(val* self) {
64 val* var /* : Array[String] */;
65 val* var1 /* : Array[String] */;
66 var1 = opts__Option__errors(self);
67 var = var1;
68 RET_LABEL:;
69 return var;
70 }
71 /* method opts#Option#mandatory for (self: Option): Bool */
72 short int opts__Option__mandatory(val* self) {
73 short int var /* : Bool */;
74 short int var1 /* : Bool */;
75 var1 = self->attrs[COLOR_opts__Option___mandatory].s; /* _mandatory on <self:Option> */
76 var = var1;
77 RET_LABEL:;
78 return var;
79 }
80 /* method opts#Option#mandatory for (self: Object): Bool */
81 short int VIRTUAL_opts__Option__mandatory(val* self) {
82 short int var /* : Bool */;
83 short int var1 /* : Bool */;
84 var1 = opts__Option__mandatory(self);
85 var = var1;
86 RET_LABEL:;
87 return var;
88 }
89 /* method opts#Option#mandatory= for (self: Option, Bool) */
90 void opts__Option__mandatory_61d(val* self, short int p0) {
91 self->attrs[COLOR_opts__Option___mandatory].s = p0; /* _mandatory on <self:Option> */
92 RET_LABEL:;
93 }
94 /* method opts#Option#mandatory= for (self: Object, Bool) */
95 void VIRTUAL_opts__Option__mandatory_61d(val* self, short int p0) {
96 opts__Option__mandatory_61d(self, p0);
97 RET_LABEL:;
98 }
99 /* method opts#Option#read for (self: Option): Bool */
100 short int opts__Option__read(val* self) {
101 short int var /* : Bool */;
102 short int var1 /* : Bool */;
103 var1 = self->attrs[COLOR_opts__Option___read].s; /* _read on <self:Option> */
104 var = var1;
105 RET_LABEL:;
106 return var;
107 }
108 /* method opts#Option#read for (self: Object): Bool */
109 short int VIRTUAL_opts__Option__read(val* self) {
110 short int var /* : Bool */;
111 short int var1 /* : Bool */;
112 var1 = opts__Option__read(self);
113 var = var1;
114 RET_LABEL:;
115 return var;
116 }
117 /* method opts#Option#value= for (self: Option, nullable Object) */
118 void opts__Option__value_61d(val* self, val* p0) {
119 short int var /* : Bool */;
120 int cltype;
121 int idtype;
122 const struct type* type_struct;
123 const char* var_class_name;
124 /* Covariant cast for argument 0 (value) <p0:nullable Object> isa nullable VALUE */
125 /* <p0:nullable Object> isa nullable VALUE */
126 type_struct = self->type->resolution_table->types[COLOR_nullable_opts__Option_VTVALUE];
127 cltype = type_struct->color;
128 idtype = type_struct->id;
129 if(p0 == NULL) {
130 var = 1;
131 } else {
132 if(cltype >= p0->type->table_size) {
133 var = 0;
134 } else {
135 var = p0->type->type_table[cltype] == idtype;
136 }
137 }
138 if (!var) {
139 var_class_name = p0 == NULL ? "null" : p0->type->name;
140 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable VALUE", var_class_name);
141 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 37);
142 show_backtrace(1);
143 }
144 self->attrs[COLOR_opts__Option___value].val = p0; /* _value on <self:Option> */
145 RET_LABEL:;
146 }
147 /* method opts#Option#value= for (self: Object, nullable Object) */
148 void VIRTUAL_opts__Option__value_61d(val* self, val* p0) {
149 opts__Option__value_61d(self, p0);
150 RET_LABEL:;
151 }
152 /* method opts#Option#value for (self: Option): nullable Object */
153 val* opts__Option__value(val* self) {
154 val* var /* : nullable Object */;
155 val* var1 /* : nullable Object */;
156 short int var2 /* : Bool */;
157 int cltype;
158 int idtype;
159 const struct type* type_struct;
160 short int is_nullable;
161 const char* var_class_name;
162 var1 = self->attrs[COLOR_opts__Option___value].val; /* _value on <self:Option> */
163 /* <var1:nullable Object> isa VALUE */
164 type_struct = self->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
165 cltype = type_struct->color;
166 idtype = type_struct->id;
167 is_nullable = type_struct->is_nullable;
168 if(var1 == NULL) {
169 var2 = is_nullable;
170 } else {
171 if(cltype >= var1->type->table_size) {
172 var2 = 0;
173 } else {
174 var2 = var1->type->type_table[cltype] == idtype;
175 }
176 }
177 if (!var2) {
178 var_class_name = var1 == NULL ? "null" : var1->type->name;
179 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name);
180 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 41);
181 show_backtrace(1);
182 }
183 var = var1;
184 goto RET_LABEL;
185 RET_LABEL:;
186 return var;
187 }
188 /* method opts#Option#value for (self: Object): nullable Object */
189 val* VIRTUAL_opts__Option__value(val* self) {
190 val* var /* : nullable Object */;
191 val* var1 /* : nullable Object */;
192 var1 = opts__Option__value(self);
193 var = var1;
194 RET_LABEL:;
195 return var;
196 }
197 /* method opts#Option#default_value for (self: Option): nullable Object */
198 val* opts__Option__default_value(val* self) {
199 val* var /* : nullable Object */;
200 val* var1 /* : nullable Object */;
201 var1 = self->attrs[COLOR_opts__Option___default_value].val; /* _default_value on <self:Option> */
202 var = var1;
203 RET_LABEL:;
204 return var;
205 }
206 /* method opts#Option#default_value for (self: Object): nullable Object */
207 val* VIRTUAL_opts__Option__default_value(val* self) {
208 val* var /* : nullable Object */;
209 val* var1 /* : nullable Object */;
210 var1 = opts__Option__default_value(self);
211 var = var1;
212 RET_LABEL:;
213 return var;
214 }
215 /* method opts#Option#default_value= for (self: Option, nullable Object) */
216 void opts__Option__default_value_61d(val* self, val* p0) {
217 short int var /* : Bool */;
218 int cltype;
219 int idtype;
220 const struct type* type_struct;
221 const char* var_class_name;
222 /* Covariant cast for argument 0 (default_value) <p0:nullable Object> isa nullable VALUE */
223 /* <p0:nullable Object> isa nullable VALUE */
224 type_struct = self->type->resolution_table->types[COLOR_nullable_opts__Option_VTVALUE];
225 cltype = type_struct->color;
226 idtype = type_struct->id;
227 if(p0 == NULL) {
228 var = 1;
229 } else {
230 if(cltype >= p0->type->table_size) {
231 var = 0;
232 } else {
233 var = p0->type->type_table[cltype] == idtype;
234 }
235 }
236 if (!var) {
237 var_class_name = p0 == NULL ? "null" : p0->type->name;
238 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable VALUE", var_class_name);
239 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 43);
240 show_backtrace(1);
241 }
242 self->attrs[COLOR_opts__Option___default_value].val = p0; /* _default_value on <self:Option> */
243 RET_LABEL:;
244 }
245 /* method opts#Option#default_value= for (self: Object, nullable Object) */
246 void VIRTUAL_opts__Option__default_value_61d(val* self, val* p0) {
247 opts__Option__default_value_61d(self, p0);
248 RET_LABEL:;
249 }
250 /* method opts#Option#init_opt for (self: Option, String, nullable Object, nullable Array[String]) */
251 void opts__Option__init_opt(val* self, val* p0, val* p1, val* p2) {
252 short int var /* : Bool */;
253 int cltype;
254 int idtype;
255 const struct type* type_struct;
256 const char* var_class_name;
257 val* var_help /* var help: String */;
258 val* var_default /* var default: nullable Object */;
259 val* var_names /* var names: nullable Array[String] */;
260 val* var1 /* : null */;
261 short int var2 /* : Bool */;
262 val* var3 /* : Array[String] */;
263 val* var4 /* : Array[nullable Object] */;
264 short int var5 /* : Bool */;
265 short int var6 /* : Bool */;
266 val* var7 /* : Array[String] */;
267 /* Covariant cast for argument 1 (default) <p1:nullable Object> isa nullable VALUE */
268 /* <p1:nullable Object> isa nullable VALUE */
269 type_struct = self->type->resolution_table->types[COLOR_nullable_opts__Option_VTVALUE];
270 cltype = type_struct->color;
271 idtype = type_struct->id;
272 if(p1 == NULL) {
273 var = 1;
274 } else {
275 if(cltype >= p1->type->table_size) {
276 var = 0;
277 } else {
278 var = p1->type->type_table[cltype] == idtype;
279 }
280 }
281 if (!var) {
282 var_class_name = p1 == NULL ? "null" : p1->type->name;
283 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable VALUE", var_class_name);
284 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 46);
285 show_backtrace(1);
286 }
287 var_help = p0;
288 var_default = p1;
289 var_names = p2;
290 var1 = NULL;
291 if (var_names == NULL) {
292 var2 = 1; /* is null */
293 } else {
294 var2 = 0; /* arg is null but recv is not */
295 }
296 if (var2){
297 var3 = NEW_array__Array(&type_array__Arraystring__String);
298 ((void (*)(val*))(var3->class->vft[COLOR_array__Array__init]))(var3) /* init on <var3:Array[String]>*/;
299 self->attrs[COLOR_opts__Option___names].val = var3; /* _names on <self:Option> */
300 } else {
301 var4 = ((val* (*)(val*))(var_names->class->vft[COLOR_array__Collection__to_a]))(var_names) /* to_a on <var_names:nullable Array[String](Array[String])>*/;
302 self->attrs[COLOR_opts__Option___names].val = var4; /* _names on <self:Option> */
303 }
304 self->attrs[COLOR_opts__Option___helptext].val = var_help; /* _helptext on <self:Option> */
305 var5 = 0;
306 self->attrs[COLOR_opts__Option___mandatory].s = var5; /* _mandatory on <self:Option> */
307 var6 = 0;
308 self->attrs[COLOR_opts__Option___read].s = var6; /* _read on <self:Option> */
309 self->attrs[COLOR_opts__Option___default_value].val = var_default; /* _default_value on <self:Option> */
310 self->attrs[COLOR_opts__Option___value].val = var_default; /* _value on <self:Option> */
311 var7 = NEW_array__Array(&type_array__Arraystring__String);
312 ((void (*)(val*))(var7->class->vft[COLOR_array__Array__init]))(var7) /* init on <var7:Array[String]>*/;
313 self->attrs[COLOR_opts__Option___errors].val = var7; /* _errors on <self:Option> */
314 RET_LABEL:;
315 }
316 /* method opts#Option#init_opt for (self: Object, String, nullable Object, nullable Array[String]) */
317 void VIRTUAL_opts__Option__init_opt(val* self, val* p0, val* p1, val* p2) {
318 opts__Option__init_opt(self, p0, p1, p2);
319 RET_LABEL:;
320 }
321 /* method opts#Option#add_aliases for (self: Option, Array[String]) */
322 void opts__Option__add_aliases(val* self, val* p0) {
323 val* var_names /* var names: Array[String] */;
324 val* var /* : Array[String] */;
325 var_names = p0;
326 var = self->attrs[COLOR_opts__Option___names].val; /* _names on <self:Option> */
327 if (var == NULL) {
328 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _names");
329 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 63);
330 show_backtrace(1);
331 }
332 ((void (*)(val*, val*))(var->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var, var_names) /* add_all on <var:Array[String]>*/;
333 RET_LABEL:;
334 }
335 /* method opts#Option#add_aliases for (self: Object, Array[String]) */
336 void VIRTUAL_opts__Option__add_aliases(val* self, val* p0) {
337 opts__Option__add_aliases(self, p0);
338 RET_LABEL:;
339 }
340 /* method opts#Option#to_s for (self: Option): String */
341 val* opts__Option__to_s(val* self) {
342 val* var /* : String */;
343 long var1 /* : Int */;
344 val* var2 /* : String */;
345 var1 = 2;
346 var2 = ((val* (*)(val*, long))(self->class->vft[COLOR_opts__Option__pretty]))(self, var1) /* pretty on <self:Option>*/;
347 var = var2;
348 goto RET_LABEL;
349 RET_LABEL:;
350 return var;
351 }
352 /* method opts#Option#to_s for (self: Object): String */
353 val* VIRTUAL_opts__Option__to_s(val* self) {
354 val* var /* : String */;
355 val* var1 /* : String */;
356 var1 = opts__Option__to_s(self);
357 var = var1;
358 RET_LABEL:;
359 return var;
360 }
361 /* method opts#Option#pretty for (self: Option, Int): String */
362 val* opts__Option__pretty(val* self, long p0) {
363 val* var /* : String */;
364 long var_off /* var off: Int */;
365 val* var1 /* : Buffer */;
366 static val* varonce;
367 val* var2 /* : String */;
368 char* var3 /* : NativeString */;
369 long var4 /* : Int */;
370 val* var5 /* : String */;
371 val* var_text /* var text: Buffer */;
372 val* var6 /* : Array[String] */;
373 static val* varonce7;
374 val* var8 /* : String */;
375 char* var9 /* : NativeString */;
376 long var10 /* : Int */;
377 val* var11 /* : String */;
378 val* var12 /* : String */;
379 static val* varonce13;
380 val* var14 /* : String */;
381 char* var15 /* : NativeString */;
382 long var16 /* : Int */;
383 val* var17 /* : String */;
384 long var18 /* : Int */;
385 long var19 /* : Int */;
386 long var21 /* : Int */;
387 long var_rest /* var rest: Int */;
388 long var22 /* : Int */;
389 short int var23 /* : Bool */;
390 short int var25 /* : Bool */;
391 int cltype;
392 int idtype;
393 const char* var_class_name;
394 short int var26 /* : Bool */;
395 static val* varonce27;
396 val* var28 /* : String */;
397 char* var29 /* : NativeString */;
398 long var30 /* : Int */;
399 val* var31 /* : String */;
400 val* var32 /* : String */;
401 val* var33 /* : String */;
402 val* var34 /* : String */;
403 var_off = p0;
404 var1 = NEW_string__Buffer(&type_string__Buffer);
405 if (varonce) {
406 var2 = varonce;
407 } else {
408 var3 = " ";
409 var4 = 2;
410 var5 = string__NativeString__to_s_with_length(var3, var4);
411 var2 = var5;
412 varonce = var2;
413 }
414 ((void (*)(val*, val*))(var1->class->vft[COLOR_string__Buffer__from]))(var1, var2) /* from on <var1:Buffer>*/;
415 var_text = var1;
416 var6 = self->attrs[COLOR_opts__Option___names].val; /* _names on <self:Option> */
417 if (var6 == NULL) {
418 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _names");
419 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 72);
420 show_backtrace(1);
421 }
422 if (varonce7) {
423 var8 = varonce7;
424 } else {
425 var9 = ", ";
426 var10 = 2;
427 var11 = string__NativeString__to_s_with_length(var9, var10);
428 var8 = var11;
429 varonce7 = var8;
430 }
431 var12 = ((val* (*)(val*, val*))(var6->class->vft[COLOR_string__Collection__join]))(var6, var8) /* join on <var6:Array[String]>*/;
432 ((void (*)(val*, val*))(var_text->class->vft[COLOR_abstract_collection__Sequence__append]))(var_text, var12) /* append on <var_text:Buffer>*/;
433 if (varonce13) {
434 var14 = varonce13;
435 } else {
436 var15 = " ";
437 var16 = 2;
438 var17 = string__NativeString__to_s_with_length(var15, var16);
439 var14 = var17;
440 varonce13 = var14;
441 }
442 ((void (*)(val*, val*))(var_text->class->vft[COLOR_abstract_collection__Sequence__append]))(var_text, var14) /* append on <var_text:Buffer>*/;
443 var18 = ((long (*)(val*))(var_text->class->vft[COLOR_abstract_collection__Collection__length]))(var_text) /* length on <var_text:Buffer>*/;
444 { /* Inline kernel#Int#- (var_off,var18) */
445 var21 = var_off - var18;
446 var19 = var21;
447 goto RET_LABEL20;
448 RET_LABEL20:(void)0;
449 }
450 var_rest = var19;
451 var22 = 0;
452 { /* Inline kernel#Int#> (var_rest,var22) */
453 /* Covariant cast for argument 0 (i) <var22:Int> isa OTHER */
454 /* <var22:Int> isa OTHER */
455 var25 = 1; /* easy <var22:Int> isa OTHER*/
456 if (!var25) {
457 var_class_name = type_kernel__Int.name;
458 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
459 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 267);
460 show_backtrace(1);
461 }
462 var26 = var_rest > var22;
463 var23 = var26;
464 goto RET_LABEL24;
465 RET_LABEL24:(void)0;
466 }
467 if (var23){
468 if (varonce27) {
469 var28 = varonce27;
470 } else {
471 var29 = " ";
472 var30 = 1;
473 var31 = string__NativeString__to_s_with_length(var29, var30);
474 var28 = var31;
475 varonce27 = var28;
476 }
477 var32 = ((val* (*)(val*, long))(var28->class->vft[COLOR_string__String___42d]))(var28, var_rest) /* * on <var28:String>*/;
478 ((void (*)(val*, val*))(var_text->class->vft[COLOR_abstract_collection__Sequence__append]))(var_text, var32) /* append on <var_text:Buffer>*/;
479 } else {
480 }
481 var33 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__helptext]))(self) /* helptext on <self:Option>*/;
482 ((void (*)(val*, val*))(var_text->class->vft[COLOR_abstract_collection__Sequence__append]))(var_text, var33) /* append on <var_text:Buffer>*/;
483 var34 = ((val* (*)(val*))(var_text->class->vft[COLOR_string__Object__to_s]))(var_text) /* to_s on <var_text:Buffer>*/;
484 var = var34;
485 goto RET_LABEL;
486 RET_LABEL:;
487 return var;
488 }
489 /* method opts#Option#pretty for (self: Object, Int): String */
490 val* VIRTUAL_opts__Option__pretty(val* self, long p0) {
491 val* var /* : String */;
492 val* var1 /* : String */;
493 var1 = opts__Option__pretty(self, p0);
494 var = var1;
495 RET_LABEL:;
496 return var;
497 }
498 /* method opts#Option#pretty_default for (self: Option): String */
499 val* opts__Option__pretty_default(val* self) {
500 val* var /* : String */;
501 val* var1 /* : nullable Object */;
502 val* var_dv /* var dv: nullable Object */;
503 val* var2 /* : null */;
504 short int var3 /* : Bool */;
505 val* var4 /* : Array[Object] */;
506 long var5 /* : Int */;
507 val* var_ /* var : Array[Object] */;
508 static val* varonce;
509 val* var6 /* : String */;
510 char* var7 /* : NativeString */;
511 long var8 /* : Int */;
512 val* var9 /* : String */;
513 static val* varonce10;
514 val* var11 /* : String */;
515 char* var12 /* : NativeString */;
516 long var13 /* : Int */;
517 val* var14 /* : String */;
518 val* var15 /* : String */;
519 static val* varonce16;
520 val* var17 /* : String */;
521 char* var18 /* : NativeString */;
522 long var19 /* : Int */;
523 val* var20 /* : String */;
524 var1 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__default_value]))(self) /* default_value on <self:Option>*/;
525 var_dv = var1;
526 var2 = NULL;
527 if (var_dv == NULL) {
528 var3 = 0; /* is null */
529 } else {
530 var3 = 1; /* arg is null and recv is not */
531 }
532 if (var3){
533 var4 = NEW_array__Array(&type_array__Arraykernel__Object);
534 var5 = 3;
535 ((void (*)(val*, long))(var4->class->vft[COLOR_array__Array__with_capacity]))(var4, var5) /* with_capacity on <var4:Array[Object]>*/;
536 var_ = var4;
537 if (varonce) {
538 var6 = varonce;
539 } else {
540 var7 = " (";
541 var8 = 2;
542 var9 = string__NativeString__to_s_with_length(var7, var8);
543 var6 = var9;
544 varonce = var6;
545 }
546 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var6) /* add on <var_:Array[Object]>*/;
547 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var_dv) /* add on <var_:Array[Object]>*/;
548 if (varonce10) {
549 var11 = varonce10;
550 } else {
551 var12 = ")";
552 var13 = 1;
553 var14 = string__NativeString__to_s_with_length(var12, var13);
554 var11 = var14;
555 varonce10 = var11;
556 }
557 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var11) /* add on <var_:Array[Object]>*/;
558 var15 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
559 var = var15;
560 goto RET_LABEL;
561 } else {
562 }
563 if (varonce16) {
564 var17 = varonce16;
565 } else {
566 var18 = "";
567 var19 = 0;
568 var20 = string__NativeString__to_s_with_length(var18, var19);
569 var17 = var20;
570 varonce16 = var17;
571 }
572 var = var17;
573 goto RET_LABEL;
574 RET_LABEL:;
575 return var;
576 }
577 /* method opts#Option#pretty_default for (self: Object): String */
578 val* VIRTUAL_opts__Option__pretty_default(val* self) {
579 val* var /* : String */;
580 val* var1 /* : String */;
581 var1 = opts__Option__pretty_default(self);
582 var = var1;
583 RET_LABEL:;
584 return var;
585 }
586 /* method opts#Option#read_param for (self: Option, Iterator[String]) */
587 void opts__Option__read_param(val* self, val* p0) {
588 val* var_it /* var it: Iterator[String] */;
589 short int var /* : Bool */;
590 var_it = p0;
591 var = 1;
592 self->attrs[COLOR_opts__Option___read].s = var; /* _read on <self:Option> */
593 RET_LABEL:;
594 }
595 /* method opts#Option#read_param for (self: Object, Iterator[String]) */
596 void VIRTUAL_opts__Option__read_param(val* self, val* p0) {
597 opts__Option__read_param(self, p0);
598 RET_LABEL:;
599 }
600 /* method opts#OptionText#init for (self: OptionText, String) */
601 void opts__OptionText__init(val* self, val* p0) {
602 val* var_text /* var text: String */;
603 val* var /* : null */;
604 val* var1 /* : null */;
605 var_text = p0;
606 var = NULL;
607 var1 = NULL;
608 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_opts__Option__init_opt]))(self, var_text, var, var1) /* init_opt on <self:OptionText>*/;
609 RET_LABEL:;
610 }
611 /* method opts#OptionText#init for (self: Object, String) */
612 void VIRTUAL_opts__OptionText__init(val* self, val* p0) {
613 opts__OptionText__init(self, p0);
614 RET_LABEL:;
615 }
616 /* method opts#OptionText#pretty for (self: OptionText, Int): String */
617 val* opts__OptionText__pretty(val* self, long p0) {
618 val* var /* : String */;
619 long var_off /* var off: Int */;
620 val* var1 /* : String */;
621 var_off = p0;
622 var1 = ((val* (*)(val*))(self->class->vft[COLOR_string__Object__to_s]))(self) /* to_s on <self:OptionText>*/;
623 var = var1;
624 goto RET_LABEL;
625 RET_LABEL:;
626 return var;
627 }
628 /* method opts#OptionText#pretty for (self: Object, Int): String */
629 val* VIRTUAL_opts__OptionText__pretty(val* self, long p0) {
630 val* var /* : String */;
631 val* var1 /* : String */;
632 var1 = opts__OptionText__pretty(self, p0);
633 var = var1;
634 RET_LABEL:;
635 return var;
636 }
637 /* method opts#OptionText#to_s for (self: OptionText): String */
638 val* opts__OptionText__to_s(val* self) {
639 val* var /* : String */;
640 val* var1 /* : String */;
641 var1 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__helptext]))(self) /* helptext on <self:OptionText>*/;
642 var = var1;
643 goto RET_LABEL;
644 RET_LABEL:;
645 return var;
646 }
647 /* method opts#OptionText#to_s for (self: Object): String */
648 val* VIRTUAL_opts__OptionText__to_s(val* self) {
649 val* var /* : String */;
650 val* var1 /* : String */;
651 var1 = opts__OptionText__to_s(self);
652 var = var1;
653 RET_LABEL:;
654 return var;
655 }
656 /* method opts#OptionBool#init for (self: OptionBool, String, Array[String]) */
657 void opts__OptionBool__init(val* self, val* p0, val* p1) {
658 val* var_help /* var help: String */;
659 val* var_names /* var names: Array[String] */;
660 short int var /* : Bool */;
661 val* var1 /* : nullable Object */;
662 var_help = p0;
663 var_names = p1;
664 var = 0;
665 var1 = BOX_kernel__Bool(var); /* autobox from Bool to nullable Object */
666 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_opts__Option__init_opt]))(self, var_help, var1, var_names) /* init_opt on <self:OptionBool>*/;
667 RET_LABEL:;
668 }
669 /* method opts#OptionBool#init for (self: Object, String, Array[String]) */
670 void VIRTUAL_opts__OptionBool__init(val* self, val* p0, val* p1) {
671 opts__OptionBool__init(self, p0, p1);
672 RET_LABEL:;
673 }
674 /* method opts#OptionBool#read_param for (self: OptionBool, Iterator[String]) */
675 void opts__OptionBool__read_param(val* self, val* p0) {
676 val* var_it /* var it: Iterator[String] */;
677 short int var /* : Bool */;
678 val* var1 /* : nullable Object */;
679 var_it = p0;
680 ((void (*)(val*, val*))(self->class->vft[COLOR_opts__OptionBool__read_param]))(self, p0) /* read_param on <self:OptionBool>*/;
681 var = 1;
682 var1 = BOX_kernel__Bool(var); /* autobox from Bool to nullable Object */
683 ((void (*)(val*, val*))(self->class->vft[COLOR_opts__Option__value_61d]))(self, var1) /* value= on <self:OptionBool>*/;
684 RET_LABEL:;
685 }
686 /* method opts#OptionBool#read_param for (self: Object, Iterator[String]) */
687 void VIRTUAL_opts__OptionBool__read_param(val* self, val* p0) {
688 opts__OptionBool__read_param(self, p0);
689 RET_LABEL:;
690 }
691 /* method opts#OptionCount#init for (self: OptionCount, String, Array[String]) */
692 void opts__OptionCount__init(val* self, val* p0, val* p1) {
693 val* var_help /* var help: String */;
694 val* var_names /* var names: Array[String] */;
695 long var /* : Int */;
696 val* var1 /* : nullable Object */;
697 var_help = p0;
698 var_names = p1;
699 var = 0;
700 var1 = BOX_kernel__Int(var); /* autobox from Int to nullable Object */
701 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_opts__Option__init_opt]))(self, var_help, var1, var_names) /* init_opt on <self:OptionCount>*/;
702 RET_LABEL:;
703 }
704 /* method opts#OptionCount#init for (self: Object, String, Array[String]) */
705 void VIRTUAL_opts__OptionCount__init(val* self, val* p0, val* p1) {
706 opts__OptionCount__init(self, p0, p1);
707 RET_LABEL:;
708 }
709 /* method opts#OptionCount#read_param for (self: OptionCount, Iterator[String]) */
710 void opts__OptionCount__read_param(val* self, val* p0) {
711 val* var_it /* var it: Iterator[String] */;
712 val* var_ /* var : OptionCount */;
713 val* var /* : nullable Object */;
714 long var1 /* : Int */;
715 long var2 /* : Int */;
716 long var4 /* : Int */;
717 long var5 /* : Int */;
718 val* var6 /* : nullable Object */;
719 var_it = p0;
720 ((void (*)(val*, val*))(self->class->vft[COLOR_opts__OptionCount__read_param]))(self, p0) /* read_param on <self:OptionCount>*/;
721 var_ = self;
722 var = ((val* (*)(val*))(var_->class->vft[COLOR_opts__Option__value]))(var_) /* value on <var_:OptionCount>*/;
723 var1 = 1;
724 { /* Inline kernel#Int#+ (var,var1) */
725 var4 = ((struct instance_kernel__Int*)var)->value; /* autounbox from nullable Object to Int */;
726 var5 = var4 + var1;
727 var2 = var5;
728 goto RET_LABEL3;
729 RET_LABEL3:(void)0;
730 }
731 var6 = BOX_kernel__Int(var2); /* autobox from Int to nullable Object */
732 ((void (*)(val*, val*))(var_->class->vft[COLOR_opts__Option__value_61d]))(var_, var6) /* value= on <var_:OptionCount>*/;
733 RET_LABEL:;
734 }
735 /* method opts#OptionCount#read_param for (self: Object, Iterator[String]) */
736 void VIRTUAL_opts__OptionCount__read_param(val* self, val* p0) {
737 opts__OptionCount__read_param(self, p0);
738 RET_LABEL:;
739 }
740 /* method opts#OptionParameter#convert for (self: OptionParameter, String): nullable Object */
741 val* opts__OptionParameter__convert(val* self, val* p0) {
742 val* var /* : nullable Object */;
743 const char* var_class_name;
744 var_class_name = self == NULL ? "null" : self->type->name;
745 fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "convert", var_class_name);
746 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 133);
747 show_backtrace(1);
748 RET_LABEL:;
749 return var;
750 }
751 /* method opts#OptionParameter#convert for (self: Object, String): nullable Object */
752 val* VIRTUAL_opts__OptionParameter__convert(val* self, val* p0) {
753 val* var /* : nullable Object */;
754 val* var1 /* : nullable Object */;
755 var1 = opts__OptionParameter__convert(self, p0);
756 var = var1;
757 RET_LABEL:;
758 return var;
759 }
760 /* method opts#OptionParameter#parameter_mandatory for (self: OptionParameter): Bool */
761 short int opts__OptionParameter__parameter_mandatory(val* self) {
762 short int var /* : Bool */;
763 short int var1 /* : Bool */;
764 var1 = self->attrs[COLOR_opts__OptionParameter___parameter_mandatory].s; /* _parameter_mandatory on <self:OptionParameter> */
765 var = var1;
766 RET_LABEL:;
767 return var;
768 }
769 /* method opts#OptionParameter#parameter_mandatory for (self: Object): Bool */
770 short int VIRTUAL_opts__OptionParameter__parameter_mandatory(val* self) {
771 short int var /* : Bool */;
772 short int var1 /* : Bool */;
773 var1 = opts__OptionParameter__parameter_mandatory(self);
774 var = var1;
775 RET_LABEL:;
776 return var;
777 }
778 /* method opts#OptionParameter#parameter_mandatory= for (self: OptionParameter, Bool) */
779 void opts__OptionParameter__parameter_mandatory_61d(val* self, short int p0) {
780 self->attrs[COLOR_opts__OptionParameter___parameter_mandatory].s = p0; /* _parameter_mandatory on <self:OptionParameter> */
781 RET_LABEL:;
782 }
783 /* method opts#OptionParameter#parameter_mandatory= for (self: Object, Bool) */
784 void VIRTUAL_opts__OptionParameter__parameter_mandatory_61d(val* self, short int p0) {
785 opts__OptionParameter__parameter_mandatory_61d(self, p0);
786 RET_LABEL:;
787 }
788 /* method opts#OptionParameter#read_param for (self: OptionParameter, Iterator[String]) */
789 void opts__OptionParameter__read_param(val* self, val* p0) {
790 val* var_it /* var it: Iterator[String] */;
791 short int var /* : Bool */;
792 short int var1 /* : Bool */;
793 short int var_ /* var : Bool */;
794 val* var2 /* : nullable Object */;
795 val* var3 /* : StringCharView */;
796 val* var4 /* : nullable Object */;
797 char var5 /* : Char */;
798 short int var6 /* : Bool */;
799 short int var8 /* : Bool */;
800 char var9 /* : Char */;
801 short int var10 /* : Bool */;
802 val* var11 /* : nullable Object */;
803 val* var12 /* : nullable Object */;
804 short int var13 /* : Bool */;
805 val* var14 /* : Array[String] */;
806 static val* varonce;
807 val* var15 /* : String */;
808 char* var16 /* : NativeString */;
809 long var17 /* : Int */;
810 val* var18 /* : String */;
811 val* var19 /* : Array[String] */;
812 val* var20 /* : nullable Object */;
813 static val* varonce21;
814 val* var22 /* : String */;
815 char* var23 /* : NativeString */;
816 long var24 /* : Int */;
817 val* var25 /* : String */;
818 val* var26 /* : Array[Object] */;
819 long var27 /* : Int */;
820 val* var28 /* : NativeArray[Object] */;
821 val* var29 /* : String */;
822 var_it = p0;
823 ((void (*)(val*, val*))(self->class->vft[COLOR_opts__OptionParameter__read_param]))(self, p0) /* read_param on <self:OptionParameter>*/;
824 var1 = ((short int (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_it) /* is_ok on <var_it:Iterator[String]>*/;
825 var_ = var1;
826 if (var1){
827 var2 = ((val* (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__item]))(var_it) /* item on <var_it:Iterator[String]>*/;
828 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_string__AbstractString__chars]))(var2) /* chars on <var2:nullable Object(String)>*/;
829 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__first]))(var3) /* first on <var3:StringCharView>*/;
830 var5 = '-';
831 { /* Inline kernel#Char#!= (var4,var5) */
832 var8 = (var4 != NULL) && (var4->class == &class_kernel__Char);
833 if (var8) {
834 var9 = ((struct instance_kernel__Char*)var4)->value; /* autounbox from nullable Object to Char */;
835 var8 = (var9 == var5);
836 }
837 var10 = !var8;
838 var6 = var10;
839 goto RET_LABEL7;
840 RET_LABEL7:(void)0;
841 }
842 var = var6;
843 } else {
844 var = var_;
845 }
846 if (var){
847 var11 = ((val* (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__item]))(var_it) /* item on <var_it:Iterator[String]>*/;
848 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_opts__OptionParameter__convert]))(self, var11) /* convert on <self:OptionParameter>*/;
849 ((void (*)(val*, val*))(self->class->vft[COLOR_opts__Option__value_61d]))(self, var12) /* value= on <self:OptionParameter>*/;
850 ((void (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__next]))(var_it) /* next on <var_it:Iterator[String]>*/;
851 } else {
852 var13 = self->attrs[COLOR_opts__OptionParameter___parameter_mandatory].s; /* _parameter_mandatory on <self:OptionParameter> */
853 if (var13){
854 var14 = self->attrs[COLOR_opts__Option___errors].val; /* _errors on <self:OptionParameter> */
855 if (var14 == NULL) {
856 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _errors");
857 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 146);
858 show_backtrace(1);
859 }
860 if (varonce) {
861 var15 = varonce;
862 } else {
863 var16 = "Parameter expected for option ";
864 var17 = 30;
865 var18 = string__NativeString__to_s_with_length(var16, var17);
866 var15 = var18;
867 varonce = var15;
868 }
869 var19 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__names]))(self) /* names on <self:OptionParameter>*/;
870 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_abstract_collection__Collection__first]))(var19) /* first on <var19:Array[String]>*/;
871 if (varonce21) {
872 var22 = varonce21;
873 } else {
874 var23 = ".";
875 var24 = 1;
876 var25 = string__NativeString__to_s_with_length(var23, var24);
877 var22 = var25;
878 varonce21 = var22;
879 }
880 var26 = NEW_array__Array(&type_array__Arraykernel__Object);
881 { /* var26 = array_instance Array[Object] */
882 var27 = 3;
883 var28 = NEW_array__NativeArray(var27, &type_array__NativeArraykernel__Object);
884 ((struct instance_array__NativeArray*)var28)->values[0] = (val*) var15;
885 ((struct instance_array__NativeArray*)var28)->values[1] = (val*) var20;
886 ((struct instance_array__NativeArray*)var28)->values[2] = (val*) var22;
887 ((void (*)(val*, val*, long))(var26->class->vft[COLOR_array__Array__with_native]))(var26, var28, var27) /* with_native on <var26:Array[Object]>*/;
888 }
889 var29 = ((val* (*)(val*))(var26->class->vft[COLOR_string__Object__to_s]))(var26) /* to_s on <var26:Array[Object]>*/;
890 ((void (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var14, var29) /* add on <var14:Array[String]>*/;
891 } else {
892 }
893 }
894 RET_LABEL:;
895 }
896 /* method opts#OptionParameter#read_param for (self: Object, Iterator[String]) */
897 void VIRTUAL_opts__OptionParameter__read_param(val* self, val* p0) {
898 opts__OptionParameter__read_param(self, p0);
899 RET_LABEL:;
900 }
901 /* method opts#OptionParameter#init_opt for (self: OptionParameter, String, nullable Object, nullable Array[String]) */
902 void opts__OptionParameter__init_opt(val* self, val* p0, val* p1, val* p2) {
903 short int var /* : Bool */;
904 int cltype;
905 int idtype;
906 const struct type* type_struct;
907 const char* var_class_name;
908 val* var_h /* var h: String */;
909 val* var_d /* var d: nullable Object */;
910 val* var_n /* var n: nullable Array[String] */;
911 short int var1 /* : Bool */;
912 /* Covariant cast for argument 1 (d) <p1:nullable Object> isa nullable VALUE */
913 /* <p1:nullable Object> isa nullable VALUE */
914 type_struct = self->type->resolution_table->types[COLOR_nullable_opts__Option_VTVALUE];
915 cltype = type_struct->color;
916 idtype = type_struct->id;
917 if(p1 == NULL) {
918 var = 1;
919 } else {
920 if(cltype >= p1->type->table_size) {
921 var = 0;
922 } else {
923 var = p1->type->type_table[cltype] == idtype;
924 }
925 }
926 if (!var) {
927 var_class_name = p1 == NULL ? "null" : p1->type->name;
928 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable VALUE", var_class_name);
929 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 151);
930 show_backtrace(1);
931 }
932 var_h = p0;
933 var_d = p1;
934 var_n = p2;
935 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_opts__Option__init_opt]))(self, p0, p1, p2) /* init_opt on <self:OptionParameter>*/;
936 var1 = 1;
937 self->attrs[COLOR_opts__OptionParameter___parameter_mandatory].s = var1; /* _parameter_mandatory on <self:OptionParameter> */
938 RET_LABEL:;
939 }
940 /* method opts#OptionParameter#init_opt for (self: Object, String, nullable Object, nullable Array[String]) */
941 void VIRTUAL_opts__OptionParameter__init_opt(val* self, val* p0, val* p1, val* p2) {
942 opts__OptionParameter__init_opt(self, p0, p1, p2);
943 RET_LABEL:;
944 }
945 /* method opts#OptionString#init for (self: OptionString, String, Array[String]) */
946 void opts__OptionString__init(val* self, val* p0, val* p1) {
947 val* var_help /* var help: String */;
948 val* var_names /* var names: Array[String] */;
949 val* var /* : null */;
950 var_help = p0;
951 var_names = p1;
952 var = NULL;
953 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_opts__OptionParameter__init_opt]))(self, var_help, var, var_names) /* init_opt on <self:OptionString>*/;
954 RET_LABEL:;
955 }
956 /* method opts#OptionString#init for (self: Object, String, Array[String]) */
957 void VIRTUAL_opts__OptionString__init(val* self, val* p0, val* p1) {
958 opts__OptionString__init(self, p0, p1);
959 RET_LABEL:;
960 }
961 /* method opts#OptionString#convert for (self: OptionString, String): nullable String */
962 val* opts__OptionString__convert(val* self, val* p0) {
963 val* var /* : nullable String */;
964 val* var_str /* var str: String */;
965 short int var1 /* : Bool */;
966 int cltype;
967 int idtype;
968 const struct type* type_struct;
969 const char* var_class_name;
970 var_str = p0;
971 /* <var_str:String> isa VALUE */
972 type_struct = self->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
973 cltype = type_struct->color;
974 idtype = type_struct->id;
975 if(cltype >= var_str->type->table_size) {
976 var1 = 0;
977 } else {
978 var1 = var_str->type->type_table[cltype] == idtype;
979 }
980 if (!var1) {
981 var_class_name = var_str == NULL ? "null" : var_str->type->name;
982 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name);
983 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 164);
984 show_backtrace(1);
985 }
986 var = var_str;
987 goto RET_LABEL;
988 RET_LABEL:;
989 return var;
990 }
991 /* method opts#OptionString#convert for (self: Object, String): nullable Object */
992 val* VIRTUAL_opts__OptionString__convert(val* self, val* p0) {
993 val* var /* : nullable Object */;
994 val* var1 /* : nullable String */;
995 var1 = opts__OptionString__convert(self, p0);
996 var = var1;
997 RET_LABEL:;
998 return var;
999 }
1000 /* method opts#OptionEnum#init for (self: OptionEnum, Array[String], String, Int, Array[String]) */
1001 void opts__OptionEnum__init(val* self, val* p0, val* p1, long p2, val* p3) {
1002 val* var_values /* var values: Array[String] */;
1003 val* var_help /* var help: String */;
1004 long var_default /* var default: Int */;
1005 val* var_names /* var names: Array[String] */;
1006 long var /* : Int */;
1007 long var1 /* : Int */;
1008 short int var2 /* : Bool */;
1009 short int var4 /* : Bool */;
1010 int cltype;
1011 int idtype;
1012 const char* var_class_name;
1013 short int var5 /* : Bool */;
1014 val* var6 /* : Array[nullable Object] */;
1015 static val* varonce;
1016 val* var7 /* : String */;
1017 char* var8 /* : NativeString */;
1018 long var9 /* : Int */;
1019 val* var10 /* : String */;
1020 static val* varonce11;
1021 val* var12 /* : String */;
1022 char* var13 /* : NativeString */;
1023 long var14 /* : Int */;
1024 val* var15 /* : String */;
1025 val* var16 /* : String */;
1026 static val* varonce17;
1027 val* var18 /* : String */;
1028 char* var19 /* : NativeString */;
1029 long var20 /* : Int */;
1030 val* var21 /* : String */;
1031 val* var22 /* : Array[Object] */;
1032 long var23 /* : Int */;
1033 val* var24 /* : NativeArray[Object] */;
1034 val* var25 /* : String */;
1035 val* var26 /* : nullable Object */;
1036 var_values = p0;
1037 var_help = p1;
1038 var_default = p2;
1039 var_names = p3;
1040 var = ((long (*)(val*))(var_values->class->vft[COLOR_abstract_collection__Collection__length]))(var_values) /* length on <var_values:Array[String]>*/;
1041 var1 = 0;
1042 { /* Inline kernel#Int#> (var,var1) */
1043 /* Covariant cast for argument 0 (i) <var1:Int> isa OTHER */
1044 /* <var1:Int> isa OTHER */
1045 var4 = 1; /* easy <var1:Int> isa OTHER*/
1046 if (!var4) {
1047 var_class_name = type_kernel__Int.name;
1048 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1049 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 267);
1050 show_backtrace(1);
1051 }
1052 var5 = var > var1;
1053 var2 = var5;
1054 goto RET_LABEL3;
1055 RET_LABEL3:(void)0;
1056 }
1057 if (!var2) {
1058 fprintf(stderr, "Runtime error: %s", "Assert failed");
1059 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 174);
1060 show_backtrace(1);
1061 }
1062 var6 = ((val* (*)(val*))(var_values->class->vft[COLOR_array__Collection__to_a]))(var_values) /* to_a on <var_values:Array[String]>*/;
1063 self->attrs[COLOR_opts__OptionEnum___values].val = var6; /* _values on <self:OptionEnum> */
1064 if (varonce) {
1065 var7 = varonce;
1066 } else {
1067 var8 = " <";
1068 var9 = 2;
1069 var10 = string__NativeString__to_s_with_length(var8, var9);
1070 var7 = var10;
1071 varonce = var7;
1072 }
1073 if (varonce11) {
1074 var12 = varonce11;
1075 } else {
1076 var13 = ", ";
1077 var14 = 2;
1078 var15 = string__NativeString__to_s_with_length(var13, var14);
1079 var12 = var15;
1080 varonce11 = var12;
1081 }
1082 var16 = ((val* (*)(val*, val*))(var_values->class->vft[COLOR_string__Collection__join]))(var_values, var12) /* join on <var_values:Array[String]>*/;
1083 if (varonce17) {
1084 var18 = varonce17;
1085 } else {
1086 var19 = ">";
1087 var20 = 1;
1088 var21 = string__NativeString__to_s_with_length(var19, var20);
1089 var18 = var21;
1090 varonce17 = var18;
1091 }
1092 var22 = NEW_array__Array(&type_array__Arraykernel__Object);
1093 { /* var22 = array_instance Array[Object] */
1094 var23 = 4;
1095 var24 = NEW_array__NativeArray(var23, &type_array__NativeArraykernel__Object);
1096 ((struct instance_array__NativeArray*)var24)->values[0] = (val*) var_help;
1097 ((struct instance_array__NativeArray*)var24)->values[1] = (val*) var7;
1098 ((struct instance_array__NativeArray*)var24)->values[2] = (val*) var16;
1099 ((struct instance_array__NativeArray*)var24)->values[3] = (val*) var18;
1100 ((void (*)(val*, val*, long))(var22->class->vft[COLOR_array__Array__with_native]))(var22, var24, var23) /* with_native on <var22:Array[Object]>*/;
1101 }
1102 var25 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__to_s]))(var22) /* to_s on <var22:Array[Object]>*/;
1103 var26 = BOX_kernel__Int(var_default); /* autobox from Int to nullable Object */
1104 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_opts__OptionParameter__init_opt]))(self, var25, var26, var_names) /* init_opt on <self:OptionEnum>*/;
1105 RET_LABEL:;
1106 }
1107 /* method opts#OptionEnum#init for (self: Object, Array[String], String, Int, Array[String]) */
1108 void VIRTUAL_opts__OptionEnum__init(val* self, val* p0, val* p1, long p2, val* p3) {
1109 opts__OptionEnum__init(self, p0, p1, p2, p3);
1110 RET_LABEL:;
1111 }
1112 /* method opts#OptionEnum#convert for (self: OptionEnum, String): Int */
1113 long opts__OptionEnum__convert(val* self, val* p0) {
1114 long var /* : Int */;
1115 val* var_str /* var str: String */;
1116 val* var1 /* : Array[String] */;
1117 long var2 /* : Int */;
1118 long var_id /* var id: Int */;
1119 long var3 /* : Int */;
1120 long var4 /* : Int */;
1121 long var6 /* : Int */;
1122 short int var7 /* : Bool */;
1123 short int var9 /* : Bool */;
1124 val* var10 /* : Array[Object] */;
1125 long var11 /* : Int */;
1126 val* var_ /* var : Array[Object] */;
1127 static val* varonce;
1128 val* var12 /* : String */;
1129 char* var13 /* : NativeString */;
1130 long var14 /* : Int */;
1131 val* var15 /* : String */;
1132 val* var16 /* : Array[String] */;
1133 static val* varonce17;
1134 val* var18 /* : String */;
1135 char* var19 /* : NativeString */;
1136 long var20 /* : Int */;
1137 val* var21 /* : String */;
1138 val* var22 /* : String */;
1139 static val* varonce23;
1140 val* var24 /* : String */;
1141 char* var25 /* : NativeString */;
1142 long var26 /* : Int */;
1143 val* var27 /* : String */;
1144 val* var28 /* : String */;
1145 val* var_e /* var e: String */;
1146 val* var29 /* : Array[Object] */;
1147 long var30 /* : Int */;
1148 val* var_31 /* var : Array[Object] */;
1149 static val* varonce32;
1150 val* var33 /* : String */;
1151 char* var34 /* : NativeString */;
1152 long var35 /* : Int */;
1153 val* var36 /* : String */;
1154 val* var37 /* : Array[String] */;
1155 static val* varonce38;
1156 val* var39 /* : String */;
1157 char* var40 /* : NativeString */;
1158 long var41 /* : Int */;
1159 val* var42 /* : String */;
1160 val* var43 /* : String */;
1161 static val* varonce44;
1162 val* var45 /* : String */;
1163 char* var46 /* : NativeString */;
1164 long var47 /* : Int */;
1165 val* var48 /* : String */;
1166 val* var49 /* : String */;
1167 val* var50 /* : String */;
1168 val* var51 /* : Array[String] */;
1169 var_str = p0;
1170 var1 = self->attrs[COLOR_opts__OptionEnum___values].val; /* _values on <self:OptionEnum> */
1171 if (var1 == NULL) {
1172 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
1173 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 181);
1174 show_backtrace(1);
1175 }
1176 var2 = ((long (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__SequenceRead__index_of]))(var1, var_str) /* index_of on <var1:Array[String]>*/;
1177 var_id = var2;
1178 var3 = 1;
1179 { /* Inline kernel#Int#unary - (var3) */
1180 var6 = -var3;
1181 var4 = var6;
1182 goto RET_LABEL5;
1183 RET_LABEL5:(void)0;
1184 }
1185 { /* Inline kernel#Int#== (var_id,var4) */
1186 var9 = var_id == var4;
1187 var7 = var9;
1188 goto RET_LABEL8;
1189 RET_LABEL8:(void)0;
1190 }
1191 if (var7){
1192 var10 = NEW_array__Array(&type_array__Arraykernel__Object);
1193 var11 = 3;
1194 ((void (*)(val*, long))(var10->class->vft[COLOR_array__Array__with_capacity]))(var10, var11) /* with_capacity on <var10:Array[Object]>*/;
1195 var_ = var10;
1196 if (varonce) {
1197 var12 = varonce;
1198 } else {
1199 var13 = "Unrecognized value for option ";
1200 var14 = 30;
1201 var15 = string__NativeString__to_s_with_length(var13, var14);
1202 var12 = var15;
1203 varonce = var12;
1204 }
1205 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var12) /* add on <var_:Array[Object]>*/;
1206 var16 = self->attrs[COLOR_opts__Option___names].val; /* _names on <self:OptionEnum> */
1207 if (var16 == NULL) {
1208 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _names");
1209 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 183);
1210 show_backtrace(1);
1211 }
1212 if (varonce17) {
1213 var18 = varonce17;
1214 } else {
1215 var19 = ", ";
1216 var20 = 2;
1217 var21 = string__NativeString__to_s_with_length(var19, var20);
1218 var18 = var21;
1219 varonce17 = var18;
1220 }
1221 var22 = ((val* (*)(val*, val*))(var16->class->vft[COLOR_string__Collection__join]))(var16, var18) /* join on <var16:Array[String]>*/;
1222 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var22) /* add on <var_:Array[Object]>*/;
1223 if (varonce23) {
1224 var24 = varonce23;
1225 } else {
1226 var25 = ".\n";
1227 var26 = 2;
1228 var27 = string__NativeString__to_s_with_length(var25, var26);
1229 var24 = var27;
1230 varonce23 = var24;
1231 }
1232 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var24) /* add on <var_:Array[Object]>*/;
1233 var28 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
1234 var_e = var28;
1235 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
1236 var30 = 3;
1237 ((void (*)(val*, long))(var29->class->vft[COLOR_array__Array__with_capacity]))(var29, var30) /* with_capacity on <var29:Array[Object]>*/;
1238 var_31 = var29;
1239 if (varonce32) {
1240 var33 = varonce32;
1241 } else {
1242 var34 = "Expected values are: ";
1243 var35 = 21;
1244 var36 = string__NativeString__to_s_with_length(var34, var35);
1245 var33 = var36;
1246 varonce32 = var33;
1247 }
1248 ((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var33) /* add on <var_31:Array[Object]>*/;
1249 var37 = self->attrs[COLOR_opts__OptionEnum___values].val; /* _values on <self:OptionEnum> */
1250 if (var37 == NULL) {
1251 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
1252 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 184);
1253 show_backtrace(1);
1254 }
1255 if (varonce38) {
1256 var39 = varonce38;
1257 } else {
1258 var40 = ", ";
1259 var41 = 2;
1260 var42 = string__NativeString__to_s_with_length(var40, var41);
1261 var39 = var42;
1262 varonce38 = var39;
1263 }
1264 var43 = ((val* (*)(val*, val*))(var37->class->vft[COLOR_string__Collection__join]))(var37, var39) /* join on <var37:Array[String]>*/;
1265 ((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var43) /* add on <var_31:Array[Object]>*/;
1266 if (varonce44) {
1267 var45 = varonce44;
1268 } else {
1269 var46 = ".";
1270 var47 = 1;
1271 var48 = string__NativeString__to_s_with_length(var46, var47);
1272 var45 = var48;
1273 varonce44 = var45;
1274 }
1275 ((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var45) /* add on <var_31:Array[Object]>*/;
1276 var49 = ((val* (*)(val*))(var_31->class->vft[COLOR_string__Object__to_s]))(var_31) /* to_s on <var_31:Array[Object]>*/;
1277 var50 = ((val* (*)(val*, val*))(var_e->class->vft[COLOR_string__String___43d]))(var_e, var49) /* + on <var_e:String>*/;
1278 var_e = var50;
1279 var51 = self->attrs[COLOR_opts__Option___errors].val; /* _errors on <self:OptionEnum> */
1280 if (var51 == NULL) {
1281 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _errors");
1282 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 185);
1283 show_backtrace(1);
1284 }
1285 ((void (*)(val*, val*))(var51->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var51, var_e) /* add on <var51:Array[String]>*/;
1286 } else {
1287 }
1288 var = var_id;
1289 goto RET_LABEL;
1290 RET_LABEL:;
1291 return var;
1292 }
1293 /* method opts#OptionEnum#convert for (self: Object, String): nullable Object */
1294 val* VIRTUAL_opts__OptionEnum__convert(val* self, val* p0) {
1295 val* var /* : nullable Object */;
1296 long var1 /* : Int */;
1297 val* var2 /* : nullable Object */;
1298 var1 = opts__OptionEnum__convert(self, p0);
1299 var2 = BOX_kernel__Int(var1); /* autobox from Int to nullable Object */
1300 var = var2;
1301 RET_LABEL:;
1302 return var;
1303 }
1304 /* method opts#OptionEnum#value_name for (self: OptionEnum): String */
1305 val* opts__OptionEnum__value_name(val* self) {
1306 val* var /* : String */;
1307 val* var1 /* : Array[String] */;
1308 val* var2 /* : nullable Object */;
1309 val* var3 /* : nullable Object */;
1310 long var4 /* : Int */;
1311 var1 = self->attrs[COLOR_opts__OptionEnum___values].val; /* _values on <self:OptionEnum> */
1312 if (var1 == NULL) {
1313 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
1314 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 190);
1315 show_backtrace(1);
1316 }
1317 var2 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__value]))(self) /* value on <self:OptionEnum>*/;
1318 var4 = ((struct instance_kernel__Int*)var2)->value; /* autounbox from nullable Object to Int */;
1319 var3 = ((val* (*)(val*, long))(var1->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var1, var4) /* [] on <var1:Array[String]>*/;
1320 var = var3;
1321 goto RET_LABEL;
1322 RET_LABEL:;
1323 return var;
1324 }
1325 /* method opts#OptionEnum#value_name for (self: Object): String */
1326 val* VIRTUAL_opts__OptionEnum__value_name(val* self) {
1327 val* var /* : String */;
1328 val* var1 /* : String */;
1329 var1 = opts__OptionEnum__value_name(self);
1330 var = var1;
1331 RET_LABEL:;
1332 return var;
1333 }
1334 /* method opts#OptionEnum#pretty_default for (self: OptionEnum): String */
1335 val* opts__OptionEnum__pretty_default(val* self) {
1336 val* var /* : String */;
1337 val* var1 /* : nullable Object */;
1338 val* var2 /* : null */;
1339 short int var3 /* : Bool */;
1340 val* var4 /* : Array[Object] */;
1341 long var5 /* : Int */;
1342 val* var_ /* var : Array[Object] */;
1343 static val* varonce;
1344 val* var6 /* : String */;
1345 char* var7 /* : NativeString */;
1346 long var8 /* : Int */;
1347 val* var9 /* : String */;
1348 val* var10 /* : Array[String] */;
1349 val* var11 /* : nullable Object */;
1350 val* var12 /* : nullable Object */;
1351 long var13 /* : Int */;
1352 static val* varonce14;
1353 val* var15 /* : String */;
1354 char* var16 /* : NativeString */;
1355 long var17 /* : Int */;
1356 val* var18 /* : String */;
1357 val* var19 /* : String */;
1358 static val* varonce20;
1359 val* var21 /* : String */;
1360 char* var22 /* : NativeString */;
1361 long var23 /* : Int */;
1362 val* var24 /* : String */;
1363 var1 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__default_value]))(self) /* default_value on <self:OptionEnum>*/;
1364 var2 = NULL;
1365 if (var1 == NULL) {
1366 var3 = 0; /* is null */
1367 } else {
1368 var3 = 1; /* arg is null and recv is not */
1369 }
1370 if (var3){
1371 var4 = NEW_array__Array(&type_array__Arraykernel__Object);
1372 var5 = 3;
1373 ((void (*)(val*, long))(var4->class->vft[COLOR_array__Array__with_capacity]))(var4, var5) /* with_capacity on <var4:Array[Object]>*/;
1374 var_ = var4;
1375 if (varonce) {
1376 var6 = varonce;
1377 } else {
1378 var7 = " (";
1379 var8 = 2;
1380 var9 = string__NativeString__to_s_with_length(var7, var8);
1381 var6 = var9;
1382 varonce = var6;
1383 }
1384 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var6) /* add on <var_:Array[Object]>*/;
1385 var10 = self->attrs[COLOR_opts__OptionEnum___values].val; /* _values on <self:OptionEnum> */
1386 if (var10 == NULL) {
1387 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
1388 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 195);
1389 show_backtrace(1);
1390 }
1391 var11 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__default_value]))(self) /* default_value on <self:OptionEnum>*/;
1392 if (var11 == NULL) {
1393 fprintf(stderr, "Runtime error: %s", "Cast failed");
1394 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 195);
1395 show_backtrace(1);
1396 }
1397 var13 = ((struct instance_kernel__Int*)var11)->value; /* autounbox from nullable Int to Int */;
1398 var12 = ((val* (*)(val*, long))(var10->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var10, var13) /* [] on <var10:Array[String]>*/;
1399 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var12) /* add on <var_:Array[Object]>*/;
1400 if (varonce14) {
1401 var15 = varonce14;
1402 } else {
1403 var16 = ")";
1404 var17 = 1;
1405 var18 = string__NativeString__to_s_with_length(var16, var17);
1406 var15 = var18;
1407 varonce14 = var15;
1408 }
1409 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var15) /* add on <var_:Array[Object]>*/;
1410 var19 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
1411 var = var19;
1412 goto RET_LABEL;
1413 } else {
1414 if (varonce20) {
1415 var21 = varonce20;
1416 } else {
1417 var22 = "";
1418 var23 = 0;
1419 var24 = string__NativeString__to_s_with_length(var22, var23);
1420 var21 = var24;
1421 varonce20 = var21;
1422 }
1423 var = var21;
1424 goto RET_LABEL;
1425 }
1426 RET_LABEL:;
1427 return var;
1428 }
1429 /* method opts#OptionEnum#pretty_default for (self: Object): String */
1430 val* VIRTUAL_opts__OptionEnum__pretty_default(val* self) {
1431 val* var /* : String */;
1432 val* var1 /* : String */;
1433 var1 = opts__OptionEnum__pretty_default(self);
1434 var = var1;
1435 RET_LABEL:;
1436 return var;
1437 }
1438 /* method opts#OptionInt#init for (self: OptionInt, String, Int, Array[String]) */
1439 void opts__OptionInt__init(val* self, val* p0, long p1, val* p2) {
1440 val* var_help /* var help: String */;
1441 long var_default /* var default: Int */;
1442 val* var_names /* var names: Array[String] */;
1443 val* var /* : nullable Object */;
1444 var_help = p0;
1445 var_default = p1;
1446 var_names = p2;
1447 var = BOX_kernel__Int(var_default); /* autobox from Int to nullable Object */
1448 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_opts__OptionParameter__init_opt]))(self, var_help, var, var_names) /* init_opt on <self:OptionInt>*/;
1449 RET_LABEL:;
1450 }
1451 /* method opts#OptionInt#init for (self: Object, String, Int, Array[String]) */
1452 void VIRTUAL_opts__OptionInt__init(val* self, val* p0, long p1, val* p2) {
1453 opts__OptionInt__init(self, p0, p1, p2);
1454 RET_LABEL:;
1455 }
1456 /* method opts#OptionInt#convert for (self: OptionInt, String): Int */
1457 long opts__OptionInt__convert(val* self, val* p0) {
1458 long var /* : Int */;
1459 val* var_str /* var str: String */;
1460 long var1 /* : Int */;
1461 var_str = p0;
1462 var1 = ((long (*)(val*))(var_str->class->vft[COLOR_string__AbstractString__to_i]))(var_str) /* to_i on <var_str:String>*/;
1463 var = var1;
1464 goto RET_LABEL;
1465 RET_LABEL:;
1466 return var;
1467 }
1468 /* method opts#OptionInt#convert for (self: Object, String): nullable Object */
1469 val* VIRTUAL_opts__OptionInt__convert(val* self, val* p0) {
1470 val* var /* : nullable Object */;
1471 long var1 /* : Int */;
1472 val* var2 /* : nullable Object */;
1473 var1 = opts__OptionInt__convert(self, p0);
1474 var2 = BOX_kernel__Int(var1); /* autobox from Int to nullable Object */
1475 var = var2;
1476 RET_LABEL:;
1477 return var;
1478 }
1479 /* method opts#OptionArray#init for (self: OptionArray, String, Array[String]) */
1480 void opts__OptionArray__init(val* self, val* p0, val* p1) {
1481 val* var_help /* var help: String */;
1482 val* var_names /* var names: Array[String] */;
1483 val* var /* : Array[String] */;
1484 val* var1 /* : Array[String] */;
1485 short int var2 /* : Bool */;
1486 int cltype;
1487 int idtype;
1488 const struct type* type_struct;
1489 const char* var_class_name;
1490 var_help = p0;
1491 var_names = p1;
1492 var = NEW_array__Array(&type_array__Arraystring__String);
1493 ((void (*)(val*))(var->class->vft[COLOR_array__Array__init]))(var) /* init on <var:Array[String]>*/;
1494 self->attrs[COLOR_opts__OptionArray___values].val = var; /* _values on <self:OptionArray> */
1495 var1 = self->attrs[COLOR_opts__OptionArray___values].val; /* _values on <self:OptionArray> */
1496 if (var1 == NULL) {
1497 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
1498 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 218);
1499 show_backtrace(1);
1500 }
1501 /* <var1:Array[String]> isa nullable VALUE */
1502 type_struct = self->type->resolution_table->types[COLOR_nullable_opts__Option_VTVALUE];
1503 cltype = type_struct->color;
1504 idtype = type_struct->id;
1505 if(cltype >= var1->type->table_size) {
1506 var2 = 0;
1507 } else {
1508 var2 = var1->type->type_table[cltype] == idtype;
1509 }
1510 if (!var2) {
1511 var_class_name = var1 == NULL ? "null" : var1->type->name;
1512 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable VALUE", var_class_name);
1513 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 218);
1514 show_backtrace(1);
1515 }
1516 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_opts__OptionParameter__init_opt]))(self, var_help, var1, var_names) /* init_opt on <self:OptionArray>*/;
1517 RET_LABEL:;
1518 }
1519 /* method opts#OptionArray#init for (self: Object, String, Array[String]) */
1520 void VIRTUAL_opts__OptionArray__init(val* self, val* p0, val* p1) {
1521 opts__OptionArray__init(self, p0, p1);
1522 RET_LABEL:;
1523 }
1524 /* method opts#OptionArray#convert for (self: OptionArray, String): Array[String] */
1525 val* opts__OptionArray__convert(val* self, val* p0) {
1526 val* var /* : Array[String] */;
1527 val* var_str /* var str: String */;
1528 val* var1 /* : Array[String] */;
1529 val* var2 /* : Array[String] */;
1530 short int var3 /* : Bool */;
1531 int cltype;
1532 int idtype;
1533 const struct type* type_struct;
1534 const char* var_class_name;
1535 var_str = p0;
1536 var1 = self->attrs[COLOR_opts__OptionArray___values].val; /* _values on <self:OptionArray> */
1537 if (var1 == NULL) {
1538 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
1539 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 224);
1540 show_backtrace(1);
1541 }
1542 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var1, var_str) /* add on <var1:Array[String]>*/;
1543 var2 = self->attrs[COLOR_opts__OptionArray___values].val; /* _values on <self:OptionArray> */
1544 if (var2 == NULL) {
1545 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
1546 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 225);
1547 show_backtrace(1);
1548 }
1549 /* <var2:Array[String]> isa VALUE */
1550 type_struct = self->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
1551 cltype = type_struct->color;
1552 idtype = type_struct->id;
1553 if(cltype >= var2->type->table_size) {
1554 var3 = 0;
1555 } else {
1556 var3 = var2->type->type_table[cltype] == idtype;
1557 }
1558 if (!var3) {
1559 var_class_name = var2 == NULL ? "null" : var2->type->name;
1560 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name);
1561 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 225);
1562 show_backtrace(1);
1563 }
1564 var = var2;
1565 goto RET_LABEL;
1566 RET_LABEL:;
1567 return var;
1568 }
1569 /* method opts#OptionArray#convert for (self: Object, String): nullable Object */
1570 val* VIRTUAL_opts__OptionArray__convert(val* self, val* p0) {
1571 val* var /* : nullable Object */;
1572 val* var1 /* : Array[String] */;
1573 var1 = opts__OptionArray__convert(self, p0);
1574 var = var1;
1575 RET_LABEL:;
1576 return var;
1577 }
1578 /* method opts#OptionContext#options for (self: OptionContext): Array[Option] */
1579 val* opts__OptionContext__options(val* self) {
1580 val* var /* : Array[Option] */;
1581 val* var1 /* : Array[Option] */;
1582 var1 = self->attrs[COLOR_opts__OptionContext___options].val; /* _options on <self:OptionContext> */
1583 if (var1 == NULL) {
1584 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _options");
1585 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 230);
1586 show_backtrace(1);
1587 }
1588 var = var1;
1589 RET_LABEL:;
1590 return var;
1591 }
1592 /* method opts#OptionContext#options for (self: Object): Array[Option] */
1593 val* VIRTUAL_opts__OptionContext__options(val* self) {
1594 val* var /* : Array[Option] */;
1595 val* var1 /* : Array[Option] */;
1596 var1 = opts__OptionContext__options(self);
1597 var = var1;
1598 RET_LABEL:;
1599 return var;
1600 }
1601 /* method opts#OptionContext#rest for (self: OptionContext): Array[String] */
1602 val* opts__OptionContext__rest(val* self) {
1603 val* var /* : Array[String] */;
1604 val* var1 /* : Array[String] */;
1605 var1 = self->attrs[COLOR_opts__OptionContext___rest].val; /* _rest on <self:OptionContext> */
1606 if (var1 == NULL) {
1607 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _rest");
1608 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 231);
1609 show_backtrace(1);
1610 }
1611 var = var1;
1612 RET_LABEL:;
1613 return var;
1614 }
1615 /* method opts#OptionContext#rest for (self: Object): Array[String] */
1616 val* VIRTUAL_opts__OptionContext__rest(val* self) {
1617 val* var /* : Array[String] */;
1618 val* var1 /* : Array[String] */;
1619 var1 = opts__OptionContext__rest(self);
1620 var = var1;
1621 RET_LABEL:;
1622 return var;
1623 }
1624 /* method opts#OptionContext#errors for (self: OptionContext): Array[String] */
1625 val* opts__OptionContext__errors(val* self) {
1626 val* var /* : Array[String] */;
1627 val* var1 /* : Array[String] */;
1628 var1 = self->attrs[COLOR_opts__OptionContext___errors].val; /* _errors on <self:OptionContext> */
1629 if (var1 == NULL) {
1630 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _errors");
1631 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 232);
1632 show_backtrace(1);
1633 }
1634 var = var1;
1635 RET_LABEL:;
1636 return var;
1637 }
1638 /* method opts#OptionContext#errors for (self: Object): Array[String] */
1639 val* VIRTUAL_opts__OptionContext__errors(val* self) {
1640 val* var /* : Array[String] */;
1641 val* var1 /* : Array[String] */;
1642 var1 = opts__OptionContext__errors(self);
1643 var = var1;
1644 RET_LABEL:;
1645 return var;
1646 }
1647 /* method opts#OptionContext#usage for (self: OptionContext) */
1648 void opts__OptionContext__usage(val* self) {
1649 long var /* : Int */;
1650 long var_lmax /* var lmax: Int */;
1651 val* var1 /* : Array[Option] */;
1652 val* var2 /* : Iterator[nullable Object] */;
1653 short int var3 /* : Bool */;
1654 val* var4 /* : nullable Object */;
1655 val* var_i /* var i: Option */;
1656 long var5 /* : Int */;
1657 long var_l /* var l: Int */;
1658 val* var6 /* : Array[String] */;
1659 val* var7 /* : Iterator[nullable Object] */;
1660 short int var8 /* : Bool */;
1661 val* var9 /* : nullable Object */;
1662 val* var_n /* var n: String */;
1663 long var10 /* : Int */;
1664 long var11 /* : Int */;
1665 long var12 /* : Int */;
1666 long var14 /* : Int */;
1667 long var15 /* : Int */;
1668 long var17 /* : Int */;
1669 short int var18 /* : Bool */;
1670 short int var20 /* : Bool */;
1671 int cltype;
1672 int idtype;
1673 const char* var_class_name;
1674 short int var21 /* : Bool */;
1675 val* var23 /* : Array[Option] */;
1676 val* var24 /* : Iterator[nullable Object] */;
1677 short int var25 /* : Bool */;
1678 val* var26 /* : nullable Object */;
1679 val* var_i27 /* var i: Option */;
1680 val* var28 /* : String */;
1681 var = 1;
1682 var_lmax = var;
1683 var1 = self->attrs[COLOR_opts__OptionContext___options].val; /* _options on <self:OptionContext> */
1684 if (var1 == NULL) {
1685 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _options");
1686 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 239);
1687 show_backtrace(1);
1688 }
1689 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__iterator]))(var1) /* iterator on <var1:Array[Option]>*/;
1690 for(;;) {
1691 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
1692 if(!var3) break;
1693 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
1694 var_i = var4;
1695 var5 = 3;
1696 var_l = var5;
1697 var6 = ((val* (*)(val*))(var_i->class->vft[COLOR_opts__Option__names]))(var_i) /* names on <var_i:Option>*/;
1698 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Collection__iterator]))(var6) /* iterator on <var6:Array[String]>*/;
1699 for(;;) {
1700 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
1701 if(!var8) break;
1702 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
1703 var_n = var9;
1704 var10 = ((long (*)(val*))(var_n->class->vft[COLOR_abstract_collection__Collection__length]))(var_n) /* length on <var_n:String>*/;
1705 var11 = 2;
1706 { /* Inline kernel#Int#+ (var10,var11) */
1707 var14 = var10 + var11;
1708 var12 = var14;
1709 goto RET_LABEL13;
1710 RET_LABEL13:(void)0;
1711 }
1712 { /* Inline kernel#Int#+ (var_l,var12) */
1713 var17 = var_l + var12;
1714 var15 = var17;
1715 goto RET_LABEL16;
1716 RET_LABEL16:(void)0;
1717 }
1718 var_l = var15;
1719 CONTINUE_label: (void)0;
1720 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
1721 }
1722 BREAK_label: (void)0;
1723 { /* Inline kernel#Int#< (var_lmax,var_l) */
1724 /* Covariant cast for argument 0 (i) <var_l:Int> isa OTHER */
1725 /* <var_l:Int> isa OTHER */
1726 var20 = 1; /* easy <var_l:Int> isa OTHER*/
1727 if (!var20) {
1728 var_class_name = type_kernel__Int.name;
1729 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1730 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 265);
1731 show_backtrace(1);
1732 }
1733 var21 = var_lmax < var_l;
1734 var18 = var21;
1735 goto RET_LABEL19;
1736 RET_LABEL19:(void)0;
1737 }
1738 if (var18){
1739 var_lmax = var_l;
1740 } else {
1741 }
1742 CONTINUE_label22: (void)0;
1743 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
1744 }
1745 BREAK_label22: (void)0;
1746 var23 = self->attrs[COLOR_opts__OptionContext___options].val; /* _options on <self:OptionContext> */
1747 if (var23 == NULL) {
1748 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _options");
1749 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 247);
1750 show_backtrace(1);
1751 }
1752 var24 = ((val* (*)(val*))(var23->class->vft[COLOR_abstract_collection__Collection__iterator]))(var23) /* iterator on <var23:Array[Option]>*/;
1753 for(;;) {
1754 var25 = ((short int (*)(val*))(var24->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var24) /* is_ok on <var24:Iterator[nullable Object]>*/;
1755 if(!var25) break;
1756 var26 = ((val* (*)(val*))(var24->class->vft[COLOR_abstract_collection__Iterator__item]))(var24) /* item on <var24:Iterator[nullable Object]>*/;
1757 var_i27 = var26;
1758 var28 = ((val* (*)(val*, long))(var_i27->class->vft[COLOR_opts__Option__pretty]))(var_i27, var_lmax) /* pretty on <var_i27:Option>*/;
1759 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var28) /* print on <self:OptionContext>*/;
1760 CONTINUE_label29: (void)0;
1761 ((void (*)(val*))(var24->class->vft[COLOR_abstract_collection__Iterator__next]))(var24) /* next on <var24:Iterator[nullable Object]>*/;
1762 }
1763 BREAK_label29: (void)0;
1764 RET_LABEL:;
1765 }
1766 /* method opts#OptionContext#usage for (self: Object) */
1767 void VIRTUAL_opts__OptionContext__usage(val* self) {
1768 opts__OptionContext__usage(self);
1769 RET_LABEL:;
1770 }
1771 /* method opts#OptionContext#parse for (self: OptionContext, Collection[String]) */
1772 void opts__OptionContext__parse(val* self, val* p0) {
1773 val* var_argv /* var argv: Collection[String] */;
1774 val* var /* : Iterator[nullable Object] */;
1775 val* var_it /* var it: Iterator[String] */;
1776 var_argv = p0;
1777 var = ((val* (*)(val*))(var_argv->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_argv) /* iterator on <var_argv:Collection[String]>*/;
1778 var_it = var;
1779 ((void (*)(val*, val*))(self->class->vft[COLOR_opts__OptionContext__parse_intern]))(self, var_it) /* parse_intern on <self:OptionContext>*/;
1780 RET_LABEL:;
1781 }
1782 /* method opts#OptionContext#parse for (self: Object, Collection[String]) */
1783 void VIRTUAL_opts__OptionContext__parse(val* self, val* p0) {
1784 opts__OptionContext__parse(self, p0);
1785 RET_LABEL:;
1786 }
1787 /* method opts#OptionContext#parse_intern for (self: OptionContext, Iterator[String]) */
1788 void opts__OptionContext__parse_intern(val* self, val* p0) {
1789 val* var_it /* var it: Iterator[String] */;
1790 short int var /* : Bool */;
1791 short int var_parseargs /* var parseargs: Bool */;
1792 val* var1 /* : Array[String] */;
1793 val* var_rest /* var rest: Array[String] */;
1794 short int var2 /* : Bool */;
1795 short int var_ /* var : Bool */;
1796 short int var3 /* : Bool */;
1797 val* var4 /* : nullable Object */;
1798 val* var_str /* var str: String */;
1799 static val* varonce;
1800 val* var5 /* : String */;
1801 char* var6 /* : NativeString */;
1802 long var7 /* : Int */;
1803 val* var8 /* : String */;
1804 short int var9 /* : Bool */;
1805 val* var10 /* : Array[nullable Object] */;
1806 short int var11 /* : Bool */;
1807 short int var12 /* : Bool */;
1808 char var13 /* : Char */;
1809 long var14 /* : Int */;
1810 val* var15 /* : nullable Object */;
1811 long var16 /* : Int */;
1812 short int var17 /* : Bool */;
1813 short int var19 /* : Bool */;
1814 short int var_20 /* var : Bool */;
1815 long var21 /* : Int */;
1816 long var22 /* : Int */;
1817 short int var23 /* : Bool */;
1818 short int var25 /* : Bool */;
1819 int cltype;
1820 int idtype;
1821 const char* var_class_name;
1822 short int var26 /* : Bool */;
1823 short int var27 /* : Bool */;
1824 short int var_next_called /* var next_called: Bool */;
1825 val* var28 /* : Range[Int] */;
1826 long var29 /* : Int */;
1827 long var30 /* : Int */;
1828 val* var31 /* : Discrete */;
1829 val* var32 /* : Discrete */;
1830 val* var33 /* : Iterator[nullable Object] */;
1831 short int var34 /* : Bool */;
1832 val* var35 /* : nullable Object */;
1833 long var_i /* var i: Int */;
1834 long var36 /* : Int */;
1835 static val* varonce37;
1836 val* var38 /* : String */;
1837 char* var39 /* : NativeString */;
1838 long var40 /* : Int */;
1839 val* var41 /* : String */;
1840 val* var42 /* : StringCharView */;
1841 val* var43 /* : nullable Object */;
1842 val* var44 /* : String */;
1843 char var45 /* : Char */;
1844 val* var46 /* : String */;
1845 val* var_short_opt /* var short_opt: String */;
1846 val* var47 /* : Map[String, Option] */;
1847 short int var48 /* : Bool */;
1848 val* var49 /* : Map[String, Option] */;
1849 val* var50 /* : nullable Object */;
1850 val* var_option /* var option: Option */;
1851 short int var51 /* : Bool */;
1852 int cltype52;
1853 int idtype53;
1854 short int var54 /* : Bool */;
1855 short int var55 /* : Bool */;
1856 val* var56 /* : Map[String, Option] */;
1857 short int var57 /* : Bool */;
1858 val* var58 /* : Map[String, Option] */;
1859 val* var59 /* : nullable Object */;
1860 val* var_opt /* var opt: Option */;
1861 val* var60 /* : nullable Object */;
1862 val* var62 /* : Array[Option] */;
1863 val* var63 /* : Iterator[nullable Object] */;
1864 short int var64 /* : Bool */;
1865 val* var65 /* : nullable Object */;
1866 val* var_opt66 /* var opt: Option */;
1867 short int var67 /* : Bool */;
1868 short int var68 /* : Bool */;
1869 short int var_69 /* var : Bool */;
1870 short int var70 /* : Bool */;
1871 short int var71 /* : Bool */;
1872 val* var72 /* : Array[String] */;
1873 static val* varonce73;
1874 val* var74 /* : String */;
1875 char* var75 /* : NativeString */;
1876 long var76 /* : Int */;
1877 val* var77 /* : String */;
1878 val* var78 /* : Array[String] */;
1879 static val* varonce79;
1880 val* var80 /* : String */;
1881 char* var81 /* : NativeString */;
1882 long var82 /* : Int */;
1883 val* var83 /* : String */;
1884 val* var84 /* : String */;
1885 static val* varonce85;
1886 val* var86 /* : String */;
1887 char* var87 /* : NativeString */;
1888 long var88 /* : Int */;
1889 val* var89 /* : String */;
1890 val* var90 /* : Array[Object] */;
1891 long var91 /* : Int */;
1892 val* var92 /* : NativeArray[Object] */;
1893 val* var93 /* : String */;
1894 var_it = p0;
1895 var = 1;
1896 var_parseargs = var;
1897 ((void (*)(val*))(self->class->vft[COLOR_opts__OptionContext__build]))(self) /* build on <self:OptionContext>*/;
1898 var1 = self->attrs[COLOR_opts__OptionContext___rest].val; /* _rest on <self:OptionContext> */
1899 if (var1 == NULL) {
1900 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _rest");
1901 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 263);
1902 show_backtrace(1);
1903 }
1904 var_rest = var1;
1905 for(;;) {
1906 var_ = var_parseargs;
1907 if (var_parseargs){
1908 var3 = ((short int (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_it) /* is_ok on <var_it:Iterator[String]>*/;
1909 var2 = var3;
1910 } else {
1911 var2 = var_;
1912 }
1913 if (!var2) break;
1914 var4 = ((val* (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__item]))(var_it) /* item on <var_it:Iterator[String]>*/;
1915 var_str = var4;
1916 if (varonce) {
1917 var5 = varonce;
1918 } else {
1919 var6 = "--";
1920 var7 = 2;
1921 var8 = string__NativeString__to_s_with_length(var6, var7);
1922 var5 = var8;
1923 varonce = var5;
1924 }
1925 var9 = ((short int (*)(val*, val*))(var_str->class->vft[COLOR_kernel__Object___61d_61d]))(var_str, var5) /* == on <var_str:String>*/;
1926 if (var9){
1927 ((void (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__next]))(var_it) /* next on <var_it:Iterator[String]>*/;
1928 var10 = ((val* (*)(val*))(var_it->class->vft[COLOR_array__Iterator__to_a]))(var_it) /* to_a on <var_it:Iterator[String]>*/;
1929 ((void (*)(val*, val*))(var_rest->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_rest, var10) /* add_all on <var_rest:Array[String]>*/;
1930 var11 = 0;
1931 var_parseargs = var11;
1932 } else {
1933 var13 = '-';
1934 var15 = BOX_kernel__Char(var13); /* autobox from Char to nullable Object */
1935 var14 = ((long (*)(val*, val*))(var_str->class->vft[COLOR_array__AbstractArrayRead__last_index_of]))(var_str, var15) /* last_index_of on <var_str:String>*/;
1936 var16 = 0;
1937 { /* Inline kernel#Int#== (var14,var16) */
1938 var19 = var14 == var16;
1939 var17 = var19;
1940 goto RET_LABEL18;
1941 RET_LABEL18:(void)0;
1942 }
1943 var_20 = var17;
1944 if (var17){
1945 var21 = ((long (*)(val*))(var_str->class->vft[COLOR_abstract_collection__Collection__length]))(var_str) /* length on <var_str:String>*/;
1946 var22 = 2;
1947 { /* Inline kernel#Int#> (var21,var22) */
1948 /* Covariant cast for argument 0 (i) <var22:Int> isa OTHER */
1949 /* <var22:Int> isa OTHER */
1950 var25 = 1; /* easy <var22:Int> isa OTHER*/
1951 if (!var25) {
1952 var_class_name = type_kernel__Int.name;
1953 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1954 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 267);
1955 show_backtrace(1);
1956 }
1957 var26 = var21 > var22;
1958 var23 = var26;
1959 goto RET_LABEL24;
1960 RET_LABEL24:(void)0;
1961 }
1962 var12 = var23;
1963 } else {
1964 var12 = var_20;
1965 }
1966 if (var12){
1967 var27 = 0;
1968 var_next_called = var27;
1969 var28 = NEW_range__Range(&type_range__Rangekernel__Int);
1970 var29 = 1;
1971 var30 = ((long (*)(val*))(var_str->class->vft[COLOR_abstract_collection__Collection__length]))(var_str) /* length on <var_str:String>*/;
1972 var31 = BOX_kernel__Int(var29); /* autobox from Int to Discrete */
1973 var32 = BOX_kernel__Int(var30); /* autobox from Int to Discrete */
1974 ((void (*)(val*, val*, val*))(var28->class->vft[COLOR_range__Range__init]))(var28, var31, var32) /* init on <var28:Range[Int]>*/;
1975 var33 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Collection__iterator]))(var28) /* iterator on <var28:Range[Int]>*/;
1976 for(;;) {
1977 var34 = ((short int (*)(val*))(var33->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var33) /* is_ok on <var33:Iterator[nullable Object]>*/;
1978 if(!var34) break;
1979 var35 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_collection__Iterator__item]))(var33) /* item on <var33:Iterator[nullable Object]>*/;
1980 var36 = ((struct instance_kernel__Int*)var35)->value; /* autounbox from nullable Object to Int */;
1981 var_i = var36;
1982 if (varonce37) {
1983 var38 = varonce37;
1984 } else {
1985 var39 = "-";
1986 var40 = 1;
1987 var41 = string__NativeString__to_s_with_length(var39, var40);
1988 var38 = var41;
1989 varonce37 = var38;
1990 }
1991 var42 = ((val* (*)(val*))(var_str->class->vft[COLOR_string__AbstractString__chars]))(var_str) /* chars on <var_str:String>*/;
1992 var43 = ((val* (*)(val*, long))(var42->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var42, var_i) /* [] on <var42:StringCharView>*/;
1993 var45 = ((struct instance_kernel__Char*)var43)->value; /* autounbox from nullable Object to Char */;
1994 var44 = string__Char__to_s(var45);
1995 var46 = ((val* (*)(val*, val*))(var38->class->vft[COLOR_string__String___43d]))(var38, var44) /* + on <var38:String>*/;
1996 var_short_opt = var46;
1997 var47 = self->attrs[COLOR_opts__OptionContext___optmap].val; /* _optmap on <self:OptionContext> */
1998 if (var47 == NULL) {
1999 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _optmap");
2000 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 277);
2001 show_backtrace(1);
2002 }
2003 var48 = ((short int (*)(val*, val*))(var47->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var47, var_short_opt) /* has_key on <var47:Map[String, Option]>*/;
2004 if (var48){
2005 var49 = self->attrs[COLOR_opts__OptionContext___optmap].val; /* _optmap on <self:OptionContext> */
2006 if (var49 == NULL) {
2007 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _optmap");
2008 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 278);
2009 show_backtrace(1);
2010 }
2011 var50 = ((val* (*)(val*, val*))(var49->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var49, var_short_opt) /* [] on <var49:Map[String, Option]>*/;
2012 var_option = var50;
2013 /* <var_option:Option> isa OptionParameter */
2014 cltype52 = type_opts__OptionParameter.color;
2015 idtype53 = type_opts__OptionParameter.id;
2016 if(cltype52 >= var_option->type->table_size) {
2017 var51 = 0;
2018 } else {
2019 var51 = var_option->type->type_table[cltype52] == idtype53;
2020 }
2021 if (var51){
2022 ((void (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__next]))(var_it) /* next on <var_it:Iterator[String]>*/;
2023 var54 = 1;
2024 var_next_called = var54;
2025 } else {
2026 }
2027 ((void (*)(val*, val*))(var_option->class->vft[COLOR_opts__Option__read_param]))(var_option, var_it) /* read_param on <var_option:Option>*/;
2028 } else {
2029 }
2030 CONTINUE_label: (void)0;
2031 ((void (*)(val*))(var33->class->vft[COLOR_abstract_collection__Iterator__next]))(var33) /* next on <var33:Iterator[nullable Object]>*/;
2032 }
2033 BREAK_label: (void)0;
2034 var55 = !var_next_called;
2035 if (var55){
2036 ((void (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__next]))(var_it) /* next on <var_it:Iterator[String]>*/;
2037 } else {
2038 }
2039 } else {
2040 var56 = self->attrs[COLOR_opts__OptionContext___optmap].val; /* _optmap on <self:OptionContext> */
2041 if (var56 == NULL) {
2042 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _optmap");
2043 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 288);
2044 show_backtrace(1);
2045 }
2046 var57 = ((short int (*)(val*, val*))(var56->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var56, var_str) /* has_key on <var56:Map[String, Option]>*/;
2047 if (var57){
2048 var58 = self->attrs[COLOR_opts__OptionContext___optmap].val; /* _optmap on <self:OptionContext> */
2049 if (var58 == NULL) {
2050 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _optmap");
2051 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 289);
2052 show_backtrace(1);
2053 }
2054 var59 = ((val* (*)(val*, val*))(var58->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var58, var_str) /* [] on <var58:Map[String, Option]>*/;
2055 var_opt = var59;
2056 ((void (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__next]))(var_it) /* next on <var_it:Iterator[String]>*/;
2057 ((void (*)(val*, val*))(var_opt->class->vft[COLOR_opts__Option__read_param]))(var_opt, var_it) /* read_param on <var_opt:Option>*/;
2058 } else {
2059 var60 = ((val* (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__item]))(var_it) /* item on <var_it:Iterator[String]>*/;
2060 ((void (*)(val*, val*))(var_rest->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_rest, var60) /* add on <var_rest:Array[String]>*/;
2061 ((void (*)(val*))(var_it->class->vft[COLOR_abstract_collection__Iterator__next]))(var_it) /* next on <var_it:Iterator[String]>*/;
2062 }
2063 }
2064 }
2065 CONTINUE_label61: (void)0;
2066 }
2067 BREAK_label61: (void)0;
2068 var62 = self->attrs[COLOR_opts__OptionContext___options].val; /* _options on <self:OptionContext> */
2069 if (var62 == NULL) {
2070 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _options");
2071 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 300);
2072 show_backtrace(1);
2073 }
2074 var63 = ((val* (*)(val*))(var62->class->vft[COLOR_abstract_collection__Collection__iterator]))(var62) /* iterator on <var62:Array[Option]>*/;
2075 for(;;) {
2076 var64 = ((short int (*)(val*))(var63->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var63) /* is_ok on <var63:Iterator[nullable Object]>*/;
2077 if(!var64) break;
2078 var65 = ((val* (*)(val*))(var63->class->vft[COLOR_abstract_collection__Iterator__item]))(var63) /* item on <var63:Iterator[nullable Object]>*/;
2079 var_opt66 = var65;
2080 var68 = ((short int (*)(val*))(var_opt66->class->vft[COLOR_opts__Option__mandatory]))(var_opt66) /* mandatory on <var_opt66:Option>*/;
2081 var_69 = var68;
2082 if (var68){
2083 var70 = ((short int (*)(val*))(var_opt66->class->vft[COLOR_opts__Option__read]))(var_opt66) /* read on <var_opt66:Option>*/;
2084 var71 = !var70;
2085 var67 = var71;
2086 } else {
2087 var67 = var_69;
2088 }
2089 if (var67){
2090 var72 = self->attrs[COLOR_opts__OptionContext___errors].val; /* _errors on <self:OptionContext> */
2091 if (var72 == NULL) {
2092 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _errors");
2093 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 302);
2094 show_backtrace(1);
2095 }
2096 if (varonce73) {
2097 var74 = varonce73;
2098 } else {
2099 var75 = "Mandatory option ";
2100 var76 = 17;
2101 var77 = string__NativeString__to_s_with_length(var75, var76);
2102 var74 = var77;
2103 varonce73 = var74;
2104 }
2105 var78 = ((val* (*)(val*))(var_opt66->class->vft[COLOR_opts__Option__names]))(var_opt66) /* names on <var_opt66:Option>*/;
2106 if (varonce79) {
2107 var80 = varonce79;
2108 } else {
2109 var81 = ", ";
2110 var82 = 2;
2111 var83 = string__NativeString__to_s_with_length(var81, var82);
2112 var80 = var83;
2113 varonce79 = var80;
2114 }
2115 var84 = ((val* (*)(val*, val*))(var78->class->vft[COLOR_string__Collection__join]))(var78, var80) /* join on <var78:Array[String]>*/;
2116 if (varonce85) {
2117 var86 = varonce85;
2118 } else {
2119 var87 = " not found.";
2120 var88 = 11;
2121 var89 = string__NativeString__to_s_with_length(var87, var88);
2122 var86 = var89;
2123 varonce85 = var86;
2124 }
2125 var90 = NEW_array__Array(&type_array__Arraykernel__Object);
2126 { /* var90 = array_instance Array[Object] */
2127 var91 = 3;
2128 var92 = NEW_array__NativeArray(var91, &type_array__NativeArraykernel__Object);
2129 ((struct instance_array__NativeArray*)var92)->values[0] = (val*) var74;
2130 ((struct instance_array__NativeArray*)var92)->values[1] = (val*) var84;
2131 ((struct instance_array__NativeArray*)var92)->values[2] = (val*) var86;
2132 ((void (*)(val*, val*, long))(var90->class->vft[COLOR_array__Array__with_native]))(var90, var92, var91) /* with_native on <var90:Array[Object]>*/;
2133 }
2134 var93 = ((val* (*)(val*))(var90->class->vft[COLOR_string__Object__to_s]))(var90) /* to_s on <var90:Array[Object]>*/;
2135 ((void (*)(val*, val*))(var72->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var72, var93) /* add on <var72:Array[String]>*/;
2136 } else {
2137 }
2138 CONTINUE_label94: (void)0;
2139 ((void (*)(val*))(var63->class->vft[COLOR_abstract_collection__Iterator__next]))(var63) /* next on <var63:Iterator[nullable Object]>*/;
2140 }
2141 BREAK_label94: (void)0;
2142 RET_LABEL:;
2143 }
2144 /* method opts#OptionContext#parse_intern for (self: Object, Iterator[String]) */
2145 void VIRTUAL_opts__OptionContext__parse_intern(val* self, val* p0) {
2146 opts__OptionContext__parse_intern(self, p0);
2147 RET_LABEL:;
2148 }
2149 /* method opts#OptionContext#add_option for (self: OptionContext, Array[Option]) */
2150 void opts__OptionContext__add_option(val* self, val* p0) {
2151 val* var_opts /* var opts: Array[Option] */;
2152 val* var /* : Iterator[nullable Object] */;
2153 short int var1 /* : Bool */;
2154 val* var2 /* : nullable Object */;
2155 val* var_opt /* var opt: Option */;
2156 val* var3 /* : Array[Option] */;
2157 var_opts = p0;
2158 var = ((val* (*)(val*))(var_opts->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_opts) /* iterator on <var_opts:Array[Option]>*/;
2159 for(;;) {
2160 var1 = ((short int (*)(val*))(var->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var) /* is_ok on <var:Iterator[nullable Object]>*/;
2161 if(!var1) break;
2162 var2 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_collection__Iterator__item]))(var) /* item on <var:Iterator[nullable Object]>*/;
2163 var_opt = var2;
2164 var3 = self->attrs[COLOR_opts__OptionContext___options].val; /* _options on <self:OptionContext> */
2165 if (var3 == NULL) {
2166 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _options");
2167 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 310);
2168 show_backtrace(1);
2169 }
2170 ((void (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var3, var_opt) /* add on <var3:Array[Option]>*/;
2171 CONTINUE_label: (void)0;
2172 ((void (*)(val*))(var->class->vft[COLOR_abstract_collection__Iterator__next]))(var) /* next on <var:Iterator[nullable Object]>*/;
2173 }
2174 BREAK_label: (void)0;
2175 RET_LABEL:;
2176 }
2177 /* method opts#OptionContext#add_option for (self: Object, Array[Option]) */
2178 void VIRTUAL_opts__OptionContext__add_option(val* self, val* p0) {
2179 opts__OptionContext__add_option(self, p0);
2180 RET_LABEL:;
2181 }
2182 /* method opts#OptionContext#init for (self: OptionContext) */
2183 void opts__OptionContext__init(val* self) {
2184 val* var /* : Array[Option] */;
2185 val* var1 /* : HashMap[String, Option] */;
2186 val* var2 /* : Array[String] */;
2187 val* var3 /* : Array[String] */;
2188 var = NEW_array__Array(&type_array__Arrayopts__Option);
2189 ((void (*)(val*))(var->class->vft[COLOR_array__Array__init]))(var) /* init on <var:Array[Option]>*/;
2190 self->attrs[COLOR_opts__OptionContext___options].val = var; /* _options on <self:OptionContext> */
2191 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapstring__Stringopts__Option);
2192 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[String, Option]>*/;
2193 self->attrs[COLOR_opts__OptionContext___optmap].val = var1; /* _optmap on <self:OptionContext> */
2194 var2 = NEW_array__Array(&type_array__Arraystring__String);
2195 ((void (*)(val*))(var2->class->vft[COLOR_array__Array__init]))(var2) /* init on <var2:Array[String]>*/;
2196 self->attrs[COLOR_opts__OptionContext___rest].val = var2; /* _rest on <self:OptionContext> */
2197 var3 = NEW_array__Array(&type_array__Arraystring__String);
2198 ((void (*)(val*))(var3->class->vft[COLOR_array__Array__init]))(var3) /* init on <var3:Array[String]>*/;
2199 self->attrs[COLOR_opts__OptionContext___errors].val = var3; /* _errors on <self:OptionContext> */
2200 RET_LABEL:;
2201 }
2202 /* method opts#OptionContext#init for (self: Object) */
2203 void VIRTUAL_opts__OptionContext__init(val* self) {
2204 opts__OptionContext__init(self);
2205 RET_LABEL:;
2206 }
2207 /* method opts#OptionContext#build for (self: OptionContext) */
2208 void opts__OptionContext__build(val* self) {
2209 val* var /* : Array[Option] */;
2210 val* var1 /* : Iterator[nullable Object] */;
2211 short int var2 /* : Bool */;
2212 val* var3 /* : nullable Object */;
2213 val* var_o /* var o: Option */;
2214 val* var4 /* : Array[String] */;
2215 val* var5 /* : Iterator[nullable Object] */;
2216 short int var6 /* : Bool */;
2217 val* var7 /* : nullable Object */;
2218 val* var_n /* var n: String */;
2219 val* var8 /* : Map[String, Option] */;
2220 var = self->attrs[COLOR_opts__OptionContext___options].val; /* _options on <self:OptionContext> */
2221 if (var == NULL) {
2222 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _options");
2223 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 324);
2224 show_backtrace(1);
2225 }
2226 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_collection__Collection__iterator]))(var) /* iterator on <var:Array[Option]>*/;
2227 for(;;) {
2228 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
2229 if(!var2) break;
2230 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
2231 var_o = var3;
2232 var4 = ((val* (*)(val*))(var_o->class->vft[COLOR_opts__Option__names]))(var_o) /* names on <var_o:Option>*/;
2233 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Collection__iterator]))(var4) /* iterator on <var4:Array[String]>*/;
2234 for(;;) {
2235 var6 = ((short int (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var5) /* is_ok on <var5:Iterator[nullable Object]>*/;
2236 if(!var6) break;
2237 var7 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__item]))(var5) /* item on <var5:Iterator[nullable Object]>*/;
2238 var_n = var7;
2239 var8 = self->attrs[COLOR_opts__OptionContext___optmap].val; /* _optmap on <self:OptionContext> */
2240 if (var8 == NULL) {
2241 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _optmap");
2242 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 326);
2243 show_backtrace(1);
2244 }
2245 ((void (*)(val*, val*, val*))(var8->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var8, var_n, var_o) /* []= on <var8:Map[String, Option]>*/;
2246 CONTINUE_label: (void)0;
2247 ((void (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__next]))(var5) /* next on <var5:Iterator[nullable Object]>*/;
2248 }
2249 BREAK_label: (void)0;
2250 CONTINUE_label9: (void)0;
2251 ((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
2252 }
2253 BREAK_label9: (void)0;
2254 RET_LABEL:;
2255 }
2256 /* method opts#OptionContext#build for (self: Object) */
2257 void VIRTUAL_opts__OptionContext__build(val* self) {
2258 opts__OptionContext__build(self);
2259 RET_LABEL:;
2260 }
2261 /* method opts#OptionContext#get_errors for (self: OptionContext): Array[String] */
2262 val* opts__OptionContext__get_errors(val* self) {
2263 val* var /* : Array[String] */;
2264 val* var1 /* : Array[String] */;
2265 val* var_errors /* var errors: Array[String] */;
2266 val* var2 /* : Array[String] */;
2267 val* var3 /* : Array[Option] */;
2268 val* var4 /* : Iterator[nullable Object] */;
2269 short int var5 /* : Bool */;
2270 val* var6 /* : nullable Object */;
2271 val* var_o /* var o: Option */;
2272 val* var7 /* : Array[String] */;
2273 val* var8 /* : Iterator[nullable Object] */;
2274 short int var9 /* : Bool */;
2275 val* var10 /* : nullable Object */;
2276 val* var_e /* var e: String */;
2277 var1 = NEW_array__Array(&type_array__Arraystring__String);
2278 ((void (*)(val*))(var1->class->vft[COLOR_array__Array__init]))(var1) /* init on <var1:Array[String]>*/;
2279 var_errors = var1;
2280 var2 = self->attrs[COLOR_opts__OptionContext___errors].val; /* _errors on <self:OptionContext> */
2281 if (var2 == NULL) {
2282 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _errors");
2283 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 335);
2284 show_backtrace(1);
2285 }
2286 ((void (*)(val*, val*))(var_errors->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_errors, var2) /* add_all on <var_errors:Array[String]>*/;
2287 var3 = self->attrs[COLOR_opts__OptionContext___options].val; /* _options on <self:OptionContext> */
2288 if (var3 == NULL) {
2289 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _options");
2290 fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 337);
2291 show_backtrace(1);
2292 }
2293 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__iterator]))(var3) /* iterator on <var3:Array[Option]>*/;
2294 for(;;) {
2295 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var4) /* is_ok on <var4:Iterator[nullable Object]>*/;
2296 if(!var5) break;
2297 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__item]))(var4) /* item on <var4:Iterator[nullable Object]>*/;
2298 var_o = var6;
2299 var7 = ((val* (*)(val*))(var_o->class->vft[COLOR_opts__Option__errors]))(var_o) /* errors on <var_o:Option>*/;
2300 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Collection__iterator]))(var7) /* iterator on <var7:Array[String]>*/;
2301 for(;;) {
2302 var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var8) /* is_ok on <var8:Iterator[nullable Object]>*/;
2303 if(!var9) break;
2304 var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__item]))(var8) /* item on <var8:Iterator[nullable Object]>*/;
2305 var_e = var10;
2306 ((void (*)(val*, val*))(var_errors->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_errors, var_e) /* add on <var_errors:Array[String]>*/;
2307 CONTINUE_label: (void)0;
2308 ((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
2309 }
2310 BREAK_label: (void)0;
2311 CONTINUE_label11: (void)0;
2312 ((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__next]))(var4) /* next on <var4:Iterator[nullable Object]>*/;
2313 }
2314 BREAK_label11: (void)0;
2315 var = var_errors;
2316 goto RET_LABEL;
2317 RET_LABEL:;
2318 return var;
2319 }
2320 /* method opts#OptionContext#get_errors for (self: Object): Array[String] */
2321 val* VIRTUAL_opts__OptionContext__get_errors(val* self) {
2322 val* var /* : Array[String] */;
2323 val* var1 /* : Array[String] */;
2324 var1 = opts__OptionContext__get_errors(self);
2325 var = var1;
2326 RET_LABEL:;
2327 return var;
2328 }