+if (varonce545) {
+var546 = varonce545;
+} else {
+var547 = "if(";
+var548 = 3;
+var549 = string__NativeString__to_s_with_length(var547, var548);
+var546 = var549;
+varonce545 = var546;
+}
+if (varonce550) {
+var551 = varonce550;
+} else {
+var552 = " == NULL) {";
+var553 = 11;
+var554 = string__NativeString__to_s_with_length(var552, var553);
+var551 = var554;
+varonce550 = var551;
+}
+var555 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var555 = array_instance Array[Object] */
+var556 = 3;
+var557 = NEW_array__NativeArray(var556, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var557)->values[0] = (val*) var546;
+((struct instance_array__NativeArray*)var557)->values[1] = (val*) var_value;
+((struct instance_array__NativeArray*)var557)->values[2] = (val*) var551;
+((void (*)(val*, val*, long))(var555->class->vft[COLOR_array__Array__with_native]))(var555, var557, var556) /* with_native on <var555:Array[Object]>*/;
+}
+var558 = ((val* (*)(val*))(var555->class->vft[COLOR_string__Object__to_s]))(var555) /* to_s on <var555:Array[Object]>*/;
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var558) /* add on <self:SeparateErasureCompilerVisitor>*/;
+if (varonce559) {
+var560 = varonce559;
+} else {
+var561 = " = ";
+var562 = 3;
+var563 = string__NativeString__to_s_with_length(var561, var562);
+var560 = var563;
+varonce559 = var560;
+}
+if (varonce564) {
+var565 = varonce564;
+} else {
+var566 = ";";
+var567 = 1;
+var568 = string__NativeString__to_s_with_length(var566, var567);
+var565 = var568;
+varonce564 = var565;
+}
+var569 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var569 = array_instance Array[Object] */
+var570 = 4;
+var571 = NEW_array__NativeArray(var570, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var571)->values[0] = (val*) var_res;
+((struct instance_array__NativeArray*)var571)->values[1] = (val*) var560;
+((struct instance_array__NativeArray*)var571)->values[2] = (val*) var_accept_null;
+((struct instance_array__NativeArray*)var571)->values[3] = (val*) var565;
+((void (*)(val*, val*, long))(var569->class->vft[COLOR_array__Array__with_native]))(var569, var571, var570) /* with_native on <var569:Array[Object]>*/;
+}
+var572 = ((val* (*)(val*))(var569->class->vft[COLOR_string__Object__to_s]))(var569) /* to_s on <var569:Array[Object]>*/;
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var572) /* add on <self:SeparateErasureCompilerVisitor>*/;
+if (varonce573) {
+var574 = varonce573;
+} else {
+var575 = "} else {";
+var576 = 8;
+var577 = string__NativeString__to_s_with_length(var575, var576);
+var574 = var577;
+varonce573 = var574;
+}
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var574) /* add on <self:SeparateErasureCompilerVisitor>*/;
+} else {
+}
+var578 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
+/* <var578:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
+cltype580 = type_separate_erasure_compiler__SeparateErasureCompiler.color;
+idtype581 = type_separate_erasure_compiler__SeparateErasureCompiler.id;
+if(cltype580 >= var578->type->table_size) {
+var579 = 0;
+} else {
+var579 = var578->type->type_table[cltype580] == idtype581;
+}
+if (!var579) {
+var_class_name582 = var578 == NULL ? "null" : var578->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name582);
+fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 563);
+show_backtrace(1);
+}
+var583 = ((val* (*)(val*))(var578->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(var578) /* class_layout on <var578:SeparateCompiler(SeparateErasureCompiler)>*/;
+/* <var583:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
+cltype585 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
+idtype586 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
+if(var583 == NULL) {
+var584 = 0;
+} else {
+if(cltype585 >= var583->type->table_size) {
+var584 = 0;
+} else {
+var584 = var583->type->type_table[cltype585] == idtype586;
+}
+}
+if (var584){
+if (varonce587) {
+var588 = varonce587;
+} else {
+var589 = " = HASH(";
+var590 = 8;
+var591 = string__NativeString__to_s_with_length(var589, var590);
+var588 = var591;
+varonce587 = var588;
+}
+if (varonce592) {
+var593 = varonce592;
+} else {
+var594 = "color, ";
+var595 = 7;
+var596 = string__NativeString__to_s_with_length(var594, var595);
+var593 = var596;
+varonce592 = var593;
+}
+if (varonce597) {
+var598 = varonce597;
+} else {
+var599 = ");";
+var600 = 2;
+var601 = string__NativeString__to_s_with_length(var599, var600);
+var598 = var601;
+varonce597 = var598;
+}
+var602 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var602 = array_instance Array[Object] */
+var603 = 6;
+var604 = NEW_array__NativeArray(var603, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var604)->values[0] = (val*) var_cltype;
+((struct instance_array__NativeArray*)var604)->values[1] = (val*) var588;
+((struct instance_array__NativeArray*)var604)->values[2] = (val*) var_class_ptr;
+((struct instance_array__NativeArray*)var604)->values[3] = (val*) var593;
+((struct instance_array__NativeArray*)var604)->values[4] = (val*) var_idtype;
+((struct instance_array__NativeArray*)var604)->values[5] = (val*) var598;
+((void (*)(val*, val*, long))(var602->class->vft[COLOR_array__Array__with_native]))(var602, var604, var603) /* with_native on <var602:Array[Object]>*/;
+}
+var605 = ((val* (*)(val*))(var602->class->vft[COLOR_string__Object__to_s]))(var602) /* to_s on <var602:Array[Object]>*/;
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var605) /* add on <self:SeparateErasureCompilerVisitor>*/;
+} else {
+}
+if (varonce606) {
+var607 = varonce606;
+} else {
+var608 = "if(";
+var609 = 3;
+var610 = string__NativeString__to_s_with_length(var608, var609);
+var607 = var610;
+varonce606 = var607;
+}
+if (varonce611) {
+var612 = varonce611;
+} else {
+var613 = " >= ";
+var614 = 4;
+var615 = string__NativeString__to_s_with_length(var613, var614);
+var612 = var615;
+varonce611 = var612;
+}
+if (varonce616) {
+var617 = varonce616;
+} else {
+var618 = "type_table->size) {";
+var619 = 19;
+var620 = string__NativeString__to_s_with_length(var618, var619);
+var617 = var620;
+varonce616 = var617;
+}
+var621 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var621 = array_instance Array[Object] */
+var622 = 5;
+var623 = NEW_array__NativeArray(var622, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var623)->values[0] = (val*) var607;
+((struct instance_array__NativeArray*)var623)->values[1] = (val*) var_cltype;
+((struct instance_array__NativeArray*)var623)->values[2] = (val*) var612;
+((struct instance_array__NativeArray*)var623)->values[3] = (val*) var_class_ptr;
+((struct instance_array__NativeArray*)var623)->values[4] = (val*) var617;
+((void (*)(val*, val*, long))(var621->class->vft[COLOR_array__Array__with_native]))(var621, var623, var622) /* with_native on <var621:Array[Object]>*/;
+}
+var624 = ((val* (*)(val*))(var621->class->vft[COLOR_string__Object__to_s]))(var621) /* to_s on <var621:Array[Object]>*/;
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var624) /* add on <self:SeparateErasureCompilerVisitor>*/;
+if (varonce625) {
+var626 = varonce625;
+} else {
+var627 = " = 0;";
+var628 = 5;
+var629 = string__NativeString__to_s_with_length(var627, var628);
+var626 = var629;
+varonce625 = var626;
+}
+var630 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var630 = array_instance Array[Object] */
+var631 = 2;
+var632 = NEW_array__NativeArray(var631, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var632)->values[0] = (val*) var_res;
+((struct instance_array__NativeArray*)var632)->values[1] = (val*) var626;
+((void (*)(val*, val*, long))(var630->class->vft[COLOR_array__Array__with_native]))(var630, var632, var631) /* with_native on <var630:Array[Object]>*/;
+}
+var633 = ((val* (*)(val*))(var630->class->vft[COLOR_string__Object__to_s]))(var630) /* to_s on <var630:Array[Object]>*/;
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var633) /* add on <self:SeparateErasureCompilerVisitor>*/;
+if (varonce634) {
+var635 = varonce634;
+} else {
+var636 = "} else {";
+var637 = 8;
+var638 = string__NativeString__to_s_with_length(var636, var637);
+var635 = var638;
+varonce634 = var635;
+}
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var635) /* add on <self:SeparateErasureCompilerVisitor>*/;
+if (varonce639) {
+var640 = varonce639;
+} else {
+var641 = " = ";
+var642 = 3;
+var643 = string__NativeString__to_s_with_length(var641, var642);
+var640 = var643;
+varonce639 = var640;
+}
+if (varonce644) {
+var645 = varonce644;
+} else {
+var646 = "type_table->table[";
+var647 = 18;
+var648 = string__NativeString__to_s_with_length(var646, var647);
+var645 = var648;
+varonce644 = var645;
+}
+if (varonce649) {
+var650 = varonce649;
+} else {
+var651 = "] == ";
+var652 = 5;
+var653 = string__NativeString__to_s_with_length(var651, var652);
+var650 = var653;
+varonce649 = var650;
+}
+if (varonce654) {
+var655 = varonce654;
+} else {
+var656 = ";";
+var657 = 1;
+var658 = string__NativeString__to_s_with_length(var656, var657);
+var655 = var658;
+varonce654 = var655;
+}
+var659 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var659 = array_instance Array[Object] */
+var660 = 8;
+var661 = NEW_array__NativeArray(var660, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var661)->values[0] = (val*) var_res;
+((struct instance_array__NativeArray*)var661)->values[1] = (val*) var640;
+((struct instance_array__NativeArray*)var661)->values[2] = (val*) var_class_ptr;
+((struct instance_array__NativeArray*)var661)->values[3] = (val*) var645;
+((struct instance_array__NativeArray*)var661)->values[4] = (val*) var_cltype;
+((struct instance_array__NativeArray*)var661)->values[5] = (val*) var650;
+((struct instance_array__NativeArray*)var661)->values[6] = (val*) var_idtype;
+((struct instance_array__NativeArray*)var661)->values[7] = (val*) var655;
+((void (*)(val*, val*, long))(var659->class->vft[COLOR_array__Array__with_native]))(var659, var661, var660) /* with_native on <var659:Array[Object]>*/;
+}
+var662 = ((val* (*)(val*))(var659->class->vft[COLOR_string__Object__to_s]))(var659) /* to_s on <var659:Array[Object]>*/;
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var662) /* add on <self:SeparateErasureCompilerVisitor>*/;
+if (varonce663) {
+var664 = varonce663;
+} else {
+var665 = "}";
+var666 = 1;
+var667 = string__NativeString__to_s_with_length(var665, var666);
+var664 = var667;
+varonce663 = var664;
+}
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var664) /* add on <self:SeparateErasureCompilerVisitor>*/;
+if (var_maybe_null){
+if (varonce668) {
+var669 = varonce668;