update c_src
[nit.git] / c_src / phase.sep.1.c
index 8dc8af1..d214b8a 100644 (file)
@@ -6,7 +6,7 @@ val* var1 /* : POSet[Phase] */;
 var1 = self->attrs[COLOR_phase__ToolContext___phases].val; /* _phases on <self:ToolContext> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phases");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 23);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 23);
 show_backtrace(1);
 }
 var = var1;
@@ -22,7 +22,7 @@ val* var3 /* : POSet[Phase] */;
 var3 = self->attrs[COLOR_phase__ToolContext___phases].val; /* _phases on <self:Object(ToolContext)> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phases");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 23);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 23);
 show_backtrace(1);
 }
 var1 = var3;
@@ -39,7 +39,7 @@ 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", "src/phase.nit", 30);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 30);
 show_backtrace(1);
 }
 var = var1;
@@ -55,7 +55,7 @@ val* var3 /* : OptionArray */;
 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", "src/phase.nit", 30);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 30);
 show_backtrace(1);
 }
 var1 = var3;
@@ -82,7 +82,7 @@ val* var8 /* : NativeArray[Option] */;
 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", "src/toolcontext.nit", 166);
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
 show_backtrace(1);
 }
 var = var2;
@@ -94,7 +94,7 @@ RET_LABEL1:(void)0;
 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", "src/phase.nit", 30);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 30);
 show_backtrace(1);
 }
 var3 = var5;
@@ -127,81 +127,87 @@ val* var /* : OptionArray */;
 val* var2 /* : OptionArray */;
 val* var3 /* : nullable Object */;
 val* var5 /* : nullable Object */;
+val* var_ /* var : Array[String] */;
 val* var6 /* : ArrayIterator[nullable Object] */;
-short int var7 /* : Bool */;
-val* var8 /* : 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* var9 /* : String */;
-char* var10 /* : NativeString */;
-long var11 /* : Int */;
-val* var12 /* : FlatString */;
-short int var13 /* : Bool */;
+val* var10 /* : String */;
+char* var11 /* : NativeString */;
+long var12 /* : Int */;
+val* var13 /* : FlatString */;
 short int var14 /* : Bool */;
-val* var15 /* : Sequence[Phase] */;
-val* var16 /* : Iterator[nullable Object] */;
-short int var17 /* : Bool */;
-val* var18 /* : nullable Object */;
+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* var19 /* : POSetElement[Phase] */;
-val* var21 /* : POSetElement[Phase] */;
-val* var22 /* : Collection[Object] */;
+val* var22 /* : POSetElement[Phase] */;
+val* var24 /* : POSetElement[Phase] */;
+val* var25 /* : Collection[Object] */;
 val* var_deps /* var deps: Collection[Phase] */;
-short int var23 /* : Bool */;
-static val* varonce24;
-val* var25 /* : String */;
-char* var26 /* : NativeString */;
-long var27 /* : Int */;
-val* var28 /* : FlatString */;
-static val* varonce29;
-val* var30 /* : String */;
-char* var31 /* : NativeString */;
-long var32 /* : Int */;
-val* var33 /* : FlatString */;
-val* var34 /* : String */;
-static val* varonce35;
-val* var36 /* : String */;
-char* var37 /* : NativeString */;
-long var38 /* : Int */;
-val* var39 /* : FlatString */;
-val* var40 /* : Array[Object] */;
+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 /* : NativeArray[Object] */;
-val* var43 /* : String */;
+val* var42 /* : FlatString */;
+val* var43 /* : Array[Object] */;
 long var44 /* : Int */;
-short int var46 /* : Bool */;
+val* var45 /* : NativeArray[Object] */;
+val* var46 /* : String */;
+long var48 /* : Int */;
+short int var50 /* : Bool */;
 short int var_found /* var found: Bool */;
-val* var47 /* : POSet[Phase] */;
-val* var49 /* : POSet[Phase] */;
-val* var50 /* : Iterator[Object] */;
-short int var51 /* : Bool */;
-val* var52 /* : nullable Object */;
-val* var_p53 /* var p: Phase */;
-val* var54 /* : String */;
-short int var55 /* : Bool */;
-short int var56 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var58 /* : Bool */;
-short int var59 /* : Bool */;
-short int var60 /* : 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 */;
-short int var63 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var64 /* : Bool */;
 short int var65 /* : Bool */;
-val* var66 /* : null */;
-static val* varonce67;
-val* var68 /* : String */;
-char* var69 /* : NativeString */;
-long var70 /* : Int */;
-val* var71 /* : FlatString */;
-static val* varonce72;
-val* var73 /* : String */;
-char* var74 /* : NativeString */;
-long var75 /* : Int */;
-val* var76 /* : FlatString */;
-val* var77 /* : Array[Object] */;
+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 /* : NativeArray[Object] */;
-val* var80 /* : String */;
+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>*/;
@@ -211,7 +217,7 @@ var_args = p0;
 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", "src/phase.nit", 30);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 30);
 show_backtrace(1);
 }
 var = var2;
@@ -225,243 +231,271 @@ var3 = var5;
 RET_LABEL4:(void)0;
 }
 }
+var_ = var3;
 {
-var6 = array__AbstractArrayRead__iterator(var3);
+var6 = array__AbstractArrayRead__iterator(var_);
 }
