+val* var25 /* : nullable Object */;
+val* var29 /* : POSetBucketsColorer[MClass, MVirtualTypeProp] */;
+val* var30 /* : Map[Object, Set[Object]] */;
+val* var_vt_colorer /* var vt_colorer: POSetBucketsColorer[MClass, MVirtualTypeProp] */;
+val* var31 /* : Map[Object, Int] */;
+val* var33 /* : Map[MClass, Array[nullable MPropDef]] */;
+var_mainmodule = p0;
+var_mmbuilder = p1;
+var_runtime_type_analysis = p2;
+{
+separate_compiler__SeparateCompiler__init(self, p0, p1, p2); /* Direct call separate_compiler#SeparateCompiler#init on <self:SeparateErasureCompiler>*/
+}
+{
+var = model__MModule__flatten_mclass_hierarchy(var_mainmodule);
+}
+var_poset = var;
+var1 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
+{
+hash_collection__HashSet__from(var1, var_poset); /* Direct call hash_collection#HashSet#from on <var1:HashSet[MClass]>*/
+}
+var_mclasses = var1;
+var2 = NEW_coloring__POSetColorer(&type_coloring__POSetColorermodel__MClass);
+{
+((void (*)(val*))(var2->class->vft[COLOR_kernel__Object__init]))(var2) /* init on <var2:POSetColorer[MClass]>*/;
+}
+var_colorer = var2;
+{
+coloring__POSetColorer__colorize(var_colorer, var_poset); /* Direct call coloring#POSetColorer#colorize on <var_colorer:POSetColorer[MClass]>*/
+}
+{
+var3 = coloring__POSetColorer__ids(var_colorer);
+}
+{
+{ /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids= (self,var3) on <self:SeparateErasureCompiler> */
+self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val = var3; /* _class_ids on <self:SeparateErasureCompiler> */
+RET_LABEL4:(void)0;
+}
+}
+{
+var5 = coloring__POSetColorer__colors(var_colorer);
+}
+{
+{ /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors= (self,var5) on <self:SeparateErasureCompiler> */
+self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val = var5; /* _class_colors on <self:SeparateErasureCompiler> */
+RET_LABEL6:(void)0;
+}
+}
+{
+var7 = separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(self, var_mclasses);
+}
+{
+{ /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables= (self,var7) on <self:SeparateErasureCompiler> */
+self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val = var7; /* _class_tables on <self:SeparateErasureCompiler> */
+RET_LABEL8:(void)0;
+}
+}
+var9 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setmodel__MVirtualTypeProp);
+{
+((void (*)(val*))(var9->class->vft[COLOR_kernel__Object__init]))(var9) /* init on <var9:HashMap[MClass, Set[MVirtualTypeProp]]>*/;
+}
+var_vts = var9;
+var_ = var_mclasses;
+{
+var10 = hash_collection__HashSet__iterator(var_);
+}
+var_11 = var10;
+for(;;) {
+{
+var12 = ((short int (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_11) /* is_ok on <var_11:Iterator[MClass]>*/;
+}
+if (var12){
+{
+var13 = ((val* (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__item]))(var_11) /* item on <var_11:Iterator[MClass]>*/;
+}
+var_mclass = var13;
+var14 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MVirtualTypeProp);
+{
+((void (*)(val*))(var14->class->vft[COLOR_kernel__Object__init]))(var14) /* init on <var14:HashSet[MVirtualTypeProp]>*/;
+}
+{
+hash_collection__HashMap___91d_93d_61d(var_vts, var_mclass, var14); /* Direct call hash_collection#HashMap#[]= on <var_vts:HashMap[MClass, Set[MVirtualTypeProp]]>*/
+}
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
+var17 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var15 = var17;
+RET_LABEL16:(void)0;
+}
+}
+{
+var18 = abstract_compiler__MModule__properties(var15, var_mclass);
+}
+var_19 = var18;
+{
+var20 = ((val* (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_19) /* iterator on <var_19:Set[MProperty]>*/;
+}
+var_21 = var20;
+for(;;) {
+{
+var22 = ((short int (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_21) /* is_ok on <var_21:Iterator[MProperty]>*/;
+}
+if (var22){
+{
+var23 = ((val* (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Iterator__item]))(var_21) /* item on <var_21:Iterator[MProperty]>*/;
+}
+var_mprop = var23;
+/* <var_mprop:MProperty> isa MVirtualTypeProp */
+cltype = type_model__MVirtualTypeProp.color;
+idtype = type_model__MVirtualTypeProp.id;
+if(cltype >= var_mprop->type->table_size) {
+var24 = 0;
+} else {
+var24 = var_mprop->type->type_table[cltype] == idtype;
+}
+if (var24){
+{
+var25 = hash_collection__HashMap___91d_93d(var_vts, var_mclass);
+}
+{
+((void (*)(val*, val*))(var25->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var25, var_mprop) /* add on <var25:nullable Object(Set[MVirtualTypeProp])>*/;
+}
+} else {
+}
+{
+((void (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Iterator__next]))(var_21) /* next on <var_21:Iterator[MProperty]>*/;
+}
+} else {
+goto BREAK_label;
+}
+}
+BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_21) on <var_21:Iterator[MProperty]> */
+RET_LABEL26:(void)0;
+}
+}
+{
+((void (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__next]))(var_11) /* next on <var_11:Iterator[MClass]>*/;
+}
+} else {
+goto BREAK_label27;
+}
+}
+BREAK_label27: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:Iterator[MClass]> */
+RET_LABEL28:(void)0;
+}
+}
+var29 = NEW_coloring__POSetBucketsColorer(&type_coloring__POSetBucketsColorermodel__MClassmodel__MVirtualTypeProp);
+{
+var30 = coloring__POSetColorer__conflicts(var_colorer);
+}
+{
+coloring__POSetBucketsColorer__init(var29, var_poset, var30); /* Direct call coloring#POSetBucketsColorer#init on <var29:POSetBucketsColorer[MClass, MVirtualTypeProp]>*/
+}
+var_vt_colorer = var29;
+{
+var31 = coloring__POSetBucketsColorer__colorize(var_vt_colorer, var_vts);
+}
+{
+{ /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors= (self,var31) on <self:SeparateErasureCompiler> */
+self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val = var31; /* _vt_colors on <self:SeparateErasureCompiler> */
+RET_LABEL32:(void)0;
+}
+}
+{
+var33 = separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(self, var_mclasses);
+}
+{
+{ /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables= (self,var33) on <self:SeparateErasureCompiler> */
+self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val = var33; /* _vt_tables on <self:SeparateErasureCompiler> */
+RET_LABEL34:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: Object, MModule, ModelBuilder, nullable RapidTypeAnalysis) */
+void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
+separate_erasure_compiler__SeparateErasureCompiler__init(self, p0, p1, p2); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#init on <self:Object(SeparateErasureCompiler)>*/
+RET_LABEL:;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
+val* separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0) {
+val* var /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var_mclasses /* var mclasses: Set[MClass] */;
+val* var1 /* : HashMap[MClass, Array[nullable MPropDef]] */;
+val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
+val* var_ /* var : Set[MClass] */;
+val* var2 /* : Iterator[nullable Object] */;
+val* var_3 /* var : Iterator[MClass] */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable Object */;
+val* var_mclass /* var mclass: MClass */;
+val* var6 /* : Array[nullable MPropDef] */;
+val* var_table /* var table: Array[nullable MPropDef] */;
+val* var7 /* : Array[MClass] */;
+val* var_parents /* var parents: Array[MClass] */;
+val* var8 /* : MModule */;
+val* var10 /* : MModule */;
+val* var11 /* : POSet[MClass] */;
+short int var12 /* : Bool */;
+val* var13 /* : MModule */;
+val* var15 /* : MModule */;
+val* var16 /* : POSetElement[MClass] */;
+val* var17 /* : Collection[Object] */;
+val* var18 /* : Array[nullable Object] */;
+val* var19 /* : MModule */;
+val* var21 /* : MModule */;
+val* var_22 /* var : Array[MClass] */;
+val* var23 /* : ArrayIterator[nullable Object] */;
+val* var_24 /* var : ArrayIterator[MClass] */;
+short int var25 /* : Bool */;
+val* var26 /* : nullable Object */;
+val* var_parent /* var parent: MClass */;
+short int var27 /* : Bool */;
+short int var28 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var30 /* : Bool */;
+short int var32 /* : Bool */;
+val* var33 /* : MModule */;
+val* var35 /* : MModule */;
+val* var36 /* : Set[MProperty] */;
+val* var_37 /* var : Set[MProperty] */;
+val* var38 /* : Iterator[nullable Object] */;
+val* var_39 /* var : Iterator[MProperty] */;
+short int var40 /* : Bool */;
+val* var41 /* : nullable Object */;
+val* var_mproperty /* var mproperty: MProperty */;
+short int var42 /* : Bool */;
+int cltype;
+int idtype;
+short int var43 /* : Bool */;
+val* var45 /* : Map[MVirtualTypeProp, Int] */;
+val* var47 /* : Map[MVirtualTypeProp, Int] */;
+val* var48 /* : nullable Object */;
+long var49 /* : Int */;
+long var_color /* var color: Int */;
+long var50 /* : Int */;
+long var52 /* : Int */;
+short int var53 /* : Bool */;
+short int var55 /* : Bool */;
+int cltype56;
+int idtype57;
+const char* var_class_name;
+short int var58 /* : Bool */;
+long var59 /* : Int */;
+long var61 /* : Int */;
+long var_i /* var i: Int */;
+long var_62 /* var : Int */;
+short int var63 /* : Bool */;
+short int var65 /* : Bool */;
+int cltype66;
+int idtype67;
+const char* var_class_name68;
+short int var69 /* : Bool */;
+val* var70 /* : null */;
+long var71 /* : Int */;
+long var72 /* : Int */;
+val* var74 /* : Array[MPropDef] */;
+val* var76 /* : Array[MPropDef] */;
+val* var_77 /* var : Array[MVirtualTypeDef] */;
+val* var78 /* : ArrayIterator[nullable Object] */;
+val* var_79 /* var : ArrayIterator[MVirtualTypeDef] */;
+short int var80 /* : Bool */;
+val* var81 /* : nullable Object */;
+val* var_mpropdef /* var mpropdef: MVirtualTypeDef */;
+val* var82 /* : MClassDef */;
+val* var84 /* : MClassDef */;
+val* var85 /* : MClass */;
+val* var87 /* : MClass */;
+short int var88 /* : Bool */;
+short int var89 /* : Bool */;
+short int var91 /* : Bool */;
+short int var93 /* : Bool */;
+val* var100 /* : MModule */;
+val* var102 /* : MModule */;
+val* var103 /* : Set[MProperty] */;
+val* var_104 /* var : Set[MProperty] */;
+val* var105 /* : Iterator[nullable Object] */;
+val* var_106 /* var : Iterator[MProperty] */;
+short int var107 /* : Bool */;
+val* var108 /* : nullable Object */;
+val* var_mproperty109 /* var mproperty: MProperty */;
+short int var110 /* : Bool */;
+int cltype111;
+int idtype112;
+short int var113 /* : Bool */;
+val* var115 /* : Map[MVirtualTypeProp, Int] */;
+val* var117 /* : Map[MVirtualTypeProp, Int] */;
+val* var118 /* : nullable Object */;
+long var119 /* : Int */;
+long var_color120 /* var color: Int */;
+long var121 /* : Int */;
+long var123 /* : Int */;
+short int var124 /* : Bool */;
+short int var126 /* : Bool */;
+int cltype127;
+int idtype128;
+const char* var_class_name129;
+short int var130 /* : Bool */;
+long var131 /* : Int */;
+long var133 /* : Int */;
+long var_i134 /* var i: Int */;
+long var_135 /* var : Int */;
+short int var136 /* : Bool */;
+short int var138 /* : Bool */;
+int cltype139;
+int idtype140;
+const char* var_class_name141;
+short int var142 /* : Bool */;
+val* var143 /* : null */;
+long var144 /* : Int */;
+long var145 /* : Int */;
+val* var147 /* : Array[MPropDef] */;
+val* var149 /* : Array[MPropDef] */;
+val* var_150 /* var : Array[MVirtualTypeDef] */;
+val* var151 /* : ArrayIterator[nullable Object] */;
+val* var_152 /* var : ArrayIterator[MVirtualTypeDef] */;
+short int var153 /* : Bool */;
+val* var154 /* : nullable Object */;
+val* var_mpropdef155 /* var mpropdef: MVirtualTypeDef */;
+val* var156 /* : MClassDef */;
+val* var158 /* : MClassDef */;
+val* var159 /* : MClass */;
+val* var161 /* : MClass */;
+short int var162 /* : Bool */;
+short int var163 /* : Bool */;
+short int var165 /* : Bool */;
+short int var167 /* : Bool */;
+var_mclasses = p0;
+var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
+{
+((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MPropDef]]>*/;
+}
+var_tables = var1;
+var_ = var_mclasses;
+{
+var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[MClass]>*/;
+}
+var_3 = var2;
+for(;;) {
+{
+var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[MClass]>*/;
+}
+if (var4){
+{
+var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[MClass]>*/;
+}
+var_mclass = var5;
+var6 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
+{
+((void (*)(val*))(var6->class->vft[COLOR_kernel__Object__init]))(var6) /* init on <var6:Array[nullable MPropDef]>*/;
+}
+var_table = var6;
+var7 = NEW_array__Array(&type_array__Arraymodel__MClass);
+{
+((void (*)(val*))(var7->class->vft[COLOR_kernel__Object__init]))(var7) /* init on <var7:Array[MClass]>*/;
+}
+var_parents = var7;
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
+var10 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+var11 = model__MModule__flatten_mclass_hierarchy(var8);
+}
+{
+var12 = poset__POSet__has(var11, var_mclass);
+}
+if (var12){
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
+var15 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
+if (unlikely(var15 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var13 = var15;
+RET_LABEL14:(void)0;
+}
+}
+{
+var16 = model__MClass__in_hierarchy(var_mclass, var13);
+}
+{
+var17 = poset__POSetElement__greaters(var16);
+}
+{
+var18 = array__Collection__to_a(var17);
+}
+var_parents = var18;
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
+var21 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
+if (unlikely(var21 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var19 = var21;
+RET_LABEL20:(void)0;
+}
+}
+{
+model__MModule__linearize_mclasses(var19, var_parents); /* Direct call model#MModule#linearize_mclasses on <var19:MModule>*/
+}
+} else {
+}
+var_22 = var_parents;
+{
+var23 = array__AbstractArrayRead__iterator(var_22);
+}
+var_24 = var23;
+for(;;) {
+{
+var25 = array__ArrayIterator__is_ok(var_24);
+}
+if (var25){
+{
+var26 = array__ArrayIterator__item(var_24);
+}
+var_parent = var26;
+{
+{ /* Inline kernel#Object#== (var_parent,var_mclass) on <var_parent:MClass> */
+var_other = var_mclass;
+{
+{ /* Inline kernel#Object#is_same_instance (var_parent,var_other) on <var_parent:MClass> */
+var32 = var_parent == var_other;
+var30 = var32;
+goto RET_LABEL31;
+RET_LABEL31:(void)0;
+}
+}
+var28 = var30;
+goto RET_LABEL29;
+RET_LABEL29:(void)0;
+}
+var27 = var28;
+}
+if (var27){
+goto BREAK_label;
+} else {
+}
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
+var35 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
+if (unlikely(var35 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var33 = var35;
+RET_LABEL34:(void)0;
+}
+}
+{
+var36 = abstract_compiler__MModule__properties(var33, var_parent);
+}
+var_37 = var36;
+{
+var38 = ((val* (*)(val*))(var_37->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_37) /* iterator on <var_37:Set[MProperty]>*/;
+}
+var_39 = var38;
+for(;;) {
+{
+var40 = ((short int (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_39) /* is_ok on <var_39:Iterator[MProperty]>*/;
+}
+if (var40){
+{
+var41 = ((val* (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__item]))(var_39) /* item on <var_39:Iterator[MProperty]>*/;
+}
+var_mproperty = var41;
+/* <var_mproperty:MProperty> isa MVirtualTypeProp */
+cltype = type_model__MVirtualTypeProp.color;
+idtype = type_model__MVirtualTypeProp.id;
+if(cltype >= var_mproperty->type->table_size) {
+var42 = 0;
+} else {
+var42 = var_mproperty->type->type_table[cltype] == idtype;
+}
+var43 = !var42;
+if (var43){
+goto BREAK_label44;
+} else {
+}
+{
+{ /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:SeparateErasureCompiler> */
+var47 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
+if (unlikely(var47 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
+PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 106);
+show_backtrace(1);
+}
+var45 = var47;
+RET_LABEL46:(void)0;
+}
+}
+{
+var48 = ((val* (*)(val*, val*))(var45->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var45, var_mproperty) /* [] on <var45:Map[MVirtualTypeProp, Int]>*/;
+}
+var49 = ((struct instance_kernel__Int*)var48)->value; /* autounbox from nullable Object to Int */;
+var_color = var49;
+{
+{ /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
+var52 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
+var50 = var52;
+RET_LABEL51:(void)0;
+}
+}
+{
+{ /* Inline kernel#Int#<= (var50,var_color) on <var50:Int> */
+/* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
+/* <var_color:Int> isa OTHER */
+var55 = 1; /* easy <var_color:Int> isa OTHER*/
+if (unlikely(!var55)) {
+var_class_name = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
+show_backtrace(1);
+}
+var58 = var50 <= var_color;
+var53 = var58;
+goto RET_LABEL54;
+RET_LABEL54:(void)0;
+}
+}
+if (var53){
+{
+{ /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
+var61 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
+var59 = var61;
+RET_LABEL60:(void)0;
+}
+}
+var_i = var59;
+var_62 = var_color;
+for(;;) {
+{
+{ /* Inline kernel#Int#< (var_i,var_62) on <var_i:Int> */
+/* Covariant cast for argument 0 (i) <var_62:Int> isa OTHER */
+/* <var_62:Int> isa OTHER */
+var65 = 1; /* easy <var_62:Int> isa OTHER*/
+if (unlikely(!var65)) {
+var_class_name68 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name68);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
+show_backtrace(1);
+}
+var69 = var_i < var_62;
+var63 = var69;
+goto RET_LABEL64;
+RET_LABEL64:(void)0;
+}
+}
+if (var63){
+var70 = NULL;
+{
+array__Array___91d_93d_61d(var_table, var_i, var70); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
+}
+var71 = 1;
+{
+var72 = kernel__Int__successor(var_i, var71);
+}
+var_i = var72;
+} else {
+goto BREAK_label73;
+}
+}
+BREAK_label73: (void)0;
+} else {
+}
+{
+{ /* Inline model#MProperty#mpropdefs (var_mproperty) on <var_mproperty:MProperty(MVirtualTypeProp)> */
+var76 = var_mproperty->attrs[COLOR_model__MProperty___mpropdefs].val; /* _mpropdefs on <var_mproperty:MProperty(MVirtualTypeProp)> */
+if (unlikely(var76 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1644);
+show_backtrace(1);
+}
+var74 = var76;
+RET_LABEL75:(void)0;
+}
+}
+var_77 = var74;
+{
+var78 = array__AbstractArrayRead__iterator(var_77);
+}
+var_79 = var78;
+for(;;) {
+{
+var80 = array__ArrayIterator__is_ok(var_79);
+}
+if (var80){
+{
+var81 = array__ArrayIterator__item(var_79);
+}
+var_mpropdef = var81;
+{
+{ /* Inline model#MPropDef#mclassdef (var_mpropdef) on <var_mpropdef:MVirtualTypeDef> */
+var84 = var_mpropdef->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef:MVirtualTypeDef> */
+if (unlikely(var84 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
+show_backtrace(1);
+}
+var82 = var84;
+RET_LABEL83:(void)0;
+}
+}
+{
+{ /* Inline model#MClassDef#mclass (var82) on <var82:MClassDef> */
+var87 = var82->attrs[COLOR_model__MClassDef___mclass].val; /* _mclass on <var82:MClassDef> */
+if (unlikely(var87 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 492);
+show_backtrace(1);
+}
+var85 = var87;
+RET_LABEL86:(void)0;
+}
+}
+{
+{ /* Inline kernel#Object#== (var85,var_parent) on <var85:MClass> */
+var_other = var_parent;
+{
+{ /* Inline kernel#Object#is_same_instance (var85,var_other) on <var85:MClass> */
+var93 = var85 == var_other;
+var91 = var93;
+goto RET_LABEL92;
+RET_LABEL92:(void)0;
+}
+}
+var89 = var91;
+goto RET_LABEL90;
+RET_LABEL90:(void)0;
+}
+var88 = var89;
+}
+if (var88){
+{
+array__Array___91d_93d_61d(var_table, var_color, var_mpropdef); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
+}
+} else {
+}
+{
+array__ArrayIterator__next(var_79); /* Direct call array#ArrayIterator#next on <var_79:ArrayIterator[MVirtualTypeDef]>*/
+}
+} else {
+goto BREAK_label94;
+}
+}
+BREAK_label94: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_79) on <var_79:ArrayIterator[MVirtualTypeDef]> */
+RET_LABEL95:(void)0;
+}
+}
+BREAK_label44: (void)0;
+{
+((void (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__next]))(var_39) /* next on <var_39:Iterator[MProperty]>*/;
+}
+} else {
+goto BREAK_label96;
+}
+}
+BREAK_label96: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_39) on <var_39:Iterator[MProperty]> */
+RET_LABEL97:(void)0;
+}
+}
+BREAK_label: (void)0;
+{
+array__ArrayIterator__next(var_24); /* Direct call array#ArrayIterator#next on <var_24:ArrayIterator[MClass]>*/
+}
+} else {
+goto BREAK_label98;
+}
+}
+BREAK_label98: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_24) on <var_24:ArrayIterator[MClass]> */
+RET_LABEL99:(void)0;
+}
+}
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
+var102 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
+if (unlikely(var102 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var100 = var102;
+RET_LABEL101:(void)0;
+}
+}
+{
+var103 = abstract_compiler__MModule__properties(var100, var_mclass);
+}
+var_104 = var103;
+{
+var105 = ((val* (*)(val*))(var_104->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_104) /* iterator on <var_104:Set[MProperty]>*/;
+}
+var_106 = var105;
+for(;;) {
+{
+var107 = ((short int (*)(val*))(var_106->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_106) /* is_ok on <var_106:Iterator[MProperty]>*/;
+}
+if (var107){
+{
+var108 = ((val* (*)(val*))(var_106->class->vft[COLOR_abstract_collection__Iterator__item]))(var_106) /* item on <var_106:Iterator[MProperty]>*/;
+}
+var_mproperty109 = var108;
+/* <var_mproperty109:MProperty> isa MVirtualTypeProp */
+cltype111 = type_model__MVirtualTypeProp.color;
+idtype112 = type_model__MVirtualTypeProp.id;
+if(cltype111 >= var_mproperty109->type->table_size) {
+var110 = 0;
+} else {
+var110 = var_mproperty109->type->type_table[cltype111] == idtype112;
+}
+var113 = !var110;
+if (var113){
+goto BREAK_label114;
+} else {
+}
+{
+{ /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:SeparateErasureCompiler> */
+var117 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
+if (unlikely(var117 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
+PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 106);
+show_backtrace(1);
+}
+var115 = var117;
+RET_LABEL116:(void)0;
+}
+}
+{
+var118 = ((val* (*)(val*, val*))(var115->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var115, var_mproperty109) /* [] on <var115:Map[MVirtualTypeProp, Int]>*/;
+}
+var119 = ((struct instance_kernel__Int*)var118)->value; /* autounbox from nullable Object to Int */;
+var_color120 = var119;
+{
+{ /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
+var123 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
+var121 = var123;
+RET_LABEL122:(void)0;
+}
+}
+{
+{ /* Inline kernel#Int#<= (var121,var_color120) on <var121:Int> */
+/* Covariant cast for argument 0 (i) <var_color120:Int> isa OTHER */
+/* <var_color120:Int> isa OTHER */
+var126 = 1; /* easy <var_color120:Int> isa OTHER*/
+if (unlikely(!var126)) {
+var_class_name129 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name129);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
+show_backtrace(1);
+}
+var130 = var121 <= var_color120;
+var124 = var130;
+goto RET_LABEL125;
+RET_LABEL125:(void)0;
+}
+}
+if (var124){
+{
+{ /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
+var133 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
+var131 = var133;
+RET_LABEL132:(void)0;
+}
+}
+var_i134 = var131;
+var_135 = var_color120;
+for(;;) {
+{
+{ /* Inline kernel#Int#< (var_i134,var_135) on <var_i134:Int> */
+/* Covariant cast for argument 0 (i) <var_135:Int> isa OTHER */
+/* <var_135:Int> isa OTHER */
+var138 = 1; /* easy <var_135:Int> isa OTHER*/
+if (unlikely(!var138)) {
+var_class_name141 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name141);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
+show_backtrace(1);
+}
+var142 = var_i134 < var_135;
+var136 = var142;
+goto RET_LABEL137;
+RET_LABEL137:(void)0;
+}
+}
+if (var136){
+var143 = NULL;
+{
+array__Array___91d_93d_61d(var_table, var_i134, var143); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
+}
+var144 = 1;
+{
+var145 = kernel__Int__successor(var_i134, var144);
+}
+var_i134 = var145;
+} else {
+goto BREAK_label146;
+}
+}
+BREAK_label146: (void)0;
+} else {
+}
+{
+{ /* Inline model#MProperty#mpropdefs (var_mproperty109) on <var_mproperty109:MProperty(MVirtualTypeProp)> */
+var149 = var_mproperty109->attrs[COLOR_model__MProperty___mpropdefs].val; /* _mpropdefs on <var_mproperty109:MProperty(MVirtualTypeProp)> */
+if (unlikely(var149 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1644);
+show_backtrace(1);
+}
+var147 = var149;
+RET_LABEL148:(void)0;
+}
+}
+var_150 = var147;
+{
+var151 = array__AbstractArrayRead__iterator(var_150);
+}
+var_152 = var151;
+for(;;) {
+{
+var153 = array__ArrayIterator__is_ok(var_152);
+}
+if (var153){
+{
+var154 = array__ArrayIterator__item(var_152);
+}
+var_mpropdef155 = var154;
+{
+{ /* Inline model#MPropDef#mclassdef (var_mpropdef155) on <var_mpropdef155:MVirtualTypeDef> */
+var158 = var_mpropdef155->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef155:MVirtualTypeDef> */
+if (unlikely(var158 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
+show_backtrace(1);
+}
+var156 = var158;
+RET_LABEL157:(void)0;
+}
+}
+{
+{ /* Inline model#MClassDef#mclass (var156) on <var156:MClassDef> */
+var161 = var156->attrs[COLOR_model__MClassDef___mclass].val; /* _mclass on <var156:MClassDef> */
+if (unlikely(var161 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 492);
+show_backtrace(1);
+}
+var159 = var161;
+RET_LABEL160:(void)0;
+}
+}
+{
+{ /* Inline kernel#Object#== (var159,var_mclass) on <var159:MClass> */
+var_other = var_mclass;
+{
+{ /* Inline kernel#Object#is_same_instance (var159,var_other) on <var159:MClass> */
+var167 = var159 == var_other;
+var165 = var167;
+goto RET_LABEL166;
+RET_LABEL166:(void)0;
+}
+}
+var163 = var165;
+goto RET_LABEL164;
+RET_LABEL164:(void)0;
+}
+var162 = var163;
+}
+if (var162){
+{
+array__Array___91d_93d_61d(var_table, var_color120, var_mpropdef155); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
+}
+} else {
+}
+{
+array__ArrayIterator__next(var_152); /* Direct call array#ArrayIterator#next on <var_152:ArrayIterator[MVirtualTypeDef]>*/
+}
+} else {
+goto BREAK_label168;
+}
+}
+BREAK_label168: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_152) on <var_152:ArrayIterator[MVirtualTypeDef]> */
+RET_LABEL169:(void)0;
+}
+}
+BREAK_label114: (void)0;
+{
+((void (*)(val*))(var_106->class->vft[COLOR_abstract_collection__Iterator__next]))(var_106) /* next on <var_106:Iterator[MProperty]>*/;
+}
+} else {
+goto BREAK_label170;
+}
+}
+BREAK_label170: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_106) on <var_106:Iterator[MProperty]> */
+RET_LABEL171:(void)0;
+}
+}
+{
+hash_collection__HashMap___91d_93d_61d(var_tables, var_mclass, var_table); /* Direct call hash_collection#HashMap#[]= on <var_tables:HashMap[MClass, Array[nullable MPropDef]]>*/
+}
+{
+((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[MClass]>*/;
+}
+} else {
+goto BREAK_label172;
+}
+}
+BREAK_label172: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[MClass]> */
+RET_LABEL173:(void)0;
+}
+}
+var = var_tables;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
+val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0) {
+val* var /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
+var1 = separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MClass]] */
+val* separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
+val* var /* : Map[MClass, Array[nullable MClass]] */;
+val* var_mclasses /* var mclasses: Set[MClass] */;
+val* var1 /* : HashMap[MClass, Array[nullable MClass]] */;
+val* var_tables /* var tables: HashMap[MClass, Array[nullable MClass]] */;
+val* var_ /* var : Set[MClass] */;
+val* var2 /* : Iterator[nullable Object] */;
+val* var_3 /* var : Iterator[MClass] */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable Object */;
+val* var_mclass /* var mclass: MClass */;
+val* var6 /* : Array[nullable MClass] */;
+val* var_table /* var table: Array[nullable MClass] */;
+val* var7 /* : Array[MClass] */;
+val* var_supers /* var supers: Array[MClass] */;
+val* var8 /* : MModule */;
+val* var10 /* : MModule */;
+val* var11 /* : POSet[MClass] */;
+short int var12 /* : Bool */;
+val* var13 /* : MModule */;
+val* var15 /* : MModule */;
+val* var16 /* : POSetElement[MClass] */;
+val* var17 /* : Collection[Object] */;
+val* var18 /* : Array[nullable Object] */;
+val* var_19 /* var : Array[MClass] */;
+val* var20 /* : ArrayIterator[nullable Object] */;
+val* var_21 /* var : ArrayIterator[MClass] */;
+short int var22 /* : Bool */;
+val* var23 /* : nullable Object */;
+val* var_sup /* var sup: MClass */;
+val* var24 /* : Map[MClass, Int] */;
+val* var26 /* : Map[MClass, Int] */;
+val* var27 /* : nullable Object */;
+long var28 /* : Int */;
+long var_color /* var color: Int */;
+long var29 /* : Int */;
+long var31 /* : Int */;
+short int var32 /* : Bool */;
+short int var34 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+short int var35 /* : Bool */;
+long var36 /* : Int */;
+long var38 /* : Int */;
+long var_i /* var i: Int */;
+long var_39 /* var : Int */;
+short int var40 /* : Bool */;
+short int var42 /* : Bool */;
+int cltype43;
+int idtype44;
+const char* var_class_name45;
+short int var46 /* : Bool */;
+val* var47 /* : null */;
+long var48 /* : Int */;
+long var49 /* : Int */;
+var_mclasses = p0;
+var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MClass);
+{
+((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MClass]]>*/;
+}
+var_tables = var1;
+var_ = var_mclasses;
+{
+var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[MClass]>*/;
+}
+var_3 = var2;
+for(;;) {
+{
+var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[MClass]>*/;
+}
+if (var4){
+{
+var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[MClass]>*/;
+}
+var_mclass = var5;
+var6 = NEW_array__Array(&type_array__Arraynullable_model__MClass);
+{
+((void (*)(val*))(var6->class->vft[COLOR_kernel__Object__init]))(var6) /* init on <var6:Array[nullable MClass]>*/;
+}
+var_table = var6;
+var7 = NEW_array__Array(&type_array__Arraymodel__MClass);
+{
+((void (*)(val*))(var7->class->vft[COLOR_kernel__Object__init]))(var7) /* init on <var7:Array[MClass]>*/;
+}
+var_supers = var7;
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
+var10 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+var11 = model__MModule__flatten_mclass_hierarchy(var8);
+}
+{
+var12 = poset__POSet__has(var11, var_mclass);
+}
+if (var12){
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
+var15 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
+if (unlikely(var15 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var13 = var15;
+RET_LABEL14:(void)0;
+}
+}
+{
+var16 = model__MClass__in_hierarchy(var_mclass, var13);
+}
+{
+var17 = poset__POSetElement__greaters(var16);
+}
+{
+var18 = array__Collection__to_a(var17);
+}
+var_supers = var18;
+} else {
+}
+var_19 = var_supers;
+{
+var20 = array__AbstractArrayRead__iterator(var_19);
+}
+var_21 = var20;
+for(;;) {
+{
+var22 = array__ArrayIterator__is_ok(var_21);
+}
+if (var22){
+{
+var23 = array__ArrayIterator__item(var_21);
+}
+var_sup = var23;
+{
+{ /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors (self) on <self:SeparateErasureCompiler> */
+var26 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
+if (unlikely(var26 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
+PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 105);
+show_backtrace(1);
+}
+var24 = var26;
+RET_LABEL25:(void)0;
+}
+}
+{
+var27 = ((val* (*)(val*, val*))(var24->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var24, var_sup) /* [] on <var24:Map[MClass, Int]>*/;
+}
+var28 = ((struct instance_kernel__Int*)var27)->value; /* autounbox from nullable Object to Int */;
+var_color = var28;
+{
+{ /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MClass]> */
+var31 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MClass]> */
+var29 = var31;
+RET_LABEL30:(void)0;
+}
+}
+{
+{ /* Inline kernel#Int#<= (var29,var_color) on <var29:Int> */
+/* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
+/* <var_color:Int> isa OTHER */
+var34 = 1; /* easy <var_color:Int> isa OTHER*/
+if (unlikely(!var34)) {
+var_class_name = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
+show_backtrace(1);
+}
+var35 = var29 <= var_color;
+var32 = var35;
+goto RET_LABEL33;
+RET_LABEL33:(void)0;
+}
+}
+if (var32){
+{
+{ /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MClass]> */
+var38 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MClass]> */
+var36 = var38;
+RET_LABEL37:(void)0;
+}
+}
+var_i = var36;
+var_39 = var_color;
+for(;;) {
+{
+{ /* Inline kernel#Int#< (var_i,var_39) on <var_i:Int> */
+/* Covariant cast for argument 0 (i) <var_39:Int> isa OTHER */
+/* <var_39:Int> isa OTHER */
+var42 = 1; /* easy <var_39:Int> isa OTHER*/
+if (unlikely(!var42)) {
+var_class_name45 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name45);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
+show_backtrace(1);
+}
+var46 = var_i < var_39;
+var40 = var46;
+goto RET_LABEL41;
+RET_LABEL41:(void)0;
+}
+}
+if (var40){
+var47 = NULL;
+{
+array__Array___91d_93d_61d(var_table, var_i, var47); /* Direct call array#Array#[]= on <var_table:Array[nullable MClass]>*/
+}
+var48 = 1;
+{
+var49 = kernel__Int__successor(var_i, var48);
+}
+var_i = var49;
+} else {
+goto BREAK_label;
+}
+}
+BREAK_label: (void)0;
+} else {
+}
+{
+array__Array___91d_93d_61d(var_table, var_color, var_sup); /* Direct call array#Array#[]= on <var_table:Array[nullable MClass]>*/
+}
+{
+array__ArrayIterator__next(var_21); /* Direct call array#ArrayIterator#next on <var_21:ArrayIterator[MClass]>*/
+}
+} else {
+goto BREAK_label50;
+}
+}
+BREAK_label50: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_21) on <var_21:ArrayIterator[MClass]> */
+RET_LABEL51:(void)0;
+}
+}
+{
+hash_collection__HashMap___91d_93d_61d(var_tables, var_mclass, var_table); /* Direct call hash_collection#HashMap#[]= on <var_tables:HashMap[MClass, Array[nullable MClass]]>*/
+}
+{
+((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[MClass]>*/;
+}
+} else {
+goto BREAK_label52;
+}
+}
+BREAK_label52: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[MClass]> */
+RET_LABEL53:(void)0;
+}
+}
+var = var_tables;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MClass]] */
+val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
+val* var /* : Map[MClass, Array[nullable MClass]] */;
+val* var1 /* : Map[MClass, Array[nullable MClass]] */;
+var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: SeparateErasureCompiler) */
+void separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
+val* var /* : CodeWriter */;
+val* var2 /* : CodeWriter */;
+static val* varonce;
+val* var3 /* : String */;
+char* var4 /* : NativeString */;
+long var5 /* : Int */;
+val* var6 /* : FlatString */;
+val* var7 /* : CodeWriter */;
+val* var9 /* : CodeWriter */;
+static val* varonce10;
+val* var11 /* : String */;
+char* var12 /* : NativeString */;
+long var13 /* : Int */;
+val* var14 /* : FlatString */;
+val* var15 /* : CodeWriter */;
+val* var17 /* : CodeWriter */;
+static val* varonce18;
+val* var19 /* : String */;
+char* var20 /* : NativeString */;
+long var21 /* : Int */;
+val* var22 /* : FlatString */;
+val* var23 /* : CodeWriter */;
+val* var25 /* : CodeWriter */;
+static val* varonce26;
+val* var27 /* : String */;
+char* var28 /* : NativeString */;
+long var29 /* : Int */;
+val* var30 /* : FlatString */;
+val* var31 /* : CodeWriter */;
+val* var33 /* : CodeWriter */;
+static val* varonce34;
+val* var35 /* : String */;
+char* var36 /* : NativeString */;
+long var37 /* : Int */;
+val* var38 /* : FlatString */;
+val* var39 /* : CodeWriter */;
+val* var41 /* : CodeWriter */;
+static val* varonce42;
+val* var43 /* : String */;
+char* var44 /* : NativeString */;
+long var45 /* : Int */;
+val* var46 /* : FlatString */;
+{
+{ /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
+var2 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+if (varonce) {
+var3 = varonce;
+} else {
+var4 = "typedef void(*nitmethod_t)(void); /* general C type representing a Nit method. */";
+var5 = 81;
+var6 = string__NativeString__to_s_with_length(var4, var5);
+var3 = var6;
+varonce = var3;
+}
+{
+abstract_compiler__CodeWriter__add_decl(var, var3); /* Direct call abstract_compiler#CodeWriter#add_decl on <var:CodeWriter>*/
+}
+{
+separate_compiler__SeparateCompiler__compile_header_attribute_structs(self); /* Direct call separate_compiler#SeparateCompiler#compile_header_attribute_structs on <self:SeparateErasureCompiler>*/
+}
+{
+{ /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
+var9 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
+if (unlikely(var9 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
+show_backtrace(1);
+}
+var7 = var9;
+RET_LABEL8:(void)0;
+}
+}
+if (varonce10) {
+var11 = varonce10;
+} else {
+var12 = "struct class { int id; const char *name; int box_kind; int color; const struct vts_table *vts_table; const struct type_table *type_table; nitmethod_t vft[]; }; /* general C type representing a Nit class. */";
+var13 = 206;
+var14 = string__NativeString__to_s_with_length(var12, var13);
+var11 = var14;
+varonce10 = var11;
+}
+{
+abstract_compiler__CodeWriter__add_decl(var7, var11); /* Direct call abstract_compiler#CodeWriter#add_decl on <var7:CodeWriter>*/
+}
+{
+{ /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
+var17 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
+show_backtrace(1);
+}
+var15 = var17;
+RET_LABEL16:(void)0;
+}
+}
+if (varonce18) {
+var19 = varonce18;
+} else {
+var20 = "struct type_table { int size; int table[]; }; /* colorized type table. */";
+var21 = 73;
+var22 = string__NativeString__to_s_with_length(var20, var21);
+var19 = var22;
+varonce18 = var19;
+}
+{
+abstract_compiler__CodeWriter__add_decl(var15, var19); /* Direct call abstract_compiler#CodeWriter#add_decl on <var15:CodeWriter>*/
+}
+{
+{ /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
+var25 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
+if (unlikely(var25 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
+show_backtrace(1);
+}
+var23 = var25;
+RET_LABEL24:(void)0;
+}
+}
+if (varonce26) {
+var27 = varonce26;
+} else {
+var28 = "struct vts_entry { short int is_nullable; const struct class *class; }; /* link (nullable or not) between the vts and is bound. */";
+var29 = 130;
+var30 = string__NativeString__to_s_with_length(var28, var29);
+var27 = var30;
+varonce26 = var27;
+}
+{
+abstract_compiler__CodeWriter__add_decl(var23, var27); /* Direct call abstract_compiler#CodeWriter#add_decl on <var23:CodeWriter>*/
+}
+{
+{ /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
+var33 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
+if (unlikely(var33 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
+show_backtrace(1);
+}
+var31 = var33;
+RET_LABEL32:(void)0;
+}
+}
+if (varonce34) {
+var35 = varonce34;
+} else {
+var36 = "struct vts_table { int dummy; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
+var37 = 105;
+var38 = string__NativeString__to_s_with_length(var36, var37);
+var35 = var38;
+varonce34 = var35;
+}
+{
+abstract_compiler__CodeWriter__add_decl(var31, var35); /* Direct call abstract_compiler#CodeWriter#add_decl on <var31:CodeWriter>*/
+}
+{
+{ /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
+var41 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
+if (unlikely(var41 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
+show_backtrace(1);
+}
+var39 = var41;
+RET_LABEL40:(void)0;
+}
+}
+if (varonce42) {
+var43 = varonce42;
+} else {
+var44 = "typedef struct instance { const struct class *class; nitattribute_t attrs[1]; } val; /* general C type representing a Nit instance. */";
+var45 = 134;
+var46 = string__NativeString__to_s_with_length(var44, var45);
+var43 = var46;
+varonce42 = var43;
+}
+{
+abstract_compiler__CodeWriter__add_decl(var39, var43); /* Direct call abstract_compiler#CodeWriter#add_decl on <var39:CodeWriter>*/
+}
+RET_LABEL:;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: Object) */
+void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
+separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(self); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs on <self:Object(SeparateErasureCompiler)>*/
+RET_LABEL:;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: SeparateErasureCompiler, MClass) */
+void separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
+val* var_mclass /* var mclass: MClass */;
+val* var /* : MClassDef */;
+val* var2 /* : MClassDef */;
+val* var3 /* : MClassType */;
+val* var5 /* : MClassType */;
+val* var_mtype /* var mtype: MClassType */;
+val* var6 /* : String */;
+val* var_c_name /* var c_name: String */;
+val* var7 /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var9 /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var10 /* : nullable Object */;
+val* var_vft /* var vft: Array[nullable MPropDef] */;
+val* var11 /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var13 /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var14 /* : nullable Object */;
+val* var_attrs /* var attrs: Array[nullable MPropDef] */;
+val* var15 /* : Map[MClass, Array[nullable MClass]] */;
+val* var17 /* : Map[MClass, Array[nullable MClass]] */;
+val* var18 /* : nullable Object */;
+val* var_class_table /* var class_table: Array[nullable MClass] */;
+val* var19 /* : SeparateCompilerVisitor */;
+val* var_v /* var v: SeparateCompilerVisitor */;
+val* var20 /* : nullable RapidTypeAnalysis */;
+val* var22 /* : nullable RapidTypeAnalysis */;
+val* var_rta /* var rta: nullable RapidTypeAnalysis */;
+short int var23 /* : Bool */;
+short int var_is_dead /* var is_dead: Bool */;
+short int var24 /* : Bool */;
+short int var25 /* : Bool */;
+short int var26 /* : Bool */;
+short int var27 /* : Bool */;
+short int var28 /* : Bool */;