c_src: update for kill is
[nit.git] / c_src / array.sep.1.c
index 25048d6..31470d6 100644 (file)
@@ -54,6 +54,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_i /* var i: Int */;
@@ -63,14 +64,15 @@ short int var4 /* : Bool */;
 short int var6 /* : Bool */;
 int cltype7;
 int idtype8;
-short int var9 /* : Bool */;
-val* var10 /* : nullable Object */;
-short int var11 /* : Bool */;
+const char* var_class_name9;
+short int var10 /* : Bool */;
+val* var11 /* : nullable Object */;
 short int var12 /* : Bool */;
-long var13 /* : Int */;
+short int var13 /* : Bool */;
 long var14 /* : Int */;
-long var16 /* : Int */;
-short int var17 /* : Bool */;
+long var15 /* : Int */;
+long var17 /* : Int */;
+short int var18 /* : Bool */;
 /* Covariant cast for argument 0 (item) <p0:nullable Object> isa Collection#0 */
 /* <p0:nullable Object> isa Collection#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collection_FT0];
@@ -87,7 +89,9 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 28);
+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/array.nit", 28);
 exit(1);
 }
 var_item = p0;
@@ -101,40 +105,42 @@ for(;;) {
 /* <var_l:Int> isa OTHER */
 var6 = 1; /* easy <var_l:Int> isa OTHER*/
 if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+var_class_name9 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name9);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var9 = var_i < var_l;
-var4 = var9;
+var10 = var_i < var_l;
+var4 = var10;
 goto RET_LABEL5;
 RET_LABEL5:(void)0;
 }
 if (!var4) break;
-var10 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
-if (var10 == NULL) {
-var11 = (var_item == NULL);
+var11 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
+if (var11 == NULL) {
+var12 = (var_item == NULL);
 } else {
-var11 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___61d_61d]))(var10, var_item) /* == on <var10:nullable Object>*/;
+var12 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var_item) /* == on <var11:nullable Object>*/;
 }
-if (var11){
-var12 = 1;
-var = var12;
+if (var12){
+var13 = 1;
+var = var13;
 goto RET_LABEL;
 } else {
 }
-var13 = 1;
-{ /* Inline kernel#Int#+ (var_i,var13) */
-var16 = var_i + var13;
-var14 = var16;
-goto RET_LABEL15;
-RET_LABEL15:(void)0;
+var14 = 1;
+{ /* Inline kernel#Int#+ (var_i,var14) */
+var17 = var_i + var14;
+var15 = var17;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
 }
-var_i = var14;
+var_i = var15;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-var17 = 0;
-var = var17;
+var18 = 0;
+var = var18;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -156,6 +162,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_i /* var i: Int */;
@@ -165,14 +172,15 @@ short int var4 /* : Bool */;
 short int var6 /* : Bool */;
 int cltype7;
 int idtype8;
-short int var9 /* : Bool */;
-val* var10 /* : nullable Object */;
-short int var11 /* : Bool */;
+const char* var_class_name9;
+short int var10 /* : Bool */;
+val* var11 /* : nullable Object */;
 short int var12 /* : Bool */;
-long var13 /* : Int */;
+short int var13 /* : Bool */;
 long var14 /* : Int */;
-long var16 /* : Int */;
-short int var17 /* : Bool */;
+long var15 /* : Int */;
+long var17 /* : Int */;
+short int var18 /* : Bool */;
 /* Covariant cast for argument 0 (item) <p0:nullable Object> isa Collection#0 */
 /* <p0:nullable Object> isa Collection#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collection_FT0];
@@ -189,7 +197,9 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 39);
+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/array.nit", 39);
 exit(1);
 }
 var_item = p0;
@@ -203,40 +213,42 @@ for(;;) {
 /* <var_l:Int> isa OTHER */
 var6 = 1; /* easy <var_l:Int> isa OTHER*/
 if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+var_class_name9 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name9);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var9 = var_i < var_l;
-var4 = var9;
+var10 = var_i < var_l;
+var4 = var10;
 goto RET_LABEL5;
 RET_LABEL5:(void)0;
 }
 if (!var4) break;
-var10 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
-if (var10 == NULL) {
-var11 = (var_item != NULL);
+var11 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
+if (var11 == NULL) {
+var12 = (var_item != NULL);
 } else {
-var11 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___33d_61d]))(var10, var_item) /* != on <var10:nullable Object>*/;
+var12 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___33d_61d]))(var11, var_item) /* != on <var11:nullable Object>*/;
 }
-if (var11){
-var12 = 0;
-var = var12;
+if (var12){
+var13 = 0;
+var = var13;
 goto RET_LABEL;
 } else {
 }
-var13 = 1;
-{ /* Inline kernel#Int#+ (var_i,var13) */
-var16 = var_i + var13;
-var14 = var16;
-goto RET_LABEL15;
-RET_LABEL15:(void)0;
+var14 = 1;
+{ /* Inline kernel#Int#+ (var_i,var14) */
+var17 = var_i + var14;
+var15 = var17;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
 }
-var_i = var14;
+var_i = var15;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-var17 = 1;
-var = var17;
+var18 = 1;
+var = var18;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -258,6 +270,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_res /* var res: Int */;
@@ -269,15 +282,16 @@ short int var5 /* : Bool */;
 short int var7 /* : Bool */;
 int cltype8;
 int idtype9;
-short int var10 /* : Bool */;
-val* var11 /* : nullable Object */;
-short int var12 /* : Bool */;
-long var13 /* : Int */;
+const char* var_class_name10;
+short int var11 /* : Bool */;
+val* var12 /* : nullable Object */;
+short int var13 /* : Bool */;
 long var14 /* : Int */;
-long var16 /* : Int */;
+long var15 /* : Int */;
 long var17 /* : Int */;
 long var18 /* : Int */;
-long var20 /* : Int */;
+long var19 /* : Int */;
+long var21 /* : Int */;
 /* Covariant cast for argument 0 (item) <p0:nullable Object> isa Collection#0 */
 /* <p0:nullable Object> isa Collection#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collection_FT0];
@@ -294,7 +308,9 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 50);
+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/array.nit", 50);
 exit(1);
 }
 var_item = p0;
@@ -310,40 +326,42 @@ for(;;) {
 /* <var_l:Int> isa OTHER */
 var7 = 1; /* easy <var_l:Int> isa OTHER*/
 if (!var7) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+var_class_name10 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name10);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var10 = var_i < var_l;
-var5 = var10;
+var11 = var_i < var_l;
+var5 = var11;
 goto RET_LABEL6;
 RET_LABEL6:(void)0;
 }
 if (!var5) break;
-var11 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
-if (var11 == NULL) {
-var12 = (var_item == NULL);
+var12 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
+if (var12 == NULL) {
+var13 = (var_item == NULL);
 } else {
-var12 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___61d_61d]))(var11, var_item) /* == on <var11:nullable Object>*/;
+var13 = ((short int (*)(val*, val*))(var12->class->vft[COLOR_kernel__Object___61d_61d]))(var12, var_item) /* == on <var12:nullable Object>*/;
 }
-if (var12){
-var13 = 1;
-{ /* Inline kernel#Int#+ (var_res,var13) */
-var16 = var_res + var13;
-var14 = var16;
-goto RET_LABEL15;
-RET_LABEL15:(void)0;
+if (var13){
+var14 = 1;
+{ /* Inline kernel#Int#+ (var_res,var14) */
+var17 = var_res + var14;
+var15 = var17;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
 }
-var_res = var14;
+var_res = var15;
 } else {
 }
-var17 = 1;
-{ /* Inline kernel#Int#+ (var_i,var17) */
-var20 = var_i + var17;
-var18 = var20;
-goto RET_LABEL19;
-RET_LABEL19:(void)0;
+var18 = 1;
+{ /* Inline kernel#Int#+ (var_i,var18) */
+var21 = var_i + var18;
+var19 = var21;
+goto RET_LABEL20;
+RET_LABEL20:(void)0;
 }
-var_i = var18;
+var_i = var19;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
@@ -369,6 +387,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 var3 /* : Int */;
@@ -388,7 +407,9 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 62);
+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/array.nit", 62);
 exit(1);
 }
 var_item = p0;
@@ -416,6 +437,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 var3 /* : Int */;
@@ -438,7 +460,9 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 64);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AbstractArrayRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 64);
 exit(1);
 }
 var_item = p0;
@@ -473,6 +497,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 var_pos /* var pos: Int */;
 long var_i /* var i: Int */;
@@ -482,15 +507,16 @@ short int var3 /* : Bool */;
 short int var5 /* : Bool */;
 int cltype6;
 int idtype7;
-short int var8 /* : Bool */;
-val* var9 /* : nullable Object */;
-short int var10 /* : Bool */;
-long var11 /* : Int */;
+const char* var_class_name8;
+short int var9 /* : Bool */;
+val* var10 /* : nullable Object */;
+short int var11 /* : Bool */;
 long var12 /* : Int */;
-long var14 /* : Int */;
+long var13 /* : Int */;
 long var15 /* : Int */;
 long var16 /* : Int */;
-long var18 /* : Int */;
+long var17 /* : Int */;
+long var19 /* : Int */;
 /* Covariant cast for argument 0 (item) <p0:nullable Object> isa AbstractArrayRead#0 */
 /* <p0:nullable Object> isa AbstractArrayRead#0 */
 type_struct = self->type->resolution_table->types[COLOR_array__AbstractArrayRead_FT0];
@@ -507,7 +533,9 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 68);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AbstractArrayRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 68);
 exit(1);
 }
 var_item = p0;
@@ -521,45 +549,47 @@ for(;;) {
 /* <var_len:Int> isa OTHER */
 var5 = 1; /* easy <var_len:Int> isa OTHER*/
 if (!var5) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+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", 261);
 exit(1);
 }
-var8 = var_i < var_len;
-var3 = var8;
+var9 = var_i < var_len;
+var3 = var9;
 goto RET_LABEL4;
 RET_LABEL4:(void)0;
 }
 if (!var3) break;
-var9 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
-if (var9 == NULL) {
-var10 = (var_item == NULL);
+var10 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
+if (var10 == NULL) {
+var11 = (var_item == NULL);
 } else {
-var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_kernel__Object___61d_61d]))(var9, var_item) /* == on <var9:nullable Object>*/;
+var11 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___61d_61d]))(var10, var_item) /* == on <var10:nullable Object>*/;
 }
-if (var10){
+if (var11){
 var = var_i;
 goto RET_LABEL;
 } else {
 }
-var11 = 1;
-{ /* Inline kernel#Int#+ (var_i,var11) */
-var14 = var_i + var11;
-var12 = var14;
-goto RET_LABEL13;
-RET_LABEL13:(void)0;
+var12 = 1;
+{ /* Inline kernel#Int#+ (var_i,var12) */
+var15 = var_i + var12;
+var13 = var15;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
 }
-var_i = var12;
+var_i = var13;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-var15 = 1;
-{ /* Inline kernel#Int#unary - (var15) */
-var18 = -var15;
-var16 = var18;
-goto RET_LABEL17;
-RET_LABEL17:(void)0;
+var16 = 1;
+{ /* Inline kernel#Int#unary - (var16) */
+var19 = -var16;
+var17 = var19;
+goto RET_LABEL18;
+RET_LABEL18:(void)0;
 }
-var = var16;
+var = var17;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -581,6 +611,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 var_pos /* var pos: Int */;
 long var_i /* var i: Int */;
@@ -589,15 +620,16 @@ short int var3 /* : Bool */;
 short int var5 /* : Bool */;
 int cltype6;
 int idtype7;
-short int var8 /* : Bool */;
-val* var9 /* : nullable Object */;
-short int var10 /* : Bool */;
-long var11 /* : Int */;
+const char* var_class_name8;
+short int var9 /* : Bool */;
+val* var10 /* : nullable Object */;
+short int var11 /* : Bool */;
 long var12 /* : Int */;
-long var14 /* : Int */;
+long var13 /* : Int */;
 long var15 /* : Int */;
 long var16 /* : Int */;
-long var18 /* : Int */;
+long var17 /* : Int */;
+long var19 /* : Int */;
 /* Covariant cast for argument 0 (item) <p0:nullable Object> isa AbstractArrayRead#0 */
 /* <p0:nullable Object> isa AbstractArrayRead#0 */
 type_struct = self->type->resolution_table->types[COLOR_array__AbstractArrayRead_FT0];
@@ -614,7 +646,9 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 83);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AbstractArrayRead#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 83);
 exit(1);
 }
 var_item = p0;
@@ -627,45 +661,47 @@ 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", 258);
+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", 262);
 exit(1);
 }
-var8 = var_i >= var2;
-var3 = var8;
+var9 = var_i >= var2;
+var3 = var9;
 goto RET_LABEL4;
 RET_LABEL4:(void)0;
 }
 if (!var3) break;
-var9 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
-if (var9 == NULL) {
-var10 = (var_item == NULL);
+var10 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
+if (var10 == NULL) {
+var11 = (var_item == NULL);
 } else {
-var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_kernel__Object___61d_61d]))(var9, var_item) /* == on <var9:nullable Object>*/;
+var11 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___61d_61d]))(var10, var_item) /* == on <var10:nullable Object>*/;
 }
-if (var10){
+if (var11){
 var = var_i;
 goto RET_LABEL;
 } else {
-var11 = 1;
-{ /* Inline kernel#Int#- (var_i,var11) */
-var14 = var_i - var11;
-var12 = var14;
-goto RET_LABEL13;
-RET_LABEL13:(void)0;
+var12 = 1;
+{ /* Inline kernel#Int#- (var_i,var12) */
+var15 = var_i - var12;
+var13 = var15;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
 }
-var_i = var12;
+var_i = var13;
 }
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-var15 = 1;
-{ /* Inline kernel#Int#unary - (var15) */
-var18 = -var15;
-var16 = var18;
-goto RET_LABEL17;
-RET_LABEL17:(void)0;
+var16 = 1;
+{ /* Inline kernel#Int#unary - (var16) */
+var19 = -var16;
+var17 = var19;
+goto RET_LABEL18;
+RET_LABEL18:(void)0;
 }
-var = var16;
+var = var17;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -691,6 +727,7 @@ short int var4 /* : Bool */;
 short int var6 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var7 /* : Bool */;
 long var8 /* : Int */;
 long var9 /* : Int */;
@@ -709,7 +746,9 @@ var3 = 0;
 /* <var3:Int> isa OTHER */
 var6 = 1; /* easy <var3:Int> isa OTHER*/
 if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
+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", 263);
 exit(1);
 }
 var7 = var_cmp > var3;
@@ -751,6 +790,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 long var_start /* var start: Int */;
 long var_len /* var len: Int */;
 val* var_dest /* var dest: AbstractArray[nullable Object] */;
@@ -761,15 +801,16 @@ short int var2 /* : Bool */;
 short int var4 /* : Bool */;
 int cltype5;
 int idtype6;
-short int var7 /* : Bool */;
-long var8 /* : Int */;
+const char* var_class_name7;
+short int var8 /* : Bool */;
 long var9 /* : Int */;
-long var11 /* : Int */;
+long var10 /* : Int */;
 long var12 /* : Int */;
-long var14 /* : Int */;
+long var13 /* : Int */;
 long var15 /* : Int */;
-long var17 /* : Int */;
-val* var18 /* : nullable Object */;
+long var16 /* : Int */;
+long var18 /* : Int */;
+val* var19 /* : nullable Object */;
 /* Covariant cast for argument 2 (dest) <p2:AbstractArray[nullable Object]> isa AbstractArray[AbstractArrayRead#0] */
 /* <p2:AbstractArray[nullable Object]> isa AbstractArray[AbstractArrayRead#0] */
 type_struct = self->type->resolution_table->types[COLOR_array__AbstractArrayarray__AbstractArrayRead_FT0];
@@ -781,7 +822,9 @@ var = 0;
 var = p2->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 112);
+var_class_name = p2 == NULL ? "null" : p2->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AbstractArray[AbstractArrayRead#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 112);
 exit(1);
 }
 var_start = p0;
@@ -796,37 +839,39 @@ var1 = 0;
 /* <var1:Int> isa OTHER */
 var4 = 1; /* easy <var1:Int> isa OTHER*/
 if (!var4) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
+var_class_name7 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name7);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 263);
 exit(1);
 }
