update c_src
[nit.git] / c_src / abstract_collection.sep.1.c
index fea0f30..60f5245 100644 (file)
@@ -39,56 +39,67 @@ long abstract_collection__Collection__length(val* self) {
 long var /* : Int */;
 long var1 /* : Int */;
 long var_nb /* var nb: Int */;
+val* var_ /* var : Collection[nullable Object] */;
 val* var2 /* : Iterator[nullable Object] */;
-short int var3 /* : Bool */;
-val* var4 /* : nullable Object */;
+val* var_3 /* var : Iterator[nullable Object] */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable Object */;
 val* var_i /* var i: nullable Object */;
-long var5 /* : Int */;
 long var6 /* : Int */;
-short int var8 /* : Bool */;
+long var7 /* : Int */;
+short int var9 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-long var9 /* : Int */;
+long var10 /* : Int */;
 var1 = 0;
 var_nb = var1;
+var_ = self;
 {
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:Collection[nullable Object]>*/;
+var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[nullable 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[nullable 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[nullable Object]>*/;
 }
-var_i = var4;
-var5 = 1;
+var_i = var5;
+var6 = 1;
 {
-{ /* Inline kernel#Int#+ (var_nb,var5) on <var_nb:Int> */
-/* Covariant cast for argument 0 (i) <var5:Int> isa OTHER */
-/* <var5:Int> isa OTHER */
-var8 = 1; /* easy <var5:Int> isa OTHER*/
-if (unlikely(!var8)) {
+{ /* Inline kernel#Int#+ (var_nb,var6) on <var_nb:Int> */
+/* Covariant cast for argument 0 (i) <var6:Int> isa OTHER */
+/* <var6:Int> isa OTHER */
+var9 = 1; /* easy <var6:Int> isa OTHER*/
+if (unlikely(!var9)) {
 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);
 }
-var9 = var_nb + var5;
-var6 = var9;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+var10 = var_nb + var6;
+var7 = var10;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
 }
-var_nb = var6;
-CONTINUE_label: (void)0;
+var_nb = var7;
 {
-((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[nullable Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[nullable Object]> */
+RET_LABEL11:(void)0;
+}
+}
 var = var_nb;
 goto RET_LABEL;
 RET_LABEL:;
@@ -113,16 +124,18 @@ const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
 val* var_item /* var item: nullable Object */;
+val* var_ /* var : Collection[nullable Object] */;
 val* var2 /* : Iterator[nullable Object] */;
-short int var3 /* : Bool */;
-val* var4 /* : nullable Object */;
+val* var_3 /* var : Iterator[nullable Object] */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable Object */;
 val* var_i /* var i: nullable Object */;
-short int var5 /* : Bool */;
 short int var6 /* : Bool */;
 short int var7 /* : Bool */;
 short int var8 /* : Bool */;
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa Collection#0 */
-/* <p0:nullable Object> isa Collection#0 */
+short int var10 /* : Bool */;
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collection_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -138,43 +151,52 @@ 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#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 76);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 76);
 show_backtrace(1);
 }
 var_item = p0;
+var_ = self;
 {
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:Collection[nullable Object]>*/;
+var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[nullable 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[nullable 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[nullable Object]>*/;
 }
-var_i = var4;
+var_i = var5;
 if (var_i == NULL) {
-var5 = (var_item == NULL);
+var6 = (var_item == NULL);
 } else {
-var6 = ((short int (*)(val*, val*))(var_i->class->vft[COLOR_kernel__Object___61d_61d]))(var_i, var_item) /* == on <var_i:nullable Object>*/;
-var5 = var6;
+var7 = ((short int (*)(val*, val*))(var_i->class->vft[COLOR_kernel__Object___61d_61d]))(var_i, var_item) /* == on <var_i:nullable Object>*/;
+var6 = var7;
 }
-if (var5){
-var7 = 1;
-var = var7;
+if (var6){
+var8 = 1;
+var = var8;
 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[nullable Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
-var8 = 0;
-var = var8;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[nullable Object]> */
+RET_LABEL9:(void)0;
+}
+}
+var10 = 0;
+var = var10;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -213,7 +235,7 @@ var5 = 1; /* easy <var2:Int> isa OTHER*/
 if (unlikely(!var5)) {
 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);
 }
 var6 = var1 > var2;
@@ -224,7 +246,7 @@ RET_LABEL4:(void)0;
 }
 if (unlikely(!var3)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 122);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 122);
 show_backtrace(1);
 }
 {
@@ -256,16 +278,18 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 val* var_other /* var other: Collection[nullable Object] */;
+val* var_ /* var : Collection[nullable Object] */;
 val* var2 /* : Iterator[nullable Object] */;
-short int var3 /* : Bool */;
-val* var4 /* : nullable Object */;
+val* var_3 /* var : Iterator[nullable Object] */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable Object */;
 val* var_x /* var x: nullable Object */;
-short int var5 /* : Bool */;
 short int var6 /* : Bool */;
 short int var7 /* : Bool */;
 short int var8 /* : Bool */;
-/* Covariant cast for argument 0 (other) <p0:Collection[nullable Object]> isa Collection[Collection#0] */
-/* <p0:Collection[nullable Object]> isa Collection[Collection#0] */
+short int var10 /* : Bool */;
+/* Covariant cast for argument 0 (other) <p0:Collection[nullable Object]> isa Collection[E] */
+/* <p0:Collection[nullable Object]> isa Collection[E] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectionabstract_collection__Collection_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -276,41 +300,50 @@ 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[Collection#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 126);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 126);
 show_backtrace(1);
 }
 var_other = p0;
+var_ = var_other;
 {
-var2 = ((val* (*)(val*))(var_other->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_other) /* iterator on <var_other:Collection[nullable Object]>*/;
+var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[nullable 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[nullable 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[nullable Object]>*/;
 }
-var_x = var4;
+var_x = var5;
 {
-var5 = ((short int (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__Collection__has]))(self, var_x) /* has on <self:Collection[nullable Object]>*/;
+var6 = ((short int (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__Collection__has]))(self, var_x) /* has on <self:Collection[nullable Object]>*/;
 }
-var6 = !var5;
-if (var6){
-var7 = 0;
-var = var7;
+var7 = !var6;
+if (var7){
+var8 = 0;
+var = var8;
 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[nullable Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
-var8 = 1;
-var = var8;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[nullable Object]> */
+RET_LABEL9:(void)0;
+}
+}
+var10 = 1;
+var = var10;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -341,6 +374,17 @@ var = var1;
 RET_LABEL:;
 return var;
 }
+/* method abstract_collection#Iterator#finish for (self: Iterator[nullable Object]) */
+void abstract_collection__Iterator__finish(val* self) {
+RET_LABEL:;
+}
+/* method abstract_collection#Iterator#finish for (self: Object) */
+void VIRTUAL_abstract_collection__Iterator__finish(val* self) {
+{ /* Inline abstract_collection#Iterator#finish (self) on <self:Object(Iterator[nullable Object])> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
 /* method abstract_collection#Container#first for (self: Container[nullable Object]): nullable Object */
 val* abstract_collection__Container__first(val* self) {
 val* var /* : nullable Object */;
@@ -419,8 +463,8 @@ val* var2 /* : nullable Object */;
 val* var4 /* : nullable Object */;
 short int var5 /* : Bool */;
 short int var6 /* : Bool */;
-/* Covariant cast for argument 0 (an_item) <p0:nullable Object> isa Collection#0 */
-/* <p0:nullable Object> isa Collection#0 */
+/* Covariant cast for argument 0 (an_item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collection_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -436,8 +480,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`", "Collection#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 172);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 182);
 show_backtrace(1);
 }
 var_an_item = p0;
@@ -505,8 +549,8 @@ int idtype4;
 const struct type* type_struct5;
 short int is_nullable6;
 const char* var_class_name7;
-/* Covariant cast for argument 0 (e) <p0:nullable Object> isa Container#0 */
-/* <p0:nullable Object> isa Container#0 */
+/* Covariant cast for argument 0 (e) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Container_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -522,15 +566,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`", "Container#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 187);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 197);
 show_backtrace(1);
 }
 var_e = p0;
 {
 { /* Inline abstract_collection#Container#item= (self,var_e) on <self:Container[nullable Object]> */
-/* Covariant cast for argument 0 (item) <var_e:nullable Object> isa Container#0 */
-/* <var_e:nullable Object> isa Container#0 */
+/* Covariant cast for argument 0 (item) <var_e:nullable Object> isa E */
+/* <var_e:nullable Object> isa E */
 type_struct5 = self->type->resolution_table->types[COLOR_abstract_collection__Container_FT0];
 cltype3 = type_struct5->color;
 idtype4 = type_struct5->id;
@@ -546,8 +590,8 @@ var2 = var_e->type->type_table[cltype3] == idtype4;
 }
 if (unlikely(!var2)) {
 var_class_name7 = var_e == NULL ? "null" : var_e->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Container#0", var_class_name7);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 190);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name7);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 200);
 show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Container___item].val = var_e; /* _item on <self:Container[nullable Object]> */
@@ -592,8 +636,8 @@ int idtype;
 const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa Container#0 */
-/* <p0:nullable Object> isa Container#0 */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Container_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -609,8 +653,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`", "Container#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 190);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 200);
 show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Container___item].val = p0; /* _item on <self:Container[nullable Object]> */
@@ -625,8 +669,8 @@ const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
 { /* Inline abstract_collection#Container#item= (self,p0) on <self:Object(Container[nullable Object])> */
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa Container#0 */
-/* <p0:nullable Object> isa Container#0 */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Container_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -642,8 +686,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`", "Container#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 190);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 200);
 show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Container___item].val = p0; /* _item on <self:Object(Container[nullable Object])> */
@@ -660,7 +704,7 @@ val* var4 /* : nullable Object */;
 var1 = self->attrs[COLOR_abstract_collection__ContainerIterator___container].val; /* _container on <self:ContainerIterator[nullable Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _container");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 197);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 207);
 show_backtrace(1);
 }
 {
@@ -709,8 +753,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 val* var_c /* var c: Container[nullable Object] */;
-/* Covariant cast for argument 0 (c) <p0:Container[nullable Object]> isa Container[ContainerIterator#0] */
-/* <p0:Container[nullable Object]> isa Container[ContainerIterator#0] */
+/* Covariant cast for argument 0 (c) <p0:Container[nullable Object]> isa Container[E] */
+/* <p0:Container[nullable Object]> isa Container[E] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Containerabstract_collection__ContainerIterator_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -721,8 +765,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`", "Container[ContainerIterator#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 201);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Container[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 211);
 show_backtrace(1);
 }
 var_c = p0;
@@ -775,7 +819,7 @@ void abstract_collection__RemovableCollection__clear(val* self) {
 const char* var_class_name;
 var_class_name = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "clear", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 212);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 222);
 show_backtrace(1);
 RET_LABEL:;
 }
@@ -785,7 +829,7 @@ const char* var_class_name;
 { /* Inline abstract_collection#RemovableCollection#clear (self) on <self:Object(RemovableCollection[nullable Object])> */
 var_class_name = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "clear", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 212);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 222);
 show_backtrace(1);
 RET_LABEL1:(void)0;
 }
@@ -800,8 +844,8 @@ const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
 const char* var_class_name1;
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa RemovableCollection#0 */
-/* <p0:nullable Object> isa RemovableCollection#0 */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__RemovableCollection_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -817,13 +861,13 @@ 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`", "RemovableCollection#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 221);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 231);
 show_backtrace(1);
 }
 var_class_name1 = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "remove", var_class_name1);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 221);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 231);
 show_backtrace(1);
 RET_LABEL:;
 }
@@ -837,8 +881,8 @@ short int is_nullable;
 const char* var_class_name;
 const char* var_class_name2;
 { /* Inline abstract_collection#RemovableCollection#remove (self,p0) on <self:Object(RemovableCollection[nullable Object])> */
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa RemovableCollection#0 */
-/* <p0:nullable Object> isa RemovableCollection#0 */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__RemovableCollection_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -854,13 +898,13 @@ 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`", "RemovableCollection#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 221);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 231);
 show_backtrace(1);
 }
 var_class_name2 = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "remove", var_class_name2);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 221);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 231);
 show_backtrace(1);
 RET_LABEL1:(void)0;
 }
