Merge: No old style accessors
[nit.git] / c_src / abstract_collection.sep.1.c
index c2a2184..ae17a15 100644 (file)
@@ -2,8 +2,11 @@
 /* method abstract_collection#Collection#iterator for (self: Collection[nullable Object]): Iterator[nullable Object] */
 val* abstract_collection__Collection__iterator(val* self) {
 val* var /* : Iterator[nullable Object] */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 54);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "iterator", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 54);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -16,28 +19,6 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method abstract_collection#Collection#iterate for (self: Collection[nullable Object]) */
-void abstract_collection__Collection__iterate(val* self) {
-val* var /* : Iterator[nullable Object] */;
-val* var_i /* var i: Iterator[nullable Object] */;
-short int var1 /* : Bool */;
-var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:Collection[nullable Object]>*/;
-var_i = var;
-for(;;) {
-var1 = ((short int (*)(val*))(var_i->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_i) /* is_ok on <var_i:Iterator[nullable Object]>*/;
-if (!var1) break;
-printf("NOT YET IMPLEMENTED AClosureCallExpr:lib/standard/collection/abstract_collection.nit:63,4--15\n");
-((void (*)(val*))(var_i->class->vft[COLOR_abstract_collection__Iterator__next]))(var_i) /* next on <var_i:Iterator[nullable Object]>*/;
-CONTINUE_label: (void)0;
-}
-BREAK_label: (void)0;
-RET_LABEL:;
-}
-/* method abstract_collection#Collection#iterate for (self: Object) */
-void VIRTUAL_abstract_collection__Collection__iterate(val* self) {
-abstract_collection__Collection__iterate(self);
-RET_LABEL:;
-}
 /* method abstract_collection#Collection#is_empty for (self: Collection[nullable Object]): Bool */
 short int abstract_collection__Collection__is_empty(val* self) {
 short int var /* : Bool */;
@@ -121,6 +102,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_item /* var item: nullable Object */;
 val* var2 /* : Iterator[nullable Object] */;
 short int var3 /* : Bool */;
@@ -145,8 +127,10 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 86);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 75);
+show_backtrace(1);
 }
 var_item = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:Collection[nullable Object]>*/;
@@ -193,6 +177,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_item /* var item: nullable Object */;
 val* var2 /* : Iterator[nullable Object] */;
 short int var3 /* : Bool */;
@@ -217,8 +202,10 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 99);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 88);
+show_backtrace(1);
 }
 var_item = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:Collection[nullable Object]>*/;
@@ -265,6 +252,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_item /* var item: nullable Object */;
 long var2 /* : Int */;
 long var_nb /* var nb: Int */;
@@ -292,8 +280,10 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 116);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 105);
+show_backtrace(1);
 }
 var_item = p0;
 var2 = 0;
@@ -347,6 +337,7 @@ short int var3 /* : Bool */;
 short int var5 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var6 /* : Bool */;
 val* var7 /* : Iterator[nullable Object] */;
 val* var8 /* : nullable Object */;
@@ -357,8 +348,10 @@ var2 = 0;
 /* <var2:Int> isa OTHER */
 var5 = 1; /* easy <var2:Int> isa OTHER*/
 if (!var5) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
-exit(1);
+var_class_name = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 267);
+show_backtrace(1);
 }
 var6 = var1 > var2;
 var3 = var6;
@@ -366,8 +359,9 @@ goto RET_LABEL4;
 RET_LABEL4:(void)0;
 }
 if (!var3) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "lib/standard/collection/abstract_collection.nit", 132);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Assert failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 121);
+show_backtrace(1);
 }
 var7 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:Collection[nullable Object]>*/;
 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
@@ -392,6 +386,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_other /* var other: Collection[nullable Object] */;
 val* var2 /* : Iterator[nullable Object] */;
 short int var3 /* : Bool */;
@@ -412,8 +407,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 136);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[Collection#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 125);
+show_backtrace(1);
 }
 var_other = p0;
 var2 = ((val* (*)(val*))(var_other->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_other) /* iterator on <var_other:Collection[nullable Object]>*/;
@@ -452,8 +449,11 @@ return var;
 /* method abstract_collection#Iterator#item for (self: Iterator[nullable Object]): nullable Object */
 val* abstract_collection__Iterator__item(val* self) {
 val* var /* : nullable Object */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 152);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "item", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 141);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -468,8 +468,11 @@ return var;
 }
 /* method abstract_collection#Iterator#next for (self: Iterator[nullable Object]) */
 void abstract_collection__Iterator__next(val* self) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 156);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "next", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 145);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#Iterator#next for (self: Object) */
@@ -480,8 +483,11 @@ RET_LABEL:;
 /* method abstract_collection#Iterator#is_ok for (self: Iterator[nullable Object]): Bool */
 short int abstract_collection__Iterator__is_ok(val* self) {
 short int var /* : Bool */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 160);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "is_ok", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 149);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -559,6 +565,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_an_item /* var an_item: nullable Object */;
 val* var2 /* : nullable Object */;
 short int var3 /* : Bool */;
@@ -578,8 +585,10 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 174);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 164);
+show_backtrace(1);
 }
 var_an_item = p0;
 var2 = self->attrs[COLOR_abstract_collection__Container___item].val; /* _item on <self:Container[nullable Object]> */
@@ -610,6 +619,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_an_item /* var an_item: nullable Object */;
 val* var2 /* : nullable Object */;
 short int var3 /* : Bool */;
@@ -629,8 +639,10 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 176);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 166);
+show_backtrace(1);
 }
 var_an_item = p0;
 var2 = self->attrs[COLOR_abstract_collection__Container___item].val; /* _item on <self:Container[nullable Object]> */