-var7 = var_i > var1;
-var2 = var7;
+var8 = var_i > var1;
+var2 = var8;
 goto RET_LABEL3;
 RET_LABEL3:(void)0;
 }
 if (!var2) break;
-var8 = 1;
-{ /* Inline kernel#Int#- (var_i,var8) */
-var11 = var_i - var8;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
+var9 = 1;
+{ /* Inline kernel#Int#- (var_i,var9) */
+var12 = var_i - var9;
+var10 = var12;
+goto RET_LABEL11;
+RET_LABEL11:(void)0;
 }
-var_i = var9;
+var_i = var10;
 { /* Inline kernel#Int#+ (var_new_start,var_i) */
-var14 = var_new_start + var_i;
-var12 = var14;
-goto RET_LABEL13;
-RET_LABEL13:(void)0;
+var15 = var_new_start + var_i;
+var13 = var15;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
 }
 { /* Inline kernel#Int#+ (var_start,var_i) */
-var17 = var_start + var_i;
-var15 = var17;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
+var18 = var_start + var_i;
+var16 = var18;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
 }
-var18 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var15) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
-((void (*)(val*, long, val*))(var_dest->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_dest, var12, var18) /* []= on <var_dest:AbstractArray[nullable Object]>*/;
+var19 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var16) /* [] on <self:AbstractArrayRead[nullable Object]>*/;
+((void (*)(val*, long, val*))(var_dest->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_dest, var13, var19) /* []= on <var_dest:AbstractArray[nullable Object]>*/;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
@@ -847,6 +892,7 @@ short int var2 /* : Bool */;
 short int var4 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var5 /* : Bool */;
 val* var6 /* : nullable Object */;
 val* var_e /* var e: nullable Object */;
@@ -865,7 +911,9 @@ for(;;) {
 /* <var_l:Int> isa OTHER */
 var4 = 1; /* easy <var_l:Int> isa OTHER*/
 if (!var4) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+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", 261);
 exit(1);
 }
 var5 = var_i < var_l;
@@ -884,7 +932,8 @@ var8 = 1; /* arg is null and recv is not */
 }
 if (var8){
 if (var_e == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/collection/array.nit", 134);
+fprintf(stderr, "Runtime error: %s", "Reciever is null");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 134);
 exit(1);
 } else {
 ((void (*)(val*))(var_e->class->vft[COLOR_kernel__Object__output]))(var_e) /* output on <var_e:nullable Object>*/;
@@ -941,7 +990,10 @@ RET_LABEL:;
 }
 /* method array#AbstractArray#enlarge for (self: AbstractArray[nullable Object], Int) */
 void array__AbstractArray__enlarge(val* self, long p0) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "lib/standard/collection/array.nit", 147);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "enlarge", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 147);
 exit(1);
 RET_LABEL:;
 }
@@ -957,6 +1009,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 */;
 /* Covariant cast for argument 0 (item) <p0:nullable Object> isa Sequence#0 */
 /* <p0:nullable Object> isa Sequence#0 */
@@ -974,7 +1027,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 152);
+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/array.nit", 152);
 exit(1);
 }
 var_item = p0;
@@ -1001,7 +1056,8 @@ long var8 /* : Int */;
 var1 = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__is_empty]))(self) /* is_empty on <self:AbstractArray[nullable Object]>*/;
 var2 = !var1;
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert \'not_empty\' failed", "lib/standard/collection/array.nit", 156);
+fprintf(stderr, "Runtime error: %s", "Assert \'not_empty\' failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 156);
 exit(1);
 }
 var3 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__SequenceRead__last]))(self) /* last on <self:AbstractArray[nullable Object]>*/;
@@ -1045,6 +1101,7 @@ short int var6 /* : Bool */;
 short int var8 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var9 /* : Bool */;
 long var10 /* : Int */;
 long var11 /* : Int */;
@@ -1059,7 +1116,8 @@ long var22 /* : Int */;
 var1 = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__is_empty]))(self) /* is_empty on <self:AbstractArray[nullable Object]>*/;
 var2 = !var1;
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert \'not_empty\' failed", "lib/standard/collection/array.nit", 164);
+fprintf(stderr, "Runtime error: %s", "Assert \'not_empty\' failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 164);
 exit(1);
 }
 var3 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__first]))(self) /* first on <self:AbstractArray[nullable Object]>*/;
@@ -1074,7 +1132,9 @@ for(;;) {
 /* <var_l:Int> isa OTHER */
 var8 = 1; /* easy <var_l:Int> isa OTHER*/
 if (!var8) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+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", 261);
 exit(1);
 }
 var9 = var_i < var_l;
@@ -1132,6 +1192,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 var2 /* : Int */;
@@ -1143,15 +1204,16 @@ short int var7 /* : Bool */;
 short int var9 /* : Bool */;
 int cltype10;
 int idtype11;
-short int var12 /* : Bool */;
-long var13 /* : Int */;
+const char* var_class_name12;
+short int var13 /* : Bool */;
 long var14 /* : Int */;
-long var16 /* : Int */;
-val* var17 /* : nullable Object */;
-long var18 /* : Int */;
+long var15 /* : Int */;
+long var17 /* : Int */;
+val* var18 /* : nullable Object */;
 long var19 /* : Int */;
-long var21 /* : Int */;
+long var20 /* : Int */;
 long var22 /* : Int */;
+long var23 /* : 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];
@@ -1168,7 +1230,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 176);
+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/array.nit", 176);
 exit(1);
 }
 var_item = p0;
@@ -1188,37 +1252,39 @@ var6 = 0;
 /* <var6:Int> isa OTHER */
 var9 = 1; /* easy <var6:Int> isa OTHER*/
 if (!var9) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
+var_class_name12 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name12);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 263);
 exit(1);
 }
-var12 = var_i > var6;
-var7 = var12;
+var13 = var_i > var6;
+var7 = var13;
 goto RET_LABEL8;
 RET_LABEL8:(void)0;
 }
 if (!var7) break;
-var13 = 1;
-{ /* Inline kernel#Int#+ (var_i,var13) */
-var16 = var_i + var13;
-var14 = var16;
-goto RET_LABEL15;
-RET_LABEL15:(void)0;
-}
-var17 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArray[nullable Object]>*/;
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var14, var17) /* []= on <self:AbstractArray[nullable Object]>*/;
-var18 = 1;
-{ /* Inline kernel#Int#- (var_i,var18) */
-var21 = var_i - var18;
-var19 = var21;
-goto RET_LABEL20;
-RET_LABEL20:(void)0;
+var14 = 1;
+{ /* Inline kernel#Int#+ (var_i,var14) */
+var17 = var_i + var14;
+var15 = var17;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
 }
-var_i = var19;
+var18 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:AbstractArray[nullable Object]>*/;
+((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var15, var18) /* []= on <self:AbstractArray[nullable Object]>*/;
+var19 = 1;
+{ /* Inline kernel#Int#- (var_i,var19) */
+var22 = var_i - var19;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+var_i = var20;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-var22 = 0;
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var22, var_item) /* []= on <self:AbstractArray[nullable Object]>*/;
+var23 = 0;
+((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var23, var_item) /* []= on <self:AbstractArray[nullable Object]>*/;
 RET_LABEL:;
 }
 /* method array#AbstractArray#unshift for (self: Object, nullable Object) */
@@ -1233,6 +1299,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 var_pos /* var pos: Int */;
 long var1 /* : Int */;
@@ -1261,7 +1328,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 186);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AbstractArray#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 186);
 exit(1);
 }
 var_item = p0;
@@ -1305,6 +1374,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 SimpleCollection#0 */
@@ -1323,7 +1393,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 198);
+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/array.nit", 198);
 exit(1);
 }
 var_item = p0;
@@ -1355,6 +1427,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 RemovableCollection#0 */
@@ -1373,7 +1446,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 202);
+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/array.nit", 202);
 exit(1);
 }
 var_item = p0;
@@ -1393,6 +1468,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_i /* var i: Int */;
@@ -1401,8 +1477,9 @@ 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 */;
 /* 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];
@@ -1419,7 +1496,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 204);
+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/array.nit", 204);
 exit(1);
 }
 var_item = p0;
@@ -1432,18 +1511,20 @@ 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", 258);
+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", 262);
 exit(1);
 }
-var8 = var_i >= var2;
-var3 = var8;
+var9 = var_i >= var2;
+var3 = var9;
 goto RET_LABEL4;
 RET_LABEL4:(void)0;
 }
 if (!var3) break;
 ((void (*)(val*, long))(self->class->vft[COLOR_abstract_collection__Sequence__remove_at]))(self, var_i) /* remove_at on <self:AbstractArray[nullable Object]>*/;
-var9 = ((long (*)(val*, val*, long))(self->class->vft[COLOR_array__AbstractArrayRead__index_of_from]))(self, var_item, var_i) /* index_of_from on <self:AbstractArray[nullable Object]>*/;
-var_i = var9;
+var10 = ((long (*)(val*, val*, long))(self->class->vft[COLOR_array__AbstractArrayRead__index_of_from]))(self, var_item, var_i) /* index_of_from on <self:AbstractArray[nullable Object]>*/;
+var_i = var10;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
@@ -1465,32 +1546,35 @@ short int var3 /* : Bool */;
 short int var5 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var6 /* : Bool */;
 short int var_ /* var : Bool */;
 short int var7 /* : Bool */;
 short int var9 /* : Bool */;
 int cltype10;
 int idtype11;
-short int var12 /* : Bool */;
-long var13 /* : Int */;
+const char* var_class_name12;
+short int var13 /* : Bool */;
 long var14 /* : Int */;
-long var16 /* : Int */;
+long var15 /* : Int */;
+long var17 /* : Int */;
 long var_j /* var j: Int */;
-short int var17 /* : Bool */;
-short int var19 /* : Bool */;
-int cltype20;
-int idtype21;
-short int var22 /* : Bool */;
-long var23 /* : Int */;
-long var24 /* : Int */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+int cltype21;
+int idtype22;
+const char* var_class_name23;
+short int var24 /* : Bool */;
+long var25 /* : Int */;
 long var26 /* : Int */;
-val* var27 /* : nullable Object */;
 long var28 /* : Int */;
-long var29 /* : Int */;
+val* var29 /* : nullable Object */;
+long var30 /* : Int */;
 long var31 /* : Int */;
-long var32 /* : Int */;
 long var33 /* : Int */;
+long var34 /* : Int */;
 long var35 /* : Int */;
+long var37 /* : Int */;
 var_i = p0;
 var = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:AbstractArray[nullable Object]>*/;
 var_l = var;
@@ -1500,7 +1584,9 @@ 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", 258);
+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", 262);
 exit(1);
 }
 var6 = var_i >= var2;
@@ -1515,11 +1601,13 @@ if (var3){
 /* <var_l:Int> isa OTHER */
 var9 = 1; /* easy <var_l:Int> isa OTHER*/
 if (!var9) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+var_class_name12 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name12);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var12 = var_i < var_l;
-var7 = var12;
+var13 = var_i < var_l;
+var7 = var13;
 goto RET_LABEL8;
 RET_LABEL8:(void)0;
 }
@@ -1528,57 +1616,59 @@ var1 = var7;
 var1 = var_;
 }
 if (var1){
-var13 = 1;
-{ /* Inline kernel#Int#+ (var_i,var13) */
-var16 = var_i + var13;
-var14 = var16;
-goto RET_LABEL15;
-RET_LABEL15:(void)0;
+var14 = 1;
+{ /* Inline kernel#Int#+ (var_i,var14) */
+var17 = var_i + var14;
+var15 = var17;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
 }
-var_j = var14;
+var_j = var15;
 for(;;) {
 { /* Inline kernel#Int#< (var_j,var_l) */
 /* Covariant cast for argument 0 (i) <var_l:Int> isa OTHER */
 /* <var_l:Int> isa OTHER */
-var19 = 1; /* easy <var_l:Int> isa OTHER*/
-if (!var19) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+var20 = 1; /* easy <var_l:Int> isa OTHER*/
+if (!var20) {
+var_class_name23 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name23);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var22 = var_j < var_l;
-var17 = var22;
-goto RET_LABEL18;
-RET_LABEL18:(void)0;
+var24 = var_j < var_l;
+var18 = var24;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
 }
-if (!var17) break;
-var23 = 1;
-{ /* Inline kernel#Int#- (var_j,var23) */
-var26 = var_j - var23;
-var24 = var26;
-goto RET_LABEL25;
-RET_LABEL25:(void)0;
-}
-var27 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_j) /* [] on <self:AbstractArray[nullable Object]>*/;
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var24, var27) /* []= on <self:AbstractArray[nullable Object]>*/;
-var28 = 1;
-{ /* Inline kernel#Int#+ (var_j,var28) */
-var31 = var_j + var28;
-var29 = var31;
-goto RET_LABEL30;
-RET_LABEL30:(void)0;
-}
-var_j = var29;
+if (!var18) break;
+var25 = 1;
+{ /* Inline kernel#Int#- (var_j,var25) */
+var28 = var_j - var25;
+var26 = var28;
+goto RET_LABEL27;
+RET_LABEL27:(void)0;
+}
+var29 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_j) /* [] on <self:AbstractArray[nullable Object]>*/;
+((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var26, var29) /* []= on <self:AbstractArray[nullable Object]>*/;
+var30 = 1;
+{ /* Inline kernel#Int#+ (var_j,var30) */
+var33 = var_j + var30;
+var31 = var33;
+goto RET_LABEL32;
+RET_LABEL32:(void)0;
+}
+var_j = var31;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-var32 = 1;
-{ /* Inline kernel#Int#- (var_l,var32) */
-var35 = var_l - var32;
-var33 = var35;
-goto RET_LABEL34;
-RET_LABEL34:(void)0;
-}
-self->attrs[COLOR_array__AbstractArrayRead___length].l = var33; /* _length on <self:AbstractArray[nullable Object]> */
+var34 = 1;
+{ /* Inline kernel#Int#- (var_l,var34) */
+var37 = var_l - var34;
+var35 = var37;
+goto RET_LABEL36;
+RET_LABEL36:(void)0;
+}
+self->attrs[COLOR_array__AbstractArrayRead___length].l = var35; /* _length on <self:AbstractArray[nullable Object]> */
 } else {
 }
 RET_LABEL:;
@@ -1619,64 +1709,6 @@ void VIRTUAL_array__AbstractArray__init(val* self) {
 array__AbstractArray__init(self);
 RET_LABEL:;
 }
