Merge: names and concerns in model
[nit.git] / c_src / layout_builders.sep.1.c
index 9c61926..a292f15 100644 (file)
@@ -5,8 +5,9 @@ val* var /* : Map[Object, Int] */;
 val* var1 /* : Map[Object, Int] */;
 var1 = self->attrs[COLOR_layout_builders__Layout___64dids].val; /* @ids on <self:Layout[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @ids", "src/layout_builders.nit", 34);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @ids");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 34);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -27,6 +28,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (ids) <p0:Map[Object, Int]> isa Map[Layout#0, Int] */
 /* <p0:Map[Object, Int]> isa Map[Layout#0, Int] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__Layout_FT0kernel__Int];
@@ -38,8 +40,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 34);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[Layout#0, Int]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 34);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__Layout___64dids].val = p0; /* @ids on <self:Layout[Object]> */
 RET_LABEL:;
@@ -55,8 +59,9 @@ val* var /* : Map[Object, Int] */;
 val* var1 /* : Map[Object, Int] */;
 var1 = self->attrs[COLOR_layout_builders__Layout___64dpos].val; /* @pos on <self:Layout[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @pos", "src/layout_builders.nit", 36);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @pos");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 36);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -77,6 +82,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (pos) <p0:Map[Object, Int]> isa Map[Layout#0, Int] */
 /* <p0:Map[Object, Int]> isa Map[Layout#0, Int] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__Layout_FT0kernel__Int];
@@ -88,8 +94,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 36);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[Layout#0, Int]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 36);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__Layout___64dpos].val = p0; /* @pos on <self:Layout[Object]> */
 RET_LABEL:;
@@ -114,8 +122,9 @@ val* var /* : Map[Object, Int] */;
 val* var1 /* : Map[Object, Int] */;
 var1 = self->attrs[COLOR_layout_builders__PHLayout___64dmasks].val; /* @masks on <self:PHLayout[Object, Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @masks", "src/layout_builders.nit", 44);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @masks");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 44);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -136,6 +145,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (masks) <p0:Map[Object, Int]> isa Map[PHLayout#0, Int] */
 /* <p0:Map[Object, Int]> isa Map[PHLayout#0, Int] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PHLayout_FT0kernel__Int];
@@ -147,8 +157,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 44);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[PHLayout#0, Int]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 44);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__PHLayout___64dmasks].val = p0; /* @masks on <self:PHLayout[Object, Object]> */
 RET_LABEL:;
@@ -164,8 +176,9 @@ val* var /* : Map[Object, Map[Object, Int]] */;
 val* var1 /* : Map[Object, Map[Object, Int]] */;
 var1 = self->attrs[COLOR_layout_builders__PHLayout___64dhashes].val; /* @hashes on <self:PHLayout[Object, Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @hashes", "src/layout_builders.nit", 46);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @hashes");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 46);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -186,6 +199,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (hashes) <p0:Map[Object, Map[Object, Int]]> isa Map[PHLayout#0, Map[PHLayout#1, Int]] */
 /* <p0:Map[Object, Map[Object, Int]]> isa Map[PHLayout#0, Map[PHLayout#1, Int]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PHLayout_FT0abstract_collection__Maplayout_builders__PHLayout_FT1kernel__Int];
@@ -197,8 +211,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 46);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[PHLayout#0, Map[PHLayout#1, Int]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 46);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__PHLayout___64dhashes].val = p0; /* @hashes on <self:PHLayout[Object, Object]> */
 RET_LABEL:;
@@ -225,6 +241,8 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
+const char* var_class_name2;
 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingLayoutBuilder#0] */
 /* <p0:Set[Object]> isa Set[TypingLayoutBuilder#0] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingLayoutBuilder_FT0];
@@ -236,11 +254,15 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 54);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingLayoutBuilder#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 54);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 54);
-exit(1);
+var_class_name2 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "build_layout", var_class_name2);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 54);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -256,8 +278,11 @@ return var;
 /* method layout_builders#TypingLayoutBuilder#poset for (self: TypingLayoutBuilder[Object]): nullable POSet[Object] */
 val* layout_builders__TypingLayoutBuilder__poset(val* self) {
 val* var /* : nullable POSet[Object] */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 57);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "poset", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 57);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -277,6 +302,8 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
+const char* var_class_name2;
 /* Covariant cast for argument 0 (elements) <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[PropertyLayoutBuilder#0]] */
 /* <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[PropertyLayoutBuilder#0]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__PropertyLayoutBuilder_FT0];
@@ -288,11 +315,15 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 64);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[MClass, Set[PropertyLayoutBuilder#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 64);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 64);
-exit(1);
+var_class_name2 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "build_layout", var_class_name2);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 64);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -308,8 +339,11 @@ return var;
 /* method layout_builders#ResolutionLayoutBuilder#build_layout for (self: ResolutionLayoutBuilder, Map[MClassType, Set[MType]]): Layout[MType] */
 val* layout_builders__ResolutionLayoutBuilder__build_layout(val* self, val* p0) {
 val* var /* : Layout[MType] */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 84);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "build_layout", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 84);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -328,8 +362,9 @@ val* var /* : MModule */;
 val* var1 /* : MModule */;
 var1 = self->attrs[COLOR_layout_builders__POSetBuilder___64dmmodule].val; /* @mmodule on <self:POSetBuilder[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 94);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mmodule");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 94);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -373,6 +408,8 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
+const char* var_class_name2;
 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[POSetBuilder#0] */
 /* <p0:Set[Object]> isa Set[POSetBuilder#0] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__POSetBuilder_FT0];
@@ -384,11 +421,15 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 96);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[POSetBuilder#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 96);
+show_backtrace(1);
 }
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 96);
-exit(1);
+var_class_name2 = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "build_poset", var_class_name2);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 96);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -407,6 +448,7 @@ val* var /* : POSet[MType] */;
 short int var1 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 val* var_elements /* var elements: Set[MType] */;
 val* var2 /* : POSet[MType] */;
 val* var_poset /* var poset: POSet[MType] */;
@@ -427,13 +469,14 @@ short int var13 /* : Bool */;
 /* <p0:Set[MType]> isa Set[POSetBuilder#0] */
 var1 = 1; /* easy <p0:Set[MType]> isa Set[POSetBuilder#0]*/
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 104);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[POSetBuilder#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 104);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = NEW_poset__POSet(&type_poset__POSetmodel__MType);
 ((void (*)(val*))(var2->class->vft[COLOR_poset__POSet__init]))(var2) /* init on <var2:POSet[MType]>*/;
-CHECK_NEW_poset__POSet(var2);
 var_poset = var2;
 var3 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_elements) /* iterator on <var_elements:Set[MType]>*/;
 for(;;) {
@@ -489,6 +532,7 @@ val* var /* : POSet[MClass] */;
 short int var1 /* : Bool */;
 int cltype;
 int idtype;
+const char* var_class_name;
 val* var_elements /* var elements: Set[MClass] */;
 val* var2 /* : MModule */;
 val* var3 /* : POSet[MClass] */;
@@ -496,8 +540,10 @@ val* var3 /* : POSet[MClass] */;
 /* <p0:Set[MClass]> isa Set[POSetBuilder#0] */
 var1 = 1; /* easy <p0:Set[MClass]> isa Set[POSetBuilder#0]*/
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 123);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[POSetBuilder#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 123);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__POSetBuilder__mmodule]))(self) /* mmodule on <self:MClassPOSetBuilder>*/;
@@ -522,8 +568,9 @@ val* var /* : MModule */;
 val* var1 /* : MModule */;
 var1 = self->attrs[COLOR_layout_builders__TypingBMizer___64dmmodule].val; /* @mmodule on <self:TypingBMizer[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 132);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mmodule");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 132);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -554,8 +601,9 @@ val* var /* : POSetBuilder[Object] */;
 val* var1 /* : POSetBuilder[Object] */;
 var1 = self->attrs[COLOR_layout_builders__TypingBMizer___64dposet_builder].val; /* @poset_builder on <self:TypingBMizer[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @poset_builder", "src/layout_builders.nit", 133);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @poset_builder");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 133);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -576,6 +624,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (poset_builder) <p0:POSetBuilder[Object]> isa POSetBuilder[TypingBMizer#0] */
 /* <p0:POSetBuilder[Object]> isa POSetBuilder[TypingBMizer#0] */
 type_struct = self->type->resolution_table->types[COLOR_layout_builders__POSetBuilderlayout_builders__TypingBMizer_FT0];
@@ -587,8 +636,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 133);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetBuilder[TypingBMizer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 133);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingBMizer___64dposet_builder].val = p0; /* @poset_builder on <self:TypingBMizer[Object]> */
 RET_LABEL:;
@@ -622,9 +673,10 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (poset_cache) <p0:nullable POSet[Object]> isa nullable POSet[TypingBMizer#0] */
 /* <p0:nullable POSet[Object]> isa nullable POSet[TypingBMizer#0] */
-type_struct = self->type->resolution_table->types[COLOR_poset__POSetlayout_builders__TypingBMizer_FT0];
+type_struct = self->type->resolution_table->types[COLOR_nullable_poset__POSetlayout_builders__TypingBMizer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
 if(p0 == NULL) {
@@ -637,8 +689,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 134);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable POSet[TypingBMizer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 134);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingBMizer___64dposet_cache].val = p0; /* @poset_cache on <self:TypingBMizer[Object]> */
 RET_LABEL:;
@@ -654,6 +708,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_mmodule /* var mmodule: MModule */;
 val* var_poset_builder /* var poset_builder: POSetBuilder[Object] */;
 /* Covariant cast for argument 1 (poset_builder) <p1:POSetBuilder[Object]> isa POSetBuilder[TypingBMizer#0] */
@@ -667,8 +722,10 @@ var = 0;
 var = p1->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 136);
-exit(1);
+var_class_name = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetBuilder[TypingBMizer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 136);
+show_backtrace(1);
 }
 var_mmodule = p0;
 var_poset_builder = p1;
@@ -707,6 +764,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 val* var2 /* : Layout[Object] */;
 val* var_result /* var result: Layout[Object] */;
@@ -735,33 +793,35 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 143);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingBMizer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 143);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = NEW_layout_builders__Layout(self->type->resolution_table->types[COLOR_layout_builders__Layoutlayout_builders__TypingBMizer_FT0]);
 ((void (*)(val*))(var2->class->vft[COLOR_layout_builders__Layout__init]))(var2) /* init on <var2:Layout[Object]>*/;
-CHECK_NEW_layout_builders__Layout(var2);
 var_result = var2;
 var3 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingBMizer_FT0kernel__Int]);
 ((void (*)(val*))(var3->class->vft[COLOR_hash_collection__HashMap__init]))(var3) /* init on <var3:HashMap[Object, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var3);
 var_ids = var3;
 var4 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__poset_builder]))(self) /* poset_builder on <self:TypingBMizer[Object]>*/;
 var5 = ((val* (*)(val*, val*))(var4->class->vft[COLOR_layout_builders__POSetBuilder__build_poset]))(var4, var_elements) /* build_poset on <var4:POSetBuilder[Object]>*/;
 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__poset_cache_61d]))(self, var5) /* poset_cache= on <self:TypingBMizer[Object]>*/;
 var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingBMizer[Object]>*/;
 if (var6 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 148);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 148);
+show_backtrace(1);
 } else {
 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_array__Collection__to_a]))(var6) /* to_a on <var6:nullable POSet[Object]>*/;
 }
 var_lin = var7;
 var8 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingBMizer[Object]>*/;
 if (var8 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 149);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 149);
+show_backtrace(1);
 } else {
 ((void (*)(val*, val*))(var8->class->vft[COLOR_sorter__AbstractSorter__sort]))(var8, var_lin) /* sort on <var8:nullable POSet[Object]>*/;
 }
@@ -801,7 +861,6 @@ val* var /* : MTypePOSetBuilder */;
 var_mmodule = p0;
 var = NEW_layout_builders__MTypePOSetBuilder(&type_layout_builders__MTypePOSetBuilder);
 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MTypePOSetBuilder>*/;
-CHECK_NEW_layout_builders__MTypePOSetBuilder(var);
 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__init]))(self, var_mmodule, var) /* init on <self:MTypeBMizer>*/;
 RET_LABEL:;
 }