@@ -661,6 +673,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_an_item /* var an_item: nullable Object */;
 val* var2 /* : nullable Object */;
 short int var3 /* : Bool */;
@@ -682,8 +695,10 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 178);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 168);
+show_backtrace(1);
 }
 var_an_item = p0;
 var2 = self->attrs[COLOR_abstract_collection__Container___item].val; /* _item on <self:Container[nullable Object]> */
@@ -719,7 +734,6 @@ val* var /* : Iterator[nullable Object] */;
 val* var1 /* : ContainerIterator[nullable Object] */;
 var1 = NEW_abstract_collection__ContainerIterator(self->type->resolution_table->types[COLOR_abstract_collection__ContainerIteratorabstract_collection__Container_FT0]);
 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__ContainerIterator__init]))(var1, self) /* init on <var1:ContainerIterator[nullable Object]>*/;
-CHECK_NEW_abstract_collection__ContainerIterator(var1);
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -741,6 +755,7 @@ int cltype;
 int idtype;
 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 Container#0 */
 /* <p0:nullable Object> isa Container#0 */
@@ -758,8 +773,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 189);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Container#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 179);
+show_backtrace(1);
 }
 var_e = p0;
 self->attrs[COLOR_abstract_collection__Container___item].val = var_e; /* _item on <self:Container[nullable Object]> */
@@ -795,6 +812,7 @@ int cltype;
 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 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Container_FT0];
@@ -811,8 +829,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 192);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Container#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 182);
+show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Container___item].val = p0; /* _item on <self:Container[nullable Object]> */
 RET_LABEL:;
@@ -829,8 +849,9 @@ val* var1 /* : Container[nullable Object] */;
 val* var2 /* : nullable Object */;
 var1 = self->attrs[COLOR_abstract_collection__ContainerIterator___container].val; /* _container on <self:ContainerIterator[nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _container", "lib/standard/collection/abstract_collection.nit", 199);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _container");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 189);
+show_backtrace(1);
 }
 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Container__item]))(var1) /* item on <var1:Container[nullable Object]>*/;
 var = var2;
@@ -865,6 +886,7 @@ short int var /* : Bool */;
 int cltype;
 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] */
@@ -877,8 +899,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 203);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Container[ContainerIterator#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 193);
+show_backtrace(1);
 }
 var_c = p0;
 self->attrs[COLOR_abstract_collection__ContainerIterator___container].val = var_c; /* _container on <self:ContainerIterator[nullable Object]> */
@@ -909,8 +933,11 @@ return var;
 }
 /* method abstract_collection#RemovableCollection#clear for (self: RemovableCollection[nullable Object]) */
 void abstract_collection__RemovableCollection__clear(val* self) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 213);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "clear", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 203);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#RemovableCollection#clear for (self: Object) */
@@ -925,6 +952,8 @@ 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 RemovableCollection#0 */
 /* <p0:nullable Object> isa RemovableCollection#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__RemovableCollection_FT0];
@@ -941,11 +970,15 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 216);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "RemovableCollection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 206);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 216);
-exit(1);
+var_class_name1 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "remove", var_class_name1);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 206);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#RemovableCollection#remove for (self: Object, nullable Object) */
@@ -960,6 +993,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_item /* var item: nullable Object */;
 short int var1 /* : Bool */;
 /* Covariant cast for argument 0 (item) <p0:nullable Object> isa RemovableCollection#0 */
@@ -978,8 +1012,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 219);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "RemovableCollection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 209);
+show_backtrace(1);
 }
 var_item = p0;
 for(;;) {
@@ -1003,6 +1039,8 @@ 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 SimpleCollection#0 */
 /* <p0:nullable Object> isa SimpleCollection#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__SimpleCollection_FT0];
@@ -1019,11 +1057,15 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 226);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SimpleCollection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 216);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 226);
-exit(1);
+var_class_name1 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "add", var_class_name1);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 216);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#SimpleCollection#add for (self: Object, nullable Object) */
@@ -1037,6 +1079,7 @@ 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] */;
 val* var1 /* : Iterator[nullable Object] */;
 short int var2 /* : Bool */;
@@ -1053,8 +1096,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 230);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[SimpleCollection#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 220);
+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]>*/;
@@ -1082,6 +1127,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_item /* var item: Object */;
 long var2 /* : Int */;
 long var_l /* var l: Int */;
@@ -1105,8 +1151,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 246);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 236);
+show_backtrace(1);
 }
 var_item = p0;
 var2 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:Set[Object]>*/;
@@ -1159,6 +1207,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_item /* var item: Object */;
 short int var2 /* : Bool */;
 long var3 /* : Int */;
@@ -1174,8 +1223,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 258);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 248);
+show_backtrace(1);
 }
 var_item = p0;
 var2 = ((short int (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__Collection__has]))(self, var_item) /* has on <self:Set[Object]>*/;
@@ -1206,6 +1257,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_item /* var item: Object */;
 /* Covariant cast for argument 0 (item) <p0:Object> isa RemovableCollection#0 */
 /* <p0:Object> isa RemovableCollection#0 */
@@ -1218,8 +1270,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 268);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "RemovableCollection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 258);
+show_backtrace(1);
 }
 var_item = p0;
 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__RemovableCollection__remove]))(self, var_item) /* remove on <self:Set[Object]>*/;
@@ -1249,6 +1303,7 @@ short int var11 /* : Bool */;
 int cltype12;
 int idtype13;
 const struct type* type_struct;
+const char* var_class_name;
 short int var14 /* : Bool */;
 var_other = p0;
 /* <var_other:nullable Object> isa Set[Object] */
@@ -1295,8 +1350,10 @@ var11 = 0;
 var11 = var_other->type->type_table[cltype12] == idtype13;
 }
 if (!var11) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 276);