-/* method array#Array#iterate for (self: Array[nullable Object]) */
-void array__Array__iterate(val* self) {
-long var /* : Int */;
-long var_i /* var i: Int */;
-long var1 /* : Int */;
-long var_l /* var l: Int */;
-val* var2 /* : nullable NativeArray[nullable Object] */;
-val* var_items /* var items: nullable NativeArray[nullable Object] */;
-long var3 /* : Int */;
-short int var4 /* : Bool */;
-short int var6 /* : Bool */;
-int cltype;
-int idtype;
-short int var7 /* : Bool */;
-long var8 /* : Int */;
-long var9 /* : Int */;
-long var11 /* : Int */;
-var = 0;
-var_i = var;
-var1 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <self:Array[nullable Object]> */
-var_l = var1;
-var2 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
-var_items = var2;
-for(;;) {
-var3 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:Array[nullable Object]>*/;
-{ /* Inline kernel#Int#< (var_i,var3) */
-/* Covariant cast for argument 0 (i) <var3:Int> isa OTHER */
-/* <var3:Int> isa OTHER */
-var6 = 1; /* easy <var3:Int> isa OTHER*/
-if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
-exit(1);
-}
-var7 = var_i < var3;
-var4 = var7;
-goto RET_LABEL5;
-RET_LABEL5:(void)0;
-}
-if (!var4) break;
-printf("NOT YET IMPLEMENTED AClosureCallExpr:lib/standard/collection/array.nit:260,4--17\n");
-var8 = 1;
-{ /* Inline kernel#Int#+ (var_i,var8) */
-var11 = var_i + var8;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
-}
-var_i = var9;
-CONTINUE_label: (void)0;
-}
-BREAK_label: (void)0;
-RET_LABEL:;
-}
-/* method array#Array#iterate for (self: Object) */
-void VIRTUAL_array__Array__iterate(val* self) {
-array__Array__iterate(self);
-RET_LABEL:;
-}
 /* method array#Array#[] for (self: Array[nullable Object], Int): nullable Object */
 val* array__Array___91d_93d(val* self, long p0) {
 val* var /* : nullable Object */;
@@ -1687,6 +1719,7 @@ short int var3 /* : Bool */;
 short int var5 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var6 /* : Bool */;
 short int var_ /* var : Bool */;
 long var7 /* : Int */;
@@ -1694,9 +1727,10 @@ short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 int cltype11;
 int idtype12;
-short int var13 /* : Bool */;
-val* var14 /* : nullable NativeArray[nullable Object] */;
-val* var15 /* : nullable Object */;
+const char* var_class_name13;
+short int var14 /* : Bool */;
+val* var15 /* : nullable NativeArray[nullable Object] */;
+val* var16 /* : nullable Object */;
 var_index = p0;
 var2 = 0;
 { /* Inline kernel#Int#>= (var_index,var2) */
@@ -1704,7 +1738,9 @@ 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", 258);
+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", 262);
 exit(1);
 }
 var6 = var_index >= var2;
@@ -1720,11 +1756,13 @@ var7 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <se
 /* <var7:Int> isa OTHER */
 var10 = 1; /* easy <var7:Int> isa OTHER*/
 if (!var10) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+var_class_name13 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name13);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var13 = var_index < var7;
-var8 = var13;
+var14 = var_index < var7;
+var8 = var14;
 goto RET_LABEL9;
 RET_LABEL9:(void)0;
 }
@@ -1733,17 +1771,19 @@ var1 = var8;
 var1 = var_;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert \'index\' failed", "lib/standard/collection/array.nit", 267);
+fprintf(stderr, "Runtime error: %s", "Assert \'index\' failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 255);
 exit(1);
 }
-var14 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
-if (var14 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/collection/array.nit", 268);
+var15 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
+if (var15 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Reciever is null");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 256);
 exit(1);
 } else {
-var15 = ((val* (*)(val*, long))(var14->class->vft[COLOR_array__NativeArray___91d_93d]))(var14, var_index) /* [] on <var14:nullable NativeArray[nullable Object]>*/;
+var16 = ((val* (*)(val*, long))(var15->class->vft[COLOR_array__NativeArray___91d_93d]))(var15, var_index) /* [] on <var15:nullable NativeArray[nullable Object]>*/;
 }
-var = var15;
+var = var16;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1764,6 +1804,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 long var_index /* var index: Int */;
 val* var_item /* var item: nullable Object */;
 short int var1 /* : Bool */;
@@ -1772,36 +1813,40 @@ short int var3 /* : Bool */;
 short int var5 /* : Bool */;
 int cltype6;
 int idtype7;
-short int var8 /* : Bool */;
+const char* var_class_name8;
+short int var9 /* : Bool */;
 short int var_ /* var : Bool */;
-long var9 /* : Int */;
 long var10 /* : Int */;
 long var11 /* : Int */;
-long var13 /* : Int */;
-short int var14 /* : Bool */;
-short int var16 /* : Bool */;
-int cltype17;
-int idtype18;
-short int var19 /* : Bool */;
-long var20 /* : Int */;
+long var12 /* : Int */;
+long var14 /* : Int */;
+short int var15 /* : Bool */;
+short int var17 /* : Bool */;
+int cltype18;
+int idtype19;
+const char* var_class_name20;
 short int var21 /* : Bool */;
+long var22 /* : Int */;
 short int var23 /* : Bool */;
-int cltype24;
-int idtype25;
-short int var26 /* : Bool */;
-long var27 /* : Int */;
-long var28 /* : Int */;
+short int var25 /* : Bool */;
+int cltype26;
+int idtype27;
+const char* var_class_name28;
+short int var29 /* : Bool */;
 long var30 /* : Int */;
 long var31 /* : Int */;
-short int var32 /* : Bool */;
-short int var34 /* : Bool */;
-int cltype35;
-int idtype36;
+long var33 /* : Int */;
+long var34 /* : Int */;
+short int var35 /* : Bool */;
 short int var37 /* : Bool */;
-long var38 /* : Int */;
-long var39 /* : Int */;
-long var41 /* : Int */;
-val* var42 /* : nullable NativeArray[nullable Object] */;
+int cltype38;
+int idtype39;
+const char* var_class_name40;
+short int var41 /* : Bool */;
+long var42 /* : Int */;
+long var43 /* : Int */;
+long var45 /* : Int */;
+val* var46 /* : nullable NativeArray[nullable Object] */;
 /* 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];
@@ -1818,7 +1863,9 @@ var = p1->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 271);
+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/array.nit", 259);
 exit(1);
 }
 var_index = p0;
@@ -1829,101 +1876,111 @@ 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", 258);
+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", 262);
 exit(1);
 }
-var8 = var_index >= var2;
-var3 = var8;
+var9 = var_index >= var2;
+var3 = var9;
 goto RET_LABEL4;
 RET_LABEL4:(void)0;
 }
 var_ = var3;
 if (var3){
-var9 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <self:Array[nullable Object]> */
-var10 = 1;
-{ /* Inline kernel#Int#+ (var9,var10) */
-var13 = var9 + var10;
-var11 = var13;
-goto RET_LABEL12;
-RET_LABEL12:(void)0;
+var10 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <self:Array[nullable Object]> */
+var11 = 1;
+{ /* Inline kernel#Int#+ (var10,var11) */
+var14 = var10 + var11;
+var12 = var14;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
 }
-{ /* Inline kernel#Int#< (var_index,var11) */
-/* Covariant cast for argument 0 (i) <var11:Int> isa OTHER */
-/* <var11:Int> isa OTHER */
-var16 = 1; /* easy <var11:Int> isa OTHER*/
-if (!var16) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+{ /* Inline kernel#Int#< (var_index,var12) */
+/* Covariant cast for argument 0 (i) <var12:Int> isa OTHER */
+/* <var12:Int> isa OTHER */
+var17 = 1; /* easy <var12:Int> isa OTHER*/
+if (!var17) {
+var_class_name20 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name20);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var19 = var_index < var11;
-var14 = var19;
-goto RET_LABEL15;
-RET_LABEL15:(void)0;
+var21 = var_index < var12;
+var15 = var21;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
 }
-var1 = var14;
+var1 = var15;
 } else {
 var1 = var_;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert \'index\' failed", "lib/standard/collection/array.nit", 273);
+fprintf(stderr, "Runtime error: %s", "Assert \'index\' failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 261);
 exit(1);
 }
-var20 = self->attrs[COLOR_array__Array___capacity].l; /* _capacity on <self:Array[nullable Object]> */
-{ /* Inline kernel#Int#<= (var20,var_index) */
+var22 = self->attrs[COLOR_array__Array___capacity].l; /* _capacity on <self:Array[nullable Object]> */
+{ /* Inline kernel#Int#<= (var22,var_index) */
 /* Covariant cast for argument 0 (i) <var_index:Int> isa OTHER */
 /* <var_index:Int> isa OTHER */
-var23 = 1; /* easy <var_index:Int> isa OTHER*/
-if (!var23) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
+var25 = 1; /* easy <var_index:Int> isa OTHER*/
+if (!var25) {
+var_class_name28 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name28);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
 exit(1);
 }
-var26 = var20 <= var_index;
-var21 = var26;
-goto RET_LABEL22;
-RET_LABEL22:(void)0;
+var29 = var22 <= var_index;
+var23 = var29;
+goto RET_LABEL24;
+RET_LABEL24:(void)0;
 }
-if (var21){
-var27 = 1;
-{ /* Inline kernel#Int#+ (var_index,var27) */
-var30 = var_index + var27;
-var28 = var30;
-goto RET_LABEL29;
-RET_LABEL29:(void)0;
+if (var23){
+var30 = 1;
+{ /* Inline kernel#Int#+ (var_index,var30) */
+var33 = var_index + var30;
+var31 = var33;
+goto RET_LABEL32;
+RET_LABEL32:(void)0;
 }
-((void (*)(val*, long))(self->class->vft[COLOR_array__AbstractArray__enlarge]))(self, var28) /* enlarge on <self:Array[nullable Object]>*/;
+((void (*)(val*, long))(self->class->vft[COLOR_array__AbstractArray__enlarge]))(self, var31) /* enlarge on <self:Array[nullable Object]>*/;
 } else {
 }
-var31 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <self:Array[nullable Object]> */
-{ /* Inline kernel#Int#<= (var31,var_index) */
+var34 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <self:Array[nullable Object]> */
+{ /* Inline kernel#Int#<= (var34,var_index) */
 /* Covariant cast for argument 0 (i) <var_index:Int> isa OTHER */
 /* <var_index:Int> isa OTHER */
-var34 = 1; /* easy <var_index:Int> isa OTHER*/
-if (!var34) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
+var37 = 1; /* easy <var_index:Int> isa OTHER*/
+if (!var37) {
+var_class_name40 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name40);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
 exit(1);
 }
-var37 = var31 <= var_index;
-var32 = var37;
-goto RET_LABEL33;
-RET_LABEL33:(void)0;
+var41 = var34 <= var_index;
+var35 = var41;
+goto RET_LABEL36;
+RET_LABEL36:(void)0;
 }
-if (var32){
-var38 = 1;
-{ /* Inline kernel#Int#+ (var_index,var38) */
-var41 = var_index + var38;
-var39 = var41;
-goto RET_LABEL40;
-RET_LABEL40:(void)0;
+if (var35){
+var42 = 1;
+{ /* Inline kernel#Int#+ (var_index,var42) */
+var45 = var_index + var42;
+var43 = var45;
+goto RET_LABEL44;
+RET_LABEL44:(void)0;
 }
-self->attrs[COLOR_array__AbstractArrayRead___length].l = var39; /* _length on <self:Array[nullable Object]> */
+self->attrs[COLOR_array__AbstractArrayRead___length].l = var43; /* _length on <self:Array[nullable Object]> */
 } else {
 }
-var42 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
-if (var42 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/collection/array.nit", 280);
+var46 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
+if (var46 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Reciever is null");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 268);
 exit(1);
 } else {
-((void (*)(val*, long, val*))(var42->class->vft[COLOR_array__NativeArray___91d_93d_61d]))(var42, var_index, var_item) /* []= on <var42:nullable NativeArray[nullable Object]>*/;
+((void (*)(val*, long, val*))(var46->class->vft[COLOR_array__NativeArray___91d_93d_61d]))(var46, var_index, var_item) /* []= on <var46:nullable NativeArray[nullable Object]>*/;
 }
 RET_LABEL:;
 }
@@ -1939,6 +1996,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 */;
@@ -1947,14 +2005,15 @@ 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 */;
-long var16 /* : Int */;
-val* var17 /* : nullable NativeArray[nullable Object] */;
+long var15 /* : Int */;
+long var17 /* : Int */;
+val* var18 /* : nullable NativeArray[nullable Object] */;
 /* 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];
@@ -1971,7 +2030,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 283);
+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/array.nit", 271);
 exit(1);
 }
 var_item = p0;
@@ -1983,39 +2044,42 @@ var2 = self->attrs[COLOR_array__Array___capacity].l; /* _capacity on <self:Array
 /* <var_l:Int> isa OTHER */
 var5 = 1; /* easy <var_l:Int> isa OTHER*/
 if (!var5) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
+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", 260);
 exit(1);
 }
-var8 = var2 <= var_l;
-var3 = var8;
+var9 = var2 <= var_l;
+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))(self->class->vft[COLOR_array__AbstractArray__enlarge]))(self, var10) /* enlarge on <self:Array[nullable Object]>*/;
+((void (*)(val*, long))(self->class->vft[COLOR_array__AbstractArray__enlarge]))(self, var11) /* enlarge on <self:Array[nullable Object]>*/;
 } else {
 }
-var13 = 1;
-{ /* Inline kernel#Int#+ (var_l,var13) */
-var16 = var_l + var13;
-var14 = var16;
-goto RET_LABEL15;
-RET_LABEL15:(void)0;
-}
-self->attrs[COLOR_array__AbstractArrayRead___length].l = var14; /* _length on <self:Array[nullable Object]> */
-var17 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
-if (var17 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/collection/array.nit", 290);
+var14 = 1;
+{ /* Inline kernel#Int#+ (var_l,var14) */
+var17 = var_l + var14;
+var15 = var17;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
+}
+self->attrs[COLOR_array__AbstractArrayRead___length].l = var15; /* _length on <self:Array[nullable Object]> */
+var18 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
+if (var18 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Reciever is null");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 278);
 exit(1);
 } else {
-((void (*)(val*, long, val*))(var17->class->vft[COLOR_array__NativeArray___91d_93d_61d]))(var17, var_l, var_item) /* []= on <var17:nullable NativeArray[nullable Object]>*/;
+((void (*)(val*, long, val*))(var18->class->vft[COLOR_array__NativeArray___91d_93d_61d]))(var18, var_l, var_item) /* []= on <var18:nullable NativeArray[nullable Object]>*/;
 }
 RET_LABEL:;
 }
@@ -2033,29 +2097,32 @@ short int var1 /* : Bool */;
 short int var3 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var4 /* : Bool */;
 short int var5 /* : Bool */;
 short int var7 /* : Bool */;
 int cltype8;
 int idtype9;
-short int var10 /* : Bool */;
-long var11 /* : Int */;
+const char* var_class_name10;
+short int var11 /* : Bool */;
 long var12 /* : Int */;
-long var14 /* : Int */;
+long var13 /* : Int */;
 long var15 /* : Int */;
 long var16 /* : Int */;
-long var18 /* : Int */;
-val* var19 /* : NativeArray[nullable Object] */;
+long var17 /* : Int */;
+long var19 /* : Int */;
+val* var20 /* : NativeArray[nullable Object] */;
 val* var_a /* var a: NativeArray[nullable Object] */;
-long var20 /* : Int */;
 long var21 /* : Int */;
-short int var22 /* : Bool */;
-short int var24 /* : Bool */;
-int cltype25;
-int idtype26;
-short int var27 /* : Bool */;
-val* var28 /* : nullable NativeArray[nullable Object] */;
-long var29 /* : Int */;
+long var22 /* : Int */;
+short int var23 /* : Bool */;
+short int var25 /* : Bool */;
+int cltype26;
+int idtype27;
+const char* var_class_name28;
+short int var29 /* : Bool */;
+val* var30 /* : nullable NativeArray[nullable Object] */;
+long var31 /* : Int */;
 var_cap = p0;
 var = self->attrs[COLOR_array__Array___capacity].l; /* _capacity on <self:Array[nullable Object]> */
 var_c = var;
@@ -2064,7 +2131,9 @@ var_c = var;
 /* <var_c:Int> isa OTHER */
 var3 = 1; /* easy <var_c:Int> isa OTHER*/
 if (!var3) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
+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", 260);
 exit(1);
 }
 var4 = var_cap <= var_c;
@@ -2082,58 +2151,63 @@ for(;;) {
 /* <var_cap:Int> isa OTHER */
 var7 = 1; /* easy <var_cap:Int> isa OTHER*/
 if (!var7) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
+var_class_name10 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name10);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
 exit(1);
 }