@@ -817,7 +876,6 @@ val* var /* : MClassPOSetBuilder */;
 var_mmodule = p0;
 var = NEW_layout_builders__MClassPOSetBuilder(&type_layout_builders__MClassPOSetBuilder);
 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MClassPOSetBuilder>*/;
-CHECK_NEW_layout_builders__MClassPOSetBuilder(var);
 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__init]))(self, var_mmodule, var) /* init on <self:MClassBMizer>*/;
 RET_LABEL:;
 }
@@ -863,11 +921,9 @@ long var16 /* : Int */;
 var_elements = p0;
 var1 = NEW_layout_builders__Layout(&type_layout_builders__Layoutmodel__MType);
 ((void (*)(val*))(var1->class->vft[COLOR_layout_builders__Layout__init]))(var1) /* init on <var1:Layout[MType]>*/;
-CHECK_NEW_layout_builders__Layout(var1);
 var_result = var1;
 var2 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypekernel__Int);
 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[MType, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var2);
 var_ids = var2;
 var3 = 0;
 var_color = var3;
@@ -930,8 +986,9 @@ val* var /* : MModule */;
 val* var1 /* : MModule */;
 var1 = self->attrs[COLOR_layout_builders__MPropertyBMizer___64dmmodule].val; /* @mmodule on <self:MPropertyBMizer[PropertyLayoutElement]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 198);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mmodule");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 198);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -975,6 +1032,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
 val* var2 /* : Layout[PropertyLayoutElement] */;
 val* var_result /* var result: Layout[PropertyLayoutElement] */;
@@ -1007,21 +1065,20 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 202);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[MClass, Set[PropertyLayoutBuilder#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 202);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = NEW_layout_builders__Layout(self->type->resolution_table->types[COLOR_layout_builders__Layoutlayout_builders__MPropertyBMizer_FT0]);
 ((void (*)(val*))(var2->class->vft[COLOR_layout_builders__Layout__init]))(var2) /* init on <var2:Layout[PropertyLayoutElement]>*/;
-CHECK_NEW_layout_builders__Layout(var2);
 var_result = var2;
 var3 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__MPropertyBMizer_FT0kernel__Int]);
 ((void (*)(val*))(var3->class->vft[COLOR_hash_collection__HashMap__init]))(var3) /* init on <var3:HashMap[PropertyLayoutElement, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var3);
 var_ids = var3;
 var4 = NEW_array__Array(&type_array__Arraymodel__MClass);
 ((void (*)(val*))(var4->class->vft[COLOR_array__Array__init]))(var4) /* init on <var4:Array[MClass]>*/;
-CHECK_NEW_array__Array(var4);
 var_lin = var4;
 var5 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__keys]))(var_elements) /* keys on <var_elements:Map[MClass, Set[PropertyLayoutElement]]>*/;
 ((void (*)(val*, val*))(var_lin->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_lin, var5) /* add_all on <var_lin:Array[MClass]>*/;
@@ -1077,8 +1134,9 @@ val* var /* : Set[Object] */;
 val* var1 /* : Set[Object] */;
 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dcore].val; /* @core on <self:TypingColorer[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @core", "src/layout_builders.nit", 225);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @core");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 225);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -1099,6 +1157,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (core) <p0:Set[Object]> isa Set[TypingColorer#0] */
 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
@@ -1110,8 +1169,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 225);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 225);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingColorer___64dcore].val = p0; /* @core on <self:TypingColorer[Object]> */
 RET_LABEL:;
@@ -1127,8 +1188,9 @@ val* var /* : Set[Object] */;
 val* var1 /* : Set[Object] */;
 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dcrown].val; /* @crown on <self:TypingColorer[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @crown", "src/layout_builders.nit", 226);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @crown");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 226);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -1149,6 +1211,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (crown) <p0:Set[Object]> isa Set[TypingColorer#0] */
 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
@@ -1160,8 +1223,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 226);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 226);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingColorer___64dcrown].val = p0; /* @crown on <self:TypingColorer[Object]> */
 RET_LABEL:;
@@ -1177,8 +1242,9 @@ val* var /* : Set[Object] */;
 val* var1 /* : Set[Object] */;
 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dborder].val; /* @border on <self:TypingColorer[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @border", "src/layout_builders.nit", 227);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @border");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 227);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -1199,6 +1265,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (border) <p0:Set[Object]> isa Set[TypingColorer#0] */
 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
@@ -1210,8 +1277,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 227);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 227);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingColorer___64dborder].val = p0; /* @border on <self:TypingColorer[Object]> */
 RET_LABEL:;
@@ -1227,8 +1296,9 @@ val* var /* : Map[Object, Int] */;
 val* var1 /* : Map[Object, Int] */;
 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dcoloration_result].val; /* @coloration_result on <self:TypingColorer[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @coloration_result", "src/layout_builders.nit", 228);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @coloration_result");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 228);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -1249,6 +1319,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (coloration_result) <p0:Map[Object, Int]> isa Map[TypingColorer#0, Int] */
 /* <p0:Map[Object, Int]> isa Map[TypingColorer#0, Int] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__TypingColorer_FT0kernel__Int];
@@ -1260,8 +1331,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 228);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[TypingColorer#0, Int]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 228);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingColorer___64dcoloration_result].val = p0; /* @coloration_result on <self:TypingColorer[Object]> */
 RET_LABEL:;
@@ -1277,8 +1350,9 @@ val* var /* : MModule */;
 val* var1 /* : MModule */;
 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dmmodule].val; /* @mmodule on <self:TypingColorer[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 230);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mmodule");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 230);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -1309,8 +1383,9 @@ val* var /* : POSetBuilder[Object] */;
 val* var1 /* : POSetBuilder[Object] */;
 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dposet_builder].val; /* @poset_builder on <self:TypingColorer[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @poset_builder", "src/layout_builders.nit", 231);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @poset_builder");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 231);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -1331,6 +1406,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (poset_builder) <p0:POSetBuilder[Object]> isa POSetBuilder[TypingColorer#0] */
 /* <p0:POSetBuilder[Object]> isa POSetBuilder[TypingColorer#0] */
 type_struct = self->type->resolution_table->types[COLOR_layout_builders__POSetBuilderlayout_builders__TypingColorer_FT0];
@@ -1342,8 +1418,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 231);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetBuilder[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 231);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingColorer___64dposet_builder].val = p0; /* @poset_builder on <self:TypingColorer[Object]> */
 RET_LABEL:;
@@ -1377,9 +1455,10 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (poset_cache) <p0:nullable POSet[Object]> isa nullable POSet[TypingColorer#0] */
 /* <p0:nullable POSet[Object]> isa nullable POSet[TypingColorer#0] */
-type_struct = self->type->resolution_table->types[COLOR_poset__POSetlayout_builders__TypingColorer_FT0];
+type_struct = self->type->resolution_table->types[COLOR_nullable_poset__POSetlayout_builders__TypingColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
 if(p0 == NULL) {
@@ -1392,8 +1471,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 232);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable POSet[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 232);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingColorer___64dposet_cache].val = p0; /* @poset_cache on <self:TypingColorer[Object]> */
 RET_LABEL:;
@@ -1409,6 +1490,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_mmodule /* var mmodule: MModule */;
 val* var_poset_builder /* var poset_builder: POSetBuilder[Object] */;
 /* Covariant cast for argument 1 (poset_builder) <p1:POSetBuilder[Object]> isa POSetBuilder[TypingColorer#0] */
@@ -1422,8 +1504,10 @@ var = 0;
 var = p1->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 234);
-exit(1);
+var_class_name = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetBuilder[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 234);
+show_backtrace(1);
 }
 var_mmodule = p0;
 var_poset_builder = p1;
@@ -1462,6 +1546,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 val* var2 /* : POSetBuilder[Object] */;
 val* var3 /* : POSet[Object] */;
@@ -1480,8 +1565,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 241);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 241);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__poset_builder]))(self) /* poset_builder on <self:TypingColorer[Object]>*/;
@@ -1489,7 +1576,6 @@ var3 = ((val* (*)(val*, val*))(var2->class->vft[COLOR_layout_builders__POSetBuil
 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__poset_cache_61d]))(self, var3) /* poset_cache= on <self:TypingColorer[Object]>*/;
 var4 = NEW_layout_builders__Layout(self->type->resolution_table->types[COLOR_layout_builders__Layoutlayout_builders__TypingColorer_FT0]);
 ((void (*)(val*))(var4->class->vft[COLOR_layout_builders__Layout__init]))(var4) /* init on <var4:Layout[Object]>*/;
-CHECK_NEW_layout_builders__Layout(var4);
 var_result = var4;
 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__compute_ids]))(self, var_elements) /* compute_ids on <self:TypingColorer[Object]>*/;
 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids_61d]))(var_result, var5) /* ids= on <var_result:Layout[Object]>*/;
@@ -1516,6 +1602,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 val* var2 /* : HashMap[Object, Int] */;
 val* var_ids /* var ids: HashMap[Object, Int] */;
@@ -1537,13 +1624,14 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 250);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 250);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingColorer_FT0kernel__Int]);
 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[Object, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var2);
 var_ids = var2;
 var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__reverse_linearize]))(self, var_elements) /* reverse_linearize on <self:TypingColorer[Object]>*/;
 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__iterator]))(var3) /* iterator on <var3:Array[Object]>*/;
@@ -1580,6 +1668,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 val* var2 /* : Set[Object] */;
 val* var3 /* : Set[Object] */;
@@ -1596,8 +1685,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 258);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 258);
+show_backtrace(1);
 }
 var_elements = p0;
 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__tag_elements]))(self, var_elements) /* tag_elements on <self:TypingColorer[Object]>*/;
@@ -1629,6 +1720,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 long var1 /* : Int */;
 long var_min_color /* var min_color: Int */;
@@ -1657,8 +1749,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 267);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 267);
+show_backtrace(1);
 }
 var_elements = p0;
 var1 = 0;
@@ -1709,50 +1803,52 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 short int var2 /* : Bool */;
 int cltype3;
 int idtype4;
 const struct type* type_struct5;
+const char* var_class_name6;
 val* var_element /* var element: Object */;
 val* var_elements /* var elements: Set[Object] */;
 long var_color /* var color: Int */;
-val* var6 /* : nullable HashMap[Object, Set[Object]] */;
-short int var7 /* : Bool */;
-val* var8 /* : nullable HashMap[Object, Set[Object]] */;
-val* var9 /* : nullable Object */;
-val* var10 /* : Iterator[nullable Object] */;
-short int var11 /* : Bool */;
-val* var12 /* : nullable Object */;
+val* var7 /* : nullable HashMap[Object, Set[Object]] */;
+short int var8 /* : Bool */;
+val* var9 /* : nullable HashMap[Object, Set[Object]] */;
+val* var10 /* : nullable Object */;
+val* var11 /* : Iterator[nullable Object] */;
+short int var12 /* : Bool */;
+val* var13 /* : nullable Object */;
 val* var_st /* var st: Object */;
-short int var13 /* : Bool */;
-val* var14 /* : Map[Object, Int] */;
-short int var15 /* : Bool */;
+short int var14 /* : Bool */;
+val* var15 /* : Map[Object, Int] */;
+short int var16 /* : Bool */;
 short int var_ /* var : Bool */;
-val* var16 /* : Map[Object, Int] */;
-val* var17 /* : nullable Object */;
-short int var18 /* : Bool */;
-short int var20 /* : Bool */;
-long var21 /* : Int */;
-short int var22 /* : Bool */;
-val* var23 /* : nullable POSet[Object] */;
-val* var24 /* : POSetElement[Object] */;
-val* var25 /* : Collection[Object] */;
-val* var26 /* : Iterator[nullable Object] */;
-short int var27 /* : Bool */;
-val* var28 /* : nullable Object */;
-val* var_st29 /* var st: Object */;
-short int var30 /* : Bool */;
-short int var32 /* : Bool */;
-val* var33 /* : Map[Object, Int] */;
-short int var34 /* : Bool */;
-short int var_35 /* var : Bool */;
-val* var36 /* : Map[Object, Int] */;
-val* var37 /* : nullable Object */;
-short int var38 /* : Bool */;
-short int var40 /* : Bool */;
-long var41 /* : Int */;
-short int var42 /* : Bool */;
+val* var17 /* : Map[Object, Int] */;
+val* var18 /* : nullable Object */;
+short int var19 /* : Bool */;
+short int var21 /* : Bool */;
+long var22 /* : Int */;
+short int var23 /* : Bool */;
+val* var24 /* : nullable POSet[Object] */;
+val* var25 /* : POSetElement[Object] */;
+val* var26 /* : Collection[Object] */;
+val* var27 /* : Iterator[nullable Object] */;
+short int var28 /* : Bool */;
+val* var29 /* : nullable Object */;
+val* var_st30 /* var st: Object */;
+short int var31 /* : Bool */;
+short int var33 /* : Bool */;
+val* var34 /* : Map[Object, Int] */;
+short int var35 /* : Bool */;
+short int var_36 /* var : Bool */;
+val* var37 /* : Map[Object, Int] */;
+val* var38 /* : nullable Object */;
+short int var39 /* : Bool */;
+short int var41 /* : Bool */;
+long var42 /* : Int */;
 short int var43 /* : Bool */;