-exit(1);
+var_class_name = var_other == NULL ? "null" : var_other->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[Set#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 266);
+show_backtrace(1);
 }
 var14 = ((short int (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__Collection__has_all]))(self, var_other) /* has_all on <self:Set[Object]>*/;
 var = var14;
@@ -1366,6 +1423,8 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
+const char* var_class_name2;
 /* Covariant cast for argument 0 (key) <p0:Object> isa MapRead#0 */
 /* <p0:Object> isa MapRead#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapRead_FT0];
@@ -1377,11 +1436,15 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 290);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 280);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 290);
-exit(1);
+var_class_name2 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "[]", var_class_name2);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 280);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1394,6 +1457,57 @@ var = var1;
 RET_LABEL:;
 return var;
 }
+/* method abstract_collection#MapRead#get_or_null for (self: MapRead[Object, nullable Object], Object): nullable Object */
+val* abstract_collection__MapRead__get_or_null(val* self, val* p0) {
+val* var /* : nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+const struct type* type_struct;
+const char* var_class_name;
+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 */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapRead_FT0];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= p0->type->table_size) {
+var1 = 0;
+} else {
+var1 = p0->type->type_table[cltype] == idtype;
+}
+if (!var1) {
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 283);
+show_backtrace(1);
+}
+var_key = p0;
+var2 = ((short int (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__MapRead__has_key]))(self, var_key) /* has_key on <self:MapRead[Object, nullable Object]>*/;
+if (var2){
+var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(self, var_key) /* [] on <self:MapRead[Object, nullable Object]>*/;
+var = var3;
+goto RET_LABEL;
+} else {
+}
+var4 = NULL;
+var = var4;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method abstract_collection#MapRead#get_or_null for (self: Object, Object): nullable Object */
+val* VIRTUAL_abstract_collection__MapRead__get_or_null(val* self, val* p0) {
+val* var /* : nullable Object */;
+val* var1 /* : nullable Object */;
+var1 = abstract_collection__MapRead__get_or_null(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
 /* method abstract_collection#MapRead#get_or_default for (self: MapRead[Object, nullable Object], Object, nullable Object): nullable Object */
 val* abstract_collection__MapRead__get_or_default(val* self, val* p0, val* p1) {
 val* var /* : nullable Object */;
@@ -1401,15 +1515,17 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 short int var2 /* : Bool */;
 int cltype3;
 int idtype4;
 const struct type* type_struct5;
 short int is_nullable;
+const char* var_class_name6;
 val* var_key /* var key: Object */;
 val* var_default /* var default: nullable Object */;
-short int var6 /* : Bool */;
-val* var7 /* : nullable Object */;
+short int var7 /* : Bool */;
+val* var8 /* : nullable Object */;
 /* Covariant cast for argument 0 (key) <p0:Object> isa MapRead#0 */
 /* <p0:Object> isa MapRead#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapRead_FT0];
@@ -1421,8 +1537,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 293);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 297);
+show_backtrace(1);
 }
 /* Covariant cast for argument 1 (default) <p1:nullable Object> isa MapRead#1 */
 /* <p1:nullable Object> isa MapRead#1 */
@@ -1440,15 +1558,17 @@ var2 = p1->type->type_table[cltype3] == idtype4;
 }
 }
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 293);
-exit(1);
+var_class_name6 = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapRead#1", var_class_name6);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 297);
+show_backtrace(1);
 }
 var_key = p0;
 var_default = p1;
-var6 = ((short int (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__MapRead__has_key]))(self, var_key) /* has_key on <self:MapRead[Object, nullable Object]>*/;
-if (var6){
-var7 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(self, var_key) /* [] on <self:MapRead[Object, nullable Object]>*/;
-var = var7;
+var7 = ((short int (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__MapRead__has_key]))(self, var_key) /* has_key on <self:MapRead[Object, nullable Object]>*/;
+if (var7){
+var8 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(self, var_key) /* [] on <self:MapRead[Object, nullable Object]>*/;
+var = var8;
 goto RET_LABEL;
 } else {
 }
@@ -1473,6 +1593,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_key /* var key: Object */;
 val* var2 /* : Collection[Object] */;
 short int var3 /* : Bool */;
@@ -1487,8 +1608,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 300);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 304);
+show_backtrace(1);
 }
 var_key = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__MapRead__keys]))(self) /* keys on <self:MapRead[Object, nullable Object]>*/;
@@ -1510,8 +1633,11 @@ return var;
 /* method abstract_collection#MapRead#iterator for (self: MapRead[Object, nullable Object]): MapIterator[Object, nullable Object] */
 val* abstract_collection__MapRead__iterator(val* self) {
 val* var /* : MapIterator[Object, nullable Object] */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 303);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "iterator", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 307);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1524,33 +1650,14 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method abstract_collection#MapRead#iterate for (self: MapRead[Object, nullable Object]) */