-var10 = var_c <= var_cap;
-var5 = var10;
+var11 = var_c <= var_cap;
+var5 = var11;
 goto RET_LABEL6;
 RET_LABEL6:(void)0;
 }
 if (!var5) break;
-var11 = 2;
-{ /* Inline kernel#Int#* (var_c,var11) */
-var14 = var_c * var11;
-var12 = var14;
-goto RET_LABEL13;
-RET_LABEL13:(void)0;
-}
-var15 = 2;
-{ /* Inline kernel#Int#+ (var12,var15) */
-var18 = var12 + var15;
-var16 = var18;
-goto RET_LABEL17;
-RET_LABEL17:(void)0;
+var12 = 2;
+{ /* Inline kernel#Int#* (var_c,var12) */
+var15 = var_c * var12;
+var13 = var15;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
+}
+var16 = 2;
+{ /* Inline kernel#Int#+ (var13,var16) */
+var19 = var13 + var16;
+var17 = var19;
+goto RET_LABEL18;
+RET_LABEL18:(void)0;
 }
-var_c = var16;
+var_c = var17;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-var19 = ((val* (*)(val*, long))(self->class->vft[COLOR_array__ArrayCapable__calloc_array]))(self, var_c) /* calloc_array on <self:Array[nullable Object]>*/;
-var_a = var19;
-var20 = self->attrs[COLOR_array__Array___capacity].l; /* _capacity on <self:Array[nullable Object]> */
-var21 = 0;
-{ /* Inline kernel#Int#> (var20,var21) */
-/* Covariant cast for argument 0 (i) <var21:Int> isa OTHER */
-/* <var21:Int> isa OTHER */
-var24 = 1; /* easy <var21:Int> isa OTHER*/
-if (!var24) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
-exit(1);
-}
-var27 = var20 > var21;
-var22 = var27;
-goto RET_LABEL23;
-RET_LABEL23:(void)0;
-}
-if (var22){
-var28 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
-var29 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <self:Array[nullable Object]> */
-if (var28 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/collection/array.nit", 299);
+var20 = ((val* (*)(val*, long))(self->class->vft[COLOR_array__ArrayCapable__calloc_array]))(self, var_c) /* calloc_array on <self:Array[nullable Object]>*/;
+var_a = var20;
+var21 = self->attrs[COLOR_array__Array___capacity].l; /* _capacity on <self:Array[nullable Object]> */
+var22 = 0;
+{ /* Inline kernel#Int#> (var21,var22) */
+/* Covariant cast for argument 0 (i) <var22:Int> isa OTHER */
+/* <var22:Int> isa OTHER */
+var25 = 1; /* easy <var22:Int> isa OTHER*/
+if (!var25) {
+var_class_name28 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name28);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 263);
+exit(1);
+}
+var29 = var21 > var22;
+var23 = var29;
+goto RET_LABEL24;
+RET_LABEL24:(void)0;
+}
+if (var23){
+var30 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
+var31 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <self:Array[nullable Object]> */
+if (var30 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Reciever is null");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 287);
 exit(1);
 } else {
-((void (*)(val*, val*, long))(var28->class->vft[COLOR_array__NativeArray__copy_to]))(var28, var_a, var29) /* copy_to on <var28:nullable NativeArray[nullable Object]>*/;
+((void (*)(val*, val*, long))(var30->class->vft[COLOR_array__NativeArray__copy_to]))(var30, var_a, var31) /* copy_to on <var30:nullable NativeArray[nullable Object]>*/;
 }
 } else {
 }
@@ -2168,6 +2242,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_items /* var items: Collection[nullable Object] */;
 long var1 /* : Int */;
 /* Covariant cast for argument 0 (items) <p0:Collection[nullable Object]> isa Collection[Array#0] */
@@ -2181,7 +2256,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 311);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[Array#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 299);
 exit(1);
 }
 var_items = p0;
@@ -2224,6 +2301,7 @@ short int var1 /* : Bool */;
 short int var3 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var4 /* : Bool */;
 val* var5 /* : NativeArray[nullable Object] */;
 long var6 /* : Int */;
@@ -2235,7 +2313,9 @@ var = 0;
 /* <var:Int> isa OTHER */
 var3 = 1; /* easy <var:Int> isa OTHER*/
 if (!var3) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+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", 262);
 exit(1);
 }
 var4 = var_cap >= var;
@@ -2244,7 +2324,8 @@ goto RET_LABEL2;
 RET_LABEL2:(void)0;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert \'positive\' failed", "lib/standard/collection/array.nit", 328);
+fprintf(stderr, "Runtime error: %s", "Assert \'positive\' failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 316);
 exit(1);
 }
 var5 = ((val* (*)(val*, long))(self->class->vft[COLOR_array__ArrayCapable__calloc_array]))(self, var_cap) /* calloc_array on <self:Array[nullable Object]>*/;
@@ -2266,6 +2347,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 val* var_value /* var value: nullable Object */;
 long var_count /* var count: Int */;
 long var1 /* : Int */;
@@ -2273,18 +2355,20 @@ short int var2 /* : Bool */;
 short int var4 /* : Bool */;
 int cltype5;
 int idtype6;
-short int var7 /* : Bool */;
-val* var8 /* : NativeArray[nullable Object] */;
-long var9 /* : Int */;
+const char* var_class_name7;
+short int var8 /* : Bool */;
+val* var9 /* : NativeArray[nullable Object] */;
+long var10 /* : Int */;
 long var_i /* var i: Int */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-short int var15 /* : Bool */;
-long var16 /* : Int */;
-long var17 /* : Int */;
+short int var11 /* : Bool */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+const char* var_class_name16;
+short int var17 /* : Bool */;
+long var18 /* : Int */;
 long var19 /* : Int */;
+long var21 /* : Int */;
 /* Covariant cast for argument 0 (value) <p0:nullable Object> isa Array#0 */
 /* <p0:nullable Object> isa Array#0 */
 type_struct = self->type->resolution_table->types[COLOR_array__Array_FT0];
@@ -2301,7 +2385,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 334);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Array#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 322);
 exit(1);
 }
 var_value = p0;
@@ -2313,48 +2399,53 @@ var1 = 0;
 /* <var1:Int> isa OTHER */
 var4 = 1; /* easy <var1:Int> isa OTHER*/
 if (!var4) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+var_class_name7 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name7);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var7 = var_count >= var1;
-var2 = var7;
+var8 = var_count >= var1;
+var2 = var8;
 goto RET_LABEL3;
 RET_LABEL3:(void)0;
 }
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert \'positive\' failed", "lib/standard/collection/array.nit", 337);
+fprintf(stderr, "Runtime error: %s", "Assert \'positive\' failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 325);
 exit(1);
 }
-var8 = ((val* (*)(val*, long))(self->class->vft[COLOR_array__ArrayCapable__calloc_array]))(self, var_count) /* calloc_array on <self:Array[nullable Object]>*/;
-self->attrs[COLOR_array__Array___items].val = var8; /* _items on <self:Array[nullable Object]> */
+var9 = ((val* (*)(val*, long))(self->class->vft[COLOR_array__ArrayCapable__calloc_array]))(self, var_count) /* calloc_array on <self:Array[nullable Object]>*/;
+self->attrs[COLOR_array__Array___items].val = var9; /* _items on <self:Array[nullable Object]> */
 self->attrs[COLOR_array__Array___capacity].l = var_count; /* _capacity on <self:Array[nullable Object]> */
 self->attrs[COLOR_array__AbstractArrayRead___length].l = var_count; /* _length on <self:Array[nullable Object]> */
-var9 = 0;
-var_i = var9;
+var10 = 0;
+var_i = var10;
 for(;;) {
 { /* Inline kernel#Int#< (var_i,var_count) */
 /* Covariant cast for argument 0 (i) <var_count:Int> isa OTHER */
 /* <var_count:Int> isa OTHER */
-var12 = 1; /* easy <var_count:Int> isa OTHER*/
-if (!var12) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+var13 = 1; /* easy <var_count:Int> isa OTHER*/
+if (!var13) {
+var_class_name16 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name16);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var15 = var_i < var_count;
-var10 = var15;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+var17 = var_i < var_count;
+var11 = var17;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
 }
-if (!var10) break;
+if (!var11) break;
 ((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var_i, var_value) /* []= on <self:Array[nullable Object]>*/;
-var16 = 1;
-{ /* Inline kernel#Int#+ (var_i,var16) */
-var19 = var_i + var16;
-var17 = var19;
-goto RET_LABEL18;
-RET_LABEL18:(void)0;
+var18 = 1;
+{ /* Inline kernel#Int#+ (var_i,var18) */
+var21 = var_i + var18;
+var19 = var21;
+goto RET_LABEL20;
+RET_LABEL20:(void)0;
 }
-var_i = var17;
+var_i = var19;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
@@ -2371,6 +2462,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_nat /* var nat: NativeArray[nullable Object] */;
 long var_size /* var size: Int */;
 long var1 /* : Int */;
@@ -2378,7 +2470,8 @@ short int var2 /* : Bool */;
 short int var4 /* : Bool */;
 int cltype5;
 int idtype6;
-short int var7 /* : Bool */;
+const char* var_class_name7;
+short int var8 /* : Bool */;
 /* Covariant cast for argument 0 (nat) <p0:NativeArray[nullable Object]> isa NativeArray[Array#0] */
 /* <p0:NativeArray[nullable Object]> isa NativeArray[Array#0] */
 type_struct = self->type->resolution_table->types[COLOR_array__NativeArrayarray__Array_FT0];
@@ -2390,7 +2483,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 348);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "NativeArray[Array#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 336);
 exit(1);
 }
 var_nat = p0;
@@ -2402,16 +2497,19 @@ var1 = 0;
 /* <var1:Int> isa OTHER */
 var4 = 1; /* easy <var1:Int> isa OTHER*/
 if (!var4) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+var_class_name7 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name7);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var7 = var_size >= var1;
-var2 = var7;
+var8 = var_size >= var1;
+var2 = var8;
 goto RET_LABEL3;
 RET_LABEL3:(void)0;
 }
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert \'positive\' failed", "lib/standard/collection/array.nit", 351);
+fprintf(stderr, "Runtime error: %s", "Assert \'positive\' failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 339);
 exit(1);
 }
 self->attrs[COLOR_array__Array___items].val = var_nat; /* _items on <self:Array[nullable Object]> */