+short int var44 /* : Bool */;
 /* Covariant cast for argument 0 (element) <p0:Object> isa TypingColorer#0 */
 /* <p0:Object> isa TypingColorer#0 */
 type_struct = self->type->resolution_table->types[COLOR_layout_builders__TypingColorer_FT0];
@@ -1764,8 +1860,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 282);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "TypingColorer#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 282);
+show_backtrace(1);
 }
 /* Covariant cast for argument 1 (elements) <p1:Set[Object]> isa Set[TypingColorer#0] */
 /* <p1:Set[Object]> isa Set[TypingColorer#0] */
@@ -1778,116 +1876,121 @@ var2 = 0;
 var2 = p1->type->type_table[cltype3] == idtype4;
 }
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 282);
-exit(1);
+var_class_name6 = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name6);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 282);
+show_backtrace(1);
 }
 var_element = p0;
 var_elements = p1;
 var_color = p2;
-var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
-if (var6 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 284);
-exit(1);
+var7 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
+if (var7 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 284);
+show_backtrace(1);
 } else {
-var7 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var6, var_element) /* has_key on <var6:nullable HashMap[Object, Set[Object]]>*/;
+var8 = ((short int (*)(val*, val*))(var7->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var7, var_element) /* has_key on <var7:nullable HashMap[Object, Set[Object]]>*/;
 }
-if (var7){
-var8 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
-if (var8 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 285);
-exit(1);
+if (var8){
+var9 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
+if (var9 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 285);
+show_backtrace(1);
 } else {
-var9 = ((val* (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var8, var_element) /* [] on <var8:nullable HashMap[Object, Set[Object]]>*/;
+var10 = ((val* (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var9, var_element) /* [] on <var9:nullable HashMap[Object, Set[Object]]>*/;
 }
-var10 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Collection__iterator]))(var9) /* iterator on <var9:nullable Object(Set[Object])>*/;
+var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_collection__Collection__iterator]))(var10) /* iterator on <var10:nullable Object(Set[Object])>*/;
 for(;;) {
-var11 = ((short int (*)(val*))(var10->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var10) /* is_ok on <var10:Iterator[nullable Object]>*/;
-if(!var11) break;
-var12 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_collection__Iterator__item]))(var10) /* item on <var10:Iterator[nullable Object]>*/;
-var_st = var12;
-var14 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
-var15 = ((short int (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var14, var_st) /* has_key on <var14:Map[Object, Int]>*/;
-var_ = var15;
-if (var15){
-var16 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
-var17 = ((val* (*)(val*, val*))(var16->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var16, var_st) /* [] on <var16:Map[Object, Int]>*/;
-{ /* Inline kernel#Int#== (var17,var_color) */
-var20 = (var17 != NULL) && (var17->class == &class_kernel__Int);
-if (var20) {
-var21 = ((struct instance_kernel__Int*)var17)->value; /* autounbox from nullable Object to Int */;
-var20 = (var21 == var_color);
-}
-var18 = var20;
-goto RET_LABEL19;
-RET_LABEL19:(void)0;
-}
-var13 = var18;
+var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var11) /* is_ok on <var11:Iterator[nullable Object]>*/;
+if(!var12) break;
+var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__item]))(var11) /* item on <var11:Iterator[nullable Object]>*/;
+var_st = var13;
+var15 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
+var16 = ((short int (*)(val*, val*))(var15->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var15, var_st) /* has_key on <var15:Map[Object, Int]>*/;
+var_ = var16;
+if (var16){
+var17 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
+var18 = ((val* (*)(val*, val*))(var17->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var17, var_st) /* [] on <var17:Map[Object, Int]>*/;
+{ /* Inline kernel#Int#== (var18,var_color) */
+var21 = (var18 != NULL) && (var18->class == &class_kernel__Int);
+if (var21) {
+var22 = ((struct instance_kernel__Int*)var18)->value; /* autounbox from nullable Object to Int */;
+var21 = (var22 == var_color);
+}
+var19 = var21;
+goto RET_LABEL20;
+RET_LABEL20:(void)0;
+}
+var14 = var19;
 } else {
-var13 = var_;
+var14 = var_;
 }
-if (var13){
-var22 = 0;
-var = var22;
+if (var14){
+var23 = 0;
+var = var23;
 goto RET_LABEL;
 } else {
 }
 CONTINUE_label: (void)0;
-((void (*)(val*))(var10->class->vft[COLOR_abstract_collection__Iterator__next]))(var10) /* next on <var10:Iterator[nullable Object]>*/;
+((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__next]))(var11) /* next on <var11:Iterator[nullable Object]>*/;
 }
 BREAK_label: (void)0;
 } else {
 }
-var23 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
-if (var23 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 289);
-exit(1);
+var24 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
+if (var24 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 289);
+show_backtrace(1);
 } else {
-var24 = ((val* (*)(val*, val*))(var23->class->vft[COLOR_poset__POSet___91d_93d]))(var23, var_element) /* [] on <var23:nullable POSet[Object]>*/;
+var25 = ((val* (*)(val*, val*))(var24->class->vft[COLOR_poset__POSet___91d_93d]))(var24, var_element) /* [] on <var24:nullable POSet[Object]>*/;
 }
-var25 = ((val* (*)(val*))(var24->class->vft[COLOR_poset__POSetElement__greaters]))(var24) /* greaters on <var24:POSetElement[Object]>*/;
-var26 = ((val* (*)(val*))(var25->class->vft[COLOR_abstract_collection__Collection__iterator]))(var25) /* iterator on <var25:Collection[Object]>*/;
+var26 = ((val* (*)(val*))(var25->class->vft[COLOR_poset__POSetElement__greaters]))(var25) /* greaters on <var25:POSetElement[Object]>*/;
+var27 = ((val* (*)(val*))(var26->class->vft[COLOR_abstract_collection__Collection__iterator]))(var26) /* iterator on <var26:Collection[Object]>*/;
 for(;;) {
-var27 = ((short int (*)(val*))(var26->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var26) /* is_ok on <var26:Iterator[nullable Object]>*/;
-if(!var27) break;
-var28 = ((val* (*)(val*))(var26->class->vft[COLOR_abstract_collection__Iterator__item]))(var26) /* item on <var26:Iterator[nullable Object]>*/;
-var_st29 = var28;
-var30 = ((short int (*)(val*, val*))(var_st29->class->vft[COLOR_kernel__Object___61d_61d]))(var_st29, var_element) /* == on <var_st29:Object>*/;
-if (var30){
-goto CONTINUE_label31;
+var28 = ((short int (*)(val*))(var27->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var27) /* is_ok on <var27:Iterator[nullable Object]>*/;
+if(!var28) break;
+var29 = ((val* (*)(val*))(var27->class->vft[COLOR_abstract_collection__Iterator__item]))(var27) /* item on <var27:Iterator[nullable Object]>*/;
+var_st30 = var29;
+var31 = ((short int (*)(val*, val*))(var_st30->class->vft[COLOR_kernel__Object___61d_61d]))(var_st30, var_element) /* == on <var_st30:Object>*/;
+if (var31){
+goto CONTINUE_label32;
 } else {
 }
-var33 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
-var34 = ((short int (*)(val*, val*))(var33->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var33, var_st29) /* has_key on <var33:Map[Object, Int]>*/;
-var_35 = var34;
-if (var34){
-var36 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
-var37 = ((val* (*)(val*, val*))(var36->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var36, var_st29) /* [] on <var36:Map[Object, Int]>*/;
-{ /* Inline kernel#Int#== (var37,var_color) */
-var40 = (var37 != NULL) && (var37->class == &class_kernel__Int);
-if (var40) {
-var41 = ((struct instance_kernel__Int*)var37)->value; /* autounbox from nullable Object to Int */;
-var40 = (var41 == var_color);
-}
-var38 = var40;
-goto RET_LABEL39;
-RET_LABEL39:(void)0;
-}
-var32 = var38;
+var34 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
+var35 = ((short int (*)(val*, val*))(var34->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var34, var_st30) /* has_key on <var34:Map[Object, Int]>*/;
+var_36 = var35;
+if (var35){
+var37 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
+var38 = ((val* (*)(val*, val*))(var37->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var37, var_st30) /* [] on <var37:Map[Object, Int]>*/;
+{ /* Inline kernel#Int#== (var38,var_color) */
+var41 = (var38 != NULL) && (var38->class == &class_kernel__Int);
+if (var41) {
+var42 = ((struct instance_kernel__Int*)var38)->value; /* autounbox from nullable Object to Int */;
+var41 = (var42 == var_color);
+}
+var39 = var41;
+goto RET_LABEL40;
+RET_LABEL40:(void)0;
+}
+var33 = var39;
 } else {
-var32 = var_35;
+var33 = var_36;
 }
-if (var32){
-var42 = 0;
-var = var42;
+if (var33){
+var43 = 0;
+var = var43;
 goto RET_LABEL;
 } else {
 }
-CONTINUE_label31: (void)0;
-((void (*)(val*))(var26->class->vft[COLOR_abstract_collection__Iterator__next]))(var26) /* next on <var26:Iterator[nullable Object]>*/;
+CONTINUE_label32: (void)0;
+((void (*)(val*))(var27->class->vft[COLOR_abstract_collection__Iterator__next]))(var27) /* next on <var27:Iterator[nullable Object]>*/;
 }
-BREAK_label31: (void)0;
-var43 = 1;
-var = var43;
+BREAK_label32: (void)0;
+var44 = 1;
+var = var44;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1907,6 +2010,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 val* var1 /* : Iterator[nullable Object] */;
 short int var2 /* : Bool */;
@@ -1930,29 +2034,31 @@ short int var16 /* : Bool */;
 short int var18 /* : Bool */;
 int cltype19;
 int idtype20;
-short int var21 /* : Bool */;
+const char* var_class_name21;
 short int var22 /* : Bool */;
-val* var23 /* : nullable POSet[Object] */;
-val* var24 /* : POSetElement[Object] */;
-val* var25 /* : Collection[Object] */;
-long var26 /* : Int */;
+short int var23 /* : Bool */;
+val* var24 /* : nullable POSet[Object] */;
+val* var25 /* : POSetElement[Object] */;
+val* var26 /* : Collection[Object] */;
 long var27 /* : Int */;
-short int var28 /* : Bool */;
-short int var30 /* : Bool */;
-int cltype31;
-int idtype32;
-short int var33 /* : Bool */;
-val* var34 /* : Set[Object] */;
-val* var35 /* : nullable POSet[Object] */;
-val* var36 /* : POSetElement[Object] */;
-val* var37 /* : Collection[Object] */;
-val* var38 /* : Set[Object] */;
-short int var39 /* : Bool */;
+long var28 /* : Int */;
+short int var29 /* : Bool */;
+short int var31 /* : Bool */;
+int cltype32;
+int idtype33;
+const char* var_class_name34;
+short int var35 /* : Bool */;
+val* var36 /* : Set[Object] */;
+val* var37 /* : nullable POSet[Object] */;
+val* var38 /* : POSetElement[Object] */;
+val* var39 /* : Collection[Object] */;
 val* var40 /* : Set[Object] */;
-val* var41 /* : nullable POSet[Object] */;
-val* var42 /* : POSetElement[Object] */;
-val* var43 /* : Collection[Object] */;
-val* var44 /* : Set[Object] */;
+short int var41 /* : Bool */;
+val* var42 /* : Set[Object] */;
+val* var43 /* : nullable POSet[Object] */;
+val* var44 /* : POSetElement[Object] */;
+val* var45 /* : Collection[Object] */;
+val* var46 /* : Set[Object] */;
 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingColorer#0] */
 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
@@ -1964,8 +2070,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 296);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 296);
+show_backtrace(1);
 }
 var_elements = p0;
 var1 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_elements) /* iterator on <var_elements:Set[Object]>*/;
@@ -1978,8 +2086,9 @@ var4 = 1;
 var_all_subelements_si = var4;
 var5 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
 if (var5 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 301);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 301);
+show_backtrace(1);
 } else {
 var6 = ((val* (*)(val*, val*))(var5->class->vft[COLOR_poset__POSet___91d_93d]))(var5, var_element) /* [] on <var5:nullable POSet[Object]>*/;
 }
@@ -1992,8 +2101,9 @@ var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__
 var_subelem = var10;
 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
 if (var11 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 302);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 302);
+show_backtrace(1);
 } else {
 var12 = ((val* (*)(val*, val*))(var11->class->vft[COLOR_poset__POSet___91d_93d]))(var11, var_subelem) /* [] on <var11:nullable POSet[Object]>*/;
 }
@@ -2005,17 +2115,19 @@ var15 = 1;
 /* <var15:Int> isa OTHER */
 var18 = 1; /* easy <var15:Int> isa OTHER*/
 if (!var18) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
-exit(1);
+var_class_name21 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name21);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 267);
+show_backtrace(1);
 }
