tests.sh: less hackish way to handle fixme directories for savdirs
[nit.git] / c_src / range.sep.1.c
index d48edcb..3a5740e 100644 (file)
@@ -5,8 +5,9 @@ val* var /* : Discrete */;
 val* var1 /* : Discrete */;
 var1 = self->attrs[COLOR_range__Range___first].val; /* _first on <self:Range[Discrete]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _first", "lib/standard/collection/range.nit", 22);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _first");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 22);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -27,8 +28,9 @@ val* var /* : Discrete */;
 val* var1 /* : Discrete */;
 var1 = self->attrs[COLOR_range__Range___last].val; /* _last on <self:Range[Discrete]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _last", "lib/standard/collection/range.nit", 24);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _last");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 24);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -49,8 +51,9 @@ val* var /* : Discrete */;
 val* var1 /* : Discrete */;
 var1 = self->attrs[COLOR_range__Range___after].val; /* _after on <self:Range[Discrete]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _after", "lib/standard/collection/range.nit", 27);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _after");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 27);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -72,6 +75,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_item /* var item: Discrete */;
 short int var2 /* : Bool */;
 val* var3 /* : Discrete */;
@@ -90,22 +94,26 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/range.nit", 30);
-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/range.nit", 30);
+show_backtrace(1);
 }
 var_item = p0;
 var3 = self->attrs[COLOR_range__Range___first].val; /* _first on <self:Range[Discrete]> */
 if (var3 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _first", "lib/standard/collection/range.nit", 30);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _first");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 30);
+show_backtrace(1);
 }
 var4 = ((short int (*)(val*, val*))(var_item->class->vft[COLOR_kernel__Comparable___62d_61d]))(var_item, var3) /* >= on <var_item:Discrete>*/;
 var_ = var4;
 if (var4){
 var5 = self->attrs[COLOR_range__Range___last].val; /* _last on <self:Range[Discrete]> */
 if (var5 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _last", "lib/standard/collection/range.nit", 30);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _last");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 30);
+show_backtrace(1);
 }
 var6 = ((short int (*)(val*, val*))(var_item->class->vft[COLOR_kernel__Comparable___60d_61d]))(var_item, var5) /* <= on <var_item:Discrete>*/;
 var2 = var6;
@@ -133,6 +141,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_item /* var item: Discrete */;
 short int var2 /* : Bool */;
 short int var3 /* : Bool */;
@@ -154,22 +163,26 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/range.nit", 32);
-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/range.nit", 32);
+show_backtrace(1);
 }
 var_item = p0;
 var4 = self->attrs[COLOR_range__Range___first].val; /* _first on <self:Range[Discrete]> */
 if (var4 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _first", "lib/standard/collection/range.nit", 32);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _first");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 32);
+show_backtrace(1);
 }
 var5 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_kernel__Object___61d_61d]))(var4, var_item) /* == on <var4:Discrete>*/;
 var_ = var5;
 if (var5){
 var6 = self->attrs[COLOR_range__Range___last].val; /* _last on <self:Range[Discrete]> */
 if (var6 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _last", "lib/standard/collection/range.nit", 32);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _last");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 32);
+show_backtrace(1);
 }
 var7 = ((short int (*)(val*, val*))(var_item->class->vft[COLOR_kernel__Object___61d_61d]))(var_item, var6) /* == on <var_item:Discrete>*/;
 var3 = var7;
@@ -204,6 +217,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_item /* var item: Discrete */;
 short int var2 /* : Bool */;
 long var3 /* : Int */;
@@ -219,8 +233,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/range.nit", 34);
-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/range.nit", 34);
+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:Range[Discrete]>*/;
@@ -251,7 +267,6 @@ val* var /* : Iterator[Discrete] */;
 val* var1 /* : IteratorRange[Discrete] */;
 var1 = NEW_range__IteratorRange(self->type->resolution_table->types[COLOR_range__IteratorRangerange__Range_FT0]);
 ((void (*)(val*, val*))(var1->class->vft[COLOR_range__IteratorRange__init]))(var1, self) /* init on <var1:IteratorRange[Discrete]>*/;
