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