-var21 = var14 > var15;
-var16 = var21;
+var22 = var14 > var15;
+var16 = var22;
 goto RET_LABEL17;
 RET_LABEL17:(void)0;
 }
 if (var16){
-var22 = 0;
-var_all_subelements_si = var22;
+var23 = 0;
+var_all_subelements_si = var23;
 goto BREAK_label;
 } else {
 }
@@ -2023,67 +2135,72 @@ CONTINUE_label: (void)0;
 ((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
 }
 BREAK_label: (void)0;
-var23 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
-if (var23 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 309);
-exit(1);
+var24 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
+if (var24 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 309);
+show_backtrace(1);
 } else {
-var24 = ((val* (*)(val*, val*))(var23->class->vft[COLOR_poset__POSet___91d_93d]))(var23, var_element) /* [] on <var23:nullable POSet[Object]>*/;
-}
-var25 = ((val* (*)(val*))(var24->class->vft[COLOR_poset__POSetElement__direct_greaters]))(var24) /* direct_greaters on <var24:POSetElement[Object]>*/;
-var26 = ((long (*)(val*))(var25->class->vft[COLOR_abstract_collection__Collection__length]))(var25) /* length on <var25:Collection[Object]>*/;
-var27 = 1;
-{ /* Inline kernel#Int#> (var26,var27) */
-/* Covariant cast for argument 0 (i) <var27:Int> isa OTHER */
-/* <var27:Int> isa OTHER */
-var30 = 1; /* easy <var27:Int> isa OTHER*/
-if (!var30) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
-exit(1);
-}
-var33 = var26 > var27;
-var28 = var33;
-goto RET_LABEL29;
-RET_LABEL29:(void)0;
-}
-if (var28){
-var34 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__core]))(self) /* core on <self:TypingColorer[Object]>*/;
-var35 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
-if (var35 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 310);
-exit(1);
+var25 = ((val* (*)(val*, val*))(var24->class->vft[COLOR_poset__POSet___91d_93d]))(var24, var_element) /* [] on <var24:nullable POSet[Object]>*/;
+}
+var26 = ((val* (*)(val*))(var25->class->vft[COLOR_poset__POSetElement__direct_greaters]))(var25) /* direct_greaters on <var25:POSetElement[Object]>*/;
+var27 = ((long (*)(val*))(var26->class->vft[COLOR_abstract_collection__Collection__length]))(var26) /* length on <var26:Collection[Object]>*/;
+var28 = 1;
+{ /* Inline kernel#Int#> (var27,var28) */
+/* Covariant cast for argument 0 (i) <var28:Int> isa OTHER */
+/* <var28:Int> isa OTHER */
+var31 = 1; /* easy <var28:Int> isa OTHER*/
+if (!var31) {
+var_class_name34 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name34);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 267);
+show_backtrace(1);
+}
+var35 = var27 > var28;
+var29 = var35;
+goto RET_LABEL30;
+RET_LABEL30:(void)0;
+}
+if (var29){
+var36 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__core]))(self) /* core on <self:TypingColorer[Object]>*/;
+var37 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
+if (var37 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 310);
+show_backtrace(1);
 } else {
-var36 = ((val* (*)(val*, val*))(var35->class->vft[COLOR_poset__POSet___91d_93d]))(var35, var_element) /* [] on <var35:nullable POSet[Object]>*/;
+var38 = ((val* (*)(val*, val*))(var37->class->vft[COLOR_poset__POSet___91d_93d]))(var37, var_element) /* [] on <var37:nullable POSet[Object]>*/;
 }
-var37 = ((val* (*)(val*))(var36->class->vft[COLOR_poset__POSetElement__greaters]))(var36) /* greaters on <var36:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var34->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var34, var37) /* add_all on <var34:Set[Object]>*/;
+var39 = ((val* (*)(val*))(var38->class->vft[COLOR_poset__POSetElement__greaters]))(var38) /* greaters on <var38:POSetElement[Object]>*/;
+((void (*)(val*, val*))(var36->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var36, var39) /* add_all on <var36:Set[Object]>*/;
 if (var_all_subelements_si){
-var38 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__border]))(self) /* border on <self:TypingColorer[Object]>*/;
-((void (*)(val*, val*))(var38->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var38, var_element) /* add on <var38:Set[Object]>*/;
+var40 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__border]))(self) /* border on <self:TypingColorer[Object]>*/;
+((void (*)(val*, val*))(var40->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var40, var_element) /* add on <var40:Set[Object]>*/;
 } else {
 }
 } else {
-var39 = !var_all_subelements_si;
-if (var39){
-var40 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__core]))(self) /* core on <self:TypingColorer[Object]>*/;
-var41 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
-if (var41 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 315);
-exit(1);
+var41 = !var_all_subelements_si;
+if (var41){
+var42 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__core]))(self) /* core on <self:TypingColorer[Object]>*/;
+var43 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
+if (var43 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 315);
+show_backtrace(1);
 } else {
-var42 = ((val* (*)(val*, val*))(var41->class->vft[COLOR_poset__POSet___91d_93d]))(var41, var_element) /* [] on <var41:nullable POSet[Object]>*/;
+var44 = ((val* (*)(val*, val*))(var43->class->vft[COLOR_poset__POSet___91d_93d]))(var43, var_element) /* [] on <var43:nullable POSet[Object]>*/;
 }
-var43 = ((val* (*)(val*))(var42->class->vft[COLOR_poset__POSetElement__greaters]))(var42) /* greaters on <var42:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var40->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var40, var43) /* add_all on <var40:Set[Object]>*/;
+var45 = ((val* (*)(val*))(var44->class->vft[COLOR_poset__POSetElement__greaters]))(var44) /* greaters on <var44:POSetElement[Object]>*/;
+((void (*)(val*, val*))(var42->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var42, var45) /* add_all on <var42:Set[Object]>*/;
 } else {
-var44 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__crown]))(self) /* crown on <self:TypingColorer[Object]>*/;
-((void (*)(val*, val*))(var44->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var44, var_element) /* add on <var44:Set[Object]>*/;
+var46 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__crown]))(self) /* crown on <self:TypingColorer[Object]>*/;
+((void (*)(val*, val*))(var46->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var46, var_element) /* add on <var46:Set[Object]>*/;
 }
 }
-CONTINUE_label45: (void)0;
+CONTINUE_label47: (void)0;
 ((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
 }
-BREAK_label45: (void)0;
+BREAK_label47: (void)0;
 RET_LABEL:;
 }
 /* method layout_builders#TypingColorer#tag_elements for (self: Object, Set[Object]) */
@@ -2156,7 +2273,6 @@ val* var51 /* : nullable HashMap[Object, Set[Object]] */;
 val* var52 /* : nullable Object */;
 var = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingColorer_FT0hash_collection__HashSetlayout_builders__TypingColorer_FT0]);
 ((void (*)(val*))(var->class->vft[COLOR_hash_collection__HashMap__init]))(var) /* init on <var:HashMap[Object, HashSet[Object]]>*/;
-CHECK_NEW_hash_collection__HashMap(var);
 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph_61d]))(self, var) /* conflicts_graph= on <self:TypingColorer[Object]>*/;
 var1 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__core]))(self) /* core on <self:TypingColorer[Object]>*/;
 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__reverse_linearize]))(self, var1) /* reverse_linearize on <self:TypingColorer[Object]>*/;
@@ -2214,8 +2330,9 @@ var25 = ((val* (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator_
 var_ed1 = var25;
 var26 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
 if (var26 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 340);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 340);
+show_backtrace(1);
 } else {
 var27 = ((short int (*)(val*, val*))(var26->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var26, var_ed1) /* has_key on <var26:nullable HashMap[Object, Set[Object]]>*/;
 }
@@ -2224,10 +2341,10 @@ if (var28){
 var29 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
 var30 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetlayout_builders__TypingColorer_FT0]);
 ((void (*)(val*))(var30->class->vft[COLOR_hash_collection__HashSet__init]))(var30) /* init on <var30:HashSet[Object]>*/;
-CHECK_NEW_hash_collection__HashSet(var30);
 if (var29 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 340);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 340);
+show_backtrace(1);
 } else {
 ((void (*)(val*, val*, val*))(var29->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var29, var_ed1, var30) /* []= on <var29:nullable HashMap[Object, Set[Object]]>*/;
 }
@@ -2241,8 +2358,9 @@ var33 = ((val* (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator_
 var_ed2 = var33;
 var34 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
 if (var34 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 342);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 342);
+show_backtrace(1);
 } else {
 var35 = ((val* (*)(val*, val*))(var34->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var34, var_ed1) /* [] on <var34:nullable HashMap[Object, Set[Object]]>*/;
 }
@@ -2263,8 +2381,9 @@ var40 = ((val* (*)(val*))(var38->class->vft[COLOR_abstract_collection__Iterator_
 var_ed141 = var40;
 var42 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
 if (var42 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 345);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 345);
+show_backtrace(1);
 } else {
 var43 = ((short int (*)(val*, val*))(var42->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var42, var_ed141) /* has_key on <var42:nullable HashMap[Object, Set[Object]]>*/;
 }
@@ -2273,10 +2392,10 @@ if (var44){
 var45 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
 var46 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetlayout_builders__TypingColorer_FT0]);
 ((void (*)(val*))(var46->class->vft[COLOR_hash_collection__HashSet__init]))(var46) /* init on <var46:HashSet[Object]>*/;
-CHECK_NEW_hash_collection__HashSet(var46);
 if (var45 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 345);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 345);
+show_backtrace(1);
 } else {
 ((void (*)(val*, val*, val*))(var45->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var45, var_ed141, var46) /* []= on <var45:nullable HashMap[Object, Set[Object]]>*/;
 }
@@ -2290,8 +2409,9 @@ var49 = ((val* (*)(val*))(var47->class->vft[COLOR_abstract_collection__Iterator_
 var_ed250 = var49;
 var51 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
 if (var51 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 347);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 347);
+show_backtrace(1);
 } else {
 var52 = ((val* (*)(val*, val*))(var51->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var51, var_ed141) /* [] on <var51:nullable HashMap[Object, Set[Object]]>*/;
 }
@@ -2347,9 +2467,10 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (conflicts_graph) <p0:nullable HashMap[Object, Set[Object]]> isa nullable HashMap[TypingColorer#0, Set[TypingColorer#0]] */
 /* <p0:nullable HashMap[Object, Set[Object]]> isa nullable HashMap[TypingColorer#0, Set[TypingColorer#0]] */
-type_struct = self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingColorer_FT0abstract_collection__Setlayout_builders__TypingColorer_FT0];
+type_struct = self->type->resolution_table->types[COLOR_nullable_hash_collection__HashMaplayout_builders__TypingColorer_FT0abstract_collection__Setlayout_builders__TypingColorer_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
 if(p0 == NULL) {
@@ -2362,8 +2483,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 354);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable HashMap[TypingColorer#0, Set[TypingColorer#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 354);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingColorer___64dconflicts_graph].val = p0; /* @conflicts_graph on <self:TypingColorer[Object]> */
 RET_LABEL:;
@@ -2379,8 +2502,9 @@ val* var /* : Map[Object, Array[Object]] */;
 val* var1 /* : Map[Object, Array[Object]] */;
 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dlinear_extensions_cache].val; /* @linear_extensions_cache on <self:TypingColorer[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @linear_extensions_cache", "src/layout_builders.nit", 356);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @linear_extensions_cache");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 356);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -2401,6 +2525,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (linear_extensions_cache) <p0:Map[Object, Array[Object]]> isa Map[TypingColorer#0, Array[TypingColorer#0]] */
 /* <p0:Map[Object, Array[Object]]> isa Map[TypingColorer#0, Array[TypingColorer#0]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__TypingColorer_FT0array__Arraylayout_builders__TypingColorer_FT0];
@@ -2412,8 +2537,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 356);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[TypingColorer#0, Array[TypingColorer#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 356);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingColorer___64dlinear_extensions_cache].val = p0; /* @linear_extensions_cache on <self:TypingColorer[Object]> */
 RET_LABEL:;
@@ -2430,6 +2557,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_element /* var element: Object */;
 val* var2 /* : Map[Object, Array[Object]] */;
 short int var3 /* : Bool */;
@@ -2454,8 +2582,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 359);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "TypingColorer#0", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 359);
+show_backtrace(1);
 }
 var_element = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__linear_extensions_cache]))(self) /* linear_extensions_cache on <self:TypingColorer[Object]>*/;