@@ -874,12 +918,14 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 val* var_coll /* var coll: Collection[nullable Object] */;
+val* var_ /* var : Collection[nullable Object] */;
 val* var1 /* : Iterator[nullable Object] */;
-short int var2 /* : Bool */;
-val* var3 /* : nullable Object */;
+val* var_2 /* var : Iterator[nullable Object] */;
+short int var3 /* : Bool */;
+val* var4 /* : nullable Object */;
 val* var_i /* var i: nullable Object */;
-/* Covariant cast for argument 0 (coll) <p0:Collection[nullable Object]> isa Collection[SimpleCollection#0] */
-/* <p0:Collection[nullable Object]> isa Collection[SimpleCollection#0] */
+/* Covariant cast for argument 0 (coll) <p0:Collection[nullable Object]> isa Collection[E] */
+/* <p0:Collection[nullable Object]> isa Collection[E] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectionabstract_collection__SimpleCollection_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -890,32 +936,41 @@ 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[SimpleCollection#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 250);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 260);
 show_backtrace(1);
 }
 var_coll = p0;
+var_ = var_coll;
 {
-var1 = ((val* (*)(val*))(var_coll->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_coll) /* iterator on <var_coll:Collection[nullable Object]>*/;
+var1 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[nullable 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[nullable 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[nullable Object]>*/;
 }
-var_i = var3;
+var_i = var4;
 {
 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(self, var_i) /* add on <self:SimpleCollection[nullable Object]>*/;
 }
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
+((void (*)(val*))(var_2->class->vft[COLOR_abstract_collection__Iterator__next]))(var_2) /* next on <var_2:Iterator[nullable Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_2) on <var_2:Iterator[nullable Object]> */
+RET_LABEL5:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method abstract_collection#SimpleCollection#add_all for (self: Object, Collection[nullable Object]) */
@@ -987,7 +1042,7 @@ var = var11;
 goto RET_LABEL;
 } else {
 }
-/* <var_other:nullable Object(Set[Object])> isa Collection[Set#0] */
+/* <var_other:nullable Object(Set[Object])> isa Collection[E] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectionabstract_collection__Set_FT0];
 cltype13 = type_struct->color;
 idtype14 = type_struct->id;
@@ -998,8 +1053,8 @@ var12 = var_other->type->type_table[cltype13] == idtype14;
 }
 if (unlikely(!var12)) {
 var_class_name = var_other == NULL ? "null" : var_other->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[Set#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 301);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 311);
 show_backtrace(1);
 }
 {
@@ -1023,59 +1078,97 @@ return var;
 long abstract_collection__Set__hash(val* self) {
 long var /* : Int */;
 long var1 /* : Int */;
-long var_res /* var res: Int */;
-val* var2 /* : Iterator[nullable Object] */;
-short int var3 /* : Bool */;
-val* var4 /* : nullable Object */;
-val* var_e /* var e: Object */;
-long var5 /* : Int */;
-long var6 /* : Int */;
-short int var8 /* : Bool */;
+long var2 /* : Int */;
+long var3 /* : Int */;
+short int var5 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-long var9 /* : Int */;
-var1 = 0;
-var_res = var1;
+long var6 /* : Int */;
+long var_res /* var res: Int */;
+val* var_ /* var : Set[Object] */;
+val* var7 /* : Iterator[nullable Object] */;
+val* var_8 /* var : Iterator[Object] */;
+short int var9 /* : Bool */;
+val* var10 /* : nullable Object */;
+val* var_e /* var e: Object */;
+long var11 /* : Int */;
+long var12 /* : Int */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+const char* var_class_name17;
+long var18 /* : Int */;
+var1 = 23;
+{
+var2 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:Set[Object]>*/;
+}
+{
+{ /* Inline kernel#Int#+ (var1,var2) on <var1:Int> */
+/* Covariant cast for argument 0 (i) <var2:Int> isa OTHER */
+/* <var2:Int> isa OTHER */
+var5 = 1; /* easy <var2:Int> isa OTHER*/
+if (unlikely(!var5)) {
+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", 374);
+show_backtrace(1);
+}
+var6 = var1 + var2;
+var3 = var6;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
+}
+}
+var_res = var3;
+var_ = self;
 {
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:Set[Object]>*/;
+var7 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[Object]>*/;
 }
