-static val* varonce137;
-val* var138 /* : String */;
-char* var139 /* : NativeString */;
-long var140 /* : Int */;
-val* var141 /* : String */;
-val* var142 /* : Array[Object] */;
-long var143 /* : Int */;
-val* var144 /* : NativeArray[Object] */;
-val* var145 /* : String */;
-static val* varonce146;
-val* var147 /* : String */;
-char* var148 /* : NativeString */;
-long var149 /* : Int */;
-val* var150 /* : String */;
-static val* varonce151;
-val* var152 /* : String */;
-char* var153 /* : NativeString */;
-long var154 /* : Int */;
-val* var155 /* : String */;
-val* var156 /* : Array[Object] */;
-long var157 /* : Int */;
-val* var158 /* : NativeArray[Object] */;
-val* var159 /* : String */;
-static val* varonce160;
-val* var161 /* : String */;
-char* var162 /* : NativeString */;
-long var163 /* : Int */;
-val* var164 /* : String */;
-static val* varonce165;
-val* var166 /* : String */;
-char* var167 /* : NativeString */;
-long var168 /* : Int */;
-val* var169 /* : String */;
-static val* varonce170;
-val* var171 /* : String */;
-char* var172 /* : NativeString */;
-long var173 /* : Int */;
-val* var174 /* : String */;
-val* var175 /* : Array[Object] */;
-long var176 /* : Int */;
-val* var177 /* : NativeArray[Object] */;
-val* var178 /* : String */;
-static val* varonce179;
-val* var180 /* : String */;
-char* var181 /* : NativeString */;
-long var182 /* : Int */;
-val* var183 /* : String */;
-val* var184 /* : Range[Int] */;
-long var185 /* : Int */;
-long var186 /* : Int */;
-val* var187 /* : Discrete */;
-val* var188 /* : Discrete */;
-val* var189 /* : Iterator[nullable Object] */;
-short int var190 /* : Bool */;
-val* var191 /* : nullable Object */;
-long var_i /* var i: Int */;
-long var192 /* : Int */;
-val* var193 /* : nullable Object */;
-val* var_mpropdef /* var mpropdef: nullable MPropDef */;
-val* var194 /* : null */;
-short int var195 /* : Bool */;
-static val* varonce196;
-val* var197 /* : String */;
-char* var198 /* : NativeString */;
-long var199 /* : Int */;
-val* var200 /* : String */;
-short int var201 /* : Bool */;
-short int var202 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var203 /* : MClassDef */;
-val* var204 /* : MClassType */;
-val* var205 /* : String */;
-static val* varonce206;
-val* var207 /* : String */;
-char* var208 /* : NativeString */;
-long var209 /* : Int */;
-val* var210 /* : String */;
-short int var211 /* : Bool */;
-static val* varonce212;
-val* var213 /* : String */;
-char* var214 /* : NativeString */;
-long var215 /* : Int */;
-val* var216 /* : String */;
-val* var217 /* : String */;
-val* var218 /* : Array[Object] */;
-long var219 /* : Int */;
-val* var220 /* : NativeArray[Object] */;
-val* var221 /* : String */;
-static val* varonce222;
-val* var223 /* : String */;
-char* var224 /* : NativeString */;
-long var225 /* : Int */;
-val* var226 /* : String */;
-val* var227 /* : String */;
-static val* varonce228;
-val* var229 /* : String */;
-char* var230 /* : NativeString */;
-long var231 /* : Int */;
-val* var232 /* : String */;
-val* var233 /* : MModule */;
-static val* varonce234;
-val* var235 /* : String */;
-char* var236 /* : NativeString */;
-long var237 /* : Int */;
-val* var238 /* : String */;
-static val* varonce239;
-val* var240 /* : String */;
-char* var241 /* : NativeString */;
-long var242 /* : Int */;
-val* var243 /* : String */;
-static val* varonce244;
-val* var245 /* : String */;
-char* var246 /* : NativeString */;
-long var247 /* : Int */;
-val* var248 /* : String */;
-val* var249 /* : Array[Object] */;
-long var250 /* : Int */;
-val* var251 /* : NativeArray[Object] */;
-val* var252 /* : String */;
-val* var253 /* : String */;
-val* var254 /* : Array[Object] */;
-long var255 /* : Int */;
-val* var256 /* : NativeArray[Object] */;
-val* var257 /* : String */;
-static val* varonce258;
-val* var259 /* : String */;
-char* var260 /* : NativeString */;
-long var261 /* : Int */;
-val* var262 /* : String */;
-val* var263 /* : String */;
-static val* varonce264;
-val* var265 /* : String */;
-char* var266 /* : NativeString */;
-long var267 /* : Int */;
-val* var268 /* : String */;
-val* var269 /* : MModule */;
-static val* varonce270;
-val* var271 /* : String */;
-char* var272 /* : NativeString */;
-long var273 /* : Int */;
-val* var274 /* : String */;
-static val* varonce275;
-val* var276 /* : String */;
-char* var277 /* : NativeString */;
-long var278 /* : Int */;
-val* var279 /* : String */;
-static val* varonce280;
-val* var281 /* : String */;
-char* var282 /* : NativeString */;
-long var283 /* : Int */;
-val* var284 /* : String */;
-val* var285 /* : Array[Object] */;
-long var286 /* : Int */;
-val* var287 /* : NativeArray[Object] */;
-val* var288 /* : String */;
-static val* varonce289;
-val* var290 /* : String */;
-char* var291 /* : NativeString */;
-long var292 /* : Int */;
-val* var293 /* : String */;
-static val* varonce294;
-val* var295 /* : String */;
-char* var296 /* : NativeString */;
-long var297 /* : Int */;
-val* var298 /* : String */;
-static val* varonce299;
-val* var300 /* : String */;
-char* var301 /* : NativeString */;
-long var302 /* : Int */;
-val* var303 /* : String */;
-static val* varonce304;
-val* var305 /* : String */;
-char* var306 /* : NativeString */;
-long var307 /* : Int */;
-val* var308 /* : String */;
-val* var309 /* : Array[Object] */;
-long var310 /* : Int */;
-val* var311 /* : NativeArray[Object] */;
-val* var312 /* : String */;
-long var313 /* : Int */;
-static val* varonce314;
-val* var315 /* : String */;
-char* var316 /* : NativeString */;
-long var317 /* : Int */;
-val* var318 /* : String */;
-val* var319 /* : Array[Object] */;
-long var320 /* : Int */;
-val* var321 /* : NativeArray[Object] */;
-val* var322 /* : Object */;
-val* var323 /* : String */;
-static val* varonce324;
-val* var325 /* : String */;
-char* var326 /* : NativeString */;
-long var327 /* : Int */;
-val* var328 /* : String */;
-val* var329 /* : Iterator[nullable Object] */;
-short int var330 /* : Bool */;
-val* var331 /* : nullable Object */;
-val* var_msuper /* var msuper: nullable MClass */;
-val* var332 /* : null */;
-short int var333 /* : Bool */;
-static val* varonce334;
-val* var335 /* : String */;
-char* var336 /* : NativeString */;
-long var337 /* : Int */;
-val* var338 /* : String */;
-val* var339 /* : nullable Layout[MClass] */;
-val* var340 /* : Map[Object, Int] */;
-val* var341 /* : nullable Object */;
-static val* varonce342;
-val* var343 /* : String */;
-char* var344 /* : NativeString */;
-long var345 /* : Int */;
-val* var346 /* : String */;
-static val* varonce347;
-val* var348 /* : String */;
-char* var349 /* : NativeString */;
-long var350 /* : Int */;
-val* var351 /* : String */;
-val* var352 /* : Array[Object] */;
-long var353 /* : Int */;
-val* var354 /* : NativeArray[Object] */;
-val* var355 /* : String */;
-static val* varonce357;
-val* var358 /* : String */;
-char* var359 /* : NativeString */;
-long var360 /* : Int */;
-val* var361 /* : String */;
-static val* varonce362;
-val* var363 /* : String */;
-char* var364 /* : NativeString */;
-long var365 /* : Int */;
-val* var366 /* : String */;
-val* var367 /* : String */;
-static val* varonce368;
+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 */;
+short int var_ /* var : Bool */;
+val* var29 /* : null */;
+short int var30 /* : Bool */;
+short int var31 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var33 /* : Bool */;
+short int var34 /* : Bool */;
+short int var35 /* : Bool */;
+short int var_36 /* var : Bool */;
+val* var37 /* : HashSet[MClass] */;
+val* var39 /* : HashSet[MClass] */;
+short int var40 /* : Bool */;
+short int var41 /* : Bool */;
+short int var_42 /* var : Bool */;
+val* var43 /* : String */;
+static val* varonce;
+val* var44 /* : String */;
+char* var45 /* : NativeString */;
+long var46 /* : Int */;
+val* var47 /* : FlatString */;
+short int var48 /* : Bool */;
+short int var49 /* : Bool */;
+short int var_50 /* var : Bool */;
+val* var51 /* : String */;
+val* var53 /* : String */;
+static val* varonce54;
+val* var55 /* : String */;
+char* var56 /* : NativeString */;
+long var57 /* : Int */;
+val* var58 /* : FlatString */;
+short int var59 /* : Bool */;
+short int var60 /* : Bool */;
+short int var62 /* : Bool */;
+short int var63 /* : Bool */;
+short int var64 /* : Bool */;
+short int var65 /* : Bool */;
+static val* varonce66;
+val* var67 /* : String */;
+char* var68 /* : NativeString */;
+long var69 /* : Int */;
+val* var70 /* : FlatString */;
+static val* varonce71;
+val* var72 /* : String */;
+char* var73 /* : NativeString */;
+long var74 /* : Int */;
+val* var75 /* : FlatString */;
+val* var76 /* : Array[Object] */;
+long var77 /* : Int */;
+val* var78 /* : NativeArray[Object] */;
+val* var79 /* : String */;
+static val* varonce80;
+val* var81 /* : String */;
+char* var82 /* : NativeString */;
+long var83 /* : Int */;
+val* var84 /* : FlatString */;
+val* var85 /* : Array[Object] */;
+long var86 /* : Int */;
+val* var87 /* : NativeArray[Object] */;
+val* var88 /* : String */;
+static val* varonce89;
+val* var90 /* : String */;
+char* var91 /* : NativeString */;
+long var92 /* : Int */;
+val* var93 /* : FlatString */;
+static val* varonce94;
+val* var95 /* : String */;
+char* var96 /* : NativeString */;
+long var97 /* : Int */;
+val* var98 /* : FlatString */;
+val* var99 /* : Array[Object] */;
+long var100 /* : Int */;
+val* var101 /* : NativeArray[Object] */;
+val* var102 /* : String */;
+static val* varonce103;
+val* var104 /* : String */;
+char* var105 /* : NativeString */;
+long var106 /* : Int */;
+val* var107 /* : FlatString */;
+static val* varonce108;
+val* var109 /* : String */;
+char* var110 /* : NativeString */;
+long var111 /* : Int */;
+val* var112 /* : FlatString */;
+val* var113 /* : Array[Object] */;
+long var114 /* : Int */;
+val* var115 /* : NativeArray[Object] */;
+val* var116 /* : String */;
+static val* varonce117;
+val* var118 /* : String */;
+char* var119 /* : NativeString */;
+long var120 /* : Int */;
+val* var121 /* : FlatString */;
+static val* varonce122;
+val* var123 /* : String */;
+char* var124 /* : NativeString */;
+long var125 /* : Int */;
+val* var126 /* : FlatString */;
+val* var127 /* : Array[Object] */;
+long var128 /* : Int */;
+val* var129 /* : NativeArray[Object] */;
+val* var130 /* : String */;
+val* var131 /* : Map[MClass, Int] */;
+val* var133 /* : Map[MClass, Int] */;
+val* var134 /* : nullable Object */;
+static val* varonce135;
+val* var136 /* : String */;
+char* var137 /* : NativeString */;
+long var138 /* : Int */;
+val* var139 /* : FlatString */;
+val* var140 /* : Array[Object] */;
+long var141 /* : Int */;
+val* var142 /* : NativeArray[Object] */;
+val* var143 /* : String */;
+static val* varonce144;
+val* var145 /* : String */;
+char* var146 /* : NativeString */;
+long var147 /* : Int */;
+val* var148 /* : FlatString */;
+val* var149 /* : String */;
+val* var151 /* : String */;
+static val* varonce152;
+val* var153 /* : String */;
+char* var154 /* : NativeString */;
+long var155 /* : Int */;
+val* var156 /* : FlatString */;
+val* var157 /* : Array[Object] */;
+long var158 /* : Int */;
+val* var159 /* : NativeArray[Object] */;
+val* var160 /* : String */;
+long var161 /* : Int */;
+static val* varonce162;
+val* var163 /* : String */;
+char* var164 /* : NativeString */;
+long var165 /* : Int */;
+val* var166 /* : FlatString */;
+val* var167 /* : Array[Object] */;
+long var168 /* : Int */;
+val* var169 /* : NativeArray[Object] */;
+val* var170 /* : Object */;
+val* var171 /* : String */;
+val* var172 /* : Map[MClass, Int] */;
+val* var174 /* : Map[MClass, Int] */;
+val* var175 /* : nullable Object */;
+static val* varonce176;
+val* var177 /* : String */;
+char* var178 /* : NativeString */;
+long var179 /* : Int */;
+val* var180 /* : FlatString */;
+val* var181 /* : Array[Object] */;
+long var182 /* : Int */;
+val* var183 /* : NativeArray[Object] */;
+val* var184 /* : String */;
+short int var185 /* : Bool */;
+short int var186 /* : Bool */;
+static val* varonce187;
+val* var188 /* : String */;
+char* var189 /* : NativeString */;
+long var190 /* : Int */;
+val* var191 /* : FlatString */;
+val* var192 /* : Array[Object] */;
+long var193 /* : Int */;
+val* var194 /* : NativeArray[Object] */;
+val* var195 /* : String */;
+static val* varonce196;
+val* var197 /* : String */;
+char* var198 /* : NativeString */;
+long var199 /* : Int */;
+val* var200 /* : FlatString */;
+static val* varonce201;
+val* var202 /* : String */;
+char* var203 /* : NativeString */;
+long var204 /* : Int */;
+val* var205 /* : FlatString */;
+val* var206 /* : Array[Object] */;
+long var207 /* : Int */;
+val* var208 /* : NativeArray[Object] */;
+val* var209 /* : String */;
+static val* varonce210;
+val* var211 /* : String */;
+char* var212 /* : NativeString */;
+long var213 /* : Int */;
+val* var214 /* : FlatString */;
+static val* varonce215;
+val* var216 /* : String */;
+char* var217 /* : NativeString */;
+long var218 /* : Int */;
+val* var219 /* : FlatString */;
+static val* varonce220;
+val* var221 /* : String */;
+char* var222 /* : NativeString */;
+long var223 /* : Int */;
+val* var224 /* : FlatString */;
+val* var225 /* : Array[Object] */;
+long var226 /* : Int */;
+val* var227 /* : NativeArray[Object] */;
+val* var228 /* : String */;
+static val* varonce229;
+val* var230 /* : String */;
+char* var231 /* : NativeString */;
+long var232 /* : Int */;
+val* var233 /* : FlatString */;
+long var234 /* : Int */;
+long var_i /* var i: Int */;
+long var235 /* : Int */;
+long var237 /* : Int */;
+long var_238 /* var : Int */;
+short int var239 /* : Bool */;
+short int var241 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+short int var242 /* : Bool */;
+val* var243 /* : nullable Object */;
+val* var_mpropdef /* var mpropdef: nullable MPropDef */;
+val* var244 /* : null */;
+short int var245 /* : Bool */;
+short int var246 /* : Bool */;
+val* var_other248 /* var other: nullable Object */;
+short int var249 /* : Bool */;
+short int var251 /* : Bool */;
+static val* varonce252;
+val* var253 /* : String */;
+char* var254 /* : NativeString */;
+long var255 /* : Int */;
+val* var256 /* : FlatString */;
+short int var257 /* : Bool */;
+int cltype258;
+int idtype259;
+short int var260 /* : Bool */;
+val* var261 /* : null */;
+short int var262 /* : Bool */;
+short int var263 /* : Bool */;
+short int var265 /* : Bool */;
+short int var266 /* : Bool */;
+short int var267 /* : Bool */;
+short int var_268 /* var : Bool */;
+val* var269 /* : HashSet[MMethodDef] */;
+val* var271 /* : HashSet[MMethodDef] */;
+short int var272 /* : Bool */;
+short int var273 /* : Bool */;
+static val* varonce274;
+val* var275 /* : String */;
+char* var276 /* : NativeString */;
+long var277 /* : Int */;
+val* var278 /* : FlatString */;
+val* var279 /* : MModule */;
+val* var281 /* : MModule */;
+static val* varonce282;
+val* var283 /* : String */;
+char* var284 /* : NativeString */;
+long var285 /* : Int */;
+val* var286 /* : FlatString */;
+static val* varonce287;
+val* var288 /* : String */;
+char* var289 /* : NativeString */;
+long var290 /* : Int */;
+val* var291 /* : FlatString */;
+static val* varonce292;
+val* var293 /* : String */;
+char* var294 /* : NativeString */;
+long var295 /* : Int */;
+val* var296 /* : FlatString */;
+val* var297 /* : Array[Object] */;
+long var298 /* : Int */;
+val* var299 /* : NativeArray[Object] */;
+val* var300 /* : String */;
+short int var301 /* : Bool */;
+short int var302 /* : Bool */;
+short int var_303 /* var : Bool */;
+val* var304 /* : MClassDef */;
+val* var306 /* : MClassDef */;
+val* var307 /* : MClassType */;
+val* var309 /* : MClassType */;
+val* var310 /* : String */;
+static val* varonce311;
+val* var312 /* : String */;
+char* var313 /* : NativeString */;
+long var314 /* : Int */;
+val* var315 /* : FlatString */;
+short int var316 /* : Bool */;
+short int var317 /* : Bool */;
+short int var319 /* : Bool */;
+short int var320 /* : Bool */;
+short int var321 /* : Bool */;
+static val* varonce322;
+val* var323 /* : String */;
+char* var324 /* : NativeString */;
+long var325 /* : Int */;
+val* var326 /* : FlatString */;
+val* var327 /* : String */;
+val* var328 /* : Array[Object] */;
+long var329 /* : Int */;
+val* var330 /* : NativeArray[Object] */;
+val* var331 /* : String */;
+static val* varonce332;
+val* var333 /* : String */;
+char* var334 /* : NativeString */;
+long var335 /* : Int */;
+val* var336 /* : FlatString */;
+val* var337 /* : String */;
+static val* varonce338;
+val* var339 /* : String */;
+char* var340 /* : NativeString */;
+long var341 /* : Int */;
+val* var342 /* : FlatString */;
+val* var343 /* : MModule */;
+val* var345 /* : MModule */;
+static val* varonce346;
+val* var347 /* : String */;
+char* var348 /* : NativeString */;
+long var349 /* : Int */;
+val* var350 /* : FlatString */;
+static val* varonce351;
+val* var352 /* : String */;
+char* var353 /* : NativeString */;
+long var354 /* : Int */;
+val* var355 /* : FlatString */;
+static val* varonce356;
+val* var357 /* : String */;
+char* var358 /* : NativeString */;
+long var359 /* : Int */;
+val* var360 /* : FlatString */;
+val* var361 /* : Array[Object] */;
+long var362 /* : Int */;
+val* var363 /* : NativeArray[Object] */;
+val* var364 /* : String */;
+val* var365 /* : String */;
+val* var366 /* : Array[Object] */;
+long var367 /* : Int */;
+val* var368 /* : NativeArray[Object] */;