@@ -2430,7 +2528,8 @@ val* var /* : NativeArray[nullable Object] */;
 val* var1 /* : nullable NativeArray[nullable Object] */;
 var1 = self->attrs[COLOR_array__Array___items].val; /* _items on <self:Array[nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 362);
+fprintf(stderr, "Runtime error: %s", "Cast failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 350);
 exit(1);
 }
 var = var1;
@@ -2447,447 +2546,6 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method array#Array#sort for (self: Array[nullable Object]) */
-void array__Array__sort(val* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-long var2 /* : Int */;
-long var3 /* : Int */;
-long var5 /* : Int */;
-var = 0;
-var1 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:Array[nullable Object]>*/;
-var2 = 1;
-{ /* Inline kernel#Int#- (var1,var2) */
-var5 = var1 - var2;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
-}
-((void (*)(val*, long, long))(self->class->vft[COLOR_array__Array__sub_sort]))(self, var, var3) /* sub_sort on <self:Array[nullable Object]>*/;
-RET_LABEL:;
-}
-/* method array#Array#sort for (self: Object) */
-void VIRTUAL_array__Array__sort(val* self) {
-array__Array__sort(self);
-RET_LABEL:;
-}
-/* method array#Array#sub_sort for (self: Array[nullable Object], Int, Int) */
-void array__Array__sub_sort(val* self, long p0, long p1) {
-long var_from /* var from: Int */;
-long var_to /* var to: Int */;
-short int var /* : Bool */;
-short int var2 /* : Bool */;
-int cltype;
-int idtype;
-short int var3 /* : Bool */;
-long var4 /* : Int */;
-long var5 /* : Int */;
-long var7 /* : Int */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-short int var13 /* : Bool */;
-val* var14 /* : nullable Object */;
-val* var_pivot /* var pivot: nullable Object */;
-long var_i /* var i: Int */;
-long var_j /* var j: Int */;
-short int var15 /* : Bool */;
-short int var17 /* : Bool */;
-int cltype18;
-int idtype19;
-short int var20 /* : Bool */;
-short int var21 /* : Bool */;
-short int var22 /* : Bool */;
-short int var24 /* : Bool */;
-int cltype25;
-int idtype26;
-short int var27 /* : Bool */;
-short int var_ /* var : Bool */;
-long var28 /* : Int */;
-long var29 /* : Int */;
-short int var30 /* : Bool */;
-short int var32 /* : Bool */;
-int cltype33;
-int idtype34;
-short int var35 /* : Bool */;
-long var36 /* : Int */;
-long var37 /* : Int */;
-long var39 /* : Int */;
-short int var40 /* : Bool */;
-short int var41 /* : Bool */;
-short int var43 /* : Bool */;
-int cltype44;
-int idtype45;
-short int var46 /* : Bool */;
-short int var_47 /* var : Bool */;
-long var48 /* : Int */;
-long var49 /* : Int */;
-short int var50 /* : Bool */;
-short int var52 /* : Bool */;
-int cltype53;
-int idtype54;
-short int var55 /* : Bool */;
-long var56 /* : Int */;
-long var57 /* : Int */;
-long var59 /* : Int */;
-short int var61 /* : Bool */;
-short int var63 /* : Bool */;
-int cltype64;
-int idtype65;
-short int var66 /* : Bool */;
-val* var67 /* : nullable Object */;
-val* var_t /* var t: nullable Object */;
-val* var68 /* : nullable Object */;
-long var70 /* : Int */;
-long var71 /* : Int */;
-long var73 /* : Int */;
-val* var74 /* : nullable Object */;
-long var75 /* : Int */;
-long var76 /* : Int */;
-long var78 /* : Int */;
-long var79 /* : Int */;
-long var80 /* : Int */;
-long var82 /* : Int */;
-long var_i83 /* var i: Int */;
-short int var84 /* : Bool */;
-short int var86 /* : Bool */;
-int cltype87;
-int idtype88;
-short int var89 /* : Bool */;
-long var_min /* var min: Int */;
-val* var90 /* : nullable Object */;
-val* var_min_v /* var min_v: nullable Object */;
-long var_j91 /* var j: Int */;
-short int var92 /* : Bool */;
-short int var94 /* : Bool */;
-int cltype95;
-int idtype96;
-short int var97 /* : Bool */;
-long var98 /* : Int */;
-long var99 /* : Int */;
-short int var100 /* : Bool */;
-short int var102 /* : Bool */;
-int cltype103;
-int idtype104;
-short int var105 /* : Bool */;
-val* var106 /* : nullable Object */;
-long var107 /* : Int */;
-long var108 /* : Int */;
-long var110 /* : Int */;
-short int var112 /* : Bool */;
-short int var114 /* : Bool */;
-short int var115 /* : Bool */;
-val* var116 /* : nullable Object */;
-long var117 /* : Int */;
-long var118 /* : Int */;
-long var120 /* : Int */;
-var_from = p0;
-var_to = p1;
-{ /* Inline kernel#Int#>= (var_from,var_to) */
-/* Covariant cast for argument 0 (i) <var_to:Int> isa OTHER */
-/* <var_to:Int> isa OTHER */
-var2 = 1; /* easy <var_to:Int> isa OTHER*/
-if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
-exit(1);
-}
-var3 = var_from >= var_to;
-var = var3;
-goto RET_LABEL1;
-RET_LABEL1:(void)0;
-}
-if (var){
-goto RET_LABEL;
-} else {
-var4 = 7;
-{ /* Inline kernel#Int#+ (var_from,var4) */
-var7 = var_from + var4;
-var5 = var7;
-goto RET_LABEL6;
-RET_LABEL6:(void)0;
-}
-{ /* Inline kernel#Int#< (var5,var_to) */
-/* Covariant cast for argument 0 (i) <var_to:Int> isa OTHER */
-/* <var_to:Int> isa OTHER */
-var10 = 1; /* easy <var_to:Int> isa OTHER*/
-if (!var10) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
-exit(1);
-}
-var13 = var5 < var_to;
-var8 = var13;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
-}
-if (var8){
-var14 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_from) /* [] on <self:Array[nullable Object]>*/;
-var_pivot = var14;
-var_i = var_from;
-var_j = var_to;
-for(;;) {
-{ /* Inline kernel#Int#> (var_j,var_i) */
-/* Covariant cast for argument 0 (i) <var_i:Int> isa OTHER */
-/* <var_i:Int> isa OTHER */
-var17 = 1; /* easy <var_i:Int> isa OTHER*/
-if (!var17) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
-exit(1);
-}
-var20 = var_j > var_i;
-var15 = var20;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
-}
-if (!var15) break;
-for(;;) {
-{ /* Inline kernel#Int#<= (var_i,var_to) */
-/* Covariant cast for argument 0 (i) <var_to:Int> isa OTHER */
-/* <var_to:Int> isa OTHER */
-var24 = 1; /* easy <var_to:Int> isa OTHER*/
-if (!var24) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
-exit(1);
-}
-var27 = var_i <= var_to;
-var22 = var27;
-goto RET_LABEL23;
-RET_LABEL23:(void)0;
-}
-var_ = var22;
-if (var22){
-printf("NOT YET IMPLEMENTED AClosureCallExpr:lib/standard/collection/array.nit:385,23--41\n");
-/* var28 = NOT YET AClosureCallExpr */
-var29 = 0;
-{ /* Inline kernel#Int#<= (var28,var29) */
-/* Covariant cast for argument 0 (i) <var29:Int> isa OTHER */
-/* <var29:Int> isa OTHER */
-var32 = 1; /* easy <var29:Int> isa OTHER*/
-if (!var32) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
-exit(1);
-}
-var35 = var28 <= var29;
-var30 = var35;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
-}
-var21 = var30;
-} else {
-var21 = var_;
-}
-if (!var21) break;
-var36 = 1;
-{ /* Inline kernel#Int#+ (var_i,var36) */
-var39 = var_i + var36;
-var37 = var39;
-goto RET_LABEL38;
-RET_LABEL38:(void)0;
-}
-var_i = var37;
-CONTINUE_label: (void)0;
-}
-BREAK_label: (void)0;
-for(;;) {
-{ /* Inline kernel#Int#> (var_j,var_i) */
-/* Covariant cast for argument 0 (i) <var_i:Int> isa OTHER */
-/* <var_i:Int> isa OTHER */
-var43 = 1; /* easy <var_i:Int> isa OTHER*/
-if (!var43) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
-exit(1);
-}
-var46 = var_j > var_i;
-var41 = var46;
-goto RET_LABEL42;
-RET_LABEL42:(void)0;
-}
-var_47 = var41;
-if (var41){
-printf("NOT YET IMPLEMENTED AClosureCallExpr:lib/standard/collection/array.nit:386,21--39\n");
-/* var48 = NOT YET AClosureCallExpr */
-var49 = 0;
-{ /* Inline kernel#Int#>= (var48,var49) */
-/* Covariant cast for argument 0 (i) <var49:Int> isa OTHER */
-/* <var49:Int> isa OTHER */
-var52 = 1; /* easy <var49:Int> isa OTHER*/
-if (!var52) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
-exit(1);
-}
-var55 = var48 >= var49;
-var50 = var55;
-goto RET_LABEL51;
-RET_LABEL51:(void)0;
-}
-var40 = var50;
-} else {
-var40 = var_47;
-}
-if (!var40) break;
-var56 = 1;
-{ /* Inline kernel#Int#- (var_j,var56) */
-var59 = var_j - var56;
-var57 = var59;
-goto RET_LABEL58;
-RET_LABEL58:(void)0;
-}
-var_j = var57;
-CONTINUE_label60: (void)0;
-}
-BREAK_label60: (void)0;
-{ /* Inline kernel#Int#> (var_j,var_i) */
-/* Covariant cast for argument 0 (i) <var_i:Int> isa OTHER */
-/* <var_i:Int> isa OTHER */
-var63 = 1; /* easy <var_i:Int> isa OTHER*/
-if (!var63) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
-exit(1);
-}
-var66 = var_j > var_i;
-var61 = var66;
-goto RET_LABEL62;
-RET_LABEL62:(void)0;
-}
-if (var61){
-var67 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:Array[nullable Object]>*/;
-var_t = var67;
-var68 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_j) /* [] on <self:Array[nullable Object]>*/;
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var_i, var68) /* []= on <self:Array[nullable Object]>*/;
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var_j, var_t) /* []= on <self:Array[nullable Object]>*/;
-} else {
-}
-CONTINUE_label69: (void)0;
-}
-BREAK_label69: (void)0;
-var70 = 1;
-{ /* Inline kernel#Int#- (var_i,var70) */
-var73 = var_i - var70;
-var71 = var73;
-goto RET_LABEL72;
-RET_LABEL72:(void)0;
-}
-var74 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var71) /* [] on <self:Array[nullable Object]>*/;
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var_from, var74) /* []= on <self:Array[nullable Object]>*/;
-var75 = 1;
-{ /* Inline kernel#Int#- (var_i,var75) */
-var78 = var_i - var75;
-var76 = var78;
-goto RET_LABEL77;
-RET_LABEL77:(void)0;
-}
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var76, var_pivot) /* []= on <self:Array[nullable Object]>*/;
-var79 = 2;
-{ /* Inline kernel#Int#- (var_i,var79) */
-var82 = var_i - var79;
-var80 = var82;
-goto RET_LABEL81;
-RET_LABEL81:(void)0;
-}
-((void (*)(val*, long, long))(self->class->vft[COLOR_array__Array__sub_sort]))(self, var_from, var80) /* sub_sort on <self:Array[nullable Object]>*/;
-((void (*)(val*, long, long))(self->class->vft[COLOR_array__Array__sub_sort]))(self, var_i, var_to) /* sub_sort on <self:Array[nullable Object]>*/;
-} else {
-var_i83 = var_from;
-for(;;) {
-{ /* Inline kernel#Int#< (var_i83,var_to) */
-/* Covariant cast for argument 0 (i) <var_to:Int> isa OTHER */
-/* <var_to:Int> isa OTHER */
-var86 = 1; /* easy <var_to:Int> isa OTHER*/
-if (!var86) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
-exit(1);
-}
-var89 = var_i83 < var_to;
-var84 = var89;
-goto RET_LABEL85;
-RET_LABEL85:(void)0;
-}
-if (!var84) break;
-var_min = var_i83;
-var90 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i83) /* [] on <self:Array[nullable Object]>*/;
-var_min_v = var90;
-var_j91 = var_i83;
-for(;;) {
-{ /* Inline kernel#Int#<= (var_j91,var_to) */
-/* Covariant cast for argument 0 (i) <var_to:Int> isa OTHER */
-/* <var_to:Int> isa OTHER */
-var94 = 1; /* easy <var_to:Int> isa OTHER*/
-if (!var94) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
-exit(1);
-}
-var97 = var_j91 <= var_to;
-var92 = var97;
-goto RET_LABEL93;
-RET_LABEL93:(void)0;
-}
-if (!var92) break;
-printf("NOT YET IMPLEMENTED AClosureCallExpr:lib/standard/collection/array.nit:404,9--27\n");
-/* var98 = NOT YET AClosureCallExpr */
-var99 = 0;
-{ /* Inline kernel#Int#> (var98,var99) */
-/* Covariant cast for argument 0 (i) <var99:Int> isa OTHER */
-/* <var99:Int> isa OTHER */
-var102 = 1; /* easy <var99:Int> isa OTHER*/
-if (!var102) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
-exit(1);
-}
-var105 = var98 > var99;
-var100 = var105;
-goto RET_LABEL101;
-RET_LABEL101:(void)0;
-}
-if (var100){
-var_min = var_j91;
-var106 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_j91) /* [] on <self:Array[nullable Object]>*/;
-var_min_v = var106;
-} else {
-}
-var107 = 1;
-{ /* Inline kernel#Int#+ (var_j91,var107) */
-var110 = var_j91 + var107;
-var108 = var110;
-goto RET_LABEL109;
-RET_LABEL109:(void)0;
-}
-var_j91 = var108;
-CONTINUE_label111: (void)0;
-}
-BREAK_label111: (void)0;
-{ /* Inline kernel#Int#!= (var_min,var_i83) */
-var114 = var_min == var_i83;
-var115 = !var114;
-var112 = var115;
-goto RET_LABEL113;
-RET_LABEL113:(void)0;
-}
-if (var112){
-var116 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i83) /* [] on <self:Array[nullable Object]>*/;
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var_min, var116) /* []= on <self:Array[nullable Object]>*/;
-((void (*)(val*, long, val*))(self->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(self, var_i83, var_min_v) /* []= on <self:Array[nullable Object]>*/;
-} else {
-}
-var117 = 1;
-{ /* Inline kernel#Int#+ (var_i83,var117) */
-var120 = var_i83 + var117;
-var118 = var120;
-goto RET_LABEL119;
-RET_LABEL119:(void)0;
-}
-var_i83 = var118;
-CONTINUE_label121: (void)0;
-}
-BREAK_label121: (void)0;
-}
-}
-RET_LABEL:;
-}
-/* method array#Array#sub_sort for (self: Object, Int, Int) */
-void VIRTUAL_array__Array__sub_sort(val* self, long p0, long p1) {
-array__Array__sub_sort(self, p0, p1);
-RET_LABEL:;
-}
 /* method array#ArrayIterator#item for (self: ArrayIterator[nullable Object]): nullable Object */
 val* array__ArrayIterator__item(val* self) {
 val* var /* : nullable Object */;
@@ -2896,7 +2554,8 @@ long var2 /* : Int */;
 val* var3 /* : nullable Object */;
 var1 = self->attrs[COLOR_array__ArrayIterator___array].val; /* _array on <self:ArrayIterator[nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 424);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 360);
 exit(1);
 }
 var2 = self->attrs[COLOR_array__ArrayIterator___index].l; /* _index on <self:ArrayIterator[nullable Object]> */
@@ -2925,11 +2584,13 @@ short int var4 /* : Bool */;
 short int var6 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var7 /* : Bool */;
 var1 = self->attrs[COLOR_array__ArrayIterator___index].l; /* _index on <self:ArrayIterator[nullable Object]> */
 var2 = self->attrs[COLOR_array__ArrayIterator___array].val; /* _array on <self:ArrayIterator[nullable Object]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 428);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 364);
 exit(1);
 }
 var3 = ((long (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__length]))(var2) /* length on <var2:AbstractArrayRead[nullable Object]>*/;
@@ -2938,7 +2599,9 @@ var3 = ((long (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection_
 /* <var3:Int> isa OTHER */
 var6 = 1; /* easy <var3:Int> isa OTHER*/
 if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+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", 261);
 exit(1);
 }
 var7 = var1 < var3;
@@ -2990,6 +2653,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_a /* var a: AbstractArrayRead[nullable Object] */;
 long var1 /* : Int */;
 /* Covariant cast for argument 0 (a) <p0:AbstractArrayRead[nullable Object]> isa AbstractArrayRead[ArrayIterator#0] */
@@ -3003,7 +2667,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 432);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AbstractArrayRead[ArrayIterator#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 368);
 exit(1);
 }
 var_a = p0;
@@ -3042,6 +2708,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_e /* var e: Object */;
 val* var2 /* : Array[Object] */;
 short int var3 /* : Bool */;
@@ -3056,13 +2723,16 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 451);
+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/array.nit", 387);
 exit(1);
 }
 var_e = p0;
 var2 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 451);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 387);
 exit(1);
 }
 var3 = ((short int (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__Collection__has]))(var2, var_e) /* has on <var2:Array[Object]>*/;
@@ -3086,6 +2756,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_e /* var e: Object */;
 val* var1 /* : Array[Object] */;
 short int var2 /* : Bool */;
@@ -3102,13 +2773,16 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 453);
+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/array.nit", 389);
 exit(1);
 }
 var_e = p0;
 var1 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 453);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 389);
 exit(1);
 }
 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__Collection__has]))(var1, var_e) /* has on <var1:Array[Object]>*/;
@@ -3116,7 +2790,8 @@ var3 = !var2;
 if (var3){
 var4 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var4 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 453);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 389);
 exit(1);
 }
 ((void (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var4, var_e) /* add on <var4:Array[Object]>*/;
@@ -3136,7 +2811,8 @@ val* var1 /* : Array[Object] */;
 short int var2 /* : Bool */;
 var1 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 455);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 391);
 exit(1);
 }
 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var1) /* is_empty on <var1:Array[Object]>*/;
@@ -3161,7 +2837,8 @@ val* var1 /* : Array[Object] */;
 long var2 /* : Int */;
 var1 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 457);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 393);
 exit(1);
 }
 var2 = ((long (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__length]))(var1) /* length on <var1:Array[Object]>*/;
@@ -3189,12 +2866,14 @@ short int var4 /* : Bool */;
 short int var6 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 short int var7 /* : Bool */;
 val* var8 /* : Array[Object] */;
 val* var9 /* : nullable Object */;
 var1 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 461);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 397);
 exit(1);
 }
 var2 = ((long (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__length]))(var1) /* length on <var1:Array[Object]>*/;
@@ -3204,7 +2883,9 @@ var3 = 0;
 /* <var3:Int> isa OTHER */
 var6 = 1; /* easy <var3:Int> isa OTHER*/
 if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
+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", 263);
 exit(1);
 }
 var7 = var2 > var3;
@@ -3213,12 +2894,14 @@ goto RET_LABEL5;
 RET_LABEL5:(void)0;
 }
 if (!var4) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "lib/standard/collection/array.nit", 461);
+fprintf(stderr, "Runtime error: %s", "Assert failed");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 397);
 exit(1);
 }
 var8 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var8 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 462);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 398);
 exit(1);
 }
 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Collection__first]))(var8) /* first on <var8:Array[Object]>*/;
@@ -3242,6 +2925,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 */;
 val* var1 /* : Array[Object] */;
 long var2 /* : Int */;
@@ -3251,7 +2935,8 @@ short int var4 /* : Bool */;
 short int var6 /* : Bool */;
 int cltype7;
 int idtype8;
-short int var9 /* : Bool */;
+const char* var_class_name9;
+short int var10 /* : Bool */;
 /* Covariant cast for argument 0 (item) <p0:Object> isa RemovableCollection#0 */
 /* <p0:Object> isa RemovableCollection#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__RemovableCollection_FT0];
@@ -3263,13 +2948,16 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 465);
+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/array.nit", 401);
 exit(1);
 }
 var_item = p0;
 var1 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 467);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 403);
 exit(1);
 }
 var2 = ((long (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__SequenceRead__index_of]))(var1, var_item) /* index_of on <var1:Array[Object]>*/;
@@ -3280,11 +2968,13 @@ var3 = 0;
 /* <var3:Int> isa OTHER */
 var6 = 1; /* easy <var3:Int> isa OTHER*/
 if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+var_class_name9 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name9);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var9 = var_i >= var3;