+var_8 = var7;
 for(;;) {
 {
-var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2: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(!var3) break;
+if (var9){
 {
-var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
+var10 = ((val* (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__item]))(var_8) /* item on <var_8:Iterator[Object]>*/;
 }
-var_e = var4;
+var_e = var10;
 {
-var5 = kernel__Int__hash(var_res);
+var11 = ((long (*)(val*))(var_e->class->vft[COLOR_kernel__Object__hash]))(var_e) /* hash on <var_e:Object>*/;
 }
 {
-{ /* Inline kernel#Int#+ (var_res,var5) on <var_res:Int> */
-/* Covariant cast for argument 0 (i) <var5:Int> isa OTHER */
-/* <var5:Int> isa OTHER */
-var8 = 1; /* easy <var5:Int> isa OTHER*/
-if (unlikely(!var8)) {
-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);
+{ /* Inline kernel#Int#+ (var_res,var11) on <var_res:Int> */
+/* Covariant cast for argument 0 (i) <var11:Int> isa OTHER */
+/* <var11:Int> isa OTHER */
+var14 = 1; /* easy <var11:Int> isa OTHER*/
+if (unlikely(!var14)) {
+var_class_name17 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name17);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
-var9 = var_res + var5;
-var6 = var9;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+var18 = var_res + var11;
+var12 = var18;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
 }
 }
-var_res = var6;
-CONTINUE_label: (void)0;
+var_res = var12;
 {
-((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2: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;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_8) on <var_8:Iterator[Object]> */
+RET_LABEL19:(void)0;
+}
+}
 var = var_res;
 goto RET_LABEL;
 RET_LABEL:;
@@ -1102,8 +1195,8 @@ val* var_key /* var key: Object */;
 short int var2 /* : Bool */;
 val* var3 /* : nullable Object */;
 val* var4 /* : null */;
-/* Covariant cast for argument 0 (key) <p0:Object> isa MapRead#0 */
-/* <p0:Object> isa MapRead#0 */
+/* Covariant cast for argument 0 (key) <p0:Object> isa K */
+/* <p0:Object> isa K */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapRead_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1114,8 +1207,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`", "MapRead#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 345);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 358);
 show_backtrace(1);
 }
 var_key = p0;
@@ -1156,8 +1249,8 @@ const char* var_class_name;
 val* var_key /* var key: Object */;
 val* var2 /* : Collection[Object] */;
 short int var3 /* : Bool */;
-/* Covariant cast for argument 0 (key) <p0:Object> isa MapRead#0 */
-/* <p0:Object> isa MapRead#0 */
+/* Covariant cast for argument 0 (key) <p0:Object> isa K */
+/* <p0:Object> isa K */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapRead_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1168,8 +1261,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`", "MapRead#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 372);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 385);
 show_backtrace(1);
 }
 var_key = p0;
@@ -1202,8 +1295,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 val* var_key /* var key: Object */;
-/* Covariant cast for argument 0 (key) <p0:Object> isa MapRead#0 */
-/* <p0:Object> isa MapRead#0 */
+/* Covariant cast for argument 0 (key) <p0:Object> isa K */
+/* <p0:Object> isa K */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapRead_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1214,13 +1307,13 @@ 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`", "MapRead#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 416);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 429);
 show_backtrace(1);
 }
 var_key = p0;
 PRINT_ERROR("Runtime error: %s", "Aborted");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 421);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 434);
 show_backtrace(1);
 RET_LABEL:;
 return var;
@@ -1234,6 +1327,17 @@ var = var1;
 RET_LABEL:;
 return var;
 }
+/* method abstract_collection#MapIterator#finish for (self: MapIterator[Object, nullable Object]) */
+void abstract_collection__MapIterator__finish(val* self) {
+RET_LABEL:;
+}
+/* method abstract_collection#MapIterator#finish for (self: Object) */
+void VIRTUAL_abstract_collection__MapIterator__finish(val* self) {
+{ /* Inline abstract_collection#MapIterator#finish (self) on <self:Object(MapIterator[Object, nullable Object])> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
 /* method abstract_collection#MapKeysIterator#original_iterator for (self: MapKeysIterator[Object, nullable Object]): MapIterator[Object, nullable Object] */
 val* abstract_collection__MapKeysIterator__original_iterator(val* self) {
 val* var /* : MapIterator[Object, nullable Object] */;
@@ -1241,7 +1345,7 @@ val* var1 /* : MapIterator[Object, nullable Object] */;
 var1 = self->attrs[COLOR_abstract_collection__MapKeysIterator___original_iterator].val; /* _original_iterator on <self:MapKeysIterator[Object, nullable Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 531);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 554);
 show_backtrace(1);
 }
 var = var1;
@@ -1257,7 +1361,7 @@ val* var3 /* : MapIterator[Object, nullable Object] */;
 var3 = self->attrs[COLOR_abstract_collection__MapKeysIterator___original_iterator].val; /* _original_iterator on <self:Object(MapKeysIterator[Object, nullable Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 531);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 554);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1267,6 +1371,61 @@ var = var1;
 RET_LABEL:;
 return var;
 }
+/* method abstract_collection#MapKeysIterator#original_iterator= for (self: MapKeysIterator[Object, nullable Object], MapIterator[Object, nullable Object]) */
+void abstract_collection__MapKeysIterator__original_iterator_61d(val* self, val* p0) {
+short int var /* : Bool */;
+int cltype;
+int idtype;
+const struct type* type_struct;
+const char* var_class_name;
+/* Covariant cast for argument 0 (original_iterator) <p0:MapIterator[Object, nullable Object]> isa MapIterator[K, V] */
+/* <p0:MapIterator[Object, nullable Object]> isa MapIterator[K, V] */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapIteratorabstract_collection__MapKeysIterator_FT0abstract_collection__MapKeysIterator_FT1];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= p0->type->table_size) {
+var = 0;
+} else {
+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`", "MapIterator[K, V]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 554);
+show_backtrace(1);
+}
+self->attrs[COLOR_abstract_collection__MapKeysIterator___original_iterator].val = p0; /* _original_iterator on <self:MapKeysIterator[Object, nullable Object]> */
+RET_LABEL:;
+}
+/* method abstract_collection#MapKeysIterator#original_iterator= for (self: Object, MapIterator[Object, nullable Object]) */
+void VIRTUAL_abstract_collection__MapKeysIterator__original_iterator_61d(val* self, val* p0) {
+short int var /* : Bool */;
+int cltype;
+int idtype;
+const struct type* type_struct;
+const char* var_class_name;
+{ /* Inline abstract_collection#MapKeysIterator#original_iterator= (self,p0) on <self:Object(MapKeysIterator[Object, nullable Object])> */
+/* Covariant cast for argument 0 (original_iterator) <p0:MapIterator[Object, nullable Object]> isa MapIterator[K, V] */
+/* <p0:MapIterator[Object, nullable Object]> isa MapIterator[K, V] */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapIteratorabstract_collection__MapKeysIterator_FT0abstract_collection__MapKeysIterator_FT1];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= p0->type->table_size) {
+var = 0;
+} else {
+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`", "MapIterator[K, V]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 554);
+show_backtrace(1);
+}
+self->attrs[COLOR_abstract_collection__MapKeysIterator___original_iterator].val = p0; /* _original_iterator on <self:Object(MapKeysIterator[Object, nullable Object])> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
 /* method abstract_collection#MapKeysIterator#is_ok for (self: MapKeysIterator[Object, nullable Object]): Bool */
 short int abstract_collection__MapKeysIterator__is_ok(val* self) {
 short int var /* : Bool */;
@@ -1278,7 +1437,7 @@ short int var4 /* : Bool */;
 var3 = self->attrs[COLOR_abstract_collection__MapKeysIterator___original_iterator].val; /* _original_iterator on <self:MapKeysIterator[Object, nullable Object]> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 531);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 554);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1311,7 +1470,7 @@ val* var2 /* : MapIterator[Object, nullable Object] */;
 var2 = self->attrs[COLOR_abstract_collection__MapKeysIterator___original_iterator].val; /* _original_iterator on <self:MapKeysIterator[Object, nullable Object]> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 531);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 554);
 show_backtrace(1);
 }
 var = var2;
@@ -1339,7 +1498,7 @@ val* var4 /* : Object */;
 var3 = self->attrs[COLOR_abstract_collection__MapKeysIterator___original_iterator].val; /* _original_iterator on <self:MapKeysIterator[Object, nullable Object]> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 531);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 554);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1363,57 +1522,19 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method abstract_collection#MapKeysIterator#init for (self: MapKeysIterator[Object, nullable Object], MapIterator[Object, nullable Object]) */
-void abstract_collection__MapKeysIterator__init(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-/* Covariant cast for argument 0 (original_iterator) <p0:MapIterator[Object, nullable Object]> isa MapIterator[MapKeysIterator#0, MapKeysIterator#1] */
-/* <p0:MapIterator[Object, nullable Object]> isa MapIterator[MapKeysIterator#0, MapKeysIterator#1] */
-type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapIteratorabstract_collection__MapKeysIterator_FT0abstract_collection__MapKeysIterator_FT1];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-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`", "MapIterator[MapKeysIterator#0, MapKeysIterator#1]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 528);
-show_backtrace(1);
+/* method abstract_collection#MapKeysIterator#init for (self: MapKeysIterator[Object, nullable Object]) */
+void abstract_collection__MapKeysIterator__init(val* self) {
+{
+((void (*)(val*))(self->class->vft[COLOR_abstract_collection__MapKeysIterator__init]))(self) /* init on <self:MapKeysIterator[Object, nullable Object]>*/;
 }
-self->attrs[COLOR_abstract_collection__MapKeysIterator___original_iterator].val = p0; /* _original_iterator on <self:MapKeysIterator[Object, nullable Object]> */
 RET_LABEL:;
 }
-/* method abstract_collection#MapKeysIterator#init for (self: Object, MapIterator[Object, nullable Object]) */
-void VIRTUAL_abstract_collection__MapKeysIterator__init(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-{ /* Inline abstract_collection#MapKeysIterator#init (self,p0) on <self:Object(MapKeysIterator[Object, nullable Object])> */
-/* Covariant cast for argument 0 (original_iterator) <p0:MapIterator[Object, nullable Object]> isa MapIterator[MapKeysIterator#0, MapKeysIterator#1] */
-/* <p0:MapIterator[Object, nullable Object]> isa MapIterator[MapKeysIterator#0, MapKeysIterator#1] */
-type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapIteratorabstract_collection__MapKeysIterator_FT0abstract_collection__MapKeysIterator_FT1];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-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`", "MapIterator[MapKeysIterator#0, MapKeysIterator#1]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 528);
-show_backtrace(1);
+/* method abstract_collection#MapKeysIterator#init for (self: Object) */
+void VIRTUAL_abstract_collection__MapKeysIterator__init(val* self) {
+{ /* Inline abstract_collection#MapKeysIterator#init (self) on <self:Object(MapKeysIterator[Object, nullable Object])> */
+{
+((void (*)(val*))(self->class->vft[COLOR_abstract_collection__MapKeysIterator__init]))(self) /* init on <self:Object(MapKeysIterator[Object, nullable Object])>*/;
 }
-self->attrs[COLOR_abstract_collection__MapKeysIterator___original_iterator].val = p0; /* _original_iterator on <self:Object(MapKeysIterator[Object, nullable Object])> */
 RET_LABEL1:(void)0;
 }
 RET_LABEL:;
@@ -1425,7 +1546,7 @@ val* var1 /* : MapIterator[Object, nullable Object] */;
 var1 = self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val; /* _original_iterator on <self:MapValuesIterator[Object, nullable Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 542);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 565);
 show_backtrace(1);
 }
 var = var1;
@@ -1441,7 +1562,7 @@ val* var3 /* : MapIterator[Object, nullable Object] */;
 var3 = self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val; /* _original_iterator on <self:Object(MapValuesIterator[Object, nullable Object])> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 542);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 565);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1451,33 +1572,88 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method abstract_collection#MapValuesIterator#is_ok for (self: MapValuesIterator[Object, nullable Object]): Bool */
-short int abstract_collection__MapValuesIterator__is_ok(val* self) {
+/* method abstract_collection#MapValuesIterator#original_iterator= for (self: MapValuesIterator[Object, nullable Object], MapIterator[Object, nullable Object]) */
+void abstract_collection__MapValuesIterator__original_iterator_61d(val* self, val* p0) {
 short int var /* : Bool */;
-val* var1 /* : MapIterator[Object, nullable Object] */;
-val* var3 /* : MapIterator[Object, nullable Object] */;
-short int var4 /* : Bool */;
-{
-{ /* Inline abstract_collection#MapValuesIterator#original_iterator (self) on <self:MapValuesIterator[Object, nullable Object]> */
-var3 = self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val; /* _original_iterator on <self:MapValuesIterator[Object, nullable Object]> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 542);
-show_backtrace(1);
-}
-var1 = var3;
-RET_LABEL2:(void)0;
-}
+int cltype;
+int idtype;
+const struct type* type_struct;
+const char* var_class_name;
+/* Covariant cast for argument 0 (original_iterator) <p0:MapIterator[Object, nullable Object]> isa MapIterator[K, V] */
+/* <p0:MapIterator[Object, nullable Object]> isa MapIterator[K, V] */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapIteratorabstract_collection__MapValuesIterator_FT0abstract_collection__MapValuesIterator_FT1];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= p0->type->table_size) {
+var = 0;
+} else {
+var = p0->type->type_table[cltype] == idtype;
 }
-{
-var4 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var1) /* is_ok on <var1:MapIterator[Object, nullable Object]>*/;
+if (unlikely(!var)) {
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MapIterator[K, V]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 565);
+show_backtrace(1);
 }
-var = var4;
-goto RET_LABEL;
+self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val = p0; /* _original_iterator on <self:MapValuesIterator[Object, nullable Object]> */
 RET_LABEL:;
-return var;
 }
-/* method abstract_collection#MapValuesIterator#is_ok for (self: Object): Bool */
+/* method abstract_collection#MapValuesIterator#original_iterator= for (self: Object, MapIterator[Object, nullable Object]) */
+void VIRTUAL_abstract_collection__MapValuesIterator__original_iterator_61d(val* self, val* p0) {
+short int var /* : Bool */;
+int cltype;
+int idtype;
+const struct type* type_struct;
+const char* var_class_name;
+{ /* Inline abstract_collection#MapValuesIterator#original_iterator= (self,p0) on <self:Object(MapValuesIterator[Object, nullable Object])> */
+/* Covariant cast for argument 0 (original_iterator) <p0:MapIterator[Object, nullable Object]> isa MapIterator[K, V] */
+/* <p0:MapIterator[Object, nullable Object]> isa MapIterator[K, V] */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapIteratorabstract_collection__MapValuesIterator_FT0abstract_collection__MapValuesIterator_FT1];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= p0->type->table_size) {
+var = 0;
+} else {
+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`", "MapIterator[K, V]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 565);
+show_backtrace(1);
+}
+self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val = p0; /* _original_iterator on <self:Object(MapValuesIterator[Object, nullable Object])> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method abstract_collection#MapValuesIterator#is_ok for (self: MapValuesIterator[Object, nullable Object]): Bool */
+short int abstract_collection__MapValuesIterator__is_ok(val* self) {
+short int var /* : Bool */;
+val* var1 /* : MapIterator[Object, nullable Object] */;
+val* var3 /* : MapIterator[Object, nullable Object] */;
+short int var4 /* : Bool */;
+{
+{ /* Inline abstract_collection#MapValuesIterator#original_iterator (self) on <self:MapValuesIterator[Object, nullable Object]> */
+var3 = self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val; /* _original_iterator on <self:MapValuesIterator[Object, nullable Object]> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 565);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var1) /* is_ok on <var1:MapIterator[Object, nullable Object]>*/;
+}
+var = var4;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method abstract_collection#MapValuesIterator#is_ok for (self: Object): Bool */
 short int VIRTUAL_abstract_collection__MapValuesIterator__is_ok(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
@@ -1495,7 +1671,7 @@ val* var2 /* : MapIterator[Object, nullable Object] */;
 var2 = self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val; /* _original_iterator on <self:MapValuesIterator[Object, nullable Object]> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 542);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 565);
 show_backtrace(1);
 }
 var = var2;
@@ -1523,7 +1699,7 @@ val* var4 /* : nullable Object */;
 var3 = self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val; /* _original_iterator on <self:MapValuesIterator[Object, nullable Object]> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _original_iterator");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 542);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 565);
 show_backtrace(1);
 }
 var1 = var3;
@@ -1547,57 +1723,19 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method abstract_collection#MapValuesIterator#init for (self: MapValuesIterator[Object, nullable Object], MapIterator[Object, nullable Object]) */
-void abstract_collection__MapValuesIterator__init(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-/* Covariant cast for argument 0 (original_iterator) <p0:MapIterator[Object, nullable Object]> isa MapIterator[MapValuesIterator#0, MapValuesIterator#1] */
-/* <p0:MapIterator[Object, nullable Object]> isa MapIterator[MapValuesIterator#0, MapValuesIterator#1] */
-type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapIteratorabstract_collection__MapValuesIterator_FT0abstract_collection__MapValuesIterator_FT1];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-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`", "MapIterator[MapValuesIterator#0, MapValuesIterator#1]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 539);
-show_backtrace(1);
+/* method abstract_collection#MapValuesIterator#init for (self: MapValuesIterator[Object, nullable Object]) */
+void abstract_collection__MapValuesIterator__init(val* self) {
+{
+((void (*)(val*))(self->class->vft[COLOR_abstract_collection__MapValuesIterator__init]))(self) /* init on <self:MapValuesIterator[Object, nullable Object]>*/;
 }
-self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val = p0; /* _original_iterator on <self:MapValuesIterator[Object, nullable Object]> */
 RET_LABEL:;
 }
-/* method abstract_collection#MapValuesIterator#init for (self: Object, MapIterator[Object, nullable Object]) */
-void VIRTUAL_abstract_collection__MapValuesIterator__init(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-{ /* Inline abstract_collection#MapValuesIterator#init (self,p0) on <self:Object(MapValuesIterator[Object, nullable Object])> */
-/* Covariant cast for argument 0 (original_iterator) <p0:MapIterator[Object, nullable Object]> isa MapIterator[MapValuesIterator#0, MapValuesIterator#1] */
-/* <p0:MapIterator[Object, nullable Object]> isa MapIterator[MapValuesIterator#0, MapValuesIterator#1] */
-type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapIteratorabstract_collection__MapValuesIterator_FT0abstract_collection__MapValuesIterator_FT1];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-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`", "MapIterator[MapValuesIterator#0, MapValuesIterator#1]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 539);
-show_backtrace(1);
+/* method abstract_collection#MapValuesIterator#init for (self: Object) */
+void VIRTUAL_abstract_collection__MapValuesIterator__init(val* self) {
+{ /* Inline abstract_collection#MapValuesIterator#init (self) on <self:Object(MapValuesIterator[Object, nullable Object])> */
+{
+((void (*)(val*))(self->class->vft[COLOR_abstract_collection__MapValuesIterator__init]))(self) /* init on <self:Object(MapValuesIterator[Object, nullable Object])>*/;
 }
-self->attrs[COLOR_abstract_collection__MapValuesIterator___original_iterator].val = p0; /* _original_iterator on <self:Object(MapValuesIterator[Object, nullable Object])> */
 RET_LABEL1:(void)0;
 }
 RET_LABEL:;
@@ -1615,7 +1753,7 @@ var1 = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Collec
 var2 = !var1;
 if (unlikely(!var2)) {
 PRINT_ERROR("Runtime error: %s", "Assert \'not_empty\' failed");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 567);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 590);
 show_backtrace(1);
 }
 var3 = 0;
@@ -1656,7 +1794,7 @@ var1 = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Collec
 var2 = !var1;
 if (unlikely(!var2)) {
 PRINT_ERROR("Runtime error: %s", "Assert \'not_empty\' failed");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 592);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 615);
 show_backtrace(1);
 }
 {
@@ -1671,7 +1809,7 @@ var7 = 1; /* easy <var4:Int> isa OTHER*/
 if (unlikely(!var7)) {
 var_class_name = type_kernel__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
 show_backtrace(1);
 }
 var8 = var3 - var4;
@@ -1709,8 +1847,8 @@ const char* var_class_name;
 val* var_item /* var item: nullable Object */;
 long var2 /* : Int */;
 long var3 /* : Int */;
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa SequenceRead#0 */
-/* <p0:nullable Object> isa SequenceRead#0 */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__SequenceRead_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1726,8 +1864,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`", "SequenceRead#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 596);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 619);
 show_backtrace(1);
 }
 var_item = p0;
@@ -1768,8 +1906,8 @@ int idtype8;
 const char* var_class_name9;
 long var10 /* : Int */;
 long var11 /* : Int */;
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa SequenceRead#0 */
-/* <p0:nullable Object> isa SequenceRead#0 */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__SequenceRead_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1785,8 +1923,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`", "SequenceRead#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 605);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 628);
 show_backtrace(1);
 }
 var_item = p0;
@@ -1802,7 +1940,7 @@ var6 = 1; /* easy <var3:Int> isa OTHER*/
 if (unlikely(!var6)) {
 var_class_name9 = type_kernel__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name9);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
 show_backtrace(1);
 }
 var10 = var2 - var3;
@@ -1866,8 +2004,8 @@ long var24 /* : Int */;
 long var25 /* : Int */;
 long var26 /* : Int */;
 long var28 /* : Int */;
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa SequenceRead#0 */
-/* <p0:nullable Object> isa SequenceRead#0 */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__SequenceRead_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -1883,8 +2021,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`", "SequenceRead#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 614);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 637);
 show_backtrace(1);
 }
 var_item = p0;
@@ -1899,7 +2037,7 @@ for(;;) {
 {
 var4 = ((short int (*)(val*))(var_i->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_i) /* is_ok on <var_i:IndexedIterator[nullable Object]>*/;
 }
-if (!var4) break;
+if (var4){
 {
 { /* Inline kernel#Int#>= (var_p,var_pos) on <var_p:Int> */
 /* Covariant cast for argument 0 (i) <var_pos:Int> isa OTHER */
@@ -1908,7 +2046,7 @@ var8 = 1; /* easy <var_pos:Int> isa OTHER*/
 if (unlikely(!var8)) {
 var_class_name11 = type_kernel__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name11);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 326);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 372);
 show_backtrace(1);
 }
 var12 = var_p >= var_pos;
@@ -1952,7 +2090,7 @@ var20 = 1; /* easy <var17:Int> isa OTHER*/
 if (unlikely(!var20)) {
 var_class_name23 = type_kernel__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name23);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
 var24 = var_p + var17;
@@ -1962,7 +2100,9 @@ RET_LABEL19:(void)0;
 }
 }
 var_p = var18;
-CONTINUE_label: (void)0;
+} else {
+goto BREAK_label;
+}
 }
 BREAK_label: (void)0;
 var25 = 1;
@@ -2024,8 +2164,8 @@ int cltype23;
 int idtype24;
 const char* var_class_name25;
 long var26 /* : Int */;
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa SequenceRead#0 */
-/* <p0:nullable Object> isa SequenceRead#0 */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__SequenceRead_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2041,8 +2181,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`", "SequenceRead#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 634);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 657);
 show_backtrace(1);
 }
 var_item = p0;