@@ -2464,12 +2594,12 @@ var4 = !var3;
 if (var4){
 var5 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetlayout_builders__TypingColorer_FT0]);
 ((void (*)(val*))(var5->class->vft[COLOR_hash_collection__HashSet__init]))(var5) /* init on <var5:HashSet[Object]>*/;
-CHECK_NEW_hash_collection__HashSet(var5);
 var_supers = var5;
 var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
 if (var6 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 363);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 363);
+show_backtrace(1);
 } else {
 var7 = ((val* (*)(val*, val*))(var6->class->vft[COLOR_poset__POSet___91d_93d]))(var6, var_element) /* [] on <var6:nullable POSet[Object]>*/;
 }
@@ -2503,6 +2633,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 val* var2 /* : Array[Object] */;
 val* var_lin /* var lin: Array[Object] */;
@@ -2518,19 +2649,21 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 369);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 369);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = NEW_array__Array(self->type->resolution_table->types[COLOR_array__Arraylayout_builders__TypingColorer_FT0]);
 ((void (*)(val*))(var2->class->vft[COLOR_array__Array__init]))(var2) /* init on <var2:Array[Object]>*/;
-CHECK_NEW_array__Array(var2);
 var_lin = var2;
 ((void (*)(val*, val*))(var_lin->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_lin, var_elements) /* add_all on <var_lin:Array[Object]>*/;
 var3 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
 if (var3 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 372);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 372);
+show_backtrace(1);
 } else {
 ((void (*)(val*, val*))(var3->class->vft[COLOR_sorter__AbstractSorter__sort]))(var3, var_lin) /* sort on <var3:nullable POSet[Object]>*/;
 }
@@ -2555,6 +2688,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 val* var2 /* : Array[Object] */;
 val* var3 /* : Array[nullable Object] */;
@@ -2569,8 +2703,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 375);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 375);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__reverse_linearize]))(self, var_elements) /* reverse_linearize on <self:TypingColorer[Object]>*/;
@@ -2596,7 +2732,6 @@ val* var /* : MTypePOSetBuilder */;
 var_mmodule = p0;
 var = NEW_layout_builders__MTypePOSetBuilder(&type_layout_builders__MTypePOSetBuilder);
 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MTypePOSetBuilder>*/;
-CHECK_NEW_layout_builders__MTypePOSetBuilder(var);
 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__init]))(self, var_mmodule, var) /* init on <self:MTypeColorer>*/;
 RET_LABEL:;
 }
@@ -2612,7 +2747,6 @@ val* var /* : MClassPOSetBuilder */;
 var_mmodule = p0;
 var = NEW_layout_builders__MClassPOSetBuilder(&type_layout_builders__MClassPOSetBuilder);
 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MClassPOSetBuilder>*/;
-CHECK_NEW_layout_builders__MClassPOSetBuilder(var);
 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__init]))(self, var_mmodule, var) /* init on <self:MClassColorer>*/;
 RET_LABEL:;
 }
@@ -2627,8 +2761,9 @@ val* var /* : MModule */;
 val* var1 /* : MModule */;
 var1 = self->attrs[COLOR_layout_builders__MPropertyColorer___64dmmodule].val; /* @mmodule on <self:MPropertyColorer[PropertyLayoutElement]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 394);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mmodule");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 394);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -2659,8 +2794,9 @@ val* var /* : MClassColorer */;
 val* var1 /* : MClassColorer */;
 var1 = self->attrs[COLOR_layout_builders__MPropertyColorer___64dclass_colorer].val; /* @class_colorer on <self:MPropertyColorer[PropertyLayoutElement]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @class_colorer", "src/layout_builders.nit", 395);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @class_colorer");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 395);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -2691,8 +2827,9 @@ val* var /* : Map[PropertyLayoutElement, Int] */;
 val* var1 /* : Map[PropertyLayoutElement, Int] */;
 var1 = self->attrs[COLOR_layout_builders__MPropertyColorer___64dcoloration_result].val; /* @coloration_result on <self:MPropertyColorer[PropertyLayoutElement]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @coloration_result", "src/layout_builders.nit", 396);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @coloration_result");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 396);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -2713,6 +2850,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (coloration_result) <p0:Map[PropertyLayoutElement, Int]> isa Map[MPropertyColorer#0, Int] */
 /* <p0:Map[PropertyLayoutElement, Int]> isa Map[MPropertyColorer#0, Int] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__MPropertyColorer_FT0kernel__Int];
@@ -2724,8 +2862,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 396);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[MPropertyColorer#0, Int]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 396);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__MPropertyColorer___64dcoloration_result].val = p0; /* @coloration_result on <self:MPropertyColorer[PropertyLayoutElement]> */
 RET_LABEL:;
@@ -2757,6 +2897,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
 val* var2 /* : Layout[PropertyLayoutElement] */;
 val* var_result /* var result: Layout[PropertyLayoutElement] */;
@@ -2772,13 +2913,14 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 403);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[MClass, Set[MPropertyColorer#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 403);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = NEW_layout_builders__Layout(self->type->resolution_table->types[COLOR_layout_builders__Layoutlayout_builders__MPropertyColorer_FT0]);
 ((void (*)(val*))(var2->class->vft[COLOR_layout_builders__Layout__init]))(var2) /* init on <var2:Layout[PropertyLayoutElement]>*/;
-CHECK_NEW_layout_builders__Layout(var2);
 var_result = var2;
 var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__colorize]))(self, var_elements) /* colorize on <self:MPropertyColorer[PropertyLayoutElement]>*/;
 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__pos_61d]))(var_result, var3) /* pos= on <var_result:Layout[PropertyLayoutElement]>*/;
@@ -2803,6 +2945,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
 val* var2 /* : Map[PropertyLayoutElement, Int] */;
 /* Covariant cast for argument 0 (elements) <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
@@ -2816,8 +2959,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 410);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[MClass, Set[MPropertyColorer#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 410);
+show_backtrace(1);
 }
 var_elements = p0;
 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__colorize_core]))(self, var_elements) /* colorize_core on <self:MPropertyColorer[PropertyLayoutElement]>*/;
@@ -2843,6 +2988,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
 long var1 /* : Int */;
 long var_min_color /* var min_color: Int */;
@@ -2876,8 +3022,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 416);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[MClass, Set[MPropertyColorer#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 416);
+show_backtrace(1);
 }
 var_elements = p0;
 var1 = 0;
@@ -2899,8 +3047,9 @@ var_color = var10;
 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__class_colorer]))(self) /* class_colorer on <self:MPropertyColorer[PropertyLayoutElement]>*/;
 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(var11) /* conflicts_graph on <var11:MClassColorer>*/;
 if (var12 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 424);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 424);
+show_backtrace(1);
 } else {
 var13 = ((short int (*)(val*, val*))(var12->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var12, var_mclass) /* has_key on <var12:nullable HashMap[Object, Set[Object]](nullable HashMap[MClass, Set[MClass]])>*/;
 }
@@ -2908,8 +3057,9 @@ if (var13){
 var14 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__class_colorer]))(self) /* class_colorer on <self:MPropertyColorer[PropertyLayoutElement]>*/;
 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(var14) /* conflicts_graph on <var14:MClassColorer>*/;
 if (var15 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 425);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 425);
+show_backtrace(1);
 } else {
 var16 = ((val* (*)(val*, val*))(var15->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var15, var_mclass) /* [] on <var15:nullable HashMap[Object, Set[Object]](nullable HashMap[MClass, Set[MClass]])>*/;
 }
@@ -2936,6 +3086,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
 val* var1 /* : MClassColorer */;
 val* var2 /* : Set[Object] */;
@@ -2965,8 +3116,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 431);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[MClass, Set[MPropertyColorer#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 431);
+show_backtrace(1);
 }
 var_elements = p0;
 var1 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__class_colorer]))(self) /* class_colorer on <self:MPropertyColorer[PropertyLayoutElement]>*/;
@@ -2979,7 +3132,6 @@ var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__i
 var_mclass = var5;
 var6 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
 ((void (*)(val*))(var6->class->vft[COLOR_hash_collection__HashSet__init]))(var6) /* init on <var6:HashSet[MClass]>*/;
-CHECK_NEW_hash_collection__HashSet(var6);
 var_parents = var6;
 var7 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__mmodule]))(self) /* mmodule on <self:MPropertyColorer[PropertyLayoutElement]>*/;
 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var7) /* flatten_mclass_hierarchy on <var7:MModule>*/;
@@ -3012,6 +3164,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Collection[PropertyLayoutElement] */;
 long var_start_color /* var start_color: Int */;
 val* var1 /* : Iterator[nullable Object] */;
@@ -3036,8 +3189,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 442);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[MPropertyColorer#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 442);
+show_backtrace(1);
 }
 var_elements = p0;
 var_start_color = p1;
@@ -3082,6 +3237,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 long var_min_color /* var min_color: Int */;
 val* var_mclasses /* var mclasses: Collection[MClass] */;
 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
@@ -3105,10 +3261,11 @@ short int var14 /* : Bool */;
 short int var16 /* : Bool */;
 int cltype17;
 int idtype18;
-short int var19 /* : Bool */;
-long var20 /* : Int */;
+const char* var_class_name19;
+short int var20 /* : Bool */;
 long var21 /* : Int */;
-long var23 /* : Int */;
+long var22 /* : Int */;
+long var24 /* : Int */;
 /* Covariant cast for argument 2 (elements) <p2:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
 /* <p2:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__MPropertyColorer_FT0];
@@ -3120,8 +3277,10 @@ var1 = 0;
 var1 = p2->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 451);
-exit(1);
+var_class_name = p2 == NULL ? "null" : p2->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[MClass, Set[MPropertyColorer#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 451);
+show_backtrace(1);
 }
 var_min_color = p0;
 var_mclasses = p1;
@@ -3153,23 +3312,25 @@ var_color = var13;
 /* <var_max_color:Int> isa OTHER */
 var16 = 1; /* easy <var_max_color:Int> isa OTHER*/
 if (!var16) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
-exit(1);
+var_class_name19 = type_kernel__Int.name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name19);
+fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 266);
+show_backtrace(1);
 }
