+}
+{
+{ /* Inline model#MClass#kind (var1068) on <var1068:MClass> */
+var1073 = var1068->attrs[COLOR_model__MClass___kind].val; /* _kind on <var1068:MClass> */
+if (unlikely(var1073 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 371);
+show_backtrace(1);
+}
+var1071 = var1073;
+RET_LABEL1072:(void)0;
+}
+}
+{
+var1074 = model__Object__extern_kind(self);
+}
+{
+{ /* Inline kernel#Object#== (var1071,var1074) on <var1071:MClassKind> */
+var_other248 = var1074;
+{
+{ /* Inline kernel#Object#is_same_instance (var1071,var_other248) on <var1071:MClassKind> */
+var1080 = var1071 == var_other248;
+var1078 = var1080;
+goto RET_LABEL1079;
+RET_LABEL1079:(void)0;
+}
+}
+var1076 = var1078;
+goto RET_LABEL1077;
+RET_LABEL1077:(void)0;
+}
+var1075 = var1076;
+}
+var_1081 = var1075;
+if (var1075){
+{
+{ /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
+var1084 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
+if (unlikely(var1084 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
+show_backtrace(1);
+}
+var1082 = var1084;
+RET_LABEL1083:(void)0;
+}
+}
+{
+{ /* Inline model#MClass#name (var1082) on <var1082:MClass> */
+var1087 = var1082->attrs[COLOR_model__MClass___name].val; /* _name on <var1082:MClass> */
+if (unlikely(var1087 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
+show_backtrace(1);
+}
+var1085 = var1087;
+RET_LABEL1086:(void)0;
+}
+}
+if (varonce1088) {
+var1089 = varonce1088;
+} else {
+var1090 = "NativeString";
+var1091 = 12;
+var1092 = string__NativeString__to_s_with_length(var1090, var1091);
+var1089 = var1092;
+varonce1088 = var1089;
+}
+{
+{ /* Inline kernel#Object#!= (var1085,var1089) on <var1085:String> */
+var_other = var1089;
+{
+var1097 = ((short int (*)(val*, val*))(var1085->class->vft[COLOR_kernel__Object___61d_61d]))(var1085, var_other) /* == on <var1085:String>*/;
+var1096 = var1097;
+}
+var1098 = !var1096;
+var1094 = var1098;
+goto RET_LABEL1095;
+RET_LABEL1095:(void)0;
+}
+var1093 = var1094;
+}
+var1067 = var1093;
+} else {
+var1067 = var_1081;
+}
+if (var1067){
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
+var1101 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
+if (unlikely(var1101 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var1099 = var1101;
+RET_LABEL1100:(void)0;
+}
+}
+{
+{ /* Inline model#MModule#pointer_type (var1099) on <var1099:MModule> */
+var1104 = var1099->attrs[COLOR_model__MModule___pointer_type].val != NULL; /* _pointer_type on <var1099:MModule> */
+if(likely(var1104)) {
+var1105 = var1099->attrs[COLOR_model__MModule___pointer_type].val; /* _pointer_type on <var1099:MModule> */
+if (unlikely(var1105 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _pointer_type");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 217);
+show_backtrace(1);
+}
+} else {
+if (varonce1106) {
+var1107 = varonce1106;
+} else {
+var1108 = "Pointer";
+var1109 = 7;
+var1110 = string__NativeString__to_s_with_length(var1108, var1109);
+var1107 = var1110;
+varonce1106 = var1107;
+}
+{
+var1111 = model__MModule__get_primitive_class(var1099, var1107);
+}
+{
+{ /* Inline model#MClass#mclass_type (var1111) on <var1111:MClass> */
+var1114 = var1111->attrs[COLOR_model__MClass___mclass_type].val; /* _mclass_type on <var1111:MClass> */
+if (unlikely(var1114 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 435);
+show_backtrace(1);
+}
+var1112 = var1114;
+RET_LABEL1113:(void)0;
+}
+}
+var1099->attrs[COLOR_model__MModule___pointer_type].val = var1112; /* _pointer_type on <var1099:MModule> */
+var1105 = var1112;
+}
+var1102 = var1105;
+RET_LABEL1103:(void)0;
+}
+}
+var_pointer_type = var1102;
+if (varonce1115) {
+var1116 = varonce1115;
+} else {
+var1117 = "NEW_";
+var1118 = 4;
+var1119 = string__NativeString__to_s_with_length(var1117, var1118);
+var1116 = var1119;
+varonce1115 = var1116;
+}
+var1120 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1120 = array_instance Array[Object] */
+var1121 = 2;
+var1122 = NEW_array__NativeArray(var1121, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1122)->values[0] = (val*) var1116;
+((struct instance_array__NativeArray*)var1122)->values[1] = (val*) var_c_name;
+{
+((void (*)(val*, val*, long))(var1120->class->vft[COLOR_array__Array__with_native]))(var1120, var1122, var1121) /* with_native on <var1120:Array[Object]>*/;
+}
+}
+{
+var1123 = ((val* (*)(val*))(var1120->class->vft[COLOR_string__Object__to_s]))(var1120) /* to_s on <var1120:Array[Object]>*/;
+}
+{
+var1124 = abstract_compiler__MClassType__ctype(var_mtype);
+}
+if (varonce1125) {
+var1126 = varonce1125;
+} else {
+var1127 = " NEW_";
+var1128 = 5;
+var1129 = string__NativeString__to_s_with_length(var1127, var1128);
+var1126 = var1129;
+varonce1125 = var1126;
+}
+if (varonce1130) {
+var1131 = varonce1130;
+} else {
+var1132 = "();";
+var1133 = 3;
+var1134 = string__NativeString__to_s_with_length(var1132, var1133);
+var1131 = var1134;
+varonce1130 = var1131;
+}
+var1135 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1135 = array_instance Array[Object] */
+var1136 = 4;
+var1137 = NEW_array__NativeArray(var1136, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1137)->values[0] = (val*) var1124;
+((struct instance_array__NativeArray*)var1137)->values[1] = (val*) var1126;
+((struct instance_array__NativeArray*)var1137)->values[2] = (val*) var_c_name;
+((struct instance_array__NativeArray*)var1137)->values[3] = (val*) var1131;
+{
+((void (*)(val*, val*, long))(var1135->class->vft[COLOR_array__Array__with_native]))(var1135, var1137, var1136) /* with_native on <var1135:Array[Object]>*/;
+}
+}
+{
+var1138 = ((val* (*)(val*))(var1135->class->vft[COLOR_string__Object__to_s]))(var1135) /* to_s on <var1135:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompiler__provide_declaration(self, var1123, var1138); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
+}
+if (varonce1139) {
+var1140 = varonce1139;
+} else {
+var1141 = "/* allocate ";
+var1142 = 12;
+var1143 = string__NativeString__to_s_with_length(var1141, var1142);
+var1140 = var1143;
+varonce1139 = var1140;
+}
+if (varonce1144) {
+var1145 = varonce1144;
+} else {
+var1146 = " */";
+var1147 = 3;
+var1148 = string__NativeString__to_s_with_length(var1146, var1147);
+var1145 = var1148;
+varonce1144 = var1145;
+}
+var1149 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1149 = array_instance Array[Object] */
+var1150 = 3;
+var1151 = NEW_array__NativeArray(var1150, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1151)->values[0] = (val*) var1140;
+((struct instance_array__NativeArray*)var1151)->values[1] = (val*) var_mtype;
+((struct instance_array__NativeArray*)var1151)->values[2] = (val*) var1145;
+{
+((void (*)(val*, val*, long))(var1149->class->vft[COLOR_array__Array__with_native]))(var1149, var1151, var1150) /* with_native on <var1149:Array[Object]>*/;
+}
+}
+{
+var1152 = ((val* (*)(val*))(var1149->class->vft[COLOR_string__Object__to_s]))(var1149) /* to_s on <var1149:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var1152); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
+}
+{
+var1153 = abstract_compiler__MClassType__ctype(var_mtype);
+}
+if (varonce1154) {
+var1155 = varonce1154;
+} else {
+var1156 = " NEW_";
+var1157 = 5;
+var1158 = string__NativeString__to_s_with_length(var1156, var1157);
+var1155 = var1158;
+varonce1154 = var1155;
+}
+if (varonce1159) {
+var1160 = varonce1159;
+} else {
+var1161 = "() {";
+var1162 = 4;
+var1163 = string__NativeString__to_s_with_length(var1161, var1162);
+var1160 = var1163;
+varonce1159 = var1160;
+}
+var1164 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1164 = array_instance Array[Object] */
+var1165 = 4;
+var1166 = NEW_array__NativeArray(var1165, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1166)->values[0] = (val*) var1153;
+((struct instance_array__NativeArray*)var1166)->values[1] = (val*) var1155;
+((struct instance_array__NativeArray*)var1166)->values[2] = (val*) var_c_name;
+((struct instance_array__NativeArray*)var1166)->values[3] = (val*) var1160;
+{
+((void (*)(val*, val*, long))(var1164->class->vft[COLOR_array__Array__with_native]))(var1164, var1166, var1165) /* with_native on <var1164:Array[Object]>*/;
+}
+}
+{
+var1167 = ((val* (*)(val*))(var1164->class->vft[COLOR_string__Object__to_s]))(var1164) /* to_s on <var1164:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var1167); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
+}
+if (var_is_dead){
+if (varonce1168) {
+var1169 = varonce1168;
+} else {
+var1170 = " is DEAD";
+var1171 = 8;
+var1172 = string__NativeString__to_s_with_length(var1170, var1171);
+var1169 = var1172;
+varonce1168 = var1169;
+}
+var1173 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1173 = array_instance Array[Object] */
+var1174 = 2;
+var1175 = NEW_array__NativeArray(var1174, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1175)->values[0] = (val*) var_mclass;
+((struct instance_array__NativeArray*)var1175)->values[1] = (val*) var1169;
+{
+((void (*)(val*, val*, long))(var1173->class->vft[COLOR_array__Array__with_native]))(var1173, var1175, var1174) /* with_native on <var1173:Array[Object]>*/;
+}
+}
+{
+var1176 = ((val* (*)(val*))(var1173->class->vft[COLOR_string__Object__to_s]))(var1173) /* to_s on <var1173:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add_abort(var_v, var1176); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <var_v:SeparateCompilerVisitor>*/
+}
+} else {
+if (varonce1177) {
+var1178 = varonce1177;
+} else {
+var1179 = "self";
+var1180 = 4;
+var1181 = string__NativeString__to_s_with_length(var1179, var1180);
+var1178 = var1181;
+varonce1177 = var1178;
+}
+{
+var1182 = abstract_compiler__AbstractCompilerVisitor__new_named_var(var_v, var_mtype, var1178);
+}
+var_res1183 = var1182;
+var1184 = 1;
+{
+{ /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res1183,var1184) on <var_res1183:RuntimeVariable> */
+var_res1183->attrs[COLOR_abstract_compiler__RuntimeVariable___is_exact].s = var1184; /* _is_exact on <var_res1183:RuntimeVariable> */
+RET_LABEL1185:(void)0;
+}
+}
+if (varonce1186) {
+var1187 = varonce1186;
+} else {
+var1188 = " = nit_alloc(sizeof(struct instance_";
+var1189 = 36;
+var1190 = string__NativeString__to_s_with_length(var1188, var1189);
+var1187 = var1190;
+varonce1186 = var1187;
+}
+{
+var1191 = ((val* (*)(val*))(var_pointer_type->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_pointer_type) /* c_name on <var_pointer_type:MClassType>*/;
+}
+if (varonce1192) {
+var1193 = varonce1192;
+} else {
+var1194 = "));";
+var1195 = 3;
+var1196 = string__NativeString__to_s_with_length(var1194, var1195);
+var1193 = var1196;
+varonce1192 = var1193;
+}
+var1197 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1197 = array_instance Array[Object] */
+var1198 = 4;
+var1199 = NEW_array__NativeArray(var1198, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1199)->values[0] = (val*) var_res1183;
+((struct instance_array__NativeArray*)var1199)->values[1] = (val*) var1187;
+((struct instance_array__NativeArray*)var1199)->values[2] = (val*) var1191;
+((struct instance_array__NativeArray*)var1199)->values[3] = (val*) var1193;
+{
+((void (*)(val*, val*, long))(var1197->class->vft[COLOR_array__Array__with_native]))(var1197, var1199, var1198) /* with_native on <var1197:Array[Object]>*/;
+}
+}
+{
+var1200 = ((val* (*)(val*))(var1197->class->vft[COLOR_string__Object__to_s]))(var1197) /* to_s on <var1197:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(var_v, var1200); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
+}
+if (varonce1201) {
+var1202 = varonce1201;
+} else {
+var1203 = "class_";
+var1204 = 6;
+var1205 = string__NativeString__to_s_with_length(var1203, var1204);
+var1202 = var1205;
+varonce1201 = var1202;
+}
+var1206 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1206 = array_instance Array[Object] */
+var1207 = 2;
+var1208 = NEW_array__NativeArray(var1207, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1208)->values[0] = (val*) var1202;
+((struct instance_array__NativeArray*)var1208)->values[1] = (val*) var_c_name;
+{
+((void (*)(val*, val*, long))(var1206->class->vft[COLOR_array__Array__with_native]))(var1206, var1208, var1207) /* with_native on <var1206:Array[Object]>*/;
+}
+}
+{
+var1209 = ((val* (*)(val*))(var1206->class->vft[COLOR_string__Object__to_s]))(var1206) /* to_s on <var1206:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var1209); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
+}
+if (varonce1210) {
+var1211 = varonce1210;
+} else {
+var1212 = "->class = &class_";
+var1213 = 17;
+var1214 = string__NativeString__to_s_with_length(var1212, var1213);
+var1211 = var1214;
+varonce1210 = var1211;
+}
+if (varonce1215) {
+var1216 = varonce1215;
+} else {
+var1217 = ";";
+var1218 = 1;
+var1219 = string__NativeString__to_s_with_length(var1217, var1218);
+var1216 = var1219;
+varonce1215 = var1216;
+}
+var1220 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1220 = array_instance Array[Object] */
+var1221 = 4;
+var1222 = NEW_array__NativeArray(var1221, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1222)->values[0] = (val*) var_res1183;
+((struct instance_array__NativeArray*)var1222)->values[1] = (val*) var1211;
+((struct instance_array__NativeArray*)var1222)->values[2] = (val*) var_c_name;
+((struct instance_array__NativeArray*)var1222)->values[3] = (val*) var1216;
+{
+((void (*)(val*, val*, long))(var1220->class->vft[COLOR_array__Array__with_native]))(var1220, var1222, var1221) /* with_native on <var1220:Array[Object]>*/;
+}
+}
+{
+var1223 = ((val* (*)(val*))(var1220->class->vft[COLOR_string__Object__to_s]))(var1220) /* to_s on <var1220:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(var_v, var1223); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
+}
+if (varonce1224) {
+var1225 = varonce1224;
+} else {
+var1226 = "((struct instance_";
+var1227 = 18;
+var1228 = string__NativeString__to_s_with_length(var1226, var1227);
+var1225 = var1228;
+varonce1224 = var1225;
+}
+{
+var1229 = ((val* (*)(val*))(var_pointer_type->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_pointer_type) /* c_name on <var_pointer_type:MClassType>*/;
+}
+if (varonce1230) {
+var1231 = varonce1230;
+} else {
+var1232 = "*)";
+var1233 = 2;
+var1234 = string__NativeString__to_s_with_length(var1232, var1233);
+var1231 = var1234;
+varonce1230 = var1231;
+}
+if (varonce1235) {
+var1236 = varonce1235;
+} else {
+var1237 = ")->value = NULL;";
+var1238 = 16;
+var1239 = string__NativeString__to_s_with_length(var1237, var1238);
+var1236 = var1239;
+varonce1235 = var1236;
+}
+var1240 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1240 = array_instance Array[Object] */
+var1241 = 5;
+var1242 = NEW_array__NativeArray(var1241, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1242)->values[0] = (val*) var1225;
+((struct instance_array__NativeArray*)var1242)->values[1] = (val*) var1229;
+((struct instance_array__NativeArray*)var1242)->values[2] = (val*) var1231;
+((struct instance_array__NativeArray*)var1242)->values[3] = (val*) var_res1183;
+((struct instance_array__NativeArray*)var1242)->values[4] = (val*) var1236;
+{
+((void (*)(val*, val*, long))(var1240->class->vft[COLOR_array__Array__with_native]))(var1240, var1242, var1241) /* with_native on <var1240:Array[Object]>*/;
+}
+}
+{
+var1243 = ((val* (*)(val*))(var1240->class->vft[COLOR_string__Object__to_s]))(var1240) /* to_s on <var1240:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(var_v, var1243); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
+}
+if (varonce1244) {
+var1245 = varonce1244;
+} else {
+var1246 = "return ";
+var1247 = 7;
+var1248 = string__NativeString__to_s_with_length(var1246, var1247);
+var1245 = var1248;
+varonce1244 = var1245;
+}
+if (varonce1249) {
+var1250 = varonce1249;
+} else {
+var1251 = ";";
+var1252 = 1;
+var1253 = string__NativeString__to_s_with_length(var1251, var1252);
+var1250 = var1253;
+varonce1249 = var1250;
+}
+var1254 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1254 = array_instance Array[Object] */
+var1255 = 3;
+var1256 = NEW_array__NativeArray(var1255, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1256)->values[0] = (val*) var1245;
+((struct instance_array__NativeArray*)var1256)->values[1] = (val*) var_res1183;
+((struct instance_array__NativeArray*)var1256)->values[2] = (val*) var1250;
+{
+((void (*)(val*, val*, long))(var1254->class->vft[COLOR_array__Array__with_native]))(var1254, var1256, var1255) /* with_native on <var1254:Array[Object]>*/;
+}
+}
+{
+var1257 = ((val* (*)(val*))(var1254->class->vft[COLOR_string__Object__to_s]))(var1254) /* to_s on <var1254:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(var_v, var1257); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
+}
+}
+if (varonce1258) {
+var1259 = varonce1258;
+} else {
+var1260 = "}";
+var1261 = 1;
+var1262 = string__NativeString__to_s_with_length(var1260, var1261);
+var1259 = var1262;
+varonce1258 = var1259;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(var_v, var1259); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
+}
+goto RET_LABEL;
+} else {
+}
+}
+}
+if (varonce1263) {
+var1264 = varonce1263;
+} else {
+var1265 = "NEW_";
+var1266 = 4;
+var1267 = string__NativeString__to_s_with_length(var1265, var1266);
+var1264 = var1267;
+varonce1263 = var1264;
+}
+var1268 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1268 = array_instance Array[Object] */
+var1269 = 2;
+var1270 = NEW_array__NativeArray(var1269, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1270)->values[0] = (val*) var1264;
+((struct instance_array__NativeArray*)var1270)->values[1] = (val*) var_c_name;
+{
+((void (*)(val*, val*, long))(var1268->class->vft[COLOR_array__Array__with_native]))(var1268, var1270, var1269) /* with_native on <var1268:Array[Object]>*/;
+}
+}
+{
+var1271 = ((val* (*)(val*))(var1268->class->vft[COLOR_string__Object__to_s]))(var1268) /* to_s on <var1268:Array[Object]>*/;
+}
+{
+var1272 = abstract_compiler__MClassType__ctype(var_mtype);
+}
+if (varonce1273) {
+var1274 = varonce1273;
+} else {
+var1275 = " NEW_";
+var1276 = 5;
+var1277 = string__NativeString__to_s_with_length(var1275, var1276);
+var1274 = var1277;
+varonce1273 = var1274;
+}
+if (varonce1278) {
+var1279 = varonce1278;
+} else {
+var1280 = "(void);";
+var1281 = 7;
+var1282 = string__NativeString__to_s_with_length(var1280, var1281);
+var1279 = var1282;
+varonce1278 = var1279;
+}
+var1283 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1283 = array_instance Array[Object] */
+var1284 = 4;
+var1285 = NEW_array__NativeArray(var1284, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1285)->values[0] = (val*) var1272;
+((struct instance_array__NativeArray*)var1285)->values[1] = (val*) var1274;
+((struct instance_array__NativeArray*)var1285)->values[2] = (val*) var_c_name;
+((struct instance_array__NativeArray*)var1285)->values[3] = (val*) var1279;
+{
+((void (*)(val*, val*, long))(var1283->class->vft[COLOR_array__Array__with_native]))(var1283, var1285, var1284) /* with_native on <var1283:Array[Object]>*/;
+}
+}
+{
+var1286 = ((val* (*)(val*))(var1283->class->vft[COLOR_string__Object__to_s]))(var1283) /* to_s on <var1283:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompiler__provide_declaration(self, var1271, var1286); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
+}
+if (varonce1287) {
+var1288 = varonce1287;
+} else {
+var1289 = "/* allocate ";
+var1290 = 12;
+var1291 = string__NativeString__to_s_with_length(var1289, var1290);
+var1288 = var1291;
+varonce1287 = var1288;
+}
+if (varonce1292) {
+var1293 = varonce1292;
+} else {
+var1294 = " */";
+var1295 = 3;
+var1296 = string__NativeString__to_s_with_length(var1294, var1295);
+var1293 = var1296;
+varonce1292 = var1293;
+}
+var1297 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1297 = array_instance Array[Object] */
+var1298 = 3;
+var1299 = NEW_array__NativeArray(var1298, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1299)->values[0] = (val*) var1288;
+((struct instance_array__NativeArray*)var1299)->values[1] = (val*) var_mtype;
+((struct instance_array__NativeArray*)var1299)->values[2] = (val*) var1293;
+{
+((void (*)(val*, val*, long))(var1297->class->vft[COLOR_array__Array__with_native]))(var1297, var1299, var1298) /* with_native on <var1297:Array[Object]>*/;
+}
+}
+{
+var1300 = ((val* (*)(val*))(var1297->class->vft[COLOR_string__Object__to_s]))(var1297) /* to_s on <var1297:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var1300); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
+}
+{
+var1301 = abstract_compiler__MClassType__ctype(var_mtype);
+}
+if (varonce1302) {
+var1303 = varonce1302;
+} else {
+var1304 = " NEW_";
+var1305 = 5;
+var1306 = string__NativeString__to_s_with_length(var1304, var1305);
+var1303 = var1306;
+varonce1302 = var1303;
+}
+if (varonce1307) {
+var1308 = varonce1307;
+} else {
+var1309 = "(void) {";
+var1310 = 8;
+var1311 = string__NativeString__to_s_with_length(var1309, var1310);
+var1308 = var1311;
+varonce1307 = var1308;
+}
+var1312 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1312 = array_instance Array[Object] */
+var1313 = 4;
+var1314 = NEW_array__NativeArray(var1313, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1314)->values[0] = (val*) var1301;
+((struct instance_array__NativeArray*)var1314)->values[1] = (val*) var1303;
+((struct instance_array__NativeArray*)var1314)->values[2] = (val*) var_c_name;
+((struct instance_array__NativeArray*)var1314)->values[3] = (val*) var1308;
+{
+((void (*)(val*, val*, long))(var1312->class->vft[COLOR_array__Array__with_native]))(var1312, var1314, var1313) /* with_native on <var1312:Array[Object]>*/;
+}
+}
+{
+var1315 = ((val* (*)(val*))(var1312->class->vft[COLOR_string__Object__to_s]))(var1312) /* to_s on <var1312:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var1315); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
+}
+if (var_is_dead){
+if (varonce1316) {
+var1317 = varonce1316;
+} else {
+var1318 = " is DEAD";
+var1319 = 8;
+var1320 = string__NativeString__to_s_with_length(var1318, var1319);
+var1317 = var1320;
+varonce1316 = var1317;
+}
+var1321 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1321 = array_instance Array[Object] */
+var1322 = 2;
+var1323 = NEW_array__NativeArray(var1322, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1323)->values[0] = (val*) var_mclass;
+((struct instance_array__NativeArray*)var1323)->values[1] = (val*) var1317;
+{
+((void (*)(val*, val*, long))(var1321->class->vft[COLOR_array__Array__with_native]))(var1321, var1323, var1322) /* with_native on <var1321:Array[Object]>*/;
+}
+}
+{
+var1324 = ((val* (*)(val*))(var1321->class->vft[COLOR_string__Object__to_s]))(var1321) /* to_s on <var1321:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add_abort(var_v, var1324); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <var_v:SeparateCompilerVisitor>*/
+}
+} else {
+if (varonce1325) {
+var1326 = varonce1325;
+} else {
+var1327 = "self";
+var1328 = 4;
+var1329 = string__NativeString__to_s_with_length(var1327, var1328);
+var1326 = var1329;
+varonce1325 = var1326;
+}
+{
+var1330 = abstract_compiler__AbstractCompilerVisitor__new_named_var(var_v, var_mtype, var1326);
+}
+var_res1331 = var1330;
+var1332 = 1;
+{
+{ /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res1331,var1332) on <var_res1331:RuntimeVariable> */
+var_res1331->attrs[COLOR_abstract_compiler__RuntimeVariable___is_exact].s = var1332; /* _is_exact on <var_res1331:RuntimeVariable> */
+RET_LABEL1333:(void)0;
+}
+}
+if (varonce1334) {
+var1335 = varonce1334;
+} else {
+var1336 = " = nit_alloc(sizeof(struct instance) + ";
+var1337 = 39;
+var1338 = string__NativeString__to_s_with_length(var1336, var1337);
+var1335 = var1338;
+varonce1334 = var1335;
+}
+{
+{ /* Inline array#AbstractArrayRead#length (var_attrs) on <var_attrs:Array[nullable MPropDef]> */
+var1341 = var_attrs->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_attrs:Array[nullable MPropDef]> */
+var1339 = var1341;
+RET_LABEL1340:(void)0;
+}
+}
+if (varonce1342) {
+var1343 = varonce1342;
+} else {
+var1344 = "*sizeof(nitattribute_t));";
+var1345 = 25;
+var1346 = string__NativeString__to_s_with_length(var1344, var1345);
+var1343 = var1346;
+varonce1342 = var1343;
+}
+var1347 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1347 = array_instance Array[Object] */
+var1348 = 4;
+var1349 = NEW_array__NativeArray(var1348, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1349)->values[0] = (val*) var_res1331;
+((struct instance_array__NativeArray*)var1349)->values[1] = (val*) var1335;
+var1350 = BOX_kernel__Int(var1339); /* autobox from Int to Object */
+((struct instance_array__NativeArray*)var1349)->values[2] = (val*) var1350;
+((struct instance_array__NativeArray*)var1349)->values[3] = (val*) var1343;
+{
+((void (*)(val*, val*, long))(var1347->class->vft[COLOR_array__Array__with_native]))(var1347, var1349, var1348) /* with_native on <var1347:Array[Object]>*/;
+}
+}
+{
+var1351 = ((val* (*)(val*))(var1347->class->vft[COLOR_string__Object__to_s]))(var1347) /* to_s on <var1347:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(var_v, var1351); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
+}
+if (varonce1352) {
+var1353 = varonce1352;
+} else {
+var1354 = "class_";
+var1355 = 6;
+var1356 = string__NativeString__to_s_with_length(var1354, var1355);
+var1353 = var1356;
+varonce1352 = var1353;
+}
+var1357 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1357 = array_instance Array[Object] */
+var1358 = 2;
+var1359 = NEW_array__NativeArray(var1358, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1359)->values[0] = (val*) var1353;
+((struct instance_array__NativeArray*)var1359)->values[1] = (val*) var_c_name;
+{
+((void (*)(val*, val*, long))(var1357->class->vft[COLOR_array__Array__with_native]))(var1357, var1359, var1358) /* with_native on <var1357:Array[Object]>*/;
+}
+}
+{
+var1360 = ((val* (*)(val*))(var1357->class->vft[COLOR_string__Object__to_s]))(var1357) /* to_s on <var1357:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var1360); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
+}
+if (varonce1361) {
+var1362 = varonce1361;
+} else {
+var1363 = "->class = &class_";
+var1364 = 17;
+var1365 = string__NativeString__to_s_with_length(var1363, var1364);
+var1362 = var1365;
+varonce1361 = var1362;
+}
+if (varonce1366) {
+var1367 = varonce1366;
+} else {
+var1368 = ";";
+var1369 = 1;
+var1370 = string__NativeString__to_s_with_length(var1368, var1369);
+var1367 = var1370;
+varonce1366 = var1367;
+}
+var1371 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1371 = array_instance Array[Object] */
+var1372 = 4;
+var1373 = NEW_array__NativeArray(var1372, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1373)->values[0] = (val*) var_res1331;
+((struct instance_array__NativeArray*)var1373)->values[1] = (val*) var1362;
+((struct instance_array__NativeArray*)var1373)->values[2] = (val*) var_c_name;
+((struct instance_array__NativeArray*)var1373)->values[3] = (val*) var1367;
+{
+((void (*)(val*, val*, long))(var1371->class->vft[COLOR_array__Array__with_native]))(var1371, var1373, var1372) /* with_native on <var1371:Array[Object]>*/;
+}
+}
+{
+var1374 = ((val* (*)(val*))(var1371->class->vft[COLOR_string__Object__to_s]))(var1371) /* to_s on <var1371:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(var_v, var1374); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
+}
+{
+abstract_compiler__AbstractCompiler__generate_init_attr(self, var_v, var_res1331, var_mtype); /* Direct call abstract_compiler#AbstractCompiler#generate_init_attr on <self:SeparateErasureCompiler>*/
+}
+{
+abstract_compiler__AbstractCompilerVisitor__set_finalizer(var_v, var_res1331); /* Direct call abstract_compiler#AbstractCompilerVisitor#set_finalizer on <var_v:SeparateCompilerVisitor>*/
+}
+if (varonce1375) {
+var1376 = varonce1375;
+} else {
+var1377 = "return ";
+var1378 = 7;
+var1379 = string__NativeString__to_s_with_length(var1377, var1378);
+var1376 = var1379;
+varonce1375 = var1376;
+}
+if (varonce1380) {
+var1381 = varonce1380;
+} else {
+var1382 = ";";
+var1383 = 1;
+var1384 = string__NativeString__to_s_with_length(var1382, var1383);
+var1381 = var1384;
+varonce1380 = var1381;
+}
+var1385 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var1385 = array_instance Array[Object] */
+var1386 = 3;
+var1387 = NEW_array__NativeArray(var1386, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var1387)->values[0] = (val*) var1376;
+((struct instance_array__NativeArray*)var1387)->values[1] = (val*) var_res1331;
+((struct instance_array__NativeArray*)var1387)->values[2] = (val*) var1381;
+{
+((void (*)(val*, val*, long))(var1385->class->vft[COLOR_array__Array__with_native]))(var1385, var1387, var1386) /* with_native on <var1385:Array[Object]>*/;
+}
+}
+{
+var1388 = ((val* (*)(val*))(var1385->class->vft[COLOR_string__Object__to_s]))(var1385) /* to_s on <var1385:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(var_v, var1388); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
+}
+}
+if (varonce1389) {
+var1390 = varonce1389;
+} else {
+var1391 = "}";
+var1392 = 1;
+var1393 = string__NativeString__to_s_with_length(var1391, var1392);
+var1390 = var1393;
+varonce1389 = var1390;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(var_v, var1390); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
+}
+RET_LABEL:;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: Object, MClass) */
+void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
+separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(self, p0); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c on <self:Object(SeparateErasureCompiler)>*/
+RET_LABEL:;
+}
+/* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: SeparateErasureCompiler, MClass): Bool */
+short int separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
+short int var /* : Bool */;
+val* var_mclass /* var mclass: MClass */;
+val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var4 /* : nullable Object */;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
+static val* varonce;
+val* var7 /* : String */;
+char* var8 /* : NativeString */;
+long var9 /* : Int */;
+val* var10 /* : FlatString */;
+val* var11 /* : String */;
+val* var12 /* : Array[Object] */;
+long var13 /* : Int */;
+val* var14 /* : NativeArray[Object] */;
+val* var15 /* : String */;
+static val* varonce16;
+val* var17 /* : String */;
+char* var18 /* : NativeString */;
+long var19 /* : Int */;
+val* var20 /* : FlatString */;
+val* var21 /* : String */;
+static val* varonce22;
+val* var23 /* : String */;
+char* var24 /* : NativeString */;
+long var25 /* : Int */;
+val* var26 /* : FlatString */;
+val* var27 /* : Array[Object] */;
+long var28 /* : Int */;
+val* var29 /* : NativeArray[Object] */;
+val* var30 /* : String */;
+val* var31 /* : SeparateCompilerVisitor */;
+val* var_v /* var v: SeparateCompilerVisitor */;
+static val* varonce32;
+val* var33 /* : String */;
+char* var34 /* : NativeString */;
+long var35 /* : Int */;
+val* var36 /* : FlatString */;
+val* var37 /* : String */;
+static val* varonce38;
+val* var39 /* : String */;
+char* var40 /* : NativeString */;
+long var41 /* : Int */;
+val* var42 /* : FlatString */;
+val* var43 /* : Array[Object] */;
+long var44 /* : Int */;
+val* var45 /* : NativeArray[Object] */;
+val* var46 /* : String */;
+static val* varonce47;
+val* var48 /* : String */;
+char* var49 /* : NativeString */;
+long var50 /* : Int */;
+val* var51 /* : FlatString */;
+static val* varonce52;
+val* var53 /* : String */;
+char* var54 /* : NativeString */;
+long var55 /* : Int */;
+val* var56 /* : FlatString */;
+val* var57 /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var59 /* : Map[MClass, Array[nullable MPropDef]] */;
+val* var60 /* : nullable Object */;
+val* var_ /* var : Array[nullable MPropDef] */;
+val* var61 /* : ArrayIterator[nullable Object] */;
+val* var_62 /* var : ArrayIterator[nullable MPropDef] */;
+short int var63 /* : Bool */;
+val* var64 /* : nullable Object */;
+val* var_vt /* var vt: nullable MPropDef */;
+val* var65 /* : null */;
+short int var66 /* : Bool */;
+short int var67 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var69 /* : Bool */;
+short int var71 /* : Bool */;
+static val* varonce72;
+val* var73 /* : String */;
+char* var74 /* : NativeString */;
+long var75 /* : Int */;
+val* var76 /* : FlatString */;
+long var77 /* : Int */;
+long var_is_null /* var is_null: Int */;
+val* var78 /* : MClassDef */;
+val* var80 /* : MClassDef */;
+val* var81 /* : MClassType */;
+val* var83 /* : MClassType */;
+short int var84 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+val* var85 /* : nullable MType */;
+val* var87 /* : nullable MType */;
+val* var88 /* : MType */;
+val* var_bound /* var bound: MType */;
+short int var89 /* : Bool */;
+int cltype90;
+int idtype91;
+val* var92 /* : MClassDef */;
+val* var94 /* : MClassDef */;
+val* var95 /* : MClassType */;
+val* var97 /* : MClassType */;
+val* var98 /* : MType */;
+val* var100 /* : MType */;
+val* var101 /* : MType */;
+long var102 /* : Int */;
+short int var103 /* : Bool */;
+int cltype104;
+int idtype105;
+const char* var_class_name106;
+val* var107 /* : MClass */;
+val* var109 /* : MClass */;
+val* var_vtclass /* var vtclass: MClass */;
+static val* varonce110;
+val* var111 /* : String */;
+char* var112 /* : NativeString */;
+long var113 /* : Int */;
+val* var114 /* : FlatString */;
+val* var115 /* : String */;
+val* var116 /* : Array[Object] */;
+long var117 /* : Int */;
+val* var118 /* : NativeArray[Object] */;
+val* var119 /* : String */;
+static val* varonce120;
+val* var121 /* : String */;
+char* var122 /* : NativeString */;
+long var123 /* : Int */;
+val* var124 /* : FlatString */;
+static val* varonce125;
+val* var126 /* : String */;
+char* var127 /* : NativeString */;
+long var128 /* : Int */;
+val* var129 /* : FlatString */;
+val* var130 /* : String */;
+static val* varonce131;
+val* var132 /* : String */;
+char* var133 /* : NativeString */;
+long var134 /* : Int */;
+val* var135 /* : FlatString */;
+static val* varonce136;
+val* var137 /* : String */;
+char* var138 /* : NativeString */;
+long var139 /* : Int */;
+val* var140 /* : FlatString */;
+val* var141 /* : Array[Object] */;
+long var142 /* : Int */;
+val* var143 /* : NativeArray[Object] */;
+val* var144 /* : Object */;
+val* var145 /* : String */;
+static val* varonce148;
+val* var149 /* : String */;
+char* var150 /* : NativeString */;
+long var151 /* : Int */;
+val* var152 /* : FlatString */;
+static val* varonce153;
+val* var154 /* : String */;
+char* var155 /* : NativeString */;
+long var156 /* : Int */;
+val* var157 /* : FlatString */;
+short int var158 /* : Bool */;
+var_mclass = p0;
+{
+{ /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
+var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
+PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 442);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var1, var_mclass) /* [] on <var1:Map[MClass, Array[nullable MPropDef]]>*/;
+}
+{
+var5 = array__AbstractArrayRead__is_empty(var4);
+}
+if (var5){
+var6 = 0;
+var = var6;
+goto RET_LABEL;
+} else {
+}
+if (varonce) {
+var7 = varonce;
+} else {
+var8 = "vts_table_";
+var9 = 10;
+var10 = string__NativeString__to_s_with_length(var8, var9);
+var7 = var10;
+varonce = var7;
+}
+{
+var11 = abstract_compiler__MClass__c_name(var_mclass);