@@ -2067,7 +2207,7 @@ for(;;) {
 {
 var8 = ((short int (*)(val*))(var_i->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_i) /* is_ok on <var_i:IndexedIterator[nullable Object]>*/;
 }
-if (!var8) break;
+if (var8){
 {
 { /* Inline kernel#Int#> (var_p,var_pos) on <var_p:Int> */
 /* Covariant cast for argument 0 (i) <var_pos:Int> isa OTHER */
@@ -2076,7 +2216,7 @@ var11 = 1; /* easy <var_pos:Int> isa OTHER*/
 if (unlikely(!var11)) {
 var_class_name14 = type_kernel__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name14);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 327);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
 show_backtrace(1);
 }
 var15 = var_p > var_pos;
@@ -2114,7 +2254,7 @@ 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", 328);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
 var26 = var_p + var19;
@@ -2124,7 +2264,9 @@ RET_LABEL21:(void)0;
 }
 }
 var_p = var20;
-CONTINUE_label: (void)0;
+} else {
+goto BREAK_label;
+}
 }
 BREAK_label: (void)0;
 var = var_res;
@@ -2233,7 +2375,7 @@ var15 = 1; /* easy <var_l:Int> isa OTHER*/
 if (unlikely(!var15)) {
 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", 325);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
 show_backtrace(1);
 }
 var18 = var_i < var_l;