-var4 = var9;
+var10 = var_i >= var3;
+var4 = var10;
 goto RET_LABEL5;
 RET_LABEL5:(void)0;
 }
@@ -3305,6 +2995,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 */
@@ -3317,7 +3008,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 471);
+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/array.nit", 407);
 exit(1);
 }
 var_item = p0;
@@ -3334,7 +3027,8 @@ void array__ArraySet__clear(val* self) {
 val* var /* : Array[Object] */;
 var = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 473);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 409);
 exit(1);
 }
 ((void (*)(val*))(var->class->vft[COLOR_abstract_collection__RemovableCollection__clear]))(var) /* clear on <var:Array[Object]>*/;
@@ -3354,7 +3048,8 @@ val* var3 /* : Iterator[nullable Object] */;
 var1 = NEW_array__ArraySetIterator(self->type->resolution_table->types[COLOR_array__ArraySetIteratorarray__ArraySet_FT0]);
 var2 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 475);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 411);
 exit(1);
 }
 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Array[Object]>*/;
@@ -3381,7 +3076,8 @@ val* var /* : Array[Object] */;
 var_cap = p0;
 var = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 478);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 414);
 exit(1);
 }
 ((void (*)(val*, long))(var->class->vft[COLOR_array__AbstractArray__enlarge]))(var, var_cap) /* enlarge on <var:Array[Object]>*/;
@@ -3403,19 +3099,22 @@ val* var4 /* : nullable Object */;
 var_i = p0;
 var = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 482);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 418);
 exit(1);
 }
 var1 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 482);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 418);
 exit(1);
 }
 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var1) /* last on <var1:Array[Object]>*/;
 ((void (*)(val*, long, val*))(var->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var, var_i, var2) /* []= on <var:Array[Object]>*/;
 var3 = self->attrs[COLOR_array__ArraySet___array].val; /* _array on <self:ArraySet[Object]> */
 if (var3 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _array", "lib/standard/collection/array.nit", 483);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _array");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 419);
 exit(1);
 }
 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Sequence__pop]))(var3) /* pop on <var3:Array[Object]>*/;
@@ -3464,7 +3163,8 @@ val* var1 /* : ArrayIterator[Object] */;
 short int var2 /* : Bool */;
 var1 = self->attrs[COLOR_array__ArraySetIterator___iter].val; /* _iter on <self:ArraySetIterator[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _iter", "lib/standard/collection/array.nit", 497);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _iter");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 433);
 exit(1);
 }
 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:ArrayIterator[Object]>*/;
@@ -3487,7 +3187,8 @@ void array__ArraySetIterator__next(val* self) {
 val* var /* : ArrayIterator[Object] */;
 var = self->attrs[COLOR_array__ArraySetIterator___iter].val; /* _iter on <self:ArraySetIterator[Object]> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _iter", "lib/standard/collection/array.nit", 499);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _iter");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 435);
 exit(1);
 }
 ((void (*)(val*))(var->class->vft[COLOR_abstract_collection__Iterator__next]))(var) /* next on <var:ArrayIterator[Object]>*/;
@@ -3505,7 +3206,8 @@ val* var1 /* : ArrayIterator[Object] */;
 val* var2 /* : nullable Object */;
 var1 = self->attrs[COLOR_array__ArraySetIterator___iter].val; /* _iter on <self:ArraySetIterator[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _iter", "lib/standard/collection/array.nit", 501);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _iter");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 437);
 exit(1);
 }
 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:ArrayIterator[Object]>*/;
@@ -3529,6 +3231,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_iter /* var iter: ArrayIterator[Object] */;
 /* Covariant cast for argument 0 (iter) <p0:ArrayIterator[Object]> isa ArrayIterator[ArraySetIterator#0] */
 /* <p0:ArrayIterator[Object]> isa ArrayIterator[ArraySetIterator#0] */
@@ -3541,7 +3244,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 503);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "ArrayIterator[ArraySetIterator#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 439);
 exit(1);
 }
 var_iter = p0;
@@ -3560,6 +3265,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 */;
 long var2 /* : Int */;
 long var_i /* var i: Int */;
@@ -3568,10 +3274,11 @@ short int var4 /* : Bool */;
 short int var6 /* : Bool */;
 int cltype7;
 int idtype8;
-short int var9 /* : Bool */;
-val* var10 /* : Array[Couple[Object, nullable Object]] */;
-val* var11 /* : nullable Object */;
+const char* var_class_name9;
+short int var10 /* : Bool */;
+val* var11 /* : Array[Couple[Object, nullable Object]] */;
 val* var12 /* : nullable Object */;
+val* var13 /* : 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];
@@ -3583,7 +3290,9 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 513);
+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/array.nit", 449);
 exit(1);
 }
 var_key = p0;
@@ -3595,26 +3304,30 @@ var3 = 0;
 /* <var3:Int> isa OTHER */
 var6 = 1; /* easy <var3:Int> isa OTHER*/
 if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+var_class_name9 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name9);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var9 = var_i >= var3;
-var4 = var9;
+var10 = var_i >= var3;
+var4 = var10;
 goto RET_LABEL5;
 RET_LABEL5:(void)0;
 }
 if (var4){
-var10 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
-if (var10 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 518);
+var11 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
+if (var11 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 454);
 exit(1);
 }
-var11 = ((val* (*)(val*, long))(var10->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var10, var_i) /* [] on <var10:Array[Couple[Object, nullable Object]]>*/;
-var12 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Couple__second]))(var11) /* second on <var11:nullable Object(Couple[Object, nullable Object])>*/;
-var = var12;
+var12 = ((val* (*)(val*, long))(var11->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var11, var_i) /* [] on <var11:Array[Couple[Object, nullable Object]]>*/;
+var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Couple__second]))(var12) /* second on <var12:nullable Object(Couple[Object, nullable Object])>*/;
+var = var13;
 goto RET_LABEL;
 } else {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "lib/standard/collection/array.nit", 520);
+fprintf(stderr, "Runtime error: %s", "Aborted");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 456);
 exit(1);
 }
 RET_LABEL:;
@@ -3635,25 +3348,28 @@ 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;
 val* var_key /* var key: Object */;
 val* var_item /* var item: nullable Object */;
-long var5 /* : Int */;
-long var_i /* var i: Int */;
 long var6 /* : Int */;
-short int var7 /* : Bool */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-short int var12 /* : Bool */;
-val* var13 /* : Array[Couple[Object, nullable Object]] */;
-val* var14 /* : nullable Object */;
+long var_i /* var i: Int */;
+long var7 /* : Int */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
+const char* var_class_name13;
+short int var14 /* : Bool */;
 val* var15 /* : Array[Couple[Object, nullable Object]] */;
-val* var16 /* : Couple[Object, nullable Object] */;
+val* var16 /* : nullable Object */;
+val* var17 /* : Array[Couple[Object, nullable Object]] */;
+val* var18 /* : Couple[Object, nullable Object] */;
 /* 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];
@@ -3665,7 +3381,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 524);
+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/array.nit", 460);
 exit(1);
 }
 /* Covariant cast for argument 1 (item) <p1:nullable Object> isa Map#1 */
@@ -3684,45 +3402,51 @@ var1 = p1->type->type_table[cltype2] == idtype3;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 524);
+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/array.nit", 460);
 exit(1);
 }
 var_key = p0;
 var_item = p1;
-var5 = ((long (*)(val*, val*))(self->class->vft[COLOR_array__ArrayMap__index]))(self, var_key) /* index on <self:ArrayMap[Object, nullable Object]>*/;
-var_i = var5;
-var6 = 0;
-{ /* Inline kernel#Int#>= (var_i,var6) */
-/* Covariant cast for argument 0 (i) <var6:Int> isa OTHER */
-/* <var6:Int> isa OTHER */
-var9 = 1; /* easy <var6:Int> isa OTHER*/
-if (!var9) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+var6 = ((long (*)(val*, val*))(self->class->vft[COLOR_array__ArrayMap__index]))(self, var_key) /* index on <self:ArrayMap[Object, nullable Object]>*/;
+var_i = var6;
+var7 = 0;
+{ /* Inline kernel#Int#>= (var_i,var7) */
+/* Covariant cast for argument 0 (i) <var7:Int> isa OTHER */
+/* <var7:Int> isa OTHER */
+var10 = 1; /* easy <var7:Int> isa OTHER*/
+if (!var10) {
+var_class_name13 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name13);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var12 = var_i >= var6;
-var7 = var12;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+var14 = var_i >= var7;
+var8 = var14;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
 }
-if (var7){
-var13 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
-if (var13 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 529);
+if (var8){
+var15 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
+if (var15 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 465);
 exit(1);
 }
-var14 = ((val* (*)(val*, long))(var13->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var13, var_i) /* [] on <var13:Array[Couple[Object, nullable Object]]>*/;
-((void (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__Couple__second_61d]))(var14, var_item) /* second= on <var14:nullable Object(Couple[Object, nullable Object])>*/;
+var16 = ((val* (*)(val*, long))(var15->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var15, var_i) /* [] on <var15:Array[Couple[Object, nullable Object]]>*/;
+((void (*)(val*, val*))(var16->class->vft[COLOR_abstract_collection__Couple__second_61d]))(var16, var_item) /* second= on <var16:nullable Object(Couple[Object, nullable Object])>*/;
 } else {
-var15 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
-if (var15 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 531);
+var17 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
+if (var17 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 467);
 exit(1);
 }
-var16 = NEW_abstract_collection__Couple(self->type->resolution_table->types[COLOR_abstract_collection__Couplearray__ArrayMap_FT0array__ArrayMap_FT1]);
-((void (*)(val*, val*, val*))(var16->class->vft[COLOR_abstract_collection__Couple__init]))(var16, var_key, var_item) /* init on <var16:Couple[Object, nullable Object]>*/;
-CHECK_NEW_abstract_collection__Couple(var16);
-((void (*)(val*, val*))(var15->class->vft[COLOR_abstract_collection__Sequence__push]))(var15, var16) /* push on <var15:Array[Couple[Object, nullable Object]]>*/;
+var18 = NEW_abstract_collection__Couple(self->type->resolution_table->types[COLOR_abstract_collection__Couplearray__ArrayMap_FT0array__ArrayMap_FT1]);
+((void (*)(val*, val*, val*))(var18->class->vft[COLOR_abstract_collection__Couple__init]))(var18, var_key, var_item) /* init on <var18:Couple[Object, nullable Object]>*/;
+CHECK_NEW_abstract_collection__Couple(var18);
+((void (*)(val*, val*))(var17->class->vft[COLOR_abstract_collection__Sequence__push]))(var17, var18) /* push on <var17:Array[Couple[Object, nullable Object]]>*/;
 }
 RET_LABEL:;
 }
@@ -3737,7 +3461,8 @@ val* var /* : ArrayMapKeys[Object, nullable Object] */;
 val* var1 /* : ArrayMapKeys[Object, nullable Object] */;
 var1 = self->attrs[COLOR_array__ArrayMap___64dkeys].val; /* @keys on <self:ArrayMap[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @keys", "lib/standard/collection/array.nit", 535);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @keys");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 471);
 exit(1);
 }
 var = var1;
@@ -3759,6 +3484,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (keys) <p0:ArrayMapKeys[Object, nullable Object]> isa ArrayMapKeys[ArrayMap#0, ArrayMap#1] */
 /* <p0:ArrayMapKeys[Object, nullable Object]> isa ArrayMapKeys[ArrayMap#0, ArrayMap#1] */
 type_struct = self->type->resolution_table->types[COLOR_array__ArrayMapKeysarray__ArrayMap_FT0array__ArrayMap_FT1];
@@ -3770,7 +3496,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 535);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "ArrayMapKeys[ArrayMap#0, ArrayMap#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 471);
 exit(1);
 }
 self->attrs[COLOR_array__ArrayMap___64dkeys].val = p0; /* @keys on <self:ArrayMap[Object, nullable Object]> */
@@ -3787,7 +3515,8 @@ val* var /* : ArrayMapValues[Object, nullable Object] */;
 val* var1 /* : ArrayMapValues[Object, nullable Object] */;
 var1 = self->attrs[COLOR_array__ArrayMap___64dvalues].val; /* @values on <self:ArrayMap[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @values", "lib/standard/collection/array.nit", 536);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @values");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 472);
 exit(1);
 }
 var = var1;
@@ -3809,6 +3538,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (values) <p0:ArrayMapValues[Object, nullable Object]> isa ArrayMapValues[ArrayMap#0, ArrayMap#1] */
 /* <p0:ArrayMapValues[Object, nullable Object]> isa ArrayMapValues[ArrayMap#0, ArrayMap#1] */
 type_struct = self->type->resolution_table->types[COLOR_array__ArrayMapValuesarray__ArrayMap_FT0array__ArrayMap_FT1];
@@ -3820,7 +3550,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 536);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "ArrayMapValues[ArrayMap#0, ArrayMap#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 472);
 exit(1);
 }
 self->attrs[COLOR_array__ArrayMap___64dvalues].val = p0; /* @values on <self:ArrayMap[Object, nullable Object]> */
@@ -3838,7 +3570,8 @@ val* var1 /* : Array[Couple[Object, nullable Object]] */;
 long var2 /* : Int */;
 var1 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 539);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 475);
 exit(1);
 }
 var2 = ((long (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__length]))(var1) /* length on <var1:Array[Couple[Object, nullable Object]]>*/;
@@ -3865,7 +3598,8 @@ val* var3 /* : Iterator[nullable Object] */;
 var1 = NEW_abstract_collection__CoupleMapIterator(self->type->resolution_table->types[COLOR_abstract_collection__CoupleMapIteratorarray__ArrayMap_FT0array__ArrayMap_FT1]);
 var2 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 541);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 477);
 exit(1);
 }
 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Array[Couple[Object, nullable Object]]>*/;
@@ -3892,7 +3626,8 @@ val* var1 /* : Array[Couple[Object, nullable Object]] */;
 short int var2 /* : Bool */;
 var1 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 543);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 479);
 exit(1);
 }
 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var1) /* is_empty on <var1:Array[Couple[Object, nullable Object]]>*/;
@@ -3915,7 +3650,8 @@ void array__ArrayMap__clear(val* self) {
 val* var /* : Array[Couple[Object, nullable Object]] */;
 var = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 545);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 481);
 exit(1);
 }
 ((void (*)(val*))(var->class->vft[COLOR_abstract_collection__RemovableCollection__clear]))(var) /* clear on <var:Array[Couple[Object, nullable Object]]>*/;
@@ -3933,7 +3669,8 @@ val* var /* : Array[Couple[Object, nullable Object]] */;
 var_cap = p0;
 var = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 548);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 484);
 exit(1);
 }
 ((void (*)(val*, long))(var->class->vft[COLOR_array__AbstractArray__enlarge]))(var, var_cap) /* enlarge on <var:Array[Couple[Object, nullable Object]]>*/;
@@ -3951,6 +3688,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 */;
 long var2 /* : Int */;
 long var_i /* var i: Int */;
@@ -3959,10 +3697,11 @@ short int var4 /* : Bool */;
 short int var6 /* : Bool */;
 int cltype7;
 int idtype8;
-short int var9 /* : Bool */;
-val* var10 /* : Array[Couple[Object, nullable Object]] */;
-val* var11 /* : nullable Object */;
-val* var12 /* : null */;
+const char* var_class_name9;
+short int var10 /* : Bool */;
+val* var11 /* : Array[Couple[Object, nullable Object]] */;
+val* var12 /* : nullable Object */;
+val* var13 /* : null */;
 /* 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];
@@ -3974,7 +3713,9 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 550);
+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/array.nit", 486);
 exit(1);
 }
 var_key = p0;
@@ -3986,26 +3727,29 @@ var3 = 0;
 /* <var3:Int> isa OTHER */
 var6 = 1; /* easy <var3:Int> isa OTHER*/
 if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+var_class_name9 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name9);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var9 = var_i >= var3;