-CHECK_NEW_range__IteratorRange(var1);
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -266,59 +281,6 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method range#Range#iterate for (self: Range[Discrete]) */
-void range__Range__iterate(val* self) {
-val* var /* : Discrete */;
-val* var_c /* var c: Discrete */;
-val* var1 /* : Discrete */;
-val* var_l /* var l: Discrete */;
-short int var2 /* : Bool */;
-val* var3 /* : Discrete */;
-short int var4 /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-var = self->attrs[COLOR_range__Range___first].val; /* _first on <self:Range[Discrete]> */
-if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _first", "lib/standard/collection/range.nit", 48);
-exit(1);
-}
-var_c = var;
-var1 = self->attrs[COLOR_range__Range___last].val; /* _last on <self:Range[Discrete]> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _last", "lib/standard/collection/range.nit", 49);
-exit(1);
-}
-var_l = var1;
-for(;;) {
-var2 = ((short int (*)(val*, val*))(var_c->class->vft[COLOR_kernel__Comparable___60d_61d]))(var_c, var_l) /* <= on <var_c:Discrete>*/;
-if (!var2) break;
-printf("NOT YET IMPLEMENTED AClosureCallExpr:lib/standard/collection/range.nit:51,4--10\n");
-var3 = ((val* (*)(val*))(var_c->class->vft[COLOR_kernel__Discrete__succ]))(var_c) /* succ on <var_c:Discrete>*/;
-/* <var3:Discrete> isa Range#0 */
-type_struct = self->type->resolution_table->types[COLOR_range__Range_FT0];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= var3->type->table_size) {
-var4 = 0;
-} else {
-var4 = var3->type->type_table[cltype] == idtype;
-}
-if (!var4) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/range.nit", 52);
-exit(1);
-}
-var_c = var3;
-CONTINUE_label: (void)0;
-}
-BREAK_label: (void)0;
-RET_LABEL:;
-}
-/* method range#Range#iterate for (self: Object) */
-void VIRTUAL_range__Range__iterate(val* self) {
-range__Range__iterate(self);
-RET_LABEL:;
-}
 /* method range#Range#length for (self: Range[Discrete]): Int */
 long range__Range__length(val* self) {
 long var /* : Int */;
@@ -331,17 +293,20 @@ short int var5 /* : Bool */;
 short int var7 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var8 /* : Bool */;
 long var9 /* : Int */;
 var1 = self->attrs[COLOR_range__Range___first].val; /* _first on <self:Range[Discrete]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _first", "lib/standard/collection/range.nit", 58);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _first");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 47);
+show_backtrace(1);
 }
 var2 = self->attrs[COLOR_range__Range___after].val; /* _after on <self:Range[Discrete]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _after", "lib/standard/collection/range.nit", 58);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _after");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 47);
+show_backtrace(1);
 }
 var3 = ((long (*)(val*, val*))(var1->class->vft[COLOR_kernel__Discrete__distance]))(var1, var2) /* distance on <var1:Discrete>*/;
 var_nb = var3;
@@ -351,8 +316,10 @@ var4 = 0;
 /* <var4:Int> isa OTHER */
 var7 = 1; /* easy <var4:Int> isa OTHER*/
 if (!var7) {
-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);
 }
 var8 = var_nb > var4;
 var5 = var8;
@@ -387,13 +354,15 @@ val* var2 /* : Discrete */;
 short int var3 /* : Bool */;
 var1 = self->attrs[COLOR_range__Range___first].val; /* _first on <self:Range[Discrete]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _first", "lib/standard/collection/range.nit", 66);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _first");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 55);
+show_backtrace(1);
 }
 var2 = self->attrs[COLOR_range__Range___after].val; /* _after on <self:Range[Discrete]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _after", "lib/standard/collection/range.nit", 66);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _after");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 55);
+show_backtrace(1);
 }
 var3 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Comparable___62d_61d]))(var1, var2) /* >= on <var1:Discrete>*/;
 var = var3;