+var_7 = var6;
 for(;;) {
 {
-var7 = array__ArrayIterator__is_ok(var6);
+var8 = array__ArrayIterator__is_ok(var_7);
 }
-if(!var7) break;
+if (var8){
 {
-var8 = array__ArrayIterator__item(var6);
+var9 = array__ArrayIterator__item(var_7);
 }
-var_v = var8;
+var_v = var9;
 if (varonce) {
-var9 = varonce;
+var10 = varonce;
 } else {
-var10 = "list";
-var11 = 4;
-var12 = string__NativeString__to_s_with_length(var10, var11);
-var9 = var12;
-varonce = var9;
+var11 = "list";
+var12 = 4;
+var13 = string__NativeString__to_s_with_length(var11, var12);
+var10 = var13;
+varonce = var10;
 }
 {
-var14 = string__FlatString___61d_61d(var_v, var9);
-var13 = var14;
+var15 = string__FlatString___61d_61d(var_v, var10);
+var14 = var15;
 }
-if (var13){
+if (var14){
 {
-var15 = phase__ToolContext__phases_list(self);
+var16 = phase__ToolContext__phases_list(self);
 }
+var_17 = var16;
 {
-var16 = ((val* (*)(val*))(var15->class->vft[COLOR_abstract_collection__Collection__iterator]))(var15) /* iterator on <var15:Sequence[Phase]>*/;
+var18 = ((val* (*)(val*))(var_17->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_17) /* iterator on <var_17:Sequence[Phase]>*/;
 }
+var_19 = var18;
 for(;;) {
 {
-var17 = ((short int (*)(val*))(var16->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var16) /* is_ok on <var16:Iterator[nullable Object]>*/;
+var20 = ((short int (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_19) /* is_ok on <var_19:IndexedIterator[Phase]>*/;
 }
-if(!var17) break;
+if (var20){
 {
-var18 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_collection__Iterator__item]))(var16) /* item on <var16:Iterator[nullable Object]>*/;
+var21 = ((val* (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__item]))(var_19) /* item on <var_19:IndexedIterator[Phase]>*/;
 }
-var_p = var18;
+var_p = var21;
 {
 { /* Inline phase#Phase#in_hierarchy (var_p) on <var_p:Phase> */
-var21 = var_p->attrs[COLOR_phase__Phase___in_hierarchy].val; /* _in_hierarchy on <var_p:Phase> */
-if (unlikely(var21 == NULL)) {
+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", "src/phase.nit", 148);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 165);
 show_backtrace(1);
 }
-var19 = var21;
-RET_LABEL20:(void)0;
+var22 = var24;
+RET_LABEL23:(void)0;
 }
 }
 {
-var22 = poset__POSetElement__direct_greaters(var19);
+var25 = poset__POSetElement__direct_greaters(var22);
 }
-var_deps = var22;
+var_deps = var25;
 {
-var23 = ((short int (*)(val*))(var_deps->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_deps) /* is_empty on <var_deps:Collection[Phase]>*/;
+var26 = ((short int (*)(val*))(var_deps->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_deps) /* is_empty on <var_deps:Collection[Phase]>*/;
 }
-if (var23){
+if (var26){
 {
 file__Object__print(self, var_p); /* Direct call file#Object#print on <self:ToolContext>*/
 }
 } else {
-if (varonce24) {
-var25 = varonce24;
+if (varonce27) {
+var28 = varonce27;
 } else {
-var26 = " (dep: ";
-var27 = 7;
-var28 = string__NativeString__to_s_with_length(var26, var27);
-var25 = var28;
-varonce24 = var25;
-}
-if (varonce29) {
-var30 = varonce29;
+var29 = " (dep: ";
+var30 = 7;
+var31 = string__NativeString__to_s_with_length(var29, var30);
+var28 = var31;
+varonce27 = var28;
+}
+if (varonce32) {
+var33 = varonce32;
 } else {
-var31 = ", ";
-var32 = 2;
-var33 = string__NativeString__to_s_with_length(var31, var32);
-var30 = var33;
-varonce29 = var30;
+var34 = ", ";
+var35 = 2;
+var36 = string__NativeString__to_s_with_length(var34, var35);
+var33 = var36;
+varonce32 = var33;
 }
 {
-var34 = string__Collection__join(var_deps, var30);
+var37 = string__Collection__join(var_deps, var33);
 }
-if (varonce35) {
-var36 = varonce35;
+if (varonce38) {
+var39 = varonce38;
 } else {
-var37 = ")";
-var38 = 1;
-var39 = string__NativeString__to_s_with_length(var37, var38);
-var36 = var39;
-varonce35 = var36;
+var40 = ")";
+var41 = 1;
+var42 = string__NativeString__to_s_with_length(var40, var41);
+var39 = var42;
+varonce38 = var39;
 }
-var40 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var40 = array_instance Array[Object] */
-var41 = 4;
-var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var42)->values[0] = (val*) var_p;
-((struct instance_array__NativeArray*)var42)->values[1] = (val*) var25;
-((struct instance_array__NativeArray*)var42)->values[2] = (val*) var34;
-((struct instance_array__NativeArray*)var42)->values[3] = (val*) var36;
+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))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
+((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
 }
 }
 {
-var43 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
+var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
 }
 {
-file__Object__print(self, var43); /* Direct call file#Object#print on <self:ToolContext>*/
+file__Object__print(self, var46); /* Direct call file#Object#print on <self:ToolContext>*/
 }
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var16->class->vft[COLOR_abstract_collection__Iterator__next]))(var16) /* next on <var16:Iterator[nullable Object]>*/;
+((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;
-var44 = 0;
 {
-{ /* Inline kernel#Object#exit (self,var44) on <self:ToolContext> */
-exit(var44);
-RET_LABEL45:(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 {
 }
-var46 = 0;
-var_found = var46;
+var50 = 0;
+var_found = var50;
 {
 { /* Inline phase#ToolContext#phases (self) on <self:ToolContext> */
-var49 = self->attrs[COLOR_phase__ToolContext___phases].val; /* _phases on <self:ToolContext> */
-if (unlikely(var49 == NULL)) {
+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", "src/phase.nit", 23);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 23);
 show_backtrace(1);
 }
-var47 = var49;
-RET_LABEL48:(void)0;
+var51 = var53;
+RET_LABEL52:(void)0;
 }
 }
+var_54 = var51;
 {
-var50 = poset__POSet__iterator(var47);
+var55 = poset__POSet__iterator(var_54);
 }
+var_56 = var55;
 for(;;) {
 {
-var51 = ((short int (*)(val*))(var50->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var50) /* is_ok on <var50:Iterator[Object]>*/;
+var57 = ((short int (*)(val*))(var_56->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_56) /* is_ok on <var_56:Iterator[Phase]>*/;
 }
-if(!var51) break;
+if (var57){
 {
-var52 = ((val* (*)(val*))(var50->class->vft[COLOR_abstract_collection__Iterator__item]))(var50) /* item on <var50:Iterator[Object]>*/;
+var58 = ((val* (*)(val*))(var_56->class->vft[COLOR_abstract_collection__Iterator__item]))(var_56) /* item on <var_56:Iterator[Phase]>*/;
 }
-var_p53 = var52;
+var_p59 = var58;
 {
-var54 = phase__Phase__to_s(var_p53);
+var60 = phase__Phase__to_s(var_p59);
 }
 {
-{ /* Inline kernel#Object#!= (var_v,var54) on <var_v:String> */
-var_other = var54;
+{ /* Inline kernel#Object#!= (var_v,var60) on <var_v:String> */
+var_other = var60;
 {
-var59 = ((short int (*)(val*, val*))(var_v->class->vft[COLOR_kernel__Object___61d_61d]))(var_v, var_other) /* == on <var_v:String>*/;
-var58 = var59;
+var65 = ((short int (*)(val*, val*))(var_v->class->vft[COLOR_kernel__Object___61d_61d]))(var_v, var_other) /* == on <var_v:String>*/;
+var64 = var65;
 }
-var60 = !var58;
-var56 = var60;
-goto RET_LABEL57;
-RET_LABEL57:(void)0;
+var66 = !var64;
+var62 = var66;
+goto RET_LABEL63;
+RET_LABEL63:(void)0;
 }
-var55 = var56;
+var61 = var62;
 }
-if (var55){
-goto CONTINUE_label61;
+if (var61){
+goto BREAK_label67;
 } else {
 }
-var62 = 1;
-var_found = var62;
-var63 = 1;
+var68 = 1;
+var_found = var68;
+var69 = 1;
 {
-{ /* Inline phase#Phase#disabled= (var_p53,var63) on <var_p53:Phase> */
-var_p53->attrs[COLOR_phase__Phase___disabled].s = var63; /* _disabled on <var_p53:Phase> */
-RET_LABEL64:(void)0;
+{ /* 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;
 }
 }
-CONTINUE_label61: (void)0;
+BREAK_label67: (void)0;
 {
-((void (*)(val*))(var50->class->vft[COLOR_abstract_collection__Iterator__next]))(var50) /* next on <var50:Iterator[Object]>*/;
+((void (*)(val*))(var_56->class->vft[COLOR_abstract_collection__Iterator__next]))(var_56) /* next on <var_56:Iterator[Phase]>*/;
 }
+} else {
+goto BREAK_label71;
 }
-BREAK_label61: (void)0;
-var65 = !var_found;
-if (var65){
-var66 = NULL;
-if (varonce67) {
-var68 = varonce67;
+}
+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 {
-var69 = "Error: no phase named `";
-var70 = 23;
-var71 = string__NativeString__to_s_with_length(var69, var70);
-var68 = var71;
-varonce67 = var68;
+var77 = "Error: no phase named `";
+var78 = 23;
+var79 = string__NativeString__to_s_with_length(var77, var78);
+var76 = var79;
+varonce75 = var76;
 }
-if (varonce72) {
-var73 = varonce72;
+if (varonce80) {
+var81 = varonce80;
 } else {
-var74 = "`. Use `list` to list all phases.";
-var75 = 33;
-var76 = string__NativeString__to_s_with_length(var74, var75);
-var73 = var76;
-varonce72 = var73;
+var82 = "`. Use `list` to list all phases.";
+var83 = 33;
+var84 = string__NativeString__to_s_with_length(var82, var83);
+var81 = var84;
+varonce80 = var81;
 }
-var77 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var77 = array_instance Array[Object] */
-var78 = 3;
-var79 = NEW_array__NativeArray(var78, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var79)->values[0] = (val*) var68;
-((struct instance_array__NativeArray*)var79)->values[1] = (val*) var_v;
-((struct instance_array__NativeArray*)var79)->values[2] = (val*) var73;
+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))(var77->class->vft[COLOR_array__Array__with_native]))(var77, var79, var78) /* with_native on <var77:Array[Object]>*/;
+((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]>*/;
 }
 {
-var80 = ((val* (*)(val*))(var77->class->vft[COLOR_string__Object__to_s]))(var77) /* to_s on <var77:Array[Object]>*/;
+toolcontext__ToolContext__fatal_error(self, var74, var88); /* Direct call toolcontext#ToolContext#fatal_error on <self:ToolContext>*/
+}
+} else {
 }
 {
-toolcontext__ToolContext__fatal_error(self, var66, var80); /* Direct call toolcontext#ToolContext#fatal_error on <self:ToolContext>*/
+array__ArrayIterator__next(var_7); /* Direct call array#ArrayIterator#next on <var_7:ArrayIterator[String]>*/
 }
 } else {
+goto BREAK_label89;
+}
 }
-CONTINUE_label81: (void)0;
+BREAK_label89: (void)0;
 {
-array__ArrayIterator__next(var6); /* Direct call array#ArrayIterator#next on <var6:ArrayIterator[nullable Object]>*/
+{ /* Inline abstract_collection#Iterator#finish (var_7) on <var_7:ArrayIterator[String]> */
+RET_LABEL90:(void)0;
 }
 }
-BREAK_label81: (void)0;
 RET_LABEL:;
 }
 /* method phase#ToolContext#process_options for (self: Object, Sequence[String]) */
@@ -483,7 +517,7 @@ val* var7 /* : POSet[Phase] */;
 var3 = self->attrs[COLOR_phase__ToolContext___phases].val; /* _phases on <self:ToolContext> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phases");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 23);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 23);
 show_backtrace(1);
 }
 var1 = var3;
@@ -499,7 +533,7 @@ var_phases = var4;
 var7 = self->attrs[COLOR_phase__ToolContext___phases].val; /* _phases on <self:ToolContext> */
 if (unlikely(var7 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phases");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 23);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 23);
 show_backtrace(1);
 }
 var5 = var7;
@@ -523,11 +557,44 @@ var = var1;
 RET_LABEL:;
 return var;
 }
+/* method phase#ToolContext#phased_modules for (self: ToolContext): HashSet[AModule] */
+val* phase__ToolContext__phased_modules(val* self) {
+val* var /* : HashSet[AModule] */;
+val* var1 /* : HashSet[AModule] */;
+var1 = self->attrs[COLOR_phase__ToolContext___phased_modules].val; /* _phased_modules on <self:ToolContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phased_modules");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 74);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method phase#ToolContext#phased_modules for (self: Object): HashSet[AModule] */
+val* VIRTUAL_phase__ToolContext__phased_modules(val* self) {
+val* var /* : HashSet[AModule] */;
+val* var1 /* : HashSet[AModule] */;
+val* var3 /* : HashSet[AModule] */;
+{ /* Inline phase#ToolContext#phased_modules (self) on <self:Object(ToolContext)> */
+var3 = self->attrs[COLOR_phase__ToolContext___phased_modules].val; /* _phased_modules on <self:Object(ToolContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phased_modules");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 74);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
 /* method phase#ToolContext#run_phases for (self: ToolContext, Collection[AModule]) */
 void phase__ToolContext__run_phases(val* self, val* p0) {
 val* var_nmodules /* var nmodules: Collection[AModule] */;
 long var /* : Int */;
-long var2 /* : Int */;
+long var2 /* : Int for extern */;
 long var_time0 /* var time0: Int */;
 static val* varonce;
 val* var3 /* : String */;
@@ -537,153 +604,165 @@ val* var6 /* : FlatString */;
 long var7 /* : Int */;
 val* var8 /* : Sequence[Phase] */;
 val* var_phases /* var phases: Sequence[Phase] */;
+val* var_ /* var : Sequence[Phase] */;
 val* var9 /* : Iterator[nullable Object] */;
-short int var10 /* : Bool */;
-val* var11 /* : nullable Object */;
+val* var_10 /* var : IndexedIterator[Phase] */;
+short int var11 /* : Bool */;
+val* var12 /* : nullable Object */;
 val* var_phase /* var phase: Phase */;
-static val* varonce12;
-val* var13 /* : String */;
-char* var14 /* : NativeString */;
-long var15 /* : Int */;
-val* var16 /* : FlatString */;
-val* var17 /* : Array[Object] */;
-long var18 /* : Int */;
-val* var19 /* : NativeArray[Object] */;
-val* var20 /* : String */;
-long var21 /* : Int */;
-val* var22 /* : Iterator[nullable Object] */;
-short int var23 /* : Bool */;
-val* var24 /* : nullable Object */;
+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 */;
+long var22 /* : Int */;
+val* var_24 /* var : Collection[AModule] */;
+val* var25 /* : Iterator[nullable Object] */;
+val* var_26 /* var : Iterator[AModule] */;
+short int var27 /* : Bool */;
+val* var28 /* : nullable Object */;
 val* var_nmodule /* var nmodule: AModule */;
-static val* varonce25;
-val* var26 /* : String */;
-char* var27 /* : NativeString */;
-long var28 /* : Int */;
-val* var29 /* : FlatString */;
-val* var30 /* : Location */;
-val* var31 /* : nullable SourceFile */;
-val* var33 /* : nullable SourceFile */;
-val* var34 /* : String */;
-val* var36 /* : String */;
-val* var37 /* : Array[Object] */;
-long var38 /* : Int */;
-val* var39 /* : NativeArray[Object] */;
-val* var40 /* : String */;
-long var41 /* : Int */;
-val* var42 /* : Iterator[nullable Object] */;
-short int var43 /* : Bool */;
-val* var44 /* : nullable Object */;
-val* var_phase45 /* var phase: Phase */;
-short int var46 /* : Bool */;
-short int var48 /* : Bool */;
-static val* varonce50;
-val* var51 /* : String */;
-char* var52 /* : NativeString */;
-long var53 /* : Int */;
-val* var54 /* : FlatString */;
-val* var55 /* : Array[Object] */;
-long var56 /* : Int */;
-val* var57 /* : NativeArray[Object] */;
-val* var58 /* : String */;
-long var59 /* : Int */;
-val* var60 /* : ToolContext */;
-val* var62 /* : ToolContext */;
+val* var29 /* : HashSet[AModule] */;
+val* var31 /* : HashSet[AModule] */;
+short int var32 /* : Bool */;
+val* var34 /* : HashSet[AModule] */;
+val* var36 /* : HashSet[AModule] */;
+static val* varonce37;
+val* var38 /* : String */;
+char* var39 /* : NativeString */;
+long var40 /* : Int */;
+val* var41 /* : FlatString */;
+val* var42 /* : Location */;
+val* var44 /* : Location */;
+val* var45 /* : nullable SourceFile */;
+val* var47 /* : nullable SourceFile */;
+val* var48 /* : String */;
+val* var50 /* : String */;
+val* var51 /* : Array[Object] */;
+long var52 /* : Int */;
+val* var53 /* : NativeArray[Object] */;
+val* var54 /* : String */;
+long var55 /* : Int */;
+val* var56 /* : AnnotationPhaseVisitor */;
+val* var_vannot /* var vannot: AnnotationPhaseVisitor */;
+val* var_57 /* var : Sequence[Phase] */;
+val* var58 /* : Iterator[nullable Object] */;
+val* var_59 /* var : IndexedIterator[Phase] */;
+short int var60 /* : Bool */;
+val* var61 /* : nullable Object */;
+val* var_phase62 /* var phase: Phase */;
 short int var63 /* : Bool */;
-short int var64 /* : Bool */;
+short int var65 /* : Bool */;
+static val* varonce67;
+val* var68 /* : String */;
+char* var69 /* : NativeString */;
+long var70 /* : Int */;
+val* var71 /* : FlatString */;
+val* var72 /* : Array[Object] */;
+long var73 /* : Int */;
+val* var74 /* : NativeArray[Object] */;
+val* var75 /* : String */;
+long var76 /* : Int */;
+val* var77 /* : ToolContext */;
+val* var79 /* : ToolContext */;
+short int var80 /* : Bool */;
+short int var81 /* : Bool */;
 val* var_other /* var other: nullable Object */;
-short int var66 /* : Bool */;
-short int var68 /* : Bool */;
-long var69 /* : Int */;
-long var71 /* : Int */;
+short int var83 /* : Bool */;
+short int var85 /* : Bool */;
+long var86 /* : Int */;
+long var88 /* : Int */;
 long var_errcount /* var errcount: Int */;
-long var72 /* : Int */;
-long var74 /* : Int */;
-short int var75 /* : Bool */;
-short int var76 /* : Bool */;
-short int var78 /* : Bool */;
-short int var79 /* : Bool */;
-long var80 /* : Int */;
-long var82 /* : Int */;
-val* var83 /* : ANodes[AClassdef] */;
-val* var85 /* : ANodes[AClassdef] */;
-val* var86 /* : Iterator[ANode] */;
-short int var87 /* : Bool */;
-val* var88 /* : nullable Object */;
+long var89 /* : Int */;
+long var91 /* : Int */;
+short int var92 /* : Bool */;
+short int var93 /* : Bool */;
+short int var95 /* : Bool */;
+short int var96 /* : Bool */;
+long var98 /* : Int */;
+long var100 /* : Int */;
+val* var101 /* : ANodes[AClassdef] */;
+val* var103 /* : ANodes[AClassdef] */;
+val* var_104 /* var : ANodes[AClassdef] */;
+val* var105 /* : Iterator[ANode] */;
+val* var_106 /* var : Iterator[AClassdef] */;
+short int var107 /* : Bool */;
+val* var108 /* : nullable Object */;
 val* var_nclassdef /* var nclassdef: AClassdef */;
-static val* varonce89;
-val* var90 /* : String */;
-char* var91 /* : NativeString */;
-long var92 /* : Int */;
-val* var93 /* : FlatString */;
-static val* varonce94;
-val* var95 /* : String */;
-char* var96 /* : NativeString */;
-long var97 /* : Int */;
-val* var98 /* : FlatString */;
-val* var99 /* : Location */;
-val* var100 /* : Array[Object] */;
-long var101 /* : Int */;
-val* var102 /* : NativeArray[Object] */;
-val* var103 /* : String */;
-long var104 /* : Int */;
-val* var105 /* : ToolContext */;
-val* var107 /* : ToolContext */;
-short int var108 /* : Bool */;
-short int var109 /* : Bool */;
-short int var111 /* : Bool */;
+val* var109 /* : ToolContext */;
+val* var111 /* : ToolContext */;
+short int var112 /* : Bool */;
 short int var113 /* : Bool */;
-val* var_nclassdef115 /* var nclassdef: AClassdef */;
-val* var116 /* : ANodes[APropdef] */;
-val* var118 /* : ANodes[APropdef] */;
-val* var119 /* : Iterator[ANode] */;
-short int var120 /* : Bool */;
-val* var121 /* : nullable Object */;
-val* var_npropdef /* var npropdef: APropdef */;
-val* var122 /* : ToolContext */;
-val* var124 /* : ToolContext */;
-short int var125 /* : Bool */;
+short int var115 /* : Bool */;
+short int var117 /* : Bool */;
+val* var_nclassdef119 /* var nclassdef: AClassdef */;
+val* var120 /* : ANodes[APropdef] */;
+val* var122 /* : ANodes[APropdef] */;
+val* var_123 /* var : ANodes[APropdef] */;
+val* var124 /* : Iterator[ANode] */;
+val* var_125 /* var : Iterator[APropdef] */;
 short int var126 /* : Bool */;
-short int var128 /* : Bool */;
-short int var130 /* : Bool */;
-long var133 /* : Int */;
-long var135 /* : Int */;
+val* var127 /* : nullable Object */;
+val* var_npropdef /* var npropdef: APropdef */;
+val* var128 /* : ToolContext */;
+val* var130 /* : ToolContext */;
+short int var131 /* : Bool */;
+short int var132 /* : Bool */;
+short int var134 /* : Bool */;
 short int var136 /* : Bool */;
-short int var137 /* : Bool */;
-short int var139 /* : Bool */;
-short int var140 /* : Bool */;
-val* var141 /* : AnnotationPhaseVisitor */;
-val* var_v /* var v: AnnotationPhaseVisitor */;
-long var142 /* : Int */;
-long var144 /* : Int */;
+long var141 /* : Int */;
+long var143 /* : Int */;
+short int var144 /* : Bool */;
 short int var145 /* : Bool */;
-short int var146 /* : Bool */;
+short int var147 /* : Bool */;
 short int var148 /* : Bool */;
-short int var149 /* : Bool */;
-long var151 /* : Int */;
-long var153 /* : Int */;
+val* var149 /* : Array[AAnnotation] */;
+val* var151 /* : Array[AAnnotation] */;
+val* var_152 /* var : Array[AAnnotation] */;
+val* var153 /* : ArrayIterator[nullable Object] */;
+val* var_154 /* var : ArrayIterator[AAnnotation] */;
+short int var155 /* : Bool */;
+val* var156 /* : nullable Object */;
+val* var_na /* var na: AAnnotation */;
+val* var157 /* : nullable ANode */;
+val* var159 /* : nullable ANode */;
+val* var160 /* : nullable ANode */;
+val* var162 /* : nullable ANode */;
+long var165 /* : Int */;
+long var167 /* : Int */;
+short int var168 /* : Bool */;
+short int var169 /* : Bool */;
+short int var171 /* : Bool */;
+short int var172 /* : Bool */;
+long var176 /* : Int */;
+long var178 /* : Int for extern */;
 long var_time1 /* var time1: Int */;
-static val* varonce154;
-val* var155 /* : String */;
-char* var156 /* : NativeString */;
-long var157 /* : Int */;
-val* var158 /* : FlatString */;
-long var159 /* : Int */;
-short int var161 /* : Bool */;
+static val* varonce179;
+val* var180 /* : String */;
+char* var181 /* : NativeString */;
+long var182 /* : Int */;
+val* var183 /* : FlatString */;
+long var184 /* : Int */;
+short int var186 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-long var162 /* : Int */;
-static val* varonce163;
-val* var164 /* : String */;
-char* var165 /* : NativeString */;
-long var166 /* : Int */;
-val* var167 /* : FlatString */;
-val* var168 /* : Array[Object] */;
-long var169 /* : Int */;
-val* var170 /* : NativeArray[Object] */;
-val* var171 /* : Object */;
-val* var172 /* : String */;
-long var173 /* : Int */;
+long var187 /* : Int */;
+static val* varonce188;
+val* var189 /* : String */;
+char* var190 /* : NativeString */;
+long var191 /* : Int */;
+val* var192 /* : FlatString */;
+val* var193 /* : Array[Object] */;
+long var194 /* : Int */;
+val* var195 /* : NativeArray[Object] */;
+val* var196 /* : Object */;
+val* var197 /* : String */;
+long var198 /* : Int */;
 var_nmodules = p0;
 {
 { /* Inline time#Object#get_time (self) on <self:ToolContext> */
@@ -711,555 +790,678 @@ toolcontext__ToolContext__info(self, var3, var7); /* Direct call toolcontext#Too
 var8 = phase__ToolContext__phases_list(self);
 }
 var_phases = var8;
+var_ = var_phases;
 {
-var9 = ((val* (*)(val*))(var_phases->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_phases) /* iterator on <var_phases:Sequence[Phase]>*/;
+var9 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Sequence[Phase]>*/;
 }
+var_10 = var9;
 for(;;) {
 {
-var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
+var11 = ((short int (*)(val*))(var_10->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_10) /* is_ok on <var_10:IndexedIterator[Phase]>*/;
 }
-if(!var10) break;
+if (var11){
 {
-var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
+var12 = ((val* (*)(val*))(var_10->class->vft[COLOR_abstract_collection__Iterator__item]))(var_10) /* item on <var_10:IndexedIterator[Phase]>*/;
 }
-var_phase = var11;
-if (varonce12) {
-var13 = varonce12;
+var_phase = var12;
+if (varonce13) {
+var14 = varonce13;
 } else {
-var14 = " registered phases: ";
-var15 = 20;
-var16 = string__NativeString__to_s_with_length(var14, var15);
-var13 = var16;
-varonce12 = var13;
+var15 = " registered phases: ";
+var16 = 20;
+var17 = string__NativeString__to_s_with_length(var15, var16);
+var14 = var17;
+varonce13 = var14;
 }
-var17 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var17 = array_instance Array[Object] */
-var18 = 2;
-var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var19)->values[0] = (val*) var13;
-((struct instance_array__NativeArray*)var19)->values[1] = (val*) var_phase;
+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*) var14;
+((struct instance_array__NativeArray*)var20)->values[1] = (val*) var_phase;
 {
-((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
+((void (*)(val*, val*, long))(var18->class->vft[COLOR_array__Array__with_native]))(var18, var20, var19) /* with_native on <var18:Array[Object]>*/;
 }
 }
 {
-var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
+var21 = ((val* (*)(val*))(var18->class->vft[COLOR_string__Object__to_s]))(var18) /* to_s on <var18:Array[Object]>*/;
 }
-var21 = 2;
+var22 = 2;
 {
-toolcontext__ToolContext__info(self, var20, var21); /* Direct call toolcontext#ToolContext#info on <self:ToolContext>*/
+toolcontext__ToolContext__info(self, var21, var22); /* Direct call toolcontext#ToolContext#info on <self:ToolContext>*/
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_10->class->vft[COLOR_abstract_collection__Iterator__next]))(var_10) /* next on <var_10:IndexedIterator[Phase]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
 {
-var22 = ((val* (*)(val*))(var_nmodules->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_nmodules) /* iterator on <var_nmodules:Collection[AModule]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_10) on <var_10:IndexedIterator[Phase]> */
+RET_LABEL23:(void)0;
 }
+}
+var_24 = var_nmodules;
+{
+var25 = ((val* (*)(val*))(var_24->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_24) /* iterator on <var_24:Collection[AModule]>*/;
+}
+var_26 = var25;
 for(;;) {
 {
-var23 = ((short int (*)(val*))(var22->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var22) /* is_ok on <var22:Iterator[nullable Object]>*/;
+var27 = ((short int (*)(val*))(var_26->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_26) /* is_ok on <var_26:Iterator[AModule]>*/;
 }
-if(!var23) break;
+if (var27){
 {
-var24 = ((val* (*)(val*))(var22->class->vft[COLOR_abstract_collection__Iterator__item]))(var22) /* item on <var22:Iterator[nullable Object]>*/;
+var28 = ((val* (*)(val*))(var_26->class->vft[COLOR_abstract_collection__Iterator__item]))(var_26) /* item on <var_26:Iterator[AModule]>*/;
 }
-var_nmodule = var24;
-if (varonce25) {
-var26 = varonce25;
+var_nmodule = var28;
+{
+{ /* Inline phase#ToolContext#phased_modules (self) on <self:ToolContext> */
+var31 = self->attrs[COLOR_phase__ToolContext___phased_modules].val; /* _phased_modules on <self:ToolContext> */
+if (unlikely(var31 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phased_modules");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 74);
+show_backtrace(1);
+}
+var29 = var31;
+RET_LABEL30:(void)0;
+}
+}
+{
+var32 = hash_collection__HashSet__has(var29, var_nmodule);
+}
+if (var32){
+goto BREAK_label33;
 } else {
-var27 = "Semantic analysis module ";
-var28 = 25;
-var29 = string__NativeString__to_s_with_length(var27, var28);
-var26 = var29;
-varonce25 = var26;
 }
 {
-var30 = parser_nodes__ANode__location(var_nmodule);
+{ /* Inline phase#ToolContext#phased_modules (self) on <self:ToolContext> */
+var36 = self->attrs[COLOR_phase__ToolContext___phased_modules].val; /* _phased_modules on <self:ToolContext> */
+if (unlikely(var36 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phased_modules");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 74);
+show_backtrace(1);
+}
+var34 = var36;
+RET_LABEL35:(void)0;
+}
+}
+{
+hash_collection__HashSet__add(var34, var_nmodule); /* Direct call hash_collection#HashSet#add on <var34:HashSet[AModule]>*/
+}
+if (varonce37) {
+var38 = varonce37;
+} else {
+var39 = "Semantic analysis module ";
+var40 = 25;
+var41 = string__NativeString__to_s_with_length(var39, var40);
+var38 = var41;
+varonce37 = var38;
+}
+{
+{ /* Inline parser_nodes#ANode#location (var_nmodule) on <var_nmodule:AModule> */
+var44 = var_nmodule->attrs[COLOR_parser_nodes__ANode___location].val; /* _location on <var_nmodule:AModule> */
+if (unlikely(var44 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 23);
+show_backtrace(1);
+}
+var42 = var44;
+RET_LABEL43:(void)0;
+}
 }
 {
-{ /* Inline location#Location#file (var30) on <var30:Location> */
-var33 = var30->attrs[COLOR_location__Location___file].val; /* _file on <var30:Location> */
-var31 = var33;
-RET_LABEL32:(void)0;
+{ /* Inline location#Location#file (var42) on <var42:Location> */
+var47 = var42->attrs[COLOR_location__Location___file].val; /* _file on <var42:Location> */
+var45 = var47;
+RET_LABEL46:(void)0;
 }
 }
-if (var31 == NULL) {
+if (var45 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 88);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 94);
 show_backtrace(1);
 } else {
-{ /* Inline location#SourceFile#filename (var31) on <var31:nullable SourceFile> */
-if (unlikely(var31 == NULL)) {
+{ /* Inline location#SourceFile#filename (var45) on <var45:nullable SourceFile> */
+if (unlikely(var45 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", "src/location.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "location.nit", 22);
 show_backtrace(1);
 }
-var36 = var31->attrs[COLOR_location__SourceFile___filename].val; /* _filename on <var31:nullable SourceFile> */
-if (unlikely(var36 == NULL)) {
+var50 = var45->attrs[COLOR_location__SourceFile___filename].val; /* _filename on <var45:nullable SourceFile> */
+if (unlikely(var50 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _filename");
-PRINT_ERROR(" (%s:%d)\n", "src/location.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "location.nit", 22);
 show_backtrace(1);
 }
-var34 = var36;
-RET_LABEL35:(void)0;
+var48 = var50;
+RET_LABEL49:(void)0;
+}
+}
+var51 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var51 = array_instance Array[Object] */
+var52 = 2;
+var53 = NEW_array__NativeArray(var52, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var53)->values[0] = (val*) var38;
+((struct instance_array__NativeArray*)var53)->values[1] = (val*) var48;
+{
+((void (*)(val*, val*, long))(var51->class->vft[COLOR_array__Array__with_native]))(var51, var53, var52) /* with_native on <var51:Array[Object]>*/;
 }
 }
-var37 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var37 = array_instance Array[Object] */
-var38 = 2;
-var39 = NEW_array__NativeArray(var38, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var39)->values[0] = (val*) var26;
-((struct instance_array__NativeArray*)var39)->values[1] = (val*) var34;
 {
-((void (*)(val*, val*, long))(var37->class->vft[COLOR_array__Array__with_native]))(var37, var39, var38) /* with_native on <var37:Array[Object]>*/;
+var54 = ((val* (*)(val*))(var51->class->vft[COLOR_string__Object__to_s]))(var51) /* to_s on <var51:Array[Object]>*/;
 }
+var55 = 2;
+{
+toolcontext__ToolContext__info(self, var54, var55); /* Direct call toolcontext#ToolContext#info on <self:ToolContext>*/
 }
+var56 = NEW_phase__AnnotationPhaseVisitor(&type_phase__AnnotationPhaseVisitor);
 {
-var40 = ((val* (*)(val*))(var37->class->vft[COLOR_string__Object__to_s]))(var37) /* to_s on <var37:Array[Object]>*/;
+((void (*)(val*))(var56->class->vft[COLOR_kernel__Object__init]))(var56) /* init on <var56:AnnotationPhaseVisitor>*/;
 }
-var41 = 2;
+var_vannot = var56;
 {
-toolcontext__ToolContext__info(self, var40, var41); /* Direct call toolcontext#ToolContext#info on <self:ToolContext>*/
+parser_nodes__Visitor__enter_visit(var_vannot, var_nmodule); /* Direct call parser_nodes#Visitor#enter_visit on <var_vannot:AnnotationPhaseVisitor>*/
 }
+var_57 = var_phases;
 {
-var42 = ((val* (*)(val*))(var_phases->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_phases) /* iterator on <var_phases:Sequence[Phase]>*/;
+var58 = ((val* (*)(val*))(var_57->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_57) /* iterator on <var_57:Sequence[Phase]>*/;
 }
+var_59 = var58;
 for(;;) {
 {
-var43 = ((short int (*)(val*))(var42->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var42) /* is_ok on <var42:Iterator[nullable Object]>*/;
+var60 = ((short int (*)(val*))(var_59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_59) /* is_ok on <var_59:IndexedIterator[Phase]>*/;
 }
-if(!var43) break;
+if (var60){
 {
-var44 = ((val* (*)(val*))(var42->class->vft[COLOR_abstract_collection__Iterator__item]))(var42) /* item on <var42:Iterator[nullable Object]>*/;
+var61 = ((val* (*)(val*))(var_59->class->vft[COLOR_abstract_collection__Iterator__item]))(var_59) /* item on <var_59:IndexedIterator[Phase]>*/;
 }
-var_phase45 = var44;
+var_phase62 = var61;
 {
-{ /* Inline phase#Phase#disabled (var_phase45) on <var_phase45:Phase> */
-var48 = var_phase45->attrs[COLOR_phase__Phase___disabled].s; /* _disabled on <var_phase45:Phase> */
-var46 = var48;
-RET_LABEL47:(void)0;
+{ /* Inline phase#Phase#disabled (var_phase62) on <var_phase62:Phase> */
+var65 = var_phase62->attrs[COLOR_phase__Phase___disabled].s; /* _disabled on <var_phase62:Phase> */
+var63 = var65;
+RET_LABEL64:(void)0;
 }
 }
-if (var46){
-goto CONTINUE_label49;
+if (var63){
+goto BREAK_label66;
 } else {
 }
-if (varonce50) {
-var51 = varonce50;
+if (varonce67) {
+var68 = varonce67;
 } else {
-var52 = " phase: ";
-var53 = 8;
-var54 = string__NativeString__to_s_with_length(var52, var53);
-var51 = var54;
-varonce50 = var51;
+var69 = " phase: ";
+var70 = 8;
+var71 = string__NativeString__to_s_with_length(var69, var70);
+var68 = var71;
+varonce67 = var68;
 }
-var55 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var55 = array_instance Array[Object] */
-var56 = 2;
-var57 = NEW_array__NativeArray(var56, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var57)->values[0] = (val*) var51;
-((struct instance_array__NativeArray*)var57)->values[1] = (val*) var_phase45;
+var72 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var72 = array_instance Array[Object] */
+var73 = 2;
+var74 = NEW_array__NativeArray(var73, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var74)->values[0] = (val*) var68;
+((struct instance_array__NativeArray*)var74)->values[1] = (val*) var_phase62;
 {
-((void (*)(val*, val*, long))(var55->class->vft[COLOR_array__Array__with_native]))(var55, var57, var56) /* with_native on <var55:Array[Object]>*/;
+((void (*)(val*, val*, long))(var72->class->vft[COLOR_array__Array__with_native]))(var72, var74, var73) /* with_native on <var72:Array[Object]>*/;
 }
 }
 {
-var58 = ((val* (*)(val*))(var55->class->vft[COLOR_string__Object__to_s]))(var55) /* to_s on <var55:Array[Object]>*/;
+var75 = ((val* (*)(val*))(var72->class->vft[COLOR_string__Object__to_s]))(var72) /* to_s on <var72:Array[Object]>*/;
 }
-var59 = 3;
+var76 = 3;
 {
-toolcontext__ToolContext__info(self, var58, var59); /* Direct call toolcontext#ToolContext#info on <self:ToolContext>*/
+toolcontext__ToolContext__info(self, var75, var76); /* Direct call toolcontext#ToolContext#info on <self:ToolContext>*/
 }
 {
-{ /* Inline phase#Phase#toolcontext (var_phase45) on <var_phase45:Phase> */
-var62 = var_phase45->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <var_phase45:Phase> */
-if (unlikely(var62 == NULL)) {
+{ /* Inline phase#Phase#toolcontext (var_phase62) on <var_phase62:Phase> */
+var79 = var_phase62->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <var_phase62:Phase> */
+if (unlikely(var79 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 145);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
 show_backtrace(1);
 }
-var60 = var62;
-RET_LABEL61:(void)0;
+var77 = var79;
+RET_LABEL78:(void)0;
 }
 }
 {
-{ /* Inline kernel#Object#== (var60,self) on <var60:ToolContext> */
+{ /* Inline kernel#Object#== (var77,self) on <var77:ToolContext> */
 var_other = self;
 {
-{ /* Inline kernel#Object#is_same_instance (var60,var_other) on <var60:ToolContext> */
-var68 = var60 == var_other;
-var66 = var68;
-goto RET_LABEL67;
-RET_LABEL67:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var77,var_other) on <var77:ToolContext> */
+var85 = var77 == var_other;
+var83 = var85;
+goto RET_LABEL84;
+RET_LABEL84:(void)0;
 }
 }
-var64 = var66;
-goto RET_LABEL65;
-RET_LABEL65:(void)0;
+var81 = var83;
+goto RET_LABEL82;
+RET_LABEL82:(void)0;
 }
-var63 = var64;
+var80 = var81;
 }
-if (unlikely(!var63)) {
+if (unlikely(!var80)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 92);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 102);
 show_backtrace(1);
 }
 {
 { /* Inline toolcontext#ToolContext#error_count (self) on <self:ToolContext> */
-var71 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
-var69 = var71;
-RET_LABEL70:(void)0;
+var88 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
+var86 = var88;
+RET_LABEL87:(void)0;
 }
 }
-var_errcount = var69;
+var_errcount = var86;
 {
-((void (*)(val*, val*))(var_phase45->class->vft[COLOR_phase__Phase__process_nmodule]))(var_phase45, var_nmodule) /* process_nmodule on <var_phase45:Phase>*/;
+((void (*)(val*, val*))(var_phase62->class->vft[COLOR_phase__Phase__process_nmodule]))(var_phase62, var_nmodule) /* process_nmodule on <var_phase62:Phase>*/;
 }
 {
 { /* Inline toolcontext#ToolContext#error_count (self) on <self:ToolContext> */
-var74 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
-var72 = var74;
-RET_LABEL73:(void)0;
+var91 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
+var89 = var91;
+RET_LABEL90:(void)0;
 }
 }
 {
-{ /* Inline kernel#Int#!= (var_errcount,var72) on <var_errcount:Int> */
-var78 = var_errcount == var72;
-var79 = !var78;
-var76 = var79;
-goto RET_LABEL77;
-RET_LABEL77:(void)0;
+{ /* Inline kernel#Int#!= (var_errcount,var89) on <var_errcount:Int> */
+var95 = var_errcount == var89;
+var96 = !var95;
+var93 = var96;
+goto RET_LABEL94;
+RET_LABEL94:(void)0;
 }
-var75 = var76;
+var92 = var93;
 }
-if (var75){
+if (var92){
 {
 toolcontext__ToolContext__check_errors(self); /* Direct call toolcontext#ToolContext#check_errors on <self:ToolContext>*/
 }
-goto BREAK_label49;
+goto BREAK_label97;
 } else {
 }
 {
 { /* Inline toolcontext#ToolContext#error_count (self) on <self:ToolContext> */
-var82 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
-var80 = var82;
-RET_LABEL81:(void)0;
+var100 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
+var98 = var100;
+RET_LABEL99:(void)0;
 }
 }
-var_errcount = var80;
+var_errcount = var98;
 {
 { /* Inline parser_nodes#AModule#n_classdefs (var_nmodule) on <var_nmodule:AModule> */
-var85 = var_nmodule->attrs[COLOR_parser_nodes__AModule___n_classdefs].val; /* _n_classdefs on <var_nmodule:AModule> */
-if (unlikely(var85 == NULL)) {
+var103 = var_nmodule->attrs[COLOR_parser_nodes__AModule___n_classdefs].val; /* _n_classdefs on <var_nmodule:AModule> */
+if (unlikely(var103 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_classdefs");
-PRINT_ERROR(" (%s:%d)\n", "src/parser/parser_nodes.nit", 699);
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 859);
 show_backtrace(1);
 }
-var83 = var85;
-RET_LABEL84:(void)0;
+var101 = var103;
+RET_LABEL102:(void)0;
 }
 }
+var_104 = var101;
 {
-var86 = parser_nodes__ANodes__iterator(var83);
+var105 = parser_nodes__ANodes__iterator(var_104);
 }
+var_106 = var105;
 for(;;) {
 {
-var87 = ((short int (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var86) /* is_ok on <var86:Iterator[ANode]>*/;
-}
-if(!var87) break;
-{
-var88 = ((val* (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__item]))(var86) /* item on <var86:Iterator[ANode]>*/;
-}
-var_nclassdef = var88;
-if (varonce89) {
-var90 = varonce89;
-} else {
-var91 = " phase: ";
-var92 = 8;
-var93 = string__NativeString__to_s_with_length(var91, var92);
-var90 = var93;
-varonce89 = var90;
-}
-if (varonce94) {
-var95 = varonce94;
-} else {
-var96 = " for ";
-var97 = 5;
-var98 = string__NativeString__to_s_with_length(var96, var97);
-var95 = var98;
-varonce94 = var95;
-}
-{
-var99 = parser_nodes__ANode__location(var_nclassdef);
-}
-var100 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var100 = array_instance Array[Object] */
-var101 = 4;
-var102 = NEW_array__NativeArray(var101, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var102)->values[0] = (val*) var90;
-((struct instance_array__NativeArray*)var102)->values[1] = (val*) var_phase45;
-((struct instance_array__NativeArray*)var102)->values[2] = (val*) var95;
-((struct instance_array__NativeArray*)var102)->values[3] = (val*) var99;
-{
-((void (*)(val*, val*, long))(var100->class->vft[COLOR_array__Array__with_native]))(var100, var102, var101) /* with_native on <var100:Array[Object]>*/;
+var107 = ((short int (*)(val*))(var_106->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_106) /* is_ok on <var_106:Iterator[AClassdef]>*/;
 }
-}
-{
-var103 = ((val* (*)(val*))(var100->class->vft[COLOR_string__Object__to_s]))(var100) /* to_s on <var100:Array[Object]>*/;
-}
-var104 = 3;
+if (var107){
 {
-toolcontext__ToolContext__info(self, var103, var104); /* Direct call toolcontext#ToolContext#info on <self:ToolContext>*/
+var108 = ((val* (*)(val*))(var_106->class->vft[COLOR_abstract_collection__Iterator__item]))(var_106) /* item on <var_106:Iterator[AClassdef]>*/;
 }
+var_nclassdef = var108;
 {
-{ /* Inline phase#Phase#toolcontext (var_phase45) on <var_phase45:Phase> */
-var107 = var_phase45->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <var_phase45:Phase> */
-if (unlikely(var107 == NULL)) {
+{ /* Inline phase#Phase#toolcontext (var_phase62) on <var_phase62:Phase> */
+var111 = var_phase62->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <var_phase62:Phase> */
+if (unlikely(var111 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 145);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
 show_backtrace(1);
 }
-var105 = var107;
-RET_LABEL106:(void)0;
+var109 = var111;
+RET_LABEL110:(void)0;
 }
 }
 {
-{ /* Inline kernel#Object#== (var105,self) on <var105:ToolContext> */
+{ /* Inline kernel#Object#== (var109,self) on <var109:ToolContext> */
 var_other = self;
 {
-{ /* Inline kernel#Object#is_same_instance (var105,var_other) on <var105:ToolContext> */
-var113 = var105 == var_other;
-var111 = var113;
-goto RET_LABEL112;
-RET_LABEL112:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var109,var_other) on <var109:ToolContext> */
+var117 = var109 == var_other;
+var115 = var117;
+goto RET_LABEL116;
+RET_LABEL116:(void)0;
 }
 }
-var109 = var111;
-goto RET_LABEL110;
-RET_LABEL110:(void)0;
+var113 = var115;
+goto RET_LABEL114;
+RET_LABEL114:(void)0;
 }
-var108 = var109;
+var112 = var113;
 }
-if (unlikely(!var108)) {
+if (unlikely(!var112)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 102);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 111);
 show_backtrace(1);
 }
 {
-{ /* Inline phase#Phase#process_nclassdef (var_phase45,var_nclassdef) on <var_phase45:Phase> */
-var_nclassdef115 = var_nclassdef;
-RET_LABEL114:(void)0;
+{ /* Inline phase#Phase#process_nclassdef (var_phase62,var_nclassdef) on <var_phase62:Phase> */
+var_nclassdef119 = var_nclassdef;
+RET_LABEL118:(void)0;
 }
 }
 {
 { /* Inline parser_nodes#AClassdef#n_propdefs (var_nclassdef) on <var_nclassdef:AClassdef> */
-var118 = var_nclassdef->attrs[COLOR_parser_nodes__AClassdef___n_propdefs].val; /* _n_propdefs on <var_nclassdef:AClassdef> */
-if (unlikely(var118 == NULL)) {
+var122 = var_nclassdef->attrs[COLOR_parser_nodes__AClassdef___n_propdefs].val; /* _n_propdefs on <var_nclassdef:AClassdef> */
+if (unlikely(var122 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_propdefs");
-PRINT_ERROR(" (%s:%d)\n", "src/parser/parser_nodes.nit", 802);
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 929);
 show_backtrace(1);
 }
-var116 = var118;
-RET_LABEL117:(void)0;
+var120 = var122;
+RET_LABEL121:(void)0;
 }
 }
+var_123 = var120;
 {
-var119 = parser_nodes__ANodes__iterator(var116);
+var124 = parser_nodes__ANodes__iterator(var_123);
 }
+var_125 = var124;
 for(;;) {
 {
-var120 = ((short int (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var119) /* is_ok on <var119:Iterator[ANode]>*/;
+var126 = ((short int (*)(val*))(var_125->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_125) /* is_ok on <var_125:Iterator[APropdef]>*/;
 }
-if(!var120) break;
+if (var126){
 {
-var121 = ((val* (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__item]))(var119) /* item on <var119:Iterator[ANode]>*/;
+var127 = ((val* (*)(val*))(var_125->class->vft[COLOR_abstract_collection__Iterator__item]))(var_125) /* item on <var_125:Iterator[APropdef]>*/;
 }
-var_npropdef = var121;
+var_npropdef = var127;
 {
-{ /* Inline phase#Phase#toolcontext (var_phase45) on <var_phase45:Phase> */
-var124 = var_phase45->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <var_phase45:Phase> */
-if (unlikely(var124 == NULL)) {
+{ /* Inline phase#Phase#toolcontext (var_phase62) on <var_phase62:Phase> */
+var130 = var_phase62->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <var_phase62:Phase> */
+if (unlikely(var130 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 145);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
 show_backtrace(1);
 }
-var122 = var124;
-RET_LABEL123:(void)0;
+var128 = var130;
+RET_LABEL129:(void)0;
 }
 }
 {
-{ /* Inline kernel#Object#== (var122,self) on <var122:ToolContext> */
+{ /* Inline kernel#Object#== (var128,self) on <var128:ToolContext> */
 var_other = self;
 {
-{ /* Inline kernel#Object#is_same_instance (var122,var_other) on <var122:ToolContext> */
-var130 = var122 == var_other;
-var128 = var130;
-goto RET_LABEL129;
-RET_LABEL129:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var128,var_other) on <var128:ToolContext> */
+var136 = var128 == var_other;
+var134 = var136;
+goto RET_LABEL135;
+RET_LABEL135:(void)0;
 }
 }
-var126 = var128;
-goto RET_LABEL127;
-RET_LABEL127:(void)0;
+var132 = var134;
+goto RET_LABEL133;
+RET_LABEL133:(void)0;
 }
-var125 = var126;
+var131 = var132;
 }
-if (unlikely(!var125)) {
+if (unlikely(!var131)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 105);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 114);
 show_backtrace(1);
 }
 {
-((void (*)(val*, val*))(var_phase45->class->vft[COLOR_phase__Phase__process_npropdef]))(var_phase45, var_npropdef) /* process_npropdef on <var_phase45:Phase>*/;
+phase__ToolContext__phase_process_npropdef(self, var_phase62, var_npropdef); /* Direct call phase#ToolContext#phase_process_npropdef on <self:ToolContext>*/
+}
+{
+((void (*)(val*))(var_125->class->vft[COLOR_abstract_collection__Iterator__next]))(var_125) /* next on <var_125:Iterator[APropdef]>*/;
+}
+} else {
+goto BREAK_label137;
+}
+}
+BREAK_label137: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_125) on <var_125:Iterator[APropdef]> */
+RET_LABEL138:(void)0;
+}
 }
-CONTINUE_label131: (void)0;
 {
-((void (*)(val*))(var119->class->vft[COLOR_abstract_collection__Iterator__next]))(var119) /* next on <var119:Iterator[ANode]>*/;
+((void (*)(val*))(var_106->class->vft[COLOR_abstract_collection__Iterator__next]))(var_106) /* next on <var_106:Iterator[AClassdef]>*/;
+}
+} else {
+goto BREAK_label139;
 }
 }
-BREAK_label131: (void)0;
-CONTINUE_label132: (void)0;
+BREAK_label139: (void)0;
 {
-((void (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__next]))(var86) /* next on <var86:Iterator[ANode]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_106) on <var_106:Iterator[AClassdef]> */
+RET_LABEL140:(void)0;
 }
 }
-BREAK_label132: (void)0;
 {
 { /* Inline toolcontext#ToolContext#error_count (self) on <self:ToolContext> */
-var135 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
-var133 = var135;
-RET_LABEL134:(void)0;
+var143 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
+var141 = var143;
+RET_LABEL142:(void)0;
 }
 }
 {
-{ /* Inline kernel#Int#!= (var_errcount,var133) on <var_errcount:Int> */
-var139 = var_errcount == var133;
-var140 = !var139;
-var137 = var140;
-goto RET_LABEL138;
-RET_LABEL138:(void)0;
+{ /* Inline kernel#Int#!= (var_errcount,var141) on <var_errcount:Int> */
+var147 = var_errcount == var141;
+var148 = !var147;
+var145 = var148;
+goto RET_LABEL146;
+RET_LABEL146:(void)0;
 }
-var136 = var137;
+var144 = var145;
 }
-if (var136){
+if (var144){
 {
 toolcontext__ToolContext__check_errors(self); /* Direct call toolcontext#ToolContext#check_errors on <self:ToolContext>*/
 }
-goto BREAK_label49;
+goto BREAK_label97;
 } else {
 }
-var141 = NEW_phase__AnnotationPhaseVisitor(&type_phase__AnnotationPhaseVisitor);
 {
-phase__AnnotationPhaseVisitor__init(var141, var_phase45); /* Direct call phase#AnnotationPhaseVisitor#init on <var141:AnnotationPhaseVisitor>*/
+{ /* Inline phase#AnnotationPhaseVisitor#annotations (var_vannot) on <var_vannot:AnnotationPhaseVisitor> */
+var151 = var_vannot->attrs[COLOR_phase__AnnotationPhaseVisitor___annotations].val; /* _annotations on <var_vannot:AnnotationPhaseVisitor> */
+if (unlikely(var151 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _annotations");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 149);
+show_backtrace(1);
+}
+var149 = var151;
+RET_LABEL150:(void)0;
+}
 }
-var_v = var141;
+var_152 = var149;
 {
-parser_nodes__Visitor__enter_visit(var_v, var_nmodule); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:AnnotationPhaseVisitor>*/
+var153 = array__AbstractArrayRead__iterator(var_152);
+}
+var_154 = var153;
+for(;;) {
+{
+var155 = array__ArrayIterator__is_ok(var_154);
+}
+if (var155){
+{
+var156 = array__ArrayIterator__item(var_154);
+}
+var_na = var156;
+{
+{ /* Inline parser_nodes#ANode#parent (var_na) on <var_na:AAnnotation> */
+var159 = var_na->attrs[COLOR_parser_nodes__ANode___parent].val; /* _parent on <var_na:AAnnotation> */
+var157 = var159;
+RET_LABEL158:(void)0;
+}
+}
+if (var157 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 123);
+show_backtrace(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent (var157) on <var157:nullable ANode> */
+if (unlikely(var157 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 36);
+show_backtrace(1);
+}
+var162 = var157->attrs[COLOR_parser_nodes__ANode___parent].val; /* _parent on <var157:nullable ANode> */
+var160 = var162;
+RET_LABEL161:(void)0;
+}
+}
+if (unlikely(var160 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 123);
+show_backtrace(1);
+}
+{
+((void (*)(val*, val*, val*))(var_phase62->class->vft[COLOR_phase__Phase__process_annotated_node]))(var_phase62, var160, var_na) /* process_annotated_node on <var_phase62:Phase>*/;
+}
+{
+array__ArrayIterator__next(var_154); /* Direct call array#ArrayIterator#next on <var_154:ArrayIterator[AAnnotation]>*/
+}
+} else {
+goto BREAK_label163;
+}
+}
+BREAK_label163: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_154) on <var_154:ArrayIterator[AAnnotation]> */
+RET_LABEL164:(void)0;
+}
 }
 {
 { /* Inline toolcontext#ToolContext#error_count (self) on <self:ToolContext> */
-var144 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
-var142 = var144;
-RET_LABEL143:(void)0;
+var167 = self->attrs[COLOR_toolcontext__ToolContext___error_count].l; /* _error_count on <self:ToolContext> */
+var165 = var167;
+RET_LABEL166:(void)0;
 }
 }
 {
-{ /* Inline kernel#Int#!= (var_errcount,var142) on <var_errcount:Int> */
-var148 = var_errcount == var142;
-var149 = !var148;
-var146 = var149;
-goto RET_LABEL147;
-RET_LABEL147:(void)0;
+{ /* Inline kernel#Int#!= (var_errcount,var165) on <var_errcount:Int> */
+var171 = var_errcount == var165;
+var172 = !var171;
+var169 = var172;
+goto RET_LABEL170;
+RET_LABEL170:(void)0;
 }
-var145 = var146;
+var168 = var169;
 }
-if (var145){
+if (var168){
 {
 toolcontext__ToolContext__check_errors(self); /* Direct call toolcontext#ToolContext#check_errors on <self:ToolContext>*/
 }
-goto BREAK_label49;
+goto BREAK_label97;
 } else {
 }
-CONTINUE_label49: (void)0;
+BREAK_label66: (void)0;
 {
-((void (*)(val*))(var42->class->vft[COLOR_abstract_collection__Iterator__next]))(var42) /* next on <var42:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_59->class->vft[COLOR_abstract_collection__Iterator__next]))(var_59) /* next on <var_59:IndexedIterator[Phase]>*/;
+}
+} else {
+goto BREAK_label97;
+}
+}
+BREAK_label97: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_59) on <var_59:IndexedIterator[Phase]> */
+RET_LABEL173:(void)0;
 }
 }
-BREAK_label49: (void)0;
 {
 toolcontext__ToolContext__check_errors(self); /* Direct call toolcontext#ToolContext#check_errors on <self:ToolContext>*/
 }
-CONTINUE_label150: (void)0;
+BREAK_label33: (void)0;
+{
+((void (*)(val*))(var_26->class->vft[COLOR_abstract_collection__Iterator__next]))(var_26) /* next on <var_26:Iterator[AModule]>*/;
+}
+} else {
+goto BREAK_label174;
+}
+}
+BREAK_label174: (void)0;
 {
-((void (*)(val*))(var22->class->vft[COLOR_abstract_collection__Iterator__next]))(var22) /* next on <var22:Iterator[nullable Object]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_26) on <var_26:Iterator[AModule]> */
+RET_LABEL175:(void)0;
 }
 }
-BREAK_label150: (void)0;
 {
 { /* Inline time#Object#get_time (self) on <self:ToolContext> */
-var153 = kernel_Any_Any_get_time_0(self);
-var151 = var153;
-goto RET_LABEL152;
-RET_LABEL152:(void)0;
+var178 = kernel_Any_Any_get_time_0(self);
+var176 = var178;
+goto RET_LABEL177;
+RET_LABEL177:(void)0;
 }
 }
-var_time1 = var151;
-if (varonce154) {
-var155 = varonce154;
+var_time1 = var176;
+if (varonce179) {
+var180 = varonce179;
 } else {
-var156 = "*** END SEMANTIC ANALYSIS: ";
-var157 = 27;
-var158 = string__NativeString__to_s_with_length(var156, var157);
-var155 = var158;
-varonce154 = var155;
+var181 = "*** END SEMANTIC ANALYSIS: ";
+var182 = 27;
+var183 = string__NativeString__to_s_with_length(var181, var182);
+var180 = var183;
+varonce179 = var180;
 }
 {
 { /* Inline kernel#Int#- (var_time1,var_time0) on <var_time1:Int> */
 /* Covariant cast for argument 0 (i) <var_time0:Int> isa OTHER */
 /* <var_time0:Int> isa OTHER */
-var161 = 1; /* easy <var_time0:Int> isa OTHER*/
-if (unlikely(!var161)) {
+var186 = 1; /* easy <var_time0:Int> isa OTHER*/
+if (unlikely(!var186)) {
 var_class_name = type_kernel__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
 show_backtrace(1);
 }
-var162 = var_time1 - var_time0;
-var159 = var162;
-goto RET_LABEL160;
-RET_LABEL160:(void)0;
+var187 = var_time1 - var_time0;
+var184 = var187;
+goto RET_LABEL185;
+RET_LABEL185:(void)0;
 }
 }
-if (varonce163) {
-var164 = varonce163;
+if (varonce188) {
+var189 = varonce188;
 } else {
-var165 = " ***";
-var166 = 4;
-var167 = string__NativeString__to_s_with_length(var165, var166);
-var164 = var167;
-varonce163 = var164;
+var190 = " ***";
+var191 = 4;
+var192 = string__NativeString__to_s_with_length(var190, var191);
+var189 = var192;
+varonce188 = var189;
 }
-var168 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var168 = array_instance Array[Object] */
-var169 = 3;
-var170 = NEW_array__NativeArray(var169, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var170)->values[0] = (val*) var155;
-var171 = BOX_kernel__Int(var159); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var170)->values[1] = (val*) var171;
-((struct instance_array__NativeArray*)var170)->values[2] = (val*) var164;
+var193 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var193 = array_instance Array[Object] */
+var194 = 3;
+var195 = NEW_array__NativeArray(var194, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var195)->values[0] = (val*) var180;
+var196 = BOX_kernel__Int(var184); /* autobox from Int to Object */
+((struct instance_array__NativeArray*)var195)->values[1] = (val*) var196;
+((struct instance_array__NativeArray*)var195)->values[2] = (val*) var189;
 {
-((void (*)(val*, val*, long))(var168->class->vft[COLOR_array__Array__with_native]))(var168, var170, var169) /* with_native on <var168:Array[Object]>*/;
+((void (*)(val*, val*, long))(var193->class->vft[COLOR_array__Array__with_native]))(var193, var195, var194) /* with_native on <var193:Array[Object]>*/;
 }
 }
 {
-var172 = ((val* (*)(val*))(var168->class->vft[COLOR_string__Object__to_s]))(var168) /* to_s on <var168:Array[Object]>*/;
+var197 = ((val* (*)(val*))(var193->class->vft[COLOR_string__Object__to_s]))(var193) /* to_s on <var193:Array[Object]>*/;
 }
-var173 = 2;
+var198 = 2;
 {
-toolcontext__ToolContext__info(self, var172, var173); /* Direct call toolcontext#ToolContext#info on <self:ToolContext>*/
+toolcontext__ToolContext__info(self, var197, var198); /* Direct call toolcontext#ToolContext#info on <self:ToolContext>*/
+}
+{
+toolcontext__ToolContext__errors_info(self); /* Direct call toolcontext#ToolContext#errors_info on <self:ToolContext>*/
 }
 RET_LABEL:;
 }
@@ -1268,30 +1470,46 @@ void VIRTUAL_phase__ToolContext__run_phases(val* self, val* p0) {
 phase__ToolContext__run_phases(self, p0); /* Direct call phase#ToolContext#run_phases on <self:Object(ToolContext)>*/
 RET_LABEL:;
 }
-/* method phase#AnnotationPhaseVisitor#phase for (self: AnnotationPhaseVisitor): Phase */
-val* phase__AnnotationPhaseVisitor__phase(val* self) {
-val* var /* : Phase */;
-val* var1 /* : Phase */;
-var1 = self->attrs[COLOR_phase__AnnotationPhaseVisitor___phase].val; /* _phase on <self:AnnotationPhaseVisitor> */
+/* method phase#ToolContext#phase_process_npropdef for (self: ToolContext, Phase, APropdef) */
+void phase__ToolContext__phase_process_npropdef(val* self, val* p0, val* p1) {
+val* var_phase /* var phase: Phase */;
+val* var_npropdef /* var npropdef: APropdef */;
+var_phase = p0;
+var_npropdef = p1;
+{
+((void (*)(val*, val*))(var_phase->class->vft[COLOR_phase__Phase__process_npropdef]))(var_phase, var_npropdef) /* process_npropdef on <var_phase:Phase>*/;
+}
+RET_LABEL:;
+}
+/* method phase#ToolContext#phase_process_npropdef for (self: Object, Phase, APropdef) */
+void VIRTUAL_phase__ToolContext__phase_process_npropdef(val* self, val* p0, val* p1) {
+phase__ToolContext__phase_process_npropdef(self, p0, p1); /* Direct call phase#ToolContext#phase_process_npropdef on <self:Object(ToolContext)>*/
+RET_LABEL:;
+}
+/* method phase#AnnotationPhaseVisitor#annotations for (self: AnnotationPhaseVisitor): Array[AAnnotation] */
+val* phase__AnnotationPhaseVisitor__annotations(val* self) {
+val* var /* : Array[AAnnotation] */;
+val* var1 /* : Array[AAnnotation] */;
+var1 = self->attrs[COLOR_phase__AnnotationPhaseVisitor___annotations].val; /* _annotations on <self:AnnotationPhaseVisitor> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phase");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 131);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _annotations");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 149);
 show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
 return var;
 }
-/* method phase#AnnotationPhaseVisitor#phase for (self: Object): Phase */
-val* VIRTUAL_phase__AnnotationPhaseVisitor__phase(val* self) {
-val* var /* : Phase */;
-val* var1 /* : Phase */;
-val* var3 /* : Phase */;
-{ /* Inline phase#AnnotationPhaseVisitor#phase (self) on <self:Object(AnnotationPhaseVisitor)> */
-var3 = self->attrs[COLOR_phase__AnnotationPhaseVisitor___phase].val; /* _phase on <self:Object(AnnotationPhaseVisitor)> */
+/* method phase#AnnotationPhaseVisitor#annotations for (self: Object): Array[AAnnotation] */
+val* VIRTUAL_phase__AnnotationPhaseVisitor__annotations(val* self) {
+val* var /* : Array[AAnnotation] */;
+val* var1 /* : Array[AAnnotation] */;
+val* var3 /* : Array[AAnnotation] */;
+{ /* Inline phase#AnnotationPhaseVisitor#annotations (self) on <self:Object(AnnotationPhaseVisitor)> */
+var3 = self->attrs[COLOR_phase__AnnotationPhaseVisitor___annotations].val; /* _annotations on <self:Object(AnnotationPhaseVisitor)> */
 if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phase");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 131);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _annotations");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 149);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1301,53 +1519,14 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method phase#AnnotationPhaseVisitor#phase= for (self: AnnotationPhaseVisitor, Phase) */
-void phase__AnnotationPhaseVisitor__phase_61d(val* self, val* p0) {
-self->attrs[COLOR_phase__AnnotationPhaseVisitor___phase].val = p0; /* _phase on <self:AnnotationPhaseVisitor> */
-RET_LABEL:;
-}
-/* method phase#AnnotationPhaseVisitor#phase= for (self: Object, Phase) */
-void VIRTUAL_phase__AnnotationPhaseVisitor__phase_61d(val* self, val* p0) {
-{ /* Inline phase#AnnotationPhaseVisitor#phase= (self,p0) on <self:Object(AnnotationPhaseVisitor)> */
-self->attrs[COLOR_phase__AnnotationPhaseVisitor___phase].val = p0; /* _phase on <self:Object(AnnotationPhaseVisitor)> */
-RET_LABEL1:(void)0;
-}
-RET_LABEL:;
-}
-/* method phase#AnnotationPhaseVisitor#init for (self: AnnotationPhaseVisitor, Phase) */
-void phase__AnnotationPhaseVisitor__init(val* self, val* p0) {
-val* var_phase /* var phase: Phase */;
-{
-{ /* Inline parser_nodes#Visitor#init (self) on <self:AnnotationPhaseVisitor> */
-RET_LABEL1:(void)0;
-}
-}
-var_phase = p0;
-{
-{ /* Inline phase#AnnotationPhaseVisitor#phase= (self,var_phase) on <self:AnnotationPhaseVisitor> */
-self->attrs[COLOR_phase__AnnotationPhaseVisitor___phase].val = var_phase; /* _phase on <self:AnnotationPhaseVisitor> */
-RET_LABEL2:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method phase#AnnotationPhaseVisitor#init for (self: Object, Phase) */
-void VIRTUAL_phase__AnnotationPhaseVisitor__init(val* self, val* p0) {
-phase__AnnotationPhaseVisitor__init(self, p0); /* Direct call phase#AnnotationPhaseVisitor#init on <self:Object(AnnotationPhaseVisitor)>*/
-RET_LABEL:;
-}
 /* method phase#AnnotationPhaseVisitor#visit for (self: AnnotationPhaseVisitor, ANode) */
 void phase__AnnotationPhaseVisitor__visit(val* self, val* p0) {
 val* var_n /* var n: ANode */;
 short int var /* : Bool */;
 int cltype;
 int idtype;
-val* var1 /* : Phase */;
-val* var3 /* : Phase */;
-val* var4 /* : nullable ANode */;
-val* var6 /* : nullable ANode */;
-val* var7 /* : nullable ANode */;
-val* var9 /* : nullable ANode */;
+val* var1 /* : Array[AAnnotation] */;
+val* var3 /* : Array[AAnnotation] */;
 var_n = p0;
 {
 ((void (*)(val*, val*))(var_n->class->vft[COLOR_parser_nodes__ANode__visit_all]))(var_n, self) /* visit_all on <var_n:ANode>*/;
@@ -1362,11 +1541,11 @@ var = var_n->type->type_table[cltype] == idtype;
 }
 if (var){
 {
-{ /* Inline phase#AnnotationPhaseVisitor#phase (self) on <self:AnnotationPhaseVisitor> */
-var3 = self->attrs[COLOR_phase__AnnotationPhaseVisitor___phase].val; /* _phase on <self:AnnotationPhaseVisitor> */
+{ /* Inline phase#AnnotationPhaseVisitor#annotations (self) on <self:AnnotationPhaseVisitor> */
+var3 = self->attrs[COLOR_phase__AnnotationPhaseVisitor___annotations].val; /* _annotations on <self:AnnotationPhaseVisitor> */
 if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phase");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 131);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _annotations");
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 149);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1374,35 +1553,7 @@ RET_LABEL2:(void)0;
 }
 }
 {
-{ /* Inline parser_nodes#ANode#parent (var_n) on <var_n:ANode(AAnnotation)> */
-var6 = var_n->attrs[COLOR_parser_nodes__ANode___parent].val; /* _parent on <var_n:ANode(AAnnotation)> */
-var4 = var6;
-RET_LABEL5:(void)0;
-}
-}
-if (var4 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 138);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent (var4) on <var4:nullable ANode> */
-if (unlikely(var4 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", "src/parser/parser_nodes.nit", 38);
-show_backtrace(1);
-}
-var9 = var4->attrs[COLOR_parser_nodes__ANode___parent].val; /* _parent on <var4:nullable ANode> */
-var7 = var9;
-RET_LABEL8:(void)0;
-}
-}
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 138);
-show_backtrace(1);
-}
-{
-((void (*)(val*, val*, val*))(var1->class->vft[COLOR_phase__Phase__process_annotated_node]))(var1, var7, var_n) /* process_annotated_node on <var1:Phase>*/;
+array__Array__add(var1, var_n); /* Direct call array#Array#add on <var1:Array[AAnnotation]>*/
 }
 } else {
 }
@@ -1420,7 +1571,7 @@ val* var1 /* : ToolContext */;
 var1 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:Phase> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 145);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
 show_backtrace(1);
 }
 var = var1;
@@ -1436,7 +1587,7 @@ val* var3 /* : ToolContext */;
 var3 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:Object(Phase)> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 145);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1466,7 +1617,7 @@ val* var1 /* : POSetElement[Phase] */;
 var1 = self->attrs[COLOR_phase__Phase___in_hierarchy].val; /* _in_hierarchy on <self:Phase> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_hierarchy");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 148);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 165);
 show_backtrace(1);
 }
 var = var1;
@@ -1482,7 +1633,7 @@ val* var3 /* : POSetElement[Phase] */;
 var3 = self->attrs[COLOR_phase__Phase___in_hierarchy].val; /* _in_hierarchy on <self:Object(Phase)> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_hierarchy");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 148);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 165);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1519,12 +1670,14 @@ val* var_other /* var other: nullable Object */;
 short int var10 /* : Bool */;
 short int var11 /* : Bool */;
 short int var12 /* : Bool */;
+val* var_ /* var : Collection[Phase] */;
 val* var13 /* : Iterator[nullable Object] */;
-short int var14 /* : Bool */;
-val* var15 /* : nullable Object */;
+val* var_14 /* var : Iterator[Phase] */;
+short int var15 /* : Bool */;
+val* var16 /* : nullable Object */;
 val* var_d /* var d: Phase */;
-val* var16 /* : POSet[Phase] */;
-val* var18 /* : POSet[Phase] */;
+val* var17 /* : POSet[Phase] */;
+val* var19 /* : POSet[Phase] */;
 var_toolcontext = p0;
 var_depends = p1;
 {
@@ -1538,7 +1691,7 @@ RET_LABEL1:(void)0;
 var3 = var_toolcontext->attrs[COLOR_phase__ToolContext___phases].val; /* _phases on <var_toolcontext:ToolContext> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phases");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 23);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 23);
 show_backtrace(1);
 }
 var = var3;
@@ -1575,39 +1728,48 @@ RET_LABEL9:(void)0;
 var7 = var8;
 }
 if (var7){
+var_ = var_depends;
 {
-var13 = ((val* (*)(val*))(var_depends->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_depends) /* iterator on <var_depends:nullable Collection[Phase](Collection[Phase])>*/;
+var13 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[Phase]>*/;
 }
+var_14 = var13;
 for(;;) {
 {
-var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
+var15 = ((short int (*)(val*))(var_14->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_14) /* is_ok on <var_14:Iterator[Phase]>*/;
 }
-if(!var14) break;
+if (var15){
 {
-var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
+var16 = ((val* (*)(val*))(var_14->class->vft[COLOR_abstract_collection__Iterator__item]))(var_14) /* item on <var_14:Iterator[Phase]>*/;
 }
-var_d = var15;
+var_d = var16;
 {
 { /* Inline phase#ToolContext#phases (var_toolcontext) on <var_toolcontext:ToolContext> */
-var18 = var_toolcontext->attrs[COLOR_phase__ToolContext___phases].val; /* _phases on <var_toolcontext:ToolContext> */
-if (unlikely(var18 == NULL)) {
+var19 = var_toolcontext->attrs[COLOR_phase__ToolContext___phases].val; /* _phases on <var_toolcontext:ToolContext> */
+if (unlikely(var19 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _phases");
-PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 23);
+PRINT_ERROR(" (%s:%d)\n", "phase.nit", 23);
 show_backtrace(1);
 }
-var16 = var18;
-RET_LABEL17:(void)0;
+var17 = var19;
+RET_LABEL18:(void)0;
 }
 }
 {
-poset__POSet__add_edge(var16, self, var_d); /* Direct call poset#POSet#add_edge on <var16:POSet[Phase]>*/
+poset__POSet__add_edge(var17, self, var_d); /* Direct call poset#POSet#add_edge on <var17:POSet[Phase]>*/
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_14->class->vft[COLOR_abstract_collection__Iterator__next]))(var_14) /* next on <var_14:Iterator[Phase]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_14) on <var_14:Iterator[Phase]> */
+RET_LABEL20:(void)0;
+}
+}
 } else {
 }
 RET_LABEL:;