-void abstract_collection__MapRead__iterate(val* self) {
-val* var /* : MapIterator[Object, nullable Object] */;
-val* var_i /* var i: MapIterator[Object, nullable Object] */;
-short int var1 /* : Bool */;
-var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__MapRead__iterator]))(self) /* iterator on <self:MapRead[Object, nullable Object]>*/;
-var_i = var;
-for(;;) {
-var1 = ((short int (*)(val*))(var_i->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var_i) /* is_ok on <var_i:MapIterator[Object, nullable Object]>*/;
-if (!var1) break;
-printf("NOT YET IMPLEMENTED AClosureCallExpr:lib/standard/collection/abstract_collection.nit:312,4--22\n");
-((void (*)(val*))(var_i->class->vft[COLOR_abstract_collection__MapIterator__next]))(var_i) /* next on <var_i:MapIterator[Object, nullable Object]>*/;
-CONTINUE_label: (void)0;
-}
-BREAK_label: (void)0;
-RET_LABEL:;
-}
-/* method abstract_collection#MapRead#iterate for (self: Object) */
-void VIRTUAL_abstract_collection__MapRead__iterate(val* self) {
-abstract_collection__MapRead__iterate(self);
-RET_LABEL:;
-}
 /* method abstract_collection#MapRead#values for (self: MapRead[Object, nullable Object]): Collection[nullable Object] */
 val* abstract_collection__MapRead__values(val* self) {
 val* var /* : Collection[nullable Object] */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 317);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "values", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 310);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1566,8 +1673,11 @@ return var;
 /* method abstract_collection#MapRead#keys for (self: MapRead[Object, nullable Object]): Collection[Object] */
 val* abstract_collection__MapRead__keys(val* self) {
 val* var /* : Collection[Object] */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 322);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "keys", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 315);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1583,8 +1693,11 @@ return var;
 /* method abstract_collection#MapRead#is_empty for (self: MapRead[Object, nullable Object]): Bool */
 short int abstract_collection__MapRead__is_empty(val* self) {
 short int var /* : Bool */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 327);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "is_empty", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 320);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1600,8 +1713,11 @@ return var;
 /* method abstract_collection#MapRead#length for (self: MapRead[Object, nullable Object]): Int */
 long abstract_collection__MapRead__length(val* self) {
 long var /* : Int */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 330);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "length", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 323);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1614,17 +1730,61 @@ var = var1;
 RET_LABEL:;
 return var;
 }
+/* method abstract_collection#MapRead#provide_default_value for (self: MapRead[Object, nullable Object], Object): nullable Object */
+val* abstract_collection__MapRead__provide_default_value(val* self, val* p0) {
+val* var /* : nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+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 */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapRead_FT0];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= p0->type->table_size) {
+var1 = 0;
+} else {
+var1 = p0->type->type_table[cltype] == idtype;
+}
+if (!var1) {
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 326);
+show_backtrace(1);
+}
+var_key = p0;
+fprintf(stderr, "Runtime error: %s", "Aborted");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 331);
+show_backtrace(1);
+RET_LABEL:;
+return var;
+}
+/* method abstract_collection#MapRead#provide_default_value for (self: Object, Object): nullable Object */
+val* VIRTUAL_abstract_collection__MapRead__provide_default_value(val* self, val* p0) {
+val* var /* : nullable Object */;
+val* var1 /* : nullable Object */;
+var1 = abstract_collection__MapRead__provide_default_value(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
 /* method abstract_collection#Map#[]= for (self: Map[Object, nullable Object], Object, nullable Object) */
 void abstract_collection__Map___91d_93d_61d(val* self, val* p0, val* p1) {
 short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 short int var1 /* : Bool */;
 int cltype2;
 int idtype3;
 const struct type* type_struct4;
 short int is_nullable;
+const char* var_class_name5;
+const char* var_class_name6;
 /* Covariant cast for argument 0 (key) <p0:Object> isa Map#0 */
 /* <p0:Object> isa Map#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Map_FT0];
@@ -1636,8 +1796,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 360);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 360);
+show_backtrace(1);
 }
 /* Covariant cast for argument 1 (item) <p1:nullable Object> isa Map#1 */
 /* <p1:nullable Object> isa Map#1 */
@@ -1655,11 +1817,15 @@ var1 = p1->type->type_table[cltype2] == idtype3;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 360);
-exit(1);
+var_class_name5 = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map#1", var_class_name5);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 360);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 360);
-exit(1);
+var_class_name6 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "[]=", var_class_name6);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 360);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#Map#[]= for (self: Object, Object, nullable Object) */
@@ -1673,6 +1839,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_map /* var map: Map[Object, nullable Object] */;
 val* var1 /* : MapIterator[Object, nullable Object] */;
 val* var_i /* var i: MapIterator[Object, nullable Object] */;
@@ -1690,8 +1857,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 363);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[Map#0, Map#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 363);
+show_backtrace(1);
 }
 var_map = p0;
 var1 = ((val* (*)(val*))(var_map->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_map) /* iterator on <var_map:Map[Object, nullable Object]>*/;
@@ -1715,8 +1884,11 @@ RET_LABEL:;
 }
 /* method abstract_collection#Map#clear for (self: Map[Object, nullable Object]) */
 void abstract_collection__Map__clear(val* self) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 374);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "clear", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 374);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#Map#clear for (self: Object) */
@@ -1727,8 +1899,11 @@ RET_LABEL:;
 /* method abstract_collection#Map#values for (self: Map[Object, nullable Object]): RemovableCollection[nullable Object] */
 val* abstract_collection__Map__values(val* self) {
 val* var /* : RemovableCollection[nullable Object] */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 377);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "values", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 377);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1744,8 +1919,11 @@ return var;
 /* method abstract_collection#Map#keys for (self: Map[Object, nullable Object]): RemovableCollection[Object] */
 val* abstract_collection__Map__keys(val* self) {
 val* var /* : RemovableCollection[Object] */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 379);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "keys", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 379);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1761,8 +1939,11 @@ return var;
 /* method abstract_collection#MapIterator#item for (self: MapIterator[Object, nullable Object]): nullable Object */
 val* abstract_collection__MapIterator__item(val* self) {
 val* var /* : nullable Object */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 384);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "item", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 384);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1778,8 +1959,11 @@ return var;
 /* method abstract_collection#MapIterator#key for (self: MapIterator[Object, nullable Object]): Object */
 val* abstract_collection__MapIterator__key(val* self) {
 val* var /* : Object */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 388);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "key", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 388);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1794,8 +1978,11 @@ return var;
 }
 /* method abstract_collection#MapIterator#next for (self: MapIterator[Object, nullable Object]) */
 void abstract_collection__MapIterator__next(val* self) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 392);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "next", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 392);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#MapIterator#next for (self: Object) */