@@ -416,17 +385,20 @@ 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;
+const char* var_class_name5;
 val* var_from /* var from: Discrete */;
 val* var_to /* var to: Discrete */;
-val* var5 /* : Discrete */;
-short int var6 /* : Bool */;
-int cltype7;
-int idtype8;
-const struct type* type_struct9;
+val* var6 /* : Discrete */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+const struct type* type_struct10;
+const char* var_class_name11;
 /* Covariant cast for argument 0 (from) <p0:Discrete> isa Range#0 */
 /* <p0:Discrete> isa Range#0 */
 type_struct = self->type->resolution_table->types[COLOR_range__Range_FT0];
@@ -438,8 +410,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/range.nit", 68);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Range#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 57);
+show_backtrace(1);
 }
 /* Covariant cast for argument 1 (to) <p1:Discrete> isa Range#0 */
 /* <p1:Discrete> isa Range#0 */
@@ -452,28 +426,32 @@ var1 = 0;
 var1 = p1->type->type_table[cltype2] == idtype3;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/range.nit", 68);
-exit(1);
+var_class_name5 = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Range#0", var_class_name5);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 57);
+show_backtrace(1);
 }
 var_from = p0;
 var_to = p1;
 self->attrs[COLOR_range__Range___first].val = var_from; /* _first on <self:Range[Discrete]> */
 self->attrs[COLOR_range__Range___last].val = var_to; /* _last on <self:Range[Discrete]> */
-var5 = ((val* (*)(val*))(var_to->class->vft[COLOR_kernel__Discrete__succ]))(var_to) /* succ on <var_to:Discrete>*/;
-/* <var5:Discrete> isa Range#0 */
-type_struct9 = self->type->resolution_table->types[COLOR_range__Range_FT0];
-cltype7 = type_struct9->color;
-idtype8 = type_struct9->id;
-if(cltype7 >= var5->type->table_size) {
-var6 = 0;
+var6 = ((val* (*)(val*))(var_to->class->vft[COLOR_kernel__Discrete__succ]))(var_to) /* succ on <var_to:Discrete>*/;
+/* <var6:Discrete> isa Range#0 */
+type_struct10 = self->type->resolution_table->types[COLOR_range__Range_FT0];
+cltype8 = type_struct10->color;
+idtype9 = type_struct10->id;
+if(cltype8 >= var6->type->table_size) {
+var7 = 0;
 } else {
-var6 = var5->type->type_table[cltype7] == idtype8;
+var7 = var6->type->type_table[cltype8] == idtype9;
 }
-if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/range.nit", 74);
-exit(1);
+if (!var7) {
+var_class_name11 = var6 == NULL ? "null" : var6->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Range#0", var_class_name11);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 63);
+show_backtrace(1);
 }
-self->attrs[COLOR_range__Range___after].val = var5; /* _after on <self:Range[Discrete]> */
+self->attrs[COLOR_range__Range___after].val = var6; /* _after on <self:Range[Discrete]> */
 RET_LABEL:;
 }
 /* method range#Range#init for (self: Object, Discrete, Discrete) */
@@ -487,17 +465,20 @@ 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;
+const char* var_class_name5;
 val* var_from /* var from: Discrete */;
 val* var_to /* var to: Discrete */;
-val* var5 /* : Discrete */;
-short int var6 /* : Bool */;
-int cltype7;
-int idtype8;
-const struct type* type_struct9;
+val* var6 /* : Discrete */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+const struct type* type_struct10;
+const char* var_class_name11;
 /* Covariant cast for argument 0 (from) <p0:Discrete> isa Range#0 */
 /* <p0:Discrete> isa Range#0 */
 type_struct = self->type->resolution_table->types[COLOR_range__Range_FT0];