@@ -2242,7 +2384,7 @@ goto RET_LABEL14;
 RET_LABEL14:(void)0;
 }
 }
-if (!var13) break;
+if (var13){
 {
 var19 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:SequenceRead[nullable Object]>*/;
 }
@@ -2270,7 +2412,7 @@ 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", 328);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
 show_backtrace(1);
 }
 var31 = var_i + var24;
@@ -2280,7 +2422,9 @@ RET_LABEL26:(void)0;
 }
 }
 var_i = var25;
-CONTINUE_label: (void)0;
+} else {
+goto BREAK_label;
+}
 }
 BREAK_label: (void)0;
 var32 = 1;
@@ -2302,59 +2446,168 @@ return var;
 long abstract_collection__SequenceRead__hash(val* self) {
 long var /* : Int */;
 long var1 /* : Int */;
-long var_res /* var res: Int */;
-val* var2 /* : Iterator[nullable Object] */;
-short int var3 /* : Bool */;
-val* var4 /* : nullable Object */;
-val* var_e /* var e: nullable Object */;
-long var5 /* : Int */;
-long var6 /* : Int */;
-short int var8 /* : Bool */;
+long var2 /* : Int */;
+long var3 /* : Int */;
+short int var5 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-long var9 /* : Int */;
-var1 = 0;
-var_res = var1;
+long var6 /* : Int */;
+long var_res /* var res: Int */;
+val* var_ /* var : SequenceRead[nullable Object] */;
+val* var7 /* : Iterator[nullable Object] */;
+val* var_8 /* var : IndexedIterator[nullable Object] */;
+short int var9 /* : Bool */;
+val* var10 /* : nullable Object */;
+val* var_e /* var e: nullable Object */;
+long var11 /* : Int */;
+long var12 /* : Int */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+const char* var_class_name17;
+long var18 /* : Int */;
+long var19 /* : Int */;
+long var20 /* : Int */;
+short int var22 /* : Bool */;
+int cltype23;
+int idtype24;
+const char* var_class_name25;
+long var26 /* : Int */;
+val* var27 /* : null */;
+short int var28 /* : Bool */;
+short int var29 /* : Bool */;
+long var30 /* : Int */;
+long var31 /* : Int */;
+short int var33 /* : Bool */;
+int cltype34;
+int idtype35;
+const char* var_class_name36;
+long var37 /* : Int */;
+var1 = 17;
+{
+var2 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:SequenceRead[nullable Object]>*/;
+}
+{
+{ /* Inline kernel#Int#+ (var1,var2) on <var1:Int> */
+/* Covariant cast for argument 0 (i) <var2:Int> isa OTHER */
+/* <var2:Int> isa OTHER */
+var5 = 1; /* easy <var2:Int> isa OTHER*/
+if (unlikely(!var5)) {
+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", 374);
+show_backtrace(1);
+}
+var6 = var1 + var2;
+var3 = var6;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
+}
+}
+var_res = var3;
+var_ = self;
 {
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:SequenceRead[nullable Object]>*/;
+var7 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:SequenceRead[nullable Object]>*/;
 }
+var_8 = var7;
 for(;;) {
 {
-var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
+var9 = ((short int (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_8) /* is_ok on <var_8:IndexedIterator[nullable Object]>*/;
 }
-if(!var3) break;
+if (var9){
 {
-var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
+var10 = ((val* (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__item]))(var_8) /* item on <var_8:IndexedIterator[nullable Object]>*/;
 }
-var_e = var4;
+var_e = var10;
+var11 = 3;
 {
-var5 = kernel__Int__hash(var_res);
+{ /* Inline kernel#Int#* (var_res,var11) on <var_res:Int> */
+/* Covariant cast for argument 0 (i) <var11:Int> isa OTHER */
+/* <var11:Int> isa OTHER */
+var14 = 1; /* easy <var11:Int> isa OTHER*/
+if (unlikely(!var14)) {
+var_class_name17 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name17);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 378);
+show_backtrace(1);
+}
+var18 = var_res * var11;
+var12 = var18;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
+}
 }
+var19 = 2;
 {
-{ /* Inline kernel#Int#+ (var_res,var5) on <var_res:Int> */
-/* Covariant cast for argument 0 (i) <var5:Int> isa OTHER */
-/* <var5:Int> isa OTHER */
-var8 = 1; /* easy <var5:Int> isa OTHER*/
-if (unlikely(!var8)) {
-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);
+{ /* Inline kernel#Int#/ (var12,var19) on <var12: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", 379);
 show_backtrace(1);
 }
-var9 = var_res + var5;
-var6 = var9;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+var26 = var12 / var19;
+var20 = var26;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
 }
+var_res = var20;
+var27 = NULL;
+if (var_e == NULL) {
+var28 = 0; /* is null */
+} else {
+var28 = 1; /* arg is null and recv is not */
+}
+if (0) {
+var29 = ((short int (*)(val*, val*))(var_e->class->vft[COLOR_kernel__Object___33d_61d]))(var_e, var27) /* != on <var_e:nullable Object>*/;
+var28 = var29;
+}
+if (var28){
+if (var_e == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 709);
+show_backtrace(1);
+} else {
+var30 = ((long (*)(val*))(var_e->class->vft[COLOR_kernel__Object__hash]))(var_e) /* hash on <var_e:nullable Object>*/;
 }
-var_res = var6;
-CONTINUE_label: (void)0;
 {
-((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
+{ /* Inline kernel#Int#+ (var_res,var30) on <var_res:Int> */
+/* Covariant cast for argument 0 (i) <var30:Int> isa OTHER */
+/* <var30:Int> isa OTHER */
+var33 = 1; /* easy <var30:Int> isa OTHER*/
+if (unlikely(!var33)) {
+var_class_name36 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name36);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
+show_backtrace(1);
+}
+var37 = var_res + var30;
+var31 = var37;
+goto RET_LABEL32;
+RET_LABEL32:(void)0;
+}
+}
+var_res = var31;
+} else {
+}
+{
+((void (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__next]))(var_8) /* next on <var_8:IndexedIterator[nullable Object]>*/;
+}
+} else {
+goto BREAK_label;
 }
 }
 BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_8) on <var_8:IndexedIterator[nullable Object]> */
+RET_LABEL38:(void)0;
+}
+}
 var = var_res;
 goto RET_LABEL;
 RET_LABEL:;
