+/* method phase#ToolContext#opt_disable_phase for (self: ToolContext): OptionArray */
+val* phase__ToolContext__opt_disable_phase(val* self) {
+val* var /* : OptionArray */;
+val* var1 /* : OptionArray */;
+var1 = self->attrs[COLOR_phase__ToolContext___opt_disable_phase].val; /* _opt_disable_phase on <self:ToolContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_disable_phase");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 30);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method phase#ToolContext#opt_disable_phase for (self: Object): OptionArray */
+val* VIRTUAL_phase__ToolContext__opt_disable_phase(val* self) {
+val* var /* : OptionArray */;
+val* var1 /* : OptionArray */;
+val* var3 /* : OptionArray */;
+{ /* Inline phase#ToolContext#opt_disable_phase (self) on <self:Object(ToolContext)> */
+var3 = self->attrs[COLOR_phase__ToolContext___opt_disable_phase].val; /* _opt_disable_phase on <self:Object(ToolContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_disable_phase");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 30);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method phase#ToolContext#init for (self: ToolContext) */
+void phase__ToolContext__init(val* self) {
+val* var /* : OptionContext */;
+val* var2 /* : OptionContext */;
+val* var3 /* : OptionArray */;
+val* var5 /* : OptionArray */;
+val* var6 /* : Array[Option] */;
+long var7 /* : Int */;
+val* var8 /* : NativeArray[Option] */;
+{
+((void (*)(val*))(self->class->vft[COLOR_phase__ToolContext__init]))(self) /* init on <self:ToolContext>*/;
+}
+{
+{ /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
+var2 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline phase#ToolContext#opt_disable_phase (self) on <self:ToolContext> */
+var5 = self->attrs[COLOR_phase__ToolContext___opt_disable_phase].val; /* _opt_disable_phase on <self:ToolContext> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_disable_phase");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 30);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+var6 = NEW_array__Array(&type_array__Arrayopts__Option);
+{ /* var6 = array_instance Array[Option] */
+var7 = 1;
+var8 = NEW_array__NativeArray(var7, &type_array__NativeArrayopts__Option);
+((struct instance_array__NativeArray*)var8)->values[0] = (val*) var3;
+{
+((void (*)(val*, val*, long))(var6->class->vft[COLOR_array__Array__with_native]))(var6, var8, var7) /* with_native on <var6:Array[Option]>*/;
+}
+}
+{
+opts__OptionContext__add_option(var, var6); /* Direct call opts#OptionContext#add_option on <var:OptionContext>*/
+}
+RET_LABEL:;
+}
+/* method phase#ToolContext#init for (self: Object) */
+void VIRTUAL_phase__ToolContext__init(val* self) {
+phase__ToolContext__init(self); /* Direct call phase#ToolContext#init on <self:Object(ToolContext)>*/
+RET_LABEL:;
+}
+/* method phase#ToolContext#process_options for (self: ToolContext, Sequence[String]) */
+void phase__ToolContext__process_options(val* self, val* p0) {
+val* var_args /* var args: Sequence[String] */;
+val* var /* : OptionArray */;
+val* var2 /* : OptionArray */;
+val* var3 /* : nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_ /* var : Array[String] */;
+val* var6 /* : ArrayIterator[nullable Object] */;
+val* var_7 /* var : ArrayIterator[String] */;
+short int var8 /* : Bool */;
+val* var9 /* : nullable Object */;
+val* var_v /* var v: String */;
+static val* varonce;
+val* var10 /* : String */;
+char* var11 /* : NativeString */;
+long var12 /* : Int */;
+val* var13 /* : FlatString */;
+short int var14 /* : Bool */;
+short int var15 /* : Bool */;
+val* var16 /* : Sequence[Phase] */;
+val* var_17 /* var : Sequence[Phase] */;
+val* var18 /* : Iterator[nullable Object] */;
+val* var_19 /* var : IndexedIterator[Phase] */;
+short int var20 /* : Bool */;
+val* var21 /* : nullable Object */;
+val* var_p /* var p: Phase */;
+val* var22 /* : POSetElement[Phase] */;
+val* var24 /* : POSetElement[Phase] */;
+val* var25 /* : Collection[Object] */;
+val* var_deps /* var deps: Collection[Phase] */;
+short int var26 /* : Bool */;
+static val* varonce27;
+val* var28 /* : String */;
+char* var29 /* : NativeString */;
+long var30 /* : Int */;
+val* var31 /* : FlatString */;
+static val* varonce32;
+val* var33 /* : String */;
+char* var34 /* : NativeString */;
+long var35 /* : Int */;
+val* var36 /* : FlatString */;
+val* var37 /* : String */;
+static val* varonce38;
+val* var39 /* : String */;
+char* var40 /* : NativeString */;
+long var41 /* : Int */;
+val* var42 /* : FlatString */;
+val* var43 /* : Array[Object] */;
+long var44 /* : Int */;
+val* var45 /* : NativeArray[Object] */;
+val* var46 /* : String */;
+long var48 /* : Int */;
+short int var50 /* : Bool */;
+short int var_found /* var found: Bool */;
+val* var51 /* : POSet[Phase] */;
+val* var53 /* : POSet[Phase] */;
+val* var_54 /* var : POSet[Phase] */;
+val* var55 /* : Iterator[Object] */;
+val* var_56 /* var : Iterator[Phase] */;
+short int var57 /* : Bool */;
+val* var58 /* : nullable Object */;
+val* var_p59 /* var p: Phase */;
+val* var60 /* : String */;
+short int var61 /* : Bool */;
+short int var62 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var64 /* : Bool */;
+short int var65 /* : Bool */;
+short int var66 /* : Bool */;
+short int var68 /* : Bool */;
+short int var69 /* : Bool */;
+short int var73 /* : Bool */;
+val* var74 /* : null */;
+static val* varonce75;
+val* var76 /* : String */;
+char* var77 /* : NativeString */;
+long var78 /* : Int */;
+val* var79 /* : FlatString */;
+static val* varonce80;
+val* var81 /* : String */;
+char* var82 /* : NativeString */;
+long var83 /* : Int */;
+val* var84 /* : FlatString */;
+val* var85 /* : Array[Object] */;
+long var86 /* : Int */;
+val* var87 /* : NativeArray[Object] */;
+val* var88 /* : String */;
+var_args = p0;
+{
+((void (*)(val*, val*))(self->class->vft[COLOR_phase__ToolContext__process_options]))(self, p0) /* process_options on <self:ToolContext>*/;
+}
+{
+{ /* Inline phase#ToolContext#opt_disable_phase (self) on <self:ToolContext> */
+var2 = self->attrs[COLOR_phase__ToolContext___opt_disable_phase].val; /* _opt_disable_phase on <self:ToolContext> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_disable_phase");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 30);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var) on <var:OptionArray> */
+var5 = var->attrs[COLOR_opts__Option___value].val; /* _value on <var:OptionArray> */
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+var_ = var3;
+{
+var6 = array__AbstractArrayRead__iterator(var_);
+}
+var_7 = var6;
+for(;;) {
+{
+var8 = array__ArrayIterator__is_ok(var_7);
+}
+if (var8){
+{
+var9 = array__ArrayIterator__item(var_7);
+}
+var_v = var9;
+if (varonce) {
+var10 = varonce;
+} else {
+var11 = "list";
+var12 = 4;
+var13 = string__NativeString__to_s_with_length(var11, var12);
+var10 = var13;
+varonce = var10;
+}
+{
+var15 = string__FlatString___61d_61d(var_v, var10);
+var14 = var15;
+}
+if (var14){
+{
+var16 = phase__ToolContext__phases_list(self);
+}
+var_17 = var16;
+{
+var18 = ((val* (*)(val*))(var_17->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_17) /* iterator on <var_17:Sequence[Phase]>*/;
+}
+var_19 = var18;
+for(;;) {
+{
+var20 = ((short int (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_19) /* is_ok on <var_19:IndexedIterator[Phase]>*/;
+}
+if (var20){
+{
+var21 = ((val* (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__item]))(var_19) /* item on <var_19:IndexedIterator[Phase]>*/;
+}
+var_p = var21;
+{
+{ /* Inline phase#Phase#in_hierarchy (var_p) on <var_p:Phase> */
+var24 = var_p->attrs[COLOR_phase__Phase___in_hierarchy].val; /* _in_hierarchy on <var_p:Phase> */
+if (unlikely(var24 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_hierarchy");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 165);
+show_backtrace(1);
+}
+var22 = var24;
+RET_LABEL23:(void)0;
+}
+}
+{
+var25 = poset__POSetElement__direct_greaters(var22);
+}
+var_deps = var25;
+{
+var26 = ((short int (*)(val*))(var_deps->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_deps) /* is_empty on <var_deps:Collection[Phase]>*/;
+}
+if (var26){
+{
+file__Object__print(self, var_p); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+} else {
+if (varonce27) {
+var28 = varonce27;
+} else {
+var29 = " (dep: ";
+var30 = 7;
+var31 = string__NativeString__to_s_with_length(var29, var30);
+var28 = var31;
+varonce27 = var28;
+}
+if (varonce32) {
+var33 = varonce32;
+} else {
+var34 = ", ";
+var35 = 2;
+var36 = string__NativeString__to_s_with_length(var34, var35);
+var33 = var36;
+varonce32 = var33;
+}
+{
+var37 = string__Collection__join(var_deps, var33);
+}
+if (varonce38) {
+var39 = varonce38;
+} else {
+var40 = ")";
+var41 = 1;
+var42 = string__NativeString__to_s_with_length(var40, var41);
+var39 = var42;
+varonce38 = var39;
+}
+var43 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var43 = array_instance Array[Object] */
+var44 = 4;
+var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_p;
+((struct instance_array__NativeArray*)var45)->values[1] = (val*) var28;
+((struct instance_array__NativeArray*)var45)->values[2] = (val*) var37;
+((struct instance_array__NativeArray*)var45)->values[3] = (val*) var39;
+{
+((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
+}
+}
+{
+var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
+}
+{
+file__Object__print(self, var46); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+}
+{
+((void (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__next]))(var_19) /* next on <var_19:IndexedIterator[Phase]>*/;
+}
+} else {
+goto BREAK_label;
+}
+}
+BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_19) on <var_19:IndexedIterator[Phase]> */
+RET_LABEL47:(void)0;
+}
+}
+var48 = 0;
+{
+{ /* Inline kernel#Object#exit (self,var48) on <self:ToolContext> */
+exit(var48);
+RET_LABEL49:(void)0;
+}
+}
+} else {
+}
+var50 = 0;
+var_found = var50;
+{
+{ /* Inline phase#ToolContext#phases (self) on <self:ToolContext> */
+var53 = self->attrs[COLOR_phase__ToolContext___phases].val; /* _phases on <self:ToolContext> */
+if (unlikely(var53 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phases");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 23);
+show_backtrace(1);
+}
+var51 = var53;
+RET_LABEL52:(void)0;
+}
+}
+var_54 = var51;
+{
+var55 = poset__POSet__iterator(var_54);
+}
+var_56 = var55;
+for(;;) {
+{
+var57 = ((short int (*)(val*))(var_56->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_56) /* is_ok on <var_56:Iterator[Phase]>*/;
+}
+if (var57){
+{
+var58 = ((val* (*)(val*))(var_56->class->vft[COLOR_abstract_collection__Iterator__item]))(var_56) /* item on <var_56:Iterator[Phase]>*/;
+}
+var_p59 = var58;
+{
+var60 = phase__Phase__to_s(var_p59);
+}
+{
+{ /* Inline kernel#Object#!= (var_v,var60) on <var_v:String> */
+var_other = var60;
+{
+var65 = ((short int (*)(val*, val*))(var_v->class->vft[COLOR_kernel__Object___61d_61d]))(var_v, var_other) /* == on <var_v:String>*/;
+var64 = var65;
+}
+var66 = !var64;
+var62 = var66;
+goto RET_LABEL63;
+RET_LABEL63:(void)0;
+}
+var61 = var62;
+}
+if (var61){
+goto BREAK_label67;
+} else {
+}
+var68 = 1;
+var_found = var68;
+var69 = 1;
+{
+{ /* Inline phase#Phase#disabled= (var_p59,var69) on <var_p59:Phase> */
+var_p59->attrs[COLOR_phase__Phase___disabled].s = var69; /* _disabled on <var_p59:Phase> */
+RET_LABEL70:(void)0;
+}
+}
+BREAK_label67: (void)0;
+{
+((void (*)(val*))(var_56->class->vft[COLOR_abstract_collection__Iterator__next]))(var_56) /* next on <var_56:Iterator[Phase]>*/;
+}
+} else {
+goto BREAK_label71;
+}
+}
+BREAK_label71: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_56) on <var_56:Iterator[Phase]> */
+RET_LABEL72:(void)0;
+}
+}
+var73 = !var_found;
+if (var73){
+var74 = NULL;
+if (varonce75) {
+var76 = varonce75;
+} else {
+var77 = "Error: no phase named `";
+var78 = 23;
+var79 = string__NativeString__to_s_with_length(var77, var78);
+var76 = var79;
+varonce75 = var76;
+}
+if (varonce80) {
+var81 = varonce80;
+} else {
+var82 = "`. Use `list` to list all phases.";
+var83 = 33;
+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 = 3;
+var87 = NEW_array__NativeArray(var86, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var87)->values[0] = (val*) var76;
+((struct instance_array__NativeArray*)var87)->values[1] = (val*) var_v;
+((struct instance_array__NativeArray*)var87)->values[2] = (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]>*/;
+}
+{
+toolcontext__ToolContext__fatal_error(self, var74, var88); /* Direct call toolcontext#ToolContext#fatal_error on <self:ToolContext>*/
+}
+} else {
+}
+{
+array__ArrayIterator__next(var_7); /* Direct call array#ArrayIterator#next on <var_7:ArrayIterator[String]>*/
+}
+} else {
+goto BREAK_label89;
+}
+}
+BREAK_label89: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_7) on <var_7:ArrayIterator[String]> */
+RET_LABEL90:(void)0;
+}
+}