-var19 = var_color >= var_max_color;
-var14 = var19;
+var20 = var_color >= var_max_color;
+var14 = var20;
 goto RET_LABEL15;
 RET_LABEL15:(void)0;
 }
 if (var14){
-var20 = 1;
-{ /* Inline kernel#Int#+ (var_color,var20) */
-var23 = var_color + var20;
-var21 = var23;
-goto RET_LABEL22;
-RET_LABEL22:(void)0;
-}
-var_max_color = var21;
+var21 = 1;
+{ /* Inline kernel#Int#+ (var_color,var21) */
+var24 = var_color + var21;
+var22 = var24;
+goto RET_LABEL23;
+RET_LABEL23:(void)0;
+}
+var_max_color = var22;
 } else {
 }
 } else {
@@ -3178,10 +3339,10 @@ CONTINUE_label: (void)0;
 ((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
 }
 BREAK_label: (void)0;
-CONTINUE_label24: (void)0;
+CONTINUE_label25: (void)0;
 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
 }
-BREAK_label24: (void)0;
+BREAK_label25: (void)0;
 var = var_max_color;
 goto RET_LABEL;
 RET_LABEL:;
@@ -3202,8 +3363,9 @@ val* var /* : Map[MType, Int] */;
 val* var1 /* : Map[MType, Int] */;
 var1 = self->attrs[COLOR_layout_builders__ResolutionColorer___64dcoloration_result].val; /* @coloration_result on <self:ResolutionColorer> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @coloration_result", "src/layout_builders.nit", 471);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @coloration_result");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 471);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -3249,7 +3411,6 @@ var_elements = p0;
 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__build_conflicts_graph]))(self, var_elements) /* build_conflicts_graph on <self:ResolutionColorer>*/;
 var1 = NEW_layout_builders__Layout(&type_layout_builders__Layoutmodel__MType);
 ((void (*)(val*))(var1->class->vft[COLOR_layout_builders__Layout__init]))(var1) /* init on <var1:Layout[MType]>*/;
-CHECK_NEW_layout_builders__Layout(var1);
 var_result = var1;
 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__compute_ids]))(self, var_elements) /* compute_ids on <self:ResolutionColorer>*/;
 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids_61d]))(var_result, var2) /* ids= on <var_result:Layout[MType]>*/;
@@ -3295,7 +3456,6 @@ long var15 /* : Int */;
 var_elements = p0;
 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypekernel__Int);
 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MType, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var1);
 var_ids = var1;
 var2 = 0;
 var_color = var2;
@@ -3597,8 +3757,9 @@ val* var /* : Map[MType, Set[MType]] */;
 val* var1 /* : Map[MType, Set[MType]] */;
 var1 = self->attrs[COLOR_layout_builders__ResolutionColorer___64dconflicts_graph].val; /* @conflicts_graph on <self:ResolutionColorer> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @conflicts_graph", "src/layout_builders.nit", 536);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @conflicts_graph");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 536);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -3656,7 +3817,6 @@ if (var3){
 var4 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
 var5 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
 ((void (*)(val*))(var5->class->vft[COLOR_hash_collection__HashSet__init]))(var5) /* init on <var5:HashSet[MType]>*/;
-CHECK_NEW_hash_collection__HashSet(var5);
 ((void (*)(val*, val*, val*))(var4->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var4, var_mtype, var5) /* []= on <var4:Map[MType, Set[MType]]>*/;
 } else {
 }
@@ -3670,7 +3830,6 @@ if (var10){
 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
 var12 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
 ((void (*)(val*))(var12->class->vft[COLOR_hash_collection__HashSet__init]))(var12) /* init on <var12:HashSet[MType]>*/;
-CHECK_NEW_hash_collection__HashSet(var12);
 ((void (*)(val*, val*, val*))(var11->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var11, var_otype, var12) /* []= on <var11:Map[MType, Set[MType]]>*/;
 } else {
 }
@@ -3690,8 +3849,9 @@ val* var /* : PHOperator */;
 val* var1 /* : PHOperator */;
 var1 = self->attrs[COLOR_layout_builders__PerfectHasher___64doperator].val; /* @operator on <self:PerfectHasher[Object, Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @operator", "src/layout_builders.nit", 552);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @operator");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 552);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -3732,22 +3892,24 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 short int var2 /* : Bool */;
 int cltype3;
 int idtype4;
 const struct type* type_struct5;
+const char* var_class_name6;
 val* var_conflicts /* var conflicts: Map[Object, Set[Object]] */;
 val* var_ids /* var ids: Map[Object, Int] */;
-val* var6 /* : HashMap[Object, Int] */;
+val* var7 /* : HashMap[Object, Int] */;
 val* var_masks /* var masks: HashMap[Object, Int] */;
-val* var7 /* : MapIterator[Object, nullable Object] */;
-short int var8 /* : Bool */;
-val* var9 /* : Object */;
+val* var8 /* : MapIterator[Object, nullable Object] */;
+short int var9 /* : Bool */;
+val* var10 /* : Object */;
 val* var_mclasstype /* var mclasstype: Object */;
-val* var10 /* : nullable Object */;
+val* var11 /* : nullable Object */;
 val* var_mtypes /* var mtypes: Set[Object] */;
-long var11 /* : Int */;
-val* var12 /* : nullable Object */;
+long var12 /* : Int */;
+val* var13 /* : nullable Object */;
 /* Covariant cast for argument 0 (conflicts) <p0:Map[Object, Set[Object]]> isa Map[PerfectHasher#0, Set[PerfectHasher#1]] */
 /* <p0:Map[Object, Set[Object]]> isa Map[PerfectHasher#0, Set[PerfectHasher#1]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT0abstract_collection__Setlayout_builders__PerfectHasher_FT1];
@@ -3759,8 +3921,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 556);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[PerfectHasher#0, Set[PerfectHasher#1]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 556);
+show_backtrace(1);
 }
 /* Covariant cast for argument 1 (ids) <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
 /* <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
@@ -3773,28 +3937,29 @@ var2 = 0;
 var2 = p1->type->type_table[cltype3] == idtype4;
 }
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 556);
-exit(1);
+var_class_name6 = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[PerfectHasher#1, Int]", var_class_name6);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 556);
+show_backtrace(1);
 }
 var_conflicts = p0;
 var_ids = p1;
-var6 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__PerfectHasher_FT0kernel__Int]);
-((void (*)(val*))(var6->class->vft[COLOR_hash_collection__HashMap__init]))(var6) /* init on <var6:HashMap[Object, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var6);
-var_masks = var6;
-var7 = ((val* (*)(val*))(var_conflicts->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_conflicts) /* iterator on <var_conflicts:Map[Object, Set[Object]]>*/;
+var7 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__PerfectHasher_FT0kernel__Int]);
+((void (*)(val*))(var7->class->vft[COLOR_hash_collection__HashMap__init]))(var7) /* init on <var7:HashMap[Object, Int]>*/;
+var_masks = var7;
+var8 = ((val* (*)(val*))(var_conflicts->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_conflicts) /* iterator on <var_conflicts:Map[Object, Set[Object]]>*/;
 for(;;) {
-var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var7) /* is_ok on <var7:MapIterator[Object, nullable Object]>*/;
-if(!var8) break;
-var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapIterator__key]))(var7) /* key on <var7:MapIterator[Object, nullable Object]>*/;
-var_mclasstype = var9;
-var10 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapIterator__item]))(var7) /* item on <var7:MapIterator[Object, nullable Object]>*/;
-var_mtypes = var10;
-var11 = ((long (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__compute_mask]))(self, var_mtypes, var_ids) /* compute_mask on <self:PerfectHasher[Object, Object]>*/;
-var12 = BOX_kernel__Int(var11); /* autobox from Int to nullable Object */
-((void (*)(val*, val*, val*))(var_masks->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_masks, var_mclasstype, var12) /* []= on <var_masks:HashMap[Object, Int]>*/;
+var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var8) /* is_ok on <var8:MapIterator[Object, nullable Object]>*/;
+if(!var9) break;
+var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__MapIterator__key]))(var8) /* key on <var8:MapIterator[Object, nullable Object]>*/;
+var_mclasstype = var10;
+var11 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__MapIterator__item]))(var8) /* item on <var8:MapIterator[Object, nullable Object]>*/;
+var_mtypes = var11;
+var12 = ((long (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__compute_mask]))(self, var_mtypes, var_ids) /* compute_mask on <self:PerfectHasher[Object, Object]>*/;
+var13 = BOX_kernel__Int(var12); /* autobox from Int to nullable Object */
+((void (*)(val*, val*, val*))(var_masks->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_masks, var_mclasstype, var13) /* []= on <var_masks:HashMap[Object, Int]>*/;
 CONTINUE_label: (void)0;
-((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapIterator__next]))(var7) /* next on <var7:MapIterator[Object, nullable Object]>*/;
+((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__MapIterator__next]))(var8) /* next on <var8:MapIterator[Object, nullable Object]>*/;
 }
 BREAK_label: (void)0;
 var = var_masks;
@@ -3818,35 +3983,37 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 short int var2 /* : Bool */;
 int cltype3;
 int idtype4;
 const struct type* type_struct5;
+const char* var_class_name6;
 val* var_mtypes /* var mtypes: Set[Object] */;
 val* var_ids /* var ids: Map[Object, Int] */;
-long var6 /* : Int */;
+long var7 /* : Int */;
 long var_mask /* var mask: Int */;
-val* var7 /* : List[Int] */;
+val* var8 /* : List[Int] */;
 val* var_used /* var used: List[Int] */;
-val* var8 /* : Iterator[nullable Object] */;
-short int var9 /* : Bool */;
-val* var10 /* : nullable Object */;
+val* var9 /* : Iterator[nullable Object] */;
+short int var10 /* : Bool */;
+val* var11 /* : nullable Object */;
 val* var_mtype /* var mtype: Object */;
-val* var11 /* : PHOperator */;
-val* var12 /* : nullable Object */;
-long var13 /* : Int */;
+val* var12 /* : PHOperator */;
+val* var13 /* : nullable Object */;
 long var14 /* : Int */;
+long var15 /* : Int */;
 long var_res /* var res: Int */;
-short int var15 /* : Bool */;
-val* var16 /* : nullable Object */;
+short int var16 /* : Bool */;
 val* var17 /* : nullable Object */;
-long var18 /* : Int */;
+val* var18 /* : nullable Object */;
 long var19 /* : Int */;
-short int var20 /* : Bool */;
-short int var22 /* : Bool */;
-long var24 /* : Int */;
+long var20 /* : Int */;
+short int var21 /* : Bool */;
+short int var23 /* : Bool */;
 long var25 /* : Int */;
