update c_src
[nit.git] / c_src / coloring.sep.1.c
index 8a3d1b7..d8723db 100644 (file)
@@ -6,7 +6,7 @@ val* var1 /* : HashSet[Object] */;
 var1 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _core");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 22);
 show_backtrace(1);
 }
 var = var1;
@@ -22,7 +22,7 @@ val* var3 /* : HashSet[Object] */;
 var3 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:Object(POSetConflictGraph[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _core");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 22);
 show_backtrace(1);
 }
 var1 = var3;
@@ -39,7 +39,7 @@ val* var1 /* : HashSet[Object] */;
 var1 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:POSetConflictGraph[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _border");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 28);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 28);
 show_backtrace(1);
 }
 var = var1;
@@ -55,7 +55,7 @@ val* var3 /* : HashSet[Object] */;
 var3 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:Object(POSetConflictGraph[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _border");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 28);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 28);
 show_backtrace(1);
 }
 var1 = var3;
@@ -72,7 +72,7 @@ val* var1 /* : HashSet[Object] */;
 var1 = self->attrs[COLOR_coloring__POSetConflictGraph___crown].val; /* _crown on <self:POSetConflictGraph[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _crown");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 34);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 34);
 show_backtrace(1);
 }
 var = var1;
@@ -88,7 +88,7 @@ val* var3 /* : HashSet[Object] */;
 var3 = self->attrs[COLOR_coloring__POSetConflictGraph___crown].val; /* _crown on <self:Object(POSetConflictGraph[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _crown");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 34);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 34);
 show_backtrace(1);
 }
 var1 = var3;
@@ -105,7 +105,7 @@ val* var1 /* : HashMap[Object, Set[Object]] */;
 var1 = self->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <self:POSetConflictGraph[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var = var1;
@@ -121,7 +121,7 @@ val* var3 /* : HashMap[Object, Set[Object]] */;
 var3 = self->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <self:Object(POSetConflictGraph[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var1 = var3;
@@ -138,7 +138,7 @@ val* var1 /* : POSet[Object] */;
 var1 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
 var = var1;
@@ -154,7 +154,7 @@ val* var3 /* : POSet[Object] */;
 var3 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:Object(POSetConflictGraph[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
 var1 = var3;
@@ -171,8 +171,8 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 const char* var_class_name;
-/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[POSetConflictGraph#0] */
-/* <p0:POSet[Object]> isa POSet[POSetConflictGraph#0] */
+/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[E] */
+/* <p0:POSet[Object]> isa POSet[E] */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetConflictGraph_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -183,8 +183,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetConflictGraph#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetConflictGraph___poset].val = p0; /* _poset on <self:POSetConflictGraph[Object]> */
@@ -198,8 +198,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 { /* Inline coloring#POSetConflictGraph#poset= (self,p0) on <self:Object(POSetConflictGraph[Object])> */
-/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[POSetConflictGraph#0] */
-/* <p0:POSet[Object]> isa POSet[POSetConflictGraph#0] */
+/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[E] */
+/* <p0:POSet[Object]> isa POSet[E] */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetConflictGraph_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -210,8 +210,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetConflictGraph#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetConflictGraph___poset].val = p0; /* _poset on <self:Object(POSetConflictGraph[Object])> */
@@ -232,8 +232,8 @@ int cltype3;
 int idtype4;
 const struct type* type_struct5;
 const char* var_class_name6;
-/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[POSetConflictGraph#0] */
-/* <p0:POSet[Object]> isa POSet[POSetConflictGraph#0] */
+/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[E] */
+/* <p0:POSet[Object]> isa POSet[E] */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetConflictGraph_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -244,15 +244,15 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetConflictGraph#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 50);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 50);
 show_backtrace(1);
 }
 var_poset = p0;
 {
 { /* Inline coloring#POSetConflictGraph#poset= (self,var_poset) on <self:POSetConflictGraph[Object]> */
-/* Covariant cast for argument 0 (poset) <var_poset:POSet[Object]> isa POSet[POSetConflictGraph#0] */
-/* <var_poset:POSet[Object]> isa POSet[POSetConflictGraph#0] */
+/* Covariant cast for argument 0 (poset) <var_poset:POSet[Object]> isa POSet[E] */
+/* <var_poset:POSet[Object]> isa POSet[E] */
 type_struct5 = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetConflictGraph_FT0];
 cltype3 = type_struct5->color;
 idtype4 = type_struct5->id;
@@ -263,8 +263,8 @@ var2 = var_poset->type->type_table[cltype3] == idtype4;
 }
 if (unlikely(!var2)) {
 var_class_name6 = var_poset == NULL ? "null" : var_poset->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetConflictGraph#0]", var_class_name6);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[E]", var_class_name6);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetConflictGraph___poset].val = var_poset; /* _poset on <self:POSetConflictGraph[Object]> */
@@ -296,34 +296,36 @@ val* var /* : HashSet[Object] */;
 val* var2 /* : HashSet[Object] */;
 val* var3 /* : POSet[Object] */;
 val* var5 /* : POSet[Object] */;
+val* var_ /* var : POSet[Object] */;
 val* var6 /* : Iterator[Object] */;
-short int var7 /* : Bool */;
-val* var8 /* : nullable Object */;
+val* var_7 /* var : Iterator[Object] */;
+short int var8 /* : Bool */;
+val* var9 /* : nullable Object */;
 val* var_e /* var e: Object */;
-val* var9 /* : POSet[Object] */;
-val* var11 /* : POSet[Object] */;
-val* var12 /* : POSetElement[Object] */;
-val* var13 /* : Collection[Object] */;
-long var14 /* : Int */;
+val* var10 /* : POSet[Object] */;
+val* var12 /* : POSet[Object] */;
+val* var13 /* : POSetElement[Object] */;
+val* var14 /* : Collection[Object] */;
 long var15 /* : Int */;
-short int var16 /* : Bool */;
-short int var18 /* : Bool */;
+long var16 /* : Int */;
+short int var17 /* : Bool */;
+short int var19 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-short int var19 /* : Bool */;
-val* var20 /* : HashSet[Object] */;
-val* var22 /* : HashSet[Object] */;
-val* var23 /* : POSet[Object] */;
-val* var25 /* : POSet[Object] */;
-val* var26 /* : POSetElement[Object] */;
-val* var27 /* : Collection[Object] */;
+short int var20 /* : Bool */;
+val* var21 /* : HashSet[Object] */;
+val* var23 /* : HashSet[Object] */;
+val* var24 /* : POSet[Object] */;
+val* var26 /* : POSet[Object] */;
+val* var27 /* : POSetElement[Object] */;
+val* var28 /* : Collection[Object] */;
 {
 { /* Inline coloring#POSetConflictGraph#core (self) on <self:POSetConflictGraph[Object]> */
 var2 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _core");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 22);
 show_backtrace(1);
 }
 var = var2;
@@ -338,106 +340,115 @@ hash_collection__HashSet__clear(var); /* Direct call hash_collection#HashSet#cle
 var5 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
 if (unlikely(var5 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
 var3 = var5;
 RET_LABEL4:(void)0;
 }
 }
+var_ = var3;
 {
-var6 = poset__POSet__iterator(var3);
+var6 = poset__POSet__iterator(var_);
 }
+var_7 = var6;
 for(;;) {
 {
-var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[Object]>*/;
+var8 = ((short int (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_7) /* is_ok on <var_7:Iterator[Object]>*/;
 }
-if(!var7) break;
+if (var8){
 {
-var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[Object]>*/;
+var9 = ((val* (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__item]))(var_7) /* item on <var_7:Iterator[Object]>*/;
 }
-var_e = var8;
+var_e = var9;
 {
 { /* Inline coloring#POSetConflictGraph#poset (self) on <self:POSetConflictGraph[Object]> */
-var11 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
-if (unlikely(var11 == NULL)) {
+var12 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
+if (unlikely(var12 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
-var9 = var11;
-RET_LABEL10:(void)0;
+var10 = var12;
+RET_LABEL11:(void)0;
 }
 }
 {
-var12 = poset__POSet___91d_93d(var9, var_e);
+var13 = poset__POSet___91d_93d(var10, var_e);
 }
 {
-var13 = poset__POSetElement__direct_greaters(var12);
+var14 = poset__POSetElement__direct_greaters(var13);
 }
 {
-var14 = ((long (*)(val*))(var13->class->vft[COLOR_abstract_collection__Collection__length]))(var13) /* length on <var13:Collection[Object]>*/;
+var15 = ((long (*)(val*))(var14->class->vft[COLOR_abstract_collection__Collection__length]))(var14) /* length on <var14:Collection[Object]>*/;
 }
-var15 = 1;
+var16 = 1;
 {
-{ /* Inline kernel#Int#> (var14,var15) on <var14:Int> */
-/* Covariant cast for argument 0 (i) <var15:Int> isa OTHER */
-/* <var15:Int> isa OTHER */
-var18 = 1; /* easy <var15:Int> isa OTHER*/
-if (unlikely(!var18)) {
+{ /* Inline kernel#Int#> (var15,var16) on <var15:Int> */
+/* Covariant cast for argument 0 (i) <var16:Int> isa OTHER */
+/* <var16:Int> isa OTHER */
+var19 = 1; /* easy <var16:Int> isa OTHER*/
+if (unlikely(!var19)) {
 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", 327);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
 show_backtrace(1);
 }
-var19 = var14 > var15;
-var16 = var19;
-goto RET_LABEL17;
-RET_LABEL17:(void)0;
+var20 = var15 > var16;
+var17 = var20;
+goto RET_LABEL18;
+RET_LABEL18:(void)0;
 }
 }
-if (var16){
+if (var17){
 {
 { /* Inline coloring#POSetConflictGraph#core (self) on <self:POSetConflictGraph[Object]> */
-var22 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
-if (unlikely(var22 == NULL)) {
+var23 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
+if (unlikely(var23 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _core");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 22);
 show_backtrace(1);
 }
-var20 = var22;
-RET_LABEL21:(void)0;
+var21 = var23;
+RET_LABEL22:(void)0;
 }
 }
 {
 { /* Inline coloring#POSetConflictGraph#poset (self) on <self:POSetConflictGraph[Object]> */
-var25 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
-if (unlikely(var25 == NULL)) {
+var26 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
+if (unlikely(var26 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
-var23 = var25;
-RET_LABEL24:(void)0;
+var24 = var26;
+RET_LABEL25:(void)0;
 }
 }
 {
-var26 = poset__POSet___91d_93d(var23, var_e);
+var27 = poset__POSet___91d_93d(var24, var_e);
 }
 {
-var27 = poset__POSetElement__greaters(var26);
+var28 = poset__POSetElement__greaters(var27);
 }
 {
-abstract_collection__SimpleCollection__add_all(var20, var27); /* Direct call abstract_collection#SimpleCollection#add_all on <var20:HashSet[Object]>*/
+abstract_collection__SimpleCollection__add_all(var21, var28); /* Direct call abstract_collection#SimpleCollection#add_all on <var21:HashSet[Object]>*/
 }
 } else {
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[Object]>*/;
+((void (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__next]))(var_7) /* next on <var_7:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_7) on <var_7:Iterator[Object]> */
+RET_LABEL29:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method coloring#POSetConflictGraph#extract_core for (self: Object) */
@@ -451,28 +462,32 @@ val* var /* : HashSet[Object] */;
 val* var2 /* : HashSet[Object] */;
 val* var3 /* : HashSet[Object] */;
 val* var5 /* : HashSet[Object] */;
+val* var_ /* var : HashSet[Object] */;
 val* var6 /* : Iterator[Object] */;
-short int var7 /* : Bool */;
-val* var8 /* : nullable Object */;
+val* var_7 /* var : Iterator[Object] */;
+short int var8 /* : Bool */;
+val* var9 /* : nullable Object */;
 val* var_e /* var e: Object */;
-short int var9 /* : Bool */;
 short int var10 /* : Bool */;
-val* var11 /* : HashSet[Object] */;
-val* var13 /* : HashSet[Object] */;
+short int var11 /* : Bool */;
+val* var12 /* : HashSet[Object] */;
 val* var14 /* : HashSet[Object] */;
-val* var16 /* : HashSet[Object] */;
-val* var17 /* : Iterator[Object] */;
-short int var18 /* : Bool */;
-val* var19 /* : nullable Object */;
-val* var_e20 /* var e: Object */;
-val* var21 /* : HashSet[Object] */;
-val* var23 /* : HashSet[Object] */;
+val* var17 /* : HashSet[Object] */;
+val* var19 /* : HashSet[Object] */;
+val* var_20 /* var : HashSet[Object] */;
+val* var21 /* : Iterator[Object] */;
+val* var_22 /* var : Iterator[Object] */;
+short int var23 /* : Bool */;
+val* var24 /* : nullable Object */;
+val* var_e25 /* var e: Object */;
+val* var26 /* : HashSet[Object] */;
+val* var28 /* : HashSet[Object] */;
 {
 { /* Inline coloring#POSetConflictGraph#border (self) on <self:POSetConflictGraph[Object]> */
 var2 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:POSetConflictGraph[Object]> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _border");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 28);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 28);
 show_backtrace(1);
 }
 var = var2;
@@ -487,99 +502,118 @@ hash_collection__HashSet__clear(var); /* Direct call hash_collection#HashSet#cle
 var5 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
 if (unlikely(var5 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _core");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 22);
 show_backtrace(1);
 }
 var3 = var5;
 RET_LABEL4:(void)0;
 }
 }
+var_ = var3;
 {
-var6 = hash_collection__HashSet__iterator(var3);
+var6 = hash_collection__HashSet__iterator(var_);
 }
+var_7 = var6;
 for(;;) {
 {
-var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[Object]>*/;
+var8 = ((short int (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_7) /* is_ok on <var_7:Iterator[Object]>*/;
 }
-if(!var7) break;
+if (var8){
 {
-var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[Object]>*/;
+var9 = ((val* (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__item]))(var_7) /* item on <var_7:Iterator[Object]>*/;
 }
-var_e = var8;
+var_e = var9;
 {
-var9 = coloring__POSetConflictGraph__is_border(self, var_e);
+var10 = coloring__POSetConflictGraph__is_border(self, var_e);
 }
-var10 = !var9;
-if (var10){
-goto CONTINUE_label;
+var11 = !var10;
+if (var11){
+goto BREAK_label;
 } else {
 }
 {
 { /* Inline coloring#POSetConflictGraph#border (self) on <self:POSetConflictGraph[Object]> */
-var13 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:POSetConflictGraph[Object]> */
-if (unlikely(var13 == NULL)) {
+var14 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:POSetConflictGraph[Object]> */
+if (unlikely(var14 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _border");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 28);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 28);
 show_backtrace(1);
 }
-var11 = var13;
-RET_LABEL12:(void)0;
+var12 = var14;
+RET_LABEL13:(void)0;
 }
 }
 {
-hash_collection__HashSet__add(var11, var_e); /* Direct call hash_collection#HashSet#add on <var11:HashSet[Object]>*/
+hash_collection__HashSet__add(var12, var_e); /* Direct call hash_collection#HashSet#add on <var12:HashSet[Object]>*/
+}
+BREAK_label: (void)0;
+{
+((void (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__next]))(var_7) /* next on <var_7:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label15;
+}
 }
-CONTINUE_label: (void)0;
+BREAK_label15: (void)0;
 {
-((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[Object]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_7) on <var_7:Iterator[Object]> */
+RET_LABEL16:(void)0;
 }
 }
-BREAK_label: (void)0;
 {
 { /* Inline coloring#POSetConflictGraph#border (self) on <self:POSetConflictGraph[Object]> */
-var16 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:POSetConflictGraph[Object]> */
-if (unlikely(var16 == NULL)) {
+var19 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:POSetConflictGraph[Object]> */
+if (unlikely(var19 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _border");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 28);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 28);
 show_backtrace(1);
 }
-var14 = var16;
-RET_LABEL15:(void)0;
+var17 = var19;
+RET_LABEL18:(void)0;
 }
 }
+var_20 = var17;
 {
-var17 = hash_collection__HashSet__iterator(var14);
+var21 = hash_collection__HashSet__iterator(var_20);
 }
+var_22 = var21;
 for(;;) {
 {
-var18 = ((short int (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var17) /* is_ok on <var17:Iterator[Object]>*/;
+var23 = ((short int (*)(val*))(var_22->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_22) /* is_ok on <var_22:Iterator[Object]>*/;
 }
-if(!var18) break;
+if (var23){
 {
-var19 = ((val* (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__item]))(var17) /* item on <var17:Iterator[Object]>*/;
+var24 = ((val* (*)(val*))(var_22->class->vft[COLOR_abstract_collection__Iterator__item]))(var_22) /* item on <var_22:Iterator[Object]>*/;
 }
-var_e20 = var19;
+var_e25 = var24;
 {
 { /* Inline coloring#POSetConflictGraph#core (self) on <self:POSetConflictGraph[Object]> */
-var23 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
-if (unlikely(var23 == NULL)) {
+var28 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
+if (unlikely(var28 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _core");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 22);
 show_backtrace(1);
 }
-var21 = var23;
-RET_LABEL22:(void)0;
+var26 = var28;
+RET_LABEL27:(void)0;
 }
 }
 {
-hash_collection__HashSet__remove(var21, var_e20); /* Direct call hash_collection#HashSet#remove on <var21:HashSet[Object]>*/
+hash_collection__HashSet__remove(var26, var_e25); /* Direct call hash_collection#HashSet#remove on <var26:HashSet[Object]>*/
+}
+{
+((void (*)(val*))(var_22->class->vft[COLOR_abstract_collection__Iterator__next]))(var_22) /* next on <var_22:Iterator[Object]>*/;
 }
-CONTINUE_label24: (void)0;
+} else {
+goto BREAK_label29;
+}
+}
+BREAK_label29: (void)0;
 {
-((void (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__next]))(var17) /* next on <var17:Iterator[Object]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_22) on <var_22:Iterator[Object]> */
+RET_LABEL30:(void)0;
 }
 }
-BREAK_label24: (void)0;
 RET_LABEL:;
 }
 /* method coloring#POSetConflictGraph#extract_border for (self: Object) */
@@ -600,17 +634,19 @@ val* var2 /* : POSet[Object] */;
 val* var4 /* : POSet[Object] */;
 val* var5 /* : POSetElement[Object] */;
 val* var6 /* : Collection[Object] */;
+val* var_ /* var : Collection[Object] */;
 val* var7 /* : Iterator[nullable Object] */;
-short int var8 /* : Bool */;
-val* var9 /* : nullable Object */;
+val* var_8 /* var : Iterator[Object] */;
+short int var9 /* : Bool */;
+val* var10 /* : nullable Object */;
 val* var_child /* var child: Object */;
-val* var10 /* : HashSet[Object] */;
-val* var12 /* : HashSet[Object] */;
-short int var13 /* : Bool */;
+val* var11 /* : HashSet[Object] */;
+val* var13 /* : HashSet[Object] */;
 short int var14 /* : Bool */;
 short int var15 /* : Bool */;
-/* Covariant cast for argument 0 (e) <p0:Object> isa POSetConflictGraph#0 */
-/* <p0:Object> isa POSetConflictGraph#0 */
+short int var17 /* : Bool */;
+/* Covariant cast for argument 0 (e) <p0:Object> isa E */
+/* <p0:Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_coloring__POSetConflictGraph_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -621,8 +657,8 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetConflictGraph#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 79);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 79);
 show_backtrace(1);
 }
 var_e = p0;
@@ -631,7 +667,7 @@ var_e = p0;
 var4 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
 if (unlikely(var4 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
 var2 = var4;
@@ -644,47 +680,56 @@ var5 = poset__POSet___91d_93d(var2, var_e);
 {
 var6 = poset__POSetElement__direct_smallers(var5);
 }
+var_ = var6;
 {
-var7 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Collection__iterator]))(var6) /* iterator on <var6:Collection[Object]>*/;
+var7 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[Object]>*/;
 }
+var_8 = var7;
 for(;;) {
 {
-var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
+var9 = ((short int (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_8) /* is_ok on <var_8:Iterator[Object]>*/;
 }
-if(!var8) break;
+if (var9){
 {
-var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
+var10 = ((val* (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__item]))(var_8) /* item on <var_8:Iterator[Object]>*/;
 }
-var_child = var9;
+var_child = var10;
 {
 { /* Inline coloring#POSetConflictGraph#core (self) on <self:POSetConflictGraph[Object]> */
-var12 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
-if (unlikely(var12 == NULL)) {
+var13 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
+if (unlikely(var13 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _core");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 22);
 show_backtrace(1);
 }
-var10 = var12;
-RET_LABEL11:(void)0;
+var11 = var13;
+RET_LABEL12:(void)0;
 }
 }
 {
-var13 = hash_collection__HashSet__has(var10, var_child);
+var14 = hash_collection__HashSet__has(var11, var_child);
 }
-if (var13){
-var14 = 0;
-var = var14;
+if (var14){
+var15 = 0;
+var = var15;
 goto RET_LABEL;
 } else {
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__next]))(var_8) /* next on <var_8:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
-var15 = 1;
-var = var15;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_8) on <var_8:Iterator[Object]> */
+RET_LABEL16:(void)0;
+}
+}
+var17 = 1;
+var = var17;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -704,28 +749,30 @@ val* var /* : HashSet[Object] */;
 val* var2 /* : HashSet[Object] */;
 val* var3 /* : POSet[Object] */;
 val* var5 /* : POSet[Object] */;
+val* var_ /* var : POSet[Object] */;
 val* var6 /* : Iterator[Object] */;
-short int var7 /* : Bool */;
-val* var8 /* : nullable Object */;
+val* var_7 /* var : Iterator[Object] */;
+short int var8 /* : Bool */;
+val* var9 /* : nullable Object */;
 val* var_e /* var e: Object */;
-short int var9 /* : Bool */;
-val* var10 /* : HashSet[Object] */;
-val* var12 /* : HashSet[Object] */;
-short int var13 /* : Bool */;
+short int var10 /* : Bool */;
+val* var11 /* : HashSet[Object] */;
+val* var13 /* : HashSet[Object] */;
 short int var14 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var15 /* : HashSet[Object] */;
+short int var15 /* : Bool */;
+short int var_16 /* var : Bool */;
 val* var17 /* : HashSet[Object] */;
-short int var18 /* : Bool */;
-short int var19 /* : Bool */;
-val* var20 /* : HashSet[Object] */;
+val* var19 /* : HashSet[Object] */;
+short int var20 /* : Bool */;
+short int var21 /* : Bool */;
 val* var22 /* : HashSet[Object] */;
+val* var24 /* : HashSet[Object] */;
 {
 { /* Inline coloring#POSetConflictGraph#crown (self) on <self:POSetConflictGraph[Object]> */
 var2 = self->attrs[COLOR_coloring__POSetConflictGraph___crown].val; /* _crown on <self:POSetConflictGraph[Object]> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _crown");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 34);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 34);
 show_backtrace(1);
 }
 var = var2;
@@ -740,87 +787,96 @@ hash_collection__HashSet__clear(var); /* Direct call hash_collection#HashSet#cle
 var5 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
 if (unlikely(var5 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
 var3 = var5;
 RET_LABEL4:(void)0;
 }
 }
+var_ = var3;
 {
-var6 = poset__POSet__iterator(var3);
+var6 = poset__POSet__iterator(var_);
 }
+var_7 = var6;
 for(;;) {
 {
-var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[Object]>*/;
+var8 = ((short int (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_7) /* is_ok on <var_7:Iterator[Object]>*/;
 }
-if(!var7) break;
+if (var8){
 {
-var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[Object]>*/;
+var9 = ((val* (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__item]))(var_7) /* item on <var_7:Iterator[Object]>*/;
 }
-var_e = var8;
+var_e = var9;
 {
 { /* Inline coloring#POSetConflictGraph#core (self) on <self:POSetConflictGraph[Object]> */
-var12 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
-if (unlikely(var12 == NULL)) {
+var13 = self->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <self:POSetConflictGraph[Object]> */
+if (unlikely(var13 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _core");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 22);
 show_backtrace(1);
 }
-var10 = var12;
-RET_LABEL11:(void)0;
+var11 = var13;
+RET_LABEL12:(void)0;
 }
 }
 {
-var13 = hash_collection__HashSet__has(var10, var_e);
+var14 = hash_collection__HashSet__has(var11, var_e);
 }
-var14 = !var13;
-var_ = var14;
-if (var14){
+var15 = !var14;
+var_16 = var15;
+if (var15){
 {
 { /* Inline coloring#POSetConflictGraph#border (self) on <self:POSetConflictGraph[Object]> */
-var17 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:POSetConflictGraph[Object]> */
-if (unlikely(var17 == NULL)) {
+var19 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:POSetConflictGraph[Object]> */
+if (unlikely(var19 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _border");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 28);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 28);
 show_backtrace(1);
 }
-var15 = var17;
-RET_LABEL16:(void)0;
+var17 = var19;
+RET_LABEL18:(void)0;
 }
 }
 {
-var18 = hash_collection__HashSet__has(var15, var_e);
+var20 = hash_collection__HashSet__has(var17, var_e);
 }
-var19 = !var18;
-var9 = var19;
+var21 = !var20;
+var10 = var21;
 } else {
-var9 = var_;
+var10 = var_16;
 }
-if (var9){
+if (var10){
 {
 { /* Inline coloring#POSetConflictGraph#crown (self) on <self:POSetConflictGraph[Object]> */
-var22 = self->attrs[COLOR_coloring__POSetConflictGraph___crown].val; /* _crown on <self:POSetConflictGraph[Object]> */
-if (unlikely(var22 == NULL)) {
+var24 = self->attrs[COLOR_coloring__POSetConflictGraph___crown].val; /* _crown on <self:POSetConflictGraph[Object]> */
+if (unlikely(var24 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _crown");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 34);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 34);
 show_backtrace(1);
 }
-var20 = var22;
-RET_LABEL21:(void)0;
+var22 = var24;
+RET_LABEL23:(void)0;
 }
 }
 {
-hash_collection__HashSet__add(var20, var_e); /* Direct call hash_collection#HashSet#add on <var20:HashSet[Object]>*/
+hash_collection__HashSet__add(var22, var_e); /* Direct call hash_collection#HashSet#add on <var22:HashSet[Object]>*/
 }
 } else {
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[Object]>*/;
+((void (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__next]))(var_7) /* next on <var_7:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_7) on <var_7:Iterator[Object]> */
+RET_LABEL25:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method coloring#POSetConflictGraph#extract_crown for (self: Object) */
@@ -834,20 +890,22 @@ val* var /* : HashMap[Object, Set[Object]] */;
 val* var2 /* : HashMap[Object, Set[Object]] */;
 val* var3 /* : HashSet[Object] */;
 val* var5 /* : HashSet[Object] */;
+val* var_ /* var : HashSet[Object] */;
 val* var6 /* : Iterator[Object] */;
-short int var7 /* : Bool */;
-val* var8 /* : nullable Object */;
+val* var_7 /* var : Iterator[Object] */;
+short int var8 /* : Bool */;
+val* var9 /* : nullable Object */;
 val* var_e /* var e: Object */;
-val* var9 /* : POSet[Object] */;
-val* var11 /* : POSet[Object] */;
-val* var12 /* : POSetElement[Object] */;
-val* var13 /* : Collection[Object] */;
+val* var10 /* : POSet[Object] */;
+val* var12 /* : POSet[Object] */;
+val* var13 /* : POSetElement[Object] */;
+val* var14 /* : Collection[Object] */;
 {
 { /* Inline coloring#POSetConflictGraph#conflicts (self) on <self:POSetConflictGraph[Object]> */
 var2 = self->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <self:POSetConflictGraph[Object]> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var = var2;
@@ -862,52 +920,61 @@ hash_collection__HashMap__clear(var); /* Direct call hash_collection#HashMap#cle
 var5 = self->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <self:POSetConflictGraph[Object]> */
 if (unlikely(var5 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _border");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 28);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 28);
 show_backtrace(1);
 }
 var3 = var5;
 RET_LABEL4:(void)0;
 }
 }
+var_ = var3;
 {
-var6 = hash_collection__HashSet__iterator(var3);
+var6 = hash_collection__HashSet__iterator(var_);
 }
+var_7 = var6;
 for(;;) {
 {
-var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[Object]>*/;
+var8 = ((short int (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_7) /* is_ok on <var_7:Iterator[Object]>*/;
 }
-if(!var7) break;
+if (var8){
 {
-var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[Object]>*/;
+var9 = ((val* (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__item]))(var_7) /* item on <var_7:Iterator[Object]>*/;
 }
-var_e = var8;
+var_e = var9;
 {
 { /* Inline coloring#POSetConflictGraph#poset (self) on <self:POSetConflictGraph[Object]> */
-var11 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
-if (unlikely(var11 == NULL)) {
+var12 = self->attrs[COLOR_coloring__POSetConflictGraph___poset].val; /* _poset on <self:POSetConflictGraph[Object]> */
+if (unlikely(var12 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 48);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 48);
 show_backtrace(1);
 }
-var9 = var11;
-RET_LABEL10:(void)0;
+var10 = var12;
+RET_LABEL11:(void)0;
 }
 }
 {
-var12 = poset__POSet___91d_93d(var9, var_e);
+var13 = poset__POSet___91d_93d(var10, var_e);
 }
 {
-var13 = poset__POSetElement__greaters(var12);
+var14 = poset__POSetElement__greaters(var13);
 }
 {
-coloring__POSetConflictGraph__add_conflicts(self, var13); /* Direct call coloring#POSetConflictGraph#add_conflicts on <self:POSetConflictGraph[Object]>*/
+coloring__POSetConflictGraph__add_conflicts(self, var14); /* Direct call coloring#POSetConflictGraph#add_conflicts on <self:POSetConflictGraph[Object]>*/
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[Object]>*/;
+((void (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__next]))(var_7) /* next on <var_7:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_7) on <var_7:Iterator[Object]> */
+RET_LABEL15:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method coloring#POSetConflictGraph#compute_conflicts for (self: Object) */
@@ -949,8 +1016,8 @@ val* var27 /* : nullable Object */;
 val* var28 /* : HashMap[Object, Set[Object]] */;
 val* var30 /* : HashMap[Object, Set[Object]] */;
 val* var31 /* : nullable Object */;
-/* Covariant cast for argument 0 (e) <p0:Object> isa POSetConflictGraph#0 */
-/* <p0:Object> isa POSetConflictGraph#0 */
+/* Covariant cast for argument 0 (e) <p0:Object> isa E */
+/* <p0:Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_coloring__POSetConflictGraph_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -961,12 +1028,12 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetConflictGraph#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 101);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 101);
 show_backtrace(1);
 }
-/* Covariant cast for argument 1 (o) <p1:Object> isa POSetConflictGraph#0 */
-/* <p1:Object> isa POSetConflictGraph#0 */
+/* Covariant cast for argument 1 (o) <p1:Object> isa E */
+/* <p1:Object> isa E */
 type_struct4 = self->type->resolution_table->types[COLOR_coloring__POSetConflictGraph_FT0];
 cltype2 = type_struct4->color;
 idtype3 = type_struct4->id;
@@ -977,8 +1044,8 @@ var1 = p1->type->type_table[cltype2] == idtype3;
 }
 if (unlikely(!var1)) {
 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetConflictGraph#0", var_class_name5);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 101);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name5);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 101);
 show_backtrace(1);
 }
 var_e = p0;
@@ -988,7 +1055,7 @@ var_o = p1;
 var8 = self->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <self:POSetConflictGraph[Object]> */
 if (unlikely(var8 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var6 = var8;
@@ -1005,7 +1072,7 @@ if (var10){
 var13 = self->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <self:POSetConflictGraph[Object]> */
 if (unlikely(var13 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var11 = var13;
@@ -1014,7 +1081,7 @@ RET_LABEL12:(void)0;
 }
 var14 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetcoloring__POSetConflictGraph_FT0]);
 {
-hash_collection__HashSet__init(var14); /* Direct call hash_collection#HashSet#init on <var14:HashSet[Object]>*/
+((void (*)(val*))(var14->class->vft[COLOR_kernel__Object__init]))(var14) /* init on <var14:HashSet[Object]>*/;
 }
 {
 hash_collection__HashMap___91d_93d_61d(var11, var_e, var14); /* Direct call hash_collection#HashMap#[]= on <var11:HashMap[Object, Set[Object]]>*/
@@ -1026,7 +1093,7 @@ hash_collection__HashMap___91d_93d_61d(var11, var_e, var14); /* Direct call hash
 var17 = self->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <self:POSetConflictGraph[Object]> */
 if (unlikely(var17 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var15 = var17;
@@ -1043,7 +1110,7 @@ if (var19){
 var22 = self->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <self:POSetConflictGraph[Object]> */
 if (unlikely(var22 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var20 = var22;
@@ -1052,7 +1119,7 @@ RET_LABEL21:(void)0;
 }
 var23 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetcoloring__POSetConflictGraph_FT0]);
 {
-hash_collection__HashSet__init(var23); /* Direct call hash_collection#HashSet#init on <var23:HashSet[Object]>*/
+((void (*)(val*))(var23->class->vft[COLOR_kernel__Object__init]))(var23) /* init on <var23:HashSet[Object]>*/;
 }
 {
 hash_collection__HashMap___91d_93d_61d(var20, var_o, var23); /* Direct call hash_collection#HashMap#[]= on <var20:HashMap[Object, Set[Object]]>*/
@@ -1064,7 +1131,7 @@ hash_collection__HashMap___91d_93d_61d(var20, var_o, var23); /* Direct call hash
 var26 = self->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <self:POSetConflictGraph[Object]> */
 if (unlikely(var26 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var24 = var26;
@@ -1082,7 +1149,7 @@ var27 = hash_collection__HashMap___91d_93d(var24, var_e);
 var30 = self->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <self:POSetConflictGraph[Object]> */
 if (unlikely(var30 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var28 = var30;
@@ -1110,16 +1177,20 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 val* var_es /* var es: Collection[Object] */;
+val* var_ /* var : Collection[Object] */;
 val* var1 /* : Iterator[nullable Object] */;
-short int var2 /* : Bool */;
-val* var3 /* : nullable Object */;
+val* var_2 /* var : Iterator[Object] */;
+short int var3 /* : Bool */;
+val* var4 /* : nullable Object */;
 val* var_e1 /* var e1: Object */;
-val* var4 /* : Iterator[nullable Object] */;
-short int var5 /* : Bool */;
-val* var6 /* : nullable Object */;
+val* var_5 /* var : Collection[Object] */;
+val* var6 /* : Iterator[nullable Object] */;
+val* var_7 /* var : Iterator[Object] */;
+short int var8 /* : Bool */;
+val* var9 /* : nullable Object */;
 val* var_e2 /* var e2: Object */;
-/* Covariant cast for argument 0 (es) <p0:Collection[Object]> isa Collection[POSetConflictGraph#0] */
-/* <p0:Collection[Object]> isa Collection[POSetConflictGraph#0] */
+/* Covariant cast for argument 0 (es) <p0:Collection[Object]> isa Collection[E] */
+/* <p0:Collection[Object]> isa Collection[E] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectioncoloring__POSetConflictGraph_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1130,50 +1201,68 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[POSetConflictGraph#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 108);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 108);
 show_backtrace(1);
 }
 var_es = p0;
+var_ = var_es;
 {
-var1 = ((val* (*)(val*))(var_es->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_es) /* iterator on <var_es:Collection[Object]>*/;
+var1 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[Object]>*/;
 }
+var_2 = var1;
 for(;;) {
 {
-var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
+var3 = ((short int (*)(val*))(var_2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_2) /* is_ok on <var_2:Iterator[Object]>*/;
 }
-if(!var2) break;
+if (var3){
 {
-var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
+var4 = ((val* (*)(val*))(var_2->class->vft[COLOR_abstract_collection__Iterator__item]))(var_2) /* item on <var_2:Iterator[Object]>*/;
 }
-var_e1 = var3;
+var_e1 = var4;
+var_5 = var_es;
 {
-var4 = ((val* (*)(val*))(var_es->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_es) /* iterator on <var_es:Collection[Object]>*/;
+var6 = ((val* (*)(val*))(var_5->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_5) /* iterator on <var_5:Collection[Object]>*/;
 }
+var_7 = var6;
 for(;;) {
 {
-var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var4) /* is_ok on <var4:Iterator[nullable Object]>*/;
+var8 = ((short int (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_7) /* is_ok on <var_7:Iterator[Object]>*/;
 }
-if(!var5) break;
+if (var8){
 {
-var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__item]))(var4) /* item on <var4:Iterator[nullable Object]>*/;
+var9 = ((val* (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__item]))(var_7) /* item on <var_7:Iterator[Object]>*/;
 }
-var_e2 = var6;
+var_e2 = var9;
 {
 coloring__POSetConflictGraph__add_conflict(self, var_e1, var_e2); /* Direct call coloring#POSetConflictGraph#add_conflict on <self:POSetConflictGraph[Object]>*/
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__next]))(var4) /* next on <var4:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Iterator__next]))(var_7) /* next on <var_7:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
-CONTINUE_label7: (void)0;
 {
-((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_7) on <var_7:Iterator[Object]> */
+RET_LABEL10:(void)0;
+}
+}
+{
+((void (*)(val*))(var_2->class->vft[COLOR_abstract_collection__Iterator__next]))(var_2) /* next on <var_2:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label11;
+}
+}
+BREAK_label11: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_2) on <var_2:Iterator[Object]> */
+RET_LABEL12:(void)0;
 }
 }
-BREAK_label7: (void)0;
 RET_LABEL:;
 }
 /* method coloring#POSetConflictGraph#add_conflicts for (self: Object, Collection[Object]) */
@@ -1233,7 +1322,7 @@ RET_LABEL2:(void)0;
 }
 if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 162);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 162);
 show_backtrace(1);
 }
 {
@@ -1241,7 +1330,7 @@ show_backtrace(1);
 var6 = self->attrs[COLOR_coloring__POSetColorer___ids_cache].val; /* _ids_cache on <self:POSetColorer[Object]> */
 if (unlikely(var6 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ids_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 165);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 165);
 show_backtrace(1);
 }
 var4 = var6;
@@ -1269,7 +1358,7 @@ val* var1 /* : HashMap[Object, Int] */;
 var1 = self->attrs[COLOR_coloring__POSetColorer___ids_cache].val; /* _ids_cache on <self:POSetColorer[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ids_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 165);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 165);
 show_backtrace(1);
 }
 var = var1;
@@ -1285,7 +1374,7 @@ val* var3 /* : HashMap[Object, Int] */;
 var3 = self->attrs[COLOR_coloring__POSetColorer___ids_cache].val; /* _ids_cache on <self:Object(POSetColorer[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ids_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 165);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 165);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1311,7 +1400,7 @@ RET_LABEL2:(void)0;
 }
 if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 170);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 170);
 show_backtrace(1);
 }
 {
@@ -1319,7 +1408,7 @@ show_backtrace(1);
 var6 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
 if (unlikely(var6 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
 var4 = var6;
@@ -1347,7 +1436,7 @@ val* var1 /* : HashMap[Object, Int] */;
 var1 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
 var = var1;
@@ -1363,7 +1452,7 @@ val* var3 /* : HashMap[Object, Int] */;
 var3 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:Object(POSetColorer[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1380,7 +1469,7 @@ val* var1 /* : POSet[Object] */;
 var1 = self->attrs[COLOR_coloring__POSetColorer___poset_cache].val; /* _poset_cache on <self:POSetColorer[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 var = var1;
@@ -1396,7 +1485,7 @@ val* var3 /* : POSet[Object] */;
 var3 = self->attrs[COLOR_coloring__POSetColorer___poset_cache].val; /* _poset_cache on <self:Object(POSetColorer[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1413,8 +1502,8 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 const char* var_class_name;
-/* Covariant cast for argument 0 (poset_cache) <p0:POSet[Object]> isa POSet[POSetColorer#0] */
-/* <p0:POSet[Object]> isa POSet[POSetColorer#0] */
+/* Covariant cast for argument 0 (poset_cache) <p0:POSet[Object]> isa POSet[E] */
+/* <p0:POSet[Object]> isa POSet[E] */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1425,8 +1514,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetColorer___poset_cache].val = p0; /* _poset_cache on <self:POSetColorer[Object]> */
@@ -1440,8 +1529,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 { /* Inline coloring#POSetColorer#poset_cache= (self,p0) on <self:Object(POSetColorer[Object])> */
-/* Covariant cast for argument 0 (poset_cache) <p0:POSet[Object]> isa POSet[POSetColorer#0] */
-/* <p0:POSet[Object]> isa POSet[POSetColorer#0] */
+/* Covariant cast for argument 0 (poset_cache) <p0:POSet[Object]> isa POSet[E] */
+/* <p0:POSet[Object]> isa POSet[E] */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1452,8 +1541,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetColorer___poset_cache].val = p0; /* _poset_cache on <self:Object(POSetColorer[Object])> */
@@ -1477,7 +1566,7 @@ RET_LABEL2:(void)0;
 }
 if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 184);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 184);
 show_backtrace(1);
 }
 {
@@ -1485,7 +1574,7 @@ show_backtrace(1);
 var6 = self->attrs[COLOR_coloring__POSetColorer___conflicts_cache].val; /* _conflicts_cache on <self:POSetColorer[Object]> */
 if (unlikely(var6 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 187);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 187);
 show_backtrace(1);
 }
 var4 = var6;
@@ -1513,7 +1602,7 @@ val* var1 /* : Map[Object, Set[Object]] */;
 var1 = self->attrs[COLOR_coloring__POSetColorer___conflicts_cache].val; /* _conflicts_cache on <self:POSetColorer[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 187);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 187);
 show_backtrace(1);
 }
 var = var1;
@@ -1529,7 +1618,7 @@ val* var3 /* : Map[Object, Set[Object]] */;
 var3 = self->attrs[COLOR_coloring__POSetColorer___conflicts_cache].val; /* _conflicts_cache on <self:Object(POSetColorer[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 187);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 187);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1546,8 +1635,8 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 const char* var_class_name;
-/* Covariant cast for argument 0 (conflicts_cache) <p0:Map[Object, Set[Object]]> isa Map[POSetColorer#0, Set[POSetColorer#0]] */
-/* <p0:Map[Object, Set[Object]]> isa Map[POSetColorer#0, Set[POSetColorer#0]] */
+/* Covariant cast for argument 0 (conflicts_cache) <p0:Map[Object, Set[Object]]> isa Map[E, Set[E]] */
+/* <p0:Map[Object, Set[Object]]> isa Map[E, Set[E]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetColorer_FT0abstract_collection__Setcoloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1558,8 +1647,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetColorer#0, Set[POSetColorer#0]]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 187);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[E, Set[E]]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 187);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetColorer___conflicts_cache].val = p0; /* _conflicts_cache on <self:POSetColorer[Object]> */
@@ -1573,8 +1662,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 { /* Inline coloring#POSetColorer#conflicts_cache= (self,p0) on <self:Object(POSetColorer[Object])> */
-/* Covariant cast for argument 0 (conflicts_cache) <p0:Map[Object, Set[Object]]> isa Map[POSetColorer#0, Set[POSetColorer#0]] */
-/* <p0:Map[Object, Set[Object]]> isa Map[POSetColorer#0, Set[POSetColorer#0]] */
+/* Covariant cast for argument 0 (conflicts_cache) <p0:Map[Object, Set[Object]]> isa Map[E, Set[E]] */
+/* <p0:Map[Object, Set[Object]]> isa Map[E, Set[E]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetColorer_FT0abstract_collection__Setcoloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1585,8 +1674,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetColorer#0, Set[POSetColorer#0]]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 187);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[E, Set[E]]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 187);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetColorer___conflicts_cache].val = p0; /* _conflicts_cache on <self:Object(POSetColorer[Object])> */
@@ -1601,7 +1690,7 @@ val* var1 /* : POSetConflictGraph[Object] */;
 var1 = self->attrs[COLOR_coloring__POSetColorer___graph].val; /* _graph on <self:POSetColorer[Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _graph");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
 var = var1;
@@ -1617,7 +1706,7 @@ val* var3 /* : POSetConflictGraph[Object] */;
 var3 = self->attrs[COLOR_coloring__POSetColorer___graph].val; /* _graph on <self:Object(POSetColorer[Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _graph");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1634,8 +1723,8 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 const char* var_class_name;
-/* Covariant cast for argument 0 (graph) <p0:POSetConflictGraph[Object]> isa POSetConflictGraph[POSetColorer#0] */
-/* <p0:POSetConflictGraph[Object]> isa POSetConflictGraph[POSetColorer#0] */
+/* Covariant cast for argument 0 (graph) <p0:POSetConflictGraph[Object]> isa POSetConflictGraph[E] */
+/* <p0:POSetConflictGraph[Object]> isa POSetConflictGraph[E] */
 type_struct = self->type->resolution_table->types[COLOR_coloring__POSetConflictGraphcoloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1646,8 +1735,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetConflictGraph[POSetColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetConflictGraph[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetColorer___graph].val = p0; /* _graph on <self:POSetColorer[Object]> */
@@ -1661,8 +1750,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 { /* Inline coloring#POSetColorer#graph= (self,p0) on <self:Object(POSetColorer[Object])> */
-/* Covariant cast for argument 0 (graph) <p0:POSetConflictGraph[Object]> isa POSetConflictGraph[POSetColorer#0] */
-/* <p0:POSetConflictGraph[Object]> isa POSetConflictGraph[POSetColorer#0] */
+/* Covariant cast for argument 0 (graph) <p0:POSetConflictGraph[Object]> isa POSetConflictGraph[E] */
+/* <p0:POSetConflictGraph[Object]> isa POSetConflictGraph[E] */
 type_struct = self->type->resolution_table->types[COLOR_coloring__POSetConflictGraphcoloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1673,8 +1762,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetConflictGraph[POSetColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetConflictGraph[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetColorer___graph].val = p0; /* _graph on <self:Object(POSetColorer[Object])> */
@@ -1682,17 +1771,6 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method coloring#POSetColorer#init for (self: POSetColorer[Object]) */
-void coloring__POSetColorer__init(val* self) {
-RET_LABEL:;
-}
-/* method coloring#POSetColorer#init for (self: Object) */
-void VIRTUAL_coloring__POSetColorer__init(val* self) {
-{ /* Inline coloring#POSetColorer#init (self) on <self:Object(POSetColorer[Object])> */
-RET_LABEL1:(void)0;
-}
-RET_LABEL:;
-}
 /* method coloring#POSetColorer#colorize for (self: POSetColorer[Object], POSet[Object]) */
 void coloring__POSetColorer__colorize(val* self, val* p0) {
 short int var /* : Bool */;
@@ -1722,8 +1800,8 @@ int idtype23;
 const struct type* type_struct24;
 const char* var_class_name25;
 short int var26 /* : Bool */;
-/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[POSetColorer#0] */
-/* <p0:POSet[Object]> isa POSet[POSetColorer#0] */
+/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[E] */
+/* <p0:POSet[Object]> isa POSet[E] */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1734,15 +1812,15 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 193);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 191);
 show_backtrace(1);
 }
 var_poset = p0;
 {
 { /* Inline coloring#POSetColorer#poset_cache= (self,var_poset) on <self:POSetColorer[Object]> */
-/* Covariant cast for argument 0 (poset_cache) <var_poset:POSet[Object]> isa POSet[POSetColorer#0] */
-/* <var_poset:POSet[Object]> isa POSet[POSetColorer#0] */
+/* Covariant cast for argument 0 (poset_cache) <var_poset:POSet[Object]> isa POSet[E] */
+/* <var_poset:POSet[Object]> isa POSet[E] */
 type_struct5 = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetColorer_FT0];
 cltype3 = type_struct5->color;
 idtype4 = type_struct5->id;
@@ -1753,8 +1831,8 @@ var2 = var_poset->type->type_table[cltype3] == idtype4;
 }
 if (unlikely(!var2)) {
 var_class_name6 = var_poset == NULL ? "null" : var_poset->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetColorer#0]", var_class_name6);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[E]", var_class_name6);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetColorer___poset_cache].val = var_poset; /* _poset_cache on <self:POSetColorer[Object]> */
@@ -1767,8 +1845,8 @@ coloring__POSetConflictGraph__init(var7, var_poset); /* Direct call coloring#POS
 }
 {
 { /* Inline coloring#POSetColorer#graph= (self,var7) on <self:POSetColorer[Object]> */
-/* Covariant cast for argument 0 (graph) <var7:POSetConflictGraph[Object]> isa POSetConflictGraph[POSetColorer#0] */
-/* <var7:POSetConflictGraph[Object]> isa POSetConflictGraph[POSetColorer#0] */
+/* Covariant cast for argument 0 (graph) <var7:POSetConflictGraph[Object]> isa POSetConflictGraph[E] */
+/* <var7:POSetConflictGraph[Object]> isa POSetConflictGraph[E] */
 type_struct12 = self->type->resolution_table->types[COLOR_coloring__POSetConflictGraphcoloring__POSetColorer_FT0];
 cltype10 = type_struct12->color;
 idtype11 = type_struct12->id;
@@ -1779,8 +1857,8 @@ var9 = var7->type->type_table[cltype10] == idtype11;
 }
 if (unlikely(!var9)) {
 var_class_name13 = var7 == NULL ? "null" : var7->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetConflictGraph[POSetColorer#0]", var_class_name13);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetConflictGraph[E]", var_class_name13);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetColorer___graph].val = var7; /* _graph on <self:POSetColorer[Object]> */
@@ -1798,7 +1876,7 @@ coloring__POSetColorer__compute_colors(self); /* Direct call coloring#POSetColor
 var16 = self->attrs[COLOR_coloring__POSetColorer___graph].val; /* _graph on <self:POSetColorer[Object]> */
 if (unlikely(var16 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _graph");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
 var14 = var16;
@@ -1810,7 +1888,7 @@ RET_LABEL15:(void)0;
 var19 = var14->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <var14:POSetConflictGraph[Object]> */
 if (unlikely(var19 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
 var17 = var19;
@@ -1819,8 +1897,8 @@ RET_LABEL18:(void)0;
 }
 {
 { /* Inline coloring#POSetColorer#conflicts_cache= (self,var17) on <self:POSetColorer[Object]> */
-/* Covariant cast for argument 0 (conflicts_cache) <var17:HashMap[Object, Set[Object]]> isa Map[POSetColorer#0, Set[POSetColorer#0]] */
-/* <var17:HashMap[Object, Set[Object]]> isa Map[POSetColorer#0, Set[POSetColorer#0]] */
+/* Covariant cast for argument 0 (conflicts_cache) <var17:HashMap[Object, Set[Object]]> isa Map[E, Set[E]] */
+/* <var17:HashMap[Object, Set[Object]]> isa Map[E, Set[E]] */
 type_struct24 = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetColorer_FT0abstract_collection__Setcoloring__POSetColorer_FT0];
 cltype22 = type_struct24->color;
 idtype23 = type_struct24->id;
@@ -1831,8 +1909,8 @@ var21 = var17->type->type_table[cltype22] == idtype23;
 }
 if (unlikely(!var21)) {
 var_class_name25 = var17 == NULL ? "null" : var17->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetColorer#0, Set[POSetColorer#0]]", var_class_name25);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 187);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[E, Set[E]]", var_class_name25);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 187);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetColorer___conflicts_cache].val = var17; /* _conflicts_cache on <self:POSetColorer[Object]> */
@@ -1865,22 +1943,24 @@ val* var_elements /* var elements: HashSet[Object] */;
 val* var8 /* : POSet[Object] */;
 val* var10 /* : POSet[Object] */;
 val* var11 /* : Array[Object] */;
+val* var_ /* var : Array[Object] */;
 val* var12 /* : ArrayIterator[nullable Object] */;
-short int var13 /* : Bool */;
-val* var14 /* : nullable Object */;
+val* var_13 /* var : ArrayIterator[Object] */;
+short int var14 /* : Bool */;
+val* var15 /* : nullable Object */;
 val* var_e /* var e: Object */;
-val* var15 /* : HashMap[Object, Int] */;
-val* var17 /* : HashMap[Object, Int] */;
+val* var16 /* : HashMap[Object, Int] */;
 val* var18 /* : HashMap[Object, Int] */;
-val* var20 /* : HashMap[Object, Int] */;
-long var21 /* : Int */;
-val* var22 /* : nullable Object */;
+val* var19 /* : HashMap[Object, Int] */;
+val* var21 /* : HashMap[Object, Int] */;
+long var22 /* : Int */;
+val* var23 /* : nullable Object */;
 {
 { /* Inline coloring#POSetColorer#ids_cache (self) on <self:POSetColorer[Object]> */
 var2 = self->attrs[COLOR_coloring__POSetColorer___ids_cache].val; /* _ids_cache on <self:POSetColorer[Object]> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ids_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 165);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 165);
 show_backtrace(1);
 }
 var = var2;
@@ -1896,7 +1976,7 @@ var3 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_ha
 var6 = self->attrs[COLOR_coloring__POSetColorer___poset_cache].val; /* _poset_cache on <self:POSetColorer[Object]> */
 if (unlikely(var6 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 var4 = var6;
@@ -1915,7 +1995,7 @@ var_elements = var3;
 var10 = self->attrs[COLOR_coloring__POSetColorer___poset_cache].val; /* _poset_cache on <self:POSetColorer[Object]> */
 if (unlikely(var10 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 var8 = var10;
@@ -1925,55 +2005,64 @@ RET_LABEL9:(void)0;
 {
 var11 = poset__POSet__linearize(var8, var_elements);
 }
+var_ = var11;
 {
-var12 = array__AbstractArrayRead__iterator(var11);
+var12 = array__AbstractArrayRead__iterator(var_);
 }
+var_13 = var12;
 for(;;) {
 {
-var13 = array__ArrayIterator__is_ok(var12);
+var14 = array__ArrayIterator__is_ok(var_13);
 }
-if(!var13) break;
+if (var14){
 {
-var14 = array__ArrayIterator__item(var12);
+var15 = array__ArrayIterator__item(var_13);
 }
-var_e = var14;
+var_e = var15;
 {
 { /* Inline coloring#POSetColorer#ids_cache (self) on <self:POSetColorer[Object]> */
-var17 = self->attrs[COLOR_coloring__POSetColorer___ids_cache].val; /* _ids_cache on <self:POSetColorer[Object]> */
-if (unlikely(var17 == NULL)) {
+var18 = self->attrs[COLOR_coloring__POSetColorer___ids_cache].val; /* _ids_cache on <self:POSetColorer[Object]> */
+if (unlikely(var18 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ids_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 165);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 165);
 show_backtrace(1);
 }
-var15 = var17;
-RET_LABEL16:(void)0;
+var16 = var18;
+RET_LABEL17:(void)0;
 }
 }
 {
 { /* Inline coloring#POSetColorer#ids_cache (self) on <self:POSetColorer[Object]> */
-var20 = self->attrs[COLOR_coloring__POSetColorer___ids_cache].val; /* _ids_cache on <self:POSetColorer[Object]> */
-if (unlikely(var20 == NULL)) {
+var21 = self->attrs[COLOR_coloring__POSetColorer___ids_cache].val; /* _ids_cache on <self:POSetColorer[Object]> */
+if (unlikely(var21 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ids_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 165);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 165);
 show_backtrace(1);
 }
-var18 = var20;
-RET_LABEL19:(void)0;
+var19 = var21;
+RET_LABEL20:(void)0;
 }
 }
 {
-var21 = hash_collection__HashMap__length(var18);
+var22 = hash_collection__HashMap__length(var19);
 }
 {
-var22 = BOX_kernel__Int(var21); /* autobox from Int to nullable Object */
-hash_collection__HashMap___91d_93d_61d(var15, var_e, var22); /* Direct call hash_collection#HashMap#[]= on <var15:HashMap[Object, Int]>*/
+var23 = BOX_kernel__Int(var22); /* autobox from Int to nullable Object */
+hash_collection__HashMap___91d_93d_61d(var16, var_e, var23); /* Direct call hash_collection#HashMap#[]= on <var16:HashMap[Object, Int]>*/
 }
-CONTINUE_label: (void)0;
 {
-array__ArrayIterator__next(var12); /* Direct call array#ArrayIterator#next on <var12:ArrayIterator[nullable Object]>*/
+array__ArrayIterator__next(var_13); /* Direct call array#ArrayIterator#next on <var_13:ArrayIterator[Object]>*/
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_13) on <var_13:ArrayIterator[Object]> */
+RET_LABEL24:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method coloring#POSetColorer#allocate_ids for (self: Object) */
@@ -1998,7 +2087,7 @@ val* var14 /* : HashSet[Object] */;
 var2 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
 var = var2;
@@ -2016,7 +2105,7 @@ coloring__POSetColorer__colorize_core(self); /* Direct call coloring#POSetColore
 var5 = self->attrs[COLOR_coloring__POSetColorer___graph].val; /* _graph on <self:POSetColorer[Object]> */
 if (unlikely(var5 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _graph");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
 var3 = var5;
@@ -2028,7 +2117,7 @@ RET_LABEL4:(void)0;
 var8 = var3->attrs[COLOR_coloring__POSetConflictGraph___border].val; /* _border on <var3:POSetConflictGraph[Object]> */
 if (unlikely(var8 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _border");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 28);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 28);
 show_backtrace(1);
 }
 var6 = var8;
@@ -2043,7 +2132,7 @@ coloring__POSetColorer__colorize_set(self, var6); /* Direct call coloring#POSetC
 var11 = self->attrs[COLOR_coloring__POSetColorer___graph].val; /* _graph on <self:POSetColorer[Object]> */
 if (unlikely(var11 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _graph");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
 var9 = var11;
@@ -2055,7 +2144,7 @@ RET_LABEL10:(void)0;
 var14 = var9->attrs[COLOR_coloring__POSetConflictGraph___crown].val; /* _crown on <var9:POSetConflictGraph[Object]> */
 if (unlikely(var14 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _crown");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 34);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 34);
 show_backtrace(1);
 }
 var12 = var14;
@@ -2081,36 +2170,38 @@ val* var5 /* : POSetConflictGraph[Object] */;
 val* var6 /* : HashSet[Object] */;
 val* var8 /* : HashSet[Object] */;
 val* var9 /* : Array[Object] */;
+val* var_ /* var : Array[Object] */;
 val* var10 /* : ArrayIterator[nullable Object] */;
-short int var11 /* : Bool */;
-val* var12 /* : nullable Object */;
+val* var_11 /* var : ArrayIterator[Object] */;
+short int var12 /* : Bool */;
+val* var13 /* : nullable Object */;
 val* var_e /* var e: Object */;
-long var13 /* : Int */;
+long var14 /* : Int */;
 long var_color /* var color: Int */;
-val* var14 /* : POSetConflictGraph[Object] */;
-val* var16 /* : POSetConflictGraph[Object] */;
-val* var17 /* : HashMap[Object, Set[Object]] */;
-val* var19 /* : HashMap[Object, Set[Object]] */;
-val* var20 /* : nullable Object */;
+val* var15 /* : POSetConflictGraph[Object] */;
+val* var17 /* : POSetConflictGraph[Object] */;
+val* var18 /* : HashMap[Object, Set[Object]] */;
+val* var20 /* : HashMap[Object, Set[Object]] */;
+val* var21 /* : nullable Object */;
 val* var_conflicts /* var conflicts: Set[Object] */;
-short int var21 /* : Bool */;
 short int var22 /* : Bool */;
-long var23 /* : Int */;
+short int var23 /* : Bool */;
 long var24 /* : Int */;
-short int var26 /* : Bool */;
+long var25 /* : Int */;
+short int var27 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-long var27 /* : Int */;
-val* var28 /* : HashMap[Object, Int] */;
-val* var30 /* : HashMap[Object, Int] */;
-val* var31 /* : nullable Object */;
+long var28 /* : Int */;
+val* var29 /* : HashMap[Object, Int] */;
+val* var31 /* : HashMap[Object, Int] */;
+val* var32 /* : nullable Object */;
 {
 { /* Inline coloring#POSetColorer#poset_cache (self) on <self:POSetColorer[Object]> */
 var2 = self->attrs[COLOR_coloring__POSetColorer___poset_cache].val; /* _poset_cache on <self:POSetColorer[Object]> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 var = var2;
@@ -2122,7 +2213,7 @@ RET_LABEL1:(void)0;
 var5 = self->attrs[COLOR_coloring__POSetColorer___graph].val; /* _graph on <self:POSetColorer[Object]> */
 if (unlikely(var5 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _graph");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
 var3 = var5;
@@ -2134,7 +2225,7 @@ RET_LABEL4:(void)0;
 var8 = var3->attrs[COLOR_coloring__POSetConflictGraph___core].val; /* _core on <var3:POSetConflictGraph[Object]> */
 if (unlikely(var8 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _core");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 22);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 22);
 show_backtrace(1);
 }
 var6 = var8;
@@ -2144,100 +2235,111 @@ RET_LABEL7:(void)0;
 {
 var9 = poset__POSet__linearize(var, var6);
 }
+var_ = var9;
 {
-var10 = array__AbstractArrayRead__iterator(var9);
+var10 = array__AbstractArrayRead__iterator(var_);
 }
+var_11 = var10;
 for(;;) {
 {
-var11 = array__ArrayIterator__is_ok(var10);
+var12 = array__ArrayIterator__is_ok(var_11);
 }
-if(!var11) break;
+if (var12){
 {
-var12 = array__ArrayIterator__item(var10);
+var13 = array__ArrayIterator__item(var_11);
 }
-var_e = var12;
+var_e = var13;
 {
-var13 = coloring__POSetColorer__min_color(self, var_e);
+var14 = coloring__POSetColorer__min_color(self, var_e);
 }
-var_color = var13;
+var_color = var14;
 {
 { /* Inline coloring#POSetColorer#graph (self) on <self:POSetColorer[Object]> */
-var16 = self->attrs[COLOR_coloring__POSetColorer___graph].val; /* _graph on <self:POSetColorer[Object]> */
-if (unlikely(var16 == NULL)) {
+var17 = self->attrs[COLOR_coloring__POSetColorer___graph].val; /* _graph on <self:POSetColorer[Object]> */
+if (unlikely(var17 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _graph");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 189);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 189);
 show_backtrace(1);
 }
-var14 = var16;
-RET_LABEL15:(void)0;
+var15 = var17;
+RET_LABEL16:(void)0;
 }
 }
 {
-{ /* Inline coloring#POSetConflictGraph#conflicts (var14) on <var14:POSetConflictGraph[Object]> */
-var19 = var14->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <var14:POSetConflictGraph[Object]> */
-if (unlikely(var19 == NULL)) {
+{ /* Inline coloring#POSetConflictGraph#conflicts (var15) on <var15:POSetConflictGraph[Object]> */
+var20 = var15->attrs[COLOR_coloring__POSetConflictGraph___conflicts].val; /* _conflicts on <var15:POSetConflictGraph[Object]> */
+if (unlikely(var20 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 40);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 40);
 show_backtrace(1);
 }
-var17 = var19;
-RET_LABEL18:(void)0;
+var18 = var20;
+RET_LABEL19:(void)0;
 }
 }
 {
-var20 = hash_collection__HashMap___91d_93d(var17, var_e);
+var21 = hash_collection__HashMap___91d_93d(var18, var_e);
 }
-var_conflicts = var20;
+var_conflicts = var21;
 for(;;) {
 {
-var21 = coloring__POSetColorer__is_color_free(self, var_color, var_conflicts);
+var22 = coloring__POSetColorer__is_color_free(self, var_color, var_conflicts);
 }
-var22 = !var21;
-if (!var22) break;
-var23 = 1;
+var23 = !var22;
+if (var23){
+var24 = 1;
 {
-{ /* Inline kernel#Int#+ (var_color,var23) on <var_color:Int> */
-/* Covariant cast for argument 0 (i) <var23:Int> isa OTHER */
-/* <var23:Int> isa OTHER */
-var26 = 1; /* easy <var23:Int> isa OTHER*/
-if (unlikely(!var26)) {
+{ /* Inline kernel#Int#+ (var_color,var24) on <var_color:Int> */
+/* Covariant cast for argument 0 (i) <var24:Int> isa OTHER */
+/* <var24:Int> isa OTHER */
+var27 = 1; /* easy <var24:Int> isa OTHER*/
+if (unlikely(!var27)) {
 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", 328);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
-var27 = var_color + var23;
-var24 = var27;
-goto RET_LABEL25;
-RET_LABEL25:(void)0;
+var28 = var_color + var24;
+var25 = var28;
+goto RET_LABEL26;
+RET_LABEL26:(void)0;
 }
 }
-var_color = var24;
-CONTINUE_label: (void)0;
+var_color = var25;
+} else {
+goto BREAK_label;
+}
 }
 BREAK_label: (void)0;
 {
 { /* Inline coloring#POSetColorer#colors_cache (self) on <self:POSetColorer[Object]> */
-var30 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
-if (unlikely(var30 == NULL)) {
+var31 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
+if (unlikely(var31 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
-var28 = var30;
-RET_LABEL29:(void)0;
+var29 = var31;
+RET_LABEL30:(void)0;
 }
 }
 {
-var31 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
-hash_collection__HashMap___91d_93d_61d(var28, var_e, var31); /* Direct call hash_collection#HashMap#[]= on <var28:HashMap[Object, Int]>*/
+var32 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
+hash_collection__HashMap___91d_93d_61d(var29, var_e, var32); /* Direct call hash_collection#HashMap#[]= on <var29:HashMap[Object, Int]>*/
 }
-CONTINUE_label32: (void)0;
 {
-array__ArrayIterator__next(var10); /* Direct call array#ArrayIterator#next on <var10:ArrayIterator[nullable Object]>*/
+array__ArrayIterator__next(var_11); /* Direct call array#ArrayIterator#next on <var_11:ArrayIterator[Object]>*/
+}
+} else {
+goto BREAK_label33;
+}
+}
+BREAK_label33: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:ArrayIterator[Object]> */
+RET_LABEL34:(void)0;
 }
 }
-BREAK_label32: (void)0;
 RET_LABEL:;
 }
 /* method coloring#POSetColorer#colorize_core for (self: Object) */
@@ -2256,16 +2358,18 @@ val* var_set /* var set: Set[Object] */;
 val* var1 /* : POSet[Object] */;
 val* var3 /* : POSet[Object] */;
 val* var4 /* : Array[Object] */;
+val* var_ /* var : Array[Object] */;
 val* var5 /* : ArrayIterator[nullable Object] */;
-short int var6 /* : Bool */;
-val* var7 /* : nullable Object */;
+val* var_6 /* var : ArrayIterator[Object] */;
+short int var7 /* : Bool */;
+val* var8 /* : nullable Object */;
 val* var_e /* var e: Object */;
-val* var8 /* : HashMap[Object, Int] */;
-val* var10 /* : HashMap[Object, Int] */;
-long var11 /* : Int */;
-val* var12 /* : nullable Object */;
-/* Covariant cast for argument 0 (set) <p0:Set[Object]> isa Set[POSetColorer#0] */
-/* <p0:Set[Object]> isa Set[POSetColorer#0] */
+val* var9 /* : HashMap[Object, Int] */;
+val* var11 /* : HashMap[Object, Int] */;
+long var12 /* : Int */;
+val* var13 /* : nullable Object */;
+/* Covariant cast for argument 0 (set) <p0:Set[Object]> isa Set[E] */
+/* <p0:Set[Object]> isa Set[E] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setcoloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2276,8 +2380,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[POSetColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 233);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 231);
 show_backtrace(1);
 }
 var_set = p0;
@@ -2286,7 +2390,7 @@ var_set = p0;
 var3 = self->attrs[COLOR_coloring__POSetColorer___poset_cache].val; /* _poset_cache on <self:POSetColorer[Object]> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 var1 = var3;
@@ -2296,43 +2400,52 @@ RET_LABEL2:(void)0;
 {
 var4 = poset__POSet__linearize(var1, var_set);
 }
+var_ = var4;
 {
-var5 = array__AbstractArrayRead__iterator(var4);
+var5 = array__AbstractArrayRead__iterator(var_);
 }
+var_6 = var5;
 for(;;) {
 {
-var6 = array__ArrayIterator__is_ok(var5);
+var7 = array__ArrayIterator__is_ok(var_6);
 }
-if(!var6) break;
+if (var7){
 {
-var7 = array__ArrayIterator__item(var5);
+var8 = array__ArrayIterator__item(var_6);
 }
-var_e = var7;
+var_e = var8;
 {
 { /* Inline coloring#POSetColorer#colors_cache (self) on <self:POSetColorer[Object]> */
-var10 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
-if (unlikely(var10 == NULL)) {
+var11 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
+if (unlikely(var11 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
-var8 = var10;
-RET_LABEL9:(void)0;
+var9 = var11;
+RET_LABEL10:(void)0;
 }
 }
 {
-var11 = coloring__POSetColorer__min_color(self, var_e);
+var12 = coloring__POSetColorer__min_color(self, var_e);
 }
 {
-var12 = BOX_kernel__Int(var11); /* autobox from Int to nullable Object */
-hash_collection__HashMap___91d_93d_61d(var8, var_e, var12); /* Direct call hash_collection#HashMap#[]= on <var8:HashMap[Object, Int]>*/
+var13 = BOX_kernel__Int(var12); /* autobox from Int to nullable Object */
+hash_collection__HashMap___91d_93d_61d(var9, var_e, var13); /* Direct call hash_collection#HashMap#[]= on <var9:HashMap[Object, Int]>*/
 }
-CONTINUE_label: (void)0;
 {
-array__ArrayIterator__next(var5); /* Direct call array#ArrayIterator#next on <var5:ArrayIterator[nullable Object]>*/
+array__ArrayIterator__next(var_6); /* Direct call array#ArrayIterator#next on <var_6:ArrayIterator[Object]>*/
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_6) on <var_6:ArrayIterator[Object]> */
+RET_LABEL14:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method coloring#POSetColorer#colorize_set for (self: Object, Set[Object]) */
@@ -2357,34 +2470,36 @@ val* var6 /* : POSet[Object] */;
 val* var8 /* : POSet[Object] */;
 val* var9 /* : POSetElement[Object] */;
 val* var10 /* : Collection[Object] */;
+val* var_ /* var : Collection[Object] */;
 val* var11 /* : Iterator[nullable Object] */;
-short int var12 /* : Bool */;
-val* var13 /* : nullable Object */;
+val* var_12 /* var : Iterator[Object] */;
+short int var13 /* : Bool */;
+val* var14 /* : nullable Object */;
 val* var_p /* var p: Object */;
-val* var14 /* : HashMap[Object, Int] */;
-val* var16 /* : HashMap[Object, Int] */;
-short int var17 /* : Bool */;
+val* var15 /* : HashMap[Object, Int] */;
+val* var17 /* : HashMap[Object, Int] */;
 short int var18 /* : Bool */;
-val* var19 /* : HashMap[Object, Int] */;
-val* var21 /* : HashMap[Object, Int] */;
-val* var22 /* : nullable Object */;
-long var23 /* : Int */;
+short int var19 /* : Bool */;
+val* var20 /* : HashMap[Object, Int] */;
+val* var22 /* : HashMap[Object, Int] */;
+val* var23 /* : nullable Object */;
+long var24 /* : Int */;
 long var_color /* var color: Int */;
-short int var24 /* : Bool */;
-short int var26 /* : Bool */;
-int cltype27;
-int idtype28;
-const char* var_class_name29;
-short int var30 /* : Bool */;
-long var31 /* : Int */;
-long var32 /* : Int */;
-short int var34 /* : Bool */;
-int cltype35;
-int idtype36;
-const char* var_class_name37;
-long var38 /* : Int */;
-/* Covariant cast for argument 0 (e) <p0:Object> isa POSetColorer#0 */
-/* <p0:Object> isa POSetColorer#0 */
+short int var25 /* : Bool */;
+short int var27 /* : Bool */;
+int cltype28;
+int idtype29;
+const char* var_class_name30;
+short int var31 /* : Bool */;
+long var34 /* : Int */;
+long var35 /* : Int */;
+short int var37 /* : Bool */;
+int cltype38;
+int idtype39;
+const char* var_class_name40;
+long var41 /* : Int */;
+/* Covariant cast for argument 0 (e) <p0:Object> isa E */
+/* <p0:Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_coloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2395,8 +2510,8 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetColorer#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 238);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 236);
 show_backtrace(1);
 }
 var_e = p0;
@@ -2415,7 +2530,7 @@ var_max_color = var3;
 var8 = self->attrs[COLOR_coloring__POSetColorer___poset_cache].val; /* _poset_cache on <self:POSetColorer[Object]> */
 if (unlikely(var8 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 180);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 180);
 show_backtrace(1);
 }
 var6 = var8;
@@ -2428,101 +2543,111 @@ var9 = poset__POSet___91d_93d(var6, var_e);
 {
 var10 = poset__POSetElement__direct_greaters(var9);
 }
+var_ = var10;
 {
-var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_collection__Collection__iterator]))(var10) /* iterator on <var10:Collection[Object]>*/;
+var11 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[Object]>*/;
 }
+var_12 = var11;
 for(;;) {
 {
-var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var11) /* is_ok on <var11:Iterator[nullable Object]>*/;
+var13 = ((short int (*)(val*))(var_12->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_12) /* is_ok on <var_12:Iterator[Object]>*/;
 }
-if(!var12) break;
+if (var13){
 {
-var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__item]))(var11) /* item on <var11:Iterator[nullable Object]>*/;
+var14 = ((val* (*)(val*))(var_12->class->vft[COLOR_abstract_collection__Iterator__item]))(var_12) /* item on <var_12:Iterator[Object]>*/;
 }
-var_p = var13;
+var_p = var14;
 {
 { /* Inline coloring#POSetColorer#colors_cache (self) on <self:POSetColorer[Object]> */
-var16 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
-if (unlikely(var16 == NULL)) {
+var17 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
+if (unlikely(var17 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
-var14 = var16;
-RET_LABEL15:(void)0;
+var15 = var17;
+RET_LABEL16:(void)0;
 }
 }
 {
-var17 = abstract_collection__MapRead__has_key(var14, var_p);
+var18 = abstract_collection__MapRead__has_key(var15, var_p);
 }
-var18 = !var17;
-if (var18){
-goto CONTINUE_label;
+var19 = !var18;
+if (var19){
+goto BREAK_label;
 } else {
 }
 {
 { /* Inline coloring#POSetColorer#colors_cache (self) on <self:POSetColorer[Object]> */
-var21 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
-if (unlikely(var21 == NULL)) {
+var22 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
+if (unlikely(var22 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
-var19 = var21;
-RET_LABEL20:(void)0;
+var20 = var22;
+RET_LABEL21:(void)0;
 }
 }
 {
-var22 = hash_collection__HashMap___91d_93d(var19, var_p);
+var23 = hash_collection__HashMap___91d_93d(var20, var_p);
 }
-var23 = ((struct instance_kernel__Int*)var22)->value; /* autounbox from nullable Object to Int */;
-var_color = var23;
+var24 = ((struct instance_kernel__Int*)var23)->value; /* autounbox from nullable Object to Int */;
+var_color = var24;
 {
 { /* Inline kernel#Int#> (var_color,var_max_color) on <var_color:Int> */
 /* Covariant cast for argument 0 (i) <var_max_color:Int> isa OTHER */
 /* <var_max_color:Int> isa OTHER */
-var26 = 1; /* easy <var_max_color:Int> isa OTHER*/
-if (unlikely(!var26)) {
-var_class_name29 = type_kernel__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name29);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 327);
+var27 = 1; /* easy <var_max_color:Int> isa OTHER*/
+if (unlikely(!var27)) {
+var_class_name30 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name30);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
 show_backtrace(1);
 }
-var30 = var_color > var_max_color;
-var24 = var30;
-goto RET_LABEL25;
-RET_LABEL25:(void)0;
+var31 = var_color > var_max_color;
+var25 = var31;
+goto RET_LABEL26;
+RET_LABEL26:(void)0;
 }
 }
-if (var24){
+if (var25){
 var_max_color = var_color;
 } else {
 }
-CONTINUE_label: (void)0;
+BREAK_label: (void)0;
 {
-((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__next]))(var11) /* next on <var11:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_12->class->vft[COLOR_abstract_collection__Iterator__next]))(var_12) /* next on <var_12:Iterator[Object]>*/;
 }
+} else {
+goto BREAK_label32;
 }
-BREAK_label: (void)0;
-var31 = 1;
+}
+BREAK_label32: (void)0;
 {
-{ /* Inline kernel#Int#+ (var_max_color,var31) on <var_max_color:Int> */
-/* Covariant cast for argument 0 (i) <var31:Int> isa OTHER */
-/* <var31:Int> isa OTHER */
-var34 = 1; /* easy <var31:Int> isa OTHER*/
-if (unlikely(!var34)) {
-var_class_name37 = type_kernel__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name37);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
+{ /* Inline abstract_collection#Iterator#finish (var_12) on <var_12:Iterator[Object]> */
+RET_LABEL33:(void)0;
+}
+}
+var34 = 1;
+{
+{ /* Inline kernel#Int#+ (var_max_color,var34) on <var_max_color:Int> */
+/* Covariant cast for argument 0 (i) <var34:Int> isa OTHER */
+/* <var34:Int> isa OTHER */
+var37 = 1; /* easy <var34:Int> isa OTHER*/
+if (unlikely(!var37)) {
+var_class_name40 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name40);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
-var38 = var_max_color + var31;
-var32 = var38;
-goto RET_LABEL33;
-RET_LABEL33:(void)0;
+var41 = var_max_color + var34;
+var35 = var41;
+goto RET_LABEL36;
+RET_LABEL36:(void)0;
 }
 }
-var = var32;
+var = var35;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -2546,26 +2671,28 @@ const struct type* type_struct;
 const char* var_class_name;
 long var_color /* var color: Int */;
 val* var_set /* var set: Collection[Object] */;
+val* var_ /* var : Collection[Object] */;
 val* var2 /* : Iterator[nullable Object] */;
-short int var3 /* : Bool */;
-val* var4 /* : nullable Object */;
+val* var_3 /* var : Iterator[Object] */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable Object */;
 val* var_e /* var e: Object */;
-short int var5 /* : Bool */;
-val* var6 /* : HashMap[Object, Int] */;
-val* var8 /* : HashMap[Object, Int] */;
-short int var9 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var10 /* : HashMap[Object, Int] */;
+short int var6 /* : Bool */;
+val* var7 /* : HashMap[Object, Int] */;
+val* var9 /* : HashMap[Object, Int] */;
+short int var10 /* : Bool */;
+short int var_11 /* var : Bool */;
 val* var12 /* : HashMap[Object, Int] */;
-val* var13 /* : nullable Object */;
-short int var14 /* : Bool */;
-short int var15 /* : Bool */;
+val* var14 /* : HashMap[Object, Int] */;
+val* var15 /* : nullable Object */;
+short int var16 /* : Bool */;
 short int var17 /* : Bool */;
-long var18 /* : Int */;
 short int var19 /* : Bool */;
-short int var20 /* : Bool */;
-/* Covariant cast for argument 1 (set) <p1:Collection[Object]> isa Collection[POSetColorer#0] */
-/* <p1:Collection[Object]> isa Collection[POSetColorer#0] */
+long var20 /* : Int */;
+short int var21 /* : Bool */;
+short int var23 /* : Bool */;
+/* Covariant cast for argument 1 (set) <p1:Collection[Object]> isa Collection[E] */
+/* <p1:Collection[Object]> isa Collection[E] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectioncoloring__POSetColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2576,87 +2703,96 @@ var1 = p1->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var1)) {
 var_class_name = p1 == NULL ? "null" : p1->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[POSetColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 249);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 247);
 show_backtrace(1);
 }
 var_color = p0;
 var_set = p1;
+var_ = var_set;
 {
-var2 = ((val* (*)(val*))(var_set->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_set) /* iterator on <var_set:Collection[Object]>*/;
+var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[Object]>*/;
 }
+var_3 = var2;
 for(;;) {
 {
-var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
+var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[Object]>*/;
 }
-if(!var3) break;
+if (var4){
 {
-var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
+var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[Object]>*/;
 }
-var_e = var4;
+var_e = var5;
 {
 { /* Inline coloring#POSetColorer#colors_cache (self) on <self:POSetColorer[Object]> */
-var8 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
-if (unlikely(var8 == NULL)) {
+var9 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
+if (unlikely(var9 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
-var6 = var8;
-RET_LABEL7:(void)0;
+var7 = var9;
+RET_LABEL8:(void)0;
 }
 }
 {
-var9 = abstract_collection__MapRead__has_key(var6, var_e);
+var10 = abstract_collection__MapRead__has_key(var7, var_e);
 }
-var_ = var9;
-if (var9){
+var_11 = var10;
+if (var10){
 {
 { /* Inline coloring#POSetColorer#colors_cache (self) on <self:POSetColorer[Object]> */
-var12 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
-if (unlikely(var12 == NULL)) {
+var14 = self->attrs[COLOR_coloring__POSetColorer___colors_cache].val; /* _colors_cache on <self:POSetColorer[Object]> */
+if (unlikely(var14 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors_cache");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 173);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 173);
 show_backtrace(1);
 }
-var10 = var12;
-RET_LABEL11:(void)0;
+var12 = var14;
+RET_LABEL13:(void)0;
 }
 }
 {
-var13 = hash_collection__HashMap___91d_93d(var10, var_e);
+var15 = hash_collection__HashMap___91d_93d(var12, var_e);
 }
 {
-{ /* Inline kernel#Int#== (var13,var_color) on <var13:nullable Object(Int)> */
-var17 = (var13 != NULL) && (var13->class == &class_kernel__Int);
-if (var17) {
-var18 = ((struct instance_kernel__Int*)var13)->value; /* autounbox from nullable Object to Int */;
-var17 = (var18 == var_color);
+{ /* Inline kernel#Int#== (var15,var_color) on <var15:nullable Object(Int)> */
+var19 = (var15 != NULL) && (var15->class == &class_kernel__Int);
+if (var19) {
+var20 = ((struct instance_kernel__Int*)var15)->value; /* autounbox from nullable Object to Int */;
+var19 = (var20 == var_color);
 }
-var15 = var17;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
+var17 = var19;
+goto RET_LABEL18;
+RET_LABEL18:(void)0;
 }
-var14 = var15;
+var16 = var17;
 }
-var5 = var14;
+var6 = var16;
 } else {
-var5 = var_;
+var6 = var_11;
 }
-if (var5){
-var19 = 0;
-var = var19;
+if (var6){
+var21 = 0;
+var = var21;
 goto RET_LABEL;
 } else {
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
-var20 = 1;
-var = var20;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[Object]> */
+RET_LABEL22:(void)0;
+}
+}
+var23 = 1;
+var = var23;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -2677,7 +2813,7 @@ val* var1 /* : HashMap[Object, Int] */;
 var1 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 281);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 279);
 show_backtrace(1);
 }
 var = var1;
@@ -2693,7 +2829,7 @@ val* var3 /* : HashMap[Object, Int] */;
 var3 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:Object(BucketsColorer[Object, Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 281);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 279);
 show_backtrace(1);
 }
 var1 = var3;
@@ -2710,7 +2846,7 @@ val* var1 /* : HashMap[Object, Set[Object]] */;
 var1 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
 var = var1;
@@ -2726,7 +2862,7 @@ val* var3 /* : HashMap[Object, Set[Object]] */;
 var3 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:Object(BucketsColorer[Object, Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
 var1 = var3;
@@ -2736,17 +2872,6 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method coloring#BucketsColorer#init for (self: BucketsColorer[Object, Object]) */
-void coloring__BucketsColorer__init(val* self) {
-RET_LABEL:;
-}
-/* method coloring#BucketsColorer#init for (self: Object) */
-void VIRTUAL_coloring__BucketsColorer__init(val* self) {
-{ /* Inline coloring#BucketsColorer#init (self) on <self:Object(BucketsColorer[Object, Object])> */
-RET_LABEL1:(void)0;
-}
-RET_LABEL:;
-}
 /* method coloring#BucketsColorer#colorize for (self: BucketsColorer[Object, Object], Map[Object, Set[Object]]): Map[Object, Int] */
 val* coloring__BucketsColorer__colorize(val* self, val* p0) {
 val* var /* : Map[Object, Int] */;
@@ -2758,36 +2883,40 @@ const char* var_class_name;
 val* var_buckets /* var buckets: Map[Object, Set[Object]] */;
 long var2 /* : Int */;
 long var_min_color /* var min_color: Int */;
+val* var_ /* var : Map[Object, Set[Object]] */;
 val* var3 /* : MapIterator[Object, nullable Object] */;
-short int var4 /* : Bool */;
-val* var5 /* : Object */;
+val* var_4 /* var : MapIterator[Object, Set[Object]] */;
+short int var5 /* : Bool */;
+val* var6 /* : Object */;
 val* var_holder /* var holder: Object */;
-val* var6 /* : nullable Object */;
+val* var7 /* : nullable Object */;
 val* var_hbuckets /* var hbuckets: Set[Object] */;
-val* var7 /* : Iterator[nullable Object] */;
-short int var8 /* : Bool */;
-val* var9 /* : nullable Object */;
+val* var_8 /* var : Set[Object] */;
+val* var9 /* : Iterator[nullable Object] */;
+val* var_10 /* var : Iterator[Object] */;
+short int var11 /* : Bool */;
+val* var12 /* : nullable Object */;
 val* var_bucket /* var bucket: Object */;
-val* var10 /* : HashMap[Object, Int] */;
-val* var12 /* : HashMap[Object, Int] */;
-short int var13 /* : Bool */;
+val* var13 /* : HashMap[Object, Int] */;
+val* var15 /* : HashMap[Object, Int] */;
+short int var16 /* : Bool */;
 long var_color /* var color: Int */;
-short int var14 /* : Bool */;
-short int var15 /* : Bool */;
-long var16 /* : Int */;
-long var17 /* : Int */;
-short int var19 /* : Bool */;
-int cltype20;
-int idtype21;
-const char* var_class_name22;
-long var23 /* : Int */;
-val* var25 /* : HashMap[Object, Int] */;
-val* var27 /* : HashMap[Object, Int] */;
-val* var28 /* : nullable Object */;
+short int var17 /* : Bool */;
+short int var18 /* : Bool */;
+long var19 /* : Int */;
+long var20 /* : Int */;
+short int var22 /* : Bool */;
+int cltype23;
+int idtype24;
+const char* var_class_name25;
+long var26 /* : Int */;
+val* var28 /* : HashMap[Object, Int] */;
 val* var30 /* : HashMap[Object, Int] */;
-val* var32 /* : HashMap[Object, Int] */;
-/* Covariant cast for argument 0 (buckets) <p0:Map[Object, Set[Object]]> isa Map[BucketsColorer#0, Set[BucketsColorer#1]] */
-/* <p0:Map[Object, Set[Object]]> isa Map[BucketsColorer#0, Set[BucketsColorer#1]] */
+val* var31 /* : nullable Object */;
+val* var36 /* : HashMap[Object, Int] */;
+val* var38 /* : HashMap[Object, Int] */;
+/* Covariant cast for argument 0 (buckets) <p0:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
+/* <p0:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__BucketsColorer_FT0abstract_collection__Setcoloring__BucketsColorer_FT1];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2798,8 +2927,8 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[BucketsColorer#0, Set[BucketsColorer#1]]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 286);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[E]]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 282);
 show_backtrace(1);
 }
 var_buckets = p0;
@@ -2808,124 +2937,145 @@ coloring__BucketsColorer__compute_conflicts(self, var_buckets); /* Direct call c
 }
 var2 = 0;
 var_min_color = var2;
+var_ = var_buckets;
 {
-var3 = ((val* (*)(val*))(var_buckets->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_buckets) /* iterator on <var_buckets:Map[Object, Set[Object]]>*/;
+var3 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_) /* iterator on <var_:Map[Object, Set[Object]]>*/;
 }
+var_4 = var3;
 for(;;) {
 {
-var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var3) /* is_ok on <var3:MapIterator[Object, nullable Object]>*/;
+var5 = ((short int (*)(val*))(var_4->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var_4) /* is_ok on <var_4:MapIterator[Object, Set[Object]]>*/;
 }
-if(!var4) break;
+if (var5){
 {
-var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__key]))(var3) /* key on <var3:MapIterator[Object, nullable Object]>*/;
+var6 = ((val* (*)(val*))(var_4->class->vft[COLOR_abstract_collection__MapIterator__key]))(var_4) /* key on <var_4:MapIterator[Object, Set[Object]]>*/;
 }
-var_holder = var5;
+var_holder = var6;
 {
-var6 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__item]))(var3) /* item on <var3:MapIterator[Object, nullable Object]>*/;
+var7 = ((val* (*)(val*))(var_4->class->vft[COLOR_abstract_collection__MapIterator__item]))(var_4) /* item on <var_4:MapIterator[Object, Set[Object]]>*/;
 }
-var_hbuckets = var6;
+var_hbuckets = var7;
+var_8 = var_hbuckets;
 {
-var7 = ((val* (*)(val*))(var_hbuckets->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_hbuckets) /* iterator on <var_hbuckets:Set[Object]>*/;
+var9 = ((val* (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_8) /* iterator on <var_8:Set[Object]>*/;
 }
+var_10 = var9;
 for(;;) {
 {
-var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
+var11 = ((short int (*)(val*))(var_10->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_10) /* is_ok on <var_10:Iterator[Object]>*/;
 }
-if(!var8) break;
+if (var11){
 {
-var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
+var12 = ((val* (*)(val*))(var_10->class->vft[COLOR_abstract_collection__Iterator__item]))(var_10) /* item on <var_10:Iterator[Object]>*/;
 }
-var_bucket = var9;
+var_bucket = var12;
 {
 { /* Inline coloring#BucketsColorer#colors (self) on <self:BucketsColorer[Object, Object]> */
-var12 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var12 == NULL)) {
+var15 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var15 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 281);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 279);
 show_backtrace(1);
 }
-var10 = var12;
-RET_LABEL11:(void)0;
+var13 = var15;
+RET_LABEL14:(void)0;
 }
 }
 {
-var13 = abstract_collection__MapRead__has_key(var10, var_bucket);
+var16 = abstract_collection__MapRead__has_key(var13, var_bucket);
 }
-if (var13){
-goto CONTINUE_label;
+if (var16){
+goto BREAK_label;
 } else {
 }
 var_color = var_min_color;
 for(;;) {
 {
-var14 = coloring__BucketsColorer__is_color_free(self, var_bucket, var_color);
+var17 = coloring__BucketsColorer__is_color_free(self, var_bucket, var_color);
 }
-var15 = !var14;
-if (!var15) break;
-var16 = 1;
+var18 = !var17;
+if (var18){
+var19 = 1;
 {
-{ /* Inline kernel#Int#+ (var_color,var16) on <var_color:Int> */
-/* Covariant cast for argument 0 (i) <var16:Int> isa OTHER */
-/* <var16:Int> isa OTHER */
-var19 = 1; /* easy <var16:Int> isa OTHER*/
-if (unlikely(!var19)) {
-var_class_name22 = type_kernel__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name22);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
+{ /* Inline kernel#Int#+ (var_color,var19) on <var_color:Int> */
+/* Covariant cast for argument 0 (i) <var19:Int> isa OTHER */
+/* <var19:Int> isa OTHER */
+var22 = 1; /* easy <var19:Int> isa OTHER*/
+if (unlikely(!var22)) {
+var_class_name25 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name25);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
-var23 = var_color + var16;
-var17 = var23;
-goto RET_LABEL18;
-RET_LABEL18:(void)0;
+var26 = var_color + var19;
+var20 = var26;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
 }
-var_color = var17;
-CONTINUE_label24: (void)0;
+var_color = var20;
+} else {
+goto BREAK_label27;
+}
 }
-BREAK_label24: (void)0;
+BREAK_label27: (void)0;
 {
 { /* Inline coloring#BucketsColorer#colors (self) on <self:BucketsColorer[Object, Object]> */
-var27 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var27 == NULL)) {
+var30 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var30 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 281);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 279);
 show_backtrace(1);
 }
-var25 = var27;
-RET_LABEL26:(void)0;
+var28 = var30;
+RET_LABEL29:(void)0;
 }
 }
 {
-var28 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
-hash_collection__HashMap___91d_93d_61d(var25, var_bucket, var28); /* Direct call hash_collection#HashMap#[]= on <var25:HashMap[Object, Int]>*/
+var31 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
+hash_collection__HashMap___91d_93d_61d(var28, var_bucket, var31); /* Direct call hash_collection#HashMap#[]= on <var28:HashMap[Object, Int]>*/
 }
 var_color = var_min_color;
-CONTINUE_label: (void)0;
+BREAK_label: (void)0;
 {
-((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_10->class->vft[COLOR_abstract_collection__Iterator__next]))(var_10) /* next on <var_10:Iterator[Object]>*/;
 }
+} else {
+goto BREAK_label32;
 }
-BREAK_label: (void)0;
-CONTINUE_label29: (void)0;
+}
+BREAK_label32: (void)0;
 {
-((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__next]))(var3) /* next on <var3:MapIterator[Object, nullable Object]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_10) on <var_10:Iterator[Object]> */
+RET_LABEL33:(void)0;
+}
+}
+{
+((void (*)(val*))(var_4->class->vft[COLOR_abstract_collection__MapIterator__next]))(var_4) /* next on <var_4:MapIterator[Object, Set[Object]]>*/;
+}
+} else {
+goto BREAK_label34;
+}
+}
+BREAK_label34: (void)0;
+{
+{ /* Inline abstract_collection#MapIterator#finish (var_4) on <var_4:MapIterator[Object, Set[Object]]> */
+RET_LABEL35:(void)0;
 }
 }
-BREAK_label29: (void)0;
 {
 { /* Inline coloring#BucketsColorer#colors (self) on <self:BucketsColorer[Object, Object]> */
-var32 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var32 == NULL)) {
+var38 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var38 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 281);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 279);
 show_backtrace(1);
 }
-var30 = var32;
-RET_LABEL31:(void)0;
+var36 = var38;
+RET_LABEL37:(void)0;
 }
 }
-var = var30;
+var = var36;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -2955,26 +3105,28 @@ short int var5 /* : Bool */;
 val* var6 /* : HashMap[Object, Set[Object]] */;
 val* var8 /* : HashMap[Object, Set[Object]] */;
 val* var9 /* : nullable Object */;
+val* var_ /* var : Set[Object] */;
 val* var10 /* : Iterator[nullable Object] */;
-short int var11 /* : Bool */;
-val* var12 /* : nullable Object */;
+val* var_11 /* var : Iterator[Object] */;
+short int var12 /* : Bool */;
+val* var13 /* : nullable Object */;
 val* var_other /* var other: Object */;
-short int var13 /* : Bool */;
-val* var14 /* : HashMap[Object, Int] */;
-val* var16 /* : HashMap[Object, Int] */;
-short int var17 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var18 /* : HashMap[Object, Int] */;
+short int var14 /* : Bool */;
+val* var15 /* : HashMap[Object, Int] */;
+val* var17 /* : HashMap[Object, Int] */;
+short int var18 /* : Bool */;
+short int var_19 /* var : Bool */;
 val* var20 /* : HashMap[Object, Int] */;
-val* var21 /* : nullable Object */;
-short int var22 /* : Bool */;
-short int var23 /* : Bool */;
+val* var22 /* : HashMap[Object, Int] */;
+val* var23 /* : nullable Object */;
+short int var24 /* : Bool */;
 short int var25 /* : Bool */;
-long var26 /* : Int */;
 short int var27 /* : Bool */;
-short int var28 /* : Bool */;
-/* Covariant cast for argument 0 (bucket) <p0:Object> isa BucketsColorer#1 */
-/* <p0:Object> isa BucketsColorer#1 */
+long var28 /* : Int */;
+short int var29 /* : Bool */;
+short int var31 /* : Bool */;
+/* Covariant cast for argument 0 (bucket) <p0:Object> isa E */
+/* <p0:Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_coloring__BucketsColorer_FT1];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2985,8 +3137,8 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "BucketsColorer#1", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 304);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 300);
 show_backtrace(1);
 }
 var_bucket = p0;
@@ -2996,7 +3148,7 @@ var_color = p1;
 var4 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
 if (unlikely(var4 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
 var2 = var4;
@@ -3012,7 +3164,7 @@ if (var5){
 var8 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
 if (unlikely(var8 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
 var6 = var8;
@@ -3022,83 +3174,92 @@ RET_LABEL7:(void)0;
 {
 var9 = hash_collection__HashMap___91d_93d(var6, var_bucket);
 }
+var_ = var9;
 {
-var10 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Collection__iterator]))(var9) /* iterator on <var9:nullable Object(Set[Object])>*/;
+var10 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[Object]>*/;
 }
+var_11 = var10;
 for(;;) {
 {
-var11 = ((short int (*)(val*))(var10->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var10) /* is_ok on <var10:Iterator[nullable Object]>*/;
+var12 = ((short int (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_11) /* is_ok on <var_11:Iterator[Object]>*/;
 }
-if(!var11) break;
+if (var12){
 {
-var12 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_collection__Iterator__item]))(var10) /* item on <var10:Iterator[nullable Object]>*/;
+var13 = ((val* (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__item]))(var_11) /* item on <var_11:Iterator[Object]>*/;
 }
-var_other = var12;
+var_other = var13;
 {
 { /* Inline coloring#BucketsColorer#colors (self) on <self:BucketsColorer[Object, Object]> */
-var16 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var16 == NULL)) {
+var17 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var17 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 281);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 279);
 show_backtrace(1);
 }
-var14 = var16;
-RET_LABEL15:(void)0;
+var15 = var17;
+RET_LABEL16:(void)0;
 }
 }
 {
-var17 = abstract_collection__MapRead__has_key(var14, var_other);
+var18 = abstract_collection__MapRead__has_key(var15, var_other);
 }
-var_ = var17;
-if (var17){
+var_19 = var18;
+if (var18){
 {
 { /* Inline coloring#BucketsColorer#colors (self) on <self:BucketsColorer[Object, Object]> */
-var20 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var20 == NULL)) {
+var22 = self->attrs[COLOR_coloring__BucketsColorer___colors].val; /* _colors on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var22 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 281);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 279);
 show_backtrace(1);
 }
-var18 = var20;
-RET_LABEL19:(void)0;
+var20 = var22;
+RET_LABEL21:(void)0;
 }
 }
 {
-var21 = hash_collection__HashMap___91d_93d(var18, var_other);
+var23 = hash_collection__HashMap___91d_93d(var20, var_other);
 }
 {
-{ /* Inline kernel#Int#== (var21,var_color) on <var21:nullable Object(Int)> */
-var25 = (var21 != NULL) && (var21->class == &class_kernel__Int);
-if (var25) {
-var26 = ((struct instance_kernel__Int*)var21)->value; /* autounbox from nullable Object to Int */;
-var25 = (var26 == var_color);
+{ /* Inline kernel#Int#== (var23,var_color) on <var23:nullable Object(Int)> */
+var27 = (var23 != NULL) && (var23->class == &class_kernel__Int);
+if (var27) {
+var28 = ((struct instance_kernel__Int*)var23)->value; /* autounbox from nullable Object to Int */;
+var27 = (var28 == var_color);
 }
-var23 = var25;
-goto RET_LABEL24;
-RET_LABEL24:(void)0;
+var25 = var27;
+goto RET_LABEL26;
+RET_LABEL26:(void)0;
 }
-var22 = var23;
+var24 = var25;
 }
-var13 = var22;
+var14 = var24;
 } else {
-var13 = var_;
+var14 = var_19;
 }
-if (var13){
-var27 = 0;
-var = var27;
+if (var14){
+var29 = 0;
+var = var29;
 goto RET_LABEL;
 } else {
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var10->class->vft[COLOR_abstract_collection__Iterator__next]))(var10) /* next on <var10:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__next]))(var_11) /* next on <var_11:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:Iterator[Object]> */
+RET_LABEL30:(void)0;
+}
+}
 } else {
 }
-var28 = 1;
-var = var28;
+var31 = 1;
+var = var31;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -3122,44 +3283,50 @@ const char* var_class_name;
 val* var_buckets /* var buckets: Map[Object, Set[Object]] */;
 val* var1 /* : HashMap[Object, Set[Object]] */;
 val* var3 /* : HashMap[Object, Set[Object]] */;
+val* var_ /* var : Map[Object, Set[Object]] */;
 val* var4 /* : MapIterator[Object, nullable Object] */;
-short int var5 /* : Bool */;
-val* var6 /* : Object */;
+val* var_5 /* var : MapIterator[Object, Set[Object]] */;
+short int var6 /* : Bool */;
+val* var7 /* : Object */;
 val* var_holder /* var holder: Object */;
-val* var7 /* : nullable Object */;
+val* var8 /* : nullable Object */;
 val* var_hbuckets /* var hbuckets: Set[Object] */;
-val* var8 /* : Iterator[nullable Object] */;
-short int var9 /* : Bool */;
-val* var10 /* : nullable Object */;
-val* var_bucket /* var bucket: Object */;
-val* var11 /* : HashMap[Object, Set[Object]] */;
-val* var13 /* : HashMap[Object, Set[Object]] */;
-short int var14 /* : Bool */;
-short int var15 /* : Bool */;
+val* var_9 /* var : Set[Object] */;
+val* var10 /* : Iterator[nullable Object] */;
+val* var_11 /* var : Iterator[Object] */;
+short int var12 /* : Bool */;
+val* var13 /* : nullable Object */;
+val* var_bucket /* var bucket: Object */;
+val* var14 /* : HashMap[Object, Set[Object]] */;
 val* var16 /* : HashMap[Object, Set[Object]] */;
-val* var18 /* : HashMap[Object, Set[Object]] */;
-val* var19 /* : HashSet[Object] */;
-val* var20 /* : Iterator[nullable Object] */;
-short int var21 /* : Bool */;
-val* var22 /* : nullable Object */;
+short int var17 /* : Bool */;
+short int var18 /* : Bool */;
+val* var19 /* : HashMap[Object, Set[Object]] */;
+val* var21 /* : HashMap[Object, Set[Object]] */;
+val* var22 /* : HashSet[Object] */;
+val* var_23 /* var : Set[Object] */;
+val* var24 /* : Iterator[nullable Object] */;
+val* var_25 /* var : Iterator[Object] */;
+short int var26 /* : Bool */;
+val* var27 /* : nullable Object */;
 val* var_obucket /* var obucket: Object */;
-short int var23 /* : Bool */;
-short int var24 /* : Bool */;
-val* var25 /* : HashMap[Object, Set[Object]] */;
-val* var27 /* : HashMap[Object, Set[Object]] */;
 short int var28 /* : Bool */;
 short int var29 /* : Bool */;
 val* var30 /* : HashMap[Object, Set[Object]] */;
 val* var32 /* : HashMap[Object, Set[Object]] */;
-val* var33 /* : HashSet[Object] */;
-val* var34 /* : HashMap[Object, Set[Object]] */;
-val* var36 /* : HashMap[Object, Set[Object]] */;
-val* var37 /* : nullable Object */;
-val* var38 /* : HashMap[Object, Set[Object]] */;
-val* var40 /* : HashMap[Object, Set[Object]] */;
-val* var41 /* : nullable Object */;
-/* Covariant cast for argument 0 (buckets) <p0:Map[Object, Set[Object]]> isa Map[BucketsColorer#0, Set[BucketsColorer#1]] */
-/* <p0:Map[Object, Set[Object]]> isa Map[BucketsColorer#0, Set[BucketsColorer#1]] */
+short int var33 /* : Bool */;
+short int var34 /* : Bool */;
+val* var35 /* : HashMap[Object, Set[Object]] */;
+val* var37 /* : HashMap[Object, Set[Object]] */;
+val* var38 /* : HashSet[Object] */;
+val* var39 /* : HashMap[Object, Set[Object]] */;
+val* var41 /* : HashMap[Object, Set[Object]] */;
+val* var42 /* : nullable Object */;
+val* var43 /* : HashMap[Object, Set[Object]] */;
+val* var45 /* : HashMap[Object, Set[Object]] */;
+val* var46 /* : nullable Object */;
+/* Covariant cast for argument 0 (buckets) <p0:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
+/* <p0:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__BucketsColorer_FT0abstract_collection__Setcoloring__BucketsColorer_FT1];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3170,8 +3337,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[BucketsColorer#0, Set[BucketsColorer#1]]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 313);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[E]]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 309);
 show_backtrace(1);
 }
 var_buckets = p0;
@@ -3180,7 +3347,7 @@ var_buckets = p0;
 var3 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
 var1 = var3;
@@ -3190,184 +3357,212 @@ RET_LABEL2:(void)0;
 {
 hash_collection__HashMap__clear(var1); /* Direct call hash_collection#HashMap#clear on <var1:HashMap[Object, Set[Object]]>*/
 }
+var_ = var_buckets;
 {
-var4 = ((val* (*)(val*))(var_buckets->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_buckets) /* iterator on <var_buckets:Map[Object, Set[Object]]>*/;
+var4 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_) /* iterator on <var_:Map[Object, Set[Object]]>*/;
 }
+var_5 = var4;
 for(;;) {
 {
-var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var4) /* is_ok on <var4:MapIterator[Object, nullable Object]>*/;
+var6 = ((short int (*)(val*))(var_5->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var_5) /* is_ok on <var_5:MapIterator[Object, Set[Object]]>*/;
 }
-if(!var5) break;
+if (var6){
 {
-var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__key]))(var4) /* key on <var4:MapIterator[Object, nullable Object]>*/;
+var7 = ((val* (*)(val*))(var_5->class->vft[COLOR_abstract_collection__MapIterator__key]))(var_5) /* key on <var_5:MapIterator[Object, Set[Object]]>*/;
 }
-var_holder = var6;
+var_holder = var7;
 {
-var7 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__item]))(var4) /* item on <var4:MapIterator[Object, nullable Object]>*/;
+var8 = ((val* (*)(val*))(var_5->class->vft[COLOR_abstract_collection__MapIterator__item]))(var_5) /* item on <var_5:MapIterator[Object, Set[Object]]>*/;
 }
-var_hbuckets = var7;
+var_hbuckets = var8;
+var_9 = var_hbuckets;
 {
-var8 = ((val* (*)(val*))(var_hbuckets->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_hbuckets) /* iterator on <var_hbuckets:Set[Object]>*/;
+var10 = ((val* (*)(val*))(var_9->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_9) /* iterator on <var_9:Set[Object]>*/;
 }
+var_11 = var10;
 for(;;) {
 {
-var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var8) /* is_ok on <var8:Iterator[nullable Object]>*/;
+var12 = ((short int (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_11) /* is_ok on <var_11:Iterator[Object]>*/;
 }
-if(!var9) break;
+if (var12){
 {
-var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__item]))(var8) /* item on <var8:Iterator[nullable Object]>*/;
+var13 = ((val* (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__item]))(var_11) /* item on <var_11:Iterator[Object]>*/;
 }
-var_bucket = var10;
+var_bucket = var13;
 {
 { /* Inline coloring#BucketsColorer#conflicts (self) on <self:BucketsColorer[Object, Object]> */
-var13 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var13 == NULL)) {
+var16 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var16 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
-var11 = var13;
-RET_LABEL12:(void)0;
+var14 = var16;
+RET_LABEL15:(void)0;
 }
 }
 {
-var14 = abstract_collection__MapRead__has_key(var11, var_bucket);
+var17 = abstract_collection__MapRead__has_key(var14, var_bucket);
 }
-var15 = !var14;
-if (var15){
+var18 = !var17;
+if (var18){
 {
 { /* Inline coloring#BucketsColorer#conflicts (self) on <self:BucketsColorer[Object, Object]> */
-var18 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var18 == NULL)) {
+var21 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var21 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
-var16 = var18;
-RET_LABEL17:(void)0;
+var19 = var21;
+RET_LABEL20:(void)0;
 }
 }
-var19 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetcoloring__BucketsColorer_FT1]);
+var22 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetcoloring__BucketsColorer_FT1]);
 {
-hash_collection__HashSet__init(var19); /* Direct call hash_collection#HashSet#init on <var19:HashSet[Object]>*/
+((void (*)(val*))(var22->class->vft[COLOR_kernel__Object__init]))(var22) /* init on <var22:HashSet[Object]>*/;
 }
 {
-hash_collection__HashMap___91d_93d_61d(var16, var_bucket, var19); /* Direct call hash_collection#HashMap#[]= on <var16:HashMap[Object, Set[Object]]>*/
+hash_collection__HashMap___91d_93d_61d(var19, var_bucket, var22); /* Direct call hash_collection#HashMap#[]= on <var19:HashMap[Object, Set[Object]]>*/
 }
 } else {
 }
+var_23 = var_hbuckets;
 {
-var20 = ((val* (*)(val*))(var_hbuckets->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_hbuckets) /* iterator on <var_hbuckets:Set[Object]>*/;
+var24 = ((val* (*)(val*))(var_23->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_23) /* iterator on <var_23:Set[Object]>*/;
 }
+var_25 = var24;
 for(;;) {
 {
-var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
+var26 = ((short int (*)(val*))(var_25->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_25) /* is_ok on <var_25:Iterator[Object]>*/;
 }
-if(!var21) break;
+if (var26){
 {
-var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
+var27 = ((val* (*)(val*))(var_25->class->vft[COLOR_abstract_collection__Iterator__item]))(var_25) /* item on <var_25:Iterator[Object]>*/;
 }
-var_obucket = var22;
+var_obucket = var27;
 {
-var24 = ((short int (*)(val*, val*))(var_obucket->class->vft[COLOR_kernel__Object___61d_61d]))(var_obucket, var_bucket) /* == on <var_obucket:Object>*/;
-var23 = var24;
+var29 = ((short int (*)(val*, val*))(var_obucket->class->vft[COLOR_kernel__Object___61d_61d]))(var_obucket, var_bucket) /* == on <var_obucket:Object>*/;
+var28 = var29;
 }
-if (var23){
-goto CONTINUE_label;
+if (var28){
+goto BREAK_label;
 } else {
 }
 {
 { /* Inline coloring#BucketsColorer#conflicts (self) on <self:BucketsColorer[Object, Object]> */
-var27 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var27 == NULL)) {
+var32 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var32 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
-var25 = var27;
-RET_LABEL26:(void)0;
+var30 = var32;
+RET_LABEL31:(void)0;
 }
 }
 {
-var28 = abstract_collection__MapRead__has_key(var25, var_obucket);
+var33 = abstract_collection__MapRead__has_key(var30, var_obucket);
 }
-var29 = !var28;
-if (var29){
+var34 = !var33;
+if (var34){
 {
 { /* Inline coloring#BucketsColorer#conflicts (self) on <self:BucketsColorer[Object, Object]> */
-var32 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var32 == NULL)) {
+var37 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var37 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
-var30 = var32;
-RET_LABEL31:(void)0;
+var35 = var37;
+RET_LABEL36:(void)0;
 }
 }
-var33 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetcoloring__BucketsColorer_FT1]);
+var38 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetcoloring__BucketsColorer_FT1]);
 {
-hash_collection__HashSet__init(var33); /* Direct call hash_collection#HashSet#init on <var33:HashSet[Object]>*/
+((void (*)(val*))(var38->class->vft[COLOR_kernel__Object__init]))(var38) /* init on <var38:HashSet[Object]>*/;
 }
 {
-hash_collection__HashMap___91d_93d_61d(var30, var_obucket, var33); /* Direct call hash_collection#HashMap#[]= on <var30:HashMap[Object, Set[Object]]>*/
+hash_collection__HashMap___91d_93d_61d(var35, var_obucket, var38); /* Direct call hash_collection#HashMap#[]= on <var35:HashMap[Object, Set[Object]]>*/
 }
 } else {
 }
 {
 { /* Inline coloring#BucketsColorer#conflicts (self) on <self:BucketsColorer[Object, Object]> */
-var36 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var36 == NULL)) {
+var41 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var41 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
-var34 = var36;
-RET_LABEL35:(void)0;
+var39 = var41;
+RET_LABEL40:(void)0;
 }
 }
 {
-var37 = hash_collection__HashMap___91d_93d(var34, var_bucket);
+var42 = hash_collection__HashMap___91d_93d(var39, var_bucket);
 }
 {
-((void (*)(val*, val*))(var37->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var37, var_obucket) /* add on <var37:nullable Object(Set[Object])>*/;
+((void (*)(val*, val*))(var42->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var42, var_obucket) /* add on <var42:nullable Object(Set[Object])>*/;
 }
 {
 { /* Inline coloring#BucketsColorer#conflicts (self) on <self:BucketsColorer[Object, Object]> */
-var40 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
-if (unlikely(var40 == NULL)) {
+var45 = self->attrs[COLOR_coloring__BucketsColorer___conflicts].val; /* _conflicts on <self:BucketsColorer[Object, Object]> */
+if (unlikely(var45 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 282);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 280);
 show_backtrace(1);
 }
-var38 = var40;
-RET_LABEL39:(void)0;
+var43 = var45;
+RET_LABEL44:(void)0;
+}
 }
+{
+var46 = hash_collection__HashMap___91d_93d(var43, var_obucket);
 }
 {
-var41 = hash_collection__HashMap___91d_93d(var38, var_obucket);
+((void (*)(val*, val*))(var46->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var46, var_bucket) /* add on <var46:nullable Object(Set[Object])>*/;
 }
+BREAK_label: (void)0;
 {
-((void (*)(val*, val*))(var41->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var41, var_bucket) /* add on <var41:nullable Object(Set[Object])>*/;
+((void (*)(val*))(var_25->class->vft[COLOR_abstract_collection__Iterator__next]))(var_25) /* next on <var_25:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label47;
+}
 }
-CONTINUE_label: (void)0;
+BREAK_label47: (void)0;
 {
-((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_25) on <var_25:Iterator[Object]> */
+RET_LABEL48:(void)0;
 }
 }
-BREAK_label: (void)0;
-CONTINUE_label42: (void)0;
 {
-((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__next]))(var_11) /* next on <var_11:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label49;
+}
+}
+BREAK_label49: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:Iterator[Object]> */
+RET_LABEL50:(void)0;
 }
 }
-BREAK_label42: (void)0;
-CONTINUE_label43: (void)0;
 {
-((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__next]))(var4) /* next on <var4:MapIterator[Object, nullable Object]>*/;
+((void (*)(val*))(var_5->class->vft[COLOR_abstract_collection__MapIterator__next]))(var_5) /* next on <var_5:MapIterator[Object, Set[Object]]>*/;
+}
+} else {
+goto BREAK_label51;
+}
+}
+BREAK_label51: (void)0;
+{
+{ /* Inline abstract_collection#MapIterator#finish (var_5) on <var_5:MapIterator[Object, Set[Object]]> */
+RET_LABEL52:(void)0;
 }
 }
-BREAK_label43: (void)0;
 RET_LABEL:;
 }
 /* method coloring#BucketsColorer#compute_conflicts for (self: Object, Map[Object, Set[Object]]) */
@@ -3382,7 +3577,7 @@ val* var1 /* : HashMap[Object, Int] */;
 var1 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
 var = var1;
@@ -3398,7 +3593,7 @@ val* var3 /* : HashMap[Object, Int] */;
 var3 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:Object(POSetBucketsColorer[Object, Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
 var1 = var3;
@@ -3415,7 +3610,7 @@ val* var1 /* : POSet[Object] */;
 var1 = self->attrs[COLOR_coloring__POSetBucketsColorer___poset].val; /* _poset on <self:POSetBucketsColorer[Object, Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 335);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 331);
 show_backtrace(1);
 }
 var = var1;
@@ -3431,7 +3626,7 @@ val* var3 /* : POSet[Object] */;
 var3 = self->attrs[COLOR_coloring__POSetBucketsColorer___poset].val; /* _poset on <self:Object(POSetBucketsColorer[Object, Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 335);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 331);
 show_backtrace(1);
 }
 var1 = var3;
@@ -3448,8 +3643,8 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 const char* var_class_name;
-/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[POSetBucketsColorer#0] */
-/* <p0:POSet[Object]> isa POSet[POSetBucketsColorer#0] */
+/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[H] */
+/* <p0:POSet[Object]> isa POSet[H] */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetBucketsColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3460,8 +3655,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetBucketsColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 335);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[H]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 331);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetBucketsColorer___poset].val = p0; /* _poset on <self:POSetBucketsColorer[Object, Object]> */
@@ -3475,8 +3670,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 { /* Inline coloring#POSetBucketsColorer#poset= (self,p0) on <self:Object(POSetBucketsColorer[Object, Object])> */
-/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[POSetBucketsColorer#0] */
-/* <p0:POSet[Object]> isa POSet[POSetBucketsColorer#0] */
+/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[H] */
+/* <p0:POSet[Object]> isa POSet[H] */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetBucketsColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3487,8 +3682,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetBucketsColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 335);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[H]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 331);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetBucketsColorer___poset].val = p0; /* _poset on <self:Object(POSetBucketsColorer[Object, Object])> */
@@ -3503,7 +3698,7 @@ val* var1 /* : Map[Object, Set[Object]] */;
 var1 = self->attrs[COLOR_coloring__POSetBucketsColorer___conflicts].val; /* _conflicts on <self:POSetBucketsColorer[Object, Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 336);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 332);
 show_backtrace(1);
 }
 var = var1;
@@ -3519,7 +3714,7 @@ val* var3 /* : Map[Object, Set[Object]] */;
 var3 = self->attrs[COLOR_coloring__POSetBucketsColorer___conflicts].val; /* _conflicts on <self:Object(POSetBucketsColorer[Object, Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 336);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 332);
 show_backtrace(1);
 }
 var1 = var3;
@@ -3536,8 +3731,8 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 const char* var_class_name;
-/* Covariant cast for argument 0 (conflicts) <p0:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]] */
-/* <p0:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]] */
+/* Covariant cast for argument 0 (conflicts) <p0:Map[Object, Set[Object]]> isa Map[H, Set[H]] */
+/* <p0:Map[Object, Set[Object]]> isa Map[H, Set[H]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetBucketsColorer_FT0abstract_collection__Setcoloring__POSetBucketsColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3548,8 +3743,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 336);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[H]]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 332);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetBucketsColorer___conflicts].val = p0; /* _conflicts on <self:POSetBucketsColorer[Object, Object]> */
@@ -3563,8 +3758,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 { /* Inline coloring#POSetBucketsColorer#conflicts= (self,p0) on <self:Object(POSetBucketsColorer[Object, Object])> */
-/* Covariant cast for argument 0 (conflicts) <p0:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]] */
-/* <p0:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]] */
+/* Covariant cast for argument 0 (conflicts) <p0:Map[Object, Set[Object]]> isa Map[H, Set[H]] */
+/* <p0:Map[Object, Set[Object]]> isa Map[H, Set[H]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetBucketsColorer_FT0abstract_collection__Setcoloring__POSetBucketsColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3575,8 +3770,8 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 336);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[H]]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 332);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetBucketsColorer___conflicts].val = p0; /* _conflicts on <self:Object(POSetBucketsColorer[Object, Object])> */
@@ -3608,8 +3803,8 @@ int cltype14;
 int idtype15;
 const struct type* type_struct16;
 const char* var_class_name17;
-/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[POSetBucketsColorer#0] */
-/* <p0:POSet[Object]> isa POSet[POSetBucketsColorer#0] */
+/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[H] */
+/* <p0:POSet[Object]> isa POSet[H] */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetBucketsColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3620,12 +3815,12 @@ var = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetBucketsColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 338);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[H]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 334);
 show_backtrace(1);
 }
-/* Covariant cast for argument 1 (conflicts) <p1:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]] */
-/* <p1:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]] */
+/* Covariant cast for argument 1 (conflicts) <p1:Map[Object, Set[Object]]> isa Map[H, Set[H]] */
+/* <p1:Map[Object, Set[Object]]> isa Map[H, Set[H]] */
 type_struct4 = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetBucketsColorer_FT0abstract_collection__Setcoloring__POSetBucketsColorer_FT0];
 cltype2 = type_struct4->color;
 idtype3 = type_struct4->id;
@@ -3636,16 +3831,16 @@ var1 = p1->type->type_table[cltype2] == idtype3;
 }
 if (unlikely(!var1)) {
 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]]", var_class_name5);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 338);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[H]]", var_class_name5);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 334);
 show_backtrace(1);
 }
 var_poset = p0;
 var_conflicts = p1;
 {
 { /* Inline coloring#POSetBucketsColorer#poset= (self,var_poset) on <self:POSetBucketsColorer[Object, Object]> */
-/* Covariant cast for argument 0 (poset) <var_poset:POSet[Object]> isa POSet[POSetBucketsColorer#0] */
-/* <var_poset:POSet[Object]> isa POSet[POSetBucketsColorer#0] */
+/* Covariant cast for argument 0 (poset) <var_poset:POSet[Object]> isa POSet[H] */
+/* <var_poset:POSet[Object]> isa POSet[H] */
 type_struct10 = self->type->resolution_table->types[COLOR_poset__POSetcoloring__POSetBucketsColorer_FT0];
 cltype8 = type_struct10->color;
 idtype9 = type_struct10->id;
@@ -3656,8 +3851,8 @@ var7 = var_poset->type->type_table[cltype8] == idtype9;
 }
 if (unlikely(!var7)) {
 var_class_name11 = var_poset == NULL ? "null" : var_poset->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetBucketsColorer#0]", var_class_name11);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 335);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[H]", var_class_name11);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 331);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetBucketsColorer___poset].val = var_poset; /* _poset on <self:POSetBucketsColorer[Object, Object]> */
@@ -3666,8 +3861,8 @@ RET_LABEL6:(void)0;
 }
 {
 { /* Inline coloring#POSetBucketsColorer#conflicts= (self,var_conflicts) on <self:POSetBucketsColorer[Object, Object]> */
-/* Covariant cast for argument 0 (conflicts) <var_conflicts:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]] */
-/* <var_conflicts:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]] */
+/* Covariant cast for argument 0 (conflicts) <var_conflicts:Map[Object, Set[Object]]> isa Map[H, Set[H]] */
+/* <var_conflicts:Map[Object, Set[Object]]> isa Map[H, Set[H]] */
 type_struct16 = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetBucketsColorer_FT0abstract_collection__Setcoloring__POSetBucketsColorer_FT0];
 cltype14 = type_struct16->color;
 idtype15 = type_struct16->id;
@@ -3678,8 +3873,8 @@ var13 = var_conflicts->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name17 = var_conflicts == NULL ? "null" : var_conflicts->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#0]]", var_class_name17);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 336);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[H]]", var_class_name17);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 332);
 show_backtrace(1);
 }
 self->attrs[COLOR_coloring__POSetBucketsColorer___conflicts].val = var_conflicts; /* _conflicts on <self:POSetBucketsColorer[Object, Object]> */
@@ -3708,47 +3903,51 @@ val* var5 /* : POSet[Object] */;
 val* var7 /* : POSet[Object] */;
 val* var8 /* : Collection[Object] */;
 val* var9 /* : Array[Object] */;
+val* var_ /* var : Array[Object] */;
 val* var10 /* : ArrayIterator[nullable Object] */;
-short int var11 /* : Bool */;
-val* var12 /* : nullable Object */;
+val* var_11 /* var : ArrayIterator[Object] */;
+short int var12 /* : Bool */;
+val* var13 /* : nullable Object */;
 val* var_h /* var h: Object */;
-val* var13 /* : POSet[Object] */;
-val* var15 /* : POSet[Object] */;
-val* var16 /* : POSetElement[Object] */;
-val* var17 /* : Collection[Object] */;
-long var18 /* : Int */;
+val* var14 /* : POSet[Object] */;
+val* var16 /* : POSet[Object] */;
+val* var17 /* : POSetElement[Object] */;
+val* var18 /* : Collection[Object] */;
+long var19 /* : Int */;
 long var_color /* var color: Int */;
-val* var19 /* : nullable Object */;
-val* var20 /* : Iterator[nullable Object] */;
-short int var21 /* : Bool */;
-val* var22 /* : nullable Object */;
+val* var20 /* : nullable Object */;
+val* var_21 /* var : Set[Object] */;
+val* var22 /* : Iterator[nullable Object] */;
+val* var_23 /* var : Iterator[Object] */;
+short int var24 /* : Bool */;
+val* var25 /* : nullable Object */;
 val* var_bucket /* var bucket: Object */;
-val* var23 /* : HashMap[Object, Int] */;
-val* var25 /* : HashMap[Object, Int] */;
-short int var26 /* : Bool */;
-short int var27 /* : Bool */;
-short int var28 /* : Bool */;
-long var29 /* : Int */;
-long var30 /* : Int */;
-short int var32 /* : Bool */;
-int cltype33;
-int idtype34;
-const char* var_class_name35;
-long var36 /* : Int */;
-val* var38 /* : HashMap[Object, Int] */;
-val* var40 /* : HashMap[Object, Int] */;
-val* var41 /* : nullable Object */;
-long var42 /* : Int */;
-long var43 /* : Int */;
-short int var45 /* : Bool */;
-int cltype46;
-int idtype47;
-const char* var_class_name48;
-long var49 /* : Int */;
-val* var51 /* : HashMap[Object, Int] */;
-val* var53 /* : HashMap[Object, Int] */;
-/* Covariant cast for argument 0 (buckets) <p0:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]] */
-/* <p0:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]] */
+val* var26 /* : HashMap[Object, Int] */;
+val* var28 /* : HashMap[Object, Int] */;
+short int var29 /* : Bool */;
+short int var30 /* : Bool */;
+short int var31 /* : Bool */;
+long var32 /* : Int */;
+long var33 /* : Int */;
+short int var35 /* : Bool */;
+int cltype36;
+int idtype37;
+const char* var_class_name38;
+long var39 /* : Int */;
+val* var41 /* : HashMap[Object, Int] */;
+val* var43 /* : HashMap[Object, Int] */;
+val* var44 /* : nullable Object */;
+long var45 /* : Int */;
+long var46 /* : Int */;
+short int var48 /* : Bool */;
+int cltype49;
+int idtype50;
+const char* var_class_name51;
+long var52 /* : Int */;
+val* var57 /* : HashMap[Object, Int] */;
+val* var59 /* : HashMap[Object, Int] */;
+/* Covariant cast for argument 0 (buckets) <p0:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
+/* <p0:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetBucketsColorer_FT0abstract_collection__Setcoloring__POSetBucketsColorer_FT1];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3759,8 +3958,8 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 343);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[E]]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 339);
 show_backtrace(1);
 }
 var_buckets = p0;
@@ -3769,7 +3968,7 @@ var_buckets = p0;
 var4 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
 if (unlikely(var4 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
 var2 = var4;
@@ -3784,7 +3983,7 @@ hash_collection__HashMap__clear(var2); /* Direct call hash_collection#HashMap#cl
 var7 = self->attrs[COLOR_coloring__POSetBucketsColorer___poset].val; /* _poset on <self:POSetBucketsColorer[Object, Object]> */
 if (unlikely(var7 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 335);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 331);
 show_backtrace(1);
 }
 var5 = var7;
@@ -3797,162 +3996,183 @@ var8 = ((val* (*)(val*))(var_buckets->class->vft[COLOR_abstract_collection__MapR
 {
 var9 = poset__POSet__linearize(var5, var8);
 }
+var_ = var9;
 {
-var10 = array__AbstractArrayRead__iterator(var9);
+var10 = array__AbstractArrayRead__iterator(var_);
 }
+var_11 = var10;
 for(;;) {
 {
-var11 = array__ArrayIterator__is_ok(var10);
+var12 = array__ArrayIterator__is_ok(var_11);
 }
-if(!var11) break;
+if (var12){
 {
-var12 = array__ArrayIterator__item(var10);
+var13 = array__ArrayIterator__item(var_11);
 }
-var_h = var12;
+var_h = var13;
 {
 { /* Inline coloring#POSetBucketsColorer#poset (self) on <self:POSetBucketsColorer[Object, Object]> */
-var15 = self->attrs[COLOR_coloring__POSetBucketsColorer___poset].val; /* _poset on <self:POSetBucketsColorer[Object, Object]> */
-if (unlikely(var15 == NULL)) {
+var16 = self->attrs[COLOR_coloring__POSetBucketsColorer___poset].val; /* _poset on <self:POSetBucketsColorer[Object, Object]> */
+if (unlikely(var16 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 335);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 331);
 show_backtrace(1);
 }
-var13 = var15;
-RET_LABEL14:(void)0;
+var14 = var16;
+RET_LABEL15:(void)0;
 }
 }
 {
-var16 = poset__POSet___91d_93d(var13, var_h);
+var17 = poset__POSet___91d_93d(var14, var_h);
 }
 {
-var17 = poset__POSetElement__direct_greaters(var16);
+var18 = poset__POSetElement__direct_greaters(var17);
 }
 {
-var18 = coloring__POSetBucketsColorer__min_color(self, var17, var_buckets);
+var19 = coloring__POSetBucketsColorer__min_color(self, var18, var_buckets);
 }
-var_color = var18;
+var_color = var19;
 {
-var19 = ((val* (*)(val*, val*))(var_buckets->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_buckets, var_h) /* [] on <var_buckets:Map[Object, Set[Object]]>*/;
+var20 = ((val* (*)(val*, val*))(var_buckets->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_buckets, var_h) /* [] on <var_buckets:Map[Object, Set[Object]]>*/;
 }
+var_21 = var20;
 {
-var20 = ((val* (*)(val*))(var19->class->vft[COLOR_abstract_collection__Collection__iterator]))(var19) /* iterator on <var19:nullable Object(Set[Object])>*/;
+var22 = ((val* (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_21) /* iterator on <var_21:Set[Object]>*/;
 }
+var_23 = var22;
 for(;;) {
 {
-var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
+var24 = ((short int (*)(val*))(var_23->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_23) /* is_ok on <var_23:Iterator[Object]>*/;
 }
-if(!var21) break;
+if (var24){
 {
-var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
+var25 = ((val* (*)(val*))(var_23->class->vft[COLOR_abstract_collection__Iterator__item]))(var_23) /* item on <var_23:Iterator[Object]>*/;
 }
-var_bucket = var22;
+var_bucket = var25;
 {
 { /* Inline coloring#POSetBucketsColorer#colors (self) on <self:POSetBucketsColorer[Object, Object]> */
-var25 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
-if (unlikely(var25 == NULL)) {
+var28 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
+if (unlikely(var28 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
-var23 = var25;
-RET_LABEL24:(void)0;
+var26 = var28;
+RET_LABEL27:(void)0;
 }
 }
 {
-var26 = abstract_collection__MapRead__has_key(var23, var_bucket);
+var29 = abstract_collection__MapRead__has_key(var26, var_bucket);
 }
-if (var26){
-goto CONTINUE_label;
+if (var29){
+goto BREAK_label;
 } else {
 }
 for(;;) {
 {
-var27 = coloring__POSetBucketsColorer__is_color_free(self, var_color, var_h, var_buckets);
+var30 = coloring__POSetBucketsColorer__is_color_free(self, var_color, var_h, var_buckets);
 }
-var28 = !var27;
-if (!var28) break;
-var29 = 1;
+var31 = !var30;
+if (var31){
+var32 = 1;
 {
-{ /* Inline kernel#Int#+ (var_color,var29) on <var_color:Int> */
-/* Covariant cast for argument 0 (i) <var29:Int> isa OTHER */
-/* <var29:Int> isa OTHER */
-var32 = 1; /* easy <var29:Int> isa OTHER*/
-if (unlikely(!var32)) {
-var_class_name35 = type_kernel__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name35);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
+{ /* Inline kernel#Int#+ (var_color,var32) on <var_color:Int> */
+/* Covariant cast for argument 0 (i) <var32:Int> isa OTHER */
+/* <var32:Int> isa OTHER */
+var35 = 1; /* easy <var32:Int> isa OTHER*/
+if (unlikely(!var35)) {
+var_class_name38 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name38);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
-var36 = var_color + var29;
-var30 = var36;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
+var39 = var_color + var32;
+var33 = var39;
+goto RET_LABEL34;
+RET_LABEL34:(void)0;
+}
 }
+var_color = var33;
+} else {
+goto BREAK_label40;
 }
-var_color = var30;
-CONTINUE_label37: (void)0;
 }
-BREAK_label37: (void)0;
+BREAK_label40: (void)0;
 {
 { /* Inline coloring#POSetBucketsColorer#colors (self) on <self:POSetBucketsColorer[Object, Object]> */
-var40 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
-if (unlikely(var40 == NULL)) {
+var43 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
+if (unlikely(var43 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
-var38 = var40;
-RET_LABEL39:(void)0;
+var41 = var43;
+RET_LABEL42:(void)0;
 }
 }
 {
-var41 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
-hash_collection__HashMap___91d_93d_61d(var38, var_bucket, var41); /* Direct call hash_collection#HashMap#[]= on <var38:HashMap[Object, Int]>*/
+var44 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
+hash_collection__HashMap___91d_93d_61d(var41, var_bucket, var44); /* Direct call hash_collection#HashMap#[]= on <var41:HashMap[Object, Int]>*/
 }
-var42 = 1;
+var45 = 1;
 {
-{ /* Inline kernel#Int#+ (var_color,var42) on <var_color:Int> */
-/* Covariant cast for argument 0 (i) <var42:Int> isa OTHER */
-/* <var42:Int> isa OTHER */
-var45 = 1; /* easy <var42:Int> isa OTHER*/
-if (unlikely(!var45)) {
-var_class_name48 = type_kernel__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name48);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
+{ /* Inline kernel#Int#+ (var_color,var45) on <var_color:Int> */
+/* Covariant cast for argument 0 (i) <var45:Int> isa OTHER */
+/* <var45:Int> isa OTHER */
+var48 = 1; /* easy <var45:Int> isa OTHER*/
+if (unlikely(!var48)) {
+var_class_name51 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name51);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
-var49 = var_color + var42;
-var43 = var49;
-goto RET_LABEL44;
-RET_LABEL44:(void)0;
+var52 = var_color + var45;
+var46 = var52;
+goto RET_LABEL47;
+RET_LABEL47:(void)0;
+}
+}
+var_color = var46;
+BREAK_label: (void)0;
+{
+((void (*)(val*))(var_23->class->vft[COLOR_abstract_collection__Iterator__next]))(var_23) /* next on <var_23:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label53;
 }
 }
-var_color = var43;
-CONTINUE_label: (void)0;
+BREAK_label53: (void)0;
 {
-((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_23) on <var_23:Iterator[Object]> */
+RET_LABEL54:(void)0;
 }
 }
-BREAK_label: (void)0;
-CONTINUE_label50: (void)0;
 {
-array__ArrayIterator__next(var10); /* Direct call array#ArrayIterator#next on <var10:ArrayIterator[nullable Object]>*/
+array__ArrayIterator__next(var_11); /* Direct call array#ArrayIterator#next on <var_11:ArrayIterator[Object]>*/
+}
+} else {
+goto BREAK_label55;
+}
+}
+BREAK_label55: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:ArrayIterator[Object]> */
+RET_LABEL56:(void)0;
 }
 }
-BREAK_label50: (void)0;
 {
 { /* Inline coloring#POSetBucketsColorer#colors (self) on <self:POSetBucketsColorer[Object, Object]> */
-var53 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
-if (unlikely(var53 == NULL)) {
+var59 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
+if (unlikely(var59 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
-var51 = var53;
-RET_LABEL52:(void)0;
+var57 = var59;
+RET_LABEL58:(void)0;
 }
 }
-var = var51;
+var = var57;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -3985,27 +4205,29 @@ long var7 /* : Int */;
 long var8 /* : Int */;
 long var10 /* : Int */;
 long var_min /* var min: Int */;
+val* var_ /* var : Collection[Object] */;
 val* var11 /* : Iterator[nullable Object] */;
-short int var12 /* : Bool */;
-val* var13 /* : nullable Object */;
+val* var_12 /* var : Iterator[Object] */;
+short int var13 /* : Bool */;
+val* var14 /* : nullable Object */;
 val* var_holder /* var holder: Object */;
-long var14 /* : Int */;
+long var15 /* : Int */;
 long var_color /* var color: Int */;
-short int var15 /* : Bool */;
-short int var17 /* : Bool */;
-int cltype18;
-int idtype19;
-const char* var_class_name20;
-short int var21 /* : Bool */;
-long var22 /* : Int */;
-long var23 /* : Int */;
-short int var25 /* : Bool */;
-int cltype26;
-int idtype27;
-const char* var_class_name28;
-long var29 /* : Int */;
-/* Covariant cast for argument 0 (others) <p0:Collection[Object]> isa Collection[POSetBucketsColorer#0] */
-/* <p0:Collection[Object]> isa Collection[POSetBucketsColorer#0] */
+short int var16 /* : Bool */;
+short int var18 /* : Bool */;
+int cltype19;
+int idtype20;
+const char* var_class_name21;
+short int var22 /* : Bool */;
+long var24 /* : Int */;
+long var25 /* : Int */;
+short int var27 /* : Bool */;
+int cltype28;
+int idtype29;
+const char* var_class_name30;
+long var31 /* : Int */;
+/* Covariant cast for argument 0 (others) <p0:Collection[Object]> isa Collection[H] */
+/* <p0:Collection[Object]> isa Collection[H] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectioncoloring__POSetBucketsColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -4016,12 +4238,12 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[POSetBucketsColorer#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 358);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[H]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 354);
 show_backtrace(1);
 }
-/* Covariant cast for argument 1 (buckets) <p1:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]] */
-/* <p1:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]] */
+/* Covariant cast for argument 1 (buckets) <p1:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
+/* <p1:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
 type_struct5 = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetBucketsColorer_FT0abstract_collection__Setcoloring__POSetBucketsColorer_FT1];
 cltype3 = type_struct5->color;
 idtype4 = type_struct5->id;
@@ -4032,8 +4254,8 @@ var2 = p1->type->type_table[cltype3] == idtype4;
 }
 if (unlikely(!var2)) {
 var_class_name6 = p1 == NULL ? "null" : p1->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]]", var_class_name6);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 358);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[E]]", var_class_name6);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 354);
 show_backtrace(1);
 }
 var_others = p0;
@@ -4048,68 +4270,77 @@ RET_LABEL9:(void)0;
 }
 }
 var_min = var8;
+var_ = var_others;
 {
-var11 = ((val* (*)(val*))(var_others->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_others) /* iterator on <var_others:Collection[Object]>*/;
+var11 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[Object]>*/;
 }
+var_12 = var11;
 for(;;) {
 {
-var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var11) /* is_ok on <var11:Iterator[nullable Object]>*/;
+var13 = ((short int (*)(val*))(var_12->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_12) /* is_ok on <var_12:Iterator[Object]>*/;
 }
-if(!var12) break;
+if (var13){
 {
-var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__item]))(var11) /* item on <var11:Iterator[nullable Object]>*/;
+var14 = ((val* (*)(val*))(var_12->class->vft[COLOR_abstract_collection__Iterator__item]))(var_12) /* item on <var_12:Iterator[Object]>*/;
 }
-var_holder = var13;
+var_holder = var14;
 {
-var14 = coloring__POSetBucketsColorer__max_color(self, var_holder, var_buckets);
+var15 = coloring__POSetBucketsColorer__max_color(self, var_holder, var_buckets);
 }
-var_color = var14;
+var_color = var15;
 {
 { /* Inline kernel#Int#> (var_color,var_min) on <var_color:Int> */
 /* Covariant cast for argument 0 (i) <var_min:Int> isa OTHER */
 /* <var_min:Int> isa OTHER */
-var17 = 1; /* easy <var_min:Int> isa OTHER*/
-if (unlikely(!var17)) {
-var_class_name20 = type_kernel__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name20);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 327);
+var18 = 1; /* easy <var_min:Int> isa OTHER*/
+if (unlikely(!var18)) {
+var_class_name21 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name21);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
 show_backtrace(1);
 }
-var21 = var_color > var_min;
-var15 = var21;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
+var22 = var_color > var_min;
+var16 = var22;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
 }
 }
-if (var15){
+if (var16){
 var_min = var_color;
 } else {
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__next]))(var11) /* next on <var11:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_12->class->vft[COLOR_abstract_collection__Iterator__next]))(var_12) /* next on <var_12:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
-var22 = 1;
 {
-{ /* Inline kernel#Int#+ (var_min,var22) on <var_min:Int> */
-/* Covariant cast for argument 0 (i) <var22:Int> isa OTHER */
-/* <var22:Int> isa OTHER */
-var25 = 1; /* easy <var22:Int> isa OTHER*/
-if (unlikely(!var25)) {
-var_class_name28 = type_kernel__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name28);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
+{ /* Inline abstract_collection#Iterator#finish (var_12) on <var_12:Iterator[Object]> */
+RET_LABEL23:(void)0;
+}
+}
+var24 = 1;
+{
+{ /* Inline kernel#Int#+ (var_min,var24) on <var_min:Int> */
+/* Covariant cast for argument 0 (i) <var24:Int> isa OTHER */
+/* <var24:Int> isa OTHER */
+var27 = 1; /* easy <var24:Int> isa OTHER*/
+if (unlikely(!var27)) {
+var_class_name30 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name30);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
-var29 = var_min + var22;
-var23 = var29;
-goto RET_LABEL24;
-RET_LABEL24:(void)0;
+var31 = var_min + var24;
+var25 = var31;
+goto RET_LABEL26;
+RET_LABEL26:(void)0;
 }
 }
-var = var23;
+var = var25;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -4143,27 +4374,29 @@ long var8 /* : Int */;
 long var10 /* : Int */;
 long var_max /* var max: Int */;
 val* var11 /* : nullable Object */;
+val* var_ /* var : Set[Object] */;
 val* var12 /* : Iterator[nullable Object] */;
-short int var13 /* : Bool */;
-val* var14 /* : nullable Object */;
+val* var_13 /* var : Iterator[Object] */;
+short int var14 /* : Bool */;
+val* var15 /* : nullable Object */;
 val* var_bucket /* var bucket: Object */;
-val* var15 /* : HashMap[Object, Int] */;
-val* var17 /* : HashMap[Object, Int] */;
-short int var18 /* : Bool */;
+val* var16 /* : HashMap[Object, Int] */;
+val* var18 /* : HashMap[Object, Int] */;
 short int var19 /* : Bool */;
-val* var20 /* : HashMap[Object, Int] */;
-val* var22 /* : HashMap[Object, Int] */;
-val* var23 /* : nullable Object */;
-long var24 /* : Int */;
+short int var20 /* : Bool */;
+val* var21 /* : HashMap[Object, Int] */;
+val* var23 /* : HashMap[Object, Int] */;
+val* var24 /* : nullable Object */;
+long var25 /* : Int */;
 long var_color /* var color: Int */;
-short int var25 /* : Bool */;
-short int var27 /* : Bool */;
-int cltype28;
-int idtype29;
-const char* var_class_name30;
-short int var31 /* : Bool */;
-/* Covariant cast for argument 0 (holder) <p0:Object> isa POSetBucketsColorer#0 */
-/* <p0:Object> isa POSetBucketsColorer#0 */
+short int var26 /* : Bool */;
+short int var28 /* : Bool */;
+int cltype29;
+int idtype30;
+const char* var_class_name31;
+short int var32 /* : Bool */;
+/* Covariant cast for argument 0 (holder) <p0:Object> isa H */
+/* <p0:Object> isa H */
 type_struct = self->type->resolution_table->types[COLOR_coloring__POSetBucketsColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -4174,12 +4407,12 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetBucketsColorer#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 368);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "H", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 364);
 show_backtrace(1);
 }
-/* Covariant cast for argument 1 (buckets) <p1:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]] */
-/* <p1:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]] */
+/* Covariant cast for argument 1 (buckets) <p1:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
+/* <p1:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
 type_struct5 = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetBucketsColorer_FT0abstract_collection__Setcoloring__POSetBucketsColorer_FT1];
 cltype3 = type_struct5->color;
 idtype4 = type_struct5->id;
@@ -4190,8 +4423,8 @@ var2 = p1->type->type_table[cltype3] == idtype4;
 }
 if (unlikely(!var2)) {
 var_class_name6 = p1 == NULL ? "null" : p1->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]]", var_class_name6);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 368);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[E]]", var_class_name6);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 364);
 show_backtrace(1);
 }
 var_holder = p0;
@@ -4209,82 +4442,92 @@ var_max = var8;
 {
 var11 = ((val* (*)(val*, val*))(var_buckets->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_buckets, var_holder) /* [] on <var_buckets:Map[Object, Set[Object]]>*/;
 }
+var_ = var11;
 {
-var12 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Collection__iterator]))(var11) /* iterator on <var11:nullable Object(Set[Object])>*/;
+var12 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[Object]>*/;
 }
+var_13 = var12;
 for(;;) {
 {
-var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var12) /* is_ok on <var12:Iterator[nullable Object]>*/;
+var14 = ((short int (*)(val*))(var_13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_13) /* is_ok on <var_13:Iterator[Object]>*/;
 }
-if(!var13) break;
+if (var14){
 {
-var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__item]))(var12) /* item on <var12:Iterator[nullable Object]>*/;
+var15 = ((val* (*)(val*))(var_13->class->vft[COLOR_abstract_collection__Iterator__item]))(var_13) /* item on <var_13:Iterator[Object]>*/;
 }
-var_bucket = var14;
+var_bucket = var15;
 {
 { /* Inline coloring#POSetBucketsColorer#colors (self) on <self:POSetBucketsColorer[Object, Object]> */
-var17 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
-if (unlikely(var17 == NULL)) {
+var18 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
+if (unlikely(var18 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
-var15 = var17;
-RET_LABEL16:(void)0;
+var16 = var18;
+RET_LABEL17:(void)0;
 }
 }
 {
-var18 = abstract_collection__MapRead__has_key(var15, var_bucket);
+var19 = abstract_collection__MapRead__has_key(var16, var_bucket);
 }
-var19 = !var18;
-if (var19){
-goto CONTINUE_label;
+var20 = !var19;
+if (var20){
+goto BREAK_label;
 } else {
 }
 {
 { /* Inline coloring#POSetBucketsColorer#colors (self) on <self:POSetBucketsColorer[Object, Object]> */
-var22 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
-if (unlikely(var22 == NULL)) {
+var23 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
+if (unlikely(var23 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
-var20 = var22;
-RET_LABEL21:(void)0;
+var21 = var23;
+RET_LABEL22:(void)0;
 }
 }
 {
-var23 = hash_collection__HashMap___91d_93d(var20, var_bucket);
+var24 = hash_collection__HashMap___91d_93d(var21, var_bucket);
 }
-var24 = ((struct instance_kernel__Int*)var23)->value; /* autounbox from nullable Object to Int */;
-var_color = var24;
+var25 = ((struct instance_kernel__Int*)var24)->value; /* autounbox from nullable Object to Int */;
+var_color = var25;
 {
 { /* Inline kernel#Int#> (var_color,var_max) on <var_color:Int> */
 /* Covariant cast for argument 0 (i) <var_max:Int> isa OTHER */
 /* <var_max:Int> isa OTHER */
-var27 = 1; /* easy <var_max:Int> isa OTHER*/
-if (unlikely(!var27)) {
-var_class_name30 = type_kernel__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name30);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 327);
+var28 = 1; /* easy <var_max:Int> isa OTHER*/
+if (unlikely(!var28)) {
+var_class_name31 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name31);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
 show_backtrace(1);
 }
-var31 = var_color > var_max;
-var25 = var31;
-goto RET_LABEL26;
-RET_LABEL26:(void)0;
+var32 = var_color > var_max;
+var26 = var32;
+goto RET_LABEL27;
+RET_LABEL27:(void)0;
 }
 }
-if (var25){
+if (var26){
 var_max = var_color;
 } else {
 }
-CONTINUE_label: (void)0;
+BREAK_label: (void)0;
+{
+((void (*)(val*))(var_13->class->vft[COLOR_abstract_collection__Iterator__next]))(var_13) /* next on <var_13:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label33;
+}
+}
+BREAK_label33: (void)0;
 {
-((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__next]))(var12) /* next on <var12:Iterator[nullable Object]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_13) on <var_13:Iterator[Object]> */
+RET_LABEL34:(void)0;
 }
 }
-BREAK_label: (void)0;
 var = var_max;
 goto RET_LABEL;
 RET_LABEL:;
@@ -4323,30 +4566,34 @@ short int var12 /* : Bool */;
 val* var13 /* : Map[Object, Set[Object]] */;
 val* var15 /* : Map[Object, Set[Object]] */;
 val* var16 /* : nullable Object */;
+val* var_ /* var : Set[Object] */;
 val* var17 /* : Iterator[nullable Object] */;
-short int var18 /* : Bool */;
-val* var19 /* : nullable Object */;
-val* var_conflict /* var conflict: Object */;
+val* var_18 /* var : Iterator[Object] */;
+short int var19 /* : Bool */;
 val* var20 /* : nullable Object */;
-val* var21 /* : Iterator[nullable Object] */;
-short int var22 /* : Bool */;
-val* var23 /* : nullable Object */;
+val* var_conflict /* var conflict: Object */;
+val* var21 /* : nullable Object */;
+val* var_22 /* var : Set[Object] */;
+val* var23 /* : Iterator[nullable Object] */;
+val* var_24 /* var : Iterator[Object] */;
+short int var25 /* : Bool */;
+val* var26 /* : nullable Object */;
 val* var_bucket /* var bucket: Object */;
-val* var24 /* : HashMap[Object, Int] */;
-val* var26 /* : HashMap[Object, Int] */;
-short int var27 /* : Bool */;
-short int var28 /* : Bool */;
+val* var27 /* : HashMap[Object, Int] */;
 val* var29 /* : HashMap[Object, Int] */;
-val* var31 /* : HashMap[Object, Int] */;
-val* var32 /* : nullable Object */;
-short int var33 /* : Bool */;
-short int var34 /* : Bool */;
+short int var30 /* : Bool */;
+short int var31 /* : Bool */;
+val* var32 /* : HashMap[Object, Int] */;
+val* var34 /* : HashMap[Object, Int] */;
+val* var35 /* : nullable Object */;
 short int var36 /* : Bool */;
-long var37 /* : Int */;
-short int var38 /* : Bool */;
-short int var40 /* : Bool */;
-/* Covariant cast for argument 1 (holder) <p1:Object> isa POSetBucketsColorer#0 */
-/* <p1:Object> isa POSetBucketsColorer#0 */
+short int var37 /* : Bool */;
+short int var39 /* : Bool */;
+long var40 /* : Int */;
+short int var41 /* : Bool */;
+short int var46 /* : Bool */;
+/* Covariant cast for argument 1 (holder) <p1:Object> isa H */
+/* <p1:Object> isa H */
 type_struct = self->type->resolution_table->types[COLOR_coloring__POSetBucketsColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -4357,12 +4604,12 @@ var1 = p1->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var1)) {
 var_class_name = p1 == NULL ? "null" : p1->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetBucketsColorer#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 379);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "H", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 375);
 show_backtrace(1);
 }
-/* Covariant cast for argument 2 (buckets) <p2:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]] */
-/* <p2:Map[Object, Set[Object]]> isa Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]] */
+/* Covariant cast for argument 2 (buckets) <p2:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
+/* <p2:Map[Object, Set[Object]]> isa Map[H, Set[E]] */
 type_struct5 = self->type->resolution_table->types[COLOR_abstract_collection__Mapcoloring__POSetBucketsColorer_FT0abstract_collection__Setcoloring__POSetBucketsColorer_FT1];
 cltype3 = type_struct5->color;
 idtype4 = type_struct5->id;
@@ -4373,8 +4620,8 @@ var2 = p2->type->type_table[cltype3] == idtype4;
 }
 if (unlikely(!var2)) {
 var_class_name6 = p2 == NULL ? "null" : p2->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[POSetBucketsColorer#0, Set[POSetBucketsColorer#1]]", var_class_name6);
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 379);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[H, Set[E]]", var_class_name6);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 375);
 show_backtrace(1);
 }
 var_color = p0;
@@ -4385,7 +4632,7 @@ var_buckets = p2;
 var9 = self->attrs[COLOR_coloring__POSetBucketsColorer___conflicts].val; /* _conflicts on <self:POSetBucketsColorer[Object, Object]> */
 if (unlikely(var9 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 336);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 332);
 show_backtrace(1);
 }
 var7 = var9;
@@ -4407,7 +4654,7 @@ goto RET_LABEL;
 var15 = self->attrs[COLOR_coloring__POSetBucketsColorer___conflicts].val; /* _conflicts on <self:POSetBucketsColorer[Object, Object]> */
 if (unlikely(var15 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _conflicts");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 336);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 332);
 show_backtrace(1);
 }
 var13 = var15;
@@ -4417,101 +4664,120 @@ RET_LABEL14:(void)0;
 {
 var16 = ((val* (*)(val*, val*))(var13->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var13, var_holder) /* [] on <var13:Map[Object, Set[Object]]>*/;
 }
+var_ = var16;
 {
-var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_collection__Collection__iterator]))(var16) /* iterator on <var16:nullable Object(Set[Object])>*/;
+var17 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[Object]>*/;
 }
+var_18 = var17;
 for(;;) {
 {
-var18 = ((short int (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var17) /* is_ok on <var17:Iterator[nullable Object]>*/;
+var19 = ((short int (*)(val*))(var_18->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_18) /* is_ok on <var_18:Iterator[Object]>*/;
 }
-if(!var18) break;
+if (var19){
 {
-var19 = ((val* (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__item]))(var17) /* item on <var17:Iterator[nullable Object]>*/;
+var20 = ((val* (*)(val*))(var_18->class->vft[COLOR_abstract_collection__Iterator__item]))(var_18) /* item on <var_18:Iterator[Object]>*/;
 }
-var_conflict = var19;
+var_conflict = var20;
 {
-var20 = ((val* (*)(val*, val*))(var_buckets->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_buckets, var_conflict) /* [] on <var_buckets:Map[Object, Set[Object]]>*/;
+var21 = ((val* (*)(val*, val*))(var_buckets->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_buckets, var_conflict) /* [] on <var_buckets:Map[Object, Set[Object]]>*/;
 }
+var_22 = var21;
 {
-var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Collection__iterator]))(var20) /* iterator on <var20:nullable Object(Set[Object])>*/;
+var23 = ((val* (*)(val*))(var_22->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_22) /* iterator on <var_22:Set[Object]>*/;
 }
+var_24 = var23;
 for(;;) {
 {
-var22 = ((short int (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var21) /* is_ok on <var21:Iterator[nullable Object]>*/;
+var25 = ((short int (*)(val*))(var_24->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_24) /* is_ok on <var_24:Iterator[Object]>*/;
 }
-if(!var22) break;
+if (var25){
 {
-var23 = ((val* (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__item]))(var21) /* item on <var21:Iterator[nullable Object]>*/;
+var26 = ((val* (*)(val*))(var_24->class->vft[COLOR_abstract_collection__Iterator__item]))(var_24) /* item on <var_24:Iterator[Object]>*/;
 }
-var_bucket = var23;
+var_bucket = var26;
 {
 { /* Inline coloring#POSetBucketsColorer#colors (self) on <self:POSetBucketsColorer[Object, Object]> */
-var26 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
-if (unlikely(var26 == NULL)) {
+var29 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
+if (unlikely(var29 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
-var24 = var26;
-RET_LABEL25:(void)0;
+var27 = var29;
+RET_LABEL28:(void)0;
 }
 }
 {
-var27 = abstract_collection__MapRead__has_key(var24, var_bucket);
+var30 = abstract_collection__MapRead__has_key(var27, var_bucket);
 }
-var28 = !var27;
-if (var28){
-goto CONTINUE_label;
+var31 = !var30;
+if (var31){
+goto BREAK_label;
 } else {
 }
 {
 { /* Inline coloring#POSetBucketsColorer#colors (self) on <self:POSetBucketsColorer[Object, Object]> */
-var31 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
-if (unlikely(var31 == NULL)) {
+var34 = self->attrs[COLOR_coloring__POSetBucketsColorer___colors].val; /* _colors on <self:POSetBucketsColorer[Object, Object]> */
+if (unlikely(var34 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _colors");
-PRINT_ERROR(" (%s:%d)\n", "src/coloring.nit", 334);
+PRINT_ERROR(" (%s:%d)\n", "compiler/coloring.nit", 330);
 show_backtrace(1);
 }
-var29 = var31;
-RET_LABEL30:(void)0;
+var32 = var34;
+RET_LABEL33:(void)0;
 }
 }
 {
-var32 = hash_collection__HashMap___91d_93d(var29, var_bucket);
+var35 = hash_collection__HashMap___91d_93d(var32, var_bucket);
 }
 {
-{ /* Inline kernel#Int#== (var32,var_color) on <var32:nullable Object(Int)> */
-var36 = (var32 != NULL) && (var32->class == &class_kernel__Int);
-if (var36) {
-var37 = ((struct instance_kernel__Int*)var32)->value; /* autounbox from nullable Object to Int */;
-var36 = (var37 == var_color);
+{ /* Inline kernel#Int#== (var35,var_color) on <var35:nullable Object(Int)> */
+var39 = (var35 != NULL) && (var35->class == &class_kernel__Int);
+if (var39) {
+var40 = ((struct instance_kernel__Int*)var35)->value; /* autounbox from nullable Object to Int */;
+var39 = (var40 == var_color);
 }
-var34 = var36;
-goto RET_LABEL35;
-RET_LABEL35:(void)0;
+var37 = var39;
+goto RET_LABEL38;
+RET_LABEL38:(void)0;
 }
-var33 = var34;
+var36 = var37;
 }
-if (var33){
-var38 = 0;
-var = var38;
+if (var36){
+var41 = 0;
+var = var41;
 goto RET_LABEL;
 } else {
 }
-CONTINUE_label: (void)0;
+BREAK_label: (void)0;
 {
-((void (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__next]))(var21) /* next on <var21:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_24->class->vft[COLOR_abstract_collection__Iterator__next]))(var_24) /* next on <var_24:Iterator[Object]>*/;
 }
+} else {
+goto BREAK_label42;
 }
-BREAK_label: (void)0;
-CONTINUE_label39: (void)0;
+}
+BREAK_label42: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_24) on <var_24:Iterator[Object]> */
+RET_LABEL43:(void)0;
+}
+}
+{
+((void (*)(val*))(var_18->class->vft[COLOR_abstract_collection__Iterator__next]))(var_18) /* next on <var_18:Iterator[Object]>*/;
+}
+} else {
+goto BREAK_label44;
+}
+}
+BREAK_label44: (void)0;
 {
-((void (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__next]))(var17) /* next on <var17:Iterator[nullable Object]>*/;
+{ /* Inline abstract_collection#Iterator#finish (var_18) on <var_18:Iterator[Object]> */
+RET_LABEL45:(void)0;
 }
 }
-BREAK_label39: (void)0;
-var40 = 1;
-var = var40;
+var46 = 1;
+var = var46;
 goto RET_LABEL;
 RET_LABEL:;
 return var;