update NOTICE
[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", "compiler/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", "compiler/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", "compiler/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", "compiler/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", "compiler/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", "compiler/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", "toolcontext.nit", 231);
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", "compiler/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", "compiler/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", "compiler/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#ToolContext#process_options for (self: ToolContext, Sequence[String]) */
187 void separate_erasure_compiler__ToolContext__process_options(val* self, val* p0) {
188 val* var_args /* var args: Sequence[String] */;
189 val* var /* : OptionBool */;
190 val* var2 /* : OptionBool */;
191 val* var3 /* : nullable Object */;
192 val* var5 /* : nullable Object */;
193 short int var6 /* : Bool */;
194 val* var7 /* : OptionBool */;
195 val* var9 /* : OptionBool */;
196 short int var10 /* : Bool */;
197 short int var12 /* : Bool */;
198 int cltype;
199 int idtype;
200 const struct type* type_struct;
201 const char* var_class_name;
202 val* var13 /* : nullable Object */;
203 var_args = p0;
204 {
205 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__ToolContext__process_options]))(self, p0) /* process_options on <self:ToolContext>*/;
206 }
207 {
208 { /* Inline abstract_compiler#ToolContext#opt_no_check_all (self) on <self:ToolContext> */
209 var2 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_no_check_all].val; /* _opt_no_check_all on <self:ToolContext> */
210 if (unlikely(var2 == NULL)) {
211 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_all");
212 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 59);
213 show_backtrace(1);
214 }
215 var = var2;
216 RET_LABEL1:(void)0;
217 }
218 }
219 {
220 { /* Inline opts#Option#value (var) on <var:OptionBool> */
221 var5 = var->attrs[COLOR_opts__Option___value].val; /* _value on <var:OptionBool> */
222 var3 = var5;
223 RET_LABEL4:(void)0;
224 }
225 }
226 var6 = ((struct instance_kernel__Bool*)var3)->value; /* autounbox from nullable Object to Bool */;
227 if (var6){
228 {
229 { /* Inline separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast (self) on <self:ToolContext> */
230 var9 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <self:ToolContext> */
231 if (unlikely(var9 == NULL)) {
232 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
233 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 26);
234 show_backtrace(1);
235 }
236 var7 = var9;
237 RET_LABEL8:(void)0;
238 }
239 }
240 var10 = 1;
241 {
242 { /* Inline opts#Option#value= (var7,var10) on <var7:OptionBool> */
243 /* Covariant cast for argument 0 (value) <var10:Bool> isa VALUE */
244 /* <var10:Bool> isa VALUE */
245 type_struct = var7->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
246 cltype = type_struct->color;
247 idtype = type_struct->id;
248 if(cltype >= (&type_kernel__Bool)->table_size) {
249 var12 = 0;
250 } else {
251 var12 = (&type_kernel__Bool)->type_table[cltype] == idtype;
252 }
253 if (unlikely(!var12)) {
254 var_class_name = type_kernel__Bool.name;
255 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name);
256 PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
257 show_backtrace(1);
258 }
259 var13 = BOX_kernel__Bool(var10); /* autobox from Bool to nullable Object */
260 var7->attrs[COLOR_opts__Option___value].val = var13; /* _value on <var7:OptionBool> */
261 RET_LABEL11:(void)0;
262 }
263 }
264 } else {
265 }
266 RET_LABEL:;
267 }
268 /* method separate_erasure_compiler#ToolContext#process_options for (self: Object, Sequence[String]) */
269 void VIRTUAL_separate_erasure_compiler__ToolContext__process_options(val* self, val* p0) {
270 separate_erasure_compiler__ToolContext__process_options(self, p0); /* Direct call separate_erasure_compiler#ToolContext#process_options on <self:Object(ToolContext)>*/
271 RET_LABEL:;
272 }
273 /* method separate_erasure_compiler#ErasureCompilerPhase#process_mainmodule for (self: ErasureCompilerPhase, MModule, SequenceRead[MModule]) */
274 void separate_erasure_compiler__ErasureCompilerPhase__process_mainmodule(val* self, val* p0, val* p1) {
275 val* var_mainmodule /* var mainmodule: MModule */;
276 val* var_given_mmodules /* var given_mmodules: SequenceRead[MModule] */;
277 val* var /* : ToolContext */;
278 val* var2 /* : ToolContext */;
279 val* var3 /* : OptionBool */;
280 val* var5 /* : OptionBool */;
281 val* var6 /* : nullable Object */;
282 val* var8 /* : nullable Object */;
283 short int var9 /* : Bool */;
284 short int var10 /* : Bool */;
285 val* var11 /* : ToolContext */;
286 val* var13 /* : ToolContext */;
287 val* var14 /* : ModelBuilder */;
288 val* var_modelbuilder /* var modelbuilder: ModelBuilder */;
289 val* var15 /* : null */;
290 val* var_analysis /* var analysis: nullable Object */;
291 val* var16 /* : ToolContext */;
292 val* var18 /* : ToolContext */;
293 val* var19 /* : OptionBool */;
294 val* var21 /* : OptionBool */;
295 val* var22 /* : nullable Object */;
296 val* var24 /* : nullable Object */;
297 short int var25 /* : Bool */;
298 val* var26 /* : RapidTypeAnalysis */;
299 var_mainmodule = p0;
300 var_given_mmodules = p1;
301 {
302 { /* Inline phase#Phase#toolcontext (self) on <self:ErasureCompilerPhase> */
303 var2 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:ErasureCompilerPhase> */
304 if (unlikely(var2 == NULL)) {
305 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
306 PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
307 show_backtrace(1);
308 }
309 var = var2;
310 RET_LABEL1:(void)0;
311 }
312 }
313 {
314 { /* Inline separate_erasure_compiler#ToolContext#opt_erasure (var) on <var:ToolContext> */
315 var5 = var->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_erasure].val; /* _opt_erasure on <var:ToolContext> */
316 if (unlikely(var5 == NULL)) {
317 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_erasure");
318 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 22);
319 show_backtrace(1);
320 }
321 var3 = var5;
322 RET_LABEL4:(void)0;
323 }
324 }
325 {
326 { /* Inline opts#Option#value (var3) on <var3:OptionBool> */
327 var8 = var3->attrs[COLOR_opts__Option___value].val; /* _value on <var3:OptionBool> */
328 var6 = var8;
329 RET_LABEL7:(void)0;
330 }
331 }
332 var9 = ((struct instance_kernel__Bool*)var6)->value; /* autounbox from nullable Object to Bool */;
333 var10 = !var9;
334 if (var10){
335 goto RET_LABEL;
336 } else {
337 }
338 {
339 { /* Inline phase#Phase#toolcontext (self) on <self:ErasureCompilerPhase> */
340 var13 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:ErasureCompilerPhase> */
341 if (unlikely(var13 == NULL)) {
342 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
343 PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
344 show_backtrace(1);
345 }
346 var11 = var13;
347 RET_LABEL12:(void)0;
348 }
349 }
350 {
351 var14 = modelbuilder__ToolContext__modelbuilder(var11);
352 }
353 var_modelbuilder = var14;
354 var15 = NULL;
355 var_analysis = var15;
356 {
357 { /* Inline phase#Phase#toolcontext (self) on <self:ErasureCompilerPhase> */
358 var18 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:ErasureCompilerPhase> */
359 if (unlikely(var18 == NULL)) {
360 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
361 PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
362 show_backtrace(1);
363 }
364 var16 = var18;
365 RET_LABEL17:(void)0;
366 }
367 }
368 {
369 { /* Inline separate_erasure_compiler#ToolContext#opt_rta (var16) on <var16:ToolContext> */
370 var21 = var16->attrs[COLOR_separate_erasure_compiler__ToolContext___opt_rta].val; /* _opt_rta on <var16:ToolContext> */
371 if (unlikely(var21 == NULL)) {
372 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_rta");
373 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 24);
374 show_backtrace(1);
375 }
376 var19 = var21;
377 RET_LABEL20:(void)0;
378 }
379 }
380 {
381 { /* Inline opts#Option#value (var19) on <var19:OptionBool> */
382 var24 = var19->attrs[COLOR_opts__Option___value].val; /* _value on <var19:OptionBool> */
383 var22 = var24;
384 RET_LABEL23:(void)0;
385 }
386 }
387 var25 = ((struct instance_kernel__Bool*)var22)->value; /* autounbox from nullable Object to Bool */;
388 if (var25){
389 {
390 var26 = rapid_type_analysis__ModelBuilder__do_rapid_type_analysis(var_modelbuilder, var_mainmodule);
391 }
392 var_analysis = var26;
393 } else {
394 }
395 {
396 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>*/
397 }
398 RET_LABEL:;
399 }
400 /* method separate_erasure_compiler#ErasureCompilerPhase#process_mainmodule for (self: Object, MModule, SequenceRead[MModule]) */
401 void VIRTUAL_separate_erasure_compiler__ErasureCompilerPhase__process_mainmodule(val* self, val* p0, val* p1) {
402 separate_erasure_compiler__ErasureCompilerPhase__process_mainmodule(self, p0, p1); /* Direct call separate_erasure_compiler#ErasureCompilerPhase#process_mainmodule on <self:Object(ErasureCompilerPhase)>*/
403 RET_LABEL:;
404 }
405 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: ModelBuilder, MModule, nullable RapidTypeAnalysis) */
406 void separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
407 val* var_mainmodule /* var mainmodule: MModule */;
408 val* var_runtime_type_analysis /* var runtime_type_analysis: nullable RapidTypeAnalysis */;
409 long var /* : Int */;
410 long var2 /* : Int for extern */;
411 long var_time0 /* var time0: Int */;
412 val* var3 /* : ToolContext */;
413 val* var5 /* : ToolContext */;
414 static val* varonce;
415 val* var6 /* : String */;
416 char* var7 /* : NativeString */;
417 long var8 /* : Int */;
418 val* var9 /* : FlatString */;
419 long var10 /* : Int */;
420 val* var11 /* : SeparateErasureCompiler */;
421 val* var_compiler /* var compiler: SeparateErasureCompiler */;
422 val* var12 /* : ToolContext */;
423 val* var14 /* : ToolContext */;
424 static val* varonce15;
425 val* var16 /* : String */;
426 char* var17 /* : NativeString */;
427 long var18 /* : Int */;
428 val* var19 /* : FlatString */;
429 long var20 /* : Int */;
430 val* var21 /* : String */;
431 val* var23 /* : String */;
432 static val* varonce24;
433 val* var25 /* : String */;
434 char* var26 /* : NativeString */;
435 long var27 /* : Int */;
436 val* var28 /* : FlatString */;
437 val* var29 /* : Array[Object] */;
438 long var30 /* : Int */;
439 val* var31 /* : NativeArray[Object] */;
440 val* var32 /* : String */;
441 val* var33 /* : CodeFile */;
442 val* var34 /* : POSetElement[MModule] */;
443 val* var36 /* : POSetElement[MModule] */;
444 val* var37 /* : Collection[Object] */;
445 val* var_ /* var : Collection[MModule] */;
446 val* var38 /* : Iterator[nullable Object] */;
447 val* var_39 /* var : Iterator[MModule] */;
448 short int var40 /* : Bool */;
449 val* var41 /* : nullable Object */;
450 val* var_m /* var m: MModule */;
451 val* var42 /* : Array[MClass] */;
452 val* var44 /* : Array[MClass] */;
453 val* var_45 /* var : Array[MClass] */;
454 val* var46 /* : ArrayIterator[nullable Object] */;
455 val* var_47 /* var : ArrayIterator[MClass] */;
456 short int var48 /* : Bool */;
457 val* var49 /* : nullable Object */;
458 val* var_mclass /* var mclass: MClass */;
459 val* var53 /* : Map[MVirtualTypeProp, Int] */;
460 val* var55 /* : Map[MVirtualTypeProp, Int] */;
461 val* var56 /* : String */;
462 val* var58 /* : String */;
463 static val* varonce59;
464 val* var60 /* : String */;
465 char* var61 /* : NativeString */;
466 long var62 /* : Int */;
467 val* var63 /* : FlatString */;
468 val* var64 /* : Array[Object] */;
469 long var65 /* : Int */;
470 val* var66 /* : NativeArray[Object] */;
471 val* var67 /* : String */;
472 val* var68 /* : CodeFile */;
473 val* var69 /* : POSetElement[MModule] */;
474 val* var71 /* : POSetElement[MModule] */;
475 val* var72 /* : Collection[Object] */;
476 val* var_73 /* var : Collection[MModule] */;
477 val* var74 /* : Iterator[nullable Object] */;
478 val* var_75 /* var : Iterator[MModule] */;
479 short int var76 /* : Bool */;
480 val* var77 /* : nullable Object */;
481 val* var_m78 /* var m: MModule */;
482 val* var79 /* : ToolContext */;
483 val* var81 /* : ToolContext */;
484 static val* varonce82;
485 val* var83 /* : String */;
486 char* var84 /* : NativeString */;
487 long var85 /* : Int */;
488 val* var86 /* : FlatString */;
489 val* var87 /* : Array[Object] */;
490 long var88 /* : Int */;
491 val* var89 /* : NativeArray[Object] */;
492 val* var90 /* : String */;
493 long var91 /* : Int */;
494 val* var92 /* : String */;
495 val* var94 /* : String */;
496 static val* varonce95;
497 val* var96 /* : String */;
498 char* var97 /* : NativeString */;
499 long var98 /* : Int */;
500 val* var99 /* : FlatString */;
501 val* var100 /* : Array[Object] */;
502 long var101 /* : Int */;
503 val* var102 /* : NativeArray[Object] */;
504 val* var103 /* : String */;
505 val* var104 /* : CodeFile */;
506 long var107 /* : Int */;
507 long var109 /* : Int for extern */;
508 long var_time1 /* var time1: Int */;
509 val* var110 /* : ToolContext */;
510 val* var112 /* : ToolContext */;
511 static val* varonce113;
512 val* var114 /* : String */;
513 char* var115 /* : NativeString */;
514 long var116 /* : Int */;
515 val* var117 /* : FlatString */;
516 long var118 /* : Int */;
517 short int var120 /* : Bool */;
518 int cltype;
519 int idtype;
520 const char* var_class_name;
521 long var121 /* : Int */;
522 static val* varonce122;
523 val* var123 /* : String */;
524 char* var124 /* : NativeString */;
525 long var125 /* : Int */;
526 val* var126 /* : FlatString */;
527 val* var127 /* : Array[Object] */;
528 long var128 /* : Int */;
529 val* var129 /* : NativeArray[Object] */;
530 val* var130 /* : Object */;
531 val* var131 /* : String */;
532 long var132 /* : Int */;
533 var_mainmodule = p0;
534 var_runtime_type_analysis = p1;
535 {
536 { /* Inline time#Object#get_time (self) on <self:ModelBuilder> */
537 var2 = kernel_Any_Any_get_time_0(self);
538 var = var2;
539 goto RET_LABEL1;
540 RET_LABEL1:(void)0;
541 }
542 }
543 var_time0 = var;
544 {
545 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
546 var5 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
547 if (unlikely(var5 == NULL)) {
548 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
549 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
550 show_backtrace(1);
551 }
552 var3 = var5;
553 RET_LABEL4:(void)0;
554 }
555 }
556 if (varonce) {
557 var6 = varonce;
558 } else {
559 var7 = "*** GENERATING C ***";
560 var8 = 20;
561 var9 = string__NativeString__to_s_with_length(var7, var8);
562 var6 = var9;
563 varonce = var6;
564 }
565 var10 = 1;
566 {
567 toolcontext__ToolContext__info(var3, var6, var10); /* Direct call toolcontext#ToolContext#info on <var3:ToolContext>*/
568 }
569 var11 = NEW_separate_erasure_compiler__SeparateErasureCompiler(&type_separate_erasure_compiler__SeparateErasureCompiler);
570 {
571 separate_erasure_compiler__SeparateErasureCompiler__init(var11, var_mainmodule, self, var_runtime_type_analysis); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#init on <var11:SeparateErasureCompiler>*/
572 }
573 var_compiler = var11;
574 {
575 abstract_compiler__AbstractCompiler__compile_header(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_header on <var_compiler:SeparateErasureCompiler>*/
576 }
577 {
578 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
579 var14 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
580 if (unlikely(var14 == NULL)) {
581 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
582 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
583 show_backtrace(1);
584 }
585 var12 = var14;
586 RET_LABEL13:(void)0;
587 }
588 }
589 if (varonce15) {
590 var16 = varonce15;
591 } else {
592 var17 = "Property coloring";
593 var18 = 17;
594 var19 = string__NativeString__to_s_with_length(var17, var18);
595 var16 = var19;
596 varonce15 = var16;
597 }
598 var20 = 2;
599 {
600 toolcontext__ToolContext__info(var12, var16, var20); /* Direct call toolcontext#ToolContext#info on <var12:ToolContext>*/
601 }
602 {
603 { /* Inline mmodule#MModule#name (var_mainmodule) on <var_mainmodule:MModule> */
604 var23 = var_mainmodule->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_mainmodule:MModule> */
605 if (unlikely(var23 == NULL)) {
606 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
607 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 78);
608 show_backtrace(1);
609 }
610 var21 = var23;
611 RET_LABEL22:(void)0;
612 }
613 }
614 if (varonce24) {
615 var25 = varonce24;
616 } else {
617 var26 = ".tables";
618 var27 = 7;
619 var28 = string__NativeString__to_s_with_length(var26, var27);
620 var25 = var28;
621 varonce24 = var25;
622 }
623 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
624 { /* var29 = array_instance Array[Object] */
625 var30 = 2;
626 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
627 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var21;
628 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var25;
629 {
630 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
631 }
632 }
633 {
634 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
635 }
636 {
637 var33 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var32);
638 }
639 {
640 separate_compiler__SeparateCompiler__do_property_coloring(var_compiler); /* Direct call separate_compiler#SeparateCompiler#do_property_coloring on <var_compiler:SeparateErasureCompiler>*/
641 }
642 {
643 { /* Inline mmodule#MModule#in_importation (var_mainmodule) on <var_mainmodule:MModule> */
644 var36 = var_mainmodule->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var_mainmodule:MModule> */
645 if (unlikely(var36 == NULL)) {
646 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
647 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 93);
648 show_backtrace(1);
649 }
650 var34 = var36;
651 RET_LABEL35:(void)0;
652 }
653 }
654 {
655 var37 = poset__POSetElement__greaters(var34);
656 }
657 var_ = var37;
658 {
659 var38 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[MModule]>*/;
660 }
661 var_39 = var38;
662 for(;;) {
663 {
664 var40 = ((short int (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_39) /* is_ok on <var_39:Iterator[MModule]>*/;
665 }
666 if (var40){
667 {
668 var41 = ((val* (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__item]))(var_39) /* item on <var_39:Iterator[MModule]>*/;
669 }
670 var_m = var41;
671 {
672 { /* Inline model#MModule#intro_mclasses (var_m) on <var_m:MModule> */
673 var44 = var_m->attrs[COLOR_model__MModule___intro_mclasses].val; /* _intro_mclasses on <var_m:MModule> */
674 if (unlikely(var44 == NULL)) {
675 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclasses");
676 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 136);
677 show_backtrace(1);
678 }
679 var42 = var44;
680 RET_LABEL43:(void)0;
681 }
682 }
683 var_45 = var42;
684 {
685 var46 = array__AbstractArrayRead__iterator(var_45);
686 }
687 var_47 = var46;
688 for(;;) {
689 {
690 var48 = array__ArrayIterator__is_ok(var_47);
691 }
692 if (var48){
693 {
694 var49 = array__ArrayIterator__item(var_47);
695 }
696 var_mclass = var49;
697 {
698 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>*/
699 }
700 {
701 array__ArrayIterator__next(var_47); /* Direct call array#ArrayIterator#next on <var_47:ArrayIterator[MClass]>*/
702 }
703 } else {
704 goto BREAK_label;
705 }
706 }
707 BREAK_label: (void)0;
708 {
709 { /* Inline abstract_collection#Iterator#finish (var_47) on <var_47:ArrayIterator[MClass]> */
710 RET_LABEL50:(void)0;
711 }
712 }
713 {
714 ((void (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__next]))(var_39) /* next on <var_39:Iterator[MModule]>*/;
715 }
716 } else {
717 goto BREAK_label51;
718 }
719 }
720 BREAK_label51: (void)0;
721 {
722 { /* Inline abstract_collection#Iterator#finish (var_39) on <var_39:Iterator[MModule]> */
723 RET_LABEL52:(void)0;
724 }
725 }
726 {
727 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (var_compiler) on <var_compiler:SeparateErasureCompiler> */
728 var55 = var_compiler->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <var_compiler:SeparateErasureCompiler> */
729 if (unlikely(var55 == NULL)) {
730 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
731 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 106);
732 show_backtrace(1);
733 }
734 var53 = var55;
735 RET_LABEL54:(void)0;
736 }
737 }
738 {
739 separate_compiler__SeparateCompiler__compile_color_consts(var_compiler, var53); /* Direct call separate_compiler#SeparateCompiler#compile_color_consts on <var_compiler:SeparateErasureCompiler>*/
740 }
741 {
742 { /* Inline mmodule#MModule#name (var_mainmodule) on <var_mainmodule:MModule> */
743 var58 = var_mainmodule->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_mainmodule:MModule> */
744 if (unlikely(var58 == NULL)) {
745 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
746 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 78);
747 show_backtrace(1);
748 }
749 var56 = var58;
750 RET_LABEL57:(void)0;
751 }
752 }
753 if (varonce59) {
754 var60 = varonce59;
755 } else {
756 var61 = ".main";
757 var62 = 5;
758 var63 = string__NativeString__to_s_with_length(var61, var62);
759 var60 = var63;
760 varonce59 = var60;
761 }
762 var64 = NEW_array__Array(&type_array__Arraykernel__Object);
763 { /* var64 = array_instance Array[Object] */
764 var65 = 2;
765 var66 = NEW_array__NativeArray(var65, &type_array__NativeArraykernel__Object);
766 ((struct instance_array__NativeArray*)var66)->values[0] = (val*) var56;
767 ((struct instance_array__NativeArray*)var66)->values[1] = (val*) var60;
768 {
769 ((void (*)(val*, val*, long))(var64->class->vft[COLOR_array__Array__with_native]))(var64, var66, var65) /* with_native on <var64:Array[Object]>*/;
770 }
771 }
772 {
773 var67 = ((val* (*)(val*))(var64->class->vft[COLOR_string__Object__to_s]))(var64) /* to_s on <var64:Array[Object]>*/;
774 }
775 {
776 var68 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var67);
777 }
778 {
779 abstract_compiler__AbstractCompiler__compile_nitni_global_ref_functions(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_nitni_global_ref_functions on <var_compiler:SeparateErasureCompiler>*/
780 }
781 {
782 abstract_compiler__AbstractCompiler__compile_main_function(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_main_function on <var_compiler:SeparateErasureCompiler>*/
783 }
784 {
785 { /* Inline mmodule#MModule#in_importation (var_mainmodule) on <var_mainmodule:MModule> */
786 var71 = var_mainmodule->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var_mainmodule:MModule> */
787 if (unlikely(var71 == NULL)) {
788 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
789 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 93);
790 show_backtrace(1);
791 }
792 var69 = var71;
793 RET_LABEL70:(void)0;
794 }
795 }
796 {
797 var72 = poset__POSetElement__greaters(var69);
798 }
799 var_73 = var72;
800 {
801 var74 = ((val* (*)(val*))(var_73->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_73) /* iterator on <var_73:Collection[MModule]>*/;
802 }
803 var_75 = var74;
804 for(;;) {
805 {
806 var76 = ((short int (*)(val*))(var_75->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_75) /* is_ok on <var_75:Iterator[MModule]>*/;
807 }
808 if (var76){
809 {
810 var77 = ((val* (*)(val*))(var_75->class->vft[COLOR_abstract_collection__Iterator__item]))(var_75) /* item on <var_75:Iterator[MModule]>*/;
811 }
812 var_m78 = var77;
813 {
814 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
815 var81 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
816 if (unlikely(var81 == NULL)) {
817 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
818 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
819 show_backtrace(1);
820 }
821 var79 = var81;
822 RET_LABEL80:(void)0;
823 }
824 }
825 if (varonce82) {
826 var83 = varonce82;
827 } else {
828 var84 = "Generate C for module ";
829 var85 = 22;
830 var86 = string__NativeString__to_s_with_length(var84, var85);
831 var83 = var86;
832 varonce82 = var83;
833 }
834 var87 = NEW_array__Array(&type_array__Arraykernel__Object);
835 { /* var87 = array_instance Array[Object] */
836 var88 = 2;
837 var89 = NEW_array__NativeArray(var88, &type_array__NativeArraykernel__Object);
838 ((struct instance_array__NativeArray*)var89)->values[0] = (val*) var83;
839 ((struct instance_array__NativeArray*)var89)->values[1] = (val*) var_m78;
840 {
841 ((void (*)(val*, val*, long))(var87->class->vft[COLOR_array__Array__with_native]))(var87, var89, var88) /* with_native on <var87:Array[Object]>*/;
842 }
843 }
844 {
845 var90 = ((val* (*)(val*))(var87->class->vft[COLOR_string__Object__to_s]))(var87) /* to_s on <var87:Array[Object]>*/;
846 }
847 var91 = 2;
848 {
849 toolcontext__ToolContext__info(var79, var90, var91); /* Direct call toolcontext#ToolContext#info on <var79:ToolContext>*/
850 }
851 {
852 { /* Inline mmodule#MModule#name (var_m78) on <var_m78:MModule> */
853 var94 = var_m78->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_m78:MModule> */
854 if (unlikely(var94 == NULL)) {
855 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
856 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 78);
857 show_backtrace(1);
858 }
859 var92 = var94;
860 RET_LABEL93:(void)0;
861 }
862 }
863 if (varonce95) {
864 var96 = varonce95;
865 } else {
866 var97 = ".sep";
867 var98 = 4;
868 var99 = string__NativeString__to_s_with_length(var97, var98);
869 var96 = var99;
870 varonce95 = var96;
871 }
872 var100 = NEW_array__Array(&type_array__Arraykernel__Object);
873 { /* var100 = array_instance Array[Object] */
874 var101 = 2;
875 var102 = NEW_array__NativeArray(var101, &type_array__NativeArraykernel__Object);
876 ((struct instance_array__NativeArray*)var102)->values[0] = (val*) var92;
877 ((struct instance_array__NativeArray*)var102)->values[1] = (val*) var96;
878 {
879 ((void (*)(val*, val*, long))(var100->class->vft[COLOR_array__Array__with_native]))(var100, var102, var101) /* with_native on <var100:Array[Object]>*/;
880 }
881 }
882 {
883 var103 = ((val* (*)(val*))(var100->class->vft[COLOR_string__Object__to_s]))(var100) /* to_s on <var100:Array[Object]>*/;
884 }
885 {
886 var104 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var103);
887 }
888 {
889 separate_compiler__SeparateCompiler__compile_module_to_c(var_compiler, var_m78); /* Direct call separate_compiler#SeparateCompiler#compile_module_to_c on <var_compiler:SeparateErasureCompiler>*/
890 }
891 {
892 ((void (*)(val*))(var_75->class->vft[COLOR_abstract_collection__Iterator__next]))(var_75) /* next on <var_75:Iterator[MModule]>*/;
893 }
894 } else {
895 goto BREAK_label105;
896 }
897 }
898 BREAK_label105: (void)0;
899 {
900 { /* Inline abstract_collection#Iterator#finish (var_75) on <var_75:Iterator[MModule]> */
901 RET_LABEL106:(void)0;
902 }
903 }
904 {
905 separate_compiler__SeparateCompiler__display_stats(var_compiler); /* Direct call separate_compiler#SeparateCompiler#display_stats on <var_compiler:SeparateErasureCompiler>*/
906 }
907 {
908 { /* Inline time#Object#get_time (self) on <self:ModelBuilder> */
909 var109 = kernel_Any_Any_get_time_0(self);
910 var107 = var109;
911 goto RET_LABEL108;
912 RET_LABEL108:(void)0;
913 }
914 }
915 var_time1 = var107;
916 {
917 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
918 var112 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
919 if (unlikely(var112 == NULL)) {
920 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
921 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
922 show_backtrace(1);
923 }
924 var110 = var112;
925 RET_LABEL111:(void)0;
926 }
927 }
928 if (varonce113) {
929 var114 = varonce113;
930 } else {
931 var115 = "*** END GENERATING C: ";
932 var116 = 22;
933 var117 = string__NativeString__to_s_with_length(var115, var116);
934 var114 = var117;
935 varonce113 = var114;
936 }
937 {
938 { /* Inline kernel#Int#- (var_time1,var_time0) on <var_time1:Int> */
939 /* Covariant cast for argument 0 (i) <var_time0:Int> isa OTHER */
940 /* <var_time0:Int> isa OTHER */
941 var120 = 1; /* easy <var_time0:Int> isa OTHER*/
942 if (unlikely(!var120)) {
943 var_class_name = type_kernel__Int.name;
944 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
945 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
946 show_backtrace(1);
947 }
948 var121 = var_time1 - var_time0;
949 var118 = var121;
950 goto RET_LABEL119;
951 RET_LABEL119:(void)0;
952 }
953 }
954 if (varonce122) {
955 var123 = varonce122;
956 } else {
957 var124 = " ***";
958 var125 = 4;
959 var126 = string__NativeString__to_s_with_length(var124, var125);
960 var123 = var126;
961 varonce122 = var123;
962 }
963 var127 = NEW_array__Array(&type_array__Arraykernel__Object);
964 { /* var127 = array_instance Array[Object] */
965 var128 = 3;
966 var129 = NEW_array__NativeArray(var128, &type_array__NativeArraykernel__Object);
967 ((struct instance_array__NativeArray*)var129)->values[0] = (val*) var114;
968 var130 = BOX_kernel__Int(var118); /* autobox from Int to Object */
969 ((struct instance_array__NativeArray*)var129)->values[1] = (val*) var130;
970 ((struct instance_array__NativeArray*)var129)->values[2] = (val*) var123;
971 {
972 ((void (*)(val*, val*, long))(var127->class->vft[COLOR_array__Array__with_native]))(var127, var129, var128) /* with_native on <var127:Array[Object]>*/;
973 }
974 }
975 {
976 var131 = ((val* (*)(val*))(var127->class->vft[COLOR_string__Object__to_s]))(var127) /* to_s on <var127:Array[Object]>*/;
977 }
978 var132 = 2;
979 {
980 toolcontext__ToolContext__info(var110, var131, var132); /* Direct call toolcontext#ToolContext#info on <var110:ToolContext>*/
981 }
982 {
983 abstract_compiler__ModelBuilder__write_and_make(self, var_compiler); /* Direct call abstract_compiler#ModelBuilder#write_and_make on <self:ModelBuilder>*/
984 }
985 RET_LABEL:;
986 }
987 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: Object, MModule, nullable RapidTypeAnalysis) */
988 void VIRTUAL_separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
989 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)>*/
990 RET_LABEL:;
991 }
992 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids for (self: SeparateErasureCompiler): Map[MClass, Int] */
993 val* separate_erasure_compiler__SeparateErasureCompiler__class_ids(val* self) {
994 val* var /* : Map[MClass, Int] */;
995 val* var1 /* : Map[MClass, Int] */;
996 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:SeparateErasureCompiler> */
997 if (unlikely(var1 == NULL)) {
998 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
999 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 104);
1000 show_backtrace(1);
1001 }
1002 var = var1;
1003 RET_LABEL:;
1004 return var;
1005 }
1006 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids for (self: Object): Map[MClass, Int] */
1007 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_ids(val* self) {
1008 val* var /* : Map[MClass, Int] */;
1009 val* var1 /* : Map[MClass, Int] */;
1010 val* var3 /* : Map[MClass, Int] */;
1011 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids (self) on <self:Object(SeparateErasureCompiler)> */
1012 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:Object(SeparateErasureCompiler)> */
1013 if (unlikely(var3 == NULL)) {
1014 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
1015 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 104);
1016 show_backtrace(1);
1017 }
1018 var1 = var3;
1019 RET_LABEL2:(void)0;
1020 }
1021 var = var1;
1022 RET_LABEL:;
1023 return var;
1024 }
1025 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids= for (self: SeparateErasureCompiler, Map[MClass, Int]) */
1026 void separate_erasure_compiler__SeparateErasureCompiler__class_ids_61d(val* self, val* p0) {
1027 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val = p0; /* _class_ids on <self:SeparateErasureCompiler> */
1028 RET_LABEL:;
1029 }
1030 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids= for (self: Object, Map[MClass, Int]) */
1031 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_ids_61d(val* self, val* p0) {
1032 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids= (self,p0) on <self:Object(SeparateErasureCompiler)> */
1033 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val = p0; /* _class_ids on <self:Object(SeparateErasureCompiler)> */
1034 RET_LABEL1:(void)0;
1035 }
1036 RET_LABEL:;
1037 }
1038 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors for (self: SeparateErasureCompiler): Map[MClass, Int] */
1039 val* separate_erasure_compiler__SeparateErasureCompiler__class_colors(val* self) {
1040 val* var /* : Map[MClass, Int] */;
1041 val* var1 /* : Map[MClass, Int] */;
1042 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
1043 if (unlikely(var1 == NULL)) {
1044 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
1045 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 105);
1046 show_backtrace(1);
1047 }
1048 var = var1;
1049 RET_LABEL:;
1050 return var;
1051 }
1052 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors for (self: Object): Map[MClass, Int] */
1053 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_colors(val* self) {
1054 val* var /* : Map[MClass, Int] */;
1055 val* var1 /* : Map[MClass, Int] */;
1056 val* var3 /* : Map[MClass, Int] */;
1057 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors (self) on <self:Object(SeparateErasureCompiler)> */
1058 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:Object(SeparateErasureCompiler)> */
1059 if (unlikely(var3 == NULL)) {
1060 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
1061 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 105);
1062 show_backtrace(1);
1063 }
1064 var1 = var3;
1065 RET_LABEL2:(void)0;
1066 }
1067 var = var1;
1068 RET_LABEL:;
1069 return var;
1070 }
1071 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors= for (self: SeparateErasureCompiler, Map[MClass, Int]) */
1072 void separate_erasure_compiler__SeparateErasureCompiler__class_colors_61d(val* self, val* p0) {
1073 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val = p0; /* _class_colors on <self:SeparateErasureCompiler> */
1074 RET_LABEL:;
1075 }
1076 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors= for (self: Object, Map[MClass, Int]) */
1077 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_colors_61d(val* self, val* p0) {
1078 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors= (self,p0) on <self:Object(SeparateErasureCompiler)> */
1079 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val = p0; /* _class_colors on <self:Object(SeparateErasureCompiler)> */
1080 RET_LABEL1:(void)0;
1081 }
1082 RET_LABEL:;
1083 }
1084 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors for (self: SeparateErasureCompiler): Map[MVirtualTypeProp, Int] */
1085 val* separate_erasure_compiler__SeparateErasureCompiler__vt_colors(val* self) {
1086 val* var /* : Map[MVirtualTypeProp, Int] */;
1087 val* var1 /* : Map[MVirtualTypeProp, Int] */;
1088 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
1089 if (unlikely(var1 == NULL)) {
1090 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
1091 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 106);
1092 show_backtrace(1);
1093 }
1094 var = var1;
1095 RET_LABEL:;
1096 return var;
1097 }
1098 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors for (self: Object): Map[MVirtualTypeProp, Int] */
1099 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_colors(val* self) {
1100 val* var /* : Map[MVirtualTypeProp, Int] */;
1101 val* var1 /* : Map[MVirtualTypeProp, Int] */;
1102 val* var3 /* : Map[MVirtualTypeProp, Int] */;
1103 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:Object(SeparateErasureCompiler)> */
1104 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:Object(SeparateErasureCompiler)> */
1105 if (unlikely(var3 == NULL)) {
1106 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
1107 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 106);
1108 show_backtrace(1);
1109 }
1110 var1 = var3;
1111 RET_LABEL2:(void)0;
1112 }
1113 var = var1;
1114 RET_LABEL:;
1115 return var;
1116 }
1117 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors= for (self: SeparateErasureCompiler, Map[MVirtualTypeProp, Int]) */
1118 void separate_erasure_compiler__SeparateErasureCompiler__vt_colors_61d(val* self, val* p0) {
1119 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val = p0; /* _vt_colors on <self:SeparateErasureCompiler> */
1120 RET_LABEL:;
1121 }
1122 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors= for (self: Object, Map[MVirtualTypeProp, Int]) */
1123 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_colors_61d(val* self, val* p0) {
1124 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors= (self,p0) on <self:Object(SeparateErasureCompiler)> */
1125 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val = p0; /* _vt_colors on <self:Object(SeparateErasureCompiler)> */
1126 RET_LABEL1:(void)0;
1127 }
1128 RET_LABEL:;
1129 }
1130 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: SeparateErasureCompiler, MModule, ModelBuilder, nullable RapidTypeAnalysis) */
1131 void separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
1132 val* var_mainmodule /* var mainmodule: MModule */;
1133 val* var_mmbuilder /* var mmbuilder: ModelBuilder */;
1134 val* var_runtime_type_analysis /* var runtime_type_analysis: nullable RapidTypeAnalysis */;
1135 val* var /* : POSet[MClass] */;
1136 val* var_poset /* var poset: POSet[MClass] */;
1137 val* var1 /* : HashSet[MClass] */;
1138 val* var_mclasses /* var mclasses: HashSet[MClass] */;
1139 val* var2 /* : POSetColorer[MClass] */;
1140 val* var_colorer /* var colorer: POSetColorer[MClass] */;
1141 val* var3 /* : Map[Object, Int] */;
1142 val* var5 /* : Map[Object, Int] */;
1143 val* var7 /* : Map[MClass, Array[nullable MClass]] */;
1144 val* var9 /* : HashMap[MClass, Set[MVirtualTypeProp]] */;
1145 val* var_vts /* var vts: HashMap[MClass, Set[MVirtualTypeProp]] */;
1146 val* var_ /* var : HashSet[MClass] */;
1147 val* var10 /* : Iterator[Object] */;
1148 val* var_11 /* var : Iterator[MClass] */;
1149 short int var12 /* : Bool */;
1150 val* var13 /* : nullable Object */;
1151 val* var_mclass /* var mclass: MClass */;
1152 val* var14 /* : HashSet[MVirtualTypeProp] */;
1153 val* var15 /* : MModule */;
1154 val* var17 /* : MModule */;
1155 val* var18 /* : Set[MProperty] */;
1156 val* var_19 /* var : Set[MProperty] */;
1157 val* var20 /* : Iterator[nullable Object] */;
1158 val* var_21 /* var : Iterator[MProperty] */;
1159 short int var22 /* : Bool */;
1160 val* var23 /* : nullable Object */;
1161 val* var_mprop /* var mprop: MProperty */;
1162 short int var24 /* : Bool */;
1163 int cltype;
1164 int idtype;
1165 val* var25 /* : nullable Object */;
1166 val* var29 /* : POSetBucketsColorer[MClass, MVirtualTypeProp] */;
1167 val* var30 /* : Map[Object, Set[Object]] */;
1168 val* var_vt_colorer /* var vt_colorer: POSetBucketsColorer[MClass, MVirtualTypeProp] */;
1169 val* var31 /* : Map[Object, Int] */;
1170 val* var33 /* : Map[MClass, Array[nullable MPropDef]] */;
1171 var_mainmodule = p0;
1172 var_mmbuilder = p1;
1173 var_runtime_type_analysis = p2;
1174 {
1175 separate_compiler__SeparateCompiler__init(self, p0, p1, p2); /* Direct call separate_compiler#SeparateCompiler#init on <self:SeparateErasureCompiler>*/
1176 }
1177 {
1178 var = model__MModule__flatten_mclass_hierarchy(var_mainmodule);
1179 }
1180 var_poset = var;
1181 var1 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
1182 {
1183 hash_collection__HashSet__from(var1, var_poset); /* Direct call hash_collection#HashSet#from on <var1:HashSet[MClass]>*/
1184 }
1185 var_mclasses = var1;
1186 var2 = NEW_coloring__POSetColorer(&type_coloring__POSetColorermodel__MClass);
1187 {
1188 ((void (*)(val*))(var2->class->vft[COLOR_kernel__Object__init]))(var2) /* init on <var2:POSetColorer[MClass]>*/;
1189 }
1190 var_colorer = var2;
1191 {
1192 coloring__POSetColorer__colorize(var_colorer, var_poset); /* Direct call coloring#POSetColorer#colorize on <var_colorer:POSetColorer[MClass]>*/
1193 }
1194 {
1195 var3 = coloring__POSetColorer__ids(var_colorer);
1196 }
1197 {
1198 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids= (self,var3) on <self:SeparateErasureCompiler> */
1199 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val = var3; /* _class_ids on <self:SeparateErasureCompiler> */
1200 RET_LABEL4:(void)0;
1201 }
1202 }
1203 {
1204 var5 = coloring__POSetColorer__colors(var_colorer);
1205 }
1206 {
1207 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors= (self,var5) on <self:SeparateErasureCompiler> */
1208 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val = var5; /* _class_colors on <self:SeparateErasureCompiler> */
1209 RET_LABEL6:(void)0;
1210 }
1211 }
1212 {
1213 var7 = separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(self, var_mclasses);
1214 }
1215 {
1216 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables= (self,var7) on <self:SeparateErasureCompiler> */
1217 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val = var7; /* _class_tables on <self:SeparateErasureCompiler> */
1218 RET_LABEL8:(void)0;
1219 }
1220 }
1221 var9 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setmodel__MVirtualTypeProp);
1222 {
1223 ((void (*)(val*))(var9->class->vft[COLOR_kernel__Object__init]))(var9) /* init on <var9:HashMap[MClass, Set[MVirtualTypeProp]]>*/;
1224 }
1225 var_vts = var9;
1226 var_ = var_mclasses;
1227 {
1228 var10 = hash_collection__HashSet__iterator(var_);
1229 }
1230 var_11 = var10;
1231 for(;;) {
1232 {
1233 var12 = ((short int (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_11) /* is_ok on <var_11:Iterator[MClass]>*/;
1234 }
1235 if (var12){
1236 {
1237 var13 = ((val* (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__item]))(var_11) /* item on <var_11:Iterator[MClass]>*/;
1238 }
1239 var_mclass = var13;
1240 var14 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MVirtualTypeProp);
1241 {
1242 ((void (*)(val*))(var14->class->vft[COLOR_kernel__Object__init]))(var14) /* init on <var14:HashSet[MVirtualTypeProp]>*/;
1243 }
1244 {
1245 hash_collection__HashMap___91d_93d_61d(var_vts, var_mclass, var14); /* Direct call hash_collection#HashMap#[]= on <var_vts:HashMap[MClass, Set[MVirtualTypeProp]]>*/
1246 }
1247 {
1248 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1249 var17 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1250 if (unlikely(var17 == NULL)) {
1251 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1252 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
1253 show_backtrace(1);
1254 }
1255 var15 = var17;
1256 RET_LABEL16:(void)0;
1257 }
1258 }
1259 {
1260 var18 = abstract_compiler__MModule__properties(var15, var_mclass);
1261 }
1262 var_19 = var18;
1263 {
1264 var20 = ((val* (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_19) /* iterator on <var_19:Set[MProperty]>*/;
1265 }
1266 var_21 = var20;
1267 for(;;) {
1268 {
1269 var22 = ((short int (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_21) /* is_ok on <var_21:Iterator[MProperty]>*/;
1270 }
1271 if (var22){
1272 {
1273 var23 = ((val* (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Iterator__item]))(var_21) /* item on <var_21:Iterator[MProperty]>*/;
1274 }
1275 var_mprop = var23;
1276 /* <var_mprop:MProperty> isa MVirtualTypeProp */
1277 cltype = type_model__MVirtualTypeProp.color;
1278 idtype = type_model__MVirtualTypeProp.id;
1279 if(cltype >= var_mprop->type->table_size) {
1280 var24 = 0;
1281 } else {
1282 var24 = var_mprop->type->type_table[cltype] == idtype;
1283 }
1284 if (var24){
1285 {
1286 var25 = hash_collection__HashMap___91d_93d(var_vts, var_mclass);
1287 }
1288 {
1289 ((void (*)(val*, val*))(var25->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var25, var_mprop) /* add on <var25:nullable Object(Set[MVirtualTypeProp])>*/;
1290 }
1291 } else {
1292 }
1293 {
1294 ((void (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Iterator__next]))(var_21) /* next on <var_21:Iterator[MProperty]>*/;
1295 }
1296 } else {
1297 goto BREAK_label;
1298 }
1299 }
1300 BREAK_label: (void)0;
1301 {
1302 { /* Inline abstract_collection#Iterator#finish (var_21) on <var_21:Iterator[MProperty]> */
1303 RET_LABEL26:(void)0;
1304 }
1305 }
1306 {
1307 ((void (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__next]))(var_11) /* next on <var_11:Iterator[MClass]>*/;
1308 }
1309 } else {
1310 goto BREAK_label27;
1311 }
1312 }
1313 BREAK_label27: (void)0;
1314 {
1315 { /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:Iterator[MClass]> */
1316 RET_LABEL28:(void)0;
1317 }
1318 }
1319 var29 = NEW_coloring__POSetBucketsColorer(&type_coloring__POSetBucketsColorermodel__MClassmodel__MVirtualTypeProp);
1320 {
1321 var30 = coloring__POSetColorer__conflicts(var_colorer);
1322 }
1323 {
1324 coloring__POSetBucketsColorer__init(var29, var_poset, var30); /* Direct call coloring#POSetBucketsColorer#init on <var29:POSetBucketsColorer[MClass, MVirtualTypeProp]>*/
1325 }
1326 var_vt_colorer = var29;
1327 {
1328 var31 = coloring__POSetBucketsColorer__colorize(var_vt_colorer, var_vts);
1329 }
1330 {
1331 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors= (self,var31) on <self:SeparateErasureCompiler> */
1332 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val = var31; /* _vt_colors on <self:SeparateErasureCompiler> */
1333 RET_LABEL32:(void)0;
1334 }
1335 }
1336 {
1337 var33 = separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(self, var_mclasses);
1338 }
1339 {
1340 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables= (self,var33) on <self:SeparateErasureCompiler> */
1341 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val = var33; /* _vt_tables on <self:SeparateErasureCompiler> */
1342 RET_LABEL34:(void)0;
1343 }
1344 }
1345 RET_LABEL:;
1346 }
1347 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: Object, MModule, ModelBuilder, nullable RapidTypeAnalysis) */
1348 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
1349 separate_erasure_compiler__SeparateErasureCompiler__init(self, p0, p1, p2); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#init on <self:Object(SeparateErasureCompiler)>*/
1350 RET_LABEL:;
1351 }
1352 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
1353 val* separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0) {
1354 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
1355 val* var_mclasses /* var mclasses: Set[MClass] */;
1356 val* var1 /* : HashMap[MClass, Array[nullable MPropDef]] */;
1357 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
1358 val* var_ /* var : Set[MClass] */;
1359 val* var2 /* : Iterator[nullable Object] */;
1360 val* var_3 /* var : Iterator[MClass] */;
1361 short int var4 /* : Bool */;
1362 val* var5 /* : nullable Object */;
1363 val* var_mclass /* var mclass: MClass */;
1364 val* var6 /* : Array[nullable MPropDef] */;
1365 val* var_table /* var table: Array[nullable MPropDef] */;
1366 val* var7 /* : Array[MClass] */;
1367 val* var_parents /* var parents: Array[MClass] */;
1368 val* var8 /* : MModule */;
1369 val* var10 /* : MModule */;
1370 val* var11 /* : POSet[MClass] */;
1371 short int var12 /* : Bool */;
1372 val* var13 /* : MModule */;
1373 val* var15 /* : MModule */;
1374 val* var16 /* : POSetElement[MClass] */;
1375 val* var17 /* : Collection[Object] */;
1376 val* var18 /* : Array[nullable Object] */;
1377 val* var19 /* : MModule */;
1378 val* var21 /* : MModule */;
1379 val* var_22 /* var : Array[MClass] */;
1380 val* var23 /* : ArrayIterator[nullable Object] */;
1381 val* var_24 /* var : ArrayIterator[MClass] */;
1382 short int var25 /* : Bool */;
1383 val* var26 /* : nullable Object */;
1384 val* var_parent /* var parent: MClass */;
1385 short int var27 /* : Bool */;
1386 short int var28 /* : Bool */;
1387 val* var_other /* var other: nullable Object */;
1388 short int var30 /* : Bool */;
1389 short int var32 /* : Bool */;
1390 val* var33 /* : MModule */;
1391 val* var35 /* : MModule */;
1392 val* var36 /* : Set[MProperty] */;
1393 val* var_37 /* var : Set[MProperty] */;
1394 val* var38 /* : Iterator[nullable Object] */;
1395 val* var_39 /* var : Iterator[MProperty] */;
1396 short int var40 /* : Bool */;
1397 val* var41 /* : nullable Object */;
1398 val* var_mproperty /* var mproperty: MProperty */;
1399 short int var42 /* : Bool */;
1400 int cltype;
1401 int idtype;
1402 short int var43 /* : Bool */;
1403 val* var45 /* : Map[MVirtualTypeProp, Int] */;
1404 val* var47 /* : Map[MVirtualTypeProp, Int] */;
1405 val* var48 /* : nullable Object */;
1406 long var49 /* : Int */;
1407 long var_color /* var color: Int */;
1408 long var50 /* : Int */;
1409 long var52 /* : Int */;
1410 short int var53 /* : Bool */;
1411 short int var55 /* : Bool */;
1412 int cltype56;
1413 int idtype57;
1414 const char* var_class_name;
1415 short int var58 /* : Bool */;
1416 long var59 /* : Int */;
1417 long var61 /* : Int */;
1418 long var_i /* var i: Int */;
1419 long var_62 /* var : Int */;
1420 short int var63 /* : Bool */;
1421 short int var65 /* : Bool */;
1422 int cltype66;
1423 int idtype67;
1424 const char* var_class_name68;
1425 short int var69 /* : Bool */;
1426 val* var70 /* : null */;
1427 long var71 /* : Int */;
1428 long var72 /* : Int */;
1429 val* var74 /* : Array[MPropDef] */;
1430 val* var76 /* : Array[MPropDef] */;
1431 val* var_77 /* var : Array[MVirtualTypeDef] */;
1432 val* var78 /* : ArrayIterator[nullable Object] */;
1433 val* var_79 /* var : ArrayIterator[MVirtualTypeDef] */;
1434 short int var80 /* : Bool */;
1435 val* var81 /* : nullable Object */;
1436 val* var_mpropdef /* var mpropdef: MVirtualTypeDef */;
1437 val* var82 /* : MClassDef */;
1438 val* var84 /* : MClassDef */;
1439 val* var85 /* : MClass */;
1440 val* var87 /* : MClass */;
1441 short int var88 /* : Bool */;
1442 short int var89 /* : Bool */;
1443 short int var91 /* : Bool */;
1444 short int var93 /* : Bool */;
1445 val* var100 /* : MModule */;
1446 val* var102 /* : MModule */;
1447 val* var103 /* : Set[MProperty] */;
1448 val* var_104 /* var : Set[MProperty] */;
1449 val* var105 /* : Iterator[nullable Object] */;
1450 val* var_106 /* var : Iterator[MProperty] */;
1451 short int var107 /* : Bool */;
1452 val* var108 /* : nullable Object */;
1453 val* var_mproperty109 /* var mproperty: MProperty */;
1454 short int var110 /* : Bool */;
1455 int cltype111;
1456 int idtype112;
1457 short int var113 /* : Bool */;
1458 val* var115 /* : Map[MVirtualTypeProp, Int] */;
1459 val* var117 /* : Map[MVirtualTypeProp, Int] */;
1460 val* var118 /* : nullable Object */;
1461 long var119 /* : Int */;
1462 long var_color120 /* var color: Int */;
1463 long var121 /* : Int */;
1464 long var123 /* : Int */;
1465 short int var124 /* : Bool */;
1466 short int var126 /* : Bool */;
1467 int cltype127;
1468 int idtype128;
1469 const char* var_class_name129;
1470 short int var130 /* : Bool */;
1471 long var131 /* : Int */;
1472 long var133 /* : Int */;
1473 long var_i134 /* var i: Int */;
1474 long var_135 /* var : Int */;
1475 short int var136 /* : Bool */;
1476 short int var138 /* : Bool */;
1477 int cltype139;
1478 int idtype140;
1479 const char* var_class_name141;
1480 short int var142 /* : Bool */;
1481 val* var143 /* : null */;
1482 long var144 /* : Int */;
1483 long var145 /* : Int */;
1484 val* var147 /* : Array[MPropDef] */;
1485 val* var149 /* : Array[MPropDef] */;
1486 val* var_150 /* var : Array[MVirtualTypeDef] */;
1487 val* var151 /* : ArrayIterator[nullable Object] */;
1488 val* var_152 /* var : ArrayIterator[MVirtualTypeDef] */;
1489 short int var153 /* : Bool */;
1490 val* var154 /* : nullable Object */;
1491 val* var_mpropdef155 /* var mpropdef: MVirtualTypeDef */;
1492 val* var156 /* : MClassDef */;
1493 val* var158 /* : MClassDef */;
1494 val* var159 /* : MClass */;
1495 val* var161 /* : MClass */;
1496 short int var162 /* : Bool */;
1497 short int var163 /* : Bool */;
1498 short int var165 /* : Bool */;
1499 short int var167 /* : Bool */;
1500 var_mclasses = p0;
1501 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
1502 {
1503 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MPropDef]]>*/;
1504 }
1505 var_tables = var1;
1506 var_ = var_mclasses;
1507 {
1508 var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[MClass]>*/;
1509 }
1510 var_3 = var2;
1511 for(;;) {
1512 {
1513 var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[MClass]>*/;
1514 }
1515 if (var4){
1516 {
1517 var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[MClass]>*/;
1518 }
1519 var_mclass = var5;
1520 var6 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
1521 {
1522 ((void (*)(val*))(var6->class->vft[COLOR_kernel__Object__init]))(var6) /* init on <var6:Array[nullable MPropDef]>*/;
1523 }
1524 var_table = var6;
1525 var7 = NEW_array__Array(&type_array__Arraymodel__MClass);
1526 {
1527 ((void (*)(val*))(var7->class->vft[COLOR_kernel__Object__init]))(var7) /* init on <var7:Array[MClass]>*/;
1528 }
1529 var_parents = var7;
1530 {
1531 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1532 var10 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1533 if (unlikely(var10 == NULL)) {
1534 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1535 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
1536 show_backtrace(1);
1537 }
1538 var8 = var10;
1539 RET_LABEL9:(void)0;
1540 }
1541 }
1542 {
1543 var11 = model__MModule__flatten_mclass_hierarchy(var8);
1544 }
1545 {
1546 var12 = poset__POSet__has(var11, var_mclass);
1547 }
1548 if (var12){
1549 {
1550 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1551 var15 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1552 if (unlikely(var15 == NULL)) {
1553 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1554 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
1555 show_backtrace(1);
1556 }
1557 var13 = var15;
1558 RET_LABEL14:(void)0;
1559 }
1560 }
1561 {
1562 var16 = model__MClass__in_hierarchy(var_mclass, var13);
1563 }
1564 {
1565 var17 = poset__POSetElement__greaters(var16);
1566 }
1567 {
1568 var18 = array__Collection__to_a(var17);
1569 }
1570 var_parents = var18;
1571 {
1572 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1573 var21 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1574 if (unlikely(var21 == NULL)) {
1575 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1576 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
1577 show_backtrace(1);
1578 }
1579 var19 = var21;
1580 RET_LABEL20:(void)0;
1581 }
1582 }
1583 {
1584 model__MModule__linearize_mclasses(var19, var_parents); /* Direct call model#MModule#linearize_mclasses on <var19:MModule>*/
1585 }
1586 } else {
1587 }
1588 var_22 = var_parents;
1589 {
1590 var23 = array__AbstractArrayRead__iterator(var_22);
1591 }
1592 var_24 = var23;
1593 for(;;) {
1594 {
1595 var25 = array__ArrayIterator__is_ok(var_24);
1596 }
1597 if (var25){
1598 {
1599 var26 = array__ArrayIterator__item(var_24);
1600 }
1601 var_parent = var26;
1602 {
1603 { /* Inline kernel#Object#== (var_parent,var_mclass) on <var_parent:MClass> */
1604 var_other = var_mclass;
1605 {
1606 { /* Inline kernel#Object#is_same_instance (var_parent,var_other) on <var_parent:MClass> */
1607 var32 = var_parent == var_other;
1608 var30 = var32;
1609 goto RET_LABEL31;
1610 RET_LABEL31:(void)0;
1611 }
1612 }
1613 var28 = var30;
1614 goto RET_LABEL29;
1615 RET_LABEL29:(void)0;
1616 }
1617 var27 = var28;
1618 }
1619 if (var27){
1620 goto BREAK_label;
1621 } else {
1622 }
1623 {
1624 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1625 var35 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1626 if (unlikely(var35 == NULL)) {
1627 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1628 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
1629 show_backtrace(1);
1630 }
1631 var33 = var35;
1632 RET_LABEL34:(void)0;
1633 }
1634 }
1635 {
1636 var36 = abstract_compiler__MModule__properties(var33, var_parent);
1637 }
1638 var_37 = var36;
1639 {
1640 var38 = ((val* (*)(val*))(var_37->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_37) /* iterator on <var_37:Set[MProperty]>*/;
1641 }
1642 var_39 = var38;
1643 for(;;) {
1644 {
1645 var40 = ((short int (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_39) /* is_ok on <var_39:Iterator[MProperty]>*/;
1646 }
1647 if (var40){
1648 {
1649 var41 = ((val* (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__item]))(var_39) /* item on <var_39:Iterator[MProperty]>*/;
1650 }
1651 var_mproperty = var41;
1652 /* <var_mproperty:MProperty> isa MVirtualTypeProp */
1653 cltype = type_model__MVirtualTypeProp.color;
1654 idtype = type_model__MVirtualTypeProp.id;
1655 if(cltype >= var_mproperty->type->table_size) {
1656 var42 = 0;
1657 } else {
1658 var42 = var_mproperty->type->type_table[cltype] == idtype;
1659 }
1660 var43 = !var42;
1661 if (var43){
1662 goto BREAK_label44;
1663 } else {
1664 }
1665 {
1666 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:SeparateErasureCompiler> */
1667 var47 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
1668 if (unlikely(var47 == NULL)) {
1669 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
1670 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 106);
1671 show_backtrace(1);
1672 }
1673 var45 = var47;
1674 RET_LABEL46:(void)0;
1675 }
1676 }
1677 {
1678 var48 = ((val* (*)(val*, val*))(var45->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var45, var_mproperty) /* [] on <var45:Map[MVirtualTypeProp, Int]>*/;
1679 }
1680 var49 = ((struct instance_kernel__Int*)var48)->value; /* autounbox from nullable Object to Int */;
1681 var_color = var49;
1682 {
1683 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
1684 var52 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
1685 var50 = var52;
1686 RET_LABEL51:(void)0;
1687 }
1688 }
1689 {
1690 { /* Inline kernel#Int#<= (var50,var_color) on <var50:Int> */
1691 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
1692 /* <var_color:Int> isa OTHER */
1693 var55 = 1; /* easy <var_color:Int> isa OTHER*/
1694 if (unlikely(!var55)) {
1695 var_class_name = type_kernel__Int.name;
1696 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1697 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
1698 show_backtrace(1);
1699 }
1700 var58 = var50 <= var_color;
1701 var53 = var58;
1702 goto RET_LABEL54;
1703 RET_LABEL54:(void)0;
1704 }
1705 }
1706 if (var53){
1707 {
1708 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
1709 var61 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
1710 var59 = var61;
1711 RET_LABEL60:(void)0;
1712 }
1713 }
1714 var_i = var59;
1715 var_62 = var_color;
1716 for(;;) {
1717 {
1718 { /* Inline kernel#Int#< (var_i,var_62) on <var_i:Int> */
1719 /* Covariant cast for argument 0 (i) <var_62:Int> isa OTHER */
1720 /* <var_62:Int> isa OTHER */
1721 var65 = 1; /* easy <var_62:Int> isa OTHER*/
1722 if (unlikely(!var65)) {
1723 var_class_name68 = type_kernel__Int.name;
1724 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name68);
1725 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
1726 show_backtrace(1);
1727 }
1728 var69 = var_i < var_62;
1729 var63 = var69;
1730 goto RET_LABEL64;
1731 RET_LABEL64:(void)0;
1732 }
1733 }
1734 if (var63){
1735 var70 = NULL;
1736 {
1737 array__Array___91d_93d_61d(var_table, var_i, var70); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1738 }
1739 var71 = 1;
1740 {
1741 var72 = kernel__Int__successor(var_i, var71);
1742 }
1743 var_i = var72;
1744 } else {
1745 goto BREAK_label73;
1746 }
1747 }
1748 BREAK_label73: (void)0;
1749 } else {
1750 }
1751 {
1752 { /* Inline model#MProperty#mpropdefs (var_mproperty) on <var_mproperty:MProperty(MVirtualTypeProp)> */
1753 var76 = var_mproperty->attrs[COLOR_model__MProperty___mpropdefs].val; /* _mpropdefs on <var_mproperty:MProperty(MVirtualTypeProp)> */
1754 if (unlikely(var76 == NULL)) {
1755 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
1756 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1644);
1757 show_backtrace(1);
1758 }
1759 var74 = var76;
1760 RET_LABEL75:(void)0;
1761 }
1762 }
1763 var_77 = var74;
1764 {
1765 var78 = array__AbstractArrayRead__iterator(var_77);
1766 }
1767 var_79 = var78;
1768 for(;;) {
1769 {
1770 var80 = array__ArrayIterator__is_ok(var_79);
1771 }
1772 if (var80){
1773 {
1774 var81 = array__ArrayIterator__item(var_79);
1775 }
1776 var_mpropdef = var81;
1777 {
1778 { /* Inline model#MPropDef#mclassdef (var_mpropdef) on <var_mpropdef:MVirtualTypeDef> */
1779 var84 = var_mpropdef->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef:MVirtualTypeDef> */
1780 if (unlikely(var84 == NULL)) {
1781 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1782 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
1783 show_backtrace(1);
1784 }
1785 var82 = var84;
1786 RET_LABEL83:(void)0;
1787 }
1788 }
1789 {
1790 { /* Inline model#MClassDef#mclass (var82) on <var82:MClassDef> */
1791 var87 = var82->attrs[COLOR_model__MClassDef___mclass].val; /* _mclass on <var82:MClassDef> */
1792 if (unlikely(var87 == NULL)) {
1793 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
1794 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 492);
1795 show_backtrace(1);
1796 }
1797 var85 = var87;
1798 RET_LABEL86:(void)0;
1799 }
1800 }
1801 {
1802 { /* Inline kernel#Object#== (var85,var_parent) on <var85:MClass> */
1803 var_other = var_parent;
1804 {
1805 { /* Inline kernel#Object#is_same_instance (var85,var_other) on <var85:MClass> */
1806 var93 = var85 == var_other;
1807 var91 = var93;
1808 goto RET_LABEL92;
1809 RET_LABEL92:(void)0;
1810 }
1811 }
1812 var89 = var91;
1813 goto RET_LABEL90;
1814 RET_LABEL90:(void)0;
1815 }
1816 var88 = var89;
1817 }
1818 if (var88){
1819 {
1820 array__Array___91d_93d_61d(var_table, var_color, var_mpropdef); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1821 }
1822 } else {
1823 }
1824 {
1825 array__ArrayIterator__next(var_79); /* Direct call array#ArrayIterator#next on <var_79:ArrayIterator[MVirtualTypeDef]>*/
1826 }
1827 } else {
1828 goto BREAK_label94;
1829 }
1830 }
1831 BREAK_label94: (void)0;
1832 {
1833 { /* Inline abstract_collection#Iterator#finish (var_79) on <var_79:ArrayIterator[MVirtualTypeDef]> */
1834 RET_LABEL95:(void)0;
1835 }
1836 }
1837 BREAK_label44: (void)0;
1838 {
1839 ((void (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__next]))(var_39) /* next on <var_39:Iterator[MProperty]>*/;
1840 }
1841 } else {
1842 goto BREAK_label96;
1843 }
1844 }
1845 BREAK_label96: (void)0;
1846 {
1847 { /* Inline abstract_collection#Iterator#finish (var_39) on <var_39:Iterator[MProperty]> */
1848 RET_LABEL97:(void)0;
1849 }
1850 }
1851 BREAK_label: (void)0;
1852 {
1853 array__ArrayIterator__next(var_24); /* Direct call array#ArrayIterator#next on <var_24:ArrayIterator[MClass]>*/
1854 }
1855 } else {
1856 goto BREAK_label98;
1857 }
1858 }
1859 BREAK_label98: (void)0;
1860 {
1861 { /* Inline abstract_collection#Iterator#finish (var_24) on <var_24:ArrayIterator[MClass]> */
1862 RET_LABEL99:(void)0;
1863 }
1864 }
1865 {
1866 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1867 var102 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1868 if (unlikely(var102 == NULL)) {
1869 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1870 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
1871 show_backtrace(1);
1872 }
1873 var100 = var102;
1874 RET_LABEL101:(void)0;
1875 }
1876 }
1877 {
1878 var103 = abstract_compiler__MModule__properties(var100, var_mclass);
1879 }
1880 var_104 = var103;
1881 {
1882 var105 = ((val* (*)(val*))(var_104->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_104) /* iterator on <var_104:Set[MProperty]>*/;
1883 }
1884 var_106 = var105;
1885 for(;;) {
1886 {
1887 var107 = ((short int (*)(val*))(var_106->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_106) /* is_ok on <var_106:Iterator[MProperty]>*/;
1888 }
1889 if (var107){
1890 {
1891 var108 = ((val* (*)(val*))(var_106->class->vft[COLOR_abstract_collection__Iterator__item]))(var_106) /* item on <var_106:Iterator[MProperty]>*/;
1892 }
1893 var_mproperty109 = var108;
1894 /* <var_mproperty109:MProperty> isa MVirtualTypeProp */
1895 cltype111 = type_model__MVirtualTypeProp.color;
1896 idtype112 = type_model__MVirtualTypeProp.id;
1897 if(cltype111 >= var_mproperty109->type->table_size) {
1898 var110 = 0;
1899 } else {
1900 var110 = var_mproperty109->type->type_table[cltype111] == idtype112;
1901 }
1902 var113 = !var110;
1903 if (var113){
1904 goto BREAK_label114;
1905 } else {
1906 }
1907 {
1908 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:SeparateErasureCompiler> */
1909 var117 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
1910 if (unlikely(var117 == NULL)) {
1911 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
1912 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 106);
1913 show_backtrace(1);
1914 }
1915 var115 = var117;
1916 RET_LABEL116:(void)0;
1917 }
1918 }
1919 {
1920 var118 = ((val* (*)(val*, val*))(var115->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var115, var_mproperty109) /* [] on <var115:Map[MVirtualTypeProp, Int]>*/;
1921 }
1922 var119 = ((struct instance_kernel__Int*)var118)->value; /* autounbox from nullable Object to Int */;
1923 var_color120 = var119;
1924 {
1925 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
1926 var123 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
1927 var121 = var123;
1928 RET_LABEL122:(void)0;
1929 }
1930 }
1931 {
1932 { /* Inline kernel#Int#<= (var121,var_color120) on <var121:Int> */
1933 /* Covariant cast for argument 0 (i) <var_color120:Int> isa OTHER */
1934 /* <var_color120:Int> isa OTHER */
1935 var126 = 1; /* easy <var_color120:Int> isa OTHER*/
1936 if (unlikely(!var126)) {
1937 var_class_name129 = type_kernel__Int.name;
1938 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name129);
1939 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
1940 show_backtrace(1);
1941 }
1942 var130 = var121 <= var_color120;
1943 var124 = var130;
1944 goto RET_LABEL125;
1945 RET_LABEL125:(void)0;
1946 }
1947 }
1948 if (var124){
1949 {
1950 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
1951 var133 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
1952 var131 = var133;
1953 RET_LABEL132:(void)0;
1954 }
1955 }
1956 var_i134 = var131;
1957 var_135 = var_color120;
1958 for(;;) {
1959 {
1960 { /* Inline kernel#Int#< (var_i134,var_135) on <var_i134:Int> */
1961 /* Covariant cast for argument 0 (i) <var_135:Int> isa OTHER */
1962 /* <var_135:Int> isa OTHER */
1963 var138 = 1; /* easy <var_135:Int> isa OTHER*/
1964 if (unlikely(!var138)) {
1965 var_class_name141 = type_kernel__Int.name;
1966 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name141);
1967 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
1968 show_backtrace(1);
1969 }
1970 var142 = var_i134 < var_135;
1971 var136 = var142;
1972 goto RET_LABEL137;
1973 RET_LABEL137:(void)0;
1974 }
1975 }
1976 if (var136){
1977 var143 = NULL;
1978 {
1979 array__Array___91d_93d_61d(var_table, var_i134, var143); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1980 }
1981 var144 = 1;
1982 {
1983 var145 = kernel__Int__successor(var_i134, var144);
1984 }
1985 var_i134 = var145;
1986 } else {
1987 goto BREAK_label146;
1988 }
1989 }
1990 BREAK_label146: (void)0;
1991 } else {
1992 }
1993 {
1994 { /* Inline model#MProperty#mpropdefs (var_mproperty109) on <var_mproperty109:MProperty(MVirtualTypeProp)> */
1995 var149 = var_mproperty109->attrs[COLOR_model__MProperty___mpropdefs].val; /* _mpropdefs on <var_mproperty109:MProperty(MVirtualTypeProp)> */
1996 if (unlikely(var149 == NULL)) {
1997 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
1998 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1644);
1999 show_backtrace(1);
2000 }
2001 var147 = var149;
2002 RET_LABEL148:(void)0;
2003 }
2004 }
2005 var_150 = var147;
2006 {
2007 var151 = array__AbstractArrayRead__iterator(var_150);
2008 }
2009 var_152 = var151;
2010 for(;;) {
2011 {
2012 var153 = array__ArrayIterator__is_ok(var_152);
2013 }
2014 if (var153){
2015 {
2016 var154 = array__ArrayIterator__item(var_152);
2017 }
2018 var_mpropdef155 = var154;
2019 {
2020 { /* Inline model#MPropDef#mclassdef (var_mpropdef155) on <var_mpropdef155:MVirtualTypeDef> */
2021 var158 = var_mpropdef155->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef155:MVirtualTypeDef> */
2022 if (unlikely(var158 == NULL)) {
2023 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
2024 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
2025 show_backtrace(1);
2026 }
2027 var156 = var158;
2028 RET_LABEL157:(void)0;
2029 }
2030 }
2031 {
2032 { /* Inline model#MClassDef#mclass (var156) on <var156:MClassDef> */
2033 var161 = var156->attrs[COLOR_model__MClassDef___mclass].val; /* _mclass on <var156:MClassDef> */
2034 if (unlikely(var161 == NULL)) {
2035 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
2036 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 492);
2037 show_backtrace(1);
2038 }
2039 var159 = var161;
2040 RET_LABEL160:(void)0;
2041 }
2042 }
2043 {
2044 { /* Inline kernel#Object#== (var159,var_mclass) on <var159:MClass> */
2045 var_other = var_mclass;
2046 {
2047 { /* Inline kernel#Object#is_same_instance (var159,var_other) on <var159:MClass> */
2048 var167 = var159 == var_other;
2049 var165 = var167;
2050 goto RET_LABEL166;
2051 RET_LABEL166:(void)0;
2052 }
2053 }
2054 var163 = var165;
2055 goto RET_LABEL164;
2056 RET_LABEL164:(void)0;
2057 }
2058 var162 = var163;
2059 }
2060 if (var162){
2061 {
2062 array__Array___91d_93d_61d(var_table, var_color120, var_mpropdef155); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
2063 }
2064 } else {
2065 }
2066 {
2067 array__ArrayIterator__next(var_152); /* Direct call array#ArrayIterator#next on <var_152:ArrayIterator[MVirtualTypeDef]>*/
2068 }
2069 } else {
2070 goto BREAK_label168;
2071 }
2072 }
2073 BREAK_label168: (void)0;
2074 {
2075 { /* Inline abstract_collection#Iterator#finish (var_152) on <var_152:ArrayIterator[MVirtualTypeDef]> */
2076 RET_LABEL169:(void)0;
2077 }
2078 }
2079 BREAK_label114: (void)0;
2080 {
2081 ((void (*)(val*))(var_106->class->vft[COLOR_abstract_collection__Iterator__next]))(var_106) /* next on <var_106:Iterator[MProperty]>*/;
2082 }
2083 } else {
2084 goto BREAK_label170;
2085 }
2086 }
2087 BREAK_label170: (void)0;
2088 {
2089 { /* Inline abstract_collection#Iterator#finish (var_106) on <var_106:Iterator[MProperty]> */
2090 RET_LABEL171:(void)0;
2091 }
2092 }
2093 {
2094 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]]>*/
2095 }
2096 {
2097 ((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[MClass]>*/;
2098 }
2099 } else {
2100 goto BREAK_label172;
2101 }
2102 }
2103 BREAK_label172: (void)0;
2104 {
2105 { /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[MClass]> */
2106 RET_LABEL173:(void)0;
2107 }
2108 }
2109 var = var_tables;
2110 goto RET_LABEL;
2111 RET_LABEL:;
2112 return var;
2113 }
2114 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
2115 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0) {
2116 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
2117 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
2118 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(self, p0);
2119 var = var1;
2120 RET_LABEL:;
2121 return var;
2122 }
2123 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MClass]] */
2124 val* separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
2125 val* var /* : Map[MClass, Array[nullable MClass]] */;
2126 val* var_mclasses /* var mclasses: Set[MClass] */;
2127 val* var1 /* : HashMap[MClass, Array[nullable MClass]] */;
2128 val* var_tables /* var tables: HashMap[MClass, Array[nullable MClass]] */;
2129 val* var_ /* var : Set[MClass] */;
2130 val* var2 /* : Iterator[nullable Object] */;
2131 val* var_3 /* var : Iterator[MClass] */;
2132 short int var4 /* : Bool */;
2133 val* var5 /* : nullable Object */;
2134 val* var_mclass /* var mclass: MClass */;
2135 val* var6 /* : Array[nullable MClass] */;
2136 val* var_table /* var table: Array[nullable MClass] */;
2137 val* var7 /* : Array[MClass] */;
2138 val* var_supers /* var supers: Array[MClass] */;
2139 val* var8 /* : MModule */;
2140 val* var10 /* : MModule */;
2141 val* var11 /* : POSet[MClass] */;
2142 short int var12 /* : Bool */;
2143 val* var13 /* : MModule */;
2144 val* var15 /* : MModule */;
2145 val* var16 /* : POSetElement[MClass] */;
2146 val* var17 /* : Collection[Object] */;
2147 val* var18 /* : Array[nullable Object] */;
2148 val* var_19 /* var : Array[MClass] */;
2149 val* var20 /* : ArrayIterator[nullable Object] */;
2150 val* var_21 /* var : ArrayIterator[MClass] */;
2151 short int var22 /* : Bool */;
2152 val* var23 /* : nullable Object */;
2153 val* var_sup /* var sup: MClass */;
2154 val* var24 /* : Map[MClass, Int] */;
2155 val* var26 /* : Map[MClass, Int] */;
2156 val* var27 /* : nullable Object */;
2157 long var28 /* : Int */;
2158 long var_color /* var color: Int */;
2159 long var29 /* : Int */;
2160 long var31 /* : Int */;
2161 short int var32 /* : Bool */;
2162 short int var34 /* : Bool */;
2163 int cltype;
2164 int idtype;
2165 const char* var_class_name;
2166 short int var35 /* : Bool */;
2167 long var36 /* : Int */;
2168 long var38 /* : Int */;
2169 long var_i /* var i: Int */;
2170 long var_39 /* var : Int */;
2171 short int var40 /* : Bool */;
2172 short int var42 /* : Bool */;
2173 int cltype43;
2174 int idtype44;
2175 const char* var_class_name45;
2176 short int var46 /* : Bool */;
2177 val* var47 /* : null */;
2178 long var48 /* : Int */;
2179 long var49 /* : Int */;
2180 var_mclasses = p0;
2181 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MClass);
2182 {
2183 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MClass]]>*/;
2184 }
2185 var_tables = var1;
2186 var_ = var_mclasses;
2187 {
2188 var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[MClass]>*/;
2189 }
2190 var_3 = var2;
2191 for(;;) {
2192 {
2193 var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[MClass]>*/;
2194 }
2195 if (var4){
2196 {
2197 var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[MClass]>*/;
2198 }
2199 var_mclass = var5;
2200 var6 = NEW_array__Array(&type_array__Arraynullable_model__MClass);
2201 {
2202 ((void (*)(val*))(var6->class->vft[COLOR_kernel__Object__init]))(var6) /* init on <var6:Array[nullable MClass]>*/;
2203 }
2204 var_table = var6;
2205 var7 = NEW_array__Array(&type_array__Arraymodel__MClass);
2206 {
2207 ((void (*)(val*))(var7->class->vft[COLOR_kernel__Object__init]))(var7) /* init on <var7:Array[MClass]>*/;
2208 }
2209 var_supers = var7;
2210 {
2211 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
2212 var10 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
2213 if (unlikely(var10 == NULL)) {
2214 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
2215 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
2216 show_backtrace(1);
2217 }
2218 var8 = var10;
2219 RET_LABEL9:(void)0;
2220 }
2221 }
2222 {
2223 var11 = model__MModule__flatten_mclass_hierarchy(var8);
2224 }
2225 {
2226 var12 = poset__POSet__has(var11, var_mclass);
2227 }
2228 if (var12){
2229 {
2230 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
2231 var15 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
2232 if (unlikely(var15 == NULL)) {
2233 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
2234 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
2235 show_backtrace(1);
2236 }
2237 var13 = var15;
2238 RET_LABEL14:(void)0;
2239 }
2240 }
2241 {
2242 var16 = model__MClass__in_hierarchy(var_mclass, var13);
2243 }
2244 {
2245 var17 = poset__POSetElement__greaters(var16);
2246 }
2247 {
2248 var18 = array__Collection__to_a(var17);
2249 }
2250 var_supers = var18;
2251 } else {
2252 }
2253 var_19 = var_supers;
2254 {
2255 var20 = array__AbstractArrayRead__iterator(var_19);
2256 }
2257 var_21 = var20;
2258 for(;;) {
2259 {
2260 var22 = array__ArrayIterator__is_ok(var_21);
2261 }
2262 if (var22){
2263 {
2264 var23 = array__ArrayIterator__item(var_21);
2265 }
2266 var_sup = var23;
2267 {
2268 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors (self) on <self:SeparateErasureCompiler> */
2269 var26 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
2270 if (unlikely(var26 == NULL)) {
2271 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
2272 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 105);
2273 show_backtrace(1);
2274 }
2275 var24 = var26;
2276 RET_LABEL25:(void)0;
2277 }
2278 }
2279 {
2280 var27 = ((val* (*)(val*, val*))(var24->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var24, var_sup) /* [] on <var24:Map[MClass, Int]>*/;
2281 }
2282 var28 = ((struct instance_kernel__Int*)var27)->value; /* autounbox from nullable Object to Int */;
2283 var_color = var28;
2284 {
2285 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MClass]> */
2286 var31 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MClass]> */
2287 var29 = var31;
2288 RET_LABEL30:(void)0;
2289 }
2290 }
2291 {
2292 { /* Inline kernel#Int#<= (var29,var_color) on <var29:Int> */
2293 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
2294 /* <var_color:Int> isa OTHER */
2295 var34 = 1; /* easy <var_color:Int> isa OTHER*/
2296 if (unlikely(!var34)) {
2297 var_class_name = type_kernel__Int.name;
2298 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
2299 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
2300 show_backtrace(1);
2301 }
2302 var35 = var29 <= var_color;
2303 var32 = var35;
2304 goto RET_LABEL33;
2305 RET_LABEL33:(void)0;
2306 }
2307 }
2308 if (var32){
2309 {
2310 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MClass]> */
2311 var38 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MClass]> */
2312 var36 = var38;
2313 RET_LABEL37:(void)0;
2314 }
2315 }
2316 var_i = var36;
2317 var_39 = var_color;
2318 for(;;) {
2319 {
2320 { /* Inline kernel#Int#< (var_i,var_39) on <var_i:Int> */
2321 /* Covariant cast for argument 0 (i) <var_39:Int> isa OTHER */
2322 /* <var_39:Int> isa OTHER */
2323 var42 = 1; /* easy <var_39:Int> isa OTHER*/
2324 if (unlikely(!var42)) {
2325 var_class_name45 = type_kernel__Int.name;
2326 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name45);
2327 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
2328 show_backtrace(1);
2329 }
2330 var46 = var_i < var_39;
2331 var40 = var46;
2332 goto RET_LABEL41;
2333 RET_LABEL41:(void)0;
2334 }
2335 }
2336 if (var40){
2337 var47 = NULL;
2338 {
2339 array__Array___91d_93d_61d(var_table, var_i, var47); /* Direct call array#Array#[]= on <var_table:Array[nullable MClass]>*/
2340 }
2341 var48 = 1;
2342 {
2343 var49 = kernel__Int__successor(var_i, var48);
2344 }
2345 var_i = var49;
2346 } else {
2347 goto BREAK_label;
2348 }
2349 }
2350 BREAK_label: (void)0;
2351 } else {
2352 }
2353 {
2354 array__Array___91d_93d_61d(var_table, var_color, var_sup); /* Direct call array#Array#[]= on <var_table:Array[nullable MClass]>*/
2355 }
2356 {
2357 array__ArrayIterator__next(var_21); /* Direct call array#ArrayIterator#next on <var_21:ArrayIterator[MClass]>*/
2358 }
2359 } else {
2360 goto BREAK_label50;
2361 }
2362 }
2363 BREAK_label50: (void)0;
2364 {
2365 { /* Inline abstract_collection#Iterator#finish (var_21) on <var_21:ArrayIterator[MClass]> */
2366 RET_LABEL51:(void)0;
2367 }
2368 }
2369 {
2370 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]]>*/
2371 }
2372 {
2373 ((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[MClass]>*/;
2374 }
2375 } else {
2376 goto BREAK_label52;
2377 }
2378 }
2379 BREAK_label52: (void)0;
2380 {
2381 { /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[MClass]> */
2382 RET_LABEL53:(void)0;
2383 }
2384 }
2385 var = var_tables;
2386 goto RET_LABEL;
2387 RET_LABEL:;
2388 return var;
2389 }
2390 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MClass]] */
2391 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
2392 val* var /* : Map[MClass, Array[nullable MClass]] */;
2393 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
2394 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(self, p0);
2395 var = var1;
2396 RET_LABEL:;
2397 return var;
2398 }
2399 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: SeparateErasureCompiler) */
2400 void separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
2401 val* var /* : CodeWriter */;
2402 val* var2 /* : CodeWriter */;
2403 static val* varonce;
2404 val* var3 /* : String */;
2405 char* var4 /* : NativeString */;
2406 long var5 /* : Int */;
2407 val* var6 /* : FlatString */;
2408 val* var7 /* : CodeWriter */;
2409 val* var9 /* : CodeWriter */;
2410 static val* varonce10;
2411 val* var11 /* : String */;
2412 char* var12 /* : NativeString */;
2413 long var13 /* : Int */;
2414 val* var14 /* : FlatString */;
2415 val* var15 /* : CodeWriter */;
2416 val* var17 /* : CodeWriter */;
2417 static val* varonce18;
2418 val* var19 /* : String */;
2419 char* var20 /* : NativeString */;
2420 long var21 /* : Int */;
2421 val* var22 /* : FlatString */;
2422 val* var23 /* : CodeWriter */;
2423 val* var25 /* : CodeWriter */;
2424 static val* varonce26;
2425 val* var27 /* : String */;
2426 char* var28 /* : NativeString */;
2427 long var29 /* : Int */;
2428 val* var30 /* : FlatString */;
2429 val* var31 /* : CodeWriter */;
2430 val* var33 /* : CodeWriter */;
2431 static val* varonce34;
2432 val* var35 /* : String */;
2433 char* var36 /* : NativeString */;
2434 long var37 /* : Int */;
2435 val* var38 /* : FlatString */;
2436 val* var39 /* : CodeWriter */;
2437 val* var41 /* : CodeWriter */;
2438 static val* varonce42;
2439 val* var43 /* : String */;
2440 char* var44 /* : NativeString */;
2441 long var45 /* : Int */;
2442 val* var46 /* : FlatString */;
2443 {
2444 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2445 var2 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2446 if (unlikely(var2 == NULL)) {
2447 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2448 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2449 show_backtrace(1);
2450 }
2451 var = var2;
2452 RET_LABEL1:(void)0;
2453 }
2454 }
2455 if (varonce) {
2456 var3 = varonce;
2457 } else {
2458 var4 = "typedef void(*nitmethod_t)(void); /* general C type representing a Nit method. */";
2459 var5 = 81;
2460 var6 = string__NativeString__to_s_with_length(var4, var5);
2461 var3 = var6;
2462 varonce = var3;
2463 }
2464 {
2465 abstract_compiler__CodeWriter__add_decl(var, var3); /* Direct call abstract_compiler#CodeWriter#add_decl on <var:CodeWriter>*/
2466 }
2467 {
2468 separate_compiler__SeparateCompiler__compile_header_attribute_structs(self); /* Direct call separate_compiler#SeparateCompiler#compile_header_attribute_structs on <self:SeparateErasureCompiler>*/
2469 }
2470 {
2471 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2472 var9 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2473 if (unlikely(var9 == NULL)) {
2474 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2475 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2476 show_backtrace(1);
2477 }
2478 var7 = var9;
2479 RET_LABEL8:(void)0;
2480 }
2481 }
2482 if (varonce10) {
2483 var11 = varonce10;
2484 } else {
2485 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. */";
2486 var13 = 206;
2487 var14 = string__NativeString__to_s_with_length(var12, var13);
2488 var11 = var14;
2489 varonce10 = var11;
2490 }
2491 {
2492 abstract_compiler__CodeWriter__add_decl(var7, var11); /* Direct call abstract_compiler#CodeWriter#add_decl on <var7:CodeWriter>*/
2493 }
2494 {
2495 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2496 var17 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2497 if (unlikely(var17 == NULL)) {
2498 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2499 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2500 show_backtrace(1);
2501 }
2502 var15 = var17;
2503 RET_LABEL16:(void)0;
2504 }
2505 }
2506 if (varonce18) {
2507 var19 = varonce18;
2508 } else {
2509 var20 = "struct type_table { int size; int table[]; }; /* colorized type table. */";
2510 var21 = 73;
2511 var22 = string__NativeString__to_s_with_length(var20, var21);
2512 var19 = var22;
2513 varonce18 = var19;
2514 }
2515 {
2516 abstract_compiler__CodeWriter__add_decl(var15, var19); /* Direct call abstract_compiler#CodeWriter#add_decl on <var15:CodeWriter>*/
2517 }
2518 {
2519 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2520 var25 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2521 if (unlikely(var25 == NULL)) {
2522 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2523 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2524 show_backtrace(1);
2525 }
2526 var23 = var25;
2527 RET_LABEL24:(void)0;
2528 }
2529 }
2530 if (varonce26) {
2531 var27 = varonce26;
2532 } else {
2533 var28 = "struct vts_entry { short int is_nullable; const struct class *class; }; /* link (nullable or not) between the vts and is bound. */";
2534 var29 = 130;
2535 var30 = string__NativeString__to_s_with_length(var28, var29);
2536 var27 = var30;
2537 varonce26 = var27;
2538 }
2539 {
2540 abstract_compiler__CodeWriter__add_decl(var23, var27); /* Direct call abstract_compiler#CodeWriter#add_decl on <var23:CodeWriter>*/
2541 }
2542 {
2543 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2544 var33 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2545 if (unlikely(var33 == NULL)) {
2546 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2547 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2548 show_backtrace(1);
2549 }
2550 var31 = var33;
2551 RET_LABEL32:(void)0;
2552 }
2553 }
2554 if (varonce34) {
2555 var35 = varonce34;
2556 } else {
2557 var36 = "struct vts_table { int dummy; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
2558 var37 = 105;
2559 var38 = string__NativeString__to_s_with_length(var36, var37);
2560 var35 = var38;
2561 varonce34 = var35;
2562 }
2563 {
2564 abstract_compiler__CodeWriter__add_decl(var31, var35); /* Direct call abstract_compiler#CodeWriter#add_decl on <var31:CodeWriter>*/
2565 }
2566 {
2567 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2568 var41 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2569 if (unlikely(var41 == NULL)) {
2570 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2571 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2572 show_backtrace(1);
2573 }
2574 var39 = var41;
2575 RET_LABEL40:(void)0;
2576 }
2577 }
2578 if (varonce42) {
2579 var43 = varonce42;
2580 } else {
2581 var44 = "typedef struct instance { const struct class *class; nitattribute_t attrs[1]; } val; /* general C type representing a Nit instance. */";
2582 var45 = 134;
2583 var46 = string__NativeString__to_s_with_length(var44, var45);
2584 var43 = var46;
2585 varonce42 = var43;
2586 }
2587 {
2588 abstract_compiler__CodeWriter__add_decl(var39, var43); /* Direct call abstract_compiler#CodeWriter#add_decl on <var39:CodeWriter>*/
2589 }
2590 RET_LABEL:;
2591 }
2592 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: Object) */
2593 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
2594 separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(self); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs on <self:Object(SeparateErasureCompiler)>*/
2595 RET_LABEL:;
2596 }
2597 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: SeparateErasureCompiler, MClass) */
2598 void separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
2599 val* var_mclass /* var mclass: MClass */;
2600 val* var /* : MClassDef */;
2601 val* var2 /* : MClassDef */;
2602 val* var3 /* : MClassType */;
2603 val* var5 /* : MClassType */;
2604 val* var_mtype /* var mtype: MClassType */;
2605 val* var6 /* : String */;
2606 val* var_c_name /* var c_name: String */;
2607 val* var7 /* : Map[MClass, Array[nullable MPropDef]] */;
2608 val* var9 /* : Map[MClass, Array[nullable MPropDef]] */;
2609 val* var10 /* : nullable Object */;
2610 val* var_vft /* var vft: Array[nullable MPropDef] */;
2611 val* var11 /* : Map[MClass, Array[nullable MPropDef]] */;
2612 val* var13 /* : Map[MClass, Array[nullable MPropDef]] */;
2613 val* var14 /* : nullable Object */;
2614 val* var_attrs /* var attrs: Array[nullable MPropDef] */;
2615 val* var15 /* : Map[MClass, Array[nullable MClass]] */;
2616 val* var17 /* : Map[MClass, Array[nullable MClass]] */;
2617 val* var18 /* : nullable Object */;
2618 val* var_class_table /* var class_table: Array[nullable MClass] */;
2619 val* var19 /* : SeparateCompilerVisitor */;
2620 val* var_v /* var v: SeparateCompilerVisitor */;
2621 val* var20 /* : nullable RapidTypeAnalysis */;
2622 val* var22 /* : nullable RapidTypeAnalysis */;
2623 val* var_rta /* var rta: nullable RapidTypeAnalysis */;
2624 short int var23 /* : Bool */;
2625 short int var_is_dead /* var is_dead: Bool */;
2626 short int var24 /* : Bool */;
2627 short int var25 /* : Bool */;
2628 short int var26 /* : Bool */;
2629 short int var27 /* : Bool */;
2630 short int var28 /* : Bool */;
2631 short int var_ /* var : Bool */;
2632 val* var29 /* : null */;
2633 short int var30 /* : Bool */;
2634 short int var31 /* : Bool */;
2635 val* var_other /* var other: nullable Object */;
2636 short int var33 /* : Bool */;
2637 short int var34 /* : Bool */;
2638 short int var35 /* : Bool */;
2639 short int var_36 /* var : Bool */;
2640 val* var37 /* : HashSet[MClass] */;
2641 val* var39 /* : HashSet[MClass] */;
2642 short int var40 /* : Bool */;
2643 short int var41 /* : Bool */;
2644 short int var_42 /* var : Bool */;
2645 val* var43 /* : String */;
2646 static val* varonce;
2647 val* var44 /* : String */;
2648 char* var45 /* : NativeString */;
2649 long var46 /* : Int */;
2650 val* var47 /* : FlatString */;
2651 short int var48 /* : Bool */;
2652 short int var49 /* : Bool */;
2653 short int var_50 /* var : Bool */;
2654 val* var51 /* : String */;
2655 val* var53 /* : String */;
2656 static val* varonce54;
2657 val* var55 /* : String */;
2658 char* var56 /* : NativeString */;
2659 long var57 /* : Int */;
2660 val* var58 /* : FlatString */;
2661 short int var59 /* : Bool */;
2662 short int var60 /* : Bool */;
2663 short int var62 /* : Bool */;
2664 short int var63 /* : Bool */;
2665 short int var64 /* : Bool */;
2666 short int var65 /* : Bool */;
2667 static val* varonce66;
2668 val* var67 /* : String */;
2669 char* var68 /* : NativeString */;
2670 long var69 /* : Int */;
2671 val* var70 /* : FlatString */;
2672 static val* varonce71;
2673 val* var72 /* : String */;
2674 char* var73 /* : NativeString */;
2675 long var74 /* : Int */;
2676 val* var75 /* : FlatString */;
2677 val* var76 /* : Array[Object] */;
2678 long var77 /* : Int */;
2679 val* var78 /* : NativeArray[Object] */;
2680 val* var79 /* : String */;
2681 static val* varonce80;
2682 val* var81 /* : String */;
2683 char* var82 /* : NativeString */;
2684 long var83 /* : Int */;
2685 val* var84 /* : FlatString */;
2686 val* var85 /* : Array[Object] */;
2687 long var86 /* : Int */;
2688 val* var87 /* : NativeArray[Object] */;
2689 val* var88 /* : String */;
2690 static val* varonce89;
2691 val* var90 /* : String */;
2692 char* var91 /* : NativeString */;
2693 long var92 /* : Int */;
2694 val* var93 /* : FlatString */;
2695 static val* varonce94;
2696 val* var95 /* : String */;
2697 char* var96 /* : NativeString */;
2698 long var97 /* : Int */;
2699 val* var98 /* : FlatString */;
2700 val* var99 /* : Array[Object] */;
2701 long var100 /* : Int */;
2702 val* var101 /* : NativeArray[Object] */;
2703 val* var102 /* : String */;
2704 static val* varonce103;
2705 val* var104 /* : String */;
2706 char* var105 /* : NativeString */;
2707 long var106 /* : Int */;
2708 val* var107 /* : FlatString */;
2709 static val* varonce108;
2710 val* var109 /* : String */;
2711 char* var110 /* : NativeString */;
2712 long var111 /* : Int */;
2713 val* var112 /* : FlatString */;
2714 val* var113 /* : Array[Object] */;
2715 long var114 /* : Int */;
2716 val* var115 /* : NativeArray[Object] */;
2717 val* var116 /* : String */;
2718 static val* varonce117;
2719 val* var118 /* : String */;
2720 char* var119 /* : NativeString */;
2721 long var120 /* : Int */;
2722 val* var121 /* : FlatString */;
2723 static val* varonce122;
2724 val* var123 /* : String */;
2725 char* var124 /* : NativeString */;
2726 long var125 /* : Int */;
2727 val* var126 /* : FlatString */;
2728 val* var127 /* : Array[Object] */;
2729 long var128 /* : Int */;
2730 val* var129 /* : NativeArray[Object] */;
2731 val* var130 /* : String */;
2732 val* var131 /* : Map[MClass, Int] */;
2733 val* var133 /* : Map[MClass, Int] */;
2734 val* var134 /* : nullable Object */;
2735 static val* varonce135;
2736 val* var136 /* : String */;
2737 char* var137 /* : NativeString */;
2738 long var138 /* : Int */;
2739 val* var139 /* : FlatString */;
2740 val* var140 /* : Array[Object] */;
2741 long var141 /* : Int */;
2742 val* var142 /* : NativeArray[Object] */;
2743 val* var143 /* : String */;
2744 static val* varonce144;
2745 val* var145 /* : String */;
2746 char* var146 /* : NativeString */;
2747 long var147 /* : Int */;
2748 val* var148 /* : FlatString */;
2749 val* var149 /* : String */;
2750 val* var151 /* : String */;
2751 static val* varonce152;
2752 val* var153 /* : String */;
2753 char* var154 /* : NativeString */;
2754 long var155 /* : Int */;
2755 val* var156 /* : FlatString */;
2756 val* var157 /* : Array[Object] */;
2757 long var158 /* : Int */;
2758 val* var159 /* : NativeArray[Object] */;
2759 val* var160 /* : String */;
2760 long var161 /* : Int */;
2761 static val* varonce162;
2762 val* var163 /* : String */;
2763 char* var164 /* : NativeString */;
2764 long var165 /* : Int */;
2765 val* var166 /* : FlatString */;
2766 val* var167 /* : Array[Object] */;
2767 long var168 /* : Int */;
2768 val* var169 /* : NativeArray[Object] */;
2769 val* var170 /* : Object */;
2770 val* var171 /* : String */;
2771 val* var172 /* : Map[MClass, Int] */;
2772 val* var174 /* : Map[MClass, Int] */;
2773 val* var175 /* : nullable Object */;
2774 static val* varonce176;
2775 val* var177 /* : String */;
2776 char* var178 /* : NativeString */;
2777 long var179 /* : Int */;
2778 val* var180 /* : FlatString */;
2779 val* var181 /* : Array[Object] */;
2780 long var182 /* : Int */;
2781 val* var183 /* : NativeArray[Object] */;
2782 val* var184 /* : String */;
2783 short int var185 /* : Bool */;
2784 short int var186 /* : Bool */;
2785 static val* varonce187;
2786 val* var188 /* : String */;
2787 char* var189 /* : NativeString */;
2788 long var190 /* : Int */;
2789 val* var191 /* : FlatString */;
2790 val* var192 /* : Array[Object] */;
2791 long var193 /* : Int */;
2792 val* var194 /* : NativeArray[Object] */;
2793 val* var195 /* : String */;
2794 static val* varonce196;
2795 val* var197 /* : String */;
2796 char* var198 /* : NativeString */;
2797 long var199 /* : Int */;
2798 val* var200 /* : FlatString */;
2799 static val* varonce201;
2800 val* var202 /* : String */;
2801 char* var203 /* : NativeString */;
2802 long var204 /* : Int */;
2803 val* var205 /* : FlatString */;
2804 val* var206 /* : Array[Object] */;
2805 long var207 /* : Int */;
2806 val* var208 /* : NativeArray[Object] */;
2807 val* var209 /* : String */;
2808 static val* varonce210;
2809 val* var211 /* : String */;
2810 char* var212 /* : NativeString */;
2811 long var213 /* : Int */;
2812 val* var214 /* : FlatString */;
2813 static val* varonce215;
2814 val* var216 /* : String */;
2815 char* var217 /* : NativeString */;
2816 long var218 /* : Int */;
2817 val* var219 /* : FlatString */;
2818 static val* varonce220;
2819 val* var221 /* : String */;
2820 char* var222 /* : NativeString */;
2821 long var223 /* : Int */;
2822 val* var224 /* : FlatString */;
2823 val* var225 /* : Array[Object] */;
2824 long var226 /* : Int */;
2825 val* var227 /* : NativeArray[Object] */;
2826 val* var228 /* : String */;
2827 static val* varonce229;
2828 val* var230 /* : String */;
2829 char* var231 /* : NativeString */;
2830 long var232 /* : Int */;
2831 val* var233 /* : FlatString */;
2832 long var234 /* : Int */;
2833 long var_i /* var i: Int */;
2834 long var235 /* : Int */;
2835 long var237 /* : Int */;
2836 long var_238 /* var : Int */;
2837 short int var239 /* : Bool */;
2838 short int var241 /* : Bool */;
2839 int cltype;
2840 int idtype;
2841 const char* var_class_name;
2842 short int var242 /* : Bool */;
2843 val* var243 /* : nullable Object */;
2844 val* var_mpropdef /* var mpropdef: nullable MPropDef */;
2845 val* var244 /* : null */;
2846 short int var245 /* : Bool */;
2847 short int var246 /* : Bool */;
2848 val* var_other248 /* var other: nullable Object */;
2849 short int var249 /* : Bool */;
2850 short int var251 /* : Bool */;
2851 static val* varonce252;
2852 val* var253 /* : String */;
2853 char* var254 /* : NativeString */;
2854 long var255 /* : Int */;
2855 val* var256 /* : FlatString */;
2856 short int var257 /* : Bool */;
2857 int cltype258;
2858 int idtype259;
2859 short int var260 /* : Bool */;
2860 val* var261 /* : null */;
2861 short int var262 /* : Bool */;
2862 short int var263 /* : Bool */;
2863 short int var265 /* : Bool */;
2864 short int var266 /* : Bool */;
2865 short int var267 /* : Bool */;
2866 short int var_268 /* var : Bool */;
2867 val* var269 /* : HashSet[MMethodDef] */;
2868 val* var271 /* : HashSet[MMethodDef] */;
2869 short int var272 /* : Bool */;
2870 short int var273 /* : Bool */;
2871 static val* varonce274;
2872 val* var275 /* : String */;
2873 char* var276 /* : NativeString */;
2874 long var277 /* : Int */;
2875 val* var278 /* : FlatString */;
2876 val* var279 /* : MModule */;
2877 val* var281 /* : MModule */;
2878 static val* varonce282;
2879 val* var283 /* : String */;
2880 char* var284 /* : NativeString */;
2881 long var285 /* : Int */;
2882 val* var286 /* : FlatString */;
2883 static val* varonce287;
2884 val* var288 /* : String */;
2885 char* var289 /* : NativeString */;
2886 long var290 /* : Int */;
2887 val* var291 /* : FlatString */;
2888 static val* varonce292;
2889 val* var293 /* : String */;
2890 char* var294 /* : NativeString */;
2891 long var295 /* : Int */;
2892 val* var296 /* : FlatString */;
2893 val* var297 /* : Array[Object] */;
2894 long var298 /* : Int */;
2895 val* var299 /* : NativeArray[Object] */;
2896 val* var300 /* : String */;
2897 short int var301 /* : Bool */;
2898 short int var302 /* : Bool */;
2899 short int var_303 /* var : Bool */;
2900 val* var304 /* : MClassDef */;
2901 val* var306 /* : MClassDef */;
2902 val* var307 /* : MClassType */;
2903 val* var309 /* : MClassType */;
2904 val* var310 /* : String */;
2905 static val* varonce311;
2906 val* var312 /* : String */;
2907 char* var313 /* : NativeString */;
2908 long var314 /* : Int */;
2909 val* var315 /* : FlatString */;
2910 short int var316 /* : Bool */;
2911 short int var317 /* : Bool */;
2912 short int var319 /* : Bool */;
2913 short int var320 /* : Bool */;
2914 short int var321 /* : Bool */;
2915 static val* varonce322;
2916 val* var323 /* : String */;
2917 char* var324 /* : NativeString */;
2918 long var325 /* : Int */;
2919 val* var326 /* : FlatString */;
2920 val* var327 /* : String */;
2921 val* var328 /* : Array[Object] */;
2922 long var329 /* : Int */;
2923 val* var330 /* : NativeArray[Object] */;
2924 val* var331 /* : String */;
2925 static val* varonce332;
2926 val* var333 /* : String */;
2927 char* var334 /* : NativeString */;
2928 long var335 /* : Int */;
2929 val* var336 /* : FlatString */;
2930 val* var337 /* : String */;
2931 static val* varonce338;
2932 val* var339 /* : String */;
2933 char* var340 /* : NativeString */;
2934 long var341 /* : Int */;
2935 val* var342 /* : FlatString */;
2936 val* var343 /* : MModule */;
2937 val* var345 /* : MModule */;
2938 static val* varonce346;
2939 val* var347 /* : String */;
2940 char* var348 /* : NativeString */;
2941 long var349 /* : Int */;
2942 val* var350 /* : FlatString */;
2943 static val* varonce351;
2944 val* var352 /* : String */;
2945 char* var353 /* : NativeString */;
2946 long var354 /* : Int */;
2947 val* var355 /* : FlatString */;
2948 static val* varonce356;
2949 val* var357 /* : String */;
2950 char* var358 /* : NativeString */;
2951 long var359 /* : Int */;
2952 val* var360 /* : FlatString */;
2953 val* var361 /* : Array[Object] */;
2954 long var362 /* : Int */;
2955 val* var363 /* : NativeArray[Object] */;
2956 val* var364 /* : String */;
2957 val* var365 /* : String */;
2958 val* var366 /* : Array[Object] */;
2959 long var367 /* : Int */;
2960 val* var368 /* : NativeArray[Object] */;
2961 val* var369 /* : String */;
2962 static val* varonce370;
2963 val* var371 /* : String */;
2964 char* var372 /* : NativeString */;
2965 long var373 /* : Int */;
2966 val* var374 /* : FlatString */;
2967 val* var375 /* : String */;
2968 static val* varonce376;
2969 val* var377 /* : String */;
2970 char* var378 /* : NativeString */;
2971 long var379 /* : Int */;
2972 val* var380 /* : FlatString */;
2973 val* var381 /* : MModule */;
2974 val* var383 /* : MModule */;
2975 static val* varonce384;
2976 val* var385 /* : String */;
2977 char* var386 /* : NativeString */;
2978 long var387 /* : Int */;
2979 val* var388 /* : FlatString */;
2980 static val* varonce389;
2981 val* var390 /* : String */;
2982 char* var391 /* : NativeString */;
2983 long var392 /* : Int */;
2984 val* var393 /* : FlatString */;
2985 static val* varonce394;
2986 val* var395 /* : String */;
2987 char* var396 /* : NativeString */;
2988 long var397 /* : Int */;
2989 val* var398 /* : FlatString */;
2990 val* var399 /* : Array[Object] */;
2991 long var400 /* : Int */;
2992 val* var401 /* : NativeArray[Object] */;
2993 val* var402 /* : String */;
2994 long var403 /* : Int */;
2995 long var404 /* : Int */;
2996 static val* varonce406;
2997 val* var407 /* : String */;
2998 char* var408 /* : NativeString */;
2999 long var409 /* : Int */;
3000 val* var410 /* : FlatString */;
3001 static val* varonce411;
3002 val* var412 /* : String */;
3003 char* var413 /* : NativeString */;
3004 long var414 /* : Int */;
3005 val* var415 /* : FlatString */;
3006 static val* varonce416;
3007 val* var417 /* : String */;
3008 char* var418 /* : NativeString */;
3009 long var419 /* : Int */;
3010 val* var420 /* : FlatString */;
3011 static val* varonce421;
3012 val* var422 /* : String */;
3013 char* var423 /* : NativeString */;
3014 long var424 /* : Int */;
3015 val* var425 /* : FlatString */;
3016 val* var426 /* : Array[Object] */;
3017 long var427 /* : Int */;
3018 val* var428 /* : NativeArray[Object] */;
3019 val* var429 /* : String */;
3020 long var430 /* : Int */;
3021 long var432 /* : Int */;
3022 static val* varonce433;
3023 val* var434 /* : String */;
3024 char* var435 /* : NativeString */;
3025 long var436 /* : Int */;
3026 val* var437 /* : FlatString */;
3027 val* var438 /* : Array[Object] */;
3028 long var439 /* : Int */;
3029 val* var440 /* : NativeArray[Object] */;
3030 val* var441 /* : Object */;
3031 val* var442 /* : String */;
3032 static val* varonce443;
3033 val* var444 /* : String */;
3034 char* var445 /* : NativeString */;
3035 long var446 /* : Int */;
3036 val* var447 /* : FlatString */;
3037 val* var_448 /* var : Array[nullable MClass] */;
3038 val* var449 /* : ArrayIterator[nullable Object] */;
3039 val* var_450 /* var : ArrayIterator[nullable MClass] */;
3040 short int var451 /* : Bool */;
3041 val* var452 /* : nullable Object */;
3042 val* var_msuper /* var msuper: nullable MClass */;
3043 val* var453 /* : null */;
3044 short int var454 /* : Bool */;
3045 short int var455 /* : Bool */;
3046 short int var457 /* : Bool */;
3047 short int var459 /* : Bool */;
3048 static val* varonce460;
3049 val* var461 /* : String */;
3050 char* var462 /* : NativeString */;
3051 long var463 /* : Int */;
3052 val* var464 /* : FlatString */;
3053 val* var465 /* : Map[MClass, Int] */;
3054 val* var467 /* : Map[MClass, Int] */;
3055 val* var468 /* : nullable Object */;
3056 static val* varonce469;
3057 val* var470 /* : String */;
3058 char* var471 /* : NativeString */;
3059 long var472 /* : Int */;
3060 val* var473 /* : FlatString */;
3061 static val* varonce474;
3062 val* var475 /* : String */;
3063 char* var476 /* : NativeString */;
3064 long var477 /* : Int */;
3065 val* var478 /* : FlatString */;
3066 val* var479 /* : Array[Object] */;
3067 long var480 /* : Int */;
3068 val* var481 /* : NativeArray[Object] */;
3069 val* var482 /* : String */;
3070 static val* varonce485;
3071 val* var486 /* : String */;
3072 char* var487 /* : NativeString */;
3073 long var488 /* : Int */;
3074 val* var489 /* : FlatString */;
3075 static val* varonce490;
3076 val* var491 /* : String */;
3077 char* var492 /* : NativeString */;
3078 long var493 /* : Int */;
3079 val* var494 /* : FlatString */;
3080 short int var495 /* : Bool */;
3081 val* var496 /* : String */;
3082 static val* varonce497;
3083 val* var498 /* : String */;
3084 char* var499 /* : NativeString */;
3085 long var500 /* : Int */;
3086 val* var501 /* : FlatString */;
3087 short int var502 /* : Bool */;
3088 short int var503 /* : Bool */;
3089 short int var505 /* : Bool */;
3090 short int var506 /* : Bool */;
3091 short int var507 /* : Bool */;
3092 short int var_508 /* var : Bool */;
3093 val* var509 /* : MClass */;
3094 val* var511 /* : MClass */;
3095 val* var512 /* : String */;
3096 val* var514 /* : String */;
3097 static val* varonce515;
3098 val* var516 /* : String */;
3099 char* var517 /* : NativeString */;
3100 long var518 /* : Int */;
3101 val* var519 /* : FlatString */;
3102 short int var520 /* : Bool */;
3103 short int var521 /* : Bool */;
3104 val* var522 /* : CodeWriter */;
3105 val* var524 /* : CodeWriter */;
3106 static val* varonce525;
3107 val* var526 /* : String */;
3108 char* var527 /* : NativeString */;
3109 long var528 /* : Int */;
3110 val* var529 /* : FlatString */;
3111 static val* varonce530;
3112 val* var531 /* : String */;
3113 char* var532 /* : NativeString */;
3114 long var533 /* : Int */;
3115 val* var534 /* : FlatString */;
3116 val* var535 /* : Array[Object] */;
3117 long var536 /* : Int */;
3118 val* var537 /* : NativeArray[Object] */;
3119 val* var538 /* : String */;
3120 val* var539 /* : CodeWriter */;
3121 val* var541 /* : CodeWriter */;
3122 static val* varonce542;
3123 val* var543 /* : String */;
3124 char* var544 /* : NativeString */;
3125 long var545 /* : Int */;
3126 val* var546 /* : FlatString */;
3127 val* var547 /* : CodeWriter */;
3128 val* var549 /* : CodeWriter */;
3129 val* var550 /* : String */;
3130 static val* varonce551;
3131 val* var552 /* : String */;
3132 char* var553 /* : NativeString */;
3133 long var554 /* : Int */;
3134 val* var555 /* : FlatString */;
3135 val* var556 /* : Array[Object] */;
3136 long var557 /* : Int */;
3137 val* var558 /* : NativeArray[Object] */;
3138 val* var559 /* : String */;
3139 val* var560 /* : CodeWriter */;
3140 val* var562 /* : CodeWriter */;
3141 static val* varonce563;
3142 val* var564 /* : String */;
3143 char* var565 /* : NativeString */;
3144 long var566 /* : Int */;
3145 val* var567 /* : FlatString */;
3146 static val* varonce568;
3147 val* var569 /* : String */;
3148 char* var570 /* : NativeString */;
3149 long var571 /* : Int */;
3150 val* var572 /* : FlatString */;
3151 val* var573 /* : Array[Object] */;
3152 long var574 /* : Int */;
3153 val* var575 /* : NativeArray[Object] */;
3154 val* var576 /* : String */;
3155 static val* varonce577;
3156 val* var578 /* : String */;
3157 char* var579 /* : NativeString */;
3158 long var580 /* : Int */;
3159 val* var581 /* : FlatString */;
3160 static val* varonce582;
3161 val* var583 /* : String */;
3162 char* var584 /* : NativeString */;
3163 long var585 /* : Int */;
3164 val* var586 /* : FlatString */;
3165 val* var587 /* : String */;
3166 static val* varonce588;
3167 val* var589 /* : String */;
3168 char* var590 /* : NativeString */;
3169 long var591 /* : Int */;
3170 val* var592 /* : FlatString */;
3171 val* var593 /* : Array[Object] */;
3172 long var594 /* : Int */;
3173 val* var595 /* : NativeArray[Object] */;
3174 val* var596 /* : String */;
3175 static val* varonce597;
3176 val* var598 /* : String */;
3177 char* var599 /* : NativeString */;
3178 long var600 /* : Int */;
3179 val* var601 /* : FlatString */;
3180 static val* varonce602;
3181 val* var603 /* : String */;
3182 char* var604 /* : NativeString */;
3183 long var605 /* : Int */;
3184 val* var606 /* : FlatString */;
3185 val* var607 /* : Array[Object] */;
3186 long var608 /* : Int */;
3187 val* var609 /* : NativeArray[Object] */;
3188 val* var610 /* : String */;
3189 static val* varonce611;
3190 val* var612 /* : String */;
3191 char* var613 /* : NativeString */;
3192 long var614 /* : Int */;
3193 val* var615 /* : FlatString */;
3194 val* var616 /* : String */;
3195 static val* varonce617;
3196 val* var618 /* : String */;
3197 char* var619 /* : NativeString */;
3198 long var620 /* : Int */;
3199 val* var621 /* : FlatString */;
3200 val* var622 /* : String */;
3201 static val* varonce623;
3202 val* var624 /* : String */;
3203 char* var625 /* : NativeString */;
3204 long var626 /* : Int */;
3205 val* var627 /* : FlatString */;
3206 val* var628 /* : Array[Object] */;
3207 long var629 /* : Int */;
3208 val* var630 /* : NativeArray[Object] */;
3209 val* var631 /* : String */;
3210 static val* varonce632;
3211 val* var633 /* : String */;
3212 char* var634 /* : NativeString */;
3213 long var635 /* : Int */;
3214 val* var636 /* : FlatString */;
3215 static val* varonce637;
3216 val* var638 /* : String */;
3217 char* var639 /* : NativeString */;
3218 long var640 /* : Int */;
3219 val* var641 /* : FlatString */;
3220 static val* varonce642;
3221 val* var643 /* : String */;
3222 char* var644 /* : NativeString */;
3223 long var645 /* : Int */;
3224 val* var646 /* : FlatString */;
3225 val* var647 /* : Array[Object] */;
3226 long var648 /* : Int */;
3227 val* var649 /* : NativeArray[Object] */;
3228 val* var650 /* : String */;
3229 static val* varonce651;
3230 val* var652 /* : String */;
3231 char* var653 /* : NativeString */;
3232 long var654 /* : Int */;
3233 val* var655 /* : FlatString */;
3234 val* var656 /* : Array[Object] */;
3235 long var657 /* : Int */;
3236 val* var658 /* : NativeArray[Object] */;
3237 val* var659 /* : String */;
3238 static val* varonce660;
3239 val* var661 /* : String */;
3240 char* var662 /* : NativeString */;
3241 long var663 /* : Int */;
3242 val* var664 /* : FlatString */;
3243 static val* varonce665;
3244 val* var666 /* : String */;
3245 char* var667 /* : NativeString */;
3246 long var668 /* : Int */;
3247 val* var669 /* : FlatString */;
3248 val* var670 /* : Array[Object] */;
3249 long var671 /* : Int */;
3250 val* var672 /* : NativeArray[Object] */;
3251 val* var673 /* : String */;
3252 static val* varonce674;
3253 val* var675 /* : String */;
3254 char* var676 /* : NativeString */;
3255 long var677 /* : Int */;
3256 val* var678 /* : FlatString */;
3257 static val* varonce679;
3258 val* var680 /* : String */;
3259 char* var681 /* : NativeString */;
3260 long var682 /* : Int */;
3261 val* var683 /* : FlatString */;
3262 static val* varonce684;
3263 val* var685 /* : String */;
3264 char* var686 /* : NativeString */;
3265 long var687 /* : Int */;
3266 val* var688 /* : FlatString */;
3267 val* var689 /* : MClass */;
3268 val* var691 /* : MClass */;
3269 val* var692 /* : String */;
3270 val* var694 /* : String */;
3271 static val* varonce695;
3272 val* var696 /* : String */;
3273 char* var697 /* : NativeString */;
3274 long var698 /* : Int */;
3275 val* var699 /* : FlatString */;
3276 short int var700 /* : Bool */;
3277 short int var701 /* : Bool */;
3278 short int var703 /* : Bool */;
3279 short int var704 /* : Bool */;
3280 short int var705 /* : Bool */;
3281 val* var706 /* : SeparateCompilerVisitor */;
3282 static val* varonce707;
3283 val* var708 /* : String */;
3284 char* var709 /* : NativeString */;
3285 long var710 /* : Int */;
3286 val* var711 /* : FlatString */;
3287 val* var712 /* : Array[Object] */;
3288 long var713 /* : Int */;
3289 val* var714 /* : NativeArray[Object] */;
3290 val* var715 /* : String */;
3291 val* var716 /* : String */;
3292 static val* varonce717;
3293 val* var718 /* : String */;
3294 char* var719 /* : NativeString */;
3295 long var720 /* : Int */;
3296 val* var721 /* : FlatString */;
3297 static val* varonce722;
3298 val* var723 /* : String */;
3299 char* var724 /* : NativeString */;
3300 long var725 /* : Int */;
3301 val* var726 /* : FlatString */;
3302 val* var727 /* : Array[Object] */;
3303 long var728 /* : Int */;
3304 val* var729 /* : NativeArray[Object] */;
3305 val* var730 /* : String */;
3306 static val* varonce731;
3307 val* var732 /* : String */;
3308 char* var733 /* : NativeString */;
3309 long var734 /* : Int */;
3310 val* var735 /* : FlatString */;
3311 static val* varonce736;
3312 val* var737 /* : String */;
3313 char* var738 /* : NativeString */;
3314 long var739 /* : Int */;
3315 val* var740 /* : FlatString */;
3316 val* var741 /* : Array[Object] */;
3317 long var742 /* : Int */;
3318 val* var743 /* : NativeArray[Object] */;
3319 val* var744 /* : String */;
3320 val* var745 /* : String */;
3321 static val* varonce746;
3322 val* var747 /* : String */;
3323 char* var748 /* : NativeString */;
3324 long var749 /* : Int */;
3325 val* var750 /* : FlatString */;
3326 static val* varonce751;
3327 val* var752 /* : String */;
3328 char* var753 /* : NativeString */;
3329 long var754 /* : Int */;
3330 val* var755 /* : FlatString */;
3331 val* var756 /* : Array[Object] */;
3332 long var757 /* : Int */;
3333 val* var758 /* : NativeArray[Object] */;
3334 val* var759 /* : String */;
3335 static val* varonce760;
3336 val* var761 /* : String */;
3337 char* var762 /* : NativeString */;
3338 long var763 /* : Int */;
3339 val* var764 /* : FlatString */;
3340 val* var765 /* : Array[Object] */;
3341 long var766 /* : Int */;
3342 val* var767 /* : NativeArray[Object] */;
3343 val* var768 /* : String */;
3344 static val* varonce769;
3345 val* var770 /* : String */;
3346 char* var771 /* : NativeString */;
3347 long var772 /* : Int */;
3348 val* var773 /* : FlatString */;
3349 val* var774 /* : RuntimeVariable */;
3350 val* var_res /* var res: RuntimeVariable */;
3351 short int var775 /* : Bool */;
3352 static val* varonce777;
3353 val* var778 /* : String */;
3354 char* var779 /* : NativeString */;
3355 long var780 /* : Int */;
3356 val* var781 /* : FlatString */;
3357 val* var782 /* : String */;
3358 static val* varonce783;
3359 val* var784 /* : String */;
3360 char* var785 /* : NativeString */;
3361 long var786 /* : Int */;
3362 val* var787 /* : FlatString */;
3363 val* var788 /* : Array[Object] */;
3364 long var789 /* : Int */;
3365 val* var790 /* : NativeArray[Object] */;
3366 val* var791 /* : String */;
3367 static val* varonce792;
3368 val* var793 /* : String */;
3369 char* var794 /* : NativeString */;
3370 long var795 /* : Int */;
3371 val* var796 /* : FlatString */;
3372 val* var797 /* : Array[Object] */;
3373 long var798 /* : Int */;
3374 val* var799 /* : NativeArray[Object] */;
3375 val* var800 /* : String */;
3376 static val* varonce801;
3377 val* var802 /* : String */;
3378 char* var803 /* : NativeString */;
3379 long var804 /* : Int */;
3380 val* var805 /* : FlatString */;
3381 static val* varonce806;
3382 val* var807 /* : String */;
3383 char* var808 /* : NativeString */;
3384 long var809 /* : Int */;
3385 val* var810 /* : FlatString */;
3386 val* var811 /* : Array[Object] */;
3387 long var812 /* : Int */;
3388 val* var813 /* : NativeArray[Object] */;
3389 val* var814 /* : String */;
3390 static val* varonce815;
3391 val* var816 /* : String */;
3392 char* var817 /* : NativeString */;
3393 long var818 /* : Int */;
3394 val* var819 /* : FlatString */;
3395 val* var820 /* : String */;
3396 static val* varonce821;
3397 val* var822 /* : String */;
3398 char* var823 /* : NativeString */;
3399 long var824 /* : Int */;
3400 val* var825 /* : FlatString */;
3401 static val* varonce826;
3402 val* var827 /* : String */;
3403 char* var828 /* : NativeString */;
3404 long var829 /* : Int */;
3405 val* var830 /* : FlatString */;
3406 val* var831 /* : Array[Object] */;
3407 long var832 /* : Int */;
3408 val* var833 /* : NativeArray[Object] */;
3409 val* var834 /* : String */;
3410 static val* varonce835;
3411 val* var836 /* : String */;
3412 char* var837 /* : NativeString */;
3413 long var838 /* : Int */;
3414 val* var839 /* : FlatString */;
3415 static val* varonce840;
3416 val* var841 /* : String */;
3417 char* var842 /* : NativeString */;
3418 long var843 /* : Int */;
3419 val* var844 /* : FlatString */;
3420 val* var845 /* : Array[Object] */;
3421 long var846 /* : Int */;
3422 val* var847 /* : NativeArray[Object] */;
3423 val* var848 /* : String */;
3424 static val* varonce849;
3425 val* var850 /* : String */;
3426 char* var851 /* : NativeString */;
3427 long var852 /* : Int */;
3428 val* var853 /* : FlatString */;
3429 val* var854 /* : String */;
3430 val* var856 /* : String */;
3431 static val* varonce857;
3432 val* var858 /* : String */;
3433 char* var859 /* : NativeString */;
3434 long var860 /* : Int */;
3435 val* var861 /* : FlatString */;
3436 short int var862 /* : Bool */;
3437 short int var863 /* : Bool */;
3438 val* var864 /* : CodeWriter */;
3439 val* var866 /* : CodeWriter */;
3440 static val* varonce867;
3441 val* var868 /* : String */;
3442 char* var869 /* : NativeString */;
3443 long var870 /* : Int */;
3444 val* var871 /* : FlatString */;
3445 static val* varonce872;
3446 val* var873 /* : String */;
3447 char* var874 /* : NativeString */;
3448 long var875 /* : Int */;
3449 val* var876 /* : FlatString */;
3450 val* var877 /* : Array[Object] */;
3451 long var878 /* : Int */;
3452 val* var879 /* : NativeArray[Object] */;
3453 val* var880 /* : String */;
3454 val* var881 /* : CodeWriter */;
3455 val* var883 /* : CodeWriter */;
3456 static val* varonce884;
3457 val* var885 /* : String */;
3458 char* var886 /* : NativeString */;
3459 long var887 /* : Int */;
3460 val* var888 /* : FlatString */;
3461 val* var889 /* : CodeWriter */;
3462 val* var891 /* : CodeWriter */;
3463 static val* varonce892;
3464 val* var893 /* : String */;
3465 char* var894 /* : NativeString */;
3466 long var895 /* : Int */;
3467 val* var896 /* : FlatString */;
3468 val* var897 /* : CodeWriter */;
3469 val* var899 /* : CodeWriter */;
3470 static val* varonce900;
3471 val* var901 /* : String */;
3472 char* var902 /* : NativeString */;
3473 long var903 /* : Int */;
3474 val* var904 /* : FlatString */;
3475 val* var905 /* : CodeWriter */;
3476 val* var907 /* : CodeWriter */;
3477 static val* varonce908;
3478 val* var909 /* : String */;
3479 char* var910 /* : NativeString */;
3480 long var911 /* : Int */;
3481 val* var912 /* : FlatString */;
3482 static val* varonce913;
3483 val* var914 /* : String */;
3484 char* var915 /* : NativeString */;
3485 long var916 /* : Int */;
3486 val* var917 /* : FlatString */;
3487 val* var918 /* : Array[Object] */;
3488 long var919 /* : Int */;
3489 val* var920 /* : NativeArray[Object] */;
3490 val* var921 /* : String */;
3491 val* var922 /* : String */;
3492 static val* varonce923;
3493 val* var924 /* : String */;
3494 char* var925 /* : NativeString */;
3495 long var926 /* : Int */;
3496 val* var927 /* : FlatString */;
3497 static val* varonce928;
3498 val* var929 /* : String */;
3499 char* var930 /* : NativeString */;
3500 long var931 /* : Int */;
3501 val* var932 /* : FlatString */;
3502 val* var933 /* : Array[Object] */;
3503 long var934 /* : Int */;
3504 val* var935 /* : NativeArray[Object] */;
3505 val* var936 /* : String */;
3506 static val* varonce937;
3507 val* var938 /* : String */;
3508 char* var939 /* : NativeString */;
3509 long var940 /* : Int */;
3510 val* var941 /* : FlatString */;
3511 static val* varonce942;
3512 val* var943 /* : String */;
3513 char* var944 /* : NativeString */;
3514 long var945 /* : Int */;
3515 val* var946 /* : FlatString */;
3516 val* var947 /* : Array[Object] */;
3517 long var948 /* : Int */;
3518 val* var949 /* : NativeArray[Object] */;
3519 val* var950 /* : String */;
3520 val* var951 /* : String */;
3521 static val* varonce952;
3522 val* var953 /* : String */;
3523 char* var954 /* : NativeString */;
3524 long var955 /* : Int */;
3525 val* var956 /* : FlatString */;
3526 static val* varonce957;
3527 val* var958 /* : String */;
3528 char* var959 /* : NativeString */;
3529 long var960 /* : Int */;
3530 val* var961 /* : FlatString */;
3531 val* var962 /* : Array[Object] */;
3532 long var963 /* : Int */;
3533 val* var964 /* : NativeArray[Object] */;
3534 val* var965 /* : String */;
3535 static val* varonce966;
3536 val* var967 /* : String */;
3537 char* var968 /* : NativeString */;
3538 long var969 /* : Int */;
3539 val* var970 /* : FlatString */;
3540 val* var971 /* : String */;
3541 val* var_res972 /* var res: String */;
3542 static val* varonce973;
3543 val* var974 /* : String */;
3544 char* var975 /* : NativeString */;
3545 long var976 /* : Int */;
3546 val* var977 /* : FlatString */;
3547 static val* varonce978;
3548 val* var979 /* : String */;
3549 char* var980 /* : NativeString */;
3550 long var981 /* : Int */;
3551 val* var982 /* : FlatString */;
3552 static val* varonce983;
3553 val* var984 /* : String */;
3554 char* var985 /* : NativeString */;
3555 long var986 /* : Int */;
3556 val* var987 /* : FlatString */;
3557 val* var988 /* : Array[Object] */;
3558 long var989 /* : Int */;
3559 val* var990 /* : NativeArray[Object] */;
3560 val* var991 /* : String */;
3561 val* var992 /* : Array[MType] */;
3562 val* var994 /* : Array[MType] */;
3563 val* var995 /* : nullable Object */;
3564 val* var_mtype_elt /* var mtype_elt: MType */;
3565 static val* varonce996;
3566 val* var997 /* : String */;
3567 char* var998 /* : NativeString */;
3568 long var999 /* : Int */;
3569 val* var1000 /* : FlatString */;
3570 static val* varonce1001;
3571 val* var1002 /* : String */;
3572 char* var1003 /* : NativeString */;
3573 long var1004 /* : Int */;
3574 val* var1005 /* : FlatString */;
3575 val* var1006 /* : String */;
3576 static val* varonce1007;
3577 val* var1008 /* : String */;
3578 char* var1009 /* : NativeString */;
3579 long var1010 /* : Int */;
3580 val* var1011 /* : FlatString */;
3581 val* var1012 /* : Array[Object] */;
3582 long var1013 /* : Int */;
3583 val* var1014 /* : NativeArray[Object] */;
3584 val* var1015 /* : String */;
3585 static val* varonce1016;
3586 val* var1017 /* : String */;
3587 char* var1018 /* : NativeString */;
3588 long var1019 /* : Int */;
3589 val* var1020 /* : FlatString */;
3590 val* var1021 /* : Array[Object] */;
3591 long var1022 /* : Int */;
3592 val* var1023 /* : NativeArray[Object] */;
3593 val* var1024 /* : String */;
3594 static val* varonce1025;
3595 val* var1026 /* : String */;
3596 char* var1027 /* : NativeString */;
3597 long var1028 /* : Int */;
3598 val* var1029 /* : FlatString */;
3599 static val* varonce1030;
3600 val* var1031 /* : String */;
3601 char* var1032 /* : NativeString */;
3602 long var1033 /* : Int */;
3603 val* var1034 /* : FlatString */;
3604 val* var1035 /* : Array[Object] */;
3605 long var1036 /* : Int */;
3606 val* var1037 /* : NativeArray[Object] */;
3607 val* var1038 /* : String */;
3608 static val* varonce1039;
3609 val* var1040 /* : String */;
3610 char* var1041 /* : NativeString */;
3611 long var1042 /* : Int */;
3612 val* var1043 /* : FlatString */;
3613 val* var1044 /* : Array[Object] */;
3614 long var1045 /* : Int */;
3615 val* var1046 /* : NativeArray[Object] */;
3616 val* var1047 /* : String */;
3617 static val* varonce1048;
3618 val* var1049 /* : String */;
3619 char* var1050 /* : NativeString */;
3620 long var1051 /* : Int */;
3621 val* var1052 /* : FlatString */;
3622 static val* varonce1053;
3623 val* var1054 /* : String */;
3624 char* var1055 /* : NativeString */;
3625 long var1056 /* : Int */;
3626 val* var1057 /* : FlatString */;
3627 val* var1058 /* : Array[Object] */;
3628 long var1059 /* : Int */;
3629 val* var1060 /* : NativeArray[Object] */;
3630 val* var1061 /* : String */;
3631 static val* varonce1062;
3632 val* var1063 /* : String */;
3633 char* var1064 /* : NativeString */;
3634 long var1065 /* : Int */;
3635 val* var1066 /* : FlatString */;
3636 short int var1067 /* : Bool */;
3637 val* var1068 /* : MClass */;
3638 val* var1070 /* : MClass */;
3639 val* var1071 /* : MClassKind */;
3640 val* var1073 /* : MClassKind */;
3641 val* var1074 /* : MClassKind */;
3642 short int var1075 /* : Bool */;
3643 short int var1076 /* : Bool */;
3644 short int var1078 /* : Bool */;
3645 short int var1080 /* : Bool */;
3646 short int var_1081 /* var : Bool */;
3647 val* var1082 /* : MClass */;
3648 val* var1084 /* : MClass */;
3649 val* var1085 /* : String */;
3650 val* var1087 /* : String */;
3651 static val* varonce1088;
3652 val* var1089 /* : String */;
3653 char* var1090 /* : NativeString */;
3654 long var1091 /* : Int */;
3655 val* var1092 /* : FlatString */;
3656 short int var1093 /* : Bool */;
3657 short int var1094 /* : Bool */;
3658 short int var1096 /* : Bool */;
3659 short int var1097 /* : Bool */;
3660 short int var1098 /* : Bool */;
3661 val* var1099 /* : MModule */;
3662 val* var1101 /* : MModule */;
3663 val* var1102 /* : MClassType */;
3664 short int var1104 /* : Bool */;
3665 val* var1105 /* : MClassType */;
3666 static val* varonce1106;
3667 val* var1107 /* : String */;
3668 char* var1108 /* : NativeString */;
3669 long var1109 /* : Int */;
3670 val* var1110 /* : FlatString */;
3671 val* var1111 /* : MClass */;
3672 val* var1112 /* : MClassType */;
3673 val* var1114 /* : MClassType */;
3674 val* var_pointer_type /* var pointer_type: MClassType */;
3675 static val* varonce1115;
3676 val* var1116 /* : String */;
3677 char* var1117 /* : NativeString */;
3678 long var1118 /* : Int */;
3679 val* var1119 /* : FlatString */;
3680 val* var1120 /* : Array[Object] */;
3681 long var1121 /* : Int */;
3682 val* var1122 /* : NativeArray[Object] */;
3683 val* var1123 /* : String */;
3684 val* var1124 /* : String */;
3685 static val* varonce1125;
3686 val* var1126 /* : String */;
3687 char* var1127 /* : NativeString */;
3688 long var1128 /* : Int */;
3689 val* var1129 /* : FlatString */;
3690 static val* varonce1130;
3691 val* var1131 /* : String */;
3692 char* var1132 /* : NativeString */;
3693 long var1133 /* : Int */;
3694 val* var1134 /* : FlatString */;
3695 val* var1135 /* : Array[Object] */;
3696 long var1136 /* : Int */;
3697 val* var1137 /* : NativeArray[Object] */;
3698 val* var1138 /* : String */;
3699 static val* varonce1139;
3700 val* var1140 /* : String */;
3701 char* var1141 /* : NativeString */;
3702 long var1142 /* : Int */;
3703 val* var1143 /* : FlatString */;
3704 static val* varonce1144;
3705 val* var1145 /* : String */;
3706 char* var1146 /* : NativeString */;
3707 long var1147 /* : Int */;
3708 val* var1148 /* : FlatString */;
3709 val* var1149 /* : Array[Object] */;
3710 long var1150 /* : Int */;
3711 val* var1151 /* : NativeArray[Object] */;
3712 val* var1152 /* : String */;
3713 val* var1153 /* : String */;
3714 static val* varonce1154;
3715 val* var1155 /* : String */;
3716 char* var1156 /* : NativeString */;
3717 long var1157 /* : Int */;
3718 val* var1158 /* : FlatString */;
3719 static val* varonce1159;
3720 val* var1160 /* : String */;
3721 char* var1161 /* : NativeString */;
3722 long var1162 /* : Int */;
3723 val* var1163 /* : FlatString */;
3724 val* var1164 /* : Array[Object] */;
3725 long var1165 /* : Int */;
3726 val* var1166 /* : NativeArray[Object] */;
3727 val* var1167 /* : String */;
3728 static val* varonce1168;
3729 val* var1169 /* : String */;
3730 char* var1170 /* : NativeString */;
3731 long var1171 /* : Int */;
3732 val* var1172 /* : FlatString */;
3733 val* var1173 /* : Array[Object] */;
3734 long var1174 /* : Int */;
3735 val* var1175 /* : NativeArray[Object] */;
3736 val* var1176 /* : String */;
3737 static val* varonce1177;
3738 val* var1178 /* : String */;
3739 char* var1179 /* : NativeString */;
3740 long var1180 /* : Int */;
3741 val* var1181 /* : FlatString */;
3742 val* var1182 /* : RuntimeVariable */;
3743 val* var_res1183 /* var res: RuntimeVariable */;
3744 short int var1184 /* : Bool */;
3745 static val* varonce1186;
3746 val* var1187 /* : String */;
3747 char* var1188 /* : NativeString */;
3748 long var1189 /* : Int */;
3749 val* var1190 /* : FlatString */;
3750 val* var1191 /* : String */;
3751 static val* varonce1192;
3752 val* var1193 /* : String */;
3753 char* var1194 /* : NativeString */;
3754 long var1195 /* : Int */;
3755 val* var1196 /* : FlatString */;
3756 val* var1197 /* : Array[Object] */;
3757 long var1198 /* : Int */;
3758 val* var1199 /* : NativeArray[Object] */;
3759 val* var1200 /* : String */;
3760 static val* varonce1201;
3761 val* var1202 /* : String */;
3762 char* var1203 /* : NativeString */;
3763 long var1204 /* : Int */;
3764 val* var1205 /* : FlatString */;
3765 val* var1206 /* : Array[Object] */;
3766 long var1207 /* : Int */;
3767 val* var1208 /* : NativeArray[Object] */;
3768 val* var1209 /* : String */;
3769 static val* varonce1210;
3770 val* var1211 /* : String */;
3771 char* var1212 /* : NativeString */;
3772 long var1213 /* : Int */;
3773 val* var1214 /* : FlatString */;
3774 static val* varonce1215;
3775 val* var1216 /* : String */;
3776 char* var1217 /* : NativeString */;
3777 long var1218 /* : Int */;
3778 val* var1219 /* : FlatString */;
3779 val* var1220 /* : Array[Object] */;
3780 long var1221 /* : Int */;
3781 val* var1222 /* : NativeArray[Object] */;
3782 val* var1223 /* : String */;
3783 static val* varonce1224;
3784 val* var1225 /* : String */;
3785 char* var1226 /* : NativeString */;
3786 long var1227 /* : Int */;
3787 val* var1228 /* : FlatString */;
3788 val* var1229 /* : String */;
3789 static val* varonce1230;
3790 val* var1231 /* : String */;
3791 char* var1232 /* : NativeString */;
3792 long var1233 /* : Int */;
3793 val* var1234 /* : FlatString */;
3794 static val* varonce1235;
3795 val* var1236 /* : String */;
3796 char* var1237 /* : NativeString */;
3797 long var1238 /* : Int */;
3798 val* var1239 /* : FlatString */;
3799 val* var1240 /* : Array[Object] */;
3800 long var1241 /* : Int */;
3801 val* var1242 /* : NativeArray[Object] */;
3802 val* var1243 /* : String */;
3803 static val* varonce1244;
3804 val* var1245 /* : String */;
3805 char* var1246 /* : NativeString */;
3806 long var1247 /* : Int */;
3807 val* var1248 /* : FlatString */;
3808 static val* varonce1249;
3809 val* var1250 /* : String */;
3810 char* var1251 /* : NativeString */;
3811 long var1252 /* : Int */;
3812 val* var1253 /* : FlatString */;
3813 val* var1254 /* : Array[Object] */;
3814 long var1255 /* : Int */;
3815 val* var1256 /* : NativeArray[Object] */;
3816 val* var1257 /* : String */;
3817 static val* varonce1258;
3818 val* var1259 /* : String */;
3819 char* var1260 /* : NativeString */;
3820 long var1261 /* : Int */;
3821 val* var1262 /* : FlatString */;
3822 static val* varonce1263;
3823 val* var1264 /* : String */;
3824 char* var1265 /* : NativeString */;
3825 long var1266 /* : Int */;
3826 val* var1267 /* : FlatString */;
3827 val* var1268 /* : Array[Object] */;
3828 long var1269 /* : Int */;
3829 val* var1270 /* : NativeArray[Object] */;
3830 val* var1271 /* : String */;
3831 val* var1272 /* : String */;
3832 static val* varonce1273;
3833 val* var1274 /* : String */;
3834 char* var1275 /* : NativeString */;
3835 long var1276 /* : Int */;
3836 val* var1277 /* : FlatString */;
3837 static val* varonce1278;
3838 val* var1279 /* : String */;
3839 char* var1280 /* : NativeString */;
3840 long var1281 /* : Int */;
3841 val* var1282 /* : FlatString */;
3842 val* var1283 /* : Array[Object] */;
3843 long var1284 /* : Int */;
3844 val* var1285 /* : NativeArray[Object] */;
3845 val* var1286 /* : String */;
3846 static val* varonce1287;
3847 val* var1288 /* : String */;
3848 char* var1289 /* : NativeString */;
3849 long var1290 /* : Int */;
3850 val* var1291 /* : FlatString */;
3851 static val* varonce1292;
3852 val* var1293 /* : String */;
3853 char* var1294 /* : NativeString */;
3854 long var1295 /* : Int */;
3855 val* var1296 /* : FlatString */;
3856 val* var1297 /* : Array[Object] */;
3857 long var1298 /* : Int */;
3858 val* var1299 /* : NativeArray[Object] */;
3859 val* var1300 /* : String */;
3860 val* var1301 /* : String */;
3861 static val* varonce1302;
3862 val* var1303 /* : String */;
3863 char* var1304 /* : NativeString */;
3864 long var1305 /* : Int */;
3865 val* var1306 /* : FlatString */;
3866 static val* varonce1307;
3867 val* var1308 /* : String */;
3868 char* var1309 /* : NativeString */;
3869 long var1310 /* : Int */;
3870 val* var1311 /* : FlatString */;
3871 val* var1312 /* : Array[Object] */;
3872 long var1313 /* : Int */;
3873 val* var1314 /* : NativeArray[Object] */;
3874 val* var1315 /* : String */;
3875 static val* varonce1316;
3876 val* var1317 /* : String */;
3877 char* var1318 /* : NativeString */;
3878 long var1319 /* : Int */;
3879 val* var1320 /* : FlatString */;
3880 val* var1321 /* : Array[Object] */;
3881 long var1322 /* : Int */;
3882 val* var1323 /* : NativeArray[Object] */;
3883 val* var1324 /* : String */;
3884 static val* varonce1325;
3885 val* var1326 /* : String */;
3886 char* var1327 /* : NativeString */;
3887 long var1328 /* : Int */;
3888 val* var1329 /* : FlatString */;
3889 val* var1330 /* : RuntimeVariable */;
3890 val* var_res1331 /* var res: RuntimeVariable */;
3891 short int var1332 /* : Bool */;
3892 static val* varonce1334;
3893 val* var1335 /* : String */;
3894 char* var1336 /* : NativeString */;
3895 long var1337 /* : Int */;
3896 val* var1338 /* : FlatString */;
3897 long var1339 /* : Int */;
3898 long var1341 /* : Int */;
3899 static val* varonce1342;
3900 val* var1343 /* : String */;
3901 char* var1344 /* : NativeString */;
3902 long var1345 /* : Int */;
3903 val* var1346 /* : FlatString */;
3904 val* var1347 /* : Array[Object] */;
3905 long var1348 /* : Int */;
3906 val* var1349 /* : NativeArray[Object] */;
3907 val* var1350 /* : Object */;
3908 val* var1351 /* : String */;
3909 static val* varonce1352;
3910 val* var1353 /* : String */;
3911 char* var1354 /* : NativeString */;
3912 long var1355 /* : Int */;
3913 val* var1356 /* : FlatString */;
3914 val* var1357 /* : Array[Object] */;
3915 long var1358 /* : Int */;
3916 val* var1359 /* : NativeArray[Object] */;
3917 val* var1360 /* : String */;
3918 static val* varonce1361;
3919 val* var1362 /* : String */;
3920 char* var1363 /* : NativeString */;
3921 long var1364 /* : Int */;
3922 val* var1365 /* : FlatString */;
3923 static val* varonce1366;
3924 val* var1367 /* : String */;
3925 char* var1368 /* : NativeString */;
3926 long var1369 /* : Int */;
3927 val* var1370 /* : FlatString */;
3928 val* var1371 /* : Array[Object] */;
3929 long var1372 /* : Int */;
3930 val* var1373 /* : NativeArray[Object] */;
3931 val* var1374 /* : String */;
3932 static val* varonce1375;
3933 val* var1376 /* : String */;
3934 char* var1377 /* : NativeString */;
3935 long var1378 /* : Int */;
3936 val* var1379 /* : FlatString */;
3937 static val* varonce1380;
3938 val* var1381 /* : String */;
3939 char* var1382 /* : NativeString */;
3940 long var1383 /* : Int */;
3941 val* var1384 /* : FlatString */;
3942 val* var1385 /* : Array[Object] */;
3943 long var1386 /* : Int */;
3944 val* var1387 /* : NativeArray[Object] */;
3945 val* var1388 /* : String */;
3946 static val* varonce1389;
3947 val* var1390 /* : String */;
3948 char* var1391 /* : NativeString */;
3949 long var1392 /* : Int */;
3950 val* var1393 /* : FlatString */;
3951 var_mclass = p0;
3952 {
3953 { /* Inline model#MClass#intro (var_mclass) on <var_mclass:MClass> */
3954 var2 = var_mclass->attrs[COLOR_model__MClass___intro].val; /* _intro on <var_mclass:MClass> */
3955 if (unlikely(var2 == NULL)) {
3956 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
3957 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 420);
3958 show_backtrace(1);
3959 }
3960 var = var2;
3961 RET_LABEL1:(void)0;
3962 }
3963 }
3964 {
3965 { /* Inline model#MClassDef#bound_mtype (var) on <var:MClassDef> */
3966 var5 = var->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var:MClassDef> */
3967 if (unlikely(var5 == NULL)) {
3968 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
3969 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
3970 show_backtrace(1);
3971 }
3972 var3 = var5;
3973 RET_LABEL4:(void)0;
3974 }
3975 }
3976 var_mtype = var3;
3977 {
3978 var6 = abstract_compiler__MClass__c_name(var_mclass);
3979 }
3980 var_c_name = var6;
3981 {
3982 { /* Inline separate_compiler#SeparateCompiler#method_tables (self) on <self:SeparateErasureCompiler> */
3983 var9 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_tables].val; /* _method_tables on <self:SeparateErasureCompiler> */
3984 if (unlikely(var9 == NULL)) {
3985 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_tables");
3986 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 845);
3987 show_backtrace(1);
3988 }
3989 var7 = var9;
3990 RET_LABEL8:(void)0;
3991 }
3992 }
3993 {
3994 var10 = ((val* (*)(val*, val*))(var7->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var7, var_mclass) /* [] on <var7:Map[MClass, Array[nullable MPropDef]]>*/;
3995 }
3996 var_vft = var10;
3997 {
3998 { /* Inline separate_compiler#SeparateCompiler#attr_tables (self) on <self:SeparateErasureCompiler> */
3999 var13 = self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_tables].val; /* _attr_tables on <self:SeparateErasureCompiler> */
4000 if (unlikely(var13 == NULL)) {
4001 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_tables");
4002 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 846);
4003 show_backtrace(1);
4004 }
4005 var11 = var13;
4006 RET_LABEL12:(void)0;
4007 }
4008 }
4009 {
4010 var14 = ((val* (*)(val*, val*))(var11->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var11, var_mclass) /* [] on <var11:Map[MClass, Array[nullable MPropDef]]>*/;
4011 }
4012 var_attrs = var14;
4013 {
4014 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables (self) on <self:SeparateErasureCompiler> */
4015 var17 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:SeparateErasureCompiler> */
4016 if (unlikely(var17 == NULL)) {
4017 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
4018 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 441);
4019 show_backtrace(1);
4020 }
4021 var15 = var17;
4022 RET_LABEL16:(void)0;
4023 }
4024 }
4025 {
4026 var18 = ((val* (*)(val*, val*))(var15->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var15, var_mclass) /* [] on <var15:Map[MClass, Array[nullable MClass]]>*/;
4027 }
4028 var_class_table = var18;
4029 {
4030 var19 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
4031 }
4032 var_v = var19;
4033 {
4034 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateErasureCompiler> */
4035 var22 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateErasureCompiler> */
4036 var20 = var22;
4037 RET_LABEL21:(void)0;
4038 }
4039 }
4040 var_rta = var20;
4041 var23 = 0;
4042 var_is_dead = var23;
4043 var28 = !var_is_dead;
4044 var_ = var28;
4045 if (var28){
4046 var29 = NULL;
4047 if (var_rta == NULL) {
4048 var30 = 0; /* is null */
4049 } else {
4050 var30 = 1; /* arg is null and recv is not */
4051 }
4052 if (0) {
4053 { /* Inline kernel#Object#!= (var_rta,var29) on <var_rta:nullable RapidTypeAnalysis> */
4054 var_other = var29;
4055 {
4056 var34 = ((short int (*)(val*, val*))(var_rta->class->vft[COLOR_kernel__Object___61d_61d]))(var_rta, var_other) /* == on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/;
4057 var33 = var34;
4058 }
4059 var35 = !var33;
4060 var31 = var35;
4061 goto RET_LABEL32;
4062 RET_LABEL32:(void)0;
4063 }
4064 var30 = var31;
4065 }
4066 var27 = var30;
4067 } else {
4068 var27 = var_;
4069 }
4070 var_36 = var27;
4071 if (var27){
4072 {
4073 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_classes (var_rta) on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
4074 var39 = var_rta->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_classes].val; /* _live_classes on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
4075 if (unlikely(var39 == NULL)) {
4076 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_classes");
4077 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 62);
4078 show_backtrace(1);
4079 }
4080 var37 = var39;
4081 RET_LABEL38:(void)0;
4082 }
4083 }
4084 {
4085 var40 = hash_collection__HashSet__has(var37, var_mclass);
4086 }
4087 var41 = !var40;
4088 var26 = var41;
4089 } else {
4090 var26 = var_36;
4091 }
4092 var_42 = var26;
4093 if (var26){
4094 {
4095 var43 = abstract_compiler__MClassType__ctype(var_mtype);
4096 }
4097 if (varonce) {
4098 var44 = varonce;
4099 } else {
4100 var45 = "val*";
4101 var46 = 4;
4102 var47 = string__NativeString__to_s_with_length(var45, var46);
4103 var44 = var47;
4104 varonce = var44;
4105 }
4106 {
4107 var49 = string__FlatString___61d_61d(var43, var44);
4108 var48 = var49;
4109 }
4110 var25 = var48;
4111 } else {
4112 var25 = var_42;
4113 }
4114 var_50 = var25;
4115 if (var25){
4116 {
4117 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
4118 var53 = var_mclass->attrs[COLOR_model__MClass___name].val; /* _name on <var_mclass:MClass> */
4119 if (unlikely(var53 == NULL)) {
4120 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
4121 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
4122 show_backtrace(1);
4123 }
4124 var51 = var53;
4125 RET_LABEL52:(void)0;
4126 }
4127 }
4128 if (varonce54) {
4129 var55 = varonce54;
4130 } else {
4131 var56 = "NativeArray";
4132 var57 = 11;
4133 var58 = string__NativeString__to_s_with_length(var56, var57);
4134 var55 = var58;
4135 varonce54 = var55;
4136 }
4137 {
4138 { /* Inline kernel#Object#!= (var51,var55) on <var51:String> */
4139 var_other = var55;
4140 {
4141 var63 = ((short int (*)(val*, val*))(var51->class->vft[COLOR_kernel__Object___61d_61d]))(var51, var_other) /* == on <var51:String>*/;
4142 var62 = var63;
4143 }
4144 var64 = !var62;
4145 var60 = var64;
4146 goto RET_LABEL61;
4147 RET_LABEL61:(void)0;
4148 }
4149 var59 = var60;
4150 }
4151 var24 = var59;
4152 } else {
4153 var24 = var_50;
4154 }
4155 if (var24){
4156 var65 = 1;
4157 var_is_dead = var65;
4158 } else {
4159 }
4160 if (varonce66) {
4161 var67 = varonce66;
4162 } else {
4163 var68 = "/* runtime class ";
4164 var69 = 17;
4165 var70 = string__NativeString__to_s_with_length(var68, var69);
4166 var67 = var70;
4167 varonce66 = var67;
4168 }
4169 if (varonce71) {
4170 var72 = varonce71;
4171 } else {
4172 var73 = " */";
4173 var74 = 3;
4174 var75 = string__NativeString__to_s_with_length(var73, var74);
4175 var72 = var75;
4176 varonce71 = var72;
4177 }
4178 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
4179 { /* var76 = array_instance Array[Object] */
4180 var77 = 3;
4181 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
4182 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var67;
4183 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var_c_name;
4184 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var72;
4185 {
4186 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
4187 }
4188 }
4189 {
4190 var79 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
4191 }
4192 {
4193 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var79); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4194 }
4195 if (varonce80) {
4196 var81 = varonce80;
4197 } else {
4198 var82 = "class_";
4199 var83 = 6;
4200 var84 = string__NativeString__to_s_with_length(var82, var83);
4201 var81 = var84;
4202 varonce80 = var81;
4203 }
4204 var85 = NEW_array__Array(&type_array__Arraykernel__Object);
4205 { /* var85 = array_instance Array[Object] */
4206 var86 = 2;
4207 var87 = NEW_array__NativeArray(var86, &type_array__NativeArraykernel__Object);
4208 ((struct instance_array__NativeArray*)var87)->values[0] = (val*) var81;
4209 ((struct instance_array__NativeArray*)var87)->values[1] = (val*) var_c_name;
4210 {
4211 ((void (*)(val*, val*, long))(var85->class->vft[COLOR_array__Array__with_native]))(var85, var87, var86) /* with_native on <var85:Array[Object]>*/;
4212 }
4213 }
4214 {
4215 var88 = ((val* (*)(val*))(var85->class->vft[COLOR_string__Object__to_s]))(var85) /* to_s on <var85:Array[Object]>*/;
4216 }
4217 if (varonce89) {
4218 var90 = varonce89;
4219 } else {
4220 var91 = "extern const struct class class_";
4221 var92 = 32;
4222 var93 = string__NativeString__to_s_with_length(var91, var92);
4223 var90 = var93;
4224 varonce89 = var90;
4225 }
4226 if (varonce94) {
4227 var95 = varonce94;
4228 } else {
4229 var96 = ";";
4230 var97 = 1;
4231 var98 = string__NativeString__to_s_with_length(var96, var97);
4232 var95 = var98;
4233 varonce94 = var95;
4234 }
4235 var99 = NEW_array__Array(&type_array__Arraykernel__Object);
4236 { /* var99 = array_instance Array[Object] */
4237 var100 = 3;
4238 var101 = NEW_array__NativeArray(var100, &type_array__NativeArraykernel__Object);
4239 ((struct instance_array__NativeArray*)var101)->values[0] = (val*) var90;
4240 ((struct instance_array__NativeArray*)var101)->values[1] = (val*) var_c_name;
4241 ((struct instance_array__NativeArray*)var101)->values[2] = (val*) var95;
4242 {
4243 ((void (*)(val*, val*, long))(var99->class->vft[COLOR_array__Array__with_native]))(var99, var101, var100) /* with_native on <var99:Array[Object]>*/;
4244 }
4245 }
4246 {
4247 var102 = ((val* (*)(val*))(var99->class->vft[COLOR_string__Object__to_s]))(var99) /* to_s on <var99:Array[Object]>*/;
4248 }
4249 {
4250 abstract_compiler__AbstractCompiler__provide_declaration(self, var88, var102); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
4251 }
4252 if (varonce103) {
4253 var104 = varonce103;
4254 } else {
4255 var105 = "extern const struct type_table type_table_";
4256 var106 = 42;
4257 var107 = string__NativeString__to_s_with_length(var105, var106);
4258 var104 = var107;
4259 varonce103 = var104;
4260 }
4261 if (varonce108) {
4262 var109 = varonce108;
4263 } else {
4264 var110 = ";";
4265 var111 = 1;
4266 var112 = string__NativeString__to_s_with_length(var110, var111);
4267 var109 = var112;
4268 varonce108 = var109;
4269 }
4270 var113 = NEW_array__Array(&type_array__Arraykernel__Object);
4271 { /* var113 = array_instance Array[Object] */
4272 var114 = 3;
4273 var115 = NEW_array__NativeArray(var114, &type_array__NativeArraykernel__Object);
4274 ((struct instance_array__NativeArray*)var115)->values[0] = (val*) var104;
4275 ((struct instance_array__NativeArray*)var115)->values[1] = (val*) var_c_name;
4276 ((struct instance_array__NativeArray*)var115)->values[2] = (val*) var109;
4277 {
4278 ((void (*)(val*, val*, long))(var113->class->vft[COLOR_array__Array__with_native]))(var113, var115, var114) /* with_native on <var113:Array[Object]>*/;
4279 }
4280 }
4281 {
4282 var116 = ((val* (*)(val*))(var113->class->vft[COLOR_string__Object__to_s]))(var113) /* to_s on <var113:Array[Object]>*/;
4283 }
4284 {
4285 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var116); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4286 }
4287 if (varonce117) {
4288 var118 = varonce117;
4289 } else {
4290 var119 = "const struct class class_";
4291 var120 = 25;
4292 var121 = string__NativeString__to_s_with_length(var119, var120);
4293 var118 = var121;
4294 varonce117 = var118;
4295 }
4296 if (varonce122) {
4297 var123 = varonce122;
4298 } else {
4299 var124 = " = {";
4300 var125 = 4;
4301 var126 = string__NativeString__to_s_with_length(var124, var125);
4302 var123 = var126;
4303 varonce122 = var123;
4304 }
4305 var127 = NEW_array__Array(&type_array__Arraykernel__Object);
4306 { /* var127 = array_instance Array[Object] */
4307 var128 = 3;
4308 var129 = NEW_array__NativeArray(var128, &type_array__NativeArraykernel__Object);
4309 ((struct instance_array__NativeArray*)var129)->values[0] = (val*) var118;
4310 ((struct instance_array__NativeArray*)var129)->values[1] = (val*) var_c_name;
4311 ((struct instance_array__NativeArray*)var129)->values[2] = (val*) var123;
4312 {
4313 ((void (*)(val*, val*, long))(var127->class->vft[COLOR_array__Array__with_native]))(var127, var129, var128) /* with_native on <var127:Array[Object]>*/;
4314 }
4315 }
4316 {
4317 var130 = ((val* (*)(val*))(var127->class->vft[COLOR_string__Object__to_s]))(var127) /* to_s on <var127:Array[Object]>*/;
4318 }
4319 {
4320 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var130); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4321 }
4322 {
4323 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids (self) on <self:SeparateErasureCompiler> */
4324 var133 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:SeparateErasureCompiler> */
4325 if (unlikely(var133 == NULL)) {
4326 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
4327 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 104);
4328 show_backtrace(1);
4329 }
4330 var131 = var133;
4331 RET_LABEL132:(void)0;
4332 }
4333 }
4334 {
4335 var134 = ((val* (*)(val*, val*))(var131->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var131, var_mclass) /* [] on <var131:Map[MClass, Int]>*/;
4336 }
4337 if (varonce135) {
4338 var136 = varonce135;
4339 } else {
4340 var137 = ",";
4341 var138 = 1;
4342 var139 = string__NativeString__to_s_with_length(var137, var138);
4343 var136 = var139;
4344 varonce135 = var136;
4345 }
4346 var140 = NEW_array__Array(&type_array__Arraykernel__Object);
4347 { /* var140 = array_instance Array[Object] */
4348 var141 = 2;
4349 var142 = NEW_array__NativeArray(var141, &type_array__NativeArraykernel__Object);
4350 ((struct instance_array__NativeArray*)var142)->values[0] = (val*) var134;
4351 ((struct instance_array__NativeArray*)var142)->values[1] = (val*) var136;
4352 {
4353 ((void (*)(val*, val*, long))(var140->class->vft[COLOR_array__Array__with_native]))(var140, var142, var141) /* with_native on <var140:Array[Object]>*/;
4354 }
4355 }
4356 {
4357 var143 = ((val* (*)(val*))(var140->class->vft[COLOR_string__Object__to_s]))(var140) /* to_s on <var140:Array[Object]>*/;
4358 }
4359 {
4360 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var143); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4361 }
4362 if (varonce144) {
4363 var145 = varonce144;
4364 } else {
4365 var146 = "\"";
4366 var147 = 1;
4367 var148 = string__NativeString__to_s_with_length(var146, var147);
4368 var145 = var148;
4369 varonce144 = var145;
4370 }
4371 {
4372 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
4373 var151 = var_mclass->attrs[COLOR_model__MClass___name].val; /* _name on <var_mclass:MClass> */
4374 if (unlikely(var151 == NULL)) {
4375 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
4376 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
4377 show_backtrace(1);
4378 }
4379 var149 = var151;
4380 RET_LABEL150:(void)0;
4381 }
4382 }
4383 if (varonce152) {
4384 var153 = varonce152;
4385 } else {
4386 var154 = "\", /* class_name_string */";
4387 var155 = 26;
4388 var156 = string__NativeString__to_s_with_length(var154, var155);
4389 var153 = var156;
4390 varonce152 = var153;
4391 }
4392 var157 = NEW_array__Array(&type_array__Arraykernel__Object);
4393 { /* var157 = array_instance Array[Object] */
4394 var158 = 3;
4395 var159 = NEW_array__NativeArray(var158, &type_array__NativeArraykernel__Object);
4396 ((struct instance_array__NativeArray*)var159)->values[0] = (val*) var145;
4397 ((struct instance_array__NativeArray*)var159)->values[1] = (val*) var149;
4398 ((struct instance_array__NativeArray*)var159)->values[2] = (val*) var153;
4399 {
4400 ((void (*)(val*, val*, long))(var157->class->vft[COLOR_array__Array__with_native]))(var157, var159, var158) /* with_native on <var157:Array[Object]>*/;
4401 }
4402 }
4403 {
4404 var160 = ((val* (*)(val*))(var157->class->vft[COLOR_string__Object__to_s]))(var157) /* to_s on <var157:Array[Object]>*/;
4405 }
4406 {
4407 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var160); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4408 }
4409 {
4410 var161 = separate_compiler__SeparateCompiler__box_kind_of(self, var_mclass);
4411 }
4412 if (varonce162) {
4413 var163 = varonce162;
4414 } else {
4415 var164 = ", /* box_kind */";
4416 var165 = 16;
4417 var166 = string__NativeString__to_s_with_length(var164, var165);
4418 var163 = var166;
4419 varonce162 = var163;
4420 }
4421 var167 = NEW_array__Array(&type_array__Arraykernel__Object);
4422 { /* var167 = array_instance Array[Object] */
4423 var168 = 2;
4424 var169 = NEW_array__NativeArray(var168, &type_array__NativeArraykernel__Object);
4425 var170 = BOX_kernel__Int(var161); /* autobox from Int to Object */
4426 ((struct instance_array__NativeArray*)var169)->values[0] = (val*) var170;
4427 ((struct instance_array__NativeArray*)var169)->values[1] = (val*) var163;
4428 {
4429 ((void (*)(val*, val*, long))(var167->class->vft[COLOR_array__Array__with_native]))(var167, var169, var168) /* with_native on <var167:Array[Object]>*/;
4430 }
4431 }
4432 {
4433 var171 = ((val* (*)(val*))(var167->class->vft[COLOR_string__Object__to_s]))(var167) /* to_s on <var167:Array[Object]>*/;
4434 }
4435 {
4436 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var171); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4437 }
4438 {
4439 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors (self) on <self:SeparateErasureCompiler> */
4440 var174 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
4441 if (unlikely(var174 == NULL)) {
4442 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
4443 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 105);
4444 show_backtrace(1);
4445 }
4446 var172 = var174;
4447 RET_LABEL173:(void)0;
4448 }
4449 }
4450 {
4451 var175 = ((val* (*)(val*, val*))(var172->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var172, var_mclass) /* [] on <var172:Map[MClass, Int]>*/;
4452 }
4453 if (varonce176) {
4454 var177 = varonce176;
4455 } else {
4456 var178 = ",";
4457 var179 = 1;
4458 var180 = string__NativeString__to_s_with_length(var178, var179);
4459 var177 = var180;
4460 varonce176 = var177;
4461 }
4462 var181 = NEW_array__Array(&type_array__Arraykernel__Object);
4463 { /* var181 = array_instance Array[Object] */
4464 var182 = 2;
4465 var183 = NEW_array__NativeArray(var182, &type_array__NativeArraykernel__Object);
4466 ((struct instance_array__NativeArray*)var183)->values[0] = (val*) var175;
4467 ((struct instance_array__NativeArray*)var183)->values[1] = (val*) var177;
4468 {
4469 ((void (*)(val*, val*, long))(var181->class->vft[COLOR_array__Array__with_native]))(var181, var183, var182) /* with_native on <var181:Array[Object]>*/;
4470 }
4471 }
4472 {
4473 var184 = ((val* (*)(val*))(var181->class->vft[COLOR_string__Object__to_s]))(var181) /* to_s on <var181:Array[Object]>*/;
4474 }
4475 {
4476 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var184); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4477 }
4478 var185 = !var_is_dead;
4479 if (var185){
4480 {
4481 var186 = separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(self, var_mclass);
4482 }
4483 if (var186){
4484 if (varonce187) {
4485 var188 = varonce187;
4486 } else {
4487 var189 = "vts_table_";
4488 var190 = 10;
4489 var191 = string__NativeString__to_s_with_length(var189, var190);
4490 var188 = var191;
4491 varonce187 = var188;
4492 }
4493 var192 = NEW_array__Array(&type_array__Arraykernel__Object);
4494 { /* var192 = array_instance Array[Object] */
4495 var193 = 2;
4496 var194 = NEW_array__NativeArray(var193, &type_array__NativeArraykernel__Object);
4497 ((struct instance_array__NativeArray*)var194)->values[0] = (val*) var188;
4498 ((struct instance_array__NativeArray*)var194)->values[1] = (val*) var_c_name;
4499 {
4500 ((void (*)(val*, val*, long))(var192->class->vft[COLOR_array__Array__with_native]))(var192, var194, var193) /* with_native on <var192:Array[Object]>*/;
4501 }
4502 }
4503 {
4504 var195 = ((val* (*)(val*))(var192->class->vft[COLOR_string__Object__to_s]))(var192) /* to_s on <var192:Array[Object]>*/;
4505 }
4506 {
4507 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var195); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
4508 }
4509 if (varonce196) {
4510 var197 = varonce196;
4511 } else {
4512 var198 = "&vts_table_";
4513 var199 = 11;
4514 var200 = string__NativeString__to_s_with_length(var198, var199);
4515 var197 = var200;
4516 varonce196 = var197;
4517 }
4518 if (varonce201) {
4519 var202 = varonce201;
4520 } else {
4521 var203 = ",";
4522 var204 = 1;
4523 var205 = string__NativeString__to_s_with_length(var203, var204);
4524 var202 = var205;
4525 varonce201 = var202;
4526 }
4527 var206 = NEW_array__Array(&type_array__Arraykernel__Object);
4528 { /* var206 = array_instance Array[Object] */
4529 var207 = 3;
4530 var208 = NEW_array__NativeArray(var207, &type_array__NativeArraykernel__Object);
4531 ((struct instance_array__NativeArray*)var208)->values[0] = (val*) var197;
4532 ((struct instance_array__NativeArray*)var208)->values[1] = (val*) var_c_name;
4533 ((struct instance_array__NativeArray*)var208)->values[2] = (val*) var202;
4534 {
4535 ((void (*)(val*, val*, long))(var206->class->vft[COLOR_array__Array__with_native]))(var206, var208, var207) /* with_native on <var206:Array[Object]>*/;
4536 }
4537 }
4538 {
4539 var209 = ((val* (*)(val*))(var206->class->vft[COLOR_string__Object__to_s]))(var206) /* to_s on <var206:Array[Object]>*/;
4540 }
4541 {
4542 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var209); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4543 }
4544 } else {
4545 if (varonce210) {
4546 var211 = varonce210;
4547 } else {
4548 var212 = "NULL,";
4549 var213 = 5;
4550 var214 = string__NativeString__to_s_with_length(var212, var213);
4551 var211 = var214;
4552 varonce210 = var211;
4553 }
4554 {
4555 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var211); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4556 }
4557 }
4558 if (varonce215) {
4559 var216 = varonce215;
4560 } else {
4561 var217 = "&type_table_";
4562 var218 = 12;
4563 var219 = string__NativeString__to_s_with_length(var217, var218);
4564 var216 = var219;
4565 varonce215 = var216;
4566 }
4567 if (varonce220) {
4568 var221 = varonce220;
4569 } else {
4570 var222 = ",";
4571 var223 = 1;
4572 var224 = string__NativeString__to_s_with_length(var222, var223);
4573 var221 = var224;
4574 varonce220 = var221;
4575 }
4576 var225 = NEW_array__Array(&type_array__Arraykernel__Object);
4577 { /* var225 = array_instance Array[Object] */
4578 var226 = 3;
4579 var227 = NEW_array__NativeArray(var226, &type_array__NativeArraykernel__Object);
4580 ((struct instance_array__NativeArray*)var227)->values[0] = (val*) var216;
4581 ((struct instance_array__NativeArray*)var227)->values[1] = (val*) var_c_name;
4582 ((struct instance_array__NativeArray*)var227)->values[2] = (val*) var221;
4583 {
4584 ((void (*)(val*, val*, long))(var225->class->vft[COLOR_array__Array__with_native]))(var225, var227, var226) /* with_native on <var225:Array[Object]>*/;
4585 }
4586 }
4587 {
4588 var228 = ((val* (*)(val*))(var225->class->vft[COLOR_string__Object__to_s]))(var225) /* to_s on <var225:Array[Object]>*/;
4589 }
4590 {
4591 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var228); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4592 }
4593 if (varonce229) {
4594 var230 = varonce229;
4595 } else {
4596 var231 = "{";
4597 var232 = 1;
4598 var233 = string__NativeString__to_s_with_length(var231, var232);
4599 var230 = var233;
4600 varonce229 = var230;
4601 }
4602 {
4603 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var230); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4604 }
4605 var234 = 0;
4606 var_i = var234;
4607 {
4608 { /* Inline array#AbstractArrayRead#length (var_vft) on <var_vft:Array[nullable MPropDef]> */
4609 var237 = var_vft->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_vft:Array[nullable MPropDef]> */
4610 var235 = var237;
4611 RET_LABEL236:(void)0;
4612 }
4613 }
4614 var_238 = var235;
4615 for(;;) {
4616 {
4617 { /* Inline kernel#Int#< (var_i,var_238) on <var_i:Int> */
4618 /* Covariant cast for argument 0 (i) <var_238:Int> isa OTHER */
4619 /* <var_238:Int> isa OTHER */
4620 var241 = 1; /* easy <var_238:Int> isa OTHER*/
4621 if (unlikely(!var241)) {
4622 var_class_name = type_kernel__Int.name;
4623 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
4624 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
4625 show_backtrace(1);
4626 }
4627 var242 = var_i < var_238;
4628 var239 = var242;
4629 goto RET_LABEL240;
4630 RET_LABEL240:(void)0;
4631 }
4632 }
4633 if (var239){
4634 {
4635 var243 = array__Array___91d_93d(var_vft, var_i);
4636 }
4637 var_mpropdef = var243;
4638 var244 = NULL;
4639 if (var_mpropdef == NULL) {
4640 var245 = 1; /* is null */
4641 } else {
4642 var245 = 0; /* arg is null but recv is not */
4643 }
4644 if (0) {
4645 { /* Inline kernel#Object#== (var_mpropdef,var244) on <var_mpropdef:nullable MPropDef> */
4646 var_other248 = var244;
4647 {
4648 { /* Inline kernel#Object#is_same_instance (var_mpropdef,var_other248) on <var_mpropdef:nullable MPropDef(MPropDef)> */
4649 var251 = var_mpropdef == var_other248;
4650 var249 = var251;
4651 goto RET_LABEL250;
4652 RET_LABEL250:(void)0;
4653 }
4654 }
4655 var246 = var249;
4656 goto RET_LABEL247;
4657 RET_LABEL247:(void)0;
4658 }
4659 var245 = var246;
4660 }
4661 if (var245){
4662 if (varonce252) {
4663 var253 = varonce252;
4664 } else {
4665 var254 = "NULL, /* empty */";
4666 var255 = 17;
4667 var256 = string__NativeString__to_s_with_length(var254, var255);
4668 var253 = var256;
4669 varonce252 = var253;
4670 }
4671 {
4672 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var253); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4673 }
4674 } else {
4675 /* <var_mpropdef:nullable MPropDef(MPropDef)> isa MMethodDef */
4676 cltype258 = type_model__MMethodDef.color;
4677 idtype259 = type_model__MMethodDef.id;
4678 if(cltype258 >= var_mpropdef->type->table_size) {
4679 var257 = 0;
4680 } else {
4681 var257 = var_mpropdef->type->type_table[cltype258] == idtype259;
4682 }
4683 if (unlikely(!var257)) {
4684 PRINT_ERROR("Runtime error: %s", "Assert failed");
4685 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 259);
4686 show_backtrace(1);
4687 }
4688 var261 = NULL;
4689 if (var_rta == NULL) {
4690 var262 = 0; /* is null */
4691 } else {
4692 var262 = 1; /* arg is null and recv is not */
4693 }
4694 if (0) {
4695 { /* Inline kernel#Object#!= (var_rta,var261) on <var_rta:nullable RapidTypeAnalysis> */
4696 var_other = var261;
4697 {
4698 var266 = ((short int (*)(val*, val*))(var_rta->class->vft[COLOR_kernel__Object___61d_61d]))(var_rta, var_other) /* == on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/;
4699 var265 = var266;
4700 }
4701 var267 = !var265;
4702 var263 = var267;
4703 goto RET_LABEL264;
4704 RET_LABEL264:(void)0;
4705 }
4706 var262 = var263;
4707 }
4708 var_268 = var262;
4709 if (var262){
4710 {
4711 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_methoddefs (var_rta) on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
4712 var271 = var_rta->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_methoddefs].val; /* _live_methoddefs on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
4713 if (unlikely(var271 == NULL)) {
4714 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_methoddefs");
4715 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 72);
4716 show_backtrace(1);
4717 }
4718 var269 = var271;
4719 RET_LABEL270:(void)0;
4720 }
4721 }
4722 {
4723 var272 = hash_collection__HashSet__has(var269, var_mpropdef);
4724 }
4725 var273 = !var272;
4726 var260 = var273;
4727 } else {
4728 var260 = var_268;
4729 }
4730 if (var260){
4731 if (varonce274) {
4732 var275 = varonce274;
4733 } else {
4734 var276 = "NULL, /* DEAD ";
4735 var277 = 14;
4736 var278 = string__NativeString__to_s_with_length(var276, var277);
4737 var275 = var278;
4738 varonce274 = var275;
4739 }
4740 {
4741 { /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
4742 var281 = var_mclass->attrs[COLOR_model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
4743 if (unlikely(var281 == NULL)) {
4744 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
4745 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 347);
4746 show_backtrace(1);
4747 }
4748 var279 = var281;
4749 RET_LABEL280:(void)0;
4750 }
4751 }
4752 if (varonce282) {
4753 var283 = varonce282;
4754 } else {
4755 var284 = ":";
4756 var285 = 1;
4757 var286 = string__NativeString__to_s_with_length(var284, var285);
4758 var283 = var286;
4759 varonce282 = var283;
4760 }
4761 if (varonce287) {
4762 var288 = varonce287;
4763 } else {
4764 var289 = ":";
4765 var290 = 1;
4766 var291 = string__NativeString__to_s_with_length(var289, var290);
4767 var288 = var291;
4768 varonce287 = var288;
4769 }
4770 if (varonce292) {
4771 var293 = varonce292;
4772 } else {
4773 var294 = " */";
4774 var295 = 3;
4775 var296 = string__NativeString__to_s_with_length(var294, var295);
4776 var293 = var296;
4777 varonce292 = var293;
4778 }
4779 var297 = NEW_array__Array(&type_array__Arraykernel__Object);
4780 { /* var297 = array_instance Array[Object] */
4781 var298 = 7;
4782 var299 = NEW_array__NativeArray(var298, &type_array__NativeArraykernel__Object);
4783 ((struct instance_array__NativeArray*)var299)->values[0] = (val*) var275;
4784 ((struct instance_array__NativeArray*)var299)->values[1] = (val*) var279;
4785 ((struct instance_array__NativeArray*)var299)->values[2] = (val*) var283;
4786 ((struct instance_array__NativeArray*)var299)->values[3] = (val*) var_mclass;
4787 ((struct instance_array__NativeArray*)var299)->values[4] = (val*) var288;
4788 ((struct instance_array__NativeArray*)var299)->values[5] = (val*) var_mpropdef;
4789 ((struct instance_array__NativeArray*)var299)->values[6] = (val*) var293;
4790 {
4791 ((void (*)(val*, val*, long))(var297->class->vft[COLOR_array__Array__with_native]))(var297, var299, var298) /* with_native on <var297:Array[Object]>*/;
4792 }
4793 }
4794 {
4795 var300 = ((val* (*)(val*))(var297->class->vft[COLOR_string__Object__to_s]))(var297) /* to_s on <var297:Array[Object]>*/;
4796 }
4797 {
4798 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var300); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4799 }
4800 goto BREAK_label;
4801 } else {
4802 }
4803 var302 = 1;
4804 var_303 = var302;
4805 if (var302){
4806 var301 = var_303;
4807 } else {
4808 {
4809 { /* Inline model#MPropDef#mclassdef (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
4810 var306 = var_mpropdef->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef:nullable MPropDef(MMethodDef)> */
4811 if (unlikely(var306 == NULL)) {
4812 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
4813 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
4814 show_backtrace(1);
4815 }
4816 var304 = var306;
4817 RET_LABEL305:(void)0;
4818 }
4819 }
4820 {
4821 { /* Inline model#MClassDef#bound_mtype (var304) on <var304:MClassDef> */
4822 var309 = var304->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var304:MClassDef> */
4823 if (unlikely(var309 == NULL)) {
4824 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
4825 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
4826 show_backtrace(1);
4827 }
4828 var307 = var309;
4829 RET_LABEL308:(void)0;
4830 }
4831 }
4832 {
4833 var310 = abstract_compiler__MClassType__ctype(var307);
4834 }
4835 if (varonce311) {
4836 var312 = varonce311;
4837 } else {
4838 var313 = "val*";
4839 var314 = 4;
4840 var315 = string__NativeString__to_s_with_length(var313, var314);
4841 var312 = var315;
4842 varonce311 = var312;
4843 }
4844 {
4845 { /* Inline kernel#Object#!= (var310,var312) on <var310:String> */
4846 var_other = var312;
4847 {
4848 var320 = ((short int (*)(val*, val*))(var310->class->vft[COLOR_kernel__Object___61d_61d]))(var310, var_other) /* == on <var310:String>*/;
4849 var319 = var320;
4850 }
4851 var321 = !var319;
4852 var317 = var321;
4853 goto RET_LABEL318;
4854 RET_LABEL318:(void)0;
4855 }
4856 var316 = var317;
4857 }
4858 var301 = var316;
4859 }
4860 if (var301){
4861 if (varonce322) {
4862 var323 = varonce322;
4863 } else {
4864 var324 = "VIRTUAL_";
4865 var325 = 8;
4866 var326 = string__NativeString__to_s_with_length(var324, var325);
4867 var323 = var326;
4868 varonce322 = var323;
4869 }
4870 {
4871 var327 = abstract_compiler__MPropDef__c_name(var_mpropdef);
4872 }
4873 var328 = NEW_array__Array(&type_array__Arraykernel__Object);
4874 { /* var328 = array_instance Array[Object] */
4875 var329 = 2;
4876 var330 = NEW_array__NativeArray(var329, &type_array__NativeArraykernel__Object);
4877 ((struct instance_array__NativeArray*)var330)->values[0] = (val*) var323;
4878 ((struct instance_array__NativeArray*)var330)->values[1] = (val*) var327;
4879 {
4880 ((void (*)(val*, val*, long))(var328->class->vft[COLOR_array__Array__with_native]))(var328, var330, var329) /* with_native on <var328:Array[Object]>*/;
4881 }
4882 }
4883 {
4884 var331 = ((val* (*)(val*))(var328->class->vft[COLOR_string__Object__to_s]))(var328) /* to_s on <var328:Array[Object]>*/;
4885 }
4886 {
4887 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var331); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
4888 }
4889 if (varonce332) {
4890 var333 = varonce332;
4891 } else {
4892 var334 = "(nitmethod_t)VIRTUAL_";
4893 var335 = 21;
4894 var336 = string__NativeString__to_s_with_length(var334, var335);
4895 var333 = var336;
4896 varonce332 = var333;
4897 }
4898 {
4899 var337 = abstract_compiler__MPropDef__c_name(var_mpropdef);
4900 }
4901 if (varonce338) {
4902 var339 = varonce338;
4903 } else {
4904 var340 = ", /* pointer to ";
4905 var341 = 16;
4906 var342 = string__NativeString__to_s_with_length(var340, var341);
4907 var339 = var342;
4908 varonce338 = var339;
4909 }
4910 {
4911 { /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
4912 var345 = var_mclass->attrs[COLOR_model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
4913 if (unlikely(var345 == NULL)) {
4914 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
4915 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 347);
4916 show_backtrace(1);
4917 }
4918 var343 = var345;
4919 RET_LABEL344:(void)0;
4920 }
4921 }
4922 if (varonce346) {
4923 var347 = varonce346;
4924 } else {
4925 var348 = ":";
4926 var349 = 1;
4927 var350 = string__NativeString__to_s_with_length(var348, var349);
4928 var347 = var350;
4929 varonce346 = var347;
4930 }
4931 if (varonce351) {
4932 var352 = varonce351;
4933 } else {
4934 var353 = ":";
4935 var354 = 1;
4936 var355 = string__NativeString__to_s_with_length(var353, var354);
4937 var352 = var355;
4938 varonce351 = var352;
4939 }
4940 if (varonce356) {
4941 var357 = varonce356;
4942 } else {
4943 var358 = " */";
4944 var359 = 3;
4945 var360 = string__NativeString__to_s_with_length(var358, var359);
4946 var357 = var360;
4947 varonce356 = var357;
4948 }
4949 var361 = NEW_array__Array(&type_array__Arraykernel__Object);
4950 { /* var361 = array_instance Array[Object] */
4951 var362 = 9;
4952 var363 = NEW_array__NativeArray(var362, &type_array__NativeArraykernel__Object);
4953 ((struct instance_array__NativeArray*)var363)->values[0] = (val*) var333;
4954 ((struct instance_array__NativeArray*)var363)->values[1] = (val*) var337;
4955 ((struct instance_array__NativeArray*)var363)->values[2] = (val*) var339;
4956 ((struct instance_array__NativeArray*)var363)->values[3] = (val*) var343;
4957 ((struct instance_array__NativeArray*)var363)->values[4] = (val*) var347;
4958 ((struct instance_array__NativeArray*)var363)->values[5] = (val*) var_mclass;
4959 ((struct instance_array__NativeArray*)var363)->values[6] = (val*) var352;
4960 ((struct instance_array__NativeArray*)var363)->values[7] = (val*) var_mpropdef;
4961 ((struct instance_array__NativeArray*)var363)->values[8] = (val*) var357;
4962 {
4963 ((void (*)(val*, val*, long))(var361->class->vft[COLOR_array__Array__with_native]))(var361, var363, var362) /* with_native on <var361:Array[Object]>*/;
4964 }
4965 }
4966 {
4967 var364 = ((val* (*)(val*))(var361->class->vft[COLOR_string__Object__to_s]))(var361) /* to_s on <var361:Array[Object]>*/;
4968 }
4969 {
4970 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var364); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4971 }
4972 } else {
4973 {
4974 var365 = abstract_compiler__MPropDef__c_name(var_mpropdef);
4975 }
4976 var366 = NEW_array__Array(&type_array__Arraykernel__Object);
4977 { /* var366 = array_instance Array[Object] */
4978 var367 = 1;
4979 var368 = NEW_array__NativeArray(var367, &type_array__NativeArraykernel__Object);
4980 ((struct instance_array__NativeArray*)var368)->values[0] = (val*) var365;
4981 {
4982 ((void (*)(val*, val*, long))(var366->class->vft[COLOR_array__Array__with_native]))(var366, var368, var367) /* with_native on <var366:Array[Object]>*/;
4983 }
4984 }
4985 {
4986 var369 = ((val* (*)(val*))(var366->class->vft[COLOR_string__Object__to_s]))(var366) /* to_s on <var366:Array[Object]>*/;
4987 }
4988 {
4989 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var369); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
4990 }
4991 if (varonce370) {
4992 var371 = varonce370;
4993 } else {
4994 var372 = "(nitmethod_t)";
4995 var373 = 13;
4996 var374 = string__NativeString__to_s_with_length(var372, var373);
4997 var371 = var374;
4998 varonce370 = var371;
4999 }
5000 {
5001 var375 = abstract_compiler__MPropDef__c_name(var_mpropdef);
5002 }
5003 if (varonce376) {
5004 var377 = varonce376;
5005 } else {
5006 var378 = ", /* pointer to ";
5007 var379 = 16;
5008 var380 = string__NativeString__to_s_with_length(var378, var379);
5009 var377 = var380;
5010 varonce376 = var377;
5011 }
5012 {
5013 { /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
5014 var383 = var_mclass->attrs[COLOR_model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
5015 if (unlikely(var383 == NULL)) {
5016 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
5017 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 347);
5018 show_backtrace(1);
5019 }
5020 var381 = var383;
5021 RET_LABEL382:(void)0;
5022 }
5023 }
5024 if (varonce384) {
5025 var385 = varonce384;
5026 } else {
5027 var386 = ":";
5028 var387 = 1;
5029 var388 = string__NativeString__to_s_with_length(var386, var387);
5030 var385 = var388;
5031 varonce384 = var385;
5032 }
5033 if (varonce389) {
5034 var390 = varonce389;
5035 } else {
5036 var391 = ":";
5037 var392 = 1;
5038 var393 = string__NativeString__to_s_with_length(var391, var392);
5039 var390 = var393;
5040 varonce389 = var390;
5041 }
5042 if (varonce394) {
5043 var395 = varonce394;
5044 } else {
5045 var396 = " */";
5046 var397 = 3;
5047 var398 = string__NativeString__to_s_with_length(var396, var397);
5048 var395 = var398;
5049 varonce394 = var395;
5050 }
5051 var399 = NEW_array__Array(&type_array__Arraykernel__Object);
5052 { /* var399 = array_instance Array[Object] */
5053 var400 = 9;
5054 var401 = NEW_array__NativeArray(var400, &type_array__NativeArraykernel__Object);
5055 ((struct instance_array__NativeArray*)var401)->values[0] = (val*) var371;
5056 ((struct instance_array__NativeArray*)var401)->values[1] = (val*) var375;
5057 ((struct instance_array__NativeArray*)var401)->values[2] = (val*) var377;
5058 ((struct instance_array__NativeArray*)var401)->values[3] = (val*) var381;
5059 ((struct instance_array__NativeArray*)var401)->values[4] = (val*) var385;
5060 ((struct instance_array__NativeArray*)var401)->values[5] = (val*) var_mclass;
5061 ((struct instance_array__NativeArray*)var401)->values[6] = (val*) var390;
5062 ((struct instance_array__NativeArray*)var401)->values[7] = (val*) var_mpropdef;
5063 ((struct instance_array__NativeArray*)var401)->values[8] = (val*) var395;
5064 {
5065 ((void (*)(val*, val*, long))(var399->class->vft[COLOR_array__Array__with_native]))(var399, var401, var400) /* with_native on <var399:Array[Object]>*/;
5066 }
5067 }
5068 {
5069 var402 = ((val* (*)(val*))(var399->class->vft[COLOR_string__Object__to_s]))(var399) /* to_s on <var399:Array[Object]>*/;
5070 }
5071 {
5072 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var402); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5073 }
5074 }
5075 }
5076 BREAK_label: (void)0;
5077 var403 = 1;
5078 {
5079 var404 = kernel__Int__successor(var_i, var403);
5080 }
5081 var_i = var404;
5082 } else {
5083 goto BREAK_label405;
5084 }
5085 }
5086 BREAK_label405: (void)0;
5087 if (varonce406) {
5088 var407 = varonce406;
5089 } else {
5090 var408 = "}";
5091 var409 = 1;
5092 var410 = string__NativeString__to_s_with_length(var408, var409);
5093 var407 = var410;
5094 varonce406 = var407;
5095 }
5096 {
5097 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var407); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5098 }
5099 } else {
5100 }
5101 if (varonce411) {
5102 var412 = varonce411;
5103 } else {
5104 var413 = "};";
5105 var414 = 2;
5106 var415 = string__NativeString__to_s_with_length(var413, var414);
5107 var412 = var415;
5108 varonce411 = var412;
5109 }
5110 {
5111 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var412); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5112 }
5113 if (varonce416) {
5114 var417 = varonce416;
5115 } else {
5116 var418 = "const struct type_table type_table_";
5117 var419 = 35;
5118 var420 = string__NativeString__to_s_with_length(var418, var419);
5119 var417 = var420;
5120 varonce416 = var417;
5121 }
5122 if (varonce421) {
5123 var422 = varonce421;
5124 } else {
5125 var423 = " = {";
5126 var424 = 4;
5127 var425 = string__NativeString__to_s_with_length(var423, var424);
5128 var422 = var425;
5129 varonce421 = var422;
5130 }
5131 var426 = NEW_array__Array(&type_array__Arraykernel__Object);
5132 { /* var426 = array_instance Array[Object] */
5133 var427 = 3;
5134 var428 = NEW_array__NativeArray(var427, &type_array__NativeArraykernel__Object);
5135 ((struct instance_array__NativeArray*)var428)->values[0] = (val*) var417;
5136 ((struct instance_array__NativeArray*)var428)->values[1] = (val*) var_c_name;
5137 ((struct instance_array__NativeArray*)var428)->values[2] = (val*) var422;
5138 {
5139 ((void (*)(val*, val*, long))(var426->class->vft[COLOR_array__Array__with_native]))(var426, var428, var427) /* with_native on <var426:Array[Object]>*/;
5140 }
5141 }
5142 {
5143 var429 = ((val* (*)(val*))(var426->class->vft[COLOR_string__Object__to_s]))(var426) /* to_s on <var426:Array[Object]>*/;
5144 }
5145 {
5146 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var429); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5147 }
5148 {
5149 { /* Inline array#AbstractArrayRead#length (var_class_table) on <var_class_table:Array[nullable MClass]> */
5150 var432 = var_class_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_class_table:Array[nullable MClass]> */
5151 var430 = var432;
5152 RET_LABEL431:(void)0;
5153 }
5154 }
5155 if (varonce433) {
5156 var434 = varonce433;
5157 } else {
5158 var435 = ",";
5159 var436 = 1;
5160 var437 = string__NativeString__to_s_with_length(var435, var436);
5161 var434 = var437;
5162 varonce433 = var434;
5163 }
5164 var438 = NEW_array__Array(&type_array__Arraykernel__Object);
5165 { /* var438 = array_instance Array[Object] */
5166 var439 = 2;
5167 var440 = NEW_array__NativeArray(var439, &type_array__NativeArraykernel__Object);
5168 var441 = BOX_kernel__Int(var430); /* autobox from Int to Object */
5169 ((struct instance_array__NativeArray*)var440)->values[0] = (val*) var441;
5170 ((struct instance_array__NativeArray*)var440)->values[1] = (val*) var434;
5171 {
5172 ((void (*)(val*, val*, long))(var438->class->vft[COLOR_array__Array__with_native]))(var438, var440, var439) /* with_native on <var438:Array[Object]>*/;
5173 }
5174 }
5175 {
5176 var442 = ((val* (*)(val*))(var438->class->vft[COLOR_string__Object__to_s]))(var438) /* to_s on <var438:Array[Object]>*/;
5177 }
5178 {
5179 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var442); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5180 }
5181 if (varonce443) {
5182 var444 = varonce443;
5183 } else {
5184 var445 = "{";
5185 var446 = 1;
5186 var447 = string__NativeString__to_s_with_length(var445, var446);
5187 var444 = var447;
5188 varonce443 = var444;
5189 }
5190 {
5191 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var444); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5192 }
5193 var_448 = var_class_table;
5194 {
5195 var449 = array__AbstractArrayRead__iterator(var_448);
5196 }
5197 var_450 = var449;
5198 for(;;) {
5199 {
5200 var451 = array__ArrayIterator__is_ok(var_450);
5201 }
5202 if (var451){
5203 {
5204 var452 = array__ArrayIterator__item(var_450);
5205 }
5206 var_msuper = var452;
5207 var453 = NULL;
5208 if (var_msuper == NULL) {
5209 var454 = 1; /* is null */
5210 } else {
5211 var454 = 0; /* arg is null but recv is not */
5212 }
5213 if (0) {
5214 { /* Inline kernel#Object#== (var_msuper,var453) on <var_msuper:nullable MClass> */
5215 var_other248 = var453;
5216 {
5217 { /* Inline kernel#Object#is_same_instance (var_msuper,var_other248) on <var_msuper:nullable MClass(MClass)> */
5218 var459 = var_msuper == var_other248;
5219 var457 = var459;
5220 goto RET_LABEL458;
5221 RET_LABEL458:(void)0;
5222 }
5223 }
5224 var455 = var457;
5225 goto RET_LABEL456;
5226 RET_LABEL456:(void)0;
5227 }
5228 var454 = var455;
5229 }
5230 if (var454){
5231 if (varonce460) {
5232 var461 = varonce460;
5233 } else {
5234 var462 = "-1, /* empty */";
5235 var463 = 15;
5236 var464 = string__NativeString__to_s_with_length(var462, var463);
5237 var461 = var464;
5238 varonce460 = var461;
5239 }
5240 {
5241 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var461); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5242 }
5243 } else {
5244 {
5245 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids (self) on <self:SeparateErasureCompiler> */
5246 var467 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:SeparateErasureCompiler> */
5247 if (unlikely(var467 == NULL)) {
5248 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
5249 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 104);
5250 show_backtrace(1);
5251 }
5252 var465 = var467;
5253 RET_LABEL466:(void)0;
5254 }
5255 }
5256 {
5257 var468 = ((val* (*)(val*, val*))(var465->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var465, var_msuper) /* [] on <var465:Map[MClass, Int]>*/;
5258 }
5259 if (varonce469) {
5260 var470 = varonce469;
5261 } else {
5262 var471 = ", /* ";
5263 var472 = 5;
5264 var473 = string__NativeString__to_s_with_length(var471, var472);
5265 var470 = var473;
5266 varonce469 = var470;
5267 }
5268 if (varonce474) {
5269 var475 = varonce474;
5270 } else {
5271 var476 = " */";
5272 var477 = 3;
5273 var478 = string__NativeString__to_s_with_length(var476, var477);
5274 var475 = var478;
5275 varonce474 = var475;
5276 }
5277 var479 = NEW_array__Array(&type_array__Arraykernel__Object);
5278 { /* var479 = array_instance Array[Object] */
5279 var480 = 4;
5280 var481 = NEW_array__NativeArray(var480, &type_array__NativeArraykernel__Object);
5281 ((struct instance_array__NativeArray*)var481)->values[0] = (val*) var468;
5282 ((struct instance_array__NativeArray*)var481)->values[1] = (val*) var470;
5283 ((struct instance_array__NativeArray*)var481)->values[2] = (val*) var_msuper;
5284 ((struct instance_array__NativeArray*)var481)->values[3] = (val*) var475;
5285 {
5286 ((void (*)(val*, val*, long))(var479->class->vft[COLOR_array__Array__with_native]))(var479, var481, var480) /* with_native on <var479:Array[Object]>*/;
5287 }
5288 }
5289 {
5290 var482 = ((val* (*)(val*))(var479->class->vft[COLOR_string__Object__to_s]))(var479) /* to_s on <var479:Array[Object]>*/;
5291 }
5292 {
5293 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var482); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5294 }
5295 }
5296 {
5297 array__ArrayIterator__next(var_450); /* Direct call array#ArrayIterator#next on <var_450:ArrayIterator[nullable MClass]>*/
5298 }
5299 } else {
5300 goto BREAK_label483;
5301 }
5302 }
5303 BREAK_label483: (void)0;
5304 {
5305 { /* Inline abstract_collection#Iterator#finish (var_450) on <var_450:ArrayIterator[nullable MClass]> */
5306 RET_LABEL484:(void)0;
5307 }
5308 }
5309 if (varonce485) {
5310 var486 = varonce485;
5311 } else {
5312 var487 = "}";
5313 var488 = 1;
5314 var489 = string__NativeString__to_s_with_length(var487, var488);
5315 var486 = var489;
5316 varonce485 = var486;
5317 }
5318 {
5319 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var486); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5320 }
5321 if (varonce490) {
5322 var491 = varonce490;
5323 } else {
5324 var492 = "};";
5325 var493 = 2;
5326 var494 = string__NativeString__to_s_with_length(var492, var493);
5327 var491 = var494;
5328 varonce490 = var491;
5329 }
5330 {
5331 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var491); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5332 }
5333 {
5334 var496 = abstract_compiler__MClassType__ctype(var_mtype);
5335 }
5336 if (varonce497) {
5337 var498 = varonce497;
5338 } else {
5339 var499 = "val*";
5340 var500 = 4;
5341 var501 = string__NativeString__to_s_with_length(var499, var500);
5342 var498 = var501;
5343 varonce497 = var498;
5344 }
5345 {
5346 { /* Inline kernel#Object#!= (var496,var498) on <var496:String> */
5347 var_other = var498;
5348 {
5349 var506 = ((short int (*)(val*, val*))(var496->class->vft[COLOR_kernel__Object___61d_61d]))(var496, var_other) /* == on <var496:String>*/;
5350 var505 = var506;
5351 }
5352 var507 = !var505;
5353 var503 = var507;
5354 goto RET_LABEL504;
5355 RET_LABEL504:(void)0;
5356 }
5357 var502 = var503;
5358 }
5359 var_508 = var502;
5360 if (var502){
5361 var495 = var_508;
5362 } else {
5363 {
5364 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
5365 var511 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
5366 if (unlikely(var511 == NULL)) {
5367 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
5368 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
5369 show_backtrace(1);
5370 }
5371 var509 = var511;
5372 RET_LABEL510:(void)0;
5373 }
5374 }
5375 {
5376 { /* Inline model#MClass#name (var509) on <var509:MClass> */
5377 var514 = var509->attrs[COLOR_model__MClass___name].val; /* _name on <var509:MClass> */
5378 if (unlikely(var514 == NULL)) {
5379 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
5380 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
5381 show_backtrace(1);
5382 }
5383 var512 = var514;
5384 RET_LABEL513:(void)0;
5385 }
5386 }
5387 if (varonce515) {
5388 var516 = varonce515;
5389 } else {
5390 var517 = "Pointer";
5391 var518 = 7;
5392 var519 = string__NativeString__to_s_with_length(var517, var518);
5393 var516 = var519;
5394 varonce515 = var516;
5395 }
5396 {
5397 var521 = string__FlatString___61d_61d(var512, var516);
5398 var520 = var521;
5399 }
5400 var495 = var520;
5401 }
5402 if (var495){
5403 {
5404 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5405 var524 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5406 if (unlikely(var524 == NULL)) {
5407 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5408 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
5409 show_backtrace(1);
5410 }
5411 var522 = var524;
5412 RET_LABEL523:(void)0;
5413 }
5414 }
5415 if (varonce525) {
5416 var526 = varonce525;
5417 } else {
5418 var527 = "struct instance_";
5419 var528 = 16;
5420 var529 = string__NativeString__to_s_with_length(var527, var528);
5421 var526 = var529;
5422 varonce525 = var526;
5423 }
5424 if (varonce530) {
5425 var531 = varonce530;
5426 } else {
5427 var532 = " {";
5428 var533 = 2;
5429 var534 = string__NativeString__to_s_with_length(var532, var533);
5430 var531 = var534;
5431 varonce530 = var531;
5432 }
5433 var535 = NEW_array__Array(&type_array__Arraykernel__Object);
5434 { /* var535 = array_instance Array[Object] */
5435 var536 = 3;
5436 var537 = NEW_array__NativeArray(var536, &type_array__NativeArraykernel__Object);
5437 ((struct instance_array__NativeArray*)var537)->values[0] = (val*) var526;
5438 ((struct instance_array__NativeArray*)var537)->values[1] = (val*) var_c_name;
5439 ((struct instance_array__NativeArray*)var537)->values[2] = (val*) var531;
5440 {
5441 ((void (*)(val*, val*, long))(var535->class->vft[COLOR_array__Array__with_native]))(var535, var537, var536) /* with_native on <var535:Array[Object]>*/;
5442 }
5443 }
5444 {
5445 var538 = ((val* (*)(val*))(var535->class->vft[COLOR_string__Object__to_s]))(var535) /* to_s on <var535:Array[Object]>*/;
5446 }
5447 {
5448 abstract_compiler__CodeWriter__add_decl(var522, var538); /* Direct call abstract_compiler#CodeWriter#add_decl on <var522:CodeWriter>*/
5449 }
5450 {
5451 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5452 var541 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5453 if (unlikely(var541 == NULL)) {
5454 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5455 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
5456 show_backtrace(1);
5457 }
5458 var539 = var541;
5459 RET_LABEL540:(void)0;
5460 }
5461 }
5462 if (varonce542) {
5463 var543 = varonce542;
5464 } else {
5465 var544 = "const struct class *class;";
5466 var545 = 26;
5467 var546 = string__NativeString__to_s_with_length(var544, var545);
5468 var543 = var546;
5469 varonce542 = var543;
5470 }
5471 {
5472 abstract_compiler__CodeWriter__add_decl(var539, var543); /* Direct call abstract_compiler#CodeWriter#add_decl on <var539:CodeWriter>*/
5473 }
5474 {
5475 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5476 var549 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5477 if (unlikely(var549 == NULL)) {
5478 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5479 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
5480 show_backtrace(1);
5481 }
5482 var547 = var549;
5483 RET_LABEL548:(void)0;
5484 }
5485 }
5486 {
5487 var550 = abstract_compiler__MClassType__ctype(var_mtype);
5488 }
5489 if (varonce551) {
5490 var552 = varonce551;
5491 } else {
5492 var553 = " value;";
5493 var554 = 7;
5494 var555 = string__NativeString__to_s_with_length(var553, var554);
5495 var552 = var555;
5496 varonce551 = var552;
5497 }
5498 var556 = NEW_array__Array(&type_array__Arraykernel__Object);
5499 { /* var556 = array_instance Array[Object] */
5500 var557 = 2;
5501 var558 = NEW_array__NativeArray(var557, &type_array__NativeArraykernel__Object);
5502 ((struct instance_array__NativeArray*)var558)->values[0] = (val*) var550;
5503 ((struct instance_array__NativeArray*)var558)->values[1] = (val*) var552;
5504 {
5505 ((void (*)(val*, val*, long))(var556->class->vft[COLOR_array__Array__with_native]))(var556, var558, var557) /* with_native on <var556:Array[Object]>*/;
5506 }
5507 }
5508 {
5509 var559 = ((val* (*)(val*))(var556->class->vft[COLOR_string__Object__to_s]))(var556) /* to_s on <var556:Array[Object]>*/;
5510 }
5511 {
5512 abstract_compiler__CodeWriter__add_decl(var547, var559); /* Direct call abstract_compiler#CodeWriter#add_decl on <var547:CodeWriter>*/
5513 }
5514 {
5515 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5516 var562 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5517 if (unlikely(var562 == NULL)) {
5518 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5519 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
5520 show_backtrace(1);
5521 }
5522 var560 = var562;
5523 RET_LABEL561:(void)0;
5524 }
5525 }
5526 if (varonce563) {
5527 var564 = varonce563;
5528 } else {
5529 var565 = "};";
5530 var566 = 2;
5531 var567 = string__NativeString__to_s_with_length(var565, var566);
5532 var564 = var567;
5533 varonce563 = var564;
5534 }
5535 {
5536 abstract_compiler__CodeWriter__add_decl(var560, var564); /* Direct call abstract_compiler#CodeWriter#add_decl on <var560:CodeWriter>*/
5537 }
5538 if (varonce568) {
5539 var569 = varonce568;
5540 } else {
5541 var570 = "BOX_";
5542 var571 = 4;
5543 var572 = string__NativeString__to_s_with_length(var570, var571);
5544 var569 = var572;
5545 varonce568 = var569;
5546 }
5547 var573 = NEW_array__Array(&type_array__Arraykernel__Object);
5548 { /* var573 = array_instance Array[Object] */
5549 var574 = 2;
5550 var575 = NEW_array__NativeArray(var574, &type_array__NativeArraykernel__Object);
5551 ((struct instance_array__NativeArray*)var575)->values[0] = (val*) var569;
5552 ((struct instance_array__NativeArray*)var575)->values[1] = (val*) var_c_name;
5553 {
5554 ((void (*)(val*, val*, long))(var573->class->vft[COLOR_array__Array__with_native]))(var573, var575, var574) /* with_native on <var573:Array[Object]>*/;
5555 }
5556 }
5557 {
5558 var576 = ((val* (*)(val*))(var573->class->vft[COLOR_string__Object__to_s]))(var573) /* to_s on <var573:Array[Object]>*/;
5559 }
5560 if (varonce577) {
5561 var578 = varonce577;
5562 } else {
5563 var579 = "val* BOX_";
5564 var580 = 9;
5565 var581 = string__NativeString__to_s_with_length(var579, var580);
5566 var578 = var581;
5567 varonce577 = var578;
5568 }
5569 if (varonce582) {
5570 var583 = varonce582;
5571 } else {
5572 var584 = "(";
5573 var585 = 1;
5574 var586 = string__NativeString__to_s_with_length(var584, var585);
5575 var583 = var586;
5576 varonce582 = var583;
5577 }
5578 {
5579 var587 = abstract_compiler__MClassType__ctype(var_mtype);
5580 }
5581 if (varonce588) {
5582 var589 = varonce588;
5583 } else {
5584 var590 = ");";
5585 var591 = 2;
5586 var592 = string__NativeString__to_s_with_length(var590, var591);
5587 var589 = var592;
5588 varonce588 = var589;
5589 }
5590 var593 = NEW_array__Array(&type_array__Arraykernel__Object);
5591 { /* var593 = array_instance Array[Object] */
5592 var594 = 5;
5593 var595 = NEW_array__NativeArray(var594, &type_array__NativeArraykernel__Object);
5594 ((struct instance_array__NativeArray*)var595)->values[0] = (val*) var578;
5595 ((struct instance_array__NativeArray*)var595)->values[1] = (val*) var_c_name;
5596 ((struct instance_array__NativeArray*)var595)->values[2] = (val*) var583;
5597 ((struct instance_array__NativeArray*)var595)->values[3] = (val*) var587;
5598 ((struct instance_array__NativeArray*)var595)->values[4] = (val*) var589;
5599 {
5600 ((void (*)(val*, val*, long))(var593->class->vft[COLOR_array__Array__with_native]))(var593, var595, var594) /* with_native on <var593:Array[Object]>*/;
5601 }
5602 }
5603 {
5604 var596 = ((val* (*)(val*))(var593->class->vft[COLOR_string__Object__to_s]))(var593) /* to_s on <var593:Array[Object]>*/;
5605 }
5606 {
5607 abstract_compiler__AbstractCompiler__provide_declaration(self, var576, var596); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
5608 }
5609 if (varonce597) {
5610 var598 = varonce597;
5611 } else {
5612 var599 = "/* allocate ";
5613 var600 = 12;
5614 var601 = string__NativeString__to_s_with_length(var599, var600);
5615 var598 = var601;
5616 varonce597 = var598;
5617 }
5618 if (varonce602) {
5619 var603 = varonce602;
5620 } else {
5621 var604 = " */";
5622 var605 = 3;
5623 var606 = string__NativeString__to_s_with_length(var604, var605);
5624 var603 = var606;
5625 varonce602 = var603;
5626 }
5627 var607 = NEW_array__Array(&type_array__Arraykernel__Object);
5628 { /* var607 = array_instance Array[Object] */
5629 var608 = 3;
5630 var609 = NEW_array__NativeArray(var608, &type_array__NativeArraykernel__Object);
5631 ((struct instance_array__NativeArray*)var609)->values[0] = (val*) var598;
5632 ((struct instance_array__NativeArray*)var609)->values[1] = (val*) var_mtype;
5633 ((struct instance_array__NativeArray*)var609)->values[2] = (val*) var603;
5634 {
5635 ((void (*)(val*, val*, long))(var607->class->vft[COLOR_array__Array__with_native]))(var607, var609, var608) /* with_native on <var607:Array[Object]>*/;
5636 }
5637 }
5638 {
5639 var610 = ((val* (*)(val*))(var607->class->vft[COLOR_string__Object__to_s]))(var607) /* to_s on <var607:Array[Object]>*/;
5640 }
5641 {
5642 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var610); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5643 }
5644 if (varonce611) {
5645 var612 = varonce611;
5646 } else {
5647 var613 = "val* BOX_";
5648 var614 = 9;
5649 var615 = string__NativeString__to_s_with_length(var613, var614);
5650 var612 = var615;
5651 varonce611 = var612;
5652 }
5653 {
5654 var616 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
5655 }
5656 if (varonce617) {
5657 var618 = varonce617;
5658 } else {
5659 var619 = "(";
5660 var620 = 1;
5661 var621 = string__NativeString__to_s_with_length(var619, var620);
5662 var618 = var621;
5663 varonce617 = var618;
5664 }
5665 {
5666 var622 = abstract_compiler__MClassType__ctype(var_mtype);
5667 }
5668 if (varonce623) {
5669 var624 = varonce623;
5670 } else {
5671 var625 = " value) {";
5672 var626 = 9;
5673 var627 = string__NativeString__to_s_with_length(var625, var626);
5674 var624 = var627;
5675 varonce623 = var624;
5676 }
5677 var628 = NEW_array__Array(&type_array__Arraykernel__Object);
5678 { /* var628 = array_instance Array[Object] */
5679 var629 = 5;
5680 var630 = NEW_array__NativeArray(var629, &type_array__NativeArraykernel__Object);
5681 ((struct instance_array__NativeArray*)var630)->values[0] = (val*) var612;
5682 ((struct instance_array__NativeArray*)var630)->values[1] = (val*) var616;
5683 ((struct instance_array__NativeArray*)var630)->values[2] = (val*) var618;
5684 ((struct instance_array__NativeArray*)var630)->values[3] = (val*) var622;
5685 ((struct instance_array__NativeArray*)var630)->values[4] = (val*) var624;
5686 {
5687 ((void (*)(val*, val*, long))(var628->class->vft[COLOR_array__Array__with_native]))(var628, var630, var629) /* with_native on <var628:Array[Object]>*/;
5688 }
5689 }
5690 {
5691 var631 = ((val* (*)(val*))(var628->class->vft[COLOR_string__Object__to_s]))(var628) /* to_s on <var628:Array[Object]>*/;
5692 }
5693 {
5694 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var631); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5695 }
5696 if (varonce632) {
5697 var633 = varonce632;
5698 } else {
5699 var634 = "struct instance_";
5700 var635 = 16;
5701 var636 = string__NativeString__to_s_with_length(var634, var635);
5702 var633 = var636;
5703 varonce632 = var633;
5704 }
5705 if (varonce637) {
5706 var638 = varonce637;
5707 } else {
5708 var639 = "*res = nit_alloc(sizeof(struct instance_";
5709 var640 = 40;
5710 var641 = string__NativeString__to_s_with_length(var639, var640);
5711 var638 = var641;
5712 varonce637 = var638;
5713 }
5714 if (varonce642) {
5715 var643 = varonce642;
5716 } else {
5717 var644 = "));";
5718 var645 = 3;
5719 var646 = string__NativeString__to_s_with_length(var644, var645);
5720 var643 = var646;
5721 varonce642 = var643;
5722 }
5723 var647 = NEW_array__Array(&type_array__Arraykernel__Object);
5724 { /* var647 = array_instance Array[Object] */
5725 var648 = 5;
5726 var649 = NEW_array__NativeArray(var648, &type_array__NativeArraykernel__Object);
5727 ((struct instance_array__NativeArray*)var649)->values[0] = (val*) var633;
5728 ((struct instance_array__NativeArray*)var649)->values[1] = (val*) var_c_name;
5729 ((struct instance_array__NativeArray*)var649)->values[2] = (val*) var638;
5730 ((struct instance_array__NativeArray*)var649)->values[3] = (val*) var_c_name;
5731 ((struct instance_array__NativeArray*)var649)->values[4] = (val*) var643;
5732 {
5733 ((void (*)(val*, val*, long))(var647->class->vft[COLOR_array__Array__with_native]))(var647, var649, var648) /* with_native on <var647:Array[Object]>*/;
5734 }
5735 }
5736 {
5737 var650 = ((val* (*)(val*))(var647->class->vft[COLOR_string__Object__to_s]))(var647) /* to_s on <var647:Array[Object]>*/;
5738 }
5739 {
5740 abstract_compiler__AbstractCompilerVisitor__add(var_v, var650); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5741 }
5742 if (varonce651) {
5743 var652 = varonce651;
5744 } else {
5745 var653 = "class_";
5746 var654 = 6;
5747 var655 = string__NativeString__to_s_with_length(var653, var654);
5748 var652 = var655;
5749 varonce651 = var652;
5750 }
5751 var656 = NEW_array__Array(&type_array__Arraykernel__Object);
5752 { /* var656 = array_instance Array[Object] */
5753 var657 = 2;
5754 var658 = NEW_array__NativeArray(var657, &type_array__NativeArraykernel__Object);
5755 ((struct instance_array__NativeArray*)var658)->values[0] = (val*) var652;
5756 ((struct instance_array__NativeArray*)var658)->values[1] = (val*) var_c_name;
5757 {
5758 ((void (*)(val*, val*, long))(var656->class->vft[COLOR_array__Array__with_native]))(var656, var658, var657) /* with_native on <var656:Array[Object]>*/;
5759 }
5760 }
5761 {
5762 var659 = ((val* (*)(val*))(var656->class->vft[COLOR_string__Object__to_s]))(var656) /* to_s on <var656:Array[Object]>*/;
5763 }
5764 {
5765 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var659); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
5766 }
5767 if (varonce660) {
5768 var661 = varonce660;
5769 } else {
5770 var662 = "res->class = &class_";
5771 var663 = 20;
5772 var664 = string__NativeString__to_s_with_length(var662, var663);
5773 var661 = var664;
5774 varonce660 = var661;
5775 }
5776 if (varonce665) {
5777 var666 = varonce665;
5778 } else {
5779 var667 = ";";
5780 var668 = 1;
5781 var669 = string__NativeString__to_s_with_length(var667, var668);
5782 var666 = var669;
5783 varonce665 = var666;
5784 }
5785 var670 = NEW_array__Array(&type_array__Arraykernel__Object);
5786 { /* var670 = array_instance Array[Object] */
5787 var671 = 3;
5788 var672 = NEW_array__NativeArray(var671, &type_array__NativeArraykernel__Object);
5789 ((struct instance_array__NativeArray*)var672)->values[0] = (val*) var661;
5790 ((struct instance_array__NativeArray*)var672)->values[1] = (val*) var_c_name;
5791 ((struct instance_array__NativeArray*)var672)->values[2] = (val*) var666;
5792 {
5793 ((void (*)(val*, val*, long))(var670->class->vft[COLOR_array__Array__with_native]))(var670, var672, var671) /* with_native on <var670:Array[Object]>*/;
5794 }
5795 }
5796 {
5797 var673 = ((val* (*)(val*))(var670->class->vft[COLOR_string__Object__to_s]))(var670) /* to_s on <var670:Array[Object]>*/;
5798 }
5799 {
5800 abstract_compiler__AbstractCompilerVisitor__add(var_v, var673); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5801 }
5802 if (varonce674) {
5803 var675 = varonce674;
5804 } else {
5805 var676 = "res->value = value;";
5806 var677 = 19;
5807 var678 = string__NativeString__to_s_with_length(var676, var677);
5808 var675 = var678;
5809 varonce674 = var675;
5810 }
5811 {
5812 abstract_compiler__AbstractCompilerVisitor__add(var_v, var675); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5813 }
5814 if (varonce679) {
5815 var680 = varonce679;
5816 } else {
5817 var681 = "return (val*)res;";
5818 var682 = 17;
5819 var683 = string__NativeString__to_s_with_length(var681, var682);
5820 var680 = var683;
5821 varonce679 = var680;
5822 }
5823 {
5824 abstract_compiler__AbstractCompilerVisitor__add(var_v, var680); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5825 }
5826 if (varonce684) {
5827 var685 = varonce684;
5828 } else {
5829 var686 = "}";
5830 var687 = 1;
5831 var688 = string__NativeString__to_s_with_length(var686, var687);
5832 var685 = var688;
5833 varonce684 = var685;
5834 }
5835 {
5836 abstract_compiler__AbstractCompilerVisitor__add(var_v, var685); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5837 }
5838 {
5839 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
5840 var691 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
5841 if (unlikely(var691 == NULL)) {
5842 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
5843 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
5844 show_backtrace(1);
5845 }
5846 var689 = var691;
5847 RET_LABEL690:(void)0;
5848 }
5849 }
5850 {
5851 { /* Inline model#MClass#name (var689) on <var689:MClass> */
5852 var694 = var689->attrs[COLOR_model__MClass___name].val; /* _name on <var689:MClass> */
5853 if (unlikely(var694 == NULL)) {
5854 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
5855 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
5856 show_backtrace(1);
5857 }
5858 var692 = var694;
5859 RET_LABEL693:(void)0;
5860 }
5861 }
5862 if (varonce695) {
5863 var696 = varonce695;
5864 } else {
5865 var697 = "Pointer";
5866 var698 = 7;
5867 var699 = string__NativeString__to_s_with_length(var697, var698);
5868 var696 = var699;
5869 varonce695 = var696;
5870 }
5871 {
5872 { /* Inline kernel#Object#!= (var692,var696) on <var692:String> */
5873 var_other = var696;
5874 {
5875 var704 = ((short int (*)(val*, val*))(var692->class->vft[COLOR_kernel__Object___61d_61d]))(var692, var_other) /* == on <var692:String>*/;
5876 var703 = var704;
5877 }
5878 var705 = !var703;
5879 var701 = var705;
5880 goto RET_LABEL702;
5881 RET_LABEL702:(void)0;
5882 }
5883 var700 = var701;
5884 }
5885 if (var700){
5886 goto RET_LABEL;
5887 } else {
5888 }
5889 {
5890 var706 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
5891 }
5892 var_v = var706;
5893 if (varonce707) {
5894 var708 = varonce707;
5895 } else {
5896 var709 = "NEW_";
5897 var710 = 4;
5898 var711 = string__NativeString__to_s_with_length(var709, var710);
5899 var708 = var711;
5900 varonce707 = var708;
5901 }
5902 var712 = NEW_array__Array(&type_array__Arraykernel__Object);
5903 { /* var712 = array_instance Array[Object] */
5904 var713 = 2;
5905 var714 = NEW_array__NativeArray(var713, &type_array__NativeArraykernel__Object);
5906 ((struct instance_array__NativeArray*)var714)->values[0] = (val*) var708;
5907 ((struct instance_array__NativeArray*)var714)->values[1] = (val*) var_c_name;
5908 {
5909 ((void (*)(val*, val*, long))(var712->class->vft[COLOR_array__Array__with_native]))(var712, var714, var713) /* with_native on <var712:Array[Object]>*/;
5910 }
5911 }
5912 {
5913 var715 = ((val* (*)(val*))(var712->class->vft[COLOR_string__Object__to_s]))(var712) /* to_s on <var712:Array[Object]>*/;
5914 }
5915 {
5916 var716 = abstract_compiler__MClassType__ctype(var_mtype);
5917 }
5918 if (varonce717) {
5919 var718 = varonce717;
5920 } else {
5921 var719 = " NEW_";
5922 var720 = 5;
5923 var721 = string__NativeString__to_s_with_length(var719, var720);
5924 var718 = var721;
5925 varonce717 = var718;
5926 }
5927 if (varonce722) {
5928 var723 = varonce722;
5929 } else {
5930 var724 = "();";
5931 var725 = 3;
5932 var726 = string__NativeString__to_s_with_length(var724, var725);
5933 var723 = var726;
5934 varonce722 = var723;
5935 }
5936 var727 = NEW_array__Array(&type_array__Arraykernel__Object);
5937 { /* var727 = array_instance Array[Object] */
5938 var728 = 4;
5939 var729 = NEW_array__NativeArray(var728, &type_array__NativeArraykernel__Object);
5940 ((struct instance_array__NativeArray*)var729)->values[0] = (val*) var716;
5941 ((struct instance_array__NativeArray*)var729)->values[1] = (val*) var718;
5942 ((struct instance_array__NativeArray*)var729)->values[2] = (val*) var_c_name;
5943 ((struct instance_array__NativeArray*)var729)->values[3] = (val*) var723;
5944 {
5945 ((void (*)(val*, val*, long))(var727->class->vft[COLOR_array__Array__with_native]))(var727, var729, var728) /* with_native on <var727:Array[Object]>*/;
5946 }
5947 }
5948 {
5949 var730 = ((val* (*)(val*))(var727->class->vft[COLOR_string__Object__to_s]))(var727) /* to_s on <var727:Array[Object]>*/;
5950 }
5951 {
5952 abstract_compiler__AbstractCompiler__provide_declaration(self, var715, var730); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
5953 }
5954 if (varonce731) {
5955 var732 = varonce731;
5956 } else {
5957 var733 = "/* allocate ";
5958 var734 = 12;
5959 var735 = string__NativeString__to_s_with_length(var733, var734);
5960 var732 = var735;
5961 varonce731 = var732;
5962 }
5963 if (varonce736) {
5964 var737 = varonce736;
5965 } else {
5966 var738 = " */";
5967 var739 = 3;
5968 var740 = string__NativeString__to_s_with_length(var738, var739);
5969 var737 = var740;
5970 varonce736 = var737;
5971 }
5972 var741 = NEW_array__Array(&type_array__Arraykernel__Object);
5973 { /* var741 = array_instance Array[Object] */
5974 var742 = 3;
5975 var743 = NEW_array__NativeArray(var742, &type_array__NativeArraykernel__Object);
5976 ((struct instance_array__NativeArray*)var743)->values[0] = (val*) var732;
5977 ((struct instance_array__NativeArray*)var743)->values[1] = (val*) var_mtype;
5978 ((struct instance_array__NativeArray*)var743)->values[2] = (val*) var737;
5979 {
5980 ((void (*)(val*, val*, long))(var741->class->vft[COLOR_array__Array__with_native]))(var741, var743, var742) /* with_native on <var741:Array[Object]>*/;
5981 }
5982 }
5983 {
5984 var744 = ((val* (*)(val*))(var741->class->vft[COLOR_string__Object__to_s]))(var741) /* to_s on <var741:Array[Object]>*/;
5985 }
5986 {
5987 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var744); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5988 }
5989 {
5990 var745 = abstract_compiler__MClassType__ctype(var_mtype);
5991 }
5992 if (varonce746) {
5993 var747 = varonce746;
5994 } else {
5995 var748 = " NEW_";
5996 var749 = 5;
5997 var750 = string__NativeString__to_s_with_length(var748, var749);
5998 var747 = var750;
5999 varonce746 = var747;
6000 }
6001 if (varonce751) {
6002 var752 = varonce751;
6003 } else {
6004 var753 = "() {";
6005 var754 = 4;
6006 var755 = string__NativeString__to_s_with_length(var753, var754);
6007 var752 = var755;
6008 varonce751 = var752;
6009 }
6010 var756 = NEW_array__Array(&type_array__Arraykernel__Object);
6011 { /* var756 = array_instance Array[Object] */
6012 var757 = 4;
6013 var758 = NEW_array__NativeArray(var757, &type_array__NativeArraykernel__Object);
6014 ((struct instance_array__NativeArray*)var758)->values[0] = (val*) var745;
6015 ((struct instance_array__NativeArray*)var758)->values[1] = (val*) var747;
6016 ((struct instance_array__NativeArray*)var758)->values[2] = (val*) var_c_name;
6017 ((struct instance_array__NativeArray*)var758)->values[3] = (val*) var752;
6018 {
6019 ((void (*)(val*, val*, long))(var756->class->vft[COLOR_array__Array__with_native]))(var756, var758, var757) /* with_native on <var756:Array[Object]>*/;
6020 }
6021 }
6022 {
6023 var759 = ((val* (*)(val*))(var756->class->vft[COLOR_string__Object__to_s]))(var756) /* to_s on <var756:Array[Object]>*/;
6024 }
6025 {
6026 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var759); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6027 }
6028 if (var_is_dead){
6029 if (varonce760) {
6030 var761 = varonce760;
6031 } else {
6032 var762 = " is DEAD";
6033 var763 = 8;
6034 var764 = string__NativeString__to_s_with_length(var762, var763);
6035 var761 = var764;
6036 varonce760 = var761;
6037 }
6038 var765 = NEW_array__Array(&type_array__Arraykernel__Object);
6039 { /* var765 = array_instance Array[Object] */
6040 var766 = 2;
6041 var767 = NEW_array__NativeArray(var766, &type_array__NativeArraykernel__Object);
6042 ((struct instance_array__NativeArray*)var767)->values[0] = (val*) var_mclass;
6043 ((struct instance_array__NativeArray*)var767)->values[1] = (val*) var761;
6044 {
6045 ((void (*)(val*, val*, long))(var765->class->vft[COLOR_array__Array__with_native]))(var765, var767, var766) /* with_native on <var765:Array[Object]>*/;
6046 }
6047 }
6048 {
6049 var768 = ((val* (*)(val*))(var765->class->vft[COLOR_string__Object__to_s]))(var765) /* to_s on <var765:Array[Object]>*/;
6050 }
6051 {
6052 abstract_compiler__AbstractCompilerVisitor__add_abort(var_v, var768); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <var_v:SeparateCompilerVisitor>*/
6053 }
6054 } else {
6055 if (varonce769) {
6056 var770 = varonce769;
6057 } else {
6058 var771 = "self";
6059 var772 = 4;
6060 var773 = string__NativeString__to_s_with_length(var771, var772);
6061 var770 = var773;
6062 varonce769 = var770;
6063 }
6064 {
6065 var774 = abstract_compiler__AbstractCompilerVisitor__new_named_var(var_v, var_mtype, var770);
6066 }
6067 var_res = var774;
6068 var775 = 1;
6069 {
6070 { /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res,var775) on <var_res:RuntimeVariable> */
6071 var_res->attrs[COLOR_abstract_compiler__RuntimeVariable___is_exact].s = var775; /* _is_exact on <var_res:RuntimeVariable> */
6072 RET_LABEL776:(void)0;
6073 }
6074 }
6075 if (varonce777) {
6076 var778 = varonce777;
6077 } else {
6078 var779 = " = nit_alloc(sizeof(struct instance_";
6079 var780 = 36;
6080 var781 = string__NativeString__to_s_with_length(var779, var780);
6081 var778 = var781;
6082 varonce777 = var778;
6083 }
6084 {
6085 var782 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
6086 }
6087 if (varonce783) {
6088 var784 = varonce783;
6089 } else {
6090 var785 = "));";
6091 var786 = 3;
6092 var787 = string__NativeString__to_s_with_length(var785, var786);
6093 var784 = var787;
6094 varonce783 = var784;
6095 }
6096 var788 = NEW_array__Array(&type_array__Arraykernel__Object);
6097 { /* var788 = array_instance Array[Object] */
6098 var789 = 4;
6099 var790 = NEW_array__NativeArray(var789, &type_array__NativeArraykernel__Object);
6100 ((struct instance_array__NativeArray*)var790)->values[0] = (val*) var_res;
6101 ((struct instance_array__NativeArray*)var790)->values[1] = (val*) var778;
6102 ((struct instance_array__NativeArray*)var790)->values[2] = (val*) var782;
6103 ((struct instance_array__NativeArray*)var790)->values[3] = (val*) var784;
6104 {
6105 ((void (*)(val*, val*, long))(var788->class->vft[COLOR_array__Array__with_native]))(var788, var790, var789) /* with_native on <var788:Array[Object]>*/;
6106 }
6107 }
6108 {
6109 var791 = ((val* (*)(val*))(var788->class->vft[COLOR_string__Object__to_s]))(var788) /* to_s on <var788:Array[Object]>*/;
6110 }
6111 {
6112 abstract_compiler__AbstractCompilerVisitor__add(var_v, var791); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6113 }
6114 if (varonce792) {
6115 var793 = varonce792;
6116 } else {
6117 var794 = "class_";
6118 var795 = 6;
6119 var796 = string__NativeString__to_s_with_length(var794, var795);
6120 var793 = var796;
6121 varonce792 = var793;
6122 }
6123 var797 = NEW_array__Array(&type_array__Arraykernel__Object);
6124 { /* var797 = array_instance Array[Object] */
6125 var798 = 2;
6126 var799 = NEW_array__NativeArray(var798, &type_array__NativeArraykernel__Object);
6127 ((struct instance_array__NativeArray*)var799)->values[0] = (val*) var793;
6128 ((struct instance_array__NativeArray*)var799)->values[1] = (val*) var_c_name;
6129 {
6130 ((void (*)(val*, val*, long))(var797->class->vft[COLOR_array__Array__with_native]))(var797, var799, var798) /* with_native on <var797:Array[Object]>*/;
6131 }
6132 }
6133 {
6134 var800 = ((val* (*)(val*))(var797->class->vft[COLOR_string__Object__to_s]))(var797) /* to_s on <var797:Array[Object]>*/;
6135 }
6136 {
6137 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var800); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
6138 }
6139 if (varonce801) {
6140 var802 = varonce801;
6141 } else {
6142 var803 = "->class = &class_";
6143 var804 = 17;
6144 var805 = string__NativeString__to_s_with_length(var803, var804);
6145 var802 = var805;
6146 varonce801 = var802;
6147 }
6148 if (varonce806) {
6149 var807 = varonce806;
6150 } else {
6151 var808 = ";";
6152 var809 = 1;
6153 var810 = string__NativeString__to_s_with_length(var808, var809);
6154 var807 = var810;
6155 varonce806 = var807;
6156 }
6157 var811 = NEW_array__Array(&type_array__Arraykernel__Object);
6158 { /* var811 = array_instance Array[Object] */
6159 var812 = 4;
6160 var813 = NEW_array__NativeArray(var812, &type_array__NativeArraykernel__Object);
6161 ((struct instance_array__NativeArray*)var813)->values[0] = (val*) var_res;
6162 ((struct instance_array__NativeArray*)var813)->values[1] = (val*) var802;
6163 ((struct instance_array__NativeArray*)var813)->values[2] = (val*) var_c_name;
6164 ((struct instance_array__NativeArray*)var813)->values[3] = (val*) var807;
6165 {
6166 ((void (*)(val*, val*, long))(var811->class->vft[COLOR_array__Array__with_native]))(var811, var813, var812) /* with_native on <var811:Array[Object]>*/;
6167 }
6168 }
6169 {
6170 var814 = ((val* (*)(val*))(var811->class->vft[COLOR_string__Object__to_s]))(var811) /* to_s on <var811:Array[Object]>*/;
6171 }
6172 {
6173 abstract_compiler__AbstractCompilerVisitor__add(var_v, var814); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6174 }
6175 if (varonce815) {
6176 var816 = varonce815;
6177 } else {
6178 var817 = "((struct instance_";
6179 var818 = 18;
6180 var819 = string__NativeString__to_s_with_length(var817, var818);
6181 var816 = var819;
6182 varonce815 = var816;
6183 }
6184 {
6185 var820 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
6186 }
6187 if (varonce821) {
6188 var822 = varonce821;
6189 } else {
6190 var823 = "*)";
6191 var824 = 2;
6192 var825 = string__NativeString__to_s_with_length(var823, var824);
6193 var822 = var825;
6194 varonce821 = var822;
6195 }
6196 if (varonce826) {
6197 var827 = varonce826;
6198 } else {
6199 var828 = ")->value = NULL;";
6200 var829 = 16;
6201 var830 = string__NativeString__to_s_with_length(var828, var829);
6202 var827 = var830;
6203 varonce826 = var827;
6204 }
6205 var831 = NEW_array__Array(&type_array__Arraykernel__Object);
6206 { /* var831 = array_instance Array[Object] */
6207 var832 = 5;
6208 var833 = NEW_array__NativeArray(var832, &type_array__NativeArraykernel__Object);
6209 ((struct instance_array__NativeArray*)var833)->values[0] = (val*) var816;
6210 ((struct instance_array__NativeArray*)var833)->values[1] = (val*) var820;
6211 ((struct instance_array__NativeArray*)var833)->values[2] = (val*) var822;
6212 ((struct instance_array__NativeArray*)var833)->values[3] = (val*) var_res;
6213 ((struct instance_array__NativeArray*)var833)->values[4] = (val*) var827;
6214 {
6215 ((void (*)(val*, val*, long))(var831->class->vft[COLOR_array__Array__with_native]))(var831, var833, var832) /* with_native on <var831:Array[Object]>*/;
6216 }
6217 }
6218 {
6219 var834 = ((val* (*)(val*))(var831->class->vft[COLOR_string__Object__to_s]))(var831) /* to_s on <var831:Array[Object]>*/;
6220 }
6221 {
6222 abstract_compiler__AbstractCompilerVisitor__add(var_v, var834); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6223 }
6224 if (varonce835) {
6225 var836 = varonce835;
6226 } else {
6227 var837 = "return ";
6228 var838 = 7;
6229 var839 = string__NativeString__to_s_with_length(var837, var838);
6230 var836 = var839;
6231 varonce835 = var836;
6232 }
6233 if (varonce840) {
6234 var841 = varonce840;
6235 } else {
6236 var842 = ";";
6237 var843 = 1;
6238 var844 = string__NativeString__to_s_with_length(var842, var843);
6239 var841 = var844;
6240 varonce840 = var841;
6241 }
6242 var845 = NEW_array__Array(&type_array__Arraykernel__Object);
6243 { /* var845 = array_instance Array[Object] */
6244 var846 = 3;
6245 var847 = NEW_array__NativeArray(var846, &type_array__NativeArraykernel__Object);
6246 ((struct instance_array__NativeArray*)var847)->values[0] = (val*) var836;
6247 ((struct instance_array__NativeArray*)var847)->values[1] = (val*) var_res;
6248 ((struct instance_array__NativeArray*)var847)->values[2] = (val*) var841;
6249 {
6250 ((void (*)(val*, val*, long))(var845->class->vft[COLOR_array__Array__with_native]))(var845, var847, var846) /* with_native on <var845:Array[Object]>*/;
6251 }
6252 }
6253 {
6254 var848 = ((val* (*)(val*))(var845->class->vft[COLOR_string__Object__to_s]))(var845) /* to_s on <var845:Array[Object]>*/;
6255 }
6256 {
6257 abstract_compiler__AbstractCompilerVisitor__add(var_v, var848); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6258 }
6259 }
6260 if (varonce849) {
6261 var850 = varonce849;
6262 } else {
6263 var851 = "}";
6264 var852 = 1;
6265 var853 = string__NativeString__to_s_with_length(var851, var852);
6266 var850 = var853;
6267 varonce849 = var850;
6268 }
6269 {
6270 abstract_compiler__AbstractCompilerVisitor__add(var_v, var850); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6271 }
6272 goto RET_LABEL;
6273 } else {
6274 {
6275 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
6276 var856 = var_mclass->attrs[COLOR_model__MClass___name].val; /* _name on <var_mclass:MClass> */
6277 if (unlikely(var856 == NULL)) {
6278 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
6279 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
6280 show_backtrace(1);
6281 }
6282 var854 = var856;
6283 RET_LABEL855:(void)0;
6284 }
6285 }
6286 if (varonce857) {
6287 var858 = varonce857;
6288 } else {
6289 var859 = "NativeArray";
6290 var860 = 11;
6291 var861 = string__NativeString__to_s_with_length(var859, var860);
6292 var858 = var861;
6293 varonce857 = var858;
6294 }
6295 {
6296 var863 = string__FlatString___61d_61d(var854, var858);
6297 var862 = var863;
6298 }
6299 if (var862){
6300 {
6301 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
6302 var866 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
6303 if (unlikely(var866 == NULL)) {
6304 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
6305 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
6306 show_backtrace(1);
6307 }
6308 var864 = var866;
6309 RET_LABEL865:(void)0;
6310 }
6311 }
6312 if (varonce867) {
6313 var868 = varonce867;
6314 } else {
6315 var869 = "struct instance_";
6316 var870 = 16;
6317 var871 = string__NativeString__to_s_with_length(var869, var870);
6318 var868 = var871;
6319 varonce867 = var868;
6320 }
6321 if (varonce872) {
6322 var873 = varonce872;
6323 } else {
6324 var874 = " {";
6325 var875 = 2;
6326 var876 = string__NativeString__to_s_with_length(var874, var875);
6327 var873 = var876;
6328 varonce872 = var873;
6329 }
6330 var877 = NEW_array__Array(&type_array__Arraykernel__Object);
6331 { /* var877 = array_instance Array[Object] */
6332 var878 = 3;
6333 var879 = NEW_array__NativeArray(var878, &type_array__NativeArraykernel__Object);
6334 ((struct instance_array__NativeArray*)var879)->values[0] = (val*) var868;
6335 ((struct instance_array__NativeArray*)var879)->values[1] = (val*) var_c_name;
6336 ((struct instance_array__NativeArray*)var879)->values[2] = (val*) var873;
6337 {
6338 ((void (*)(val*, val*, long))(var877->class->vft[COLOR_array__Array__with_native]))(var877, var879, var878) /* with_native on <var877:Array[Object]>*/;
6339 }
6340 }
6341 {
6342 var880 = ((val* (*)(val*))(var877->class->vft[COLOR_string__Object__to_s]))(var877) /* to_s on <var877:Array[Object]>*/;
6343 }
6344 {
6345 abstract_compiler__CodeWriter__add_decl(var864, var880); /* Direct call abstract_compiler#CodeWriter#add_decl on <var864:CodeWriter>*/
6346 }
6347 {
6348 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
6349 var883 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
6350 if (unlikely(var883 == NULL)) {
6351 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
6352 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
6353 show_backtrace(1);
6354 }
6355 var881 = var883;
6356 RET_LABEL882:(void)0;
6357 }
6358 }
6359 if (varonce884) {
6360 var885 = varonce884;
6361 } else {
6362 var886 = "const struct class *class;";
6363 var887 = 26;
6364 var888 = string__NativeString__to_s_with_length(var886, var887);
6365 var885 = var888;
6366 varonce884 = var885;
6367 }
6368 {
6369 abstract_compiler__CodeWriter__add_decl(var881, var885); /* Direct call abstract_compiler#CodeWriter#add_decl on <var881:CodeWriter>*/
6370 }
6371 {
6372 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
6373 var891 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
6374 if (unlikely(var891 == NULL)) {
6375 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
6376 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
6377 show_backtrace(1);
6378 }
6379 var889 = var891;
6380 RET_LABEL890:(void)0;
6381 }
6382 }
6383 if (varonce892) {
6384 var893 = varonce892;
6385 } else {
6386 var894 = "int length;";
6387 var895 = 11;
6388 var896 = string__NativeString__to_s_with_length(var894, var895);
6389 var893 = var896;
6390 varonce892 = var893;
6391 }
6392 {
6393 abstract_compiler__CodeWriter__add_decl(var889, var893); /* Direct call abstract_compiler#CodeWriter#add_decl on <var889:CodeWriter>*/
6394 }
6395 {
6396 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
6397 var899 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
6398 if (unlikely(var899 == NULL)) {
6399 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
6400 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
6401 show_backtrace(1);
6402 }
6403 var897 = var899;
6404 RET_LABEL898:(void)0;
6405 }
6406 }
6407 if (varonce900) {
6408 var901 = varonce900;
6409 } else {
6410 var902 = "val* values[];";
6411 var903 = 14;
6412 var904 = string__NativeString__to_s_with_length(var902, var903);
6413 var901 = var904;
6414 varonce900 = var901;
6415 }
6416 {
6417 abstract_compiler__CodeWriter__add_decl(var897, var901); /* Direct call abstract_compiler#CodeWriter#add_decl on <var897:CodeWriter>*/
6418 }
6419 {
6420 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
6421 var907 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
6422 if (unlikely(var907 == NULL)) {
6423 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
6424 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
6425 show_backtrace(1);
6426 }
6427 var905 = var907;
6428 RET_LABEL906:(void)0;
6429 }
6430 }
6431 if (varonce908) {
6432 var909 = varonce908;
6433 } else {
6434 var910 = "};";
6435 var911 = 2;
6436 var912 = string__NativeString__to_s_with_length(var910, var911);
6437 var909 = var912;
6438 varonce908 = var909;
6439 }
6440 {
6441 abstract_compiler__CodeWriter__add_decl(var905, var909); /* Direct call abstract_compiler#CodeWriter#add_decl on <var905:CodeWriter>*/
6442 }
6443 if (varonce913) {
6444 var914 = varonce913;
6445 } else {
6446 var915 = "NEW_";
6447 var916 = 4;
6448 var917 = string__NativeString__to_s_with_length(var915, var916);
6449 var914 = var917;
6450 varonce913 = var914;
6451 }
6452 var918 = NEW_array__Array(&type_array__Arraykernel__Object);
6453 { /* var918 = array_instance Array[Object] */
6454 var919 = 2;
6455 var920 = NEW_array__NativeArray(var919, &type_array__NativeArraykernel__Object);
6456 ((struct instance_array__NativeArray*)var920)->values[0] = (val*) var914;
6457 ((struct instance_array__NativeArray*)var920)->values[1] = (val*) var_c_name;
6458 {
6459 ((void (*)(val*, val*, long))(var918->class->vft[COLOR_array__Array__with_native]))(var918, var920, var919) /* with_native on <var918:Array[Object]>*/;
6460 }
6461 }
6462 {
6463 var921 = ((val* (*)(val*))(var918->class->vft[COLOR_string__Object__to_s]))(var918) /* to_s on <var918:Array[Object]>*/;
6464 }
6465 {
6466 var922 = abstract_compiler__MClassType__ctype(var_mtype);
6467 }
6468 if (varonce923) {
6469 var924 = varonce923;
6470 } else {
6471 var925 = " NEW_";
6472 var926 = 5;
6473 var927 = string__NativeString__to_s_with_length(var925, var926);
6474 var924 = var927;
6475 varonce923 = var924;
6476 }
6477 if (varonce928) {
6478 var929 = varonce928;
6479 } else {
6480 var930 = "(int length);";
6481 var931 = 13;
6482 var932 = string__NativeString__to_s_with_length(var930, var931);
6483 var929 = var932;
6484 varonce928 = var929;
6485 }
6486 var933 = NEW_array__Array(&type_array__Arraykernel__Object);
6487 { /* var933 = array_instance Array[Object] */
6488 var934 = 4;
6489 var935 = NEW_array__NativeArray(var934, &type_array__NativeArraykernel__Object);
6490 ((struct instance_array__NativeArray*)var935)->values[0] = (val*) var922;
6491 ((struct instance_array__NativeArray*)var935)->values[1] = (val*) var924;
6492 ((struct instance_array__NativeArray*)var935)->values[2] = (val*) var_c_name;
6493 ((struct instance_array__NativeArray*)var935)->values[3] = (val*) var929;
6494 {
6495 ((void (*)(val*, val*, long))(var933->class->vft[COLOR_array__Array__with_native]))(var933, var935, var934) /* with_native on <var933:Array[Object]>*/;
6496 }
6497 }
6498 {
6499 var936 = ((val* (*)(val*))(var933->class->vft[COLOR_string__Object__to_s]))(var933) /* to_s on <var933:Array[Object]>*/;
6500 }
6501 {
6502 abstract_compiler__AbstractCompiler__provide_declaration(self, var921, var936); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
6503 }
6504 if (varonce937) {
6505 var938 = varonce937;
6506 } else {
6507 var939 = "/* allocate ";
6508 var940 = 12;
6509 var941 = string__NativeString__to_s_with_length(var939, var940);
6510 var938 = var941;
6511 varonce937 = var938;
6512 }
6513 if (varonce942) {
6514 var943 = varonce942;
6515 } else {
6516 var944 = " */";
6517 var945 = 3;
6518 var946 = string__NativeString__to_s_with_length(var944, var945);
6519 var943 = var946;
6520 varonce942 = var943;
6521 }
6522 var947 = NEW_array__Array(&type_array__Arraykernel__Object);
6523 { /* var947 = array_instance Array[Object] */
6524 var948 = 3;
6525 var949 = NEW_array__NativeArray(var948, &type_array__NativeArraykernel__Object);
6526 ((struct instance_array__NativeArray*)var949)->values[0] = (val*) var938;
6527 ((struct instance_array__NativeArray*)var949)->values[1] = (val*) var_mtype;
6528 ((struct instance_array__NativeArray*)var949)->values[2] = (val*) var943;
6529 {
6530 ((void (*)(val*, val*, long))(var947->class->vft[COLOR_array__Array__with_native]))(var947, var949, var948) /* with_native on <var947:Array[Object]>*/;
6531 }
6532 }
6533 {
6534 var950 = ((val* (*)(val*))(var947->class->vft[COLOR_string__Object__to_s]))(var947) /* to_s on <var947:Array[Object]>*/;
6535 }
6536 {
6537 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var950); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6538 }
6539 {
6540 var951 = abstract_compiler__MClassType__ctype(var_mtype);
6541 }
6542 if (varonce952) {
6543 var953 = varonce952;
6544 } else {
6545 var954 = " NEW_";
6546 var955 = 5;
6547 var956 = string__NativeString__to_s_with_length(var954, var955);
6548 var953 = var956;
6549 varonce952 = var953;
6550 }
6551 if (varonce957) {
6552 var958 = varonce957;
6553 } else {
6554 var959 = "(int length) {";
6555 var960 = 14;
6556 var961 = string__NativeString__to_s_with_length(var959, var960);
6557 var958 = var961;
6558 varonce957 = var958;
6559 }
6560 var962 = NEW_array__Array(&type_array__Arraykernel__Object);
6561 { /* var962 = array_instance Array[Object] */
6562 var963 = 4;
6563 var964 = NEW_array__NativeArray(var963, &type_array__NativeArraykernel__Object);
6564 ((struct instance_array__NativeArray*)var964)->values[0] = (val*) var951;
6565 ((struct instance_array__NativeArray*)var964)->values[1] = (val*) var953;
6566 ((struct instance_array__NativeArray*)var964)->values[2] = (val*) var_c_name;
6567 ((struct instance_array__NativeArray*)var964)->values[3] = (val*) var958;
6568 {
6569 ((void (*)(val*, val*, long))(var962->class->vft[COLOR_array__Array__with_native]))(var962, var964, var963) /* with_native on <var962:Array[Object]>*/;
6570 }
6571 }
6572 {
6573 var965 = ((val* (*)(val*))(var962->class->vft[COLOR_string__Object__to_s]))(var962) /* to_s on <var962:Array[Object]>*/;
6574 }
6575 {
6576 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var965); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6577 }
6578 if (varonce966) {
6579 var967 = varonce966;
6580 } else {
6581 var968 = "self";
6582 var969 = 4;
6583 var970 = string__NativeString__to_s_with_length(var968, var969);
6584 var967 = var970;
6585 varonce966 = var967;
6586 }
6587 {
6588 var971 = abstract_compiler__AbstractCompilerVisitor__get_name(var_v, var967);
6589 }
6590 var_res972 = var971;
6591 if (varonce973) {
6592 var974 = varonce973;
6593 } else {
6594 var975 = "struct instance_";
6595 var976 = 16;
6596 var977 = string__NativeString__to_s_with_length(var975, var976);
6597 var974 = var977;
6598 varonce973 = var974;
6599 }
6600 if (varonce978) {
6601 var979 = varonce978;
6602 } else {
6603 var980 = " *";
6604 var981 = 2;
6605 var982 = string__NativeString__to_s_with_length(var980, var981);
6606 var979 = var982;
6607 varonce978 = var979;
6608 }
6609 if (varonce983) {
6610 var984 = varonce983;
6611 } else {
6612 var985 = ";";
6613 var986 = 1;
6614 var987 = string__NativeString__to_s_with_length(var985, var986);
6615 var984 = var987;
6616 varonce983 = var984;
6617 }
6618 var988 = NEW_array__Array(&type_array__Arraykernel__Object);
6619 { /* var988 = array_instance Array[Object] */
6620 var989 = 5;
6621 var990 = NEW_array__NativeArray(var989, &type_array__NativeArraykernel__Object);
6622 ((struct instance_array__NativeArray*)var990)->values[0] = (val*) var974;
6623 ((struct instance_array__NativeArray*)var990)->values[1] = (val*) var_c_name;
6624 ((struct instance_array__NativeArray*)var990)->values[2] = (val*) var979;
6625 ((struct instance_array__NativeArray*)var990)->values[3] = (val*) var_res972;
6626 ((struct instance_array__NativeArray*)var990)->values[4] = (val*) var984;
6627 {
6628 ((void (*)(val*, val*, long))(var988->class->vft[COLOR_array__Array__with_native]))(var988, var990, var989) /* with_native on <var988:Array[Object]>*/;
6629 }
6630 }
6631 {
6632 var991 = ((val* (*)(val*))(var988->class->vft[COLOR_string__Object__to_s]))(var988) /* to_s on <var988:Array[Object]>*/;
6633 }
6634 {
6635 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var991); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6636 }
6637 {
6638 { /* Inline model#MClassType#arguments (var_mtype) on <var_mtype:MClassType> */
6639 var994 = var_mtype->attrs[COLOR_model__MClassType___arguments].val; /* _arguments on <var_mtype:MClassType> */
6640 if (unlikely(var994 == NULL)) {
6641 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _arguments");
6642 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 996);
6643 show_backtrace(1);
6644 }
6645 var992 = var994;
6646 RET_LABEL993:(void)0;
6647 }
6648 }
6649 {
6650 var995 = abstract_collection__SequenceRead__first(var992);
6651 }
6652 var_mtype_elt = var995;
6653 if (varonce996) {
6654 var997 = varonce996;
6655 } else {
6656 var998 = " = nit_alloc(sizeof(struct instance_";
6657 var999 = 36;
6658 var1000 = string__NativeString__to_s_with_length(var998, var999);
6659 var997 = var1000;
6660 varonce996 = var997;
6661 }
6662 if (varonce1001) {
6663 var1002 = varonce1001;
6664 } else {
6665 var1003 = ") + length*sizeof(";
6666 var1004 = 18;
6667 var1005 = string__NativeString__to_s_with_length(var1003, var1004);
6668 var1002 = var1005;
6669 varonce1001 = var1002;
6670 }
6671 {
6672 var1006 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
6673 }
6674 if (varonce1007) {
6675 var1008 = varonce1007;
6676 } else {
6677 var1009 = "));";
6678 var1010 = 3;
6679 var1011 = string__NativeString__to_s_with_length(var1009, var1010);
6680 var1008 = var1011;
6681 varonce1007 = var1008;
6682 }
6683 var1012 = NEW_array__Array(&type_array__Arraykernel__Object);
6684 { /* var1012 = array_instance Array[Object] */
6685 var1013 = 6;
6686 var1014 = NEW_array__NativeArray(var1013, &type_array__NativeArraykernel__Object);
6687 ((struct instance_array__NativeArray*)var1014)->values[0] = (val*) var_res972;
6688 ((struct instance_array__NativeArray*)var1014)->values[1] = (val*) var997;
6689 ((struct instance_array__NativeArray*)var1014)->values[2] = (val*) var_c_name;
6690 ((struct instance_array__NativeArray*)var1014)->values[3] = (val*) var1002;
6691 ((struct instance_array__NativeArray*)var1014)->values[4] = (val*) var1006;
6692 ((struct instance_array__NativeArray*)var1014)->values[5] = (val*) var1008;
6693 {
6694 ((void (*)(val*, val*, long))(var1012->class->vft[COLOR_array__Array__with_native]))(var1012, var1014, var1013) /* with_native on <var1012:Array[Object]>*/;
6695 }
6696 }
6697 {
6698 var1015 = ((val* (*)(val*))(var1012->class->vft[COLOR_string__Object__to_s]))(var1012) /* to_s on <var1012:Array[Object]>*/;
6699 }
6700 {
6701 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1015); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6702 }
6703 if (varonce1016) {
6704 var1017 = varonce1016;
6705 } else {
6706 var1018 = "class_";
6707 var1019 = 6;
6708 var1020 = string__NativeString__to_s_with_length(var1018, var1019);
6709 var1017 = var1020;
6710 varonce1016 = var1017;
6711 }
6712 var1021 = NEW_array__Array(&type_array__Arraykernel__Object);
6713 { /* var1021 = array_instance Array[Object] */
6714 var1022 = 2;
6715 var1023 = NEW_array__NativeArray(var1022, &type_array__NativeArraykernel__Object);
6716 ((struct instance_array__NativeArray*)var1023)->values[0] = (val*) var1017;
6717 ((struct instance_array__NativeArray*)var1023)->values[1] = (val*) var_c_name;
6718 {
6719 ((void (*)(val*, val*, long))(var1021->class->vft[COLOR_array__Array__with_native]))(var1021, var1023, var1022) /* with_native on <var1021:Array[Object]>*/;
6720 }
6721 }
6722 {
6723 var1024 = ((val* (*)(val*))(var1021->class->vft[COLOR_string__Object__to_s]))(var1021) /* to_s on <var1021:Array[Object]>*/;
6724 }
6725 {
6726 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var1024); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
6727 }
6728 if (varonce1025) {
6729 var1026 = varonce1025;
6730 } else {
6731 var1027 = "->class = &class_";
6732 var1028 = 17;
6733 var1029 = string__NativeString__to_s_with_length(var1027, var1028);
6734 var1026 = var1029;
6735 varonce1025 = var1026;
6736 }
6737 if (varonce1030) {
6738 var1031 = varonce1030;
6739 } else {
6740 var1032 = ";";
6741 var1033 = 1;
6742 var1034 = string__NativeString__to_s_with_length(var1032, var1033);
6743 var1031 = var1034;
6744 varonce1030 = var1031;
6745 }
6746 var1035 = NEW_array__Array(&type_array__Arraykernel__Object);
6747 { /* var1035 = array_instance Array[Object] */
6748 var1036 = 4;
6749 var1037 = NEW_array__NativeArray(var1036, &type_array__NativeArraykernel__Object);
6750 ((struct instance_array__NativeArray*)var1037)->values[0] = (val*) var_res972;
6751 ((struct instance_array__NativeArray*)var1037)->values[1] = (val*) var1026;
6752 ((struct instance_array__NativeArray*)var1037)->values[2] = (val*) var_c_name;
6753 ((struct instance_array__NativeArray*)var1037)->values[3] = (val*) var1031;
6754 {
6755 ((void (*)(val*, val*, long))(var1035->class->vft[COLOR_array__Array__with_native]))(var1035, var1037, var1036) /* with_native on <var1035:Array[Object]>*/;
6756 }
6757 }
6758 {
6759 var1038 = ((val* (*)(val*))(var1035->class->vft[COLOR_string__Object__to_s]))(var1035) /* to_s on <var1035:Array[Object]>*/;
6760 }
6761 {
6762 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1038); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6763 }
6764 if (varonce1039) {
6765 var1040 = varonce1039;
6766 } else {
6767 var1041 = "->length = length;";
6768 var1042 = 18;
6769 var1043 = string__NativeString__to_s_with_length(var1041, var1042);
6770 var1040 = var1043;
6771 varonce1039 = var1040;
6772 }
6773 var1044 = NEW_array__Array(&type_array__Arraykernel__Object);
6774 { /* var1044 = array_instance Array[Object] */
6775 var1045 = 2;
6776 var1046 = NEW_array__NativeArray(var1045, &type_array__NativeArraykernel__Object);
6777 ((struct instance_array__NativeArray*)var1046)->values[0] = (val*) var_res972;
6778 ((struct instance_array__NativeArray*)var1046)->values[1] = (val*) var1040;
6779 {
6780 ((void (*)(val*, val*, long))(var1044->class->vft[COLOR_array__Array__with_native]))(var1044, var1046, var1045) /* with_native on <var1044:Array[Object]>*/;
6781 }
6782 }
6783 {
6784 var1047 = ((val* (*)(val*))(var1044->class->vft[COLOR_string__Object__to_s]))(var1044) /* to_s on <var1044:Array[Object]>*/;
6785 }
6786 {
6787 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1047); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6788 }
6789 if (varonce1048) {
6790 var1049 = varonce1048;
6791 } else {
6792 var1050 = "return (val*)";
6793 var1051 = 13;
6794 var1052 = string__NativeString__to_s_with_length(var1050, var1051);
6795 var1049 = var1052;
6796 varonce1048 = var1049;
6797 }
6798 if (varonce1053) {
6799 var1054 = varonce1053;
6800 } else {
6801 var1055 = ";";
6802 var1056 = 1;
6803 var1057 = string__NativeString__to_s_with_length(var1055, var1056);
6804 var1054 = var1057;
6805 varonce1053 = var1054;
6806 }
6807 var1058 = NEW_array__Array(&type_array__Arraykernel__Object);
6808 { /* var1058 = array_instance Array[Object] */
6809 var1059 = 3;
6810 var1060 = NEW_array__NativeArray(var1059, &type_array__NativeArraykernel__Object);
6811 ((struct instance_array__NativeArray*)var1060)->values[0] = (val*) var1049;
6812 ((struct instance_array__NativeArray*)var1060)->values[1] = (val*) var_res972;
6813 ((struct instance_array__NativeArray*)var1060)->values[2] = (val*) var1054;
6814 {
6815 ((void (*)(val*, val*, long))(var1058->class->vft[COLOR_array__Array__with_native]))(var1058, var1060, var1059) /* with_native on <var1058:Array[Object]>*/;
6816 }
6817 }
6818 {
6819 var1061 = ((val* (*)(val*))(var1058->class->vft[COLOR_string__Object__to_s]))(var1058) /* to_s on <var1058:Array[Object]>*/;
6820 }
6821 {
6822 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1061); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6823 }
6824 if (varonce1062) {
6825 var1063 = varonce1062;
6826 } else {
6827 var1064 = "}";
6828 var1065 = 1;
6829 var1066 = string__NativeString__to_s_with_length(var1064, var1065);
6830 var1063 = var1066;
6831 varonce1062 = var1063;
6832 }
6833 {
6834 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1063); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6835 }
6836 goto RET_LABEL;
6837 } else {
6838 {
6839 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
6840 var1070 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
6841 if (unlikely(var1070 == NULL)) {
6842 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
6843 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
6844 show_backtrace(1);
6845 }
6846 var1068 = var1070;
6847 RET_LABEL1069:(void)0;
6848 }
6849 }
6850 {
6851 { /* Inline model#MClass#kind (var1068) on <var1068:MClass> */
6852 var1073 = var1068->attrs[COLOR_model__MClass___kind].val; /* _kind on <var1068:MClass> */
6853 if (unlikely(var1073 == NULL)) {
6854 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
6855 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 371);
6856 show_backtrace(1);
6857 }
6858 var1071 = var1073;
6859 RET_LABEL1072:(void)0;
6860 }
6861 }
6862 {
6863 var1074 = model__Object__extern_kind(self);
6864 }
6865 {
6866 { /* Inline kernel#Object#== (var1071,var1074) on <var1071:MClassKind> */
6867 var_other248 = var1074;
6868 {
6869 { /* Inline kernel#Object#is_same_instance (var1071,var_other248) on <var1071:MClassKind> */
6870 var1080 = var1071 == var_other248;
6871 var1078 = var1080;
6872 goto RET_LABEL1079;
6873 RET_LABEL1079:(void)0;
6874 }
6875 }
6876 var1076 = var1078;
6877 goto RET_LABEL1077;
6878 RET_LABEL1077:(void)0;
6879 }
6880 var1075 = var1076;
6881 }
6882 var_1081 = var1075;
6883 if (var1075){
6884 {
6885 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
6886 var1084 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
6887 if (unlikely(var1084 == NULL)) {
6888 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
6889 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
6890 show_backtrace(1);
6891 }
6892 var1082 = var1084;
6893 RET_LABEL1083:(void)0;
6894 }
6895 }
6896 {
6897 { /* Inline model#MClass#name (var1082) on <var1082:MClass> */
6898 var1087 = var1082->attrs[COLOR_model__MClass___name].val; /* _name on <var1082:MClass> */
6899 if (unlikely(var1087 == NULL)) {
6900 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
6901 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
6902 show_backtrace(1);
6903 }
6904 var1085 = var1087;
6905 RET_LABEL1086:(void)0;
6906 }
6907 }
6908 if (varonce1088) {
6909 var1089 = varonce1088;
6910 } else {
6911 var1090 = "NativeString";
6912 var1091 = 12;
6913 var1092 = string__NativeString__to_s_with_length(var1090, var1091);
6914 var1089 = var1092;
6915 varonce1088 = var1089;
6916 }
6917 {
6918 { /* Inline kernel#Object#!= (var1085,var1089) on <var1085:String> */
6919 var_other = var1089;
6920 {
6921 var1097 = ((short int (*)(val*, val*))(var1085->class->vft[COLOR_kernel__Object___61d_61d]))(var1085, var_other) /* == on <var1085:String>*/;
6922 var1096 = var1097;
6923 }
6924 var1098 = !var1096;
6925 var1094 = var1098;
6926 goto RET_LABEL1095;
6927 RET_LABEL1095:(void)0;
6928 }
6929 var1093 = var1094;
6930 }
6931 var1067 = var1093;
6932 } else {
6933 var1067 = var_1081;
6934 }
6935 if (var1067){
6936 {
6937 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
6938 var1101 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
6939 if (unlikely(var1101 == NULL)) {
6940 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
6941 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
6942 show_backtrace(1);
6943 }
6944 var1099 = var1101;
6945 RET_LABEL1100:(void)0;
6946 }
6947 }
6948 {
6949 { /* Inline model#MModule#pointer_type (var1099) on <var1099:MModule> */
6950 var1104 = var1099->attrs[COLOR_model__MModule___pointer_type].val != NULL; /* _pointer_type on <var1099:MModule> */
6951 if(likely(var1104)) {
6952 var1105 = var1099->attrs[COLOR_model__MModule___pointer_type].val; /* _pointer_type on <var1099:MModule> */
6953 if (unlikely(var1105 == NULL)) {
6954 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _pointer_type");
6955 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 217);
6956 show_backtrace(1);
6957 }
6958 } else {
6959 if (varonce1106) {
6960 var1107 = varonce1106;
6961 } else {
6962 var1108 = "Pointer";
6963 var1109 = 7;
6964 var1110 = string__NativeString__to_s_with_length(var1108, var1109);
6965 var1107 = var1110;
6966 varonce1106 = var1107;
6967 }
6968 {
6969 var1111 = model__MModule__get_primitive_class(var1099, var1107);
6970 }
6971 {
6972 { /* Inline model#MClass#mclass_type (var1111) on <var1111:MClass> */
6973 var1114 = var1111->attrs[COLOR_model__MClass___mclass_type].val; /* _mclass_type on <var1111:MClass> */
6974 if (unlikely(var1114 == NULL)) {
6975 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
6976 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 435);
6977 show_backtrace(1);
6978 }
6979 var1112 = var1114;
6980 RET_LABEL1113:(void)0;
6981 }
6982 }
6983 var1099->attrs[COLOR_model__MModule___pointer_type].val = var1112; /* _pointer_type on <var1099:MModule> */
6984 var1105 = var1112;
6985 }
6986 var1102 = var1105;
6987 RET_LABEL1103:(void)0;
6988 }
6989 }
6990 var_pointer_type = var1102;
6991 if (varonce1115) {
6992 var1116 = varonce1115;
6993 } else {
6994 var1117 = "NEW_";
6995 var1118 = 4;
6996 var1119 = string__NativeString__to_s_with_length(var1117, var1118);
6997 var1116 = var1119;
6998 varonce1115 = var1116;
6999 }
7000 var1120 = NEW_array__Array(&type_array__Arraykernel__Object);
7001 { /* var1120 = array_instance Array[Object] */
7002 var1121 = 2;
7003 var1122 = NEW_array__NativeArray(var1121, &type_array__NativeArraykernel__Object);
7004 ((struct instance_array__NativeArray*)var1122)->values[0] = (val*) var1116;
7005 ((struct instance_array__NativeArray*)var1122)->values[1] = (val*) var_c_name;
7006 {
7007 ((void (*)(val*, val*, long))(var1120->class->vft[COLOR_array__Array__with_native]))(var1120, var1122, var1121) /* with_native on <var1120:Array[Object]>*/;
7008 }
7009 }
7010 {
7011 var1123 = ((val* (*)(val*))(var1120->class->vft[COLOR_string__Object__to_s]))(var1120) /* to_s on <var1120:Array[Object]>*/;
7012 }
7013 {
7014 var1124 = abstract_compiler__MClassType__ctype(var_mtype);
7015 }
7016 if (varonce1125) {
7017 var1126 = varonce1125;
7018 } else {
7019 var1127 = " NEW_";
7020 var1128 = 5;
7021 var1129 = string__NativeString__to_s_with_length(var1127, var1128);
7022 var1126 = var1129;
7023 varonce1125 = var1126;
7024 }
7025 if (varonce1130) {
7026 var1131 = varonce1130;
7027 } else {
7028 var1132 = "();";
7029 var1133 = 3;
7030 var1134 = string__NativeString__to_s_with_length(var1132, var1133);
7031 var1131 = var1134;
7032 varonce1130 = var1131;
7033 }
7034 var1135 = NEW_array__Array(&type_array__Arraykernel__Object);
7035 { /* var1135 = array_instance Array[Object] */
7036 var1136 = 4;
7037 var1137 = NEW_array__NativeArray(var1136, &type_array__NativeArraykernel__Object);
7038 ((struct instance_array__NativeArray*)var1137)->values[0] = (val*) var1124;
7039 ((struct instance_array__NativeArray*)var1137)->values[1] = (val*) var1126;
7040 ((struct instance_array__NativeArray*)var1137)->values[2] = (val*) var_c_name;
7041 ((struct instance_array__NativeArray*)var1137)->values[3] = (val*) var1131;
7042 {
7043 ((void (*)(val*, val*, long))(var1135->class->vft[COLOR_array__Array__with_native]))(var1135, var1137, var1136) /* with_native on <var1135:Array[Object]>*/;
7044 }
7045 }
7046 {
7047 var1138 = ((val* (*)(val*))(var1135->class->vft[COLOR_string__Object__to_s]))(var1135) /* to_s on <var1135:Array[Object]>*/;
7048 }
7049 {
7050 abstract_compiler__AbstractCompiler__provide_declaration(self, var1123, var1138); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
7051 }
7052 if (varonce1139) {
7053 var1140 = varonce1139;
7054 } else {
7055 var1141 = "/* allocate ";
7056 var1142 = 12;
7057 var1143 = string__NativeString__to_s_with_length(var1141, var1142);
7058 var1140 = var1143;
7059 varonce1139 = var1140;
7060 }
7061 if (varonce1144) {
7062 var1145 = varonce1144;
7063 } else {
7064 var1146 = " */";
7065 var1147 = 3;
7066 var1148 = string__NativeString__to_s_with_length(var1146, var1147);
7067 var1145 = var1148;
7068 varonce1144 = var1145;
7069 }
7070 var1149 = NEW_array__Array(&type_array__Arraykernel__Object);
7071 { /* var1149 = array_instance Array[Object] */
7072 var1150 = 3;
7073 var1151 = NEW_array__NativeArray(var1150, &type_array__NativeArraykernel__Object);
7074 ((struct instance_array__NativeArray*)var1151)->values[0] = (val*) var1140;
7075 ((struct instance_array__NativeArray*)var1151)->values[1] = (val*) var_mtype;
7076 ((struct instance_array__NativeArray*)var1151)->values[2] = (val*) var1145;
7077 {
7078 ((void (*)(val*, val*, long))(var1149->class->vft[COLOR_array__Array__with_native]))(var1149, var1151, var1150) /* with_native on <var1149:Array[Object]>*/;
7079 }
7080 }
7081 {
7082 var1152 = ((val* (*)(val*))(var1149->class->vft[COLOR_string__Object__to_s]))(var1149) /* to_s on <var1149:Array[Object]>*/;
7083 }
7084 {
7085 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var1152); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
7086 }
7087 {
7088 var1153 = abstract_compiler__MClassType__ctype(var_mtype);
7089 }
7090 if (varonce1154) {
7091 var1155 = varonce1154;
7092 } else {
7093 var1156 = " NEW_";
7094 var1157 = 5;
7095 var1158 = string__NativeString__to_s_with_length(var1156, var1157);
7096 var1155 = var1158;
7097 varonce1154 = var1155;
7098 }
7099 if (varonce1159) {
7100 var1160 = varonce1159;
7101 } else {
7102 var1161 = "() {";
7103 var1162 = 4;
7104 var1163 = string__NativeString__to_s_with_length(var1161, var1162);
7105 var1160 = var1163;
7106 varonce1159 = var1160;
7107 }
7108 var1164 = NEW_array__Array(&type_array__Arraykernel__Object);
7109 { /* var1164 = array_instance Array[Object] */
7110 var1165 = 4;
7111 var1166 = NEW_array__NativeArray(var1165, &type_array__NativeArraykernel__Object);
7112 ((struct instance_array__NativeArray*)var1166)->values[0] = (val*) var1153;
7113 ((struct instance_array__NativeArray*)var1166)->values[1] = (val*) var1155;
7114 ((struct instance_array__NativeArray*)var1166)->values[2] = (val*) var_c_name;
7115 ((struct instance_array__NativeArray*)var1166)->values[3] = (val*) var1160;
7116 {
7117 ((void (*)(val*, val*, long))(var1164->class->vft[COLOR_array__Array__with_native]))(var1164, var1166, var1165) /* with_native on <var1164:Array[Object]>*/;
7118 }
7119 }
7120 {
7121 var1167 = ((val* (*)(val*))(var1164->class->vft[COLOR_string__Object__to_s]))(var1164) /* to_s on <var1164:Array[Object]>*/;
7122 }
7123 {
7124 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var1167); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
7125 }
7126 if (var_is_dead){
7127 if (varonce1168) {
7128 var1169 = varonce1168;
7129 } else {
7130 var1170 = " is DEAD";
7131 var1171 = 8;
7132 var1172 = string__NativeString__to_s_with_length(var1170, var1171);
7133 var1169 = var1172;
7134 varonce1168 = var1169;
7135 }
7136 var1173 = NEW_array__Array(&type_array__Arraykernel__Object);
7137 { /* var1173 = array_instance Array[Object] */
7138 var1174 = 2;
7139 var1175 = NEW_array__NativeArray(var1174, &type_array__NativeArraykernel__Object);
7140 ((struct instance_array__NativeArray*)var1175)->values[0] = (val*) var_mclass;
7141 ((struct instance_array__NativeArray*)var1175)->values[1] = (val*) var1169;
7142 {
7143 ((void (*)(val*, val*, long))(var1173->class->vft[COLOR_array__Array__with_native]))(var1173, var1175, var1174) /* with_native on <var1173:Array[Object]>*/;
7144 }
7145 }
7146 {
7147 var1176 = ((val* (*)(val*))(var1173->class->vft[COLOR_string__Object__to_s]))(var1173) /* to_s on <var1173:Array[Object]>*/;
7148 }
7149 {
7150 abstract_compiler__AbstractCompilerVisitor__add_abort(var_v, var1176); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <var_v:SeparateCompilerVisitor>*/
7151 }
7152 } else {
7153 if (varonce1177) {
7154 var1178 = varonce1177;
7155 } else {
7156 var1179 = "self";
7157 var1180 = 4;
7158 var1181 = string__NativeString__to_s_with_length(var1179, var1180);
7159 var1178 = var1181;
7160 varonce1177 = var1178;
7161 }
7162 {
7163 var1182 = abstract_compiler__AbstractCompilerVisitor__new_named_var(var_v, var_mtype, var1178);
7164 }
7165 var_res1183 = var1182;
7166 var1184 = 1;
7167 {
7168 { /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res1183,var1184) on <var_res1183:RuntimeVariable> */
7169 var_res1183->attrs[COLOR_abstract_compiler__RuntimeVariable___is_exact].s = var1184; /* _is_exact on <var_res1183:RuntimeVariable> */
7170 RET_LABEL1185:(void)0;
7171 }
7172 }
7173 if (varonce1186) {
7174 var1187 = varonce1186;
7175 } else {
7176 var1188 = " = nit_alloc(sizeof(struct instance_";
7177 var1189 = 36;
7178 var1190 = string__NativeString__to_s_with_length(var1188, var1189);
7179 var1187 = var1190;
7180 varonce1186 = var1187;
7181 }
7182 {
7183 var1191 = ((val* (*)(val*))(var_pointer_type->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_pointer_type) /* c_name on <var_pointer_type:MClassType>*/;
7184 }
7185 if (varonce1192) {
7186 var1193 = varonce1192;
7187 } else {
7188 var1194 = "));";
7189 var1195 = 3;
7190 var1196 = string__NativeString__to_s_with_length(var1194, var1195);
7191 var1193 = var1196;
7192 varonce1192 = var1193;
7193 }
7194 var1197 = NEW_array__Array(&type_array__Arraykernel__Object);
7195 { /* var1197 = array_instance Array[Object] */
7196 var1198 = 4;
7197 var1199 = NEW_array__NativeArray(var1198, &type_array__NativeArraykernel__Object);
7198 ((struct instance_array__NativeArray*)var1199)->values[0] = (val*) var_res1183;
7199 ((struct instance_array__NativeArray*)var1199)->values[1] = (val*) var1187;
7200 ((struct instance_array__NativeArray*)var1199)->values[2] = (val*) var1191;
7201 ((struct instance_array__NativeArray*)var1199)->values[3] = (val*) var1193;
7202 {
7203 ((void (*)(val*, val*, long))(var1197->class->vft[COLOR_array__Array__with_native]))(var1197, var1199, var1198) /* with_native on <var1197:Array[Object]>*/;
7204 }
7205 }
7206 {
7207 var1200 = ((val* (*)(val*))(var1197->class->vft[COLOR_string__Object__to_s]))(var1197) /* to_s on <var1197:Array[Object]>*/;
7208 }
7209 {
7210 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1200); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
7211 }
7212 if (varonce1201) {
7213 var1202 = varonce1201;
7214 } else {
7215 var1203 = "class_";
7216 var1204 = 6;
7217 var1205 = string__NativeString__to_s_with_length(var1203, var1204);
7218 var1202 = var1205;
7219 varonce1201 = var1202;
7220 }
7221 var1206 = NEW_array__Array(&type_array__Arraykernel__Object);
7222 { /* var1206 = array_instance Array[Object] */
7223 var1207 = 2;
7224 var1208 = NEW_array__NativeArray(var1207, &type_array__NativeArraykernel__Object);
7225 ((struct instance_array__NativeArray*)var1208)->values[0] = (val*) var1202;
7226 ((struct instance_array__NativeArray*)var1208)->values[1] = (val*) var_c_name;
7227 {
7228 ((void (*)(val*, val*, long))(var1206->class->vft[COLOR_array__Array__with_native]))(var1206, var1208, var1207) /* with_native on <var1206:Array[Object]>*/;
7229 }
7230 }
7231 {
7232 var1209 = ((val* (*)(val*))(var1206->class->vft[COLOR_string__Object__to_s]))(var1206) /* to_s on <var1206:Array[Object]>*/;
7233 }
7234 {
7235 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var1209); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
7236 }
7237 if (varonce1210) {
7238 var1211 = varonce1210;
7239 } else {
7240 var1212 = "->class = &class_";
7241 var1213 = 17;
7242 var1214 = string__NativeString__to_s_with_length(var1212, var1213);
7243 var1211 = var1214;
7244 varonce1210 = var1211;
7245 }
7246 if (varonce1215) {
7247 var1216 = varonce1215;
7248 } else {
7249 var1217 = ";";
7250 var1218 = 1;
7251 var1219 = string__NativeString__to_s_with_length(var1217, var1218);
7252 var1216 = var1219;
7253 varonce1215 = var1216;
7254 }
7255 var1220 = NEW_array__Array(&type_array__Arraykernel__Object);
7256 { /* var1220 = array_instance Array[Object] */
7257 var1221 = 4;
7258 var1222 = NEW_array__NativeArray(var1221, &type_array__NativeArraykernel__Object);
7259 ((struct instance_array__NativeArray*)var1222)->values[0] = (val*) var_res1183;
7260 ((struct instance_array__NativeArray*)var1222)->values[1] = (val*) var1211;
7261 ((struct instance_array__NativeArray*)var1222)->values[2] = (val*) var_c_name;
7262 ((struct instance_array__NativeArray*)var1222)->values[3] = (val*) var1216;
7263 {
7264 ((void (*)(val*, val*, long))(var1220->class->vft[COLOR_array__Array__with_native]))(var1220, var1222, var1221) /* with_native on <var1220:Array[Object]>*/;
7265 }
7266 }
7267 {
7268 var1223 = ((val* (*)(val*))(var1220->class->vft[COLOR_string__Object__to_s]))(var1220) /* to_s on <var1220:Array[Object]>*/;
7269 }
7270 {
7271 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1223); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
7272 }
7273 if (varonce1224) {
7274 var1225 = varonce1224;
7275 } else {
7276 var1226 = "((struct instance_";
7277 var1227 = 18;
7278 var1228 = string__NativeString__to_s_with_length(var1226, var1227);
7279 var1225 = var1228;
7280 varonce1224 = var1225;
7281 }
7282 {
7283 var1229 = ((val* (*)(val*))(var_pointer_type->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_pointer_type) /* c_name on <var_pointer_type:MClassType>*/;
7284 }
7285 if (varonce1230) {
7286 var1231 = varonce1230;
7287 } else {
7288 var1232 = "*)";
7289 var1233 = 2;
7290 var1234 = string__NativeString__to_s_with_length(var1232, var1233);
7291 var1231 = var1234;
7292 varonce1230 = var1231;
7293 }
7294 if (varonce1235) {
7295 var1236 = varonce1235;
7296 } else {
7297 var1237 = ")->value = NULL;";
7298 var1238 = 16;
7299 var1239 = string__NativeString__to_s_with_length(var1237, var1238);
7300 var1236 = var1239;
7301 varonce1235 = var1236;
7302 }
7303 var1240 = NEW_array__Array(&type_array__Arraykernel__Object);
7304 { /* var1240 = array_instance Array[Object] */
7305 var1241 = 5;
7306 var1242 = NEW_array__NativeArray(var1241, &type_array__NativeArraykernel__Object);
7307 ((struct instance_array__NativeArray*)var1242)->values[0] = (val*) var1225;
7308 ((struct instance_array__NativeArray*)var1242)->values[1] = (val*) var1229;
7309 ((struct instance_array__NativeArray*)var1242)->values[2] = (val*) var1231;
7310 ((struct instance_array__NativeArray*)var1242)->values[3] = (val*) var_res1183;
7311 ((struct instance_array__NativeArray*)var1242)->values[4] = (val*) var1236;
7312 {
7313 ((void (*)(val*, val*, long))(var1240->class->vft[COLOR_array__Array__with_native]))(var1240, var1242, var1241) /* with_native on <var1240:Array[Object]>*/;
7314 }
7315 }
7316 {
7317 var1243 = ((val* (*)(val*))(var1240->class->vft[COLOR_string__Object__to_s]))(var1240) /* to_s on <var1240:Array[Object]>*/;
7318 }
7319 {
7320 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1243); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
7321 }
7322 if (varonce1244) {
7323 var1245 = varonce1244;
7324 } else {
7325 var1246 = "return ";
7326 var1247 = 7;
7327 var1248 = string__NativeString__to_s_with_length(var1246, var1247);
7328 var1245 = var1248;
7329 varonce1244 = var1245;
7330 }
7331 if (varonce1249) {
7332 var1250 = varonce1249;
7333 } else {
7334 var1251 = ";";
7335 var1252 = 1;
7336 var1253 = string__NativeString__to_s_with_length(var1251, var1252);
7337 var1250 = var1253;
7338 varonce1249 = var1250;
7339 }
7340 var1254 = NEW_array__Array(&type_array__Arraykernel__Object);
7341 { /* var1254 = array_instance Array[Object] */
7342 var1255 = 3;
7343 var1256 = NEW_array__NativeArray(var1255, &type_array__NativeArraykernel__Object);
7344 ((struct instance_array__NativeArray*)var1256)->values[0] = (val*) var1245;
7345 ((struct instance_array__NativeArray*)var1256)->values[1] = (val*) var_res1183;
7346 ((struct instance_array__NativeArray*)var1256)->values[2] = (val*) var1250;
7347 {
7348 ((void (*)(val*, val*, long))(var1254->class->vft[COLOR_array__Array__with_native]))(var1254, var1256, var1255) /* with_native on <var1254:Array[Object]>*/;
7349 }
7350 }
7351 {
7352 var1257 = ((val* (*)(val*))(var1254->class->vft[COLOR_string__Object__to_s]))(var1254) /* to_s on <var1254:Array[Object]>*/;
7353 }
7354 {
7355 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1257); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
7356 }
7357 }
7358 if (varonce1258) {
7359 var1259 = varonce1258;
7360 } else {
7361 var1260 = "}";
7362 var1261 = 1;
7363 var1262 = string__NativeString__to_s_with_length(var1260, var1261);
7364 var1259 = var1262;
7365 varonce1258 = var1259;
7366 }
7367 {
7368 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1259); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
7369 }
7370 goto RET_LABEL;
7371 } else {
7372 }
7373 }
7374 }
7375 if (varonce1263) {
7376 var1264 = varonce1263;
7377 } else {
7378 var1265 = "NEW_";
7379 var1266 = 4;
7380 var1267 = string__NativeString__to_s_with_length(var1265, var1266);
7381 var1264 = var1267;
7382 varonce1263 = var1264;
7383 }
7384 var1268 = NEW_array__Array(&type_array__Arraykernel__Object);
7385 { /* var1268 = array_instance Array[Object] */
7386 var1269 = 2;
7387 var1270 = NEW_array__NativeArray(var1269, &type_array__NativeArraykernel__Object);
7388 ((struct instance_array__NativeArray*)var1270)->values[0] = (val*) var1264;
7389 ((struct instance_array__NativeArray*)var1270)->values[1] = (val*) var_c_name;
7390 {
7391 ((void (*)(val*, val*, long))(var1268->class->vft[COLOR_array__Array__with_native]))(var1268, var1270, var1269) /* with_native on <var1268:Array[Object]>*/;
7392 }
7393 }
7394 {
7395 var1271 = ((val* (*)(val*))(var1268->class->vft[COLOR_string__Object__to_s]))(var1268) /* to_s on <var1268:Array[Object]>*/;
7396 }
7397 {
7398 var1272 = abstract_compiler__MClassType__ctype(var_mtype);
7399 }
7400 if (varonce1273) {
7401 var1274 = varonce1273;
7402 } else {
7403 var1275 = " NEW_";
7404 var1276 = 5;
7405 var1277 = string__NativeString__to_s_with_length(var1275, var1276);
7406 var1274 = var1277;
7407 varonce1273 = var1274;
7408 }
7409 if (varonce1278) {
7410 var1279 = varonce1278;
7411 } else {
7412 var1280 = "(void);";
7413 var1281 = 7;
7414 var1282 = string__NativeString__to_s_with_length(var1280, var1281);
7415 var1279 = var1282;
7416 varonce1278 = var1279;
7417 }
7418 var1283 = NEW_array__Array(&type_array__Arraykernel__Object);
7419 { /* var1283 = array_instance Array[Object] */
7420 var1284 = 4;
7421 var1285 = NEW_array__NativeArray(var1284, &type_array__NativeArraykernel__Object);
7422 ((struct instance_array__NativeArray*)var1285)->values[0] = (val*) var1272;
7423 ((struct instance_array__NativeArray*)var1285)->values[1] = (val*) var1274;
7424 ((struct instance_array__NativeArray*)var1285)->values[2] = (val*) var_c_name;
7425 ((struct instance_array__NativeArray*)var1285)->values[3] = (val*) var1279;
7426 {
7427 ((void (*)(val*, val*, long))(var1283->class->vft[COLOR_array__Array__with_native]))(var1283, var1285, var1284) /* with_native on <var1283:Array[Object]>*/;
7428 }
7429 }
7430 {
7431 var1286 = ((val* (*)(val*))(var1283->class->vft[COLOR_string__Object__to_s]))(var1283) /* to_s on <var1283:Array[Object]>*/;
7432 }
7433 {
7434 abstract_compiler__AbstractCompiler__provide_declaration(self, var1271, var1286); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
7435 }
7436 if (varonce1287) {
7437 var1288 = varonce1287;
7438 } else {
7439 var1289 = "/* allocate ";
7440 var1290 = 12;
7441 var1291 = string__NativeString__to_s_with_length(var1289, var1290);
7442 var1288 = var1291;
7443 varonce1287 = var1288;
7444 }
7445 if (varonce1292) {
7446 var1293 = varonce1292;
7447 } else {
7448 var1294 = " */";
7449 var1295 = 3;
7450 var1296 = string__NativeString__to_s_with_length(var1294, var1295);
7451 var1293 = var1296;
7452 varonce1292 = var1293;
7453 }
7454 var1297 = NEW_array__Array(&type_array__Arraykernel__Object);
7455 { /* var1297 = array_instance Array[Object] */
7456 var1298 = 3;
7457 var1299 = NEW_array__NativeArray(var1298, &type_array__NativeArraykernel__Object);
7458 ((struct instance_array__NativeArray*)var1299)->values[0] = (val*) var1288;
7459 ((struct instance_array__NativeArray*)var1299)->values[1] = (val*) var_mtype;
7460 ((struct instance_array__NativeArray*)var1299)->values[2] = (val*) var1293;
7461 {
7462 ((void (*)(val*, val*, long))(var1297->class->vft[COLOR_array__Array__with_native]))(var1297, var1299, var1298) /* with_native on <var1297:Array[Object]>*/;
7463 }
7464 }
7465 {
7466 var1300 = ((val* (*)(val*))(var1297->class->vft[COLOR_string__Object__to_s]))(var1297) /* to_s on <var1297:Array[Object]>*/;
7467 }
7468 {
7469 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var1300); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
7470 }
7471 {
7472 var1301 = abstract_compiler__MClassType__ctype(var_mtype);
7473 }
7474 if (varonce1302) {
7475 var1303 = varonce1302;
7476 } else {
7477 var1304 = " NEW_";
7478 var1305 = 5;
7479 var1306 = string__NativeString__to_s_with_length(var1304, var1305);
7480 var1303 = var1306;
7481 varonce1302 = var1303;
7482 }
7483 if (varonce1307) {
7484 var1308 = varonce1307;
7485 } else {
7486 var1309 = "(void) {";
7487 var1310 = 8;
7488 var1311 = string__NativeString__to_s_with_length(var1309, var1310);
7489 var1308 = var1311;
7490 varonce1307 = var1308;
7491 }
7492 var1312 = NEW_array__Array(&type_array__Arraykernel__Object);
7493 { /* var1312 = array_instance Array[Object] */
7494 var1313 = 4;
7495 var1314 = NEW_array__NativeArray(var1313, &type_array__NativeArraykernel__Object);
7496 ((struct instance_array__NativeArray*)var1314)->values[0] = (val*) var1301;
7497 ((struct instance_array__NativeArray*)var1314)->values[1] = (val*) var1303;
7498 ((struct instance_array__NativeArray*)var1314)->values[2] = (val*) var_c_name;
7499 ((struct instance_array__NativeArray*)var1314)->values[3] = (val*) var1308;
7500 {
7501 ((void (*)(val*, val*, long))(var1312->class->vft[COLOR_array__Array__with_native]))(var1312, var1314, var1313) /* with_native on <var1312:Array[Object]>*/;
7502 }
7503 }
7504 {
7505 var1315 = ((val* (*)(val*))(var1312->class->vft[COLOR_string__Object__to_s]))(var1312) /* to_s on <var1312:Array[Object]>*/;
7506 }
7507 {
7508 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var1315); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
7509 }
7510 if (var_is_dead){
7511 if (varonce1316) {
7512 var1317 = varonce1316;
7513 } else {
7514 var1318 = " is DEAD";
7515 var1319 = 8;
7516 var1320 = string__NativeString__to_s_with_length(var1318, var1319);
7517 var1317 = var1320;
7518 varonce1316 = var1317;
7519 }
7520 var1321 = NEW_array__Array(&type_array__Arraykernel__Object);
7521 { /* var1321 = array_instance Array[Object] */
7522 var1322 = 2;
7523 var1323 = NEW_array__NativeArray(var1322, &type_array__NativeArraykernel__Object);
7524 ((struct instance_array__NativeArray*)var1323)->values[0] = (val*) var_mclass;
7525 ((struct instance_array__NativeArray*)var1323)->values[1] = (val*) var1317;
7526 {
7527 ((void (*)(val*, val*, long))(var1321->class->vft[COLOR_array__Array__with_native]))(var1321, var1323, var1322) /* with_native on <var1321:Array[Object]>*/;
7528 }
7529 }
7530 {
7531 var1324 = ((val* (*)(val*))(var1321->class->vft[COLOR_string__Object__to_s]))(var1321) /* to_s on <var1321:Array[Object]>*/;
7532 }
7533 {
7534 abstract_compiler__AbstractCompilerVisitor__add_abort(var_v, var1324); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <var_v:SeparateCompilerVisitor>*/
7535 }
7536 } else {
7537 if (varonce1325) {
7538 var1326 = varonce1325;
7539 } else {
7540 var1327 = "self";
7541 var1328 = 4;
7542 var1329 = string__NativeString__to_s_with_length(var1327, var1328);
7543 var1326 = var1329;
7544 varonce1325 = var1326;
7545 }
7546 {
7547 var1330 = abstract_compiler__AbstractCompilerVisitor__new_named_var(var_v, var_mtype, var1326);
7548 }
7549 var_res1331 = var1330;
7550 var1332 = 1;
7551 {
7552 { /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res1331,var1332) on <var_res1331:RuntimeVariable> */
7553 var_res1331->attrs[COLOR_abstract_compiler__RuntimeVariable___is_exact].s = var1332; /* _is_exact on <var_res1331:RuntimeVariable> */
7554 RET_LABEL1333:(void)0;
7555 }
7556 }
7557 if (varonce1334) {
7558 var1335 = varonce1334;
7559 } else {
7560 var1336 = " = nit_alloc(sizeof(struct instance) + ";
7561 var1337 = 39;
7562 var1338 = string__NativeString__to_s_with_length(var1336, var1337);
7563 var1335 = var1338;
7564 varonce1334 = var1335;
7565 }
7566 {
7567 { /* Inline array#AbstractArrayRead#length (var_attrs) on <var_attrs:Array[nullable MPropDef]> */
7568 var1341 = var_attrs->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_attrs:Array[nullable MPropDef]> */
7569 var1339 = var1341;
7570 RET_LABEL1340:(void)0;
7571 }
7572 }
7573 if (varonce1342) {
7574 var1343 = varonce1342;
7575 } else {
7576 var1344 = "*sizeof(nitattribute_t));";
7577 var1345 = 25;
7578 var1346 = string__NativeString__to_s_with_length(var1344, var1345);
7579 var1343 = var1346;
7580 varonce1342 = var1343;
7581 }
7582 var1347 = NEW_array__Array(&type_array__Arraykernel__Object);
7583 { /* var1347 = array_instance Array[Object] */
7584 var1348 = 4;
7585 var1349 = NEW_array__NativeArray(var1348, &type_array__NativeArraykernel__Object);
7586 ((struct instance_array__NativeArray*)var1349)->values[0] = (val*) var_res1331;
7587 ((struct instance_array__NativeArray*)var1349)->values[1] = (val*) var1335;
7588 var1350 = BOX_kernel__Int(var1339); /* autobox from Int to Object */
7589 ((struct instance_array__NativeArray*)var1349)->values[2] = (val*) var1350;
7590 ((struct instance_array__NativeArray*)var1349)->values[3] = (val*) var1343;
7591 {
7592 ((void (*)(val*, val*, long))(var1347->class->vft[COLOR_array__Array__with_native]))(var1347, var1349, var1348) /* with_native on <var1347:Array[Object]>*/;
7593 }
7594 }
7595 {
7596 var1351 = ((val* (*)(val*))(var1347->class->vft[COLOR_string__Object__to_s]))(var1347) /* to_s on <var1347:Array[Object]>*/;
7597 }
7598 {
7599 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1351); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
7600 }
7601 if (varonce1352) {
7602 var1353 = varonce1352;
7603 } else {
7604 var1354 = "class_";
7605 var1355 = 6;
7606 var1356 = string__NativeString__to_s_with_length(var1354, var1355);
7607 var1353 = var1356;
7608 varonce1352 = var1353;
7609 }
7610 var1357 = NEW_array__Array(&type_array__Arraykernel__Object);
7611 { /* var1357 = array_instance Array[Object] */
7612 var1358 = 2;
7613 var1359 = NEW_array__NativeArray(var1358, &type_array__NativeArraykernel__Object);
7614 ((struct instance_array__NativeArray*)var1359)->values[0] = (val*) var1353;
7615 ((struct instance_array__NativeArray*)var1359)->values[1] = (val*) var_c_name;
7616 {
7617 ((void (*)(val*, val*, long))(var1357->class->vft[COLOR_array__Array__with_native]))(var1357, var1359, var1358) /* with_native on <var1357:Array[Object]>*/;
7618 }
7619 }
7620 {
7621 var1360 = ((val* (*)(val*))(var1357->class->vft[COLOR_string__Object__to_s]))(var1357) /* to_s on <var1357:Array[Object]>*/;
7622 }
7623 {
7624 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var1360); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
7625 }
7626 if (varonce1361) {
7627 var1362 = varonce1361;
7628 } else {
7629 var1363 = "->class = &class_";
7630 var1364 = 17;
7631 var1365 = string__NativeString__to_s_with_length(var1363, var1364);
7632 var1362 = var1365;
7633 varonce1361 = var1362;
7634 }
7635 if (varonce1366) {
7636 var1367 = varonce1366;
7637 } else {
7638 var1368 = ";";
7639 var1369 = 1;
7640 var1370 = string__NativeString__to_s_with_length(var1368, var1369);
7641 var1367 = var1370;
7642 varonce1366 = var1367;
7643 }
7644 var1371 = NEW_array__Array(&type_array__Arraykernel__Object);
7645 { /* var1371 = array_instance Array[Object] */
7646 var1372 = 4;
7647 var1373 = NEW_array__NativeArray(var1372, &type_array__NativeArraykernel__Object);
7648 ((struct instance_array__NativeArray*)var1373)->values[0] = (val*) var_res1331;
7649 ((struct instance_array__NativeArray*)var1373)->values[1] = (val*) var1362;
7650 ((struct instance_array__NativeArray*)var1373)->values[2] = (val*) var_c_name;
7651 ((struct instance_array__NativeArray*)var1373)->values[3] = (val*) var1367;
7652 {
7653 ((void (*)(val*, val*, long))(var1371->class->vft[COLOR_array__Array__with_native]))(var1371, var1373, var1372) /* with_native on <var1371:Array[Object]>*/;
7654 }
7655 }
7656 {
7657 var1374 = ((val* (*)(val*))(var1371->class->vft[COLOR_string__Object__to_s]))(var1371) /* to_s on <var1371:Array[Object]>*/;
7658 }
7659 {
7660 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1374); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
7661 }
7662 {
7663 abstract_compiler__AbstractCompiler__generate_init_attr(self, var_v, var_res1331, var_mtype); /* Direct call abstract_compiler#AbstractCompiler#generate_init_attr on <self:SeparateErasureCompiler>*/
7664 }
7665 {
7666 abstract_compiler__AbstractCompilerVisitor__set_finalizer(var_v, var_res1331); /* Direct call abstract_compiler#AbstractCompilerVisitor#set_finalizer on <var_v:SeparateCompilerVisitor>*/
7667 }
7668 if (varonce1375) {
7669 var1376 = varonce1375;
7670 } else {
7671 var1377 = "return ";
7672 var1378 = 7;
7673 var1379 = string__NativeString__to_s_with_length(var1377, var1378);
7674 var1376 = var1379;
7675 varonce1375 = var1376;
7676 }
7677 if (varonce1380) {
7678 var1381 = varonce1380;
7679 } else {
7680 var1382 = ";";
7681 var1383 = 1;
7682 var1384 = string__NativeString__to_s_with_length(var1382, var1383);
7683 var1381 = var1384;
7684 varonce1380 = var1381;
7685 }
7686 var1385 = NEW_array__Array(&type_array__Arraykernel__Object);
7687 { /* var1385 = array_instance Array[Object] */
7688 var1386 = 3;
7689 var1387 = NEW_array__NativeArray(var1386, &type_array__NativeArraykernel__Object);
7690 ((struct instance_array__NativeArray*)var1387)->values[0] = (val*) var1376;
7691 ((struct instance_array__NativeArray*)var1387)->values[1] = (val*) var_res1331;
7692 ((struct instance_array__NativeArray*)var1387)->values[2] = (val*) var1381;
7693 {
7694 ((void (*)(val*, val*, long))(var1385->class->vft[COLOR_array__Array__with_native]))(var1385, var1387, var1386) /* with_native on <var1385:Array[Object]>*/;
7695 }
7696 }
7697 {
7698 var1388 = ((val* (*)(val*))(var1385->class->vft[COLOR_string__Object__to_s]))(var1385) /* to_s on <var1385:Array[Object]>*/;
7699 }
7700 {
7701 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1388); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
7702 }
7703 }
7704 if (varonce1389) {
7705 var1390 = varonce1389;
7706 } else {
7707 var1391 = "}";
7708 var1392 = 1;
7709 var1393 = string__NativeString__to_s_with_length(var1391, var1392);
7710 var1390 = var1393;
7711 varonce1389 = var1390;
7712 }
7713 {
7714 abstract_compiler__AbstractCompilerVisitor__add(var_v, var1390); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
7715 }
7716 RET_LABEL:;
7717 }
7718 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: Object, MClass) */
7719 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
7720 separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(self, p0); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c on <self:Object(SeparateErasureCompiler)>*/
7721 RET_LABEL:;
7722 }
7723 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: SeparateErasureCompiler, MClass): Bool */
7724 short int separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
7725 short int var /* : Bool */;
7726 val* var_mclass /* var mclass: MClass */;
7727 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
7728 val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
7729 val* var4 /* : nullable Object */;
7730 short int var5 /* : Bool */;
7731 short int var6 /* : Bool */;
7732 static val* varonce;
7733 val* var7 /* : String */;
7734 char* var8 /* : NativeString */;
7735 long var9 /* : Int */;
7736 val* var10 /* : FlatString */;
7737 val* var11 /* : String */;
7738 val* var12 /* : Array[Object] */;
7739 long var13 /* : Int */;
7740 val* var14 /* : NativeArray[Object] */;
7741 val* var15 /* : String */;
7742 static val* varonce16;
7743 val* var17 /* : String */;
7744 char* var18 /* : NativeString */;
7745 long var19 /* : Int */;
7746 val* var20 /* : FlatString */;
7747 val* var21 /* : String */;
7748 static val* varonce22;
7749 val* var23 /* : String */;
7750 char* var24 /* : NativeString */;
7751 long var25 /* : Int */;
7752 val* var26 /* : FlatString */;
7753 val* var27 /* : Array[Object] */;
7754 long var28 /* : Int */;
7755 val* var29 /* : NativeArray[Object] */;
7756 val* var30 /* : String */;
7757 val* var31 /* : SeparateCompilerVisitor */;
7758 val* var_v /* var v: SeparateCompilerVisitor */;
7759 static val* varonce32;
7760 val* var33 /* : String */;
7761 char* var34 /* : NativeString */;
7762 long var35 /* : Int */;
7763 val* var36 /* : FlatString */;
7764 val* var37 /* : String */;
7765 static val* varonce38;
7766 val* var39 /* : String */;
7767 char* var40 /* : NativeString */;
7768 long var41 /* : Int */;
7769 val* var42 /* : FlatString */;
7770 val* var43 /* : Array[Object] */;
7771 long var44 /* : Int */;
7772 val* var45 /* : NativeArray[Object] */;
7773 val* var46 /* : String */;
7774 static val* varonce47;
7775 val* var48 /* : String */;
7776 char* var49 /* : NativeString */;
7777 long var50 /* : Int */;
7778 val* var51 /* : FlatString */;
7779 static val* varonce52;
7780 val* var53 /* : String */;
7781 char* var54 /* : NativeString */;
7782 long var55 /* : Int */;
7783 val* var56 /* : FlatString */;
7784 val* var57 /* : Map[MClass, Array[nullable MPropDef]] */;
7785 val* var59 /* : Map[MClass, Array[nullable MPropDef]] */;
7786 val* var60 /* : nullable Object */;
7787 val* var_ /* var : Array[nullable MPropDef] */;
7788 val* var61 /* : ArrayIterator[nullable Object] */;
7789 val* var_62 /* var : ArrayIterator[nullable MPropDef] */;
7790 short int var63 /* : Bool */;
7791 val* var64 /* : nullable Object */;
7792 val* var_vt /* var vt: nullable MPropDef */;
7793 val* var65 /* : null */;
7794 short int var66 /* : Bool */;
7795 short int var67 /* : Bool */;
7796 val* var_other /* var other: nullable Object */;
7797 short int var69 /* : Bool */;
7798 short int var71 /* : Bool */;
7799 static val* varonce72;
7800 val* var73 /* : String */;
7801 char* var74 /* : NativeString */;
7802 long var75 /* : Int */;
7803 val* var76 /* : FlatString */;
7804 long var77 /* : Int */;
7805 long var_is_null /* var is_null: Int */;
7806 val* var78 /* : MClassDef */;
7807 val* var80 /* : MClassDef */;
7808 val* var81 /* : MClassType */;
7809 val* var83 /* : MClassType */;
7810 short int var84 /* : Bool */;
7811 int cltype;
7812 int idtype;
7813 const char* var_class_name;
7814 val* var85 /* : nullable MType */;
7815 val* var87 /* : nullable MType */;
7816 val* var88 /* : MType */;
7817 val* var_bound /* var bound: MType */;
7818 short int var89 /* : Bool */;
7819 int cltype90;
7820 int idtype91;
7821 val* var92 /* : MClassDef */;
7822 val* var94 /* : MClassDef */;
7823 val* var95 /* : MClassType */;
7824 val* var97 /* : MClassType */;
7825 val* var98 /* : MType */;
7826 val* var100 /* : MType */;
7827 val* var101 /* : MType */;
7828 long var102 /* : Int */;
7829 short int var103 /* : Bool */;
7830 int cltype104;
7831 int idtype105;
7832 const char* var_class_name106;
7833 val* var107 /* : MClass */;
7834 val* var109 /* : MClass */;
7835 val* var_vtclass /* var vtclass: MClass */;
7836 static val* varonce110;
7837 val* var111 /* : String */;
7838 char* var112 /* : NativeString */;
7839 long var113 /* : Int */;
7840 val* var114 /* : FlatString */;
7841 val* var115 /* : String */;
7842 val* var116 /* : Array[Object] */;
7843 long var117 /* : Int */;
7844 val* var118 /* : NativeArray[Object] */;
7845 val* var119 /* : String */;
7846 static val* varonce120;
7847 val* var121 /* : String */;
7848 char* var122 /* : NativeString */;
7849 long var123 /* : Int */;
7850 val* var124 /* : FlatString */;
7851 static val* varonce125;
7852 val* var126 /* : String */;
7853 char* var127 /* : NativeString */;
7854 long var128 /* : Int */;
7855 val* var129 /* : FlatString */;
7856 val* var130 /* : String */;
7857 static val* varonce131;
7858 val* var132 /* : String */;
7859 char* var133 /* : NativeString */;
7860 long var134 /* : Int */;
7861 val* var135 /* : FlatString */;
7862 static val* varonce136;
7863 val* var137 /* : String */;
7864 char* var138 /* : NativeString */;
7865 long var139 /* : Int */;
7866 val* var140 /* : FlatString */;
7867 val* var141 /* : Array[Object] */;
7868 long var142 /* : Int */;
7869 val* var143 /* : NativeArray[Object] */;
7870 val* var144 /* : Object */;
7871 val* var145 /* : String */;
7872 static val* varonce148;
7873 val* var149 /* : String */;
7874 char* var150 /* : NativeString */;
7875 long var151 /* : Int */;
7876 val* var152 /* : FlatString */;
7877 static val* varonce153;
7878 val* var154 /* : String */;
7879 char* var155 /* : NativeString */;
7880 long var156 /* : Int */;
7881 val* var157 /* : FlatString */;
7882 short int var158 /* : Bool */;
7883 var_mclass = p0;
7884 {
7885 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
7886 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
7887 if (unlikely(var3 == NULL)) {
7888 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
7889 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 442);
7890 show_backtrace(1);
7891 }
7892 var1 = var3;
7893 RET_LABEL2:(void)0;
7894 }
7895 }
7896 {
7897 var4 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var1, var_mclass) /* [] on <var1:Map[MClass, Array[nullable MPropDef]]>*/;
7898 }
7899 {
7900 var5 = array__AbstractArrayRead__is_empty(var4);
7901 }
7902 if (var5){
7903 var6 = 0;
7904 var = var6;
7905 goto RET_LABEL;
7906 } else {
7907 }
7908 if (varonce) {
7909 var7 = varonce;
7910 } else {
7911 var8 = "vts_table_";
7912 var9 = 10;
7913 var10 = string__NativeString__to_s_with_length(var8, var9);
7914 var7 = var10;
7915 varonce = var7;
7916 }
7917 {
7918 var11 = abstract_compiler__MClass__c_name(var_mclass);
7919 }
7920 var12 = NEW_array__Array(&type_array__Arraykernel__Object);
7921 { /* var12 = array_instance Array[Object] */
7922 var13 = 2;
7923 var14 = NEW_array__NativeArray(var13, &type_array__NativeArraykernel__Object);
7924 ((struct instance_array__NativeArray*)var14)->values[0] = (val*) var7;
7925 ((struct instance_array__NativeArray*)var14)->values[1] = (val*) var11;
7926 {
7927 ((void (*)(val*, val*, long))(var12->class->vft[COLOR_array__Array__with_native]))(var12, var14, var13) /* with_native on <var12:Array[Object]>*/;
7928 }
7929 }
7930 {
7931 var15 = ((val* (*)(val*))(var12->class->vft[COLOR_string__Object__to_s]))(var12) /* to_s on <var12:Array[Object]>*/;
7932 }
7933 if (varonce16) {
7934 var17 = varonce16;
7935 } else {
7936 var18 = "extern const struct vts_table vts_table_";
7937 var19 = 40;
7938 var20 = string__NativeString__to_s_with_length(var18, var19);
7939 var17 = var20;
7940 varonce16 = var17;
7941 }
7942 {
7943 var21 = abstract_compiler__MClass__c_name(var_mclass);
7944 }
7945 if (varonce22) {
7946 var23 = varonce22;
7947 } else {
7948 var24 = ";";
7949 var25 = 1;
7950 var26 = string__NativeString__to_s_with_length(var24, var25);
7951 var23 = var26;
7952 varonce22 = var23;
7953 }
7954 var27 = NEW_array__Array(&type_array__Arraykernel__Object);
7955 { /* var27 = array_instance Array[Object] */
7956 var28 = 3;
7957 var29 = NEW_array__NativeArray(var28, &type_array__NativeArraykernel__Object);
7958 ((struct instance_array__NativeArray*)var29)->values[0] = (val*) var17;
7959 ((struct instance_array__NativeArray*)var29)->values[1] = (val*) var21;
7960 ((struct instance_array__NativeArray*)var29)->values[2] = (val*) var23;
7961 {
7962 ((void (*)(val*, val*, long))(var27->class->vft[COLOR_array__Array__with_native]))(var27, var29, var28) /* with_native on <var27:Array[Object]>*/;
7963 }
7964 }
7965 {
7966 var30 = ((val* (*)(val*))(var27->class->vft[COLOR_string__Object__to_s]))(var27) /* to_s on <var27:Array[Object]>*/;
7967 }
7968 {
7969 abstract_compiler__AbstractCompiler__provide_declaration(self, var15, var30); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
7970 }
7971 {
7972 var31 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
7973 }
7974 var_v = var31;
7975 if (varonce32) {
7976 var33 = varonce32;
7977 } else {
7978 var34 = "const struct vts_table vts_table_";
7979 var35 = 33;
7980 var36 = string__NativeString__to_s_with_length(var34, var35);
7981 var33 = var36;
7982 varonce32 = var33;
7983 }
7984 {
7985 var37 = abstract_compiler__MClass__c_name(var_mclass);
7986 }
7987 if (varonce38) {
7988 var39 = varonce38;
7989 } else {
7990 var40 = " = {";
7991 var41 = 4;
7992 var42 = string__NativeString__to_s_with_length(var40, var41);
7993 var39 = var42;
7994 varonce38 = var39;
7995 }
7996 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
7997 { /* var43 = array_instance Array[Object] */
7998 var44 = 3;
7999 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
8000 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var33;
8001 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var37;
8002 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var39;
8003 {
8004 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
8005 }
8006 }
8007 {
8008 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
8009 }
8010 {
8011 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var46); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8012 }
8013 if (varonce47) {
8014 var48 = varonce47;
8015 } else {
8016 var49 = "0, /* dummy */";
8017 var50 = 14;
8018 var51 = string__NativeString__to_s_with_length(var49, var50);
8019 var48 = var51;
8020 varonce47 = var48;
8021 }
8022 {
8023 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var48); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8024 }
8025 if (varonce52) {
8026 var53 = varonce52;
8027 } else {
8028 var54 = "{";
8029 var55 = 1;
8030 var56 = string__NativeString__to_s_with_length(var54, var55);
8031 var53 = var56;
8032 varonce52 = var53;
8033 }
8034 {
8035 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var53); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8036 }
8037 {
8038 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
8039 var59 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
8040 if (unlikely(var59 == NULL)) {
8041 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
8042 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 442);
8043 show_backtrace(1);
8044 }
8045 var57 = var59;
8046 RET_LABEL58:(void)0;
8047 }
8048 }
8049 {
8050 var60 = ((val* (*)(val*, val*))(var57->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var57, var_mclass) /* [] on <var57:Map[MClass, Array[nullable MPropDef]]>*/;
8051 }
8052 var_ = var60;
8053 {
8054 var61 = array__AbstractArrayRead__iterator(var_);
8055 }
8056 var_62 = var61;
8057 for(;;) {
8058 {
8059 var63 = array__ArrayIterator__is_ok(var_62);
8060 }
8061 if (var63){
8062 {
8063 var64 = array__ArrayIterator__item(var_62);
8064 }
8065 var_vt = var64;
8066 var65 = NULL;
8067 if (var_vt == NULL) {
8068 var66 = 1; /* is null */
8069 } else {
8070 var66 = 0; /* arg is null but recv is not */
8071 }
8072 if (0) {
8073 { /* Inline kernel#Object#== (var_vt,var65) on <var_vt:nullable MPropDef> */
8074 var_other = var65;
8075 {
8076 { /* Inline kernel#Object#is_same_instance (var_vt,var_other) on <var_vt:nullable MPropDef(MPropDef)> */
8077 var71 = var_vt == var_other;
8078 var69 = var71;
8079 goto RET_LABEL70;
8080 RET_LABEL70:(void)0;
8081 }
8082 }
8083 var67 = var69;
8084 goto RET_LABEL68;
8085 RET_LABEL68:(void)0;
8086 }
8087 var66 = var67;
8088 }
8089 if (var66){
8090 if (varonce72) {
8091 var73 = varonce72;
8092 } else {
8093 var74 = "{-1, NULL}, /* empty */";
8094 var75 = 23;
8095 var76 = string__NativeString__to_s_with_length(var74, var75);
8096 var73 = var76;
8097 varonce72 = var73;
8098 }
8099 {
8100 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var73); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8101 }
8102 } else {
8103 var77 = 0;
8104 var_is_null = var77;
8105 {
8106 { /* Inline model#MClass#intro (var_mclass) on <var_mclass:MClass> */
8107 var80 = var_mclass->attrs[COLOR_model__MClass___intro].val; /* _intro on <var_mclass:MClass> */
8108 if (unlikely(var80 == NULL)) {
8109 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
8110 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 420);
8111 show_backtrace(1);
8112 }
8113 var78 = var80;
8114 RET_LABEL79:(void)0;
8115 }
8116 }
8117 {
8118 { /* Inline model#MClassDef#bound_mtype (var78) on <var78:MClassDef> */
8119 var83 = var78->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var78:MClassDef> */
8120 if (unlikely(var83 == NULL)) {
8121 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
8122 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
8123 show_backtrace(1);
8124 }
8125 var81 = var83;
8126 RET_LABEL82:(void)0;
8127 }
8128 }
8129 /* <var_vt:nullable MPropDef(MPropDef)> isa MVirtualTypeDef */
8130 cltype = type_model__MVirtualTypeDef.color;
8131 idtype = type_model__MVirtualTypeDef.id;
8132 if(cltype >= var_vt->type->table_size) {
8133 var84 = 0;
8134 } else {
8135 var84 = var_vt->type->type_table[cltype] == idtype;
8136 }
8137 if (unlikely(!var84)) {
8138 var_class_name = var_vt == NULL ? "null" : var_vt->type->name;
8139 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MVirtualTypeDef", var_class_name);
8140 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 408);
8141 show_backtrace(1);
8142 }
8143 {
8144 { /* Inline model#MVirtualTypeDef#bound (var_vt) on <var_vt:MPropDef(MVirtualTypeDef)> */
8145 var87 = var_vt->attrs[COLOR_model__MVirtualTypeDef___bound].val; /* _bound on <var_vt:MPropDef(MVirtualTypeDef)> */
8146 var85 = var87;
8147 RET_LABEL86:(void)0;
8148 }
8149 }
8150 {
8151 var88 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, var81, var85);
8152 }
8153 var_bound = var88;
8154 for(;;) {
8155 /* <var_bound:MType> isa MNullableType */
8156 cltype90 = type_model__MNullableType.color;
8157 idtype91 = type_model__MNullableType.id;
8158 if(cltype90 >= var_bound->type->table_size) {
8159 var89 = 0;
8160 } else {
8161 var89 = var_bound->type->type_table[cltype90] == idtype91;
8162 }
8163 if (var89){
8164 {
8165 { /* Inline model#MClass#intro (var_mclass) on <var_mclass:MClass> */
8166 var94 = var_mclass->attrs[COLOR_model__MClass___intro].val; /* _intro on <var_mclass:MClass> */
8167 if (unlikely(var94 == NULL)) {
8168 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
8169 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 420);
8170 show_backtrace(1);
8171 }
8172 var92 = var94;
8173 RET_LABEL93:(void)0;
8174 }
8175 }
8176 {
8177 { /* Inline model#MClassDef#bound_mtype (var92) on <var92:MClassDef> */
8178 var97 = var92->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var92:MClassDef> */
8179 if (unlikely(var97 == NULL)) {
8180 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
8181 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
8182 show_backtrace(1);
8183 }
8184 var95 = var97;
8185 RET_LABEL96:(void)0;
8186 }
8187 }
8188 {
8189 { /* Inline model#MNullableType#mtype (var_bound) on <var_bound:MType(MNullableType)> */
8190 var100 = var_bound->attrs[COLOR_model__MNullableType___mtype].val; /* _mtype on <var_bound:MType(MNullableType)> */
8191 if (unlikely(var100 == NULL)) {
8192 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
8193 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1388);
8194 show_backtrace(1);
8195 }
8196 var98 = var100;
8197 RET_LABEL99:(void)0;
8198 }
8199 }
8200 {
8201 var101 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, var95, var98);
8202 }
8203 var_bound = var101;
8204 var102 = 1;
8205 var_is_null = var102;
8206 } else {
8207 goto BREAK_label;
8208 }
8209 }
8210 BREAK_label: (void)0;
8211 /* <var_bound:MType> isa MClassType */
8212 cltype104 = type_model__MClassType.color;
8213 idtype105 = type_model__MClassType.id;
8214 if(cltype104 >= var_bound->type->table_size) {
8215 var103 = 0;
8216 } else {
8217 var103 = var_bound->type->type_table[cltype104] == idtype105;
8218 }
8219 if (unlikely(!var103)) {
8220 var_class_name106 = var_bound == NULL ? "null" : var_bound->type->name;
8221 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name106);
8222 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 413);
8223 show_backtrace(1);
8224 }
8225 {
8226 { /* Inline model#MClassType#mclass (var_bound) on <var_bound:MType(MClassType)> */
8227 var109 = var_bound->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_bound:MType(MClassType)> */
8228 if (unlikely(var109 == NULL)) {
8229 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
8230 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
8231 show_backtrace(1);
8232 }
8233 var107 = var109;
8234 RET_LABEL108:(void)0;
8235 }
8236 }
8237 var_vtclass = var107;
8238 if (varonce110) {
8239 var111 = varonce110;
8240 } else {
8241 var112 = "class_";
8242 var113 = 6;
8243 var114 = string__NativeString__to_s_with_length(var112, var113);
8244 var111 = var114;
8245 varonce110 = var111;
8246 }
8247 {
8248 var115 = abstract_compiler__MClass__c_name(var_vtclass);
8249 }
8250 var116 = NEW_array__Array(&type_array__Arraykernel__Object);
8251 { /* var116 = array_instance Array[Object] */
8252 var117 = 2;
8253 var118 = NEW_array__NativeArray(var117, &type_array__NativeArraykernel__Object);
8254 ((struct instance_array__NativeArray*)var118)->values[0] = (val*) var111;
8255 ((struct instance_array__NativeArray*)var118)->values[1] = (val*) var115;
8256 {
8257 ((void (*)(val*, val*, long))(var116->class->vft[COLOR_array__Array__with_native]))(var116, var118, var117) /* with_native on <var116:Array[Object]>*/;
8258 }
8259 }
8260 {
8261 var119 = ((val* (*)(val*))(var116->class->vft[COLOR_string__Object__to_s]))(var116) /* to_s on <var116:Array[Object]>*/;
8262 }
8263 {
8264 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var119); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
8265 }
8266 if (varonce120) {
8267 var121 = varonce120;
8268 } else {
8269 var122 = "{";
8270 var123 = 1;
8271 var124 = string__NativeString__to_s_with_length(var122, var123);
8272 var121 = var124;
8273 varonce120 = var121;
8274 }
8275 if (varonce125) {
8276 var126 = varonce125;
8277 } else {
8278 var127 = ", &class_";
8279 var128 = 9;
8280 var129 = string__NativeString__to_s_with_length(var127, var128);
8281 var126 = var129;
8282 varonce125 = var126;
8283 }
8284 {
8285 var130 = abstract_compiler__MClass__c_name(var_vtclass);
8286 }
8287 if (varonce131) {
8288 var132 = varonce131;
8289 } else {
8290 var133 = "}, /* ";
8291 var134 = 6;
8292 var135 = string__NativeString__to_s_with_length(var133, var134);
8293 var132 = var135;
8294 varonce131 = var132;
8295 }
8296 if (varonce136) {
8297 var137 = varonce136;
8298 } else {
8299 var138 = " */";
8300 var139 = 3;
8301 var140 = string__NativeString__to_s_with_length(var138, var139);
8302 var137 = var140;
8303 varonce136 = var137;
8304 }
8305 var141 = NEW_array__Array(&type_array__Arraykernel__Object);
8306 { /* var141 = array_instance Array[Object] */
8307 var142 = 7;
8308 var143 = NEW_array__NativeArray(var142, &type_array__NativeArraykernel__Object);
8309 ((struct instance_array__NativeArray*)var143)->values[0] = (val*) var121;
8310 var144 = BOX_kernel__Int(var_is_null); /* autobox from Int to Object */
8311 ((struct instance_array__NativeArray*)var143)->values[1] = (val*) var144;
8312 ((struct instance_array__NativeArray*)var143)->values[2] = (val*) var126;
8313 ((struct instance_array__NativeArray*)var143)->values[3] = (val*) var130;
8314 ((struct instance_array__NativeArray*)var143)->values[4] = (val*) var132;
8315 ((struct instance_array__NativeArray*)var143)->values[5] = (val*) var_vt;
8316 ((struct instance_array__NativeArray*)var143)->values[6] = (val*) var137;
8317 {
8318 ((void (*)(val*, val*, long))(var141->class->vft[COLOR_array__Array__with_native]))(var141, var143, var142) /* with_native on <var141:Array[Object]>*/;
8319 }
8320 }
8321 {
8322 var145 = ((val* (*)(val*))(var141->class->vft[COLOR_string__Object__to_s]))(var141) /* to_s on <var141:Array[Object]>*/;
8323 }
8324 {
8325 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var145); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8326 }
8327 }
8328 {
8329 array__ArrayIterator__next(var_62); /* Direct call array#ArrayIterator#next on <var_62:ArrayIterator[nullable MPropDef]>*/
8330 }
8331 } else {
8332 goto BREAK_label146;
8333 }
8334 }
8335 BREAK_label146: (void)0;
8336 {
8337 { /* Inline abstract_collection#Iterator#finish (var_62) on <var_62:ArrayIterator[nullable MPropDef]> */
8338 RET_LABEL147:(void)0;
8339 }
8340 }
8341 if (varonce148) {
8342 var149 = varonce148;
8343 } else {
8344 var150 = "},";
8345 var151 = 2;
8346 var152 = string__NativeString__to_s_with_length(var150, var151);
8347 var149 = var152;
8348 varonce148 = var149;
8349 }
8350 {
8351 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var149); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8352 }
8353 if (varonce153) {
8354 var154 = varonce153;
8355 } else {
8356 var155 = "};";
8357 var156 = 2;
8358 var157 = string__NativeString__to_s_with_length(var155, var156);
8359 var154 = var157;
8360 varonce153 = var154;
8361 }
8362 {
8363 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var154); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8364 }
8365 var158 = 1;
8366 var = var158;
8367 goto RET_LABEL;
8368 RET_LABEL:;
8369 return var;
8370 }
8371 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: Object, MClass): Bool */
8372 short int VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
8373 short int var /* : Bool */;
8374 short int var1 /* : Bool */;
8375 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(self, p0);
8376 var = var1;
8377 RET_LABEL:;
8378 return var;
8379 }
8380 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: SeparateErasureCompiler, MClassType, nullable MType): MType */
8381 val* separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
8382 val* var /* : MType */;
8383 val* var_anchor /* var anchor: MClassType */;
8384 val* var_mtype /* var mtype: nullable MType */;
8385 val* var1 /* : null */;
8386 short int var2 /* : Bool */;
8387 short int var3 /* : Bool */;
8388 val* var_other /* var other: nullable Object */;
8389 short int var5 /* : Bool */;
8390 short int var7 /* : Bool */;
8391 static val* varonce;
8392 val* var8 /* : String */;
8393 char* var9 /* : NativeString */;
8394 long var10 /* : Int */;
8395 val* var11 /* : FlatString */;
8396 short int var12 /* : Bool */;
8397 int cltype;
8398 int idtype;
8399 val* var13 /* : MModule */;
8400 val* var15 /* : MModule */;
8401 val* var16 /* : MType */;
8402 short int var17 /* : Bool */;
8403 int cltype18;
8404 int idtype19;
8405 val* var20 /* : MModule */;
8406 val* var22 /* : MModule */;
8407 val* var23 /* : MType */;
8408 var_anchor = p0;
8409 var_mtype = p1;
8410 var1 = NULL;
8411 if (var_mtype == NULL) {
8412 var2 = 1; /* is null */
8413 } else {
8414 var2 = 0; /* arg is null but recv is not */
8415 }
8416 if (0) {
8417 { /* Inline kernel#Object#== (var_mtype,var1) on <var_mtype:nullable MType> */
8418 var_other = var1;
8419 {
8420 { /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
8421 var7 = var_mtype == var_other;
8422 var5 = var7;
8423 goto RET_LABEL6;
8424 RET_LABEL6:(void)0;
8425 }
8426 }
8427 var3 = var5;
8428 goto RET_LABEL4;
8429 RET_LABEL4:(void)0;
8430 }
8431 var2 = var3;
8432 }
8433 if (var2){
8434 if (varonce) {
8435 var8 = varonce;
8436 } else {
8437 var9 = "NOT YET IMPLEMENTED: retrieve_vt_bound on null";
8438 var10 = 46;
8439 var11 = string__NativeString__to_s_with_length(var9, var10);
8440 var8 = var11;
8441 varonce = var8;
8442 }
8443 {
8444 file__Object__print(self, var8); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
8445 }
8446 PRINT_ERROR("Runtime error: %s", "Aborted");
8447 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 426);
8448 show_backtrace(1);
8449 } else {
8450 }
8451 /* <var_mtype:nullable MType(MType)> isa MVirtualType */
8452 cltype = type_model__MVirtualType.color;
8453 idtype = type_model__MVirtualType.id;
8454 if(cltype >= var_mtype->type->table_size) {
8455 var12 = 0;
8456 } else {
8457 var12 = var_mtype->type->type_table[cltype] == idtype;
8458 }
8459 if (var12){
8460 {
8461 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
8462 var15 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
8463 if (unlikely(var15 == NULL)) {
8464 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
8465 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
8466 show_backtrace(1);
8467 }
8468 var13 = var15;
8469 RET_LABEL14:(void)0;
8470 }
8471 }
8472 {
8473 var16 = model__MType__anchor_to(var_mtype, var13, var_anchor);
8474 }
8475 var = var16;
8476 goto RET_LABEL;
8477 } else {
8478 /* <var_mtype:nullable MType(MType)> isa MParameterType */
8479 cltype18 = type_model__MParameterType.color;
8480 idtype19 = type_model__MParameterType.id;
8481 if(cltype18 >= var_mtype->type->table_size) {
8482 var17 = 0;
8483 } else {
8484 var17 = var_mtype->type->type_table[cltype18] == idtype19;
8485 }
8486 if (var17){
8487 {
8488 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
8489 var22 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
8490 if (unlikely(var22 == NULL)) {
8491 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
8492 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
8493 show_backtrace(1);
8494 }
8495 var20 = var22;
8496 RET_LABEL21:(void)0;
8497 }
8498 }
8499 {
8500 var23 = model__MType__anchor_to(var_mtype, var20, var_anchor);
8501 }
8502 var = var23;
8503 goto RET_LABEL;
8504 } else {
8505 var = var_mtype;
8506 goto RET_LABEL;
8507 }
8508 }
8509 RET_LABEL:;
8510 return var;
8511 }
8512 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: Object, MClassType, nullable MType): MType */
8513 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
8514 val* var /* : MType */;
8515 val* var1 /* : MType */;
8516 var1 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, p0, p1);
8517 var = var1;
8518 RET_LABEL:;
8519 return var;
8520 }
8521 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: SeparateErasureCompiler): SeparateCompilerVisitor */
8522 val* separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
8523 val* var /* : SeparateCompilerVisitor */;
8524 val* var1 /* : SeparateErasureCompilerVisitor */;
8525 short int var2 /* : Bool */;
8526 int cltype;
8527 int idtype;
8528 const struct type* type_struct;
8529 const char* var_class_name;
8530 var1 = NEW_separate_erasure_compiler__SeparateErasureCompilerVisitor(&type_separate_erasure_compiler__SeparateErasureCompilerVisitor);
8531 {
8532 abstract_compiler__AbstractCompilerVisitor__init(var1, self); /* Direct call abstract_compiler#AbstractCompilerVisitor#init on <var1:SeparateErasureCompilerVisitor>*/
8533 }
8534 /* <var1:SeparateErasureCompilerVisitor> isa VISITOR */
8535 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
8536 cltype = type_struct->color;
8537 idtype = type_struct->id;
8538 if(cltype >= var1->type->table_size) {
8539 var2 = 0;
8540 } else {
8541 var2 = var1->type->type_table[cltype] == idtype;
8542 }
8543 if (unlikely(!var2)) {
8544 var_class_name = var1 == NULL ? "null" : var1->type->name;
8545 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
8546 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 437);
8547 show_backtrace(1);
8548 }
8549 var = var1;
8550 goto RET_LABEL;
8551 RET_LABEL:;
8552 return var;
8553 }
8554 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
8555 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
8556 val* var /* : AbstractCompilerVisitor */;
8557 val* var1 /* : SeparateCompilerVisitor */;
8558 var1 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
8559 var = var1;
8560 RET_LABEL:;
8561 return var;
8562 }
8563 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MClass]] */
8564 val* separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
8565 val* var /* : Map[MClass, Array[nullable MClass]] */;
8566 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
8567 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:SeparateErasureCompiler> */
8568 if (unlikely(var1 == NULL)) {
8569 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
8570 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 441);
8571 show_backtrace(1);
8572 }
8573 var = var1;
8574 RET_LABEL:;
8575 return var;
8576 }
8577 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: Object): Map[MClass, Array[nullable MClass]] */
8578 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
8579 val* var /* : Map[MClass, Array[nullable MClass]] */;
8580 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
8581 val* var3 /* : Map[MClass, Array[nullable MClass]] */;
8582 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables (self) on <self:Object(SeparateErasureCompiler)> */
8583 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:Object(SeparateErasureCompiler)> */
8584 if (unlikely(var3 == NULL)) {
8585 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
8586 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 441);
8587 show_backtrace(1);
8588 }
8589 var1 = var3;
8590 RET_LABEL2:(void)0;
8591 }
8592 var = var1;
8593 RET_LABEL:;
8594 return var;
8595 }
8596 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MClass]]) */
8597 void separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
8598 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val = p0; /* _class_tables on <self:SeparateErasureCompiler> */
8599 RET_LABEL:;
8600 }
8601 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: Object, Map[MClass, Array[nullable MClass]]) */
8602 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
8603 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables= (self,p0) on <self:Object(SeparateErasureCompiler)> */
8604 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val = p0; /* _class_tables on <self:Object(SeparateErasureCompiler)> */
8605 RET_LABEL1:(void)0;
8606 }
8607 RET_LABEL:;
8608 }
8609 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MPropDef]] */
8610 val* separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
8611 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
8612 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
8613 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
8614 if (unlikely(var1 == NULL)) {
8615 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
8616 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 442);
8617 show_backtrace(1);
8618 }
8619 var = var1;
8620 RET_LABEL:;
8621 return var;
8622 }
8623 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: Object): Map[MClass, Array[nullable MPropDef]] */
8624 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
8625 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
8626 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
8627 val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
8628 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:Object(SeparateErasureCompiler)> */
8629 var3 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:Object(SeparateErasureCompiler)> */
8630 if (unlikely(var3 == NULL)) {
8631 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
8632 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 442);
8633 show_backtrace(1);
8634 }
8635 var1 = var3;
8636 RET_LABEL2:(void)0;
8637 }
8638 var = var1;
8639 RET_LABEL:;
8640 return var;
8641 }
8642 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MPropDef]]) */
8643 void separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
8644 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val = p0; /* _vt_tables on <self:SeparateErasureCompiler> */
8645 RET_LABEL:;
8646 }
8647 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: Object, Map[MClass, Array[nullable MPropDef]]) */
8648 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
8649 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables= (self,p0) on <self:Object(SeparateErasureCompiler)> */
8650 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val = p0; /* _vt_tables on <self:Object(SeparateErasureCompiler)> */
8651 RET_LABEL1:(void)0;
8652 }
8653 RET_LABEL:;
8654 }
8655 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: SeparateErasureCompiler) */
8656 void separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
8657 static val* varonce;
8658 val* var /* : String */;
8659 char* var1 /* : NativeString */;
8660 long var2 /* : Int */;
8661 val* var3 /* : FlatString */;
8662 static val* varonce4;
8663 val* var5 /* : String */;
8664 char* var6 /* : NativeString */;
8665 long var7 /* : Int */;
8666 val* var8 /* : FlatString */;
8667 long var9 /* : Int */;
8668 long var_total /* var total: Int */;
8669 long var10 /* : Int */;
8670 long var_holes /* var holes: Int */;
8671 val* var11 /* : Map[MClass, Array[nullable MClass]] */;
8672 val* var13 /* : Map[MClass, Array[nullable MClass]] */;
8673 val* var_ /* var : Map[MClass, Array[nullable MClass]] */;
8674 val* var14 /* : MapIterator[Object, nullable Object] */;
8675 val* var_15 /* var : MapIterator[MClass, Array[nullable MClass]] */;
8676 short int var16 /* : Bool */;
8677 val* var17 /* : Object */;
8678 val* var_t /* var t: MClass */;
8679 val* var18 /* : nullable Object */;
8680 val* var_table /* var table: Array[nullable MClass] */;
8681 long var19 /* : Int */;
8682 long var21 /* : Int */;
8683 long var22 /* : Int */;
8684 short int var24 /* : Bool */;
8685 int cltype;
8686 int idtype;
8687 const char* var_class_name;
8688 long var25 /* : Int */;
8689 val* var_26 /* var : Array[nullable MClass] */;
8690 val* var27 /* : ArrayIterator[nullable Object] */;
8691 val* var_28 /* var : ArrayIterator[nullable MClass] */;
8692 short int var29 /* : Bool */;
8693 val* var30 /* : nullable Object */;
8694 val* var_e /* var e: nullable MClass */;
8695 val* var31 /* : null */;
8696 short int var32 /* : Bool */;
8697 short int var33 /* : Bool */;
8698 val* var_other /* var other: nullable Object */;
8699 short int var35 /* : Bool */;
8700 short int var37 /* : Bool */;
8701 long var38 /* : Int */;
8702 long var39 /* : Int */;
8703 short int var41 /* : Bool */;
8704 int cltype42;
8705 int idtype43;
8706 const char* var_class_name44;
8707 long var45 /* : Int */;
8708 static val* varonce49;
8709 val* var50 /* : String */;
8710 char* var51 /* : NativeString */;
8711 long var52 /* : Int */;
8712 val* var53 /* : FlatString */;
8713 static val* varonce54;
8714 val* var55 /* : String */;
8715 char* var56 /* : NativeString */;
8716 long var57 /* : Int */;
8717 val* var58 /* : FlatString */;
8718 val* var59 /* : Array[Object] */;
8719 long var60 /* : Int */;
8720 val* var61 /* : NativeArray[Object] */;
8721 val* var62 /* : Object */;
8722 val* var63 /* : Object */;
8723 val* var64 /* : String */;
8724 static val* varonce65;
8725 val* var66 /* : String */;
8726 char* var67 /* : NativeString */;
8727 long var68 /* : Int */;
8728 val* var69 /* : FlatString */;
8729 static val* varonce70;
8730 val* var71 /* : String */;
8731 char* var72 /* : NativeString */;
8732 long var73 /* : Int */;
8733 val* var74 /* : FlatString */;
8734 long var75 /* : Int */;
8735 long var76 /* : Int */;
8736 val* var77 /* : Map[MClass, Array[nullable MPropDef]] */;
8737 val* var79 /* : Map[MClass, Array[nullable MPropDef]] */;
8738 val* var_80 /* var : Map[MClass, Array[nullable MPropDef]] */;
8739 val* var81 /* : MapIterator[Object, nullable Object] */;
8740 val* var_82 /* var : MapIterator[MClass, Array[nullable MPropDef]] */;
8741 short int var83 /* : Bool */;
8742 val* var84 /* : Object */;
8743 val* var_t85 /* var t: MClass */;
8744 val* var86 /* : nullable Object */;
8745 val* var_table87 /* var table: Array[nullable MPropDef] */;
8746 long var88 /* : Int */;
8747 long var90 /* : Int */;
8748 long var91 /* : Int */;
8749 short int var93 /* : Bool */;
8750 int cltype94;
8751 int idtype95;
8752 const char* var_class_name96;
8753 long var97 /* : Int */;
8754 val* var_98 /* var : Array[nullable MPropDef] */;
8755 val* var99 /* : ArrayIterator[nullable Object] */;
8756 val* var_100 /* var : ArrayIterator[nullable MPropDef] */;
8757 short int var101 /* : Bool */;
8758 val* var102 /* : nullable Object */;
8759 val* var_e103 /* var e: nullable MPropDef */;
8760 val* var104 /* : null */;
8761 short int var105 /* : Bool */;
8762 short int var106 /* : Bool */;
8763 short int var108 /* : Bool */;
8764 short int var110 /* : Bool */;
8765 long var111 /* : Int */;
8766 long var112 /* : Int */;
8767 short int var114 /* : Bool */;
8768 int cltype115;
8769 int idtype116;
8770 const char* var_class_name117;
8771 long var118 /* : Int */;
8772 static val* varonce123;
8773 val* var124 /* : String */;
8774 char* var125 /* : NativeString */;
8775 long var126 /* : Int */;
8776 val* var127 /* : FlatString */;
8777 static val* varonce128;
8778 val* var129 /* : String */;
8779 char* var130 /* : NativeString */;
8780 long var131 /* : Int */;
8781 val* var132 /* : FlatString */;
8782 val* var133 /* : Array[Object] */;
8783 long var134 /* : Int */;
8784 val* var135 /* : NativeArray[Object] */;
8785 val* var136 /* : Object */;
8786 val* var137 /* : Object */;
8787 val* var138 /* : String */;
8788 static val* varonce139;
8789 val* var140 /* : String */;
8790 char* var141 /* : NativeString */;
8791 long var142 /* : Int */;
8792 val* var143 /* : FlatString */;
8793 static val* varonce144;
8794 val* var145 /* : String */;
8795 char* var146 /* : NativeString */;
8796 long var147 /* : Int */;
8797 val* var148 /* : FlatString */;
8798 long var149 /* : Int */;
8799 long var150 /* : Int */;
8800 val* var151 /* : Map[MClass, Array[nullable MPropDef]] */;
8801 val* var153 /* : Map[MClass, Array[nullable MPropDef]] */;
8802 val* var_154 /* var : Map[MClass, Array[nullable MPropDef]] */;
8803 val* var155 /* : MapIterator[Object, nullable Object] */;
8804 val* var_156 /* var : MapIterator[MClass, Array[nullable MPropDef]] */;
8805 short int var157 /* : Bool */;
8806 val* var158 /* : Object */;
8807 val* var_t159 /* var t: MClass */;
8808 val* var160 /* : nullable Object */;
8809 val* var_table161 /* var table: Array[nullable MPropDef] */;
8810 long var162 /* : Int */;
8811 long var164 /* : Int */;
8812 long var165 /* : Int */;
8813 short int var167 /* : Bool */;
8814 int cltype168;
8815 int idtype169;
8816 const char* var_class_name170;
8817 long var171 /* : Int */;
8818 val* var_172 /* var : Array[nullable MPropDef] */;
8819 val* var173 /* : ArrayIterator[nullable Object] */;
8820 val* var_174 /* var : ArrayIterator[nullable MPropDef] */;
8821 short int var175 /* : Bool */;
8822 val* var176 /* : nullable Object */;
8823 val* var_e177 /* var e: nullable MPropDef */;
8824 val* var178 /* : null */;
8825 short int var179 /* : Bool */;
8826 short int var180 /* : Bool */;
8827 short int var182 /* : Bool */;
8828 short int var184 /* : Bool */;
8829 long var185 /* : Int */;
8830 long var186 /* : Int */;
8831 short int var188 /* : Bool */;
8832 int cltype189;
8833 int idtype190;
8834 const char* var_class_name191;
8835 long var192 /* : Int */;
8836 static val* varonce197;
8837 val* var198 /* : String */;
8838 char* var199 /* : NativeString */;
8839 long var200 /* : Int */;
8840 val* var201 /* : FlatString */;
8841 static val* varonce202;
8842 val* var203 /* : String */;
8843 char* var204 /* : NativeString */;
8844 long var205 /* : Int */;
8845 val* var206 /* : FlatString */;
8846 val* var207 /* : Array[Object] */;
8847 long var208 /* : Int */;
8848 val* var209 /* : NativeArray[Object] */;
8849 val* var210 /* : Object */;
8850 val* var211 /* : Object */;
8851 val* var212 /* : String */;
8852 static val* varonce213;
8853 val* var214 /* : String */;
8854 char* var215 /* : NativeString */;
8855 long var216 /* : Int */;
8856 val* var217 /* : FlatString */;
8857 static val* varonce218;
8858 val* var219 /* : String */;
8859 char* var220 /* : NativeString */;
8860 long var221 /* : Int */;
8861 val* var222 /* : FlatString */;
8862 long var223 /* : Int */;
8863 long var224 /* : Int */;
8864 val* var225 /* : Map[MClass, Array[nullable MPropDef]] */;
8865 val* var227 /* : Map[MClass, Array[nullable MPropDef]] */;
8866 val* var_228 /* var : Map[MClass, Array[nullable MPropDef]] */;
8867 val* var229 /* : MapIterator[Object, nullable Object] */;
8868 val* var_230 /* var : MapIterator[MClass, Array[nullable MPropDef]] */;
8869 short int var231 /* : Bool */;
8870 val* var232 /* : Object */;
8871 val* var_t233 /* var t: MClass */;
8872 val* var234 /* : nullable Object */;
8873 val* var_table235 /* var table: Array[nullable MPropDef] */;
8874 long var236 /* : Int */;
8875 long var238 /* : Int */;
8876 long var239 /* : Int */;
8877 short int var241 /* : Bool */;
8878 int cltype242;
8879 int idtype243;
8880 const char* var_class_name244;
8881 long var245 /* : Int */;
8882 val* var_246 /* var : Array[nullable MPropDef] */;
8883 val* var247 /* : ArrayIterator[nullable Object] */;
8884 val* var_248 /* var : ArrayIterator[nullable MPropDef] */;
8885 short int var249 /* : Bool */;
8886 val* var250 /* : nullable Object */;
8887 val* var_e251 /* var e: nullable MPropDef */;
8888 val* var252 /* : null */;
8889 short int var253 /* : Bool */;
8890 short int var254 /* : Bool */;
8891 short int var256 /* : Bool */;
8892 short int var258 /* : Bool */;
8893 long var259 /* : Int */;
8894 long var260 /* : Int */;
8895 short int var262 /* : Bool */;
8896 int cltype263;
8897 int idtype264;
8898 const char* var_class_name265;
8899 long var266 /* : Int */;
8900 static val* varonce271;
8901 val* var272 /* : String */;
8902 char* var273 /* : NativeString */;
8903 long var274 /* : Int */;
8904 val* var275 /* : FlatString */;
8905 static val* varonce276;
8906 val* var277 /* : String */;
8907 char* var278 /* : NativeString */;
8908 long var279 /* : Int */;
8909 val* var280 /* : FlatString */;
8910 val* var281 /* : Array[Object] */;
8911 long var282 /* : Int */;
8912 val* var283 /* : NativeArray[Object] */;
8913 val* var284 /* : Object */;
8914 val* var285 /* : Object */;
8915 val* var286 /* : String */;
8916 if (varonce) {
8917 var = varonce;
8918 } else {
8919 var1 = "# size of subtyping tables";
8920 var2 = 26;
8921 var3 = string__NativeString__to_s_with_length(var1, var2);
8922 var = var3;
8923 varonce = var;
8924 }
8925 {
8926 file__Object__print(self, var); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
8927 }
8928 if (varonce4) {
8929 var5 = varonce4;
8930 } else {
8931 var6 = "\11total \11holes";
8932 var7 = 13;
8933 var8 = string__NativeString__to_s_with_length(var6, var7);
8934 var5 = var8;
8935 varonce4 = var5;
8936 }
8937 {
8938 file__Object__print(self, var5); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
8939 }
8940 var9 = 0;
8941 var_total = var9;
8942 var10 = 0;
8943 var_holes = var10;
8944 {
8945 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables (self) on <self:SeparateErasureCompiler> */
8946 var13 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:SeparateErasureCompiler> */
8947 if (unlikely(var13 == NULL)) {
8948 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
8949 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 441);
8950 show_backtrace(1);
8951 }
8952 var11 = var13;
8953 RET_LABEL12:(void)0;
8954 }
8955 }
8956 var_ = var11;
8957 {
8958 var14 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_) /* iterator on <var_:Map[MClass, Array[nullable MClass]]>*/;
8959 }
8960 var_15 = var14;
8961 for(;;) {
8962 {
8963 var16 = ((short int (*)(val*))(var_15->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var_15) /* is_ok on <var_15:MapIterator[MClass, Array[nullable MClass]]>*/;
8964 }
8965 if (var16){
8966 {
8967 var17 = ((val* (*)(val*))(var_15->class->vft[COLOR_abstract_collection__MapIterator__key]))(var_15) /* key on <var_15:MapIterator[MClass, Array[nullable MClass]]>*/;
8968 }
8969 var_t = var17;
8970 {
8971 var18 = ((val* (*)(val*))(var_15->class->vft[COLOR_abstract_collection__MapIterator__item]))(var_15) /* item on <var_15:MapIterator[MClass, Array[nullable MClass]]>*/;
8972 }
8973 var_table = var18;
8974 {
8975 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MClass]> */
8976 var21 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MClass]> */
8977 var19 = var21;
8978 RET_LABEL20:(void)0;
8979 }
8980 }
8981 {
8982 { /* Inline kernel#Int#+ (var_total,var19) on <var_total:Int> */
8983 /* Covariant cast for argument 0 (i) <var19:Int> isa OTHER */
8984 /* <var19:Int> isa OTHER */
8985 var24 = 1; /* easy <var19:Int> isa OTHER*/
8986 if (unlikely(!var24)) {
8987 var_class_name = type_kernel__Int.name;
8988 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
8989 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
8990 show_backtrace(1);
8991 }
8992 var25 = var_total + var19;
8993 var22 = var25;
8994 goto RET_LABEL23;
8995 RET_LABEL23:(void)0;
8996 }
8997 }
8998 var_total = var22;
8999 var_26 = var_table;
9000 {
9001 var27 = array__AbstractArrayRead__iterator(var_26);
9002 }
9003 var_28 = var27;
9004 for(;;) {
9005 {
9006 var29 = array__ArrayIterator__is_ok(var_28);
9007 }
9008 if (var29){
9009 {
9010 var30 = array__ArrayIterator__item(var_28);
9011 }
9012 var_e = var30;
9013 var31 = NULL;
9014 if (var_e == NULL) {
9015 var32 = 1; /* is null */
9016 } else {
9017 var32 = 0; /* arg is null but recv is not */
9018 }
9019 if (0) {
9020 { /* Inline kernel#Object#== (var_e,var31) on <var_e:nullable MClass> */
9021 var_other = var31;
9022 {
9023 { /* Inline kernel#Object#is_same_instance (var_e,var_other) on <var_e:nullable MClass(MClass)> */
9024 var37 = var_e == var_other;
9025 var35 = var37;
9026 goto RET_LABEL36;
9027 RET_LABEL36:(void)0;
9028 }
9029 }
9030 var33 = var35;
9031 goto RET_LABEL34;
9032 RET_LABEL34:(void)0;
9033 }
9034 var32 = var33;
9035 }
9036 if (var32){
9037 var38 = 1;
9038 {
9039 { /* Inline kernel#Int#+ (var_holes,var38) on <var_holes:Int> */
9040 /* Covariant cast for argument 0 (i) <var38:Int> isa OTHER */
9041 /* <var38:Int> isa OTHER */
9042 var41 = 1; /* easy <var38:Int> isa OTHER*/
9043 if (unlikely(!var41)) {
9044 var_class_name44 = type_kernel__Int.name;
9045 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name44);
9046 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
9047 show_backtrace(1);
9048 }
9049 var45 = var_holes + var38;
9050 var39 = var45;
9051 goto RET_LABEL40;
9052 RET_LABEL40:(void)0;
9053 }
9054 }
9055 var_holes = var39;
9056 } else {
9057 }
9058 {
9059 array__ArrayIterator__next(var_28); /* Direct call array#ArrayIterator#next on <var_28:ArrayIterator[nullable MClass]>*/
9060 }
9061 } else {
9062 goto BREAK_label;
9063 }
9064 }
9065 BREAK_label: (void)0;
9066 {
9067 { /* Inline abstract_collection#Iterator#finish (var_28) on <var_28:ArrayIterator[nullable MClass]> */
9068 RET_LABEL46:(void)0;
9069 }
9070 }
9071 {
9072 ((void (*)(val*))(var_15->class->vft[COLOR_abstract_collection__MapIterator__next]))(var_15) /* next on <var_15:MapIterator[MClass, Array[nullable MClass]]>*/;
9073 }
9074 } else {
9075 goto BREAK_label47;
9076 }
9077 }
9078 BREAK_label47: (void)0;
9079 {
9080 { /* Inline abstract_collection#MapIterator#finish (var_15) on <var_15:MapIterator[MClass, Array[nullable MClass]]> */
9081 RET_LABEL48:(void)0;
9082 }
9083 }
9084 if (varonce49) {
9085 var50 = varonce49;
9086 } else {
9087 var51 = "\11";
9088 var52 = 1;
9089 var53 = string__NativeString__to_s_with_length(var51, var52);
9090 var50 = var53;
9091 varonce49 = var50;
9092 }
9093 if (varonce54) {
9094 var55 = varonce54;
9095 } else {
9096 var56 = "\11";
9097 var57 = 1;
9098 var58 = string__NativeString__to_s_with_length(var56, var57);
9099 var55 = var58;
9100 varonce54 = var55;
9101 }
9102 var59 = NEW_array__Array(&type_array__Arraykernel__Object);
9103 { /* var59 = array_instance Array[Object] */
9104 var60 = 4;
9105 var61 = NEW_array__NativeArray(var60, &type_array__NativeArraykernel__Object);
9106 ((struct instance_array__NativeArray*)var61)->values[0] = (val*) var50;
9107 var62 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
9108 ((struct instance_array__NativeArray*)var61)->values[1] = (val*) var62;
9109 ((struct instance_array__NativeArray*)var61)->values[2] = (val*) var55;
9110 var63 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
9111 ((struct instance_array__NativeArray*)var61)->values[3] = (val*) var63;
9112 {
9113 ((void (*)(val*, val*, long))(var59->class->vft[COLOR_array__Array__with_native]))(var59, var61, var60) /* with_native on <var59:Array[Object]>*/;
9114 }
9115 }
9116 {
9117 var64 = ((val* (*)(val*))(var59->class->vft[COLOR_string__Object__to_s]))(var59) /* to_s on <var59:Array[Object]>*/;
9118 }
9119 {
9120 file__Object__print(self, var64); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9121 }
9122 if (varonce65) {
9123 var66 = varonce65;
9124 } else {
9125 var67 = "# size of resolution tables";
9126 var68 = 27;
9127 var69 = string__NativeString__to_s_with_length(var67, var68);
9128 var66 = var69;
9129 varonce65 = var66;
9130 }
9131 {
9132 file__Object__print(self, var66); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9133 }
9134 if (varonce70) {
9135 var71 = varonce70;
9136 } else {
9137 var72 = "\11total \11holes";
9138 var73 = 13;
9139 var74 = string__NativeString__to_s_with_length(var72, var73);
9140 var71 = var74;
9141 varonce70 = var71;
9142 }
9143 {
9144 file__Object__print(self, var71); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9145 }
9146 var75 = 0;
9147 var_total = var75;
9148 var76 = 0;
9149 var_holes = var76;
9150 {
9151 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
9152 var79 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
9153 if (unlikely(var79 == NULL)) {
9154 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
9155 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_erasure_compiler.nit", 442);
9156 show_backtrace(1);
9157 }
9158 var77 = var79;
9159 RET_LABEL78:(void)0;
9160 }
9161 }
9162 var_80 = var77;
9163 {
9164 var81 = ((val* (*)(val*))(var_80->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_80) /* iterator on <var_80:Map[MClass, Array[nullable MPropDef]]>*/;
9165 }
9166 var_82 = var81;
9167 for(;;) {
9168 {
9169 var83 = ((short int (*)(val*))(var_82->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var_82) /* is_ok on <var_82:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9170 }
9171 if (var83){
9172 {
9173 var84 = ((val* (*)(val*))(var_82->class->vft[COLOR_abstract_collection__MapIterator__key]))(var_82) /* key on <var_82:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9174 }
9175 var_t85 = var84;
9176 {
9177 var86 = ((val* (*)(val*))(var_82->class->vft[COLOR_abstract_collection__MapIterator__item]))(var_82) /* item on <var_82:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9178 }
9179 var_table87 = var86;
9180 {
9181 { /* Inline array#AbstractArrayRead#length (var_table87) on <var_table87:Array[nullable MPropDef]> */
9182 var90 = var_table87->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table87:Array[nullable MPropDef]> */
9183 var88 = var90;
9184 RET_LABEL89:(void)0;
9185 }
9186 }
9187 {
9188 { /* Inline kernel#Int#+ (var_total,var88) on <var_total:Int> */
9189 /* Covariant cast for argument 0 (i) <var88:Int> isa OTHER */
9190 /* <var88:Int> isa OTHER */
9191 var93 = 1; /* easy <var88:Int> isa OTHER*/
9192 if (unlikely(!var93)) {
9193 var_class_name96 = type_kernel__Int.name;
9194 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name96);
9195 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
9196 show_backtrace(1);
9197 }
9198 var97 = var_total + var88;
9199 var91 = var97;
9200 goto RET_LABEL92;
9201 RET_LABEL92:(void)0;
9202 }
9203 }
9204 var_total = var91;
9205 var_98 = var_table87;
9206 {
9207 var99 = array__AbstractArrayRead__iterator(var_98);
9208 }
9209 var_100 = var99;
9210 for(;;) {
9211 {
9212 var101 = array__ArrayIterator__is_ok(var_100);
9213 }
9214 if (var101){
9215 {
9216 var102 = array__ArrayIterator__item(var_100);
9217 }
9218 var_e103 = var102;
9219 var104 = NULL;
9220 if (var_e103 == NULL) {
9221 var105 = 1; /* is null */
9222 } else {
9223 var105 = 0; /* arg is null but recv is not */
9224 }
9225 if (0) {
9226 { /* Inline kernel#Object#== (var_e103,var104) on <var_e103:nullable MPropDef> */
9227 var_other = var104;
9228 {
9229 { /* Inline kernel#Object#is_same_instance (var_e103,var_other) on <var_e103:nullable MPropDef(MPropDef)> */
9230 var110 = var_e103 == var_other;
9231 var108 = var110;
9232 goto RET_LABEL109;
9233 RET_LABEL109:(void)0;
9234 }
9235 }
9236 var106 = var108;
9237 goto RET_LABEL107;
9238 RET_LABEL107:(void)0;
9239 }
9240 var105 = var106;
9241 }
9242 if (var105){
9243 var111 = 1;
9244 {
9245 { /* Inline kernel#Int#+ (var_holes,var111) on <var_holes:Int> */
9246 /* Covariant cast for argument 0 (i) <var111:Int> isa OTHER */
9247 /* <var111:Int> isa OTHER */
9248 var114 = 1; /* easy <var111:Int> isa OTHER*/
9249 if (unlikely(!var114)) {
9250 var_class_name117 = type_kernel__Int.name;
9251 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name117);
9252 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
9253 show_backtrace(1);
9254 }
9255 var118 = var_holes + var111;
9256 var112 = var118;
9257 goto RET_LABEL113;
9258 RET_LABEL113:(void)0;
9259 }
9260 }
9261 var_holes = var112;
9262 } else {
9263 }
9264 {
9265 array__ArrayIterator__next(var_100); /* Direct call array#ArrayIterator#next on <var_100:ArrayIterator[nullable MPropDef]>*/
9266 }
9267 } else {
9268 goto BREAK_label119;
9269 }
9270 }
9271 BREAK_label119: (void)0;
9272 {
9273 { /* Inline abstract_collection#Iterator#finish (var_100) on <var_100:ArrayIterator[nullable MPropDef]> */
9274 RET_LABEL120:(void)0;
9275 }
9276 }
9277 {
9278 ((void (*)(val*))(var_82->class->vft[COLOR_abstract_collection__MapIterator__next]))(var_82) /* next on <var_82:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9279 }
9280 } else {
9281 goto BREAK_label121;
9282 }
9283 }
9284 BREAK_label121: (void)0;
9285 {
9286 { /* Inline abstract_collection#MapIterator#finish (var_82) on <var_82:MapIterator[MClass, Array[nullable MPropDef]]> */
9287 RET_LABEL122:(void)0;
9288 }
9289 }
9290 if (varonce123) {
9291 var124 = varonce123;
9292 } else {
9293 var125 = "\11";
9294 var126 = 1;
9295 var127 = string__NativeString__to_s_with_length(var125, var126);
9296 var124 = var127;
9297 varonce123 = var124;
9298 }
9299 if (varonce128) {
9300 var129 = varonce128;
9301 } else {
9302 var130 = "\11";
9303 var131 = 1;
9304 var132 = string__NativeString__to_s_with_length(var130, var131);
9305 var129 = var132;
9306 varonce128 = var129;
9307 }
9308 var133 = NEW_array__Array(&type_array__Arraykernel__Object);
9309 { /* var133 = array_instance Array[Object] */
9310 var134 = 4;
9311 var135 = NEW_array__NativeArray(var134, &type_array__NativeArraykernel__Object);
9312 ((struct instance_array__NativeArray*)var135)->values[0] = (val*) var124;
9313 var136 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
9314 ((struct instance_array__NativeArray*)var135)->values[1] = (val*) var136;
9315 ((struct instance_array__NativeArray*)var135)->values[2] = (val*) var129;
9316 var137 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
9317 ((struct instance_array__NativeArray*)var135)->values[3] = (val*) var137;
9318 {
9319 ((void (*)(val*, val*, long))(var133->class->vft[COLOR_array__Array__with_native]))(var133, var135, var134) /* with_native on <var133:Array[Object]>*/;
9320 }
9321 }
9322 {
9323 var138 = ((val* (*)(val*))(var133->class->vft[COLOR_string__Object__to_s]))(var133) /* to_s on <var133:Array[Object]>*/;
9324 }
9325 {
9326 file__Object__print(self, var138); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9327 }
9328 if (varonce139) {
9329 var140 = varonce139;
9330 } else {
9331 var141 = "# size of methods tables";
9332 var142 = 24;
9333 var143 = string__NativeString__to_s_with_length(var141, var142);
9334 var140 = var143;
9335 varonce139 = var140;
9336 }
9337 {
9338 file__Object__print(self, var140); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9339 }
9340 if (varonce144) {
9341 var145 = varonce144;
9342 } else {
9343 var146 = "\11total \11holes";
9344 var147 = 13;
9345 var148 = string__NativeString__to_s_with_length(var146, var147);
9346 var145 = var148;
9347 varonce144 = var145;
9348 }
9349 {
9350 file__Object__print(self, var145); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9351 }
9352 var149 = 0;
9353 var_total = var149;
9354 var150 = 0;
9355 var_holes = var150;
9356 {
9357 { /* Inline separate_compiler#SeparateCompiler#method_tables (self) on <self:SeparateErasureCompiler> */
9358 var153 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_tables].val; /* _method_tables on <self:SeparateErasureCompiler> */
9359 if (unlikely(var153 == NULL)) {
9360 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_tables");
9361 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 845);
9362 show_backtrace(1);
9363 }
9364 var151 = var153;
9365 RET_LABEL152:(void)0;
9366 }
9367 }
9368 var_154 = var151;
9369 {
9370 var155 = ((val* (*)(val*))(var_154->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_154) /* iterator on <var_154:Map[MClass, Array[nullable MPropDef]]>*/;
9371 }
9372 var_156 = var155;
9373 for(;;) {
9374 {
9375 var157 = ((short int (*)(val*))(var_156->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var_156) /* is_ok on <var_156:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9376 }
9377 if (var157){
9378 {
9379 var158 = ((val* (*)(val*))(var_156->class->vft[COLOR_abstract_collection__MapIterator__key]))(var_156) /* key on <var_156:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9380 }
9381 var_t159 = var158;
9382 {
9383 var160 = ((val* (*)(val*))(var_156->class->vft[COLOR_abstract_collection__MapIterator__item]))(var_156) /* item on <var_156:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9384 }
9385 var_table161 = var160;
9386 {
9387 { /* Inline array#AbstractArrayRead#length (var_table161) on <var_table161:Array[nullable MPropDef]> */
9388 var164 = var_table161->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table161:Array[nullable MPropDef]> */
9389 var162 = var164;
9390 RET_LABEL163:(void)0;
9391 }
9392 }
9393 {
9394 { /* Inline kernel#Int#+ (var_total,var162) on <var_total:Int> */
9395 /* Covariant cast for argument 0 (i) <var162:Int> isa OTHER */
9396 /* <var162:Int> isa OTHER */
9397 var167 = 1; /* easy <var162:Int> isa OTHER*/
9398 if (unlikely(!var167)) {
9399 var_class_name170 = type_kernel__Int.name;
9400 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name170);
9401 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
9402 show_backtrace(1);
9403 }
9404 var171 = var_total + var162;
9405 var165 = var171;
9406 goto RET_LABEL166;
9407 RET_LABEL166:(void)0;
9408 }
9409 }
9410 var_total = var165;
9411 var_172 = var_table161;
9412 {
9413 var173 = array__AbstractArrayRead__iterator(var_172);
9414 }
9415 var_174 = var173;
9416 for(;;) {
9417 {
9418 var175 = array__ArrayIterator__is_ok(var_174);
9419 }
9420 if (var175){
9421 {
9422 var176 = array__ArrayIterator__item(var_174);
9423 }
9424 var_e177 = var176;
9425 var178 = NULL;
9426 if (var_e177 == NULL) {
9427 var179 = 1; /* is null */
9428 } else {
9429 var179 = 0; /* arg is null but recv is not */
9430 }
9431 if (0) {
9432 { /* Inline kernel#Object#== (var_e177,var178) on <var_e177:nullable MPropDef> */
9433 var_other = var178;
9434 {
9435 { /* Inline kernel#Object#is_same_instance (var_e177,var_other) on <var_e177:nullable MPropDef(MPropDef)> */
9436 var184 = var_e177 == var_other;
9437 var182 = var184;
9438 goto RET_LABEL183;
9439 RET_LABEL183:(void)0;
9440 }
9441 }
9442 var180 = var182;
9443 goto RET_LABEL181;
9444 RET_LABEL181:(void)0;
9445 }
9446 var179 = var180;
9447 }
9448 if (var179){
9449 var185 = 1;
9450 {
9451 { /* Inline kernel#Int#+ (var_holes,var185) on <var_holes:Int> */
9452 /* Covariant cast for argument 0 (i) <var185:Int> isa OTHER */
9453 /* <var185:Int> isa OTHER */
9454 var188 = 1; /* easy <var185:Int> isa OTHER*/
9455 if (unlikely(!var188)) {
9456 var_class_name191 = type_kernel__Int.name;
9457 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name191);
9458 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
9459 show_backtrace(1);
9460 }
9461 var192 = var_holes + var185;
9462 var186 = var192;
9463 goto RET_LABEL187;
9464 RET_LABEL187:(void)0;
9465 }
9466 }
9467 var_holes = var186;
9468 } else {
9469 }
9470 {
9471 array__ArrayIterator__next(var_174); /* Direct call array#ArrayIterator#next on <var_174:ArrayIterator[nullable MPropDef]>*/
9472 }
9473 } else {
9474 goto BREAK_label193;
9475 }
9476 }
9477 BREAK_label193: (void)0;
9478 {
9479 { /* Inline abstract_collection#Iterator#finish (var_174) on <var_174:ArrayIterator[nullable MPropDef]> */
9480 RET_LABEL194:(void)0;
9481 }
9482 }
9483 {
9484 ((void (*)(val*))(var_156->class->vft[COLOR_abstract_collection__MapIterator__next]))(var_156) /* next on <var_156:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9485 }
9486 } else {
9487 goto BREAK_label195;
9488 }
9489 }
9490 BREAK_label195: (void)0;
9491 {
9492 { /* Inline abstract_collection#MapIterator#finish (var_156) on <var_156:MapIterator[MClass, Array[nullable MPropDef]]> */
9493 RET_LABEL196:(void)0;
9494 }
9495 }
9496 if (varonce197) {
9497 var198 = varonce197;
9498 } else {
9499 var199 = "\11";
9500 var200 = 1;
9501 var201 = string__NativeString__to_s_with_length(var199, var200);
9502 var198 = var201;
9503 varonce197 = var198;
9504 }
9505 if (varonce202) {
9506 var203 = varonce202;
9507 } else {
9508 var204 = "\11";
9509 var205 = 1;
9510 var206 = string__NativeString__to_s_with_length(var204, var205);
9511 var203 = var206;
9512 varonce202 = var203;
9513 }
9514 var207 = NEW_array__Array(&type_array__Arraykernel__Object);
9515 { /* var207 = array_instance Array[Object] */
9516 var208 = 4;
9517 var209 = NEW_array__NativeArray(var208, &type_array__NativeArraykernel__Object);
9518 ((struct instance_array__NativeArray*)var209)->values[0] = (val*) var198;
9519 var210 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
9520 ((struct instance_array__NativeArray*)var209)->values[1] = (val*) var210;
9521 ((struct instance_array__NativeArray*)var209)->values[2] = (val*) var203;
9522 var211 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
9523 ((struct instance_array__NativeArray*)var209)->values[3] = (val*) var211;
9524 {
9525 ((void (*)(val*, val*, long))(var207->class->vft[COLOR_array__Array__with_native]))(var207, var209, var208) /* with_native on <var207:Array[Object]>*/;
9526 }
9527 }
9528 {
9529 var212 = ((val* (*)(val*))(var207->class->vft[COLOR_string__Object__to_s]))(var207) /* to_s on <var207:Array[Object]>*/;
9530 }
9531 {
9532 file__Object__print(self, var212); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9533 }
9534 if (varonce213) {
9535 var214 = varonce213;
9536 } else {
9537 var215 = "# size of attributes tables";
9538 var216 = 27;
9539 var217 = string__NativeString__to_s_with_length(var215, var216);
9540 var214 = var217;
9541 varonce213 = var214;
9542 }
9543 {
9544 file__Object__print(self, var214); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9545 }
9546 if (varonce218) {
9547 var219 = varonce218;
9548 } else {
9549 var220 = "\11total \11holes";
9550 var221 = 13;
9551 var222 = string__NativeString__to_s_with_length(var220, var221);
9552 var219 = var222;
9553 varonce218 = var219;
9554 }
9555 {
9556 file__Object__print(self, var219); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9557 }
9558 var223 = 0;
9559 var_total = var223;
9560 var224 = 0;
9561 var_holes = var224;
9562 {
9563 { /* Inline separate_compiler#SeparateCompiler#attr_tables (self) on <self:SeparateErasureCompiler> */
9564 var227 = self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_tables].val; /* _attr_tables on <self:SeparateErasureCompiler> */
9565 if (unlikely(var227 == NULL)) {
9566 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_tables");
9567 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 846);
9568 show_backtrace(1);
9569 }
9570 var225 = var227;
9571 RET_LABEL226:(void)0;
9572 }
9573 }
9574 var_228 = var225;
9575 {
9576 var229 = ((val* (*)(val*))(var_228->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_228) /* iterator on <var_228:Map[MClass, Array[nullable MPropDef]]>*/;
9577 }
9578 var_230 = var229;
9579 for(;;) {
9580 {
9581 var231 = ((short int (*)(val*))(var_230->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var_230) /* is_ok on <var_230:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9582 }
9583 if (var231){
9584 {
9585 var232 = ((val* (*)(val*))(var_230->class->vft[COLOR_abstract_collection__MapIterator__key]))(var_230) /* key on <var_230:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9586 }
9587 var_t233 = var232;
9588 {
9589 var234 = ((val* (*)(val*))(var_230->class->vft[COLOR_abstract_collection__MapIterator__item]))(var_230) /* item on <var_230:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9590 }
9591 var_table235 = var234;
9592 {
9593 { /* Inline array#AbstractArrayRead#length (var_table235) on <var_table235:Array[nullable MPropDef]> */
9594 var238 = var_table235->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table235:Array[nullable MPropDef]> */
9595 var236 = var238;
9596 RET_LABEL237:(void)0;
9597 }
9598 }
9599 {
9600 { /* Inline kernel#Int#+ (var_total,var236) on <var_total:Int> */
9601 /* Covariant cast for argument 0 (i) <var236:Int> isa OTHER */
9602 /* <var236:Int> isa OTHER */
9603 var241 = 1; /* easy <var236:Int> isa OTHER*/
9604 if (unlikely(!var241)) {
9605 var_class_name244 = type_kernel__Int.name;
9606 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name244);
9607 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
9608 show_backtrace(1);
9609 }
9610 var245 = var_total + var236;
9611 var239 = var245;
9612 goto RET_LABEL240;
9613 RET_LABEL240:(void)0;
9614 }
9615 }
9616 var_total = var239;
9617 var_246 = var_table235;
9618 {
9619 var247 = array__AbstractArrayRead__iterator(var_246);
9620 }
9621 var_248 = var247;
9622 for(;;) {
9623 {
9624 var249 = array__ArrayIterator__is_ok(var_248);
9625 }
9626 if (var249){
9627 {
9628 var250 = array__ArrayIterator__item(var_248);
9629 }
9630 var_e251 = var250;
9631 var252 = NULL;
9632 if (var_e251 == NULL) {
9633 var253 = 1; /* is null */
9634 } else {
9635 var253 = 0; /* arg is null but recv is not */
9636 }
9637 if (0) {
9638 { /* Inline kernel#Object#== (var_e251,var252) on <var_e251:nullable MPropDef> */
9639 var_other = var252;
9640 {
9641 { /* Inline kernel#Object#is_same_instance (var_e251,var_other) on <var_e251:nullable MPropDef(MPropDef)> */
9642 var258 = var_e251 == var_other;
9643 var256 = var258;
9644 goto RET_LABEL257;
9645 RET_LABEL257:(void)0;
9646 }
9647 }
9648 var254 = var256;
9649 goto RET_LABEL255;
9650 RET_LABEL255:(void)0;
9651 }
9652 var253 = var254;
9653 }
9654 if (var253){
9655 var259 = 1;
9656 {
9657 { /* Inline kernel#Int#+ (var_holes,var259) on <var_holes:Int> */
9658 /* Covariant cast for argument 0 (i) <var259:Int> isa OTHER */
9659 /* <var259:Int> isa OTHER */
9660 var262 = 1; /* easy <var259:Int> isa OTHER*/
9661 if (unlikely(!var262)) {
9662 var_class_name265 = type_kernel__Int.name;
9663 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name265);
9664 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
9665 show_backtrace(1);
9666 }
9667 var266 = var_holes + var259;
9668 var260 = var266;
9669 goto RET_LABEL261;
9670 RET_LABEL261:(void)0;
9671 }
9672 }
9673 var_holes = var260;
9674 } else {
9675 }
9676 {
9677 array__ArrayIterator__next(var_248); /* Direct call array#ArrayIterator#next on <var_248:ArrayIterator[nullable MPropDef]>*/
9678 }
9679 } else {
9680 goto BREAK_label267;
9681 }
9682 }
9683 BREAK_label267: (void)0;
9684 {
9685 { /* Inline abstract_collection#Iterator#finish (var_248) on <var_248:ArrayIterator[nullable MPropDef]> */
9686 RET_LABEL268:(void)0;
9687 }
9688 }
9689 {
9690 ((void (*)(val*))(var_230->class->vft[COLOR_abstract_collection__MapIterator__next]))(var_230) /* next on <var_230:MapIterator[MClass, Array[nullable MPropDef]]>*/;
9691 }
9692 } else {
9693 goto BREAK_label269;
9694 }
9695 }
9696 BREAK_label269: (void)0;
9697 {
9698 { /* Inline abstract_collection#MapIterator#finish (var_230) on <var_230:MapIterator[MClass, Array[nullable MPropDef]]> */
9699 RET_LABEL270:(void)0;
9700 }
9701 }
9702 if (varonce271) {
9703 var272 = varonce271;
9704 } else {
9705 var273 = "\11";
9706 var274 = 1;
9707 var275 = string__NativeString__to_s_with_length(var273, var274);
9708 var272 = var275;
9709 varonce271 = var272;
9710 }
9711 if (varonce276) {
9712 var277 = varonce276;
9713 } else {
9714 var278 = "\11";
9715 var279 = 1;
9716 var280 = string__NativeString__to_s_with_length(var278, var279);
9717 var277 = var280;
9718 varonce276 = var277;
9719 }
9720 var281 = NEW_array__Array(&type_array__Arraykernel__Object);
9721 { /* var281 = array_instance Array[Object] */
9722 var282 = 4;
9723 var283 = NEW_array__NativeArray(var282, &type_array__NativeArraykernel__Object);
9724 ((struct instance_array__NativeArray*)var283)->values[0] = (val*) var272;
9725 var284 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
9726 ((struct instance_array__NativeArray*)var283)->values[1] = (val*) var284;
9727 ((struct instance_array__NativeArray*)var283)->values[2] = (val*) var277;
9728 var285 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
9729 ((struct instance_array__NativeArray*)var283)->values[3] = (val*) var285;
9730 {
9731 ((void (*)(val*, val*, long))(var281->class->vft[COLOR_array__Array__with_native]))(var281, var283, var282) /* with_native on <var281:Array[Object]>*/;
9732 }
9733 }
9734 {
9735 var286 = ((val* (*)(val*))(var281->class->vft[COLOR_string__Object__to_s]))(var281) /* to_s on <var281:Array[Object]>*/;
9736 }
9737 {
9738 file__Object__print(self, var286); /* Direct call file#Object#print on <self:SeparateErasureCompiler>*/
9739 }
9740 RET_LABEL:;
9741 }
9742 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: Object) */
9743 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
9744 separate_erasure_compiler__SeparateErasureCompiler__display_sizes(self); /* Direct call separate_erasure_compiler#SeparateErasureCompiler#display_sizes on <self:Object(SeparateErasureCompiler)>*/
9745 RET_LABEL:;
9746 }