@@ -2407,7 +2660,7 @@ var6 = 1; /* easy <var3:Int> isa OTHER*/
 if (unlikely(!var6)) {
 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);
 }
 var7 = var_pos > var3;
@@ -2425,7 +2678,7 @@ var2 = var8;
 } else {
 var2 = var_;
 }
-if (!var2) break;
+if (var2){
 {
 ((void (*)(val*))(var_res->class->vft[COLOR_abstract_collection__Iterator__next]))(var_res) /* next on <var_res:IndexedIterator[nullable Object]>*/;
 }
@@ -2438,7 +2691,7 @@ var12 = 1; /* easy <var9:Int> isa OTHER*/
 if (unlikely(!var12)) {
 var_class_name15 = type_kernel__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name15);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
 show_backtrace(1);
 }
 var16 = var_pos - var9;
@@ -2448,7 +2701,9 @@ RET_LABEL11:(void)0;
 }
 }
 var_pos = var10;
-CONTINUE_label: (void)0;
+} else {
+goto BREAK_label;
+}
 }
 BREAK_label: (void)0;
 var = var_res;
@@ -2475,8 +2730,8 @@ short int is_nullable;
 const char* var_class_name;
 val* var_item /* var item: nullable Object */;
 long var1 /* : Int */;
-/* Covariant cast for argument 0 (item) <p0:nullable Object> isa Sequence#0 */
-/* <p0:nullable Object> isa Sequence#0 */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Sequence_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2492,8 +2747,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`", "Sequence#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 728);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 757);
 show_backtrace(1);
 }
 var_item = p0;
@@ -2517,8 +2772,8 @@ const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
 val* var_e /* var e: nullable Object */;
-/* Covariant cast for argument 0 (e) <p0:nullable Object> isa SimpleCollection#0 */
-/* <p0:nullable Object> isa SimpleCollection#0 */
+/* Covariant cast for argument 0 (e) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__SimpleCollection_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2534,8 +2789,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`", "SimpleCollection#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 759);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 788);
 show_backtrace(1);
 }
 var_e = p0;
@@ -2557,12 +2812,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 val* var_coll /* var coll: Collection[nullable Object] */;
-val* var1 /* : Iterator[nullable Object] */;
-short int var2 /* : Bool */;
-val* var3 /* : nullable Object */;
-val* var_i /* var i: nullable Object */;
-/* Covariant cast for argument 0 (coll) <p0:Collection[nullable Object]> isa Collection[Sequence#0] */
-/* <p0:Collection[nullable Object]> isa Collection[Sequence#0] */
+/* Covariant cast for argument 0 (coll) <p0:Collection[nullable Object]> isa Collection[E] */
+/* <p0:Collection[nullable Object]> isa Collection[E] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectionabstract_collection__Sequence_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2573,32 +2824,14 @@ 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[Sequence#0]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 770);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 799);
 show_backtrace(1);
 }
 var_coll = p0;
 {
-var1 = ((val* (*)(val*))(var_coll->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_coll) /* iterator on <var_coll:Collection[nullable Object]>*/;
-}
-for(;;) {
-{
-var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
+abstract_collection__SimpleCollection__add_all(self, var_coll); /* Direct call abstract_collection#SimpleCollection#add_all on <self:Sequence[nullable Object]>*/
 }
-if(!var2) break;
-{
-var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
-}
-var_i = var3;
-{
-((void (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__Sequence__push]))(self, var_i) /* push on <self:Sequence[nullable Object]>*/;
-}
-CONTINUE_label: (void)0;
-{
-((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
-}
-}
-BREAK_label: (void)0;
 RET_LABEL:;
 }
 /* method abstract_collection#Sequence#append for (self: Object, Collection[nullable Object]) */
@@ -2612,7 +2845,7 @@ val* var /* : nullable Object */;
 const char* var_class_name;
 var_class_name = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "pop", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 777);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 808);
 show_backtrace(1);
 RET_LABEL:;
 return var;
@@ -2625,7 +2858,7 @@ const char* var_class_name;
 { /* Inline abstract_collection#Sequence#pop (self) on <self:Object(Sequence[nullable Object])> */
 var_class_name = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "pop", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 777);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 808);
 show_backtrace(1);
 RET_LABEL2:(void)0;
 }
@@ -2642,8 +2875,8 @@ const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
 const char* var_class_name1;
-/* Covariant cast for argument 0 (e) <p0:nullable Object> isa Sequence#0 */
-/* <p0:nullable Object> isa Sequence#0 */
+/* Covariant cast for argument 0 (e) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Sequence_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2659,13 +2892,13 @@ 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`", "Sequence#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 787);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 818);
 show_backtrace(1);
 }
 var_class_name1 = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "unshift", var_class_name1);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 787);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 818);
 show_backtrace(1);
 RET_LABEL:;
 }
@@ -2679,8 +2912,8 @@ short int is_nullable;
 const char* var_class_name;
 const char* var_class_name2;
 { /* Inline abstract_collection#Sequence#unshift (self,p0) on <self:Object(Sequence[nullable Object])> */
-/* Covariant cast for argument 0 (e) <p0:nullable Object> isa Sequence#0 */
-/* <p0:nullable Object> isa Sequence#0 */
+/* Covariant cast for argument 0 (e) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Sequence_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2696,25 +2929,62 @@ 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`", "Sequence#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 787);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 818);
 show_backtrace(1);
 }
 var_class_name2 = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "unshift", var_class_name2);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 787);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 818);
 show_backtrace(1);
 RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
+/* method abstract_collection#Sequence#prepend for (self: Sequence[nullable Object], Collection[nullable Object]) */
+void abstract_collection__Sequence__prepend(val* self, val* p0) {
+short int var /* : Bool */;
+int cltype;
+int idtype;
+const struct type* type_struct;
+const char* var_class_name;
+val* var_coll /* var coll: Collection[nullable Object] */;
+long var1 /* : Int */;
+/* Covariant cast for argument 0 (coll) <p0:Collection[nullable Object]> isa Collection[E] */
+/* <p0:Collection[nullable Object]> isa Collection[E] */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectionabstract_collection__Sequence_FT0];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= p0->type->table_size) {
+var = 0;
+} else {
+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[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 826);
+show_backtrace(1);
+}
+var_coll = p0;
+var1 = 0;
+{
+((void (*)(val*, val*, long))(self->class->vft[COLOR_abstract_collection__Sequence__insert_all]))(self, var_coll, var1) /* insert_all on <self:Sequence[nullable Object]>*/;
+}
+RET_LABEL:;
+}
+/* method abstract_collection#Sequence#prepend for (self: Object, Collection[nullable Object]) */
+void VIRTUAL_abstract_collection__Sequence__prepend(val* self, val* p0) {
+abstract_collection__Sequence__prepend(self, p0); /* Direct call abstract_collection#Sequence#prepend on <self:Object(Sequence[nullable Object])>*/
+RET_LABEL:;
+}
 /* method abstract_collection#Sequence#shift for (self: Sequence[nullable Object]): nullable Object */
 val* abstract_collection__Sequence__shift(val* self) {
 val* var /* : nullable Object */;
 const char* var_class_name;
 var_class_name = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "shift", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 795);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 835);
 show_backtrace(1);
 RET_LABEL:;
 return var;