@@ -509,8 +490,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/range.nit", 77);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Range#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 66);
+show_backtrace(1);
 }
 /* Covariant cast for argument 1 (to) <p1:Discrete> isa Range#0 */
 /* <p1:Discrete> isa Range#0 */
@@ -523,27 +506,31 @@ var1 = 0;
 var1 = p1->type->type_table[cltype2] == idtype3;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/range.nit", 77);
-exit(1);
+var_class_name5 = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Range#0", var_class_name5);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 66);
+show_backtrace(1);
 }
 var_from = p0;
 var_to = p1;
 self->attrs[COLOR_range__Range___first].val = var_from; /* _first on <self:Range[Discrete]> */
-var5 = ((val* (*)(val*))(var_to->class->vft[COLOR_kernel__Discrete__prec]))(var_to) /* prec on <var_to:Discrete>*/;
-/* <var5:Discrete> isa Range#0 */
-type_struct9 = self->type->resolution_table->types[COLOR_range__Range_FT0];
-cltype7 = type_struct9->color;
-idtype8 = type_struct9->id;
-if(cltype7 >= var5->type->table_size) {
-var6 = 0;
+var6 = ((val* (*)(val*))(var_to->class->vft[COLOR_kernel__Discrete__prec]))(var_to) /* prec on <var_to:Discrete>*/;
+/* <var6:Discrete> isa Range#0 */
+type_struct10 = self->type->resolution_table->types[COLOR_range__Range_FT0];
+cltype8 = type_struct10->color;
+idtype9 = type_struct10->id;
+if(cltype8 >= var6->type->table_size) {
+var7 = 0;
 } else {
-var6 = var5->type->type_table[cltype7] == idtype8;
+var7 = var6->type->type_table[cltype8] == idtype9;
 }
-if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/range.nit", 82);
-exit(1);
+if (!var7) {
+var_class_name11 = var6 == NULL ? "null" : var6->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Range#0", var_class_name11);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 71);
+show_backtrace(1);
 }
-self->attrs[COLOR_range__Range___last].val = var5; /* _last on <self:Range[Discrete]> */
+self->attrs[COLOR_range__Range___last].val = var6; /* _last on <self:Range[Discrete]> */
 self->attrs[COLOR_range__Range___after].val = var_to; /* _after on <self:Range[Discrete]> */
 RET_LABEL:;
 }
@@ -558,8 +545,9 @@ val* var /* : Discrete */;
 val* var1 /* : Discrete */;
 var1 = self->attrs[COLOR_range__IteratorRange___item].val; /* _item on <self:IteratorRange[Discrete]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _item", "lib/standard/collection/range.nit", 91);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _item");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 80);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -583,13 +571,15 @@ val* var3 /* : Discrete */;
 short int var4 /* : Bool */;
 var1 = self->attrs[COLOR_range__IteratorRange___item].val; /* _item on <self:IteratorRange[Discrete]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _item", "lib/standard/collection/range.nit", 93);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _item");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 82);
+show_backtrace(1);
 }
 var2 = self->attrs[COLOR_range__IteratorRange___range].val; /* _range on <self:IteratorRange[Discrete]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _range", "lib/standard/collection/range.nit", 93);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _range");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 82);
+show_backtrace(1);
 }
 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_range__Range__after]))(var2) /* after on <var2:Range[Discrete]>*/;
 var4 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Comparable___60d]))(var1, var3) /* < on <var1:Discrete>*/;
@@ -615,10 +605,12 @@ short int var2 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 var = self->attrs[COLOR_range__IteratorRange___item].val; /* _item on <self:IteratorRange[Discrete]> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _item", "lib/standard/collection/range.nit", 95);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _item");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 84);
+show_backtrace(1);
 }
 var1 = ((val* (*)(val*))(var->class->vft[COLOR_kernel__Discrete__succ]))(var) /* succ on <var:Discrete>*/;
 /* <var1:Discrete> isa IteratorRange#0 */