-var4 = var9;
+var10 = var_i >= var3;
+var4 = var10;
 goto RET_LABEL5;
 RET_LABEL5:(void)0;
 }
 if (var4){
-var10 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
-if (var10 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 554);
+var11 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
+if (var11 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 490);
 exit(1);
 }
-var11 = ((val* (*)(val*, long))(var10->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var10, var_i) /* [] on <var10:Array[Couple[Object, nullable Object]]>*/;
-var = var11;
+var12 = ((val* (*)(val*, long))(var11->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var11, var_i) /* [] on <var11:Array[Couple[Object, nullable Object]]>*/;
+var = var12;
 goto RET_LABEL;
 } else {
-var12 = NULL;
-var = var12;
+var13 = NULL;
+var = var13;
 goto RET_LABEL;
 }
 RET_LABEL:;
@@ -4031,19 +3775,22 @@ val* var4 /* : nullable Object */;
 var_i = p0;
 var = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 566);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 502);
 exit(1);
 }
 var1 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 566);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 502);
 exit(1);
 }
 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var1) /* last on <var1:Array[Couple[Object, nullable Object]]>*/;
 ((void (*)(val*, long, val*))(var->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var, var_i, var2) /* []= on <var:Array[Couple[Object, nullable Object]]>*/;
 var3 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
 if (var3 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 567);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 503);
 exit(1);
 }
 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Sequence__pop]))(var3) /* pop on <var3:Array[Couple[Object, nullable Object]]>*/;
@@ -4062,6 +3809,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 */;
 long var2 /* : Int */;
 long var_l /* var l: Int */;
@@ -4072,31 +3820,33 @@ short int var6 /* : Bool */;
 short int var8 /* : Bool */;
 int cltype9;
 int idtype10;
-short int var11 /* : Bool */;
+const char* var_class_name11;
+short int var12 /* : Bool */;
 short int var_ /* var : Bool */;
-val* var12 /* : Array[Couple[Object, nullable Object]] */;
-val* var13 /* : nullable Object */;
+val* var13 /* : Array[Couple[Object, nullable Object]] */;
 val* var14 /* : nullable Object */;
-short int var15 /* : Bool */;
-long var16 /* : Int */;
+val* var15 /* : nullable Object */;
+short int var16 /* : Bool */;
+long var17 /* : Int */;
 long var_i /* var i: Int */;
-val* var17 /* : Array[Couple[Object, nullable Object]] */;
-long var18 /* : Int */;
-short int var19 /* : Bool */;
-short int var21 /* : Bool */;
-int cltype22;
-int idtype23;
-short int var24 /* : Bool */;
-val* var25 /* : Array[Couple[Object, nullable Object]] */;
-val* var26 /* : nullable Object */;
-val* var27 /* : nullable Object */;
-short int var28 /* : Bool */;
-long var29 /* : Int */;
-long var30 /* : Int */;
+val* var18 /* : Array[Couple[Object, nullable Object]] */;
+long var19 /* : Int */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+int cltype23;
+int idtype24;
+const char* var_class_name25;
+short int var26 /* : Bool */;
+val* var27 /* : Array[Couple[Object, nullable Object]] */;
+val* var28 /* : nullable Object */;
+val* var29 /* : nullable Object */;
+short int var30 /* : Bool */;
+long var31 /* : Int */;
 long var32 /* : Int */;
-long var33 /* : Int */;
 long var34 /* : Int */;
+long var35 /* : Int */;
 long var36 /* : Int */;
+long var38 /* : Int */;
 /* Covariant cast for argument 0 (key) <p0:Object> isa ArrayMap#0 */
 /* <p0:Object> isa ArrayMap#0 */
 type_struct = self->type->resolution_table->types[COLOR_array__ArrayMap_FT0];
@@ -4108,7 +3858,9 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 573);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "ArrayMap#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 509);
 exit(1);
 }
 var_key = p0;
@@ -4116,7 +3868,8 @@ var2 = self->attrs[COLOR_array__ArrayMap___last_index].l; /* _last_index on <sel
 var_l = var2;
 var4 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
 if (var4 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 578);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 514);
 exit(1);
 }
 var5 = ((long (*)(val*))(var4->class->vft[COLOR_abstract_collection__Collection__length]))(var4) /* length on <var4:Array[Couple[Object, nullable Object]]>*/;
@@ -4125,25 +3878,28 @@ var5 = ((long (*)(val*))(var4->class->vft[COLOR_abstract_collection__Collection_
 /* <var5:Int> isa OTHER */
 var8 = 1; /* easy <var5:Int> isa OTHER*/
 if (!var8) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+var_class_name11 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name11);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var11 = var_l < var5;
-var6 = var11;
+var12 = var_l < var5;
+var6 = var12;
 goto RET_LABEL7;
 RET_LABEL7:(void)0;
 }
 var_ = var6;
 if (var6){
-var12 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
-if (var12 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 578);
+var13 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
+if (var13 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 514);
 exit(1);
 }
-var13 = ((val* (*)(val*, long))(var12->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var12, var_l) /* [] on <var12:Array[Couple[Object, nullable Object]]>*/;
-var14 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Couple__first]))(var13) /* first on <var13:nullable Object(Couple[Object, nullable Object])>*/;
-var15 = ((short int (*)(val*, val*))(var14->class->vft[COLOR_kernel__Object___61d_61d]))(var14, var_key) /* == on <var14:nullable Object(Object)>*/;
-var3 = var15;
+var14 = ((val* (*)(val*, long))(var13->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var13, var_l) /* [] on <var13:Array[Couple[Object, nullable Object]]>*/;
+var15 = ((val* (*)(val*))(var14->class->vft[COLOR_abstract_collection__Couple__first]))(var14) /* first on <var14:nullable Object(Couple[Object, nullable Object])>*/;
+var16 = ((short int (*)(val*, val*))(var15->class->vft[COLOR_kernel__Object___61d_61d]))(var15, var_key) /* == on <var15:nullable Object(Object)>*/;
+var3 = var16;
 } else {
 var3 = var_;
 }
@@ -4152,62 +3908,66 @@ var = var_l;
 goto RET_LABEL;
 } else {
 }
-var16 = 0;
-var_i = var16;
+var17 = 0;
+var_i = var17;
 for(;;) {
-var17 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
-if (var17 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 581);
+var18 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
+if (var18 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 517);
 exit(1);
 }
-var18 = ((long (*)(val*))(var17->class->vft[COLOR_abstract_collection__Collection__length]))(var17) /* length on <var17:Array[Couple[Object, nullable Object]]>*/;
-{ /* Inline kernel#Int#< (var_i,var18) */
-/* Covariant cast for argument 0 (i) <var18:Int> isa OTHER */
-/* <var18:Int> isa OTHER */
-var21 = 1; /* easy <var18:Int> isa OTHER*/
-if (!var21) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
+var19 = ((long (*)(val*))(var18->class->vft[COLOR_abstract_collection__Collection__length]))(var18) /* length on <var18:Array[Couple[Object, nullable Object]]>*/;
+{ /* Inline kernel#Int#< (var_i,var19) */
+/* Covariant cast for argument 0 (i) <var19:Int> isa OTHER */
+/* <var19:Int> isa OTHER */
+var22 = 1; /* easy <var19:Int> isa OTHER*/
+if (!var22) {
+var_class_name25 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name25);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 261);
 exit(1);
 }
-var24 = var_i < var18;
-var19 = var24;
-goto RET_LABEL20;
-RET_LABEL20:(void)0;
+var26 = var_i < var19;
+var20 = var26;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
-if (!var19) break;
-var25 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
-if (var25 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 582);
+if (!var20) break;
+var27 = self->attrs[COLOR_array__ArrayMap___items].val; /* _items on <self:ArrayMap[Object, nullable Object]> */
+if (var27 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 518);
 exit(1);
 }
-var26 = ((val* (*)(val*, long))(var25->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var25, var_i) /* [] on <var25:Array[Couple[Object, nullable Object]]>*/;
-var27 = ((val* (*)(val*))(var26->class->vft[COLOR_abstract_collection__Couple__first]))(var26) /* first on <var26:nullable Object(Couple[Object, nullable Object])>*/;
-var28 = ((short int (*)(val*, val*))(var27->class->vft[COLOR_kernel__Object___61d_61d]))(var27, var_key) /* == on <var27:nullable Object(Object)>*/;
-if (var28){
+var28 = ((val* (*)(val*, long))(var27->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var27, var_i) /* [] on <var27:Array[Couple[Object, nullable Object]]>*/;
+var29 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Couple__first]))(var28) /* first on <var28:nullable Object(Couple[Object, nullable Object])>*/;
+var30 = ((short int (*)(val*, val*))(var29->class->vft[COLOR_kernel__Object___61d_61d]))(var29, var_key) /* == on <var29:nullable Object(Object)>*/;
+if (var30){
 self->attrs[COLOR_array__ArrayMap___last_index].l = var_i; /* _last_index on <self:ArrayMap[Object, nullable Object]> */
 var = var_i;
 goto RET_LABEL;
 } else {
 }
-var29 = 1;
-{ /* Inline kernel#Int#+ (var_i,var29) */
-var32 = var_i + var29;
-var30 = var32;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
+var31 = 1;
+{ /* Inline kernel#Int#+ (var_i,var31) */
+var34 = var_i + var31;
+var32 = var34;
+goto RET_LABEL33;
+RET_LABEL33:(void)0;
 }
-var_i = var30;
+var_i = var32;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-var33 = 1;
-{ /* Inline kernel#Int#unary - (var33) */
-var36 = -var33;
-var34 = var36;
-goto RET_LABEL35;
-RET_LABEL35:(void)0;
-}
-var = var34;
+var35 = 1;
+{ /* Inline kernel#Int#unary - (var35) */
+var38 = -var35;
+var36 = var38;
+goto RET_LABEL37;
+RET_LABEL37:(void)0;
+}
+var = var36;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -4241,7 +4001,8 @@ val* var /* : ArrayMap[Object, nullable Object] */;
 val* var1 /* : ArrayMap[Object, nullable Object] */;
 var1 = self->attrs[COLOR_array__ArrayMapKeys___64dmap].val; /* @map on <self:ArrayMapKeys[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @map", "lib/standard/collection/array.nit", 600);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @map");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 536);
 exit(1);
 }
 var = var1;
@@ -4263,6 +4024,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (map) <p0:ArrayMap[Object, nullable Object]> isa ArrayMap[ArrayMapKeys#0, ArrayMapKeys#1] */
 /* <p0:ArrayMap[Object, nullable Object]> isa ArrayMap[ArrayMapKeys#0, ArrayMapKeys#1] */
 type_struct = self->type->resolution_table->types[COLOR_array__ArrayMaparray__ArrayMapKeys_FT0array__ArrayMapKeys_FT1];
@@ -4274,7 +4036,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 600);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "ArrayMap[ArrayMapKeys#0, ArrayMapKeys#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 536);
 exit(1);
 }
 self->attrs[COLOR_array__ArrayMapKeys___64dmap].val = p0; /* @map on <self:ArrayMapKeys[Object, nullable Object]> */
@@ -4292,6 +4056,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_k /* var k: Object */;
 short int var2 /* : Bool */;
 long var3 /* : Int */;
@@ -4307,7 +4072,9 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 602);
+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/array.nit", 538);
 exit(1);
 }
 var_k = p0;
@@ -4343,7 +4110,8 @@ val* var4 /* : nullable Object */;
 var1 = ((val* (*)(val*))(self->class->vft[COLOR_array__ArrayMapKeys__map]))(self) /* map on <self:ArrayMapKeys[Object, nullable Object]>*/;
 var2 = var1->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var1:ArrayMap[Object, nullable Object]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 603);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 539);
 exit(1);
 }
 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__first]))(var2) /* first on <var2:Array[Couple[Object, nullable Object]]>*/;
@@ -4369,6 +4137,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_k /* var k: Object */;
 val* var2 /* : ArrayMap[Object, nullable Object] */;
 long var3 /* : Int */;
@@ -4377,7 +4146,8 @@ short int var5 /* : Bool */;
 short int var7 /* : Bool */;
 int cltype8;
 int idtype9;
-short int var10 /* : Bool */;
+const char* var_class_name10;
+short int var11 /* : Bool */;
 /* Covariant cast for argument 0 (k) <p0:Object> isa Collection#0 */
 /* <p0:Object> isa Collection#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collection_FT0];
@@ -4389,7 +4159,9 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 604);
+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/array.nit", 540);
 exit(1);
 }
 var_k = p0;
@@ -4401,11 +4173,13 @@ 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", 258);
+var_class_name10 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name10);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var10 = var3 >= var4;
-var5 = var10;
+var11 = var3 >= var4;
+var5 = var11;
 goto RET_LABEL6;
 RET_LABEL6:(void)0;
 }
@@ -4430,6 +4204,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_k /* var k: Object */;
 short int var2 /* : Bool */;
 short int var3 /* : Bool */;
@@ -4452,7 +4227,9 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 605);
+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/array.nit", 541);
 exit(1);
 }
 var_k = p0;
@@ -4577,6 +4354,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_key /* var key: Object */;
 val* var1 /* : ArrayMap[Object, nullable Object] */;
 long var2 /* : Int */;
@@ -4586,8 +4364,9 @@ short int var4 /* : Bool */;
 short int var6 /* : Bool */;
 int cltype7;
 int idtype8;
-short int var9 /* : Bool */;
-val* var10 /* : ArrayMap[Object, nullable Object] */;
+const char* var_class_name9;
+short int var10 /* : Bool */;
+val* var11 /* : ArrayMap[Object, nullable Object] */;
 /* Covariant cast for argument 0 (key) <p0:Object> isa RemovableCollection#0 */
 /* <p0:Object> isa RemovableCollection#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__RemovableCollection_FT0];
@@ -4599,7 +4378,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 610);
+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/array.nit", 546);
 exit(1);
 }
 var_key = p0;
@@ -4612,17 +4393,19 @@ var3 = 0;
 /* <var3:Int> isa OTHER */
 var6 = 1; /* easy <var3:Int> isa OTHER*/
 if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+var_class_name9 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name9);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var9 = var_i >= var3;
-var4 = var9;
+var10 = var_i >= var3;
+var4 = var10;
 goto RET_LABEL5;
 RET_LABEL5:(void)0;
 }
 if (var4){
-var10 = ((val* (*)(val*))(self->class->vft[COLOR_array__ArrayMapKeys__map]))(self) /* map on <self:ArrayMapKeys[Object, nullable Object]>*/;
-((void (*)(val*, long))(var10->class->vft[COLOR_array__ArrayMap__remove_at_index]))(var10, var_i) /* remove_at_index on <var10:ArrayMap[Object, nullable Object]>*/;
+var11 = ((val* (*)(val*))(self->class->vft[COLOR_array__ArrayMapKeys__map]))(self) /* map on <self:ArrayMapKeys[Object, nullable Object]>*/;
+((void (*)(val*, long))(var11->class->vft[COLOR_array__ArrayMap__remove_at_index]))(var11, var_i) /* remove_at_index on <var11:ArrayMap[Object, nullable Object]>*/;
 } else {
 }
 RET_LABEL:;
@@ -4638,6 +4421,7 @@ short int var /* : 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 RemovableCollection#0 */
 /* <p0:Object> isa RemovableCollection#0 */
@@ -4650,7 +4434,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 615);
+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/array.nit", 551);
 exit(1);
 }
 var_key = p0;