@@ -2727,7 +2997,7 @@ const char* var_class_name;
 { /* Inline abstract_collection#Sequence#shift (self) on <self:Object(Sequence[nullable Object])> */
 var_class_name = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "shift", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 795);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 835);
 show_backtrace(1);
 RET_LABEL2:(void)0;
 }
@@ -2735,12 +3005,270 @@ var = var1;
 RET_LABEL:;
 return var;
 }
+/* method abstract_collection#Sequence#insert for (self: Sequence[nullable Object], nullable Object, Int) */
+void abstract_collection__Sequence__insert(val* self, val* p0, long p1) {
+short int var /* : Bool */;
+int cltype;
+int idtype;
+const struct type* type_struct;
+short int is_nullable;
+const char* var_class_name;
+const char* var_class_name1;
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Sequence_FT0];
+cltype = type_struct->color;
+idtype = type_struct->id;
+is_nullable = type_struct->is_nullable;
+if(p0 == NULL) {
+var = is_nullable;
+} else {
+if(cltype >= p0->type->table_size) {
+var = 0;
+} else {
+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`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 861);
+show_backtrace(1);
+}
+var_class_name1 = self == NULL ? "null" : self->type->name;
+PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "insert", var_class_name1);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 861);
+show_backtrace(1);
+RET_LABEL:;
+}
+/* method abstract_collection#Sequence#insert for (self: Object, nullable Object, Int) */
+void VIRTUAL_abstract_collection__Sequence__insert(val* self, val* p0, long p1) {
+short int var /* : Bool */;
+int cltype;
+int idtype;
+const struct type* type_struct;
+short int is_nullable;
+const char* var_class_name;
+const char* var_class_name2;
+{ /* Inline abstract_collection#Sequence#insert (self,p0,p1) on <self:Object(Sequence[nullable Object])> */
+/* Covariant cast for argument 0 (item) <p0:nullable Object> isa E */
+/* <p0:nullable Object> isa E */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Sequence_FT0];
+cltype = type_struct->color;
+idtype = type_struct->id;
+is_nullable = type_struct->is_nullable;
+if(p0 == NULL) {
+var = is_nullable;
+} else {
+if(cltype >= p0->type->table_size) {
+var = 0;
+} else {
+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`", "E", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 861);
+show_backtrace(1);
+}
+var_class_name2 = self == NULL ? "null" : self->type->name;
+PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "insert", var_class_name2);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 861);
+show_backtrace(1);
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method abstract_collection#Sequence#insert_all for (self: Sequence[nullable Object], Collection[nullable Object], Int) */
+void abstract_collection__Sequence__insert_all(val* self, val* p0, long p1) {
+short int var /* : Bool */;
+int cltype;
+int idtype;
+const struct type* type_struct;
+const char* var_class_name;
+val* var_coll /* var coll: Collection[nullable Object] */;
+long var_index /* var index: Int */;
+short int var1 /* : Bool */;
+long var2 /* : Int */;
+short int var3 /* : Bool */;
+short int var5 /* : Bool */;
+int cltype6;
+int idtype7;
+const char* var_class_name8;
+short int var9 /* : Bool */;
+short int var_ /* var : Bool */;
+long var10 /* : Int */;
+short int var11 /* : Bool */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+const char* var_class_name16;
+short int var17 /* : Bool */;
+long var18 /* : Int */;
+short int var19 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+val* var_23 /* var : Collection[nullable Object] */;
+val* var24 /* : Iterator[nullable Object] */;
+val* var_25 /* var : Iterator[nullable Object] */;
+short int var26 /* : Bool */;
+val* var27 /* : nullable Object */;
+val* var_c /* var c: nullable Object */;
+long var28 /* : Int */;
+long var29 /* : Int */;
+short int var31 /* : Bool */;
+int cltype32;
+int idtype33;
+const char* var_class_name34;
+long var35 /* : Int */;
+/* Covariant cast for argument 0 (coll) <p0:Collection[nullable Object]> isa Collection[E] */
+/* <p0:Collection[nullable Object]> isa Collection[E] */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectionabstract_collection__Sequence_FT0];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= p0->type->table_size) {
+var = 0;
+} else {
+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[E]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 871);
+show_backtrace(1);
+}
+var_coll = p0;
+var_index = p1;
+var2 = 0;
+{
+{ /* Inline kernel#Int#>= (var_index,var2) on <var_index:Int> */
+/* Covariant cast for argument 0 (i) <var2:Int> isa OTHER */
+/* <var2:Int> isa OTHER */
+var5 = 1; /* easy <var2:Int> isa OTHER*/
+if (unlikely(!var5)) {
+var_class_name8 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name8);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 372);
+show_backtrace(1);
+}
+var9 = var_index >= var2;
+var3 = var9;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
+}
+}
+var_ = var3;
+if (var3){
+{
+var10 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:Sequence[nullable Object]>*/;
+}
+{
+{ /* Inline kernel#Int#< (var_index,var10) on <var_index:Int> */
+/* Covariant cast for argument 0 (i) <var10:Int> isa OTHER */
+/* <var10:Int> isa OTHER */
+var13 = 1; /* easy <var10:Int> isa OTHER*/
+if (unlikely(!var13)) {
+var_class_name16 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
+show_backtrace(1);
+}
+var17 = var_index < var10;
+var11 = var17;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
+}
+}
+var1 = var11;
+} else {
+var1 = var_;
+}
+if (unlikely(!var1)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 881);
+show_backtrace(1);
+}
+{
+var18 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:Sequence[nullable Object]>*/;
+}
+{
+{ /* Inline kernel#Int#== (var_index,var18) on <var_index:Int> */
+var22 = var_index == var18;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+var19 = var20;
+}
+if (var19){
+{
+abstract_collection__SimpleCollection__add_all(self, var_coll); /* Direct call abstract_collection#SimpleCollection#add_all on <self:Sequence[nullable Object]>*/
+}
+} else {
+}
+var_23 = var_coll;
+{
+var24 = ((val* (*)(val*))(var_23->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_23) /* iterator on <var_23:Collection[nullable Object]>*/;
+}
+var_25 = var24;
+for(;;) {
+{
+var26 = ((short int (*)(val*))(var_25->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_25) /* is_ok on <var_25:Iterator[nullable Object]>*/;
+}
+if (var26){
+{
+var27 = ((val* (*)(val*))(var_25->class->vft[COLOR_abstract_collection__Iterator__item]))(var_25) /* item on <var_25:Iterator[nullable Object]>*/;
+}
+var_c = var27;
+{
+((void (*)(val*, val*, long))(self->class->vft[COLOR_abstract_collection__Sequence__insert]))(self, var_c, var_index) /* insert on <self:Sequence[nullable Object]>*/;
+}
+var28 = 1;
+{
+{ /* Inline kernel#Int#+ (var_index,var28) on <var_index:Int> */
+/* Covariant cast for argument 0 (i) <var28:Int> isa OTHER */
+/* <var28:Int> isa OTHER */
+var31 = 1; /* easy <var28:Int> isa OTHER*/
+if (unlikely(!var31)) {
+var_class_name34 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name34);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
+show_backtrace(1);
+}
+var35 = var_index + var28;
+var29 = var35;
+goto RET_LABEL30;
+RET_LABEL30:(void)0;
+}
+}
+var_index = var29;
+{
+((void (*)(val*))(var_25->class->vft[COLOR_abstract_collection__Iterator__next]))(var_25) /* next on <var_25:Iterator[nullable Object]>*/;
+}
+} else {
+goto BREAK_label;
+}
+}
+BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_25) on <var_25:Iterator[nullable Object]> */
+RET_LABEL36:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method abstract_collection#Sequence#insert_all for (self: Object, Collection[nullable Object], Int) */
+void VIRTUAL_abstract_collection__Sequence__insert_all(val* self, val* p0, long p1) {
+abstract_collection__Sequence__insert_all(self, p0, p1); /* Direct call abstract_collection#Sequence#insert_all on <self:Object(Sequence[nullable Object])>*/
+RET_LABEL:;
+}
 /* method abstract_collection#Sequence#remove_at for (self: Sequence[nullable Object], Int) */
 void abstract_collection__Sequence__remove_at(val* self, long p0) {
 const char* var_class_name;
 var_class_name = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "remove_at", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 831);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 891);
 show_backtrace(1);
 RET_LABEL:;
 }