@@ -1806,8 +1993,11 @@ RET_LABEL:;
 /* method abstract_collection#MapIterator#is_ok for (self: MapIterator[Object, nullable Object]): Bool */
 short int abstract_collection__MapIterator__is_ok(val* self) {
 short int var /* : Bool */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 396);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "is_ok", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 396);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -1826,8 +2016,9 @@ val* var /* : MapIterator[Object, nullable Object] */;
 val* var1 /* : MapIterator[Object, nullable Object] */;
 var1 = self->attrs[COLOR_abstract_collection__MapKeysIterator___64diterator].val; /* @iterator on <self:MapKeysIterator[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @iterator", "lib/standard/collection/abstract_collection.nit", 406);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @iterator");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 406);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -1848,6 +2039,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (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];
@@ -1859,8 +2051,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 406);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapIterator[MapKeysIterator#0, MapKeysIterator#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 406);
+show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__MapKeysIterator___64diterator].val = p0; /* @iterator on <self:MapKeysIterator[Object, nullable Object]> */
 RET_LABEL:;
@@ -1930,6 +2124,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (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];
@@ -1941,8 +2136,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 403);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapIterator[MapKeysIterator#0, MapKeysIterator#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 403);
+show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__MapKeysIterator___64diterator].val = p0; /* @iterator on <self:MapKeysIterator[Object, nullable Object]> */
 RET_LABEL:;
@@ -1958,8 +2155,9 @@ val* var /* : MapIterator[Object, nullable Object] */;
 val* var1 /* : MapIterator[Object, nullable Object] */;
 var1 = self->attrs[COLOR_abstract_collection__MapValuesIterator___64diterator].val; /* @iterator on <self:MapValuesIterator[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @iterator", "lib/standard/collection/abstract_collection.nit", 417);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @iterator");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 417);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -1980,6 +2178,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (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];
@@ -1991,8 +2190,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 417);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapIterator[MapValuesIterator#0, MapValuesIterator#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 417);
+show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__MapValuesIterator___64diterator].val = p0; /* @iterator on <self:MapValuesIterator[Object, nullable Object]> */
 RET_LABEL:;
@@ -2062,6 +2263,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (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];
@@ -2073,8 +2275,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 414);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapIterator[MapValuesIterator#0, MapValuesIterator#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 414);
+show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__MapValuesIterator___64diterator].val = p0; /* @iterator on <self:MapValuesIterator[Object, nullable Object]> */
 RET_LABEL:;
@@ -2094,8 +2298,9 @@ val* var4 /* : nullable Object */;
 var1 = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__is_empty]))(self) /* is_empty on <self:SequenceRead[nullable Object]>*/;
 var2 = !var1;
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert \'not_empty\' failed", "lib/standard/collection/abstract_collection.nit", 433);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Assert \'not_empty\' failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 433);
+show_backtrace(1);
 }
 var3 = 0;
 var4 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var3) /* [] on <self:SequenceRead[nullable Object]>*/;
@@ -2116,8 +2321,11 @@ return var;
 /* method abstract_collection#SequenceRead#[] for (self: SequenceRead[nullable Object], Int): nullable Object */
 val* abstract_collection__SequenceRead___91d_93d(val* self, long p0) {
 val* var /* : nullable Object */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 437);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "[]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 437);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -2143,8 +2351,9 @@ val* var8 /* : nullable Object */;
 var1 = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__is_empty]))(self) /* is_empty on <self:SequenceRead[nullable Object]>*/;
 var2 = !var1;
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert \'not_empty\' failed", "lib/standard/collection/abstract_collection.nit", 446);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Assert \'not_empty\' failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 446);
+show_backtrace(1);
 }
 var3 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:SequenceRead[nullable Object]>*/;
 var4 = 1;
@@ -2177,6 +2386,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_item /* var item: nullable Object */;
 val* var2 /* : Iterator[nullable Object] */;
 val* var_i /* var i: IndexedIterator[nullable Object] */;
@@ -2203,8 +2413,10 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 450);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SequenceRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 450);
+show_backtrace(1);
 }
 var_item = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:SequenceRead[nullable Object]>*/;