@@ -4668,6 +4454,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (map) <p0:ArrayMap[Object, nullable Object]> isa ArrayMap[ArrayMapKeys#0, ArrayMapKeys#1] */
 /* <p0:ArrayMap[Object, nullable Object]> isa ArrayMap[ArrayMapKeys#0, ArrayMapKeys#1] */
 type_struct = self->type->resolution_table->types[COLOR_array__ArrayMaparray__ArrayMapKeys_FT0array__ArrayMapKeys_FT1];
@@ -4679,7 +4466,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 598);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "ArrayMap[ArrayMapKeys#0, ArrayMapKeys#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 534);
 exit(1);
 }
 self->attrs[COLOR_array__ArrayMapKeys___64dmap].val = p0; /* @map on <self:ArrayMapKeys[Object, nullable Object]> */
@@ -4696,7 +4485,8 @@ val* var /* : ArrayMap[Object, nullable Object] */;
 val* var1 /* : ArrayMap[Object, nullable Object] */;
 var1 = self->attrs[COLOR_array__ArrayMapValues___64dmap].val; /* @map on <self:ArrayMapValues[Object, nullable Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @map", "lib/standard/collection/array.nit", 620);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @map");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 556);
 exit(1);
 }
 var = var1;
@@ -4718,6 +4508,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (map) <p0:ArrayMap[Object, nullable Object]> isa ArrayMap[ArrayMapValues#0, ArrayMapValues#1] */
 /* <p0:ArrayMap[Object, nullable Object]> isa ArrayMap[ArrayMapValues#0, ArrayMapValues#1] */
 type_struct = self->type->resolution_table->types[COLOR_array__ArrayMaparray__ArrayMapValues_FT0array__ArrayMapValues_FT1];
@@ -4729,7 +4520,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 620);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "ArrayMap[ArrayMapValues#0, ArrayMapValues#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 556);
 exit(1);
 }
 self->attrs[COLOR_array__ArrayMapValues___64dmap].val = p0; /* @map on <self:ArrayMapValues[Object, nullable Object]> */
@@ -4750,7 +4543,8 @@ val* var4 /* : nullable Object */;
 var1 = ((val* (*)(val*))(self->class->vft[COLOR_array__ArrayMapValues__map]))(self) /* map on <self:ArrayMapValues[Object, nullable Object]>*/;
 var2 = var1->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var1:ArrayMap[Object, nullable Object]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 622);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 558);
 exit(1);
 }
 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__first]))(var2) /* first on <var2:Array[Couple[Object, nullable Object]]>*/;
@@ -4844,6 +4638,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 /* : ArrayMap[Object, nullable Object] */;
 val* var3 /* : Array[Couple[Object, nullable Object]] */;
@@ -4871,14 +4666,17 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 627);
+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/array.nit", 563);
 exit(1);
 }
 var_item = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_array__ArrayMapValues__map]))(self) /* map on <self:ArrayMapValues[Object, nullable Object]>*/;
 var3 = var2->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var2:ArrayMap[Object, nullable Object]> */
 if (var3 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 630);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 566);
 exit(1);
 }
 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__iterator]))(var3) /* iterator on <var3:Array[Couple[Object, nullable Object]]>*/;
@@ -4926,6 +4724,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 /* : ArrayMap[Object, nullable Object] */;
 val* var3 /* : Array[Couple[Object, nullable Object]] */;
@@ -4953,14 +4752,17 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 634);
+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/array.nit", 570);
 exit(1);
 }
 var_item = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_array__ArrayMapValues__map]))(self) /* map on <self:ArrayMapValues[Object, nullable Object]>*/;
 var3 = var2->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var2:ArrayMap[Object, nullable Object]> */
 if (var3 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 637);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 573);
 exit(1);
 }
 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__iterator]))(var3) /* iterator on <var3:Array[Couple[Object, nullable Object]]>*/;
@@ -5008,6 +4810,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 */;
@@ -5038,7 +4841,9 @@ var1 = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 641);
+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/array.nit", 577);
 exit(1);
 }
 var_item = p0;
@@ -5047,7 +4852,8 @@ var_nb = var2;
 var3 = ((val* (*)(val*))(self->class->vft[COLOR_array__ArrayMapValues__map]))(self) /* map on <self:ArrayMapValues[Object, nullable Object]>*/;
 var4 = var3->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var3:ArrayMap[Object, nullable Object]> */
 if (var4 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 645);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 581);
 exit(1);
 }
 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Collection__iterator]))(var4) /* iterator on <var4:Array[Couple[Object, nullable Object]]>*/;
@@ -5110,6 +4916,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* var1 /* : ArrayMap[Object, nullable Object] */;
 val* var_map /* var map: ArrayMap[Object, nullable Object] */;
@@ -5124,14 +4931,15 @@ short int var9 /* : Bool */;
 short int var11 /* : Bool */;
 int cltype12;
 int idtype13;
-short int var14 /* : Bool */;
-val* var15 /* : Array[Couple[Object, nullable Object]] */;
-val* var16 /* : nullable Object */;
+const char* var_class_name14;
+short int var15 /* : Bool */;
+val* var16 /* : Array[Couple[Object, nullable Object]] */;
 val* var17 /* : nullable Object */;
-short int var18 /* : Bool */;
-long var19 /* : Int */;
+val* var18 /* : nullable Object */;
+short int var19 /* : Bool */;
 long var20 /* : Int */;
-long var22 /* : Int */;
+long var21 /* : Int */;
+long var23 /* : Int */;
 /* 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];
@@ -5148,7 +4956,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 651);
+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/array.nit", 587);
 exit(1);
 }
 var_item = p0;
@@ -5156,7 +4966,8 @@ var1 = ((val* (*)(val*))(self->class->vft[COLOR_array__ArrayMapValues__map]))(se
 var_map = var1;
 var2 = var_map->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var_map:ArrayMap[Object, nullable Object]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 654);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 590);
 exit(1);
 }
 var3 = ((long (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__length]))(var2) /* length on <var2:Array[Couple[Object, nullable Object]]>*/;
@@ -5175,40 +4986,43 @@ var8 = 0;
 /* <var8:Int> isa OTHER */
 var11 = 1; /* easy <var8:Int> isa OTHER*/
 if (!var11) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+var_class_name14 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name14);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var14 = var_i >= var8;
-var9 = var14;
+var15 = var_i >= var8;
+var9 = var15;
 goto RET_LABEL10;
 RET_LABEL10:(void)0;
 }
 if (!var9) break;
-var15 = var_map->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var_map:ArrayMap[Object, nullable Object]> */
-if (var15 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 656);
+var16 = var_map->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var_map:ArrayMap[Object, nullable Object]> */
+if (var16 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 592);
 exit(1);
 }
-var16 = ((val* (*)(val*, long))(var15->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var15, var_i) /* [] on <var15:Array[Couple[Object, nullable Object]]>*/;
-var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_collection__Couple__second]))(var16) /* second on <var16:nullable Object(Couple[Object, nullable Object])>*/;
-if (var17 == NULL) {
-var18 = (var_item == NULL);
+var17 = ((val* (*)(val*, long))(var16->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var16, var_i) /* [] on <var16:Array[Couple[Object, nullable Object]]>*/;
+var18 = ((val* (*)(val*))(var17->class->vft[COLOR_abstract_collection__Couple__second]))(var17) /* second on <var17:nullable Object(Couple[Object, nullable Object])>*/;
+if (var18 == NULL) {
+var19 = (var_item == NULL);
 } else {
-var18 = ((short int (*)(val*, val*))(var17->class->vft[COLOR_kernel__Object___61d_61d]))(var17, var_item) /* == on <var17:nullable Object>*/;
+var19 = ((short int (*)(val*, val*))(var18->class->vft[COLOR_kernel__Object___61d_61d]))(var18, var_item) /* == on <var18:nullable Object>*/;
 }
-if (var18){
+if (var19){
 ((void (*)(val*, long))(var_map->class->vft[COLOR_array__ArrayMap__remove_at_index]))(var_map, var_i) /* remove_at_index on <var_map:ArrayMap[Object, nullable Object]>*/;
 goto RET_LABEL;
 } else {
 }
-var19 = 1;
-{ /* Inline kernel#Int#- (var_i,var19) */
-var22 = var_i - var19;
-var20 = var22;
-goto RET_LABEL21;
-RET_LABEL21:(void)0;
+var20 = 1;
+{ /* Inline kernel#Int#- (var_i,var20) */
+var23 = var_i - var20;
+var21 = var23;
+goto RET_LABEL22;
+RET_LABEL22:(void)0;
 }
-var_i = var20;
+var_i = var21;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
@@ -5226,6 +5040,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* var1 /* : ArrayMap[Object, nullable Object] */;
 val* var_map /* var map: ArrayMap[Object, nullable Object] */;
@@ -5240,14 +5055,15 @@ short int var9 /* : Bool */;
 short int var11 /* : Bool */;
 int cltype12;
 int idtype13;
-short int var14 /* : Bool */;
-val* var15 /* : Array[Couple[Object, nullable Object]] */;
-val* var16 /* : nullable Object */;
+const char* var_class_name14;
+short int var15 /* : Bool */;
+val* var16 /* : Array[Couple[Object, nullable Object]] */;
 val* var17 /* : nullable Object */;
-short int var18 /* : Bool */;
-long var19 /* : Int */;
+val* var18 /* : nullable Object */;
+short int var19 /* : Bool */;
 long var20 /* : Int */;
-long var22 /* : Int */;
+long var21 /* : Int */;
+long var23 /* : Int */;
 /* 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];
@@ -5264,7 +5080,9 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 664);
+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/array.nit", 600);
 exit(1);
 }
 var_item = p0;
@@ -5272,7 +5090,8 @@ var1 = ((val* (*)(val*))(self->class->vft[COLOR_array__ArrayMapValues__map]))(se
 var_map = var1;
 var2 = var_map->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var_map:ArrayMap[Object, nullable Object]> */
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 667);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 603);
 exit(1);
 }
 var3 = ((long (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__length]))(var2) /* length on <var2:Array[Couple[Object, nullable Object]]>*/;
@@ -5291,39 +5110,42 @@ var8 = 0;
 /* <var8:Int> isa OTHER */
 var11 = 1; /* easy <var8:Int> isa OTHER*/
 if (!var11) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
+var_class_name14 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name14);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 262);
 exit(1);
 }
-var14 = var_i >= var8;
-var9 = var14;
+var15 = var_i >= var8;
+var9 = var15;
 goto RET_LABEL10;
 RET_LABEL10:(void)0;
 }
 if (!var9) break;
-var15 = var_map->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var_map:ArrayMap[Object, nullable Object]> */
-if (var15 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _items", "lib/standard/collection/array.nit", 669);
+var16 = var_map->attrs[COLOR_array__ArrayMap___items].val; /* _items on <var_map:ArrayMap[Object, nullable Object]> */
+if (var16 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute _items");
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 605);
 exit(1);
 }
-var16 = ((val* (*)(val*, long))(var15->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var15, var_i) /* [] on <var15:Array[Couple[Object, nullable Object]]>*/;
-var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_collection__Couple__second]))(var16) /* second on <var16:nullable Object(Couple[Object, nullable Object])>*/;
-if (var17 == NULL) {
-var18 = (var_item == NULL);
+var17 = ((val* (*)(val*, long))(var16->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var16, var_i) /* [] on <var16:Array[Couple[Object, nullable Object]]>*/;
+var18 = ((val* (*)(val*))(var17->class->vft[COLOR_abstract_collection__Couple__second]))(var17) /* second on <var17:nullable Object(Couple[Object, nullable Object])>*/;
+if (var18 == NULL) {
+var19 = (var_item == NULL);
 } else {
-var18 = ((short int (*)(val*, val*))(var17->class->vft[COLOR_kernel__Object___61d_61d]))(var17, var_item) /* == on <var17:nullable Object>*/;
+var19 = ((short int (*)(val*, val*))(var18->class->vft[COLOR_kernel__Object___61d_61d]))(var18, var_item) /* == on <var18:nullable Object>*/;
 }
-if (var18){
+if (var19){
 ((void (*)(val*, long))(var_map->class->vft[COLOR_array__ArrayMap__remove_at_index]))(var_map, var_i) /* remove_at_index on <var_map:ArrayMap[Object, nullable Object]>*/;
 } else {
 }
-var19 = 1;
-{ /* Inline kernel#Int#- (var_i,var19) */
-var22 = var_i - var19;
-var20 = var22;
-goto RET_LABEL21;
-RET_LABEL21:(void)0;
+var20 = 1;
+{ /* Inline kernel#Int#- (var_i,var20) */
+var23 = var_i - var20;
+var21 = var23;
+goto RET_LABEL22;
+RET_LABEL22:(void)0;
 }
-var_i = var20;
+var_i = var21;
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
@@ -5340,6 +5162,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (map) <p0:ArrayMap[Object, nullable Object]> isa ArrayMap[ArrayMapValues#0, ArrayMapValues#1] */
 /* <p0:ArrayMap[Object, nullable Object]> isa ArrayMap[ArrayMapValues#0, ArrayMapValues#1] */
 type_struct = self->type->resolution_table->types[COLOR_array__ArrayMaparray__ArrayMapValues_FT0array__ArrayMapValues_FT1];
@@ -5351,7 +5174,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 618);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "ArrayMap[ArrayMapValues#0, ArrayMapValues#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 554);
 exit(1);
 }
 self->attrs[COLOR_array__ArrayMapValues___64dmap].val = p0; /* @map on <self:ArrayMapValues[Object, nullable Object]> */
@@ -5474,6 +5299,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 /* Covariant cast for argument 1 (item) <p1:nullable Object> isa NativeArray#0 */
 /* <p1:nullable Object> isa NativeArray#0 */
 type_struct = self->type->resolution_table->types[COLOR_array__NativeArray_FT0];
@@ -5490,7 +5316,9 @@ var = p1->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 712);
+var_class_name = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "NativeArray#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 648);
 exit(1);
 }
 ((struct instance_array__NativeArray*)self)->values[p0]=p1;
@@ -5503,6 +5331,7 @@ int cltype;
 int idtype;
 const struct type* type_struct;
 short int is_nullable;
+const char* var_class_name;
 { /* Inline array#NativeArray#[]= (self,p0,p1) */
 /* Covariant cast for argument 1 (item) <p1:nullable Object> isa NativeArray#0 */
 /* <p1:nullable Object> isa NativeArray#0 */
@@ -5520,7 +5349,9 @@ var = p1->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 712);
+var_class_name = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "NativeArray#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 648);
 exit(1);
 }
 ((struct instance_array__NativeArray*)self)->values[p0]=p1;
@@ -5534,6 +5365,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (dest) <p0:NativeArray[nullable Object]> isa NativeArray[NativeArray#0] */
 /* <p0:NativeArray[nullable Object]> isa NativeArray[NativeArray#0] */
 type_struct = self->type->resolution_table->types[COLOR_array__NativeArrayarray__NativeArray_FT0];
@@ -5545,7 +5377,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 713);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "NativeArray[NativeArray#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 649);
 exit(1);
 }
 memcpy(((struct instance_array__NativeArray*)p0)->values, ((struct instance_array__NativeArray*)self)->values, p1*sizeof(val*));
@@ -5557,6 +5391,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 { /* Inline array#NativeArray#copy_to (self,p0,p1) */
 /* Covariant cast for argument 0 (dest) <p0:NativeArray[nullable Object]> isa NativeArray[NativeArray#0] */
 /* <p0:NativeArray[nullable Object]> isa NativeArray[NativeArray#0] */
@@ -5569,7 +5404,9 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/collection/array.nit", 713);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "NativeArray[NativeArray#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/collection/array.nit", 649);
 exit(1);
 }
 memcpy(((struct instance_array__NativeArray*)p0)->values, ((struct instance_array__NativeArray*)self)->values, p1*sizeof(val*));