@@ -2750,7 +3278,7 @@ const char* var_class_name;
 { /* Inline abstract_collection#Sequence#remove_at (self,p0) on <self:Object(Sequence[nullable Object])> */
 var_class_name = self == NULL ? "null" : self->type->name;
 PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "remove_at", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 831);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 891);
 show_backtrace(1);
 RET_LABEL1:(void)0;
 }
@@ -2792,7 +3320,7 @@ val* var5 /* : nullable Object */;
 var1 = self->attrs[COLOR_abstract_collection__CoupleMapIterator___iter].val; /* _iter on <self:CoupleMapIterator[Object, nullable Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iter");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 879);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 939);
 show_backtrace(1);
 }
 {
@@ -2829,7 +3357,7 @@ val* var5 /* : nullable Object */;
 var1 = self->attrs[COLOR_abstract_collection__CoupleMapIterator___iter].val; /* _iter on <self:CoupleMapIterator[Object, nullable Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iter");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 883);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 943);
 show_backtrace(1);
 }
 {
@@ -2864,7 +3392,7 @@ short int var2 /* : Bool */;
 var1 = self->attrs[COLOR_abstract_collection__CoupleMapIterator___iter].val; /* _iter on <self:CoupleMapIterator[Object, nullable Object]> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iter");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 885);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 945);
 show_backtrace(1);
 }
 {
@@ -2890,7 +3418,7 @@ val* var /* : Iterator[Couple[Object, nullable Object]] */;
 var = self->attrs[COLOR_abstract_collection__CoupleMapIterator___iter].val; /* _iter on <self:CoupleMapIterator[Object, nullable Object]> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iter");
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 889);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 949);
 show_backtrace(1);
 }
 {
@@ -2911,8 +3439,8 @@ int idtype;
 const struct type* type_struct;
 const char* var_class_name;
 val* var_i /* var i: Iterator[Couple[Object, nullable Object]] */;
-/* Covariant cast for argument 0 (i) <p0:Iterator[Couple[Object, nullable Object]]> isa Iterator[Couple[CoupleMapIterator#0, CoupleMapIterator#1]] */
-/* <p0:Iterator[Couple[Object, nullable Object]]> isa Iterator[Couple[CoupleMapIterator#0, CoupleMapIterator#1]] */
+/* Covariant cast for argument 0 (i) <p0:Iterator[Couple[Object, nullable Object]]> isa Iterator[Couple[K, V]] */
+/* <p0:Iterator[Couple[Object, nullable Object]]> isa Iterator[Couple[K, V]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Iteratorabstract_collection__Coupleabstract_collection__CoupleMapIterator_FT0abstract_collection__CoupleMapIterator_FT1];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2923,8 +3451,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`", "Iterator[Couple[CoupleMapIterator#0, CoupleMapIterator#1]]", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 894);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Iterator[Couple[K, V]]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 954);
 show_backtrace(1);
 }
 var_i = p0;
@@ -2967,8 +3495,8 @@ int idtype;
 const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
-/* Covariant cast for argument 0 (first) <p0:nullable Object> isa Couple#0 */
-/* <p0:nullable Object> isa Couple#0 */
+/* Covariant cast for argument 0 (first) <p0:nullable Object> isa F */
+/* <p0:nullable Object> isa F */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -2984,8 +3512,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`", "Couple#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 902);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "F", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 962);
 show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Couple___first].val = p0; /* _first on <self:Couple[nullable Object, nullable Object]> */
@@ -3000,8 +3528,8 @@ const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
 { /* Inline abstract_collection#Couple#first= (self,p0) on <self:Object(Couple[nullable Object, nullable Object])> */
-/* Covariant cast for argument 0 (first) <p0:nullable Object> isa Couple#0 */
-/* <p0:nullable Object> isa Couple#0 */
+/* Covariant cast for argument 0 (first) <p0:nullable Object> isa F */
+/* <p0:nullable Object> isa F */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3017,8 +3545,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`", "Couple#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 902);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "F", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 962);
 show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Couple___first].val = p0; /* _first on <self:Object(Couple[nullable Object, nullable Object])> */
@@ -3057,8 +3585,8 @@ int idtype;
 const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
-/* Covariant cast for argument 0 (second) <p0:nullable Object> isa Couple#1 */
-/* <p0:nullable Object> isa Couple#1 */
+/* Covariant cast for argument 0 (second) <p0:nullable Object> isa S */
+/* <p0:nullable Object> isa S */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT1];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3074,8 +3602,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`", "Couple#1", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 905);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "S", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 965);
 show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Couple___second].val = p0; /* _second on <self:Couple[nullable Object, nullable Object]> */
@@ -3090,8 +3618,8 @@ const struct type* type_struct;
 short int is_nullable;
 const char* var_class_name;
 { /* Inline abstract_collection#Couple#second= (self,p0) on <self:Object(Couple[nullable Object, nullable Object])> */
-/* Covariant cast for argument 0 (second) <p0:nullable Object> isa Couple#1 */
-/* <p0:nullable Object> isa Couple#1 */
+/* Covariant cast for argument 0 (second) <p0:nullable Object> isa S */
+/* <p0:nullable Object> isa S */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT1];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3107,8 +3635,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`", "Couple#1", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 905);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "S", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 965);
 show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Couple___second].val = p0; /* _second on <self:Object(Couple[nullable Object, nullable Object])> */
@@ -3144,8 +3672,8 @@ int idtype17;
 const struct type* type_struct18;
 short int is_nullable19;
 const char* var_class_name20;
-/* Covariant cast for argument 0 (f) <p0:nullable Object> isa Couple#0 */
-/* <p0:nullable Object> isa Couple#0 */
+/* Covariant cast for argument 0 (f) <p0:nullable Object> isa F */
+/* <p0:nullable Object> isa F */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
@@ -3161,12 +3689,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`", "Couple#0", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 908);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "F", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 968);
 show_backtrace(1);
 }
-/* Covariant cast for argument 1 (s) <p1:nullable Object> isa Couple#1 */
-/* <p1:nullable Object> isa Couple#1 */
+/* Covariant cast for argument 1 (s) <p1:nullable Object> isa S */
+/* <p1:nullable Object> isa S */
 type_struct4 = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT1];
 cltype2 = type_struct4->color;
 idtype3 = type_struct4->id;
@@ -3182,16 +3710,16 @@ var1 = p1->type->type_table[cltype2] == idtype3;
 }
 if (unlikely(!var1)) {
 var_class_name6 = p1 == NULL ? "null" : p1->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Couple#1", var_class_name6);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 908);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "S", var_class_name6);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 968);
 show_backtrace(1);
 }
 var_f = p0;
 var_s = p1;
 {
 { /* Inline abstract_collection#Couple#first= (self,var_f) on <self:Couple[nullable Object, nullable Object]> */
-/* Covariant cast for argument 0 (first) <var_f:nullable Object> isa Couple#0 */
-/* <var_f:nullable Object> isa Couple#0 */
+/* Covariant cast for argument 0 (first) <var_f:nullable Object> isa F */
+/* <var_f:nullable Object> isa F */
 type_struct11 = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT0];
 cltype9 = type_struct11->color;
 idtype10 = type_struct11->id;
@@ -3207,8 +3735,8 @@ var8 = var_f->type->type_table[cltype9] == idtype10;
 }
 if (unlikely(!var8)) {
 var_class_name13 = var_f == NULL ? "null" : var_f->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Couple#0", var_class_name13);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 902);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "F", var_class_name13);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 962);
 show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Couple___first].val = var_f; /* _first on <self:Couple[nullable Object, nullable Object]> */
@@ -3217,8 +3745,8 @@ RET_LABEL7:(void)0;
 }
 {
 { /* Inline abstract_collection#Couple#second= (self,var_s) on <self:Couple[nullable Object, nullable Object]> */
-/* Covariant cast for argument 0 (second) <var_s:nullable Object> isa Couple#1 */
-/* <var_s:nullable Object> isa Couple#1 */
+/* Covariant cast for argument 0 (second) <var_s:nullable Object> isa S */
+/* <var_s:nullable Object> isa S */
 type_struct18 = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT1];
 cltype16 = type_struct18->color;
 idtype17 = type_struct18->id;
@@ -3234,8 +3762,8 @@ var15 = var_s->type->type_table[cltype16] == idtype17;
 }
 if (unlikely(!var15)) {
 var_class_name20 = var_s == NULL ? "null" : var_s->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Couple#1", var_class_name20);
-PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 905);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "S", var_class_name20);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/abstract_collection.nit", 965);
 show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Couple___second].val = var_s; /* _second on <self:Couple[nullable Object, nullable Object]> */