update NOTICE
[nit.git] / c_src / separate_erasure_compiler.sep.2.c
1 #include "separate_erasure_compiler.sep.0.h"
2 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: SeparateErasureCompilerVisitor, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
3 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
4 val* var /* : nullable RuntimeVariable */;
5 val* var_callsite /* var callsite: CallSite */;
6 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
7 val* var1 /* : nullable RuntimeVariable */;
8 val* var_res /* var res: nullable RuntimeVariable */;
9 short int var2 /* : Bool */;
10 short int var3 /* : Bool */;
11 short int var5 /* : Bool */;
12 short int var_ /* var : Bool */;
13 val* var6 /* : AbstractCompiler */;
14 val* var8 /* : AbstractCompiler */;
15 short int var9 /* : Bool */;
16 int cltype;
17 int idtype;
18 const char* var_class_name;
19 val* var10 /* : ModelBuilder */;
20 val* var12 /* : ModelBuilder */;
21 val* var13 /* : ToolContext */;
22 val* var15 /* : ToolContext */;
23 val* var16 /* : OptionBool */;
24 val* var18 /* : OptionBool */;
25 val* var19 /* : nullable Object */;
26 val* var21 /* : nullable Object */;
27 short int var22 /* : Bool */;
28 short int var23 /* : Bool */;
29 val* var24 /* : null */;
30 short int var25 /* : Bool */;
31 short int var26 /* : Bool */;
32 val* var_other /* var other: nullable Object */;
33 short int var28 /* : Bool */;
34 short int var29 /* : Bool */;
35 short int var30 /* : Bool */;
36 val* var31 /* : MSignature */;
37 val* var33 /* : MSignature */;
38 val* var34 /* : nullable MType */;
39 val* var36 /* : nullable MType */;
40 val* var_mtype /* var mtype: nullable MType */;
41 val* var37 /* : null */;
42 short int var38 /* : Bool */;
43 short int var39 /* : Bool */;
44 short int var41 /* : Bool */;
45 short int var42 /* : Bool */;
46 short int var43 /* : Bool */;
47 static val* varonce;
48 val* var44 /* : String */;
49 char* var45 /* : NativeString */;
50 long var46 /* : Int */;
51 val* var47 /* : FlatString */;
52 static val* varonce48;
53 val* var49 /* : String */;
54 char* var50 /* : NativeString */;
55 long var51 /* : Int */;
56 val* var52 /* : FlatString */;
57 static val* varonce53;
58 val* var54 /* : String */;
59 char* var55 /* : NativeString */;
60 long var56 /* : Int */;
61 val* var57 /* : FlatString */;
62 val* var58 /* : Array[Object] */;
63 long var59 /* : Int */;
64 val* var60 /* : NativeArray[Object] */;
65 val* var61 /* : String */;
66 static val* varonce62;
67 val* var63 /* : String */;
68 char* var64 /* : NativeString */;
69 long var65 /* : Int */;
70 val* var66 /* : FlatString */;
71 val* var67 /* : RuntimeVariable */;
72 val* var_cond /* var cond: RuntimeVariable */;
73 static val* varonce68;
74 val* var69 /* : String */;
75 char* var70 /* : NativeString */;
76 long var71 /* : Int */;
77 val* var72 /* : FlatString */;
78 static val* varonce73;
79 val* var74 /* : String */;
80 char* var75 /* : NativeString */;
81 long var76 /* : Int */;
82 val* var77 /* : FlatString */;
83 val* var78 /* : Array[Object] */;
84 long var79 /* : Int */;
85 val* var80 /* : NativeArray[Object] */;
86 val* var81 /* : String */;
87 static val* varonce82;
88 val* var83 /* : String */;
89 char* var84 /* : NativeString */;
90 long var85 /* : Int */;
91 val* var86 /* : FlatString */;
92 static val* varonce87;
93 val* var88 /* : String */;
94 char* var89 /* : NativeString */;
95 long var90 /* : Int */;
96 val* var91 /* : FlatString */;
97 var_callsite = p0;
98 var_arguments = p1;
99 {
100 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite]))(self, p0, p1) /* compile_callsite on <self:SeparateErasureCompilerVisitor>*/;
101 }
102 var_res = var1;
103 {
104 { /* Inline typing#CallSite#erasure_cast (var_callsite) on <var_callsite:CallSite> */
105 var5 = var_callsite->attrs[COLOR_typing__CallSite___erasure_cast].s; /* _erasure_cast on <var_callsite:CallSite> */
106 var3 = var5;
107 RET_LABEL4:(void)0;
108 }
109 }
110 var_ = var3;
111 if (var3){
112 {
113 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
114 var8 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
115 if (unlikely(var8 == NULL)) {
116 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
117 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
118 show_backtrace(1);
119 }
120 var6 = var8;
121 RET_LABEL7:(void)0;
122 }
123 }
124 /* <var6:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
125 cltype = type_separate_erasure_compiler__SeparateErasureCompiler.color;
126 idtype = type_separate_erasure_compiler__SeparateErasureCompiler.id;
127 if(cltype >= var6->type->table_size) {
128 var9 = 0;
129 } else {
130 var9 = var6->type->type_table[cltype] == idtype;
131 }
132 if (unlikely(!var9)) {
133 var_class_name = var6 == NULL ? "null" : var6->type->name;
134 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name);
135 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 494);
136 show_backtrace(1);
137 }
138 {
139 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (var6) on <var6:SeparateCompiler(SeparateErasureCompiler)> */
140 var12 = var6->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <var6:SeparateCompiler(SeparateErasureCompiler)> */
141 if (unlikely(var12 == NULL)) {
142 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
143 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
144 show_backtrace(1);
145 }
146 var10 = var12;
147 RET_LABEL11:(void)0;
148 }
149 }
150 {
151 { /* Inline modelbuilder#ModelBuilder#toolcontext (var10) on <var10:ModelBuilder> */
152 var15 = var10->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var10:ModelBuilder> */
153 if (unlikely(var15 == NULL)) {
154 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
155 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
156 show_backtrace(1);
157 }
158 var13 = var15;
159 RET_LABEL14:(void)0;
160 }
161 }
162 {
163 { /* Inline separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast (var13) on <var13:ToolContext> */
164 var18 = var13->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <var13:ToolContext> */
165 if (unlikely(var18 == NULL)) {
166 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
167 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 26);
168 show_backtrace(1);
169 }
170 var16 = var18;
171 RET_LABEL17:(void)0;
172 }
173 }
174 {
175 { /* Inline opts#Option#value (var16) on <var16:OptionBool> */
176 var21 = var16->attrs[COLOR_opts__Option___value].val; /* _value on <var16:OptionBool> */
177 var19 = var21;
178 RET_LABEL20:(void)0;
179 }
180 }
181 var22 = ((struct instance_kernel__Bool*)var19)->value; /* autounbox from nullable Object to Bool */;
182 var23 = !var22;
183 var2 = var23;
184 } else {
185 var2 = var_;
186 }
187 if (var2){
188 var24 = NULL;
189 if (var_res == NULL) {
190 var25 = 0; /* is null */
191 } else {
192 var25 = 1; /* arg is null and recv is not */
193 }
194 if (0) {
195 { /* Inline kernel#Object#!= (var_res,var24) on <var_res:nullable RuntimeVariable> */
196 var_other = var24;
197 {
198 var29 = ((short int (*)(val*, val*))(var_res->class->vft[COLOR_kernel__Object___61d_61d]))(var_res, var_other) /* == on <var_res:nullable RuntimeVariable(RuntimeVariable)>*/;
199 var28 = var29;
200 }
201 var30 = !var28;
202 var26 = var30;
203 goto RET_LABEL27;
204 RET_LABEL27:(void)0;
205 }
206 var25 = var26;
207 }
208 if (unlikely(!var25)) {
209 PRINT_ERROR("Runtime error: %s", "Assert failed");
210 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 495);
211 show_backtrace(1);
212 }
213 {
214 { /* Inline typing#CallSite#msignature (var_callsite) on <var_callsite:CallSite> */
215 var33 = var_callsite->attrs[COLOR_typing__CallSite___msignature].val; /* _msignature on <var_callsite:CallSite> */
216 if (unlikely(var33 == NULL)) {
217 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
218 PRINT_ERROR(" (%s:%d)\n", "semantize/typing.nit", 490);
219 show_backtrace(1);
220 }
221 var31 = var33;
222 RET_LABEL32:(void)0;
223 }
224 }
225 {
226 { /* Inline model#MSignature#return_mtype (var31) on <var31:MSignature> */
227 var36 = var31->attrs[COLOR_model__MSignature___return_mtype].val; /* _return_mtype on <var31:MSignature> */
228 var34 = var36;
229 RET_LABEL35:(void)0;
230 }
231 }
232 var_mtype = var34;
233 var37 = NULL;
234 if (var_mtype == NULL) {
235 var38 = 0; /* is null */
236 } else {
237 var38 = 1; /* arg is null and recv is not */
238 }
239 if (0) {
240 { /* Inline kernel#Object#!= (var_mtype,var37) on <var_mtype:nullable MType> */
241 var_other = var37;
242 {
243 var42 = ((short int (*)(val*, val*))(var_mtype->class->vft[COLOR_kernel__Object___61d_61d]))(var_mtype, var_other) /* == on <var_mtype:nullable MType(MType)>*/;
244 var41 = var42;
245 }
246 var43 = !var41;
247 var39 = var43;
248 goto RET_LABEL40;
249 RET_LABEL40:(void)0;
250 }
251 var38 = var39;
252 }
253 if (unlikely(!var38)) {
254 PRINT_ERROR("Runtime error: %s", "Assert failed");
255 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 497);
256 show_backtrace(1);
257 }
258 if (varonce) {
259 var44 = varonce;
260 } else {
261 var45 = "/* Erasure cast for return ";
262 var46 = 27;
263 var47 = string__NativeString__to_s_with_length(var45, var46);
264 var44 = var47;
265 varonce = var44;
266 }
267 if (varonce48) {
268 var49 = varonce48;
269 } else {
270 var50 = " isa ";
271 var51 = 5;
272 var52 = string__NativeString__to_s_with_length(var50, var51);
273 var49 = var52;
274 varonce48 = var49;
275 }
276 if (varonce53) {
277 var54 = varonce53;
278 } else {
279 var55 = " */";
280 var56 = 3;
281 var57 = string__NativeString__to_s_with_length(var55, var56);
282 var54 = var57;
283 varonce53 = var54;
284 }
285 var58 = NEW_array__Array(&type_array__Arraykernel__Object);
286 { /* var58 = array_instance Array[Object] */
287 var59 = 5;
288 var60 = NEW_array__NativeArray(var59, &type_array__NativeArraykernel__Object);
289 ((struct instance_array__NativeArray*)var60)->values[0] = (val*) var44;
290 ((struct instance_array__NativeArray*)var60)->values[1] = (val*) var_res;
291 ((struct instance_array__NativeArray*)var60)->values[2] = (val*) var49;
292 ((struct instance_array__NativeArray*)var60)->values[3] = (val*) var_mtype;
293 ((struct instance_array__NativeArray*)var60)->values[4] = (val*) var54;
294 {
295 ((void (*)(val*, val*, long))(var58->class->vft[COLOR_array__Array__with_native]))(var58, var60, var59) /* with_native on <var58:Array[Object]>*/;
296 }
297 }
298 {
299 var61 = ((val* (*)(val*))(var58->class->vft[COLOR_string__Object__to_s]))(var58) /* to_s on <var58:Array[Object]>*/;
300 }
301 {
302 abstract_compiler__AbstractCompilerVisitor__add(self, var61); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
303 }
304 if (varonce62) {
305 var63 = varonce62;
306 } else {
307 var64 = "erasure";
308 var65 = 7;
309 var66 = string__NativeString__to_s_with_length(var64, var65);
310 var63 = var66;
311 varonce62 = var63;
312 }
313 {
314 var67 = separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(self, var_res, var_mtype, var63);
315 }
316 var_cond = var67;
317 if (varonce68) {
318 var69 = varonce68;
319 } else {
320 var70 = "if (!";
321 var71 = 5;
322 var72 = string__NativeString__to_s_with_length(var70, var71);
323 var69 = var72;
324 varonce68 = var69;
325 }
326 if (varonce73) {
327 var74 = varonce73;
328 } else {
329 var75 = ") {";
330 var76 = 3;
331 var77 = string__NativeString__to_s_with_length(var75, var76);
332 var74 = var77;
333 varonce73 = var74;
334 }
335 var78 = NEW_array__Array(&type_array__Arraykernel__Object);
336 { /* var78 = array_instance Array[Object] */
337 var79 = 3;
338 var80 = NEW_array__NativeArray(var79, &type_array__NativeArraykernel__Object);
339 ((struct instance_array__NativeArray*)var80)->values[0] = (val*) var69;
340 ((struct instance_array__NativeArray*)var80)->values[1] = (val*) var_cond;
341 ((struct instance_array__NativeArray*)var80)->values[2] = (val*) var74;
342 {
343 ((void (*)(val*, val*, long))(var78->class->vft[COLOR_array__Array__with_native]))(var78, var80, var79) /* with_native on <var78:Array[Object]>*/;
344 }
345 }
346 {
347 var81 = ((val* (*)(val*))(var78->class->vft[COLOR_string__Object__to_s]))(var78) /* to_s on <var78:Array[Object]>*/;
348 }
349 {
350 abstract_compiler__AbstractCompilerVisitor__add(self, var81); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
351 }
352 if (varonce82) {
353 var83 = varonce82;
354 } else {
355 var84 = "Cast failed";
356 var85 = 11;
357 var86 = string__NativeString__to_s_with_length(var84, var85);
358 var83 = var86;
359 varonce82 = var83;
360 }
361 {
362 abstract_compiler__AbstractCompilerVisitor__add_abort(self, var83); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <self:SeparateErasureCompilerVisitor>*/
363 }
364 if (varonce87) {
365 var88 = varonce87;
366 } else {
367 var89 = "}";
368 var90 = 1;
369 var91 = string__NativeString__to_s_with_length(var89, var90);
370 var88 = var91;
371 varonce87 = var88;
372 }
373 {
374 abstract_compiler__AbstractCompilerVisitor__add(self, var88); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
375 }
376 } else {
377 }
378 var = var_res;
379 goto RET_LABEL;
380 RET_LABEL:;
381 return var;
382 }
383 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: Object, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
384 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
385 val* var /* : nullable RuntimeVariable */;
386 val* var1 /* : nullable RuntimeVariable */;
387 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(self, p0, p1);
388 var = var1;
389 RET_LABEL:;
390 return var;
391 }
392 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: SeparateErasureCompilerVisitor, MClassType): RuntimeVariable */
393 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
394 val* var /* : RuntimeVariable */;
395 val* var_mtype /* var mtype: MClassType */;
396 static val* varonce;
397 val* var1 /* : String */;
398 char* var2 /* : NativeString */;
399 long var3 /* : Int */;
400 val* var4 /* : FlatString */;
401 val* var5 /* : MClass */;
402 val* var7 /* : MClass */;
403 val* var8 /* : String */;
404 val* var9 /* : Array[Object] */;
405 long var10 /* : Int */;
406 val* var11 /* : NativeArray[Object] */;
407 val* var12 /* : String */;
408 static val* varonce13;
409 val* var14 /* : String */;
410 char* var15 /* : NativeString */;
411 long var16 /* : Int */;
412 val* var17 /* : FlatString */;
413 val* var18 /* : MClass */;
414 val* var20 /* : MClass */;
415 val* var21 /* : String */;
416 static val* varonce22;
417 val* var23 /* : String */;
418 char* var24 /* : NativeString */;
419 long var25 /* : Int */;
420 val* var26 /* : FlatString */;
421 val* var27 /* : Array[Object] */;
422 long var28 /* : Int */;
423 val* var29 /* : NativeArray[Object] */;
424 val* var30 /* : String */;
425 val* var31 /* : RuntimeVariable */;
426 var_mtype = p0;
427 if (varonce) {
428 var1 = varonce;
429 } else {
430 var2 = "NEW_";
431 var3 = 4;
432 var4 = string__NativeString__to_s_with_length(var2, var3);
433 var1 = var4;
434 varonce = var1;
435 }
436 {
437 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
438 var7 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
439 if (unlikely(var7 == NULL)) {
440 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
441 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
442 show_backtrace(1);
443 }
444 var5 = var7;
445 RET_LABEL6:(void)0;
446 }
447 }
448 {
449 var8 = abstract_compiler__MClass__c_name(var5);
450 }
451 var9 = NEW_array__Array(&type_array__Arraykernel__Object);
452 { /* var9 = array_instance Array[Object] */
453 var10 = 2;
454 var11 = NEW_array__NativeArray(var10, &type_array__NativeArraykernel__Object);
455 ((struct instance_array__NativeArray*)var11)->values[0] = (val*) var1;
456 ((struct instance_array__NativeArray*)var11)->values[1] = (val*) var8;
457 {
458 ((void (*)(val*, val*, long))(var9->class->vft[COLOR_array__Array__with_native]))(var9, var11, var10) /* with_native on <var9:Array[Object]>*/;
459 }
460 }
461 {
462 var12 = ((val* (*)(val*))(var9->class->vft[COLOR_string__Object__to_s]))(var9) /* to_s on <var9:Array[Object]>*/;
463 }
464 {
465 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var12); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
466 }
467 if (varonce13) {
468 var14 = varonce13;
469 } else {
470 var15 = "NEW_";
471 var16 = 4;
472 var17 = string__NativeString__to_s_with_length(var15, var16);
473 var14 = var17;
474 varonce13 = var14;
475 }
476 {
477 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
478 var20 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
479 if (unlikely(var20 == NULL)) {
480 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
481 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
482 show_backtrace(1);
483 }
484 var18 = var20;
485 RET_LABEL19:(void)0;
486 }
487 }
488 {
489 var21 = abstract_compiler__MClass__c_name(var18);
490 }
491 if (varonce22) {
492 var23 = varonce22;
493 } else {
494 var24 = "()";
495 var25 = 2;
496 var26 = string__NativeString__to_s_with_length(var24, var25);
497 var23 = var26;
498 varonce22 = var23;
499 }
500 var27 = NEW_array__Array(&type_array__Arraykernel__Object);
501 { /* var27 = array_instance Array[Object] */
502 var28 = 3;
503 var29 = NEW_array__NativeArray(var28, &type_array__NativeArraykernel__Object);
504 ((struct instance_array__NativeArray*)var29)->values[0] = (val*) var14;
505 ((struct instance_array__NativeArray*)var29)->values[1] = (val*) var21;
506 ((struct instance_array__NativeArray*)var29)->values[2] = (val*) var23;
507 {
508 ((void (*)(val*, val*, long))(var27->class->vft[COLOR_array__Array__with_native]))(var27, var29, var28) /* with_native on <var27:Array[Object]>*/;
509 }
510 }
511 {
512 var30 = ((val* (*)(val*))(var27->class->vft[COLOR_string__Object__to_s]))(var27) /* to_s on <var27:Array[Object]>*/;
513 }
514 {
515 var31 = abstract_compiler__AbstractCompilerVisitor__new_expr(self, var30, var_mtype);
516 }
517 var = var31;
518 goto RET_LABEL;
519 RET_LABEL:;
520 return var;
521 }
522 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
523 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
524 val* var /* : RuntimeVariable */;
525 val* var1 /* : RuntimeVariable */;
526 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(self, p0);
527 var = var1;
528 RET_LABEL:;
529 return var;
530 }
531 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: SeparateErasureCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
532 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
533 val* var /* : RuntimeVariable */;
534 val* var_value /* var value: RuntimeVariable */;
535 val* var_mtype /* var mtype: MType */;
536 val* var_tag /* var tag: String */;
537 static val* varonce;
538 val* var1 /* : String */;
539 char* var2 /* : NativeString */;
540 long var3 /* : Int */;
541 val* var4 /* : FlatString */;
542 val* var5 /* : String */;
543 static val* varonce6;
544 val* var7 /* : String */;
545 char* var8 /* : NativeString */;
546 long var9 /* : Int */;
547 val* var10 /* : FlatString */;
548 static val* varonce11;
549 val* var12 /* : String */;
550 char* var13 /* : NativeString */;
551 long var14 /* : Int */;
552 val* var15 /* : FlatString */;
553 val* var16 /* : Array[Object] */;
554 long var17 /* : Int */;
555 val* var18 /* : NativeArray[Object] */;
556 val* var19 /* : String */;
557 val* var20 /* : MClassType */;
558 val* var21 /* : RuntimeVariable */;
559 val* var_res /* var res: RuntimeVariable */;
560 static val* varonce22;
561 val* var23 /* : String */;
562 char* var24 /* : NativeString */;
563 long var25 /* : Int */;
564 val* var26 /* : FlatString */;
565 val* var27 /* : String */;
566 val* var_cltype /* var cltype: String */;
567 static val* varonce28;
568 val* var29 /* : String */;
569 char* var30 /* : NativeString */;
570 long var31 /* : Int */;
571 val* var32 /* : FlatString */;
572 static val* varonce33;
573 val* var34 /* : String */;
574 char* var35 /* : NativeString */;
575 long var36 /* : Int */;
576 val* var37 /* : FlatString */;
577 val* var38 /* : Array[Object] */;
578 long var39 /* : Int */;
579 val* var40 /* : NativeArray[Object] */;
580 val* var41 /* : String */;
581 static val* varonce42;
582 val* var43 /* : String */;
583 char* var44 /* : NativeString */;
584 long var45 /* : Int */;
585 val* var46 /* : FlatString */;
586 val* var47 /* : String */;
587 val* var_idtype /* var idtype: String */;
588 static val* varonce48;
589 val* var49 /* : String */;
590 char* var50 /* : NativeString */;
591 long var51 /* : Int */;
592 val* var52 /* : FlatString */;
593 static val* varonce53;
594 val* var54 /* : String */;
595 char* var55 /* : NativeString */;
596 long var56 /* : Int */;
597 val* var57 /* : FlatString */;
598 val* var58 /* : Array[Object] */;
599 long var59 /* : Int */;
600 val* var60 /* : NativeArray[Object] */;
601 val* var61 /* : String */;
602 short int var62 /* : Bool */;
603 short int var_maybe_null /* var maybe_null: Bool */;
604 static val* varonce63;
605 val* var64 /* : String */;
606 char* var65 /* : NativeString */;
607 long var66 /* : Int */;
608 val* var67 /* : FlatString */;
609 val* var_accept_null /* var accept_null: String */;
610 short int var68 /* : Bool */;
611 int cltype;
612 int idtype;
613 val* var69 /* : MType */;
614 val* var71 /* : MType */;
615 static val* varonce72;
616 val* var73 /* : String */;
617 char* var74 /* : NativeString */;
618 long var75 /* : Int */;
619 val* var76 /* : FlatString */;
620 short int var77 /* : Bool */;
621 int cltype78;
622 int idtype79;
623 val* var80 /* : nullable Frame */;
624 val* var82 /* : nullable Frame */;
625 val* var83 /* : MPropDef */;
626 val* var85 /* : MPropDef */;
627 val* var86 /* : MClassDef */;
628 val* var88 /* : MClassDef */;
629 val* var89 /* : MClassType */;
630 val* var91 /* : MClassType */;
631 val* var92 /* : nullable Frame */;
632 val* var94 /* : nullable Frame */;
633 val* var95 /* : MPropDef */;
634 val* var97 /* : MPropDef */;
635 val* var98 /* : MClassDef */;
636 val* var100 /* : MClassDef */;
637 val* var101 /* : MClassType */;
638 val* var103 /* : MClassType */;
639 val* var104 /* : nullable Frame */;
640 val* var106 /* : nullable Frame */;
641 val* var107 /* : MPropDef */;
642 val* var109 /* : MPropDef */;
643 val* var110 /* : MClassDef */;
644 val* var112 /* : MClassDef */;
645 val* var113 /* : MModule */;
646 val* var115 /* : MModule */;
647 short int var116 /* : Bool */;
648 val* var117 /* : MType */;
649 short int var118 /* : Bool */;
650 int cltype119;
651 int idtype120;
652 val* var121 /* : MType */;
653 val* var123 /* : MType */;
654 static val* varonce124;
655 val* var125 /* : String */;
656 char* var126 /* : NativeString */;
657 long var127 /* : Int */;
658 val* var128 /* : FlatString */;
659 val* var129 /* : MType */;
660 val* var131 /* : MType */;
661 val* var132 /* : nullable Frame */;
662 val* var134 /* : nullable Frame */;
663 val* var135 /* : MPropDef */;
664 val* var137 /* : MPropDef */;
665 val* var138 /* : MClassDef */;
666 val* var140 /* : MClassDef */;
667 val* var141 /* : MModule */;
668 val* var143 /* : MModule */;
669 val* var144 /* : nullable Frame */;
670 val* var146 /* : nullable Frame */;
671 val* var147 /* : MPropDef */;
672 val* var149 /* : MPropDef */;
673 val* var150 /* : MClassDef */;
674 val* var152 /* : MClassDef */;
675 val* var153 /* : MClassType */;
676 val* var155 /* : MClassType */;
677 short int var156 /* : Bool */;
678 static val* varonce157;
679 val* var158 /* : String */;
680 char* var159 /* : NativeString */;
681 long var160 /* : Int */;
682 val* var161 /* : FlatString */;
683 val* var162 /* : String */;
684 static val* varonce163;
685 val* var164 /* : String */;
686 char* var165 /* : NativeString */;
687 long var166 /* : Int */;
688 val* var167 /* : FlatString */;
689 static val* varonce168;
690 val* var169 /* : String */;
691 char* var170 /* : NativeString */;
692 long var171 /* : Int */;
693 val* var172 /* : FlatString */;
694 val* var173 /* : Array[Object] */;
695 long var174 /* : Int */;
696 val* var175 /* : NativeArray[Object] */;
697 val* var176 /* : String */;
698 val* var177 /* : AbstractCompiler */;
699 val* var179 /* : AbstractCompiler */;
700 val* var180 /* : ModelBuilder */;
701 val* var182 /* : ModelBuilder */;
702 val* var183 /* : ToolContext */;
703 val* var185 /* : ToolContext */;
704 val* var186 /* : OptionBool */;
705 val* var188 /* : OptionBool */;
706 val* var189 /* : nullable Object */;
707 val* var191 /* : nullable Object */;
708 short int var192 /* : Bool */;
709 val* var193 /* : AbstractCompiler */;
710 val* var195 /* : AbstractCompiler */;
711 val* var196 /* : HashMap[String, Int] */;
712 val* var198 /* : HashMap[String, Int] */;
713 val* var_ /* var : HashMap[String, Int] */;
714 val* var_199 /* var : String */;
715 val* var200 /* : nullable Object */;
716 long var201 /* : Int */;
717 long var202 /* : Int */;
718 short int var204 /* : Bool */;
719 int cltype205;
720 int idtype206;
721 const char* var_class_name;
722 long var207 /* : Int */;
723 long var208 /* : Int */;
724 val* var209 /* : nullable Object */;
725 static val* varonce210;
726 val* var211 /* : String */;
727 char* var212 /* : NativeString */;
728 long var213 /* : Int */;
729 val* var214 /* : FlatString */;
730 static val* varonce215;
731 val* var216 /* : String */;
732 char* var217 /* : NativeString */;
733 long var218 /* : Int */;
734 val* var219 /* : FlatString */;
735 val* var220 /* : Array[Object] */;
736 long var221 /* : Int */;
737 val* var222 /* : NativeArray[Object] */;
738 val* var223 /* : String */;
739 val* var224 /* : MType */;
740 val* var226 /* : MType */;
741 val* var227 /* : String */;
742 static val* varonce228;
743 val* var229 /* : String */;
744 char* var230 /* : NativeString */;
745 long var231 /* : Int */;
746 val* var232 /* : FlatString */;
747 short int var233 /* : Bool */;
748 short int var234 /* : Bool */;
749 static val* varonce235;
750 val* var236 /* : String */;
751 char* var237 /* : NativeString */;
752 long var238 /* : Int */;
753 val* var239 /* : FlatString */;
754 val* var240 /* : Array[Object] */;
755 long var241 /* : Int */;
756 val* var242 /* : NativeArray[Object] */;
757 val* var243 /* : String */;
758 val* var_class_ptr /* var class_ptr: nullable Object */;
759 val* var244 /* : MType */;
760 val* var246 /* : MType */;
761 short int var247 /* : Bool */;
762 int cltype248;
763 int idtype249;
764 const char* var_class_name250;
765 val* var251 /* : MClass */;
766 val* var253 /* : MClass */;
767 val* var_mclass /* var mclass: MClass */;
768 static val* varonce254;
769 val* var255 /* : String */;
770 char* var256 /* : NativeString */;
771 long var257 /* : Int */;
772 val* var258 /* : FlatString */;
773 val* var259 /* : String */;
774 val* var260 /* : Array[Object] */;
775 long var261 /* : Int */;
776 val* var262 /* : NativeArray[Object] */;
777 val* var263 /* : String */;
778 static val* varonce264;
779 val* var265 /* : String */;
780 char* var266 /* : NativeString */;
781 long var267 /* : Int */;
782 val* var268 /* : FlatString */;
783 val* var269 /* : String */;
784 static val* varonce270;
785 val* var271 /* : String */;
786 char* var272 /* : NativeString */;
787 long var273 /* : Int */;
788 val* var274 /* : FlatString */;
789 val* var275 /* : Array[Object] */;
790 long var276 /* : Int */;
791 val* var277 /* : NativeArray[Object] */;
792 val* var278 /* : String */;
793 short int var279 /* : Bool */;
794 int cltype280;
795 int idtype281;
796 static val* varonce282;
797 val* var283 /* : String */;
798 char* var284 /* : NativeString */;
799 long var285 /* : Int */;
800 val* var286 /* : FlatString */;
801 val* var287 /* : MClass */;
802 val* var289 /* : MClass */;
803 val* var290 /* : String */;
804 val* var291 /* : Array[Object] */;
805 long var292 /* : Int */;
806 val* var293 /* : NativeArray[Object] */;
807 val* var294 /* : String */;
808 static val* varonce295;
809 val* var296 /* : String */;
810 char* var297 /* : NativeString */;
811 long var298 /* : Int */;
812 val* var299 /* : FlatString */;
813 val* var300 /* : MClass */;
814 val* var302 /* : MClass */;
815 val* var303 /* : String */;
816 static val* varonce304;
817 val* var305 /* : String */;
818 char* var306 /* : NativeString */;
819 long var307 /* : Int */;
820 val* var308 /* : FlatString */;
821 val* var309 /* : Array[Object] */;
822 long var310 /* : Int */;
823 val* var311 /* : NativeArray[Object] */;
824 val* var312 /* : String */;
825 static val* varonce313;
826 val* var314 /* : String */;
827 char* var315 /* : NativeString */;
828 long var316 /* : Int */;
829 val* var317 /* : FlatString */;
830 val* var318 /* : MClass */;
831 val* var320 /* : MClass */;
832 val* var321 /* : String */;
833 static val* varonce322;
834 val* var323 /* : String */;
835 char* var324 /* : NativeString */;
836 long var325 /* : Int */;
837 val* var326 /* : FlatString */;
838 val* var327 /* : Array[Object] */;
839 long var328 /* : Int */;
840 val* var329 /* : NativeArray[Object] */;
841 val* var330 /* : String */;
842 val* var331 /* : AbstractCompiler */;
843 val* var333 /* : AbstractCompiler */;
844 val* var334 /* : ModelBuilder */;
845 val* var336 /* : ModelBuilder */;
846 val* var337 /* : ToolContext */;
847 val* var339 /* : ToolContext */;
848 val* var340 /* : OptionBool */;
849 val* var342 /* : OptionBool */;
850 val* var343 /* : nullable Object */;
851 val* var345 /* : nullable Object */;
852 short int var346 /* : Bool */;
853 val* var347 /* : AbstractCompiler */;
854 val* var349 /* : AbstractCompiler */;
855 val* var350 /* : HashMap[String, Int] */;
856 val* var352 /* : HashMap[String, Int] */;
857 val* var_353 /* var : HashMap[String, Int] */;
858 val* var_354 /* var : String */;
859 val* var355 /* : nullable Object */;
860 long var356 /* : Int */;
861 long var357 /* : Int */;
862 short int var359 /* : Bool */;
863 int cltype360;
864 int idtype361;
865 const char* var_class_name362;
866 long var363 /* : Int */;
867 long var364 /* : Int */;
868 val* var365 /* : nullable Object */;
869 static val* varonce366;
870 val* var367 /* : String */;
871 char* var368 /* : NativeString */;
872 long var369 /* : Int */;
873 val* var370 /* : FlatString */;
874 static val* varonce371;
875 val* var372 /* : String */;
876 char* var373 /* : NativeString */;
877 long var374 /* : Int */;
878 val* var375 /* : FlatString */;
879 val* var376 /* : Array[Object] */;
880 long var377 /* : Int */;
881 val* var378 /* : NativeArray[Object] */;
882 val* var379 /* : String */;
883 short int var380 /* : Bool */;
884 int cltype381;
885 int idtype382;
886 val* var383 /* : nullable Frame */;
887 val* var385 /* : nullable Frame */;
888 val* var386 /* : Array[RuntimeVariable] */;
889 val* var388 /* : Array[RuntimeVariable] */;
890 val* var389 /* : nullable Object */;
891 val* var_recv /* var recv: RuntimeVariable */;
892 val* var390 /* : MType */;
893 val* var392 /* : MType */;
894 val* var393 /* : String */;
895 static val* varonce394;
896 val* var395 /* : String */;
897 char* var396 /* : NativeString */;
898 long var397 /* : Int */;
899 val* var398 /* : FlatString */;
900 short int var399 /* : Bool */;
901 short int var400 /* : Bool */;
902 static val* varonce401;
903 val* var402 /* : String */;
904 char* var403 /* : NativeString */;
905 long var404 /* : Int */;
906 val* var405 /* : FlatString */;
907 val* var406 /* : Array[Object] */;
908 long var407 /* : Int */;
909 val* var408 /* : NativeArray[Object] */;
910 val* var409 /* : String */;
911 val* var_recv_ptr /* var recv_ptr: nullable Object */;
912 val* var410 /* : MType */;
913 val* var412 /* : MType */;
914 short int var413 /* : Bool */;
915 int cltype414;
916 int idtype415;
917 const char* var_class_name416;
918 val* var417 /* : MClass */;
919 val* var419 /* : MClass */;
920 val* var_mclass420 /* var mclass: MClass */;
921 static val* varonce421;
922 val* var422 /* : String */;
923 char* var423 /* : NativeString */;
924 long var424 /* : Int */;
925 val* var425 /* : FlatString */;
926 val* var426 /* : String */;
927 val* var427 /* : Array[Object] */;
928 long var428 /* : Int */;
929 val* var429 /* : NativeArray[Object] */;
930 val* var430 /* : String */;
931 static val* varonce431;
932 val* var432 /* : String */;
933 char* var433 /* : NativeString */;
934 long var434 /* : Int */;
935 val* var435 /* : FlatString */;
936 val* var436 /* : String */;
937 static val* varonce437;
938 val* var438 /* : String */;
939 char* var439 /* : NativeString */;
940 long var440 /* : Int */;
941 val* var441 /* : FlatString */;
942 val* var442 /* : Array[Object] */;
943 long var443 /* : Int */;
944 val* var444 /* : NativeArray[Object] */;
945 val* var445 /* : String */;
946 static val* varonce446;
947 val* var447 /* : String */;
948 char* var448 /* : NativeString */;
949 long var449 /* : Int */;
950 val* var450 /* : FlatString */;
951 val* var451 /* : String */;
952 val* var_entry /* var entry: String */;
953 static val* varonce452;
954 val* var453 /* : String */;
955 char* var454 /* : NativeString */;
956 long var455 /* : Int */;
957 val* var456 /* : FlatString */;
958 static val* varonce457;
959 val* var458 /* : String */;
960 char* var459 /* : NativeString */;
961 long var460 /* : Int */;
962 val* var461 /* : FlatString */;
963 val* var462 /* : Array[Object] */;
964 long var463 /* : Int */;
965 val* var464 /* : NativeArray[Object] */;
966 val* var465 /* : String */;
967 val* var466 /* : MProperty */;
968 val* var468 /* : MProperty */;
969 val* var469 /* : String */;
970 static val* varonce470;
971 val* var471 /* : String */;
972 char* var472 /* : NativeString */;
973 long var473 /* : Int */;
974 val* var474 /* : FlatString */;
975 static val* varonce475;
976 val* var476 /* : String */;
977 char* var477 /* : NativeString */;
978 long var478 /* : Int */;
979 val* var479 /* : FlatString */;
980 val* var480 /* : MProperty */;
981 val* var482 /* : MProperty */;
982 val* var483 /* : String */;
983 static val* varonce484;
984 val* var485 /* : String */;
985 char* var486 /* : NativeString */;
986 long var487 /* : Int */;
987 val* var488 /* : FlatString */;
988 val* var489 /* : Array[Object] */;
989 long var490 /* : Int */;
990 val* var491 /* : NativeArray[Object] */;
991 val* var492 /* : String */;
992 static val* varonce493;
993 val* var494 /* : String */;
994 char* var495 /* : NativeString */;
995 long var496 /* : Int */;
996 val* var497 /* : FlatString */;
997 static val* varonce498;
998 val* var499 /* : String */;
999 char* var500 /* : NativeString */;
1000 long var501 /* : Int */;
1001 val* var502 /* : FlatString */;
1002 val* var503 /* : Array[Object] */;
1003 long var504 /* : Int */;
1004 val* var505 /* : NativeArray[Object] */;
1005 val* var506 /* : String */;
1006 static val* varonce507;
1007 val* var508 /* : String */;
1008 char* var509 /* : NativeString */;
1009 long var510 /* : Int */;
1010 val* var511 /* : FlatString */;
1011 static val* varonce512;
1012 val* var513 /* : String */;
1013 char* var514 /* : NativeString */;
1014 long var515 /* : Int */;
1015 val* var516 /* : FlatString */;
1016 val* var517 /* : Array[Object] */;
1017 long var518 /* : Int */;
1018 val* var519 /* : NativeArray[Object] */;
1019 val* var520 /* : String */;
1020 short int var521 /* : Bool */;
1021 short int var_522 /* var : Bool */;
1022 static val* varonce523;
1023 val* var524 /* : String */;
1024 char* var525 /* : NativeString */;
1025 long var526 /* : Int */;
1026 val* var527 /* : FlatString */;
1027 short int var528 /* : Bool */;
1028 short int var529 /* : Bool */;
1029 static val* varonce530;
1030 val* var531 /* : String */;
1031 char* var532 /* : NativeString */;
1032 long var533 /* : Int */;
1033 val* var534 /* : FlatString */;
1034 val* var535 /* : String */;
1035 val* var_is_nullable /* var is_nullable: String */;
1036 static val* varonce536;
1037 val* var537 /* : String */;
1038 char* var538 /* : NativeString */;
1039 long var539 /* : Int */;
1040 val* var540 /* : FlatString */;
1041 static val* varonce541;
1042 val* var542 /* : String */;
1043 char* var543 /* : NativeString */;
1044 long var544 /* : Int */;
1045 val* var545 /* : FlatString */;
1046 val* var546 /* : Array[Object] */;
1047 long var547 /* : Int */;
1048 val* var548 /* : NativeArray[Object] */;
1049 val* var549 /* : String */;
1050 static val* varonce550;
1051 val* var551 /* : String */;
1052 char* var552 /* : NativeString */;
1053 long var553 /* : Int */;
1054 val* var554 /* : FlatString */;
1055 static val* varonce555;
1056 val* var556 /* : String */;
1057 char* var557 /* : NativeString */;
1058 long var558 /* : Int */;
1059 val* var559 /* : FlatString */;
1060 val* var560 /* : Array[Object] */;
1061 long var561 /* : Int */;
1062 val* var562 /* : NativeArray[Object] */;
1063 val* var563 /* : String */;
1064 val* var564 /* : String */;
1065 val* var565 /* : AbstractCompiler */;
1066 val* var567 /* : AbstractCompiler */;
1067 val* var568 /* : ModelBuilder */;
1068 val* var570 /* : ModelBuilder */;
1069 val* var571 /* : ToolContext */;
1070 val* var573 /* : ToolContext */;
1071 val* var574 /* : OptionBool */;
1072 val* var576 /* : OptionBool */;
1073 val* var577 /* : nullable Object */;
1074 val* var579 /* : nullable Object */;
1075 short int var580 /* : Bool */;
1076 val* var581 /* : AbstractCompiler */;
1077 val* var583 /* : AbstractCompiler */;
1078 val* var584 /* : HashMap[String, Int] */;
1079 val* var586 /* : HashMap[String, Int] */;
1080 val* var_587 /* var : HashMap[String, Int] */;
1081 val* var_588 /* var : String */;
1082 val* var589 /* : nullable Object */;
1083 long var590 /* : Int */;
1084 long var591 /* : Int */;
1085 short int var593 /* : Bool */;
1086 int cltype594;
1087 int idtype595;
1088 const char* var_class_name596;
1089 long var597 /* : Int */;
1090 long var598 /* : Int */;
1091 val* var599 /* : nullable Object */;
1092 static val* varonce600;
1093 val* var601 /* : String */;
1094 char* var602 /* : NativeString */;
1095 long var603 /* : Int */;
1096 val* var604 /* : FlatString */;
1097 static val* varonce605;
1098 val* var606 /* : String */;
1099 char* var607 /* : NativeString */;
1100 long var608 /* : Int */;
1101 val* var609 /* : FlatString */;
1102 val* var610 /* : Array[Object] */;
1103 long var611 /* : Int */;
1104 val* var612 /* : NativeArray[Object] */;
1105 val* var613 /* : String */;
1106 static val* varonce614;
1107 val* var615 /* : String */;
1108 char* var616 /* : NativeString */;
1109 long var617 /* : Int */;
1110 val* var618 /* : FlatString */;
1111 val* var619 /* : String */;
1112 static val* varonce620;
1113 val* var621 /* : String */;
1114 char* var622 /* : NativeString */;
1115 long var623 /* : Int */;
1116 val* var624 /* : FlatString */;
1117 static val* varonce625;
1118 val* var626 /* : String */;
1119 char* var627 /* : NativeString */;
1120 long var628 /* : Int */;
1121 val* var629 /* : FlatString */;
1122 val* var630 /* : Array[Object] */;
1123 long var631 /* : Int */;
1124 val* var632 /* : NativeArray[Object] */;
1125 val* var633 /* : String */;
1126 static val* varonce634;
1127 val* var635 /* : String */;
1128 char* var636 /* : NativeString */;
1129 long var637 /* : Int */;
1130 val* var638 /* : FlatString */;
1131 static val* varonce639;
1132 val* var640 /* : String */;
1133 char* var641 /* : NativeString */;
1134 long var642 /* : Int */;
1135 val* var643 /* : FlatString */;
1136 val* var644 /* : Array[Object] */;
1137 long var645 /* : Int */;
1138 val* var646 /* : NativeArray[Object] */;
1139 val* var647 /* : String */;
1140 static val* varonce648;
1141 val* var649 /* : String */;
1142 char* var650 /* : NativeString */;
1143 long var651 /* : Int */;
1144 val* var652 /* : FlatString */;
1145 static val* varonce653;
1146 val* var654 /* : String */;
1147 char* var655 /* : NativeString */;
1148 long var656 /* : Int */;
1149 val* var657 /* : FlatString */;
1150 val* var658 /* : Array[Object] */;
1151 long var659 /* : Int */;
1152 val* var660 /* : NativeArray[Object] */;
1153 val* var661 /* : String */;
1154 static val* varonce662;
1155 val* var663 /* : String */;
1156 char* var664 /* : NativeString */;
1157 long var665 /* : Int */;
1158 val* var666 /* : FlatString */;
1159 static val* varonce667;
1160 val* var668 /* : String */;
1161 char* var669 /* : NativeString */;
1162 long var670 /* : Int */;
1163 val* var671 /* : FlatString */;
1164 static val* varonce672;
1165 val* var673 /* : String */;
1166 char* var674 /* : NativeString */;
1167 long var675 /* : Int */;
1168 val* var676 /* : FlatString */;
1169 static val* varonce677;
1170 val* var678 /* : String */;
1171 char* var679 /* : NativeString */;
1172 long var680 /* : Int */;
1173 val* var681 /* : FlatString */;
1174 val* var682 /* : Array[Object] */;
1175 long var683 /* : Int */;
1176 val* var684 /* : NativeArray[Object] */;
1177 val* var685 /* : String */;
1178 static val* varonce686;
1179 val* var687 /* : String */;
1180 char* var688 /* : NativeString */;
1181 long var689 /* : Int */;
1182 val* var690 /* : FlatString */;
1183 val* var691 /* : Array[Object] */;
1184 long var692 /* : Int */;
1185 val* var693 /* : NativeArray[Object] */;
1186 val* var694 /* : String */;
1187 static val* varonce695;
1188 val* var696 /* : String */;
1189 char* var697 /* : NativeString */;
1190 long var698 /* : Int */;
1191 val* var699 /* : FlatString */;
1192 static val* varonce700;
1193 val* var701 /* : String */;
1194 char* var702 /* : NativeString */;
1195 long var703 /* : Int */;
1196 val* var704 /* : FlatString */;
1197 static val* varonce705;
1198 val* var706 /* : String */;
1199 char* var707 /* : NativeString */;
1200 long var708 /* : Int */;
1201 val* var709 /* : FlatString */;
1202 static val* varonce710;
1203 val* var711 /* : String */;
1204 char* var712 /* : NativeString */;
1205 long var713 /* : Int */;
1206 val* var714 /* : FlatString */;
1207 static val* varonce715;
1208 val* var716 /* : String */;
1209 char* var717 /* : NativeString */;
1210 long var718 /* : Int */;
1211 val* var719 /* : FlatString */;
1212 val* var720 /* : Array[Object] */;
1213 long var721 /* : Int */;
1214 val* var722 /* : NativeArray[Object] */;
1215 val* var723 /* : String */;
1216 static val* varonce724;
1217 val* var725 /* : String */;
1218 char* var726 /* : NativeString */;
1219 long var727 /* : Int */;
1220 val* var728 /* : FlatString */;
1221 static val* varonce729;
1222 val* var730 /* : String */;
1223 char* var731 /* : NativeString */;
1224 long var732 /* : Int */;
1225 val* var733 /* : FlatString */;
1226 var_value = p0;
1227 var_mtype = p1;
1228 var_tag = p2;
1229 if (varonce) {
1230 var1 = varonce;
1231 } else {
1232 var2 = "/* type test for ";
1233 var3 = 17;
1234 var4 = string__NativeString__to_s_with_length(var2, var3);
1235 var1 = var4;
1236 varonce = var1;
1237 }
1238 {
1239 var5 = abstract_compiler__RuntimeVariable__inspect(var_value);
1240 }
1241 if (varonce6) {
1242 var7 = varonce6;
1243 } else {
1244 var8 = " isa ";
1245 var9 = 5;
1246 var10 = string__NativeString__to_s_with_length(var8, var9);
1247 var7 = var10;
1248 varonce6 = var7;
1249 }
1250 if (varonce11) {
1251 var12 = varonce11;
1252 } else {
1253 var13 = " */";
1254 var14 = 3;
1255 var15 = string__NativeString__to_s_with_length(var13, var14);
1256 var12 = var15;
1257 varonce11 = var12;
1258 }
1259 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
1260 { /* var16 = array_instance Array[Object] */
1261 var17 = 5;
1262 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
1263 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var1;
1264 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var5;
1265 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var7;
1266 ((struct instance_array__NativeArray*)var18)->values[3] = (val*) var_mtype;
1267 ((struct instance_array__NativeArray*)var18)->values[4] = (val*) var12;
1268 {
1269 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
1270 }
1271 }
1272 {
1273 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
1274 }
1275 {
1276 abstract_compiler__AbstractCompilerVisitor__add(self, var19); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
1277 }
1278 {
1279 var20 = abstract_compiler__AbstractCompilerVisitor__bool_type(self);
1280 }
1281 {
1282 var21 = abstract_compiler__AbstractCompilerVisitor__new_var(self, var20);
1283 }
1284 var_res = var21;
1285 if (varonce22) {
1286 var23 = varonce22;
1287 } else {
1288 var24 = "cltype";
1289 var25 = 6;
1290 var26 = string__NativeString__to_s_with_length(var24, var25);
1291 var23 = var26;
1292 varonce22 = var23;
1293 }
1294 {
1295 var27 = abstract_compiler__AbstractCompilerVisitor__get_name(self, var23);
1296 }
1297 var_cltype = var27;
1298 if (varonce28) {
1299 var29 = varonce28;
1300 } else {
1301 var30 = "int ";
1302 var31 = 4;
1303 var32 = string__NativeString__to_s_with_length(var30, var31);
1304 var29 = var32;
1305 varonce28 = var29;
1306 }
1307 if (varonce33) {
1308 var34 = varonce33;
1309 } else {
1310 var35 = ";";
1311 var36 = 1;
1312 var37 = string__NativeString__to_s_with_length(var35, var36);
1313 var34 = var37;
1314 varonce33 = var34;
1315 }
1316 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
1317 { /* var38 = array_instance Array[Object] */
1318 var39 = 3;
1319 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
1320 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var29;
1321 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_cltype;
1322 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var34;
1323 {
1324 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
1325 }
1326 }
1327 {
1328 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
1329 }
1330 {
1331 abstract_compiler__AbstractCompilerVisitor__add_decl(self, var41); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <self:SeparateErasureCompilerVisitor>*/
1332 }
1333 if (varonce42) {
1334 var43 = varonce42;
1335 } else {
1336 var44 = "idtype";
1337 var45 = 6;
1338 var46 = string__NativeString__to_s_with_length(var44, var45);
1339 var43 = var46;
1340 varonce42 = var43;
1341 }
1342 {
1343 var47 = abstract_compiler__AbstractCompilerVisitor__get_name(self, var43);
1344 }
1345 var_idtype = var47;
1346 if (varonce48) {
1347 var49 = varonce48;
1348 } else {
1349 var50 = "int ";
1350 var51 = 4;
1351 var52 = string__NativeString__to_s_with_length(var50, var51);
1352 var49 = var52;
1353 varonce48 = var49;
1354 }
1355 if (varonce53) {
1356 var54 = varonce53;
1357 } else {
1358 var55 = ";";
1359 var56 = 1;
1360 var57 = string__NativeString__to_s_with_length(var55, var56);
1361 var54 = var57;
1362 varonce53 = var54;
1363 }
1364 var58 = NEW_array__Array(&type_array__Arraykernel__Object);
1365 { /* var58 = array_instance Array[Object] */
1366 var59 = 3;
1367 var60 = NEW_array__NativeArray(var59, &type_array__NativeArraykernel__Object);
1368 ((struct instance_array__NativeArray*)var60)->values[0] = (val*) var49;
1369 ((struct instance_array__NativeArray*)var60)->values[1] = (val*) var_idtype;
1370 ((struct instance_array__NativeArray*)var60)->values[2] = (val*) var54;
1371 {
1372 ((void (*)(val*, val*, long))(var58->class->vft[COLOR_array__Array__with_native]))(var58, var60, var59) /* with_native on <var58:Array[Object]>*/;
1373 }
1374 }
1375 {
1376 var61 = ((val* (*)(val*))(var58->class->vft[COLOR_string__Object__to_s]))(var58) /* to_s on <var58:Array[Object]>*/;
1377 }
1378 {
1379 abstract_compiler__AbstractCompilerVisitor__add_decl(self, var61); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <self:SeparateErasureCompilerVisitor>*/
1380 }
1381 {
1382 var62 = separate_compiler__SeparateCompilerVisitor__maybe_null(self, var_value);
1383 }
1384 var_maybe_null = var62;
1385 if (varonce63) {
1386 var64 = varonce63;
1387 } else {
1388 var65 = "0";
1389 var66 = 1;
1390 var67 = string__NativeString__to_s_with_length(var65, var66);
1391 var64 = var67;
1392 varonce63 = var64;
1393 }
1394 var_accept_null = var64;
1395 /* <var_mtype:MType> isa MNullableType */
1396 cltype = type_model__MNullableType.color;
1397 idtype = type_model__MNullableType.id;
1398 if(cltype >= var_mtype->type->table_size) {
1399 var68 = 0;
1400 } else {
1401 var68 = var_mtype->type->type_table[cltype] == idtype;
1402 }
1403 if (var68){
1404 {
1405 { /* Inline model#MNullableType#mtype (var_mtype) on <var_mtype:MType(MNullableType)> */
1406 var71 = var_mtype->attrs[COLOR_model__MNullableType___mtype].val; /* _mtype on <var_mtype:MType(MNullableType)> */
1407 if (unlikely(var71 == NULL)) {
1408 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
1409 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1388);
1410 show_backtrace(1);
1411 }
1412 var69 = var71;
1413 RET_LABEL70:(void)0;
1414 }
1415 }
1416 var_mtype = var69;
1417 if (varonce72) {
1418 var73 = varonce72;
1419 } else {
1420 var74 = "1";
1421 var75 = 1;
1422 var76 = string__NativeString__to_s_with_length(var74, var75);
1423 var73 = var76;
1424 varonce72 = var73;
1425 }
1426 var_accept_null = var73;
1427 } else {
1428 }
1429 /* <var_mtype:MType> isa MParameterType */
1430 cltype78 = type_model__MParameterType.color;
1431 idtype79 = type_model__MParameterType.id;
1432 if(cltype78 >= var_mtype->type->table_size) {
1433 var77 = 0;
1434 } else {
1435 var77 = var_mtype->type->type_table[cltype78] == idtype79;
1436 }
1437 if (var77){
1438 {
1439 { /* Inline abstract_compiler#AbstractCompilerVisitor#frame (self) on <self:SeparateErasureCompilerVisitor> */
1440 var82 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___frame].val; /* _frame on <self:SeparateErasureCompilerVisitor> */
1441 var80 = var82;
1442 RET_LABEL81:(void)0;
1443 }
1444 }
1445 if (var80 == NULL) {
1446 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1447 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 535);
1448 show_backtrace(1);
1449 } else {
1450 { /* Inline abstract_compiler#Frame#mpropdef (var80) on <var80:nullable Frame> */
1451 if (unlikely(var80 == NULL)) {
1452 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1453 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1454 show_backtrace(1);
1455 }
1456 var85 = var80->attrs[COLOR_abstract_compiler__Frame___mpropdef].val; /* _mpropdef on <var80:nullable Frame> */
1457 if (unlikely(var85 == NULL)) {
1458 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdef");
1459 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1460 show_backtrace(1);
1461 }
1462 var83 = var85;
1463 RET_LABEL84:(void)0;
1464 }
1465 }
1466 {
1467 { /* Inline model#MPropDef#mclassdef (var83) on <var83:MPropDef> */
1468 var88 = var83->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var83:MPropDef> */
1469 if (unlikely(var88 == NULL)) {
1470 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1471 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
1472 show_backtrace(1);
1473 }
1474 var86 = var88;
1475 RET_LABEL87:(void)0;
1476 }
1477 }
1478 {
1479 { /* Inline model#MClassDef#bound_mtype (var86) on <var86:MClassDef> */
1480 var91 = var86->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var86:MClassDef> */
1481 if (unlikely(var91 == NULL)) {
1482 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
1483 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
1484 show_backtrace(1);
1485 }
1486 var89 = var91;
1487 RET_LABEL90:(void)0;
1488 }
1489 }
1490 {
1491 { /* Inline abstract_compiler#AbstractCompilerVisitor#frame (self) on <self:SeparateErasureCompilerVisitor> */
1492 var94 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___frame].val; /* _frame on <self:SeparateErasureCompilerVisitor> */
1493 var92 = var94;
1494 RET_LABEL93:(void)0;
1495 }
1496 }
1497 if (var92 == NULL) {
1498 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1499 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 535);
1500 show_backtrace(1);
1501 } else {
1502 { /* Inline abstract_compiler#Frame#mpropdef (var92) on <var92:nullable Frame> */
1503 if (unlikely(var92 == NULL)) {
1504 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1505 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1506 show_backtrace(1);
1507 }
1508 var97 = var92->attrs[COLOR_abstract_compiler__Frame___mpropdef].val; /* _mpropdef on <var92:nullable Frame> */
1509 if (unlikely(var97 == NULL)) {
1510 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdef");
1511 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1512 show_backtrace(1);
1513 }
1514 var95 = var97;
1515 RET_LABEL96:(void)0;
1516 }
1517 }
1518 {
1519 { /* Inline model#MPropDef#mclassdef (var95) on <var95:MPropDef> */
1520 var100 = var95->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var95:MPropDef> */
1521 if (unlikely(var100 == NULL)) {
1522 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1523 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
1524 show_backtrace(1);
1525 }
1526 var98 = var100;
1527 RET_LABEL99:(void)0;
1528 }
1529 }
1530 {
1531 { /* Inline model#MClassDef#bound_mtype (var98) on <var98:MClassDef> */
1532 var103 = var98->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var98:MClassDef> */
1533 if (unlikely(var103 == NULL)) {
1534 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
1535 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
1536 show_backtrace(1);
1537 }
1538 var101 = var103;
1539 RET_LABEL102:(void)0;
1540 }
1541 }
1542 {
1543 { /* Inline abstract_compiler#AbstractCompilerVisitor#frame (self) on <self:SeparateErasureCompilerVisitor> */
1544 var106 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___frame].val; /* _frame on <self:SeparateErasureCompilerVisitor> */
1545 var104 = var106;
1546 RET_LABEL105:(void)0;
1547 }
1548 }
1549 if (var104 == NULL) {
1550 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1551 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 535);
1552 show_backtrace(1);
1553 } else {
1554 { /* Inline abstract_compiler#Frame#mpropdef (var104) on <var104:nullable Frame> */
1555 if (unlikely(var104 == NULL)) {
1556 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1557 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1558 show_backtrace(1);
1559 }
1560 var109 = var104->attrs[COLOR_abstract_compiler__Frame___mpropdef].val; /* _mpropdef on <var104:nullable Frame> */
1561 if (unlikely(var109 == NULL)) {
1562 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdef");
1563 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1564 show_backtrace(1);
1565 }
1566 var107 = var109;
1567 RET_LABEL108:(void)0;
1568 }
1569 }
1570 {
1571 { /* Inline model#MPropDef#mclassdef (var107) on <var107:MPropDef> */
1572 var112 = var107->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var107:MPropDef> */
1573 if (unlikely(var112 == NULL)) {
1574 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1575 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
1576 show_backtrace(1);
1577 }
1578 var110 = var112;
1579 RET_LABEL111:(void)0;
1580 }
1581 }
1582 {
1583 { /* Inline model#MClassDef#mmodule (var110) on <var110:MClassDef> */
1584 var115 = var110->attrs[COLOR_model__MClassDef___mmodule].val; /* _mmodule on <var110:MClassDef> */
1585 if (unlikely(var115 == NULL)) {
1586 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
1587 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 489);
1588 show_backtrace(1);
1589 }
1590 var113 = var115;
1591 RET_LABEL114:(void)0;
1592 }
1593 }
1594 var116 = 0;
1595 {
1596 var117 = model__MParameterType__resolve_for(var_mtype, var89, var101, var113, var116);
1597 }
1598 var_mtype = var117;
1599 /* <var_mtype:MType> isa MNullableType */
1600 cltype119 = type_model__MNullableType.color;
1601 idtype120 = type_model__MNullableType.id;
1602 if(cltype119 >= var_mtype->type->table_size) {
1603 var118 = 0;
1604 } else {
1605 var118 = var_mtype->type->type_table[cltype119] == idtype120;
1606 }
1607 if (var118){
1608 {
1609 { /* Inline model#MNullableType#mtype (var_mtype) on <var_mtype:MType(MNullableType)> */
1610 var123 = var_mtype->attrs[COLOR_model__MNullableType___mtype].val; /* _mtype on <var_mtype:MType(MNullableType)> */
1611 if (unlikely(var123 == NULL)) {
1612 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
1613 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1388);
1614 show_backtrace(1);
1615 }
1616 var121 = var123;
1617 RET_LABEL122:(void)0;
1618 }
1619 }
1620 var_mtype = var121;
1621 if (varonce124) {
1622 var125 = varonce124;
1623 } else {
1624 var126 = "1";
1625 var127 = 1;
1626 var128 = string__NativeString__to_s_with_length(var126, var127);
1627 var125 = var128;
1628 varonce124 = var125;
1629 }
1630 var_accept_null = var125;
1631 } else {
1632 }
1633 } else {
1634 }
1635 {
1636 { /* Inline abstract_compiler#RuntimeVariable#mcasttype (var_value) on <var_value:RuntimeVariable> */
1637 var131 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mcasttype].val; /* _mcasttype on <var_value:RuntimeVariable> */
1638 if (unlikely(var131 == NULL)) {
1639 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mcasttype");
1640 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1637);
1641 show_backtrace(1);
1642 }
1643 var129 = var131;
1644 RET_LABEL130:(void)0;
1645 }
1646 }
1647 {
1648 { /* Inline abstract_compiler#AbstractCompilerVisitor#frame (self) on <self:SeparateErasureCompilerVisitor> */
1649 var134 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___frame].val; /* _frame on <self:SeparateErasureCompilerVisitor> */
1650 var132 = var134;
1651 RET_LABEL133:(void)0;
1652 }
1653 }
1654 if (var132 == NULL) {
1655 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1656 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 542);
1657 show_backtrace(1);
1658 } else {
1659 { /* Inline abstract_compiler#Frame#mpropdef (var132) on <var132:nullable Frame> */
1660 if (unlikely(var132 == NULL)) {
1661 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1662 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1663 show_backtrace(1);
1664 }
1665 var137 = var132->attrs[COLOR_abstract_compiler__Frame___mpropdef].val; /* _mpropdef on <var132:nullable Frame> */
1666 if (unlikely(var137 == NULL)) {
1667 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdef");
1668 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1669 show_backtrace(1);
1670 }
1671 var135 = var137;
1672 RET_LABEL136:(void)0;
1673 }
1674 }
1675 {
1676 { /* Inline model#MPropDef#mclassdef (var135) on <var135:MPropDef> */
1677 var140 = var135->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var135:MPropDef> */
1678 if (unlikely(var140 == NULL)) {
1679 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1680 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
1681 show_backtrace(1);
1682 }
1683 var138 = var140;
1684 RET_LABEL139:(void)0;
1685 }
1686 }
1687 {
1688 { /* Inline model#MClassDef#mmodule (var138) on <var138:MClassDef> */
1689 var143 = var138->attrs[COLOR_model__MClassDef___mmodule].val; /* _mmodule on <var138:MClassDef> */
1690 if (unlikely(var143 == NULL)) {
1691 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
1692 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 489);
1693 show_backtrace(1);
1694 }
1695 var141 = var143;
1696 RET_LABEL142:(void)0;
1697 }
1698 }
1699 {
1700 { /* Inline abstract_compiler#AbstractCompilerVisitor#frame (self) on <self:SeparateErasureCompilerVisitor> */
1701 var146 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___frame].val; /* _frame on <self:SeparateErasureCompilerVisitor> */
1702 var144 = var146;
1703 RET_LABEL145:(void)0;
1704 }
1705 }
1706 if (var144 == NULL) {
1707 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1708 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 542);
1709 show_backtrace(1);
1710 } else {
1711 { /* Inline abstract_compiler#Frame#mpropdef (var144) on <var144:nullable Frame> */
1712 if (unlikely(var144 == NULL)) {
1713 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1714 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1715 show_backtrace(1);
1716 }
1717 var149 = var144->attrs[COLOR_abstract_compiler__Frame___mpropdef].val; /* _mpropdef on <var144:nullable Frame> */
1718 if (unlikely(var149 == NULL)) {
1719 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdef");
1720 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1681);
1721 show_backtrace(1);
1722 }
1723 var147 = var149;
1724 RET_LABEL148:(void)0;
1725 }
1726 }
1727 {
1728 { /* Inline model#MPropDef#mclassdef (var147) on <var147:MPropDef> */
1729 var152 = var147->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var147:MPropDef> */
1730 if (unlikely(var152 == NULL)) {
1731 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1732 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
1733 show_backtrace(1);
1734 }
1735 var150 = var152;
1736 RET_LABEL151:(void)0;
1737 }
1738 }
1739 {
1740 { /* Inline model#MClassDef#bound_mtype (var150) on <var150:MClassDef> */
1741 var155 = var150->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var150:MClassDef> */
1742 if (unlikely(var155 == NULL)) {
1743 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
1744 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
1745 show_backtrace(1);
1746 }
1747 var153 = var155;
1748 RET_LABEL154:(void)0;
1749 }
1750 }
1751 {
1752 var156 = model__MType__is_subtype(var129, var141, var153, var_mtype);
1753 }
1754 if (var156){
1755 if (varonce157) {
1756 var158 = varonce157;
1757 } else {
1758 var159 = " = 1; /* easy ";
1759 var160 = 14;
1760 var161 = string__NativeString__to_s_with_length(var159, var160);
1761 var158 = var161;
1762 varonce157 = var158;
1763 }
1764 {
1765 var162 = abstract_compiler__RuntimeVariable__inspect(var_value);
1766 }
1767 if (varonce163) {
1768 var164 = varonce163;
1769 } else {
1770 var165 = " isa ";
1771 var166 = 5;
1772 var167 = string__NativeString__to_s_with_length(var165, var166);
1773 var164 = var167;
1774 varonce163 = var164;
1775 }
1776 if (varonce168) {
1777 var169 = varonce168;
1778 } else {
1779 var170 = "*/";
1780 var171 = 2;
1781 var172 = string__NativeString__to_s_with_length(var170, var171);
1782 var169 = var172;
1783 varonce168 = var169;
1784 }
1785 var173 = NEW_array__Array(&type_array__Arraykernel__Object);
1786 { /* var173 = array_instance Array[Object] */
1787 var174 = 6;
1788 var175 = NEW_array__NativeArray(var174, &type_array__NativeArraykernel__Object);
1789 ((struct instance_array__NativeArray*)var175)->values[0] = (val*) var_res;
1790 ((struct instance_array__NativeArray*)var175)->values[1] = (val*) var158;
1791 ((struct instance_array__NativeArray*)var175)->values[2] = (val*) var162;
1792 ((struct instance_array__NativeArray*)var175)->values[3] = (val*) var164;
1793 ((struct instance_array__NativeArray*)var175)->values[4] = (val*) var_mtype;
1794 ((struct instance_array__NativeArray*)var175)->values[5] = (val*) var169;
1795 {
1796 ((void (*)(val*, val*, long))(var173->class->vft[COLOR_array__Array__with_native]))(var173, var175, var174) /* with_native on <var173:Array[Object]>*/;
1797 }
1798 }
1799 {
1800 var176 = ((val* (*)(val*))(var173->class->vft[COLOR_string__Object__to_s]))(var173) /* to_s on <var173:Array[Object]>*/;
1801 }
1802 {
1803 abstract_compiler__AbstractCompilerVisitor__add(self, var176); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
1804 }
1805 {
1806 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
1807 var179 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
1808 if (unlikely(var179 == NULL)) {
1809 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
1810 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
1811 show_backtrace(1);
1812 }
1813 var177 = var179;
1814 RET_LABEL178:(void)0;
1815 }
1816 }
1817 {
1818 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (var177) on <var177:AbstractCompiler(SeparateCompiler)> */
1819 var182 = var177->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <var177:AbstractCompiler(SeparateCompiler)> */
1820 if (unlikely(var182 == NULL)) {
1821 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
1822 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
1823 show_backtrace(1);
1824 }
1825 var180 = var182;
1826 RET_LABEL181:(void)0;
1827 }
1828 }
1829 {
1830 { /* Inline modelbuilder#ModelBuilder#toolcontext (var180) on <var180:ModelBuilder> */
1831 var185 = var180->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var180:ModelBuilder> */
1832 if (unlikely(var185 == NULL)) {
1833 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
1834 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
1835 show_backtrace(1);
1836 }
1837 var183 = var185;
1838 RET_LABEL184:(void)0;
1839 }
1840 }
1841 {
1842 { /* Inline abstract_compiler#ToolContext#opt_typing_test_metrics (var183) on <var183:ToolContext> */
1843 var188 = var183->attrs[COLOR_abstract_compiler__ToolContext___opt_typing_test_metrics].val; /* _opt_typing_test_metrics on <var183:ToolContext> */
1844 if (unlikely(var188 == NULL)) {
1845 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_typing_test_metrics");
1846 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 61);
1847 show_backtrace(1);
1848 }
1849 var186 = var188;
1850 RET_LABEL187:(void)0;
1851 }
1852 }
1853 {
1854 { /* Inline opts#Option#value (var186) on <var186:OptionBool> */
1855 var191 = var186->attrs[COLOR_opts__Option___value].val; /* _value on <var186:OptionBool> */
1856 var189 = var191;
1857 RET_LABEL190:(void)0;
1858 }
1859 }
1860 var192 = ((struct instance_kernel__Bool*)var189)->value; /* autounbox from nullable Object to Bool */;
1861 if (var192){
1862 {
1863 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
1864 var195 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
1865 if (unlikely(var195 == NULL)) {
1866 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
1867 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
1868 show_backtrace(1);
1869 }
1870 var193 = var195;
1871 RET_LABEL194:(void)0;
1872 }
1873 }
1874 {
1875 { /* Inline abstract_compiler#AbstractCompiler#count_type_test_skipped (var193) on <var193:AbstractCompiler(SeparateCompiler)> */
1876 var198 = var193->attrs[COLOR_abstract_compiler__AbstractCompiler___count_type_test_skipped].val; /* _count_type_test_skipped on <var193:AbstractCompiler(SeparateCompiler)> */
1877 if (unlikely(var198 == NULL)) {
1878 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _count_type_test_skipped");
1879 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 947);
1880 show_backtrace(1);
1881 }
1882 var196 = var198;
1883 RET_LABEL197:(void)0;
1884 }
1885 }
1886 var_ = var196;
1887 var_199 = var_tag;
1888 {
1889 var200 = hash_collection__HashMap___91d_93d(var_, var_199);
1890 }
1891 var201 = 1;
1892 {
1893 { /* Inline kernel#Int#+ (var200,var201) on <var200:nullable Object(Int)> */
1894 /* Covariant cast for argument 0 (i) <var201:Int> isa OTHER */
1895 /* <var201:Int> isa OTHER */
1896 var204 = 1; /* easy <var201:Int> isa OTHER*/
1897 if (unlikely(!var204)) {
1898 var_class_name = type_kernel__Int.name;
1899 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1900 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
1901 show_backtrace(1);
1902 }
1903 var207 = ((struct instance_kernel__Int*)var200)->value; /* autounbox from nullable Object to Int */;
1904 var208 = var207 + var201;
1905 var202 = var208;
1906 goto RET_LABEL203;
1907 RET_LABEL203:(void)0;
1908 }
1909 }
1910 {
1911 var209 = BOX_kernel__Int(var202); /* autobox from Int to nullable Object */
1912 hash_collection__HashMap___91d_93d_61d(var_, var_199, var209); /* Direct call hash_collection#HashMap#[]= on <var_:HashMap[String, Int]>*/
1913 }
1914 if (varonce210) {
1915 var211 = varonce210;
1916 } else {
1917 var212 = "count_type_test_skipped_";
1918 var213 = 24;
1919 var214 = string__NativeString__to_s_with_length(var212, var213);
1920 var211 = var214;
1921 varonce210 = var211;
1922 }
1923 if (varonce215) {
1924 var216 = varonce215;
1925 } else {
1926 var217 = "++;";
1927 var218 = 3;
1928 var219 = string__NativeString__to_s_with_length(var217, var218);
1929 var216 = var219;
1930 varonce215 = var216;
1931 }
1932 var220 = NEW_array__Array(&type_array__Arraykernel__Object);
1933 { /* var220 = array_instance Array[Object] */
1934 var221 = 3;
1935 var222 = NEW_array__NativeArray(var221, &type_array__NativeArraykernel__Object);
1936 ((struct instance_array__NativeArray*)var222)->values[0] = (val*) var211;
1937 ((struct instance_array__NativeArray*)var222)->values[1] = (val*) var_tag;
1938 ((struct instance_array__NativeArray*)var222)->values[2] = (val*) var216;
1939 {
1940 ((void (*)(val*, val*, long))(var220->class->vft[COLOR_array__Array__with_native]))(var220, var222, var221) /* with_native on <var220:Array[Object]>*/;
1941 }
1942 }
1943 {
1944 var223 = ((val* (*)(val*))(var220->class->vft[COLOR_string__Object__to_s]))(var220) /* to_s on <var220:Array[Object]>*/;
1945 }
1946 {
1947 abstract_compiler__AbstractCompilerVisitor__add(self, var223); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
1948 }
1949 } else {
1950 }
1951 var = var_res;
1952 goto RET_LABEL;
1953 } else {
1954 }
1955 {
1956 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
1957 var226 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
1958 if (unlikely(var226 == NULL)) {
1959 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
1960 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
1961 show_backtrace(1);
1962 }
1963 var224 = var226;
1964 RET_LABEL225:(void)0;
1965 }
1966 }
1967 {
1968 var227 = ((val* (*)(val*))(var224->class->vft[COLOR_abstract_compiler__MType__ctype]))(var224) /* ctype on <var224:MType>*/;
1969 }
1970 if (varonce228) {
1971 var229 = varonce228;
1972 } else {
1973 var230 = "val*";
1974 var231 = 4;
1975 var232 = string__NativeString__to_s_with_length(var230, var231);
1976 var229 = var232;
1977 varonce228 = var229;
1978 }
1979 {
1980 var234 = string__FlatString___61d_61d(var227, var229);
1981 var233 = var234;
1982 }
1983 if (var233){
1984 if (varonce235) {
1985 var236 = varonce235;
1986 } else {
1987 var237 = "->class->";
1988 var238 = 9;
1989 var239 = string__NativeString__to_s_with_length(var237, var238);
1990 var236 = var239;
1991 varonce235 = var236;
1992 }
1993 var240 = NEW_array__Array(&type_array__Arraykernel__Object);
1994 { /* var240 = array_instance Array[Object] */
1995 var241 = 2;
1996 var242 = NEW_array__NativeArray(var241, &type_array__NativeArraykernel__Object);
1997 ((struct instance_array__NativeArray*)var242)->values[0] = (val*) var_value;
1998 ((struct instance_array__NativeArray*)var242)->values[1] = (val*) var236;
1999 {
2000 ((void (*)(val*, val*, long))(var240->class->vft[COLOR_array__Array__with_native]))(var240, var242, var241) /* with_native on <var240:Array[Object]>*/;
2001 }
2002 }
2003 {
2004 var243 = ((val* (*)(val*))(var240->class->vft[COLOR_string__Object__to_s]))(var240) /* to_s on <var240:Array[Object]>*/;
2005 }
2006 var_class_ptr = var243;
2007 } else {
2008 {
2009 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
2010 var246 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
2011 if (unlikely(var246 == NULL)) {
2012 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
2013 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
2014 show_backtrace(1);
2015 }
2016 var244 = var246;
2017 RET_LABEL245:(void)0;
2018 }
2019 }
2020 /* <var244:MType> isa MClassType */
2021 cltype248 = type_model__MClassType.color;
2022 idtype249 = type_model__MClassType.id;
2023 if(cltype248 >= var244->type->table_size) {
2024 var247 = 0;
2025 } else {
2026 var247 = var244->type->type_table[cltype248] == idtype249;
2027 }
2028 if (unlikely(!var247)) {
2029 var_class_name250 = var244 == NULL ? "null" : var244->type->name;
2030 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name250);
2031 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 555);
2032 show_backtrace(1);
2033 }
2034 {
2035 { /* Inline model#MClassType#mclass (var244) on <var244:MType(MClassType)> */
2036 var253 = var244->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var244:MType(MClassType)> */
2037 if (unlikely(var253 == NULL)) {
2038 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
2039 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
2040 show_backtrace(1);
2041 }
2042 var251 = var253;
2043 RET_LABEL252:(void)0;
2044 }
2045 }
2046 var_mclass = var251;
2047 if (varonce254) {
2048 var255 = varonce254;
2049 } else {
2050 var256 = "class_";
2051 var257 = 6;
2052 var258 = string__NativeString__to_s_with_length(var256, var257);
2053 var255 = var258;
2054 varonce254 = var255;
2055 }
2056 {
2057 var259 = abstract_compiler__MClass__c_name(var_mclass);
2058 }
2059 var260 = NEW_array__Array(&type_array__Arraykernel__Object);
2060 { /* var260 = array_instance Array[Object] */
2061 var261 = 2;
2062 var262 = NEW_array__NativeArray(var261, &type_array__NativeArraykernel__Object);
2063 ((struct instance_array__NativeArray*)var262)->values[0] = (val*) var255;
2064 ((struct instance_array__NativeArray*)var262)->values[1] = (val*) var259;
2065 {
2066 ((void (*)(val*, val*, long))(var260->class->vft[COLOR_array__Array__with_native]))(var260, var262, var261) /* with_native on <var260:Array[Object]>*/;
2067 }
2068 }
2069 {
2070 var263 = ((val* (*)(val*))(var260->class->vft[COLOR_string__Object__to_s]))(var260) /* to_s on <var260:Array[Object]>*/;
2071 }
2072 {
2073 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var263); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
2074 }
2075 if (varonce264) {
2076 var265 = varonce264;
2077 } else {
2078 var266 = "class_";
2079 var267 = 6;
2080 var268 = string__NativeString__to_s_with_length(var266, var267);
2081 var265 = var268;
2082 varonce264 = var265;
2083 }
2084 {
2085 var269 = abstract_compiler__MClass__c_name(var_mclass);
2086 }
2087 if (varonce270) {
2088 var271 = varonce270;
2089 } else {
2090 var272 = ".";
2091 var273 = 1;
2092 var274 = string__NativeString__to_s_with_length(var272, var273);
2093 var271 = var274;
2094 varonce270 = var271;
2095 }
2096 var275 = NEW_array__Array(&type_array__Arraykernel__Object);
2097 { /* var275 = array_instance Array[Object] */
2098 var276 = 3;
2099 var277 = NEW_array__NativeArray(var276, &type_array__NativeArraykernel__Object);
2100 ((struct instance_array__NativeArray*)var277)->values[0] = (val*) var265;
2101 ((struct instance_array__NativeArray*)var277)->values[1] = (val*) var269;
2102 ((struct instance_array__NativeArray*)var277)->values[2] = (val*) var271;
2103 {
2104 ((void (*)(val*, val*, long))(var275->class->vft[COLOR_array__Array__with_native]))(var275, var277, var276) /* with_native on <var275:Array[Object]>*/;
2105 }
2106 }
2107 {
2108 var278 = ((val* (*)(val*))(var275->class->vft[COLOR_string__Object__to_s]))(var275) /* to_s on <var275:Array[Object]>*/;
2109 }
2110 var_class_ptr = var278;
2111 }
2112 /* <var_mtype:MType> isa MClassType */
2113 cltype280 = type_model__MClassType.color;
2114 idtype281 = type_model__MClassType.id;
2115 if(cltype280 >= var_mtype->type->table_size) {
2116 var279 = 0;
2117 } else {
2118 var279 = var_mtype->type->type_table[cltype280] == idtype281;
2119 }
2120 if (var279){
2121 if (varonce282) {
2122 var283 = varonce282;
2123 } else {
2124 var284 = "class_";
2125 var285 = 6;
2126 var286 = string__NativeString__to_s_with_length(var284, var285);
2127 var283 = var286;
2128 varonce282 = var283;
2129 }
2130 {
2131 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MType(MClassType)> */
2132 var289 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
2133 if (unlikely(var289 == NULL)) {
2134 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
2135 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
2136 show_backtrace(1);
2137 }
2138 var287 = var289;
2139 RET_LABEL288:(void)0;
2140 }
2141 }
2142 {
2143 var290 = abstract_compiler__MClass__c_name(var287);
2144 }
2145 var291 = NEW_array__Array(&type_array__Arraykernel__Object);
2146 { /* var291 = array_instance Array[Object] */
2147 var292 = 2;
2148 var293 = NEW_array__NativeArray(var292, &type_array__NativeArraykernel__Object);
2149 ((struct instance_array__NativeArray*)var293)->values[0] = (val*) var283;
2150 ((struct instance_array__NativeArray*)var293)->values[1] = (val*) var290;
2151 {
2152 ((void (*)(val*, val*, long))(var291->class->vft[COLOR_array__Array__with_native]))(var291, var293, var292) /* with_native on <var291:Array[Object]>*/;
2153 }
2154 }
2155 {
2156 var294 = ((val* (*)(val*))(var291->class->vft[COLOR_string__Object__to_s]))(var291) /* to_s on <var291:Array[Object]>*/;
2157 }
2158 {
2159 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var294); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
2160 }
2161 if (varonce295) {
2162 var296 = varonce295;
2163 } else {
2164 var297 = " = class_";
2165 var298 = 9;
2166 var299 = string__NativeString__to_s_with_length(var297, var298);
2167 var296 = var299;
2168 varonce295 = var296;
2169 }
2170 {
2171 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MType(MClassType)> */
2172 var302 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
2173 if (unlikely(var302 == NULL)) {
2174 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
2175 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
2176 show_backtrace(1);
2177 }
2178 var300 = var302;
2179 RET_LABEL301:(void)0;
2180 }
2181 }
2182 {
2183 var303 = abstract_compiler__MClass__c_name(var300);
2184 }
2185 if (varonce304) {
2186 var305 = varonce304;
2187 } else {
2188 var306 = ".color;";
2189 var307 = 7;
2190 var308 = string__NativeString__to_s_with_length(var306, var307);
2191 var305 = var308;
2192 varonce304 = var305;
2193 }
2194 var309 = NEW_array__Array(&type_array__Arraykernel__Object);
2195 { /* var309 = array_instance Array[Object] */
2196 var310 = 4;
2197 var311 = NEW_array__NativeArray(var310, &type_array__NativeArraykernel__Object);
2198 ((struct instance_array__NativeArray*)var311)->values[0] = (val*) var_cltype;
2199 ((struct instance_array__NativeArray*)var311)->values[1] = (val*) var296;
2200 ((struct instance_array__NativeArray*)var311)->values[2] = (val*) var303;
2201 ((struct instance_array__NativeArray*)var311)->values[3] = (val*) var305;
2202 {
2203 ((void (*)(val*, val*, long))(var309->class->vft[COLOR_array__Array__with_native]))(var309, var311, var310) /* with_native on <var309:Array[Object]>*/;
2204 }
2205 }
2206 {
2207 var312 = ((val* (*)(val*))(var309->class->vft[COLOR_string__Object__to_s]))(var309) /* to_s on <var309:Array[Object]>*/;
2208 }
2209 {
2210 abstract_compiler__AbstractCompilerVisitor__add(self, var312); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
2211 }
2212 if (varonce313) {
2213 var314 = varonce313;
2214 } else {
2215 var315 = " = class_";
2216 var316 = 9;
2217 var317 = string__NativeString__to_s_with_length(var315, var316);
2218 var314 = var317;
2219 varonce313 = var314;
2220 }
2221 {
2222 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MType(MClassType)> */
2223 var320 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
2224 if (unlikely(var320 == NULL)) {
2225 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
2226 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
2227 show_backtrace(1);
2228 }
2229 var318 = var320;
2230 RET_LABEL319:(void)0;
2231 }
2232 }
2233 {
2234 var321 = abstract_compiler__MClass__c_name(var318);
2235 }
2236 if (varonce322) {
2237 var323 = varonce322;
2238 } else {
2239 var324 = ".id;";
2240 var325 = 4;
2241 var326 = string__NativeString__to_s_with_length(var324, var325);
2242 var323 = var326;
2243 varonce322 = var323;
2244 }
2245 var327 = NEW_array__Array(&type_array__Arraykernel__Object);
2246 { /* var327 = array_instance Array[Object] */
2247 var328 = 4;
2248 var329 = NEW_array__NativeArray(var328, &type_array__NativeArraykernel__Object);
2249 ((struct instance_array__NativeArray*)var329)->values[0] = (val*) var_idtype;
2250 ((struct instance_array__NativeArray*)var329)->values[1] = (val*) var314;
2251 ((struct instance_array__NativeArray*)var329)->values[2] = (val*) var321;
2252 ((struct instance_array__NativeArray*)var329)->values[3] = (val*) var323;
2253 {
2254 ((void (*)(val*, val*, long))(var327->class->vft[COLOR_array__Array__with_native]))(var327, var329, var328) /* with_native on <var327:Array[Object]>*/;
2255 }
2256 }
2257 {
2258 var330 = ((val* (*)(val*))(var327->class->vft[COLOR_string__Object__to_s]))(var327) /* to_s on <var327:Array[Object]>*/;
2259 }
2260 {
2261 abstract_compiler__AbstractCompilerVisitor__add(self, var330); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
2262 }
2263 {
2264 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
2265 var333 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
2266 if (unlikely(var333 == NULL)) {
2267 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
2268 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
2269 show_backtrace(1);
2270 }
2271 var331 = var333;
2272 RET_LABEL332:(void)0;
2273 }
2274 }
2275 {
2276 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (var331) on <var331:AbstractCompiler(SeparateCompiler)> */
2277 var336 = var331->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <var331:AbstractCompiler(SeparateCompiler)> */
2278 if (unlikely(var336 == NULL)) {
2279 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
2280 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
2281 show_backtrace(1);
2282 }
2283 var334 = var336;
2284 RET_LABEL335:(void)0;
2285 }
2286 }
2287 {
2288 { /* Inline modelbuilder#ModelBuilder#toolcontext (var334) on <var334:ModelBuilder> */
2289 var339 = var334->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var334:ModelBuilder> */
2290 if (unlikely(var339 == NULL)) {
2291 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
2292 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
2293 show_backtrace(1);
2294 }
2295 var337 = var339;
2296 RET_LABEL338:(void)0;
2297 }
2298 }
2299 {
2300 { /* Inline abstract_compiler#ToolContext#opt_typing_test_metrics (var337) on <var337:ToolContext> */
2301 var342 = var337->attrs[COLOR_abstract_compiler__ToolContext___opt_typing_test_metrics].val; /* _opt_typing_test_metrics on <var337:ToolContext> */
2302 if (unlikely(var342 == NULL)) {
2303 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_typing_test_metrics");
2304 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 61);
2305 show_backtrace(1);
2306 }
2307 var340 = var342;
2308 RET_LABEL341:(void)0;
2309 }
2310 }
2311 {
2312 { /* Inline opts#Option#value (var340) on <var340:OptionBool> */
2313 var345 = var340->attrs[COLOR_opts__Option___value].val; /* _value on <var340:OptionBool> */
2314 var343 = var345;
2315 RET_LABEL344:(void)0;
2316 }
2317 }
2318 var346 = ((struct instance_kernel__Bool*)var343)->value; /* autounbox from nullable Object to Bool */;
2319 if (var346){
2320 {
2321 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
2322 var349 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
2323 if (unlikely(var349 == NULL)) {
2324 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
2325 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
2326 show_backtrace(1);
2327 }
2328 var347 = var349;
2329 RET_LABEL348:(void)0;
2330 }
2331 }
2332 {
2333 { /* Inline abstract_compiler#AbstractCompiler#count_type_test_resolved (var347) on <var347:AbstractCompiler(SeparateCompiler)> */
2334 var352 = var347->attrs[COLOR_abstract_compiler__AbstractCompiler___count_type_test_resolved].val; /* _count_type_test_resolved on <var347:AbstractCompiler(SeparateCompiler)> */
2335 if (unlikely(var352 == NULL)) {
2336 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _count_type_test_resolved");
2337 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 945);
2338 show_backtrace(1);
2339 }
2340 var350 = var352;
2341 RET_LABEL351:(void)0;
2342 }
2343 }
2344 var_353 = var350;
2345 var_354 = var_tag;
2346 {
2347 var355 = hash_collection__HashMap___91d_93d(var_353, var_354);
2348 }
2349 var356 = 1;
2350 {
2351 { /* Inline kernel#Int#+ (var355,var356) on <var355:nullable Object(Int)> */
2352 /* Covariant cast for argument 0 (i) <var356:Int> isa OTHER */
2353 /* <var356:Int> isa OTHER */
2354 var359 = 1; /* easy <var356:Int> isa OTHER*/
2355 if (unlikely(!var359)) {
2356 var_class_name362 = type_kernel__Int.name;
2357 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name362);
2358 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
2359 show_backtrace(1);
2360 }
2361 var363 = ((struct instance_kernel__Int*)var355)->value; /* autounbox from nullable Object to Int */;
2362 var364 = var363 + var356;
2363 var357 = var364;
2364 goto RET_LABEL358;
2365 RET_LABEL358:(void)0;
2366 }
2367 }
2368 {
2369 var365 = BOX_kernel__Int(var357); /* autobox from Int to nullable Object */
2370 hash_collection__HashMap___91d_93d_61d(var_353, var_354, var365); /* Direct call hash_collection#HashMap#[]= on <var_353:HashMap[String, Int]>*/
2371 }
2372 if (varonce366) {
2373 var367 = varonce366;
2374 } else {
2375 var368 = "count_type_test_resolved_";
2376 var369 = 25;
2377 var370 = string__NativeString__to_s_with_length(var368, var369);
2378 var367 = var370;
2379 varonce366 = var367;
2380 }
2381 if (varonce371) {
2382 var372 = varonce371;
2383 } else {
2384 var373 = "++;";
2385 var374 = 3;
2386 var375 = string__NativeString__to_s_with_length(var373, var374);
2387 var372 = var375;
2388 varonce371 = var372;
2389 }
2390 var376 = NEW_array__Array(&type_array__Arraykernel__Object);
2391 { /* var376 = array_instance Array[Object] */
2392 var377 = 3;
2393 var378 = NEW_array__NativeArray(var377, &type_array__NativeArraykernel__Object);
2394 ((struct instance_array__NativeArray*)var378)->values[0] = (val*) var367;
2395 ((struct instance_array__NativeArray*)var378)->values[1] = (val*) var_tag;
2396 ((struct instance_array__NativeArray*)var378)->values[2] = (val*) var372;
2397 {
2398 ((void (*)(val*, val*, long))(var376->class->vft[COLOR_array__Array__with_native]))(var376, var378, var377) /* with_native on <var376:Array[Object]>*/;
2399 }
2400 }
2401 {
2402 var379 = ((val* (*)(val*))(var376->class->vft[COLOR_string__Object__to_s]))(var376) /* to_s on <var376:Array[Object]>*/;
2403 }
2404 {
2405 abstract_compiler__AbstractCompilerVisitor__add(self, var379); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
2406 }
2407 } else {
2408 }
2409 } else {
2410 /* <var_mtype:MType> isa MVirtualType */
2411 cltype381 = type_model__MVirtualType.color;
2412 idtype382 = type_model__MVirtualType.id;
2413 if(cltype381 >= var_mtype->type->table_size) {
2414 var380 = 0;
2415 } else {
2416 var380 = var_mtype->type->type_table[cltype381] == idtype382;
2417 }
2418 if (var380){
2419 {
2420 { /* Inline abstract_compiler#AbstractCompilerVisitor#frame (self) on <self:SeparateErasureCompilerVisitor> */
2421 var385 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___frame].val; /* _frame on <self:SeparateErasureCompilerVisitor> */
2422 var383 = var385;
2423 RET_LABEL384:(void)0;
2424 }
2425 }
2426 if (var383 == NULL) {
2427 PRINT_ERROR("Runtime error: %s", "Receiver is null");
2428 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 569);
2429 show_backtrace(1);
2430 } else {
2431 { /* Inline abstract_compiler#Frame#arguments (var383) on <var383:nullable Frame> */
2432 if (unlikely(var383 == NULL)) {
2433 PRINT_ERROR("Runtime error: %s", "Receiver is null");
2434 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1688);
2435 show_backtrace(1);
2436 }
2437 var388 = var383->attrs[COLOR_abstract_compiler__Frame___arguments].val; /* _arguments on <var383:nullable Frame> */
2438 if (unlikely(var388 == NULL)) {
2439 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _arguments");
2440 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1688);
2441 show_backtrace(1);
2442 }
2443 var386 = var388;
2444 RET_LABEL387:(void)0;
2445 }
2446 }
2447 {
2448 var389 = abstract_collection__SequenceRead__first(var386);
2449 }
2450 var_recv = var389;
2451 {
2452 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_recv) on <var_recv:RuntimeVariable> */
2453 var392 = var_recv->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_recv:RuntimeVariable> */
2454 if (unlikely(var392 == NULL)) {
2455 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
2456 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
2457 show_backtrace(1);
2458 }
2459 var390 = var392;
2460 RET_LABEL391:(void)0;
2461 }
2462 }
2463 {
2464 var393 = ((val* (*)(val*))(var390->class->vft[COLOR_abstract_compiler__MType__ctype]))(var390) /* ctype on <var390:MType>*/;
2465 }
2466 if (varonce394) {
2467 var395 = varonce394;
2468 } else {
2469 var396 = "val*";
2470 var397 = 4;
2471 var398 = string__NativeString__to_s_with_length(var396, var397);
2472 var395 = var398;
2473 varonce394 = var395;
2474 }
2475 {
2476 var400 = string__FlatString___61d_61d(var393, var395);
2477 var399 = var400;
2478 }
2479 if (var399){
2480 if (varonce401) {
2481 var402 = varonce401;
2482 } else {
2483 var403 = "->class->";
2484 var404 = 9;
2485 var405 = string__NativeString__to_s_with_length(var403, var404);
2486 var402 = var405;
2487 varonce401 = var402;
2488 }
2489 var406 = NEW_array__Array(&type_array__Arraykernel__Object);
2490 { /* var406 = array_instance Array[Object] */
2491 var407 = 2;
2492 var408 = NEW_array__NativeArray(var407, &type_array__NativeArraykernel__Object);
2493 ((struct instance_array__NativeArray*)var408)->values[0] = (val*) var_recv;
2494 ((struct instance_array__NativeArray*)var408)->values[1] = (val*) var402;
2495 {
2496 ((void (*)(val*, val*, long))(var406->class->vft[COLOR_array__Array__with_native]))(var406, var408, var407) /* with_native on <var406:Array[Object]>*/;
2497 }
2498 }
2499 {
2500 var409 = ((val* (*)(val*))(var406->class->vft[COLOR_string__Object__to_s]))(var406) /* to_s on <var406:Array[Object]>*/;
2501 }
2502 var_recv_ptr = var409;
2503 } else {
2504 {
2505 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_recv) on <var_recv:RuntimeVariable> */
2506 var412 = var_recv->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_recv:RuntimeVariable> */
2507 if (unlikely(var412 == NULL)) {
2508 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
2509 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
2510 show_backtrace(1);
2511 }
2512 var410 = var412;
2513 RET_LABEL411:(void)0;
2514 }
2515 }
2516 /* <var410:MType> isa MClassType */
2517 cltype414 = type_model__MClassType.color;
2518 idtype415 = type_model__MClassType.id;
2519 if(cltype414 >= var410->type->table_size) {
2520 var413 = 0;
2521 } else {
2522 var413 = var410->type->type_table[cltype414] == idtype415;
2523 }
2524 if (unlikely(!var413)) {
2525 var_class_name416 = var410 == NULL ? "null" : var410->type->name;
2526 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name416);
2527 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 574);
2528 show_backtrace(1);
2529 }
2530 {
2531 { /* Inline model#MClassType#mclass (var410) on <var410:MType(MClassType)> */
2532 var419 = var410->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var410:MType(MClassType)> */
2533 if (unlikely(var419 == NULL)) {
2534 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
2535 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
2536 show_backtrace(1);
2537 }
2538 var417 = var419;
2539 RET_LABEL418:(void)0;
2540 }
2541 }
2542 var_mclass420 = var417;
2543 if (varonce421) {
2544 var422 = varonce421;
2545 } else {
2546 var423 = "class_";
2547 var424 = 6;
2548 var425 = string__NativeString__to_s_with_length(var423, var424);
2549 var422 = var425;
2550 varonce421 = var422;
2551 }
2552 {
2553 var426 = abstract_compiler__MClass__c_name(var_mclass420);
2554 }
2555 var427 = NEW_array__Array(&type_array__Arraykernel__Object);
2556 { /* var427 = array_instance Array[Object] */
2557 var428 = 2;
2558 var429 = NEW_array__NativeArray(var428, &type_array__NativeArraykernel__Object);
2559 ((struct instance_array__NativeArray*)var429)->values[0] = (val*) var422;
2560 ((struct instance_array__NativeArray*)var429)->values[1] = (val*) var426;
2561 {
2562 ((void (*)(val*, val*, long))(var427->class->vft[COLOR_array__Array__with_native]))(var427, var429, var428) /* with_native on <var427:Array[Object]>*/;
2563 }
2564 }
2565 {
2566 var430 = ((val* (*)(val*))(var427->class->vft[COLOR_string__Object__to_s]))(var427) /* to_s on <var427:Array[Object]>*/;
2567 }
2568 {
2569 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var430); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
2570 }
2571 if (varonce431) {
2572 var432 = varonce431;
2573 } else {
2574 var433 = "class_";
2575 var434 = 6;
2576 var435 = string__NativeString__to_s_with_length(var433, var434);
2577 var432 = var435;
2578 varonce431 = var432;
2579 }
2580 {
2581 var436 = abstract_compiler__MClass__c_name(var_mclass420);
2582 }
2583 if (varonce437) {
2584 var438 = varonce437;
2585 } else {
2586 var439 = ".";
2587 var440 = 1;
2588 var441 = string__NativeString__to_s_with_length(var439, var440);
2589 var438 = var441;
2590 varonce437 = var438;
2591 }
2592 var442 = NEW_array__Array(&type_array__Arraykernel__Object);
2593 { /* var442 = array_instance Array[Object] */
2594 var443 = 3;
2595 var444 = NEW_array__NativeArray(var443, &type_array__NativeArraykernel__Object);
2596 ((struct instance_array__NativeArray*)var444)->values[0] = (val*) var432;
2597 ((struct instance_array__NativeArray*)var444)->values[1] = (val*) var436;
2598 ((struct instance_array__NativeArray*)var444)->values[2] = (val*) var438;
2599 {
2600 ((void (*)(val*, val*, long))(var442->class->vft[COLOR_array__Array__with_native]))(var442, var444, var443) /* with_native on <var442:Array[Object]>*/;
2601 }
2602 }
2603 {
2604 var445 = ((val* (*)(val*))(var442->class->vft[COLOR_string__Object__to_s]))(var442) /* to_s on <var442:Array[Object]>*/;
2605 }
2606 var_recv_ptr = var445;
2607 }
2608 if (varonce446) {
2609 var447 = varonce446;
2610 } else {
2611 var448 = "entry";
2612 var449 = 5;
2613 var450 = string__NativeString__to_s_with_length(var448, var449);
2614 var447 = var450;
2615 varonce446 = var447;
2616 }
2617 {
2618 var451 = abstract_compiler__AbstractCompilerVisitor__get_name(self, var447);
2619 }
2620 var_entry = var451;
2621 if (varonce452) {
2622 var453 = varonce452;
2623 } else {
2624 var454 = "struct vts_entry ";
2625 var455 = 17;
2626 var456 = string__NativeString__to_s_with_length(var454, var455);
2627 var453 = var456;
2628 varonce452 = var453;
2629 }
2630 if (varonce457) {
2631 var458 = varonce457;
2632 } else {
2633 var459 = ";";
2634 var460 = 1;
2635 var461 = string__NativeString__to_s_with_length(var459, var460);
2636 var458 = var461;
2637 varonce457 = var458;
2638 }
2639 var462 = NEW_array__Array(&type_array__Arraykernel__Object);
2640 { /* var462 = array_instance Array[Object] */
2641 var463 = 3;
2642 var464 = NEW_array__NativeArray(var463, &type_array__NativeArraykernel__Object);
2643 ((struct instance_array__NativeArray*)var464)->values[0] = (val*) var453;
2644 ((struct instance_array__NativeArray*)var464)->values[1] = (val*) var_entry;
2645 ((struct instance_array__NativeArray*)var464)->values[2] = (val*) var458;
2646 {
2647 ((void (*)(val*, val*, long))(var462->class->vft[COLOR_array__Array__with_native]))(var462, var464, var463) /* with_native on <var462:Array[Object]>*/;
2648 }
2649 }
2650 {
2651 var465 = ((val* (*)(val*))(var462->class->vft[COLOR_string__Object__to_s]))(var462) /* to_s on <var462:Array[Object]>*/;
2652 }
2653 {
2654 abstract_compiler__AbstractCompilerVisitor__add(self, var465); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
2655 }
2656 {
2657 { /* Inline model#MVirtualType#mproperty (var_mtype) on <var_mtype:MType(MVirtualType)> */
2658 var468 = var_mtype->attrs[COLOR_model__MVirtualType___mproperty].val; /* _mproperty on <var_mtype:MType(MVirtualType)> */
2659 if (unlikely(var468 == NULL)) {
2660 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
2661 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1152);
2662 show_backtrace(1);
2663 }
2664 var466 = var468;
2665 RET_LABEL467:(void)0;
2666 }
2667 }
2668 {
2669 var469 = separate_compiler__MProperty__const_color(var466);
2670 }
2671 {
2672 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var469); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
2673 }
2674 if (varonce470) {
2675 var471 = varonce470;
2676 } else {
2677 var472 = " = ";
2678 var473 = 3;
2679 var474 = string__NativeString__to_s_with_length(var472, var473);
2680 var471 = var474;
2681 varonce470 = var471;
2682 }
2683 if (varonce475) {
2684 var476 = varonce475;
2685 } else {
2686 var477 = "vts_table->vts[";
2687 var478 = 15;
2688 var479 = string__NativeString__to_s_with_length(var477, var478);
2689 var476 = var479;
2690 varonce475 = var476;
2691 }
2692 {
2693 { /* Inline model#MVirtualType#mproperty (var_mtype) on <var_mtype:MType(MVirtualType)> */
2694 var482 = var_mtype->attrs[COLOR_model__MVirtualType___mproperty].val; /* _mproperty on <var_mtype:MType(MVirtualType)> */
2695 if (unlikely(var482 == NULL)) {
2696 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
2697 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1152);
2698 show_backtrace(1);
2699 }
2700 var480 = var482;
2701 RET_LABEL481:(void)0;
2702 }
2703 }
2704 {
2705 var483 = separate_compiler__MProperty__const_color(var480);
2706 }
2707 if (varonce484) {
2708 var485 = varonce484;
2709 } else {
2710 var486 = "];";
2711 var487 = 2;
2712 var488 = string__NativeString__to_s_with_length(var486, var487);
2713 var485 = var488;
2714 varonce484 = var485;
2715 }
2716 var489 = NEW_array__Array(&type_array__Arraykernel__Object);
2717 { /* var489 = array_instance Array[Object] */
2718 var490 = 6;
2719 var491 = NEW_array__NativeArray(var490, &type_array__NativeArraykernel__Object);
2720 ((struct instance_array__NativeArray*)var491)->values[0] = (val*) var_entry;
2721 ((struct instance_array__NativeArray*)var491)->values[1] = (val*) var471;
2722 ((struct instance_array__NativeArray*)var491)->values[2] = (val*) var_recv_ptr;
2723 ((struct instance_array__NativeArray*)var491)->values[3] = (val*) var476;
2724 ((struct instance_array__NativeArray*)var491)->values[4] = (val*) var483;
2725 ((struct instance_array__NativeArray*)var491)->values[5] = (val*) var485;
2726 {
2727 ((void (*)(val*, val*, long))(var489->class->vft[COLOR_array__Array__with_native]))(var489, var491, var490) /* with_native on <var489:Array[Object]>*/;
2728 }
2729 }
2730 {
2731 var492 = ((val* (*)(val*))(var489->class->vft[COLOR_string__Object__to_s]))(var489) /* to_s on <var489:Array[Object]>*/;
2732 }
2733 {
2734 abstract_compiler__AbstractCompilerVisitor__add(self, var492); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
2735 }
2736 if (varonce493) {
2737 var494 = varonce493;
2738 } else {
2739 var495 = " = ";
2740 var496 = 3;
2741 var497 = string__NativeString__to_s_with_length(var495, var496);
2742 var494 = var497;
2743 varonce493 = var494;
2744 }
2745 if (varonce498) {
2746 var499 = varonce498;
2747 } else {
2748 var500 = ".class->color;";
2749 var501 = 14;
2750 var502 = string__NativeString__to_s_with_length(var500, var501);
2751 var499 = var502;
2752 varonce498 = var499;
2753 }
2754 var503 = NEW_array__Array(&type_array__Arraykernel__Object);
2755 { /* var503 = array_instance Array[Object] */
2756 var504 = 4;
2757 var505 = NEW_array__NativeArray(var504, &type_array__NativeArraykernel__Object);
2758 ((struct instance_array__NativeArray*)var505)->values[0] = (val*) var_cltype;
2759 ((struct instance_array__NativeArray*)var505)->values[1] = (val*) var494;
2760 ((struct instance_array__NativeArray*)var505)->values[2] = (val*) var_entry;
2761 ((struct instance_array__NativeArray*)var505)->values[3] = (val*) var499;
2762 {
2763 ((void (*)(val*, val*, long))(var503->class->vft[COLOR_array__Array__with_native]))(var503, var505, var504) /* with_native on <var503:Array[Object]>*/;
2764 }
2765 }
2766 {
2767 var506 = ((val* (*)(val*))(var503->class->vft[COLOR_string__Object__to_s]))(var503) /* to_s on <var503:Array[Object]>*/;
2768 }
2769 {
2770 abstract_compiler__AbstractCompilerVisitor__add(self, var506); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
2771 }
2772 if (varonce507) {
2773 var508 = varonce507;
2774 } else {
2775 var509 = " = ";
2776 var510 = 3;
2777 var511 = string__NativeString__to_s_with_length(var509, var510);
2778 var508 = var511;
2779 varonce507 = var508;
2780 }
2781 if (varonce512) {
2782 var513 = varonce512;
2783 } else {
2784 var514 = ".class->id;";
2785 var515 = 11;
2786 var516 = string__NativeString__to_s_with_length(var514, var515);
2787 var513 = var516;
2788 varonce512 = var513;
2789 }
2790 var517 = NEW_array__Array(&type_array__Arraykernel__Object);
2791 { /* var517 = array_instance Array[Object] */
2792 var518 = 4;
2793 var519 = NEW_array__NativeArray(var518, &type_array__NativeArraykernel__Object);
2794 ((struct instance_array__NativeArray*)var519)->values[0] = (val*) var_idtype;
2795 ((struct instance_array__NativeArray*)var519)->values[1] = (val*) var508;
2796 ((struct instance_array__NativeArray*)var519)->values[2] = (val*) var_entry;
2797 ((struct instance_array__NativeArray*)var519)->values[3] = (val*) var513;
2798 {
2799 ((void (*)(val*, val*, long))(var517->class->vft[COLOR_array__Array__with_native]))(var517, var519, var518) /* with_native on <var517:Array[Object]>*/;
2800 }
2801 }
2802 {
2803 var520 = ((val* (*)(val*))(var517->class->vft[COLOR_string__Object__to_s]))(var517) /* to_s on <var517:Array[Object]>*/;
2804 }
2805 {
2806 abstract_compiler__AbstractCompilerVisitor__add(self, var520); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
2807 }
2808 var_522 = var_maybe_null;
2809 if (var_maybe_null){
2810 if (varonce523) {
2811 var524 = varonce523;
2812 } else {
2813 var525 = "0";
2814 var526 = 1;
2815 var527 = string__NativeString__to_s_with_length(var525, var526);
2816 var524 = var527;
2817 varonce523 = var524;
2818 }
2819 {
2820 var529 = string__FlatString___61d_61d(var_accept_null, var524);
2821 var528 = var529;
2822 }
2823 var521 = var528;
2824 } else {
2825 var521 = var_522;
2826 }
2827 if (var521){
2828 if (varonce530) {
2829 var531 = varonce530;
2830 } else {
2831 var532 = "is_nullable";
2832 var533 = 11;
2833 var534 = string__NativeString__to_s_with_length(var532, var533);
2834 var531 = var534;
2835 varonce530 = var531;
2836 }
2837 {
2838 var535 = abstract_compiler__AbstractCompilerVisitor__get_name(self, var531);
2839 }
2840 var_is_nullable = var535;
2841 if (varonce536) {
2842 var537 = varonce536;
2843 } else {
2844 var538 = "short int ";
2845 var539 = 10;
2846 var540 = string__NativeString__to_s_with_length(var538, var539);
2847 var537 = var540;
2848 varonce536 = var537;
2849 }
2850 if (varonce541) {
2851 var542 = varonce541;
2852 } else {
2853 var543 = ";";
2854 var544 = 1;
2855 var545 = string__NativeString__to_s_with_length(var543, var544);
2856 var542 = var545;
2857 varonce541 = var542;
2858 }
2859 var546 = NEW_array__Array(&type_array__Arraykernel__Object);
2860 { /* var546 = array_instance Array[Object] */
2861 var547 = 3;
2862 var548 = NEW_array__NativeArray(var547, &type_array__NativeArraykernel__Object);
2863 ((struct instance_array__NativeArray*)var548)->values[0] = (val*) var537;
2864 ((struct instance_array__NativeArray*)var548)->values[1] = (val*) var_is_nullable;
2865 ((struct instance_array__NativeArray*)var548)->values[2] = (val*) var542;
2866 {
2867 ((void (*)(val*, val*, long))(var546->class->vft[COLOR_array__Array__with_native]))(var546, var548, var547) /* with_native on <var546:Array[Object]>*/;
2868 }
2869 }
2870 {
2871 var549 = ((val* (*)(val*))(var546->class->vft[COLOR_string__Object__to_s]))(var546) /* to_s on <var546:Array[Object]>*/;
2872 }
2873 {
2874 abstract_compiler__AbstractCompilerVisitor__add_decl(self, var549); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <self:SeparateErasureCompilerVisitor>*/
2875 }
2876 if (varonce550) {
2877 var551 = varonce550;
2878 } else {
2879 var552 = " = ";
2880 var553 = 3;
2881 var554 = string__NativeString__to_s_with_length(var552, var553);
2882 var551 = var554;
2883 varonce550 = var551;
2884 }
2885 if (varonce555) {
2886 var556 = varonce555;
2887 } else {
2888 var557 = ".is_nullable;";
2889 var558 = 13;
2890 var559 = string__NativeString__to_s_with_length(var557, var558);
2891 var556 = var559;
2892 varonce555 = var556;
2893 }
2894 var560 = NEW_array__Array(&type_array__Arraykernel__Object);
2895 { /* var560 = array_instance Array[Object] */
2896 var561 = 4;
2897 var562 = NEW_array__NativeArray(var561, &type_array__NativeArraykernel__Object);
2898 ((struct instance_array__NativeArray*)var562)->values[0] = (val*) var_is_nullable;
2899 ((struct instance_array__NativeArray*)var562)->values[1] = (val*) var551;
2900 ((struct instance_array__NativeArray*)var562)->values[2] = (val*) var_entry;
2901 ((struct instance_array__NativeArray*)var562)->values[3] = (val*) var556;
2902 {
2903 ((void (*)(val*, val*, long))(var560->class->vft[COLOR_array__Array__with_native]))(var560, var562, var561) /* with_native on <var560:Array[Object]>*/;
2904 }
2905 }
2906 {
2907 var563 = ((val* (*)(val*))(var560->class->vft[COLOR_string__Object__to_s]))(var560) /* to_s on <var560:Array[Object]>*/;
2908 }
2909 {
2910 abstract_compiler__AbstractCompilerVisitor__add(self, var563); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
2911 }
2912 {
2913 var564 = string__String__to_s(var_is_nullable);
2914 }
2915 var_accept_null = var564;
2916 } else {
2917 }
2918 {
2919 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
2920 var567 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
2921 if (unlikely(var567 == NULL)) {
2922 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
2923 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
2924 show_backtrace(1);
2925 }
2926 var565 = var567;
2927 RET_LABEL566:(void)0;
2928 }
2929 }
2930 {
2931 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (var565) on <var565:AbstractCompiler(SeparateCompiler)> */
2932 var570 = var565->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <var565:AbstractCompiler(SeparateCompiler)> */
2933 if (unlikely(var570 == NULL)) {
2934 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
2935 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
2936 show_backtrace(1);
2937 }
2938 var568 = var570;
2939 RET_LABEL569:(void)0;
2940 }
2941 }
2942 {
2943 { /* Inline modelbuilder#ModelBuilder#toolcontext (var568) on <var568:ModelBuilder> */
2944 var573 = var568->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var568:ModelBuilder> */
2945 if (unlikely(var573 == NULL)) {
2946 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
2947 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
2948 show_backtrace(1);
2949 }
2950 var571 = var573;
2951 RET_LABEL572:(void)0;
2952 }
2953 }
2954 {
2955 { /* Inline abstract_compiler#ToolContext#opt_typing_test_metrics (var571) on <var571:ToolContext> */
2956 var576 = var571->attrs[COLOR_abstract_compiler__ToolContext___opt_typing_test_metrics].val; /* _opt_typing_test_metrics on <var571:ToolContext> */
2957 if (unlikely(var576 == NULL)) {
2958 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_typing_test_metrics");
2959 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 61);
2960 show_backtrace(1);
2961 }
2962 var574 = var576;
2963 RET_LABEL575:(void)0;
2964 }
2965 }
2966 {
2967 { /* Inline opts#Option#value (var574) on <var574:OptionBool> */
2968 var579 = var574->attrs[COLOR_opts__Option___value].val; /* _value on <var574:OptionBool> */
2969 var577 = var579;
2970 RET_LABEL578:(void)0;
2971 }
2972 }
2973 var580 = ((struct instance_kernel__Bool*)var577)->value; /* autounbox from nullable Object to Bool */;
2974 if (var580){
2975 {
2976 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
2977 var583 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
2978 if (unlikely(var583 == NULL)) {
2979 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
2980 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
2981 show_backtrace(1);
2982 }
2983 var581 = var583;
2984 RET_LABEL582:(void)0;
2985 }
2986 }
2987 {
2988 { /* Inline abstract_compiler#AbstractCompiler#count_type_test_unresolved (var581) on <var581:AbstractCompiler(SeparateCompiler)> */
2989 var586 = var581->attrs[COLOR_abstract_compiler__AbstractCompiler___count_type_test_unresolved].val; /* _count_type_test_unresolved on <var581:AbstractCompiler(SeparateCompiler)> */
2990 if (unlikely(var586 == NULL)) {
2991 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _count_type_test_unresolved");
2992 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 946);
2993 show_backtrace(1);
2994 }
2995 var584 = var586;
2996 RET_LABEL585:(void)0;
2997 }
2998 }
2999 var_587 = var584;
3000 var_588 = var_tag;
3001 {
3002 var589 = hash_collection__HashMap___91d_93d(var_587, var_588);
3003 }
3004 var590 = 1;
3005 {
3006 { /* Inline kernel#Int#+ (var589,var590) on <var589:nullable Object(Int)> */
3007 /* Covariant cast for argument 0 (i) <var590:Int> isa OTHER */
3008 /* <var590:Int> isa OTHER */
3009 var593 = 1; /* easy <var590:Int> isa OTHER*/
3010 if (unlikely(!var593)) {
3011 var_class_name596 = type_kernel__Int.name;
3012 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name596);
3013 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
3014 show_backtrace(1);
3015 }
3016 var597 = ((struct instance_kernel__Int*)var589)->value; /* autounbox from nullable Object to Int */;
3017 var598 = var597 + var590;
3018 var591 = var598;
3019 goto RET_LABEL592;
3020 RET_LABEL592:(void)0;
3021 }
3022 }
3023 {
3024 var599 = BOX_kernel__Int(var591); /* autobox from Int to nullable Object */
3025 hash_collection__HashMap___91d_93d_61d(var_587, var_588, var599); /* Direct call hash_collection#HashMap#[]= on <var_587:HashMap[String, Int]>*/
3026 }
3027 if (varonce600) {
3028 var601 = varonce600;
3029 } else {
3030 var602 = "count_type_test_unresolved_";
3031 var603 = 27;
3032 var604 = string__NativeString__to_s_with_length(var602, var603);
3033 var601 = var604;
3034 varonce600 = var601;
3035 }
3036 if (varonce605) {
3037 var606 = varonce605;
3038 } else {
3039 var607 = "++;";
3040 var608 = 3;
3041 var609 = string__NativeString__to_s_with_length(var607, var608);
3042 var606 = var609;
3043 varonce605 = var606;
3044 }
3045 var610 = NEW_array__Array(&type_array__Arraykernel__Object);
3046 { /* var610 = array_instance Array[Object] */
3047 var611 = 3;
3048 var612 = NEW_array__NativeArray(var611, &type_array__NativeArraykernel__Object);
3049 ((struct instance_array__NativeArray*)var612)->values[0] = (val*) var601;
3050 ((struct instance_array__NativeArray*)var612)->values[1] = (val*) var_tag;
3051 ((struct instance_array__NativeArray*)var612)->values[2] = (val*) var606;
3052 {
3053 ((void (*)(val*, val*, long))(var610->class->vft[COLOR_array__Array__with_native]))(var610, var612, var611) /* with_native on <var610:Array[Object]>*/;
3054 }
3055 }
3056 {
3057 var613 = ((val* (*)(val*))(var610->class->vft[COLOR_string__Object__to_s]))(var610) /* to_s on <var610:Array[Object]>*/;
3058 }
3059 {
3060 abstract_compiler__AbstractCompilerVisitor__add(self, var613); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3061 }
3062 } else {
3063 }
3064 } else {
3065 if (varonce614) {
3066 var615 = varonce614;
3067 } else {
3068 var616 = "type_test(";
3069 var617 = 10;
3070 var618 = string__NativeString__to_s_with_length(var616, var617);
3071 var615 = var618;
3072 varonce614 = var615;
3073 }
3074 {
3075 var619 = abstract_compiler__RuntimeVariable__inspect(var_value);
3076 }
3077 if (varonce620) {
3078 var621 = varonce620;
3079 } else {
3080 var622 = ", ";
3081 var623 = 2;
3082 var624 = string__NativeString__to_s_with_length(var622, var623);
3083 var621 = var624;
3084 varonce620 = var621;
3085 }
3086 if (varonce625) {
3087 var626 = varonce625;
3088 } else {
3089 var627 = ")";
3090 var628 = 1;
3091 var629 = string__NativeString__to_s_with_length(var627, var628);
3092 var626 = var629;
3093 varonce625 = var626;
3094 }
3095 var630 = NEW_array__Array(&type_array__Arraykernel__Object);
3096 { /* var630 = array_instance Array[Object] */
3097 var631 = 5;
3098 var632 = NEW_array__NativeArray(var631, &type_array__NativeArraykernel__Object);
3099 ((struct instance_array__NativeArray*)var632)->values[0] = (val*) var615;
3100 ((struct instance_array__NativeArray*)var632)->values[1] = (val*) var619;
3101 ((struct instance_array__NativeArray*)var632)->values[2] = (val*) var621;
3102 ((struct instance_array__NativeArray*)var632)->values[3] = (val*) var_mtype;
3103 ((struct instance_array__NativeArray*)var632)->values[4] = (val*) var626;
3104 {
3105 ((void (*)(val*, val*, long))(var630->class->vft[COLOR_array__Array__with_native]))(var630, var632, var631) /* with_native on <var630:Array[Object]>*/;
3106 }
3107 }
3108 {
3109 var633 = ((val* (*)(val*))(var630->class->vft[COLOR_string__Object__to_s]))(var630) /* to_s on <var630:Array[Object]>*/;
3110 }
3111 {
3112 abstract_compiler__AbstractCompilerVisitor__debug(self, var633); /* Direct call abstract_compiler#AbstractCompilerVisitor#debug on <self:SeparateErasureCompilerVisitor>*/
3113 }
3114 PRINT_ERROR("Runtime error: %s", "Aborted");
3115 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 596);
3116 show_backtrace(1);
3117 }
3118 }
3119 if (var_maybe_null){
3120 if (varonce634) {
3121 var635 = varonce634;
3122 } else {
3123 var636 = "if(";
3124 var637 = 3;
3125 var638 = string__NativeString__to_s_with_length(var636, var637);
3126 var635 = var638;
3127 varonce634 = var635;
3128 }
3129 if (varonce639) {
3130 var640 = varonce639;
3131 } else {
3132 var641 = " == NULL) {";
3133 var642 = 11;
3134 var643 = string__NativeString__to_s_with_length(var641, var642);
3135 var640 = var643;
3136 varonce639 = var640;
3137 }
3138 var644 = NEW_array__Array(&type_array__Arraykernel__Object);
3139 { /* var644 = array_instance Array[Object] */
3140 var645 = 3;
3141 var646 = NEW_array__NativeArray(var645, &type_array__NativeArraykernel__Object);
3142 ((struct instance_array__NativeArray*)var646)->values[0] = (val*) var635;
3143 ((struct instance_array__NativeArray*)var646)->values[1] = (val*) var_value;
3144 ((struct instance_array__NativeArray*)var646)->values[2] = (val*) var640;
3145 {
3146 ((void (*)(val*, val*, long))(var644->class->vft[COLOR_array__Array__with_native]))(var644, var646, var645) /* with_native on <var644:Array[Object]>*/;
3147 }
3148 }
3149 {
3150 var647 = ((val* (*)(val*))(var644->class->vft[COLOR_string__Object__to_s]))(var644) /* to_s on <var644:Array[Object]>*/;
3151 }
3152 {
3153 abstract_compiler__AbstractCompilerVisitor__add(self, var647); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3154 }
3155 if (varonce648) {
3156 var649 = varonce648;
3157 } else {
3158 var650 = " = ";
3159 var651 = 3;
3160 var652 = string__NativeString__to_s_with_length(var650, var651);
3161 var649 = var652;
3162 varonce648 = var649;
3163 }
3164 if (varonce653) {
3165 var654 = varonce653;
3166 } else {
3167 var655 = ";";
3168 var656 = 1;
3169 var657 = string__NativeString__to_s_with_length(var655, var656);
3170 var654 = var657;
3171 varonce653 = var654;
3172 }
3173 var658 = NEW_array__Array(&type_array__Arraykernel__Object);
3174 { /* var658 = array_instance Array[Object] */
3175 var659 = 4;
3176 var660 = NEW_array__NativeArray(var659, &type_array__NativeArraykernel__Object);
3177 ((struct instance_array__NativeArray*)var660)->values[0] = (val*) var_res;
3178 ((struct instance_array__NativeArray*)var660)->values[1] = (val*) var649;
3179 ((struct instance_array__NativeArray*)var660)->values[2] = (val*) var_accept_null;
3180 ((struct instance_array__NativeArray*)var660)->values[3] = (val*) var654;
3181 {
3182 ((void (*)(val*, val*, long))(var658->class->vft[COLOR_array__Array__with_native]))(var658, var660, var659) /* with_native on <var658:Array[Object]>*/;
3183 }
3184 }
3185 {
3186 var661 = ((val* (*)(val*))(var658->class->vft[COLOR_string__Object__to_s]))(var658) /* to_s on <var658:Array[Object]>*/;
3187 }
3188 {
3189 abstract_compiler__AbstractCompilerVisitor__add(self, var661); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3190 }
3191 if (varonce662) {
3192 var663 = varonce662;
3193 } else {
3194 var664 = "} else {";
3195 var665 = 8;
3196 var666 = string__NativeString__to_s_with_length(var664, var665);
3197 var663 = var666;
3198 varonce662 = var663;
3199 }
3200 {
3201 abstract_compiler__AbstractCompilerVisitor__add(self, var663); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3202 }
3203 } else {
3204 }
3205 if (varonce667) {
3206 var668 = varonce667;
3207 } else {
3208 var669 = "if(";
3209 var670 = 3;
3210 var671 = string__NativeString__to_s_with_length(var669, var670);
3211 var668 = var671;
3212 varonce667 = var668;
3213 }
3214 if (varonce672) {
3215 var673 = varonce672;
3216 } else {
3217 var674 = " >= ";
3218 var675 = 4;
3219 var676 = string__NativeString__to_s_with_length(var674, var675);
3220 var673 = var676;
3221 varonce672 = var673;
3222 }
3223 if (varonce677) {
3224 var678 = varonce677;
3225 } else {
3226 var679 = "type_table->size) {";
3227 var680 = 19;
3228 var681 = string__NativeString__to_s_with_length(var679, var680);
3229 var678 = var681;
3230 varonce677 = var678;
3231 }
3232 var682 = NEW_array__Array(&type_array__Arraykernel__Object);
3233 { /* var682 = array_instance Array[Object] */
3234 var683 = 5;
3235 var684 = NEW_array__NativeArray(var683, &type_array__NativeArraykernel__Object);
3236 ((struct instance_array__NativeArray*)var684)->values[0] = (val*) var668;
3237 ((struct instance_array__NativeArray*)var684)->values[1] = (val*) var_cltype;
3238 ((struct instance_array__NativeArray*)var684)->values[2] = (val*) var673;
3239 ((struct instance_array__NativeArray*)var684)->values[3] = (val*) var_class_ptr;
3240 ((struct instance_array__NativeArray*)var684)->values[4] = (val*) var678;
3241 {
3242 ((void (*)(val*, val*, long))(var682->class->vft[COLOR_array__Array__with_native]))(var682, var684, var683) /* with_native on <var682:Array[Object]>*/;
3243 }
3244 }
3245 {
3246 var685 = ((val* (*)(val*))(var682->class->vft[COLOR_string__Object__to_s]))(var682) /* to_s on <var682:Array[Object]>*/;
3247 }
3248 {
3249 abstract_compiler__AbstractCompilerVisitor__add(self, var685); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3250 }
3251 if (varonce686) {
3252 var687 = varonce686;
3253 } else {
3254 var688 = " = 0;";
3255 var689 = 5;
3256 var690 = string__NativeString__to_s_with_length(var688, var689);
3257 var687 = var690;
3258 varonce686 = var687;
3259 }
3260 var691 = NEW_array__Array(&type_array__Arraykernel__Object);
3261 { /* var691 = array_instance Array[Object] */
3262 var692 = 2;
3263 var693 = NEW_array__NativeArray(var692, &type_array__NativeArraykernel__Object);
3264 ((struct instance_array__NativeArray*)var693)->values[0] = (val*) var_res;
3265 ((struct instance_array__NativeArray*)var693)->values[1] = (val*) var687;
3266 {
3267 ((void (*)(val*, val*, long))(var691->class->vft[COLOR_array__Array__with_native]))(var691, var693, var692) /* with_native on <var691:Array[Object]>*/;
3268 }
3269 }
3270 {
3271 var694 = ((val* (*)(val*))(var691->class->vft[COLOR_string__Object__to_s]))(var691) /* to_s on <var691:Array[Object]>*/;
3272 }
3273 {
3274 abstract_compiler__AbstractCompilerVisitor__add(self, var694); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3275 }
3276 if (varonce695) {
3277 var696 = varonce695;
3278 } else {
3279 var697 = "} else {";
3280 var698 = 8;
3281 var699 = string__NativeString__to_s_with_length(var697, var698);
3282 var696 = var699;
3283 varonce695 = var696;
3284 }
3285 {
3286 abstract_compiler__AbstractCompilerVisitor__add(self, var696); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3287 }
3288 if (varonce700) {
3289 var701 = varonce700;
3290 } else {
3291 var702 = " = ";
3292 var703 = 3;
3293 var704 = string__NativeString__to_s_with_length(var702, var703);
3294 var701 = var704;
3295 varonce700 = var701;
3296 }
3297 if (varonce705) {
3298 var706 = varonce705;
3299 } else {
3300 var707 = "type_table->table[";
3301 var708 = 18;
3302 var709 = string__NativeString__to_s_with_length(var707, var708);
3303 var706 = var709;
3304 varonce705 = var706;
3305 }
3306 if (varonce710) {
3307 var711 = varonce710;
3308 } else {
3309 var712 = "] == ";
3310 var713 = 5;
3311 var714 = string__NativeString__to_s_with_length(var712, var713);
3312 var711 = var714;
3313 varonce710 = var711;
3314 }
3315 if (varonce715) {
3316 var716 = varonce715;
3317 } else {
3318 var717 = ";";
3319 var718 = 1;
3320 var719 = string__NativeString__to_s_with_length(var717, var718);
3321 var716 = var719;
3322 varonce715 = var716;
3323 }
3324 var720 = NEW_array__Array(&type_array__Arraykernel__Object);
3325 { /* var720 = array_instance Array[Object] */
3326 var721 = 8;
3327 var722 = NEW_array__NativeArray(var721, &type_array__NativeArraykernel__Object);
3328 ((struct instance_array__NativeArray*)var722)->values[0] = (val*) var_res;
3329 ((struct instance_array__NativeArray*)var722)->values[1] = (val*) var701;
3330 ((struct instance_array__NativeArray*)var722)->values[2] = (val*) var_class_ptr;
3331 ((struct instance_array__NativeArray*)var722)->values[3] = (val*) var706;
3332 ((struct instance_array__NativeArray*)var722)->values[4] = (val*) var_cltype;
3333 ((struct instance_array__NativeArray*)var722)->values[5] = (val*) var711;
3334 ((struct instance_array__NativeArray*)var722)->values[6] = (val*) var_idtype;
3335 ((struct instance_array__NativeArray*)var722)->values[7] = (val*) var716;
3336 {
3337 ((void (*)(val*, val*, long))(var720->class->vft[COLOR_array__Array__with_native]))(var720, var722, var721) /* with_native on <var720:Array[Object]>*/;
3338 }
3339 }
3340 {
3341 var723 = ((val* (*)(val*))(var720->class->vft[COLOR_string__Object__to_s]))(var720) /* to_s on <var720:Array[Object]>*/;
3342 }
3343 {
3344 abstract_compiler__AbstractCompilerVisitor__add(self, var723); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3345 }
3346 if (varonce724) {
3347 var725 = varonce724;
3348 } else {
3349 var726 = "}";
3350 var727 = 1;
3351 var728 = string__NativeString__to_s_with_length(var726, var727);
3352 var725 = var728;
3353 varonce724 = var725;
3354 }
3355 {
3356 abstract_compiler__AbstractCompilerVisitor__add(self, var725); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3357 }
3358 if (var_maybe_null){
3359 if (varonce729) {
3360 var730 = varonce729;
3361 } else {
3362 var731 = "}";
3363 var732 = 1;
3364 var733 = string__NativeString__to_s_with_length(var731, var732);
3365 var730 = var733;
3366 varonce729 = var730;
3367 }
3368 {
3369 abstract_compiler__AbstractCompilerVisitor__add(self, var730); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3370 }
3371 } else {
3372 }
3373 var = var_res;
3374 goto RET_LABEL;
3375 RET_LABEL:;
3376 return var;
3377 }
3378 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: Object, RuntimeVariable, MType, String): RuntimeVariable */
3379 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
3380 val* var /* : RuntimeVariable */;
3381 val* var1 /* : RuntimeVariable */;
3382 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(self, p0, p1, p2);
3383 var = var1;
3384 RET_LABEL:;
3385 return var;
3386 }
3387 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#unbox_extern for (self: SeparateErasureCompilerVisitor, RuntimeVariable, MType): RuntimeVariable */
3388 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__unbox_extern(val* self, val* p0, val* p1) {
3389 val* var /* : RuntimeVariable */;
3390 val* var_value /* var value: RuntimeVariable */;
3391 val* var_mtype /* var mtype: MType */;
3392 short int var1 /* : Bool */;
3393 short int var2 /* : Bool */;
3394 short int var3 /* : Bool */;
3395 int cltype;
3396 int idtype;
3397 short int var_ /* var : Bool */;
3398 val* var4 /* : MClass */;
3399 val* var6 /* : MClass */;
3400 val* var7 /* : MClassKind */;
3401 val* var9 /* : MClassKind */;
3402 val* var10 /* : MClassKind */;
3403 short int var11 /* : Bool */;
3404 short int var12 /* : Bool */;
3405 val* var_other /* var other: nullable Object */;
3406 short int var14 /* : Bool */;
3407 short int var16 /* : Bool */;
3408 short int var_17 /* var : Bool */;
3409 val* var18 /* : MClass */;
3410 val* var20 /* : MClass */;
3411 val* var21 /* : String */;
3412 val* var23 /* : String */;
3413 static val* varonce;
3414 val* var24 /* : String */;
3415 char* var25 /* : NativeString */;
3416 long var26 /* : Int */;
3417 val* var27 /* : FlatString */;
3418 short int var28 /* : Bool */;
3419 short int var29 /* : Bool */;
3420 val* var_other31 /* var other: nullable Object */;
3421 short int var32 /* : Bool */;
3422 short int var33 /* : Bool */;
3423 short int var34 /* : Bool */;
3424 val* var35 /* : AbstractCompiler */;
3425 val* var37 /* : AbstractCompiler */;
3426 val* var38 /* : MModule */;
3427 val* var40 /* : MModule */;
3428 val* var41 /* : MClassType */;
3429 short int var43 /* : Bool */;
3430 val* var44 /* : MClassType */;
3431 static val* varonce45;
3432 val* var46 /* : String */;
3433 char* var47 /* : NativeString */;
3434 long var48 /* : Int */;
3435 val* var49 /* : FlatString */;
3436 val* var50 /* : MClass */;
3437 val* var51 /* : MClassType */;
3438 val* var53 /* : MClassType */;
3439 val* var_pointer_type /* var pointer_type: MClassType */;
3440 val* var54 /* : RuntimeVariable */;
3441 val* var_res /* var res: RuntimeVariable */;
3442 static val* varonce55;
3443 val* var56 /* : String */;
3444 char* var57 /* : NativeString */;
3445 long var58 /* : Int */;
3446 val* var59 /* : FlatString */;
3447 val* var60 /* : String */;
3448 static val* varonce61;
3449 val* var62 /* : String */;
3450 char* var63 /* : NativeString */;
3451 long var64 /* : Int */;
3452 val* var65 /* : FlatString */;
3453 static val* varonce66;
3454 val* var67 /* : String */;
3455 char* var68 /* : NativeString */;
3456 long var69 /* : Int */;
3457 val* var70 /* : FlatString */;
3458 val* var71 /* : MType */;
3459 val* var73 /* : MType */;
3460 static val* varonce74;
3461 val* var75 /* : String */;
3462 char* var76 /* : NativeString */;
3463 long var77 /* : Int */;
3464 val* var78 /* : FlatString */;
3465 val* var79 /* : Array[Object] */;
3466 long var80 /* : Int */;
3467 val* var81 /* : NativeArray[Object] */;
3468 val* var82 /* : String */;
3469 var_value = p0;
3470 var_mtype = p1;
3471 /* <var_mtype:MType> isa MClassType */
3472 cltype = type_model__MClassType.color;
3473 idtype = type_model__MClassType.id;
3474 if(cltype >= var_mtype->type->table_size) {
3475 var3 = 0;
3476 } else {
3477 var3 = var_mtype->type->type_table[cltype] == idtype;
3478 }
3479 var_ = var3;
3480 if (var3){
3481 {
3482 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MType(MClassType)> */
3483 var6 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
3484 if (unlikely(var6 == NULL)) {
3485 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
3486 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
3487 show_backtrace(1);
3488 }
3489 var4 = var6;
3490 RET_LABEL5:(void)0;
3491 }
3492 }
3493 {
3494 { /* Inline model#MClass#kind (var4) on <var4:MClass> */
3495 var9 = var4->attrs[COLOR_model__MClass___kind].val; /* _kind on <var4:MClass> */
3496 if (unlikely(var9 == NULL)) {
3497 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
3498 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 371);
3499 show_backtrace(1);
3500 }
3501 var7 = var9;
3502 RET_LABEL8:(void)0;
3503 }
3504 }
3505 {
3506 var10 = model__Object__extern_kind(self);
3507 }
3508 {
3509 { /* Inline kernel#Object#== (var7,var10) on <var7:MClassKind> */
3510 var_other = var10;
3511 {
3512 { /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:MClassKind> */
3513 var16 = var7 == var_other;
3514 var14 = var16;
3515 goto RET_LABEL15;
3516 RET_LABEL15:(void)0;
3517 }
3518 }
3519 var12 = var14;
3520 goto RET_LABEL13;
3521 RET_LABEL13:(void)0;
3522 }
3523 var11 = var12;
3524 }
3525 var2 = var11;
3526 } else {
3527 var2 = var_;
3528 }
3529 var_17 = var2;
3530 if (var2){
3531 {
3532 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MType(MClassType)> */
3533 var20 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
3534 if (unlikely(var20 == NULL)) {
3535 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
3536 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
3537 show_backtrace(1);
3538 }
3539 var18 = var20;
3540 RET_LABEL19:(void)0;
3541 }
3542 }
3543 {
3544 { /* Inline model#MClass#name (var18) on <var18:MClass> */
3545 var23 = var18->attrs[COLOR_model__MClass___name].val; /* _name on <var18:MClass> */
3546 if (unlikely(var23 == NULL)) {
3547 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
3548 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
3549 show_backtrace(1);
3550 }
3551 var21 = var23;
3552 RET_LABEL22:(void)0;
3553 }
3554 }
3555 if (varonce) {
3556 var24 = varonce;
3557 } else {
3558 var25 = "NativeString";
3559 var26 = 12;
3560 var27 = string__NativeString__to_s_with_length(var25, var26);
3561 var24 = var27;
3562 varonce = var24;
3563 }
3564 {
3565 { /* Inline kernel#Object#!= (var21,var24) on <var21:String> */
3566 var_other31 = var24;
3567 {
3568 var33 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var_other31) /* == on <var21:String>*/;
3569 var32 = var33;
3570 }
3571 var34 = !var32;
3572 var29 = var34;
3573 goto RET_LABEL30;
3574 RET_LABEL30:(void)0;
3575 }
3576 var28 = var29;
3577 }
3578 var1 = var28;
3579 } else {
3580 var1 = var_17;
3581 }
3582 if (var1){
3583 {
3584 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
3585 var37 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
3586 if (unlikely(var37 == NULL)) {
3587 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
3588 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
3589 show_backtrace(1);
3590 }
3591 var35 = var37;
3592 RET_LABEL36:(void)0;
3593 }
3594 }
3595 {
3596 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (var35) on <var35:AbstractCompiler(SeparateCompiler)> */
3597 var40 = var35->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <var35:AbstractCompiler(SeparateCompiler)> */
3598 if (unlikely(var40 == NULL)) {
3599 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
3600 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
3601 show_backtrace(1);
3602 }
3603 var38 = var40;
3604 RET_LABEL39:(void)0;
3605 }
3606 }
3607 {
3608 { /* Inline model#MModule#pointer_type (var38) on <var38:MModule> */
3609 var43 = var38->attrs[COLOR_model__MModule___pointer_type].val != NULL; /* _pointer_type on <var38:MModule> */
3610 if(likely(var43)) {
3611 var44 = var38->attrs[COLOR_model__MModule___pointer_type].val; /* _pointer_type on <var38:MModule> */
3612 if (unlikely(var44 == NULL)) {
3613 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _pointer_type");
3614 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 217);
3615 show_backtrace(1);
3616 }
3617 } else {
3618 if (varonce45) {
3619 var46 = varonce45;
3620 } else {
3621 var47 = "Pointer";
3622 var48 = 7;
3623 var49 = string__NativeString__to_s_with_length(var47, var48);
3624 var46 = var49;
3625 varonce45 = var46;
3626 }
3627 {
3628 var50 = model__MModule__get_primitive_class(var38, var46);
3629 }
3630 {
3631 { /* Inline model#MClass#mclass_type (var50) on <var50:MClass> */
3632 var53 = var50->attrs[COLOR_model__MClass___mclass_type].val; /* _mclass_type on <var50:MClass> */
3633 if (unlikely(var53 == NULL)) {
3634 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
3635 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 435);
3636 show_backtrace(1);
3637 }
3638 var51 = var53;
3639 RET_LABEL52:(void)0;
3640 }
3641 }
3642 var38->attrs[COLOR_model__MModule___pointer_type].val = var51; /* _pointer_type on <var38:MModule> */
3643 var44 = var51;
3644 }
3645 var41 = var44;
3646 RET_LABEL42:(void)0;
3647 }
3648 }
3649 var_pointer_type = var41;
3650 {
3651 var54 = abstract_compiler__AbstractCompilerVisitor__new_var_extern(self, var_mtype);
3652 }
3653 var_res = var54;
3654 if (varonce55) {
3655 var56 = varonce55;
3656 } else {
3657 var57 = " = ((struct instance_";
3658 var58 = 21;
3659 var59 = string__NativeString__to_s_with_length(var57, var58);
3660 var56 = var59;
3661 varonce55 = var56;
3662 }
3663 {
3664 var60 = ((val* (*)(val*))(var_pointer_type->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_pointer_type) /* c_name on <var_pointer_type:MClassType>*/;
3665 }
3666 if (varonce61) {
3667 var62 = varonce61;
3668 } else {
3669 var63 = "*)";
3670 var64 = 2;
3671 var65 = string__NativeString__to_s_with_length(var63, var64);
3672 var62 = var65;
3673 varonce61 = var62;
3674 }
3675 if (varonce66) {
3676 var67 = varonce66;
3677 } else {
3678 var68 = ")->value; /* unboxing ";
3679 var69 = 22;
3680 var70 = string__NativeString__to_s_with_length(var68, var69);
3681 var67 = var70;
3682 varonce66 = var67;
3683 }
3684 {
3685 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
3686 var73 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
3687 if (unlikely(var73 == NULL)) {
3688 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
3689 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
3690 show_backtrace(1);
3691 }
3692 var71 = var73;
3693 RET_LABEL72:(void)0;
3694 }
3695 }
3696 if (varonce74) {
3697 var75 = varonce74;
3698 } else {
3699 var76 = " */";
3700 var77 = 3;
3701 var78 = string__NativeString__to_s_with_length(var76, var77);
3702 var75 = var78;
3703 varonce74 = var75;
3704 }
3705 var79 = NEW_array__Array(&type_array__Arraykernel__Object);
3706 { /* var79 = array_instance Array[Object] */
3707 var80 = 8;
3708 var81 = NEW_array__NativeArray(var80, &type_array__NativeArraykernel__Object);
3709 ((struct instance_array__NativeArray*)var81)->values[0] = (val*) var_res;
3710 ((struct instance_array__NativeArray*)var81)->values[1] = (val*) var56;
3711 ((struct instance_array__NativeArray*)var81)->values[2] = (val*) var60;
3712 ((struct instance_array__NativeArray*)var81)->values[3] = (val*) var62;
3713 ((struct instance_array__NativeArray*)var81)->values[4] = (val*) var_value;
3714 ((struct instance_array__NativeArray*)var81)->values[5] = (val*) var67;
3715 ((struct instance_array__NativeArray*)var81)->values[6] = (val*) var71;
3716 ((struct instance_array__NativeArray*)var81)->values[7] = (val*) var75;
3717 {
3718 ((void (*)(val*, val*, long))(var79->class->vft[COLOR_array__Array__with_native]))(var79, var81, var80) /* with_native on <var79:Array[Object]>*/;
3719 }
3720 }
3721 {
3722 var82 = ((val* (*)(val*))(var79->class->vft[COLOR_string__Object__to_s]))(var79) /* to_s on <var79:Array[Object]>*/;
3723 }
3724 {
3725 abstract_compiler__AbstractCompilerVisitor__add(self, var82); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
3726 }
3727 var = var_res;
3728 goto RET_LABEL;
3729 } else {
3730 var = var_value;
3731 goto RET_LABEL;
3732 }
3733 RET_LABEL:;
3734 return var;
3735 }
3736 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#unbox_extern for (self: Object, RuntimeVariable, MType): RuntimeVariable */
3737 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__unbox_extern(val* self, val* p0, val* p1) {
3738 val* var /* : RuntimeVariable */;
3739 val* var1 /* : RuntimeVariable */;
3740 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__unbox_extern(self, p0, p1);
3741 var = var1;
3742 RET_LABEL:;
3743 return var;
3744 }
3745 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#box_extern for (self: SeparateErasureCompilerVisitor, RuntimeVariable, MType): RuntimeVariable */
3746 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__box_extern(val* self, val* p0, val* p1) {
3747 val* var /* : RuntimeVariable */;
3748 val* var_value /* var value: RuntimeVariable */;
3749 val* var_mtype /* var mtype: MType */;
3750 short int var1 /* : Bool */;
3751 short int var2 /* : Bool */;
3752 short int var3 /* : Bool */;
3753 int cltype;
3754 int idtype;
3755 short int var_ /* var : Bool */;
3756 val* var4 /* : MClass */;
3757 val* var6 /* : MClass */;
3758 val* var7 /* : MClassKind */;
3759 val* var9 /* : MClassKind */;
3760 val* var10 /* : MClassKind */;
3761 short int var11 /* : Bool */;
3762 short int var12 /* : Bool */;
3763 val* var_other /* var other: nullable Object */;
3764 short int var14 /* : Bool */;
3765 short int var16 /* : Bool */;
3766 short int var_17 /* var : Bool */;
3767 val* var18 /* : MClass */;
3768 val* var20 /* : MClass */;
3769 val* var21 /* : String */;
3770 val* var23 /* : String */;
3771 static val* varonce;
3772 val* var24 /* : String */;
3773 char* var25 /* : NativeString */;
3774 long var26 /* : Int */;
3775 val* var27 /* : FlatString */;
3776 short int var28 /* : Bool */;
3777 short int var29 /* : Bool */;
3778 val* var_other31 /* var other: nullable Object */;
3779 short int var32 /* : Bool */;
3780 short int var33 /* : Bool */;
3781 short int var34 /* : Bool */;
3782 val* var35 /* : AbstractCompiler */;
3783 val* var37 /* : AbstractCompiler */;
3784 val* var38 /* : MModule */;
3785 val* var40 /* : MModule */;
3786 val* var41 /* : MClassType */;
3787 short int var43 /* : Bool */;
3788 val* var44 /* : MClassType */;
3789 static val* varonce45;
3790 val* var46 /* : String */;
3791 char* var47 /* : NativeString */;
3792 long var48 /* : Int */;
3793 val* var49 /* : FlatString */;
3794 val* var50 /* : MClass */;
3795 val* var51 /* : MClassType */;
3796 val* var53 /* : MClassType */;
3797 val* var_valtype /* var valtype: MClassType */;
3798 val* var54 /* : RuntimeVariable */;
3799 val* var_res /* var res: RuntimeVariable */;
3800 short int var55 /* : Bool */;
3801 val* var56 /* : AbstractCompiler */;
3802 val* var58 /* : AbstractCompiler */;
3803 val* var59 /* : nullable RapidTypeAnalysis */;
3804 val* var61 /* : nullable RapidTypeAnalysis */;
3805 val* var62 /* : null */;
3806 short int var63 /* : Bool */;
3807 short int var64 /* : Bool */;
3808 short int var66 /* : Bool */;
3809 short int var67 /* : Bool */;
3810 short int var68 /* : Bool */;
3811 short int var_69 /* var : Bool */;
3812 val* var70 /* : AbstractCompiler */;
3813 val* var72 /* : AbstractCompiler */;
3814 val* var73 /* : nullable RapidTypeAnalysis */;
3815 val* var75 /* : nullable RapidTypeAnalysis */;
3816 val* var76 /* : HashSet[MClassType] */;
3817 val* var78 /* : HashSet[MClassType] */;
3818 val* var79 /* : MType */;
3819 val* var81 /* : MType */;
3820 short int var82 /* : Bool */;
3821 int cltype83;
3822 int idtype84;
3823 const char* var_class_name;
3824 short int var85 /* : Bool */;
3825 short int var86 /* : Bool */;
3826 static val* varonce87;
3827 val* var88 /* : String */;
3828 char* var89 /* : NativeString */;
3829 long var90 /* : Int */;
3830 val* var91 /* : FlatString */;
3831 val* var92 /* : MType */;
3832 val* var94 /* : MType */;
3833 static val* varonce95;
3834 val* var96 /* : String */;
3835 char* var97 /* : NativeString */;
3836 long var98 /* : Int */;
3837 val* var99 /* : FlatString */;
3838 val* var100 /* : MType */;
3839 val* var102 /* : MType */;
3840 static val* varonce103;
3841 val* var104 /* : String */;
3842 char* var105 /* : NativeString */;
3843 long var106 /* : Int */;
3844 val* var107 /* : FlatString */;
3845 val* var108 /* : Array[Object] */;
3846 long var109 /* : Int */;
3847 val* var110 /* : NativeArray[Object] */;
3848 val* var111 /* : String */;
3849 static val* varonce112;
3850 val* var113 /* : String */;
3851 char* var114 /* : NativeString */;
3852 long var115 /* : Int */;
3853 val* var116 /* : FlatString */;
3854 static val* varonce117;
3855 val* var118 /* : String */;
3856 char* var119 /* : NativeString */;
3857 long var120 /* : Int */;
3858 val* var121 /* : FlatString */;
3859 val* var122 /* : String */;
3860 val* var123 /* : Array[Object] */;
3861 long var124 /* : Int */;
3862 val* var125 /* : NativeArray[Object] */;
3863 val* var126 /* : String */;
3864 static val* varonce127;
3865 val* var128 /* : String */;
3866 char* var129 /* : NativeString */;
3867 long var130 /* : Int */;
3868 val* var131 /* : FlatString */;
3869 val* var132 /* : String */;
3870 static val* varonce133;
3871 val* var134 /* : String */;
3872 char* var135 /* : NativeString */;
3873 long var136 /* : Int */;
3874 val* var137 /* : FlatString */;
3875 static val* varonce138;
3876 val* var139 /* : String */;
3877 char* var140 /* : NativeString */;
3878 long var141 /* : Int */;
3879 val* var142 /* : FlatString */;
3880 val* var143 /* : MType */;
3881 val* var145 /* : MType */;
3882 static val* varonce146;
3883 val* var147 /* : String */;
3884 char* var148 /* : NativeString */;
3885 long var149 /* : Int */;
3886 val* var150 /* : FlatString */;
3887 val* var151 /* : Array[Object] */;
3888 long var152 /* : Int */;
3889 val* var153 /* : NativeArray[Object] */;
3890 val* var154 /* : String */;
3891 static val* varonce155;
3892 val* var156 /* : String */;
3893 char* var157 /* : NativeString */;
3894 long var158 /* : Int */;
3895 val* var159 /* : FlatString */;
3896 val* var160 /* : String */;
3897 val* var161 /* : Array[Object] */;
3898 long var162 /* : Int */;
3899 val* var163 /* : NativeArray[Object] */;
3900 val* var164 /* : String */;
3901 static val* varonce165;
3902 val* var166 /* : String */;
3903 char* var167 /* : NativeString */;
3904 long var168 /* : Int */;
3905 val* var169 /* : FlatString */;
3906 val* var170 /* : String */;
3907 static val* varonce171;
3908 val* var172 /* : String */;
3909 char* var173 /* : NativeString */;
3910 long var174 /* : Int */;
3911 val* var175 /* : FlatString */;
3912 val* var176 /* : Array[Object] */;
3913 long var177 /* : Int */;
3914 val* var178 /* : NativeArray[Object] */;
3915 val* var179 /* : String */;
3916 var_value = p0;
3917 var_mtype = p1;
3918 /* <var_mtype:MType> isa MClassType */
3919 cltype = type_model__MClassType.color;
3920 idtype = type_model__MClassType.id;
3921 if(cltype >= var_mtype->type->table_size) {
3922 var3 = 0;
3923 } else {
3924 var3 = var_mtype->type->type_table[cltype] == idtype;
3925 }
3926 var_ = var3;
3927 if (var3){
3928 {
3929 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MType(MClassType)> */
3930 var6 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
3931 if (unlikely(var6 == NULL)) {
3932 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
3933 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
3934 show_backtrace(1);
3935 }
3936 var4 = var6;
3937 RET_LABEL5:(void)0;
3938 }
3939 }
3940 {
3941 { /* Inline model#MClass#kind (var4) on <var4:MClass> */
3942 var9 = var4->attrs[COLOR_model__MClass___kind].val; /* _kind on <var4:MClass> */
3943 if (unlikely(var9 == NULL)) {
3944 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
3945 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 371);
3946 show_backtrace(1);
3947 }
3948 var7 = var9;
3949 RET_LABEL8:(void)0;
3950 }
3951 }
3952 {
3953 var10 = model__Object__extern_kind(self);
3954 }
3955 {
3956 { /* Inline kernel#Object#== (var7,var10) on <var7:MClassKind> */
3957 var_other = var10;
3958 {
3959 { /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:MClassKind> */
3960 var16 = var7 == var_other;
3961 var14 = var16;
3962 goto RET_LABEL15;
3963 RET_LABEL15:(void)0;
3964 }
3965 }
3966 var12 = var14;
3967 goto RET_LABEL13;
3968 RET_LABEL13:(void)0;
3969 }
3970 var11 = var12;
3971 }
3972 var2 = var11;
3973 } else {
3974 var2 = var_;
3975 }
3976 var_17 = var2;
3977 if (var2){
3978 {
3979 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MType(MClassType)> */
3980 var20 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
3981 if (unlikely(var20 == NULL)) {
3982 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
3983 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
3984 show_backtrace(1);
3985 }
3986 var18 = var20;
3987 RET_LABEL19:(void)0;
3988 }
3989 }
3990 {
3991 { /* Inline model#MClass#name (var18) on <var18:MClass> */
3992 var23 = var18->attrs[COLOR_model__MClass___name].val; /* _name on <var18:MClass> */
3993 if (unlikely(var23 == NULL)) {
3994 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
3995 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
3996 show_backtrace(1);
3997 }
3998 var21 = var23;
3999 RET_LABEL22:(void)0;
4000 }
4001 }
4002 if (varonce) {
4003 var24 = varonce;
4004 } else {
4005 var25 = "NativeString";
4006 var26 = 12;
4007 var27 = string__NativeString__to_s_with_length(var25, var26);
4008 var24 = var27;
4009 varonce = var24;
4010 }
4011 {
4012 { /* Inline kernel#Object#!= (var21,var24) on <var21:String> */
4013 var_other31 = var24;
4014 {
4015 var33 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var_other31) /* == on <var21:String>*/;
4016 var32 = var33;
4017 }
4018 var34 = !var32;
4019 var29 = var34;
4020 goto RET_LABEL30;
4021 RET_LABEL30:(void)0;
4022 }
4023 var28 = var29;
4024 }
4025 var1 = var28;
4026 } else {
4027 var1 = var_17;
4028 }
4029 if (var1){
4030 {
4031 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
4032 var37 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
4033 if (unlikely(var37 == NULL)) {
4034 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
4035 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
4036 show_backtrace(1);
4037 }
4038 var35 = var37;
4039 RET_LABEL36:(void)0;
4040 }
4041 }
4042 {
4043 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (var35) on <var35:AbstractCompiler(SeparateCompiler)> */
4044 var40 = var35->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <var35:AbstractCompiler(SeparateCompiler)> */
4045 if (unlikely(var40 == NULL)) {
4046 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
4047 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
4048 show_backtrace(1);
4049 }
4050 var38 = var40;
4051 RET_LABEL39:(void)0;
4052 }
4053 }
4054 {
4055 { /* Inline model#MModule#pointer_type (var38) on <var38:MModule> */
4056 var43 = var38->attrs[COLOR_model__MModule___pointer_type].val != NULL; /* _pointer_type on <var38:MModule> */
4057 if(likely(var43)) {
4058 var44 = var38->attrs[COLOR_model__MModule___pointer_type].val; /* _pointer_type on <var38:MModule> */
4059 if (unlikely(var44 == NULL)) {
4060 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _pointer_type");
4061 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 217);
4062 show_backtrace(1);
4063 }
4064 } else {
4065 if (varonce45) {
4066 var46 = varonce45;
4067 } else {
4068 var47 = "Pointer";
4069 var48 = 7;
4070 var49 = string__NativeString__to_s_with_length(var47, var48);
4071 var46 = var49;
4072 varonce45 = var46;
4073 }
4074 {
4075 var50 = model__MModule__get_primitive_class(var38, var46);
4076 }
4077 {
4078 { /* Inline model#MClass#mclass_type (var50) on <var50:MClass> */
4079 var53 = var50->attrs[COLOR_model__MClass___mclass_type].val; /* _mclass_type on <var50:MClass> */
4080 if (unlikely(var53 == NULL)) {
4081 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
4082 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 435);
4083 show_backtrace(1);
4084 }
4085 var51 = var53;
4086 RET_LABEL52:(void)0;
4087 }
4088 }
4089 var38->attrs[COLOR_model__MModule___pointer_type].val = var51; /* _pointer_type on <var38:MModule> */
4090 var44 = var51;
4091 }
4092 var41 = var44;
4093 RET_LABEL42:(void)0;
4094 }
4095 }
4096 var_valtype = var41;
4097 {
4098 var54 = abstract_compiler__AbstractCompilerVisitor__new_var(self, var_mtype);
4099 }
4100 var_res = var54;
4101 {
4102 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
4103 var58 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
4104 if (unlikely(var58 == NULL)) {
4105 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
4106 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
4107 show_backtrace(1);
4108 }
4109 var56 = var58;
4110 RET_LABEL57:(void)0;
4111 }
4112 }
4113 {
4114 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (var56) on <var56:AbstractCompiler(SeparateCompiler)> */
4115 var61 = var56->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <var56:AbstractCompiler(SeparateCompiler)> */
4116 var59 = var61;
4117 RET_LABEL60:(void)0;
4118 }
4119 }
4120 var62 = NULL;
4121 if (var59 == NULL) {
4122 var63 = 0; /* is null */
4123 } else {
4124 var63 = 1; /* arg is null and recv is not */
4125 }
4126 if (0) {
4127 { /* Inline kernel#Object#!= (var59,var62) on <var59:nullable RapidTypeAnalysis> */
4128 var_other31 = var62;
4129 {
4130 var67 = ((short int (*)(val*, val*))(var59->class->vft[COLOR_kernel__Object___61d_61d]))(var59, var_other31) /* == on <var59:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/;
4131 var66 = var67;
4132 }
4133 var68 = !var66;
4134 var64 = var68;
4135 goto RET_LABEL65;
4136 RET_LABEL65:(void)0;
4137 }
4138 var63 = var64;
4139 }
4140 var_69 = var63;
4141 if (var63){
4142 {
4143 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
4144 var72 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
4145 if (unlikely(var72 == NULL)) {
4146 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
4147 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1041);
4148 show_backtrace(1);
4149 }
4150 var70 = var72;
4151 RET_LABEL71:(void)0;
4152 }
4153 }
4154 {
4155 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (var70) on <var70:AbstractCompiler(SeparateCompiler)> */
4156 var75 = var70->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <var70:AbstractCompiler(SeparateCompiler)> */
4157 var73 = var75;
4158 RET_LABEL74:(void)0;
4159 }
4160 }
4161 if (var73 == NULL) {
4162 PRINT_ERROR("Runtime error: %s", "Receiver is null");
4163 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 636);
4164 show_backtrace(1);
4165 } else {
4166 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_types (var73) on <var73:nullable RapidTypeAnalysis> */
4167 if (unlikely(var73 == NULL)) {
4168 PRINT_ERROR("Runtime error: %s", "Receiver is null");
4169 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 53);
4170 show_backtrace(1);
4171 }
4172 var78 = var73->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_types].val; /* _live_types on <var73:nullable RapidTypeAnalysis> */
4173 if (unlikely(var78 == NULL)) {
4174 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_types");
4175 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 53);
4176 show_backtrace(1);
4177 }
4178 var76 = var78;
4179 RET_LABEL77:(void)0;
4180 }
4181 }
4182 {
4183 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
4184 var81 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
4185 if (unlikely(var81 == NULL)) {
4186 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
4187 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
4188 show_backtrace(1);
4189 }
4190 var79 = var81;
4191 RET_LABEL80:(void)0;
4192 }
4193 }
4194 /* <var79:MType> isa MClassType */
4195 cltype83 = type_model__MClassType.color;
4196 idtype84 = type_model__MClassType.id;
4197 if(cltype83 >= var79->type->table_size) {
4198 var82 = 0;
4199 } else {
4200 var82 = var79->type->type_table[cltype83] == idtype84;
4201 }
4202 if (unlikely(!var82)) {
4203 var_class_name = var79 == NULL ? "null" : var79->type->name;
4204 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
4205 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 636);
4206 show_backtrace(1);
4207 }
4208 {
4209 var85 = hash_collection__HashSet__has(var76, var79);
4210 }
4211 var86 = !var85;
4212 var55 = var86;
4213 } else {
4214 var55 = var_69;
4215 }
4216 if (var55){
4217 if (varonce87) {
4218 var88 = varonce87;
4219 } else {
4220 var89 = "/*no boxing of ";
4221 var90 = 15;
4222 var91 = string__NativeString__to_s_with_length(var89, var90);
4223 var88 = var91;
4224 varonce87 = var88;
4225 }
4226 {
4227 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
4228 var94 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
4229 if (unlikely(var94 == NULL)) {
4230 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
4231 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
4232 show_backtrace(1);
4233 }
4234 var92 = var94;
4235 RET_LABEL93:(void)0;
4236 }
4237 }
4238 if (varonce95) {
4239 var96 = varonce95;
4240 } else {
4241 var97 = ": ";
4242 var98 = 2;
4243 var99 = string__NativeString__to_s_with_length(var97, var98);
4244 var96 = var99;
4245 varonce95 = var96;
4246 }
4247 {
4248 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
4249 var102 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
4250 if (unlikely(var102 == NULL)) {
4251 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
4252 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
4253 show_backtrace(1);
4254 }
4255 var100 = var102;
4256 RET_LABEL101:(void)0;
4257 }
4258 }
4259 if (varonce103) {
4260 var104 = varonce103;
4261 } else {
4262 var105 = " is not live! */";
4263 var106 = 16;
4264 var107 = string__NativeString__to_s_with_length(var105, var106);
4265 var104 = var107;
4266 varonce103 = var104;
4267 }
4268 var108 = NEW_array__Array(&type_array__Arraykernel__Object);
4269 { /* var108 = array_instance Array[Object] */
4270 var109 = 5;
4271 var110 = NEW_array__NativeArray(var109, &type_array__NativeArraykernel__Object);
4272 ((struct instance_array__NativeArray*)var110)->values[0] = (val*) var88;
4273 ((struct instance_array__NativeArray*)var110)->values[1] = (val*) var92;
4274 ((struct instance_array__NativeArray*)var110)->values[2] = (val*) var96;
4275 ((struct instance_array__NativeArray*)var110)->values[3] = (val*) var100;
4276 ((struct instance_array__NativeArray*)var110)->values[4] = (val*) var104;
4277 {
4278 ((void (*)(val*, val*, long))(var108->class->vft[COLOR_array__Array__with_native]))(var108, var110, var109) /* with_native on <var108:Array[Object]>*/;
4279 }
4280 }
4281 {
4282 var111 = ((val* (*)(val*))(var108->class->vft[COLOR_string__Object__to_s]))(var108) /* to_s on <var108:Array[Object]>*/;
4283 }
4284 {
4285 abstract_compiler__AbstractCompilerVisitor__add(self, var111); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
4286 }
4287 if (varonce112) {
4288 var113 = varonce112;
4289 } else {
4290 var114 = "PRINT_ERROR(\"Dead code executed!\\n\"); show_backtrace(1);";
4291 var115 = 56;
4292 var116 = string__NativeString__to_s_with_length(var114, var115);
4293 var113 = var116;
4294 varonce112 = var113;
4295 }
4296 {
4297 abstract_compiler__AbstractCompilerVisitor__add(self, var113); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
4298 }
4299 var = var_res;
4300 goto RET_LABEL;
4301 } else {
4302 }
4303 if (varonce117) {
4304 var118 = varonce117;
4305 } else {
4306 var119 = "BOX_";
4307 var120 = 4;
4308 var121 = string__NativeString__to_s_with_length(var119, var120);
4309 var118 = var121;
4310 varonce117 = var118;
4311 }
4312 {
4313 var122 = ((val* (*)(val*))(var_valtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_valtype) /* c_name on <var_valtype:MClassType>*/;
4314 }
4315 var123 = NEW_array__Array(&type_array__Arraykernel__Object);
4316 { /* var123 = array_instance Array[Object] */
4317 var124 = 2;
4318 var125 = NEW_array__NativeArray(var124, &type_array__NativeArraykernel__Object);
4319 ((struct instance_array__NativeArray*)var125)->values[0] = (val*) var118;
4320 ((struct instance_array__NativeArray*)var125)->values[1] = (val*) var122;
4321 {
4322 ((void (*)(val*, val*, long))(var123->class->vft[COLOR_array__Array__with_native]))(var123, var125, var124) /* with_native on <var123:Array[Object]>*/;
4323 }
4324 }
4325 {
4326 var126 = ((val* (*)(val*))(var123->class->vft[COLOR_string__Object__to_s]))(var123) /* to_s on <var123:Array[Object]>*/;
4327 }
4328 {
4329 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var126); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
4330 }
4331 if (varonce127) {
4332 var128 = varonce127;
4333 } else {
4334 var129 = " = BOX_";
4335 var130 = 7;
4336 var131 = string__NativeString__to_s_with_length(var129, var130);
4337 var128 = var131;
4338 varonce127 = var128;
4339 }
4340 {
4341 var132 = ((val* (*)(val*))(var_valtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_valtype) /* c_name on <var_valtype:MClassType>*/;
4342 }
4343 if (varonce133) {
4344 var134 = varonce133;
4345 } else {
4346 var135 = "(";
4347 var136 = 1;
4348 var137 = string__NativeString__to_s_with_length(var135, var136);
4349 var134 = var137;
4350 varonce133 = var134;
4351 }
4352 if (varonce138) {
4353 var139 = varonce138;
4354 } else {
4355 var140 = "); /* boxing ";
4356 var141 = 13;
4357 var142 = string__NativeString__to_s_with_length(var140, var141);
4358 var139 = var142;
4359 varonce138 = var139;
4360 }
4361 {
4362 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
4363 var145 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
4364 if (unlikely(var145 == NULL)) {
4365 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
4366 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
4367 show_backtrace(1);
4368 }
4369 var143 = var145;
4370 RET_LABEL144:(void)0;
4371 }
4372 }
4373 if (varonce146) {
4374 var147 = varonce146;
4375 } else {
4376 var148 = " */";
4377 var149 = 3;
4378 var150 = string__NativeString__to_s_with_length(var148, var149);
4379 var147 = var150;
4380 varonce146 = var147;
4381 }
4382 var151 = NEW_array__Array(&type_array__Arraykernel__Object);
4383 { /* var151 = array_instance Array[Object] */
4384 var152 = 8;
4385 var153 = NEW_array__NativeArray(var152, &type_array__NativeArraykernel__Object);
4386 ((struct instance_array__NativeArray*)var153)->values[0] = (val*) var_res;
4387 ((struct instance_array__NativeArray*)var153)->values[1] = (val*) var128;
4388 ((struct instance_array__NativeArray*)var153)->values[2] = (val*) var132;
4389 ((struct instance_array__NativeArray*)var153)->values[3] = (val*) var134;
4390 ((struct instance_array__NativeArray*)var153)->values[4] = (val*) var_value;
4391 ((struct instance_array__NativeArray*)var153)->values[5] = (val*) var139;
4392 ((struct instance_array__NativeArray*)var153)->values[6] = (val*) var143;
4393 ((struct instance_array__NativeArray*)var153)->values[7] = (val*) var147;
4394 {
4395 ((void (*)(val*, val*, long))(var151->class->vft[COLOR_array__Array__with_native]))(var151, var153, var152) /* with_native on <var151:Array[Object]>*/;
4396 }
4397 }
4398 {
4399 var154 = ((val* (*)(val*))(var151->class->vft[COLOR_string__Object__to_s]))(var151) /* to_s on <var151:Array[Object]>*/;
4400 }
4401 {
4402 abstract_compiler__AbstractCompilerVisitor__add(self, var154); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
4403 }
4404 if (varonce155) {
4405 var156 = varonce155;
4406 } else {
4407 var157 = "class_";
4408 var158 = 6;
4409 var159 = string__NativeString__to_s_with_length(var157, var158);
4410 var156 = var159;
4411 varonce155 = var156;
4412 }
4413 {
4414 var160 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType(MClassType)>*/;
4415 }
4416 var161 = NEW_array__Array(&type_array__Arraykernel__Object);
4417 { /* var161 = array_instance Array[Object] */
4418 var162 = 2;
4419 var163 = NEW_array__NativeArray(var162, &type_array__NativeArraykernel__Object);
4420 ((struct instance_array__NativeArray*)var163)->values[0] = (val*) var156;
4421 ((struct instance_array__NativeArray*)var163)->values[1] = (val*) var160;
4422 {
4423 ((void (*)(val*, val*, long))(var161->class->vft[COLOR_array__Array__with_native]))(var161, var163, var162) /* with_native on <var161:Array[Object]>*/;
4424 }
4425 }
4426 {
4427 var164 = ((val* (*)(val*))(var161->class->vft[COLOR_string__Object__to_s]))(var161) /* to_s on <var161:Array[Object]>*/;
4428 }
4429 {
4430 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var164); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
4431 }
4432 if (varonce165) {
4433 var166 = varonce165;
4434 } else {
4435 var167 = "->class = &class_";
4436 var168 = 17;
4437 var169 = string__NativeString__to_s_with_length(var167, var168);
4438 var166 = var169;
4439 varonce165 = var166;
4440 }
4441 {
4442 var170 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType(MClassType)>*/;
4443 }
4444 if (varonce171) {
4445 var172 = varonce171;
4446 } else {
4447 var173 = ";";
4448 var174 = 1;
4449 var175 = string__NativeString__to_s_with_length(var173, var174);
4450 var172 = var175;
4451 varonce171 = var172;
4452 }
4453 var176 = NEW_array__Array(&type_array__Arraykernel__Object);
4454 { /* var176 = array_instance Array[Object] */
4455 var177 = 4;
4456 var178 = NEW_array__NativeArray(var177, &type_array__NativeArraykernel__Object);
4457 ((struct instance_array__NativeArray*)var178)->values[0] = (val*) var_res;
4458 ((struct instance_array__NativeArray*)var178)->values[1] = (val*) var166;
4459 ((struct instance_array__NativeArray*)var178)->values[2] = (val*) var170;
4460 ((struct instance_array__NativeArray*)var178)->values[3] = (val*) var172;
4461 {
4462 ((void (*)(val*, val*, long))(var176->class->vft[COLOR_array__Array__with_native]))(var176, var178, var177) /* with_native on <var176:Array[Object]>*/;
4463 }
4464 }
4465 {
4466 var179 = ((val* (*)(val*))(var176->class->vft[COLOR_string__Object__to_s]))(var176) /* to_s on <var176:Array[Object]>*/;
4467 }
4468 {
4469 abstract_compiler__AbstractCompilerVisitor__add(self, var179); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
4470 }
4471 var = var_res;
4472 goto RET_LABEL;
4473 } else {
4474 var = var_value;
4475 goto RET_LABEL;
4476 }
4477 RET_LABEL:;
4478 return var;
4479 }
4480 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#box_extern for (self: Object, RuntimeVariable, MType): RuntimeVariable */
4481 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__box_extern(val* self, val* p0, val* p1) {
4482 val* var /* : RuntimeVariable */;
4483 val* var1 /* : RuntimeVariable */;
4484 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__box_extern(self, p0, p1);
4485 var = var1;
4486 RET_LABEL:;
4487 return var;
4488 }
4489 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: SeparateErasureCompilerVisitor, RuntimeVariable): String */
4490 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
4491 val* var /* : String */;
4492 val* var_value /* var value: RuntimeVariable */;
4493 static val* varonce;
4494 val* var1 /* : String */;
4495 char* var2 /* : NativeString */;
4496 long var3 /* : Int */;
4497 val* var4 /* : FlatString */;
4498 val* var5 /* : String */;
4499 val* var_res /* var res: String */;
4500 static val* varonce6;
4501 val* var7 /* : String */;
4502 char* var8 /* : NativeString */;
4503 long var9 /* : Int */;
4504 val* var10 /* : FlatString */;
4505 static val* varonce11;
4506 val* var12 /* : String */;
4507 char* var13 /* : NativeString */;
4508 long var14 /* : Int */;
4509 val* var15 /* : FlatString */;
4510 val* var16 /* : Array[Object] */;
4511 long var17 /* : Int */;
4512 val* var18 /* : NativeArray[Object] */;
4513 val* var19 /* : String */;
4514 val* var20 /* : MType */;
4515 val* var22 /* : MType */;
4516 val* var23 /* : String */;
4517 static val* varonce24;
4518 val* var25 /* : String */;
4519 char* var26 /* : NativeString */;
4520 long var27 /* : Int */;
4521 val* var28 /* : FlatString */;
4522 short int var29 /* : Bool */;
4523 short int var30 /* : Bool */;
4524 static val* varonce31;
4525 val* var32 /* : String */;
4526 char* var33 /* : NativeString */;
4527 long var34 /* : Int */;
4528 val* var35 /* : FlatString */;
4529 static val* varonce36;
4530 val* var37 /* : String */;
4531 char* var38 /* : NativeString */;
4532 long var39 /* : Int */;
4533 val* var40 /* : FlatString */;
4534 static val* varonce41;
4535 val* var42 /* : String */;
4536 char* var43 /* : NativeString */;
4537 long var44 /* : Int */;
4538 val* var45 /* : FlatString */;
4539 val* var46 /* : Array[Object] */;
4540 long var47 /* : Int */;
4541 val* var48 /* : NativeArray[Object] */;
4542 val* var49 /* : String */;
4543 static val* varonce50;
4544 val* var51 /* : String */;
4545 char* var52 /* : NativeString */;
4546 long var53 /* : Int */;
4547 val* var54 /* : FlatString */;
4548 val* var55 /* : MType */;
4549 val* var57 /* : MType */;
4550 val* var58 /* : String */;
4551 val* var59 /* : Array[Object] */;
4552 long var60 /* : Int */;
4553 val* var61 /* : NativeArray[Object] */;
4554 val* var62 /* : String */;
4555 static val* varonce63;
4556 val* var64 /* : String */;
4557 char* var65 /* : NativeString */;
4558 long var66 /* : Int */;
4559 val* var67 /* : FlatString */;
4560 val* var68 /* : MType */;
4561 val* var70 /* : MType */;
4562 val* var71 /* : String */;
4563 static val* varonce72;
4564 val* var73 /* : String */;
4565 char* var74 /* : NativeString */;
4566 long var75 /* : Int */;
4567 val* var76 /* : FlatString */;
4568 val* var77 /* : Array[Object] */;
4569 long var78 /* : Int */;
4570 val* var79 /* : NativeArray[Object] */;
4571 val* var80 /* : String */;
4572 var_value = p0;
4573 if (varonce) {
4574 var1 = varonce;
4575 } else {
4576 var2 = "var_class_name";
4577 var3 = 14;
4578 var4 = string__NativeString__to_s_with_length(var2, var3);
4579 var1 = var4;
4580 varonce = var1;
4581 }
4582 {
4583 var5 = abstract_compiler__AbstractCompilerVisitor__get_name(self, var1);
4584 }
4585 var_res = var5;
4586 if (varonce6) {
4587 var7 = varonce6;
4588 } else {
4589 var8 = "const char* ";
4590 var9 = 12;
4591 var10 = string__NativeString__to_s_with_length(var8, var9);
4592 var7 = var10;
4593 varonce6 = var7;
4594 }
4595 if (varonce11) {
4596 var12 = varonce11;
4597 } else {
4598 var13 = ";";
4599 var14 = 1;
4600 var15 = string__NativeString__to_s_with_length(var13, var14);
4601 var12 = var15;
4602 varonce11 = var12;
4603 }
4604 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
4605 { /* var16 = array_instance Array[Object] */
4606 var17 = 3;
4607 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
4608 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
4609 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_res;
4610 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
4611 {
4612 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
4613 }
4614 }
4615 {
4616 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
4617 }
4618 {
4619 abstract_compiler__AbstractCompilerVisitor__add_decl(self, var19); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <self:SeparateErasureCompilerVisitor>*/
4620 }
4621 {
4622 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
4623 var22 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
4624 if (unlikely(var22 == NULL)) {
4625 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
4626 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
4627 show_backtrace(1);
4628 }
4629 var20 = var22;
4630 RET_LABEL21:(void)0;
4631 }
4632 }
4633 {
4634 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_compiler__MType__ctype]))(var20) /* ctype on <var20:MType>*/;
4635 }
4636 if (varonce24) {
4637 var25 = varonce24;
4638 } else {
4639 var26 = "val*";
4640 var27 = 4;
4641 var28 = string__NativeString__to_s_with_length(var26, var27);
4642 var25 = var28;
4643 varonce24 = var25;
4644 }
4645 {
4646 var30 = string__FlatString___61d_61d(var23, var25);
4647 var29 = var30;
4648 }
4649 if (var29){
4650 if (varonce31) {
4651 var32 = varonce31;
4652 } else {
4653 var33 = " = ";
4654 var34 = 3;
4655 var35 = string__NativeString__to_s_with_length(var33, var34);
4656 var32 = var35;
4657 varonce31 = var32;
4658 }
4659 if (varonce36) {
4660 var37 = varonce36;
4661 } else {
4662 var38 = " == NULL ? \"null\" : ";
4663 var39 = 20;
4664 var40 = string__NativeString__to_s_with_length(var38, var39);
4665 var37 = var40;
4666 varonce36 = var37;
4667 }
4668 if (varonce41) {
4669 var42 = varonce41;
4670 } else {
4671 var43 = "->class->name;";
4672 var44 = 14;
4673 var45 = string__NativeString__to_s_with_length(var43, var44);
4674 var42 = var45;
4675 varonce41 = var42;
4676 }
4677 var46 = NEW_array__Array(&type_array__Arraykernel__Object);
4678 { /* var46 = array_instance Array[Object] */
4679 var47 = 6;
4680 var48 = NEW_array__NativeArray(var47, &type_array__NativeArraykernel__Object);
4681 ((struct instance_array__NativeArray*)var48)->values[0] = (val*) var_res;
4682 ((struct instance_array__NativeArray*)var48)->values[1] = (val*) var32;
4683 ((struct instance_array__NativeArray*)var48)->values[2] = (val*) var_value;
4684 ((struct instance_array__NativeArray*)var48)->values[3] = (val*) var37;
4685 ((struct instance_array__NativeArray*)var48)->values[4] = (val*) var_value;
4686 ((struct instance_array__NativeArray*)var48)->values[5] = (val*) var42;
4687 {
4688 ((void (*)(val*, val*, long))(var46->class->vft[COLOR_array__Array__with_native]))(var46, var48, var47) /* with_native on <var46:Array[Object]>*/;
4689 }
4690 }
4691 {
4692 var49 = ((val* (*)(val*))(var46->class->vft[COLOR_string__Object__to_s]))(var46) /* to_s on <var46:Array[Object]>*/;
4693 }
4694 {
4695 abstract_compiler__AbstractCompilerVisitor__add(self, var49); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
4696 }
4697 } else {
4698 if (varonce50) {
4699 var51 = varonce50;
4700 } else {
4701 var52 = "class_";
4702 var53 = 6;
4703 var54 = string__NativeString__to_s_with_length(var52, var53);
4704 var51 = var54;
4705 varonce50 = var51;
4706 }
4707 {
4708 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
4709 var57 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
4710 if (unlikely(var57 == NULL)) {
4711 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
4712 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
4713 show_backtrace(1);
4714 }
4715 var55 = var57;
4716 RET_LABEL56:(void)0;
4717 }
4718 }
4719 {
4720 var58 = ((val* (*)(val*))(var55->class->vft[COLOR_abstract_compiler__MType__c_name]))(var55) /* c_name on <var55:MType>*/;
4721 }
4722 var59 = NEW_array__Array(&type_array__Arraykernel__Object);
4723 { /* var59 = array_instance Array[Object] */
4724 var60 = 2;
4725 var61 = NEW_array__NativeArray(var60, &type_array__NativeArraykernel__Object);
4726 ((struct instance_array__NativeArray*)var61)->values[0] = (val*) var51;
4727 ((struct instance_array__NativeArray*)var61)->values[1] = (val*) var58;
4728 {
4729 ((void (*)(val*, val*, long))(var59->class->vft[COLOR_array__Array__with_native]))(var59, var61, var60) /* with_native on <var59:Array[Object]>*/;
4730 }
4731 }
4732 {
4733 var62 = ((val* (*)(val*))(var59->class->vft[COLOR_string__Object__to_s]))(var59) /* to_s on <var59:Array[Object]>*/;
4734 }
4735 {
4736 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var62); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
4737 }
4738 if (varonce63) {
4739 var64 = varonce63;
4740 } else {
4741 var65 = " = class_";
4742 var66 = 9;
4743 var67 = string__NativeString__to_s_with_length(var65, var66);
4744 var64 = var67;
4745 varonce63 = var64;
4746 }
4747 {
4748 { /* Inline abstract_compiler#RuntimeVariable#mtype (var_value) on <var_value:RuntimeVariable> */
4749 var70 = var_value->attrs[COLOR_abstract_compiler__RuntimeVariable___mtype].val; /* _mtype on <var_value:RuntimeVariable> */
4750 if (unlikely(var70 == NULL)) {
4751 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
4752 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 1634);
4753 show_backtrace(1);
4754 }
4755 var68 = var70;
4756 RET_LABEL69:(void)0;
4757 }
4758 }
4759 {
4760 var71 = ((val* (*)(val*))(var68->class->vft[COLOR_abstract_compiler__MType__c_name]))(var68) /* c_name on <var68:MType>*/;
4761 }
4762 if (varonce72) {
4763 var73 = varonce72;
4764 } else {
4765 var74 = ".name;";
4766 var75 = 6;
4767 var76 = string__NativeString__to_s_with_length(var74, var75);
4768 var73 = var76;
4769 varonce72 = var73;
4770 }
4771 var77 = NEW_array__Array(&type_array__Arraykernel__Object);
4772 { /* var77 = array_instance Array[Object] */
4773 var78 = 4;
4774 var79 = NEW_array__NativeArray(var78, &type_array__NativeArraykernel__Object);
4775 ((struct instance_array__NativeArray*)var79)->values[0] = (val*) var_res;
4776 ((struct instance_array__NativeArray*)var79)->values[1] = (val*) var64;
4777 ((struct instance_array__NativeArray*)var79)->values[2] = (val*) var71;
4778 ((struct instance_array__NativeArray*)var79)->values[3] = (val*) var73;
4779 {
4780 ((void (*)(val*, val*, long))(var77->class->vft[COLOR_array__Array__with_native]))(var77, var79, var78) /* with_native on <var77:Array[Object]>*/;
4781 }
4782 }
4783 {
4784 var80 = ((val* (*)(val*))(var77->class->vft[COLOR_string__Object__to_s]))(var77) /* to_s on <var77:Array[Object]>*/;
4785 }
4786 {
4787 abstract_compiler__AbstractCompilerVisitor__add(self, var80); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
4788 }
4789 }
4790 var = var_res;
4791 goto RET_LABEL;
4792 RET_LABEL:;
4793 return var;
4794 }
4795 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: Object, RuntimeVariable): String */
4796 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
4797 val* var /* : String */;
4798 val* var1 /* : String */;
4799 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(self, p0);
4800 var = var1;
4801 RET_LABEL:;
4802 return var;
4803 }
4804 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#native_array_instance for (self: SeparateErasureCompilerVisitor, MType, RuntimeVariable): RuntimeVariable */
4805 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__native_array_instance(val* self, val* p0, val* p1) {
4806 val* var /* : RuntimeVariable */;
4807 val* var_elttype /* var elttype: MType */;
4808 val* var_length /* var length: RuntimeVariable */;
4809 static val* varonce;
4810 val* var1 /* : String */;
4811 char* var2 /* : NativeString */;
4812 long var3 /* : Int */;
4813 val* var4 /* : FlatString */;
4814 val* var5 /* : MClass */;
4815 val* var_nclass /* var nclass: MClass */;
4816 val* var6 /* : Array[MType] */;
4817 long var7 /* : Int */;
4818 val* var_ /* var : Array[MType] */;
4819 val* var8 /* : MClassType */;
4820 val* var_mtype /* var mtype: MClassType */;
4821 val* var9 /* : RuntimeVariable */;
4822 val* var_res /* var res: RuntimeVariable */;
4823 short int var10 /* : Bool */;
4824 static val* varonce12;
4825 val* var13 /* : String */;
4826 char* var14 /* : NativeString */;
4827 long var15 /* : Int */;
4828 val* var16 /* : FlatString */;
4829 val* var17 /* : String */;
4830 val* var18 /* : Array[Object] */;
4831 long var19 /* : Int */;
4832 val* var20 /* : NativeArray[Object] */;
4833 val* var21 /* : String */;
4834 static val* varonce22;
4835 val* var23 /* : String */;
4836 char* var24 /* : NativeString */;
4837 long var25 /* : Int */;
4838 val* var26 /* : FlatString */;
4839 val* var27 /* : String */;
4840 static val* varonce28;
4841 val* var29 /* : String */;
4842 char* var30 /* : NativeString */;
4843 long var31 /* : Int */;
4844 val* var32 /* : FlatString */;
4845 static val* varonce33;
4846 val* var34 /* : String */;
4847 char* var35 /* : NativeString */;
4848 long var36 /* : Int */;
4849 val* var37 /* : FlatString */;
4850 val* var38 /* : Array[Object] */;
4851 long var39 /* : Int */;
4852 val* var40 /* : NativeArray[Object] */;
4853 val* var41 /* : String */;
4854 var_elttype = p0;
4855 var_length = p1;
4856 if (varonce) {
4857 var1 = varonce;
4858 } else {
4859 var2 = "NativeArray";
4860 var3 = 11;
4861 var4 = string__NativeString__to_s_with_length(var2, var3);
4862 var1 = var4;
4863 varonce = var1;
4864 }
4865 {
4866 var5 = abstract_compiler__AbstractCompilerVisitor__get_class(self, var1);
4867 }
4868 var_nclass = var5;
4869 var6 = NEW_array__Array(&type_array__Arraymodel__MType);
4870 var7 = 1;
4871 {
4872 array__Array__with_capacity(var6, var7); /* Direct call array#Array#with_capacity on <var6:Array[MType]>*/
4873 }
4874 var_ = var6;
4875 {
4876 array__AbstractArray__push(var_, var_elttype); /* Direct call array#AbstractArray#push on <var_:Array[MType]>*/
4877 }
4878 {
4879 var8 = model__MClass__get_mtype(var_nclass, var_);
4880 }
4881 var_mtype = var8;
4882 {
4883 var9 = abstract_compiler__AbstractCompilerVisitor__new_var(self, var_mtype);
4884 }
4885 var_res = var9;
4886 var10 = 1;
4887 {
4888 { /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res,var10) on <var_res:RuntimeVariable> */
4889 var_res->attrs[COLOR_abstract_compiler__RuntimeVariable___is_exact].s = var10; /* _is_exact on <var_res:RuntimeVariable> */
4890 RET_LABEL11:(void)0;
4891 }
4892 }
4893 if (varonce12) {
4894 var13 = varonce12;
4895 } else {
4896 var14 = "NEW_";
4897 var15 = 4;
4898 var16 = string__NativeString__to_s_with_length(var14, var15);
4899 var13 = var16;
4900 varonce12 = var13;
4901 }
4902 {
4903 var17 = abstract_compiler__MClass__c_name(var_nclass);
4904 }
4905 var18 = NEW_array__Array(&type_array__Arraykernel__Object);
4906 { /* var18 = array_instance Array[Object] */
4907 var19 = 2;
4908 var20 = NEW_array__NativeArray(var19, &type_array__NativeArraykernel__Object);
4909 ((struct instance_array__NativeArray*)var20)->values[0] = (val*) var13;
4910 ((struct instance_array__NativeArray*)var20)->values[1] = (val*) var17;
4911 {
4912 ((void (*)(val*, val*, long))(var18->class->vft[COLOR_array__Array__with_native]))(var18, var20, var19) /* with_native on <var18:Array[Object]>*/;
4913 }
4914 }
4915 {
4916 var21 = ((val* (*)(val*))(var18->class->vft[COLOR_string__Object__to_s]))(var18) /* to_s on <var18:Array[Object]>*/;
4917 }
4918 {
4919 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var21); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
4920 }
4921 if (varonce22) {
4922 var23 = varonce22;
4923 } else {
4924 var24 = " = NEW_";
4925 var25 = 7;
4926 var26 = string__NativeString__to_s_with_length(var24, var25);
4927 var23 = var26;
4928 varonce22 = var23;
4929 }
4930 {
4931 var27 = abstract_compiler__MClass__c_name(var_nclass);
4932 }
4933 if (varonce28) {
4934 var29 = varonce28;
4935 } else {
4936 var30 = "(";
4937 var31 = 1;
4938 var32 = string__NativeString__to_s_with_length(var30, var31);
4939 var29 = var32;
4940 varonce28 = var29;
4941 }
4942 if (varonce33) {
4943 var34 = varonce33;
4944 } else {
4945 var35 = ");";
4946 var36 = 2;
4947 var37 = string__NativeString__to_s_with_length(var35, var36);
4948 var34 = var37;
4949 varonce33 = var34;
4950 }
4951 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
4952 { /* var38 = array_instance Array[Object] */
4953 var39 = 6;
4954 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
4955 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var_res;
4956 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var23;
4957 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var27;
4958 ((struct instance_array__NativeArray*)var40)->values[3] = (val*) var29;
4959 ((struct instance_array__NativeArray*)var40)->values[4] = (val*) var_length;
4960 ((struct instance_array__NativeArray*)var40)->values[5] = (val*) var34;
4961 {
4962 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
4963 }
4964 }
4965 {
4966 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
4967 }
4968 {
4969 abstract_compiler__AbstractCompilerVisitor__add(self, var41); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
4970 }
4971 var = var_res;
4972 goto RET_LABEL;
4973 RET_LABEL:;
4974 return var;
4975 }
4976 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#native_array_instance for (self: Object, MType, RuntimeVariable): RuntimeVariable */
4977 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__native_array_instance(val* self, val* p0, val* p1) {
4978 val* var /* : RuntimeVariable */;
4979 val* var1 /* : RuntimeVariable */;
4980 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__native_array_instance(self, p0, p1);
4981 var = var1;
4982 RET_LABEL:;
4983 return var;
4984 }
4985 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: SeparateErasureCompilerVisitor, MType, Array[RuntimeVariable]) */
4986 void separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
4987 val* var_ret_type /* var ret_type: MType */;
4988 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
4989 short int var /* : Bool */;
4990 int cltype;
4991 int idtype;
4992 const char* var_class_name;
4993 val* var_ret /* var ret: MClassType */;
4994 static val* varonce;
4995 val* var1 /* : String */;
4996 char* var2 /* : NativeString */;
4997 long var3 /* : Int */;
4998 val* var4 /* : FlatString */;
4999 val* var5 /* : MClass */;
5000 val* var7 /* : MClass */;
5001 val* var8 /* : String */;
5002 val* var9 /* : Array[Object] */;
5003 long var10 /* : Int */;
5004 val* var11 /* : NativeArray[Object] */;
5005 val* var12 /* : String */;
5006 static val* varonce13;
5007 val* var14 /* : String */;
5008 char* var15 /* : NativeString */;
5009 long var16 /* : Int */;
5010 val* var17 /* : FlatString */;
5011 val* var18 /* : MClass */;
5012 val* var20 /* : MClass */;
5013 val* var21 /* : String */;
5014 static val* varonce22;
5015 val* var23 /* : String */;
5016 char* var24 /* : NativeString */;
5017 long var25 /* : Int */;
5018 val* var26 /* : FlatString */;
5019 long var27 /* : Int */;
5020 val* var28 /* : nullable Object */;
5021 static val* varonce29;
5022 val* var30 /* : String */;
5023 char* var31 /* : NativeString */;
5024 long var32 /* : Int */;
5025 val* var33 /* : FlatString */;
5026 val* var34 /* : Array[Object] */;
5027 long var35 /* : Int */;
5028 val* var36 /* : NativeArray[Object] */;
5029 val* var37 /* : String */;
5030 val* var38 /* : RuntimeVariable */;
5031 var_ret_type = p0;
5032 var_arguments = p1;
5033 /* <var_ret_type:MType> isa MClassType */
5034 cltype = type_model__MClassType.color;
5035 idtype = type_model__MClassType.id;
5036 if(cltype >= var_ret_type->type->table_size) {
5037 var = 0;
5038 } else {
5039 var = var_ret_type->type->type_table[cltype] == idtype;
5040 }
5041 if (unlikely(!var)) {
5042 var_class_name = var_ret_type == NULL ? "null" : var_ret_type->type->name;
5043 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
5044 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 677);
5045 show_backtrace(1);
5046 }
5047 var_ret = var_ret_type;
5048 if (varonce) {
5049 var1 = varonce;
5050 } else {
5051 var2 = "NEW_";
5052 var3 = 4;
5053 var4 = string__NativeString__to_s_with_length(var2, var3);
5054 var1 = var4;
5055 varonce = var1;
5056 }
5057 {
5058 { /* Inline model#MClassType#mclass (var_ret) on <var_ret:MClassType> */
5059 var7 = var_ret->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_ret:MClassType> */
5060 if (unlikely(var7 == NULL)) {
5061 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
5062 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
5063 show_backtrace(1);
5064 }
5065 var5 = var7;
5066 RET_LABEL6:(void)0;
5067 }
5068 }
5069 {
5070 var8 = abstract_compiler__MClass__c_name(var5);
5071 }
5072 var9 = NEW_array__Array(&type_array__Arraykernel__Object);
5073 { /* var9 = array_instance Array[Object] */
5074 var10 = 2;
5075 var11 = NEW_array__NativeArray(var10, &type_array__NativeArraykernel__Object);
5076 ((struct instance_array__NativeArray*)var11)->values[0] = (val*) var1;
5077 ((struct instance_array__NativeArray*)var11)->values[1] = (val*) var8;
5078 {
5079 ((void (*)(val*, val*, long))(var9->class->vft[COLOR_array__Array__with_native]))(var9, var11, var10) /* with_native on <var9:Array[Object]>*/;
5080 }
5081 }
5082 {
5083 var12 = ((val* (*)(val*))(var9->class->vft[COLOR_string__Object__to_s]))(var9) /* to_s on <var9:Array[Object]>*/;
5084 }
5085 {
5086 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var12); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
5087 }
5088 if (varonce13) {
5089 var14 = varonce13;
5090 } else {
5091 var15 = "NEW_";
5092 var16 = 4;
5093 var17 = string__NativeString__to_s_with_length(var15, var16);
5094 var14 = var17;
5095 varonce13 = var14;
5096 }
5097 {
5098 { /* Inline model#MClassType#mclass (var_ret) on <var_ret:MClassType> */
5099 var20 = var_ret->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_ret:MClassType> */
5100 if (unlikely(var20 == NULL)) {
5101 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
5102 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
5103 show_backtrace(1);
5104 }
5105 var18 = var20;
5106 RET_LABEL19:(void)0;
5107 }
5108 }
5109 {
5110 var21 = abstract_compiler__MClass__c_name(var18);
5111 }
5112 if (varonce22) {
5113 var23 = varonce22;
5114 } else {
5115 var24 = "(";
5116 var25 = 1;
5117 var26 = string__NativeString__to_s_with_length(var24, var25);
5118 var23 = var26;
5119 varonce22 = var23;
5120 }
5121 var27 = 1;
5122 {
5123 var28 = array__Array___91d_93d(var_arguments, var27);
5124 }
5125 if (varonce29) {
5126 var30 = varonce29;
5127 } else {
5128 var31 = ")";
5129 var32 = 1;
5130 var33 = string__NativeString__to_s_with_length(var31, var32);
5131 var30 = var33;
5132 varonce29 = var30;
5133 }
5134 var34 = NEW_array__Array(&type_array__Arraykernel__Object);
5135 { /* var34 = array_instance Array[Object] */
5136 var35 = 5;
5137 var36 = NEW_array__NativeArray(var35, &type_array__NativeArraykernel__Object);
5138 ((struct instance_array__NativeArray*)var36)->values[0] = (val*) var14;
5139 ((struct instance_array__NativeArray*)var36)->values[1] = (val*) var21;
5140 ((struct instance_array__NativeArray*)var36)->values[2] = (val*) var23;
5141 ((struct instance_array__NativeArray*)var36)->values[3] = (val*) var28;
5142 ((struct instance_array__NativeArray*)var36)->values[4] = (val*) var30;
5143 {
5144 ((void (*)(val*, val*, long))(var34->class->vft[COLOR_array__Array__with_native]))(var34, var36, var35) /* with_native on <var34:Array[Object]>*/;
5145 }
5146 }
5147 {
5148 var37 = ((val* (*)(val*))(var34->class->vft[COLOR_string__Object__to_s]))(var34) /* to_s on <var34:Array[Object]>*/;
5149 }
5150 {
5151 var38 = abstract_compiler__AbstractCompilerVisitor__new_expr(self, var37, var_ret_type);
5152 }
5153 {
5154 abstract_compiler__AbstractCompilerVisitor__ret(self, var38); /* Direct call abstract_compiler#AbstractCompilerVisitor#ret on <self:SeparateErasureCompilerVisitor>*/
5155 }
5156 RET_LABEL:;
5157 }
5158 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: Object, MType, Array[RuntimeVariable]) */
5159 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
5160 separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(self, p0, p1); /* Direct call separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array on <self:Object(SeparateErasureCompilerVisitor)>*/
5161 RET_LABEL:;
5162 }