+{
+{ /* Inline toolcontext#ToolContext#opt_bash_completion (self) on <self:ToolContext> */
+var31 = self->attrs[COLOR_toolcontext__ToolContext___opt_bash_completion].val; /* _opt_bash_completion on <self:ToolContext> */
+if (unlikely(var31 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_bash_completion");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 267);
+show_backtrace(1);
+}
+var29 = var31;
+RET_LABEL30:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var29) on <var29:OptionBool> */
+var34 = var29->attrs[COLOR_opts__Option___value].val; /* _value on <var29:OptionBool> */
+var32 = var34;
+RET_LABEL33:(void)0;
+}
+}
+var35 = ((struct instance_kernel__Bool*)var32)->value; /* autounbox from nullable Object to Bool */;
+if (var35){
+var36 = NEW_toolcontext__BashCompletion(&type_toolcontext__BashCompletion);
+{
+toolcontext__BashCompletion__init(var36, self); /* Direct call toolcontext#BashCompletion#init on <var36:BashCompletion>*/
+}
+var_bash_completion = var36;
+{
+{ /* Inline kernel#Object#sys (self) on <self:ToolContext> */
+var39 = glob_sys;
+var37 = var39;
+goto RET_LABEL38;
+RET_LABEL38:(void)0;
+}
+}
+{
+{ /* Inline file#Sys#stdout (var37) on <var37:Sys> */
+var42 = var37->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <var37:Sys> */
+if (unlikely(var42 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 634);
+show_backtrace(1);
+}
+var40 = var42;
+RET_LABEL41:(void)0;
+}
+}
+{
+template__Template__write_to(var_bash_completion, var40); /* Direct call template#Template#write_to on <var_bash_completion:BashCompletion>*/
+}
+var43 = 0;
+{
+{ /* Inline kernel#Object#exit (self,var43) on <self:ToolContext> */
+exit(var43);
+RET_LABEL44:(void)0;
+}
+}
+} else {
+}
+{
+{ /* Inline toolcontext#ToolContext#opt_stub_man (self) on <self:ToolContext> */
+var47 = self->attrs[COLOR_toolcontext__ToolContext___opt_stub_man].val; /* _opt_stub_man on <self:ToolContext> */
+if (unlikely(var47 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_stub_man");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 270);
+show_backtrace(1);
+}
+var45 = var47;
+RET_LABEL46:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var45) on <var45:OptionBool> */
+var50 = var45->attrs[COLOR_opts__Option___value].val; /* _value on <var45:OptionBool> */
+var48 = var50;
+RET_LABEL49:(void)0;
+}
+}
+var51 = ((struct instance_kernel__Bool*)var48)->value; /* autounbox from nullable Object to Bool */;
+if (var51){
+if (varonce) {
+var52 = varonce;
+} else {
+var53 = "% ";
+var54 = 2;
+var55 = string__NativeString__to_s_with_length(var53, var54);
+var52 = var55;
+varonce = var52;
+}
+{
+var56 = toolcontext__ToolContext__toolname(self);
+}
+{
+var57 = string__FlatString__to_upper(var56);
+}
+if (varonce58) {
+var59 = varonce58;
+} else {
+var60 = "(1)\n\n# NAME\n\n";
+var61 = 13;
+var62 = string__NativeString__to_s_with_length(var60, var61);
+var59 = var62;
+varonce58 = var59;
+}
+{
+{ /* Inline toolcontext#ToolContext#tooldescription (self) on <self:ToolContext> */
+var65 = self->attrs[COLOR_toolcontext__ToolContext___tooldescription].val; /* _tooldescription on <self:ToolContext> */
+if (unlikely(var65 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tooldescription");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 281);
+show_backtrace(1);
+}
+var63 = var65;
+RET_LABEL64:(void)0;
+}
+}
+if (varonce66) {
+var67 = varonce66;
+} else {
+var68 = "\n";
+var69 = 1;
+var70 = string__NativeString__to_s_with_length(var68, var69);
+var67 = var70;
+varonce66 = var67;
+}
+{
+var71 = string_search__Text__split(var63, var67);
+}
+var72 = 1;
+{
+var73 = array__Array___91d_93d(var71, var72);
+}
+if (varonce74) {
+var75 = varonce74;
+} else {
+var76 = "\n\n# SYNOPSYS\n\n";
+var77 = 14;
+var78 = string__NativeString__to_s_with_length(var76, var77);
+var75 = var78;
+varonce74 = var75;
+}
+{
+var79 = toolcontext__ToolContext__toolname(self);
+}
+if (varonce80) {
+var81 = varonce80;
+} else {
+var82 = " [*options*]...\n\n# OPTIONS\n";
+var83 = 27;
+var84 = string__NativeString__to_s_with_length(var82, var83);
+var81 = var84;
+varonce80 = var81;
+}
+var85 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var85 = array_instance Array[Object] */
+var86 = 7;
+var87 = NEW_array__NativeArray(var86, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var87)->values[0] = (val*) var52;
+((struct instance_array__NativeArray*)var87)->values[1] = (val*) var57;
+((struct instance_array__NativeArray*)var87)->values[2] = (val*) var59;
+((struct instance_array__NativeArray*)var87)->values[3] = (val*) var73;
+((struct instance_array__NativeArray*)var87)->values[4] = (val*) var75;
+((struct instance_array__NativeArray*)var87)->values[5] = (val*) var79;
+((struct instance_array__NativeArray*)var87)->values[6] = (val*) var81;
+{
+((void (*)(val*, val*, long))(var85->class->vft[COLOR_array__Array__with_native]))(var85, var87, var86) /* with_native on <var85:Array[Object]>*/;
+}
+}
+{
+var88 = ((val* (*)(val*))(var85->class->vft[COLOR_string__Object__to_s]))(var85) /* to_s on <var85:Array[Object]>*/;
+}
+{
+file__Object__print(self, var88); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+{
+{ /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
+var91 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
+if (unlikely(var91 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
+show_backtrace(1);
+}
+var89 = var91;
+RET_LABEL90:(void)0;
+}
+}
+{
+{ /* Inline opts#OptionContext#options (var89) on <var89:OptionContext> */
+var94 = var89->attrs[COLOR_opts__OptionContext___options].val; /* _options on <var89:OptionContext> */
+if (unlikely(var94 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _options");
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 243);
+show_backtrace(1);
+}
+var92 = var94;
+RET_LABEL93:(void)0;
+}
+}
+var_ = var92;
+{
+var95 = array__AbstractArrayRead__iterator(var_);
+}
+var_96 = var95;
+for(;;) {
+{
+var97 = array__ArrayIterator__is_ok(var_96);
+}
+if (var97){
+{
+var98 = array__ArrayIterator__item(var_96);
+}
+var_o = var98;
+var99 = 1;
+var_first = var99;
+{
+{ /* Inline opts#Option#names (var_o) on <var_o:Option> */
+var102 = var_o->attrs[COLOR_opts__Option___names].val; /* _names on <var_o:Option> */
+if (unlikely(var102 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _names");
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 19);
+show_backtrace(1);
+}
+var100 = var102;
+RET_LABEL101:(void)0;
+}
+}
+var_103 = var100;
+{
+var104 = array__AbstractArrayRead__iterator(var_103);
+}
+var_105 = var104;
+for(;;) {
+{
+var106 = array__ArrayIterator__is_ok(var_105);
+}
+if (var106){
+{
+var107 = array__ArrayIterator__item(var_105);
+}
+var_n = var107;
+if (var_first){
+var108 = 0;
+var_first = var108;
+} else {
+if (varonce109) {
+var110 = varonce109;
+} else {
+var111 = ", ";
+var112 = 2;
+var113 = string__NativeString__to_s_with_length(var111, var112);
+var110 = var113;
+varonce109 = var110;
+}
+var114 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var114 = array_instance Array[Object] */
+var115 = 1;
+var116 = NEW_array__NativeArray(var115, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var116)->values[0] = (val*) var110;
+{
+((void (*)(val*, val*, long))(var114->class->vft[COLOR_array__Array__with_native]))(var114, var116, var115) /* with_native on <var114:Array[Object]>*/;
+}
+}
+{
+file__Object__printn(self, var114); /* Direct call file#Object#printn on <self:ToolContext>*/
+}
+}
+if (varonce117) {
+var118 = varonce117;
+} else {
+var119 = "`";
+var120 = 1;
+var121 = string__NativeString__to_s_with_length(var119, var120);
+var118 = var121;
+varonce117 = var118;
+}
+if (varonce122) {
+var123 = varonce122;
+} else {
+var124 = "`";
+var125 = 1;
+var126 = string__NativeString__to_s_with_length(var124, var125);
+var123 = var126;
+varonce122 = var123;
+}
+var127 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var127 = array_instance Array[Object] */
+var128 = 3;
+var129 = NEW_array__NativeArray(var128, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var129)->values[0] = (val*) var118;
+((struct instance_array__NativeArray*)var129)->values[1] = (val*) var_n;
+((struct instance_array__NativeArray*)var129)->values[2] = (val*) var123;
+{
+((void (*)(val*, val*, long))(var127->class->vft[COLOR_array__Array__with_native]))(var127, var129, var128) /* with_native on <var127:Array[Object]>*/;
+}
+}
+{
+var130 = ((val* (*)(val*))(var127->class->vft[COLOR_string__Object__to_s]))(var127) /* to_s on <var127:Array[Object]>*/;
+}
+var131 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var131 = array_instance Array[Object] */
+var132 = 1;
+var133 = NEW_array__NativeArray(var132, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var133)->values[0] = (val*) var130;
+{
+((void (*)(val*, val*, long))(var131->class->vft[COLOR_array__Array__with_native]))(var131, var133, var132) /* with_native on <var131:Array[Object]>*/;
+}
+}
+{
+file__Object__printn(self, var131); /* Direct call file#Object#printn on <self:ToolContext>*/
+}
+{
+array__ArrayIterator__next(var_105); /* Direct call array#ArrayIterator#next on <var_105:ArrayIterator[String]>*/
+}
+} else {
+goto BREAK_label;
+}
+}
+BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_105) on <var_105:ArrayIterator[String]> */
+RET_LABEL134:(void)0;
+}
+}
+if (varonce135) {
+var136 = varonce135;
+} else {
+var137 = "";
+var138 = 0;
+var139 = string__NativeString__to_s_with_length(var137, var138);
+var136 = var139;
+varonce135 = var136;
+}
+{
+file__Object__print(self, var136); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+if (varonce140) {
+var141 = varonce140;
+} else {
+var142 = ": ";
+var143 = 4;
+var144 = string__NativeString__to_s_with_length(var142, var143);
+var141 = var144;
+varonce140 = var141;
+}
+{
+{ /* Inline opts#Option#helptext (var_o) on <var_o:Option> */
+var147 = var_o->attrs[COLOR_opts__Option___helptext].val; /* _helptext on <var_o:Option> */
+if (unlikely(var147 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _helptext");
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 25);
+show_backtrace(1);
+}
+var145 = var147;
+RET_LABEL146:(void)0;
+}
+}
+var148 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var148 = array_instance Array[Object] */
+var149 = 2;
+var150 = NEW_array__NativeArray(var149, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var150)->values[0] = (val*) var141;
+((struct instance_array__NativeArray*)var150)->values[1] = (val*) var145;
+{
+((void (*)(val*, val*, long))(var148->class->vft[COLOR_array__Array__with_native]))(var148, var150, var149) /* with_native on <var148:Array[Object]>*/;
+}
+}
+{
+var151 = ((val* (*)(val*))(var148->class->vft[COLOR_string__Object__to_s]))(var148) /* to_s on <var148:Array[Object]>*/;
+}
+{
+file__Object__print(self, var151); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+if (varonce152) {
+var153 = varonce152;
+} else {
+var154 = "";
+var155 = 0;
+var156 = string__NativeString__to_s_with_length(var154, var155);
+var153 = var156;
+varonce152 = var153;
+}
+{
+file__Object__print(self, var153); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+{
+array__ArrayIterator__next(var_96); /* Direct call array#ArrayIterator#next on <var_96:ArrayIterator[Option]>*/
+}
+} else {
+goto BREAK_label157;
+}
+}
+BREAK_label157: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_96) on <var_96:ArrayIterator[Option]> */
+RET_LABEL158:(void)0;
+}
+}
+if (varonce159) {
+var160 = varonce159;
+} else {
+var161 = "# SEE ALSO\n\nThe Nit language documentation and the source code of its tools and libraries may be downloaded from <http://nitlanguage.org>";
+var162 = 137;
+var163 = string__NativeString__to_s_with_length(var161, var162);
+var160 = var163;
+varonce159 = var160;
+}
+{
+file__Object__print(self, var160); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+var164 = 0;
+{
+{ /* Inline kernel#Object#exit (self,var164) on <self:ToolContext> */
+exit(var164);
+RET_LABEL165:(void)0;
+}
+}
+} else {
+}
+{
+{ /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
+var168 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
+if (unlikely(var168 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
+show_backtrace(1);
+}
+var166 = var168;
+RET_LABEL167:(void)0;
+}
+}
+{
+var169 = opts__OptionContext__get_errors(var166);
+}
+var_errors = var169;
+{
+var170 = array__AbstractArrayRead__is_empty(var_errors);
+}
+var171 = !var170;
+if (var171){
+var_172 = var_errors;
+{
+var173 = array__AbstractArrayRead__iterator(var_172);
+}
+var_174 = var173;
+for(;;) {
+{
+var175 = array__ArrayIterator__is_ok(var_174);
+}
+if (var175){
+{
+var176 = array__ArrayIterator__item(var_174);
+}
+var_e = var176;
+if (varonce177) {
+var178 = varonce177;
+} else {
+var179 = "Error: ";
+var180 = 7;
+var181 = string__NativeString__to_s_with_length(var179, var180);
+var178 = var181;
+varonce177 = var178;
+}
+var182 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var182 = array_instance Array[Object] */
+var183 = 2;
+var184 = NEW_array__NativeArray(var183, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var184)->values[0] = (val*) var178;
+((struct instance_array__NativeArray*)var184)->values[1] = (val*) var_e;
+{
+((void (*)(val*, val*, long))(var182->class->vft[COLOR_array__Array__with_native]))(var182, var184, var183) /* with_native on <var182:Array[Object]>*/;
+}
+}
+{
+var185 = ((val* (*)(val*))(var182->class->vft[COLOR_string__Object__to_s]))(var182) /* to_s on <var182:Array[Object]>*/;
+}
+{
+file__Object__print(self, var185); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+{
+array__ArrayIterator__next(var_174); /* Direct call array#ArrayIterator#next on <var_174:ArrayIterator[String]>*/
+}
+} else {
+goto BREAK_label186;
+}
+}
+BREAK_label186: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_174) on <var_174:ArrayIterator[String]> */
+RET_LABEL187:(void)0;
+}
+}
+{
+{ /* Inline toolcontext#ToolContext#tooldescription (self) on <self:ToolContext> */
+var190 = self->attrs[COLOR_toolcontext__ToolContext___tooldescription].val; /* _tooldescription on <self:ToolContext> */
+if (unlikely(var190 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tooldescription");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 281);
+show_backtrace(1);
+}
+var188 = var190;
+RET_LABEL189:(void)0;
+}
+}
+{
+file__Object__print(self, var188); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+if (varonce191) {
+var192 = varonce191;
+} else {
+var193 = "Use --help for help";
+var194 = 19;
+var195 = string__NativeString__to_s_with_length(var193, var194);
+var192 = var195;
+varonce191 = var192;
+}
+{
+file__Object__print(self, var192); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+var196 = 1;
+{
+{ /* Inline kernel#Object#exit (self,var196) on <self:ToolContext> */
+exit(var196);
+RET_LABEL197:(void)0;
+}
+}
+} else {
+}
+{
+{ /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
+var201 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
+if (unlikely(var201 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
+show_backtrace(1);
+}
+var199 = var201;
+RET_LABEL200:(void)0;
+}
+}
+{
+{ /* Inline opts#OptionContext#rest (var199) on <var199:OptionContext> */
+var204 = var199->attrs[COLOR_opts__OptionContext___rest].val; /* _rest on <var199:OptionContext> */
+if (unlikely(var204 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _rest");
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 246);
+show_backtrace(1);
+}
+var202 = var204;
+RET_LABEL203:(void)0;
+}
+}
+{
+var205 = array__AbstractArrayRead__is_empty(var202);
+}
+var_206 = var205;
+if (var205){
+{
+{ /* Inline toolcontext#ToolContext#accept_no_arguments (self) on <self:ToolContext> */
+var209 = self->attrs[COLOR_toolcontext__ToolContext___accept_no_arguments].s; /* _accept_no_arguments on <self:ToolContext> */
+var207 = var209;
+RET_LABEL208:(void)0;
+}
+}
+var210 = !var207;
+var198 = var210;
+} else {
+var198 = var_206;
+}
+if (var198){
+{
+{ /* Inline toolcontext#ToolContext#tooldescription (self) on <self:ToolContext> */
+var213 = self->attrs[COLOR_toolcontext__ToolContext___tooldescription].val; /* _tooldescription on <self:ToolContext> */
+if (unlikely(var213 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tooldescription");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 281);
+show_backtrace(1);
+}
+var211 = var213;
+RET_LABEL212:(void)0;
+}
+}
+{
+file__Object__print(self, var211); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+if (varonce214) {
+var215 = varonce214;
+} else {
+var216 = "Use --help for help";
+var217 = 19;
+var218 = string__NativeString__to_s_with_length(var216, var217);
+var215 = var218;
+varonce214 = var215;
+}
+{
+file__Object__print(self, var215); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+var219 = 1;
+{
+{ /* Inline kernel#Object#exit (self,var219) on <self:ToolContext> */
+exit(var219);
+RET_LABEL220:(void)0;
+}
+}
+} else {
+}
+{
+{ /* Inline toolcontext#ToolContext#opt_verbose (self) on <self:ToolContext> */
+var223 = self->attrs[COLOR_toolcontext__ToolContext___opt_verbose].val; /* _opt_verbose on <self:ToolContext> */
+if (unlikely(var223 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_verbose");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 258);
+show_backtrace(1);
+}
+var221 = var223;
+RET_LABEL222:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var221) on <var221:OptionCount> */
+var226 = var221->attrs[COLOR_opts__Option___value].val; /* _value on <var221:OptionCount> */
+var224 = var226;
+RET_LABEL225:(void)0;
+}
+}
+{
+{ /* Inline toolcontext#ToolContext#verbose_level= (self,var224) on <self:ToolContext> */
+var228 = ((struct instance_kernel__Int*)var224)->value; /* autounbox from nullable Object to Int */;
+self->attrs[COLOR_toolcontext__ToolContext___verbose_level].l = var228; /* _verbose_level on <self:ToolContext> */
+RET_LABEL227:(void)0;
+}
+}
+{
+{ /* Inline toolcontext#ToolContext#opt_quiet (self) on <self:ToolContext> */
+var231 = self->attrs[COLOR_toolcontext__ToolContext___opt_quiet].val; /* _opt_quiet on <self:ToolContext> */
+if (unlikely(var231 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_quiet");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 240);
+show_backtrace(1);
+}
+var229 = var231;
+RET_LABEL230:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var229) on <var229:OptionBool> */
+var234 = var229->attrs[COLOR_opts__Option___value].val; /* _value on <var229:OptionBool> */
+var232 = var234;
+RET_LABEL233:(void)0;
+}
+}
+var235 = ((struct instance_kernel__Bool*)var232)->value; /* autounbox from nullable Object to Bool */;
+if (var235){
+{
+{ /* Inline toolcontext#ToolContext#opt_warn (self) on <self:ToolContext> */
+var238 = self->attrs[COLOR_toolcontext__ToolContext___opt_warn].val; /* _opt_warn on <self:ToolContext> */
+if (unlikely(var238 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_warn");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 234);
+show_backtrace(1);
+}
+var236 = var238;
+RET_LABEL237:(void)0;
+}
+}
+var239 = 0;
+{
+{ /* Inline opts#Option#value= (var236,var239) on <var236:OptionCount> */
+/* Covariant cast for argument 0 (value) <var239:Int> isa VALUE */
+/* <var239:Int> isa VALUE */
+type_struct244 = var236->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
+cltype242 = type_struct244->color;
+idtype243 = type_struct244->id;
+if(cltype242 >= (&type_kernel__Int)->table_size) {
+var241 = 0;
+} else {
+var241 = (&type_kernel__Int)->type_table[cltype242] == idtype243;
+}
+if (unlikely(!var241)) {
+var_class_name245 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name245);
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
+show_backtrace(1);
+}
+var246 = BOX_kernel__Int(var239); /* autobox from Int to nullable Object */
+var236->attrs[COLOR_opts__Option___value].val = var246; /* _value on <var236:OptionCount> */
+RET_LABEL240:(void)0;
+}
+}
+} else {
+}
+{
+{ /* Inline toolcontext#ToolContext#opt_log_dir (self) on <self:ToolContext> */
+var249 = self->attrs[COLOR_toolcontext__ToolContext___opt_log_dir].val; /* _opt_log_dir on <self:ToolContext> */
+if (unlikely(var249 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_log_dir");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 246);
+show_backtrace(1);
+}
+var247 = var249;
+RET_LABEL248:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var247) on <var247:OptionString> */
+var252 = var247->attrs[COLOR_opts__Option___value].val; /* _value on <var247:OptionString> */
+var250 = var252;
+RET_LABEL251:(void)0;
+}
+}
+var253 = NULL;
+if (var250 == NULL) {
+var254 = 0; /* is null */
+} else {
+var254 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var250,var253) on <var250:nullable Object(nullable String)> */
+var_other = var253;
+{
+var258 = ((short int (*)(val*, val*))(var250->class->vft[COLOR_kernel__Object___61d_61d]))(var250, var_other) /* == on <var250:nullable String(String)>*/;
+var257 = var258;
+}
+var259 = !var257;
+var255 = var259;
+goto RET_LABEL256;
+RET_LABEL256:(void)0;
+}
+var254 = var255;
+}
+if (var254){
+{
+{ /* Inline toolcontext#ToolContext#opt_log_dir (self) on <self:ToolContext> */
+var262 = self->attrs[COLOR_toolcontext__ToolContext___opt_log_dir].val; /* _opt_log_dir on <self:ToolContext> */
+if (unlikely(var262 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_log_dir");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 246);
+show_backtrace(1);
+}
+var260 = var262;
+RET_LABEL261:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var260) on <var260:OptionString> */
+var265 = var260->attrs[COLOR_opts__Option___value].val; /* _value on <var260:OptionString> */
+var263 = var265;
+RET_LABEL264:(void)0;
+}
+}
+if (unlikely(var263 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 379);
+show_backtrace(1);
+}
+{
+{ /* Inline toolcontext#ToolContext#log_directory= (self,var263) on <self:ToolContext> */
+self->attrs[COLOR_toolcontext__ToolContext___log_directory].val = var263; /* _log_directory on <self:ToolContext> */
+RET_LABEL266:(void)0;
+}
+}
+} else {
+}
+{
+{ /* Inline toolcontext#ToolContext#opt_log (self) on <self:ToolContext> */
+var269 = self->attrs[COLOR_toolcontext__ToolContext___opt_log].val; /* _opt_log on <self:ToolContext> */
+if (unlikely(var269 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_log");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 243);
+show_backtrace(1);
+}
+var267 = var269;
+RET_LABEL268:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var267) on <var267:OptionBool> */
+var272 = var267->attrs[COLOR_opts__Option___value].val; /* _value on <var267:OptionBool> */
+var270 = var272;
+RET_LABEL271:(void)0;
+}
+}
+var273 = ((struct instance_kernel__Bool*)var270)->value; /* autounbox from nullable Object to Bool */;
+if (var273){
+{
+{ /* Inline toolcontext#ToolContext#log_directory (self) on <self:ToolContext> */
+var276 = self->attrs[COLOR_toolcontext__ToolContext___log_directory].val; /* _log_directory on <self:ToolContext> */
+if (unlikely(var276 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _log_directory");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 101);
+show_backtrace(1);
+}
+var274 = var276;
+RET_LABEL275:(void)0;
+}
+}
+{
+file__String__mkdir(var274); /* Direct call file#String#mkdir on <var274:String>*/
+}
+} else {
+}
+{
+var277 = toolcontext__ToolContext__compute_nit_dir(self);
+}
+{
+{ /* Inline toolcontext#ToolContext#nit_dir= (self,var277) on <self:ToolContext> */
+self->attrs[COLOR_toolcontext__ToolContext___nit_dir].val = var277; /* _nit_dir on <self:ToolContext> */
+RET_LABEL278:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method toolcontext#ToolContext#process_options for (self: Object, Sequence[String]) */
+void VIRTUAL_toolcontext__ToolContext__process_options(val* self, val* p0) {
+toolcontext__ToolContext__process_options(self, p0); /* Direct call toolcontext#ToolContext#process_options on <self:Object(ToolContext)>*/
+RET_LABEL:;
+}
+/* method toolcontext#ToolContext#version for (self: ToolContext): String */
+val* toolcontext__ToolContext__version(val* self) {
+val* var /* : String */;
+val* var1 /* : OptionBool */;
+val* var3 /* : OptionBool */;
+val* var4 /* : nullable Object */;
+val* var6 /* : nullable Object */;
+short int var7 /* : Bool */;
+static val* varonce;
+val* var8 /* : String */;
+char* var9 /* : NativeString */;
+long var10 /* : Int */;
+val* var11 /* : FlatString */;
+val* var12 /* : String */;
+{
+{ /* Inline toolcontext#ToolContext#opt_set_dummy_tool (self) on <self:ToolContext> */
+var3 = self->attrs[COLOR_toolcontext__ToolContext___opt_set_dummy_tool].val; /* _opt_set_dummy_tool on <self:ToolContext> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_set_dummy_tool");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 255);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var1) on <var1:OptionBool> */
+var6 = var1->attrs[COLOR_opts__Option___value].val; /* _value on <var1:OptionBool> */
+var4 = var6;
+RET_LABEL5:(void)0;
+}
+}
+var7 = ((struct instance_kernel__Bool*)var4)->value; /* autounbox from nullable Object to Bool */;
+if (var7){
+if (varonce) {
+var8 = varonce;
+} else {
+var9 = "DUMMY_VERSION";
+var10 = 13;
+var11 = string__NativeString__to_s_with_length(var9, var10);
+var8 = var11;
+varonce = var8;
+}
+var = var8;
+goto RET_LABEL;
+} else {
+}
+{
+var12 = version__Object__nit_version(self);
+}
+var = var12;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#ToolContext#version for (self: Object): String */
+val* VIRTUAL_toolcontext__ToolContext__version(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = toolcontext__ToolContext__version(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#ToolContext#toolname for (self: ToolContext): String */
+val* toolcontext__ToolContext__toolname(val* self) {
+val* var /* : String */;
+val* var1 /* : OptionBool */;
+val* var3 /* : OptionBool */;
+val* var4 /* : nullable Object */;
+val* var6 /* : nullable Object */;
+short int var7 /* : Bool */;
+static val* varonce;
+val* var8 /* : String */;
+char* var9 /* : NativeString */;
+long var10 /* : Int */;
+val* var11 /* : FlatString */;
+val* var12 /* : Sys */;
+val* var14 /* : Sys */;
+val* var15 /* : String */;
+static val* varonce16;
+val* var17 /* : String */;
+char* var18 /* : NativeString */;
+long var19 /* : Int */;
+val* var20 /* : FlatString */;
+val* var21 /* : String */;
+{
+{ /* Inline toolcontext#ToolContext#opt_set_dummy_tool (self) on <self:ToolContext> */
+var3 = self->attrs[COLOR_toolcontext__ToolContext___opt_set_dummy_tool].val; /* _opt_set_dummy_tool on <self:ToolContext> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_set_dummy_tool");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 255);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var1) on <var1:OptionBool> */
+var6 = var1->attrs[COLOR_opts__Option___value].val; /* _value on <var1:OptionBool> */
+var4 = var6;
+RET_LABEL5:(void)0;
+}
+}
+var7 = ((struct instance_kernel__Bool*)var4)->value; /* autounbox from nullable Object to Bool */;
+if (var7){
+if (varonce) {
+var8 = varonce;
+} else {
+var9 = "DUMMY_TOOL";
+var10 = 10;
+var11 = string__NativeString__to_s_with_length(var9, var10);
+var8 = var11;
+varonce = var8;
+}
+var = var8;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline kernel#Object#sys (self) on <self:ToolContext> */
+var14 = glob_sys;
+var12 = var14;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
+}
+}
+{
+var15 = string__Sys__program_name(var12);
+}
+if (varonce16) {
+var17 = varonce16;
+} else {
+var18 = "";
+var19 = 0;
+var20 = string__NativeString__to_s_with_length(var18, var19);
+var17 = var20;
+varonce16 = var17;
+}
+{
+var21 = file__String__basename(var15, var17);
+}
+var = var21;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#ToolContext#toolname for (self: Object): String */
+val* VIRTUAL_toolcontext__ToolContext__toolname(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = toolcontext__ToolContext__toolname(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#ToolContext#nit_dir for (self: ToolContext): nullable String */
+val* toolcontext__ToolContext__nit_dir(val* self) {
+val* var /* : nullable String */;
+val* var1 /* : nullable String */;
+var1 = self->attrs[COLOR_toolcontext__ToolContext___nit_dir].val; /* _nit_dir on <self:ToolContext> */
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#ToolContext#nit_dir for (self: Object): nullable String */
+val* VIRTUAL_toolcontext__ToolContext__nit_dir(val* self) {
+val* var /* : nullable String */;
+val* var1 /* : nullable String */;
+val* var3 /* : nullable String */;
+{ /* Inline toolcontext#ToolContext#nit_dir (self) on <self:Object(ToolContext)> */
+var3 = self->attrs[COLOR_toolcontext__ToolContext___nit_dir].val; /* _nit_dir on <self:Object(ToolContext)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#ToolContext#nit_dir= for (self: ToolContext, nullable String) */
+void toolcontext__ToolContext__nit_dir_61d(val* self, val* p0) {
+self->attrs[COLOR_toolcontext__ToolContext___nit_dir].val = p0; /* _nit_dir on <self:ToolContext> */
+RET_LABEL:;
+}
+/* method toolcontext#ToolContext#nit_dir= for (self: Object, nullable String) */
+void VIRTUAL_toolcontext__ToolContext__nit_dir_61d(val* self, val* p0) {
+{ /* Inline toolcontext#ToolContext#nit_dir= (self,p0) on <self:Object(ToolContext)> */
+self->attrs[COLOR_toolcontext__ToolContext___nit_dir].val = p0; /* _nit_dir on <self:Object(ToolContext)> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method toolcontext#ToolContext#compute_nit_dir for (self: ToolContext): nullable String */
+val* toolcontext__ToolContext__compute_nit_dir(val* self) {
+val* var /* : nullable String */;
+static val* varonce;
+val* var1 /* : String */;
+char* var2 /* : NativeString */;
+long var3 /* : Int */;
+val* var4 /* : FlatString */;
+val* var5 /* : String */;
+val* var_res /* var res: String */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : Sys */;
+val* var10 /* : Sys */;
+val* var11 /* : String */;
+val* var12 /* : String */;
+static val* varonce13;
+val* var14 /* : String */;
+char* var15 /* : NativeString */;
+long var16 /* : Int */;
+val* var17 /* : FlatString */;
+val* var18 /* : Array[Object] */;
+long var19 /* : Int */;
+val* var20 /* : NativeArray[Object] */;
+val* var21 /* : String */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+short int var_ /* var : Bool */;
+static val* varonce24;
+val* var25 /* : String */;
+char* var26 /* : NativeString */;
+long var27 /* : Int */;
+val* var28 /* : FlatString */;
+val* var29 /* : Array[Object] */;
+long var30 /* : Int */;
+val* var31 /* : NativeArray[Object] */;
+val* var32 /* : String */;
+short int var33 /* : Bool */;
+val* var34 /* : String */;
+static val* varonce35;
+val* var36 /* : String */;
+char* var37 /* : NativeString */;
+long var38 /* : Int */;
+val* var39 /* : FlatString */;
+val* var_exe /* var exe: String */;
+short int var40 /* : Bool */;
+val* var41 /* : String */;
+val* var42 /* : String */;
+static val* varonce43;
+val* var44 /* : String */;
+char* var45 /* : NativeString */;
+long var46 /* : Int */;
+val* var47 /* : FlatString */;
+val* var48 /* : String */;
+short int var49 /* : Bool */;
+short int var50 /* : Bool */;
+short int var_51 /* var : Bool */;
+static val* varonce52;
+val* var53 /* : String */;
+char* var54 /* : NativeString */;
+long var55 /* : Int */;
+val* var56 /* : FlatString */;
+val* var57 /* : Array[Object] */;
+long var58 /* : Int */;
+val* var59 /* : NativeArray[Object] */;
+val* var60 /* : String */;
+short int var61 /* : Bool */;
+val* var62 /* : String */;
+val* var63 /* : null */;
+if (varonce) {
+var1 = varonce;
+} else {
+var2 = "NIT_DIR";
+var3 = 7;
+var4 = string__NativeString__to_s_with_length(var2, var3);
+var1 = var4;
+varonce = var1;
+}
+{
+var5 = environ__String__environ(var1);
+}
+var_res = var5;
+{
+var6 = string__Text__is_empty(var_res);
+}
+var7 = !var6;
+if (var7){
+var = var_res;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline kernel#Object#sys (self) on <self:ToolContext> */
+var10 = glob_sys;
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
+}
+}
+{
+var11 = string__Sys__program_name(var8);
+}
+{
+var12 = file__String__dirname(var11);
+}
+if (varonce13) {
+var14 = varonce13;
+} else {
+var15 = "/..";
+var16 = 3;
+var17 = string__NativeString__to_s_with_length(var15, var16);
+var14 = var17;
+varonce13 = var14;
+}
+var18 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var18 = array_instance Array[Object] */
+var19 = 2;
+var20 = NEW_array__NativeArray(var19, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var20)->values[0] = (val*) var12;
+((struct instance_array__NativeArray*)var20)->values[1] = (val*) var14;
+{
+((void (*)(val*, val*, long))(var18->class->vft[COLOR_array__Array__with_native]))(var18, var20, var19) /* with_native on <var18:Array[Object]>*/;
+}
+}
+{
+var21 = ((val* (*)(val*))(var18->class->vft[COLOR_string__Object__to_s]))(var18) /* to_s on <var18:Array[Object]>*/;
+}
+var_res = var21;
+{
+var23 = file__String__file_exists(var_res);
+}
+var_ = var23;
+if (var23){
+if (varonce24) {
+var25 = varonce24;
+} else {
+var26 = "/src/nit.nit";
+var27 = 12;
+var28 = string__NativeString__to_s_with_length(var26, var27);
+var25 = var28;
+varonce24 = var25;
+}
+var29 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var29 = array_instance Array[Object] */
+var30 = 2;
+var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var31)->values[0] = (val*) var_res;
+((struct instance_array__NativeArray*)var31)->values[1] = (val*) var25;
+{
+((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
+}
+}
+{
+var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
+}
+{
+var33 = file__String__file_exists(var32);
+}
+var22 = var33;
+} else {
+var22 = var_;
+}
+if (var22){
+{
+var34 = file__String__simplify_path(var_res);
+}
+var = var34;
+goto RET_LABEL;
+} else {
+}
+if (varonce35) {
+var36 = varonce35;
+} else {
+var37 = "/proc/self/exe";
+var38 = 14;
+var39 = string__NativeString__to_s_with_length(var37, var38);
+var36 = var39;
+varonce35 = var36;
+}
+var_exe = var36;
+{
+var40 = file__String__file_exists(var_exe);
+}
+if (var40){
+{
+var41 = file__String__realpath(var_exe);
+}
+var_res = var41;
+{
+var42 = file__String__dirname(var_res);
+}
+if (varonce43) {
+var44 = varonce43;
+} else {
+var45 = "..";
+var46 = 2;
+var47 = string__NativeString__to_s_with_length(var45, var46);
+var44 = var47;
+varonce43 = var44;
+}
+{
+var48 = file__String__join_path(var42, var44);
+}
+var_res = var48;
+{
+var50 = file__String__file_exists(var_res);
+}
+var_51 = var50;
+if (var50){
+if (varonce52) {
+var53 = varonce52;
+} else {
+var54 = "/src/nit.nit";
+var55 = 12;
+var56 = string__NativeString__to_s_with_length(var54, var55);
+var53 = var56;
+varonce52 = var53;
+}
+var57 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var57 = array_instance Array[Object] */
+var58 = 2;
+var59 = NEW_array__NativeArray(var58, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var59)->values[0] = (val*) var_res;
+((struct instance_array__NativeArray*)var59)->values[1] = (val*) var53;
+{
+((void (*)(val*, val*, long))(var57->class->vft[COLOR_array__Array__with_native]))(var57, var59, var58) /* with_native on <var57:Array[Object]>*/;
+}
+}
+{
+var60 = ((val* (*)(val*))(var57->class->vft[COLOR_string__Object__to_s]))(var57) /* to_s on <var57:Array[Object]>*/;
+}
+{
+var61 = file__String__file_exists(var60);
+}
+var49 = var61;
+} else {
+var49 = var_51;
+}
+if (var49){
+{
+var62 = file__String__simplify_path(var_res);
+}
+var = var62;
+goto RET_LABEL;
+} else {
+}
+} else {
+}
+var63 = NULL;
+var = var63;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#ToolContext#compute_nit_dir for (self: Object): nullable String */
+val* VIRTUAL_toolcontext__ToolContext__compute_nit_dir(val* self) {
+val* var /* : nullable String */;
+val* var1 /* : nullable String */;
+var1 = toolcontext__ToolContext__compute_nit_dir(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#BashCompletion#toolcontext for (self: BashCompletion): ToolContext */
+val* toolcontext__BashCompletion__toolcontext(val* self) {
+val* var /* : ToolContext */;
+val* var1 /* : ToolContext */;
+var1 = self->attrs[COLOR_toolcontext__BashCompletion___toolcontext].val; /* _toolcontext on <self:BashCompletion> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 449);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#BashCompletion#toolcontext for (self: Object): ToolContext */
+val* VIRTUAL_toolcontext__BashCompletion__toolcontext(val* self) {
+val* var /* : ToolContext */;
+val* var1 /* : ToolContext */;
+val* var3 /* : ToolContext */;
+{ /* Inline toolcontext#BashCompletion#toolcontext (self) on <self:Object(BashCompletion)> */
+var3 = self->attrs[COLOR_toolcontext__BashCompletion___toolcontext].val; /* _toolcontext on <self:Object(BashCompletion)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 449);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#BashCompletion#toolcontext= for (self: BashCompletion, ToolContext) */
+void toolcontext__BashCompletion__toolcontext_61d(val* self, val* p0) {
+self->attrs[COLOR_toolcontext__BashCompletion___toolcontext].val = p0; /* _toolcontext on <self:BashCompletion> */
+RET_LABEL:;
+}
+/* method toolcontext#BashCompletion#toolcontext= for (self: Object, ToolContext) */
+void VIRTUAL_toolcontext__BashCompletion__toolcontext_61d(val* self, val* p0) {
+{ /* Inline toolcontext#BashCompletion#toolcontext= (self,p0) on <self:Object(BashCompletion)> */
+self->attrs[COLOR_toolcontext__BashCompletion___toolcontext].val = p0; /* _toolcontext on <self:Object(BashCompletion)> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method toolcontext#BashCompletion#init for (self: BashCompletion, ToolContext) */
+void toolcontext__BashCompletion__init(val* self, val* p0) {
+val* var_toolcontext /* var toolcontext: ToolContext */;
+{
+((void (*)(val*))(self->class->vft[COLOR_kernel__Object__init]))(self) /* init on <self:BashCompletion>*/;
+}
+var_toolcontext = p0;
+{
+{ /* Inline toolcontext#BashCompletion#toolcontext= (self,var_toolcontext) on <self:BashCompletion> */
+self->attrs[COLOR_toolcontext__BashCompletion___toolcontext].val = var_toolcontext; /* _toolcontext on <self:BashCompletion> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method toolcontext#BashCompletion#init for (self: Object, ToolContext) */
+void VIRTUAL_toolcontext__BashCompletion__init(val* self, val* p0) {
+toolcontext__BashCompletion__init(self, p0); /* Direct call toolcontext#BashCompletion#init on <self:Object(BashCompletion)>*/
+RET_LABEL:;
+}
+/* method toolcontext#BashCompletion#extract_options_names for (self: BashCompletion): Array[String] */
+val* toolcontext__BashCompletion__extract_options_names(val* self) {
+val* var /* : Array[String] */;
+val* var1 /* : Array[String] */;
+val* var_names /* var names: Array[String] */;
+val* var2 /* : ToolContext */;
+val* var4 /* : ToolContext */;
+val* var5 /* : OptionContext */;
+val* var7 /* : OptionContext */;
+val* var8 /* : Array[Option] */;
+val* var10 /* : Array[Option] */;
+val* var_ /* var : Array[Option] */;
+val* var11 /* : ArrayIterator[nullable Object] */;
+val* var_12 /* var : ArrayIterator[Option] */;
+short int var13 /* : Bool */;
+val* var14 /* : nullable Object */;
+val* var_option /* var option: Option */;
+val* var15 /* : Array[String] */;
+val* var17 /* : Array[String] */;
+val* var_18 /* var : Array[String] */;
+val* var19 /* : ArrayIterator[nullable Object] */;
+val* var_20 /* var : ArrayIterator[String] */;
+short int var21 /* : Bool */;
+val* var22 /* : nullable Object */;
+val* var_name /* var name: String */;
+static val* varonce;
+val* var23 /* : String */;
+char* var24 /* : NativeString */;
+long var25 /* : Int */;
+val* var26 /* : FlatString */;
+short int var27 /* : Bool */;
+var1 = NEW_array__Array(&type_array__Arraystring__String);
+{
+((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:Array[String]>*/;
+}
+var_names = var1;
+{
+{ /* Inline toolcontext#BashCompletion#toolcontext (self) on <self:BashCompletion> */
+var4 = self->attrs[COLOR_toolcontext__BashCompletion___toolcontext].val; /* _toolcontext on <self:BashCompletion> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 449);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline toolcontext#ToolContext#option_context (var2) on <var2:ToolContext> */
+var7 = var2->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <var2:ToolContext> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
+show_backtrace(1);
+}
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+{ /* Inline opts#OptionContext#options (var5) on <var5:OptionContext> */
+var10 = var5->attrs[COLOR_opts__OptionContext___options].val; /* _options on <var5:OptionContext> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _options");
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 243);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+var_ = var8;
+{
+var11 = array__AbstractArrayRead__iterator(var_);
+}
+var_12 = var11;
+for(;;) {
+{
+var13 = array__ArrayIterator__is_ok(var_12);
+}
+if (var13){
+{
+var14 = array__ArrayIterator__item(var_12);
+}
+var_option = var14;
+{
+{ /* Inline opts#Option#names (var_option) on <var_option:Option> */
+var17 = var_option->attrs[COLOR_opts__Option___names].val; /* _names on <var_option:Option> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _names");
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 19);
+show_backtrace(1);
+}
+var15 = var17;
+RET_LABEL16:(void)0;
+}
+}
+var_18 = var15;
+{
+var19 = array__AbstractArrayRead__iterator(var_18);
+}
+var_20 = var19;
+for(;;) {
+{
+var21 = array__ArrayIterator__is_ok(var_20);
+}
+if (var21){
+{
+var22 = array__ArrayIterator__item(var_20);
+}
+var_name = var22;
+if (varonce) {
+var23 = varonce;
+} else {
+var24 = "--";
+var25 = 2;
+var26 = string__NativeString__to_s_with_length(var24, var25);
+var23 = var26;
+varonce = var23;
+}
+{
+var27 = string__Text__has_prefix(var_name, var23);
+}
+if (var27){
+{
+array__Array__add(var_names, var_name); /* Direct call array#Array#add on <var_names:Array[String]>*/
+}
+} else {
+}
+{
+array__ArrayIterator__next(var_20); /* Direct call array#ArrayIterator#next on <var_20:ArrayIterator[String]>*/
+}
+} else {
+goto BREAK_label;
+}
+}
+BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_20) on <var_20:ArrayIterator[String]> */
+RET_LABEL28:(void)0;
+}
+}
+{
+array__ArrayIterator__next(var_12); /* Direct call array#ArrayIterator#next on <var_12:ArrayIterator[Option]>*/
+}
+} else {
+goto BREAK_label29;
+}
+}
+BREAK_label29: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_12) on <var_12:ArrayIterator[Option]> */
+RET_LABEL30:(void)0;
+}
+}
+var = var_names;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#BashCompletion#extract_options_names for (self: Object): Array[String] */
+val* VIRTUAL_toolcontext__BashCompletion__extract_options_names(val* self) {
+val* var /* : Array[String] */;
+val* var1 /* : Array[String] */;
+var1 = toolcontext__BashCompletion__extract_options_names(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method toolcontext#BashCompletion#rendering for (self: BashCompletion) */
+void toolcontext__BashCompletion__rendering(val* self) {
+val* var /* : ToolContext */;
+val* var2 /* : ToolContext */;
+val* var3 /* : String */;
+val* var_name /* var name: String */;
+val* var4 /* : Array[String] */;
+val* var_option_names /* var option_names: Array[String] */;
+static val* varonce;
+val* var5 /* : String */;
+char* var6 /* : NativeString */;
+long var7 /* : Int */;
+val* var8 /* : FlatString */;
+static val* varonce9;
+val* var10 /* : String */;
+char* var11 /* : NativeString */;
+long var12 /* : Int */;
+val* var13 /* : FlatString */;
+val* var14 /* : ToolContext */;
+val* var16 /* : ToolContext */;
+val* var17 /* : String */;
+val* var18 /* : Array[Object] */;
+long var19 /* : Int */;
+val* var20 /* : NativeArray[Object] */;
+val* var21 /* : String */;
+static val* varonce22;
+val* var23 /* : String */;
+char* var24 /* : NativeString */;
+long var25 /* : Int */;
+val* var26 /* : FlatString */;
+static val* varonce27;
+val* var28 /* : String */;
+char* var29 /* : NativeString */;
+long var30 /* : Int */;
+val* var31 /* : FlatString */;
+val* var32 /* : Array[Object] */;
+long var33 /* : Int */;
+val* var34 /* : NativeArray[Object] */;
+val* var35 /* : String */;
+static val* varonce36;
+val* var37 /* : String */;
+char* var38 /* : NativeString */;
+long var39 /* : Int */;
+val* var40 /* : FlatString */;
+static val* varonce41;
+val* var42 /* : String */;
+char* var43 /* : NativeString */;
+long var44 /* : Int */;
+val* var45 /* : FlatString */;
+static val* varonce46;
+val* var47 /* : String */;
+char* var48 /* : NativeString */;
+long var49 /* : Int */;
+val* var50 /* : FlatString */;
+static val* varonce51;
+val* var52 /* : String */;
+char* var53 /* : NativeString */;
+long var54 /* : Int */;
+val* var55 /* : FlatString */;
+static val* varonce56;
+val* var57 /* : String */;
+char* var58 /* : NativeString */;
+long var59 /* : Int */;
+val* var60 /* : FlatString */;
+short int var61 /* : Bool */;
+short int var62 /* : Bool */;
+static val* varonce63;
+val* var64 /* : String */;
+char* var65 /* : NativeString */;
+long var66 /* : Int */;
+val* var67 /* : FlatString */;
+static val* varonce68;
+val* var69 /* : String */;
+char* var70 /* : NativeString */;
+long var71 /* : Int */;
+val* var72 /* : FlatString */;
+val* var73 /* : String */;
+static val* varonce74;
+val* var75 /* : String */;
+char* var76 /* : NativeString */;
+long var77 /* : Int */;
+val* var78 /* : FlatString */;
+val* var79 /* : Array[Object] */;
+long var80 /* : Int */;
+val* var81 /* : NativeArray[Object] */;
+val* var82 /* : String */;
+static val* varonce83;
+val* var84 /* : String */;
+char* var85 /* : NativeString */;
+long var86 /* : Int */;
+val* var87 /* : FlatString */;
+static val* varonce88;
+val* var89 /* : String */;
+char* var90 /* : NativeString */;
+long var91 /* : Int */;
+val* var92 /* : FlatString */;
+static val* varonce93;
+val* var94 /* : String */;
+char* var95 /* : NativeString */;
+long var96 /* : Int */;
+val* var97 /* : FlatString */;
+static val* varonce98;
+val* var99 /* : String */;
+char* var100 /* : NativeString */;
+long var101 /* : Int */;
+val* var102 /* : FlatString */;
+static val* varonce103;
+val* var104 /* : String */;
+char* var105 /* : NativeString */;
+long var106 /* : Int */;
+val* var107 /* : FlatString */;
+static val* varonce108;
+val* var109 /* : String */;
+char* var110 /* : NativeString */;
+long var111 /* : Int */;
+val* var112 /* : FlatString */;
+static val* varonce113;
+val* var114 /* : String */;
+char* var115 /* : NativeString */;
+long var116 /* : Int */;
+val* var117 /* : FlatString */;
+val* var118 /* : Array[Object] */;
+long var119 /* : Int */;
+val* var120 /* : NativeArray[Object] */;
+val* var121 /* : String */;
+{
+{ /* Inline toolcontext#BashCompletion#toolcontext (self) on <self:BashCompletion> */
+var2 = self->attrs[COLOR_toolcontext__BashCompletion___toolcontext].val; /* _toolcontext on <self:BashCompletion> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 449);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+var3 = toolcontext__ToolContext__toolname(var);
+}
+var_name = var3;
+{
+var4 = toolcontext__BashCompletion__extract_options_names(self);
+}
+var_option_names = var4;
+if (varonce) {
+var5 = varonce;
+} else {
+var6 = "# generated bash completion file for ";
+var7 = 37;
+var8 = string__NativeString__to_s_with_length(var6, var7);
+var5 = var8;
+varonce = var5;
+}
+if (varonce9) {
+var10 = varonce9;
+} else {
+var11 = " ";
+var12 = 1;
+var13 = string__NativeString__to_s_with_length(var11, var12);
+var10 = var13;
+varonce9 = var10;
+}
+{
+{ /* Inline toolcontext#BashCompletion#toolcontext (self) on <self:BashCompletion> */
+var16 = self->attrs[COLOR_toolcontext__BashCompletion___toolcontext].val; /* _toolcontext on <self:BashCompletion> */
+if (unlikely(var16 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 449);
+show_backtrace(1);
+}
+var14 = var16;
+RET_LABEL15:(void)0;
+}
+}
+{
+var17 = toolcontext__ToolContext__version(var14);
+}
+var18 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var18 = array_instance Array[Object] */
+var19 = 4;
+var20 = NEW_array__NativeArray(var19, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var20)->values[0] = (val*) var5;
+((struct instance_array__NativeArray*)var20)->values[1] = (val*) var_name;
+((struct instance_array__NativeArray*)var20)->values[2] = (val*) var10;
+((struct instance_array__NativeArray*)var20)->values[3] = (val*) var17;
+{
+((void (*)(val*, val*, long))(var18->class->vft[COLOR_array__Array__with_native]))(var18, var20, var19) /* with_native on <var18:Array[Object]>*/;
+}
+}
+{
+var21 = ((val* (*)(val*))(var18->class->vft[COLOR_string__Object__to_s]))(var18) /* to_s on <var18:Array[Object]>*/;
+}
+{
+template__Template__addn(self, var21); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce22) {
+var23 = varonce22;
+} else {
+var24 = "_";
+var25 = 1;
+var26 = string__NativeString__to_s_with_length(var24, var25);
+var23 = var26;
+varonce22 = var23;
+}
+if (varonce27) {
+var28 = varonce27;
+} else {
+var29 = "()";
+var30 = 2;
+var31 = string__NativeString__to_s_with_length(var29, var30);
+var28 = var31;
+varonce27 = var28;
+}
+var32 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var32 = array_instance Array[Object] */
+var33 = 3;
+var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var34)->values[0] = (val*) var23;
+((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_name;
+((struct instance_array__NativeArray*)var34)->values[2] = (val*) var28;
+{
+((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
+}
+}
+{
+var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
+}
+{
+template__Template__addn(self, var35); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce36) {
+var37 = varonce36;
+} else {
+var38 = "{";
+var39 = 1;
+var40 = string__NativeString__to_s_with_length(var38, var39);
+var37 = var40;
+varonce36 = var37;
+}
+{
+template__Template__addn(self, var37); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce41) {
+var42 = varonce41;
+} else {
+var43 = "\11local cur prev opts";
+var44 = 20;
+var45 = string__NativeString__to_s_with_length(var43, var44);
+var42 = var45;
+varonce41 = var42;
+}
+{
+template__Template__addn(self, var42); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce46) {
+var47 = varonce46;
+} else {
+var48 = "\11COMPREPLY=()";
+var49 = 13;
+var50 = string__NativeString__to_s_with_length(var48, var49);
+var47 = var50;
+varonce46 = var47;
+}
+{
+template__Template__addn(self, var47); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce51) {
+var52 = varonce51;
+} else {
+var53 = "\11cur=\"${COMP_WORDS[COMP_CWORD]}\"";
+var54 = 32;
+var55 = string__NativeString__to_s_with_length(var53, var54);
+var52 = var55;
+varonce51 = var52;
+}
+{
+template__Template__addn(self, var52); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce56) {
+var57 = varonce56;
+} else {
+var58 = "\11prev=\"${COMP_WORDS[COMP_CWORD-1]}\"";
+var59 = 35;
+var60 = string__NativeString__to_s_with_length(var58, var59);
+var57 = var60;
+varonce56 = var57;
+}
+{
+template__Template__addn(self, var57); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+{
+var61 = array__AbstractArrayRead__is_empty(var_option_names);
+}
+var62 = !var61;
+if (var62){
+if (varonce63) {
+var64 = varonce63;
+} else {
+var65 = "\11opts=\"";
+var66 = 7;
+var67 = string__NativeString__to_s_with_length(var65, var66);
+var64 = var67;
+varonce63 = var64;
+}
+if (varonce68) {
+var69 = varonce68;
+} else {
+var70 = " ";
+var71 = 1;
+var72 = string__NativeString__to_s_with_length(var70, var71);
+var69 = var72;
+varonce68 = var69;
+}
+{
+var73 = string__Collection__join(var_option_names, var69);
+}
+if (varonce74) {
+var75 = varonce74;
+} else {
+var76 = "\"";
+var77 = 1;
+var78 = string__NativeString__to_s_with_length(var76, var77);
+var75 = var78;
+varonce74 = var75;
+}
+var79 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var79 = array_instance Array[Object] */
+var80 = 3;
+var81 = NEW_array__NativeArray(var80, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var81)->values[0] = (val*) var64;
+((struct instance_array__NativeArray*)var81)->values[1] = (val*) var73;
+((struct instance_array__NativeArray*)var81)->values[2] = (val*) var75;
+{
+((void (*)(val*, val*, long))(var79->class->vft[COLOR_array__Array__with_native]))(var79, var81, var80) /* with_native on <var79:Array[Object]>*/;
+}
+}
+{
+var82 = ((val* (*)(val*))(var79->class->vft[COLOR_string__Object__to_s]))(var79) /* to_s on <var79:Array[Object]>*/;
+}
+{
+template__Template__addn(self, var82); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce83) {
+var84 = varonce83;
+} else {
+var85 = "\11if [[ ${cur} == -* ]] ; then";
+var86 = 29;
+var87 = string__NativeString__to_s_with_length(var85, var86);
+var84 = var87;
+varonce83 = var84;
+}
+{
+template__Template__addn(self, var84); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce88) {
+var89 = varonce88;
+} else {
+var90 = "\11\11COMPREPLY=( $(compgen -W \"${opts}\" -- ${cur}) )";
+var91 = 49;
+var92 = string__NativeString__to_s_with_length(var90, var91);
+var89 = var92;
+varonce88 = var89;
+}
+{
+template__Template__addn(self, var89); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce93) {
+var94 = varonce93;
+} else {
+var95 = "\11\11return 0";
+var96 = 10;
+var97 = string__NativeString__to_s_with_length(var95, var96);
+var94 = var97;
+varonce93 = var94;
+}
+{
+template__Template__addn(self, var94); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce98) {
+var99 = varonce98;
+} else {
+var100 = "\11fi";
+var101 = 3;
+var102 = string__NativeString__to_s_with_length(var100, var101);
+var99 = var102;
+varonce98 = var99;
+}
+{
+template__Template__addn(self, var99); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+} else {
+}
+if (varonce103) {
+var104 = varonce103;
+} else {
+var105 = "} &&";
+var106 = 4;
+var107 = string__NativeString__to_s_with_length(var105, var106);
+var104 = var107;
+varonce103 = var104;
+}
+{
+template__Template__addn(self, var104); /* Direct call template#Template#addn on <self:BashCompletion>*/
+}
+if (varonce108) {
+var109 = varonce108;
+} else {
+var110 = "complete -o default -F _";
+var111 = 24;
+var112 = string__NativeString__to_s_with_length(var110, var111);
+var109 = var112;
+varonce108 = var109;
+}
+if (varonce113) {
+var114 = varonce113;