-short int var62 /* : Bool */;
-short int var_maybe_null /* var maybe_null: Bool */;
-static val* varonce63;
-val* var64 /* : String */;
-char* var65 /* : NativeString */;
-long var66 /* : Int */;
-val* var67 /* : FlatString */;
-val* var_accept_null /* var accept_null: String */;
-short int var68 /* : Bool */;
-int cltype;
-int idtype;
-val* var69 /* : MType */;
-val* var71 /* : MType */;
-static val* varonce72;
-val* var73 /* : String */;
-char* var74 /* : NativeString */;
-long var75 /* : Int */;
-val* var76 /* : FlatString */;
-short int var77 /* : Bool */;
-int cltype78;
-int idtype79;
-val* var80 /* : nullable Frame */;
-val* var82 /* : nullable Frame */;
-val* var83 /* : MPropDef */;
-val* var85 /* : MPropDef */;
-val* var86 /* : MClassDef */;
-val* var88 /* : MClassDef */;
-val* var89 /* : MClassType */;
-val* var91 /* : MClassType */;
-val* var92 /* : nullable Frame */;
-val* var94 /* : nullable Frame */;
-val* var95 /* : MPropDef */;
-val* var97 /* : MPropDef */;
-val* var98 /* : MClassDef */;
-val* var100 /* : MClassDef */;
-val* var101 /* : MClassType */;
-val* var103 /* : MClassType */;
-val* var104 /* : nullable Frame */;
-val* var106 /* : nullable Frame */;
-val* var107 /* : MPropDef */;
-val* var109 /* : MPropDef */;
-val* var110 /* : MClassDef */;
-val* var112 /* : MClassDef */;
-val* var113 /* : MModule */;
-val* var115 /* : MModule */;
-short int var116 /* : Bool */;
-val* var117 /* : MType */;
-short int var118 /* : Bool */;
-int cltype119;
-int idtype120;
-val* var121 /* : MType */;
-val* var123 /* : MType */;
-static val* varonce124;
-val* var125 /* : String */;
-char* var126 /* : NativeString */;
-long var127 /* : Int */;
-val* var128 /* : FlatString */;
-val* var129 /* : MType */;
-val* var131 /* : MType */;
-val* var132 /* : nullable Frame */;
-val* var134 /* : nullable Frame */;
-val* var135 /* : MPropDef */;
-val* var137 /* : MPropDef */;
-val* var138 /* : MClassDef */;
-val* var140 /* : MClassDef */;
-val* var141 /* : MModule */;
-val* var143 /* : MModule */;
-val* var144 /* : nullable Frame */;
-val* var146 /* : nullable Frame */;
-val* var147 /* : MPropDef */;
-val* var149 /* : MPropDef */;
-val* var150 /* : MClassDef */;
-val* var152 /* : MClassDef */;
-val* var153 /* : MClassType */;
-val* var155 /* : MClassType */;
-short int var156 /* : Bool */;
-static val* varonce157;
-val* var158 /* : String */;
-char* var159 /* : NativeString */;
-long var160 /* : Int */;
-val* var161 /* : FlatString */;
-val* var162 /* : String */;
-static val* varonce163;
-val* var164 /* : String */;
-char* var165 /* : NativeString */;
-long var166 /* : Int */;
-val* var167 /* : FlatString */;
-static val* varonce168;
-val* var169 /* : String */;
-char* var170 /* : NativeString */;
-long var171 /* : Int */;
-val* var172 /* : FlatString */;
-val* var173 /* : Array[Object] */;
-long var174 /* : Int */;
-val* var175 /* : NativeArray[Object] */;
-val* var176 /* : String */;
-val* var177 /* : AbstractCompiler */;
-val* var179 /* : AbstractCompiler */;
-val* var180 /* : ModelBuilder */;
-val* var182 /* : ModelBuilder */;
-val* var183 /* : ToolContext */;
-val* var185 /* : ToolContext */;
-val* var186 /* : OptionBool */;
-val* var188 /* : OptionBool */;
-val* var189 /* : nullable Object */;
-val* var191 /* : nullable Object */;
-short int var192 /* : Bool */;
-val* var193 /* : AbstractCompiler */;
-val* var195 /* : AbstractCompiler */;
-val* var196 /* : HashMap[String, Int] */;
-val* var198 /* : HashMap[String, Int] */;
-val* var_ /* var : HashMap[String, Int] */;
-val* var_199 /* var : String */;
-val* var200 /* : nullable Object */;
-long var201 /* : Int */;
-long var202 /* : Int */;
-short int var204 /* : Bool */;
-int cltype205;
-int idtype206;
-const char* var_class_name;
-long var207 /* : Int */;
-long var208 /* : Int */;
-val* var209 /* : nullable Object */;
-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 */;
-val* var220 /* : Array[Object] */;
-long var221 /* : Int */;
-val* var222 /* : NativeArray[Object] */;
-val* var223 /* : String */;
-val* var224 /* : MType */;
-val* var226 /* : MType */;
-val* var227 /* : String */;
-static val* varonce228;
-val* var229 /* : String */;
-char* var230 /* : NativeString */;
-long var231 /* : Int */;
-val* var232 /* : FlatString */;
-short int var233 /* : Bool */;
-short int var234 /* : Bool */;
-static val* varonce235;
-val* var236 /* : String */;
-char* var237 /* : NativeString */;
-long var238 /* : Int */;
-val* var239 /* : FlatString */;
-val* var240 /* : Array[Object] */;
-long var241 /* : Int */;
-val* var242 /* : NativeArray[Object] */;
-val* var243 /* : String */;
-val* var_class_ptr /* var class_ptr: nullable Object */;
-val* var244 /* : MType */;
-val* var246 /* : MType */;
-short int var247 /* : Bool */;
-int cltype248;
-int idtype249;
-const char* var_class_name250;
-val* var251 /* : MClass */;
-val* var253 /* : MClass */;
-val* var_mclass /* var mclass: MClass */;
-static val* varonce254;
-val* var255 /* : String */;
-char* var256 /* : NativeString */;
-long var257 /* : Int */;
-val* var258 /* : FlatString */;
-val* var259 /* : String */;
-val* var260 /* : Array[Object] */;
-long var261 /* : Int */;
-val* var262 /* : NativeArray[Object] */;
-val* var263 /* : String */;
-static val* varonce264;
-val* var265 /* : String */;
-char* var266 /* : NativeString */;
-long var267 /* : Int */;
-val* var268 /* : FlatString */;
-val* var269 /* : String */;
-static val* varonce270;
-val* var271 /* : String */;
-char* var272 /* : NativeString */;
-long var273 /* : Int */;
-val* var274 /* : FlatString */;
-val* var275 /* : Array[Object] */;
-long var276 /* : Int */;
-val* var277 /* : NativeArray[Object] */;
-val* var278 /* : String */;
-short int var279 /* : Bool */;
-int cltype280;
-int idtype281;
+static val* varonce62;
+val* var63 /* : String */;
+char* var64 /* : NativeString */;
+long var65 /* : Int */;
+val* var66 /* : FlatString */;
+val* var67 /* : RuntimeVariable */;
+val* var_cond /* var cond: RuntimeVariable */;
+static val* varonce68;
+val* var69 /* : String */;
+char* var70 /* : NativeString */;
+long var71 /* : Int */;
+val* var72 /* : FlatString */;
+static val* varonce73;
+val* var74 /* : String */;
+char* var75 /* : NativeString */;
+long var76 /* : Int */;
+val* var77 /* : FlatString */;
+val* var78 /* : Array[Object] */;
+long var79 /* : Int */;
+val* var80 /* : NativeArray[Object] */;
+val* var81 /* : String */;
+static val* varonce82;
+val* var83 /* : String */;
+char* var84 /* : NativeString */;
+long var85 /* : Int */;
+val* var86 /* : FlatString */;
+static val* varonce87;
+val* var88 /* : String */;
+char* var89 /* : NativeString */;
+long var90 /* : Int */;
+val* var91 /* : FlatString */;
+var_callsite = p0;
+var_arguments = p1;
+{
+var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite]))(self, p0, p1) /* compile_callsite on <self:SeparateErasureCompilerVisitor>*/;
+}
+var_res = var1;
+{
+{ /* Inline typing#CallSite#erasure_cast (var_callsite) on <var_callsite:CallSite> */
+var5 = var_callsite->attrs[COLOR_typing__CallSite___erasure_cast].s; /* _erasure_cast on <var_callsite:CallSite> */
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+var_ = var3;
+if (var3){
+{
+{ /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
+var8 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
+if (unlikely(var8 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
+show_backtrace(1);
+}
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+/* <var6:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
+cltype = type_separate_erasure_compiler__SeparateErasureCompiler.color;
+idtype = type_separate_erasure_compiler__SeparateErasureCompiler.id;
+if(cltype >= var6->type->table_size) {
+var9 = 0;
+} else {
+var9 = var6->type->type_table[cltype] == idtype;
+}
+if (unlikely(!var9)) {
+var_class_name = var6 == NULL ? "null" : var6->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 494);
+show_backtrace(1);
+}
+{
+{ /* Inline abstract_compiler#AbstractCompiler#modelbuilder (var6) on <var6:SeparateCompiler(SeparateErasureCompiler)> */
+var12 = var6->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <var6:SeparateCompiler(SeparateErasureCompiler)> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
+show_backtrace(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (var10) on <var10:ModelBuilder> */
+var15 = var10->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var10:ModelBuilder> */
+if (unlikely(var15 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var13 = var15;
+RET_LABEL14:(void)0;
+}
+}
+{
+{ /* Inline separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast (var13) on <var13:ToolContext> */
+var18 = var13->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <var13:ToolContext> */
+if (unlikely(var18 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
+PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 26);
+show_backtrace(1);
+}
+var16 = var18;
+RET_LABEL17:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var16) on <var16:OptionBool> */
+var21 = var16->attrs[COLOR_opts__Option___value].val; /* _value on <var16:OptionBool> */
+var19 = var21;
+RET_LABEL20:(void)0;
+}
+}
+var22 = ((struct instance_kernel__Bool*)var19)->value; /* autounbox from nullable Object to Bool */;
+var23 = !var22;
+var2 = var23;
+} else {
+var2 = var_;
+}
+if (var2){
+var24 = NULL;
+if (var_res == NULL) {
+var25 = 0; /* is null */
+} else {
+var25 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_res,var24) on <var_res:nullable RuntimeVariable> */
+var_other = var24;
+{
+var29 = ((short int (*)(val*, val*))(var_res->class->vft[COLOR_kernel__Object___61d_61d]))(var_res, var_other) /* == on <var_res:nullable RuntimeVariable(RuntimeVariable)>*/;
+var28 = var29;
+}
+var30 = !var28;
+var26 = var30;
+goto RET_LABEL27;
+RET_LABEL27:(void)0;
+}
+var25 = var26;
+}
+if (unlikely(!var25)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 495);
+show_backtrace(1);
+}
+{
+{ /* Inline typing#CallSite#msignature (var_callsite) on <var_callsite:CallSite> */
+var33 = var_callsite->attrs[COLOR_typing__CallSite___msignature].val; /* _msignature on <var_callsite:CallSite> */
+if (unlikely(var33 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
+PRINT_ERROR(" (%s:%d)\n", "semantize/typing.nit", 490);
+show_backtrace(1);
+}
+var31 = var33;
+RET_LABEL32:(void)0;
+}
+}
+{
+{ /* Inline model#MSignature#return_mtype (var31) on <var31:MSignature> */
+var36 = var31->attrs[COLOR_model__MSignature___return_mtype].val; /* _return_mtype on <var31:MSignature> */
+var34 = var36;
+RET_LABEL35:(void)0;
+}
+}
+var_mtype = var34;
+var37 = NULL;
+if (var_mtype == NULL) {
+var38 = 0; /* is null */
+} else {
+var38 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_mtype,var37) on <var_mtype:nullable MType> */
+var_other = var37;
+{
+var42 = ((short int (*)(val*, val*))(var_mtype->class->vft[COLOR_kernel__Object___61d_61d]))(var_mtype, var_other) /* == on <var_mtype:nullable MType(MType)>*/;
+var41 = var42;
+}
+var43 = !var41;
+var39 = var43;
+goto RET_LABEL40;
+RET_LABEL40:(void)0;
+}
+var38 = var39;
+}
+if (unlikely(!var38)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 497);
+show_backtrace(1);
+}
+if (varonce) {
+var44 = varonce;
+} else {
+var45 = "/* Erasure cast for return ";
+var46 = 27;
+var47 = string__NativeString__to_s_with_length(var45, var46);
+var44 = var47;
+varonce = var44;
+}
+if (varonce48) {
+var49 = varonce48;
+} else {
+var50 = " isa ";
+var51 = 5;
+var52 = string__NativeString__to_s_with_length(var50, var51);
+var49 = var52;
+varonce48 = var49;
+}
+if (varonce53) {
+var54 = varonce53;
+} else {
+var55 = " */";
+var56 = 3;
+var57 = string__NativeString__to_s_with_length(var55, var56);
+var54 = var57;
+varonce53 = var54;
+}
+var58 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var58 = array_instance Array[Object] */
+var59 = 5;
+var60 = NEW_array__NativeArray(var59, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var60)->values[0] = (val*) var44;
+((struct instance_array__NativeArray*)var60)->values[1] = (val*) var_res;
+((struct instance_array__NativeArray*)var60)->values[2] = (val*) var49;
+((struct instance_array__NativeArray*)var60)->values[3] = (val*) var_mtype;
+((struct instance_array__NativeArray*)var60)->values[4] = (val*) var54;
+{
+((void (*)(val*, val*, long))(var58->class->vft[COLOR_array__Array__with_native]))(var58, var60, var59) /* with_native on <var58:Array[Object]>*/;
+}
+}
+{
+var61 = ((val* (*)(val*))(var58->class->vft[COLOR_string__Object__to_s]))(var58) /* to_s on <var58:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(self, var61); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
+}
+if (varonce62) {
+var63 = varonce62;
+} else {
+var64 = "erasure";
+var65 = 7;
+var66 = string__NativeString__to_s_with_length(var64, var65);
+var63 = var66;
+varonce62 = var63;
+}
+{
+var67 = separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(self, var_res, var_mtype, var63);
+}
+var_cond = var67;
+if (varonce68) {
+var69 = varonce68;
+} else {
+var70 = "if (!";
+var71 = 5;
+var72 = string__NativeString__to_s_with_length(var70, var71);
+var69 = var72;
+varonce68 = var69;
+}
+if (varonce73) {
+var74 = varonce73;
+} else {
+var75 = ") {";
+var76 = 3;
+var77 = string__NativeString__to_s_with_length(var75, var76);
+var74 = var77;
+varonce73 = var74;
+}
+var78 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var78 = array_instance Array[Object] */
+var79 = 3;
+var80 = NEW_array__NativeArray(var79, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var80)->values[0] = (val*) var69;
+((struct instance_array__NativeArray*)var80)->values[1] = (val*) var_cond;
+((struct instance_array__NativeArray*)var80)->values[2] = (val*) var74;
+{
+((void (*)(val*, val*, long))(var78->class->vft[COLOR_array__Array__with_native]))(var78, var80, var79) /* with_native on <var78:Array[Object]>*/;
+}
+}
+{
+var81 = ((val* (*)(val*))(var78->class->vft[COLOR_string__Object__to_s]))(var78) /* to_s on <var78:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(self, var81); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
+}
+if (varonce82) {
+var83 = varonce82;
+} else {
+var84 = "Cast failed";
+var85 = 11;
+var86 = string__NativeString__to_s_with_length(var84, var85);
+var83 = var86;
+varonce82 = var83;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add_abort(self, var83); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <self:SeparateErasureCompilerVisitor>*/
+}
+if (varonce87) {
+var88 = varonce87;
+} else {
+var89 = "}";
+var90 = 1;
+var91 = string__NativeString__to_s_with_length(var89, var90);
+var88 = var91;
+varonce87 = var88;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__add(self, var88); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
+}
+} else {
+}
+var = var_res;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: Object, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
+val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
+val* var /* : nullable RuntimeVariable */;
+val* var1 /* : nullable RuntimeVariable */;
+var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(self, p0, p1);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: SeparateErasureCompilerVisitor, MClassType): RuntimeVariable */
+val* separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
+val* var /* : RuntimeVariable */;
+val* var_mtype /* var mtype: MClassType */;
+static val* varonce;
+val* var1 /* : String */;
+char* var2 /* : NativeString */;
+long var3 /* : Int */;
+val* var4 /* : FlatString */;
+val* var5 /* : MClass */;
+val* var7 /* : MClass */;
+val* var8 /* : String */;
+val* var9 /* : Array[Object] */;
+long var10 /* : Int */;
+val* var11 /* : NativeArray[Object] */;
+val* var12 /* : String */;
+static val* varonce13;
+val* var14 /* : String */;
+char* var15 /* : NativeString */;
+long var16 /* : Int */;
+val* var17 /* : FlatString */;
+val* var18 /* : MClass */;
+val* var20 /* : MClass */;
+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 /* : RuntimeVariable */;
+var_mtype = p0;
+if (varonce) {
+var1 = varonce;
+} else {
+var2 = "NEW_";
+var3 = 4;
+var4 = string__NativeString__to_s_with_length(var2, var3);
+var1 = var4;
+varonce = var1;
+}
+{
+{ /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
+var7 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
+show_backtrace(1);
+}
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+var8 = abstract_compiler__MClass__c_name(var5);
+}
+var9 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var9 = array_instance Array[Object] */
+var10 = 2;
+var11 = NEW_array__NativeArray(var10, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var11)->values[0] = (val*) var1;
+((struct instance_array__NativeArray*)var11)->values[1] = (val*) var8;
+{
+((void (*)(val*, val*, long))(var9->class->vft[COLOR_array__Array__with_native]))(var9, var11, var10) /* with_native on <var9:Array[Object]>*/;
+}
+}
+{
+var12 = ((val* (*)(val*))(var9->class->vft[COLOR_string__Object__to_s]))(var9) /* to_s on <var9:Array[Object]>*/;
+}
+{
+abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var12); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
+}
+if (varonce13) {
+var14 = varonce13;
+} else {
+var15 = "NEW_";
+var16 = 4;
+var17 = string__NativeString__to_s_with_length(var15, var16);
+var14 = var17;
+varonce13 = var14;
+}
+{
+{ /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
+var20 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
+if (unlikely(var20 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
+show_backtrace(1);
+}
+var18 = var20;
+RET_LABEL19:(void)0;
+}
+}
+{
+var21 = abstract_compiler__MClass__c_name(var18);
+}
+if (varonce22) {
+var23 = varonce22;
+} else {
+var24 = "()";
+var25 = 2;
+var26 = string__NativeString__to_s_with_length(var24, var25);
+var23 = var26;
+varonce22 = var23;
+}
+var27 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var27 = array_instance Array[Object] */
+var28 = 3;
+var29 = NEW_array__NativeArray(var28, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var29)->values[0] = (val*) var14;
+((struct instance_array__NativeArray*)var29)->values[1] = (val*) var21;
+((struct instance_array__NativeArray*)var29)->values[2] = (val*) var23;
+{
+((void (*)(val*, val*, long))(var27->class->vft[COLOR_array__Array__with_native]))(var27, var29, var28) /* with_native on <var27:Array[Object]>*/;
+}
+}
+{
+var30 = ((val* (*)(val*))(var27->class->vft[COLOR_string__Object__to_s]))(var27) /* to_s on <var27:Array[Object]>*/;
+}
+{
+var31 = abstract_compiler__AbstractCompilerVisitor__new_expr(self, var30, var_mtype);
+}
+var = var31;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
+val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
+val* var /* : RuntimeVariable */;
+val* var1 /* : RuntimeVariable */;
+var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: SeparateErasureCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
+val* separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
+val* var /* : RuntimeVariable */;
+val* var_value /* var value: RuntimeVariable */;
+val* var_mtype /* var mtype: MType */;
+val* var_tag /* var tag: String */;
+static val* varonce;
+val* var1 /* : String */;
+char* var2 /* : NativeString */;
+long var3 /* : Int */;
+val* var4 /* : FlatString */;
+val* var5 /* : String */;
+static val* varonce6;
+val* var7 /* : String */;
+char* var8 /* : NativeString */;
+long var9 /* : Int */;
+val* var10 /* : FlatString */;
+static val* varonce11;
+val* var12 /* : String */;
+char* var13 /* : NativeString */;
+long var14 /* : Int */;
+val* var15 /* : FlatString */;
+val* var16 /* : Array[Object] */;
+long var17 /* : Int */;
+val* var18 /* : NativeArray[Object] */;
+val* var19 /* : String */;
+val* var20 /* : MClassType */;
+val* var21 /* : RuntimeVariable */;
+val* var_res /* var res: RuntimeVariable */;
+static val* varonce22;
+val* var23 /* : String */;
+char* var24 /* : NativeString */;
+long var25 /* : Int */;
+val* var26 /* : FlatString */;
+val* var27 /* : String */;
+val* var_cltype /* var cltype: String */;
+static val* varonce28;
+val* var29 /* : String */;
+char* var30 /* : NativeString */;
+long var31 /* : Int */;
+val* var32 /* : FlatString */;
+static val* varonce33;
+val* var34 /* : String */;
+char* var35 /* : NativeString */;
+long var36 /* : Int */;
+val* var37 /* : FlatString */;
+val* var38 /* : Array[Object] */;
+long var39 /* : Int */;
+val* var40 /* : NativeArray[Object] */;
+val* var41 /* : String */;
+static val* varonce42;
+val* var43 /* : String */;
+char* var44 /* : NativeString */;
+long var45 /* : Int */;
+val* var46 /* : FlatString */;
+val* var47 /* : String */;
+val* var_idtype /* var idtype: String */;
+static val* varonce48;
+val* var49 /* : String */;
+char* var50 /* : NativeString */;
+long var51 /* : Int */;
+val* var52 /* : FlatString */;
+static val* varonce53;
+val* var54 /* : String */;
+char* var55 /* : NativeString */;
+long var56 /* : Int */;
+val* var57 /* : FlatString */;
+val* var58 /* : Array[Object] */;
+long var59 /* : Int */;
+val* var60 /* : NativeArray[Object] */;
+val* var61 /* : String */;
+short int var62 /* : Bool */;
+short int var_maybe_null /* var maybe_null: Bool */;
+static val* varonce63;
+val* var64 /* : String */;
+char* var65 /* : NativeString */;
+long var66 /* : Int */;
+val* var67 /* : FlatString */;
+val* var_accept_null /* var accept_null: String */;
+short int var68 /* : Bool */;
+int cltype;
+int idtype;
+val* var69 /* : MType */;
+val* var71 /* : MType */;
+static val* varonce72;
+val* var73 /* : String */;
+char* var74 /* : NativeString */;
+long var75 /* : Int */;
+val* var76 /* : FlatString */;
+short int var77 /* : Bool */;
+int cltype78;
+int idtype79;
+val* var80 /* : nullable Frame */;
+val* var82 /* : nullable Frame */;
+val* var83 /* : MPropDef */;
+val* var85 /* : MPropDef */;
+val* var86 /* : MClassDef */;
+val* var88 /* : MClassDef */;
+val* var89 /* : MClassType */;
+val* var91 /* : MClassType */;
+val* var92 /* : nullable Frame */;
+val* var94 /* : nullable Frame */;
+val* var95 /* : MPropDef */;
+val* var97 /* : MPropDef */;
+val* var98 /* : MClassDef */;
+val* var100 /* : MClassDef */;
+val* var101 /* : MClassType */;
+val* var103 /* : MClassType */;
+val* var104 /* : nullable Frame */;
+val* var106 /* : nullable Frame */;
+val* var107 /* : MPropDef */;
+val* var109 /* : MPropDef */;
+val* var110 /* : MClassDef */;
+val* var112 /* : MClassDef */;
+val* var113 /* : MModule */;
+val* var115 /* : MModule */;
+short int var116 /* : Bool */;
+val* var117 /* : MType */;
+short int var118 /* : Bool */;
+int cltype119;
+int idtype120;
+val* var121 /* : MType */;
+val* var123 /* : MType */;
+static val* varonce124;
+val* var125 /* : String */;
+char* var126 /* : NativeString */;
+long var127 /* : Int */;
+val* var128 /* : FlatString */;
+val* var129 /* : MType */;
+val* var131 /* : MType */;
+val* var132 /* : nullable Frame */;
+val* var134 /* : nullable Frame */;
+val* var135 /* : MPropDef */;
+val* var137 /* : MPropDef */;
+val* var138 /* : MClassDef */;
+val* var140 /* : MClassDef */;
+val* var141 /* : MModule */;
+val* var143 /* : MModule */;
+val* var144 /* : nullable Frame */;
+val* var146 /* : nullable Frame */;
+val* var147 /* : MPropDef */;
+val* var149 /* : MPropDef */;
+val* var150 /* : MClassDef */;
+val* var152 /* : MClassDef */;
+val* var153 /* : MClassType */;
+val* var155 /* : MClassType */;
+short int var156 /* : Bool */;
+static val* varonce157;
+val* var158 /* : String */;
+char* var159 /* : NativeString */;
+long var160 /* : Int */;
+val* var161 /* : FlatString */;
+val* var162 /* : String */;
+static val* varonce163;
+val* var164 /* : String */;
+char* var165 /* : NativeString */;
+long var166 /* : Int */;
+val* var167 /* : FlatString */;
+static val* varonce168;
+val* var169 /* : String */;
+char* var170 /* : NativeString */;
+long var171 /* : Int */;
+val* var172 /* : FlatString */;
+val* var173 /* : Array[Object] */;
+long var174 /* : Int */;
+val* var175 /* : NativeArray[Object] */;
+val* var176 /* : String */;
+val* var177 /* : AbstractCompiler */;
+val* var179 /* : AbstractCompiler */;
+val* var180 /* : ModelBuilder */;
+val* var182 /* : ModelBuilder */;
+val* var183 /* : ToolContext */;
+val* var185 /* : ToolContext */;
+val* var186 /* : OptionBool */;
+val* var188 /* : OptionBool */;
+val* var189 /* : nullable Object */;
+val* var191 /* : nullable Object */;
+short int var192 /* : Bool */;
+val* var193 /* : AbstractCompiler */;
+val* var195 /* : AbstractCompiler */;
+val* var196 /* : HashMap[String, Int] */;
+val* var198 /* : HashMap[String, Int] */;
+val* var_ /* var : HashMap[String, Int] */;
+val* var_199 /* var : String */;
+val* var200 /* : nullable Object */;
+long var201 /* : Int */;
+long var202 /* : Int */;
+short int var204 /* : Bool */;
+int cltype205;
+int idtype206;
+const char* var_class_name;
+long var207 /* : Int */;
+long var208 /* : Int */;
+val* var209 /* : nullable Object */;
+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 */;
+val* var220 /* : Array[Object] */;
+long var221 /* : Int */;
+val* var222 /* : NativeArray[Object] */;
+val* var223 /* : String */;
+val* var224 /* : MType */;
+val* var226 /* : MType */;
+val* var227 /* : String */;
+static val* varonce228;
+val* var229 /* : String */;
+char* var230 /* : NativeString */;
+long var231 /* : Int */;
+val* var232 /* : FlatString */;
+short int var233 /* : Bool */;
+short int var234 /* : Bool */;
+static val* varonce235;
+val* var236 /* : String */;
+char* var237 /* : NativeString */;
+long var238 /* : Int */;
+val* var239 /* : FlatString */;
+val* var240 /* : Array[Object] */;
+long var241 /* : Int */;
+val* var242 /* : NativeArray[Object] */;
+val* var243 /* : String */;
+val* var_class_ptr /* var class_ptr: nullable Object */;
+val* var244 /* : MType */;
+val* var246 /* : MType */;
+short int var247 /* : Bool */;
+int cltype248;
+int idtype249;
+const char* var_class_name250;
+val* var251 /* : MClass */;
+val* var253 /* : MClass */;
+val* var_mclass /* var mclass: MClass */;
+static val* varonce254;
+val* var255 /* : String */;
+char* var256 /* : NativeString */;
+long var257 /* : Int */;
+val* var258 /* : FlatString */;
+val* var259 /* : String */;
+val* var260 /* : Array[Object] */;
+long var261 /* : Int */;
+val* var262 /* : NativeArray[Object] */;
+val* var263 /* : String */;
+static val* varonce264;
+val* var265 /* : String */;
+char* var266 /* : NativeString */;
+long var267 /* : Int */;
+val* var268 /* : FlatString */;
+val* var269 /* : String */;
+static val* varonce270;
+val* var271 /* : String */;
+char* var272 /* : NativeString */;
+long var273 /* : Int */;
+val* var274 /* : FlatString */;
+val* var275 /* : Array[Object] */;
+long var276 /* : Int */;
+val* var277 /* : NativeArray[Object] */;
+val* var278 /* : String */;
+short int var279 /* : Bool */;
+int cltype280;
+int idtype281;