-/* method opts#OptionString#convert for (self: Object, String): nullable Object */
-val* VIRTUAL_opts__OptionString__convert(val* self, val* p0) {
-val* var /* : nullable Object */;
-val* var1 /* : nullable String */;
-var1 = opts__OptionString__convert(self, p0);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method opts#OptionEnum#init for (self: OptionEnum, Array[String], String, Int, Array[String]) */
-void opts__OptionEnum__init(val* self, val* p0, val* p1, long p2, val* p3) {
-val* var_values /* var values: Array[String] */;
-val* var_help /* var help: String */;
-long var_default /* var default: Int */;
-val* var_names /* var names: Array[String] */;
-long var /* : Int */;
-long var1 /* : Int */;
-short int var2 /* : Bool */;
-short int var4 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-short int var5 /* : Bool */;
-val* var6 /* : Array[nullable Object] */;
-static val* varonce;
-val* var7 /* : String */;
-char* var8 /* : NativeString */;
-long var9 /* : Int */;
-val* var10 /* : String */;
-static val* varonce11;
-val* var12 /* : String */;
-char* var13 /* : NativeString */;
-long var14 /* : Int */;
-val* var15 /* : String */;
-val* var16 /* : String */;
-static val* varonce17;
-val* var18 /* : String */;
-char* var19 /* : NativeString */;
-long var20 /* : Int */;
-val* var21 /* : String */;
-val* var22 /* : Array[Object] */;
-long var23 /* : Int */;
-val* var24 /* : NativeArray[Object] */;
-val* var25 /* : String */;
-val* var26 /* : nullable Object */;
-var_values = p0;
-var_help = p1;
-var_default = p2;
-var_names = p3;
-var = ((long (*)(val*))(var_values->class->vft[COLOR_abstract_collection__Collection__length]))(var_values) /* length on <var_values:Array[String]>*/;
-var1 = 0;
-{ /* Inline kernel#Int#> (var,var1) */
-/* Covariant cast for argument 0 (i) <var1:Int> isa OTHER */
-/* <var1:Int> isa OTHER */
-var4 = 1; /* easy <var1:Int> isa OTHER*/
-if (!var4) {
-var_class_name = type_kernel__Int.name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 263);
-exit(1);
-}
-var5 = var > var1;
-var2 = var5;
-goto RET_LABEL3;
-RET_LABEL3:(void)0;
-}
-if (!var2) {
-fprintf(stderr, "Runtime error: %s", "Assert failed");
-fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 174);
-exit(1);
-}
-var6 = ((val* (*)(val*))(var_values->class->vft[COLOR_array__Collection__to_a]))(var_values) /* to_a on <var_values:Array[String]>*/;
-self->attrs[COLOR_opts__OptionEnum___values].val = var6; /* _values on <self:OptionEnum> */
-if (varonce) {
-var7 = varonce;
-} else {
-var8 = " <";
-var9 = 2;
-var10 = string__NativeString__to_s_with_length(var8, var9);
-var7 = var10;
-varonce = var7;
-}
-if (varonce11) {
-var12 = varonce11;
-} else {
-var13 = ", ";
-var14 = 2;
-var15 = string__NativeString__to_s_with_length(var13, var14);
-var12 = var15;
-varonce11 = var12;
-}
-var16 = ((val* (*)(val*, val*))(var_values->class->vft[COLOR_string__Collection__join]))(var_values, var12) /* join on <var_values:Array[String]>*/;
-if (varonce17) {
-var18 = varonce17;
-} else {
-var19 = ">";
-var20 = 1;
-var21 = string__NativeString__to_s_with_length(var19, var20);
-var18 = var21;
-varonce17 = var18;
-}
-var22 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var22 = array_instance Array[Object] */
-var23 = 4;
-var24 = NEW_array__NativeArray(var23, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var24)->values[0] = (val*) var_help;
-((struct instance_array__NativeArray*)var24)->values[1] = (val*) var7;
-((struct instance_array__NativeArray*)var24)->values[2] = (val*) var16;
-((struct instance_array__NativeArray*)var24)->values[3] = (val*) var18;
-((void (*)(val*, val*, long))(var22->class->vft[COLOR_array__Array__with_native]))(var22, var24, var23) /* with_native on <var22:Array[Object]>*/;
-CHECK_NEW_array__Array(var22);
-}
-var25 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__to_s]))(var22) /* to_s on <var22:Array[Object]>*/;
-var26 = BOX_kernel__Int(var_default); /* autobox from Int to nullable Object */
-((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_opts__OptionParameter__init_opt]))(self, var25, var26, var_names) /* init_opt on <self:OptionEnum>*/;
-RET_LABEL:;
-}
-/* method opts#OptionEnum#init for (self: Object, Array[String], String, Int, Array[String]) */
-void VIRTUAL_opts__OptionEnum__init(val* self, val* p0, val* p1, long p2, val* p3) {
-opts__OptionEnum__init(self, p0, p1, p2, p3);
-RET_LABEL:;
-}
-/* method opts#OptionEnum#convert for (self: OptionEnum, String): Int */
-long opts__OptionEnum__convert(val* self, val* p0) {
-long var /* : Int */;
-val* var_str /* var str: String */;
-val* var1 /* : Array[String] */;
-long var2 /* : Int */;
-long var_id /* var id: Int */;
-long var3 /* : Int */;
-long var4 /* : Int */;
-long var6 /* : Int */;
-short int var7 /* : Bool */;
-short int var9 /* : Bool */;
-val* var10 /* : Array[Object] */;
-long var11 /* : Int */;
-val* var_ /* var : Array[Object] */;
-static val* varonce;
-val* var12 /* : String */;
-char* var13 /* : NativeString */;
-long var14 /* : Int */;
-val* var15 /* : String */;
-val* var16 /* : Array[String] */;
-static val* varonce17;
-val* var18 /* : String */;
-char* var19 /* : NativeString */;
-long var20 /* : Int */;
-val* var21 /* : String */;
-val* var22 /* : String */;
-static val* varonce23;
-val* var24 /* : String */;
-char* var25 /* : NativeString */;
-long var26 /* : Int */;
-val* var27 /* : String */;
-val* var28 /* : String */;
-val* var_e /* var e: String */;
-val* var29 /* : Array[Object] */;
-long var30 /* : Int */;
-val* var_31 /* var : Array[Object] */;
-static val* varonce32;
-val* var33 /* : String */;
-char* var34 /* : NativeString */;
-long var35 /* : Int */;
-val* var36 /* : String */;
-val* var37 /* : Array[String] */;
-static val* varonce38;
-val* var39 /* : String */;
-char* var40 /* : NativeString */;
-long var41 /* : Int */;
-val* var42 /* : String */;
-val* var43 /* : String */;
-static val* varonce44;
-val* var45 /* : String */;
-char* var46 /* : NativeString */;
-long var47 /* : Int */;
-val* var48 /* : String */;
-val* var49 /* : String */;
-val* var50 /* : String */;
-val* var51 /* : Array[String] */;
-var_str = p0;
-var1 = self->attrs[COLOR_opts__OptionEnum___values].val; /* _values on <self:OptionEnum> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
-fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 181);
-exit(1);
-}
-var2 = ((long (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__SequenceRead__index_of]))(var1, var_str) /* index_of on <var1:Array[String]>*/;
-var_id = var2;
-var3 = 1;
-{ /* Inline kernel#Int#unary - (var3) */
-var6 = -var3;
-var4 = var6;
-goto RET_LABEL5;
-RET_LABEL5:(void)0;
-}
-{ /* Inline kernel#Int#== (var_id,var4) */
-var9 = var_id == var4;
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
-}
-if (var7){
-var10 = NEW_array__Array(&type_array__Arraykernel__Object);
-var11 = 3;
-((void (*)(val*, long))(var10->class->vft[COLOR_array__Array__with_capacity]))(var10, var11) /* with_capacity on <var10:Array[Object]>*/;
-CHECK_NEW_array__Array(var10);
-var_ = var10;
-if (varonce) {
-var12 = varonce;
-} else {
-var13 = "Unrecognized value for option ";
-var14 = 30;
-var15 = string__NativeString__to_s_with_length(var13, var14);
-var12 = var15;
-varonce = var12;
-}
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var12) /* add on <var_:Array[Object]>*/;
-var16 = self->attrs[COLOR_opts__Option___names].val; /* _names on <self:OptionEnum> */
-if (var16 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _names");
-fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 183);
-exit(1);
-}
-if (varonce17) {
-var18 = varonce17;
-} else {
-var19 = ", ";
-var20 = 2;
-var21 = string__NativeString__to_s_with_length(var19, var20);
-var18 = var21;
-varonce17 = var18;
-}
-var22 = ((val* (*)(val*, val*))(var16->class->vft[COLOR_string__Collection__join]))(var16, var18) /* join on <var16:Array[String]>*/;
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var22) /* add on <var_:Array[Object]>*/;
-if (varonce23) {
-var24 = varonce23;
-} else {
-var25 = ".\n";
-var26 = 2;
-var27 = string__NativeString__to_s_with_length(var25, var26);
-var24 = var27;
-varonce23 = var24;
-}
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var24) /* add on <var_:Array[Object]>*/;
-var28 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
-var_e = var28;
-var29 = NEW_array__Array(&type_array__Arraykernel__Object);
-var30 = 3;
-((void (*)(val*, long))(var29->class->vft[COLOR_array__Array__with_capacity]))(var29, var30) /* with_capacity on <var29:Array[Object]>*/;
-CHECK_NEW_array__Array(var29);
-var_31 = var29;
-if (varonce32) {
-var33 = varonce32;
-} else {
-var34 = "Expected values are: ";
-var35 = 21;
-var36 = string__NativeString__to_s_with_length(var34, var35);
-var33 = var36;
-varonce32 = var33;
-}
-((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var33) /* add on <var_31:Array[Object]>*/;
-var37 = self->attrs[COLOR_opts__OptionEnum___values].val; /* _values on <self:OptionEnum> */
-if (var37 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
-fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 184);
-exit(1);
-}
-if (varonce38) {
-var39 = varonce38;
-} else {
-var40 = ", ";
-var41 = 2;
-var42 = string__NativeString__to_s_with_length(var40, var41);
-var39 = var42;
-varonce38 = var39;
-}
-var43 = ((val* (*)(val*, val*))(var37->class->vft[COLOR_string__Collection__join]))(var37, var39) /* join on <var37:Array[String]>*/;
-((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var43) /* add on <var_31:Array[Object]>*/;
-if (varonce44) {
-var45 = varonce44;
-} else {
-var46 = ".";
-var47 = 1;
-var48 = string__NativeString__to_s_with_length(var46, var47);
-var45 = var48;
-varonce44 = var45;
-}
-((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var45) /* add on <var_31:Array[Object]>*/;
-var49 = ((val* (*)(val*))(var_31->class->vft[COLOR_string__Object__to_s]))(var_31) /* to_s on <var_31:Array[Object]>*/;
-var50 = ((val* (*)(val*, val*))(var_e->class->vft[COLOR_string__String___43d]))(var_e, var49) /* + on <var_e:String>*/;
-var_e = var50;
-var51 = self->attrs[COLOR_opts__Option___errors].val; /* _errors on <self:OptionEnum> */
-if (var51 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _errors");
-fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 185);
-exit(1);
-}
-((void (*)(val*, val*))(var51->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var51, var_e) /* add on <var51:Array[String]>*/;
-} else {
-}
-var = var_id;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method opts#OptionEnum#convert for (self: Object, String): nullable Object */
-val* VIRTUAL_opts__OptionEnum__convert(val* self, val* p0) {
-val* var /* : nullable Object */;
-long var1 /* : Int */;
-val* var2 /* : nullable Object */;
-var1 = opts__OptionEnum__convert(self, p0);
-var2 = BOX_kernel__Int(var1); /* autobox from Int to nullable Object */
-var = var2;
-RET_LABEL:;
-return var;
-}
-/* method opts#OptionEnum#value_name for (self: OptionEnum): String */
-val* opts__OptionEnum__value_name(val* self) {
-val* var /* : String */;
-val* var1 /* : Array[String] */;
-val* var2 /* : nullable Object */;
-val* var3 /* : nullable Object */;
-long var4 /* : Int */;
-var1 = self->attrs[COLOR_opts__OptionEnum___values].val; /* _values on <self:OptionEnum> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
-fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 190);
-exit(1);
-}
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__value]))(self) /* value on <self:OptionEnum>*/;
-var4 = ((struct instance_kernel__Int*)var2)->value; /* autounbox from nullable Object to Int */;
-var3 = ((val* (*)(val*, long))(var1->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var1, var4) /* [] on <var1:Array[String]>*/;
-var = var3;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method opts#OptionEnum#value_name for (self: Object): String */
-val* VIRTUAL_opts__OptionEnum__value_name(val* self) {
-val* var /* : String */;
-val* var1 /* : String */;
-var1 = opts__OptionEnum__value_name(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method opts#OptionEnum#pretty_default for (self: OptionEnum): String */
-val* opts__OptionEnum__pretty_default(val* self) {
-val* var /* : String */;
-val* var1 /* : nullable Object */;
-val* var2 /* : null */;
-short int var3 /* : Bool */;
-val* var4 /* : Array[Object] */;
-long var5 /* : Int */;
-val* var_ /* var : Array[Object] */;
-static val* varonce;
-val* var6 /* : String */;
-char* var7 /* : NativeString */;
-long var8 /* : Int */;
-val* var9 /* : String */;
-val* var10 /* : Array[String] */;
-val* var11 /* : nullable Object */;
-val* var12 /* : nullable Object */;
-long var13 /* : Int */;
-static val* varonce14;
-val* var15 /* : String */;
-char* var16 /* : NativeString */;
-long var17 /* : Int */;
-val* var18 /* : String */;
-val* var19 /* : String */;
-static val* varonce20;
-val* var21 /* : String */;
-char* var22 /* : NativeString */;
-long var23 /* : Int */;
-val* var24 /* : String */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__default_value]))(self) /* default_value on <self:OptionEnum>*/;
-var2 = NULL;
-if (var1 == NULL) {
-var3 = 0; /* is null */
-} else {
-var3 = 1; /* arg is null and recv is not */
-}
-if (var3){
-var4 = NEW_array__Array(&type_array__Arraykernel__Object);
-var5 = 3;
-((void (*)(val*, long))(var4->class->vft[COLOR_array__Array__with_capacity]))(var4, var5) /* with_capacity on <var4:Array[Object]>*/;
-CHECK_NEW_array__Array(var4);
-var_ = var4;
-if (varonce) {
-var6 = varonce;
-} else {
-var7 = " (";
-var8 = 2;
-var9 = string__NativeString__to_s_with_length(var7, var8);
-var6 = var9;
-varonce = var6;
-}
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var6) /* add on <var_:Array[Object]>*/;
-var10 = self->attrs[COLOR_opts__OptionEnum___values].val; /* _values on <self:OptionEnum> */
-if (var10 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _values");
-fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 195);
-exit(1);
-}
-var11 = ((val* (*)(val*))(self->class->vft[COLOR_opts__Option__default_value]))(self) /* default_value on <self:OptionEnum>*/;
-if (var11 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Cast failed");
-fprintf(stderr, " (%s:%d)\n", "lib/opts.nit", 195);
-exit(1);
-}
-var13 = ((struct instance_kernel__Int*)var11)->value; /* autounbox from nullable Int to Int */;
-var12 = ((val* (*)(val*, long))(var10->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var10, var13) /* [] on <var10:Array[String]>*/;
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var12) /* add on <var_:Array[Object]>*/;
-if (varonce14) {
-var15 = varonce14;
-} else {
-var16 = ")";
-var17 = 1;
-var18 = string__NativeString__to_s_with_length(var16, var17);
-var15 = var18;
-varonce14 = var15;
-}
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var15) /* add on <var_:Array[Object]>*/;
-var19 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
-var = var19;
-goto RET_LABEL;
-} else {
-if (varonce20) {
-var21 = varonce20;
-} else {
-var22 = "";
-var23 = 0;
-var24 = string__NativeString__to_s_with_length(var22, var23);
-var21 = var24;
-varonce20 = var21;
-}
-var = var21;
-goto RET_LABEL;
-}
-RET_LABEL:;
-return var;
-}
-/* method opts#OptionEnum#pretty_default for (self: Object): String */
-val* VIRTUAL_opts__OptionEnum__pretty_default(val* self) {
-val* var /* : String */;
-val* var1 /* : String */;
-var1 = opts__OptionEnum__pretty_default(self);
-var = var1;
-RET_LABEL:;
-return var;
-}