-long var27 /* : Int */;
+long var26 /* : Int */;
+long var28 /* : Int */;
 /* Covariant cast for argument 0 (mtypes) <p0:Set[Object]> isa Set[PerfectHasher#1] */
 /* <p0:Set[Object]> isa Set[PerfectHasher#1] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__PerfectHasher_FT1];
@@ -3858,8 +4025,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 565);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[PerfectHasher#1]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 565);
+show_backtrace(1);
 }
 /* Covariant cast for argument 1 (ids) <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
 /* <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
@@ -3872,64 +4041,65 @@ var2 = 0;
 var2 = p1->type->type_table[cltype3] == idtype4;
 }
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 565);
-exit(1);
+var_class_name6 = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[PerfectHasher#1, Int]", var_class_name6);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 565);
+show_backtrace(1);
 }
 var_mtypes = p0;
 var_ids = p1;
-var6 = 0;
-var_mask = var6;
+var7 = 0;
+var_mask = var7;
 for(;;) {
-var7 = NEW_list__List(&type_list__Listkernel__Int);
-((void (*)(val*))(var7->class->vft[COLOR_list__List__init]))(var7) /* init on <var7:List[Int]>*/;
-CHECK_NEW_list__List(var7);
-var_used = var7;
-var8 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:Set[Object]>*/;
+var8 = NEW_list__List(&type_list__Listkernel__Int);
+((void (*)(val*))(var8->class->vft[COLOR_list__List__init]))(var8) /* init on <var8:List[Int]>*/;
+var_used = var8;
+var9 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:Set[Object]>*/;
 for(;;) {
-var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var8) /* is_ok on <var8:Iterator[nullable Object]>*/;
-if(!var9) break;
-var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__item]))(var8) /* item on <var8:Iterator[nullable Object]>*/;
-var_mtype = var10;
-var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__operator]))(self) /* operator on <self:PerfectHasher[Object, Object]>*/;
-var12 = ((val* (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_ids, var_mtype) /* [] on <var_ids:Map[Object, Int]>*/;
-var14 = ((struct instance_kernel__Int*)var12)->value; /* autounbox from nullable Object to Int */;
-var13 = ((long (*)(val*, long, long))(var11->class->vft[COLOR_layout_builders__PHOperator__op]))(var11, var_mask, var14) /* op on <var11:PHOperator>*/;
-var_res = var13;
-var16 = BOX_kernel__Int(var_res); /* autobox from Int to nullable Object */
-var15 = ((short int (*)(val*, val*))(var_used->class->vft[COLOR_abstract_collection__Collection__has]))(var_used, var16) /* has on <var_used:List[Int]>*/;
-if (var15){
+var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
+if(!var10) break;
+var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
+var_mtype = var11;
+var12 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__operator]))(self) /* operator on <self:PerfectHasher[Object, Object]>*/;
+var13 = ((val* (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_ids, var_mtype) /* [] on <var_ids:Map[Object, Int]>*/;
+var15 = ((struct instance_kernel__Int*)var13)->value; /* autounbox from nullable Object to Int */;
+var14 = ((long (*)(val*, long, long))(var12->class->vft[COLOR_layout_builders__PHOperator__op]))(var12, var_mask, var15) /* op on <var12:PHOperator>*/;
+var_res = var14;
+var17 = BOX_kernel__Int(var_res); /* autobox from Int to nullable Object */
+var16 = ((short int (*)(val*, val*))(var_used->class->vft[COLOR_abstract_collection__Collection__has]))(var_used, var17) /* has on <var_used:List[Int]>*/;
+if (var16){
 goto BREAK_label;
 } else {
-var17 = BOX_kernel__Int(var_res); /* autobox from Int to nullable Object */
-((void (*)(val*, val*))(var_used->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_used, var17) /* add on <var_used:List[Int]>*/;
+var18 = BOX_kernel__Int(var_res); /* autobox from Int to nullable Object */
+((void (*)(val*, val*))(var_used->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_used, var18) /* add on <var_used:List[Int]>*/;
 }
 CONTINUE_label: (void)0;
-((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
+((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
 }
 BREAK_label: (void)0;
-var18 = ((long (*)(val*))(var_used->class->vft[COLOR_abstract_collection__Collection__length]))(var_used) /* length on <var_used:List[Int]>*/;
-var19 = ((long (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__length]))(var_mtypes) /* length on <var_mtypes:Set[Object]>*/;
-{ /* Inline kernel#Int#== (var18,var19) */
-var22 = var18 == var19;
-var20 = var22;
-goto RET_LABEL21;
-RET_LABEL21:(void)0;
-}
-if (var20){
-goto BREAK_label23;
+var19 = ((long (*)(val*))(var_used->class->vft[COLOR_abstract_collection__Collection__length]))(var_used) /* length on <var_used:List[Int]>*/;
+var20 = ((long (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__length]))(var_mtypes) /* length on <var_mtypes:Set[Object]>*/;
+{ /* Inline kernel#Int#== (var19,var20) */
+var23 = var19 == var20;
+var21 = var23;
+goto RET_LABEL22;
+RET_LABEL22:(void)0;
+}
+if (var21){
+goto BREAK_label24;
 } else {
 }
-var24 = 1;
-{ /* Inline kernel#Int#+ (var_mask,var24) */
-var27 = var_mask + var24;
-var25 = var27;
-goto RET_LABEL26;
-RET_LABEL26:(void)0;
+var25 = 1;
+{ /* Inline kernel#Int#+ (var_mask,var25) */
+var28 = var_mask + var25;
+var26 = var28;
+goto RET_LABEL27;
+RET_LABEL27:(void)0;
 }
-var_mask = var25;
-CONTINUE_label23: (void)0;
+var_mask = var26;
+CONTINUE_label24: (void)0;
 }
-BREAK_label23: (void)0;
+BREAK_label24: (void)0;
 var = var_mask;
 goto RET_LABEL;
 RET_LABEL:;
@@ -3951,39 +4121,42 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 short int var2 /* : Bool */;
 int cltype3;
 int idtype4;
 const struct type* type_struct5;
-short int var6 /* : Bool */;
-int cltype7;
-int idtype8;
-const struct type* type_struct9;
+const char* var_class_name6;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+const struct type* type_struct10;
+const char* var_class_name11;
 val* var_elements /* var elements: Map[Object, Set[Object]] */;
 val* var_ids /* var ids: Map[Object, Int] */;
 val* var_masks /* var masks: Map[Object, Int] */;
-val* var10 /* : HashMap[Object, Map[Object, Int]] */;
+val* var12 /* : HashMap[Object, Map[Object, Int]] */;
 val* var_hashes /* var hashes: HashMap[Object, Map[Object, Int]] */;
-val* var11 /* : MapIterator[Object, nullable Object] */;
-short int var12 /* : Bool */;
-val* var13 /* : Object */;
+val* var13 /* : MapIterator[Object, nullable Object] */;
+short int var14 /* : Bool */;
+val* var15 /* : Object */;
 val* var_mclasstype /* var mclasstype: Object */;
-val* var14 /* : nullable Object */;
+val* var16 /* : nullable Object */;
 val* var_mtypes /* var mtypes: Set[Object] */;
-val* var15 /* : nullable Object */;
-long var16 /* : Int */;
+val* var17 /* : nullable Object */;
+long var18 /* : Int */;
 long var_mask /* var mask: Int */;
-val* var17 /* : HashMap[Object, Int] */;
+val* var19 /* : HashMap[Object, Int] */;
 val* var_inhashes /* var inhashes: HashMap[Object, Int] */;
-val* var18 /* : Iterator[nullable Object] */;
-short int var19 /* : Bool */;
-val* var20 /* : nullable Object */;
-val* var_mtype /* var mtype: Object */;
-val* var21 /* : PHOperator */;
+val* var20 /* : Iterator[nullable Object] */;
+short int var21 /* : Bool */;
 val* var22 /* : nullable Object */;
-long var23 /* : Int */;
-long var24 /* : Int */;
-val* var25 /* : nullable Object */;
+val* var_mtype /* var mtype: Object */;
+val* var23 /* : PHOperator */;
+val* var24 /* : nullable Object */;
+long var25 /* : Int */;
+long var26 /* : Int */;
+val* var27 /* : nullable Object */;
 /* Covariant cast for argument 0 (elements) <p0:Map[Object, Set[Object]]> isa Map[PerfectHasher#0, Set[PerfectHasher#1]] */
 /* <p0:Map[Object, Set[Object]]> isa Map[PerfectHasher#0, Set[PerfectHasher#1]] */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT0abstract_collection__Setlayout_builders__PerfectHasher_FT1];
@@ -3995,8 +4168,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 583);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[PerfectHasher#0, Set[PerfectHasher#1]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 583);
+show_backtrace(1);
 }
 /* Covariant cast for argument 1 (ids) <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
 /* <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
@@ -4009,66 +4184,68 @@ var2 = 0;
 var2 = p1->type->type_table[cltype3] == idtype4;
 }
 if (!var2) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 583);
-exit(1);
+var_class_name6 = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[PerfectHasher#1, Int]", var_class_name6);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 583);
+show_backtrace(1);
 }
 /* Covariant cast for argument 2 (masks) <p2:Map[Object, Int]> isa Map[PerfectHasher#0, Int] */
 /* <p2:Map[Object, Int]> isa Map[PerfectHasher#0, Int] */
-type_struct9 = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT0kernel__Int];
-cltype7 = type_struct9->color;
-idtype8 = type_struct9->id;
-if(cltype7 >= p2->type->table_size) {
-var6 = 0;
+type_struct10 = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT0kernel__Int];
+cltype8 = type_struct10->color;
+idtype9 = type_struct10->id;
+if(cltype8 >= p2->type->table_size) {
+var7 = 0;
 } else {
-var6 = p2->type->type_table[cltype7] == idtype8;
+var7 = p2->type->type_table[cltype8] == idtype9;
 }
-if (!var6) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 583);
-exit(1);
+if (!var7) {
+var_class_name11 = p2 == NULL ? "null" : p2->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[PerfectHasher#0, Int]", var_class_name11);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 583);
+show_backtrace(1);
 }
 var_elements = p0;
 var_ids = p1;
 var_masks = p2;
-var10 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__PerfectHasher_FT0abstract_collection__Maplayout_builders__PerfectHasher_FT1kernel__Int]);
-((void (*)(val*))(var10->class->vft[COLOR_hash_collection__HashMap__init]))(var10) /* init on <var10:HashMap[Object, Map[Object, Int]]>*/;
-CHECK_NEW_hash_collection__HashMap(var10);
-var_hashes = var10;
-var11 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_elements) /* iterator on <var_elements:Map[Object, Set[Object]]>*/;
+var12 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__PerfectHasher_FT0abstract_collection__Maplayout_builders__PerfectHasher_FT1kernel__Int]);
+((void (*)(val*))(var12->class->vft[COLOR_hash_collection__HashMap__init]))(var12) /* init on <var12:HashMap[Object, Map[Object, Int]]>*/;
+var_hashes = var12;
+var13 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_elements) /* iterator on <var_elements:Map[Object, Set[Object]]>*/;
 for(;;) {
-var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var11) /* is_ok on <var11:MapIterator[Object, nullable Object]>*/;
-if(!var12) break;
-var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapIterator__key]))(var11) /* key on <var11:MapIterator[Object, nullable Object]>*/;
-var_mclasstype = var13;
-var14 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapIterator__item]))(var11) /* item on <var11:MapIterator[Object, nullable Object]>*/;
-var_mtypes = var14;
-var15 = ((val* (*)(val*, val*))(var_masks->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_masks, var_mclasstype) /* [] on <var_masks:Map[Object, Int]>*/;
-var16 = ((struct instance_kernel__Int*)var15)->value; /* autounbox from nullable Object to Int */;
-var_mask = var16;
-var17 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__PerfectHasher_FT1kernel__Int]);
-((void (*)(val*))(var17->class->vft[COLOR_hash_collection__HashMap__init]))(var17) /* init on <var17:HashMap[Object, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var17);
-var_inhashes = var17;
-var18 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:Set[Object]>*/;
+var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var13) /* is_ok on <var13:MapIterator[Object, nullable Object]>*/;
+if(!var14) break;
+var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__MapIterator__key]))(var13) /* key on <var13:MapIterator[Object, nullable Object]>*/;
+var_mclasstype = var15;
+var16 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__MapIterator__item]))(var13) /* item on <var13:MapIterator[Object, nullable Object]>*/;
+var_mtypes = var16;
+var17 = ((val* (*)(val*, val*))(var_masks->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_masks, var_mclasstype) /* [] on <var_masks:Map[Object, Int]>*/;
+var18 = ((struct instance_kernel__Int*)var17)->value; /* autounbox from nullable Object to Int */;
+var_mask = var18;
+var19 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__PerfectHasher_FT1kernel__Int]);
+((void (*)(val*))(var19->class->vft[COLOR_hash_collection__HashMap__init]))(var19) /* init on <var19:HashMap[Object, Int]>*/;
+var_inhashes = var19;
+var20 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:Set[Object]>*/;
 for(;;) {
-var19 = ((short int (*)(val*))(var18->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var18) /* is_ok on <var18:Iterator[nullable Object]>*/;
-if(!var19) break;
-var20 = ((val* (*)(val*))(var18->class->vft[COLOR_abstract_collection__Iterator__item]))(var18) /* item on <var18:Iterator[nullable Object]>*/;
-var_mtype = var20;
-var21 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__operator]))(self) /* operator on <self:PerfectHasher[Object, Object]>*/;
-var22 = ((val* (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_ids, var_mtype) /* [] on <var_ids:Map[Object, Int]>*/;
-var24 = ((struct instance_kernel__Int*)var22)->value; /* autounbox from nullable Object to Int */;
-var23 = ((long (*)(val*, long, long))(var21->class->vft[COLOR_layout_builders__PHOperator__op]))(var21, var_mask, var24) /* op on <var21:PHOperator>*/;
-var25 = BOX_kernel__Int(var23); /* autobox from Int to nullable Object */
-((void (*)(val*, val*, val*))(var_inhashes->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_inhashes, var_mtype, var25) /* []= on <var_inhashes:HashMap[Object, Int]>*/;
+var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
+if(!var21) break;
+var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
+var_mtype = var22;
+var23 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__operator]))(self) /* operator on <self:PerfectHasher[Object, Object]>*/;
+var24 = ((val* (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_ids, var_mtype) /* [] on <var_ids:Map[Object, Int]>*/;
+var26 = ((struct instance_kernel__Int*)var24)->value; /* autounbox from nullable Object to Int */;
+var25 = ((long (*)(val*, long, long))(var23->class->vft[COLOR_layout_builders__PHOperator__op]))(var23, var_mask, var26) /* op on <var23:PHOperator>*/;
+var27 = BOX_kernel__Int(var25); /* autobox from Int to nullable Object */
+((void (*)(val*, val*, val*))(var_inhashes->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_inhashes, var_mtype, var27) /* []= on <var_inhashes:HashMap[Object, Int]>*/;
 CONTINUE_label: (void)0;
-((void (*)(val*))(var18->class->vft[COLOR_abstract_collection__Iterator__next]))(var18) /* next on <var18:Iterator[nullable Object]>*/;
+((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
 }
 BREAK_label: (void)0;
 ((void (*)(val*, val*, val*))(var_hashes->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_hashes, var_mclasstype, var_inhashes) /* []= on <var_hashes:HashMap[Object, Map[Object, Int]]>*/;
-CONTINUE_label26: (void)0;
-((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapIterator__next]))(var11) /* next on <var11:MapIterator[Object, nullable Object]>*/;
+CONTINUE_label28: (void)0;
+((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__MapIterator__next]))(var13) /* next on <var13:MapIterator[Object, nullable Object]>*/;
 }
-BREAK_label26: (void)0;
+BREAK_label28: (void)0;
 var = var_hashes;
 goto RET_LABEL;
 RET_LABEL:;
@@ -4086,8 +4263,11 @@ return var;
 /* method layout_builders#PHOperator#op for (self: PHOperator, Int, Int): Int */
 long layout_builders__PHOperator__op(val* self, long p0, long p1) {
 long var /* : Int */;
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 600);
-exit(1);
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "op", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 600);
+show_backtrace(1);
 RET_LABEL:;
 return var;
 }
