misc/jenkins: fix checklicense.sh
[nit.git] / c_src / separate_erasure_compiler.sep.1.c
1 #include "separate_erasure_compiler.sep.0.h"
2 /* method separate_erasure_compiler#ToolContext#opt_erasure for (self: ToolContext): OptionBool */
3 val* separate_erasure_compiler__ToolContext__opt_erasure(val* self) {
4 val* var /* : OptionBool */;
5 val* var1 /* : OptionBool */;
6 var1 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_erasure].val; /* _opt_erasure on <self:ToolContext> */
7 if (unlikely(var1 == NULL)) {
8 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_erasure");
9 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 22);
10 show_backtrace(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method separate_erasure_compiler#ToolContext#opt_erasure for (self: Object): OptionBool */
17 val* VIRTUAL_separate_erasure_compiler__ToolContext__opt_erasure(val* self) {
18 val* var /* : OptionBool */;
19 val* var1 /* : OptionBool */;
20 val* var3 /* : OptionBool */;
21 { /* Inline separate_erasure_compiler#ToolContext#opt_erasure (self) on <self:Object(ToolContext)> */
22 var3 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_erasure].val; /* _opt_erasure on <self:Object(ToolContext)> */
23 if (unlikely(var3 == NULL)) {
24 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_erasure");
25 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 22);
26 show_backtrace(1);
27 }
28 var1 = var3;
29 RET_LABEL2:(void)0;
30 }
31 var = var1;
32 RET_LABEL:;
33 return var;
34 }
35 /* method separate_erasure_compiler#ToolContext#opt_rta for (self: ToolContext): OptionBool */
36 val* separate_erasure_compiler__ToolContext__opt_rta(val* self) {
37 val* var /* : OptionBool */;
38 val* var1 /* : OptionBool */;
39 var1 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_rta].val; /* _opt_rta on <self:ToolContext> */
40 if (unlikely(var1 == NULL)) {
41 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_rta");
42 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 24);
43 show_backtrace(1);
44 }
45 var = var1;
46 RET_LABEL:;
47 return var;
48 }
49 /* method separate_erasure_compiler#ToolContext#opt_rta for (self: Object): OptionBool */
50 val* VIRTUAL_separate_erasure_compiler__ToolContext__opt_rta(val* self) {
51 val* var /* : OptionBool */;
52 val* var1 /* : OptionBool */;
53 val* var3 /* : OptionBool */;
54 { /* Inline separate_erasure_compiler#ToolContext#opt_rta (self) on <self:Object(ToolContext)> */
55 var3 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_rta].val; /* _opt_rta on <self:Object(ToolContext)> */
56 if (unlikely(var3 == NULL)) {
57 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_rta");
58 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 24);
59 show_backtrace(1);
60 }
61 var1 = var3;
62 RET_LABEL2:(void)0;
63 }
64 var = var1;
65 RET_LABEL:;
66 return var;
67 }
68 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast for (self: ToolContext): OptionBool */
69 val* separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast(val* self) {
70 val* var /* : OptionBool */;
71 val* var1 /* : OptionBool */;
72 var1 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <self:ToolContext> */
73 if (unlikely(var1 == NULL)) {
74 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
75 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 26);
76 show_backtrace(1);
77 }
78 var = var1;
79 RET_LABEL:;
80 return var;
81 }
82 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast for (self: Object): OptionBool */
83 val* VIRTUAL_separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast(val* self) {
84 val* var /* : OptionBool */;
85 val* var1 /* : OptionBool */;
86 val* var3 /* : OptionBool */;
87 { /* Inline separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast (self) on <self:Object(ToolContext)> */
88 var3 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <self:Object(ToolContext)> */
89 if (unlikely(var3 == NULL)) {
90 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
91 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 26);
92 show_backtrace(1);
93 }
94 var1 = var3;
95 RET_LABEL2:(void)0;
96 }
97 var = var1;
98 RET_LABEL:;
99 return var;
100 }
101 /* method separate_erasure_compiler#ToolContext#init for (self: ToolContext) */
102 void separate_erasure_compiler__ToolContext__init(val* self) {
103 val* var /* : OptionContext */;
104 val* var2 /* : OptionContext */;
105 val* var3 /* : OptionBool */;
106 val* var5 /* : OptionBool */;
107 val* var6 /* : OptionBool */;
108 val* var8 /* : OptionBool */;
109 val* var9 /* : OptionBool */;
110 val* var11 /* : OptionBool */;
111 val* var12 /* : Array[Option] */;
112 long var13 /* : Int */;
113 val* var14 /* : NativeArray[Option] */;
114 {
115 ((void (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__ToolContext__init]))(self) /* init on <self:ToolContext>*/;
116 }
117 {
118 { /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
119 var2 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
120 if (unlikely(var2 == NULL)) {
121 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
122 PRINT_ERROR(" (%s:%d)\n", "src/toolcontext.nit", 166);
123 show_backtrace(1);
124 }
125 var = var2;
126 RET_LABEL1:(void)0;
127 }
128 }
129 {
130 { /* Inline separate_erasure_compiler#ToolContext#opt_erasure (self) on <self:ToolContext> */
131 var5 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_erasure].val; /* _opt_erasure on <self:ToolContext> */
132 if (unlikely(var5 == NULL)) {
133 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_erasure");
134 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 22);
135 show_backtrace(1);
136 }
137 var3 = var5;
138 RET_LABEL4:(void)0;
139 }
140 }
141 {
142 { /* Inline separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast (self) on <self:ToolContext> */
143 var8 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <self:ToolContext> */
144 if (unlikely(var8 == NULL)) {
145 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
146 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 26);
147 show_backtrace(1);
148 }
149 var6 = var8;
150 RET_LABEL7:(void)0;
151 }
152 }
153 {
154 { /* Inline separate_erasure_compiler#ToolContext#opt_rta (self) on <self:ToolContext> */
155 var11 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_rta].val; /* _opt_rta on <self:ToolContext> */
156 if (unlikely(var11 == NULL)) {
157 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_rta");
158 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 24);
159 show_backtrace(1);
160 }
161 var9 = var11;
162 RET_LABEL10:(void)0;
163 }
164 }
165 var12 = NEW_array__Array(&type_array__Arrayopts__Option);
166 { /* var12 = array_instance Array[Option] */
167 var13 = 3;
168 var14 = NEW_array__NativeArray(var13, &type_array__NativeArrayopts__Option);
169 ((struct instance_array__NativeArray*)var14)->values[0] = (val*) var3;
170 ((struct instance_array__NativeArray*)var14)->values[1] = (val*) var6;
171 ((struct instance_array__NativeArray*)var14)->values[2] = (val*) var9;
172 {
173 ((void (*)(val*, val*, long))(var12->class->vft[COLOR_array__Array__with_native]))(var12, var14, var13) /* with_native on <var12:Array[Option]>*/;
174 }
175 }
176 {
177 opts__OptionContext__add_option(var, var12); /* Direct call opts#OptionContext#add_option on <var:OptionContext>*/
178 }
179 RET_LABEL:;
180 }
181 /* method separate_erasure_compiler#ToolContext#init for (self: Object) */
182 void VIRTUAL_separate_erasure_compiler__ToolContext__init(val* self) {
183 separate_erasure_compiler__ToolContext__init(self); /* Direct call separate_erasure_compiler#ToolContext#init on <self:Object(ToolContext)>*/
184 RET_LABEL:;
185 }
186 /* method separate_erasure_compiler#ErasureCompilerPhase#process_mainmodule for (self: ErasureCompilerPhase, MModule, SequenceRead[MModule]) */
187 void separate_erasure_compiler__ErasureCompilerPhase__process_mainmodule(val* self, val* p0, val* p1) {
188 val* var_mainmodule /* var mainmodule: MModule */;
189 val* var_given_mmodules /* var given_mmodules: SequenceRead[MModule] */;
190 val* var /* : ToolContext */;
191 val* var2 /* : ToolContext */;
192 val* var3 /* : OptionBool */;
193 val* var5 /* : OptionBool */;
194 val* var6 /* : nullable Object */;
195 val* var8 /* : nullable Object */;
196 short int var9 /* : Bool */;
197 short int var10 /* : Bool */;
198 val* var11 /* : ToolContext */;
199 val* var13 /* : ToolContext */;
200 val* var14 /* : ModelBuilder */;
201 val* var_modelbuilder /* var modelbuilder: ModelBuilder */;
202 val* var15 /* : null */;
203 val* var_analysis /* var analysis: nullable Object */;
204 val* var16 /* : ToolContext */;
205 val* var18 /* : ToolContext */;
206 val* var19 /* : OptionBool */;
207 val* var21 /* : OptionBool */;
208 val* var22 /* : nullable Object */;
209 val* var24 /* : nullable Object */;
210 short int var25 /* : Bool */;
211 val* var26 /* : RapidTypeAnalysis */;
212 var_mainmodule = p0;
213 var_given_mmodules = p1;
214 {
215 { /* Inline phase#Phase#toolcontext (self) on <self:ErasureCompilerPhase> */
216 var2 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:ErasureCompilerPhase> */
217 if (unlikely(var2 == NULL)) {
218 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
219 PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 145);
220 show_backtrace(1);
221 }
222 var = var2;
223 RET_LABEL1:(void)0;
224 }
225 }
226 {
227 { /* Inline separate_erasure_compiler#ToolContext#opt_erasure (var) on <var:ToolContext> */
228 var5 = var->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_erasure].val; /* _opt_erasure on <var:ToolContext> */
229 if (unlikely(var5 == NULL)) {
230 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_erasure");
231 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 22);
232 show_backtrace(1);
233 }
234 var3 = var5;
235 RET_LABEL4:(void)0;
236 }
237 }
238 {
239 { /* Inline opts#Option#value (var3) on <var3:OptionBool> */
240 var8 = var3->attrs[COLOR_opts__Option___value].val; /* _value on <var3:OptionBool> */
241 var6 = var8;
242 RET_LABEL7:(void)0;
243 }
244 }
245 var9 = ((struct instance_kernel__Bool*)var6)->value; /* autounbox from nullable Object to Bool */;
246 var10 = !var9;
247 if (var10){
248 goto RET_LABEL;
249 } else {
250 }
251 {
252 { /* Inline phase#Phase#toolcontext (self) on <self:ErasureCompilerPhase> */
253 var13 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:ErasureCompilerPhase> */
254 if (unlikely(var13 == NULL)) {
255 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
256 PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 145);
257 show_backtrace(1);
258 }
259 var11 = var13;
260 RET_LABEL12:(void)0;
261 }
262 }
263 {
264 var14 = modelbuilder__ToolContext__modelbuilder(var11);
265 }
266 var_modelbuilder = var14;
267 var15 = NULL;
268 var_analysis = var15;
269 {
270 { /* Inline phase#Phase#toolcontext (self) on <self:ErasureCompilerPhase> */
271 var18 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:ErasureCompilerPhase> */
272 if (unlikely(var18 == NULL)) {
273 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
274 PRINT_ERROR(" (%s:%d)\n", "src/phase.nit", 145);
275 show_backtrace(1);
276 }
277 var16 = var18;
278 RET_LABEL17:(void)0;
279 }
280 }
281 {
282 { /* Inline separate_erasure_compiler#ToolContext#opt_rta (var16) on <var16:ToolContext> */
283 var21 = var16->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_rta].val; /* _opt_rta on <var16:ToolContext> */
284 if (unlikely(var21 == NULL)) {
285 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_rta");
286 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 24);
287 show_backtrace(1);
288 }
289 var19 = var21;
290 RET_LABEL20:(void)0;
291 }
292 }
293 {
294 { /* Inline opts#Option#value (var19) on <var19:OptionBool> */
295 var24 = var19->attrs[COLOR_opts__Option___value].val; /* _value on <var19:OptionBool> */
296 var22 = var24;
297 RET_LABEL23:(void)0;
298 }
299 }
300 var25 = ((struct instance_kernel__Bool*)var22)->value; /* autounbox from nullable Object to Bool */;
301 if (var25){
302 {
303 var26 = rapid_type_analysis__ModelBuilder__do_rapid_type_analysis(var_modelbuilder, var_mainmodule);
304 }
305 var_analysis = var26;
306 } else {
307 }
308 {
309 separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(var_modelbuilder, var_mainmodule, var_analysis); /* Direct call separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler on <var_modelbuilder:ModelBuilder>*/
310 }
311 RET_LABEL:;
312 }
313 /* method separate_erasure_compiler#ErasureCompilerPhase#process_mainmodule for (self: Object, MModule, SequenceRead[MModule]) */
314 void VIRTUAL_separate_erasure_compiler__ErasureCompilerPhase__process_mainmodule(val* self, val* p0, val* p1) {
315 separate_erasure_compiler__ErasureCompilerPhase__process_mainmodule(self, p0, p1); /* Direct call separate_erasure_compiler#ErasureCompilerPhase#process_mainmodule on <self:Object(ErasureCompilerPhase)>*/
316 RET_LABEL:;
317 }
318 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: ModelBuilder, MModule, nullable RapidTypeAnalysis) */
319 void separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
320 val* var_mainmodule /* var mainmodule: MModule */;
321 val* var_runtime_type_analysis /* var runtime_type_analysis: nullable RapidTypeAnalysis */;
322 long var /* : Int */;
323 long var2 /* : Int */;
324 long var_time0 /* var time0: Int */;
325 val* var3 /* : ToolContext */;
326 val* var5 /* : ToolContext */;
327 static val* varonce;
328 val* var6 /* : String */;
329 char* var7 /* : NativeString */;
330 long var8 /* : Int */;
331 val* var9 /* : FlatString */;
332 long var10 /* : Int */;
333 val* var11 /* : SeparateErasureCompiler */;
334 val* var_compiler /* var compiler: SeparateErasureCompiler */;
335 val* var12 /* : ToolContext */;
336 val* var14 /* : ToolContext */;
337 static val* varonce15;
338 val* var16 /* : String */;
339 char* var17 /* : NativeString */;
340 long var18 /* : Int */;
341 val* var19 /* : FlatString */;
342 long var20 /* : Int */;
343 val* var21 /* : String */;
344 val* var23 /* : String */;
345 static val* varonce24;
346 val* var25 /* : String */;
347 char* var26 /* : NativeString */;
348 long var27 /* : Int */;
349 val* var28 /* : FlatString */;
350 val* var29 /* : Array[Object] */;
351 long var30 /* : Int */;
352 val* var31 /* : NativeArray[Object] */;
353 val* var32 /* : String */;
354 val* var33 /* : CodeFile */;
355 val* var34 /* : POSetElement[MModule] */;
356 val* var36 /* : POSetElement[MModule] */;
357 val* var37 /* : Collection[Object] */;
358 val* var38 /* : Iterator[nullable Object] */;
359 short int var39 /* : Bool */;
360 val* var40 /* : nullable Object */;
361 val* var_m /* var m: MModule */;
362 val* var41 /* : Array[MClass] */;
363 val* var43 /* : Array[MClass] */;
364 val* var44 /* : ArrayIterator[nullable Object] */;
365 short int var45 /* : Bool */;
366 val* var46 /* : nullable Object */;
367 val* var_mclass /* var mclass: MClass */;
368 val* var48 /* : Map[MVirtualTypeProp, Int] */;
369 val* var50 /* : Map[MVirtualTypeProp, Int] */;
370 val* var51 /* : String */;
371 val* var53 /* : String */;
372 static val* varonce54;
373 val* var55 /* : String */;
374 char* var56 /* : NativeString */;
375 long var57 /* : Int */;
376 val* var58 /* : FlatString */;
377 val* var59 /* : Array[Object] */;
378 long var60 /* : Int */;
379 val* var61 /* : NativeArray[Object] */;
380 val* var62 /* : String */;
381 val* var63 /* : CodeFile */;
382 val* var64 /* : POSetElement[MModule] */;
383 val* var66 /* : POSetElement[MModule] */;
384 val* var67 /* : Collection[Object] */;
385 val* var68 /* : Iterator[nullable Object] */;
386 short int var69 /* : Bool */;
387 val* var70 /* : nullable Object */;
388 val* var_m71 /* var m: MModule */;
389 val* var72 /* : ToolContext */;
390 val* var74 /* : ToolContext */;
391 static val* varonce75;
392 val* var76 /* : String */;
393 char* var77 /* : NativeString */;
394 long var78 /* : Int */;
395 val* var79 /* : FlatString */;
396 val* var80 /* : Array[Object] */;
397 long var81 /* : Int */;
398 val* var82 /* : NativeArray[Object] */;
399 val* var83 /* : String */;
400 long var84 /* : Int */;
401 val* var85 /* : String */;
402 val* var87 /* : String */;
403 static val* varonce88;
404 val* var89 /* : String */;
405 char* var90 /* : NativeString */;
406 long var91 /* : Int */;
407 val* var92 /* : FlatString */;
408 val* var93 /* : Array[Object] */;
409 long var94 /* : Int */;
410 val* var95 /* : NativeArray[Object] */;
411 val* var96 /* : String */;
412 val* var97 /* : CodeFile */;
413 long var99 /* : Int */;
414 long var101 /* : Int */;
415 long var_time1 /* var time1: Int */;
416 val* var102 /* : ToolContext */;
417 val* var104 /* : ToolContext */;
418 static val* varonce105;
419 val* var106 /* : String */;
420 char* var107 /* : NativeString */;
421 long var108 /* : Int */;
422 val* var109 /* : FlatString */;
423 long var110 /* : Int */;
424 short int var112 /* : Bool */;
425 int cltype;
426 int idtype;
427 const char* var_class_name;
428 long var113 /* : Int */;
429 static val* varonce114;
430 val* var115 /* : String */;
431 char* var116 /* : NativeString */;
432 long var117 /* : Int */;
433 val* var118 /* : FlatString */;
434 val* var119 /* : Array[Object] */;
435 long var120 /* : Int */;
436 val* var121 /* : NativeArray[Object] */;
437 val* var122 /* : Object */;
438 val* var123 /* : String */;
439 long var124 /* : Int */;
440 var_mainmodule = p0;
441 var_runtime_type_analysis = p1;
442 {
443 { /* Inline time#Object#get_time (self) on <self:ModelBuilder> */
444 var2 = kernel_Any_Any_get_time_0(self);
445 var = var2;
446 goto RET_LABEL1;
447 RET_LABEL1:(void)0;
448 }
449 }
450 var_time0 = var;
451 {
452 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
453 var5 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
454 if (unlikely(var5 == NULL)) {
455 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
456 PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
457 show_backtrace(1);
458 }
459 var3 = var5;
460 RET_LABEL4:(void)0;
461 }
462 }
463 if (varonce) {
464 var6 = varonce;
465 } else {
466 var7 = "*** GENERATING C ***";
467 var8 = 20;
468 var9 = string__NativeString__to_s_with_length(var7, var8);
469 var6 = var9;
470 varonce = var6;
471 }
472 var10 = 1;
473 {
474 toolcontext__ToolContext__info(var3, var6, var10); /* Direct call toolcontext#ToolContext#info on <var3:ToolContext>*/
475 }
476 var11 = NEW_separate_erasure_compiler__SeparateErasureCompiler(&type_separate_erasure_compiler__SeparateErasureCompiler);
477 {
478 separate_erasure_compiler__SeparateErasureCompiler__init(var11, var_mainmodule, self, var_runtime_type_analysis); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#init on <var11:SeparateErasureCompiler>*/
479 }
480 var_compiler = var11;
481 {
482 abstract_compiler__AbstractCompiler__compile_header(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_header on <var_compiler:SeparateErasureCompiler>*/
483 }
484 {
485 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
486 var14 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
487 if (unlikely(var14 == NULL)) {
488 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
489 PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
490 show_backtrace(1);
491 }
492 var12 = var14;
493 RET_LABEL13:(void)0;
494 }
495 }
496 if (varonce15) {
497 var16 = varonce15;
498 } else {
499 var17 = "Property coloring";
500 var18 = 17;
501 var19 = string__NativeString__to_s_with_length(var17, var18);
502 var16 = var19;
503 varonce15 = var16;
504 }
505 var20 = 2;
506 {
507 toolcontext__ToolContext__info(var12, var16, var20); /* Direct call toolcontext#ToolContext#info on <var12:ToolContext>*/
508 }
509 {
510 { /* Inline mmodule#MModule#name (var_mainmodule) on <var_mainmodule:MModule> */
511 var23 = var_mainmodule->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_mainmodule:MModule> */
512 if (unlikely(var23 == NULL)) {
513 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
514 PRINT_ERROR(" (%s:%d)\n", "src/model/mmodule.nit", 86);
515 show_backtrace(1);
516 }
517 var21 = var23;
518 RET_LABEL22:(void)0;
519 }
520 }
521 if (varonce24) {
522 var25 = varonce24;
523 } else {
524 var26 = ".tables";
525 var27 = 7;
526 var28 = string__NativeString__to_s_with_length(var26, var27);
527 var25 = var28;
528 varonce24 = var25;
529 }
530 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
531 { /* var29 = array_instance Array[Object] */
532 var30 = 2;
533 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
534 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var21;
535 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var25;
536 {
537 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
538 }
539 }
540 {
541 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
542 }
543 {
544 var33 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var32);
545 }
546 var33;
547 {
548 separate_compiler__SeparateCompiler__do_property_coloring(var_compiler); /* Direct call separate_compiler#SeparateCompiler#do_property_coloring on <var_compiler:SeparateErasureCompiler>*/
549 }
550 {
551 { /* Inline mmodule#MModule#in_importation (var_mainmodule) on <var_mainmodule:MModule> */
552 var36 = var_mainmodule->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var_mainmodule:MModule> */
553 if (unlikely(var36 == NULL)) {
554 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
555 PRINT_ERROR(" (%s:%d)\n", "src/model/mmodule.nit", 101);
556 show_backtrace(1);
557 }
558 var34 = var36;
559 RET_LABEL35:(void)0;
560 }
561 }
562 {
563 var37 = poset__POSetElement__greaters(var34);
564 }
565 {
566 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_collection__Collection__iterator]))(var37) /* iterator on <var37:Collection[Object](Collection[MModule])>*/;
567 }
568 for(;;) {
569 {
570 var39 = ((short int (*)(val*))(var38->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var38) /* is_ok on <var38:Iterator[nullable Object]>*/;
571 }
572 if(!var39) break;
573 {
574 var40 = ((val* (*)(val*))(var38->class->vft[COLOR_abstract_collection__Iterator__item]))(var38) /* item on <var38:Iterator[nullable Object]>*/;
575 }
576 var_m = var40;
577 {
578 { /* Inline model#MModule#intro_mclasses (var_m) on <var_m:MModule> */
579 var43 = var_m->attrs[COLOR_model__MModule___intro_mclasses].val; /* _intro_mclasses on <var_m:MModule> */
580 if (unlikely(var43 == NULL)) {
581 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclasses");
582 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 138);
583 show_backtrace(1);
584 }
585 var41 = var43;
586 RET_LABEL42:(void)0;
587 }
588 }
589 {
590 var44 = array__AbstractArrayRead__iterator(var41);
591 }
592 for(;;) {
593 {
594 var45 = array__ArrayIterator__is_ok(var44);
595 }
596 if(!var45) break;
597 {
598 var46 = array__ArrayIterator__item(var44);
599 }
600 var_mclass = var46;
601 {
602 separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(var_compiler, var_mclass); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c on <var_compiler:SeparateErasureCompiler>*/
603 }
604 CONTINUE_label: (void)0;
605 {
606 array__ArrayIterator__next(var44); /* Direct call array#ArrayIterator#next on <var44:ArrayIterator[nullable Object]>*/
607 }
608 }
609 BREAK_label: (void)0;
610 CONTINUE_label47: (void)0;
611 {
612 ((void (*)(val*))(var38->class->vft[COLOR_abstract_collection__Iterator__next]))(var38) /* next on <var38:Iterator[nullable Object]>*/;
613 }
614 }
615 BREAK_label47: (void)0;
616 {
617 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (var_compiler) on <var_compiler:SeparateErasureCompiler> */
618 var50 = var_compiler->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <var_compiler:SeparateErasureCompiler> */
619 if (unlikely(var50 == NULL)) {
620 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
621 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 97);
622 show_backtrace(1);
623 }
624 var48 = var50;
625 RET_LABEL49:(void)0;
626 }
627 }
628 {
629 separate_compiler__SeparateCompiler__compile_color_consts(var_compiler, var48); /* Direct call separate_compiler#SeparateCompiler#compile_color_consts on <var_compiler:SeparateErasureCompiler>*/
630 }
631 {
632 { /* Inline mmodule#MModule#name (var_mainmodule) on <var_mainmodule:MModule> */
633 var53 = var_mainmodule->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_mainmodule:MModule> */
634 if (unlikely(var53 == NULL)) {
635 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
636 PRINT_ERROR(" (%s:%d)\n", "src/model/mmodule.nit", 86);
637 show_backtrace(1);
638 }
639 var51 = var53;
640 RET_LABEL52:(void)0;
641 }
642 }
643 if (varonce54) {
644 var55 = varonce54;
645 } else {
646 var56 = ".main";
647 var57 = 5;
648 var58 = string__NativeString__to_s_with_length(var56, var57);
649 var55 = var58;
650 varonce54 = var55;
651 }
652 var59 = NEW_array__Array(&type_array__Arraykernel__Object);
653 { /* var59 = array_instance Array[Object] */
654 var60 = 2;
655 var61 = NEW_array__NativeArray(var60, &type_array__NativeArraykernel__Object);
656 ((struct instance_array__NativeArray*)var61)->values[0] = (val*) var51;
657 ((struct instance_array__NativeArray*)var61)->values[1] = (val*) var55;
658 {
659 ((void (*)(val*, val*, long))(var59->class->vft[COLOR_array__Array__with_native]))(var59, var61, var60) /* with_native on <var59:Array[Object]>*/;
660 }
661 }
662 {
663 var62 = ((val* (*)(val*))(var59->class->vft[COLOR_string__Object__to_s]))(var59) /* to_s on <var59:Array[Object]>*/;
664 }
665 {
666 var63 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var62);
667 }
668 var63;
669 {
670 abstract_compiler__AbstractCompiler__compile_nitni_global_ref_functions(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_nitni_global_ref_functions on <var_compiler:SeparateErasureCompiler>*/
671 }
672 {
673 abstract_compiler__AbstractCompiler__compile_main_function(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_main_function on <var_compiler:SeparateErasureCompiler>*/
674 }
675 {
676 { /* Inline mmodule#MModule#in_importation (var_mainmodule) on <var_mainmodule:MModule> */
677 var66 = var_mainmodule->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var_mainmodule:MModule> */
678 if (unlikely(var66 == NULL)) {
679 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
680 PRINT_ERROR(" (%s:%d)\n", "src/model/mmodule.nit", 101);
681 show_backtrace(1);
682 }
683 var64 = var66;
684 RET_LABEL65:(void)0;
685 }
686 }
687 {
688 var67 = poset__POSetElement__greaters(var64);
689 }
690 {
691 var68 = ((val* (*)(val*))(var67->class->vft[COLOR_abstract_collection__Collection__iterator]))(var67) /* iterator on <var67:Collection[Object](Collection[MModule])>*/;
692 }
693 for(;;) {
694 {
695 var69 = ((short int (*)(val*))(var68->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var68) /* is_ok on <var68:Iterator[nullable Object]>*/;
696 }
697 if(!var69) break;
698 {
699 var70 = ((val* (*)(val*))(var68->class->vft[COLOR_abstract_collection__Iterator__item]))(var68) /* item on <var68:Iterator[nullable Object]>*/;
700 }
701 var_m71 = var70;
702 {
703 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
704 var74 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
705 if (unlikely(var74 == NULL)) {
706 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
707 PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
708 show_backtrace(1);
709 }
710 var72 = var74;
711 RET_LABEL73:(void)0;
712 }
713 }
714 if (varonce75) {
715 var76 = varonce75;
716 } else {
717 var77 = "Generate C for module ";
718 var78 = 22;
719 var79 = string__NativeString__to_s_with_length(var77, var78);
720 var76 = var79;
721 varonce75 = var76;
722 }
723 var80 = NEW_array__Array(&type_array__Arraykernel__Object);
724 { /* var80 = array_instance Array[Object] */
725 var81 = 2;
726 var82 = NEW_array__NativeArray(var81, &type_array__NativeArraykernel__Object);
727 ((struct instance_array__NativeArray*)var82)->values[0] = (val*) var76;
728 ((struct instance_array__NativeArray*)var82)->values[1] = (val*) var_m71;
729 {
730 ((void (*)(val*, val*, long))(var80->class->vft[COLOR_array__Array__with_native]))(var80, var82, var81) /* with_native on <var80:Array[Object]>*/;
731 }
732 }
733 {
734 var83 = ((val* (*)(val*))(var80->class->vft[COLOR_string__Object__to_s]))(var80) /* to_s on <var80:Array[Object]>*/;
735 }
736 var84 = 2;
737 {
738 toolcontext__ToolContext__info(var72, var83, var84); /* Direct call toolcontext#ToolContext#info on <var72:ToolContext>*/
739 }
740 {
741 { /* Inline mmodule#MModule#name (var_m71) on <var_m71:MModule> */
742 var87 = var_m71->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_m71:MModule> */
743 if (unlikely(var87 == NULL)) {
744 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
745 PRINT_ERROR(" (%s:%d)\n", "src/model/mmodule.nit", 86);
746 show_backtrace(1);
747 }
748 var85 = var87;
749 RET_LABEL86:(void)0;
750 }
751 }
752 if (varonce88) {
753 var89 = varonce88;
754 } else {
755 var90 = ".sep";
756 var91 = 4;
757 var92 = string__NativeString__to_s_with_length(var90, var91);
758 var89 = var92;
759 varonce88 = var89;
760 }
761 var93 = NEW_array__Array(&type_array__Arraykernel__Object);
762 { /* var93 = array_instance Array[Object] */
763 var94 = 2;
764 var95 = NEW_array__NativeArray(var94, &type_array__NativeArraykernel__Object);
765 ((struct instance_array__NativeArray*)var95)->values[0] = (val*) var85;
766 ((struct instance_array__NativeArray*)var95)->values[1] = (val*) var89;
767 {
768 ((void (*)(val*, val*, long))(var93->class->vft[COLOR_array__Array__with_native]))(var93, var95, var94) /* with_native on <var93:Array[Object]>*/;
769 }
770 }
771 {
772 var96 = ((val* (*)(val*))(var93->class->vft[COLOR_string__Object__to_s]))(var93) /* to_s on <var93:Array[Object]>*/;
773 }
774 {
775 var97 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var96);
776 }
777 var97;
778 {
779 separate_compiler__SeparateCompiler__compile_module_to_c(var_compiler, var_m71); /* Direct call separate_compiler#SeparateCompiler#compile_module_to_c on <var_compiler:SeparateErasureCompiler>*/
780 }
781 CONTINUE_label98: (void)0;
782 {
783 ((void (*)(val*))(var68->class->vft[COLOR_abstract_collection__Iterator__next]))(var68) /* next on <var68:Iterator[nullable Object]>*/;
784 }
785 }
786 BREAK_label98: (void)0;
787 {
788 separate_compiler__SeparateCompiler__display_stats(var_compiler); /* Direct call separate_compiler#SeparateCompiler#display_stats on <var_compiler:SeparateErasureCompiler>*/
789 }
790 {
791 { /* Inline time#Object#get_time (self) on <self:ModelBuilder> */
792 var101 = kernel_Any_Any_get_time_0(self);
793 var99 = var101;
794 goto RET_LABEL100;
795 RET_LABEL100:(void)0;
796 }
797 }
798 var_time1 = var99;
799 {
800 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
801 var104 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
802 if (unlikely(var104 == NULL)) {
803 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
804 PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
805 show_backtrace(1);
806 }
807 var102 = var104;
808 RET_LABEL103:(void)0;
809 }
810 }
811 if (varonce105) {
812 var106 = varonce105;
813 } else {
814 var107 = "*** END GENERATING C: ";
815 var108 = 22;
816 var109 = string__NativeString__to_s_with_length(var107, var108);
817 var106 = var109;
818 varonce105 = var106;
819 }
820 {
821 { /* Inline kernel#Int#- (var_time1,var_time0) on <var_time1:Int> */
822 /* Covariant cast for argument 0 (i) <var_time0:Int> isa OTHER */
823 /* <var_time0:Int> isa OTHER */
824 var112 = 1; /* easy <var_time0:Int> isa OTHER*/
825 if (unlikely(!var112)) {
826 var_class_name = type_kernel__Int.name;
827 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
828 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
829 show_backtrace(1);
830 }
831 var113 = var_time1 - var_time0;
832 var110 = var113;
833 goto RET_LABEL111;
834 RET_LABEL111:(void)0;
835 }
836 }
837 if (varonce114) {
838 var115 = varonce114;
839 } else {
840 var116 = " ***";
841 var117 = 4;
842 var118 = string__NativeString__to_s_with_length(var116, var117);
843 var115 = var118;
844 varonce114 = var115;
845 }
846 var119 = NEW_array__Array(&type_array__Arraykernel__Object);
847 { /* var119 = array_instance Array[Object] */
848 var120 = 3;
849 var121 = NEW_array__NativeArray(var120, &type_array__NativeArraykernel__Object);
850 ((struct instance_array__NativeArray*)var121)->values[0] = (val*) var106;
851 var122 = BOX_kernel__Int(var110); /* autobox from Int to Object */
852 ((struct instance_array__NativeArray*)var121)->values[1] = (val*) var122;
853 ((struct instance_array__NativeArray*)var121)->values[2] = (val*) var115;
854 {
855 ((void (*)(val*, val*, long))(var119->class->vft[COLOR_array__Array__with_native]))(var119, var121, var120) /* with_native on <var119:Array[Object]>*/;
856 }
857 }
858 {
859 var123 = ((val* (*)(val*))(var119->class->vft[COLOR_string__Object__to_s]))(var119) /* to_s on <var119:Array[Object]>*/;
860 }
861 var124 = 2;
862 {
863 toolcontext__ToolContext__info(var102, var123, var124); /* Direct call toolcontext#ToolContext#info on <var102:ToolContext>*/
864 }
865 {
866 abstract_compiler__ModelBuilder__write_and_make(self, var_compiler); /* Direct call abstract_compiler#ModelBuilder#write_and_make on <self:ModelBuilder>*/
867 }
868 RET_LABEL:;
869 }
870 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: Object, MModule, nullable RapidTypeAnalysis) */
871 void VIRTUAL_separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
872 separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(self, p0, p1); /* Direct call separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler on <self:Object(ModelBuilder)>*/
873 RET_LABEL:;
874 }
875 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids for (self: SeparateErasureCompiler): Map[MClass, Int] */
876 val* separate_erasure_compiler__SeparateErasureCompiler__class_ids(val* self) {
877 val* var /* : Map[MClass, Int] */;
878 val* var1 /* : Map[MClass, Int] */;
879 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:SeparateErasureCompiler> */
880 if (unlikely(var1 == NULL)) {
881 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
882 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 95);
883 show_backtrace(1);
884 }
885 var = var1;
886 RET_LABEL:;
887 return var;
888 }
889 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids for (self: Object): Map[MClass, Int] */
890 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_ids(val* self) {
891 val* var /* : Map[MClass, Int] */;
892 val* var1 /* : Map[MClass, Int] */;
893 val* var3 /* : Map[MClass, Int] */;
894 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids (self) on <self:Object(SeparateErasureCompiler)> */
895 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:Object(SeparateErasureCompiler)> */
896 if (unlikely(var3 == NULL)) {
897 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
898 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 95);
899 show_backtrace(1);
900 }
901 var1 = var3;
902 RET_LABEL2:(void)0;
903 }
904 var = var1;
905 RET_LABEL:;
906 return var;
907 }
908 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids= for (self: SeparateErasureCompiler, Map[MClass, Int]) */
909 void separate_erasure_compiler__SeparateErasureCompiler__class_ids_61d(val* self, val* p0) {
910 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val = p0; /* _class_ids on <self:SeparateErasureCompiler> */
911 RET_LABEL:;
912 }
913 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids= for (self: Object, Map[MClass, Int]) */
914 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_ids_61d(val* self, val* p0) {
915 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids= (self,p0) on <self:Object(SeparateErasureCompiler)> */
916 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val = p0; /* _class_ids on <self:Object(SeparateErasureCompiler)> */
917 RET_LABEL1:(void)0;
918 }
919 RET_LABEL:;
920 }
921 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors for (self: SeparateErasureCompiler): Map[MClass, Int] */
922 val* separate_erasure_compiler__SeparateErasureCompiler__class_colors(val* self) {
923 val* var /* : Map[MClass, Int] */;
924 val* var1 /* : Map[MClass, Int] */;
925 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
926 if (unlikely(var1 == NULL)) {
927 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
928 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 96);
929 show_backtrace(1);
930 }
931 var = var1;
932 RET_LABEL:;
933 return var;
934 }
935 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors for (self: Object): Map[MClass, Int] */
936 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_colors(val* self) {
937 val* var /* : Map[MClass, Int] */;
938 val* var1 /* : Map[MClass, Int] */;
939 val* var3 /* : Map[MClass, Int] */;
940 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors (self) on <self:Object(SeparateErasureCompiler)> */
941 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:Object(SeparateErasureCompiler)> */
942 if (unlikely(var3 == NULL)) {
943 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
944 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 96);
945 show_backtrace(1);
946 }
947 var1 = var3;
948 RET_LABEL2:(void)0;
949 }
950 var = var1;
951 RET_LABEL:;
952 return var;
953 }
954 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors= for (self: SeparateErasureCompiler, Map[MClass, Int]) */
955 void separate_erasure_compiler__SeparateErasureCompiler__class_colors_61d(val* self, val* p0) {
956 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val = p0; /* _class_colors on <self:SeparateErasureCompiler> */
957 RET_LABEL:;
958 }
959 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors= for (self: Object, Map[MClass, Int]) */
960 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_colors_61d(val* self, val* p0) {
961 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors= (self,p0) on <self:Object(SeparateErasureCompiler)> */
962 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val = p0; /* _class_colors on <self:Object(SeparateErasureCompiler)> */
963 RET_LABEL1:(void)0;
964 }
965 RET_LABEL:;
966 }
967 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors for (self: SeparateErasureCompiler): Map[MVirtualTypeProp, Int] */
968 val* separate_erasure_compiler__SeparateErasureCompiler__vt_colors(val* self) {
969 val* var /* : Map[MVirtualTypeProp, Int] */;
970 val* var1 /* : Map[MVirtualTypeProp, Int] */;
971 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
972 if (unlikely(var1 == NULL)) {
973 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
974 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 97);
975 show_backtrace(1);
976 }
977 var = var1;
978 RET_LABEL:;
979 return var;
980 }
981 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors for (self: Object): Map[MVirtualTypeProp, Int] */
982 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_colors(val* self) {
983 val* var /* : Map[MVirtualTypeProp, Int] */;
984 val* var1 /* : Map[MVirtualTypeProp, Int] */;
985 val* var3 /* : Map[MVirtualTypeProp, Int] */;
986 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:Object(SeparateErasureCompiler)> */
987 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:Object(SeparateErasureCompiler)> */
988 if (unlikely(var3 == NULL)) {
989 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
990 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 97);
991 show_backtrace(1);
992 }
993 var1 = var3;
994 RET_LABEL2:(void)0;
995 }
996 var = var1;
997 RET_LABEL:;
998 return var;
999 }
1000 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors= for (self: SeparateErasureCompiler, Map[MVirtualTypeProp, Int]) */
1001 void separate_erasure_compiler__SeparateErasureCompiler__vt_colors_61d(val* self, val* p0) {
1002 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val = p0; /* _vt_colors on <self:SeparateErasureCompiler> */
1003 RET_LABEL:;
1004 }
1005 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors= for (self: Object, Map[MVirtualTypeProp, Int]) */
1006 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_colors_61d(val* self, val* p0) {
1007 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors= (self,p0) on <self:Object(SeparateErasureCompiler)> */
1008 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val = p0; /* _vt_colors on <self:Object(SeparateErasureCompiler)> */
1009 RET_LABEL1:(void)0;
1010 }
1011 RET_LABEL:;
1012 }
1013 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: SeparateErasureCompiler, MModule, ModelBuilder, nullable RapidTypeAnalysis) */
1014 void separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
1015 val* var_mainmodule /* var mainmodule: MModule */;
1016 val* var_mmbuilder /* var mmbuilder: ModelBuilder */;
1017 val* var_runtime_type_analysis /* var runtime_type_analysis: nullable RapidTypeAnalysis */;
1018 val* var /* : POSet[MClass] */;
1019 val* var_poset /* var poset: POSet[MClass] */;
1020 val* var1 /* : HashSet[MClass] */;
1021 val* var_mclasses /* var mclasses: HashSet[MClass] */;
1022 val* var2 /* : POSetColorer[MClass] */;
1023 val* var_colorer /* var colorer: POSetColorer[MClass] */;
1024 val* var4 /* : Map[Object, Int] */;
1025 val* var6 /* : Map[Object, Int] */;
1026 val* var8 /* : Map[MClass, Array[nullable MClass]] */;
1027 val* var10 /* : HashMap[MClass, Set[MVirtualTypeProp]] */;
1028 val* var_vts /* var vts: HashMap[MClass, Set[MVirtualTypeProp]] */;
1029 val* var11 /* : Iterator[Object] */;
1030 short int var12 /* : Bool */;
1031 val* var13 /* : nullable Object */;
1032 val* var_mclass /* var mclass: MClass */;
1033 val* var14 /* : HashSet[MVirtualTypeProp] */;
1034 val* var15 /* : MModule */;
1035 val* var17 /* : MModule */;
1036 val* var18 /* : Set[MProperty] */;
1037 val* var19 /* : Iterator[nullable Object] */;
1038 short int var20 /* : Bool */;
1039 val* var21 /* : nullable Object */;
1040 val* var_mprop /* var mprop: MProperty */;
1041 short int var22 /* : Bool */;
1042 int cltype;
1043 int idtype;
1044 val* var23 /* : nullable Object */;
1045 val* var25 /* : POSetBucketsColorer[MClass, MVirtualTypeProp] */;
1046 val* var26 /* : Map[Object, Set[Object]] */;
1047 val* var_vt_colorer /* var vt_colorer: POSetBucketsColorer[MClass, MVirtualTypeProp] */;
1048 val* var27 /* : Map[Object, Int] */;
1049 val* var29 /* : Map[MClass, Array[nullable MPropDef]] */;
1050 var_mainmodule = p0;
1051 var_mmbuilder = p1;
1052 var_runtime_type_analysis = p2;
1053 {
1054 separate_compiler__SeparateCompiler__init(self, p0, p1, p2); /* Direct call separate_compiler#SeparateCompiler#init on <self:SeparateErasureCompiler>*/
1055 }
1056 {
1057 var = model__MModule__flatten_mclass_hierarchy(var_mainmodule);
1058 }
1059 var_poset = var;
1060 var1 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
1061 {
1062 hash_collection__HashSet__from(var1, var_poset); /* Direct call hash_collection#HashSet#from on <var1:HashSet[MClass]>*/
1063 }
1064 var_mclasses = var1;
1065 var2 = NEW_coloring__POSetColorer(&type_coloring__POSetColorermodel__MClass);
1066 {
1067 { /* Inline coloring#POSetColorer#init (var2) on <var2:POSetColorer[MClass]> */
1068 RET_LABEL3:(void)0;
1069 }
1070 }
1071 var_colorer = var2;
1072 {
1073 coloring__POSetColorer__colorize(var_colorer, var_poset); /* Direct call coloring#POSetColorer#colorize on <var_colorer:POSetColorer[MClass]>*/
1074 }
1075 {
1076 var4 = coloring__POSetColorer__ids(var_colorer);
1077 }
1078 {
1079 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids= (self,var4) on <self:SeparateErasureCompiler> */
1080 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val = var4; /* _class_ids on <self:SeparateErasureCompiler> */
1081 RET_LABEL5:(void)0;
1082 }
1083 }
1084 {
1085 var6 = coloring__POSetColorer__colors(var_colorer);
1086 }
1087 {
1088 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors= (self,var6) on <self:SeparateErasureCompiler> */
1089 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val = var6; /* _class_colors on <self:SeparateErasureCompiler> */
1090 RET_LABEL7:(void)0;
1091 }
1092 }
1093 {
1094 var8 = separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(self, var_mclasses);
1095 }
1096 {
1097 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables= (self,var8) on <self:SeparateErasureCompiler> */
1098 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val = var8; /* _class_tables on <self:SeparateErasureCompiler> */
1099 RET_LABEL9:(void)0;
1100 }
1101 }
1102 var10 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setmodel__MVirtualTypeProp);
1103 {
1104 hash_collection__HashMap__init(var10); /* Direct call hash_collection#HashMap#init on <var10:HashMap[MClass, Set[MVirtualTypeProp]]>*/
1105 }
1106 var_vts = var10;
1107 {
1108 var11 = hash_collection__HashSet__iterator(var_mclasses);
1109 }
1110 for(;;) {
1111 {
1112 var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var11) /* is_ok on <var11:Iterator[Object]>*/;
1113 }
1114 if(!var12) break;
1115 {
1116 var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__item]))(var11) /* item on <var11:Iterator[Object]>*/;
1117 }
1118 var_mclass = var13;
1119 var14 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MVirtualTypeProp);
1120 {
1121 hash_collection__HashSet__init(var14); /* Direct call hash_collection#HashSet#init on <var14:HashSet[MVirtualTypeProp]>*/
1122 }
1123 {
1124 hash_collection__HashMap___91d_93d_61d(var_vts, var_mclass, var14); /* Direct call hash_collection#HashMap#[]= on <var_vts:HashMap[MClass, Set[MVirtualTypeProp]]>*/
1125 }
1126 {
1127 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1128 var17 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1129 if (unlikely(var17 == NULL)) {
1130 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1131 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
1132 show_backtrace(1);
1133 }
1134 var15 = var17;
1135 RET_LABEL16:(void)0;
1136 }
1137 }
1138 {
1139 var18 = abstract_compiler__MModule__properties(var15, var_mclass);
1140 }
1141 {
1142 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_abstract_collection__Collection__iterator]))(var18) /* iterator on <var18:Set[MProperty]>*/;
1143 }
1144 for(;;) {
1145 {
1146 var20 = ((short int (*)(val*))(var19->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var19) /* is_ok on <var19:Iterator[nullable Object]>*/;
1147 }
1148 if(!var20) break;
1149 {
1150 var21 = ((val* (*)(val*))(var19->class->vft[COLOR_abstract_collection__Iterator__item]))(var19) /* item on <var19:Iterator[nullable Object]>*/;
1151 }
1152 var_mprop = var21;
1153 /* <var_mprop:MProperty> isa MVirtualTypeProp */
1154 cltype = type_model__MVirtualTypeProp.color;
1155 idtype = type_model__MVirtualTypeProp.id;
1156 if(cltype >= var_mprop->type->table_size) {
1157 var22 = 0;
1158 } else {
1159 var22 = var_mprop->type->type_table[cltype] == idtype;
1160 }
1161 if (var22){
1162 {
1163 var23 = hash_collection__HashMap___91d_93d(var_vts, var_mclass);
1164 }
1165 {
1166 ((void (*)(val*, val*))(var23->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var23, var_mprop) /* add on <var23:nullable Object(Set[MVirtualTypeProp])>*/;
1167 }
1168 } else {
1169 }
1170 CONTINUE_label: (void)0;
1171 {
1172 ((void (*)(val*))(var19->class->vft[COLOR_abstract_collection__Iterator__next]))(var19) /* next on <var19:Iterator[nullable Object]>*/;
1173 }
1174 }
1175 BREAK_label: (void)0;
1176 CONTINUE_label24: (void)0;
1177 {
1178 ((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__next]))(var11) /* next on <var11:Iterator[Object]>*/;
1179 }
1180 }
1181 BREAK_label24: (void)0;
1182 var25 = NEW_coloring__POSetBucketsColorer(&type_coloring__POSetBucketsColorermodel__MClassmodel__MVirtualTypeProp);
1183 {
1184 var26 = coloring__POSetColorer__conflicts(var_colorer);
1185 }
1186 {
1187 coloring__POSetBucketsColorer__init(var25, var_poset, var26); /* Direct call coloring#POSetBucketsColorer#init on <var25:POSetBucketsColorer[MClass, MVirtualTypeProp]>*/
1188 }
1189 var_vt_colorer = var25;
1190 {
1191 var27 = coloring__POSetBucketsColorer__colorize(var_vt_colorer, var_vts);
1192 }
1193 {
1194 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors= (self,var27) on <self:SeparateErasureCompiler> */
1195 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val = var27; /* _vt_colors on <self:SeparateErasureCompiler> */
1196 RET_LABEL28:(void)0;
1197 }
1198 }
1199 {
1200 var29 = separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(self, var_mclasses);
1201 }
1202 {
1203 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables= (self,var29) on <self:SeparateErasureCompiler> */
1204 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val = var29; /* _vt_tables on <self:SeparateErasureCompiler> */
1205 RET_LABEL30:(void)0;
1206 }
1207 }
1208 RET_LABEL:;
1209 }
1210 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: Object, MModule, ModelBuilder, nullable RapidTypeAnalysis) */
1211 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
1212 separate_erasure_compiler__SeparateErasureCompiler__init(self, p0, p1, p2); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#init on <self:Object(SeparateErasureCompiler)>*/
1213 RET_LABEL:;
1214 }
1215 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
1216 val* separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0) {
1217 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
1218 val* var_mclasses /* var mclasses: Set[MClass] */;
1219 val* var1 /* : HashMap[MClass, Array[nullable MPropDef]] */;
1220 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
1221 val* var2 /* : Iterator[nullable Object] */;
1222 short int var3 /* : Bool */;
1223 val* var4 /* : nullable Object */;
1224 val* var_mclass /* var mclass: MClass */;
1225 val* var5 /* : Array[nullable MPropDef] */;
1226 val* var_table /* var table: Array[nullable MPropDef] */;
1227 val* var6 /* : Array[MClass] */;
1228 val* var_parents /* var parents: Array[MClass] */;
1229 val* var7 /* : MModule */;
1230 val* var9 /* : MModule */;
1231 val* var10 /* : POSet[MClass] */;
1232 short int var11 /* : Bool */;
1233 val* var12 /* : MModule */;
1234 val* var14 /* : MModule */;
1235 val* var15 /* : POSetElement[MClass] */;
1236 val* var16 /* : Collection[Object] */;
1237 val* var17 /* : Array[nullable Object] */;
1238 val* var18 /* : MModule */;
1239 val* var20 /* : MModule */;
1240 val* var21 /* : ArrayIterator[nullable Object] */;
1241 short int var22 /* : Bool */;
1242 val* var23 /* : nullable Object */;
1243 val* var_parent /* var parent: MClass */;
1244 short int var24 /* : Bool */;
1245 short int var25 /* : Bool */;
1246 val* var_other /* var other: nullable Object */;
1247 short int var27 /* : Bool */;
1248 short int var29 /* : Bool */;
1249 val* var30 /* : MModule */;
1250 val* var32 /* : MModule */;
1251 val* var33 /* : Set[MProperty] */;
1252 val* var34 /* : Iterator[nullable Object] */;
1253 short int var35 /* : Bool */;
1254 val* var36 /* : nullable Object */;
1255 val* var_mproperty /* var mproperty: MProperty */;
1256 short int var37 /* : Bool */;
1257 int cltype;
1258 int idtype;
1259 short int var38 /* : Bool */;
1260 val* var40 /* : Map[MVirtualTypeProp, Int] */;
1261 val* var42 /* : Map[MVirtualTypeProp, Int] */;
1262 val* var43 /* : nullable Object */;
1263 long var44 /* : Int */;
1264 long var_color /* var color: Int */;
1265 long var45 /* : Int */;
1266 short int var46 /* : Bool */;
1267 short int var48 /* : Bool */;
1268 int cltype49;
1269 int idtype50;
1270 const char* var_class_name;
1271 short int var51 /* : Bool */;
1272 val* var52 /* : Range[Int] */;
1273 long var53 /* : Int */;
1274 val* var54 /* : Discrete */;
1275 val* var55 /* : Discrete */;
1276 val* var56 /* : Iterator[Discrete] */;
1277 short int var57 /* : Bool */;
1278 val* var58 /* : nullable Object */;
1279 long var_i /* var i: Int */;
1280 long var59 /* : Int */;
1281 val* var60 /* : null */;
1282 val* var62 /* : Array[MPropDef] */;
1283 val* var64 /* : Array[MPropDef] */;
1284 val* var65 /* : ArrayIterator[nullable Object] */;
1285 short int var66 /* : Bool */;
1286 val* var67 /* : nullable Object */;
1287 val* var_mpropdef /* var mpropdef: MVirtualTypeDef */;
1288 val* var68 /* : MClassDef */;
1289 val* var70 /* : MClassDef */;
1290 val* var71 /* : MClass */;
1291 val* var73 /* : MClass */;
1292 short int var74 /* : Bool */;
1293 short int var75 /* : Bool */;
1294 short int var77 /* : Bool */;
1295 short int var79 /* : Bool */;
1296 val* var81 /* : MModule */;
1297 val* var83 /* : MModule */;
1298 val* var84 /* : Set[MProperty] */;
1299 val* var85 /* : Iterator[nullable Object] */;
1300 short int var86 /* : Bool */;
1301 val* var87 /* : nullable Object */;
1302 val* var_mproperty88 /* var mproperty: MProperty */;
1303 short int var89 /* : Bool */;
1304 int cltype90;
1305 int idtype91;
1306 short int var92 /* : Bool */;
1307 val* var94 /* : Map[MVirtualTypeProp, Int] */;
1308 val* var96 /* : Map[MVirtualTypeProp, Int] */;
1309 val* var97 /* : nullable Object */;
1310 long var98 /* : Int */;
1311 long var_color99 /* var color: Int */;
1312 long var100 /* : Int */;
1313 short int var101 /* : Bool */;
1314 short int var103 /* : Bool */;
1315 int cltype104;
1316 int idtype105;
1317 const char* var_class_name106;
1318 short int var107 /* : Bool */;
1319 val* var108 /* : Range[Int] */;
1320 long var109 /* : Int */;
1321 val* var110 /* : Discrete */;
1322 val* var111 /* : Discrete */;
1323 val* var112 /* : Iterator[Discrete] */;
1324 short int var113 /* : Bool */;
1325 val* var114 /* : nullable Object */;
1326 long var_i115 /* var i: Int */;
1327 long var116 /* : Int */;
1328 val* var117 /* : null */;
1329 val* var119 /* : Array[MPropDef] */;
1330 val* var121 /* : Array[MPropDef] */;
1331 val* var122 /* : ArrayIterator[nullable Object] */;
1332 short int var123 /* : Bool */;
1333 val* var124 /* : nullable Object */;
1334 val* var_mpropdef125 /* var mpropdef: MVirtualTypeDef */;
1335 val* var126 /* : MClassDef */;
1336 val* var128 /* : MClassDef */;
1337 val* var129 /* : MClass */;
1338 val* var131 /* : MClass */;
1339 short int var132 /* : Bool */;
1340 short int var133 /* : Bool */;
1341 short int var135 /* : Bool */;
1342 short int var137 /* : Bool */;
1343 var_mclasses = p0;
1344 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
1345 {
1346 hash_collection__HashMap__init(var1); /* Direct call hash_collection#HashMap#init on <var1:HashMap[MClass, Array[nullable MPropDef]]>*/
1347 }
1348 var_tables = var1;
1349 {
1350 var2 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
1351 }
1352 for(;;) {
1353 {
1354 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
1355 }
1356 if(!var3) break;
1357 {
1358 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
1359 }
1360 var_mclass = var4;
1361 var5 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
1362 {
1363 array__Array__init(var5); /* Direct call array#Array#init on <var5:Array[nullable MPropDef]>*/
1364 }
1365 var_table = var5;
1366 var6 = NEW_array__Array(&type_array__Arraymodel__MClass);
1367 {
1368 array__Array__init(var6); /* Direct call array#Array#init on <var6:Array[MClass]>*/
1369 }
1370 var_parents = var6;
1371 {
1372 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1373 var9 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1374 if (unlikely(var9 == NULL)) {
1375 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1376 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
1377 show_backtrace(1);
1378 }
1379 var7 = var9;
1380 RET_LABEL8:(void)0;
1381 }
1382 }
1383 {
1384 var10 = model__MModule__flatten_mclass_hierarchy(var7);
1385 }
1386 {
1387 var11 = poset__POSet__has(var10, var_mclass);
1388 }
1389 if (var11){
1390 {
1391 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1392 var14 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1393 if (unlikely(var14 == NULL)) {
1394 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1395 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
1396 show_backtrace(1);
1397 }
1398 var12 = var14;
1399 RET_LABEL13:(void)0;
1400 }
1401 }
1402 {
1403 var15 = model__MClass__in_hierarchy(var_mclass, var12);
1404 }
1405 {
1406 var16 = poset__POSetElement__greaters(var15);
1407 }
1408 {
1409 var17 = array__Collection__to_a(var16);
1410 }
1411 var_parents = var17;
1412 {
1413 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1414 var20 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1415 if (unlikely(var20 == NULL)) {
1416 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1417 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
1418 show_backtrace(1);
1419 }
1420 var18 = var20;
1421 RET_LABEL19:(void)0;
1422 }
1423 }
1424 {
1425 model__MModule__linearize_mclasses(var18, var_parents); /* Direct call model#MModule#linearize_mclasses on <var18:MModule>*/
1426 }
1427 } else {
1428 }
1429 {
1430 var21 = array__AbstractArrayRead__iterator(var_parents);
1431 }
1432 for(;;) {
1433 {
1434 var22 = array__ArrayIterator__is_ok(var21);
1435 }
1436 if(!var22) break;
1437 {
1438 var23 = array__ArrayIterator__item(var21);
1439 }
1440 var_parent = var23;
1441 {
1442 { /* Inline kernel#Object#== (var_parent,var_mclass) on <var_parent:MClass> */
1443 var_other = var_mclass;
1444 {
1445 { /* Inline kernel#Object#is_same_instance (var_parent,var_other) on <var_parent:MClass> */
1446 var29 = var_parent == var_other;
1447 var27 = var29;
1448 goto RET_LABEL28;
1449 RET_LABEL28:(void)0;
1450 }
1451 }
1452 var25 = var27;
1453 goto RET_LABEL26;
1454 RET_LABEL26:(void)0;
1455 }
1456 var24 = var25;
1457 }
1458 if (var24){
1459 goto CONTINUE_label;
1460 } else {
1461 }
1462 {
1463 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1464 var32 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1465 if (unlikely(var32 == NULL)) {
1466 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1467 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
1468 show_backtrace(1);
1469 }
1470 var30 = var32;
1471 RET_LABEL31:(void)0;
1472 }
1473 }
1474 {
1475 var33 = abstract_compiler__MModule__properties(var30, var_parent);
1476 }
1477 {
1478 var34 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_collection__Collection__iterator]))(var33) /* iterator on <var33:Set[MProperty]>*/;
1479 }
1480 for(;;) {
1481 {
1482 var35 = ((short int (*)(val*))(var34->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var34) /* is_ok on <var34:Iterator[nullable Object]>*/;
1483 }
1484 if(!var35) break;
1485 {
1486 var36 = ((val* (*)(val*))(var34->class->vft[COLOR_abstract_collection__Iterator__item]))(var34) /* item on <var34:Iterator[nullable Object]>*/;
1487 }
1488 var_mproperty = var36;
1489 /* <var_mproperty:MProperty> isa MVirtualTypeProp */
1490 cltype = type_model__MVirtualTypeProp.color;
1491 idtype = type_model__MVirtualTypeProp.id;
1492 if(cltype >= var_mproperty->type->table_size) {
1493 var37 = 0;
1494 } else {
1495 var37 = var_mproperty->type->type_table[cltype] == idtype;
1496 }
1497 var38 = !var37;
1498 if (var38){
1499 goto CONTINUE_label39;
1500 } else {
1501 }
1502 {
1503 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:SeparateErasureCompiler> */
1504 var42 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
1505 if (unlikely(var42 == NULL)) {
1506 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
1507 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 97);
1508 show_backtrace(1);
1509 }
1510 var40 = var42;
1511 RET_LABEL41:(void)0;
1512 }
1513 }
1514 {
1515 var43 = ((val* (*)(val*, val*))(var40->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var40, var_mproperty) /* [] on <var40:Map[MVirtualTypeProp, Int]>*/;
1516 }
1517 var44 = ((struct instance_kernel__Int*)var43)->value; /* autounbox from nullable Object to Int */;
1518 var_color = var44;
1519 {
1520 var45 = array__AbstractArrayRead__length(var_table);
1521 }
1522 {
1523 { /* Inline kernel#Int#<= (var45,var_color) on <var45:Int> */
1524 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
1525 /* <var_color:Int> isa OTHER */
1526 var48 = 1; /* easy <var_color:Int> isa OTHER*/
1527 if (unlikely(!var48)) {
1528 var_class_name = type_kernel__Int.name;
1529 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1530 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 324);
1531 show_backtrace(1);
1532 }
1533 var51 = var45 <= var_color;
1534 var46 = var51;
1535 goto RET_LABEL47;
1536 RET_LABEL47:(void)0;
1537 }
1538 }
1539 if (var46){
1540 var52 = NEW_range__Range(&type_range__Rangekernel__Int);
1541 {
1542 var53 = array__AbstractArrayRead__length(var_table);
1543 }
1544 {
1545 var54 = BOX_kernel__Int(var53); /* autobox from Int to Discrete */
1546 var55 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
1547 range__Range__without_last(var52, var54, var55); /* Direct call range#Range#without_last on <var52:Range[Int]>*/
1548 }
1549 {
1550 var56 = range__Range__iterator(var52);
1551 }
1552 for(;;) {
1553 {
1554 var57 = ((short int (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var56) /* is_ok on <var56:Iterator[Discrete]>*/;
1555 }
1556 if(!var57) break;
1557 {
1558 var58 = ((val* (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__item]))(var56) /* item on <var56:Iterator[Discrete]>*/;
1559 }
1560 var59 = ((struct instance_kernel__Int*)var58)->value; /* autounbox from nullable Object to Int */;
1561 var_i = var59;
1562 var60 = NULL;
1563 {
1564 array__Array___91d_93d_61d(var_table, var_i, var60); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1565 }
1566 CONTINUE_label61: (void)0;
1567 {
1568 ((void (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__next]))(var56) /* next on <var56:Iterator[Discrete]>*/;
1569 }
1570 }
1571 BREAK_label61: (void)0;
1572 } else {
1573 }
1574 {
1575 { /* Inline model#MProperty#mpropdefs (var_mproperty) on <var_mproperty:MProperty(MVirtualTypeProp)> */
1576 var64 = var_mproperty->attrs[COLOR_model__MProperty___mpropdefs].val; /* _mpropdefs on <var_mproperty:MProperty(MVirtualTypeProp)> */
1577 if (unlikely(var64 == NULL)) {
1578 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
1579 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 1631);
1580 show_backtrace(1);
1581 }
1582 var62 = var64;
1583 RET_LABEL63:(void)0;
1584 }
1585 }
1586 {
1587 var65 = array__AbstractArrayRead__iterator(var62);
1588 }
1589 for(;;) {
1590 {
1591 var66 = array__ArrayIterator__is_ok(var65);
1592 }
1593 if(!var66) break;
1594 {
1595 var67 = array__ArrayIterator__item(var65);
1596 }
1597 var_mpropdef = var67;
1598 {
1599 { /* Inline model#MPropDef#mclassdef (var_mpropdef) on <var_mpropdef:MVirtualTypeDef> */
1600 var70 = var_mpropdef->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef:MVirtualTypeDef> */
1601 if (unlikely(var70 == NULL)) {
1602 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1603 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 1879);
1604 show_backtrace(1);
1605 }
1606 var68 = var70;
1607 RET_LABEL69:(void)0;
1608 }
1609 }
1610 {
1611 { /* Inline model#MClassDef#mclass (var68) on <var68:MClassDef> */
1612 var73 = var68->attrs[COLOR_model__MClassDef___mclass].val; /* _mclass on <var68:MClassDef> */
1613 if (unlikely(var73 == NULL)) {
1614 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
1615 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 474);
1616 show_backtrace(1);
1617 }
1618 var71 = var73;
1619 RET_LABEL72:(void)0;
1620 }
1621 }
1622 {
1623 { /* Inline kernel#Object#== (var71,var_parent) on <var71:MClass> */
1624 var_other = var_parent;
1625 {
1626 { /* Inline kernel#Object#is_same_instance (var71,var_other) on <var71:MClass> */
1627 var79 = var71 == var_other;
1628 var77 = var79;
1629 goto RET_LABEL78;
1630 RET_LABEL78:(void)0;
1631 }
1632 }
1633 var75 = var77;
1634 goto RET_LABEL76;
1635 RET_LABEL76:(void)0;
1636 }
1637 var74 = var75;
1638 }
1639 if (var74){
1640 {
1641 array__Array___91d_93d_61d(var_table, var_color, var_mpropdef); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1642 }
1643 } else {
1644 }
1645 CONTINUE_label80: (void)0;
1646 {
1647 array__ArrayIterator__next(var65); /* Direct call array#ArrayIterator#next on <var65:ArrayIterator[nullable Object]>*/
1648 }
1649 }
1650 BREAK_label80: (void)0;
1651 CONTINUE_label39: (void)0;
1652 {
1653 ((void (*)(val*))(var34->class->vft[COLOR_abstract_collection__Iterator__next]))(var34) /* next on <var34:Iterator[nullable Object]>*/;
1654 }
1655 }
1656 BREAK_label39: (void)0;
1657 CONTINUE_label: (void)0;
1658 {
1659 array__ArrayIterator__next(var21); /* Direct call array#ArrayIterator#next on <var21:ArrayIterator[nullable Object]>*/
1660 }
1661 }
1662 BREAK_label: (void)0;
1663 {
1664 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1665 var83 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1666 if (unlikely(var83 == NULL)) {
1667 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1668 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
1669 show_backtrace(1);
1670 }
1671 var81 = var83;
1672 RET_LABEL82:(void)0;
1673 }
1674 }
1675 {
1676 var84 = abstract_compiler__MModule__properties(var81, var_mclass);
1677 }
1678 {
1679 var85 = ((val* (*)(val*))(var84->class->vft[COLOR_abstract_collection__Collection__iterator]))(var84) /* iterator on <var84:Set[MProperty]>*/;
1680 }
1681 for(;;) {
1682 {
1683 var86 = ((short int (*)(val*))(var85->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var85) /* is_ok on <var85:Iterator[nullable Object]>*/;
1684 }
1685 if(!var86) break;
1686 {
1687 var87 = ((val* (*)(val*))(var85->class->vft[COLOR_abstract_collection__Iterator__item]))(var85) /* item on <var85:Iterator[nullable Object]>*/;
1688 }
1689 var_mproperty88 = var87;
1690 /* <var_mproperty88:MProperty> isa MVirtualTypeProp */
1691 cltype90 = type_model__MVirtualTypeProp.color;
1692 idtype91 = type_model__MVirtualTypeProp.id;
1693 if(cltype90 >= var_mproperty88->type->table_size) {
1694 var89 = 0;
1695 } else {
1696 var89 = var_mproperty88->type->type_table[cltype90] == idtype91;
1697 }
1698 var92 = !var89;
1699 if (var92){
1700 goto CONTINUE_label93;
1701 } else {
1702 }
1703 {
1704 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:SeparateErasureCompiler> */
1705 var96 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
1706 if (unlikely(var96 == NULL)) {
1707 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
1708 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 97);
1709 show_backtrace(1);
1710 }
1711 var94 = var96;
1712 RET_LABEL95:(void)0;
1713 }
1714 }
1715 {
1716 var97 = ((val* (*)(val*, val*))(var94->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var94, var_mproperty88) /* [] on <var94:Map[MVirtualTypeProp, Int]>*/;
1717 }
1718 var98 = ((struct instance_kernel__Int*)var97)->value; /* autounbox from nullable Object to Int */;
1719 var_color99 = var98;
1720 {
1721 var100 = array__AbstractArrayRead__length(var_table);
1722 }
1723 {
1724 { /* Inline kernel#Int#<= (var100,var_color99) on <var100:Int> */
1725 /* Covariant cast for argument 0 (i) <var_color99:Int> isa OTHER */
1726 /* <var_color99:Int> isa OTHER */
1727 var103 = 1; /* easy <var_color99:Int> isa OTHER*/
1728 if (unlikely(!var103)) {
1729 var_class_name106 = type_kernel__Int.name;
1730 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name106);
1731 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 324);
1732 show_backtrace(1);
1733 }
1734 var107 = var100 <= var_color99;
1735 var101 = var107;
1736 goto RET_LABEL102;
1737 RET_LABEL102:(void)0;
1738 }
1739 }
1740 if (var101){
1741 var108 = NEW_range__Range(&type_range__Rangekernel__Int);
1742 {
1743 var109 = array__AbstractArrayRead__length(var_table);
1744 }
1745 {
1746 var110 = BOX_kernel__Int(var109); /* autobox from Int to Discrete */
1747 var111 = BOX_kernel__Int(var_color99); /* autobox from Int to Discrete */
1748 range__Range__without_last(var108, var110, var111); /* Direct call range#Range#without_last on <var108:Range[Int]>*/
1749 }
1750 {
1751 var112 = range__Range__iterator(var108);
1752 }
1753 for(;;) {
1754 {
1755 var113 = ((short int (*)(val*))(var112->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var112) /* is_ok on <var112:Iterator[Discrete]>*/;
1756 }
1757 if(!var113) break;
1758 {
1759 var114 = ((val* (*)(val*))(var112->class->vft[COLOR_abstract_collection__Iterator__item]))(var112) /* item on <var112:Iterator[Discrete]>*/;
1760 }
1761 var116 = ((struct instance_kernel__Int*)var114)->value; /* autounbox from nullable Object to Int */;
1762 var_i115 = var116;
1763 var117 = NULL;
1764 {
1765 array__Array___91d_93d_61d(var_table, var_i115, var117); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1766 }
1767 CONTINUE_label118: (void)0;
1768 {
1769 ((void (*)(val*))(var112->class->vft[COLOR_abstract_collection__Iterator__next]))(var112) /* next on <var112:Iterator[Discrete]>*/;
1770 }
1771 }
1772 BREAK_label118: (void)0;
1773 } else {
1774 }
1775 {
1776 { /* Inline model#MProperty#mpropdefs (var_mproperty88) on <var_mproperty88:MProperty(MVirtualTypeProp)> */
1777 var121 = var_mproperty88->attrs[COLOR_model__MProperty___mpropdefs].val; /* _mpropdefs on <var_mproperty88:MProperty(MVirtualTypeProp)> */
1778 if (unlikely(var121 == NULL)) {
1779 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
1780 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 1631);
1781 show_backtrace(1);
1782 }
1783 var119 = var121;
1784 RET_LABEL120:(void)0;
1785 }
1786 }
1787 {
1788 var122 = array__AbstractArrayRead__iterator(var119);
1789 }
1790 for(;;) {
1791 {
1792 var123 = array__ArrayIterator__is_ok(var122);
1793 }
1794 if(!var123) break;
1795 {
1796 var124 = array__ArrayIterator__item(var122);
1797 }
1798 var_mpropdef125 = var124;
1799 {
1800 { /* Inline model#MPropDef#mclassdef (var_mpropdef125) on <var_mpropdef125:MVirtualTypeDef> */
1801 var128 = var_mpropdef125->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef125:MVirtualTypeDef> */
1802 if (unlikely(var128 == NULL)) {
1803 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1804 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 1879);
1805 show_backtrace(1);
1806 }
1807 var126 = var128;
1808 RET_LABEL127:(void)0;
1809 }
1810 }
1811 {
1812 { /* Inline model#MClassDef#mclass (var126) on <var126:MClassDef> */
1813 var131 = var126->attrs[COLOR_model__MClassDef___mclass].val; /* _mclass on <var126:MClassDef> */
1814 if (unlikely(var131 == NULL)) {
1815 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
1816 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 474);
1817 show_backtrace(1);
1818 }
1819 var129 = var131;
1820 RET_LABEL130:(void)0;
1821 }
1822 }
1823 {
1824 { /* Inline kernel#Object#== (var129,var_mclass) on <var129:MClass> */
1825 var_other = var_mclass;
1826 {
1827 { /* Inline kernel#Object#is_same_instance (var129,var_other) on <var129:MClass> */
1828 var137 = var129 == var_other;
1829 var135 = var137;
1830 goto RET_LABEL136;
1831 RET_LABEL136:(void)0;
1832 }
1833 }
1834 var133 = var135;
1835 goto RET_LABEL134;
1836 RET_LABEL134:(void)0;
1837 }
1838 var132 = var133;
1839 }
1840 if (var132){
1841 {
1842 array__Array___91d_93d_61d(var_table, var_color99, var_mpropdef125); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1843 }
1844 } else {
1845 }
1846 CONTINUE_label138: (void)0;
1847 {
1848 array__ArrayIterator__next(var122); /* Direct call array#ArrayIterator#next on <var122:ArrayIterator[nullable Object]>*/
1849 }
1850 }
1851 BREAK_label138: (void)0;
1852 CONTINUE_label93: (void)0;
1853 {
1854 ((void (*)(val*))(var85->class->vft[COLOR_abstract_collection__Iterator__next]))(var85) /* next on <var85:Iterator[nullable Object]>*/;
1855 }
1856 }
1857 BREAK_label93: (void)0;
1858 {
1859 hash_collection__HashMap___91d_93d_61d(var_tables, var_mclass, var_table); /* Direct call hash_collection#HashMap#[]= on <var_tables:HashMap[MClass, Array[nullable MPropDef]]>*/
1860 }
1861 CONTINUE_label139: (void)0;
1862 {
1863 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
1864 }
1865 }
1866 BREAK_label139: (void)0;
1867 var = var_tables;
1868 goto RET_LABEL;
1869 RET_LABEL:;
1870 return var;
1871 }
1872 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
1873 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0) {
1874 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
1875 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
1876 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(self, p0);
1877 var = var1;
1878 RET_LABEL:;
1879 return var;
1880 }
1881 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MClass]] */
1882 val* separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
1883 val* var /* : Map[MClass, Array[nullable MClass]] */;
1884 val* var_mclasses /* var mclasses: Set[MClass] */;
1885 val* var1 /* : HashMap[MClass, Array[nullable MClass]] */;
1886 val* var_tables /* var tables: HashMap[MClass, Array[nullable MClass]] */;
1887 val* var2 /* : Iterator[nullable Object] */;
1888 short int var3 /* : Bool */;
1889 val* var4 /* : nullable Object */;
1890 val* var_mclass /* var mclass: MClass */;
1891 val* var5 /* : Array[nullable MClass] */;
1892 val* var_table /* var table: Array[nullable MClass] */;
1893 val* var6 /* : Array[MClass] */;
1894 val* var_supers /* var supers: Array[MClass] */;
1895 val* var7 /* : MModule */;
1896 val* var9 /* : MModule */;
1897 val* var10 /* : POSet[MClass] */;
1898 short int var11 /* : Bool */;
1899 val* var12 /* : MModule */;
1900 val* var14 /* : MModule */;
1901 val* var15 /* : POSetElement[MClass] */;
1902 val* var16 /* : Collection[Object] */;
1903 val* var17 /* : Array[nullable Object] */;
1904 val* var18 /* : ArrayIterator[nullable Object] */;
1905 short int var19 /* : Bool */;
1906 val* var20 /* : nullable Object */;
1907 val* var_sup /* var sup: MClass */;
1908 val* var21 /* : Map[MClass, Int] */;
1909 val* var23 /* : Map[MClass, Int] */;
1910 val* var24 /* : nullable Object */;
1911 long var25 /* : Int */;
1912 long var_color /* var color: Int */;
1913 long var26 /* : Int */;
1914 short int var27 /* : Bool */;
1915 short int var29 /* : Bool */;
1916 int cltype;
1917 int idtype;
1918 const char* var_class_name;
1919 short int var30 /* : Bool */;
1920 val* var31 /* : Range[Int] */;
1921 long var32 /* : Int */;
1922 val* var33 /* : Discrete */;
1923 val* var34 /* : Discrete */;
1924 val* var35 /* : Iterator[Discrete] */;
1925 short int var36 /* : Bool */;
1926 val* var37 /* : nullable Object */;
1927 long var_i /* var i: Int */;
1928 long var38 /* : Int */;
1929 val* var39 /* : null */;
1930 var_mclasses = p0;
1931 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MClass);
1932 {
1933 hash_collection__HashMap__init(var1); /* Direct call hash_collection#HashMap#init on <var1:HashMap[MClass, Array[nullable MClass]]>*/
1934 }
1935 var_tables = var1;
1936 {
1937 var2 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
1938 }
1939 for(;;) {
1940 {
1941 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
1942 }
1943 if(!var3) break;
1944 {
1945 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
1946 }
1947 var_mclass = var4;
1948 var5 = NEW_array__Array(&type_array__Arraynullable_model__MClass);
1949 {
1950 array__Array__init(var5); /* Direct call array#Array#init on <var5:Array[nullable MClass]>*/
1951 }
1952 var_table = var5;
1953 var6 = NEW_array__Array(&type_array__Arraymodel__MClass);
1954 {
1955 array__Array__init(var6); /* Direct call array#Array#init on <var6:Array[MClass]>*/
1956 }
1957 var_supers = var6;
1958 {
1959 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1960 var9 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1961 if (unlikely(var9 == NULL)) {
1962 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1963 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
1964 show_backtrace(1);
1965 }
1966 var7 = var9;
1967 RET_LABEL8:(void)0;
1968 }
1969 }
1970 {
1971 var10 = model__MModule__flatten_mclass_hierarchy(var7);
1972 }
1973 {
1974 var11 = poset__POSet__has(var10, var_mclass);
1975 }
1976 if (var11){
1977 {
1978 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1979 var14 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1980 if (unlikely(var14 == NULL)) {
1981 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1982 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
1983 show_backtrace(1);
1984 }
1985 var12 = var14;
1986 RET_LABEL13:(void)0;
1987 }
1988 }
1989 {
1990 var15 = model__MClass__in_hierarchy(var_mclass, var12);
1991 }
1992 {
1993 var16 = poset__POSetElement__greaters(var15);
1994 }
1995 {
1996 var17 = array__Collection__to_a(var16);
1997 }
1998 var_supers = var17;
1999 } else {
2000 }
2001 {
2002 var18 = array__AbstractArrayRead__iterator(var_supers);
2003 }
2004 for(;;) {
2005 {
2006 var19 = array__ArrayIterator__is_ok(var18);
2007 }
2008 if(!var19) break;
2009 {
2010 var20 = array__ArrayIterator__item(var18);
2011 }
2012 var_sup = var20;
2013 {
2014 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors (self) on <self:SeparateErasureCompiler> */
2015 var23 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
2016 if (unlikely(var23 == NULL)) {
2017 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
2018 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 96);
2019 show_backtrace(1);
2020 }
2021 var21 = var23;
2022 RET_LABEL22:(void)0;
2023 }
2024 }
2025 {
2026 var24 = ((val* (*)(val*, val*))(var21->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var21, var_sup) /* [] on <var21:Map[MClass, Int]>*/;
2027 }
2028 var25 = ((struct instance_kernel__Int*)var24)->value; /* autounbox from nullable Object to Int */;
2029 var_color = var25;
2030 {
2031 var26 = array__AbstractArrayRead__length(var_table);
2032 }
2033 {
2034 { /* Inline kernel#Int#<= (var26,var_color) on <var26:Int> */
2035 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
2036 /* <var_color:Int> isa OTHER */
2037 var29 = 1; /* easy <var_color:Int> isa OTHER*/
2038 if (unlikely(!var29)) {
2039 var_class_name = type_kernel__Int.name;
2040 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
2041 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 324);
2042 show_backtrace(1);
2043 }
2044 var30 = var26 <= var_color;
2045 var27 = var30;
2046 goto RET_LABEL28;
2047 RET_LABEL28:(void)0;
2048 }
2049 }
2050 if (var27){
2051 var31 = NEW_range__Range(&type_range__Rangekernel__Int);
2052 {
2053 var32 = array__AbstractArrayRead__length(var_table);
2054 }
2055 {
2056 var33 = BOX_kernel__Int(var32); /* autobox from Int to Discrete */
2057 var34 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
2058 range__Range__without_last(var31, var33, var34); /* Direct call range#Range#without_last on <var31:Range[Int]>*/
2059 }
2060 {
2061 var35 = range__Range__iterator(var31);
2062 }
2063 for(;;) {
2064 {
2065 var36 = ((short int (*)(val*))(var35->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var35) /* is_ok on <var35:Iterator[Discrete]>*/;
2066 }
2067 if(!var36) break;
2068 {
2069 var37 = ((val* (*)(val*))(var35->class->vft[COLOR_abstract_collection__Iterator__item]))(var35) /* item on <var35:Iterator[Discrete]>*/;
2070 }
2071 var38 = ((struct instance_kernel__Int*)var37)->value; /* autounbox from nullable Object to Int */;
2072 var_i = var38;
2073 var39 = NULL;
2074 {
2075 array__Array___91d_93d_61d(var_table, var_i, var39); /* Direct call array#Array#[]= on <var_table:Array[nullable MClass]>*/
2076 }
2077 CONTINUE_label: (void)0;
2078 {
2079 ((void (*)(val*))(var35->class->vft[COLOR_abstract_collection__Iterator__next]))(var35) /* next on <var35:Iterator[Discrete]>*/;
2080 }
2081 }
2082 BREAK_label: (void)0;
2083 } else {
2084 }
2085 {
2086 array__Array___91d_93d_61d(var_table, var_color, var_sup); /* Direct call array#Array#[]= on <var_table:Array[nullable MClass]>*/
2087 }
2088 CONTINUE_label40: (void)0;
2089 {
2090 array__ArrayIterator__next(var18); /* Direct call array#ArrayIterator#next on <var18:ArrayIterator[nullable Object]>*/
2091 }
2092 }
2093 BREAK_label40: (void)0;
2094 {
2095 hash_collection__HashMap___91d_93d_61d(var_tables, var_mclass, var_table); /* Direct call hash_collection#HashMap#[]= on <var_tables:HashMap[MClass, Array[nullable MClass]]>*/
2096 }
2097 CONTINUE_label41: (void)0;
2098 {
2099 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
2100 }
2101 }
2102 BREAK_label41: (void)0;
2103 var = var_tables;
2104 goto RET_LABEL;
2105 RET_LABEL:;
2106 return var;
2107 }
2108 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MClass]] */
2109 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
2110 val* var /* : Map[MClass, Array[nullable MClass]] */;
2111 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
2112 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(self, p0);
2113 var = var1;
2114 RET_LABEL:;
2115 return var;
2116 }
2117 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: SeparateErasureCompiler) */
2118 void separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
2119 val* var /* : CodeWriter */;
2120 val* var2 /* : CodeWriter */;
2121 static val* varonce;
2122 val* var3 /* : String */;
2123 char* var4 /* : NativeString */;
2124 long var5 /* : Int */;
2125 val* var6 /* : FlatString */;
2126 val* var7 /* : CodeWriter */;
2127 val* var9 /* : CodeWriter */;
2128 static val* varonce10;
2129 val* var11 /* : String */;
2130 char* var12 /* : NativeString */;
2131 long var13 /* : Int */;
2132 val* var14 /* : FlatString */;
2133 val* var15 /* : CodeWriter */;
2134 val* var17 /* : CodeWriter */;
2135 static val* varonce18;
2136 val* var19 /* : String */;
2137 char* var20 /* : NativeString */;
2138 long var21 /* : Int */;
2139 val* var22 /* : FlatString */;
2140 val* var23 /* : CodeWriter */;
2141 val* var25 /* : CodeWriter */;
2142 static val* varonce26;
2143 val* var27 /* : String */;
2144 char* var28 /* : NativeString */;
2145 long var29 /* : Int */;
2146 val* var30 /* : FlatString */;
2147 val* var31 /* : CodeWriter */;
2148 val* var33 /* : CodeWriter */;
2149 static val* varonce34;
2150 val* var35 /* : String */;
2151 char* var36 /* : NativeString */;
2152 long var37 /* : Int */;
2153 val* var38 /* : FlatString */;
2154 val* var39 /* : CodeWriter */;
2155 val* var41 /* : CodeWriter */;
2156 static val* varonce42;
2157 val* var43 /* : String */;
2158 char* var44 /* : NativeString */;
2159 long var45 /* : Int */;
2160 val* var46 /* : FlatString */;
2161 {
2162 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2163 var2 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2164 if (unlikely(var2 == NULL)) {
2165 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2166 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
2167 show_backtrace(1);
2168 }
2169 var = var2;
2170 RET_LABEL1:(void)0;
2171 }
2172 }
2173 if (varonce) {
2174 var3 = varonce;
2175 } else {
2176 var4 = "typedef void(*nitmethod_t)(void); /* general C type representing a Nit method. */";
2177 var5 = 81;
2178 var6 = string__NativeString__to_s_with_length(var4, var5);
2179 var3 = var6;
2180 varonce = var3;
2181 }
2182 {
2183 abstract_compiler__CodeWriter__add_decl(var, var3); /* Direct call abstract_compiler#CodeWriter#add_decl on <var:CodeWriter>*/
2184 }
2185 {
2186 separate_compiler__SeparateCompiler__compile_header_attribute_structs(self); /* Direct call separate_compiler#SeparateCompiler#compile_header_attribute_structs on <self:SeparateErasureCompiler>*/
2187 }
2188 {
2189 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2190 var9 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2191 if (unlikely(var9 == NULL)) {
2192 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2193 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
2194 show_backtrace(1);
2195 }
2196 var7 = var9;
2197 RET_LABEL8:(void)0;
2198 }
2199 }
2200 if (varonce10) {
2201 var11 = varonce10;
2202 } else {
2203 var12 = "struct class { int id; const char *name; int box_kind; int color; const struct vts_table *vts_table; const struct type_table *type_table; nitmethod_t vft[]; }; /* general C type representing a Nit class. */";
2204 var13 = 206;
2205 var14 = string__NativeString__to_s_with_length(var12, var13);
2206 var11 = var14;
2207 varonce10 = var11;
2208 }
2209 {
2210 abstract_compiler__CodeWriter__add_decl(var7, var11); /* Direct call abstract_compiler#CodeWriter#add_decl on <var7:CodeWriter>*/
2211 }
2212 {
2213 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2214 var17 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2215 if (unlikely(var17 == NULL)) {
2216 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2217 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
2218 show_backtrace(1);
2219 }
2220 var15 = var17;
2221 RET_LABEL16:(void)0;
2222 }
2223 }
2224 if (varonce18) {
2225 var19 = varonce18;
2226 } else {
2227 var20 = "struct type_table { int size; int table[]; }; /* colorized type table. */";
2228 var21 = 73;
2229 var22 = string__NativeString__to_s_with_length(var20, var21);
2230 var19 = var22;
2231 varonce18 = var19;
2232 }
2233 {
2234 abstract_compiler__CodeWriter__add_decl(var15, var19); /* Direct call abstract_compiler#CodeWriter#add_decl on <var15:CodeWriter>*/
2235 }
2236 {
2237 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2238 var25 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2239 if (unlikely(var25 == NULL)) {
2240 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2241 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
2242 show_backtrace(1);
2243 }
2244 var23 = var25;
2245 RET_LABEL24:(void)0;
2246 }
2247 }
2248 if (varonce26) {
2249 var27 = varonce26;
2250 } else {
2251 var28 = "struct vts_entry { short int is_nullable; const struct class *class; }; /* link (nullable or not) between the vts and is bound. */";
2252 var29 = 130;
2253 var30 = string__NativeString__to_s_with_length(var28, var29);
2254 var27 = var30;
2255 varonce26 = var27;
2256 }
2257 {
2258 abstract_compiler__CodeWriter__add_decl(var23, var27); /* Direct call abstract_compiler#CodeWriter#add_decl on <var23:CodeWriter>*/
2259 }
2260 {
2261 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2262 var33 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2263 if (unlikely(var33 == NULL)) {
2264 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2265 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
2266 show_backtrace(1);
2267 }
2268 var31 = var33;
2269 RET_LABEL32:(void)0;
2270 }
2271 }
2272 if (varonce34) {
2273 var35 = varonce34;
2274 } else {
2275 var36 = "struct vts_table { int dummy; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
2276 var37 = 105;
2277 var38 = string__NativeString__to_s_with_length(var36, var37);
2278 var35 = var38;
2279 varonce34 = var35;
2280 }
2281 {
2282 abstract_compiler__CodeWriter__add_decl(var31, var35); /* Direct call abstract_compiler#CodeWriter#add_decl on <var31:CodeWriter>*/
2283 }
2284 {
2285 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2286 var41 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2287 if (unlikely(var41 == NULL)) {
2288 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2289 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
2290 show_backtrace(1);
2291 }
2292 var39 = var41;
2293 RET_LABEL40:(void)0;
2294 }
2295 }
2296 if (varonce42) {
2297 var43 = varonce42;
2298 } else {
2299 var44 = "typedef struct instance { const struct class *class; nitattribute_t attrs[1]; } val; /* general C type representing a Nit instance. */";
2300 var45 = 134;
2301 var46 = string__NativeString__to_s_with_length(var44, var45);
2302 var43 = var46;
2303 varonce42 = var43;
2304 }
2305 {
2306 abstract_compiler__CodeWriter__add_decl(var39, var43); /* Direct call abstract_compiler#CodeWriter#add_decl on <var39:CodeWriter>*/
2307 }
2308 RET_LABEL:;
2309 }
2310 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: Object) */
2311 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
2312 separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(self); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs on <self:Object(SeparateErasureCompiler)>*/
2313 RET_LABEL:;
2314 }
2315 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: SeparateErasureCompiler, MClass) */
2316 void separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
2317 val* var_mclass /* var mclass: MClass */;
2318 val* var /* : MClassDef */;
2319 val* var1 /* : MClassType */;
2320 val* var3 /* : MClassType */;
2321 val* var_mtype /* var mtype: MClassType */;
2322 val* var4 /* : String */;
2323 val* var_c_name /* var c_name: String */;
2324 val* var5 /* : String */;
2325 val* var_c_instance_name /* var c_instance_name: String */;
2326 val* var6 /* : Map[MClass, Array[nullable MPropDef]] */;
2327 val* var8 /* : Map[MClass, Array[nullable MPropDef]] */;
2328 val* var9 /* : nullable Object */;
2329 val* var_vft /* var vft: Array[nullable MPropDef] */;
2330 val* var10 /* : Map[MClass, Array[nullable MPropDef]] */;
2331 val* var12 /* : Map[MClass, Array[nullable MPropDef]] */;
2332 val* var13 /* : nullable Object */;
2333 val* var_attrs /* var attrs: Array[nullable MPropDef] */;
2334 val* var14 /* : Map[MClass, Array[nullable MClass]] */;
2335 val* var16 /* : Map[MClass, Array[nullable MClass]] */;
2336 val* var17 /* : nullable Object */;
2337 val* var_class_table /* var class_table: Array[nullable MClass] */;
2338 val* var18 /* : SeparateCompilerVisitor */;
2339 val* var_v /* var v: SeparateCompilerVisitor */;
2340 val* var19 /* : nullable RapidTypeAnalysis */;
2341 val* var21 /* : nullable RapidTypeAnalysis */;
2342 val* var_rta /* var rta: nullable RapidTypeAnalysis */;
2343 short int var22 /* : Bool */;
2344 val* var23 /* : MClassKind */;
2345 val* var25 /* : MClassKind */;
2346 val* var26 /* : MClassKind */;
2347 short int var27 /* : Bool */;
2348 short int var28 /* : Bool */;
2349 val* var_other /* var other: nullable Object */;
2350 short int var30 /* : Bool */;
2351 short int var32 /* : Bool */;
2352 short int var_ /* var : Bool */;
2353 val* var33 /* : MClassKind */;
2354 val* var35 /* : MClassKind */;
2355 val* var36 /* : MClassKind */;
2356 short int var37 /* : Bool */;
2357 short int var38 /* : Bool */;
2358 short int var40 /* : Bool */;
2359 short int var42 /* : Bool */;
2360 short int var_is_dead /* var is_dead: Bool */;
2361 short int var43 /* : Bool */;
2362 short int var44 /* : Bool */;
2363 short int var45 /* : Bool */;
2364 short int var46 /* : Bool */;
2365 short int var47 /* : Bool */;
2366 short int var_48 /* var : Bool */;
2367 val* var49 /* : null */;
2368 short int var50 /* : Bool */;
2369 short int var51 /* : Bool */;
2370 val* var_other53 /* var other: nullable Object */;
2371 short int var54 /* : Bool */;
2372 short int var55 /* : Bool */;
2373 short int var56 /* : Bool */;
2374 short int var_57 /* var : Bool */;
2375 val* var58 /* : HashSet[MClass] */;
2376 val* var60 /* : HashSet[MClass] */;
2377 short int var61 /* : Bool */;
2378 short int var62 /* : Bool */;
2379 short int var_63 /* var : Bool */;
2380 val* var64 /* : String */;
2381 static val* varonce;
2382 val* var65 /* : String */;
2383 char* var66 /* : NativeString */;
2384 long var67 /* : Int */;
2385 val* var68 /* : FlatString */;
2386 short int var69 /* : Bool */;
2387 short int var70 /* : Bool */;
2388 short int var_71 /* var : Bool */;
2389 val* var72 /* : String */;
2390 val* var74 /* : String */;
2391 static val* varonce75;
2392 val* var76 /* : String */;
2393 char* var77 /* : NativeString */;
2394 long var78 /* : Int */;
2395 val* var79 /* : FlatString */;
2396 short int var80 /* : Bool */;
2397 short int var81 /* : Bool */;
2398 short int var83 /* : Bool */;
2399 short int var84 /* : Bool */;
2400 short int var85 /* : Bool */;
2401 short int var86 /* : Bool */;
2402 static val* varonce87;
2403 val* var88 /* : String */;
2404 char* var89 /* : NativeString */;
2405 long var90 /* : Int */;
2406 val* var91 /* : FlatString */;
2407 static val* varonce92;
2408 val* var93 /* : String */;
2409 char* var94 /* : NativeString */;
2410 long var95 /* : Int */;
2411 val* var96 /* : FlatString */;
2412 val* var97 /* : Array[Object] */;
2413 long var98 /* : Int */;
2414 val* var99 /* : NativeArray[Object] */;
2415 val* var100 /* : String */;
2416 static val* varonce101;
2417 val* var102 /* : String */;
2418 char* var103 /* : NativeString */;
2419 long var104 /* : Int */;
2420 val* var105 /* : FlatString */;
2421 val* var106 /* : Array[Object] */;
2422 long var107 /* : Int */;
2423 val* var108 /* : NativeArray[Object] */;
2424 val* var109 /* : String */;
2425 static val* varonce110;
2426 val* var111 /* : String */;
2427 char* var112 /* : NativeString */;
2428 long var113 /* : Int */;
2429 val* var114 /* : FlatString */;
2430 static val* varonce115;
2431 val* var116 /* : String */;
2432 char* var117 /* : NativeString */;
2433 long var118 /* : Int */;
2434 val* var119 /* : FlatString */;
2435 val* var120 /* : Array[Object] */;
2436 long var121 /* : Int */;
2437 val* var122 /* : NativeArray[Object] */;
2438 val* var123 /* : String */;
2439 static val* varonce124;
2440 val* var125 /* : String */;
2441 char* var126 /* : NativeString */;
2442 long var127 /* : Int */;
2443 val* var128 /* : FlatString */;
2444 static val* varonce129;
2445 val* var130 /* : String */;
2446 char* var131 /* : NativeString */;
2447 long var132 /* : Int */;
2448 val* var133 /* : FlatString */;
2449 val* var134 /* : Array[Object] */;
2450 long var135 /* : Int */;
2451 val* var136 /* : NativeArray[Object] */;
2452 val* var137 /* : String */;
2453 static val* varonce138;
2454 val* var139 /* : String */;
2455 char* var140 /* : NativeString */;
2456 long var141 /* : Int */;
2457 val* var142 /* : FlatString */;
2458 static val* varonce143;
2459 val* var144 /* : String */;
2460 char* var145 /* : NativeString */;
2461 long var146 /* : Int */;
2462 val* var147 /* : FlatString */;
2463 val* var148 /* : Array[Object] */;
2464 long var149 /* : Int */;
2465 val* var150 /* : NativeArray[Object] */;
2466 val* var151 /* : String */;
2467 val* var152 /* : Map[MClass, Int] */;
2468 val* var154 /* : Map[MClass, Int] */;
2469 val* var155 /* : nullable Object */;
2470 static val* varonce156;
2471 val* var157 /* : String */;
2472 char* var158 /* : NativeString */;
2473 long var159 /* : Int */;
2474 val* var160 /* : FlatString */;
2475 val* var161 /* : Array[Object] */;
2476 long var162 /* : Int */;
2477 val* var163 /* : NativeArray[Object] */;
2478 val* var164 /* : String */;
2479 static val* varonce165;
2480 val* var166 /* : String */;
2481 char* var167 /* : NativeString */;
2482 long var168 /* : Int */;
2483 val* var169 /* : FlatString */;
2484 val* var170 /* : String */;
2485 val* var172 /* : String */;
2486 static val* varonce173;
2487 val* var174 /* : String */;
2488 char* var175 /* : NativeString */;
2489 long var176 /* : Int */;
2490 val* var177 /* : FlatString */;
2491 val* var178 /* : Array[Object] */;
2492 long var179 /* : Int */;
2493 val* var180 /* : NativeArray[Object] */;
2494 val* var181 /* : String */;
2495 long var182 /* : Int */;
2496 static val* varonce183;
2497 val* var184 /* : String */;
2498 char* var185 /* : NativeString */;
2499 long var186 /* : Int */;
2500 val* var187 /* : FlatString */;
2501 val* var188 /* : Array[Object] */;
2502 long var189 /* : Int */;
2503 val* var190 /* : NativeArray[Object] */;
2504 val* var191 /* : Object */;
2505 val* var192 /* : String */;
2506 val* var193 /* : Map[MClass, Int] */;
2507 val* var195 /* : Map[MClass, Int] */;
2508 val* var196 /* : nullable Object */;
2509 static val* varonce197;
2510 val* var198 /* : String */;
2511 char* var199 /* : NativeString */;
2512 long var200 /* : Int */;
2513 val* var201 /* : FlatString */;
2514 val* var202 /* : Array[Object] */;
2515 long var203 /* : Int */;
2516 val* var204 /* : NativeArray[Object] */;
2517 val* var205 /* : String */;
2518 short int var206 /* : Bool */;
2519 short int var207 /* : Bool */;
2520 static val* varonce208;
2521 val* var209 /* : String */;
2522 char* var210 /* : NativeString */;
2523 long var211 /* : Int */;
2524 val* var212 /* : FlatString */;
2525 val* var213 /* : Array[Object] */;
2526 long var214 /* : Int */;
2527 val* var215 /* : NativeArray[Object] */;
2528 val* var216 /* : String */;
2529 static val* varonce217;
2530 val* var218 /* : String */;
2531 char* var219 /* : NativeString */;
2532 long var220 /* : Int */;
2533 val* var221 /* : FlatString */;
2534 static val* varonce222;
2535 val* var223 /* : String */;
2536 char* var224 /* : NativeString */;
2537 long var225 /* : Int */;
2538 val* var226 /* : FlatString */;
2539 val* var227 /* : Array[Object] */;
2540 long var228 /* : Int */;
2541 val* var229 /* : NativeArray[Object] */;
2542 val* var230 /* : String */;
2543 static val* varonce231;
2544 val* var232 /* : String */;
2545 char* var233 /* : NativeString */;
2546 long var234 /* : Int */;
2547 val* var235 /* : FlatString */;
2548 static val* varonce236;
2549 val* var237 /* : String */;
2550 char* var238 /* : NativeString */;
2551 long var239 /* : Int */;
2552 val* var240 /* : FlatString */;
2553 static val* varonce241;
2554 val* var242 /* : String */;
2555 char* var243 /* : NativeString */;
2556 long var244 /* : Int */;
2557 val* var245 /* : FlatString */;
2558 val* var246 /* : Array[Object] */;
2559 long var247 /* : Int */;
2560 val* var248 /* : NativeArray[Object] */;
2561 val* var249 /* : String */;
2562 static val* varonce250;
2563 val* var251 /* : String */;
2564 char* var252 /* : NativeString */;
2565 long var253 /* : Int */;
2566 val* var254 /* : FlatString */;
2567 val* var255 /* : Range[Int] */;
2568 long var256 /* : Int */;
2569 long var257 /* : Int */;
2570 val* var258 /* : Discrete */;
2571 val* var259 /* : Discrete */;
2572 val* var260 /* : Iterator[Discrete] */;
2573 short int var261 /* : Bool */;
2574 val* var262 /* : nullable Object */;
2575 long var_i /* var i: Int */;
2576 long var263 /* : Int */;
2577 val* var264 /* : nullable Object */;
2578 val* var_mpropdef /* var mpropdef: nullable MPropDef */;
2579 val* var265 /* : null */;
2580 short int var266 /* : Bool */;
2581 short int var267 /* : Bool */;
2582 short int var269 /* : Bool */;
2583 short int var271 /* : Bool */;
2584 static val* varonce272;
2585 val* var273 /* : String */;
2586 char* var274 /* : NativeString */;
2587 long var275 /* : Int */;
2588 val* var276 /* : FlatString */;
2589 short int var277 /* : Bool */;
2590 int cltype;
2591 int idtype;
2592 short int var278 /* : Bool */;
2593 val* var279 /* : null */;
2594 short int var280 /* : Bool */;
2595 short int var281 /* : Bool */;
2596 short int var283 /* : Bool */;
2597 short int var284 /* : Bool */;
2598 short int var285 /* : Bool */;
2599 short int var_286 /* var : Bool */;
2600 val* var287 /* : HashSet[MMethodDef] */;
2601 val* var289 /* : HashSet[MMethodDef] */;
2602 short int var290 /* : Bool */;
2603 short int var291 /* : Bool */;
2604 static val* varonce292;
2605 val* var293 /* : String */;
2606 char* var294 /* : NativeString */;
2607 long var295 /* : Int */;
2608 val* var296 /* : FlatString */;
2609 val* var297 /* : MModule */;
2610 val* var299 /* : MModule */;
2611 static val* varonce300;
2612 val* var301 /* : String */;
2613 char* var302 /* : NativeString */;
2614 long var303 /* : Int */;
2615 val* var304 /* : FlatString */;
2616 static val* varonce305;
2617 val* var306 /* : String */;
2618 char* var307 /* : NativeString */;
2619 long var308 /* : Int */;
2620 val* var309 /* : FlatString */;
2621 static val* varonce310;
2622 val* var311 /* : String */;
2623 char* var312 /* : NativeString */;
2624 long var313 /* : Int */;
2625 val* var314 /* : FlatString */;
2626 val* var315 /* : Array[Object] */;
2627 long var316 /* : Int */;
2628 val* var317 /* : NativeArray[Object] */;
2629 val* var318 /* : String */;
2630 short int var319 /* : Bool */;
2631 short int var320 /* : Bool */;
2632 short int var_321 /* var : Bool */;
2633 val* var322 /* : MClassDef */;
2634 val* var324 /* : MClassDef */;
2635 val* var325 /* : MClassType */;
2636 val* var327 /* : MClassType */;
2637 val* var328 /* : String */;
2638 static val* varonce329;
2639 val* var330 /* : String */;
2640 char* var331 /* : NativeString */;
2641 long var332 /* : Int */;
2642 val* var333 /* : FlatString */;
2643 short int var334 /* : Bool */;
2644 short int var335 /* : Bool */;
2645 short int var337 /* : Bool */;
2646 short int var338 /* : Bool */;
2647 short int var339 /* : Bool */;
2648 static val* varonce340;
2649 val* var341 /* : String */;
2650 char* var342 /* : NativeString */;
2651 long var343 /* : Int */;
2652 val* var344 /* : FlatString */;
2653 val* var345 /* : String */;
2654 val* var346 /* : Array[Object] */;
2655 long var347 /* : Int */;
2656 val* var348 /* : NativeArray[Object] */;
2657 val* var349 /* : String */;
2658 static val* varonce350;
2659 val* var351 /* : String */;
2660 char* var352 /* : NativeString */;
2661 long var353 /* : Int */;
2662 val* var354 /* : FlatString */;
2663 val* var355 /* : String */;
2664 static val* varonce356;
2665 val* var357 /* : String */;
2666 char* var358 /* : NativeString */;
2667 long var359 /* : Int */;
2668 val* var360 /* : FlatString */;
2669 val* var361 /* : MModule */;
2670 val* var363 /* : MModule */;
2671 static val* varonce364;
2672 val* var365 /* : String */;
2673 char* var366 /* : NativeString */;
2674 long var367 /* : Int */;
2675 val* var368 /* : FlatString */;
2676 static val* varonce369;
2677 val* var370 /* : String */;
2678 char* var371 /* : NativeString */;
2679 long var372 /* : Int */;
2680 val* var373 /* : FlatString */;
2681 static val* varonce374;
2682 val* var375 /* : String */;
2683 char* var376 /* : NativeString */;
2684 long var377 /* : Int */;
2685 val* var378 /* : FlatString */;
2686 val* var379 /* : Array[Object] */;
2687 long var380 /* : Int */;
2688 val* var381 /* : NativeArray[Object] */;
2689 val* var382 /* : String */;
2690 val* var383 /* : String */;
2691 val* var384 /* : Array[Object] */;
2692 long var385 /* : Int */;
2693 val* var386 /* : NativeArray[Object] */;
2694 val* var387 /* : String */;
2695 static val* varonce388;
2696 val* var389 /* : String */;
2697 char* var390 /* : NativeString */;
2698 long var391 /* : Int */;
2699 val* var392 /* : FlatString */;
2700 val* var393 /* : String */;
2701 static val* varonce394;
2702 val* var395 /* : String */;
2703 char* var396 /* : NativeString */;
2704 long var397 /* : Int */;
2705 val* var398 /* : FlatString */;
2706 val* var399 /* : MModule */;
2707 val* var401 /* : MModule */;
2708 static val* varonce402;
2709 val* var403 /* : String */;
2710 char* var404 /* : NativeString */;
2711 long var405 /* : Int */;
2712 val* var406 /* : FlatString */;
2713 static val* varonce407;
2714 val* var408 /* : String */;
2715 char* var409 /* : NativeString */;
2716 long var410 /* : Int */;
2717 val* var411 /* : FlatString */;
2718 static val* varonce412;
2719 val* var413 /* : String */;
2720 char* var414 /* : NativeString */;
2721 long var415 /* : Int */;
2722 val* var416 /* : FlatString */;
2723 val* var417 /* : Array[Object] */;
2724 long var418 /* : Int */;
2725 val* var419 /* : NativeArray[Object] */;
2726 val* var420 /* : String */;
2727 static val* varonce421;
2728 val* var422 /* : String */;
2729 char* var423 /* : NativeString */;
2730 long var424 /* : Int */;
2731 val* var425 /* : FlatString */;
2732 static val* varonce426;
2733 val* var427 /* : String */;
2734 char* var428 /* : NativeString */;
2735 long var429 /* : Int */;
2736 val* var430 /* : FlatString */;
2737 static val* varonce431;
2738 val* var432 /* : String */;
2739 char* var433 /* : NativeString */;
2740 long var434 /* : Int */;
2741 val* var435 /* : FlatString */;
2742 static val* varonce436;
2743 val* var437 /* : String */;
2744 char* var438 /* : NativeString */;
2745 long var439 /* : Int */;
2746 val* var440 /* : FlatString */;
2747 val* var441 /* : Array[Object] */;
2748 long var442 /* : Int */;
2749 val* var443 /* : NativeArray[Object] */;
2750 val* var444 /* : String */;
2751 long var445 /* : Int */;
2752 static val* varonce446;
2753 val* var447 /* : String */;
2754 char* var448 /* : NativeString */;
2755 long var449 /* : Int */;
2756 val* var450 /* : FlatString */;
2757 val* var451 /* : Array[Object] */;
2758 long var452 /* : Int */;
2759 val* var453 /* : NativeArray[Object] */;
2760 val* var454 /* : Object */;
2761 val* var455 /* : String */;
2762 static val* varonce456;
2763 val* var457 /* : String */;
2764 char* var458 /* : NativeString */;
2765 long var459 /* : Int */;
2766 val* var460 /* : FlatString */;
2767 val* var461 /* : ArrayIterator[nullable Object] */;
2768 short int var462 /* : Bool */;
2769 val* var463 /* : nullable Object */;
2770 val* var_msuper /* var msuper: nullable MClass */;
2771 val* var464 /* : null */;
2772 short int var465 /* : Bool */;
2773 short int var466 /* : Bool */;
2774 short int var468 /* : Bool */;
2775 short int var470 /* : Bool */;
2776 static val* varonce471;
2777 val* var472 /* : String */;
2778 char* var473 /* : NativeString */;
2779 long var474 /* : Int */;
2780 val* var475 /* : FlatString */;
2781 val* var476 /* : Map[MClass, Int] */;
2782 val* var478 /* : Map[MClass, Int] */;
2783 val* var479 /* : nullable Object */;
2784 static val* varonce480;
2785 val* var481 /* : String */;
2786 char* var482 /* : NativeString */;
2787 long var483 /* : Int */;
2788 val* var484 /* : FlatString */;
2789 static val* varonce485;
2790 val* var486 /* : String */;
2791 char* var487 /* : NativeString */;
2792 long var488 /* : Int */;
2793 val* var489 /* : FlatString */;
2794 val* var490 /* : Array[Object] */;
2795 long var491 /* : Int */;
2796 val* var492 /* : NativeArray[Object] */;
2797 val* var493 /* : String */;
2798 static val* varonce495;
2799 val* var496 /* : String */;
2800 char* var497 /* : NativeString */;
2801 long var498 /* : Int */;
2802 val* var499 /* : FlatString */;
2803 static val* varonce500;
2804 val* var501 /* : String */;
2805 char* var502 /* : NativeString */;
2806 long var503 /* : Int */;
2807 val* var504 /* : FlatString */;
2808 val* var505 /* : String */;
2809 static val* varonce506;
2810 val* var507 /* : String */;
2811 char* var508 /* : NativeString */;
2812 long var509 /* : Int */;
2813 val* var510 /* : FlatString */;
2814 short int var511 /* : Bool */;
2815 short int var512 /* : Bool */;
2816 short int var514 /* : Bool */;
2817 short int var515 /* : Bool */;
2818 short int var516 /* : Bool */;
2819 short int var517 /* : Bool */;
2820 val* var518 /* : MClass */;
2821 val* var520 /* : MClass */;
2822 val* var521 /* : String */;
2823 val* var523 /* : String */;
2824 static val* varonce524;
2825 val* var525 /* : String */;
2826 char* var526 /* : NativeString */;
2827 long var527 /* : Int */;
2828 val* var528 /* : FlatString */;
2829 short int var529 /* : Bool */;
2830 short int var530 /* : Bool */;
2831 short int var_531 /* var : Bool */;
2832 val* var532 /* : MClass */;
2833 val* var534 /* : MClass */;
2834 val* var535 /* : MClassKind */;
2835 val* var537 /* : MClassKind */;
2836 val* var538 /* : MClassKind */;
2837 short int var539 /* : Bool */;
2838 short int var540 /* : Bool */;
2839 short int var542 /* : Bool */;
2840 short int var543 /* : Bool */;
2841 short int var544 /* : Bool */;
2842 val* var545 /* : CodeWriter */;
2843 val* var547 /* : CodeWriter */;
2844 static val* varonce548;
2845 val* var549 /* : String */;
2846 char* var550 /* : NativeString */;
2847 long var551 /* : Int */;
2848 val* var552 /* : FlatString */;
2849 static val* varonce553;
2850 val* var554 /* : String */;
2851 char* var555 /* : NativeString */;
2852 long var556 /* : Int */;
2853 val* var557 /* : FlatString */;
2854 val* var558 /* : Array[Object] */;
2855 long var559 /* : Int */;
2856 val* var560 /* : NativeArray[Object] */;
2857 val* var561 /* : String */;
2858 val* var562 /* : CodeWriter */;
2859 val* var564 /* : CodeWriter */;
2860 static val* varonce565;
2861 val* var566 /* : String */;
2862 char* var567 /* : NativeString */;
2863 long var568 /* : Int */;
2864 val* var569 /* : FlatString */;
2865 val* var570 /* : CodeWriter */;
2866 val* var572 /* : CodeWriter */;
2867 val* var573 /* : String */;
2868 static val* varonce574;
2869 val* var575 /* : String */;
2870 char* var576 /* : NativeString */;
2871 long var577 /* : Int */;
2872 val* var578 /* : FlatString */;
2873 val* var579 /* : Array[Object] */;
2874 long var580 /* : Int */;
2875 val* var581 /* : NativeArray[Object] */;
2876 val* var582 /* : String */;
2877 val* var583 /* : CodeWriter */;
2878 val* var585 /* : CodeWriter */;
2879 static val* varonce586;
2880 val* var587 /* : String */;
2881 char* var588 /* : NativeString */;
2882 long var589 /* : Int */;
2883 val* var590 /* : FlatString */;
2884 static val* varonce591;
2885 val* var592 /* : String */;
2886 char* var593 /* : NativeString */;
2887 long var594 /* : Int */;
2888 val* var595 /* : FlatString */;
2889 val* var596 /* : Array[Object] */;
2890 long var597 /* : Int */;
2891 val* var598 /* : NativeArray[Object] */;
2892 val* var599 /* : String */;
2893 static val* varonce600;
2894 val* var601 /* : String */;
2895 char* var602 /* : NativeString */;
2896 long var603 /* : Int */;
2897 val* var604 /* : FlatString */;
2898 static val* varonce605;
2899 val* var606 /* : String */;
2900 char* var607 /* : NativeString */;
2901 long var608 /* : Int */;
2902 val* var609 /* : FlatString */;
2903 val* var610 /* : String */;
2904 static val* varonce611;
2905 val* var612 /* : String */;
2906 char* var613 /* : NativeString */;
2907 long var614 /* : Int */;
2908 val* var615 /* : FlatString */;
2909 val* var616 /* : Array[Object] */;
2910 long var617 /* : Int */;
2911 val* var618 /* : NativeArray[Object] */;
2912 val* var619 /* : String */;
2913 static val* varonce620;
2914 val* var621 /* : String */;
2915 char* var622 /* : NativeString */;
2916 long var623 /* : Int */;
2917 val* var624 /* : FlatString */;
2918 static val* varonce625;
2919 val* var626 /* : String */;
2920 char* var627 /* : NativeString */;
2921 long var628 /* : Int */;
2922 val* var629 /* : FlatString */;
2923 val* var630 /* : Array[Object] */;
2924 long var631 /* : Int */;
2925 val* var632 /* : NativeArray[Object] */;
2926 val* var633 /* : String */;
2927 static val* varonce634;
2928 val* var635 /* : String */;
2929 char* var636 /* : NativeString */;
2930 long var637 /* : Int */;
2931 val* var638 /* : FlatString */;
2932 val* var639 /* : String */;
2933 static val* varonce640;
2934 val* var641 /* : String */;
2935 char* var642 /* : NativeString */;
2936 long var643 /* : Int */;
2937 val* var644 /* : FlatString */;
2938 val* var645 /* : String */;
2939 static val* varonce646;
2940 val* var647 /* : String */;
2941 char* var648 /* : NativeString */;
2942 long var649 /* : Int */;
2943 val* var650 /* : FlatString */;
2944 val* var651 /* : Array[Object] */;
2945 long var652 /* : Int */;
2946 val* var653 /* : NativeArray[Object] */;
2947 val* var654 /* : String */;
2948 static val* varonce655;
2949 val* var656 /* : String */;
2950 char* var657 /* : NativeString */;
2951 long var658 /* : Int */;
2952 val* var659 /* : FlatString */;
2953 static val* varonce660;
2954 val* var661 /* : String */;
2955 char* var662 /* : NativeString */;
2956 long var663 /* : Int */;
2957 val* var664 /* : FlatString */;
2958 static val* varonce665;
2959 val* var666 /* : String */;
2960 char* var667 /* : NativeString */;
2961 long var668 /* : Int */;
2962 val* var669 /* : FlatString */;
2963 val* var670 /* : Array[Object] */;
2964 long var671 /* : Int */;
2965 val* var672 /* : NativeArray[Object] */;
2966 val* var673 /* : String */;
2967 static val* varonce674;
2968 val* var675 /* : String */;
2969 char* var676 /* : NativeString */;
2970 long var677 /* : Int */;
2971 val* var678 /* : FlatString */;
2972 val* var679 /* : Array[Object] */;
2973 long var680 /* : Int */;
2974 val* var681 /* : NativeArray[Object] */;
2975 val* var682 /* : String */;
2976 static val* varonce683;
2977 val* var684 /* : String */;
2978 char* var685 /* : NativeString */;
2979 long var686 /* : Int */;
2980 val* var687 /* : FlatString */;
2981 static val* varonce688;
2982 val* var689 /* : String */;
2983 char* var690 /* : NativeString */;
2984 long var691 /* : Int */;
2985 val* var692 /* : FlatString */;
2986 val* var693 /* : Array[Object] */;
2987 long var694 /* : Int */;
2988 val* var695 /* : NativeArray[Object] */;
2989 val* var696 /* : String */;
2990 static val* varonce697;
2991 val* var698 /* : String */;
2992 char* var699 /* : NativeString */;
2993 long var700 /* : Int */;
2994 val* var701 /* : FlatString */;
2995 static val* varonce702;
2996 val* var703 /* : String */;
2997 char* var704 /* : NativeString */;
2998 long var705 /* : Int */;
2999 val* var706 /* : FlatString */;
3000 static val* varonce707;
3001 val* var708 /* : String */;
3002 char* var709 /* : NativeString */;
3003 long var710 /* : Int */;
3004 val* var711 /* : FlatString */;
3005 val* var712 /* : String */;
3006 val* var714 /* : String */;
3007 static val* varonce715;
3008 val* var716 /* : String */;
3009 char* var717 /* : NativeString */;
3010 long var718 /* : Int */;
3011 val* var719 /* : FlatString */;
3012 short int var720 /* : Bool */;
3013 short int var721 /* : Bool */;
3014 val* var722 /* : CodeWriter */;
3015 val* var724 /* : CodeWriter */;
3016 static val* varonce725;
3017 val* var726 /* : String */;
3018 char* var727 /* : NativeString */;
3019 long var728 /* : Int */;
3020 val* var729 /* : FlatString */;
3021 static val* varonce730;
3022 val* var731 /* : String */;
3023 char* var732 /* : NativeString */;
3024 long var733 /* : Int */;
3025 val* var734 /* : FlatString */;
3026 val* var735 /* : Array[Object] */;
3027 long var736 /* : Int */;
3028 val* var737 /* : NativeArray[Object] */;
3029 val* var738 /* : String */;
3030 val* var739 /* : CodeWriter */;
3031 val* var741 /* : CodeWriter */;
3032 static val* varonce742;
3033 val* var743 /* : String */;
3034 char* var744 /* : NativeString */;
3035 long var745 /* : Int */;
3036 val* var746 /* : FlatString */;
3037 val* var747 /* : CodeWriter */;
3038 val* var749 /* : CodeWriter */;
3039 static val* varonce750;
3040 val* var751 /* : String */;
3041 char* var752 /* : NativeString */;
3042 long var753 /* : Int */;
3043 val* var754 /* : FlatString */;
3044 val* var755 /* : CodeWriter */;
3045 val* var757 /* : CodeWriter */;
3046 static val* varonce758;
3047 val* var759 /* : String */;
3048 char* var760 /* : NativeString */;
3049 long var761 /* : Int */;
3050 val* var762 /* : FlatString */;
3051 val* var763 /* : CodeWriter */;
3052 val* var765 /* : CodeWriter */;
3053 static val* varonce766;
3054 val* var767 /* : String */;
3055 char* var768 /* : NativeString */;
3056 long var769 /* : Int */;
3057 val* var770 /* : FlatString */;
3058 static val* varonce771;
3059 val* var772 /* : String */;
3060 char* var773 /* : NativeString */;
3061 long var774 /* : Int */;
3062 val* var775 /* : FlatString */;
3063 val* var776 /* : Array[Object] */;
3064 long var777 /* : Int */;
3065 val* var778 /* : NativeArray[Object] */;
3066 val* var779 /* : String */;
3067 val* var780 /* : String */;
3068 static val* varonce781;
3069 val* var782 /* : String */;
3070 char* var783 /* : NativeString */;
3071 long var784 /* : Int */;
3072 val* var785 /* : FlatString */;
3073 static val* varonce786;
3074 val* var787 /* : String */;
3075 char* var788 /* : NativeString */;
3076 long var789 /* : Int */;
3077 val* var790 /* : FlatString */;
3078 val* var791 /* : Array[Object] */;
3079 long var792 /* : Int */;
3080 val* var793 /* : NativeArray[Object] */;
3081 val* var794 /* : String */;
3082 static val* varonce795;
3083 val* var796 /* : String */;
3084 char* var797 /* : NativeString */;
3085 long var798 /* : Int */;
3086 val* var799 /* : FlatString */;
3087 static val* varonce800;
3088 val* var801 /* : String */;
3089 char* var802 /* : NativeString */;
3090 long var803 /* : Int */;
3091 val* var804 /* : FlatString */;
3092 val* var805 /* : Array[Object] */;
3093 long var806 /* : Int */;
3094 val* var807 /* : NativeArray[Object] */;
3095 val* var808 /* : String */;
3096 val* var809 /* : String */;
3097 static val* varonce810;
3098 val* var811 /* : String */;
3099 char* var812 /* : NativeString */;
3100 long var813 /* : Int */;
3101 val* var814 /* : FlatString */;
3102 static val* varonce815;
3103 val* var816 /* : String */;
3104 char* var817 /* : NativeString */;
3105 long var818 /* : Int */;
3106 val* var819 /* : FlatString */;
3107 val* var820 /* : Array[Object] */;
3108 long var821 /* : Int */;
3109 val* var822 /* : NativeArray[Object] */;
3110 val* var823 /* : String */;
3111 static val* varonce824;
3112 val* var825 /* : String */;
3113 char* var826 /* : NativeString */;
3114 long var827 /* : Int */;
3115 val* var828 /* : FlatString */;
3116 val* var829 /* : String */;
3117 val* var_res /* var res: String */;
3118 static val* varonce830;
3119 val* var831 /* : String */;
3120 char* var832 /* : NativeString */;
3121 long var833 /* : Int */;
3122 val* var834 /* : FlatString */;
3123 static val* varonce835;
3124 val* var836 /* : String */;
3125 char* var837 /* : NativeString */;
3126 long var838 /* : Int */;
3127 val* var839 /* : FlatString */;
3128 static val* varonce840;
3129 val* var841 /* : String */;
3130 char* var842 /* : NativeString */;
3131 long var843 /* : Int */;
3132 val* var844 /* : FlatString */;
3133 val* var845 /* : Array[Object] */;
3134 long var846 /* : Int */;
3135 val* var847 /* : NativeArray[Object] */;
3136 val* var848 /* : String */;
3137 val* var849 /* : Array[MType] */;
3138 val* var851 /* : Array[MType] */;
3139 val* var852 /* : nullable Object */;
3140 val* var_mtype_elt /* var mtype_elt: MType */;
3141 static val* varonce853;
3142 val* var854 /* : String */;
3143 char* var855 /* : NativeString */;
3144 long var856 /* : Int */;
3145 val* var857 /* : FlatString */;
3146 static val* varonce858;
3147 val* var859 /* : String */;
3148 char* var860 /* : NativeString */;
3149 long var861 /* : Int */;
3150 val* var862 /* : FlatString */;
3151 val* var863 /* : String */;
3152 static val* varonce864;
3153 val* var865 /* : String */;
3154 char* var866 /* : NativeString */;
3155 long var867 /* : Int */;
3156 val* var868 /* : FlatString */;
3157 val* var869 /* : Array[Object] */;
3158 long var870 /* : Int */;
3159 val* var871 /* : NativeArray[Object] */;
3160 val* var872 /* : String */;
3161 static val* varonce873;
3162 val* var874 /* : String */;
3163 char* var875 /* : NativeString */;
3164 long var876 /* : Int */;
3165 val* var877 /* : FlatString */;
3166 val* var878 /* : Array[Object] */;
3167 long var879 /* : Int */;
3168 val* var880 /* : NativeArray[Object] */;
3169 val* var881 /* : String */;
3170 static val* varonce882;
3171 val* var883 /* : String */;
3172 char* var884 /* : NativeString */;
3173 long var885 /* : Int */;
3174 val* var886 /* : FlatString */;
3175 static val* varonce887;
3176 val* var888 /* : String */;
3177 char* var889 /* : NativeString */;
3178 long var890 /* : Int */;
3179 val* var891 /* : FlatString */;
3180 val* var892 /* : Array[Object] */;
3181 long var893 /* : Int */;
3182 val* var894 /* : NativeArray[Object] */;
3183 val* var895 /* : String */;
3184 static val* varonce896;
3185 val* var897 /* : String */;
3186 char* var898 /* : NativeString */;
3187 long var899 /* : Int */;
3188 val* var900 /* : FlatString */;
3189 val* var901 /* : Array[Object] */;
3190 long var902 /* : Int */;
3191 val* var903 /* : NativeArray[Object] */;
3192 val* var904 /* : String */;
3193 static val* varonce905;
3194 val* var906 /* : String */;
3195 char* var907 /* : NativeString */;
3196 long var908 /* : Int */;
3197 val* var909 /* : FlatString */;
3198 static val* varonce910;
3199 val* var911 /* : String */;
3200 char* var912 /* : NativeString */;
3201 long var913 /* : Int */;
3202 val* var914 /* : FlatString */;
3203 val* var915 /* : Array[Object] */;
3204 long var916 /* : Int */;
3205 val* var917 /* : NativeArray[Object] */;
3206 val* var918 /* : String */;
3207 static val* varonce919;
3208 val* var920 /* : String */;
3209 char* var921 /* : NativeString */;
3210 long var922 /* : Int */;
3211 val* var923 /* : FlatString */;
3212 static val* varonce924;
3213 val* var925 /* : String */;
3214 char* var926 /* : NativeString */;
3215 long var927 /* : Int */;
3216 val* var928 /* : FlatString */;
3217 val* var929 /* : Array[Object] */;
3218 long var930 /* : Int */;
3219 val* var931 /* : NativeArray[Object] */;
3220 val* var932 /* : String */;
3221 val* var933 /* : String */;
3222 static val* varonce934;
3223 val* var935 /* : String */;
3224 char* var936 /* : NativeString */;
3225 long var937 /* : Int */;
3226 val* var938 /* : FlatString */;
3227 static val* varonce939;
3228 val* var940 /* : String */;
3229 char* var941 /* : NativeString */;
3230 long var942 /* : Int */;
3231 val* var943 /* : FlatString */;
3232 val* var944 /* : Array[Object] */;
3233 long var945 /* : Int */;
3234 val* var946 /* : NativeArray[Object] */;
3235 val* var947 /* : String */;
3236 static val* varonce948;
3237 val* var949 /* : String */;
3238 char* var950 /* : NativeString */;
3239 long var951 /* : Int */;
3240 val* var952 /* : FlatString */;
3241 static val* varonce953;
3242 val* var954 /* : String */;
3243 char* var955 /* : NativeString */;
3244 long var956 /* : Int */;
3245 val* var957 /* : FlatString */;
3246 val* var958 /* : Array[Object] */;
3247 long var959 /* : Int */;
3248 val* var960 /* : NativeArray[Object] */;
3249 val* var961 /* : String */;
3250 val* var962 /* : String */;
3251 static val* varonce963;
3252 val* var964 /* : String */;
3253 char* var965 /* : NativeString */;
3254 long var966 /* : Int */;
3255 val* var967 /* : FlatString */;
3256 static val* varonce968;
3257 val* var969 /* : String */;
3258 char* var970 /* : NativeString */;
3259 long var971 /* : Int */;
3260 val* var972 /* : FlatString */;
3261 val* var973 /* : Array[Object] */;
3262 long var974 /* : Int */;
3263 val* var975 /* : NativeArray[Object] */;
3264 val* var976 /* : String */;
3265 static val* varonce977;
3266 val* var978 /* : String */;
3267 char* var979 /* : NativeString */;
3268 long var980 /* : Int */;
3269 val* var981 /* : FlatString */;
3270 val* var982 /* : Array[Object] */;
3271 long var983 /* : Int */;
3272 val* var984 /* : NativeArray[Object] */;
3273 val* var985 /* : String */;
3274 static val* varonce986;
3275 val* var987 /* : String */;
3276 char* var988 /* : NativeString */;
3277 long var989 /* : Int */;
3278 val* var990 /* : FlatString */;
3279 val* var991 /* : RuntimeVariable */;
3280 val* var_res992 /* var res: RuntimeVariable */;
3281 short int var993 /* : Bool */;
3282 static val* varonce995;
3283 val* var996 /* : String */;
3284 char* var997 /* : NativeString */;
3285 long var998 /* : Int */;
3286 val* var999 /* : FlatString */;
3287 long var1000 /* : Int */;
3288 static val* varonce1001;
3289 val* var1002 /* : String */;
3290 char* var1003 /* : NativeString */;
3291 long var1004 /* : Int */;
3292 val* var1005 /* : FlatString */;
3293 val* var1006 /* : Array[Object] */;
3294 long var1007 /* : Int */;
3295 val* var1008 /* : NativeArray[Object] */;
3296 val* var1009 /* : Object */;
3297 val* var1010 /* : String */;
3298 static val* varonce1011;
3299 val* var1012 /* : String */;
3300 char* var1013 /* : NativeString */;
3301 long var1014 /* : Int */;
3302 val* var1015 /* : FlatString */;
3303 val* var1016 /* : Array[Object] */;
3304 long var1017 /* : Int */;
3305 val* var1018 /* : NativeArray[Object] */;
3306 val* var1019 /* : String */;
3307 static val* varonce1020;
3308 val* var1021 /* : String */;
3309 char* var1022 /* : NativeString */;
3310 long var1023 /* : Int */;
3311 val* var1024 /* : FlatString */;
3312 static val* varonce1025;
3313 val* var1026 /* : String */;
3314 char* var1027 /* : NativeString */;
3315 long var1028 /* : Int */;
3316 val* var1029 /* : FlatString */;
3317 val* var1030 /* : Array[Object] */;
3318 long var1031 /* : Int */;
3319 val* var1032 /* : NativeArray[Object] */;
3320 val* var1033 /* : String */;
3321 static val* varonce1034;
3322 val* var1035 /* : String */;
3323 char* var1036 /* : NativeString */;
3324 long var1037 /* : Int */;
3325 val* var1038 /* : FlatString */;
3326 static val* varonce1039;
3327 val* var1040 /* : String */;
3328 char* var1041 /* : NativeString */;
3329 long var1042 /* : Int */;
3330 val* var1043 /* : FlatString */;
3331 val* var1044 /* : Array[Object] */;
3332 long var1045 /* : Int */;
3333 val* var1046 /* : NativeArray[Object] */;
3334 val* var1047 /* : String */;
3335 static val* varonce1048;
3336 val* var1049 /* : String */;
3337 char* var1050 /* : NativeString */;
3338 long var1051 /* : Int */;
3339 val* var1052 /* : FlatString */;
3340 var_mclass = p0;
3341 {
3342 var = model__MClass__intro(var_mclass);
3343 }
3344 {
3345 { /* Inline model#MClassDef#bound_mtype (var) on <var:MClassDef> */
3346 var3 = var->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var:MClassDef> */
3347 if (unlikely(var3 == NULL)) {
3348 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
3349 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 477);
3350 show_backtrace(1);
3351 }
3352 var1 = var3;
3353 RET_LABEL2:(void)0;
3354 }
3355 }
3356 var_mtype = var1;
3357 {
3358 var4 = abstract_compiler__MClass__c_name(var_mclass);
3359 }
3360 var_c_name = var4;
3361 {
3362 var5 = separate_compiler__MClass__c_instance_name(var_mclass);
3363 }
3364 var_c_instance_name = var5;
3365 {
3366 { /* Inline separate_compiler#SeparateCompiler#method_tables (self) on <self:SeparateErasureCompiler> */
3367 var8 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_tables].val; /* _method_tables on <self:SeparateErasureCompiler> */
3368 if (unlikely(var8 == NULL)) {
3369 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_tables");
3370 PRINT_ERROR(" (%s:%d)\n", "src/separate_compiler.nit", 792);
3371 show_backtrace(1);
3372 }
3373 var6 = var8;
3374 RET_LABEL7:(void)0;
3375 }
3376 }
3377 {
3378 var9 = ((val* (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var6, var_mclass) /* [] on <var6:Map[MClass, Array[nullable MPropDef]]>*/;
3379 }
3380 var_vft = var9;
3381 {
3382 { /* Inline separate_compiler#SeparateCompiler#attr_tables (self) on <self:SeparateErasureCompiler> */
3383 var12 = self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_tables].val; /* _attr_tables on <self:SeparateErasureCompiler> */
3384 if (unlikely(var12 == NULL)) {
3385 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_tables");
3386 PRINT_ERROR(" (%s:%d)\n", "src/separate_compiler.nit", 793);
3387 show_backtrace(1);
3388 }
3389 var10 = var12;
3390 RET_LABEL11:(void)0;
3391 }
3392 }
3393 {
3394 var13 = ((val* (*)(val*, val*))(var10->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var10, var_mclass) /* [] on <var10:Map[MClass, Array[nullable MPropDef]]>*/;
3395 }
3396 var_attrs = var13;
3397 {
3398 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables (self) on <self:SeparateErasureCompiler> */
3399 var16 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:SeparateErasureCompiler> */
3400 if (unlikely(var16 == NULL)) {
3401 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
3402 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 395);
3403 show_backtrace(1);
3404 }
3405 var14 = var16;
3406 RET_LABEL15:(void)0;
3407 }
3408 }
3409 {
3410 var17 = ((val* (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var14, var_mclass) /* [] on <var14:Map[MClass, Array[nullable MClass]]>*/;
3411 }
3412 var_class_table = var17;
3413 {
3414 var18 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
3415 }
3416 var_v = var18;
3417 {
3418 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateErasureCompiler> */
3419 var21 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateErasureCompiler> */
3420 var19 = var21;
3421 RET_LABEL20:(void)0;
3422 }
3423 }
3424 var_rta = var19;
3425 {
3426 { /* Inline model#MClass#kind (var_mclass) on <var_mclass:MClass> */
3427 var25 = var_mclass->attrs[COLOR_model__MClass___kind].val; /* _kind on <var_mclass:MClass> */
3428 if (unlikely(var25 == NULL)) {
3429 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
3430 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 355);
3431 show_backtrace(1);
3432 }
3433 var23 = var25;
3434 RET_LABEL24:(void)0;
3435 }
3436 }
3437 {
3438 var26 = model__Object__abstract_kind(self);
3439 }
3440 {
3441 { /* Inline kernel#Object#== (var23,var26) on <var23:MClassKind> */
3442 var_other = var26;
3443 {
3444 { /* Inline kernel#Object#is_same_instance (var23,var_other) on <var23:MClassKind> */
3445 var32 = var23 == var_other;
3446 var30 = var32;
3447 goto RET_LABEL31;
3448 RET_LABEL31:(void)0;
3449 }
3450 }
3451 var28 = var30;
3452 goto RET_LABEL29;
3453 RET_LABEL29:(void)0;
3454 }
3455 var27 = var28;
3456 }
3457 var_ = var27;
3458 if (var27){
3459 var22 = var_;
3460 } else {
3461 {
3462 { /* Inline model#MClass#kind (var_mclass) on <var_mclass:MClass> */
3463 var35 = var_mclass->attrs[COLOR_model__MClass___kind].val; /* _kind on <var_mclass:MClass> */
3464 if (unlikely(var35 == NULL)) {
3465 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
3466 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 355);
3467 show_backtrace(1);
3468 }
3469 var33 = var35;
3470 RET_LABEL34:(void)0;
3471 }
3472 }
3473 {
3474 var36 = model__Object__interface_kind(self);
3475 }
3476 {
3477 { /* Inline kernel#Object#== (var33,var36) on <var33:MClassKind> */
3478 var_other = var36;
3479 {
3480 { /* Inline kernel#Object#is_same_instance (var33,var_other) on <var33:MClassKind> */
3481 var42 = var33 == var_other;
3482 var40 = var42;
3483 goto RET_LABEL41;
3484 RET_LABEL41:(void)0;
3485 }
3486 }
3487 var38 = var40;
3488 goto RET_LABEL39;
3489 RET_LABEL39:(void)0;
3490 }
3491 var37 = var38;
3492 }
3493 var22 = var37;
3494 }
3495 var_is_dead = var22;
3496 var47 = !var_is_dead;
3497 var_48 = var47;
3498 if (var47){
3499 var49 = NULL;
3500 if (var_rta == NULL) {
3501 var50 = 0; /* is null */
3502 } else {
3503 var50 = 1; /* arg is null and recv is not */
3504 }
3505 if (0) {
3506 { /* Inline kernel#Object#!= (var_rta,var49) on <var_rta:nullable RapidTypeAnalysis> */
3507 var_other53 = var49;
3508 {
3509 var55 = ((short int (*)(val*, val*))(var_rta->class->vft[COLOR_kernel__Object___61d_61d]))(var_rta, var_other53) /* == on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/;
3510 var54 = var55;
3511 }
3512 var56 = !var54;
3513 var51 = var56;
3514 goto RET_LABEL52;
3515 RET_LABEL52:(void)0;
3516 }
3517 var50 = var51;
3518 }
3519 var46 = var50;
3520 } else {
3521 var46 = var_48;
3522 }
3523 var_57 = var46;
3524 if (var46){
3525 {
3526 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_classes (var_rta) on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
3527 var60 = var_rta->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_classes].val; /* _live_classes on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
3528 if (unlikely(var60 == NULL)) {
3529 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_classes");
3530 PRINT_ERROR(" (%s:%d)\n", "src/rapid_type_analysis.nit", 64);
3531 show_backtrace(1);
3532 }
3533 var58 = var60;
3534 RET_LABEL59:(void)0;
3535 }
3536 }
3537 {
3538 var61 = hash_collection__HashSet__has(var58, var_mclass);
3539 }
3540 var62 = !var61;
3541 var45 = var62;
3542 } else {
3543 var45 = var_57;
3544 }
3545 var_63 = var45;
3546 if (var45){
3547 {
3548 var64 = abstract_compiler__MClassType__ctype(var_mtype);
3549 }
3550 if (varonce) {
3551 var65 = varonce;
3552 } else {
3553 var66 = "val*";
3554 var67 = 4;
3555 var68 = string__NativeString__to_s_with_length(var66, var67);
3556 var65 = var68;
3557 varonce = var65;
3558 }
3559 {
3560 var70 = string__FlatString___61d_61d(var64, var65);
3561 var69 = var70;
3562 }
3563 var44 = var69;
3564 } else {
3565 var44 = var_63;
3566 }
3567 var_71 = var44;
3568 if (var44){
3569 {
3570 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
3571 var74 = var_mclass->attrs[COLOR_model__MClass___name].val; /* _name on <var_mclass:MClass> */
3572 if (unlikely(var74 == NULL)) {
3573 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
3574 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 340);
3575 show_backtrace(1);
3576 }
3577 var72 = var74;
3578 RET_LABEL73:(void)0;
3579 }
3580 }
3581 if (varonce75) {
3582 var76 = varonce75;
3583 } else {
3584 var77 = "NativeArray";
3585 var78 = 11;
3586 var79 = string__NativeString__to_s_with_length(var77, var78);
3587 var76 = var79;
3588 varonce75 = var76;
3589 }
3590 {
3591 { /* Inline kernel#Object#!= (var72,var76) on <var72:String> */
3592 var_other53 = var76;
3593 {
3594 var84 = ((short int (*)(val*, val*))(var72->class->vft[COLOR_kernel__Object___61d_61d]))(var72, var_other53) /* == on <var72:String>*/;
3595 var83 = var84;
3596 }
3597 var85 = !var83;
3598 var81 = var85;
3599 goto RET_LABEL82;
3600 RET_LABEL82:(void)0;
3601 }
3602 var80 = var81;
3603 }
3604 var43 = var80;
3605 } else {
3606 var43 = var_71;
3607 }
3608 if (var43){
3609 var86 = 1;
3610 var_is_dead = var86;
3611 } else {
3612 }
3613 if (varonce87) {
3614 var88 = varonce87;
3615 } else {
3616 var89 = "/* runtime class ";
3617 var90 = 17;
3618 var91 = string__NativeString__to_s_with_length(var89, var90);
3619 var88 = var91;
3620 varonce87 = var88;
3621 }
3622 if (varonce92) {
3623 var93 = varonce92;
3624 } else {
3625 var94 = " */";
3626 var95 = 3;
3627 var96 = string__NativeString__to_s_with_length(var94, var95);
3628 var93 = var96;
3629 varonce92 = var93;
3630 }
3631 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
3632 { /* var97 = array_instance Array[Object] */
3633 var98 = 3;
3634 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
3635 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var88;
3636 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var_c_name;
3637 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
3638 {
3639 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
3640 }
3641 }
3642 {
3643 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
3644 }
3645 {
3646 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var100); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3647 }
3648 if (varonce101) {
3649 var102 = varonce101;
3650 } else {
3651 var103 = "class_";
3652 var104 = 6;
3653 var105 = string__NativeString__to_s_with_length(var103, var104);
3654 var102 = var105;
3655 varonce101 = var102;
3656 }
3657 var106 = NEW_array__Array(&type_array__Arraykernel__Object);
3658 { /* var106 = array_instance Array[Object] */
3659 var107 = 2;
3660 var108 = NEW_array__NativeArray(var107, &type_array__NativeArraykernel__Object);
3661 ((struct instance_array__NativeArray*)var108)->values[0] = (val*) var102;
3662 ((struct instance_array__NativeArray*)var108)->values[1] = (val*) var_c_name;
3663 {
3664 ((void (*)(val*, val*, long))(var106->class->vft[COLOR_array__Array__with_native]))(var106, var108, var107) /* with_native on <var106:Array[Object]>*/;
3665 }
3666 }
3667 {
3668 var109 = ((val* (*)(val*))(var106->class->vft[COLOR_string__Object__to_s]))(var106) /* to_s on <var106:Array[Object]>*/;
3669 }
3670 if (varonce110) {
3671 var111 = varonce110;
3672 } else {
3673 var112 = "extern const struct class class_";
3674 var113 = 32;
3675 var114 = string__NativeString__to_s_with_length(var112, var113);
3676 var111 = var114;
3677 varonce110 = var111;
3678 }
3679 if (varonce115) {
3680 var116 = varonce115;
3681 } else {
3682 var117 = ";";
3683 var118 = 1;
3684 var119 = string__NativeString__to_s_with_length(var117, var118);
3685 var116 = var119;
3686 varonce115 = var116;
3687 }
3688 var120 = NEW_array__Array(&type_array__Arraykernel__Object);
3689 { /* var120 = array_instance Array[Object] */
3690 var121 = 3;
3691 var122 = NEW_array__NativeArray(var121, &type_array__NativeArraykernel__Object);
3692 ((struct instance_array__NativeArray*)var122)->values[0] = (val*) var111;
3693 ((struct instance_array__NativeArray*)var122)->values[1] = (val*) var_c_name;
3694 ((struct instance_array__NativeArray*)var122)->values[2] = (val*) var116;
3695 {
3696 ((void (*)(val*, val*, long))(var120->class->vft[COLOR_array__Array__with_native]))(var120, var122, var121) /* with_native on <var120:Array[Object]>*/;
3697 }
3698 }
3699 {
3700 var123 = ((val* (*)(val*))(var120->class->vft[COLOR_string__Object__to_s]))(var120) /* to_s on <var120:Array[Object]>*/;
3701 }
3702 {
3703 abstract_compiler__AbstractCompiler__provide_declaration(self, var109, var123); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
3704 }
3705 if (varonce124) {
3706 var125 = varonce124;
3707 } else {
3708 var126 = "extern const struct type_table type_table_";
3709 var127 = 42;
3710 var128 = string__NativeString__to_s_with_length(var126, var127);
3711 var125 = var128;
3712 varonce124 = var125;
3713 }
3714 if (varonce129) {
3715 var130 = varonce129;
3716 } else {
3717 var131 = ";";
3718 var132 = 1;
3719 var133 = string__NativeString__to_s_with_length(var131, var132);
3720 var130 = var133;
3721 varonce129 = var130;
3722 }
3723 var134 = NEW_array__Array(&type_array__Arraykernel__Object);
3724 { /* var134 = array_instance Array[Object] */
3725 var135 = 3;
3726 var136 = NEW_array__NativeArray(var135, &type_array__NativeArraykernel__Object);
3727 ((struct instance_array__NativeArray*)var136)->values[0] = (val*) var125;
3728 ((struct instance_array__NativeArray*)var136)->values[1] = (val*) var_c_name;
3729 ((struct instance_array__NativeArray*)var136)->values[2] = (val*) var130;
3730 {
3731 ((void (*)(val*, val*, long))(var134->class->vft[COLOR_array__Array__with_native]))(var134, var136, var135) /* with_native on <var134:Array[Object]>*/;
3732 }
3733 }
3734 {
3735 var137 = ((val* (*)(val*))(var134->class->vft[COLOR_string__Object__to_s]))(var134) /* to_s on <var134:Array[Object]>*/;
3736 }
3737 {
3738 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var137); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3739 }
3740 if (varonce138) {
3741 var139 = varonce138;
3742 } else {
3743 var140 = "const struct class class_";
3744 var141 = 25;
3745 var142 = string__NativeString__to_s_with_length(var140, var141);
3746 var139 = var142;
3747 varonce138 = var139;
3748 }
3749 if (varonce143) {
3750 var144 = varonce143;
3751 } else {
3752 var145 = " = {";
3753 var146 = 4;
3754 var147 = string__NativeString__to_s_with_length(var145, var146);
3755 var144 = var147;
3756 varonce143 = var144;
3757 }
3758 var148 = NEW_array__Array(&type_array__Arraykernel__Object);
3759 { /* var148 = array_instance Array[Object] */
3760 var149 = 3;
3761 var150 = NEW_array__NativeArray(var149, &type_array__NativeArraykernel__Object);
3762 ((struct instance_array__NativeArray*)var150)->values[0] = (val*) var139;
3763 ((struct instance_array__NativeArray*)var150)->values[1] = (val*) var_c_name;
3764 ((struct instance_array__NativeArray*)var150)->values[2] = (val*) var144;
3765 {
3766 ((void (*)(val*, val*, long))(var148->class->vft[COLOR_array__Array__with_native]))(var148, var150, var149) /* with_native on <var148:Array[Object]>*/;
3767 }
3768 }
3769 {
3770 var151 = ((val* (*)(val*))(var148->class->vft[COLOR_string__Object__to_s]))(var148) /* to_s on <var148:Array[Object]>*/;
3771 }
3772 {
3773 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var151); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3774 }
3775 {
3776 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids (self) on <self:SeparateErasureCompiler> */
3777 var154 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:SeparateErasureCompiler> */
3778 if (unlikely(var154 == NULL)) {
3779 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
3780 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 95);
3781 show_backtrace(1);
3782 }
3783 var152 = var154;
3784 RET_LABEL153:(void)0;
3785 }
3786 }
3787 {
3788 var155 = ((val* (*)(val*, val*))(var152->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var152, var_mclass) /* [] on <var152:Map[MClass, Int]>*/;
3789 }
3790 if (varonce156) {
3791 var157 = varonce156;
3792 } else {
3793 var158 = ",";
3794 var159 = 1;
3795 var160 = string__NativeString__to_s_with_length(var158, var159);
3796 var157 = var160;
3797 varonce156 = var157;
3798 }
3799 var161 = NEW_array__Array(&type_array__Arraykernel__Object);
3800 { /* var161 = array_instance Array[Object] */
3801 var162 = 2;
3802 var163 = NEW_array__NativeArray(var162, &type_array__NativeArraykernel__Object);
3803 ((struct instance_array__NativeArray*)var163)->values[0] = (val*) var155;
3804 ((struct instance_array__NativeArray*)var163)->values[1] = (val*) var157;
3805 {
3806 ((void (*)(val*, val*, long))(var161->class->vft[COLOR_array__Array__with_native]))(var161, var163, var162) /* with_native on <var161:Array[Object]>*/;
3807 }
3808 }
3809 {
3810 var164 = ((val* (*)(val*))(var161->class->vft[COLOR_string__Object__to_s]))(var161) /* to_s on <var161:Array[Object]>*/;
3811 }
3812 {
3813 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var164); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3814 }
3815 if (varonce165) {
3816 var166 = varonce165;
3817 } else {
3818 var167 = "\"";
3819 var168 = 1;
3820 var169 = string__NativeString__to_s_with_length(var167, var168);
3821 var166 = var169;
3822 varonce165 = var166;
3823 }
3824 {
3825 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
3826 var172 = var_mclass->attrs[COLOR_model__MClass___name].val; /* _name on <var_mclass:MClass> */
3827 if (unlikely(var172 == NULL)) {
3828 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
3829 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 340);
3830 show_backtrace(1);
3831 }
3832 var170 = var172;
3833 RET_LABEL171:(void)0;
3834 }
3835 }
3836 if (varonce173) {
3837 var174 = varonce173;
3838 } else {
3839 var175 = "\", /* class_name_string */";
3840 var176 = 26;
3841 var177 = string__NativeString__to_s_with_length(var175, var176);
3842 var174 = var177;
3843 varonce173 = var174;
3844 }
3845 var178 = NEW_array__Array(&type_array__Arraykernel__Object);
3846 { /* var178 = array_instance Array[Object] */
3847 var179 = 3;
3848 var180 = NEW_array__NativeArray(var179, &type_array__NativeArraykernel__Object);
3849 ((struct instance_array__NativeArray*)var180)->values[0] = (val*) var166;
3850 ((struct instance_array__NativeArray*)var180)->values[1] = (val*) var170;
3851 ((struct instance_array__NativeArray*)var180)->values[2] = (val*) var174;
3852 {
3853 ((void (*)(val*, val*, long))(var178->class->vft[COLOR_array__Array__with_native]))(var178, var180, var179) /* with_native on <var178:Array[Object]>*/;
3854 }
3855 }
3856 {
3857 var181 = ((val* (*)(val*))(var178->class->vft[COLOR_string__Object__to_s]))(var178) /* to_s on <var178:Array[Object]>*/;
3858 }
3859 {
3860 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var181); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3861 }
3862 {
3863 var182 = separate_compiler__SeparateCompiler__box_kind_of(self, var_mclass);
3864 }
3865 if (varonce183) {
3866 var184 = varonce183;
3867 } else {
3868 var185 = ", /* box_kind */";
3869 var186 = 16;
3870 var187 = string__NativeString__to_s_with_length(var185, var186);
3871 var184 = var187;
3872 varonce183 = var184;
3873 }
3874 var188 = NEW_array__Array(&type_array__Arraykernel__Object);
3875 { /* var188 = array_instance Array[Object] */
3876 var189 = 2;
3877 var190 = NEW_array__NativeArray(var189, &type_array__NativeArraykernel__Object);
3878 var191 = BOX_kernel__Int(var182); /* autobox from Int to Object */
3879 ((struct instance_array__NativeArray*)var190)->values[0] = (val*) var191;
3880 ((struct instance_array__NativeArray*)var190)->values[1] = (val*) var184;
3881 {
3882 ((void (*)(val*, val*, long))(var188->class->vft[COLOR_array__Array__with_native]))(var188, var190, var189) /* with_native on <var188:Array[Object]>*/;
3883 }
3884 }
3885 {
3886 var192 = ((val* (*)(val*))(var188->class->vft[COLOR_string__Object__to_s]))(var188) /* to_s on <var188:Array[Object]>*/;
3887 }
3888 {
3889 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var192); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3890 }
3891 {
3892 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors (self) on <self:SeparateErasureCompiler> */
3893 var195 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
3894 if (unlikely(var195 == NULL)) {
3895 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
3896 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 96);
3897 show_backtrace(1);
3898 }
3899 var193 = var195;
3900 RET_LABEL194:(void)0;
3901 }
3902 }
3903 {
3904 var196 = ((val* (*)(val*, val*))(var193->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var193, var_mclass) /* [] on <var193:Map[MClass, Int]>*/;
3905 }
3906 if (varonce197) {
3907 var198 = varonce197;
3908 } else {
3909 var199 = ",";
3910 var200 = 1;
3911 var201 = string__NativeString__to_s_with_length(var199, var200);
3912 var198 = var201;
3913 varonce197 = var198;
3914 }
3915 var202 = NEW_array__Array(&type_array__Arraykernel__Object);
3916 { /* var202 = array_instance Array[Object] */
3917 var203 = 2;
3918 var204 = NEW_array__NativeArray(var203, &type_array__NativeArraykernel__Object);
3919 ((struct instance_array__NativeArray*)var204)->values[0] = (val*) var196;
3920 ((struct instance_array__NativeArray*)var204)->values[1] = (val*) var198;
3921 {
3922 ((void (*)(val*, val*, long))(var202->class->vft[COLOR_array__Array__with_native]))(var202, var204, var203) /* with_native on <var202:Array[Object]>*/;
3923 }
3924 }
3925 {
3926 var205 = ((val* (*)(val*))(var202->class->vft[COLOR_string__Object__to_s]))(var202) /* to_s on <var202:Array[Object]>*/;
3927 }
3928 {
3929 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var205); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3930 }
3931 var206 = !var_is_dead;
3932 if (var206){
3933 {
3934 var207 = separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(self, var_mclass);
3935 }
3936 if (var207){
3937 if (varonce208) {
3938 var209 = varonce208;
3939 } else {
3940 var210 = "vts_table_";
3941 var211 = 10;
3942 var212 = string__NativeString__to_s_with_length(var210, var211);
3943 var209 = var212;
3944 varonce208 = var209;
3945 }
3946 var213 = NEW_array__Array(&type_array__Arraykernel__Object);
3947 { /* var213 = array_instance Array[Object] */
3948 var214 = 2;
3949 var215 = NEW_array__NativeArray(var214, &type_array__NativeArraykernel__Object);
3950 ((struct instance_array__NativeArray*)var215)->values[0] = (val*) var209;
3951 ((struct instance_array__NativeArray*)var215)->values[1] = (val*) var_c_name;
3952 {
3953 ((void (*)(val*, val*, long))(var213->class->vft[COLOR_array__Array__with_native]))(var213, var215, var214) /* with_native on <var213:Array[Object]>*/;
3954 }
3955 }
3956 {
3957 var216 = ((val* (*)(val*))(var213->class->vft[COLOR_string__Object__to_s]))(var213) /* to_s on <var213:Array[Object]>*/;
3958 }
3959 {
3960 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var216); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
3961 }
3962 if (varonce217) {
3963 var218 = varonce217;
3964 } else {
3965 var219 = "&vts_table_";
3966 var220 = 11;
3967 var221 = string__NativeString__to_s_with_length(var219, var220);
3968 var218 = var221;
3969 varonce217 = var218;
3970 }
3971 if (varonce222) {
3972 var223 = varonce222;
3973 } else {
3974 var224 = ",";
3975 var225 = 1;
3976 var226 = string__NativeString__to_s_with_length(var224, var225);
3977 var223 = var226;
3978 varonce222 = var223;
3979 }
3980 var227 = NEW_array__Array(&type_array__Arraykernel__Object);
3981 { /* var227 = array_instance Array[Object] */
3982 var228 = 3;
3983 var229 = NEW_array__NativeArray(var228, &type_array__NativeArraykernel__Object);
3984 ((struct instance_array__NativeArray*)var229)->values[0] = (val*) var218;
3985 ((struct instance_array__NativeArray*)var229)->values[1] = (val*) var_c_name;
3986 ((struct instance_array__NativeArray*)var229)->values[2] = (val*) var223;
3987 {
3988 ((void (*)(val*, val*, long))(var227->class->vft[COLOR_array__Array__with_native]))(var227, var229, var228) /* with_native on <var227:Array[Object]>*/;
3989 }
3990 }
3991 {
3992 var230 = ((val* (*)(val*))(var227->class->vft[COLOR_string__Object__to_s]))(var227) /* to_s on <var227:Array[Object]>*/;
3993 }
3994 {
3995 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var230); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3996 }
3997 } else {
3998 if (varonce231) {
3999 var232 = varonce231;
4000 } else {
4001 var233 = "NULL,";
4002 var234 = 5;
4003 var235 = string__NativeString__to_s_with_length(var233, var234);
4004 var232 = var235;
4005 varonce231 = var232;
4006 }
4007 {
4008 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var232); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4009 }
4010 }
4011 if (varonce236) {
4012 var237 = varonce236;
4013 } else {
4014 var238 = "&type_table_";
4015 var239 = 12;
4016 var240 = string__NativeString__to_s_with_length(var238, var239);
4017 var237 = var240;
4018 varonce236 = var237;
4019 }
4020 if (varonce241) {
4021 var242 = varonce241;
4022 } else {
4023 var243 = ",";
4024 var244 = 1;
4025 var245 = string__NativeString__to_s_with_length(var243, var244);
4026 var242 = var245;
4027 varonce241 = var242;
4028 }
4029 var246 = NEW_array__Array(&type_array__Arraykernel__Object);
4030 { /* var246 = array_instance Array[Object] */
4031 var247 = 3;
4032 var248 = NEW_array__NativeArray(var247, &type_array__NativeArraykernel__Object);
4033 ((struct instance_array__NativeArray*)var248)->values[0] = (val*) var237;
4034 ((struct instance_array__NativeArray*)var248)->values[1] = (val*) var_c_name;
4035 ((struct instance_array__NativeArray*)var248)->values[2] = (val*) var242;
4036 {
4037 ((void (*)(val*, val*, long))(var246->class->vft[COLOR_array__Array__with_native]))(var246, var248, var247) /* with_native on <var246:Array[Object]>*/;
4038 }
4039 }
4040 {
4041 var249 = ((val* (*)(val*))(var246->class->vft[COLOR_string__Object__to_s]))(var246) /* to_s on <var246:Array[Object]>*/;
4042 }
4043 {
4044 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var249); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4045 }
4046 if (varonce250) {
4047 var251 = varonce250;
4048 } else {
4049 var252 = "{";
4050 var253 = 1;
4051 var254 = string__NativeString__to_s_with_length(var252, var253);
4052 var251 = var254;
4053 varonce250 = var251;
4054 }
4055 {
4056 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var251); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4057 }
4058 var255 = NEW_range__Range(&type_range__Rangekernel__Int);
4059 var256 = 0;
4060 {
4061 var257 = array__AbstractArrayRead__length(var_vft);
4062 }
4063 {
4064 var258 = BOX_kernel__Int(var256); /* autobox from Int to Discrete */
4065 var259 = BOX_kernel__Int(var257); /* autobox from Int to Discrete */
4066 range__Range__without_last(var255, var258, var259); /* Direct call range#Range#without_last on <var255:Range[Int]>*/
4067 }
4068 {
4069 var260 = range__Range__iterator(var255);
4070 }
4071 for(;;) {
4072 {
4073 var261 = ((short int (*)(val*))(var260->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var260) /* is_ok on <var260:Iterator[Discrete]>*/;
4074 }
4075 if(!var261) break;
4076 {
4077 var262 = ((val* (*)(val*))(var260->class->vft[COLOR_abstract_collection__Iterator__item]))(var260) /* item on <var260:Iterator[Discrete]>*/;
4078 }
4079 var263 = ((struct instance_kernel__Int*)var262)->value; /* autounbox from nullable Object to Int */;
4080 var_i = var263;
4081 {
4082 var264 = array__Array___91d_93d(var_vft, var_i);
4083 }
4084 var_mpropdef = var264;
4085 var265 = NULL;
4086 if (var_mpropdef == NULL) {
4087 var266 = 1; /* is null */
4088 } else {
4089 var266 = 0; /* arg is null but recv is not */
4090 }
4091 if (0) {
4092 { /* Inline kernel#Object#== (var_mpropdef,var265) on <var_mpropdef:nullable MPropDef> */
4093 var_other = var265;
4094 {
4095 { /* Inline kernel#Object#is_same_instance (var_mpropdef,var_other) on <var_mpropdef:nullable MPropDef(MPropDef)> */
4096 var271 = var_mpropdef == var_other;
4097 var269 = var271;
4098 goto RET_LABEL270;
4099 RET_LABEL270:(void)0;
4100 }
4101 }
4102 var267 = var269;
4103 goto RET_LABEL268;
4104 RET_LABEL268:(void)0;
4105 }
4106 var266 = var267;
4107 }
4108 if (var266){
4109 if (varonce272) {
4110 var273 = varonce272;
4111 } else {
4112 var274 = "NULL, /* empty */";
4113 var275 = 17;
4114 var276 = string__NativeString__to_s_with_length(var274, var275);
4115 var273 = var276;
4116 varonce272 = var273;
4117 }
4118 {
4119 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var273); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4120 }
4121 } else {
4122 /* <var_mpropdef:nullable MPropDef(MPropDef)> isa MMethodDef */
4123 cltype = type_model__MMethodDef.color;
4124 idtype = type_model__MMethodDef.id;
4125 if(cltype >= var_mpropdef->type->table_size) {
4126 var277 = 0;
4127 } else {
4128 var277 = var_mpropdef->type->type_table[cltype] == idtype;
4129 }
4130 if (unlikely(!var277)) {
4131 PRINT_ERROR("Runtime error: %s", "Assert failed");
4132 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 251);
4133 show_backtrace(1);
4134 }
4135 var279 = NULL;
4136 if (var_rta == NULL) {
4137 var280 = 0; /* is null */
4138 } else {
4139 var280 = 1; /* arg is null and recv is not */
4140 }
4141 if (0) {
4142 { /* Inline kernel#Object#!= (var_rta,var279) on <var_rta:nullable RapidTypeAnalysis> */
4143 var_other53 = var279;
4144 {
4145 var284 = ((short int (*)(val*, val*))(var_rta->class->vft[COLOR_kernel__Object___61d_61d]))(var_rta, var_other53) /* == on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/;
4146 var283 = var284;
4147 }
4148 var285 = !var283;
4149 var281 = var285;
4150 goto RET_LABEL282;
4151 RET_LABEL282:(void)0;
4152 }
4153 var280 = var281;
4154 }
4155 var_286 = var280;
4156 if (var280){
4157 {
4158 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_methoddefs (var_rta) on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
4159 var289 = var_rta->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_methoddefs].val; /* _live_methoddefs on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
4160 if (unlikely(var289 == NULL)) {
4161 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_methoddefs");
4162 PRINT_ERROR(" (%s:%d)\n", "src/rapid_type_analysis.nit", 74);
4163 show_backtrace(1);
4164 }
4165 var287 = var289;
4166 RET_LABEL288:(void)0;
4167 }
4168 }
4169 {
4170 var290 = hash_collection__HashSet__has(var287, var_mpropdef);
4171 }
4172 var291 = !var290;
4173 var278 = var291;
4174 } else {
4175 var278 = var_286;
4176 }
4177 if (var278){
4178 if (varonce292) {
4179 var293 = varonce292;
4180 } else {
4181 var294 = "NULL, /* DEAD ";
4182 var295 = 14;
4183 var296 = string__NativeString__to_s_with_length(var294, var295);
4184 var293 = var296;
4185 varonce292 = var293;
4186 }
4187 {
4188 { /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
4189 var299 = var_mclass->attrs[COLOR_model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
4190 if (unlikely(var299 == NULL)) {
4191 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
4192 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 335);
4193 show_backtrace(1);
4194 }
4195 var297 = var299;
4196 RET_LABEL298:(void)0;
4197 }
4198 }
4199 if (varonce300) {
4200 var301 = varonce300;
4201 } else {
4202 var302 = ":";
4203 var303 = 1;
4204 var304 = string__NativeString__to_s_with_length(var302, var303);
4205 var301 = var304;
4206 varonce300 = var301;
4207 }
4208 if (varonce305) {
4209 var306 = varonce305;
4210 } else {
4211 var307 = ":";
4212 var308 = 1;
4213 var309 = string__NativeString__to_s_with_length(var307, var308);
4214 var306 = var309;
4215 varonce305 = var306;
4216 }
4217 if (varonce310) {
4218 var311 = varonce310;
4219 } else {
4220 var312 = " */";
4221 var313 = 3;
4222 var314 = string__NativeString__to_s_with_length(var312, var313);
4223 var311 = var314;
4224 varonce310 = var311;
4225 }
4226 var315 = NEW_array__Array(&type_array__Arraykernel__Object);
4227 { /* var315 = array_instance Array[Object] */
4228 var316 = 7;
4229 var317 = NEW_array__NativeArray(var316, &type_array__NativeArraykernel__Object);
4230 ((struct instance_array__NativeArray*)var317)->values[0] = (val*) var293;
4231 ((struct instance_array__NativeArray*)var317)->values[1] = (val*) var297;
4232 ((struct instance_array__NativeArray*)var317)->values[2] = (val*) var301;
4233 ((struct instance_array__NativeArray*)var317)->values[3] = (val*) var_mclass;
4234 ((struct instance_array__NativeArray*)var317)->values[4] = (val*) var306;
4235 ((struct instance_array__NativeArray*)var317)->values[5] = (val*) var_mpropdef;
4236 ((struct instance_array__NativeArray*)var317)->values[6] = (val*) var311;
4237 {
4238 ((void (*)(val*, val*, long))(var315->class->vft[COLOR_array__Array__with_native]))(var315, var317, var316) /* with_native on <var315:Array[Object]>*/;
4239 }
4240 }
4241 {
4242 var318 = ((val* (*)(val*))(var315->class->vft[COLOR_string__Object__to_s]))(var315) /* to_s on <var315:Array[Object]>*/;
4243 }
4244 {
4245 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var318); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4246 }
4247 goto CONTINUE_label;
4248 } else {
4249 }
4250 var320 = 1;
4251 var_321 = var320;
4252 if (var320){
4253 var319 = var_321;
4254 } else {
4255 {
4256 { /* Inline model#MPropDef#mclassdef (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
4257 var324 = var_mpropdef->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef:nullable MPropDef(MMethodDef)> */
4258 if (unlikely(var324 == NULL)) {
4259 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
4260 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 1879);
4261 show_backtrace(1);
4262 }
4263 var322 = var324;
4264 RET_LABEL323:(void)0;
4265 }
4266 }
4267 {
4268 { /* Inline model#MClassDef#bound_mtype (var322) on <var322:MClassDef> */
4269 var327 = var322->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var322:MClassDef> */
4270 if (unlikely(var327 == NULL)) {
4271 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
4272 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 477);
4273 show_backtrace(1);
4274 }
4275 var325 = var327;
4276 RET_LABEL326:(void)0;
4277 }
4278 }
4279 {
4280 var328 = abstract_compiler__MClassType__ctype(var325);
4281 }
4282 if (varonce329) {
4283 var330 = varonce329;
4284 } else {
4285 var331 = "val*";
4286 var332 = 4;
4287 var333 = string__NativeString__to_s_with_length(var331, var332);
4288 var330 = var333;
4289 varonce329 = var330;
4290 }
4291 {
4292 { /* Inline kernel#Object#!= (var328,var330) on <var328:String> */
4293 var_other53 = var330;
4294 {
4295 var338 = ((short int (*)(val*, val*))(var328->class->vft[COLOR_kernel__Object___61d_61d]))(var328, var_other53) /* == on <var328:String>*/;
4296 var337 = var338;
4297 }
4298 var339 = !var337;
4299 var335 = var339;
4300 goto RET_LABEL336;
4301 RET_LABEL336:(void)0;
4302 }
4303 var334 = var335;
4304 }
4305 var319 = var334;
4306 }
4307 if (var319){
4308 if (varonce340) {
4309 var341 = varonce340;
4310 } else {
4311 var342 = "VIRTUAL_";
4312 var343 = 8;
4313 var344 = string__NativeString__to_s_with_length(var342, var343);
4314 var341 = var344;
4315 varonce340 = var341;
4316 }
4317 {
4318 var345 = abstract_compiler__MPropDef__c_name(var_mpropdef);
4319 }
4320 var346 = NEW_array__Array(&type_array__Arraykernel__Object);
4321 { /* var346 = array_instance Array[Object] */
4322 var347 = 2;
4323 var348 = NEW_array__NativeArray(var347, &type_array__NativeArraykernel__Object);
4324 ((struct instance_array__NativeArray*)var348)->values[0] = (val*) var341;
4325 ((struct instance_array__NativeArray*)var348)->values[1] = (val*) var345;
4326 {
4327 ((void (*)(val*, val*, long))(var346->class->vft[COLOR_array__Array__with_native]))(var346, var348, var347) /* with_native on <var346:Array[Object]>*/;
4328 }
4329 }
4330 {
4331 var349 = ((val* (*)(val*))(var346->class->vft[COLOR_string__Object__to_s]))(var346) /* to_s on <var346:Array[Object]>*/;
4332 }
4333 {
4334 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var349); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
4335 }
4336 if (varonce350) {
4337 var351 = varonce350;
4338 } else {
4339 var352 = "(nitmethod_t)VIRTUAL_";
4340 var353 = 21;
4341 var354 = string__NativeString__to_s_with_length(var352, var353);
4342 var351 = var354;
4343 varonce350 = var351;
4344 }
4345 {
4346 var355 = abstract_compiler__MPropDef__c_name(var_mpropdef);
4347 }
4348 if (varonce356) {
4349 var357 = varonce356;
4350 } else {
4351 var358 = ", /* pointer to ";
4352 var359 = 16;
4353 var360 = string__NativeString__to_s_with_length(var358, var359);
4354 var357 = var360;
4355 varonce356 = var357;
4356 }
4357 {
4358 { /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
4359 var363 = var_mclass->attrs[COLOR_model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
4360 if (unlikely(var363 == NULL)) {
4361 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
4362 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 335);
4363 show_backtrace(1);
4364 }
4365 var361 = var363;
4366 RET_LABEL362:(void)0;
4367 }
4368 }
4369 if (varonce364) {
4370 var365 = varonce364;
4371 } else {
4372 var366 = ":";
4373 var367 = 1;
4374 var368 = string__NativeString__to_s_with_length(var366, var367);
4375 var365 = var368;
4376 varonce364 = var365;
4377 }
4378 if (varonce369) {
4379 var370 = varonce369;
4380 } else {
4381 var371 = ":";
4382 var372 = 1;
4383 var373 = string__NativeString__to_s_with_length(var371, var372);
4384 var370 = var373;
4385 varonce369 = var370;
4386 }
4387 if (varonce374) {
4388 var375 = varonce374;
4389 } else {
4390 var376 = " */";
4391 var377 = 3;
4392 var378 = string__NativeString__to_s_with_length(var376, var377);
4393 var375 = var378;
4394 varonce374 = var375;
4395 }
4396 var379 = NEW_array__Array(&type_array__Arraykernel__Object);
4397 { /* var379 = array_instance Array[Object] */
4398 var380 = 9;
4399 var381 = NEW_array__NativeArray(var380, &type_array__NativeArraykernel__Object);
4400 ((struct instance_array__NativeArray*)var381)->values[0] = (val*) var351;
4401 ((struct instance_array__NativeArray*)var381)->values[1] = (val*) var355;
4402 ((struct instance_array__NativeArray*)var381)->values[2] = (val*) var357;
4403 ((struct instance_array__NativeArray*)var381)->values[3] = (val*) var361;
4404 ((struct instance_array__NativeArray*)var381)->values[4] = (val*) var365;
4405 ((struct instance_array__NativeArray*)var381)->values[5] = (val*) var_mclass;
4406 ((struct instance_array__NativeArray*)var381)->values[6] = (val*) var370;
4407 ((struct instance_array__NativeArray*)var381)->values[7] = (val*) var_mpropdef;
4408 ((struct instance_array__NativeArray*)var381)->values[8] = (val*) var375;
4409 {
4410 ((void (*)(val*, val*, long))(var379->class->vft[COLOR_array__Array__with_native]))(var379, var381, var380) /* with_native on <var379:Array[Object]>*/;
4411 }
4412 }
4413 {
4414 var382 = ((val* (*)(val*))(var379->class->vft[COLOR_string__Object__to_s]))(var379) /* to_s on <var379:Array[Object]>*/;
4415 }
4416 {
4417 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var382); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4418 }
4419 } else {
4420 {
4421 var383 = abstract_compiler__MPropDef__c_name(var_mpropdef);
4422 }
4423 var384 = NEW_array__Array(&type_array__Arraykernel__Object);
4424 { /* var384 = array_instance Array[Object] */
4425 var385 = 1;
4426 var386 = NEW_array__NativeArray(var385, &type_array__NativeArraykernel__Object);
4427 ((struct instance_array__NativeArray*)var386)->values[0] = (val*) var383;
4428 {
4429 ((void (*)(val*, val*, long))(var384->class->vft[COLOR_array__Array__with_native]))(var384, var386, var385) /* with_native on <var384:Array[Object]>*/;
4430 }
4431 }
4432 {
4433 var387 = ((val* (*)(val*))(var384->class->vft[COLOR_string__Object__to_s]))(var384) /* to_s on <var384:Array[Object]>*/;
4434 }
4435 {
4436 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var387); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
4437 }
4438 if (varonce388) {
4439 var389 = varonce388;
4440 } else {
4441 var390 = "(nitmethod_t)";
4442 var391 = 13;
4443 var392 = string__NativeString__to_s_with_length(var390, var391);
4444 var389 = var392;
4445 varonce388 = var389;
4446 }
4447 {
4448 var393 = abstract_compiler__MPropDef__c_name(var_mpropdef);
4449 }
4450 if (varonce394) {
4451 var395 = varonce394;
4452 } else {
4453 var396 = ", /* pointer to ";
4454 var397 = 16;
4455 var398 = string__NativeString__to_s_with_length(var396, var397);
4456 var395 = var398;
4457 varonce394 = var395;
4458 }
4459 {
4460 { /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
4461 var401 = var_mclass->attrs[COLOR_model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
4462 if (unlikely(var401 == NULL)) {
4463 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
4464 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 335);
4465 show_backtrace(1);
4466 }
4467 var399 = var401;
4468 RET_LABEL400:(void)0;
4469 }
4470 }
4471 if (varonce402) {
4472 var403 = varonce402;
4473 } else {
4474 var404 = ":";
4475 var405 = 1;
4476 var406 = string__NativeString__to_s_with_length(var404, var405);
4477 var403 = var406;
4478 varonce402 = var403;
4479 }
4480 if (varonce407) {
4481 var408 = varonce407;
4482 } else {
4483 var409 = ":";
4484 var410 = 1;
4485 var411 = string__NativeString__to_s_with_length(var409, var410);
4486 var408 = var411;
4487 varonce407 = var408;
4488 }
4489 if (varonce412) {
4490 var413 = varonce412;
4491 } else {
4492 var414 = " */";
4493 var415 = 3;
4494 var416 = string__NativeString__to_s_with_length(var414, var415);
4495 var413 = var416;
4496 varonce412 = var413;
4497 }
4498 var417 = NEW_array__Array(&type_array__Arraykernel__Object);
4499 { /* var417 = array_instance Array[Object] */
4500 var418 = 9;
4501 var419 = NEW_array__NativeArray(var418, &type_array__NativeArraykernel__Object);
4502 ((struct instance_array__NativeArray*)var419)->values[0] = (val*) var389;
4503 ((struct instance_array__NativeArray*)var419)->values[1] = (val*) var393;
4504 ((struct instance_array__NativeArray*)var419)->values[2] = (val*) var395;
4505 ((struct instance_array__NativeArray*)var419)->values[3] = (val*) var399;
4506 ((struct instance_array__NativeArray*)var419)->values[4] = (val*) var403;
4507 ((struct instance_array__NativeArray*)var419)->values[5] = (val*) var_mclass;
4508 ((struct instance_array__NativeArray*)var419)->values[6] = (val*) var408;
4509 ((struct instance_array__NativeArray*)var419)->values[7] = (val*) var_mpropdef;
4510 ((struct instance_array__NativeArray*)var419)->values[8] = (val*) var413;
4511 {
4512 ((void (*)(val*, val*, long))(var417->class->vft[COLOR_array__Array__with_native]))(var417, var419, var418) /* with_native on <var417:Array[Object]>*/;
4513 }
4514 }
4515 {
4516 var420 = ((val* (*)(val*))(var417->class->vft[COLOR_string__Object__to_s]))(var417) /* to_s on <var417:Array[Object]>*/;
4517 }
4518 {
4519 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var420); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4520 }
4521 }
4522 }
4523 CONTINUE_label: (void)0;
4524 {
4525 ((void (*)(val*))(var260->class->vft[COLOR_abstract_collection__Iterator__next]))(var260) /* next on <var260:Iterator[Discrete]>*/;
4526 }
4527 }
4528 BREAK_label: (void)0;
4529 if (varonce421) {
4530 var422 = varonce421;
4531 } else {
4532 var423 = "}";
4533 var424 = 1;
4534 var425 = string__NativeString__to_s_with_length(var423, var424);
4535 var422 = var425;
4536 varonce421 = var422;
4537 }
4538 {
4539 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var422); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4540 }
4541 } else {
4542 }
4543 if (varonce426) {
4544 var427 = varonce426;
4545 } else {
4546 var428 = "};";
4547 var429 = 2;
4548 var430 = string__NativeString__to_s_with_length(var428, var429);
4549 var427 = var430;
4550 varonce426 = var427;
4551 }
4552 {
4553 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var427); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4554 }
4555 if (varonce431) {
4556 var432 = varonce431;
4557 } else {
4558 var433 = "const struct type_table type_table_";
4559 var434 = 35;
4560 var435 = string__NativeString__to_s_with_length(var433, var434);
4561 var432 = var435;
4562 varonce431 = var432;
4563 }
4564 if (varonce436) {
4565 var437 = varonce436;
4566 } else {
4567 var438 = " = {";
4568 var439 = 4;
4569 var440 = string__NativeString__to_s_with_length(var438, var439);
4570 var437 = var440;
4571 varonce436 = var437;
4572 }
4573 var441 = NEW_array__Array(&type_array__Arraykernel__Object);
4574 { /* var441 = array_instance Array[Object] */
4575 var442 = 3;
4576 var443 = NEW_array__NativeArray(var442, &type_array__NativeArraykernel__Object);
4577 ((struct instance_array__NativeArray*)var443)->values[0] = (val*) var432;
4578 ((struct instance_array__NativeArray*)var443)->values[1] = (val*) var_c_name;
4579 ((struct instance_array__NativeArray*)var443)->values[2] = (val*) var437;
4580 {
4581 ((void (*)(val*, val*, long))(var441->class->vft[COLOR_array__Array__with_native]))(var441, var443, var442) /* with_native on <var441:Array[Object]>*/;
4582 }
4583 }
4584 {
4585 var444 = ((val* (*)(val*))(var441->class->vft[COLOR_string__Object__to_s]))(var441) /* to_s on <var441:Array[Object]>*/;
4586 }
4587 {
4588 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var444); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4589 }
4590 {
4591 var445 = array__AbstractArrayRead__length(var_class_table);
4592 }
4593 if (varonce446) {
4594 var447 = varonce446;
4595 } else {
4596 var448 = ",";
4597 var449 = 1;
4598 var450 = string__NativeString__to_s_with_length(var448, var449);
4599 var447 = var450;
4600 varonce446 = var447;
4601 }
4602 var451 = NEW_array__Array(&type_array__Arraykernel__Object);
4603 { /* var451 = array_instance Array[Object] */
4604 var452 = 2;
4605 var453 = NEW_array__NativeArray(var452, &type_array__NativeArraykernel__Object);
4606 var454 = BOX_kernel__Int(var445); /* autobox from Int to Object */
4607 ((struct instance_array__NativeArray*)var453)->values[0] = (val*) var454;
4608 ((struct instance_array__NativeArray*)var453)->values[1] = (val*) var447;
4609 {
4610 ((void (*)(val*, val*, long))(var451->class->vft[COLOR_array__Array__with_native]))(var451, var453, var452) /* with_native on <var451:Array[Object]>*/;
4611 }
4612 }
4613 {
4614 var455 = ((val* (*)(val*))(var451->class->vft[COLOR_string__Object__to_s]))(var451) /* to_s on <var451:Array[Object]>*/;
4615 }
4616 {
4617 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var455); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4618 }
4619 if (varonce456) {
4620 var457 = varonce456;
4621 } else {
4622 var458 = "{";
4623 var459 = 1;
4624 var460 = string__NativeString__to_s_with_length(var458, var459);
4625 var457 = var460;
4626 varonce456 = var457;
4627 }
4628 {
4629 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var457); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4630 }
4631 {
4632 var461 = array__AbstractArrayRead__iterator(var_class_table);
4633 }
4634 for(;;) {
4635 {
4636 var462 = array__ArrayIterator__is_ok(var461);
4637 }
4638 if(!var462) break;
4639 {
4640 var463 = array__ArrayIterator__item(var461);
4641 }
4642 var_msuper = var463;
4643 var464 = NULL;
4644 if (var_msuper == NULL) {
4645 var465 = 1; /* is null */
4646 } else {
4647 var465 = 0; /* arg is null but recv is not */
4648 }
4649 if (0) {
4650 { /* Inline kernel#Object#== (var_msuper,var464) on <var_msuper:nullable MClass> */
4651 var_other = var464;
4652 {
4653 { /* Inline kernel#Object#is_same_instance (var_msuper,var_other) on <var_msuper:nullable MClass(MClass)> */
4654 var470 = var_msuper == var_other;
4655 var468 = var470;
4656 goto RET_LABEL469;
4657 RET_LABEL469:(void)0;
4658 }
4659 }
4660 var466 = var468;
4661 goto RET_LABEL467;
4662 RET_LABEL467:(void)0;
4663 }
4664 var465 = var466;
4665 }
4666 if (var465){
4667 if (varonce471) {
4668 var472 = varonce471;
4669 } else {
4670 var473 = "-1, /* empty */";
4671 var474 = 15;
4672 var475 = string__NativeString__to_s_with_length(var473, var474);
4673 var472 = var475;
4674 varonce471 = var472;
4675 }
4676 {
4677 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var472); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4678 }
4679 } else {
4680 {
4681 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids (self) on <self:SeparateErasureCompiler> */
4682 var478 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:SeparateErasureCompiler> */
4683 if (unlikely(var478 == NULL)) {
4684 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
4685 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 95);
4686 show_backtrace(1);
4687 }
4688 var476 = var478;
4689 RET_LABEL477:(void)0;
4690 }
4691 }
4692 {
4693 var479 = ((val* (*)(val*, val*))(var476->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var476, var_msuper) /* [] on <var476:Map[MClass, Int]>*/;
4694 }
4695 if (varonce480) {
4696 var481 = varonce480;
4697 } else {
4698 var482 = ", /* ";
4699 var483 = 5;
4700 var484 = string__NativeString__to_s_with_length(var482, var483);
4701 var481 = var484;
4702 varonce480 = var481;
4703 }
4704 if (varonce485) {
4705 var486 = varonce485;
4706 } else {
4707 var487 = " */";
4708 var488 = 3;
4709 var489 = string__NativeString__to_s_with_length(var487, var488);
4710 var486 = var489;
4711 varonce485 = var486;
4712 }
4713 var490 = NEW_array__Array(&type_array__Arraykernel__Object);
4714 { /* var490 = array_instance Array[Object] */
4715 var491 = 4;
4716 var492 = NEW_array__NativeArray(var491, &type_array__NativeArraykernel__Object);
4717 ((struct instance_array__NativeArray*)var492)->values[0] = (val*) var479;
4718 ((struct instance_array__NativeArray*)var492)->values[1] = (val*) var481;
4719 ((struct instance_array__NativeArray*)var492)->values[2] = (val*) var_msuper;
4720 ((struct instance_array__NativeArray*)var492)->values[3] = (val*) var486;
4721 {
4722 ((void (*)(val*, val*, long))(var490->class->vft[COLOR_array__Array__with_native]))(var490, var492, var491) /* with_native on <var490:Array[Object]>*/;
4723 }
4724 }
4725 {
4726 var493 = ((val* (*)(val*))(var490->class->vft[COLOR_string__Object__to_s]))(var490) /* to_s on <var490:Array[Object]>*/;
4727 }
4728 {
4729 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var493); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4730 }
4731 }
4732 CONTINUE_label494: (void)0;
4733 {
4734 array__ArrayIterator__next(var461); /* Direct call array#ArrayIterator#next on <var461:ArrayIterator[nullable Object]>*/
4735 }
4736 }
4737 BREAK_label494: (void)0;
4738 if (varonce495) {
4739 var496 = varonce495;
4740 } else {
4741 var497 = "}";
4742 var498 = 1;
4743 var499 = string__NativeString__to_s_with_length(var497, var498);
4744 var496 = var499;
4745 varonce495 = var496;
4746 }
4747 {
4748 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var496); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4749 }
4750 if (varonce500) {
4751 var501 = varonce500;
4752 } else {
4753 var502 = "};";
4754 var503 = 2;
4755 var504 = string__NativeString__to_s_with_length(var502, var503);
4756 var501 = var504;
4757 varonce500 = var501;
4758 }
4759 {
4760 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var501); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4761 }
4762 {
4763 var505 = abstract_compiler__MClassType__ctype(var_mtype);
4764 }
4765 if (varonce506) {
4766 var507 = varonce506;
4767 } else {
4768 var508 = "val*";
4769 var509 = 4;
4770 var510 = string__NativeString__to_s_with_length(var508, var509);
4771 var507 = var510;
4772 varonce506 = var507;
4773 }
4774 {
4775 { /* Inline kernel#Object#!= (var505,var507) on <var505:String> */
4776 var_other53 = var507;
4777 {
4778 var515 = ((short int (*)(val*, val*))(var505->class->vft[COLOR_kernel__Object___61d_61d]))(var505, var_other53) /* == on <var505:String>*/;
4779 var514 = var515;
4780 }
4781 var516 = !var514;
4782 var512 = var516;
4783 goto RET_LABEL513;
4784 RET_LABEL513:(void)0;
4785 }
4786 var511 = var512;
4787 }
4788 if (var511){
4789 {
4790 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
4791 var520 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
4792 if (unlikely(var520 == NULL)) {
4793 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
4794 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 969);
4795 show_backtrace(1);
4796 }
4797 var518 = var520;
4798 RET_LABEL519:(void)0;
4799 }
4800 }
4801 {
4802 { /* Inline model#MClass#name (var518) on <var518:MClass> */
4803 var523 = var518->attrs[COLOR_model__MClass___name].val; /* _name on <var518:MClass> */
4804 if (unlikely(var523 == NULL)) {
4805 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
4806 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 340);
4807 show_backtrace(1);
4808 }
4809 var521 = var523;
4810 RET_LABEL522:(void)0;
4811 }
4812 }
4813 if (varonce524) {
4814 var525 = varonce524;
4815 } else {
4816 var526 = "Pointer";
4817 var527 = 7;
4818 var528 = string__NativeString__to_s_with_length(var526, var527);
4819 var525 = var528;
4820 varonce524 = var525;
4821 }
4822 {
4823 var530 = string__FlatString___61d_61d(var521, var525);
4824 var529 = var530;
4825 }
4826 var_531 = var529;
4827 if (var529){
4828 var517 = var_531;
4829 } else {
4830 {
4831 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
4832 var534 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
4833 if (unlikely(var534 == NULL)) {
4834 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
4835 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 969);
4836 show_backtrace(1);
4837 }
4838 var532 = var534;
4839 RET_LABEL533:(void)0;
4840 }
4841 }
4842 {
4843 { /* Inline model#MClass#kind (var532) on <var532:MClass> */
4844 var537 = var532->attrs[COLOR_model__MClass___kind].val; /* _kind on <var532:MClass> */
4845 if (unlikely(var537 == NULL)) {
4846 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
4847 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 355);
4848 show_backtrace(1);
4849 }
4850 var535 = var537;
4851 RET_LABEL536:(void)0;
4852 }
4853 }
4854 {
4855 var538 = model__Object__extern_kind(self);
4856 }
4857 {
4858 { /* Inline kernel#Object#!= (var535,var538) on <var535:MClassKind> */
4859 var_other53 = var538;
4860 {
4861 var543 = ((short int (*)(val*, val*))(var535->class->vft[COLOR_kernel__Object___61d_61d]))(var535, var_other53) /* == on <var535:MClassKind>*/;
4862 var542 = var543;
4863 }
4864 var544 = !var542;
4865 var540 = var544;
4866 goto RET_LABEL541;
4867 RET_LABEL541:(void)0;
4868 }
4869 var539 = var540;
4870 }
4871 var517 = var539;
4872 }
4873 if (var517){
4874 {
4875 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
4876 var547 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
4877 if (unlikely(var547 == NULL)) {
4878 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
4879 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
4880 show_backtrace(1);
4881 }
4882 var545 = var547;
4883 RET_LABEL546:(void)0;
4884 }
4885 }
4886 if (varonce548) {
4887 var549 = varonce548;
4888 } else {
4889 var550 = "struct instance_";
4890 var551 = 16;
4891 var552 = string__NativeString__to_s_with_length(var550, var551);
4892 var549 = var552;
4893 varonce548 = var549;
4894 }
4895 if (varonce553) {
4896 var554 = varonce553;
4897 } else {
4898 var555 = " {";
4899 var556 = 2;
4900 var557 = string__NativeString__to_s_with_length(var555, var556);
4901 var554 = var557;
4902 varonce553 = var554;
4903 }
4904 var558 = NEW_array__Array(&type_array__Arraykernel__Object);
4905 { /* var558 = array_instance Array[Object] */
4906 var559 = 3;
4907 var560 = NEW_array__NativeArray(var559, &type_array__NativeArraykernel__Object);
4908 ((struct instance_array__NativeArray*)var560)->values[0] = (val*) var549;
4909 ((struct instance_array__NativeArray*)var560)->values[1] = (val*) var_c_instance_name;
4910 ((struct instance_array__NativeArray*)var560)->values[2] = (val*) var554;
4911 {
4912 ((void (*)(val*, val*, long))(var558->class->vft[COLOR_array__Array__with_native]))(var558, var560, var559) /* with_native on <var558:Array[Object]>*/;
4913 }
4914 }
4915 {
4916 var561 = ((val* (*)(val*))(var558->class->vft[COLOR_string__Object__to_s]))(var558) /* to_s on <var558:Array[Object]>*/;
4917 }
4918 {
4919 abstract_compiler__CodeWriter__add_decl(var545, var561); /* Direct call abstract_compiler#CodeWriter#add_decl on <var545:CodeWriter>*/
4920 }
4921 {
4922 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
4923 var564 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
4924 if (unlikely(var564 == NULL)) {
4925 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
4926 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
4927 show_backtrace(1);
4928 }
4929 var562 = var564;
4930 RET_LABEL563:(void)0;
4931 }
4932 }
4933 if (varonce565) {
4934 var566 = varonce565;
4935 } else {
4936 var567 = "const struct class *class;";
4937 var568 = 26;
4938 var569 = string__NativeString__to_s_with_length(var567, var568);
4939 var566 = var569;
4940 varonce565 = var566;
4941 }
4942 {
4943 abstract_compiler__CodeWriter__add_decl(var562, var566); /* Direct call abstract_compiler#CodeWriter#add_decl on <var562:CodeWriter>*/
4944 }
4945 {
4946 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
4947 var572 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
4948 if (unlikely(var572 == NULL)) {
4949 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
4950 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
4951 show_backtrace(1);
4952 }
4953 var570 = var572;
4954 RET_LABEL571:(void)0;
4955 }
4956 }
4957 {
4958 var573 = abstract_compiler__MClassType__ctype(var_mtype);
4959 }
4960 if (varonce574) {
4961 var575 = varonce574;
4962 } else {
4963 var576 = " value;";
4964 var577 = 7;
4965 var578 = string__NativeString__to_s_with_length(var576, var577);
4966 var575 = var578;
4967 varonce574 = var575;
4968 }
4969 var579 = NEW_array__Array(&type_array__Arraykernel__Object);
4970 { /* var579 = array_instance Array[Object] */
4971 var580 = 2;
4972 var581 = NEW_array__NativeArray(var580, &type_array__NativeArraykernel__Object);
4973 ((struct instance_array__NativeArray*)var581)->values[0] = (val*) var573;
4974 ((struct instance_array__NativeArray*)var581)->values[1] = (val*) var575;
4975 {
4976 ((void (*)(val*, val*, long))(var579->class->vft[COLOR_array__Array__with_native]))(var579, var581, var580) /* with_native on <var579:Array[Object]>*/;
4977 }
4978 }
4979 {
4980 var582 = ((val* (*)(val*))(var579->class->vft[COLOR_string__Object__to_s]))(var579) /* to_s on <var579:Array[Object]>*/;
4981 }
4982 {
4983 abstract_compiler__CodeWriter__add_decl(var570, var582); /* Direct call abstract_compiler#CodeWriter#add_decl on <var570:CodeWriter>*/
4984 }
4985 {
4986 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
4987 var585 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
4988 if (unlikely(var585 == NULL)) {
4989 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
4990 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
4991 show_backtrace(1);
4992 }
4993 var583 = var585;
4994 RET_LABEL584:(void)0;
4995 }
4996 }
4997 if (varonce586) {
4998 var587 = varonce586;
4999 } else {
5000 var588 = "};";
5001 var589 = 2;
5002 var590 = string__NativeString__to_s_with_length(var588, var589);
5003 var587 = var590;
5004 varonce586 = var587;
5005 }
5006 {
5007 abstract_compiler__CodeWriter__add_decl(var583, var587); /* Direct call abstract_compiler#CodeWriter#add_decl on <var583:CodeWriter>*/
5008 }
5009 } else {
5010 }
5011 if (varonce591) {
5012 var592 = varonce591;
5013 } else {
5014 var593 = "BOX_";
5015 var594 = 4;
5016 var595 = string__NativeString__to_s_with_length(var593, var594);
5017 var592 = var595;
5018 varonce591 = var592;
5019 }
5020 var596 = NEW_array__Array(&type_array__Arraykernel__Object);
5021 { /* var596 = array_instance Array[Object] */
5022 var597 = 2;
5023 var598 = NEW_array__NativeArray(var597, &type_array__NativeArraykernel__Object);
5024 ((struct instance_array__NativeArray*)var598)->values[0] = (val*) var592;
5025 ((struct instance_array__NativeArray*)var598)->values[1] = (val*) var_c_name;
5026 {
5027 ((void (*)(val*, val*, long))(var596->class->vft[COLOR_array__Array__with_native]))(var596, var598, var597) /* with_native on <var596:Array[Object]>*/;
5028 }
5029 }
5030 {
5031 var599 = ((val* (*)(val*))(var596->class->vft[COLOR_string__Object__to_s]))(var596) /* to_s on <var596:Array[Object]>*/;
5032 }
5033 if (varonce600) {
5034 var601 = varonce600;
5035 } else {
5036 var602 = "val* BOX_";
5037 var603 = 9;
5038 var604 = string__NativeString__to_s_with_length(var602, var603);
5039 var601 = var604;
5040 varonce600 = var601;
5041 }
5042 if (varonce605) {
5043 var606 = varonce605;
5044 } else {
5045 var607 = "(";
5046 var608 = 1;
5047 var609 = string__NativeString__to_s_with_length(var607, var608);
5048 var606 = var609;
5049 varonce605 = var606;
5050 }
5051 {
5052 var610 = abstract_compiler__MClassType__ctype(var_mtype);
5053 }
5054 if (varonce611) {
5055 var612 = varonce611;
5056 } else {
5057 var613 = ");";
5058 var614 = 2;
5059 var615 = string__NativeString__to_s_with_length(var613, var614);
5060 var612 = var615;
5061 varonce611 = var612;
5062 }
5063 var616 = NEW_array__Array(&type_array__Arraykernel__Object);
5064 { /* var616 = array_instance Array[Object] */
5065 var617 = 5;
5066 var618 = NEW_array__NativeArray(var617, &type_array__NativeArraykernel__Object);
5067 ((struct instance_array__NativeArray*)var618)->values[0] = (val*) var601;
5068 ((struct instance_array__NativeArray*)var618)->values[1] = (val*) var_c_name;
5069 ((struct instance_array__NativeArray*)var618)->values[2] = (val*) var606;
5070 ((struct instance_array__NativeArray*)var618)->values[3] = (val*) var610;
5071 ((struct instance_array__NativeArray*)var618)->values[4] = (val*) var612;
5072 {
5073 ((void (*)(val*, val*, long))(var616->class->vft[COLOR_array__Array__with_native]))(var616, var618, var617) /* with_native on <var616:Array[Object]>*/;
5074 }
5075 }
5076 {
5077 var619 = ((val* (*)(val*))(var616->class->vft[COLOR_string__Object__to_s]))(var616) /* to_s on <var616:Array[Object]>*/;
5078 }
5079 {
5080 abstract_compiler__AbstractCompiler__provide_declaration(self, var599, var619); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
5081 }
5082 if (varonce620) {
5083 var621 = varonce620;
5084 } else {
5085 var622 = "/* allocate ";
5086 var623 = 12;
5087 var624 = string__NativeString__to_s_with_length(var622, var623);
5088 var621 = var624;
5089 varonce620 = var621;
5090 }
5091 if (varonce625) {
5092 var626 = varonce625;
5093 } else {
5094 var627 = " */";
5095 var628 = 3;
5096 var629 = string__NativeString__to_s_with_length(var627, var628);
5097 var626 = var629;
5098 varonce625 = var626;
5099 }
5100 var630 = NEW_array__Array(&type_array__Arraykernel__Object);
5101 { /* var630 = array_instance Array[Object] */
5102 var631 = 3;
5103 var632 = NEW_array__NativeArray(var631, &type_array__NativeArraykernel__Object);
5104 ((struct instance_array__NativeArray*)var632)->values[0] = (val*) var621;
5105 ((struct instance_array__NativeArray*)var632)->values[1] = (val*) var_mtype;
5106 ((struct instance_array__NativeArray*)var632)->values[2] = (val*) var626;
5107 {
5108 ((void (*)(val*, val*, long))(var630->class->vft[COLOR_array__Array__with_native]))(var630, var632, var631) /* with_native on <var630:Array[Object]>*/;
5109 }
5110 }
5111 {
5112 var633 = ((val* (*)(val*))(var630->class->vft[COLOR_string__Object__to_s]))(var630) /* to_s on <var630:Array[Object]>*/;
5113 }
5114 {
5115 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var633); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5116 }
5117 if (varonce634) {
5118 var635 = varonce634;
5119 } else {
5120 var636 = "val* BOX_";
5121 var637 = 9;
5122 var638 = string__NativeString__to_s_with_length(var636, var637);
5123 var635 = var638;
5124 varonce634 = var635;
5125 }
5126 {
5127 var639 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
5128 }
5129 if (varonce640) {
5130 var641 = varonce640;
5131 } else {
5132 var642 = "(";
5133 var643 = 1;
5134 var644 = string__NativeString__to_s_with_length(var642, var643);
5135 var641 = var644;
5136 varonce640 = var641;
5137 }
5138 {
5139 var645 = abstract_compiler__MClassType__ctype(var_mtype);
5140 }
5141 if (varonce646) {
5142 var647 = varonce646;
5143 } else {
5144 var648 = " value) {";
5145 var649 = 9;
5146 var650 = string__NativeString__to_s_with_length(var648, var649);
5147 var647 = var650;
5148 varonce646 = var647;
5149 }
5150 var651 = NEW_array__Array(&type_array__Arraykernel__Object);
5151 { /* var651 = array_instance Array[Object] */
5152 var652 = 5;
5153 var653 = NEW_array__NativeArray(var652, &type_array__NativeArraykernel__Object);
5154 ((struct instance_array__NativeArray*)var653)->values[0] = (val*) var635;
5155 ((struct instance_array__NativeArray*)var653)->values[1] = (val*) var639;
5156 ((struct instance_array__NativeArray*)var653)->values[2] = (val*) var641;
5157 ((struct instance_array__NativeArray*)var653)->values[3] = (val*) var645;
5158 ((struct instance_array__NativeArray*)var653)->values[4] = (val*) var647;
5159 {
5160 ((void (*)(val*, val*, long))(var651->class->vft[COLOR_array__Array__with_native]))(var651, var653, var652) /* with_native on <var651:Array[Object]>*/;
5161 }
5162 }
5163 {
5164 var654 = ((val* (*)(val*))(var651->class->vft[COLOR_string__Object__to_s]))(var651) /* to_s on <var651:Array[Object]>*/;
5165 }
5166 {
5167 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var654); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5168 }
5169 if (varonce655) {
5170 var656 = varonce655;
5171 } else {
5172 var657 = "struct instance_";
5173 var658 = 16;
5174 var659 = string__NativeString__to_s_with_length(var657, var658);
5175 var656 = var659;
5176 varonce655 = var656;
5177 }
5178 if (varonce660) {
5179 var661 = varonce660;
5180 } else {
5181 var662 = "*res = nit_alloc(sizeof(struct instance_";
5182 var663 = 40;
5183 var664 = string__NativeString__to_s_with_length(var662, var663);
5184 var661 = var664;
5185 varonce660 = var661;
5186 }
5187 if (varonce665) {
5188 var666 = varonce665;
5189 } else {
5190 var667 = "));";
5191 var668 = 3;
5192 var669 = string__NativeString__to_s_with_length(var667, var668);
5193 var666 = var669;
5194 varonce665 = var666;
5195 }
5196 var670 = NEW_array__Array(&type_array__Arraykernel__Object);
5197 { /* var670 = array_instance Array[Object] */
5198 var671 = 5;
5199 var672 = NEW_array__NativeArray(var671, &type_array__NativeArraykernel__Object);
5200 ((struct instance_array__NativeArray*)var672)->values[0] = (val*) var656;
5201 ((struct instance_array__NativeArray*)var672)->values[1] = (val*) var_c_instance_name;
5202 ((struct instance_array__NativeArray*)var672)->values[2] = (val*) var661;
5203 ((struct instance_array__NativeArray*)var672)->values[3] = (val*) var_c_instance_name;
5204 ((struct instance_array__NativeArray*)var672)->values[4] = (val*) var666;
5205 {
5206 ((void (*)(val*, val*, long))(var670->class->vft[COLOR_array__Array__with_native]))(var670, var672, var671) /* with_native on <var670:Array[Object]>*/;
5207 }
5208 }
5209 {
5210 var673 = ((val* (*)(val*))(var670->class->vft[COLOR_string__Object__to_s]))(var670) /* to_s on <var670:Array[Object]>*/;
5211 }
5212 {
5213 abstract_compiler__AbstractCompilerVisitor__add(var_v, var673); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5214 }
5215 if (varonce674) {
5216 var675 = varonce674;
5217 } else {
5218 var676 = "class_";
5219 var677 = 6;
5220 var678 = string__NativeString__to_s_with_length(var676, var677);
5221 var675 = var678;
5222 varonce674 = var675;
5223 }
5224 var679 = NEW_array__Array(&type_array__Arraykernel__Object);
5225 { /* var679 = array_instance Array[Object] */
5226 var680 = 2;
5227 var681 = NEW_array__NativeArray(var680, &type_array__NativeArraykernel__Object);
5228 ((struct instance_array__NativeArray*)var681)->values[0] = (val*) var675;
5229 ((struct instance_array__NativeArray*)var681)->values[1] = (val*) var_c_name;
5230 {
5231 ((void (*)(val*, val*, long))(var679->class->vft[COLOR_array__Array__with_native]))(var679, var681, var680) /* with_native on <var679:Array[Object]>*/;
5232 }
5233 }
5234 {
5235 var682 = ((val* (*)(val*))(var679->class->vft[COLOR_string__Object__to_s]))(var679) /* to_s on <var679:Array[Object]>*/;
5236 }
5237 {
5238 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var682); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
5239 }
5240 if (varonce683) {
5241 var684 = varonce683;
5242 } else {
5243 var685 = "res->class = &class_";
5244 var686 = 20;
5245 var687 = string__NativeString__to_s_with_length(var685, var686);
5246 var684 = var687;
5247 varonce683 = var684;
5248 }
5249 if (varonce688) {
5250 var689 = varonce688;
5251 } else {
5252 var690 = ";";
5253 var691 = 1;
5254 var692 = string__NativeString__to_s_with_length(var690, var691);
5255 var689 = var692;
5256 varonce688 = var689;
5257 }
5258 var693 = NEW_array__Array(&type_array__Arraykernel__Object);
5259 { /* var693 = array_instance Array[Object] */
5260 var694 = 3;
5261 var695 = NEW_array__NativeArray(var694, &type_array__NativeArraykernel__Object);
5262 ((struct instance_array__NativeArray*)var695)->values[0] = (val*) var684;
5263 ((struct instance_array__NativeArray*)var695)->values[1] = (val*) var_c_name;
5264 ((struct instance_array__NativeArray*)var695)->values[2] = (val*) var689;
5265 {
5266 ((void (*)(val*, val*, long))(var693->class->vft[COLOR_array__Array__with_native]))(var693, var695, var694) /* with_native on <var693:Array[Object]>*/;
5267 }
5268 }
5269 {
5270 var696 = ((val* (*)(val*))(var693->class->vft[COLOR_string__Object__to_s]))(var693) /* to_s on <var693:Array[Object]>*/;
5271 }
5272 {
5273 abstract_compiler__AbstractCompilerVisitor__add(var_v, var696); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5274 }
5275 if (varonce697) {
5276 var698 = varonce697;
5277 } else {
5278 var699 = "res->value = value;";
5279 var700 = 19;
5280 var701 = string__NativeString__to_s_with_length(var699, var700);
5281 var698 = var701;
5282 varonce697 = var698;
5283 }
5284 {
5285 abstract_compiler__AbstractCompilerVisitor__add(var_v, var698); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5286 }
5287 if (varonce702) {
5288 var703 = varonce702;
5289 } else {
5290 var704 = "return (val*)res;";
5291 var705 = 17;
5292 var706 = string__NativeString__to_s_with_length(var704, var705);
5293 var703 = var706;
5294 varonce702 = var703;
5295 }
5296 {
5297 abstract_compiler__AbstractCompilerVisitor__add(var_v, var703); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5298 }
5299 if (varonce707) {
5300 var708 = varonce707;
5301 } else {
5302 var709 = "}";
5303 var710 = 1;
5304 var711 = string__NativeString__to_s_with_length(var709, var710);
5305 var708 = var711;
5306 varonce707 = var708;
5307 }
5308 {
5309 abstract_compiler__AbstractCompilerVisitor__add(var_v, var708); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5310 }
5311 goto RET_LABEL;
5312 } else {
5313 {
5314 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
5315 var714 = var_mclass->attrs[COLOR_model__MClass___name].val; /* _name on <var_mclass:MClass> */
5316 if (unlikely(var714 == NULL)) {
5317 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
5318 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 340);
5319 show_backtrace(1);
5320 }
5321 var712 = var714;
5322 RET_LABEL713:(void)0;
5323 }
5324 }
5325 if (varonce715) {
5326 var716 = varonce715;
5327 } else {
5328 var717 = "NativeArray";
5329 var718 = 11;
5330 var719 = string__NativeString__to_s_with_length(var717, var718);
5331 var716 = var719;
5332 varonce715 = var716;
5333 }
5334 {
5335 var721 = string__FlatString___61d_61d(var712, var716);
5336 var720 = var721;
5337 }
5338 if (var720){
5339 {
5340 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5341 var724 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5342 if (unlikely(var724 == NULL)) {
5343 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5344 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
5345 show_backtrace(1);
5346 }
5347 var722 = var724;
5348 RET_LABEL723:(void)0;
5349 }
5350 }
5351 if (varonce725) {
5352 var726 = varonce725;
5353 } else {
5354 var727 = "struct instance_";
5355 var728 = 16;
5356 var729 = string__NativeString__to_s_with_length(var727, var728);
5357 var726 = var729;
5358 varonce725 = var726;
5359 }
5360 if (varonce730) {
5361 var731 = varonce730;
5362 } else {
5363 var732 = " {";
5364 var733 = 2;
5365 var734 = string__NativeString__to_s_with_length(var732, var733);
5366 var731 = var734;
5367 varonce730 = var731;
5368 }
5369 var735 = NEW_array__Array(&type_array__Arraykernel__Object);
5370 { /* var735 = array_instance Array[Object] */
5371 var736 = 3;
5372 var737 = NEW_array__NativeArray(var736, &type_array__NativeArraykernel__Object);
5373 ((struct instance_array__NativeArray*)var737)->values[0] = (val*) var726;
5374 ((struct instance_array__NativeArray*)var737)->values[1] = (val*) var_c_name;
5375 ((struct instance_array__NativeArray*)var737)->values[2] = (val*) var731;
5376 {
5377 ((void (*)(val*, val*, long))(var735->class->vft[COLOR_array__Array__with_native]))(var735, var737, var736) /* with_native on <var735:Array[Object]>*/;
5378 }
5379 }
5380 {
5381 var738 = ((val* (*)(val*))(var735->class->vft[COLOR_string__Object__to_s]))(var735) /* to_s on <var735:Array[Object]>*/;
5382 }
5383 {
5384 abstract_compiler__CodeWriter__add_decl(var722, var738); /* Direct call abstract_compiler#CodeWriter#add_decl on <var722:CodeWriter>*/
5385 }
5386 {
5387 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5388 var741 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5389 if (unlikely(var741 == NULL)) {
5390 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5391 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
5392 show_backtrace(1);
5393 }
5394 var739 = var741;
5395 RET_LABEL740:(void)0;
5396 }
5397 }
5398 if (varonce742) {
5399 var743 = varonce742;
5400 } else {
5401 var744 = "const struct class *class;";
5402 var745 = 26;
5403 var746 = string__NativeString__to_s_with_length(var744, var745);
5404 var743 = var746;
5405 varonce742 = var743;
5406 }
5407 {
5408 abstract_compiler__CodeWriter__add_decl(var739, var743); /* Direct call abstract_compiler#CodeWriter#add_decl on <var739:CodeWriter>*/
5409 }
5410 {
5411 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5412 var749 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5413 if (unlikely(var749 == NULL)) {
5414 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5415 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
5416 show_backtrace(1);
5417 }
5418 var747 = var749;
5419 RET_LABEL748:(void)0;
5420 }
5421 }
5422 if (varonce750) {
5423 var751 = varonce750;
5424 } else {
5425 var752 = "int length;";
5426 var753 = 11;
5427 var754 = string__NativeString__to_s_with_length(var752, var753);
5428 var751 = var754;
5429 varonce750 = var751;
5430 }
5431 {
5432 abstract_compiler__CodeWriter__add_decl(var747, var751); /* Direct call abstract_compiler#CodeWriter#add_decl on <var747:CodeWriter>*/
5433 }
5434 {
5435 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5436 var757 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5437 if (unlikely(var757 == NULL)) {
5438 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5439 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
5440 show_backtrace(1);
5441 }
5442 var755 = var757;
5443 RET_LABEL756:(void)0;
5444 }
5445 }
5446 if (varonce758) {
5447 var759 = varonce758;
5448 } else {
5449 var760 = "val* values[];";
5450 var761 = 14;
5451 var762 = string__NativeString__to_s_with_length(var760, var761);
5452 var759 = var762;
5453 varonce758 = var759;
5454 }
5455 {
5456 abstract_compiler__CodeWriter__add_decl(var755, var759); /* Direct call abstract_compiler#CodeWriter#add_decl on <var755:CodeWriter>*/
5457 }
5458 {
5459 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5460 var765 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5461 if (unlikely(var765 == NULL)) {
5462 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5463 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 472);
5464 show_backtrace(1);
5465 }
5466 var763 = var765;
5467 RET_LABEL764:(void)0;
5468 }
5469 }
5470 if (varonce766) {
5471 var767 = varonce766;
5472 } else {
5473 var768 = "};";
5474 var769 = 2;
5475 var770 = string__NativeString__to_s_with_length(var768, var769);
5476 var767 = var770;
5477 varonce766 = var767;
5478 }
5479 {
5480 abstract_compiler__CodeWriter__add_decl(var763, var767); /* Direct call abstract_compiler#CodeWriter#add_decl on <var763:CodeWriter>*/
5481 }
5482 if (varonce771) {
5483 var772 = varonce771;
5484 } else {
5485 var773 = "NEW_";
5486 var774 = 4;
5487 var775 = string__NativeString__to_s_with_length(var773, var774);
5488 var772 = var775;
5489 varonce771 = var772;
5490 }
5491 var776 = NEW_array__Array(&type_array__Arraykernel__Object);
5492 { /* var776 = array_instance Array[Object] */
5493 var777 = 2;
5494 var778 = NEW_array__NativeArray(var777, &type_array__NativeArraykernel__Object);
5495 ((struct instance_array__NativeArray*)var778)->values[0] = (val*) var772;
5496 ((struct instance_array__NativeArray*)var778)->values[1] = (val*) var_c_name;
5497 {
5498 ((void (*)(val*, val*, long))(var776->class->vft[COLOR_array__Array__with_native]))(var776, var778, var777) /* with_native on <var776:Array[Object]>*/;
5499 }
5500 }
5501 {
5502 var779 = ((val* (*)(val*))(var776->class->vft[COLOR_string__Object__to_s]))(var776) /* to_s on <var776:Array[Object]>*/;
5503 }
5504 {
5505 var780 = abstract_compiler__MClassType__ctype(var_mtype);
5506 }
5507 if (varonce781) {
5508 var782 = varonce781;
5509 } else {
5510 var783 = " NEW_";
5511 var784 = 5;
5512 var785 = string__NativeString__to_s_with_length(var783, var784);
5513 var782 = var785;
5514 varonce781 = var782;
5515 }
5516 if (varonce786) {
5517 var787 = varonce786;
5518 } else {
5519 var788 = "(int length);";
5520 var789 = 13;
5521 var790 = string__NativeString__to_s_with_length(var788, var789);
5522 var787 = var790;
5523 varonce786 = var787;
5524 }
5525 var791 = NEW_array__Array(&type_array__Arraykernel__Object);
5526 { /* var791 = array_instance Array[Object] */
5527 var792 = 4;
5528 var793 = NEW_array__NativeArray(var792, &type_array__NativeArraykernel__Object);
5529 ((struct instance_array__NativeArray*)var793)->values[0] = (val*) var780;
5530 ((struct instance_array__NativeArray*)var793)->values[1] = (val*) var782;
5531 ((struct instance_array__NativeArray*)var793)->values[2] = (val*) var_c_name;
5532 ((struct instance_array__NativeArray*)var793)->values[3] = (val*) var787;
5533 {
5534 ((void (*)(val*, val*, long))(var791->class->vft[COLOR_array__Array__with_native]))(var791, var793, var792) /* with_native on <var791:Array[Object]>*/;
5535 }
5536 }
5537 {
5538 var794 = ((val* (*)(val*))(var791->class->vft[COLOR_string__Object__to_s]))(var791) /* to_s on <var791:Array[Object]>*/;
5539 }
5540 {
5541 abstract_compiler__AbstractCompiler__provide_declaration(self, var779, var794); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
5542 }
5543 if (varonce795) {
5544 var796 = varonce795;
5545 } else {
5546 var797 = "/* allocate ";
5547 var798 = 12;
5548 var799 = string__NativeString__to_s_with_length(var797, var798);
5549 var796 = var799;
5550 varonce795 = var796;
5551 }
5552 if (varonce800) {
5553 var801 = varonce800;
5554 } else {
5555 var802 = " */";
5556 var803 = 3;
5557 var804 = string__NativeString__to_s_with_length(var802, var803);
5558 var801 = var804;
5559 varonce800 = var801;
5560 }
5561 var805 = NEW_array__Array(&type_array__Arraykernel__Object);
5562 { /* var805 = array_instance Array[Object] */
5563 var806 = 3;
5564 var807 = NEW_array__NativeArray(var806, &type_array__NativeArraykernel__Object);
5565 ((struct instance_array__NativeArray*)var807)->values[0] = (val*) var796;
5566 ((struct instance_array__NativeArray*)var807)->values[1] = (val*) var_mtype;
5567 ((struct instance_array__NativeArray*)var807)->values[2] = (val*) var801;
5568 {
5569 ((void (*)(val*, val*, long))(var805->class->vft[COLOR_array__Array__with_native]))(var805, var807, var806) /* with_native on <var805:Array[Object]>*/;
5570 }
5571 }
5572 {
5573 var808 = ((val* (*)(val*))(var805->class->vft[COLOR_string__Object__to_s]))(var805) /* to_s on <var805:Array[Object]>*/;
5574 }
5575 {
5576 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var808); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5577 }
5578 {
5579 var809 = abstract_compiler__MClassType__ctype(var_mtype);
5580 }
5581 if (varonce810) {
5582 var811 = varonce810;
5583 } else {
5584 var812 = " NEW_";
5585 var813 = 5;
5586 var814 = string__NativeString__to_s_with_length(var812, var813);
5587 var811 = var814;
5588 varonce810 = var811;
5589 }
5590 if (varonce815) {
5591 var816 = varonce815;
5592 } else {
5593 var817 = "(int length) {";
5594 var818 = 14;
5595 var819 = string__NativeString__to_s_with_length(var817, var818);
5596 var816 = var819;
5597 varonce815 = var816;
5598 }
5599 var820 = NEW_array__Array(&type_array__Arraykernel__Object);
5600 { /* var820 = array_instance Array[Object] */
5601 var821 = 4;
5602 var822 = NEW_array__NativeArray(var821, &type_array__NativeArraykernel__Object);
5603 ((struct instance_array__NativeArray*)var822)->values[0] = (val*) var809;
5604 ((struct instance_array__NativeArray*)var822)->values[1] = (val*) var811;
5605 ((struct instance_array__NativeArray*)var822)->values[2] = (val*) var_c_name;
5606 ((struct instance_array__NativeArray*)var822)->values[3] = (val*) var816;
5607 {
5608 ((void (*)(val*, val*, long))(var820->class->vft[COLOR_array__Array__with_native]))(var820, var822, var821) /* with_native on <var820:Array[Object]>*/;
5609 }
5610 }
5611 {
5612 var823 = ((val* (*)(val*))(var820->class->vft[COLOR_string__Object__to_s]))(var820) /* to_s on <var820:Array[Object]>*/;
5613 }
5614 {
5615 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var823); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5616 }
5617 if (varonce824) {
5618 var825 = varonce824;
5619 } else {
5620 var826 = "self";
5621 var827 = 4;
5622 var828 = string__NativeString__to_s_with_length(var826, var827);
5623 var825 = var828;
5624 varonce824 = var825;
5625 }
5626 {
5627 var829 = abstract_compiler__AbstractCompilerVisitor__get_name(var_v, var825);
5628 }
5629 var_res = var829;
5630 if (varonce830) {
5631 var831 = varonce830;
5632 } else {
5633 var832 = "struct instance_";
5634 var833 = 16;
5635 var834 = string__NativeString__to_s_with_length(var832, var833);
5636 var831 = var834;
5637 varonce830 = var831;
5638 }
5639 if (varonce835) {
5640 var836 = varonce835;
5641 } else {
5642 var837 = " *";
5643 var838 = 2;
5644 var839 = string__NativeString__to_s_with_length(var837, var838);
5645 var836 = var839;
5646 varonce835 = var836;
5647 }
5648 if (varonce840) {
5649 var841 = varonce840;
5650 } else {
5651 var842 = ";";
5652 var843 = 1;
5653 var844 = string__NativeString__to_s_with_length(var842, var843);
5654 var841 = var844;
5655 varonce840 = var841;
5656 }
5657 var845 = NEW_array__Array(&type_array__Arraykernel__Object);
5658 { /* var845 = array_instance Array[Object] */
5659 var846 = 5;
5660 var847 = NEW_array__NativeArray(var846, &type_array__NativeArraykernel__Object);
5661 ((struct instance_array__NativeArray*)var847)->values[0] = (val*) var831;
5662 ((struct instance_array__NativeArray*)var847)->values[1] = (val*) var_c_name;
5663 ((struct instance_array__NativeArray*)var847)->values[2] = (val*) var836;
5664 ((struct instance_array__NativeArray*)var847)->values[3] = (val*) var_res;
5665 ((struct instance_array__NativeArray*)var847)->values[4] = (val*) var841;
5666 {
5667 ((void (*)(val*, val*, long))(var845->class->vft[COLOR_array__Array__with_native]))(var845, var847, var846) /* with_native on <var845:Array[Object]>*/;
5668 }
5669 }
5670 {
5671 var848 = ((val* (*)(val*))(var845->class->vft[COLOR_string__Object__to_s]))(var845) /* to_s on <var845:Array[Object]>*/;
5672 }
5673 {
5674 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var848); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5675 }
5676 {
5677 { /* Inline model#MClassType#arguments (var_mtype) on <var_mtype:MClassType> */
5678 var851 = var_mtype->attrs[COLOR_model__MClassType___arguments].val; /* _arguments on <var_mtype:MClassType> */
5679 if (unlikely(var851 == NULL)) {
5680 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _arguments");
5681 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 979);
5682 show_backtrace(1);
5683 }
5684 var849 = var851;
5685 RET_LABEL850:(void)0;
5686 }
5687 }
5688 {
5689 var852 = abstract_collection__SequenceRead__first(var849);
5690 }
5691 var_mtype_elt = var852;
5692 if (varonce853) {
5693 var854 = varonce853;
5694 } else {
5695 var855 = " = nit_alloc(sizeof(struct instance_";
5696 var856 = 36;
5697 var857 = string__NativeString__to_s_with_length(var855, var856);
5698 var854 = var857;
5699 varonce853 = var854;
5700 }
5701 if (varonce858) {
5702 var859 = varonce858;
5703 } else {
5704 var860 = ") + length*sizeof(";
5705 var861 = 18;
5706 var862 = string__NativeString__to_s_with_length(var860, var861);
5707 var859 = var862;
5708 varonce858 = var859;
5709 }
5710 {
5711 var863 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
5712 }
5713 if (varonce864) {
5714 var865 = varonce864;
5715 } else {
5716 var866 = "));";
5717 var867 = 3;
5718 var868 = string__NativeString__to_s_with_length(var866, var867);
5719 var865 = var868;
5720 varonce864 = var865;
5721 }
5722 var869 = NEW_array__Array(&type_array__Arraykernel__Object);
5723 { /* var869 = array_instance Array[Object] */
5724 var870 = 6;
5725 var871 = NEW_array__NativeArray(var870, &type_array__NativeArraykernel__Object);
5726 ((struct instance_array__NativeArray*)var871)->values[0] = (val*) var_res;
5727 ((struct instance_array__NativeArray*)var871)->values[1] = (val*) var854;
5728 ((struct instance_array__NativeArray*)var871)->values[2] = (val*) var_c_name;
5729 ((struct instance_array__NativeArray*)var871)->values[3] = (val*) var859;
5730 ((struct instance_array__NativeArray*)var871)->values[4] = (val*) var863;
5731 ((struct instance_array__NativeArray*)var871)->values[5] = (val*) var865;
5732 {
5733 ((void (*)(val*, val*, long))(var869->class->vft[COLOR_array__Array__with_native]))(var869, var871, var870) /* with_native on <var869:Array[Object]>*/;
5734 }
5735 }
5736 {
5737 var872 = ((val* (*)(val*))(var869->class->vft[COLOR_string__Object__to_s]))(var869) /* to_s on <var869:Array[Object]>*/;
5738 }
5739 {
5740 abstract_compiler__AbstractCompilerVisitor__add(var_v, var872); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5741 }
5742 if (varonce873) {
5743 var874 = varonce873;
5744 } else {
5745 var875 = "class_";
5746 var876 = 6;
5747 var877 = string__NativeString__to_s_with_length(var875, var876);
5748 var874 = var877;
5749 varonce873 = var874;
5750 }
5751 var878 = NEW_array__Array(&type_array__Arraykernel__Object);
5752 { /* var878 = array_instance Array[Object] */
5753 var879 = 2;
5754 var880 = NEW_array__NativeArray(var879, &type_array__NativeArraykernel__Object);
5755 ((struct instance_array__NativeArray*)var880)->values[0] = (val*) var874;
5756 ((struct instance_array__NativeArray*)var880)->values[1] = (val*) var_c_name;
5757 {
5758 ((void (*)(val*, val*, long))(var878->class->vft[COLOR_array__Array__with_native]))(var878, var880, var879) /* with_native on <var878:Array[Object]>*/;
5759 }
5760 }
5761 {
5762 var881 = ((val* (*)(val*))(var878->class->vft[COLOR_string__Object__to_s]))(var878) /* to_s on <var878:Array[Object]>*/;
5763 }
5764 {
5765 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var881); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
5766 }
5767 if (varonce882) {
5768 var883 = varonce882;
5769 } else {
5770 var884 = "->class = &class_";
5771 var885 = 17;
5772 var886 = string__NativeString__to_s_with_length(var884, var885);
5773 var883 = var886;
5774 varonce882 = var883;
5775 }
5776 if (varonce887) {
5777 var888 = varonce887;
5778 } else {
5779 var889 = ";";
5780 var890 = 1;
5781 var891 = string__NativeString__to_s_with_length(var889, var890);
5782 var888 = var891;
5783 varonce887 = var888;
5784 }
5785 var892 = NEW_array__Array(&type_array__Arraykernel__Object);
5786 { /* var892 = array_instance Array[Object] */
5787 var893 = 4;
5788 var894 = NEW_array__NativeArray(var893, &type_array__NativeArraykernel__Object);
5789 ((struct instance_array__NativeArray*)var894)->values[0] = (val*) var_res;
5790 ((struct instance_array__NativeArray*)var894)->values[1] = (val*) var883;
5791 ((struct instance_array__NativeArray*)var894)->values[2] = (val*) var_c_name;
5792 ((struct instance_array__NativeArray*)var894)->values[3] = (val*) var888;
5793 {
5794 ((void (*)(val*, val*, long))(var892->class->vft[COLOR_array__Array__with_native]))(var892, var894, var893) /* with_native on <var892:Array[Object]>*/;
5795 }
5796 }
5797 {
5798 var895 = ((val* (*)(val*))(var892->class->vft[COLOR_string__Object__to_s]))(var892) /* to_s on <var892:Array[Object]>*/;
5799 }
5800 {
5801 abstract_compiler__AbstractCompilerVisitor__add(var_v, var895); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5802 }
5803 if (varonce896) {
5804 var897 = varonce896;
5805 } else {
5806 var898 = "->length = length;";
5807 var899 = 18;
5808 var900 = string__NativeString__to_s_with_length(var898, var899);
5809 var897 = var900;
5810 varonce896 = var897;
5811 }
5812 var901 = NEW_array__Array(&type_array__Arraykernel__Object);
5813 { /* var901 = array_instance Array[Object] */
5814 var902 = 2;
5815 var903 = NEW_array__NativeArray(var902, &type_array__NativeArraykernel__Object);
5816 ((struct instance_array__NativeArray*)var903)->values[0] = (val*) var_res;
5817 ((struct instance_array__NativeArray*)var903)->values[1] = (val*) var897;
5818 {
5819 ((void (*)(val*, val*, long))(var901->class->vft[COLOR_array__Array__with_native]))(var901, var903, var902) /* with_native on <var901:Array[Object]>*/;
5820 }
5821 }
5822 {
5823 var904 = ((val* (*)(val*))(var901->class->vft[COLOR_string__Object__to_s]))(var901) /* to_s on <var901:Array[Object]>*/;
5824 }
5825 {
5826 abstract_compiler__AbstractCompilerVisitor__add(var_v, var904); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5827 }
5828 if (varonce905) {
5829 var906 = varonce905;
5830 } else {
5831 var907 = "return (val*)";
5832 var908 = 13;
5833 var909 = string__NativeString__to_s_with_length(var907, var908);
5834 var906 = var909;
5835 varonce905 = var906;
5836 }
5837 if (varonce910) {
5838 var911 = varonce910;
5839 } else {
5840 var912 = ";";
5841 var913 = 1;
5842 var914 = string__NativeString__to_s_with_length(var912, var913);
5843 var911 = var914;
5844 varonce910 = var911;
5845 }
5846 var915 = NEW_array__Array(&type_array__Arraykernel__Object);
5847 { /* var915 = array_instance Array[Object] */
5848 var916 = 3;
5849 var917 = NEW_array__NativeArray(var916, &type_array__NativeArraykernel__Object);
5850 ((struct instance_array__NativeArray*)var917)->values[0] = (val*) var906;
5851 ((struct instance_array__NativeArray*)var917)->values[1] = (val*) var_res;
5852 ((struct instance_array__NativeArray*)var917)->values[2] = (val*) var911;
5853 {
5854 ((void (*)(val*, val*, long))(var915->class->vft[COLOR_array__Array__with_native]))(var915, var917, var916) /* with_native on <var915:Array[Object]>*/;
5855 }
5856 }
5857 {
5858 var918 = ((val* (*)(val*))(var915->class->vft[COLOR_string__Object__to_s]))(var915) /* to_s on <var915:Array[Object]>*/;
5859 }
5860 {
5861 abstract_compiler__AbstractCompilerVisitor__add(var_v, var918); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5862 }
5863 if (varonce919) {
5864 var920 = varonce919;
5865 } else {
5866 var921 = "}";
5867 var922 = 1;
5868 var923 = string__NativeString__to_s_with_length(var921, var922);
5869 var920 = var923;
5870 varonce919 = var920;
5871 }
5872 {
5873 abstract_compiler__AbstractCompilerVisitor__add(var_v, var920); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5874 }
5875 goto RET_LABEL;
5876 } else {
5877 }
5878 }
5879 if (varonce924) {
5880 var925 = varonce924;
5881 } else {
5882 var926 = "NEW_";
5883 var927 = 4;
5884 var928 = string__NativeString__to_s_with_length(var926, var927);
5885 var925 = var928;
5886 varonce924 = var925;
5887 }
5888 var929 = NEW_array__Array(&type_array__Arraykernel__Object);
5889 { /* var929 = array_instance Array[Object] */
5890 var930 = 2;
5891 var931 = NEW_array__NativeArray(var930, &type_array__NativeArraykernel__Object);
5892 ((struct instance_array__NativeArray*)var931)->values[0] = (val*) var925;
5893 ((struct instance_array__NativeArray*)var931)->values[1] = (val*) var_c_name;
5894 {
5895 ((void (*)(val*, val*, long))(var929->class->vft[COLOR_array__Array__with_native]))(var929, var931, var930) /* with_native on <var929:Array[Object]>*/;
5896 }
5897 }
5898 {
5899 var932 = ((val* (*)(val*))(var929->class->vft[COLOR_string__Object__to_s]))(var929) /* to_s on <var929:Array[Object]>*/;
5900 }
5901 {
5902 var933 = abstract_compiler__MClassType__ctype(var_mtype);
5903 }
5904 if (varonce934) {
5905 var935 = varonce934;
5906 } else {
5907 var936 = " NEW_";
5908 var937 = 5;
5909 var938 = string__NativeString__to_s_with_length(var936, var937);
5910 var935 = var938;
5911 varonce934 = var935;
5912 }
5913 if (varonce939) {
5914 var940 = varonce939;
5915 } else {
5916 var941 = "(void);";
5917 var942 = 7;
5918 var943 = string__NativeString__to_s_with_length(var941, var942);
5919 var940 = var943;
5920 varonce939 = var940;
5921 }
5922 var944 = NEW_array__Array(&type_array__Arraykernel__Object);
5923 { /* var944 = array_instance Array[Object] */
5924 var945 = 4;
5925 var946 = NEW_array__NativeArray(var945, &type_array__NativeArraykernel__Object);
5926 ((struct instance_array__NativeArray*)var946)->values[0] = (val*) var933;
5927 ((struct instance_array__NativeArray*)var946)->values[1] = (val*) var935;
5928 ((struct instance_array__NativeArray*)var946)->values[2] = (val*) var_c_name;
5929 ((struct instance_array__NativeArray*)var946)->values[3] = (val*) var940;
5930 {
5931 ((void (*)(val*, val*, long))(var944->class->vft[COLOR_array__Array__with_native]))(var944, var946, var945) /* with_native on <var944:Array[Object]>*/;
5932 }
5933 }
5934 {
5935 var947 = ((val* (*)(val*))(var944->class->vft[COLOR_string__Object__to_s]))(var944) /* to_s on <var944:Array[Object]>*/;
5936 }
5937 {
5938 abstract_compiler__AbstractCompiler__provide_declaration(self, var932, var947); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
5939 }
5940 if (varonce948) {
5941 var949 = varonce948;
5942 } else {
5943 var950 = "/* allocate ";
5944 var951 = 12;
5945 var952 = string__NativeString__to_s_with_length(var950, var951);
5946 var949 = var952;
5947 varonce948 = var949;
5948 }
5949 if (varonce953) {
5950 var954 = varonce953;
5951 } else {
5952 var955 = " */";
5953 var956 = 3;
5954 var957 = string__NativeString__to_s_with_length(var955, var956);
5955 var954 = var957;
5956 varonce953 = var954;
5957 }
5958 var958 = NEW_array__Array(&type_array__Arraykernel__Object);
5959 { /* var958 = array_instance Array[Object] */
5960 var959 = 3;
5961 var960 = NEW_array__NativeArray(var959, &type_array__NativeArraykernel__Object);
5962 ((struct instance_array__NativeArray*)var960)->values[0] = (val*) var949;
5963 ((struct instance_array__NativeArray*)var960)->values[1] = (val*) var_mtype;
5964 ((struct instance_array__NativeArray*)var960)->values[2] = (val*) var954;
5965 {
5966 ((void (*)(val*, val*, long))(var958->class->vft[COLOR_array__Array__with_native]))(var958, var960, var959) /* with_native on <var958:Array[Object]>*/;
5967 }
5968 }
5969 {
5970 var961 = ((val* (*)(val*))(var958->class->vft[COLOR_string__Object__to_s]))(var958) /* to_s on <var958:Array[Object]>*/;
5971 }
5972 {
5973 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var961); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5974 }
5975 {
5976 var962 = abstract_compiler__MClassType__ctype(var_mtype);
5977 }
5978 if (varonce963) {
5979 var964 = varonce963;
5980 } else {
5981 var965 = " NEW_";
5982 var966 = 5;
5983 var967 = string__NativeString__to_s_with_length(var965, var966);
5984 var964 = var967;
5985 varonce963 = var964;
5986 }
5987 if (varonce968) {
5988 var969 = varonce968;
5989 } else {
5990 var970 = "(void) {";
5991 var971 = 8;
5992 var972 = string__NativeString__to_s_with_length(var970, var971);
5993 var969 = var972;
5994 varonce968 = var969;
5995 }
5996 var973 = NEW_array__Array(&type_array__Arraykernel__Object);
5997 { /* var973 = array_instance Array[Object] */
5998 var974 = 4;
5999 var975 = NEW_array__NativeArray(var974, &type_array__NativeArraykernel__Object);
6000 ((struct instance_array__NativeArray*)var975)->values[0] = (val*) var962;
6001 ((struct instance_array__NativeArray*)var975)->values[1] = (val*) var964;
6002 ((struct instance_array__NativeArray*)var975)->values[2] = (val*) var_c_name;
6003 ((struct instance_array__NativeArray*)var975)->values[3] = (val*) var969;
6004 {
6005 ((void (*)(val*, val*, long))(var973->class->vft[COLOR_array__Array__with_native]))(var973, var975, var974) /* with_native on <var973:Array[Object]>*/;
6006 }
6007 }
6008 {
6009 var976 = ((val* (*)(val*))(var973->class->vft[COLOR_string__Object__to_s]))(var973) /* to_s on <var973:Array[Object]>*/;
6010 }
6011 {
6012 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var976); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6013 }
6014 if (var_is_dead){
6015 if (varonce977) {
6016 var978 = varonce977;
6017 } else {
6018 var979 = " is DEAD";
6019 var980 = 8;
6020 var981 = string__NativeString__to_s_with_length(var979, var980);
6021 var978 = var981;
6022 varonce977 = var978;
6023 }
6024 var982 = NEW_array__Array(&type_array__Arraykernel__Object);
6025 { /* var982 = array_instance Array[Object] */
6026 var983 = 2;
6027 var984 = NEW_array__NativeArray(var983, &type_array__NativeArraykernel__Object);
6028 ((struct instance_array__NativeArray*)var984)->values[0] = (val*) var_mclass;
6029 ((struct instance_array__NativeArray*)var984)->values[1] = (val*) var978;
6030 {
6031 ((void (*)(val*, val*, long))(var982->class->vft[COLOR_array__Array__with_native]))(var982, var984, var983) /* with_native on <var982:Array[Object]>*/;
6032 }
6033 }
6034 {
6035 var985 = ((val* (*)(val*))(var982->class->vft[COLOR_string__Object__to_s]))(var982) /* to_s on <var982:Array[Object]>*/;
6036 }
6037 {
6038 abstract_compiler__AbstractCompilerVisitor__add_abort(var_v, var985); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <var_v:SeparateCompilerVisitor>*/
6039 }
6040 } else {
6041 if (varonce986) {
6042 var987 = varonce986;
6043 } else {
6044 var988 = "self";
6045 var989 = 4;
6046 var990 = string__NativeString__to_s_with_length(var988, var989);
6047 var987 = var990;
6048 varonce986 = var987;
6049 }
6050 {
6051 var991 = abstract_compiler__AbstractCompilerVisitor__new_named_var(var_v, var_mtype, var987);
6052 }
6053 var_res992 = var991;
6054 var993 = 1;
6055 {
6056 { /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res992,var993) on <var_res992:RuntimeVariable> */
6057 var_res992->attrs[COLOR_abstract_compiler__RuntimeVariable___is_exact].s = var993; /* _is_exact on <var_res992:RuntimeVariable> */
6058 RET_LABEL994:(void)0;
6059 }
6060 }
6061 if (varonce995) {
6062 var996 = varonce995;
6063 } else {
6064 var997 = " = nit_alloc(sizeof(struct instance) + ";
6065 var998 = 39;
6066 var999 = string__NativeString__to_s_with_length(var997, var998);
6067 var996 = var999;
6068 varonce995 = var996;
6069 }
6070 {
6071 var1000 = array__AbstractArrayRead__length(var_attrs);
6072 }
6073 if (varonce1001) {
6074 var1002 = varonce1001;
6075 } else {
6076 var1003 = "*sizeof(nitattribute_t));";
6077 var1004 = 25;
6078 var1005 = string__NativeString__to_s_with_length(var1003, var1004);
6079 var1002 = var1005;
6080 varonce1001 = var1002;
6081 }
6082 var1006 = NEW_array__Array(&type_array__Arraykernel__Object);
6083 { /* var1006 = array_instance Array[Object] */
6084 var1007 = 4;
6085 var1008 = NEW_array__NativeArray(var1007, &type_array__NativeArraykernel__Object);
6086 ((struct instance_array__NativeArray*)var1008)->values[0] = (val*) var_res992;
6087 ((struct instance_array__NativeArray*)var1008)->values[1] = (val*) var996;
6088 var1009 = BOX_kernel__Int(var1000); /* autobox from Int to Object */
6089 ((struct instance_array__NativeArray*)var1008)->values[2] = (val*) var1009;
6090 ((struct instance_array__NativeArray*)var1008)->values[3] = (val*) var1002;
6091 {
6092 ((void (*)(val*, val*, long))(var1006->class->vft[COLOR_array__Array__with_native]))(var1006, var1008, var1007) /* with_native on <var1006:Array[Object]>*/;
6093 }
6094 }
6095 {
6096 var1010 = ((val* (*)(val*))(var1006->class->vft[COLOR_string__Object__to_s]))(var1006) /* to_s on <var1006:Array[Object]>*/;
6097 }
6098 {
6099 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1010); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6100 }
6101 if (varonce1011) {
6102 var1012 = varonce1011;
6103 } else {
6104 var1013 = "class_";
6105 var1014 = 6;
6106 var1015 = string__NativeString__to_s_with_length(var1013, var1014);
6107 var1012 = var1015;
6108 varonce1011 = var1012;
6109 }
6110 var1016 = NEW_array__Array(&type_array__Arraykernel__Object);
6111 { /* var1016 = array_instance Array[Object] */
6112 var1017 = 2;
6113 var1018 = NEW_array__NativeArray(var1017, &type_array__NativeArraykernel__Object);
6114 ((struct instance_array__NativeArray*)var1018)->values[0] = (val*) var1012;
6115 ((struct instance_array__NativeArray*)var1018)->values[1] = (val*) var_c_name;
6116 {
6117 ((void (*)(val*, val*, long))(var1016->class->vft[COLOR_array__Array__with_native]))(var1016, var1018, var1017) /* with_native on <var1016:Array[Object]>*/;
6118 }
6119 }
6120 {
6121 var1019 = ((val* (*)(val*))(var1016->class->vft[COLOR_string__Object__to_s]))(var1016) /* to_s on <var1016:Array[Object]>*/;
6122 }
6123 {
6124 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var1019); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
6125 }
6126 if (varonce1020) {
6127 var1021 = varonce1020;
6128 } else {
6129 var1022 = "->class = &class_";
6130 var1023 = 17;
6131 var1024 = string__NativeString__to_s_with_length(var1022, var1023);
6132 var1021 = var1024;
6133 varonce1020 = var1021;
6134 }
6135 if (varonce1025) {
6136 var1026 = varonce1025;
6137 } else {
6138 var1027 = ";";
6139 var1028 = 1;
6140 var1029 = string__NativeString__to_s_with_length(var1027, var1028);
6141 var1026 = var1029;
6142 varonce1025 = var1026;
6143 }
6144 var1030 = NEW_array__Array(&type_array__Arraykernel__Object);
6145 { /* var1030 = array_instance Array[Object] */
6146 var1031 = 4;
6147 var1032 = NEW_array__NativeArray(var1031, &type_array__NativeArraykernel__Object);
6148 ((struct instance_array__NativeArray*)var1032)->values[0] = (val*) var_res992;
6149 ((struct instance_array__NativeArray*)var1032)->values[1] = (val*) var1021;
6150 ((struct instance_array__NativeArray*)var1032)->values[2] = (val*) var_c_name;
6151 ((struct instance_array__NativeArray*)var1032)->values[3] = (val*) var1026;
6152 {
6153 ((void (*)(val*, val*, long))(var1030->class->vft[COLOR_array__Array__with_native]))(var1030, var1032, var1031) /* with_native on <var1030:Array[Object]>*/;
6154 }
6155 }
6156 {
6157 var1033 = ((val* (*)(val*))(var1030->class->vft[COLOR_string__Object__to_s]))(var1030) /* to_s on <var1030:Array[Object]>*/;
6158 }
6159 {
6160 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1033); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6161 }
6162 {
6163 abstract_compiler__AbstractCompiler__generate_init_attr(self, var_v, var_res992, var_mtype); /* Direct call abstract_compiler#AbstractCompiler#generate_init_attr on <self:SeparateErasureCompiler>*/
6164 }
6165 if (varonce1034) {
6166 var1035 = varonce1034;
6167 } else {
6168 var1036 = "return ";
6169 var1037 = 7;
6170 var1038 = string__NativeString__to_s_with_length(var1036, var1037);
6171 var1035 = var1038;
6172 varonce1034 = var1035;
6173 }
6174 if (varonce1039) {
6175 var1040 = varonce1039;
6176 } else {
6177 var1041 = ";";
6178 var1042 = 1;
6179 var1043 = string__NativeString__to_s_with_length(var1041, var1042);
6180 var1040 = var1043;
6181 varonce1039 = var1040;
6182 }
6183 var1044 = NEW_array__Array(&type_array__Arraykernel__Object);
6184 { /* var1044 = array_instance Array[Object] */
6185 var1045 = 3;
6186 var1046 = NEW_array__NativeArray(var1045, &type_array__NativeArraykernel__Object);
6187 ((struct instance_array__NativeArray*)var1046)->values[0] = (val*) var1035;
6188 ((struct instance_array__NativeArray*)var1046)->values[1] = (val*) var_res992;
6189 ((struct instance_array__NativeArray*)var1046)->values[2] = (val*) var1040;
6190 {
6191 ((void (*)(val*, val*, long))(var1044->class->vft[COLOR_array__Array__with_native]))(var1044, var1046, var1045) /* with_native on <var1044:Array[Object]>*/;
6192 }
6193 }
6194 {
6195 var1047 = ((val* (*)(val*))(var1044->class->vft[COLOR_string__Object__to_s]))(var1044) /* to_s on <var1044:Array[Object]>*/;
6196 }
6197 {
6198 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1047); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6199 }
6200 }
6201 if (varonce1048) {
6202 var1049 = varonce1048;
6203 } else {
6204 var1050 = "}";
6205 var1051 = 1;
6206 var1052 = string__NativeString__to_s_with_length(var1050, var1051);
6207 var1049 = var1052;
6208 varonce1048 = var1049;
6209 }
6210 {
6211 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1049); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6212 }
6213 RET_LABEL:;
6214 }
6215 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: Object, MClass) */
6216 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
6217 separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(self, p0); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c on <self:Object(SeparateErasureCompiler)>*/
6218 RET_LABEL:;
6219 }
6220 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: SeparateErasureCompiler, MClass): Bool */
6221 short int separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
6222 short int var /* : Bool */;
6223 val* var_mclass /* var mclass: MClass */;
6224 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
6225 val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
6226 val* var4 /* : nullable Object */;
6227 short int var5 /* : Bool */;
6228 short int var6 /* : Bool */;
6229 static val* varonce;
6230 val* var7 /* : String */;
6231 char* var8 /* : NativeString */;
6232 long var9 /* : Int */;
6233 val* var10 /* : FlatString */;
6234 val* var11 /* : String */;
6235 val* var12 /* : Array[Object] */;
6236 long var13 /* : Int */;
6237 val* var14 /* : NativeArray[Object] */;
6238 val* var15 /* : String */;
6239 static val* varonce16;
6240 val* var17 /* : String */;
6241 char* var18 /* : NativeString */;
6242 long var19 /* : Int */;
6243 val* var20 /* : FlatString */;
6244 val* var21 /* : String */;
6245 static val* varonce22;
6246 val* var23 /* : String */;
6247 char* var24 /* : NativeString */;
6248 long var25 /* : Int */;
6249 val* var26 /* : FlatString */;
6250 val* var27 /* : Array[Object] */;
6251 long var28 /* : Int */;
6252 val* var29 /* : NativeArray[Object] */;
6253 val* var30 /* : String */;
6254 val* var31 /* : SeparateCompilerVisitor */;
6255 val* var_v /* var v: SeparateCompilerVisitor */;
6256 static val* varonce32;
6257 val* var33 /* : String */;
6258 char* var34 /* : NativeString */;
6259 long var35 /* : Int */;
6260 val* var36 /* : FlatString */;
6261 val* var37 /* : String */;
6262 static val* varonce38;
6263 val* var39 /* : String */;
6264 char* var40 /* : NativeString */;
6265 long var41 /* : Int */;
6266 val* var42 /* : FlatString */;
6267 val* var43 /* : Array[Object] */;
6268 long var44 /* : Int */;
6269 val* var45 /* : NativeArray[Object] */;
6270 val* var46 /* : String */;
6271 static val* varonce47;
6272 val* var48 /* : String */;
6273 char* var49 /* : NativeString */;
6274 long var50 /* : Int */;
6275 val* var51 /* : FlatString */;
6276 static val* varonce52;
6277 val* var53 /* : String */;
6278 char* var54 /* : NativeString */;
6279 long var55 /* : Int */;
6280 val* var56 /* : FlatString */;
6281 val* var57 /* : Map[MClass, Array[nullable MPropDef]] */;
6282 val* var59 /* : Map[MClass, Array[nullable MPropDef]] */;
6283 val* var60 /* : nullable Object */;
6284 val* var61 /* : ArrayIterator[nullable Object] */;
6285 short int var62 /* : Bool */;
6286 val* var63 /* : nullable Object */;
6287 val* var_vt /* var vt: nullable MPropDef */;
6288 val* var64 /* : null */;
6289 short int var65 /* : Bool */;
6290 short int var66 /* : Bool */;
6291 val* var_other /* var other: nullable Object */;
6292 short int var68 /* : Bool */;
6293 short int var70 /* : Bool */;
6294 static val* varonce71;
6295 val* var72 /* : String */;
6296 char* var73 /* : NativeString */;
6297 long var74 /* : Int */;
6298 val* var75 /* : FlatString */;
6299 long var76 /* : Int */;
6300 long var_is_null /* var is_null: Int */;
6301 val* var77 /* : MClassDef */;
6302 val* var78 /* : MClassType */;
6303 val* var80 /* : MClassType */;
6304 short int var81 /* : Bool */;
6305 int cltype;
6306 int idtype;
6307 const char* var_class_name;
6308 val* var82 /* : nullable MType */;
6309 val* var84 /* : nullable MType */;
6310 val* var85 /* : MType */;
6311 val* var_bound /* var bound: MType */;
6312 short int var86 /* : Bool */;
6313 int cltype87;
6314 int idtype88;
6315 val* var89 /* : MClassDef */;
6316 val* var90 /* : MClassType */;
6317 val* var92 /* : MClassType */;
6318 val* var93 /* : MType */;
6319 val* var95 /* : MType */;
6320 val* var96 /* : MType */;
6321 long var97 /* : Int */;
6322 short int var98 /* : Bool */;
6323 int cltype99;
6324 int idtype100;
6325 const char* var_class_name101;
6326 val* var102 /* : MClass */;
6327 val* var104 /* : MClass */;
6328 val* var_vtclass /* var vtclass: MClass */;
6329 static val* varonce105;
6330 val* var106 /* : String */;
6331 char* var107 /* : NativeString */;
6332 long var108 /* : Int */;
6333 val* var109 /* : FlatString */;
6334 val* var110 /* : String */;
6335 val* var111 /* : Array[Object] */;
6336 long var112 /* : Int */;
6337 val* var113 /* : NativeArray[Object] */;
6338 val* var114 /* : String */;
6339 static val* varonce115;
6340 val* var116 /* : String */;
6341 char* var117 /* : NativeString */;
6342 long var118 /* : Int */;
6343 val* var119 /* : FlatString */;
6344 static val* varonce120;
6345 val* var121 /* : String */;
6346 char* var122 /* : NativeString */;
6347 long var123 /* : Int */;
6348 val* var124 /* : FlatString */;
6349 val* var125 /* : String */;
6350 static val* varonce126;
6351 val* var127 /* : String */;
6352 char* var128 /* : NativeString */;
6353 long var129 /* : Int */;
6354 val* var130 /* : FlatString */;
6355 static val* varonce131;
6356 val* var132 /* : String */;
6357 char* var133 /* : NativeString */;
6358 long var134 /* : Int */;
6359 val* var135 /* : FlatString */;
6360 val* var136 /* : Array[Object] */;
6361 long var137 /* : Int */;
6362 val* var138 /* : NativeArray[Object] */;
6363 val* var139 /* : Object */;
6364 val* var140 /* : String */;
6365 static val* varonce142;
6366 val* var143 /* : String */;
6367 char* var144 /* : NativeString */;
6368 long var145 /* : Int */;
6369 val* var146 /* : FlatString */;
6370 static val* varonce147;
6371 val* var148 /* : String */;
6372 char* var149 /* : NativeString */;
6373 long var150 /* : Int */;
6374 val* var151 /* : FlatString */;
6375 short int var152 /* : Bool */;
6376 var_mclass = p0;
6377 {
6378 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
6379 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
6380 if (unlikely(var3 == NULL)) {
6381 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
6382 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 396);
6383 show_backtrace(1);
6384 }
6385 var1 = var3;
6386 RET_LABEL2:(void)0;
6387 }
6388 }
6389 {
6390 var4 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var1, var_mclass) /* [] on <var1:Map[MClass, Array[nullable MPropDef]]>*/;
6391 }
6392 {
6393 var5 = array__AbstractArrayRead__is_empty(var4);
6394 }
6395 if (var5){
6396 var6 = 0;
6397 var = var6;
6398 goto RET_LABEL;
6399 } else {
6400 }
6401 if (varonce) {
6402 var7 = varonce;
6403 } else {
6404 var8 = "vts_table_";
6405 var9 = 10;
6406 var10 = string__NativeString__to_s_with_length(var8, var9);
6407 var7 = var10;
6408 varonce = var7;
6409 }
6410 {
6411 var11 = abstract_compiler__MClass__c_name(var_mclass);
6412 }
6413 var12 = NEW_array__Array(&type_array__Arraykernel__Object);
6414 { /* var12 = array_instance Array[Object] */
6415 var13 = 2;
6416 var14 = NEW_array__NativeArray(var13, &type_array__NativeArraykernel__Object);
6417 ((struct instance_array__NativeArray*)var14)->values[0] = (val*) var7;
6418 ((struct instance_array__NativeArray*)var14)->values[1] = (val*) var11;
6419 {
6420 ((void (*)(val*, val*, long))(var12->class->vft[COLOR_array__Array__with_native]))(var12, var14, var13) /* with_native on <var12:Array[Object]>*/;
6421 }
6422 }
6423 {
6424 var15 = ((val* (*)(val*))(var12->class->vft[COLOR_string__Object__to_s]))(var12) /* to_s on <var12:Array[Object]>*/;
6425 }
6426 if (varonce16) {
6427 var17 = varonce16;
6428 } else {
6429 var18 = "extern const struct vts_table vts_table_";
6430 var19 = 40;
6431 var20 = string__NativeString__to_s_with_length(var18, var19);
6432 var17 = var20;
6433 varonce16 = var17;
6434 }
6435 {
6436 var21 = abstract_compiler__MClass__c_name(var_mclass);
6437 }
6438 if (varonce22) {
6439 var23 = varonce22;
6440 } else {
6441 var24 = ";";
6442 var25 = 1;
6443 var26 = string__NativeString__to_s_with_length(var24, var25);
6444 var23 = var26;
6445 varonce22 = var23;
6446 }
6447 var27 = NEW_array__Array(&type_array__Arraykernel__Object);
6448 { /* var27 = array_instance Array[Object] */
6449 var28 = 3;
6450 var29 = NEW_array__NativeArray(var28, &type_array__NativeArraykernel__Object);
6451 ((struct instance_array__NativeArray*)var29)->values[0] = (val*) var17;
6452 ((struct instance_array__NativeArray*)var29)->values[1] = (val*) var21;
6453 ((struct instance_array__NativeArray*)var29)->values[2] = (val*) var23;
6454 {
6455 ((void (*)(val*, val*, long))(var27->class->vft[COLOR_array__Array__with_native]))(var27, var29, var28) /* with_native on <var27:Array[Object]>*/;
6456 }
6457 }
6458 {
6459 var30 = ((val* (*)(val*))(var27->class->vft[COLOR_string__Object__to_s]))(var27) /* to_s on <var27:Array[Object]>*/;
6460 }
6461 {
6462 abstract_compiler__AbstractCompiler__provide_declaration(self, var15, var30); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
6463 }
6464 {
6465 var31 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
6466 }
6467 var_v = var31;
6468 if (varonce32) {
6469 var33 = varonce32;
6470 } else {
6471 var34 = "const struct vts_table vts_table_";
6472 var35 = 33;
6473 var36 = string__NativeString__to_s_with_length(var34, var35);
6474 var33 = var36;
6475 varonce32 = var33;
6476 }
6477 {
6478 var37 = abstract_compiler__MClass__c_name(var_mclass);
6479 }
6480 if (varonce38) {
6481 var39 = varonce38;
6482 } else {
6483 var40 = " = {";
6484 var41 = 4;
6485 var42 = string__NativeString__to_s_with_length(var40, var41);
6486 var39 = var42;
6487 varonce38 = var39;
6488 }
6489 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
6490 { /* var43 = array_instance Array[Object] */
6491 var44 = 3;
6492 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
6493 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var33;
6494 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var37;
6495 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var39;
6496 {
6497 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
6498 }
6499 }
6500 {
6501 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
6502 }
6503 {
6504 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var46); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6505 }
6506 if (varonce47) {
6507 var48 = varonce47;
6508 } else {
6509 var49 = "0, /* dummy */";
6510 var50 = 14;
6511 var51 = string__NativeString__to_s_with_length(var49, var50);
6512 var48 = var51;
6513 varonce47 = var48;
6514 }
6515 {
6516 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var48); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6517 }
6518 if (varonce52) {
6519 var53 = varonce52;
6520 } else {
6521 var54 = "{";
6522 var55 = 1;
6523 var56 = string__NativeString__to_s_with_length(var54, var55);
6524 var53 = var56;
6525 varonce52 = var53;
6526 }
6527 {
6528 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var53); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6529 }
6530 {
6531 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
6532 var59 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
6533 if (unlikely(var59 == NULL)) {
6534 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
6535 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 396);
6536 show_backtrace(1);
6537 }
6538 var57 = var59;
6539 RET_LABEL58:(void)0;
6540 }
6541 }
6542 {
6543 var60 = ((val* (*)(val*, val*))(var57->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var57, var_mclass) /* [] on <var57:Map[MClass, Array[nullable MPropDef]]>*/;
6544 }
6545 {
6546 var61 = array__AbstractArrayRead__iterator(var60);
6547 }
6548 for(;;) {
6549 {
6550 var62 = array__ArrayIterator__is_ok(var61);
6551 }
6552 if(!var62) break;
6553 {
6554 var63 = array__ArrayIterator__item(var61);
6555 }
6556 var_vt = var63;
6557 var64 = NULL;
6558 if (var_vt == NULL) {
6559 var65 = 1; /* is null */
6560 } else {
6561 var65 = 0; /* arg is null but recv is not */
6562 }
6563 if (0) {
6564 { /* Inline kernel#Object#== (var_vt,var64) on <var_vt:nullable MPropDef> */
6565 var_other = var64;
6566 {
6567 { /* Inline kernel#Object#is_same_instance (var_vt,var_other) on <var_vt:nullable MPropDef(MPropDef)> */
6568 var70 = var_vt == var_other;
6569 var68 = var70;
6570 goto RET_LABEL69;
6571 RET_LABEL69:(void)0;
6572 }
6573 }
6574 var66 = var68;
6575 goto RET_LABEL67;
6576 RET_LABEL67:(void)0;
6577 }
6578 var65 = var66;
6579 }
6580 if (var65){
6581 if (varonce71) {
6582 var72 = varonce71;
6583 } else {
6584 var73 = "{-1, NULL}, /* empty */";
6585 var74 = 23;
6586 var75 = string__NativeString__to_s_with_length(var73, var74);
6587 var72 = var75;
6588 varonce71 = var72;
6589 }
6590 {
6591 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var72); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6592 }
6593 } else {
6594 var76 = 0;
6595 var_is_null = var76;
6596 {
6597 var77 = model__MClass__intro(var_mclass);
6598 }
6599 {
6600 { /* Inline model#MClassDef#bound_mtype (var77) on <var77:MClassDef> */
6601 var80 = var77->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var77:MClassDef> */
6602 if (unlikely(var80 == NULL)) {
6603 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
6604 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 477);
6605 show_backtrace(1);
6606 }
6607 var78 = var80;
6608 RET_LABEL79:(void)0;
6609 }
6610 }
6611 /* <var_vt:nullable MPropDef(MPropDef)> isa MVirtualTypeDef */
6612 cltype = type_model__MVirtualTypeDef.color;
6613 idtype = type_model__MVirtualTypeDef.id;
6614 if(cltype >= var_vt->type->table_size) {
6615 var81 = 0;
6616 } else {
6617 var81 = var_vt->type->type_table[cltype] == idtype;
6618 }
6619 if (unlikely(!var81)) {
6620 var_class_name = var_vt == NULL ? "null" : var_vt->type->name;
6621 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MVirtualTypeDef", var_class_name);
6622 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 362);
6623 show_backtrace(1);
6624 }
6625 {
6626 { /* Inline model#MVirtualTypeDef#bound (var_vt) on <var_vt:MPropDef(MVirtualTypeDef)> */
6627 var84 = var_vt->attrs[COLOR_model__MVirtualTypeDef___bound].val; /* _bound on <var_vt:MPropDef(MVirtualTypeDef)> */
6628 var82 = var84;
6629 RET_LABEL83:(void)0;
6630 }
6631 }
6632 {
6633 var85 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, var78, var82);
6634 }
6635 var_bound = var85;
6636 for(;;) {
6637 /* <var_bound:MType> isa MNullableType */
6638 cltype87 = type_model__MNullableType.color;
6639 idtype88 = type_model__MNullableType.id;
6640 if(cltype87 >= var_bound->type->table_size) {
6641 var86 = 0;
6642 } else {
6643 var86 = var_bound->type->type_table[cltype87] == idtype88;
6644 }
6645 if (!var86) break;
6646 {
6647 var89 = model__MClass__intro(var_mclass);
6648 }
6649 {
6650 { /* Inline model#MClassDef#bound_mtype (var89) on <var89:MClassDef> */
6651 var92 = var89->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var89:MClassDef> */
6652 if (unlikely(var92 == NULL)) {
6653 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
6654 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 477);
6655 show_backtrace(1);
6656 }
6657 var90 = var92;
6658 RET_LABEL91:(void)0;
6659 }
6660 }
6661 {
6662 { /* Inline model#MNullableType#mtype (var_bound) on <var_bound:MType(MNullableType)> */
6663 var95 = var_bound->attrs[COLOR_model__MNullableType___mtype].val; /* _mtype on <var_bound:MType(MNullableType)> */
6664 if (unlikely(var95 == NULL)) {
6665 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
6666 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 1375);
6667 show_backtrace(1);
6668 }
6669 var93 = var95;
6670 RET_LABEL94:(void)0;
6671 }
6672 }
6673 {
6674 var96 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, var90, var93);
6675 }
6676 var_bound = var96;
6677 var97 = 1;
6678 var_is_null = var97;
6679 CONTINUE_label: (void)0;
6680 }
6681 BREAK_label: (void)0;
6682 /* <var_bound:MType> isa MClassType */
6683 cltype99 = type_model__MClassType.color;
6684 idtype100 = type_model__MClassType.id;
6685 if(cltype99 >= var_bound->type->table_size) {
6686 var98 = 0;
6687 } else {
6688 var98 = var_bound->type->type_table[cltype99] == idtype100;
6689 }
6690 if (unlikely(!var98)) {
6691 var_class_name101 = var_bound == NULL ? "null" : var_bound->type->name;
6692 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name101);
6693 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 367);
6694 show_backtrace(1);
6695 }
6696 {
6697 { /* Inline model#MClassType#mclass (var_bound) on <var_bound:MType(MClassType)> */
6698 var104 = var_bound->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_bound:MType(MClassType)> */
6699 if (unlikely(var104 == NULL)) {
6700 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
6701 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 969);
6702 show_backtrace(1);
6703 }
6704 var102 = var104;
6705 RET_LABEL103:(void)0;
6706 }
6707 }
6708 var_vtclass = var102;
6709 if (varonce105) {
6710 var106 = varonce105;
6711 } else {
6712 var107 = "class_";
6713 var108 = 6;
6714 var109 = string__NativeString__to_s_with_length(var107, var108);
6715 var106 = var109;
6716 varonce105 = var106;
6717 }
6718 {
6719 var110 = abstract_compiler__MClass__c_name(var_vtclass);
6720 }
6721 var111 = NEW_array__Array(&type_array__Arraykernel__Object);
6722 { /* var111 = array_instance Array[Object] */
6723 var112 = 2;
6724 var113 = NEW_array__NativeArray(var112, &type_array__NativeArraykernel__Object);
6725 ((struct instance_array__NativeArray*)var113)->values[0] = (val*) var106;
6726 ((struct instance_array__NativeArray*)var113)->values[1] = (val*) var110;
6727 {
6728 ((void (*)(val*, val*, long))(var111->class->vft[COLOR_array__Array__with_native]))(var111, var113, var112) /* with_native on <var111:Array[Object]>*/;
6729 }
6730 }
6731 {
6732 var114 = ((val* (*)(val*))(var111->class->vft[COLOR_string__Object__to_s]))(var111) /* to_s on <var111:Array[Object]>*/;
6733 }
6734 {
6735 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var114); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
6736 }
6737 if (varonce115) {
6738 var116 = varonce115;
6739 } else {
6740 var117 = "{";
6741 var118 = 1;
6742 var119 = string__NativeString__to_s_with_length(var117, var118);
6743 var116 = var119;
6744 varonce115 = var116;
6745 }
6746 if (varonce120) {
6747 var121 = varonce120;
6748 } else {
6749 var122 = ", &class_";
6750 var123 = 9;
6751 var124 = string__NativeString__to_s_with_length(var122, var123);
6752 var121 = var124;
6753 varonce120 = var121;
6754 }
6755 {
6756 var125 = abstract_compiler__MClass__c_name(var_vtclass);
6757 }
6758 if (varonce126) {
6759 var127 = varonce126;
6760 } else {
6761 var128 = "}, /* ";
6762 var129 = 6;
6763 var130 = string__NativeString__to_s_with_length(var128, var129);
6764 var127 = var130;
6765 varonce126 = var127;
6766 }
6767 if (varonce131) {
6768 var132 = varonce131;
6769 } else {
6770 var133 = " */";
6771 var134 = 3;
6772 var135 = string__NativeString__to_s_with_length(var133, var134);
6773 var132 = var135;
6774 varonce131 = var132;
6775 }
6776 var136 = NEW_array__Array(&type_array__Arraykernel__Object);
6777 { /* var136 = array_instance Array[Object] */
6778 var137 = 7;
6779 var138 = NEW_array__NativeArray(var137, &type_array__NativeArraykernel__Object);
6780 ((struct instance_array__NativeArray*)var138)->values[0] = (val*) var116;
6781 var139 = BOX_kernel__Int(var_is_null); /* autobox from Int to Object */
6782 ((struct instance_array__NativeArray*)var138)->values[1] = (val*) var139;
6783 ((struct instance_array__NativeArray*)var138)->values[2] = (val*) var121;
6784 ((struct instance_array__NativeArray*)var138)->values[3] = (val*) var125;
6785 ((struct instance_array__NativeArray*)var138)->values[4] = (val*) var127;
6786 ((struct instance_array__NativeArray*)var138)->values[5] = (val*) var_vt;
6787 ((struct instance_array__NativeArray*)var138)->values[6] = (val*) var132;
6788 {
6789 ((void (*)(val*, val*, long))(var136->class->vft[COLOR_array__Array__with_native]))(var136, var138, var137) /* with_native on <var136:Array[Object]>*/;
6790 }
6791 }
6792 {
6793 var140 = ((val* (*)(val*))(var136->class->vft[COLOR_string__Object__to_s]))(var136) /* to_s on <var136:Array[Object]>*/;
6794 }
6795 {
6796 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var140); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6797 }
6798 }
6799 CONTINUE_label141: (void)0;
6800 {
6801 array__ArrayIterator__next(var61); /* Direct call array#ArrayIterator#next on <var61:ArrayIterator[nullable Object]>*/
6802 }
6803 }
6804 BREAK_label141: (void)0;
6805 if (varonce142) {
6806 var143 = varonce142;
6807 } else {
6808 var144 = "},";
6809 var145 = 2;
6810 var146 = string__NativeString__to_s_with_length(var144, var145);
6811 var143 = var146;
6812 varonce142 = var143;
6813 }
6814 {
6815 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var143); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6816 }
6817 if (varonce147) {
6818 var148 = varonce147;
6819 } else {
6820 var149 = "};";
6821 var150 = 2;
6822 var151 = string__NativeString__to_s_with_length(var149, var150);
6823 var148 = var151;
6824 varonce147 = var148;
6825 }
6826 {
6827 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var148); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6828 }
6829 var152 = 1;
6830 var = var152;
6831 goto RET_LABEL;
6832 RET_LABEL:;
6833 return var;
6834 }
6835 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: Object, MClass): Bool */
6836 short int VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
6837 short int var /* : Bool */;
6838 short int var1 /* : Bool */;
6839 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(self, p0);
6840 var = var1;
6841 RET_LABEL:;
6842 return var;
6843 }
6844 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: SeparateErasureCompiler, MClassType, nullable MType): MType */
6845 val* separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
6846 val* var /* : MType */;
6847 val* var_anchor /* var anchor: MClassType */;
6848 val* var_mtype /* var mtype: nullable MType */;
6849 val* var1 /* : null */;
6850 short int var2 /* : Bool */;
6851 short int var3 /* : Bool */;
6852 val* var_other /* var other: nullable Object */;
6853 short int var5 /* : Bool */;
6854 short int var7 /* : Bool */;
6855 static val* varonce;
6856 val* var8 /* : String */;
6857 char* var9 /* : NativeString */;
6858 long var10 /* : Int */;
6859 val* var11 /* : FlatString */;
6860 short int var12 /* : Bool */;
6861 int cltype;
6862 int idtype;
6863 val* var13 /* : MModule */;
6864 val* var15 /* : MModule */;
6865 val* var16 /* : MType */;
6866 short int var17 /* : Bool */;
6867 int cltype18;
6868 int idtype19;
6869 val* var20 /* : MModule */;
6870 val* var22 /* : MModule */;
6871 val* var23 /* : MType */;
6872 var_anchor = p0;
6873 var_mtype = p1;
6874 var1 = NULL;
6875 if (var_mtype == NULL) {
6876 var2 = 1; /* is null */
6877 } else {
6878 var2 = 0; /* arg is null but recv is not */
6879 }
6880 if (0) {
6881 { /* Inline kernel#Object#== (var_mtype,var1) on <var_mtype:nullable MType> */
6882 var_other = var1;
6883 {
6884 { /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
6885 var7 = var_mtype == var_other;
6886 var5 = var7;
6887 goto RET_LABEL6;
6888 RET_LABEL6:(void)0;
6889 }
6890 }
6891 var3 = var5;
6892 goto RET_LABEL4;
6893 RET_LABEL4:(void)0;
6894 }
6895 var2 = var3;
6896 }
6897 if (var2){
6898 if (varonce) {
6899 var8 = varonce;
6900 } else {
6901 var9 = "NOT YET IMPLEMENTED: retrieve_vt_bound on null";
6902 var10 = 46;
6903 var11 = string__NativeString__to_s_with_length(var9, var10);
6904 var8 = var11;
6905 varonce = var8;
6906 }
6907 {
6908 file__Object__print(self, var8); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
6909 }
6910 PRINT_ERROR("Runtime error: %s", "Aborted");
6911 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 380);
6912 show_backtrace(1);
6913 } else {
6914 }
6915 /* <var_mtype:nullable MType(MType)> isa MVirtualType */
6916 cltype = type_model__MVirtualType.color;
6917 idtype = type_model__MVirtualType.id;
6918 if(cltype >= var_mtype->type->table_size) {
6919 var12 = 0;
6920 } else {
6921 var12 = var_mtype->type->type_table[cltype] == idtype;
6922 }
6923 if (var12){
6924 {
6925 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
6926 var15 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
6927 if (unlikely(var15 == NULL)) {
6928 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
6929 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
6930 show_backtrace(1);
6931 }
6932 var13 = var15;
6933 RET_LABEL14:(void)0;
6934 }
6935 }
6936 {
6937 var16 = model__MType__anchor_to(var_mtype, var13, var_anchor);
6938 }
6939 var = var16;
6940 goto RET_LABEL;
6941 } else {
6942 /* <var_mtype:nullable MType(MType)> isa MParameterType */
6943 cltype18 = type_model__MParameterType.color;
6944 idtype19 = type_model__MParameterType.id;
6945 if(cltype18 >= var_mtype->type->table_size) {
6946 var17 = 0;
6947 } else {
6948 var17 = var_mtype->type->type_table[cltype18] == idtype19;
6949 }
6950 if (var17){
6951 {
6952 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
6953 var22 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
6954 if (unlikely(var22 == NULL)) {
6955 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
6956 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 436);
6957 show_backtrace(1);
6958 }
6959 var20 = var22;
6960 RET_LABEL21:(void)0;
6961 }
6962 }
6963 {
6964 var23 = model__MType__anchor_to(var_mtype, var20, var_anchor);
6965 }
6966 var = var23;
6967 goto RET_LABEL;
6968 } else {
6969 var = var_mtype;
6970 goto RET_LABEL;
6971 }
6972 }
6973 RET_LABEL:;
6974 return var;
6975 }
6976 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: Object, MClassType, nullable MType): MType */
6977 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
6978 val* var /* : MType */;
6979 val* var1 /* : MType */;
6980 var1 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, p0, p1);
6981 var = var1;
6982 RET_LABEL:;
6983 return var;
6984 }
6985 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: SeparateErasureCompiler): SeparateCompilerVisitor */
6986 val* separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
6987 val* var /* : SeparateCompilerVisitor */;
6988 val* var1 /* : SeparateErasureCompilerVisitor */;
6989 short int var2 /* : Bool */;
6990 int cltype;
6991 int idtype;
6992 const struct type* type_struct;
6993 const char* var_class_name;
6994 var1 = NEW_separate_erasure_compiler__SeparateErasureCompilerVisitor(&type_separate_erasure_compiler__SeparateErasureCompilerVisitor);
6995 {
6996 abstract_compiler__AbstractCompilerVisitor__init(var1, self); /* Direct call abstract_compiler#AbstractCompilerVisitor#init on <var1:SeparateErasureCompilerVisitor>*/
6997 }
6998 /* <var1:SeparateErasureCompilerVisitor> isa VISITOR */
6999 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
7000 cltype = type_struct->color;
7001 idtype = type_struct->id;
7002 if(cltype >= var1->type->table_size) {
7003 var2 = 0;
7004 } else {
7005 var2 = var1->type->type_table[cltype] == idtype;
7006 }
7007 if (unlikely(!var2)) {
7008 var_class_name = var1 == NULL ? "null" : var1->type->name;
7009 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
7010 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 391);
7011 show_backtrace(1);
7012 }
7013 var = var1;
7014 goto RET_LABEL;
7015 RET_LABEL:;
7016 return var;
7017 }
7018 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
7019 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
7020 val* var /* : AbstractCompilerVisitor */;
7021 val* var1 /* : SeparateCompilerVisitor */;
7022 var1 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
7023 var = var1;
7024 RET_LABEL:;
7025 return var;
7026 }
7027 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MClass]] */
7028 val* separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
7029 val* var /* : Map[MClass, Array[nullable MClass]] */;
7030 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
7031 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:SeparateErasureCompiler> */
7032 if (unlikely(var1 == NULL)) {
7033 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
7034 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 395);
7035 show_backtrace(1);
7036 }
7037 var = var1;
7038 RET_LABEL:;
7039 return var;
7040 }
7041 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: Object): Map[MClass, Array[nullable MClass]] */
7042 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
7043 val* var /* : Map[MClass, Array[nullable MClass]] */;
7044 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
7045 val* var3 /* : Map[MClass, Array[nullable MClass]] */;
7046 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables (self) on <self:Object(SeparateErasureCompiler)> */
7047 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:Object(SeparateErasureCompiler)> */
7048 if (unlikely(var3 == NULL)) {
7049 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
7050 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 395);
7051 show_backtrace(1);
7052 }
7053 var1 = var3;
7054 RET_LABEL2:(void)0;
7055 }
7056 var = var1;
7057 RET_LABEL:;
7058 return var;
7059 }
7060 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MClass]]) */
7061 void separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
7062 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val = p0; /* _class_tables on <self:SeparateErasureCompiler> */
7063 RET_LABEL:;
7064 }
7065 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: Object, Map[MClass, Array[nullable MClass]]) */
7066 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
7067 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables= (self,p0) on <self:Object(SeparateErasureCompiler)> */
7068 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val = p0; /* _class_tables on <self:Object(SeparateErasureCompiler)> */
7069 RET_LABEL1:(void)0;
7070 }
7071 RET_LABEL:;
7072 }
7073 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MPropDef]] */
7074 val* separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
7075 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
7076 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
7077 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
7078 if (unlikely(var1 == NULL)) {
7079 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
7080 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 396);
7081 show_backtrace(1);
7082 }
7083 var = var1;
7084 RET_LABEL:;
7085 return var;
7086 }
7087 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: Object): Map[MClass, Array[nullable MPropDef]] */
7088 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
7089 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
7090 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
7091 val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
7092 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:Object(SeparateErasureCompiler)> */
7093 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:Object(SeparateErasureCompiler)> */
7094 if (unlikely(var3 == NULL)) {
7095 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
7096 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 396);
7097 show_backtrace(1);
7098 }
7099 var1 = var3;
7100 RET_LABEL2:(void)0;
7101 }
7102 var = var1;
7103 RET_LABEL:;
7104 return var;
7105 }
7106 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MPropDef]]) */
7107 void separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
7108 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val = p0; /* _vt_tables on <self:SeparateErasureCompiler> */
7109 RET_LABEL:;
7110 }
7111 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: Object, Map[MClass, Array[nullable MPropDef]]) */
7112 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
7113 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables= (self,p0) on <self:Object(SeparateErasureCompiler)> */
7114 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val = p0; /* _vt_tables on <self:Object(SeparateErasureCompiler)> */
7115 RET_LABEL1:(void)0;
7116 }
7117 RET_LABEL:;
7118 }
7119 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: SeparateErasureCompiler) */
7120 void separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
7121 static val* varonce;
7122 val* var /* : String */;
7123 char* var1 /* : NativeString */;
7124 long var2 /* : Int */;
7125 val* var3 /* : FlatString */;
7126 static val* varonce4;
7127 val* var5 /* : String */;
7128 char* var6 /* : NativeString */;
7129 long var7 /* : Int */;
7130 val* var8 /* : FlatString */;
7131 long var9 /* : Int */;
7132 long var_total /* var total: Int */;
7133 long var10 /* : Int */;
7134 long var_holes /* var holes: Int */;
7135 val* var11 /* : Map[MClass, Array[nullable MClass]] */;
7136 val* var13 /* : Map[MClass, Array[nullable MClass]] */;
7137 val* var14 /* : MapIterator[Object, nullable Object] */;
7138 short int var15 /* : Bool */;
7139 val* var16 /* : Object */;
7140 val* var_t /* var t: MClass */;
7141 val* var17 /* : nullable Object */;
7142 val* var_table /* var table: Array[nullable MClass] */;
7143 long var18 /* : Int */;
7144 long var19 /* : Int */;
7145 short int var21 /* : Bool */;
7146 int cltype;
7147 int idtype;
7148 const char* var_class_name;
7149 long var22 /* : Int */;
7150 val* var23 /* : ArrayIterator[nullable Object] */;
7151 short int var24 /* : Bool */;
7152 val* var25 /* : nullable Object */;
7153 val* var_e /* var e: nullable MClass */;
7154 val* var26 /* : null */;
7155 short int var27 /* : Bool */;
7156 short int var28 /* : Bool */;
7157 val* var_other /* var other: nullable Object */;
7158 short int var30 /* : Bool */;
7159 short int var32 /* : Bool */;
7160 long var33 /* : Int */;
7161 long var34 /* : Int */;
7162 short int var36 /* : Bool */;
7163 int cltype37;
7164 int idtype38;
7165 const char* var_class_name39;
7166 long var40 /* : Int */;
7167 static val* varonce42;
7168 val* var43 /* : String */;
7169 char* var44 /* : NativeString */;
7170 long var45 /* : Int */;
7171 val* var46 /* : FlatString */;
7172 static val* varonce47;
7173 val* var48 /* : String */;
7174 char* var49 /* : NativeString */;
7175 long var50 /* : Int */;
7176 val* var51 /* : FlatString */;
7177 val* var52 /* : Array[Object] */;
7178 long var53 /* : Int */;
7179 val* var54 /* : NativeArray[Object] */;
7180 val* var55 /* : Object */;
7181 val* var56 /* : Object */;
7182 val* var57 /* : String */;
7183 static val* varonce58;
7184 val* var59 /* : String */;
7185 char* var60 /* : NativeString */;
7186 long var61 /* : Int */;
7187 val* var62 /* : FlatString */;
7188 static val* varonce63;
7189 val* var64 /* : String */;
7190 char* var65 /* : NativeString */;
7191 long var66 /* : Int */;
7192 val* var67 /* : FlatString */;
7193 long var68 /* : Int */;
7194 long var69 /* : Int */;
7195 val* var70 /* : Map[MClass, Array[nullable MPropDef]] */;
7196 val* var72 /* : Map[MClass, Array[nullable MPropDef]] */;
7197 val* var73 /* : MapIterator[Object, nullable Object] */;
7198 short int var74 /* : Bool */;
7199 val* var75 /* : Object */;
7200 val* var_t76 /* var t: MClass */;
7201 val* var77 /* : nullable Object */;
7202 val* var_table78 /* var table: Array[nullable MPropDef] */;
7203 long var79 /* : Int */;
7204 long var80 /* : Int */;
7205 short int var82 /* : Bool */;
7206 int cltype83;
7207 int idtype84;
7208 const char* var_class_name85;
7209 long var86 /* : Int */;
7210 val* var87 /* : ArrayIterator[nullable Object] */;
7211 short int var88 /* : Bool */;
7212 val* var89 /* : nullable Object */;
7213 val* var_e90 /* var e: nullable MPropDef */;
7214 val* var91 /* : null */;
7215 short int var92 /* : Bool */;
7216 short int var93 /* : Bool */;
7217 short int var95 /* : Bool */;
7218 short int var97 /* : Bool */;
7219 long var98 /* : Int */;
7220 long var99 /* : Int */;
7221 short int var101 /* : Bool */;
7222 int cltype102;
7223 int idtype103;
7224 const char* var_class_name104;
7225 long var105 /* : Int */;
7226 static val* varonce108;
7227 val* var109 /* : String */;
7228 char* var110 /* : NativeString */;
7229 long var111 /* : Int */;
7230 val* var112 /* : FlatString */;
7231 static val* varonce113;
7232 val* var114 /* : String */;
7233 char* var115 /* : NativeString */;
7234 long var116 /* : Int */;
7235 val* var117 /* : FlatString */;
7236 val* var118 /* : Array[Object] */;
7237 long var119 /* : Int */;
7238 val* var120 /* : NativeArray[Object] */;
7239 val* var121 /* : Object */;
7240 val* var122 /* : Object */;
7241 val* var123 /* : String */;
7242 static val* varonce124;
7243 val* var125 /* : String */;
7244 char* var126 /* : NativeString */;
7245 long var127 /* : Int */;
7246 val* var128 /* : FlatString */;
7247 static val* varonce129;
7248 val* var130 /* : String */;
7249 char* var131 /* : NativeString */;
7250 long var132 /* : Int */;
7251 val* var133 /* : FlatString */;
7252 long var134 /* : Int */;
7253 long var135 /* : Int */;
7254 val* var136 /* : Map[MClass, Array[nullable MPropDef]] */;
7255 val* var138 /* : Map[MClass, Array[nullable MPropDef]] */;
7256 val* var139 /* : MapIterator[Object, nullable Object] */;
7257 short int var140 /* : Bool */;
7258 val* var141 /* : Object */;
7259 val* var_t142 /* var t: MClass */;
7260 val* var143 /* : nullable Object */;
7261 val* var_table144 /* var table: Array[nullable MPropDef] */;
7262 long var145 /* : Int */;
7263 long var146 /* : Int */;
7264 short int var148 /* : Bool */;
7265 int cltype149;
7266 int idtype150;
7267 const char* var_class_name151;
7268 long var152 /* : Int */;
7269 val* var153 /* : ArrayIterator[nullable Object] */;
7270 short int var154 /* : Bool */;
7271 val* var155 /* : nullable Object */;
7272 val* var_e156 /* var e: nullable MPropDef */;
7273 val* var157 /* : null */;
7274 short int var158 /* : Bool */;
7275 short int var159 /* : Bool */;
7276 short int var161 /* : Bool */;
7277 short int var163 /* : Bool */;
7278 long var164 /* : Int */;
7279 long var165 /* : Int */;
7280 short int var167 /* : Bool */;
7281 int cltype168;
7282 int idtype169;
7283 const char* var_class_name170;
7284 long var171 /* : Int */;
7285 static val* varonce174;
7286 val* var175 /* : String */;
7287 char* var176 /* : NativeString */;
7288 long var177 /* : Int */;
7289 val* var178 /* : FlatString */;
7290 static val* varonce179;
7291 val* var180 /* : String */;
7292 char* var181 /* : NativeString */;
7293 long var182 /* : Int */;
7294 val* var183 /* : FlatString */;
7295 val* var184 /* : Array[Object] */;
7296 long var185 /* : Int */;
7297 val* var186 /* : NativeArray[Object] */;
7298 val* var187 /* : Object */;
7299 val* var188 /* : Object */;
7300 val* var189 /* : String */;
7301 static val* varonce190;
7302 val* var191 /* : String */;
7303 char* var192 /* : NativeString */;
7304 long var193 /* : Int */;
7305 val* var194 /* : FlatString */;
7306 static val* varonce195;
7307 val* var196 /* : String */;
7308 char* var197 /* : NativeString */;
7309 long var198 /* : Int */;
7310 val* var199 /* : FlatString */;
7311 long var200 /* : Int */;
7312 long var201 /* : Int */;
7313 val* var202 /* : Map[MClass, Array[nullable MPropDef]] */;
7314 val* var204 /* : Map[MClass, Array[nullable MPropDef]] */;
7315 val* var205 /* : MapIterator[Object, nullable Object] */;
7316 short int var206 /* : Bool */;
7317 val* var207 /* : Object */;
7318 val* var_t208 /* var t: MClass */;
7319 val* var209 /* : nullable Object */;
7320 val* var_table210 /* var table: Array[nullable MPropDef] */;
7321 long var211 /* : Int */;
7322 long var212 /* : Int */;
7323 short int var214 /* : Bool */;
7324 int cltype215;
7325 int idtype216;
7326 const char* var_class_name217;
7327 long var218 /* : Int */;
7328 val* var219 /* : ArrayIterator[nullable Object] */;
7329 short int var220 /* : Bool */;
7330 val* var221 /* : nullable Object */;
7331 val* var_e222 /* var e: nullable MPropDef */;
7332 val* var223 /* : null */;
7333 short int var224 /* : Bool */;
7334 short int var225 /* : Bool */;
7335 short int var227 /* : Bool */;
7336 short int var229 /* : Bool */;
7337 long var230 /* : Int */;
7338 long var231 /* : Int */;
7339 short int var233 /* : Bool */;
7340 int cltype234;
7341 int idtype235;
7342 const char* var_class_name236;
7343 long var237 /* : Int */;
7344 static val* varonce240;
7345 val* var241 /* : String */;
7346 char* var242 /* : NativeString */;
7347 long var243 /* : Int */;
7348 val* var244 /* : FlatString */;
7349 static val* varonce245;
7350 val* var246 /* : String */;
7351 char* var247 /* : NativeString */;
7352 long var248 /* : Int */;
7353 val* var249 /* : FlatString */;
7354 val* var250 /* : Array[Object] */;
7355 long var251 /* : Int */;
7356 val* var252 /* : NativeArray[Object] */;
7357 val* var253 /* : Object */;
7358 val* var254 /* : Object */;
7359 val* var255 /* : String */;
7360 if (varonce) {
7361 var = varonce;
7362 } else {
7363 var1 = "# size of subtyping tables";
7364 var2 = 26;
7365 var3 = string__NativeString__to_s_with_length(var1, var2);
7366 var = var3;
7367 varonce = var;
7368 }
7369 {
7370 file__Object__print(self, var); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7371 }
7372 if (varonce4) {
7373 var5 = varonce4;
7374 } else {
7375 var6 = "\11total \11holes";
7376 var7 = 13;
7377 var8 = string__NativeString__to_s_with_length(var6, var7);
7378 var5 = var8;
7379 varonce4 = var5;
7380 }
7381 {
7382 file__Object__print(self, var5); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7383 }
7384 var9 = 0;
7385 var_total = var9;
7386 var10 = 0;
7387 var_holes = var10;
7388 {
7389 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables (self) on <self:SeparateErasureCompiler> */
7390 var13 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:SeparateErasureCompiler> */
7391 if (unlikely(var13 == NULL)) {
7392 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
7393 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 395);
7394 show_backtrace(1);
7395 }
7396 var11 = var13;
7397 RET_LABEL12:(void)0;
7398 }
7399 }
7400 {
7401 var14 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var11) /* iterator on <var11:Map[MClass, Array[nullable MClass]]>*/;
7402 }
7403 for(;;) {
7404 {
7405 var15 = ((short int (*)(val*))(var14->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var14) /* is_ok on <var14:MapIterator[Object, nullable Object]>*/;
7406 }
7407 if(!var15) break;
7408 {
7409 var16 = ((val* (*)(val*))(var14->class->vft[COLOR_abstract_collection__MapIterator__key]))(var14) /* key on <var14:MapIterator[Object, nullable Object]>*/;
7410 }
7411 var_t = var16;
7412 {
7413 var17 = ((val* (*)(val*))(var14->class->vft[COLOR_abstract_collection__MapIterator__item]))(var14) /* item on <var14:MapIterator[Object, nullable Object]>*/;
7414 }
7415 var_table = var17;
7416 {
7417 var18 = array__AbstractArrayRead__length(var_table);
7418 }
7419 {
7420 { /* Inline kernel#Int#+ (var_total,var18) on <var_total:Int> */
7421 /* Covariant cast for argument 0 (i) <var18:Int> isa OTHER */
7422 /* <var18:Int> isa OTHER */
7423 var21 = 1; /* easy <var18:Int> isa OTHER*/
7424 if (unlikely(!var21)) {
7425 var_class_name = type_kernel__Int.name;
7426 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
7427 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
7428 show_backtrace(1);
7429 }
7430 var22 = var_total + var18;
7431 var19 = var22;
7432 goto RET_LABEL20;
7433 RET_LABEL20:(void)0;
7434 }
7435 }
7436 var_total = var19;
7437 {
7438 var23 = array__AbstractArrayRead__iterator(var_table);
7439 }
7440 for(;;) {
7441 {
7442 var24 = array__ArrayIterator__is_ok(var23);
7443 }
7444 if(!var24) break;
7445 {
7446 var25 = array__ArrayIterator__item(var23);
7447 }
7448 var_e = var25;
7449 var26 = NULL;
7450 if (var_e == NULL) {
7451 var27 = 1; /* is null */
7452 } else {
7453 var27 = 0; /* arg is null but recv is not */
7454 }
7455 if (0) {
7456 { /* Inline kernel#Object#== (var_e,var26) on <var_e:nullable MClass> */
7457 var_other = var26;
7458 {
7459 { /* Inline kernel#Object#is_same_instance (var_e,var_other) on <var_e:nullable MClass(MClass)> */
7460 var32 = var_e == var_other;
7461 var30 = var32;
7462 goto RET_LABEL31;
7463 RET_LABEL31:(void)0;
7464 }
7465 }
7466 var28 = var30;
7467 goto RET_LABEL29;
7468 RET_LABEL29:(void)0;
7469 }
7470 var27 = var28;
7471 }
7472 if (var27){
7473 var33 = 1;
7474 {
7475 { /* Inline kernel#Int#+ (var_holes,var33) on <var_holes:Int> */
7476 /* Covariant cast for argument 0 (i) <var33:Int> isa OTHER */
7477 /* <var33:Int> isa OTHER */
7478 var36 = 1; /* easy <var33:Int> isa OTHER*/
7479 if (unlikely(!var36)) {
7480 var_class_name39 = type_kernel__Int.name;
7481 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name39);
7482 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
7483 show_backtrace(1);
7484 }
7485 var40 = var_holes + var33;
7486 var34 = var40;
7487 goto RET_LABEL35;
7488 RET_LABEL35:(void)0;
7489 }
7490 }
7491 var_holes = var34;
7492 } else {
7493 }
7494 CONTINUE_label: (void)0;
7495 {
7496 array__ArrayIterator__next(var23); /* Direct call array#ArrayIterator#next on <var23:ArrayIterator[nullable Object]>*/
7497 }
7498 }
7499 BREAK_label: (void)0;
7500 CONTINUE_label41: (void)0;
7501 {
7502 ((void (*)(val*))(var14->class->vft[COLOR_abstract_collection__MapIterator__next]))(var14) /* next on <var14:MapIterator[Object, nullable Object]>*/;
7503 }
7504 }
7505 BREAK_label41: (void)0;
7506 if (varonce42) {
7507 var43 = varonce42;
7508 } else {
7509 var44 = "\11";
7510 var45 = 1;
7511 var46 = string__NativeString__to_s_with_length(var44, var45);
7512 var43 = var46;
7513 varonce42 = var43;
7514 }
7515 if (varonce47) {
7516 var48 = varonce47;
7517 } else {
7518 var49 = "\11";
7519 var50 = 1;
7520 var51 = string__NativeString__to_s_with_length(var49, var50);
7521 var48 = var51;
7522 varonce47 = var48;
7523 }
7524 var52 = NEW_array__Array(&type_array__Arraykernel__Object);
7525 { /* var52 = array_instance Array[Object] */
7526 var53 = 4;
7527 var54 = NEW_array__NativeArray(var53, &type_array__NativeArraykernel__Object);
7528 ((struct instance_array__NativeArray*)var54)->values[0] = (val*) var43;
7529 var55 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
7530 ((struct instance_array__NativeArray*)var54)->values[1] = (val*) var55;
7531 ((struct instance_array__NativeArray*)var54)->values[2] = (val*) var48;
7532 var56 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
7533 ((struct instance_array__NativeArray*)var54)->values[3] = (val*) var56;
7534 {
7535 ((void (*)(val*, val*, long))(var52->class->vft[COLOR_array__Array__with_native]))(var52, var54, var53) /* with_native on <var52:Array[Object]>*/;
7536 }
7537 }
7538 {
7539 var57 = ((val* (*)(val*))(var52->class->vft[COLOR_string__Object__to_s]))(var52) /* to_s on <var52:Array[Object]>*/;
7540 }
7541 {
7542 file__Object__print(self, var57); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7543 }
7544 if (varonce58) {
7545 var59 = varonce58;
7546 } else {
7547 var60 = "# size of resolution tables";
7548 var61 = 27;
7549 var62 = string__NativeString__to_s_with_length(var60, var61);
7550 var59 = var62;
7551 varonce58 = var59;
7552 }
7553 {
7554 file__Object__print(self, var59); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7555 }
7556 if (varonce63) {
7557 var64 = varonce63;
7558 } else {
7559 var65 = "\11total \11holes";
7560 var66 = 13;
7561 var67 = string__NativeString__to_s_with_length(var65, var66);
7562 var64 = var67;
7563 varonce63 = var64;
7564 }
7565 {
7566 file__Object__print(self, var64); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7567 }
7568 var68 = 0;
7569 var_total = var68;
7570 var69 = 0;
7571 var_holes = var69;
7572 {
7573 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
7574 var72 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
7575 if (unlikely(var72 == NULL)) {
7576 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
7577 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 396);
7578 show_backtrace(1);
7579 }
7580 var70 = var72;
7581 RET_LABEL71:(void)0;
7582 }
7583 }
7584 {
7585 var73 = ((val* (*)(val*))(var70->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var70) /* iterator on <var70:Map[MClass, Array[nullable MPropDef]]>*/;
7586 }
7587 for(;;) {
7588 {
7589 var74 = ((short int (*)(val*))(var73->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var73) /* is_ok on <var73:MapIterator[Object, nullable Object]>*/;
7590 }
7591 if(!var74) break;
7592 {
7593 var75 = ((val* (*)(val*))(var73->class->vft[COLOR_abstract_collection__MapIterator__key]))(var73) /* key on <var73:MapIterator[Object, nullable Object]>*/;
7594 }
7595 var_t76 = var75;
7596 {
7597 var77 = ((val* (*)(val*))(var73->class->vft[COLOR_abstract_collection__MapIterator__item]))(var73) /* item on <var73:MapIterator[Object, nullable Object]>*/;
7598 }
7599 var_table78 = var77;
7600 {
7601 var79 = array__AbstractArrayRead__length(var_table78);
7602 }
7603 {
7604 { /* Inline kernel#Int#+ (var_total,var79) on <var_total:Int> */
7605 /* Covariant cast for argument 0 (i) <var79:Int> isa OTHER */
7606 /* <var79:Int> isa OTHER */
7607 var82 = 1; /* easy <var79:Int> isa OTHER*/
7608 if (unlikely(!var82)) {
7609 var_class_name85 = type_kernel__Int.name;
7610 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name85);
7611 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
7612 show_backtrace(1);
7613 }
7614 var86 = var_total + var79;
7615 var80 = var86;
7616 goto RET_LABEL81;
7617 RET_LABEL81:(void)0;
7618 }
7619 }
7620 var_total = var80;
7621 {
7622 var87 = array__AbstractArrayRead__iterator(var_table78);
7623 }
7624 for(;;) {
7625 {
7626 var88 = array__ArrayIterator__is_ok(var87);
7627 }
7628 if(!var88) break;
7629 {
7630 var89 = array__ArrayIterator__item(var87);
7631 }
7632 var_e90 = var89;
7633 var91 = NULL;
7634 if (var_e90 == NULL) {
7635 var92 = 1; /* is null */
7636 } else {
7637 var92 = 0; /* arg is null but recv is not */
7638 }
7639 if (0) {
7640 { /* Inline kernel#Object#== (var_e90,var91) on <var_e90:nullable MPropDef> */
7641 var_other = var91;
7642 {
7643 { /* Inline kernel#Object#is_same_instance (var_e90,var_other) on <var_e90:nullable MPropDef(MPropDef)> */
7644 var97 = var_e90 == var_other;
7645 var95 = var97;
7646 goto RET_LABEL96;
7647 RET_LABEL96:(void)0;
7648 }
7649 }
7650 var93 = var95;
7651 goto RET_LABEL94;
7652 RET_LABEL94:(void)0;
7653 }
7654 var92 = var93;
7655 }
7656 if (var92){
7657 var98 = 1;
7658 {
7659 { /* Inline kernel#Int#+ (var_holes,var98) on <var_holes:Int> */
7660 /* Covariant cast for argument 0 (i) <var98:Int> isa OTHER */
7661 /* <var98:Int> isa OTHER */
7662 var101 = 1; /* easy <var98:Int> isa OTHER*/
7663 if (unlikely(!var101)) {
7664 var_class_name104 = type_kernel__Int.name;
7665 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name104);
7666 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
7667 show_backtrace(1);
7668 }
7669 var105 = var_holes + var98;
7670 var99 = var105;
7671 goto RET_LABEL100;
7672 RET_LABEL100:(void)0;
7673 }
7674 }
7675 var_holes = var99;
7676 } else {
7677 }
7678 CONTINUE_label106: (void)0;
7679 {
7680 array__ArrayIterator__next(var87); /* Direct call array#ArrayIterator#next on <var87:ArrayIterator[nullable Object]>*/
7681 }
7682 }
7683 BREAK_label106: (void)0;
7684 CONTINUE_label107: (void)0;
7685 {
7686 ((void (*)(val*))(var73->class->vft[COLOR_abstract_collection__MapIterator__next]))(var73) /* next on <var73:MapIterator[Object, nullable Object]>*/;
7687 }
7688 }
7689 BREAK_label107: (void)0;
7690 if (varonce108) {
7691 var109 = varonce108;
7692 } else {
7693 var110 = "\11";
7694 var111 = 1;
7695 var112 = string__NativeString__to_s_with_length(var110, var111);
7696 var109 = var112;
7697 varonce108 = var109;
7698 }
7699 if (varonce113) {
7700 var114 = varonce113;
7701 } else {
7702 var115 = "\11";
7703 var116 = 1;
7704 var117 = string__NativeString__to_s_with_length(var115, var116);
7705 var114 = var117;
7706 varonce113 = var114;
7707 }
7708 var118 = NEW_array__Array(&type_array__Arraykernel__Object);
7709 { /* var118 = array_instance Array[Object] */
7710 var119 = 4;
7711 var120 = NEW_array__NativeArray(var119, &type_array__NativeArraykernel__Object);
7712 ((struct instance_array__NativeArray*)var120)->values[0] = (val*) var109;
7713 var121 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
7714 ((struct instance_array__NativeArray*)var120)->values[1] = (val*) var121;
7715 ((struct instance_array__NativeArray*)var120)->values[2] = (val*) var114;
7716 var122 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
7717 ((struct instance_array__NativeArray*)var120)->values[3] = (val*) var122;
7718 {
7719 ((void (*)(val*, val*, long))(var118->class->vft[COLOR_array__Array__with_native]))(var118, var120, var119) /* with_native on <var118:Array[Object]>*/;
7720 }
7721 }
7722 {
7723 var123 = ((val* (*)(val*))(var118->class->vft[COLOR_string__Object__to_s]))(var118) /* to_s on <var118:Array[Object]>*/;
7724 }
7725 {
7726 file__Object__print(self, var123); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7727 }
7728 if (varonce124) {
7729 var125 = varonce124;
7730 } else {
7731 var126 = "# size of methods tables";
7732 var127 = 24;
7733 var128 = string__NativeString__to_s_with_length(var126, var127);
7734 var125 = var128;
7735 varonce124 = var125;
7736 }
7737 {
7738 file__Object__print(self, var125); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7739 }
7740 if (varonce129) {
7741 var130 = varonce129;
7742 } else {
7743 var131 = "\11total \11holes";
7744 var132 = 13;
7745 var133 = string__NativeString__to_s_with_length(var131, var132);
7746 var130 = var133;
7747 varonce129 = var130;
7748 }
7749 {
7750 file__Object__print(self, var130); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7751 }
7752 var134 = 0;
7753 var_total = var134;
7754 var135 = 0;
7755 var_holes = var135;
7756 {
7757 { /* Inline separate_compiler#SeparateCompiler#method_tables (self) on <self:SeparateErasureCompiler> */
7758 var138 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_tables].val; /* _method_tables on <self:SeparateErasureCompiler> */
7759 if (unlikely(var138 == NULL)) {
7760 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_tables");
7761 PRINT_ERROR(" (%s:%d)\n", "src/separate_compiler.nit", 792);
7762 show_backtrace(1);
7763 }
7764 var136 = var138;
7765 RET_LABEL137:(void)0;
7766 }
7767 }
7768 {
7769 var139 = ((val* (*)(val*))(var136->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var136) /* iterator on <var136:Map[MClass, Array[nullable MPropDef]]>*/;
7770 }
7771 for(;;) {
7772 {
7773 var140 = ((short int (*)(val*))(var139->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var139) /* is_ok on <var139:MapIterator[Object, nullable Object]>*/;
7774 }
7775 if(!var140) break;
7776 {
7777 var141 = ((val* (*)(val*))(var139->class->vft[COLOR_abstract_collection__MapIterator__key]))(var139) /* key on <var139:MapIterator[Object, nullable Object]>*/;
7778 }
7779 var_t142 = var141;
7780 {
7781 var143 = ((val* (*)(val*))(var139->class->vft[COLOR_abstract_collection__MapIterator__item]))(var139) /* item on <var139:MapIterator[Object, nullable Object]>*/;
7782 }
7783 var_table144 = var143;
7784 {
7785 var145 = array__AbstractArrayRead__length(var_table144);
7786 }
7787 {
7788 { /* Inline kernel#Int#+ (var_total,var145) on <var_total:Int> */
7789 /* Covariant cast for argument 0 (i) <var145:Int> isa OTHER */
7790 /* <var145:Int> isa OTHER */
7791 var148 = 1; /* easy <var145:Int> isa OTHER*/
7792 if (unlikely(!var148)) {
7793 var_class_name151 = type_kernel__Int.name;
7794 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name151);
7795 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
7796 show_backtrace(1);
7797 }
7798 var152 = var_total + var145;
7799 var146 = var152;
7800 goto RET_LABEL147;
7801 RET_LABEL147:(void)0;
7802 }
7803 }
7804 var_total = var146;
7805 {
7806 var153 = array__AbstractArrayRead__iterator(var_table144);
7807 }
7808 for(;;) {
7809 {
7810 var154 = array__ArrayIterator__is_ok(var153);
7811 }
7812 if(!var154) break;
7813 {
7814 var155 = array__ArrayIterator__item(var153);
7815 }
7816 var_e156 = var155;
7817 var157 = NULL;
7818 if (var_e156 == NULL) {
7819 var158 = 1; /* is null */
7820 } else {
7821 var158 = 0; /* arg is null but recv is not */
7822 }
7823 if (0) {
7824 { /* Inline kernel#Object#== (var_e156,var157) on <var_e156:nullable MPropDef> */
7825 var_other = var157;
7826 {
7827 { /* Inline kernel#Object#is_same_instance (var_e156,var_other) on <var_e156:nullable MPropDef(MPropDef)> */
7828 var163 = var_e156 == var_other;
7829 var161 = var163;
7830 goto RET_LABEL162;
7831 RET_LABEL162:(void)0;
7832 }
7833 }
7834 var159 = var161;
7835 goto RET_LABEL160;
7836 RET_LABEL160:(void)0;
7837 }
7838 var158 = var159;
7839 }
7840 if (var158){
7841 var164 = 1;
7842 {
7843 { /* Inline kernel#Int#+ (var_holes,var164) on <var_holes:Int> */
7844 /* Covariant cast for argument 0 (i) <var164:Int> isa OTHER */
7845 /* <var164:Int> isa OTHER */
7846 var167 = 1; /* easy <var164:Int> isa OTHER*/
7847 if (unlikely(!var167)) {
7848 var_class_name170 = type_kernel__Int.name;
7849 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name170);
7850 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
7851 show_backtrace(1);
7852 }
7853 var171 = var_holes + var164;
7854 var165 = var171;
7855 goto RET_LABEL166;
7856 RET_LABEL166:(void)0;
7857 }
7858 }
7859 var_holes = var165;
7860 } else {
7861 }
7862 CONTINUE_label172: (void)0;
7863 {
7864 array__ArrayIterator__next(var153); /* Direct call array#ArrayIterator#next on <var153:ArrayIterator[nullable Object]>*/
7865 }
7866 }
7867 BREAK_label172: (void)0;
7868 CONTINUE_label173: (void)0;
7869 {
7870 ((void (*)(val*))(var139->class->vft[COLOR_abstract_collection__MapIterator__next]))(var139) /* next on <var139:MapIterator[Object, nullable Object]>*/;
7871 }
7872 }
7873 BREAK_label173: (void)0;
7874 if (varonce174) {
7875 var175 = varonce174;
7876 } else {
7877 var176 = "\11";
7878 var177 = 1;
7879 var178 = string__NativeString__to_s_with_length(var176, var177);
7880 var175 = var178;
7881 varonce174 = var175;
7882 }
7883 if (varonce179) {
7884 var180 = varonce179;
7885 } else {
7886 var181 = "\11";
7887 var182 = 1;
7888 var183 = string__NativeString__to_s_with_length(var181, var182);
7889 var180 = var183;
7890 varonce179 = var180;
7891 }
7892 var184 = NEW_array__Array(&type_array__Arraykernel__Object);
7893 { /* var184 = array_instance Array[Object] */
7894 var185 = 4;
7895 var186 = NEW_array__NativeArray(var185, &type_array__NativeArraykernel__Object);
7896 ((struct instance_array__NativeArray*)var186)->values[0] = (val*) var175;
7897 var187 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
7898 ((struct instance_array__NativeArray*)var186)->values[1] = (val*) var187;
7899 ((struct instance_array__NativeArray*)var186)->values[2] = (val*) var180;
7900 var188 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
7901 ((struct instance_array__NativeArray*)var186)->values[3] = (val*) var188;
7902 {
7903 ((void (*)(val*, val*, long))(var184->class->vft[COLOR_array__Array__with_native]))(var184, var186, var185) /* with_native on <var184:Array[Object]>*/;
7904 }
7905 }
7906 {
7907 var189 = ((val* (*)(val*))(var184->class->vft[COLOR_string__Object__to_s]))(var184) /* to_s on <var184:Array[Object]>*/;
7908 }
7909 {
7910 file__Object__print(self, var189); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7911 }
7912 if (varonce190) {
7913 var191 = varonce190;
7914 } else {
7915 var192 = "# size of attributes tables";
7916 var193 = 27;
7917 var194 = string__NativeString__to_s_with_length(var192, var193);
7918 var191 = var194;
7919 varonce190 = var191;
7920 }
7921 {
7922 file__Object__print(self, var191); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7923 }
7924 if (varonce195) {
7925 var196 = varonce195;
7926 } else {
7927 var197 = "\11total \11holes";
7928 var198 = 13;
7929 var199 = string__NativeString__to_s_with_length(var197, var198);
7930 var196 = var199;
7931 varonce195 = var196;
7932 }
7933 {
7934 file__Object__print(self, var196); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
7935 }
7936 var200 = 0;
7937 var_total = var200;
7938 var201 = 0;
7939 var_holes = var201;
7940 {
7941 { /* Inline separate_compiler#SeparateCompiler#attr_tables (self) on <self:SeparateErasureCompiler> */
7942 var204 = self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_tables].val; /* _attr_tables on <self:SeparateErasureCompiler> */
7943 if (unlikely(var204 == NULL)) {
7944 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_tables");
7945 PRINT_ERROR(" (%s:%d)\n", "src/separate_compiler.nit", 793);
7946 show_backtrace(1);
7947 }
7948 var202 = var204;
7949 RET_LABEL203:(void)0;
7950 }
7951 }
7952 {
7953 var205 = ((val* (*)(val*))(var202->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var202) /* iterator on <var202:Map[MClass, Array[nullable MPropDef]]>*/;
7954 }
7955 for(;;) {
7956 {
7957 var206 = ((short int (*)(val*))(var205->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var205) /* is_ok on <var205:MapIterator[Object, nullable Object]>*/;
7958 }
7959 if(!var206) break;
7960 {
7961 var207 = ((val* (*)(val*))(var205->class->vft[COLOR_abstract_collection__MapIterator__key]))(var205) /* key on <var205:MapIterator[Object, nullable Object]>*/;
7962 }
7963 var_t208 = var207;
7964 {
7965 var209 = ((val* (*)(val*))(var205->class->vft[COLOR_abstract_collection__MapIterator__item]))(var205) /* item on <var205:MapIterator[Object, nullable Object]>*/;
7966 }
7967 var_table210 = var209;
7968 {
7969 var211 = array__AbstractArrayRead__length(var_table210);
7970 }
7971 {
7972 { /* Inline kernel#Int#+ (var_total,var211) on <var_total:Int> */
7973 /* Covariant cast for argument 0 (i) <var211:Int> isa OTHER */
7974 /* <var211:Int> isa OTHER */
7975 var214 = 1; /* easy <var211:Int> isa OTHER*/
7976 if (unlikely(!var214)) {
7977 var_class_name217 = type_kernel__Int.name;
7978 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name217);
7979 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
7980 show_backtrace(1);
7981 }
7982 var218 = var_total + var211;
7983 var212 = var218;
7984 goto RET_LABEL213;
7985 RET_LABEL213:(void)0;
7986 }
7987 }
7988 var_total = var212;
7989 {
7990 var219 = array__AbstractArrayRead__iterator(var_table210);
7991 }
7992 for(;;) {
7993 {
7994 var220 = array__ArrayIterator__is_ok(var219);
7995 }
7996 if(!var220) break;
7997 {
7998 var221 = array__ArrayIterator__item(var219);
7999 }
8000 var_e222 = var221;
8001 var223 = NULL;
8002 if (var_e222 == NULL) {
8003 var224 = 1; /* is null */
8004 } else {
8005 var224 = 0; /* arg is null but recv is not */
8006 }
8007 if (0) {
8008 { /* Inline kernel#Object#== (var_e222,var223) on <var_e222:nullable MPropDef> */
8009 var_other = var223;
8010 {
8011 { /* Inline kernel#Object#is_same_instance (var_e222,var_other) on <var_e222:nullable MPropDef(MPropDef)> */
8012 var229 = var_e222 == var_other;
8013 var227 = var229;
8014 goto RET_LABEL228;
8015 RET_LABEL228:(void)0;
8016 }
8017 }
8018 var225 = var227;
8019 goto RET_LABEL226;
8020 RET_LABEL226:(void)0;
8021 }
8022 var224 = var225;
8023 }
8024 if (var224){
8025 var230 = 1;
8026 {
8027 { /* Inline kernel#Int#+ (var_holes,var230) on <var_holes:Int> */
8028 /* Covariant cast for argument 0 (i) <var230:Int> isa OTHER */
8029 /* <var230:Int> isa OTHER */
8030 var233 = 1; /* easy <var230:Int> isa OTHER*/
8031 if (unlikely(!var233)) {
8032 var_class_name236 = type_kernel__Int.name;
8033 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name236);
8034 PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
8035 show_backtrace(1);
8036 }
8037 var237 = var_holes + var230;
8038 var231 = var237;
8039 goto RET_LABEL232;
8040 RET_LABEL232:(void)0;
8041 }
8042 }
8043 var_holes = var231;
8044 } else {
8045 }
8046 CONTINUE_label238: (void)0;
8047 {
8048 array__ArrayIterator__next(var219); /* Direct call array#ArrayIterator#next on <var219:ArrayIterator[nullable Object]>*/
8049 }
8050 }
8051 BREAK_label238: (void)0;
8052 CONTINUE_label239: (void)0;
8053 {
8054 ((void (*)(val*))(var205->class->vft[COLOR_abstract_collection__MapIterator__next]))(var205) /* next on <var205:MapIterator[Object, nullable Object]>*/;
8055 }
8056 }
8057 BREAK_label239: (void)0;
8058 if (varonce240) {
8059 var241 = varonce240;
8060 } else {
8061 var242 = "\11";
8062 var243 = 1;
8063 var244 = string__NativeString__to_s_with_length(var242, var243);
8064 var241 = var244;
8065 varonce240 = var241;
8066 }
8067 if (varonce245) {
8068 var246 = varonce245;
8069 } else {
8070 var247 = "\11";
8071 var248 = 1;
8072 var249 = string__NativeString__to_s_with_length(var247, var248);
8073 var246 = var249;
8074 varonce245 = var246;
8075 }
8076 var250 = NEW_array__Array(&type_array__Arraykernel__Object);
8077 { /* var250 = array_instance Array[Object] */
8078 var251 = 4;
8079 var252 = NEW_array__NativeArray(var251, &type_array__NativeArraykernel__Object);
8080 ((struct instance_array__NativeArray*)var252)->values[0] = (val*) var241;
8081 var253 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
8082 ((struct instance_array__NativeArray*)var252)->values[1] = (val*) var253;
8083 ((struct instance_array__NativeArray*)var252)->values[2] = (val*) var246;
8084 var254 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
8085 ((struct instance_array__NativeArray*)var252)->values[3] = (val*) var254;
8086 {
8087 ((void (*)(val*, val*, long))(var250->class->vft[COLOR_array__Array__with_native]))(var250, var252, var251) /* with_native on <var250:Array[Object]>*/;
8088 }
8089 }
8090 {
8091 var255 = ((val* (*)(val*))(var250->class->vft[COLOR_string__Object__to_s]))(var250) /* to_s on <var250:Array[Object]>*/;
8092 }
8093 {
8094 file__Object__print(self, var255); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
8095 }
8096 RET_LABEL:;
8097 }
8098 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: Object) */
8099 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
8100 separate_erasure_compiler__SeparateErasureCompiler__display_sizes(self); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#display_sizes on <self:Object(SeparateErasureCompiler)>*/
8101 RET_LABEL:;
8102 }
8103 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: SeparateErasureCompilerVisitor, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
8104 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
8105 val* var /* : nullable RuntimeVariable */;
8106 val* var_callsite /* var callsite: CallSite */;
8107 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
8108 val* var1 /* : nullable RuntimeVariable */;
8109 val* var_res /* var res: nullable RuntimeVariable */;
8110 short int var2 /* : Bool */;
8111 short int var3 /* : Bool */;
8112 short int var5 /* : Bool */;
8113 short int var_ /* var : Bool */;
8114 val* var6 /* : AbstractCompiler */;
8115 val* var8 /* : AbstractCompiler */;
8116 short int var9 /* : Bool */;
8117 int cltype;
8118 int idtype;
8119 const char* var_class_name;
8120 val* var10 /* : ModelBuilder */;
8121 val* var12 /* : ModelBuilder */;
8122 val* var13 /* : ToolContext */;
8123 val* var15 /* : ToolContext */;
8124 val* var16 /* : OptionBool */;
8125 val* var18 /* : OptionBool */;
8126 val* var19 /* : nullable Object */;
8127 val* var21 /* : nullable Object */;
8128 short int var22 /* : Bool */;
8129 short int var23 /* : Bool */;
8130 val* var24 /* : null */;
8131 short int var25 /* : Bool */;
8132 short int var26 /* : Bool */;
8133 val* var_other /* var other: nullable Object */;
8134 short int var28 /* : Bool */;
8135 short int var29 /* : Bool */;
8136 short int var30 /* : Bool */;
8137 val* var31 /* : MSignature */;
8138 val* var33 /* : MSignature */;
8139 val* var34 /* : nullable MType */;
8140 val* var36 /* : nullable MType */;
8141 val* var_mtype /* var mtype: nullable MType */;
8142 val* var37 /* : null */;
8143 short int var38 /* : Bool */;
8144 short int var39 /* : Bool */;
8145 short int var41 /* : Bool */;
8146 short int var42 /* : Bool */;
8147 short int var43 /* : Bool */;
8148 static val* varonce;
8149 val* var44 /* : String */;
8150 char* var45 /* : NativeString */;
8151 long var46 /* : Int */;
8152 val* var47 /* : FlatString */;
8153 static val* varonce48;
8154 val* var49 /* : String */;
8155 char* var50 /* : NativeString */;
8156 long var51 /* : Int */;
8157 val* var52 /* : FlatString */;
8158 static val* varonce53;
8159 val* var54 /* : String */;
8160 char* var55 /* : NativeString */;
8161 long var56 /* : Int */;
8162 val* var57 /* : FlatString */;
8163 val* var58 /* : Array[Object] */;
8164 long var59 /* : Int */;
8165 val* var60 /* : NativeArray[Object] */;
8166 val* var61 /* : String */;
8167 static val* varonce62;
8168 val* var63 /* : String */;
8169 char* var64 /* : NativeString */;
8170 long var65 /* : Int */;
8171 val* var66 /* : FlatString */;
8172 val* var67 /* : RuntimeVariable */;
8173 val* var_cond /* var cond: RuntimeVariable */;
8174 static val* varonce68;
8175 val* var69 /* : String */;
8176 char* var70 /* : NativeString */;
8177 long var71 /* : Int */;
8178 val* var72 /* : FlatString */;
8179 static val* varonce73;
8180 val* var74 /* : String */;
8181 char* var75 /* : NativeString */;
8182 long var76 /* : Int */;
8183 val* var77 /* : FlatString */;
8184 val* var78 /* : Array[Object] */;
8185 long var79 /* : Int */;
8186 val* var80 /* : NativeArray[Object] */;
8187 val* var81 /* : String */;
8188 static val* varonce82;
8189 val* var83 /* : String */;
8190 char* var84 /* : NativeString */;
8191 long var85 /* : Int */;
8192 val* var86 /* : FlatString */;
8193 static val* varonce87;
8194 val* var88 /* : String */;
8195 char* var89 /* : NativeString */;
8196 long var90 /* : Int */;
8197 val* var91 /* : FlatString */;
8198 var_callsite = p0;
8199 var_arguments = p1;
8200 {
8201 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite]))(self, p0, p1) /* compile_callsite on <self:SeparateErasureCompilerVisitor>*/;
8202 }
8203 var_res = var1;
8204 {
8205 { /* Inline typing#CallSite#erasure_cast (var_callsite) on <var_callsite:CallSite> */
8206 var5 = var_callsite->attrs[COLOR_typing__CallSite___erasure_cast].s; /* _erasure_cast on <var_callsite:CallSite> */
8207 var3 = var5;
8208 RET_LABEL4:(void)0;
8209 }
8210 }
8211 var_ = var3;
8212 if (var3){
8213 {
8214 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
8215 var8 = self->attrs[COLOR_abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
8216 if (unlikely(var8 == NULL)) {
8217 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
8218 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 984);
8219 show_backtrace(1);
8220 }
8221 var6 = var8;
8222 RET_LABEL7:(void)0;
8223 }
8224 }
8225 /* <var6:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
8226 cltype = type_separate_erasure_compiler__SeparateErasureCompiler.color;
8227 idtype = type_separate_erasure_compiler__SeparateErasureCompiler.id;
8228 if(cltype >= var6->type->table_size) {
8229 var9 = 0;
8230 } else {
8231 var9 = var6->type->type_table[cltype] == idtype;
8232 }
8233 if (unlikely(!var9)) {
8234 var_class_name = var6 == NULL ? "null" : var6->type->name;
8235 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name);
8236 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 448);
8237 show_backtrace(1);
8238 }
8239 {
8240 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (var6) on <var6:SeparateCompiler(SeparateErasureCompiler)> */
8241 var12 = var6->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <var6:SeparateCompiler(SeparateErasureCompiler)> */
8242 if (unlikely(var12 == NULL)) {
8243 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
8244 PRINT_ERROR(" (%s:%d)\n", "src/abstract_compiler.nit", 443);
8245 show_backtrace(1);
8246 }
8247 var10 = var12;
8248 RET_LABEL11:(void)0;
8249 }
8250 }
8251 {
8252 { /* Inline modelbuilder#ModelBuilder#toolcontext (var10) on <var10:ModelBuilder> */
8253 var15 = var10->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var10:ModelBuilder> */
8254 if (unlikely(var15 == NULL)) {
8255 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
8256 PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
8257 show_backtrace(1);
8258 }
8259 var13 = var15;
8260 RET_LABEL14:(void)0;
8261 }
8262 }
8263 {
8264 { /* Inline separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast (var13) on <var13:ToolContext> */
8265 var18 = var13->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <var13:ToolContext> */
8266 if (unlikely(var18 == NULL)) {
8267 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
8268 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 26);
8269 show_backtrace(1);
8270 }
8271 var16 = var18;
8272 RET_LABEL17:(void)0;
8273 }
8274 }
8275 {
8276 { /* Inline opts#Option#value (var16) on <var16:OptionBool> */
8277 var21 = var16->attrs[COLOR_opts__Option___value].val; /* _value on <var16:OptionBool> */
8278 var19 = var21;
8279 RET_LABEL20:(void)0;
8280 }
8281 }
8282 var22 = ((struct instance_kernel__Bool*)var19)->value; /* autounbox from nullable Object to Bool */;
8283 var23 = !var22;
8284 var2 = var23;
8285 } else {
8286 var2 = var_;
8287 }
8288 if (var2){
8289 var24 = NULL;
8290 if (var_res == NULL) {
8291 var25 = 0; /* is null */
8292 } else {
8293 var25 = 1; /* arg is null and recv is not */
8294 }
8295 if (0) {
8296 { /* Inline kernel#Object#!= (var_res,var24) on <var_res:nullable RuntimeVariable> */
8297 var_other = var24;
8298 {
8299 var29 = ((short int (*)(val*, val*))(var_res->class->vft[COLOR_kernel__Object___61d_61d]))(var_res, var_other) /* == on <var_res:nullable RuntimeVariable(RuntimeVariable)>*/;
8300 var28 = var29;
8301 }
8302 var30 = !var28;
8303 var26 = var30;
8304 goto RET_LABEL27;
8305 RET_LABEL27:(void)0;
8306 }
8307 var25 = var26;
8308 }
8309 if (unlikely(!var25)) {
8310 PRINT_ERROR("Runtime error: %s", "Assert failed");
8311 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 449);
8312 show_backtrace(1);
8313 }
8314 {
8315 { /* Inline typing#CallSite#msignature (var_callsite) on <var_callsite:CallSite> */
8316 var33 = var_callsite->attrs[COLOR_typing__CallSite___msignature].val; /* _msignature on <var_callsite:CallSite> */
8317 if (unlikely(var33 == NULL)) {
8318 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
8319 PRINT_ERROR(" (%s:%d)\n", "src/typing.nit", 429);
8320 show_backtrace(1);
8321 }
8322 var31 = var33;
8323 RET_LABEL32:(void)0;
8324 }
8325 }
8326 {
8327 { /* Inline model#MSignature#return_mtype (var31) on <var31:MSignature> */
8328 var36 = var31->attrs[COLOR_model__MSignature___return_mtype].val; /* _return_mtype on <var31:MSignature> */
8329 var34 = var36;
8330 RET_LABEL35:(void)0;
8331 }
8332 }
8333 var_mtype = var34;
8334 var37 = NULL;
8335 if (var_mtype == NULL) {
8336 var38 = 0; /* is null */
8337 } else {
8338 var38 = 1; /* arg is null and recv is not */
8339 }
8340 if (0) {
8341 { /* Inline kernel#Object#!= (var_mtype,var37) on <var_mtype:nullable MType> */
8342 var_other = var37;
8343 {
8344 var42 = ((short int (*)(val*, val*))(var_mtype->class->vft[COLOR_kernel__Object___61d_61d]))(var_mtype, var_other) /* == on <var_mtype:nullable MType(MType)>*/;
8345 var41 = var42;
8346 }
8347 var43 = !var41;
8348 var39 = var43;
8349 goto RET_LABEL40;
8350 RET_LABEL40:(void)0;
8351 }
8352 var38 = var39;
8353 }
8354 if (unlikely(!var38)) {
8355 PRINT_ERROR("Runtime error: %s", "Assert failed");
8356 PRINT_ERROR(" (%s:%d)\n", "src/separate_erasure_compiler.nit", 451);
8357 show_backtrace(1);
8358 }
8359 if (varonce) {
8360 var44 = varonce;
8361 } else {
8362 var45 = "/* Erasure cast for return ";
8363 var46 = 27;
8364 var47 = string__NativeString__to_s_with_length(var45, var46);
8365 var44 = var47;
8366 varonce = var44;
8367 }
8368 if (varonce48) {
8369 var49 = varonce48;
8370 } else {
8371 var50 = " isa ";
8372 var51 = 5;
8373 var52 = string__NativeString__to_s_with_length(var50, var51);
8374 var49 = var52;
8375 varonce48 = var49;
8376 }
8377 if (varonce53) {
8378 var54 = varonce53;
8379 } else {
8380 var55 = " */";
8381 var56 = 3;
8382 var57 = string__NativeString__to_s_with_length(var55, var56);
8383 var54 = var57;
8384 varonce53 = var54;
8385 }
8386 var58 = NEW_array__Array(&type_array__Arraykernel__Object);
8387 { /* var58 = array_instance Array[Object] */
8388 var59 = 5;
8389 var60 = NEW_array__NativeArray(var59, &type_array__NativeArraykernel__Object);
8390 ((struct instance_array__NativeArray*)var60)->values[0] = (val*) var44;
8391 ((struct instance_array__NativeArray*)var60)->values[1] = (val*) var_res;
8392 ((struct instance_array__NativeArray*)var60)->values[2] = (val*) var49;
8393 ((struct instance_array__NativeArray*)var60)->values[3] = (val*) var_mtype;
8394 ((struct instance_array__NativeArray*)var60)->values[4] = (val*) var54;
8395 {
8396 ((void (*)(val*, val*, long))(var58->class->vft[COLOR_array__Array__with_native]))(var58, var60, var59) /* with_native on <var58:Array[Object]>*/;
8397 }
8398 }
8399 {
8400 var61 = ((val* (*)(val*))(var58->class->vft[COLOR_string__Object__to_s]))(var58) /* to_s on <var58:Array[Object]>*/;
8401 }
8402 {
8403 abstract_compiler__AbstractCompilerVisitor__add(self, var61); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
8404 }
8405 if (varonce62) {
8406 var63 = varonce62;
8407 } else {
8408 var64 = "erasure";
8409 var65 = 7;
8410 var66 = string__NativeString__to_s_with_length(var64, var65);
8411 var63 = var66;
8412 varonce62 = var63;
8413 }
8414 {
8415 var67 = separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(self, var_res, var_mtype, var63);
8416 }
8417 var_cond = var67;
8418 if (varonce68) {
8419 var69 = varonce68;
8420 } else {
8421 var70 = "if (!";
8422 var71 = 5;
8423 var72 = string__NativeString__to_s_with_length(var70, var71);
8424 var69 = var72;
8425 varonce68 = var69;
8426 }
8427 if (varonce73) {
8428 var74 = varonce73;
8429 } else {
8430 var75 = ") {";
8431 var76 = 3;
8432 var77 = string__NativeString__to_s_with_length(var75, var76);
8433 var74 = var77;
8434 varonce73 = var74;
8435 }
8436 var78 = NEW_array__Array(&type_array__Arraykernel__Object);
8437 { /* var78 = array_instance Array[Object] */
8438 var79 = 3;
8439 var80 = NEW_array__NativeArray(var79, &type_array__NativeArraykernel__Object);
8440 ((struct instance_array__NativeArray*)var80)->values[0] = (val*) var69;
8441 ((struct instance_array__NativeArray*)var80)->values[1] = (val*) var_cond;
8442 ((struct instance_array__NativeArray*)var80)->values[2] = (val*) var74;
8443 {
8444 ((void (*)(val*, val*, long))(var78->class->vft[COLOR_array__Array__with_native]))(var78, var80, var79) /* with_native on <var78:Array[Object]>*/;
8445 }
8446 }
8447 {
8448 var81 = ((val* (*)(val*))(var78->class->vft[COLOR_string__Object__to_s]))(var78) /* to_s on <var78:Array[Object]>*/;
8449 }
8450 {
8451 abstract_compiler__AbstractCompilerVisitor__add(self, var81); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
8452 }
8453 if (varonce82) {
8454 var83 = varonce82;
8455 } else {
8456 var84 = "Cast failed";
8457 var85 = 11;
8458 var86 = string__NativeString__to_s_with_length(var84, var85);
8459 var83 = var86;
8460 varonce82 = var83;
8461 }
8462 {
8463 abstract_compiler__AbstractCompilerVisitor__add_abort(self, var83); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <self:SeparateErasureCompilerVisitor>*/
8464 }
8465 if (varonce87) {
8466 var88 = varonce87;
8467 } else {
8468 var89 = "}";
8469 var90 = 1;
8470 var91 = string__NativeString__to_s_with_length(var89, var90);
8471 var88 = var91;
8472 varonce87 = var88;
8473 }
8474 {
8475 abstract_compiler__AbstractCompilerVisitor__add(self, var88); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
8476 }
8477 } else {
8478 }
8479 var = var_res;
8480 goto RET_LABEL;
8481 RET_LABEL:;
8482 return var;
8483 }
8484 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: Object, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
8485 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
8486 val* var /* : nullable RuntimeVariable */;
8487 val* var1 /* : nullable RuntimeVariable */;
8488 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(self, p0, p1);
8489 var = var1;
8490 RET_LABEL:;
8491 return var;
8492 }
8493 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: SeparateErasureCompilerVisitor, MClassType): RuntimeVariable */
8494 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
8495 val* var /* : RuntimeVariable */;
8496 val* var_mtype /* var mtype: MClassType */;
8497 static val* varonce;
8498 val* var1 /* : String */;
8499 char* var2 /* : NativeString */;
8500 long var3 /* : Int */;
8501 val* var4 /* : FlatString */;
8502 val* var5 /* : MClass */;
8503 val* var7 /* : MClass */;
8504 val* var8 /* : String */;
8505 val* var9 /* : Array[Object] */;
8506 long var10 /* : Int */;
8507 val* var11 /* : NativeArray[Object] */;
8508 val* var12 /* : String */;
8509 static val* varonce13;
8510 val* var14 /* : String */;
8511 char* var15 /* : NativeString */;
8512 long var16 /* : Int */;
8513 val* var17 /* : FlatString */;
8514 val* var18 /* : MClass */;
8515 val* var20 /* : MClass */;
8516 val* var21 /* : String */;
8517 static val* varonce22;
8518 val* var23 /* : String */;
8519 char* var24 /* : NativeString */;
8520 long var25 /* : Int */;
8521 val* var26 /* : FlatString */;
8522 val* var27 /* : Array[Object] */;
8523 long var28 /* : Int */;
8524 val* var29 /* : NativeArray[Object] */;
8525 val* var30 /* : String */;
8526 val* var31 /* : RuntimeVariable */;
8527 var_mtype = p0;
8528 if (varonce) {
8529 var1 = varonce;
8530 } else {
8531 var2 = "NEW_";
8532 var3 = 4;
8533 var4 = string__NativeString__to_s_with_length(var2, var3);
8534 var1 = var4;
8535 varonce = var1;
8536 }
8537 {
8538 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
8539 var7 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
8540 if (unlikely(var7 == NULL)) {
8541 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
8542 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 969);
8543 show_backtrace(1);
8544 }
8545 var5 = var7;
8546 RET_LABEL6:(void)0;
8547 }
8548 }
8549 {
8550 var8 = abstract_compiler__MClass__c_name(var5);
8551 }
8552 var9 = NEW_array__Array(&type_array__Arraykernel__Object);
8553 { /* var9 = array_instance Array[Object] */
8554 var10 = 2;
8555 var11 = NEW_array__NativeArray(var10, &type_array__NativeArraykernel__Object);
8556 ((struct instance_array__NativeArray*)var11)->values[0] = (val*) var1;
8557 ((struct instance_array__NativeArray*)var11)->values[1] = (val*) var8;
8558 {
8559 ((void (*)(val*, val*, long))(var9->class->vft[COLOR_array__Array__with_native]))(var9, var11, var10) /* with_native on <var9:Array[Object]>*/;
8560 }
8561 }
8562 {
8563 var12 = ((val* (*)(val*))(var9->class->vft[COLOR_string__Object__to_s]))(var9) /* to_s on <var9:Array[Object]>*/;
8564 }
8565 {
8566 abstract_compiler__AbstractCompilerVisitor__require_declaration(self, var12); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
8567 }
8568 if (varonce13) {
8569 var14 = varonce13;
8570 } else {
8571 var15 = "NEW_";
8572 var16 = 4;
8573 var17 = string__NativeString__to_s_with_length(var15, var16);
8574 var14 = var17;
8575 varonce13 = var14;
8576 }
8577 {
8578 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
8579 var20 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
8580 if (unlikely(var20 == NULL)) {
8581 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
8582 PRINT_ERROR(" (%s:%d)\n", "src/model/model.nit", 969);
8583 show_backtrace(1);
8584 }
8585 var18 = var20;
8586 RET_LABEL19:(void)0;
8587 }
8588 }
8589 {
8590 var21 = abstract_compiler__MClass__c_name(var18);
8591 }
8592 if (varonce22) {
8593 var23 = varonce22;
8594 } else {
8595 var24 = "()";
8596 var25 = 2;
8597 var26 = string__NativeString__to_s_with_length(var24, var25);
8598 var23 = var26;
8599 varonce22 = var23;
8600 }
8601 var27 = NEW_array__Array(&type_array__Arraykernel__Object);
8602 { /* var27 = array_instance Array[Object] */
8603 var28 = 3;
8604 var29 = NEW_array__NativeArray(var28, &type_array__NativeArraykernel__Object);
8605 ((struct instance_array__NativeArray*)var29)->values[0] = (val*) var14;
8606 ((struct instance_array__NativeArray*)var29)->values[1] = (val*) var21;
8607 ((struct instance_array__NativeArray*)var29)->values[2] = (val*) var23;
8608 {
8609 ((void (*)(val*, val*, long))(var27->class->vft[COLOR_array__Array__with_native]))(var27, var29, var28) /* with_native on <var27:Array[Object]>*/;
8610 }
8611 }
8612 {
8613 var30 = ((val* (*)(val*))(var27->class->vft[COLOR_string__Object__to_s]))(var27) /* to_s on <var27:Array[Object]>*/;
8614 }
8615 {
8616 var31 = abstract_compiler__AbstractCompilerVisitor__new_expr(self, var30, var_mtype);
8617 }
8618 var = var31;
8619 goto RET_LABEL;
8620 RET_LABEL:;
8621 return var;
8622 }
8623 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
8624 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
8625 val* var /* : RuntimeVariable */;
8626 val* var1 /* : RuntimeVariable */;
8627 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(self, p0);
8628 var = var1;
8629 RET_LABEL:;
8630 return var;
8631 }