@@ -2252,8 +2464,11 @@ return var;
 /* method abstract_collection#SequenceRead#iterator for (self: SequenceRead[nullable Object]): IndexedIterator[nullable Object] */
 val* abstract_collection__SequenceRead__iterator(val* self) {
 val* var /* : IndexedIterator[nullable Object] */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 463);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "iterator", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 463);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -2271,123 +2486,114 @@ short int abstract_collection__SequenceRead___61d_61d(val* self, val* p0) {
 short int var /* : Bool */;
 val* var_o /* var o: nullable Object */;
 short int var1 /* : Bool */;
-short int var2 /* : Bool */;
 int cltype;
 int idtype;
+short int var2 /* : Bool */;
 short int var3 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var4 /* : null */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-long var7 /* : Int */;
+long var4 /* : Int */;
 long var_l /* var l: Int */;
-long var8 /* : Int */;
+long var5 /* : Int */;
+short int var6 /* : Bool */;
+short int var8 /* : Bool */;
 short int var9 /* : Bool */;
-short int var11 /* : Bool */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-long var14 /* : Int */;
+short int var10 /* : Bool */;
+long var11 /* : Int */;
 long var_i /* var i: Int */;
-short int var15 /* : Bool */;
+short int var12 /* : Bool */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+const char* var_class_name;
 short int var17 /* : Bool */;
-int cltype18;
-int idtype19;
+val* var18 /* : nullable Object */;
+val* var19 /* : nullable Object */;
 short int var20 /* : Bool */;
-val* var21 /* : nullable Object */;
-val* var22 /* : nullable Object */;
-short int var23 /* : Bool */;
-short int var24 /* : Bool */;
+short int var21 /* : Bool */;
+long var22 /* : Int */;
+long var23 /* : Int */;
 long var25 /* : Int */;
-long var26 /* : Int */;
-long var28 /* : Int */;
-short int var29 /* : Bool */;
+short int var26 /* : Bool */;
 var_o = p0;
 /* <var_o:nullable Object> isa SequenceRead[nullable Object] */
 cltype = type_abstract_collection__SequenceReadnullable_kernel__Object.color;
 idtype = type_abstract_collection__SequenceReadnullable_kernel__Object.id;
 if(var_o == NULL) {
-var2 = 0;
+var1 = 0;
 } else {
 if(cltype >= var_o->type->table_size) {
-var2 = 0;
+var1 = 0;
 } else {
-var2 = var_o->type->type_table[cltype] == idtype;
+var1 = var_o->type->type_table[cltype] == idtype;
 }
 }
-var3 = !var2;
-var_ = var3;
-if (var3){
-var1 = var_;
-} else {
-var4 = NULL;
-var5 = var_o == var4;
-var1 = var5;
-}
-if (var1){
-var6 = 0;
-var = var6;
+var2 = !var1;
+if (var2){
+var3 = 0;
+var = var3;
 goto RET_LABEL;
 } else {
 }
-var7 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:SequenceRead[nullable Object]>*/;
-var_l = var7;
-var8 = ((long (*)(val*))(var_o->class->vft[COLOR_abstract_collection__Collection__length]))(var_o) /* length on <var_o:nullable Object(SequenceRead[nullable Object])>*/;
-{ /* Inline kernel#Int#!= (var8,var_l) */
-var11 = var8 == var_l;
-var12 = !var11;
-var9 = var12;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
+var4 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:SequenceRead[nullable Object]>*/;
+var_l = var4;
+var5 = ((long (*)(val*))(var_o->class->vft[COLOR_abstract_collection__Collection__length]))(var_o) /* length on <var_o:nullable Object(SequenceRead[nullable Object])>*/;
+{ /* Inline kernel#Int#!= (var5,var_l) */
+var8 = var5 == var_l;
+var9 = !var8;
+var6 = var9;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
 }
-if (var9){
-var13 = 0;
-var = var13;
+if (var6){
+var10 = 0;
+var = var10;
 goto RET_LABEL;
 } else {
 }
-var14 = 0;
-var_i = var14;
+var11 = 0;
+var_i = var11;
 for(;;) {
 { /* Inline kernel#Int#< (var_i,var_l) */
 /* Covariant cast for argument 0 (i) <var_l:Int> isa OTHER */
 /* <var_l:Int> isa OTHER */
-var17 = 1; /* easy <var_l:Int> isa OTHER*/
-if (!var17) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
-exit(1);
-}
-var20 = var_i < var_l;
-var15 = var20;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
-}
-if (!var15) break;
-var21 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:SequenceRead[nullable Object]>*/;
-var22 = ((val* (*)(val*, long))(var_o->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_o, var_i) /* [] on <var_o:nullable Object(SequenceRead[nullable Object])>*/;
-if (var21 == NULL) {
-var23 = (var22 != NULL);
-} else {
-var23 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___33d_61d]))(var21, var22) /* != on <var21:nullable Object>*/;
-}
-if (var23){
-var24 = 0;
-var = var24;
+var14 = 1; /* easy <var_l:Int> isa OTHER*/
+if (!var14) {
+var_class_name = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 265);
+show_backtrace(1);
+}
+var17 = var_i < var_l;
+var12 = var17;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
+}
+if (!var12) break;
+var18 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:SequenceRead[nullable Object]>*/;
+var19 = ((val* (*)(val*, long))(var_o->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_o, var_i) /* [] on <var_o:nullable Object(SequenceRead[nullable Object])>*/;
+if (var18 == NULL) {
+var20 = (var19 != NULL);
+} else {
+var20 = ((short int (*)(val*, val*))(var18->class->vft[COLOR_kernel__Object___33d_61d]))(var18, var19) /* != on <var18:nullable Object>*/;
+}
+if (var20){
+var21 = 0;
+var = var21;
 goto RET_LABEL;
 } else {
 }
-var25 = 1;
-{ /* Inline kernel#Int#+ (var_i,var25) */
-var28 = var_i + var25;
-var26 = var28;
-goto RET_LABEL27;
-RET_LABEL27:(void)0;
+var22 = 1;
+{ /* Inline kernel#Int#+ (var_i,var22) */
+var25 = var_i + var22;
+var23 = var25;
+goto RET_LABEL24;
+RET_LABEL24:(void)0;
 }
-var_i = var26;
+var_i = var23;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-var29 = 1;
-var = var29;
+var26 = 1;
+var = var26;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -2454,6 +2660,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 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 */
@@ -2472,8 +2679,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 494);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Sequence#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 494);
+show_backtrace(1);
 }
 var_item = p0;
 var1 = 0;
@@ -2492,6 +2701,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_item /* var item: nullable Object */;
 long var1 /* : Int */;
 long var_l /* var l: Int */;
@@ -2500,11 +2710,12 @@ short int var3 /* : Bool */;
 short int var5 /* : Bool */;
 int cltype6;
 int idtype7;
-short int var8 /* : Bool */;
-long var9 /* : Int */;
+const char* var_class_name8;
+short int var9 /* : Bool */;
 long var10 /* : Int */;
-long var12 /* : Int */;
+long var11 /* : Int */;
 long var13 /* : Int */;
+long var14 /* : Int */;
 /* Covariant cast for argument 0 (item) <p0:nullable Object> isa Sequence#0 */
 /* <p0:nullable Object> isa Sequence#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Sequence_FT0];
@@ -2521,8 +2732,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 499);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Sequence#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 499);
+show_backtrace(1);
 }
 var_item = p0;
 var1 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:Sequence[nullable Object]>*/;
@@ -2533,26 +2746,28 @@ var2 = 0;
 /* <var2:Int> isa OTHER */
 var5 = 1; /* easy <var2:Int> isa OTHER*/
 if (!var5) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
-exit(1);
+var_class_name8 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name8);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 267);
+show_backtrace(1);
 }