@@ -631,8 +623,10 @@ var2 = 0;
 var2 = var1->type->type_table[cltype] == idtype;
 }
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/range.nit", 95);
-exit(1);
+var_class_name = var1 == NULL ? "null" : var1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "IteratorRange#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 84);
+show_backtrace(1);
 }
 self->attrs[COLOR_range__IteratorRange___item].val = var1; /* _item on <self:IteratorRange[Discrete]> */
 RET_LABEL:;
@@ -648,6 +642,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_r /* var r: Range[Discrete] */;
 val* var1 /* : nullable Object */;
 /* Covariant cast for argument 0 (r) <p0:Range[Discrete]> isa Range[IteratorRange#0] */
@@ -661,8 +656,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/range.nit", 97);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Range[IteratorRange#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/range.nit", 86);
+show_backtrace(1);
 }
 var_r = p0;
 self->attrs[COLOR_range__IteratorRange___range].val = var_r; /* _range on <self:IteratorRange[Discrete]> */
@@ -675,48 +672,30 @@ void VIRTUAL_range__IteratorRange__init(val* self, val* p0) {
 range__IteratorRange__init(self, p0);
 RET_LABEL:;
 }
-/* method range#Discrete#times for (self: Discrete): Range[Discrete] */
-val* range__Discrete__times(val* self) {
-val* var /* : Range[Discrete] */;
-val* var1 /* : Range[Discrete] */;
+/* method range#Int#times for (self: Int): Range[Int] */
+val* range__Int__times(long self) {
+val* var /* : Range[Int] */;
+val* var1 /* : Range[Int] */;
 long var2 /* : Int */;
-short int var3 /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-long var4 /* : Int */;
-val* var5 /* : Discrete */;
-val* var6 /* : Discrete */;
-var1 = NEW_range__Range(self->type->resolution_table->types[COLOR_range__Rangekernel__Comparable_VTOTHER]);
+val* var3 /* : Discrete */;
+val* var4 /* : Discrete */;
+var1 = NEW_range__Range(&type_range__Rangekernel__Int);
 var2 = 0;
-/* <var2:Int> isa OTHER */
-type_struct = self->type->resolution_table->types[COLOR_kernel__Comparable_VTOTHER];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= (&type_kernel__Int)->table_size) {
-var3 = 0;
-} else {
-var3 = (&type_kernel__Int)->type_table[cltype] == idtype;
-}
-if (!var3) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/range.nit", 109);
-exit(1);
-}
-var4 = 1;
-var5 = ((val* (*)(val*, long))(self->class->vft[COLOR_kernel__Discrete___45d]))(self, var4) /* - on <self:Discrete>*/;
-var6 = BOX_kernel__Int(var2); /* autobox from Int to Discrete */
-((void (*)(val*, val*, val*))(var1->class->vft[COLOR_range__Range__init]))(var1, var6, var5) /* init on <var1:Range[Discrete]>*/;
-CHECK_NEW_range__Range(var1);
+var3 = BOX_kernel__Int(var2); /* autobox from Int to Discrete */
+var4 = BOX_kernel__Int(self); /* autobox from Int to Discrete */
+((void (*)(val*, val*, val*))(var1->class->vft[COLOR_range__Range__without_last]))(var1, var3, var4) /* without_last on <var1:Range[Int]>*/;
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method range#Discrete#times for (self: Object): Range[Discrete] */
-val* VIRTUAL_range__Discrete__times(val* self) {
-val* var /* : Range[Discrete] */;
-val* var1 /* : Range[Discrete] */;
-var1 = range__Discrete__times(self);
+/* method range#Int#times for (self: Object): Range[Int] */
+val* VIRTUAL_range__Int__times(val* self) {
+val* var /* : Range[Int] */;
+val* var1 /* : Range[Int] */;
+long var2 /* : Int */;
+var2 = ((struct instance_kernel__Int*)self)->value; /* autounbox from Object to Int */;
+var1 = range__Int__times(var2);
 var = var1;
 RET_LABEL:;
 return var;