@@ -4187,8 +4367,9 @@ val* var /* : MModule */;
 val* var1 /* : MModule */;
 var1 = self->attrs[COLOR_layout_builders__TypingHasher___64dmmodule].val; /* @mmodule on <self:TypingHasher[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 625);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mmodule");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 625);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -4219,8 +4400,9 @@ val* var /* : POSetBuilder[Object] */;
 val* var1 /* : POSetBuilder[Object] */;
 var1 = self->attrs[COLOR_layout_builders__TypingHasher___64dposet_builder].val; /* @poset_builder on <self:TypingHasher[Object]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @poset_builder", "src/layout_builders.nit", 626);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @poset_builder");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 626);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -4241,6 +4423,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (poset_builder) <p0:POSetBuilder[Object]> isa POSetBuilder[TypingHasher#0] */
 /* <p0:POSetBuilder[Object]> isa POSetBuilder[TypingHasher#0] */
 type_struct = self->type->resolution_table->types[COLOR_layout_builders__POSetBuilderlayout_builders__TypingHasher_FT0];
@@ -4252,8 +4435,10 @@ var = 0;
 var = p0->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 626);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetBuilder[TypingHasher#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 626);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingHasher___64dposet_builder].val = p0; /* @poset_builder on <self:TypingHasher[Object]> */
 RET_LABEL:;
@@ -4287,9 +4472,10 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 /* Covariant cast for argument 0 (poset_cache) <p0:nullable POSet[Object]> isa nullable POSet[TypingHasher#0] */
 /* <p0:nullable POSet[Object]> isa nullable POSet[TypingHasher#0] */
-type_struct = self->type->resolution_table->types[COLOR_poset__POSetlayout_builders__TypingHasher_FT0];
+type_struct = self->type->resolution_table->types[COLOR_nullable_poset__POSetlayout_builders__TypingHasher_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
 if(p0 == NULL) {
@@ -4302,8 +4488,10 @@ var = p0->type->type_table[cltype] == idtype;
 }
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 627);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable POSet[TypingHasher#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 627);
+show_backtrace(1);
 }
 self->attrs[COLOR_layout_builders__TypingHasher___64dposet_cache].val = p0; /* @poset_cache on <self:TypingHasher[Object]> */
 RET_LABEL:;
@@ -4319,6 +4507,7 @@ short int var /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_mmodule /* var mmodule: MModule */;
 val* var_poset_builder /* var poset_builder: POSetBuilder[Object] */;
 val* var_operator /* var operator: PHOperator */;
@@ -4333,8 +4522,10 @@ var = 0;
 var = p1->type->type_table[cltype] == idtype;
 }
 if (!var) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 629);
-exit(1);
+var_class_name = p1 == NULL ? "null" : p1->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetBuilder[TypingHasher#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 629);
+show_backtrace(1);
 }
 var_mmodule = p0;
 var_poset_builder = p1;
@@ -4357,6 +4548,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 val* var2 /* : POSetBuilder[Object] */;
 val* var3 /* : POSet[Object] */;
@@ -4381,8 +4573,10 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 635);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingHasher#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 635);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingHasher__poset_builder]))(self) /* poset_builder on <self:TypingHasher[Object]>*/;
@@ -4390,7 +4584,6 @@ var3 = ((val* (*)(val*, val*))(var2->class->vft[COLOR_layout_builders__POSetBuil
 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__poset_cache_61d]))(self, var3) /* poset_cache= on <self:TypingHasher[Object]>*/;
 var4 = NEW_layout_builders__PHLayout(self->type->resolution_table->types[COLOR_layout_builders__PHLayoutlayout_builders__TypingHasher_FT0layout_builders__TypingHasher_FT0]);
 ((void (*)(val*))(var4->class->vft[COLOR_layout_builders__PHLayout__init]))(var4) /* init on <var4:PHLayout[Object, Object]>*/;
-CHECK_NEW_layout_builders__PHLayout(var4);
 var_result = var4;
 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__build_conflicts]))(self, var_elements) /* build_conflicts on <self:TypingHasher[Object]>*/;
 var_conflicts = var5;
@@ -4437,20 +4630,21 @@ long var12 /* : Int */;
 val* var13 /* : nullable Object */;
 var1 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingHasher_FT0kernel__Int]);
 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[Object, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var1);
 var_ids = var1;
 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingHasher[Object]>*/;
 if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 648);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 648);
+show_backtrace(1);
 } else {
 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_array__Collection__to_a]))(var2) /* to_a on <var2:nullable POSet[Object]>*/;
 }
 var_lin = var3;
 var4 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingHasher[Object]>*/;
 if (var4 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 649);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 649);
+show_backtrace(1);
 } else {
 ((void (*)(val*, val*))(var4->class->vft[COLOR_sorter__AbstractSorter__sort]))(var4, var_lin) /* sort on <var4:nullable POSet[Object]>*/;
 }
@@ -4495,6 +4689,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Set[Object] */;
 val* var2 /* : HashMap[Object, Set[Object]] */;
 val* var_conflicts /* var conflicts: HashMap[Object, Set[Object]] */;
@@ -4518,13 +4713,14 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 656);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Set[TypingHasher#0]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 656);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingHasher_FT0abstract_collection__Setlayout_builders__TypingHasher_FT0]);
 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[Object, Set[Object]]>*/;
-CHECK_NEW_hash_collection__HashMap(var2);
 var_conflicts = var2;
 var3 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_elements) /* iterator on <var_elements:Set[Object]>*/;
 for(;;) {
@@ -4534,12 +4730,12 @@ var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__i
 var_e = var5;
 var6 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetlayout_builders__TypingHasher_FT0]);
 ((void (*)(val*))(var6->class->vft[COLOR_hash_collection__HashSet__init]))(var6) /* init on <var6:HashSet[Object]>*/;
-CHECK_NEW_hash_collection__HashSet(var6);
 var_supers = var6;
 var7 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingHasher[Object]>*/;
 if (var7 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 660);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 660);
+show_backtrace(1);
 } else {
 var8 = ((val* (*)(val*, val*))(var7->class->vft[COLOR_poset__POSet___91d_93d]))(var7, var_e) /* [] on <var7:nullable POSet[Object]>*/;
 }
@@ -4574,7 +4770,6 @@ var_operator = p0;
 var_mmodule = p1;
 var = NEW_layout_builders__MTypePOSetBuilder(&type_layout_builders__MTypePOSetBuilder);
 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MTypePOSetBuilder>*/;
-CHECK_NEW_layout_builders__MTypePOSetBuilder(var);
 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__init]))(self, var_mmodule, var, var_operator) /* init on <self:MTypeHasher>*/;
 RET_LABEL:;
 }
@@ -4592,7 +4787,6 @@ var_operator = p0;
 var_mmodule = p1;
 var = NEW_layout_builders__MClassPOSetBuilder(&type_layout_builders__MClassPOSetBuilder);
 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MClassPOSetBuilder>*/;
-CHECK_NEW_layout_builders__MClassPOSetBuilder(var);
 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__init]))(self, var_mmodule, var, var_operator) /* init on <self:MClassHasher>*/;
 RET_LABEL:;
 }
@@ -4607,8 +4801,9 @@ val* var /* : MModule */;
 val* var1 /* : MModule */;
 var1 = self->attrs[COLOR_layout_builders__MPropertyHasher___64dmmodule].val; /* @mmodule on <self:MPropertyHasher[PropertyLayoutElement]> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 685);
-exit(1);
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mmodule");
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 685);
+show_backtrace(1);
 }
 var = var1;
 RET_LABEL:;
@@ -4677,7 +4872,6 @@ short int var17 /* : Bool */;
 var_mclasses = p0;
 var1 = NEW_poset__POSet(&type_poset__POSetmodel__MClass);
 ((void (*)(val*))(var1->class->vft[COLOR_poset__POSet__init]))(var1) /* init on <var1:POSet[MClass]>*/;
-CHECK_NEW_poset__POSet(var1);
 var_poset = var1;
 var2 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
 for(;;) {
@@ -4744,6 +4938,7 @@ short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
+const char* var_class_name;
 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
 val* var2 /* : PHLayout[MClass, PropertyLayoutElement] */;
 val* var_result /* var result: PHLayout[MClass, PropertyLayoutElement] */;
@@ -4786,21 +4981,20 @@ var1 = 0;
 var1 = p0->type->type_table[cltype] == idtype;
 }
 if (!var1) {
-fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 704);
-exit(1);
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Map[MClass, Set[PropertyLayoutBuilder#0]]", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/layout_builders.nit", 704);
+show_backtrace(1);
 }
 var_elements = p0;
 var2 = NEW_layout_builders__PHLayout(self->type->resolution_table->types[COLOR_layout_builders__PHLayoutmodel__MClasslayout_builders__MPropertyHasher_FT0]);
 ((void (*)(val*))(var2->class->vft[COLOR_layout_builders__PHLayout__init]))(var2) /* init on <var2:PHLayout[MClass, PropertyLayoutElement]>*/;
-CHECK_NEW_layout_builders__PHLayout(var2);
 var_result = var2;
 var3 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__MPropertyHasher_FT0kernel__Int]);
 ((void (*)(val*))(var3->class->vft[COLOR_hash_collection__HashMap__init]))(var3) /* init on <var3:HashMap[PropertyLayoutElement, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var3);
 var_ids = var3;
 var4 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
 ((void (*)(val*))(var4->class->vft[COLOR_hash_collection__HashSet__init]))(var4) /* init on <var4:HashSet[MClass]>*/;
-CHECK_NEW_hash_collection__HashSet(var4);
 var_mclasses = var4;
 var5 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__keys]))(var_elements) /* keys on <var_elements:Map[MClass, Set[PropertyLayoutElement]]>*/;
 ((void (*)(val*, val*))(var_mclasses->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_mclasses, var5) /* add_all on <var_mclasses:HashSet[MClass]>*/;
@@ -4911,11 +5105,9 @@ val* var20 /* : Map[Object, Map[Object, Int]] */;
 var_elements = p0;
 var1 = NEW_layout_builders__PHLayout(&type_layout_builders__PHLayoutmodel__MClassTypemodel__MType);
 ((void (*)(val*))(var1->class->vft[COLOR_layout_builders__PHLayout__init]))(var1) /* init on <var1:PHLayout[MClassType, MType]>*/;
-CHECK_NEW_layout_builders__PHLayout(var1);
 var_result = var1;
 var2 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypekernel__Int);
 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[MType, Int]>*/;
-CHECK_NEW_hash_collection__HashMap(var2);
 var_ids = var2;
 var3 = 1;
 var_color = var3;