-var8 = var_l > var2;
-var3 = var8;
+var9 = var_l > var2;
+var3 = var9;
 goto RET_LABEL4;
 RET_LABEL4:(void)0;
 }
 if (var3){
-var9 = 1;
-{ /* Inline kernel#Int#- (var_l,var9) */
-var12 = var_l - var9;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+var10 = 1;
+{ /* Inline kernel#Int#- (var_l,var10) */
+var13 = var_l - var10;
+var11 = var13;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
 }
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var10, var_item) /* []= on <self:Sequence[nullable Object]>*/;
+((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var11, var_item) /* []= on <self:Sequence[nullable Object]>*/;
 } else {
-var13 = 0;
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var13, var_item) /* []= on <self:Sequence[nullable Object]>*/;
+var14 = 0;
+((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var14, var_item) /* []= on <self:Sequence[nullable Object]>*/;
 }
 RET_LABEL:;
 }
@@ -2568,6 +2783,7 @@ int cltype;
 int idtype;
 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 */
@@ -2585,8 +2801,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 511);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SimpleCollection#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 511);
+show_backtrace(1);
 }
 var_e = p0;
 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__Sequence__push]))(self, var_e) /* push on <self:Sequence[nullable Object]>*/;
@@ -2604,6 +2822,8 @@ 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 (e) <p0:nullable Object> isa Sequence#0 */
 /* <p0:nullable Object> isa Sequence#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Sequence_FT0];
@@ -2620,11 +2840,15 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 514);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Sequence#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 514);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 514);
-exit(1);
+var_class_name1 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "push", var_class_name1);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 514);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#Sequence#push for (self: Object, nullable Object) */
@@ -2638,6 +2862,7 @@ 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] */;
 val* var1 /* : Iterator[nullable Object] */;
 short int var2 /* : Bool */;
@@ -2654,8 +2879,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 517);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[Sequence#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 517);
+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]>*/;
@@ -2679,8 +2906,11 @@ RET_LABEL:;
 /* method abstract_collection#Sequence#pop for (self: Sequence[nullable Object]): nullable Object */
 val* abstract_collection__Sequence__pop(val* self) {
 val* var /* : nullable Object */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 520);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "pop", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 520);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -2700,6 +2930,8 @@ 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 (e) <p0:nullable Object> isa Sequence#0 */
 /* <p0:nullable Object> isa Sequence#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Sequence_FT0];
@@ -2716,11 +2948,15 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 523);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Sequence#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 523);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 523);
-exit(1);
+var_class_name1 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "unshift", var_class_name1);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 523);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#Sequence#unshift for (self: Object, nullable Object) */
@@ -2731,8 +2967,11 @@ 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 */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 526);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "shift", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 526);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -2752,6 +2991,8 @@ 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 1 (item) <p1:nullable Object> isa Sequence#0 */
 /* <p1:nullable Object> isa Sequence#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Sequence_FT0];
@@ -2768,11 +3009,15 @@ var = p1->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 530);
-exit(1);
+var_class_name = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Sequence#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 530);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 530);
-exit(1);
+var_class_name1 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "[]=", var_class_name1);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 530);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#Sequence#[]= for (self: Object, Int, nullable Object) */
@@ -2782,8 +3027,11 @@ RET_LABEL:;
 }
 /* method abstract_collection#Sequence#remove_at for (self: Sequence[nullable Object], Int) */
 void abstract_collection__Sequence__remove_at(val* self, long p0) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 533);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "remove_at", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 533);
+show_backtrace(1);
 RET_LABEL:;
 }
 /* method abstract_collection#Sequence#remove_at for (self: Object, Int) */
@@ -2794,8 +3042,11 @@ RET_LABEL:;
 /* method abstract_collection#IndexedIterator#index for (self: IndexedIterator[nullable Object]): Int */
 long abstract_collection__IndexedIterator__index(val* self) {
 long var /* : Int */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 540);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "index", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 540);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -2815,6 +3066,8 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
+const char* var_class_name2;
 /* Covariant cast for argument 0 (key) <p0:Object> isa CoupleMap#0 */
 /* <p0:Object> isa CoupleMap#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__CoupleMap_FT0];
@@ -2826,11 +3079,15 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 547);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "CoupleMap#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 547);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/abstract_collection.nit", 547);
-exit(1);
+var_class_name2 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "couple_at", var_class_name2);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 547);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -2850,12 +3107,14 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_key /* var key: Object */;
 val* var2 /* : nullable Couple[Object, nullable Object] */;
 val* var_c /* var c: nullable Couple[Object, nullable Object] */;
 val* var3 /* : null */;
 short int var4 /* : Bool */;
 val* var5 /* : nullable Object */;
+val* var6 /* : nullable Object */;
 /* Covariant cast for argument 0 (key) <p0:Object> isa MapRead#0 */
 /* <p0:Object> isa MapRead#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapRead_FT0];
@@ -2867,8 +3126,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 551);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MapRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 551);
+show_backtrace(1);
 }
 var_key = p0;
 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__CoupleMap__couple_at]))(self, var_key) /* couple_at on <self:CoupleMap[Object, nullable Object]>*/;
@@ -2880,12 +3141,13 @@ var4 = 1; /* is null */
 var4 = 0; /* arg is null but recv is not */
 }
 if (var4){
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "lib/standard/collection/abstract_collection.nit", 555);
-exit(1);
-} else {
-var5 = ((val* (*)(val*))(var_c->class->vft[COLOR_abstract_collection__Couple__second]))(var_c) /* second on <var_c:nullable Couple[Object, nullable Object](Couple[Object, nullable Object])>*/;
+var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_collection__MapRead__provide_default_value]))(self, var_key) /* provide_default_value on <self:CoupleMap[Object, nullable Object]>*/;
 var = var5;
 goto RET_LABEL;
+} else {
+var6 = ((val* (*)(val*))(var_c->class->vft[COLOR_abstract_collection__Couple__second]))(var_c) /* second on <var_c:nullable Couple[Object, nullable Object](Couple[Object, nullable Object])>*/;
+var = var6;
+goto RET_LABEL;
 }
 RET_LABEL:;
 return var;
@@ -2907,8 +3169,9 @@ val* var2 /* : nullable Object */;
 val* var3 /* : nullable Object */;
 var1 = self->attrs[COLOR_abstract_collection__CoupleMapIterator___iter].val; /* _iter on <self:CoupleMapIterator[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _iter", "lib/standard/collection/abstract_collection.nit", 567);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _iter");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 567);
+show_backtrace(1);
 }
 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[Couple[Object, nullable Object]]>*/;
 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Couple__second]))(var2) /* second on <var2:nullable Object(Couple[Object, nullable Object])>*/;
@@ -2934,8 +3197,9 @@ val* var2 /* : nullable Object */;
 val* var3 /* : nullable Object */;
 var1 = self->attrs[COLOR_abstract_collection__CoupleMapIterator___iter].val; /* _iter on <self:CoupleMapIterator[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _iter", "lib/standard/collection/abstract_collection.nit", 571);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _iter");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 571);
+show_backtrace(1);
 }
 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[Couple[Object, nullable Object]]>*/;
 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Couple__first]))(var2) /* first on <var2:nullable Object(Couple[Object, nullable Object])>*/;
@@ -2960,8 +3224,9 @@ val* var1 /* : Iterator[Couple[Object, nullable Object]] */;
 short int var2 /* : Bool */;
 var1 = self->attrs[COLOR_abstract_collection__CoupleMapIterator___iter].val; /* _iter on <self:CoupleMapIterator[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _iter", "lib/standard/collection/abstract_collection.nit", 573);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _iter");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 573);
+show_backtrace(1);
 }
 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[Couple[Object, nullable Object]]>*/;
 var = var2;
@@ -2983,8 +3248,9 @@ void abstract_collection__CoupleMapIterator__next(val* self) {
 val* var /* : Iterator[Couple[Object, nullable Object]] */;
 var = self->attrs[COLOR_abstract_collection__CoupleMapIterator___iter].val; /* _iter on <self:CoupleMapIterator[Object, nullable Object]> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _iter", "lib/standard/collection/abstract_collection.nit", 577);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _iter");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 577);
+show_backtrace(1);
 }
 ((void (*)(val*))(var->class->vft[COLOR_abstract_collection__Iterator__next]))(var) /* next on <var:Iterator[Couple[Object, nullable Object]]>*/;
 RET_LABEL:;
@@ -3000,6 +3266,7 @@ short int var /* : Bool */;
 int cltype;
 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]] */
@@ -3012,8 +3279,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 582);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Iterator[Couple[CoupleMapIterator#0, CoupleMapIterator#1]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 582);
+show_backtrace(1);
 }
 var_i = p0;
 self->attrs[COLOR_abstract_collection__CoupleMapIterator___iter].val = var_i; /* _iter on <self:CoupleMapIterator[Object, nullable Object]> */
@@ -3049,6 +3318,7 @@ int cltype;
 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 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT0];
@@ -3065,8 +3335,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 590);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Couple#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 590);
+show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Couple___first].val = p0; /* _first on <self:Couple[nullable Object, nullable Object]> */
 RET_LABEL:;
@@ -3101,6 +3373,7 @@ int cltype;
 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 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Couple_FT1];
@@ -3117,8 +3390,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 593);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Couple#1", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 593);
+show_backtrace(1);
 }
 self->attrs[COLOR_abstract_collection__Couple___second].val = p0; /* _second on <self:Couple[nullable Object, nullable Object]> */
 RET_LABEL:;
@@ -3135,11 +3410,13 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 short int var1 /* : Bool */;
 int cltype2;
 int idtype3;
 const struct type* type_struct4;
 short int is_nullable5;
+const char* var_class_name6;
 val* var_f /* var f: nullable Object */;
 val* var_s /* var s: nullable Object */;
 /* Covariant cast for argument 0 (f) <p0:nullable Object> isa Couple#0 */
@@ -3158,8 +3435,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 596);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Couple#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 596);
+show_backtrace(1);
 }
 /* Covariant cast for argument 1 (s) <p1:nullable Object> isa Couple#1 */
 /* <p1:nullable Object> isa Couple#1 */
@@ -3177,8 +3456,10 @@ var1 = p1->type->type_table[cltype2] == idtype3;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/abstract_collection.nit", 596);
-exit(1);
+var_class_name6 = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Couple#1", var_class_name6);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/abstract_collection.nit", 596);
+show_backtrace(1);
 }
 var_f = p0;
 var_s = p1;