nitc: fix calling extern constructors from extern code in separate compiler
[nit.git] / c_src / separate_compiler.sep.1.c
1 #include "separate_compiler.sep.0.h"
2 /* method separate_compiler#ToolContext#opt_separate for (self: ToolContext): OptionBool */
3 val* separate_compiler__ToolContext__opt_separate(val* self) {
4 val* var /* : OptionBool */;
5 val* var1 /* : OptionBool */;
6 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_separate].val; /* _opt_separate on <self:ToolContext> */
7 if (unlikely(var1 == NULL)) {
8 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_separate");
9 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 24);
10 show_backtrace(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method separate_compiler#ToolContext#opt_separate for (self: Object): OptionBool */
17 val* VIRTUAL_separate_compiler__ToolContext__opt_separate(val* self) {
18 val* var /* : OptionBool */;
19 val* var1 /* : OptionBool */;
20 val* var3 /* : OptionBool */;
21 { /* Inline separate_compiler#ToolContext#opt_separate (self) on <self:Object(ToolContext)> */
22 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_separate].val; /* _opt_separate on <self:Object(ToolContext)> */
23 if (unlikely(var3 == NULL)) {
24 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_separate");
25 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 24);
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_compiler#ToolContext#opt_no_inline_intern for (self: ToolContext): OptionBool */
36 val* separate_compiler__ToolContext__opt_no_inline_intern(val* self) {
37 val* var /* : OptionBool */;
38 val* var1 /* : OptionBool */;
39 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_no_inline_intern].val; /* _opt_no_inline_intern on <self:ToolContext> */
40 if (unlikely(var1 == NULL)) {
41 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_inline_intern");
42 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 26);
43 show_backtrace(1);
44 }
45 var = var1;
46 RET_LABEL:;
47 return var;
48 }
49 /* method separate_compiler#ToolContext#opt_no_inline_intern for (self: Object): OptionBool */
50 val* VIRTUAL_separate_compiler__ToolContext__opt_no_inline_intern(val* self) {
51 val* var /* : OptionBool */;
52 val* var1 /* : OptionBool */;
53 val* var3 /* : OptionBool */;
54 { /* Inline separate_compiler#ToolContext#opt_no_inline_intern (self) on <self:Object(ToolContext)> */
55 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_no_inline_intern].val; /* _opt_no_inline_intern on <self:Object(ToolContext)> */
56 if (unlikely(var3 == NULL)) {
57 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_inline_intern");
58 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 26);
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_compiler#ToolContext#opt_no_union_attribute for (self: ToolContext): OptionBool */
69 val* separate_compiler__ToolContext__opt_no_union_attribute(val* self) {
70 val* var /* : OptionBool */;
71 val* var1 /* : OptionBool */;
72 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_no_union_attribute].val; /* _opt_no_union_attribute on <self:ToolContext> */
73 if (unlikely(var1 == NULL)) {
74 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_union_attribute");
75 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 28);
76 show_backtrace(1);
77 }
78 var = var1;
79 RET_LABEL:;
80 return var;
81 }
82 /* method separate_compiler#ToolContext#opt_no_union_attribute for (self: Object): OptionBool */
83 val* VIRTUAL_separate_compiler__ToolContext__opt_no_union_attribute(val* self) {
84 val* var /* : OptionBool */;
85 val* var1 /* : OptionBool */;
86 val* var3 /* : OptionBool */;
87 { /* Inline separate_compiler#ToolContext#opt_no_union_attribute (self) on <self:Object(ToolContext)> */
88 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_no_union_attribute].val; /* _opt_no_union_attribute on <self:Object(ToolContext)> */
89 if (unlikely(var3 == NULL)) {
90 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_union_attribute");
91 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 28);
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_compiler#ToolContext#opt_no_shortcut_equate for (self: ToolContext): OptionBool */
102 val* separate_compiler__ToolContext__opt_no_shortcut_equate(val* self) {
103 val* var /* : OptionBool */;
104 val* var1 /* : OptionBool */;
105 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_no_shortcut_equate].val; /* _opt_no_shortcut_equate on <self:ToolContext> */
106 if (unlikely(var1 == NULL)) {
107 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_shortcut_equate");
108 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 30);
109 show_backtrace(1);
110 }
111 var = var1;
112 RET_LABEL:;
113 return var;
114 }
115 /* method separate_compiler#ToolContext#opt_no_shortcut_equate for (self: Object): OptionBool */
116 val* VIRTUAL_separate_compiler__ToolContext__opt_no_shortcut_equate(val* self) {
117 val* var /* : OptionBool */;
118 val* var1 /* : OptionBool */;
119 val* var3 /* : OptionBool */;
120 { /* Inline separate_compiler#ToolContext#opt_no_shortcut_equate (self) on <self:Object(ToolContext)> */
121 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_no_shortcut_equate].val; /* _opt_no_shortcut_equate on <self:Object(ToolContext)> */
122 if (unlikely(var3 == NULL)) {
123 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_shortcut_equate");
124 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 30);
125 show_backtrace(1);
126 }
127 var1 = var3;
128 RET_LABEL2:(void)0;
129 }
130 var = var1;
131 RET_LABEL:;
132 return var;
133 }
134 /* method separate_compiler#ToolContext#opt_inline_coloring_numbers for (self: ToolContext): OptionBool */
135 val* separate_compiler__ToolContext__opt_inline_coloring_numbers(val* self) {
136 val* var /* : OptionBool */;
137 val* var1 /* : OptionBool */;
138 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_inline_coloring_numbers].val; /* _opt_inline_coloring_numbers on <self:ToolContext> */
139 if (unlikely(var1 == NULL)) {
140 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_coloring_numbers");
141 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 32);
142 show_backtrace(1);
143 }
144 var = var1;
145 RET_LABEL:;
146 return var;
147 }
148 /* method separate_compiler#ToolContext#opt_inline_coloring_numbers for (self: Object): OptionBool */
149 val* VIRTUAL_separate_compiler__ToolContext__opt_inline_coloring_numbers(val* self) {
150 val* var /* : OptionBool */;
151 val* var1 /* : OptionBool */;
152 val* var3 /* : OptionBool */;
153 { /* Inline separate_compiler#ToolContext#opt_inline_coloring_numbers (self) on <self:Object(ToolContext)> */
154 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_inline_coloring_numbers].val; /* _opt_inline_coloring_numbers on <self:Object(ToolContext)> */
155 if (unlikely(var3 == NULL)) {
156 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_coloring_numbers");
157 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 32);
158 show_backtrace(1);
159 }
160 var1 = var3;
161 RET_LABEL2:(void)0;
162 }
163 var = var1;
164 RET_LABEL:;
165 return var;
166 }
167 /* method separate_compiler#ToolContext#opt_inline_some_methods for (self: ToolContext): OptionBool */
168 val* separate_compiler__ToolContext__opt_inline_some_methods(val* self) {
169 val* var /* : OptionBool */;
170 val* var1 /* : OptionBool */;
171 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_inline_some_methods].val; /* _opt_inline_some_methods on <self:ToolContext> */
172 if (unlikely(var1 == NULL)) {
173 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_some_methods");
174 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 34);
175 show_backtrace(1);
176 }
177 var = var1;
178 RET_LABEL:;
179 return var;
180 }
181 /* method separate_compiler#ToolContext#opt_inline_some_methods for (self: Object): OptionBool */
182 val* VIRTUAL_separate_compiler__ToolContext__opt_inline_some_methods(val* self) {
183 val* var /* : OptionBool */;
184 val* var1 /* : OptionBool */;
185 val* var3 /* : OptionBool */;
186 { /* Inline separate_compiler#ToolContext#opt_inline_some_methods (self) on <self:Object(ToolContext)> */
187 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_inline_some_methods].val; /* _opt_inline_some_methods on <self:Object(ToolContext)> */
188 if (unlikely(var3 == NULL)) {
189 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_some_methods");
190 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 34);
191 show_backtrace(1);
192 }
193 var1 = var3;
194 RET_LABEL2:(void)0;
195 }
196 var = var1;
197 RET_LABEL:;
198 return var;
199 }
200 /* method separate_compiler#ToolContext#opt_direct_call_monomorph for (self: ToolContext): OptionBool */
201 val* separate_compiler__ToolContext__opt_direct_call_monomorph(val* self) {
202 val* var /* : OptionBool */;
203 val* var1 /* : OptionBool */;
204 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_direct_call_monomorph].val; /* _opt_direct_call_monomorph on <self:ToolContext> */
205 if (unlikely(var1 == NULL)) {
206 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_direct_call_monomorph");
207 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 36);
208 show_backtrace(1);
209 }
210 var = var1;
211 RET_LABEL:;
212 return var;
213 }
214 /* method separate_compiler#ToolContext#opt_direct_call_monomorph for (self: Object): OptionBool */
215 val* VIRTUAL_separate_compiler__ToolContext__opt_direct_call_monomorph(val* self) {
216 val* var /* : OptionBool */;
217 val* var1 /* : OptionBool */;
218 val* var3 /* : OptionBool */;
219 { /* Inline separate_compiler#ToolContext#opt_direct_call_monomorph (self) on <self:Object(ToolContext)> */
220 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_direct_call_monomorph].val; /* _opt_direct_call_monomorph on <self:Object(ToolContext)> */
221 if (unlikely(var3 == NULL)) {
222 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_direct_call_monomorph");
223 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 36);
224 show_backtrace(1);
225 }
226 var1 = var3;
227 RET_LABEL2:(void)0;
228 }
229 var = var1;
230 RET_LABEL:;
231 return var;
232 }
233 /* method separate_compiler#ToolContext#opt_skip_dead_methods for (self: ToolContext): OptionBool */
234 val* separate_compiler__ToolContext__opt_skip_dead_methods(val* self) {
235 val* var /* : OptionBool */;
236 val* var1 /* : OptionBool */;
237 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_skip_dead_methods].val; /* _opt_skip_dead_methods on <self:ToolContext> */
238 if (unlikely(var1 == NULL)) {
239 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_skip_dead_methods");
240 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 38);
241 show_backtrace(1);
242 }
243 var = var1;
244 RET_LABEL:;
245 return var;
246 }
247 /* method separate_compiler#ToolContext#opt_skip_dead_methods for (self: Object): OptionBool */
248 val* VIRTUAL_separate_compiler__ToolContext__opt_skip_dead_methods(val* self) {
249 val* var /* : OptionBool */;
250 val* var1 /* : OptionBool */;
251 val* var3 /* : OptionBool */;
252 { /* Inline separate_compiler#ToolContext#opt_skip_dead_methods (self) on <self:Object(ToolContext)> */
253 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_skip_dead_methods].val; /* _opt_skip_dead_methods on <self:Object(ToolContext)> */
254 if (unlikely(var3 == NULL)) {
255 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_skip_dead_methods");
256 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 38);
257 show_backtrace(1);
258 }
259 var1 = var3;
260 RET_LABEL2:(void)0;
261 }
262 var = var1;
263 RET_LABEL:;
264 return var;
265 }
266 /* method separate_compiler#ToolContext#opt_semi_global for (self: ToolContext): OptionBool */
267 val* separate_compiler__ToolContext__opt_semi_global(val* self) {
268 val* var /* : OptionBool */;
269 val* var1 /* : OptionBool */;
270 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_semi_global].val; /* _opt_semi_global on <self:ToolContext> */
271 if (unlikely(var1 == NULL)) {
272 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_semi_global");
273 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 40);
274 show_backtrace(1);
275 }
276 var = var1;
277 RET_LABEL:;
278 return var;
279 }
280 /* method separate_compiler#ToolContext#opt_semi_global for (self: Object): OptionBool */
281 val* VIRTUAL_separate_compiler__ToolContext__opt_semi_global(val* self) {
282 val* var /* : OptionBool */;
283 val* var1 /* : OptionBool */;
284 val* var3 /* : OptionBool */;
285 { /* Inline separate_compiler#ToolContext#opt_semi_global (self) on <self:Object(ToolContext)> */
286 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_semi_global].val; /* _opt_semi_global on <self:Object(ToolContext)> */
287 if (unlikely(var3 == NULL)) {
288 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_semi_global");
289 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 40);
290 show_backtrace(1);
291 }
292 var1 = var3;
293 RET_LABEL2:(void)0;
294 }
295 var = var1;
296 RET_LABEL:;
297 return var;
298 }
299 /* method separate_compiler#ToolContext#opt_colo_dead_methods for (self: ToolContext): OptionBool */
300 val* separate_compiler__ToolContext__opt_colo_dead_methods(val* self) {
301 val* var /* : OptionBool */;
302 val* var1 /* : OptionBool */;
303 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_colo_dead_methods].val; /* _opt_colo_dead_methods on <self:ToolContext> */
304 if (unlikely(var1 == NULL)) {
305 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_colo_dead_methods");
306 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 42);
307 show_backtrace(1);
308 }
309 var = var1;
310 RET_LABEL:;
311 return var;
312 }
313 /* method separate_compiler#ToolContext#opt_colo_dead_methods for (self: Object): OptionBool */
314 val* VIRTUAL_separate_compiler__ToolContext__opt_colo_dead_methods(val* self) {
315 val* var /* : OptionBool */;
316 val* var1 /* : OptionBool */;
317 val* var3 /* : OptionBool */;
318 { /* Inline separate_compiler#ToolContext#opt_colo_dead_methods (self) on <self:Object(ToolContext)> */
319 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_colo_dead_methods].val; /* _opt_colo_dead_methods on <self:Object(ToolContext)> */
320 if (unlikely(var3 == NULL)) {
321 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_colo_dead_methods");
322 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 42);
323 show_backtrace(1);
324 }
325 var1 = var3;
326 RET_LABEL2:(void)0;
327 }
328 var = var1;
329 RET_LABEL:;
330 return var;
331 }
332 /* method separate_compiler#ToolContext#opt_tables_metrics for (self: ToolContext): OptionBool */
333 val* separate_compiler__ToolContext__opt_tables_metrics(val* self) {
334 val* var /* : OptionBool */;
335 val* var1 /* : OptionBool */;
336 var1 = self->attrs[COLOR_separate_compiler__ToolContext___opt_tables_metrics].val; /* _opt_tables_metrics on <self:ToolContext> */
337 if (unlikely(var1 == NULL)) {
338 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_tables_metrics");
339 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 44);
340 show_backtrace(1);
341 }
342 var = var1;
343 RET_LABEL:;
344 return var;
345 }
346 /* method separate_compiler#ToolContext#opt_tables_metrics for (self: Object): OptionBool */
347 val* VIRTUAL_separate_compiler__ToolContext__opt_tables_metrics(val* self) {
348 val* var /* : OptionBool */;
349 val* var1 /* : OptionBool */;
350 val* var3 /* : OptionBool */;
351 { /* Inline separate_compiler#ToolContext#opt_tables_metrics (self) on <self:Object(ToolContext)> */
352 var3 = self->attrs[COLOR_separate_compiler__ToolContext___opt_tables_metrics].val; /* _opt_tables_metrics on <self:Object(ToolContext)> */
353 if (unlikely(var3 == NULL)) {
354 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_tables_metrics");
355 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 44);
356 show_backtrace(1);
357 }
358 var1 = var3;
359 RET_LABEL2:(void)0;
360 }
361 var = var1;
362 RET_LABEL:;
363 return var;
364 }
365 /* method separate_compiler#ToolContext#init for (self: ToolContext) */
366 void separate_compiler__ToolContext__init(val* self) {
367 val* var /* : OptionContext */;
368 val* var2 /* : OptionContext */;
369 val* var3 /* : OptionBool */;
370 val* var5 /* : OptionBool */;
371 val* var6 /* : Array[Option] */;
372 long var7 /* : Int */;
373 val* var8 /* : NativeArray[Option] */;
374 val* var9 /* : OptionContext */;
375 val* var11 /* : OptionContext */;
376 val* var12 /* : OptionBool */;
377 val* var14 /* : OptionBool */;
378 val* var15 /* : Array[Option] */;
379 long var16 /* : Int */;
380 val* var17 /* : NativeArray[Option] */;
381 val* var18 /* : OptionContext */;
382 val* var20 /* : OptionContext */;
383 val* var21 /* : OptionBool */;
384 val* var23 /* : OptionBool */;
385 val* var24 /* : Array[Option] */;
386 long var25 /* : Int */;
387 val* var26 /* : NativeArray[Option] */;
388 val* var27 /* : OptionContext */;
389 val* var29 /* : OptionContext */;
390 val* var30 /* : OptionBool */;
391 val* var32 /* : OptionBool */;
392 val* var33 /* : Array[Option] */;
393 long var34 /* : Int */;
394 val* var35 /* : NativeArray[Option] */;
395 val* var36 /* : OptionContext */;
396 val* var38 /* : OptionContext */;
397 val* var39 /* : OptionBool */;
398 val* var41 /* : OptionBool */;
399 val* var42 /* : OptionBool */;
400 val* var44 /* : OptionBool */;
401 val* var45 /* : OptionBool */;
402 val* var47 /* : OptionBool */;
403 val* var48 /* : OptionBool */;
404 val* var50 /* : OptionBool */;
405 val* var51 /* : OptionBool */;
406 val* var53 /* : OptionBool */;
407 val* var54 /* : Array[Option] */;
408 long var55 /* : Int */;
409 val* var56 /* : NativeArray[Option] */;
410 val* var57 /* : OptionContext */;
411 val* var59 /* : OptionContext */;
412 val* var60 /* : OptionBool */;
413 val* var62 /* : OptionBool */;
414 val* var63 /* : Array[Option] */;
415 long var64 /* : Int */;
416 val* var65 /* : NativeArray[Option] */;
417 val* var66 /* : OptionContext */;
418 val* var68 /* : OptionContext */;
419 val* var69 /* : OptionBool */;
420 val* var71 /* : OptionBool */;
421 val* var72 /* : Array[Option] */;
422 long var73 /* : Int */;
423 val* var74 /* : NativeArray[Option] */;
424 {
425 ((void (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__init]))(self) /* init on <self:ToolContext>*/;
426 }
427 {
428 { /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
429 var2 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
430 if (unlikely(var2 == NULL)) {
431 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
432 PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
433 show_backtrace(1);
434 }
435 var = var2;
436 RET_LABEL1:(void)0;
437 }
438 }
439 {
440 { /* Inline separate_compiler#ToolContext#opt_separate (self) on <self:ToolContext> */
441 var5 = self->attrs[COLOR_separate_compiler__ToolContext___opt_separate].val; /* _opt_separate on <self:ToolContext> */
442 if (unlikely(var5 == NULL)) {
443 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_separate");
444 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 24);
445 show_backtrace(1);
446 }
447 var3 = var5;
448 RET_LABEL4:(void)0;
449 }
450 }
451 var6 = NEW_array__Array(&type_array__Arrayopts__Option);
452 { /* var6 = array_instance Array[Option] */
453 var7 = 1;
454 var8 = NEW_array__NativeArray(var7, &type_array__NativeArrayopts__Option);
455 ((struct instance_array__NativeArray*)var8)->values[0] = (val*) var3;
456 {
457 ((void (*)(val*, val*, long))(var6->class->vft[COLOR_array__Array__with_native]))(var6, var8, var7) /* with_native on <var6:Array[Option]>*/;
458 }
459 }
460 {
461 opts__OptionContext__add_option(var, var6); /* Direct call opts#OptionContext#add_option on <var:OptionContext>*/
462 }
463 {
464 { /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
465 var11 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
466 if (unlikely(var11 == NULL)) {
467 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
468 PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
469 show_backtrace(1);
470 }
471 var9 = var11;
472 RET_LABEL10:(void)0;
473 }
474 }
475 {
476 { /* Inline separate_compiler#ToolContext#opt_no_inline_intern (self) on <self:ToolContext> */
477 var14 = self->attrs[COLOR_separate_compiler__ToolContext___opt_no_inline_intern].val; /* _opt_no_inline_intern on <self:ToolContext> */
478 if (unlikely(var14 == NULL)) {
479 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_inline_intern");
480 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 26);
481 show_backtrace(1);
482 }
483 var12 = var14;
484 RET_LABEL13:(void)0;
485 }
486 }
487 var15 = NEW_array__Array(&type_array__Arrayopts__Option);
488 { /* var15 = array_instance Array[Option] */
489 var16 = 1;
490 var17 = NEW_array__NativeArray(var16, &type_array__NativeArrayopts__Option);
491 ((struct instance_array__NativeArray*)var17)->values[0] = (val*) var12;
492 {
493 ((void (*)(val*, val*, long))(var15->class->vft[COLOR_array__Array__with_native]))(var15, var17, var16) /* with_native on <var15:Array[Option]>*/;
494 }
495 }
496 {
497 opts__OptionContext__add_option(var9, var15); /* Direct call opts#OptionContext#add_option on <var9:OptionContext>*/
498 }
499 {
500 { /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
501 var20 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
502 if (unlikely(var20 == NULL)) {
503 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
504 PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
505 show_backtrace(1);
506 }
507 var18 = var20;
508 RET_LABEL19:(void)0;
509 }
510 }
511 {
512 { /* Inline separate_compiler#ToolContext#opt_no_union_attribute (self) on <self:ToolContext> */
513 var23 = self->attrs[COLOR_separate_compiler__ToolContext___opt_no_union_attribute].val; /* _opt_no_union_attribute on <self:ToolContext> */
514 if (unlikely(var23 == NULL)) {
515 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_union_attribute");
516 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 28);
517 show_backtrace(1);
518 }
519 var21 = var23;
520 RET_LABEL22:(void)0;
521 }
522 }
523 var24 = NEW_array__Array(&type_array__Arrayopts__Option);
524 { /* var24 = array_instance Array[Option] */
525 var25 = 1;
526 var26 = NEW_array__NativeArray(var25, &type_array__NativeArrayopts__Option);
527 ((struct instance_array__NativeArray*)var26)->values[0] = (val*) var21;
528 {
529 ((void (*)(val*, val*, long))(var24->class->vft[COLOR_array__Array__with_native]))(var24, var26, var25) /* with_native on <var24:Array[Option]>*/;
530 }
531 }
532 {
533 opts__OptionContext__add_option(var18, var24); /* Direct call opts#OptionContext#add_option on <var18:OptionContext>*/
534 }
535 {
536 { /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
537 var29 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
538 if (unlikely(var29 == NULL)) {
539 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
540 PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
541 show_backtrace(1);
542 }
543 var27 = var29;
544 RET_LABEL28:(void)0;
545 }
546 }
547 {
548 { /* Inline separate_compiler#ToolContext#opt_no_shortcut_equate (self) on <self:ToolContext> */
549 var32 = self->attrs[COLOR_separate_compiler__ToolContext___opt_no_shortcut_equate].val; /* _opt_no_shortcut_equate on <self:ToolContext> */
550 if (unlikely(var32 == NULL)) {
551 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_shortcut_equate");
552 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 30);
553 show_backtrace(1);
554 }
555 var30 = var32;
556 RET_LABEL31:(void)0;
557 }
558 }
559 var33 = NEW_array__Array(&type_array__Arrayopts__Option);
560 { /* var33 = array_instance Array[Option] */
561 var34 = 1;
562 var35 = NEW_array__NativeArray(var34, &type_array__NativeArrayopts__Option);
563 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var30;
564 {
565 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Option]>*/;
566 }
567 }
568 {
569 opts__OptionContext__add_option(var27, var33); /* Direct call opts#OptionContext#add_option on <var27:OptionContext>*/
570 }
571 {
572 { /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
573 var38 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
574 if (unlikely(var38 == NULL)) {
575 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
576 PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
577 show_backtrace(1);
578 }
579 var36 = var38;
580 RET_LABEL37:(void)0;
581 }
582 }
583 {
584 { /* Inline separate_compiler#ToolContext#opt_inline_coloring_numbers (self) on <self:ToolContext> */
585 var41 = self->attrs[COLOR_separate_compiler__ToolContext___opt_inline_coloring_numbers].val; /* _opt_inline_coloring_numbers on <self:ToolContext> */
586 if (unlikely(var41 == NULL)) {
587 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_coloring_numbers");
588 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 32);
589 show_backtrace(1);
590 }
591 var39 = var41;
592 RET_LABEL40:(void)0;
593 }
594 }
595 {
596 { /* Inline separate_compiler#ToolContext#opt_inline_some_methods (self) on <self:ToolContext> */
597 var44 = self->attrs[COLOR_separate_compiler__ToolContext___opt_inline_some_methods].val; /* _opt_inline_some_methods on <self:ToolContext> */
598 if (unlikely(var44 == NULL)) {
599 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_some_methods");
600 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 34);
601 show_backtrace(1);
602 }
603 var42 = var44;
604 RET_LABEL43:(void)0;
605 }
606 }
607 {
608 { /* Inline separate_compiler#ToolContext#opt_direct_call_monomorph (self) on <self:ToolContext> */
609 var47 = self->attrs[COLOR_separate_compiler__ToolContext___opt_direct_call_monomorph].val; /* _opt_direct_call_monomorph on <self:ToolContext> */
610 if (unlikely(var47 == NULL)) {
611 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_direct_call_monomorph");
612 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 36);
613 show_backtrace(1);
614 }
615 var45 = var47;
616 RET_LABEL46:(void)0;
617 }
618 }
619 {
620 { /* Inline separate_compiler#ToolContext#opt_skip_dead_methods (self) on <self:ToolContext> */
621 var50 = self->attrs[COLOR_separate_compiler__ToolContext___opt_skip_dead_methods].val; /* _opt_skip_dead_methods on <self:ToolContext> */
622 if (unlikely(var50 == NULL)) {
623 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_skip_dead_methods");
624 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 38);
625 show_backtrace(1);
626 }
627 var48 = var50;
628 RET_LABEL49:(void)0;
629 }
630 }
631 {
632 { /* Inline separate_compiler#ToolContext#opt_semi_global (self) on <self:ToolContext> */
633 var53 = self->attrs[COLOR_separate_compiler__ToolContext___opt_semi_global].val; /* _opt_semi_global on <self:ToolContext> */
634 if (unlikely(var53 == NULL)) {
635 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_semi_global");
636 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 40);
637 show_backtrace(1);
638 }
639 var51 = var53;
640 RET_LABEL52:(void)0;
641 }
642 }
643 var54 = NEW_array__Array(&type_array__Arrayopts__Option);
644 { /* var54 = array_instance Array[Option] */
645 var55 = 5;
646 var56 = NEW_array__NativeArray(var55, &type_array__NativeArrayopts__Option);
647 ((struct instance_array__NativeArray*)var56)->values[0] = (val*) var39;
648 ((struct instance_array__NativeArray*)var56)->values[1] = (val*) var42;
649 ((struct instance_array__NativeArray*)var56)->values[2] = (val*) var45;
650 ((struct instance_array__NativeArray*)var56)->values[3] = (val*) var48;
651 ((struct instance_array__NativeArray*)var56)->values[4] = (val*) var51;
652 {
653 ((void (*)(val*, val*, long))(var54->class->vft[COLOR_array__Array__with_native]))(var54, var56, var55) /* with_native on <var54:Array[Option]>*/;
654 }
655 }
656 {
657 opts__OptionContext__add_option(var36, var54); /* Direct call opts#OptionContext#add_option on <var36:OptionContext>*/
658 }
659 {
660 { /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
661 var59 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
662 if (unlikely(var59 == NULL)) {
663 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
664 PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
665 show_backtrace(1);
666 }
667 var57 = var59;
668 RET_LABEL58:(void)0;
669 }
670 }
671 {
672 { /* Inline separate_compiler#ToolContext#opt_colo_dead_methods (self) on <self:ToolContext> */
673 var62 = self->attrs[COLOR_separate_compiler__ToolContext___opt_colo_dead_methods].val; /* _opt_colo_dead_methods on <self:ToolContext> */
674 if (unlikely(var62 == NULL)) {
675 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_colo_dead_methods");
676 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 42);
677 show_backtrace(1);
678 }
679 var60 = var62;
680 RET_LABEL61:(void)0;
681 }
682 }
683 var63 = NEW_array__Array(&type_array__Arrayopts__Option);
684 { /* var63 = array_instance Array[Option] */
685 var64 = 1;
686 var65 = NEW_array__NativeArray(var64, &type_array__NativeArrayopts__Option);
687 ((struct instance_array__NativeArray*)var65)->values[0] = (val*) var60;
688 {
689 ((void (*)(val*, val*, long))(var63->class->vft[COLOR_array__Array__with_native]))(var63, var65, var64) /* with_native on <var63:Array[Option]>*/;
690 }
691 }
692 {
693 opts__OptionContext__add_option(var57, var63); /* Direct call opts#OptionContext#add_option on <var57:OptionContext>*/
694 }
695 {
696 { /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
697 var68 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
698 if (unlikely(var68 == NULL)) {
699 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
700 PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
701 show_backtrace(1);
702 }
703 var66 = var68;
704 RET_LABEL67:(void)0;
705 }
706 }
707 {
708 { /* Inline separate_compiler#ToolContext#opt_tables_metrics (self) on <self:ToolContext> */
709 var71 = self->attrs[COLOR_separate_compiler__ToolContext___opt_tables_metrics].val; /* _opt_tables_metrics on <self:ToolContext> */
710 if (unlikely(var71 == NULL)) {
711 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_tables_metrics");
712 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 44);
713 show_backtrace(1);
714 }
715 var69 = var71;
716 RET_LABEL70:(void)0;
717 }
718 }
719 var72 = NEW_array__Array(&type_array__Arrayopts__Option);
720 { /* var72 = array_instance Array[Option] */
721 var73 = 1;
722 var74 = NEW_array__NativeArray(var73, &type_array__NativeArrayopts__Option);
723 ((struct instance_array__NativeArray*)var74)->values[0] = (val*) var69;
724 {
725 ((void (*)(val*, val*, long))(var72->class->vft[COLOR_array__Array__with_native]))(var72, var74, var73) /* with_native on <var72:Array[Option]>*/;
726 }
727 }
728 {
729 opts__OptionContext__add_option(var66, var72); /* Direct call opts#OptionContext#add_option on <var66:OptionContext>*/
730 }
731 RET_LABEL:;
732 }
733 /* method separate_compiler#ToolContext#init for (self: Object) */
734 void VIRTUAL_separate_compiler__ToolContext__init(val* self) {
735 separate_compiler__ToolContext__init(self); /* Direct call separate_compiler#ToolContext#init on <self:Object(ToolContext)>*/
736 RET_LABEL:;
737 }
738 /* method separate_compiler#ToolContext#process_options for (self: ToolContext, Sequence[String]) */
739 void separate_compiler__ToolContext__process_options(val* self, val* p0) {
740 val* var_args /* var args: Sequence[String] */;
741 val* var_tc /* var tc: ToolContext */;
742 val* var /* : OptionBool */;
743 val* var2 /* : OptionBool */;
744 val* var3 /* : nullable Object */;
745 val* var5 /* : nullable Object */;
746 short int var6 /* : Bool */;
747 val* var7 /* : OptionBool */;
748 val* var9 /* : OptionBool */;
749 short int var10 /* : Bool */;
750 short int var12 /* : Bool */;
751 int cltype;
752 int idtype;
753 const struct type* type_struct;
754 const char* var_class_name;
755 val* var13 /* : nullable Object */;
756 val* var14 /* : OptionBool */;
757 val* var16 /* : OptionBool */;
758 short int var17 /* : Bool */;
759 short int var19 /* : Bool */;
760 int cltype20;
761 int idtype21;
762 const struct type* type_struct22;
763 const char* var_class_name23;
764 val* var24 /* : nullable Object */;
765 val* var25 /* : OptionBool */;
766 val* var27 /* : OptionBool */;
767 short int var28 /* : Bool */;
768 short int var30 /* : Bool */;
769 int cltype31;
770 int idtype32;
771 const struct type* type_struct33;
772 const char* var_class_name34;
773 val* var35 /* : nullable Object */;
774 val* var36 /* : OptionBool */;
775 val* var38 /* : OptionBool */;
776 short int var39 /* : Bool */;
777 short int var41 /* : Bool */;
778 int cltype42;
779 int idtype43;
780 const struct type* type_struct44;
781 const char* var_class_name45;
782 val* var46 /* : nullable Object */;
783 var_args = p0;
784 {
785 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__ToolContext__process_options]))(self, p0) /* process_options on <self:ToolContext>*/;
786 }
787 var_tc = self;
788 {
789 { /* Inline separate_compiler#ToolContext#opt_semi_global (var_tc) on <var_tc:ToolContext> */
790 var2 = var_tc->attrs[COLOR_separate_compiler__ToolContext___opt_semi_global].val; /* _opt_semi_global on <var_tc:ToolContext> */
791 if (unlikely(var2 == NULL)) {
792 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_semi_global");
793 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 40);
794 show_backtrace(1);
795 }
796 var = var2;
797 RET_LABEL1:(void)0;
798 }
799 }
800 {
801 { /* Inline opts#Option#value (var) on <var:OptionBool> */
802 var5 = var->attrs[COLOR_opts__Option___value].val; /* _value on <var:OptionBool> */
803 var3 = var5;
804 RET_LABEL4:(void)0;
805 }
806 }
807 var6 = ((struct instance_kernel__Bool*)var3)->value; /* autounbox from nullable Object to Bool */;
808 if (var6){
809 {
810 { /* Inline separate_compiler#ToolContext#opt_inline_coloring_numbers (var_tc) on <var_tc:ToolContext> */
811 var9 = var_tc->attrs[COLOR_separate_compiler__ToolContext___opt_inline_coloring_numbers].val; /* _opt_inline_coloring_numbers on <var_tc:ToolContext> */
812 if (unlikely(var9 == NULL)) {
813 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_coloring_numbers");
814 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 32);
815 show_backtrace(1);
816 }
817 var7 = var9;
818 RET_LABEL8:(void)0;
819 }
820 }
821 var10 = 1;
822 {
823 { /* Inline opts#Option#value= (var7,var10) on <var7:OptionBool> */
824 /* Covariant cast for argument 0 (value) <var10:Bool> isa VALUE */
825 /* <var10:Bool> isa VALUE */
826 type_struct = var7->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
827 cltype = type_struct->color;
828 idtype = type_struct->id;
829 if(cltype >= (&type_kernel__Bool)->table_size) {
830 var12 = 0;
831 } else {
832 var12 = (&type_kernel__Bool)->type_table[cltype] == idtype;
833 }
834 if (unlikely(!var12)) {
835 var_class_name = type_kernel__Bool.name;
836 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name);
837 PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
838 show_backtrace(1);
839 }
840 var13 = BOX_kernel__Bool(var10); /* autobox from Bool to nullable Object */
841 var7->attrs[COLOR_opts__Option___value].val = var13; /* _value on <var7:OptionBool> */
842 RET_LABEL11:(void)0;
843 }
844 }
845 {
846 { /* Inline separate_compiler#ToolContext#opt_inline_some_methods (var_tc) on <var_tc:ToolContext> */
847 var16 = var_tc->attrs[COLOR_separate_compiler__ToolContext___opt_inline_some_methods].val; /* _opt_inline_some_methods on <var_tc:ToolContext> */
848 if (unlikely(var16 == NULL)) {
849 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_some_methods");
850 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 34);
851 show_backtrace(1);
852 }
853 var14 = var16;
854 RET_LABEL15:(void)0;
855 }
856 }
857 var17 = 1;
858 {
859 { /* Inline opts#Option#value= (var14,var17) on <var14:OptionBool> */
860 /* Covariant cast for argument 0 (value) <var17:Bool> isa VALUE */
861 /* <var17:Bool> isa VALUE */
862 type_struct22 = var14->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
863 cltype20 = type_struct22->color;
864 idtype21 = type_struct22->id;
865 if(cltype20 >= (&type_kernel__Bool)->table_size) {
866 var19 = 0;
867 } else {
868 var19 = (&type_kernel__Bool)->type_table[cltype20] == idtype21;
869 }
870 if (unlikely(!var19)) {
871 var_class_name23 = type_kernel__Bool.name;
872 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name23);
873 PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
874 show_backtrace(1);
875 }
876 var24 = BOX_kernel__Bool(var17); /* autobox from Bool to nullable Object */
877 var14->attrs[COLOR_opts__Option___value].val = var24; /* _value on <var14:OptionBool> */
878 RET_LABEL18:(void)0;
879 }
880 }
881 {
882 { /* Inline separate_compiler#ToolContext#opt_direct_call_monomorph (var_tc) on <var_tc:ToolContext> */
883 var27 = var_tc->attrs[COLOR_separate_compiler__ToolContext___opt_direct_call_monomorph].val; /* _opt_direct_call_monomorph on <var_tc:ToolContext> */
884 if (unlikely(var27 == NULL)) {
885 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_direct_call_monomorph");
886 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 36);
887 show_backtrace(1);
888 }
889 var25 = var27;
890 RET_LABEL26:(void)0;
891 }
892 }
893 var28 = 1;
894 {
895 { /* Inline opts#Option#value= (var25,var28) on <var25:OptionBool> */
896 /* Covariant cast for argument 0 (value) <var28:Bool> isa VALUE */
897 /* <var28:Bool> isa VALUE */
898 type_struct33 = var25->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
899 cltype31 = type_struct33->color;
900 idtype32 = type_struct33->id;
901 if(cltype31 >= (&type_kernel__Bool)->table_size) {
902 var30 = 0;
903 } else {
904 var30 = (&type_kernel__Bool)->type_table[cltype31] == idtype32;
905 }
906 if (unlikely(!var30)) {
907 var_class_name34 = type_kernel__Bool.name;
908 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name34);
909 PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
910 show_backtrace(1);
911 }
912 var35 = BOX_kernel__Bool(var28); /* autobox from Bool to nullable Object */
913 var25->attrs[COLOR_opts__Option___value].val = var35; /* _value on <var25:OptionBool> */
914 RET_LABEL29:(void)0;
915 }
916 }
917 {
918 { /* Inline separate_compiler#ToolContext#opt_skip_dead_methods (var_tc) on <var_tc:ToolContext> */
919 var38 = var_tc->attrs[COLOR_separate_compiler__ToolContext___opt_skip_dead_methods].val; /* _opt_skip_dead_methods on <var_tc:ToolContext> */
920 if (unlikely(var38 == NULL)) {
921 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_skip_dead_methods");
922 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 38);
923 show_backtrace(1);
924 }
925 var36 = var38;
926 RET_LABEL37:(void)0;
927 }
928 }
929 var39 = 1;
930 {
931 { /* Inline opts#Option#value= (var36,var39) on <var36:OptionBool> */
932 /* Covariant cast for argument 0 (value) <var39:Bool> isa VALUE */
933 /* <var39:Bool> isa VALUE */
934 type_struct44 = var36->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
935 cltype42 = type_struct44->color;
936 idtype43 = type_struct44->id;
937 if(cltype42 >= (&type_kernel__Bool)->table_size) {
938 var41 = 0;
939 } else {
940 var41 = (&type_kernel__Bool)->type_table[cltype42] == idtype43;
941 }
942 if (unlikely(!var41)) {
943 var_class_name45 = type_kernel__Bool.name;
944 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name45);
945 PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
946 show_backtrace(1);
947 }
948 var46 = BOX_kernel__Bool(var39); /* autobox from Bool to nullable Object */
949 var36->attrs[COLOR_opts__Option___value].val = var46; /* _value on <var36:OptionBool> */
950 RET_LABEL40:(void)0;
951 }
952 }
953 } else {
954 }
955 RET_LABEL:;
956 }
957 /* method separate_compiler#ToolContext#process_options for (self: Object, Sequence[String]) */
958 void VIRTUAL_separate_compiler__ToolContext__process_options(val* self, val* p0) {
959 separate_compiler__ToolContext__process_options(self, p0); /* Direct call separate_compiler#ToolContext#process_options on <self:Object(ToolContext)>*/
960 RET_LABEL:;
961 }
962 /* method separate_compiler#SeparateCompilerPhase#process_mainmodule for (self: SeparateCompilerPhase, MModule, SequenceRead[MModule]) */
963 void separate_compiler__SeparateCompilerPhase__process_mainmodule(val* self, val* p0, val* p1) {
964 val* var_mainmodule /* var mainmodule: MModule */;
965 val* var_given_mmodules /* var given_mmodules: SequenceRead[MModule] */;
966 val* var /* : ToolContext */;
967 val* var2 /* : ToolContext */;
968 val* var3 /* : OptionBool */;
969 val* var5 /* : OptionBool */;
970 val* var6 /* : nullable Object */;
971 val* var8 /* : nullable Object */;
972 short int var9 /* : Bool */;
973 short int var10 /* : Bool */;
974 val* var11 /* : ToolContext */;
975 val* var13 /* : ToolContext */;
976 val* var14 /* : ModelBuilder */;
977 val* var_modelbuilder /* var modelbuilder: ModelBuilder */;
978 val* var15 /* : RapidTypeAnalysis */;
979 val* var_analysis /* var analysis: RapidTypeAnalysis */;
980 var_mainmodule = p0;
981 var_given_mmodules = p1;
982 {
983 { /* Inline phase#Phase#toolcontext (self) on <self:SeparateCompilerPhase> */
984 var2 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:SeparateCompilerPhase> */
985 if (unlikely(var2 == NULL)) {
986 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
987 PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
988 show_backtrace(1);
989 }
990 var = var2;
991 RET_LABEL1:(void)0;
992 }
993 }
994 {
995 { /* Inline separate_compiler#ToolContext#opt_separate (var) on <var:ToolContext> */
996 var5 = var->attrs[COLOR_separate_compiler__ToolContext___opt_separate].val; /* _opt_separate on <var:ToolContext> */
997 if (unlikely(var5 == NULL)) {
998 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_separate");
999 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 24);
1000 show_backtrace(1);
1001 }
1002 var3 = var5;
1003 RET_LABEL4:(void)0;
1004 }
1005 }
1006 {
1007 { /* Inline opts#Option#value (var3) on <var3:OptionBool> */
1008 var8 = var3->attrs[COLOR_opts__Option___value].val; /* _value on <var3:OptionBool> */
1009 var6 = var8;
1010 RET_LABEL7:(void)0;
1011 }
1012 }
1013 var9 = ((struct instance_kernel__Bool*)var6)->value; /* autounbox from nullable Object to Bool */;
1014 var10 = !var9;
1015 if (var10){
1016 goto RET_LABEL;
1017 } else {
1018 }
1019 {
1020 { /* Inline phase#Phase#toolcontext (self) on <self:SeparateCompilerPhase> */
1021 var13 = self->attrs[COLOR_phase__Phase___toolcontext].val; /* _toolcontext on <self:SeparateCompilerPhase> */
1022 if (unlikely(var13 == NULL)) {
1023 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
1024 PRINT_ERROR(" (%s:%d)\n", "phase.nit", 162);
1025 show_backtrace(1);
1026 }
1027 var11 = var13;
1028 RET_LABEL12:(void)0;
1029 }
1030 }
1031 {
1032 var14 = modelbuilder__ToolContext__modelbuilder(var11);
1033 }
1034 var_modelbuilder = var14;
1035 {
1036 var15 = rapid_type_analysis__ModelBuilder__do_rapid_type_analysis(var_modelbuilder, var_mainmodule);
1037 }
1038 var_analysis = var15;
1039 {
1040 separate_compiler__ModelBuilder__run_separate_compiler(var_modelbuilder, var_mainmodule, var_analysis); /* Direct call separate_compiler#ModelBuilder#run_separate_compiler on <var_modelbuilder:ModelBuilder>*/
1041 }
1042 RET_LABEL:;
1043 }
1044 /* method separate_compiler#SeparateCompilerPhase#process_mainmodule for (self: Object, MModule, SequenceRead[MModule]) */
1045 void VIRTUAL_separate_compiler__SeparateCompilerPhase__process_mainmodule(val* self, val* p0, val* p1) {
1046 separate_compiler__SeparateCompilerPhase__process_mainmodule(self, p0, p1); /* Direct call separate_compiler#SeparateCompilerPhase#process_mainmodule on <self:Object(SeparateCompilerPhase)>*/
1047 RET_LABEL:;
1048 }
1049 /* method separate_compiler#ModelBuilder#run_separate_compiler for (self: ModelBuilder, MModule, nullable RapidTypeAnalysis) */
1050 void separate_compiler__ModelBuilder__run_separate_compiler(val* self, val* p0, val* p1) {
1051 val* var_mainmodule /* var mainmodule: MModule */;
1052 val* var_runtime_type_analysis /* var runtime_type_analysis: nullable RapidTypeAnalysis */;
1053 long var /* : Int */;
1054 long var2 /* : Int for extern */;
1055 long var_time0 /* var time0: Int */;
1056 val* var3 /* : ToolContext */;
1057 val* var5 /* : ToolContext */;
1058 static val* varonce;
1059 val* var6 /* : String */;
1060 char* var7 /* : NativeString */;
1061 long var8 /* : Int */;
1062 val* var9 /* : FlatString */;
1063 long var10 /* : Int */;
1064 val* var11 /* : SeparateCompiler */;
1065 val* var_compiler /* var compiler: SeparateCompiler */;
1066 val* var12 /* : ToolContext */;
1067 val* var14 /* : ToolContext */;
1068 static val* varonce15;
1069 val* var16 /* : String */;
1070 char* var17 /* : NativeString */;
1071 long var18 /* : Int */;
1072 val* var19 /* : FlatString */;
1073 long var20 /* : Int */;
1074 val* var21 /* : String */;
1075 val* var23 /* : String */;
1076 static val* varonce24;
1077 val* var25 /* : String */;
1078 char* var26 /* : NativeString */;
1079 long var27 /* : Int */;
1080 val* var28 /* : FlatString */;
1081 val* var29 /* : Array[Object] */;
1082 long var30 /* : Int */;
1083 val* var31 /* : NativeArray[Object] */;
1084 val* var32 /* : String */;
1085 val* var33 /* : CodeFile */;
1086 val* var34 /* : POSetElement[MModule] */;
1087 val* var36 /* : POSetElement[MModule] */;
1088 val* var37 /* : Collection[Object] */;
1089 val* var_ /* var : Collection[MModule] */;
1090 val* var38 /* : Iterator[nullable Object] */;
1091 val* var_39 /* var : Iterator[MModule] */;
1092 short int var40 /* : Bool */;
1093 val* var41 /* : nullable Object */;
1094 val* var_m /* var m: MModule */;
1095 val* var42 /* : Array[MClass] */;
1096 val* var44 /* : Array[MClass] */;
1097 val* var_45 /* var : Array[MClass] */;
1098 val* var46 /* : ArrayIterator[nullable Object] */;
1099 val* var_47 /* var : ArrayIterator[MClass] */;
1100 short int var48 /* : Bool */;
1101 val* var49 /* : nullable Object */;
1102 val* var_mclass /* var mclass: MClass */;
1103 val* var53 /* : String */;
1104 val* var55 /* : String */;
1105 static val* varonce56;
1106 val* var57 /* : String */;
1107 char* var58 /* : NativeString */;
1108 long var59 /* : Int */;
1109 val* var60 /* : FlatString */;
1110 val* var61 /* : Array[Object] */;
1111 long var62 /* : Int */;
1112 val* var63 /* : NativeArray[Object] */;
1113 val* var64 /* : String */;
1114 val* var65 /* : CodeFile */;
1115 val* var66 /* : POSetElement[MModule] */;
1116 val* var68 /* : POSetElement[MModule] */;
1117 val* var69 /* : Collection[Object] */;
1118 val* var_70 /* var : Collection[MModule] */;
1119 val* var71 /* : Iterator[nullable Object] */;
1120 val* var_72 /* var : Iterator[MModule] */;
1121 short int var73 /* : Bool */;
1122 val* var74 /* : nullable Object */;
1123 val* var_m75 /* var m: MModule */;
1124 val* var76 /* : ToolContext */;
1125 val* var78 /* : ToolContext */;
1126 static val* varonce79;
1127 val* var80 /* : String */;
1128 char* var81 /* : NativeString */;
1129 long var82 /* : Int */;
1130 val* var83 /* : FlatString */;
1131 val* var84 /* : Array[Object] */;
1132 long var85 /* : Int */;
1133 val* var86 /* : NativeArray[Object] */;
1134 val* var87 /* : String */;
1135 long var88 /* : Int */;
1136 val* var89 /* : String */;
1137 val* var91 /* : String */;
1138 static val* varonce92;
1139 val* var93 /* : String */;
1140 char* var94 /* : NativeString */;
1141 long var95 /* : Int */;
1142 val* var96 /* : FlatString */;
1143 val* var97 /* : Array[Object] */;
1144 long var98 /* : Int */;
1145 val* var99 /* : NativeArray[Object] */;
1146 val* var100 /* : String */;
1147 val* var101 /* : CodeFile */;
1148 val* var104 /* : ToolContext */;
1149 val* var106 /* : ToolContext */;
1150 static val* varonce107;
1151 val* var108 /* : String */;
1152 char* var109 /* : NativeString */;
1153 long var110 /* : Int */;
1154 val* var111 /* : FlatString */;
1155 long var112 /* : Int */;
1156 val* var113 /* : String */;
1157 val* var115 /* : String */;
1158 static val* varonce116;
1159 val* var117 /* : String */;
1160 char* var118 /* : NativeString */;
1161 long var119 /* : Int */;
1162 val* var120 /* : FlatString */;
1163 val* var121 /* : Array[Object] */;
1164 long var122 /* : Int */;
1165 val* var123 /* : NativeArray[Object] */;
1166 val* var124 /* : String */;
1167 val* var125 /* : CodeFile */;
1168 val* var126 /* : POSet[MType] */;
1169 val* var_mtypes /* var mtypes: POSet[MType] */;
1170 val* var_127 /* var : POSet[MType] */;
1171 val* var128 /* : Iterator[Object] */;
1172 val* var_129 /* var : Iterator[MType] */;
1173 short int var130 /* : Bool */;
1174 val* var131 /* : nullable Object */;
1175 val* var_t /* var t: MType */;
1176 val* var134 /* : Set[MType] */;
1177 val* var136 /* : Set[MType] */;
1178 val* var_137 /* var : Set[MType] */;
1179 val* var138 /* : Iterator[nullable Object] */;
1180 val* var_139 /* var : Iterator[MType] */;
1181 short int var140 /* : Bool */;
1182 val* var141 /* : nullable Object */;
1183 val* var_t142 /* var t: MType */;
1184 short int var143 /* : Bool */;
1185 long var147 /* : Int */;
1186 long var149 /* : Int for extern */;
1187 long var_time1 /* var time1: Int */;
1188 val* var150 /* : ToolContext */;
1189 val* var152 /* : ToolContext */;
1190 static val* varonce153;
1191 val* var154 /* : String */;
1192 char* var155 /* : NativeString */;
1193 long var156 /* : Int */;
1194 val* var157 /* : FlatString */;
1195 long var158 /* : Int */;
1196 short int var160 /* : Bool */;
1197 int cltype;
1198 int idtype;
1199 const char* var_class_name;
1200 long var161 /* : Int */;
1201 static val* varonce162;
1202 val* var163 /* : String */;
1203 char* var164 /* : NativeString */;
1204 long var165 /* : Int */;
1205 val* var166 /* : FlatString */;
1206 val* var167 /* : Array[Object] */;
1207 long var168 /* : Int */;
1208 val* var169 /* : NativeArray[Object] */;
1209 val* var170 /* : Object */;
1210 val* var171 /* : String */;
1211 long var172 /* : Int */;
1212 var_mainmodule = p0;
1213 var_runtime_type_analysis = p1;
1214 {
1215 { /* Inline time#Object#get_time (self) on <self:ModelBuilder> */
1216 var2 = kernel_Any_Any_get_time_0(self);
1217 var = var2;
1218 goto RET_LABEL1;
1219 RET_LABEL1:(void)0;
1220 }
1221 }
1222 var_time0 = var;
1223 {
1224 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
1225 var5 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
1226 if (unlikely(var5 == NULL)) {
1227 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
1228 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
1229 show_backtrace(1);
1230 }
1231 var3 = var5;
1232 RET_LABEL4:(void)0;
1233 }
1234 }
1235 if (varonce) {
1236 var6 = varonce;
1237 } else {
1238 var7 = "*** GENERATING C ***";
1239 var8 = 20;
1240 var9 = string__NativeString__to_s_with_length(var7, var8);
1241 var6 = var9;
1242 varonce = var6;
1243 }
1244 var10 = 1;
1245 {
1246 toolcontext__ToolContext__info(var3, var6, var10); /* Direct call toolcontext#ToolContext#info on <var3:ToolContext>*/
1247 }
1248 var11 = NEW_separate_compiler__SeparateCompiler(&type_separate_compiler__SeparateCompiler);
1249 {
1250 separate_compiler__SeparateCompiler__init(var11, var_mainmodule, self, var_runtime_type_analysis); /* Direct call separate_compiler#SeparateCompiler#init on <var11:SeparateCompiler>*/
1251 }
1252 var_compiler = var11;
1253 {
1254 abstract_compiler__AbstractCompiler__compile_header(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_header on <var_compiler:SeparateCompiler>*/
1255 }
1256 {
1257 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
1258 var14 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
1259 if (unlikely(var14 == NULL)) {
1260 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
1261 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
1262 show_backtrace(1);
1263 }
1264 var12 = var14;
1265 RET_LABEL13:(void)0;
1266 }
1267 }
1268 if (varonce15) {
1269 var16 = varonce15;
1270 } else {
1271 var17 = "Property coloring";
1272 var18 = 17;
1273 var19 = string__NativeString__to_s_with_length(var17, var18);
1274 var16 = var19;
1275 varonce15 = var16;
1276 }
1277 var20 = 2;
1278 {
1279 toolcontext__ToolContext__info(var12, var16, var20); /* Direct call toolcontext#ToolContext#info on <var12:ToolContext>*/
1280 }
1281 {
1282 { /* Inline mmodule#MModule#name (var_mainmodule) on <var_mainmodule:MModule> */
1283 var23 = var_mainmodule->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_mainmodule:MModule> */
1284 if (unlikely(var23 == NULL)) {
1285 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1286 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 78);
1287 show_backtrace(1);
1288 }
1289 var21 = var23;
1290 RET_LABEL22:(void)0;
1291 }
1292 }
1293 if (varonce24) {
1294 var25 = varonce24;
1295 } else {
1296 var26 = ".classes";
1297 var27 = 8;
1298 var28 = string__NativeString__to_s_with_length(var26, var27);
1299 var25 = var28;
1300 varonce24 = var25;
1301 }
1302 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
1303 { /* var29 = array_instance Array[Object] */
1304 var30 = 2;
1305 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
1306 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var21;
1307 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var25;
1308 {
1309 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
1310 }
1311 }
1312 {
1313 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
1314 }
1315 {
1316 var33 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var32);
1317 }
1318 {
1319 separate_compiler__SeparateCompiler__do_property_coloring(var_compiler); /* Direct call separate_compiler#SeparateCompiler#do_property_coloring on <var_compiler:SeparateCompiler>*/
1320 }
1321 {
1322 { /* Inline mmodule#MModule#in_importation (var_mainmodule) on <var_mainmodule:MModule> */
1323 var36 = var_mainmodule->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var_mainmodule:MModule> */
1324 if (unlikely(var36 == NULL)) {
1325 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
1326 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 93);
1327 show_backtrace(1);
1328 }
1329 var34 = var36;
1330 RET_LABEL35:(void)0;
1331 }
1332 }
1333 {
1334 var37 = poset__POSetElement__greaters(var34);
1335 }
1336 var_ = var37;
1337 {
1338 var38 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[MModule]>*/;
1339 }
1340 var_39 = var38;
1341 for(;;) {
1342 {
1343 var40 = ((short int (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_39) /* is_ok on <var_39:Iterator[MModule]>*/;
1344 }
1345 if (var40){
1346 {
1347 var41 = ((val* (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__item]))(var_39) /* item on <var_39:Iterator[MModule]>*/;
1348 }
1349 var_m = var41;
1350 {
1351 { /* Inline model#MModule#intro_mclasses (var_m) on <var_m:MModule> */
1352 var44 = var_m->attrs[COLOR_model__MModule___intro_mclasses].val; /* _intro_mclasses on <var_m:MModule> */
1353 if (unlikely(var44 == NULL)) {
1354 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclasses");
1355 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 136);
1356 show_backtrace(1);
1357 }
1358 var42 = var44;
1359 RET_LABEL43:(void)0;
1360 }
1361 }
1362 var_45 = var42;
1363 {
1364 var46 = array__AbstractArrayRead__iterator(var_45);
1365 }
1366 var_47 = var46;
1367 for(;;) {
1368 {
1369 var48 = array__ArrayIterator__is_ok(var_47);
1370 }
1371 if (var48){
1372 {
1373 var49 = array__ArrayIterator__item(var_47);
1374 }
1375 var_mclass = var49;
1376 {
1377 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_class_to_c]))(var_compiler, var_mclass) /* compile_class_to_c on <var_compiler:SeparateCompiler>*/;
1378 }
1379 {
1380 array__ArrayIterator__next(var_47); /* Direct call array#ArrayIterator#next on <var_47:ArrayIterator[MClass]>*/
1381 }
1382 } else {
1383 goto BREAK_label;
1384 }
1385 }
1386 BREAK_label: (void)0;
1387 {
1388 { /* Inline abstract_collection#Iterator#finish (var_47) on <var_47:ArrayIterator[MClass]> */
1389 RET_LABEL50:(void)0;
1390 }
1391 }
1392 {
1393 ((void (*)(val*))(var_39->class->vft[COLOR_abstract_collection__Iterator__next]))(var_39) /* next on <var_39:Iterator[MModule]>*/;
1394 }
1395 } else {
1396 goto BREAK_label51;
1397 }
1398 }
1399 BREAK_label51: (void)0;
1400 {
1401 { /* Inline abstract_collection#Iterator#finish (var_39) on <var_39:Iterator[MModule]> */
1402 RET_LABEL52:(void)0;
1403 }
1404 }
1405 {
1406 { /* Inline mmodule#MModule#name (var_mainmodule) on <var_mainmodule:MModule> */
1407 var55 = var_mainmodule->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_mainmodule:MModule> */
1408 if (unlikely(var55 == NULL)) {
1409 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1410 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 78);
1411 show_backtrace(1);
1412 }
1413 var53 = var55;
1414 RET_LABEL54:(void)0;
1415 }
1416 }
1417 if (varonce56) {
1418 var57 = varonce56;
1419 } else {
1420 var58 = ".main";
1421 var59 = 5;
1422 var60 = string__NativeString__to_s_with_length(var58, var59);
1423 var57 = var60;
1424 varonce56 = var57;
1425 }
1426 var61 = NEW_array__Array(&type_array__Arraykernel__Object);
1427 { /* var61 = array_instance Array[Object] */
1428 var62 = 2;
1429 var63 = NEW_array__NativeArray(var62, &type_array__NativeArraykernel__Object);
1430 ((struct instance_array__NativeArray*)var63)->values[0] = (val*) var53;
1431 ((struct instance_array__NativeArray*)var63)->values[1] = (val*) var57;
1432 {
1433 ((void (*)(val*, val*, long))(var61->class->vft[COLOR_array__Array__with_native]))(var61, var63, var62) /* with_native on <var61:Array[Object]>*/;
1434 }
1435 }
1436 {
1437 var64 = ((val* (*)(val*))(var61->class->vft[COLOR_string__Object__to_s]))(var61) /* to_s on <var61:Array[Object]>*/;
1438 }
1439 {
1440 var65 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var64);
1441 }
1442 {
1443 abstract_compiler__AbstractCompiler__compile_nitni_global_ref_functions(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_nitni_global_ref_functions on <var_compiler:SeparateCompiler>*/
1444 }
1445 {
1446 abstract_compiler__AbstractCompiler__compile_main_function(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_main_function on <var_compiler:SeparateCompiler>*/
1447 }
1448 {
1449 abstract_compiler__AbstractCompiler__compile_finalizer_function(var_compiler); /* Direct call abstract_compiler#AbstractCompiler#compile_finalizer_function on <var_compiler:SeparateCompiler>*/
1450 }
1451 {
1452 { /* Inline mmodule#MModule#in_importation (var_mainmodule) on <var_mainmodule:MModule> */
1453 var68 = var_mainmodule->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var_mainmodule:MModule> */
1454 if (unlikely(var68 == NULL)) {
1455 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
1456 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 93);
1457 show_backtrace(1);
1458 }
1459 var66 = var68;
1460 RET_LABEL67:(void)0;
1461 }
1462 }
1463 {
1464 var69 = poset__POSetElement__greaters(var66);
1465 }
1466 var_70 = var69;
1467 {
1468 var71 = ((val* (*)(val*))(var_70->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_70) /* iterator on <var_70:Collection[MModule]>*/;
1469 }
1470 var_72 = var71;
1471 for(;;) {
1472 {
1473 var73 = ((short int (*)(val*))(var_72->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_72) /* is_ok on <var_72:Iterator[MModule]>*/;
1474 }
1475 if (var73){
1476 {
1477 var74 = ((val* (*)(val*))(var_72->class->vft[COLOR_abstract_collection__Iterator__item]))(var_72) /* item on <var_72:Iterator[MModule]>*/;
1478 }
1479 var_m75 = var74;
1480 {
1481 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
1482 var78 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
1483 if (unlikely(var78 == NULL)) {
1484 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
1485 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
1486 show_backtrace(1);
1487 }
1488 var76 = var78;
1489 RET_LABEL77:(void)0;
1490 }
1491 }
1492 if (varonce79) {
1493 var80 = varonce79;
1494 } else {
1495 var81 = "Generate C for module ";
1496 var82 = 22;
1497 var83 = string__NativeString__to_s_with_length(var81, var82);
1498 var80 = var83;
1499 varonce79 = var80;
1500 }
1501 var84 = NEW_array__Array(&type_array__Arraykernel__Object);
1502 { /* var84 = array_instance Array[Object] */
1503 var85 = 2;
1504 var86 = NEW_array__NativeArray(var85, &type_array__NativeArraykernel__Object);
1505 ((struct instance_array__NativeArray*)var86)->values[0] = (val*) var80;
1506 ((struct instance_array__NativeArray*)var86)->values[1] = (val*) var_m75;
1507 {
1508 ((void (*)(val*, val*, long))(var84->class->vft[COLOR_array__Array__with_native]))(var84, var86, var85) /* with_native on <var84:Array[Object]>*/;
1509 }
1510 }
1511 {
1512 var87 = ((val* (*)(val*))(var84->class->vft[COLOR_string__Object__to_s]))(var84) /* to_s on <var84:Array[Object]>*/;
1513 }
1514 var88 = 2;
1515 {
1516 toolcontext__ToolContext__info(var76, var87, var88); /* Direct call toolcontext#ToolContext#info on <var76:ToolContext>*/
1517 }
1518 {
1519 { /* Inline mmodule#MModule#name (var_m75) on <var_m75:MModule> */
1520 var91 = var_m75->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_m75:MModule> */
1521 if (unlikely(var91 == NULL)) {
1522 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1523 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 78);
1524 show_backtrace(1);
1525 }
1526 var89 = var91;
1527 RET_LABEL90:(void)0;
1528 }
1529 }
1530 if (varonce92) {
1531 var93 = varonce92;
1532 } else {
1533 var94 = ".sep";
1534 var95 = 4;
1535 var96 = string__NativeString__to_s_with_length(var94, var95);
1536 var93 = var96;
1537 varonce92 = var93;
1538 }
1539 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
1540 { /* var97 = array_instance Array[Object] */
1541 var98 = 2;
1542 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
1543 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var89;
1544 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var93;
1545 {
1546 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
1547 }
1548 }
1549 {
1550 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
1551 }
1552 {
1553 var101 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var100);
1554 }
1555 {
1556 separate_compiler__SeparateCompiler__compile_module_to_c(var_compiler, var_m75); /* Direct call separate_compiler#SeparateCompiler#compile_module_to_c on <var_compiler:SeparateCompiler>*/
1557 }
1558 {
1559 ((void (*)(val*))(var_72->class->vft[COLOR_abstract_collection__Iterator__next]))(var_72) /* next on <var_72:Iterator[MModule]>*/;
1560 }
1561 } else {
1562 goto BREAK_label102;
1563 }
1564 }
1565 BREAK_label102: (void)0;
1566 {
1567 { /* Inline abstract_collection#Iterator#finish (var_72) on <var_72:Iterator[MModule]> */
1568 RET_LABEL103:(void)0;
1569 }
1570 }
1571 {
1572 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
1573 var106 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
1574 if (unlikely(var106 == NULL)) {
1575 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
1576 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
1577 show_backtrace(1);
1578 }
1579 var104 = var106;
1580 RET_LABEL105:(void)0;
1581 }
1582 }
1583 if (varonce107) {
1584 var108 = varonce107;
1585 } else {
1586 var109 = "Type coloring";
1587 var110 = 13;
1588 var111 = string__NativeString__to_s_with_length(var109, var110);
1589 var108 = var111;
1590 varonce107 = var108;
1591 }
1592 var112 = 2;
1593 {
1594 toolcontext__ToolContext__info(var104, var108, var112); /* Direct call toolcontext#ToolContext#info on <var104:ToolContext>*/
1595 }
1596 {
1597 { /* Inline mmodule#MModule#name (var_mainmodule) on <var_mainmodule:MModule> */
1598 var115 = var_mainmodule->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var_mainmodule:MModule> */
1599 if (unlikely(var115 == NULL)) {
1600 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1601 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 78);
1602 show_backtrace(1);
1603 }
1604 var113 = var115;
1605 RET_LABEL114:(void)0;
1606 }
1607 }
1608 if (varonce116) {
1609 var117 = varonce116;
1610 } else {
1611 var118 = ".types";
1612 var119 = 6;
1613 var120 = string__NativeString__to_s_with_length(var118, var119);
1614 var117 = var120;
1615 varonce116 = var117;
1616 }
1617 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
1618 { /* var121 = array_instance Array[Object] */
1619 var122 = 2;
1620 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
1621 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var113;
1622 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var117;
1623 {
1624 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
1625 }
1626 }
1627 {
1628 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
1629 }
1630 {
1631 var125 = abstract_compiler__AbstractCompiler__new_file(var_compiler, var124);
1632 }
1633 {
1634 var126 = separate_compiler__SeparateCompiler__do_type_coloring(var_compiler);
1635 }
1636 var_mtypes = var126;
1637 var_127 = var_mtypes;
1638 {
1639 var128 = poset__POSet__iterator(var_127);
1640 }
1641 var_129 = var128;
1642 for(;;) {
1643 {
1644 var130 = ((short int (*)(val*))(var_129->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_129) /* is_ok on <var_129:Iterator[MType]>*/;
1645 }
1646 if (var130){
1647 {
1648 var131 = ((val* (*)(val*))(var_129->class->vft[COLOR_abstract_collection__Iterator__item]))(var_129) /* item on <var_129:Iterator[MType]>*/;
1649 }
1650 var_t = var131;
1651 {
1652 separate_compiler__SeparateCompiler__compile_type_to_c(var_compiler, var_t); /* Direct call separate_compiler#SeparateCompiler#compile_type_to_c on <var_compiler:SeparateCompiler>*/
1653 }
1654 {
1655 ((void (*)(val*))(var_129->class->vft[COLOR_abstract_collection__Iterator__next]))(var_129) /* next on <var_129:Iterator[MType]>*/;
1656 }
1657 } else {
1658 goto BREAK_label132;
1659 }
1660 }
1661 BREAK_label132: (void)0;
1662 {
1663 { /* Inline abstract_collection#Iterator#finish (var_129) on <var_129:Iterator[MType]> */
1664 RET_LABEL133:(void)0;
1665 }
1666 }
1667 {
1668 { /* Inline separate_compiler#SeparateCompiler#undead_types (var_compiler) on <var_compiler:SeparateCompiler> */
1669 var136 = var_compiler->attrs[COLOR_separate_compiler__SeparateCompiler___undead_types].val; /* _undead_types on <var_compiler:SeparateCompiler> */
1670 if (unlikely(var136 == NULL)) {
1671 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _undead_types");
1672 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 156);
1673 show_backtrace(1);
1674 }
1675 var134 = var136;
1676 RET_LABEL135:(void)0;
1677 }
1678 }
1679 var_137 = var134;
1680 {
1681 var138 = ((val* (*)(val*))(var_137->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_137) /* iterator on <var_137:Set[MType]>*/;
1682 }
1683 var_139 = var138;
1684 for(;;) {
1685 {
1686 var140 = ((short int (*)(val*))(var_139->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_139) /* is_ok on <var_139:Iterator[MType]>*/;
1687 }
1688 if (var140){
1689 {
1690 var141 = ((val* (*)(val*))(var_139->class->vft[COLOR_abstract_collection__Iterator__item]))(var_139) /* item on <var_139:Iterator[MType]>*/;
1691 }
1692 var_t142 = var141;
1693 {
1694 var143 = poset__POSet__has(var_mtypes, var_t142);
1695 }
1696 if (var143){
1697 goto BREAK_label144;
1698 } else {
1699 }
1700 {
1701 separate_compiler__SeparateCompiler__compile_type_to_c(var_compiler, var_t142); /* Direct call separate_compiler#SeparateCompiler#compile_type_to_c on <var_compiler:SeparateCompiler>*/
1702 }
1703 BREAK_label144: (void)0;
1704 {
1705 ((void (*)(val*))(var_139->class->vft[COLOR_abstract_collection__Iterator__next]))(var_139) /* next on <var_139:Iterator[MType]>*/;
1706 }
1707 } else {
1708 goto BREAK_label145;
1709 }
1710 }
1711 BREAK_label145: (void)0;
1712 {
1713 { /* Inline abstract_collection#Iterator#finish (var_139) on <var_139:Iterator[MType]> */
1714 RET_LABEL146:(void)0;
1715 }
1716 }
1717 {
1718 separate_compiler__SeparateCompiler__display_stats(var_compiler); /* Direct call separate_compiler#SeparateCompiler#display_stats on <var_compiler:SeparateCompiler>*/
1719 }
1720 {
1721 { /* Inline time#Object#get_time (self) on <self:ModelBuilder> */
1722 var149 = kernel_Any_Any_get_time_0(self);
1723 var147 = var149;
1724 goto RET_LABEL148;
1725 RET_LABEL148:(void)0;
1726 }
1727 }
1728 var_time1 = var147;
1729 {
1730 { /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
1731 var152 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
1732 if (unlikely(var152 == NULL)) {
1733 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
1734 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
1735 show_backtrace(1);
1736 }
1737 var150 = var152;
1738 RET_LABEL151:(void)0;
1739 }
1740 }
1741 if (varonce153) {
1742 var154 = varonce153;
1743 } else {
1744 var155 = "*** END GENERATING C: ";
1745 var156 = 22;
1746 var157 = string__NativeString__to_s_with_length(var155, var156);
1747 var154 = var157;
1748 varonce153 = var154;
1749 }
1750 {
1751 { /* Inline kernel#Int#- (var_time1,var_time0) on <var_time1:Int> */
1752 /* Covariant cast for argument 0 (i) <var_time0:Int> isa OTHER */
1753 /* <var_time0:Int> isa OTHER */
1754 var160 = 1; /* easy <var_time0:Int> isa OTHER*/
1755 if (unlikely(!var160)) {
1756 var_class_name = type_kernel__Int.name;
1757 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1758 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
1759 show_backtrace(1);
1760 }
1761 var161 = var_time1 - var_time0;
1762 var158 = var161;
1763 goto RET_LABEL159;
1764 RET_LABEL159:(void)0;
1765 }
1766 }
1767 if (varonce162) {
1768 var163 = varonce162;
1769 } else {
1770 var164 = " ***";
1771 var165 = 4;
1772 var166 = string__NativeString__to_s_with_length(var164, var165);
1773 var163 = var166;
1774 varonce162 = var163;
1775 }
1776 var167 = NEW_array__Array(&type_array__Arraykernel__Object);
1777 { /* var167 = array_instance Array[Object] */
1778 var168 = 3;
1779 var169 = NEW_array__NativeArray(var168, &type_array__NativeArraykernel__Object);
1780 ((struct instance_array__NativeArray*)var169)->values[0] = (val*) var154;
1781 var170 = BOX_kernel__Int(var158); /* autobox from Int to Object */
1782 ((struct instance_array__NativeArray*)var169)->values[1] = (val*) var170;
1783 ((struct instance_array__NativeArray*)var169)->values[2] = (val*) var163;
1784 {
1785 ((void (*)(val*, val*, long))(var167->class->vft[COLOR_array__Array__with_native]))(var167, var169, var168) /* with_native on <var167:Array[Object]>*/;
1786 }
1787 }
1788 {
1789 var171 = ((val* (*)(val*))(var167->class->vft[COLOR_string__Object__to_s]))(var167) /* to_s on <var167:Array[Object]>*/;
1790 }
1791 var172 = 2;
1792 {
1793 toolcontext__ToolContext__info(var150, var171, var172); /* Direct call toolcontext#ToolContext#info on <var150:ToolContext>*/
1794 }
1795 {
1796 abstract_compiler__ModelBuilder__write_and_make(self, var_compiler); /* Direct call abstract_compiler#ModelBuilder#write_and_make on <self:ModelBuilder>*/
1797 }
1798 RET_LABEL:;
1799 }
1800 /* method separate_compiler#ModelBuilder#run_separate_compiler for (self: Object, MModule, nullable RapidTypeAnalysis) */
1801 void VIRTUAL_separate_compiler__ModelBuilder__run_separate_compiler(val* self, val* p0, val* p1) {
1802 separate_compiler__ModelBuilder__run_separate_compiler(self, p0, p1); /* Direct call separate_compiler#ModelBuilder#run_separate_compiler on <self:Object(ModelBuilder)>*/
1803 RET_LABEL:;
1804 }
1805 /* method separate_compiler#ModelBuilder#nb_invok_by_tables for (self: ModelBuilder): Int */
1806 long separate_compiler__ModelBuilder__nb_invok_by_tables(val* self) {
1807 long var /* : Int */;
1808 long var1 /* : Int */;
1809 var1 = self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_tables].l; /* _nb_invok_by_tables on <self:ModelBuilder> */
1810 var = var1;
1811 RET_LABEL:;
1812 return var;
1813 }
1814 /* method separate_compiler#ModelBuilder#nb_invok_by_tables for (self: Object): Int */
1815 long VIRTUAL_separate_compiler__ModelBuilder__nb_invok_by_tables(val* self) {
1816 long var /* : Int */;
1817 long var1 /* : Int */;
1818 long var3 /* : Int */;
1819 { /* Inline separate_compiler#ModelBuilder#nb_invok_by_tables (self) on <self:Object(ModelBuilder)> */
1820 var3 = self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_tables].l; /* _nb_invok_by_tables on <self:Object(ModelBuilder)> */
1821 var1 = var3;
1822 RET_LABEL2:(void)0;
1823 }
1824 var = var1;
1825 RET_LABEL:;
1826 return var;
1827 }
1828 /* method separate_compiler#ModelBuilder#nb_invok_by_tables= for (self: ModelBuilder, Int) */
1829 void separate_compiler__ModelBuilder__nb_invok_by_tables_61d(val* self, long p0) {
1830 self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_tables].l = p0; /* _nb_invok_by_tables on <self:ModelBuilder> */
1831 RET_LABEL:;
1832 }
1833 /* method separate_compiler#ModelBuilder#nb_invok_by_tables= for (self: Object, Int) */
1834 void VIRTUAL_separate_compiler__ModelBuilder__nb_invok_by_tables_61d(val* self, long p0) {
1835 { /* Inline separate_compiler#ModelBuilder#nb_invok_by_tables= (self,p0) on <self:Object(ModelBuilder)> */
1836 self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_tables].l = p0; /* _nb_invok_by_tables on <self:Object(ModelBuilder)> */
1837 RET_LABEL1:(void)0;
1838 }
1839 RET_LABEL:;
1840 }
1841 /* method separate_compiler#ModelBuilder#nb_invok_by_direct for (self: ModelBuilder): Int */
1842 long separate_compiler__ModelBuilder__nb_invok_by_direct(val* self) {
1843 long var /* : Int */;
1844 long var1 /* : Int */;
1845 var1 = self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_direct].l; /* _nb_invok_by_direct on <self:ModelBuilder> */
1846 var = var1;
1847 RET_LABEL:;
1848 return var;
1849 }
1850 /* method separate_compiler#ModelBuilder#nb_invok_by_direct for (self: Object): Int */
1851 long VIRTUAL_separate_compiler__ModelBuilder__nb_invok_by_direct(val* self) {
1852 long var /* : Int */;
1853 long var1 /* : Int */;
1854 long var3 /* : Int */;
1855 { /* Inline separate_compiler#ModelBuilder#nb_invok_by_direct (self) on <self:Object(ModelBuilder)> */
1856 var3 = self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_direct].l; /* _nb_invok_by_direct on <self:Object(ModelBuilder)> */
1857 var1 = var3;
1858 RET_LABEL2:(void)0;
1859 }
1860 var = var1;
1861 RET_LABEL:;
1862 return var;
1863 }
1864 /* method separate_compiler#ModelBuilder#nb_invok_by_direct= for (self: ModelBuilder, Int) */
1865 void separate_compiler__ModelBuilder__nb_invok_by_direct_61d(val* self, long p0) {
1866 self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_direct].l = p0; /* _nb_invok_by_direct on <self:ModelBuilder> */
1867 RET_LABEL:;
1868 }
1869 /* method separate_compiler#ModelBuilder#nb_invok_by_direct= for (self: Object, Int) */
1870 void VIRTUAL_separate_compiler__ModelBuilder__nb_invok_by_direct_61d(val* self, long p0) {
1871 { /* Inline separate_compiler#ModelBuilder#nb_invok_by_direct= (self,p0) on <self:Object(ModelBuilder)> */
1872 self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_direct].l = p0; /* _nb_invok_by_direct on <self:Object(ModelBuilder)> */
1873 RET_LABEL1:(void)0;
1874 }
1875 RET_LABEL:;
1876 }
1877 /* method separate_compiler#ModelBuilder#nb_invok_by_inline for (self: ModelBuilder): Int */
1878 long separate_compiler__ModelBuilder__nb_invok_by_inline(val* self) {
1879 long var /* : Int */;
1880 long var1 /* : Int */;
1881 var1 = self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_inline].l; /* _nb_invok_by_inline on <self:ModelBuilder> */
1882 var = var1;
1883 RET_LABEL:;
1884 return var;
1885 }
1886 /* method separate_compiler#ModelBuilder#nb_invok_by_inline for (self: Object): Int */
1887 long VIRTUAL_separate_compiler__ModelBuilder__nb_invok_by_inline(val* self) {
1888 long var /* : Int */;
1889 long var1 /* : Int */;
1890 long var3 /* : Int */;
1891 { /* Inline separate_compiler#ModelBuilder#nb_invok_by_inline (self) on <self:Object(ModelBuilder)> */
1892 var3 = self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_inline].l; /* _nb_invok_by_inline on <self:Object(ModelBuilder)> */
1893 var1 = var3;
1894 RET_LABEL2:(void)0;
1895 }
1896 var = var1;
1897 RET_LABEL:;
1898 return var;
1899 }
1900 /* method separate_compiler#ModelBuilder#nb_invok_by_inline= for (self: ModelBuilder, Int) */
1901 void separate_compiler__ModelBuilder__nb_invok_by_inline_61d(val* self, long p0) {
1902 self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_inline].l = p0; /* _nb_invok_by_inline on <self:ModelBuilder> */
1903 RET_LABEL:;
1904 }
1905 /* method separate_compiler#ModelBuilder#nb_invok_by_inline= for (self: Object, Int) */
1906 void VIRTUAL_separate_compiler__ModelBuilder__nb_invok_by_inline_61d(val* self, long p0) {
1907 { /* Inline separate_compiler#ModelBuilder#nb_invok_by_inline= (self,p0) on <self:Object(ModelBuilder)> */
1908 self->attrs[COLOR_separate_compiler__ModelBuilder___nb_invok_by_inline].l = p0; /* _nb_invok_by_inline on <self:Object(ModelBuilder)> */
1909 RET_LABEL1:(void)0;
1910 }
1911 RET_LABEL:;
1912 }
1913 /* method separate_compiler#SeparateCompiler#runtime_type_analysis for (self: SeparateCompiler): nullable RapidTypeAnalysis */
1914 val* separate_compiler__SeparateCompiler__runtime_type_analysis(val* self) {
1915 val* var /* : nullable RapidTypeAnalysis */;
1916 val* var1 /* : nullable RapidTypeAnalysis */;
1917 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateCompiler> */
1918 var = var1;
1919 RET_LABEL:;
1920 return var;
1921 }
1922 /* method separate_compiler#SeparateCompiler#runtime_type_analysis for (self: Object): nullable RapidTypeAnalysis */
1923 val* VIRTUAL_separate_compiler__SeparateCompiler__runtime_type_analysis(val* self) {
1924 val* var /* : nullable RapidTypeAnalysis */;
1925 val* var1 /* : nullable RapidTypeAnalysis */;
1926 val* var3 /* : nullable RapidTypeAnalysis */;
1927 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:Object(SeparateCompiler)> */
1928 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:Object(SeparateCompiler)> */
1929 var1 = var3;
1930 RET_LABEL2:(void)0;
1931 }
1932 var = var1;
1933 RET_LABEL:;
1934 return var;
1935 }
1936 /* method separate_compiler#SeparateCompiler#runtime_type_analysis= for (self: SeparateCompiler, nullable RapidTypeAnalysis) */
1937 void separate_compiler__SeparateCompiler__runtime_type_analysis_61d(val* self, val* p0) {
1938 self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val = p0; /* _runtime_type_analysis on <self:SeparateCompiler> */
1939 RET_LABEL:;
1940 }
1941 /* method separate_compiler#SeparateCompiler#runtime_type_analysis= for (self: Object, nullable RapidTypeAnalysis) */
1942 void VIRTUAL_separate_compiler__SeparateCompiler__runtime_type_analysis_61d(val* self, val* p0) {
1943 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis= (self,p0) on <self:Object(SeparateCompiler)> */
1944 self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val = p0; /* _runtime_type_analysis on <self:Object(SeparateCompiler)> */
1945 RET_LABEL1:(void)0;
1946 }
1947 RET_LABEL:;
1948 }
1949 /* method separate_compiler#SeparateCompiler#undead_types for (self: SeparateCompiler): Set[MType] */
1950 val* separate_compiler__SeparateCompiler__undead_types(val* self) {
1951 val* var /* : Set[MType] */;
1952 val* var1 /* : Set[MType] */;
1953 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___undead_types].val; /* _undead_types on <self:SeparateCompiler> */
1954 if (unlikely(var1 == NULL)) {
1955 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _undead_types");
1956 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 156);
1957 show_backtrace(1);
1958 }
1959 var = var1;
1960 RET_LABEL:;
1961 return var;
1962 }
1963 /* method separate_compiler#SeparateCompiler#undead_types for (self: Object): Set[MType] */
1964 val* VIRTUAL_separate_compiler__SeparateCompiler__undead_types(val* self) {
1965 val* var /* : Set[MType] */;
1966 val* var1 /* : Set[MType] */;
1967 val* var3 /* : Set[MType] */;
1968 { /* Inline separate_compiler#SeparateCompiler#undead_types (self) on <self:Object(SeparateCompiler)> */
1969 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___undead_types].val; /* _undead_types on <self:Object(SeparateCompiler)> */
1970 if (unlikely(var3 == NULL)) {
1971 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _undead_types");
1972 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 156);
1973 show_backtrace(1);
1974 }
1975 var1 = var3;
1976 RET_LABEL2:(void)0;
1977 }
1978 var = var1;
1979 RET_LABEL:;
1980 return var;
1981 }
1982 /* method separate_compiler#SeparateCompiler#live_unresolved_types for (self: SeparateCompiler): Map[MClassDef, Set[MType]] */
1983 val* separate_compiler__SeparateCompiler__live_unresolved_types(val* self) {
1984 val* var /* : Map[MClassDef, Set[MType]] */;
1985 val* var1 /* : Map[MClassDef, Set[MType]] */;
1986 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___live_unresolved_types].val; /* _live_unresolved_types on <self:SeparateCompiler> */
1987 if (unlikely(var1 == NULL)) {
1988 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_unresolved_types");
1989 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 157);
1990 show_backtrace(1);
1991 }
1992 var = var1;
1993 RET_LABEL:;
1994 return var;
1995 }
1996 /* method separate_compiler#SeparateCompiler#live_unresolved_types for (self: Object): Map[MClassDef, Set[MType]] */
1997 val* VIRTUAL_separate_compiler__SeparateCompiler__live_unresolved_types(val* self) {
1998 val* var /* : Map[MClassDef, Set[MType]] */;
1999 val* var1 /* : Map[MClassDef, Set[MType]] */;
2000 val* var3 /* : Map[MClassDef, Set[MType]] */;
2001 { /* Inline separate_compiler#SeparateCompiler#live_unresolved_types (self) on <self:Object(SeparateCompiler)> */
2002 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___live_unresolved_types].val; /* _live_unresolved_types on <self:Object(SeparateCompiler)> */
2003 if (unlikely(var3 == NULL)) {
2004 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_unresolved_types");
2005 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 157);
2006 show_backtrace(1);
2007 }
2008 var1 = var3;
2009 RET_LABEL2:(void)0;
2010 }
2011 var = var1;
2012 RET_LABEL:;
2013 return var;
2014 }
2015 /* method separate_compiler#SeparateCompiler#type_ids for (self: SeparateCompiler): Map[MType, Int] */
2016 val* separate_compiler__SeparateCompiler__type_ids(val* self) {
2017 val* var /* : Map[MType, Int] */;
2018 val* var1 /* : Map[MType, Int] */;
2019 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_ids].val; /* _type_ids on <self:SeparateCompiler> */
2020 if (unlikely(var1 == NULL)) {
2021 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_ids");
2022 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 159);
2023 show_backtrace(1);
2024 }
2025 var = var1;
2026 RET_LABEL:;
2027 return var;
2028 }
2029 /* method separate_compiler#SeparateCompiler#type_ids for (self: Object): Map[MType, Int] */
2030 val* VIRTUAL_separate_compiler__SeparateCompiler__type_ids(val* self) {
2031 val* var /* : Map[MType, Int] */;
2032 val* var1 /* : Map[MType, Int] */;
2033 val* var3 /* : Map[MType, Int] */;
2034 { /* Inline separate_compiler#SeparateCompiler#type_ids (self) on <self:Object(SeparateCompiler)> */
2035 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_ids].val; /* _type_ids on <self:Object(SeparateCompiler)> */
2036 if (unlikely(var3 == NULL)) {
2037 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_ids");
2038 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 159);
2039 show_backtrace(1);
2040 }
2041 var1 = var3;
2042 RET_LABEL2:(void)0;
2043 }
2044 var = var1;
2045 RET_LABEL:;
2046 return var;
2047 }
2048 /* method separate_compiler#SeparateCompiler#type_ids= for (self: SeparateCompiler, Map[MType, Int]) */
2049 void separate_compiler__SeparateCompiler__type_ids_61d(val* self, val* p0) {
2050 self->attrs[COLOR_separate_compiler__SeparateCompiler___type_ids].val = p0; /* _type_ids on <self:SeparateCompiler> */
2051 RET_LABEL:;
2052 }
2053 /* method separate_compiler#SeparateCompiler#type_ids= for (self: Object, Map[MType, Int]) */
2054 void VIRTUAL_separate_compiler__SeparateCompiler__type_ids_61d(val* self, val* p0) {
2055 { /* Inline separate_compiler#SeparateCompiler#type_ids= (self,p0) on <self:Object(SeparateCompiler)> */
2056 self->attrs[COLOR_separate_compiler__SeparateCompiler___type_ids].val = p0; /* _type_ids on <self:Object(SeparateCompiler)> */
2057 RET_LABEL1:(void)0;
2058 }
2059 RET_LABEL:;
2060 }
2061 /* method separate_compiler#SeparateCompiler#type_colors for (self: SeparateCompiler): Map[MType, Int] */
2062 val* separate_compiler__SeparateCompiler__type_colors(val* self) {
2063 val* var /* : Map[MType, Int] */;
2064 val* var1 /* : Map[MType, Int] */;
2065 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_colors].val; /* _type_colors on <self:SeparateCompiler> */
2066 if (unlikely(var1 == NULL)) {
2067 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_colors");
2068 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 160);
2069 show_backtrace(1);
2070 }
2071 var = var1;
2072 RET_LABEL:;
2073 return var;
2074 }
2075 /* method separate_compiler#SeparateCompiler#type_colors for (self: Object): Map[MType, Int] */
2076 val* VIRTUAL_separate_compiler__SeparateCompiler__type_colors(val* self) {
2077 val* var /* : Map[MType, Int] */;
2078 val* var1 /* : Map[MType, Int] */;
2079 val* var3 /* : Map[MType, Int] */;
2080 { /* Inline separate_compiler#SeparateCompiler#type_colors (self) on <self:Object(SeparateCompiler)> */
2081 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_colors].val; /* _type_colors on <self:Object(SeparateCompiler)> */
2082 if (unlikely(var3 == NULL)) {
2083 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_colors");
2084 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 160);
2085 show_backtrace(1);
2086 }
2087 var1 = var3;
2088 RET_LABEL2:(void)0;
2089 }
2090 var = var1;
2091 RET_LABEL:;
2092 return var;
2093 }
2094 /* method separate_compiler#SeparateCompiler#type_colors= for (self: SeparateCompiler, Map[MType, Int]) */
2095 void separate_compiler__SeparateCompiler__type_colors_61d(val* self, val* p0) {
2096 self->attrs[COLOR_separate_compiler__SeparateCompiler___type_colors].val = p0; /* _type_colors on <self:SeparateCompiler> */
2097 RET_LABEL:;
2098 }
2099 /* method separate_compiler#SeparateCompiler#type_colors= for (self: Object, Map[MType, Int]) */
2100 void VIRTUAL_separate_compiler__SeparateCompiler__type_colors_61d(val* self, val* p0) {
2101 { /* Inline separate_compiler#SeparateCompiler#type_colors= (self,p0) on <self:Object(SeparateCompiler)> */
2102 self->attrs[COLOR_separate_compiler__SeparateCompiler___type_colors].val = p0; /* _type_colors on <self:Object(SeparateCompiler)> */
2103 RET_LABEL1:(void)0;
2104 }
2105 RET_LABEL:;
2106 }
2107 /* method separate_compiler#SeparateCompiler#opentype_colors for (self: SeparateCompiler): Map[MType, Int] */
2108 val* separate_compiler__SeparateCompiler__opentype_colors(val* self) {
2109 val* var /* : Map[MType, Int] */;
2110 val* var1 /* : Map[MType, Int] */;
2111 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___opentype_colors].val; /* _opentype_colors on <self:SeparateCompiler> */
2112 if (unlikely(var1 == NULL)) {
2113 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opentype_colors");
2114 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 161);
2115 show_backtrace(1);
2116 }
2117 var = var1;
2118 RET_LABEL:;
2119 return var;
2120 }
2121 /* method separate_compiler#SeparateCompiler#opentype_colors for (self: Object): Map[MType, Int] */
2122 val* VIRTUAL_separate_compiler__SeparateCompiler__opentype_colors(val* self) {
2123 val* var /* : Map[MType, Int] */;
2124 val* var1 /* : Map[MType, Int] */;
2125 val* var3 /* : Map[MType, Int] */;
2126 { /* Inline separate_compiler#SeparateCompiler#opentype_colors (self) on <self:Object(SeparateCompiler)> */
2127 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___opentype_colors].val; /* _opentype_colors on <self:Object(SeparateCompiler)> */
2128 if (unlikely(var3 == NULL)) {
2129 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opentype_colors");
2130 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 161);
2131 show_backtrace(1);
2132 }
2133 var1 = var3;
2134 RET_LABEL2:(void)0;
2135 }
2136 var = var1;
2137 RET_LABEL:;
2138 return var;
2139 }
2140 /* method separate_compiler#SeparateCompiler#opentype_colors= for (self: SeparateCompiler, Map[MType, Int]) */
2141 void separate_compiler__SeparateCompiler__opentype_colors_61d(val* self, val* p0) {
2142 self->attrs[COLOR_separate_compiler__SeparateCompiler___opentype_colors].val = p0; /* _opentype_colors on <self:SeparateCompiler> */
2143 RET_LABEL:;
2144 }
2145 /* method separate_compiler#SeparateCompiler#opentype_colors= for (self: Object, Map[MType, Int]) */
2146 void VIRTUAL_separate_compiler__SeparateCompiler__opentype_colors_61d(val* self, val* p0) {
2147 { /* Inline separate_compiler#SeparateCompiler#opentype_colors= (self,p0) on <self:Object(SeparateCompiler)> */
2148 self->attrs[COLOR_separate_compiler__SeparateCompiler___opentype_colors].val = p0; /* _opentype_colors on <self:Object(SeparateCompiler)> */
2149 RET_LABEL1:(void)0;
2150 }
2151 RET_LABEL:;
2152 }
2153 /* method separate_compiler#SeparateCompiler#method_colors for (self: SeparateCompiler): Map[PropertyLayoutElement, Int] */
2154 val* separate_compiler__SeparateCompiler__method_colors(val* self) {
2155 val* var /* : Map[PropertyLayoutElement, Int] */;
2156 val* var1 /* : Map[PropertyLayoutElement, Int] */;
2157 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_colors].val; /* _method_colors on <self:SeparateCompiler> */
2158 if (unlikely(var1 == NULL)) {
2159 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_colors");
2160 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 162);
2161 show_backtrace(1);
2162 }
2163 var = var1;
2164 RET_LABEL:;
2165 return var;
2166 }
2167 /* method separate_compiler#SeparateCompiler#method_colors for (self: Object): Map[PropertyLayoutElement, Int] */
2168 val* VIRTUAL_separate_compiler__SeparateCompiler__method_colors(val* self) {
2169 val* var /* : Map[PropertyLayoutElement, Int] */;
2170 val* var1 /* : Map[PropertyLayoutElement, Int] */;
2171 val* var3 /* : Map[PropertyLayoutElement, Int] */;
2172 { /* Inline separate_compiler#SeparateCompiler#method_colors (self) on <self:Object(SeparateCompiler)> */
2173 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_colors].val; /* _method_colors on <self:Object(SeparateCompiler)> */
2174 if (unlikely(var3 == NULL)) {
2175 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_colors");
2176 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 162);
2177 show_backtrace(1);
2178 }
2179 var1 = var3;
2180 RET_LABEL2:(void)0;
2181 }
2182 var = var1;
2183 RET_LABEL:;
2184 return var;
2185 }
2186 /* method separate_compiler#SeparateCompiler#method_colors= for (self: SeparateCompiler, Map[PropertyLayoutElement, Int]) */
2187 void separate_compiler__SeparateCompiler__method_colors_61d(val* self, val* p0) {
2188 self->attrs[COLOR_separate_compiler__SeparateCompiler___method_colors].val = p0; /* _method_colors on <self:SeparateCompiler> */
2189 RET_LABEL:;
2190 }
2191 /* method separate_compiler#SeparateCompiler#method_colors= for (self: Object, Map[PropertyLayoutElement, Int]) */
2192 void VIRTUAL_separate_compiler__SeparateCompiler__method_colors_61d(val* self, val* p0) {
2193 { /* Inline separate_compiler#SeparateCompiler#method_colors= (self,p0) on <self:Object(SeparateCompiler)> */
2194 self->attrs[COLOR_separate_compiler__SeparateCompiler___method_colors].val = p0; /* _method_colors on <self:Object(SeparateCompiler)> */
2195 RET_LABEL1:(void)0;
2196 }
2197 RET_LABEL:;
2198 }
2199 /* method separate_compiler#SeparateCompiler#attr_colors for (self: SeparateCompiler): Map[MAttribute, Int] */
2200 val* separate_compiler__SeparateCompiler__attr_colors(val* self) {
2201 val* var /* : Map[MAttribute, Int] */;
2202 val* var1 /* : Map[MAttribute, Int] */;
2203 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_colors].val; /* _attr_colors on <self:SeparateCompiler> */
2204 if (unlikely(var1 == NULL)) {
2205 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_colors");
2206 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 163);
2207 show_backtrace(1);
2208 }
2209 var = var1;
2210 RET_LABEL:;
2211 return var;
2212 }
2213 /* method separate_compiler#SeparateCompiler#attr_colors for (self: Object): Map[MAttribute, Int] */
2214 val* VIRTUAL_separate_compiler__SeparateCompiler__attr_colors(val* self) {
2215 val* var /* : Map[MAttribute, Int] */;
2216 val* var1 /* : Map[MAttribute, Int] */;
2217 val* var3 /* : Map[MAttribute, Int] */;
2218 { /* Inline separate_compiler#SeparateCompiler#attr_colors (self) on <self:Object(SeparateCompiler)> */
2219 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_colors].val; /* _attr_colors on <self:Object(SeparateCompiler)> */
2220 if (unlikely(var3 == NULL)) {
2221 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_colors");
2222 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 163);
2223 show_backtrace(1);
2224 }
2225 var1 = var3;
2226 RET_LABEL2:(void)0;
2227 }
2228 var = var1;
2229 RET_LABEL:;
2230 return var;
2231 }
2232 /* method separate_compiler#SeparateCompiler#attr_colors= for (self: SeparateCompiler, Map[MAttribute, Int]) */
2233 void separate_compiler__SeparateCompiler__attr_colors_61d(val* self, val* p0) {
2234 self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_colors].val = p0; /* _attr_colors on <self:SeparateCompiler> */
2235 RET_LABEL:;
2236 }
2237 /* method separate_compiler#SeparateCompiler#attr_colors= for (self: Object, Map[MAttribute, Int]) */
2238 void VIRTUAL_separate_compiler__SeparateCompiler__attr_colors_61d(val* self, val* p0) {
2239 { /* Inline separate_compiler#SeparateCompiler#attr_colors= (self,p0) on <self:Object(SeparateCompiler)> */
2240 self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_colors].val = p0; /* _attr_colors on <self:Object(SeparateCompiler)> */
2241 RET_LABEL1:(void)0;
2242 }
2243 RET_LABEL:;
2244 }
2245 /* method separate_compiler#SeparateCompiler#init for (self: SeparateCompiler, MModule, ModelBuilder, nullable RapidTypeAnalysis) */
2246 void separate_compiler__SeparateCompiler__init(val* self, val* p0, val* p1, val* p2) {
2247 val* var_mainmodule /* var mainmodule: MModule */;
2248 val* var_mmbuilder /* var mmbuilder: ModelBuilder */;
2249 val* var_runtime_type_analysis /* var runtime_type_analysis: nullable RapidTypeAnalysis */;
2250 static val* varonce;
2251 val* var /* : String */;
2252 char* var1 /* : NativeString */;
2253 long var2 /* : Int */;
2254 val* var3 /* : FlatString */;
2255 val* var4 /* : CodeFile */;
2256 val* var_file /* var file: CodeFile */;
2257 val* var5 /* : CodeWriter */;
2258 var_mainmodule = p0;
2259 var_mmbuilder = p1;
2260 var_runtime_type_analysis = p2;
2261 {
2262 abstract_compiler__AbstractCompiler__init(self, var_mainmodule, var_mmbuilder); /* Direct call abstract_compiler#AbstractCompiler#init on <self:SeparateCompiler>*/
2263 }
2264 if (varonce) {
2265 var = varonce;
2266 } else {
2267 var1 = "nit.common";
2268 var2 = 10;
2269 var3 = string__NativeString__to_s_with_length(var1, var2);
2270 var = var3;
2271 varonce = var;
2272 }
2273 {
2274 var4 = abstract_compiler__AbstractCompiler__new_file(self, var);
2275 }
2276 var_file = var4;
2277 var5 = NEW_abstract_compiler__CodeWriter(&type_abstract_compiler__CodeWriter);
2278 {
2279 abstract_compiler__CodeWriter__init(var5, var_file); /* Direct call abstract_compiler#CodeWriter#init on <var5:CodeWriter>*/
2280 }
2281 {
2282 { /* Inline abstract_compiler#AbstractCompiler#header= (self,var5) on <self:SeparateCompiler> */
2283 self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val = var5; /* _header on <self:SeparateCompiler> */
2284 RET_LABEL6:(void)0;
2285 }
2286 }
2287 {
2288 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis= (self,var_runtime_type_analysis) on <self:SeparateCompiler> */
2289 self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val = var_runtime_type_analysis; /* _runtime_type_analysis on <self:SeparateCompiler> */
2290 RET_LABEL7:(void)0;
2291 }
2292 }
2293 {
2294 separate_compiler__SeparateCompiler__compile_box_kinds(self); /* Direct call separate_compiler#SeparateCompiler#compile_box_kinds on <self:SeparateCompiler>*/
2295 }
2296 RET_LABEL:;
2297 }
2298 /* method separate_compiler#SeparateCompiler#init for (self: Object, MModule, ModelBuilder, nullable RapidTypeAnalysis) */
2299 void VIRTUAL_separate_compiler__SeparateCompiler__init(val* self, val* p0, val* p1, val* p2) {
2300 separate_compiler__SeparateCompiler__init(self, p0, p1, p2); /* Direct call separate_compiler#SeparateCompiler#init on <self:Object(SeparateCompiler)>*/
2301 RET_LABEL:;
2302 }
2303 /* method separate_compiler#SeparateCompiler#compile_header_structs for (self: SeparateCompiler) */
2304 void separate_compiler__SeparateCompiler__compile_header_structs(val* self) {
2305 val* var /* : CodeWriter */;
2306 val* var2 /* : CodeWriter */;
2307 static val* varonce;
2308 val* var3 /* : String */;
2309 char* var4 /* : NativeString */;
2310 long var5 /* : Int */;
2311 val* var6 /* : FlatString */;
2312 val* var7 /* : CodeWriter */;
2313 val* var9 /* : CodeWriter */;
2314 static val* varonce10;
2315 val* var11 /* : String */;
2316 char* var12 /* : NativeString */;
2317 long var13 /* : Int */;
2318 val* var14 /* : FlatString */;
2319 val* var15 /* : CodeWriter */;
2320 val* var17 /* : CodeWriter */;
2321 static val* varonce18;
2322 val* var19 /* : String */;
2323 char* var20 /* : NativeString */;
2324 long var21 /* : Int */;
2325 val* var22 /* : FlatString */;
2326 val* var23 /* : CodeWriter */;
2327 val* var25 /* : CodeWriter */;
2328 static val* varonce26;
2329 val* var27 /* : String */;
2330 char* var28 /* : NativeString */;
2331 long var29 /* : Int */;
2332 val* var30 /* : FlatString */;
2333 val* var31 /* : CodeWriter */;
2334 val* var33 /* : CodeWriter */;
2335 static val* varonce34;
2336 val* var35 /* : String */;
2337 char* var36 /* : NativeString */;
2338 long var37 /* : Int */;
2339 val* var38 /* : FlatString */;
2340 val* var39 /* : CodeWriter */;
2341 val* var41 /* : CodeWriter */;
2342 static val* varonce42;
2343 val* var43 /* : String */;
2344 char* var44 /* : NativeString */;
2345 long var45 /* : Int */;
2346 val* var46 /* : FlatString */;
2347 {
2348 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2349 var2 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2350 if (unlikely(var2 == NULL)) {
2351 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2352 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2353 show_backtrace(1);
2354 }
2355 var = var2;
2356 RET_LABEL1:(void)0;
2357 }
2358 }
2359 if (varonce) {
2360 var3 = varonce;
2361 } else {
2362 var4 = "typedef void(*nitmethod_t)(void); /* general C type representing a Nit method. */";
2363 var5 = 81;
2364 var6 = string__NativeString__to_s_with_length(var4, var5);
2365 var3 = var6;
2366 varonce = var3;
2367 }
2368 {
2369 abstract_compiler__CodeWriter__add_decl(var, var3); /* Direct call abstract_compiler#CodeWriter#add_decl on <var:CodeWriter>*/
2370 }
2371 {
2372 separate_compiler__SeparateCompiler__compile_header_attribute_structs(self); /* Direct call separate_compiler#SeparateCompiler#compile_header_attribute_structs on <self:SeparateCompiler>*/
2373 }
2374 {
2375 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2376 var9 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2377 if (unlikely(var9 == NULL)) {
2378 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2379 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2380 show_backtrace(1);
2381 }
2382 var7 = var9;
2383 RET_LABEL8:(void)0;
2384 }
2385 }
2386 if (varonce10) {
2387 var11 = varonce10;
2388 } else {
2389 var12 = "struct class { int box_kind; nitmethod_t vft[]; }; /* general C type representing a Nit class. */";
2390 var13 = 97;
2391 var14 = string__NativeString__to_s_with_length(var12, var13);
2392 var11 = var14;
2393 varonce10 = var11;
2394 }
2395 {
2396 abstract_compiler__CodeWriter__add_decl(var7, var11); /* Direct call abstract_compiler#CodeWriter#add_decl on <var7:CodeWriter>*/
2397 }
2398 {
2399 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2400 var17 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2401 if (unlikely(var17 == NULL)) {
2402 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2403 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2404 show_backtrace(1);
2405 }
2406 var15 = var17;
2407 RET_LABEL16:(void)0;
2408 }
2409 }
2410 if (varonce18) {
2411 var19 = varonce18;
2412 } else {
2413 var20 = "struct type { int id; const char *name; int color; short int is_nullable; const struct types *resolution_table; int table_size; int type_table[]; }; /* general C type representing a Nit type. */";
2414 var21 = 194;
2415 var22 = string__NativeString__to_s_with_length(var20, var21);
2416 var19 = var22;
2417 varonce18 = var19;
2418 }
2419 {
2420 abstract_compiler__CodeWriter__add_decl(var15, var19); /* Direct call abstract_compiler#CodeWriter#add_decl on <var15:CodeWriter>*/
2421 }
2422 {
2423 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2424 var25 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2425 if (unlikely(var25 == NULL)) {
2426 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2427 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2428 show_backtrace(1);
2429 }
2430 var23 = var25;
2431 RET_LABEL24:(void)0;
2432 }
2433 }
2434 if (varonce26) {
2435 var27 = varonce26;
2436 } else {
2437 var28 = "struct instance { const struct type *type; const struct class *class; nitattribute_t attrs[]; }; /* general C type representing a Nit instance. */";
2438 var29 = 146;
2439 var30 = string__NativeString__to_s_with_length(var28, var29);
2440 var27 = var30;
2441 varonce26 = var27;
2442 }
2443 {
2444 abstract_compiler__CodeWriter__add_decl(var23, var27); /* Direct call abstract_compiler#CodeWriter#add_decl on <var23:CodeWriter>*/
2445 }
2446 {
2447 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2448 var33 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2449 if (unlikely(var33 == NULL)) {
2450 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2451 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2452 show_backtrace(1);
2453 }
2454 var31 = var33;
2455 RET_LABEL32:(void)0;
2456 }
2457 }
2458 if (varonce34) {
2459 var35 = varonce34;
2460 } else {
2461 var36 = "struct types { int dummy; const struct type *types[]; }; /* a list types (used for vts, fts and unresolved lists). */";
2462 var37 = 117;
2463 var38 = string__NativeString__to_s_with_length(var36, var37);
2464 var35 = var38;
2465 varonce34 = var35;
2466 }
2467 {
2468 abstract_compiler__CodeWriter__add_decl(var31, var35); /* Direct call abstract_compiler#CodeWriter#add_decl on <var31:CodeWriter>*/
2469 }
2470 {
2471 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2472 var41 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2473 if (unlikely(var41 == 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 var39 = var41;
2479 RET_LABEL40:(void)0;
2480 }
2481 }
2482 if (varonce42) {
2483 var43 = varonce42;
2484 } else {
2485 var44 = "typedef struct instance val; /* general C type representing a Nit instance. */";
2486 var45 = 78;
2487 var46 = string__NativeString__to_s_with_length(var44, var45);
2488 var43 = var46;
2489 varonce42 = var43;
2490 }
2491 {
2492 abstract_compiler__CodeWriter__add_decl(var39, var43); /* Direct call abstract_compiler#CodeWriter#add_decl on <var39:CodeWriter>*/
2493 }
2494 RET_LABEL:;
2495 }
2496 /* method separate_compiler#SeparateCompiler#compile_header_structs for (self: Object) */
2497 void VIRTUAL_separate_compiler__SeparateCompiler__compile_header_structs(val* self) {
2498 separate_compiler__SeparateCompiler__compile_header_structs(self); /* Direct call separate_compiler#SeparateCompiler#compile_header_structs on <self:Object(SeparateCompiler)>*/
2499 RET_LABEL:;
2500 }
2501 /* method separate_compiler#SeparateCompiler#compile_header_attribute_structs for (self: SeparateCompiler) */
2502 void separate_compiler__SeparateCompiler__compile_header_attribute_structs(val* self) {
2503 val* var /* : ModelBuilder */;
2504 val* var2 /* : ModelBuilder */;
2505 val* var3 /* : ToolContext */;
2506 val* var5 /* : ToolContext */;
2507 val* var6 /* : OptionBool */;
2508 val* var8 /* : OptionBool */;
2509 val* var9 /* : nullable Object */;
2510 val* var11 /* : nullable Object */;
2511 short int var12 /* : Bool */;
2512 val* var13 /* : CodeWriter */;
2513 val* var15 /* : CodeWriter */;
2514 static val* varonce;
2515 val* var16 /* : String */;
2516 char* var17 /* : NativeString */;
2517 long var18 /* : Int */;
2518 val* var19 /* : FlatString */;
2519 val* var20 /* : CodeWriter */;
2520 val* var22 /* : CodeWriter */;
2521 static val* varonce23;
2522 val* var24 /* : String */;
2523 char* var25 /* : NativeString */;
2524 long var26 /* : Int */;
2525 val* var27 /* : FlatString */;
2526 val* var28 /* : CodeWriter */;
2527 val* var30 /* : CodeWriter */;
2528 static val* varonce31;
2529 val* var32 /* : String */;
2530 char* var33 /* : NativeString */;
2531 long var34 /* : Int */;
2532 val* var35 /* : FlatString */;
2533 val* var36 /* : HashMap[MClass, Int] */;
2534 val* var38 /* : HashMap[MClass, Int] */;
2535 val* var_ /* var : HashMap[MClass, Int] */;
2536 val* var39 /* : HashMapIterator[Object, nullable Object] */;
2537 val* var_40 /* var : HashMapIterator[MClass, Int] */;
2538 short int var41 /* : Bool */;
2539 val* var42 /* : Object */;
2540 val* var_c /* var c: MClass */;
2541 val* var43 /* : nullable Object */;
2542 long var44 /* : Int */;
2543 long var_v /* var v: Int */;
2544 val* var45 /* : MClassType */;
2545 val* var47 /* : MClassType */;
2546 val* var_t /* var t: MClassType */;
2547 val* var48 /* : MClass */;
2548 val* var50 /* : MClass */;
2549 val* var51 /* : String */;
2550 val* var53 /* : String */;
2551 static val* varonce54;
2552 val* var55 /* : String */;
2553 char* var56 /* : NativeString */;
2554 long var57 /* : Int */;
2555 val* var58 /* : FlatString */;
2556 short int var59 /* : Bool */;
2557 short int var60 /* : Bool */;
2558 val* var61 /* : CodeWriter */;
2559 val* var63 /* : CodeWriter */;
2560 val* var64 /* : String */;
2561 static val* varonce65;
2562 val* var66 /* : String */;
2563 char* var67 /* : NativeString */;
2564 long var68 /* : Int */;
2565 val* var69 /* : FlatString */;
2566 val* var70 /* : String */;
2567 static val* varonce71;
2568 val* var72 /* : String */;
2569 char* var73 /* : NativeString */;
2570 long var74 /* : Int */;
2571 val* var75 /* : FlatString */;
2572 val* var76 /* : Array[Object] */;
2573 long var77 /* : Int */;
2574 val* var78 /* : NativeArray[Object] */;
2575 val* var79 /* : String */;
2576 val* var82 /* : CodeWriter */;
2577 val* var84 /* : CodeWriter */;
2578 static val* varonce85;
2579 val* var86 /* : String */;
2580 char* var87 /* : NativeString */;
2581 long var88 /* : Int */;
2582 val* var89 /* : FlatString */;
2583 {
2584 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (self) on <self:SeparateCompiler> */
2585 var2 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <self:SeparateCompiler> */
2586 if (unlikely(var2 == NULL)) {
2587 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
2588 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
2589 show_backtrace(1);
2590 }
2591 var = var2;
2592 RET_LABEL1:(void)0;
2593 }
2594 }
2595 {
2596 { /* Inline modelbuilder#ModelBuilder#toolcontext (var) on <var:ModelBuilder> */
2597 var5 = var->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var:ModelBuilder> */
2598 if (unlikely(var5 == NULL)) {
2599 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
2600 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
2601 show_backtrace(1);
2602 }
2603 var3 = var5;
2604 RET_LABEL4:(void)0;
2605 }
2606 }
2607 {
2608 { /* Inline separate_compiler#ToolContext#opt_no_union_attribute (var3) on <var3:ToolContext> */
2609 var8 = var3->attrs[COLOR_separate_compiler__ToolContext___opt_no_union_attribute].val; /* _opt_no_union_attribute on <var3:ToolContext> */
2610 if (unlikely(var8 == NULL)) {
2611 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_union_attribute");
2612 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 28);
2613 show_backtrace(1);
2614 }
2615 var6 = var8;
2616 RET_LABEL7:(void)0;
2617 }
2618 }
2619 {
2620 { /* Inline opts#Option#value (var6) on <var6:OptionBool> */
2621 var11 = var6->attrs[COLOR_opts__Option___value].val; /* _value on <var6:OptionBool> */
2622 var9 = var11;
2623 RET_LABEL10:(void)0;
2624 }
2625 }
2626 var12 = ((struct instance_kernel__Bool*)var9)->value; /* autounbox from nullable Object to Bool */;
2627 if (var12){
2628 {
2629 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2630 var15 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2631 if (unlikely(var15 == NULL)) {
2632 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2633 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2634 show_backtrace(1);
2635 }
2636 var13 = var15;
2637 RET_LABEL14:(void)0;
2638 }
2639 }
2640 if (varonce) {
2641 var16 = varonce;
2642 } else {
2643 var17 = "typedef void* nitattribute_t; /* general C type representing a Nit attribute. */";
2644 var18 = 80;
2645 var19 = string__NativeString__to_s_with_length(var17, var18);
2646 var16 = var19;
2647 varonce = var16;
2648 }
2649 {
2650 abstract_compiler__CodeWriter__add_decl(var13, var16); /* Direct call abstract_compiler#CodeWriter#add_decl on <var13:CodeWriter>*/
2651 }
2652 } else {
2653 {
2654 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2655 var22 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2656 if (unlikely(var22 == NULL)) {
2657 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2658 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2659 show_backtrace(1);
2660 }
2661 var20 = var22;
2662 RET_LABEL21:(void)0;
2663 }
2664 }
2665 if (varonce23) {
2666 var24 = varonce23;
2667 } else {
2668 var25 = "typedef union {";
2669 var26 = 15;
2670 var27 = string__NativeString__to_s_with_length(var25, var26);
2671 var24 = var27;
2672 varonce23 = var24;
2673 }
2674 {
2675 abstract_compiler__CodeWriter__add_decl(var20, var24); /* Direct call abstract_compiler#CodeWriter#add_decl on <var20:CodeWriter>*/
2676 }
2677 {
2678 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2679 var30 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2680 if (unlikely(var30 == NULL)) {
2681 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2682 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2683 show_backtrace(1);
2684 }
2685 var28 = var30;
2686 RET_LABEL29:(void)0;
2687 }
2688 }
2689 if (varonce31) {
2690 var32 = varonce31;
2691 } else {
2692 var33 = "void* val;";
2693 var34 = 10;
2694 var35 = string__NativeString__to_s_with_length(var33, var34);
2695 var32 = var35;
2696 varonce31 = var32;
2697 }
2698 {
2699 abstract_compiler__CodeWriter__add_decl(var28, var32); /* Direct call abstract_compiler#CodeWriter#add_decl on <var28:CodeWriter>*/
2700 }
2701 {
2702 { /* Inline separate_compiler#SeparateCompiler#box_kinds (self) on <self:SeparateCompiler> */
2703 var38 = self->attrs[COLOR_separate_compiler__SeparateCompiler___box_kinds].val; /* _box_kinds on <self:SeparateCompiler> */
2704 if (unlikely(var38 == NULL)) {
2705 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _box_kinds");
2706 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 216);
2707 show_backtrace(1);
2708 }
2709 var36 = var38;
2710 RET_LABEL37:(void)0;
2711 }
2712 }
2713 var_ = var36;
2714 {
2715 var39 = hash_collection__HashMap__iterator(var_);
2716 }
2717 var_40 = var39;
2718 for(;;) {
2719 {
2720 var41 = hash_collection__HashMapIterator__is_ok(var_40);
2721 }
2722 if (var41){
2723 {
2724 var42 = hash_collection__HashMapIterator__key(var_40);
2725 }
2726 var_c = var42;
2727 {
2728 var43 = hash_collection__HashMapIterator__item(var_40);
2729 }
2730 var44 = ((struct instance_kernel__Int*)var43)->value; /* autounbox from nullable Object to Int */;
2731 var_v = var44;
2732 {
2733 { /* Inline model#MClass#mclass_type (var_c) on <var_c:MClass> */
2734 var47 = var_c->attrs[COLOR_model__MClass___mclass_type].val; /* _mclass_type on <var_c:MClass> */
2735 if (unlikely(var47 == NULL)) {
2736 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
2737 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 435);
2738 show_backtrace(1);
2739 }
2740 var45 = var47;
2741 RET_LABEL46:(void)0;
2742 }
2743 }
2744 var_t = var45;
2745 {
2746 { /* Inline model#MClassType#mclass (var_t) on <var_t:MClassType> */
2747 var50 = var_t->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_t:MClassType> */
2748 if (unlikely(var50 == NULL)) {
2749 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
2750 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
2751 show_backtrace(1);
2752 }
2753 var48 = var50;
2754 RET_LABEL49:(void)0;
2755 }
2756 }
2757 {
2758 { /* Inline model#MClass#name (var48) on <var48:MClass> */
2759 var53 = var48->attrs[COLOR_model__MClass___name].val; /* _name on <var48:MClass> */
2760 if (unlikely(var53 == NULL)) {
2761 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
2762 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
2763 show_backtrace(1);
2764 }
2765 var51 = var53;
2766 RET_LABEL52:(void)0;
2767 }
2768 }
2769 if (varonce54) {
2770 var55 = varonce54;
2771 } else {
2772 var56 = "Pointer";
2773 var57 = 7;
2774 var58 = string__NativeString__to_s_with_length(var56, var57);
2775 var55 = var58;
2776 varonce54 = var55;
2777 }
2778 {
2779 var60 = string__FlatString___61d_61d(var51, var55);
2780 var59 = var60;
2781 }
2782 if (var59){
2783 goto BREAK_label;
2784 } else {
2785 }
2786 {
2787 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2788 var63 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2789 if (unlikely(var63 == NULL)) {
2790 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2791 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2792 show_backtrace(1);
2793 }
2794 var61 = var63;
2795 RET_LABEL62:(void)0;
2796 }
2797 }
2798 {
2799 var64 = abstract_compiler__MClassType__ctype_extern(var_t);
2800 }
2801 if (varonce65) {
2802 var66 = varonce65;
2803 } else {
2804 var67 = " ";
2805 var68 = 1;
2806 var69 = string__NativeString__to_s_with_length(var67, var68);
2807 var66 = var69;
2808 varonce65 = var66;
2809 }
2810 {
2811 var70 = abstract_compiler__MClassType__ctypename(var_t);
2812 }
2813 if (varonce71) {
2814 var72 = varonce71;
2815 } else {
2816 var73 = ";";
2817 var74 = 1;
2818 var75 = string__NativeString__to_s_with_length(var73, var74);
2819 var72 = var75;
2820 varonce71 = var72;
2821 }
2822 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
2823 { /* var76 = array_instance Array[Object] */
2824 var77 = 4;
2825 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
2826 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var64;
2827 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var66;
2828 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var70;
2829 ((struct instance_array__NativeArray*)var78)->values[3] = (val*) var72;
2830 {
2831 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
2832 }
2833 }
2834 {
2835 var79 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
2836 }
2837 {
2838 abstract_compiler__CodeWriter__add_decl(var61, var79); /* Direct call abstract_compiler#CodeWriter#add_decl on <var61:CodeWriter>*/
2839 }
2840 BREAK_label: (void)0;
2841 {
2842 hash_collection__HashMapIterator__next(var_40); /* Direct call hash_collection#HashMapIterator#next on <var_40:HashMapIterator[MClass, Int]>*/
2843 }
2844 } else {
2845 goto BREAK_label80;
2846 }
2847 }
2848 BREAK_label80: (void)0;
2849 {
2850 { /* Inline abstract_collection#MapIterator#finish (var_40) on <var_40:HashMapIterator[MClass, Int]> */
2851 RET_LABEL81:(void)0;
2852 }
2853 }
2854 {
2855 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateCompiler> */
2856 var84 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateCompiler> */
2857 if (unlikely(var84 == NULL)) {
2858 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2859 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 506);
2860 show_backtrace(1);
2861 }
2862 var82 = var84;
2863 RET_LABEL83:(void)0;
2864 }
2865 }
2866 if (varonce85) {
2867 var86 = varonce85;
2868 } else {
2869 var87 = "} nitattribute_t; /* general C type representing a Nit attribute. */";
2870 var88 = 68;
2871 var89 = string__NativeString__to_s_with_length(var87, var88);
2872 var86 = var89;
2873 varonce85 = var86;
2874 }
2875 {
2876 abstract_compiler__CodeWriter__add_decl(var82, var86); /* Direct call abstract_compiler#CodeWriter#add_decl on <var82:CodeWriter>*/
2877 }
2878 }
2879 RET_LABEL:;
2880 }
2881 /* method separate_compiler#SeparateCompiler#compile_header_attribute_structs for (self: Object) */
2882 void VIRTUAL_separate_compiler__SeparateCompiler__compile_header_attribute_structs(val* self) {
2883 separate_compiler__SeparateCompiler__compile_header_attribute_structs(self); /* Direct call separate_compiler#SeparateCompiler#compile_header_attribute_structs on <self:Object(SeparateCompiler)>*/
2884 RET_LABEL:;
2885 }
2886 /* method separate_compiler#SeparateCompiler#compile_box_kinds for (self: SeparateCompiler) */
2887 void separate_compiler__SeparateCompiler__compile_box_kinds(val* self) {
2888 val* var /* : Array[String] */;
2889 long var1 /* : Int */;
2890 val* var_ /* var : Array[String] */;
2891 static val* varonce;
2892 val* var2 /* : String */;
2893 char* var3 /* : NativeString */;
2894 long var4 /* : Int */;
2895 val* var5 /* : FlatString */;
2896 static val* varonce6;
2897 val* var7 /* : String */;
2898 char* var8 /* : NativeString */;
2899 long var9 /* : Int */;
2900 val* var10 /* : FlatString */;
2901 static val* varonce11;
2902 val* var12 /* : String */;
2903 char* var13 /* : NativeString */;
2904 long var14 /* : Int */;
2905 val* var15 /* : FlatString */;
2906 static val* varonce16;
2907 val* var17 /* : String */;
2908 char* var18 /* : NativeString */;
2909 long var19 /* : Int */;
2910 val* var20 /* : FlatString */;
2911 static val* varonce21;
2912 val* var22 /* : String */;
2913 char* var23 /* : NativeString */;
2914 long var24 /* : Int */;
2915 val* var25 /* : FlatString */;
2916 static val* varonce26;
2917 val* var27 /* : String */;
2918 char* var28 /* : NativeString */;
2919 long var29 /* : Int */;
2920 val* var30 /* : FlatString */;
2921 val* var_31 /* var : Array[String] */;
2922 val* var32 /* : ArrayIterator[nullable Object] */;
2923 val* var_33 /* var : ArrayIterator[String] */;
2924 short int var34 /* : Bool */;
2925 val* var35 /* : nullable Object */;
2926 val* var_classname /* var classname: String */;
2927 val* var36 /* : MModule */;
2928 val* var38 /* : MModule */;
2929 val* var39 /* : Model */;
2930 val* var41 /* : Model */;
2931 val* var42 /* : nullable Array[MClass] */;
2932 val* var_classes /* var classes: nullable Array[MClass] */;
2933 val* var43 /* : null */;
2934 short int var44 /* : Bool */;
2935 short int var45 /* : Bool */;
2936 long var46 /* : Int */;
2937 long var48 /* : Int */;
2938 long var49 /* : Int */;
2939 short int var50 /* : Bool */;
2940 short int var51 /* : Bool */;
2941 short int var53 /* : Bool */;
2942 static val* varonce54;
2943 val* var55 /* : String */;
2944 char* var56 /* : NativeString */;
2945 long var57 /* : Int */;
2946 val* var58 /* : FlatString */;
2947 val* var59 /* : String */;
2948 val* var60 /* : HashMap[MClass, Int] */;
2949 val* var62 /* : HashMap[MClass, Int] */;
2950 val* var63 /* : nullable Object */;
2951 val* var64 /* : HashMap[MClass, Int] */;
2952 val* var66 /* : HashMap[MClass, Int] */;
2953 long var67 /* : Int */;
2954 long var68 /* : Int */;
2955 long var69 /* : Int */;
2956 short int var71 /* : Bool */;
2957 int cltype;
2958 int idtype;
2959 const char* var_class_name;
2960 long var72 /* : Int */;
2961 val* var73 /* : nullable Object */;
2962 var = NEW_array__Array(&type_array__Arraystring__String);
2963 var1 = 6;
2964 {
2965 array__Array__with_capacity(var, var1); /* Direct call array#Array#with_capacity on <var:Array[String]>*/
2966 }
2967 var_ = var;
2968 if (varonce) {
2969 var2 = varonce;
2970 } else {
2971 var3 = "Int";
2972 var4 = 3;
2973 var5 = string__NativeString__to_s_with_length(var3, var4);
2974 var2 = var5;
2975 varonce = var2;
2976 }
2977 {
2978 array__AbstractArray__push(var_, var2); /* Direct call array#AbstractArray#push on <var_:Array[String]>*/
2979 }
2980 if (varonce6) {
2981 var7 = varonce6;
2982 } else {
2983 var8 = "Bool";
2984 var9 = 4;
2985 var10 = string__NativeString__to_s_with_length(var8, var9);
2986 var7 = var10;
2987 varonce6 = var7;
2988 }
2989 {
2990 array__AbstractArray__push(var_, var7); /* Direct call array#AbstractArray#push on <var_:Array[String]>*/
2991 }
2992 if (varonce11) {
2993 var12 = varonce11;
2994 } else {
2995 var13 = "Char";
2996 var14 = 4;
2997 var15 = string__NativeString__to_s_with_length(var13, var14);
2998 var12 = var15;
2999 varonce11 = var12;
3000 }
3001 {
3002 array__AbstractArray__push(var_, var12); /* Direct call array#AbstractArray#push on <var_:Array[String]>*/
3003 }
3004 if (varonce16) {
3005 var17 = varonce16;
3006 } else {
3007 var18 = "Float";
3008 var19 = 5;
3009 var20 = string__NativeString__to_s_with_length(var18, var19);
3010 var17 = var20;
3011 varonce16 = var17;
3012 }
3013 {
3014 array__AbstractArray__push(var_, var17); /* Direct call array#AbstractArray#push on <var_:Array[String]>*/
3015 }
3016 if (varonce21) {
3017 var22 = varonce21;
3018 } else {
3019 var23 = "NativeString";
3020 var24 = 12;
3021 var25 = string__NativeString__to_s_with_length(var23, var24);
3022 var22 = var25;
3023 varonce21 = var22;
3024 }
3025 {
3026 array__AbstractArray__push(var_, var22); /* Direct call array#AbstractArray#push on <var_:Array[String]>*/
3027 }
3028 if (varonce26) {
3029 var27 = varonce26;
3030 } else {
3031 var28 = "Pointer";
3032 var29 = 7;
3033 var30 = string__NativeString__to_s_with_length(var28, var29);
3034 var27 = var30;
3035 varonce26 = var27;
3036 }
3037 {
3038 array__AbstractArray__push(var_, var27); /* Direct call array#AbstractArray#push on <var_:Array[String]>*/
3039 }
3040 var_31 = var_;
3041 {
3042 var32 = array__AbstractArrayRead__iterator(var_31);
3043 }
3044 var_33 = var32;
3045 for(;;) {
3046 {
3047 var34 = array__ArrayIterator__is_ok(var_33);
3048 }
3049 if (var34){
3050 {
3051 var35 = array__ArrayIterator__item(var_33);
3052 }
3053 var_classname = var35;
3054 {
3055 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
3056 var38 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
3057 if (unlikely(var38 == NULL)) {
3058 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
3059 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
3060 show_backtrace(1);
3061 }
3062 var36 = var38;
3063 RET_LABEL37:(void)0;
3064 }
3065 }
3066 {
3067 { /* Inline mmodule#MModule#model (var36) on <var36:MModule> */
3068 var41 = var36->attrs[COLOR_mmodule__MModule___model].val; /* _model on <var36:MModule> */
3069 if (unlikely(var41 == NULL)) {
3070 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
3071 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 72);
3072 show_backtrace(1);
3073 }
3074 var39 = var41;
3075 RET_LABEL40:(void)0;
3076 }
3077 }
3078 {
3079 var42 = model__Model__get_mclasses_by_name(var39, var_classname);
3080 }
3081 var_classes = var42;
3082 var43 = NULL;
3083 if (var_classes == NULL) {
3084 var44 = 1; /* is null */
3085 } else {
3086 var44 = 0; /* arg is null but recv is not */
3087 }
3088 if (0) {
3089 var45 = array__Array___61d_61d(var_classes, var43);
3090 var44 = var45;
3091 }
3092 if (var44){
3093 goto BREAK_label;
3094 } else {
3095 }
3096 {
3097 { /* Inline array#AbstractArrayRead#length (var_classes) on <var_classes:nullable Array[MClass](Array[MClass])> */
3098 var48 = var_classes->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_classes:nullable Array[MClass](Array[MClass])> */
3099 var46 = var48;
3100 RET_LABEL47:(void)0;
3101 }
3102 }
3103 var49 = 1;
3104 {
3105 { /* Inline kernel#Int#== (var46,var49) on <var46:Int> */
3106 var53 = var46 == var49;
3107 var51 = var53;
3108 goto RET_LABEL52;
3109 RET_LABEL52:(void)0;
3110 }
3111 var50 = var51;
3112 }
3113 if (unlikely(!var50)) {
3114 if (varonce54) {
3115 var55 = varonce54;
3116 } else {
3117 var56 = ", ";
3118 var57 = 2;
3119 var58 = string__NativeString__to_s_with_length(var56, var57);
3120 var55 = var58;
3121 varonce54 = var55;
3122 }
3123 {
3124 var59 = string__Collection__join(var_classes, var55);
3125 }
3126 {
3127 file__Object__print(self, var59); /* Direct call file#Object#print on <self:SeparateCompiler>*/
3128 }
3129 PRINT_ERROR("Runtime error: %s", "Assert failed");
3130 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 211);
3131 show_backtrace(1);
3132 }
3133 {
3134 { /* Inline separate_compiler#SeparateCompiler#box_kinds (self) on <self:SeparateCompiler> */
3135 var62 = self->attrs[COLOR_separate_compiler__SeparateCompiler___box_kinds].val; /* _box_kinds on <self:SeparateCompiler> */
3136 if (unlikely(var62 == NULL)) {
3137 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _box_kinds");
3138 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 216);
3139 show_backtrace(1);
3140 }
3141 var60 = var62;
3142 RET_LABEL61:(void)0;
3143 }
3144 }
3145 {
3146 var63 = abstract_collection__SequenceRead__first(var_classes);
3147 }
3148 {
3149 { /* Inline separate_compiler#SeparateCompiler#box_kinds (self) on <self:SeparateCompiler> */
3150 var66 = self->attrs[COLOR_separate_compiler__SeparateCompiler___box_kinds].val; /* _box_kinds on <self:SeparateCompiler> */
3151 if (unlikely(var66 == NULL)) {
3152 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _box_kinds");
3153 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 216);
3154 show_backtrace(1);
3155 }
3156 var64 = var66;
3157 RET_LABEL65:(void)0;
3158 }
3159 }
3160 {
3161 var67 = hash_collection__HashMap__length(var64);
3162 }
3163 var68 = 1;
3164 {
3165 { /* Inline kernel#Int#+ (var67,var68) on <var67:Int> */
3166 /* Covariant cast for argument 0 (i) <var68:Int> isa OTHER */
3167 /* <var68:Int> isa OTHER */
3168 var71 = 1; /* easy <var68:Int> isa OTHER*/
3169 if (unlikely(!var71)) {
3170 var_class_name = type_kernel__Int.name;
3171 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
3172 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
3173 show_backtrace(1);
3174 }
3175 var72 = var67 + var68;
3176 var69 = var72;
3177 goto RET_LABEL70;
3178 RET_LABEL70:(void)0;
3179 }
3180 }
3181 {
3182 var73 = BOX_kernel__Int(var69); /* autobox from Int to nullable Object */
3183 hash_collection__HashMap___91d_93d_61d(var60, var63, var73); /* Direct call hash_collection#HashMap#[]= on <var60:HashMap[MClass, Int]>*/
3184 }
3185 BREAK_label: (void)0;
3186 {
3187 array__ArrayIterator__next(var_33); /* Direct call array#ArrayIterator#next on <var_33:ArrayIterator[String]>*/
3188 }
3189 } else {
3190 goto BREAK_label74;
3191 }
3192 }
3193 BREAK_label74: (void)0;
3194 {
3195 { /* Inline abstract_collection#Iterator#finish (var_33) on <var_33:ArrayIterator[String]> */
3196 RET_LABEL75:(void)0;
3197 }
3198 }
3199 RET_LABEL:;
3200 }
3201 /* method separate_compiler#SeparateCompiler#compile_box_kinds for (self: Object) */
3202 void VIRTUAL_separate_compiler__SeparateCompiler__compile_box_kinds(val* self) {
3203 separate_compiler__SeparateCompiler__compile_box_kinds(self); /* Direct call separate_compiler#SeparateCompiler#compile_box_kinds on <self:Object(SeparateCompiler)>*/
3204 RET_LABEL:;
3205 }
3206 /* method separate_compiler#SeparateCompiler#box_kinds for (self: SeparateCompiler): HashMap[MClass, Int] */
3207 val* separate_compiler__SeparateCompiler__box_kinds(val* self) {
3208 val* var /* : HashMap[MClass, Int] */;
3209 val* var1 /* : HashMap[MClass, Int] */;
3210 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___box_kinds].val; /* _box_kinds on <self:SeparateCompiler> */
3211 if (unlikely(var1 == NULL)) {
3212 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _box_kinds");
3213 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 216);
3214 show_backtrace(1);
3215 }
3216 var = var1;
3217 RET_LABEL:;
3218 return var;
3219 }
3220 /* method separate_compiler#SeparateCompiler#box_kinds for (self: Object): HashMap[MClass, Int] */
3221 val* VIRTUAL_separate_compiler__SeparateCompiler__box_kinds(val* self) {
3222 val* var /* : HashMap[MClass, Int] */;
3223 val* var1 /* : HashMap[MClass, Int] */;
3224 val* var3 /* : HashMap[MClass, Int] */;
3225 { /* Inline separate_compiler#SeparateCompiler#box_kinds (self) on <self:Object(SeparateCompiler)> */
3226 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___box_kinds].val; /* _box_kinds on <self:Object(SeparateCompiler)> */
3227 if (unlikely(var3 == NULL)) {
3228 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _box_kinds");
3229 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 216);
3230 show_backtrace(1);
3231 }
3232 var1 = var3;
3233 RET_LABEL2:(void)0;
3234 }
3235 var = var1;
3236 RET_LABEL:;
3237 return var;
3238 }
3239 /* method separate_compiler#SeparateCompiler#box_kind_of for (self: SeparateCompiler, MClass): Int */
3240 long separate_compiler__SeparateCompiler__box_kind_of(val* self, val* p0) {
3241 long var /* : Int */;
3242 val* var_mclass /* var mclass: MClass */;
3243 val* var1 /* : MClassType */;
3244 val* var3 /* : MClassType */;
3245 val* var4 /* : String */;
3246 static val* varonce;
3247 val* var5 /* : String */;
3248 char* var6 /* : NativeString */;
3249 long var7 /* : Int */;
3250 val* var8 /* : FlatString */;
3251 short int var9 /* : Bool */;
3252 short int var10 /* : Bool */;
3253 long var11 /* : Int */;
3254 short int var12 /* : Bool */;
3255 val* var13 /* : MClassKind */;
3256 val* var15 /* : MClassKind */;
3257 val* var16 /* : MClassKind */;
3258 short int var17 /* : Bool */;
3259 short int var18 /* : Bool */;
3260 val* var_other /* var other: nullable Object */;
3261 short int var20 /* : Bool */;
3262 short int var22 /* : Bool */;
3263 short int var_ /* var : Bool */;
3264 val* var23 /* : String */;
3265 val* var25 /* : String */;
3266 static val* varonce26;
3267 val* var27 /* : String */;
3268 char* var28 /* : NativeString */;
3269 long var29 /* : Int */;
3270 val* var30 /* : FlatString */;
3271 short int var31 /* : Bool */;
3272 short int var32 /* : Bool */;
3273 val* var_other34 /* var other: nullable Object */;
3274 short int var35 /* : Bool */;
3275 short int var36 /* : Bool */;
3276 short int var37 /* : Bool */;
3277 val* var38 /* : HashMap[MClass, Int] */;
3278 val* var40 /* : HashMap[MClass, Int] */;
3279 val* var41 /* : MModule */;
3280 val* var43 /* : MModule */;
3281 static val* varonce44;
3282 val* var45 /* : String */;
3283 char* var46 /* : NativeString */;
3284 long var47 /* : Int */;
3285 val* var48 /* : FlatString */;
3286 val* var49 /* : MClass */;
3287 val* var50 /* : nullable Object */;
3288 long var51 /* : Int */;
3289 val* var52 /* : HashMap[MClass, Int] */;
3290 val* var54 /* : HashMap[MClass, Int] */;
3291 val* var55 /* : nullable Object */;
3292 long var56 /* : Int */;
3293 var_mclass = p0;
3294 {
3295 { /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:MClass> */
3296 var3 = var_mclass->attrs[COLOR_model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:MClass> */
3297 if (unlikely(var3 == NULL)) {
3298 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
3299 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 435);
3300 show_backtrace(1);
3301 }
3302 var1 = var3;
3303 RET_LABEL2:(void)0;
3304 }
3305 }
3306 {
3307 var4 = abstract_compiler__MClassType__ctype_extern(var1);
3308 }
3309 if (varonce) {
3310 var5 = varonce;
3311 } else {
3312 var6 = "val*";
3313 var7 = 4;
3314 var8 = string__NativeString__to_s_with_length(var6, var7);
3315 var5 = var8;
3316 varonce = var5;
3317 }
3318 {
3319 var10 = string__FlatString___61d_61d(var4, var5);
3320 var9 = var10;
3321 }
3322 if (var9){
3323 var11 = 0;
3324 var = var11;
3325 goto RET_LABEL;
3326 } else {
3327 {
3328 { /* Inline model#MClass#kind (var_mclass) on <var_mclass:MClass> */
3329 var15 = var_mclass->attrs[COLOR_model__MClass___kind].val; /* _kind on <var_mclass:MClass> */
3330 if (unlikely(var15 == NULL)) {
3331 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
3332 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 371);
3333 show_backtrace(1);
3334 }
3335 var13 = var15;
3336 RET_LABEL14:(void)0;
3337 }
3338 }
3339 {
3340 var16 = model__Object__extern_kind(self);
3341 }
3342 {
3343 { /* Inline kernel#Object#== (var13,var16) on <var13:MClassKind> */
3344 var_other = var16;
3345 {
3346 { /* Inline kernel#Object#is_same_instance (var13,var_other) on <var13:MClassKind> */
3347 var22 = var13 == var_other;
3348 var20 = var22;
3349 goto RET_LABEL21;
3350 RET_LABEL21:(void)0;
3351 }
3352 }
3353 var18 = var20;
3354 goto RET_LABEL19;
3355 RET_LABEL19:(void)0;
3356 }
3357 var17 = var18;
3358 }
3359 var_ = var17;
3360 if (var17){
3361 {
3362 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
3363 var25 = var_mclass->attrs[COLOR_model__MClass___name].val; /* _name on <var_mclass:MClass> */
3364 if (unlikely(var25 == NULL)) {
3365 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
3366 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 352);
3367 show_backtrace(1);
3368 }
3369 var23 = var25;
3370 RET_LABEL24:(void)0;
3371 }
3372 }
3373 if (varonce26) {
3374 var27 = varonce26;
3375 } else {
3376 var28 = "NativeString";
3377 var29 = 12;
3378 var30 = string__NativeString__to_s_with_length(var28, var29);
3379 var27 = var30;
3380 varonce26 = var27;
3381 }
3382 {
3383 { /* Inline kernel#Object#!= (var23,var27) on <var23:String> */
3384 var_other34 = var27;
3385 {
3386 var36 = ((short int (*)(val*, val*))(var23->class->vft[COLOR_kernel__Object___61d_61d]))(var23, var_other34) /* == on <var23:String>*/;
3387 var35 = var36;
3388 }
3389 var37 = !var35;
3390 var32 = var37;
3391 goto RET_LABEL33;
3392 RET_LABEL33:(void)0;
3393 }
3394 var31 = var32;
3395 }
3396 var12 = var31;
3397 } else {
3398 var12 = var_;
3399 }
3400 if (var12){
3401 {
3402 { /* Inline separate_compiler#SeparateCompiler#box_kinds (self) on <self:SeparateCompiler> */
3403 var40 = self->attrs[COLOR_separate_compiler__SeparateCompiler___box_kinds].val; /* _box_kinds on <self:SeparateCompiler> */
3404 if (unlikely(var40 == NULL)) {
3405 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _box_kinds");
3406 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 216);
3407 show_backtrace(1);
3408 }
3409 var38 = var40;
3410 RET_LABEL39:(void)0;
3411 }
3412 }
3413 {
3414 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
3415 var43 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
3416 if (unlikely(var43 == NULL)) {
3417 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
3418 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
3419 show_backtrace(1);
3420 }
3421 var41 = var43;
3422 RET_LABEL42:(void)0;
3423 }
3424 }
3425 if (varonce44) {
3426 var45 = varonce44;
3427 } else {
3428 var46 = "Pointer";
3429 var47 = 7;
3430 var48 = string__NativeString__to_s_with_length(var46, var47);
3431 var45 = var48;
3432 varonce44 = var45;
3433 }
3434 {
3435 var49 = model__MModule__get_primitive_class(var41, var45);
3436 }
3437 {
3438 var50 = hash_collection__HashMap___91d_93d(var38, var49);
3439 }
3440 var51 = ((struct instance_kernel__Int*)var50)->value; /* autounbox from nullable Object to Int */;
3441 var = var51;
3442 goto RET_LABEL;
3443 } else {
3444 {
3445 { /* Inline separate_compiler#SeparateCompiler#box_kinds (self) on <self:SeparateCompiler> */
3446 var54 = self->attrs[COLOR_separate_compiler__SeparateCompiler___box_kinds].val; /* _box_kinds on <self:SeparateCompiler> */
3447 if (unlikely(var54 == NULL)) {
3448 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _box_kinds");
3449 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 216);
3450 show_backtrace(1);
3451 }
3452 var52 = var54;
3453 RET_LABEL53:(void)0;
3454 }
3455 }
3456 {
3457 var55 = hash_collection__HashMap___91d_93d(var52, var_mclass);
3458 }
3459 var56 = ((struct instance_kernel__Int*)var55)->value; /* autounbox from nullable Object to Int */;
3460 var = var56;
3461 goto RET_LABEL;
3462 }
3463 }
3464 RET_LABEL:;
3465 return var;
3466 }
3467 /* method separate_compiler#SeparateCompiler#box_kind_of for (self: Object, MClass): Int */
3468 long VIRTUAL_separate_compiler__SeparateCompiler__box_kind_of(val* self, val* p0) {
3469 long var /* : Int */;
3470 long var1 /* : Int */;
3471 var1 = separate_compiler__SeparateCompiler__box_kind_of(self, p0);
3472 var = var1;
3473 RET_LABEL:;
3474 return var;
3475 }
3476 /* method separate_compiler#SeparateCompiler#compile_color_consts for (self: SeparateCompiler, Map[Object, Int]) */
3477 void separate_compiler__SeparateCompiler__compile_color_consts(val* self, val* p0) {
3478 val* var_colors /* var colors: Map[Object, Int] */;
3479 val* var /* : AbstractCompilerVisitor */;
3480 val* var_v /* var v: SeparateCompilerVisitor */;
3481 val* var_ /* var : Map[Object, Int] */;
3482 val* var1 /* : MapIterator[Object, nullable Object] */;
3483 val* var_2 /* var : MapIterator[Object, Int] */;
3484 short int var3 /* : Bool */;
3485 val* var4 /* : Object */;
3486 val* var_m /* var m: Object */;
3487 val* var5 /* : nullable Object */;
3488 long var6 /* : Int */;
3489 long var_c /* var c: Int */;
3490 var_colors = p0;
3491 {
3492 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateCompiler>*/;
3493 }
3494 var_v = var;
3495 var_ = var_colors;
3496 {
3497 var1 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_) /* iterator on <var_:Map[Object, Int]>*/;
3498 }
3499 var_2 = var1;
3500 for(;;) {
3501 {
3502 var3 = ((short int (*)(val*))(var_2->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var_2) /* is_ok on <var_2:MapIterator[Object, Int]>*/;
3503 }
3504 if (var3){
3505 {
3506 var4 = ((val* (*)(val*))(var_2->class->vft[COLOR_abstract_collection__MapIterator__key]))(var_2) /* key on <var_2:MapIterator[Object, Int]>*/;
3507 }
3508 var_m = var4;
3509 {
3510 var5 = ((val* (*)(val*))(var_2->class->vft[COLOR_abstract_collection__MapIterator__item]))(var_2) /* item on <var_2:MapIterator[Object, Int]>*/;
3511 }
3512 var6 = ((struct instance_kernel__Int*)var5)->value; /* autounbox from nullable Object to Int */;
3513 var_c = var6;
3514 {
3515 separate_compiler__SeparateCompiler__compile_color_const(self, var_v, var_m, var_c); /* Direct call separate_compiler#SeparateCompiler#compile_color_const on <self:SeparateCompiler>*/
3516 }
3517 {
3518 ((void (*)(val*))(var_2->class->vft[COLOR_abstract_collection__MapIterator__next]))(var_2) /* next on <var_2:MapIterator[Object, Int]>*/;
3519 }
3520 } else {
3521 goto BREAK_label;
3522 }
3523 }
3524 BREAK_label: (void)0;
3525 {
3526 { /* Inline abstract_collection#MapIterator#finish (var_2) on <var_2:MapIterator[Object, Int]> */
3527 RET_LABEL7:(void)0;
3528 }
3529 }
3530 RET_LABEL:;
3531 }
3532 /* method separate_compiler#SeparateCompiler#compile_color_consts for (self: Object, Map[Object, Int]) */
3533 void VIRTUAL_separate_compiler__SeparateCompiler__compile_color_consts(val* self, val* p0) {
3534 separate_compiler__SeparateCompiler__compile_color_consts(self, p0); /* Direct call separate_compiler#SeparateCompiler#compile_color_consts on <self:Object(SeparateCompiler)>*/
3535 RET_LABEL:;
3536 }
3537 /* method separate_compiler#SeparateCompiler#compile_color_const for (self: SeparateCompiler, SeparateCompilerVisitor, Object, Int) */
3538 void separate_compiler__SeparateCompiler__compile_color_const(val* self, val* p0, val* p1, long p2) {
3539 val* var_v /* var v: SeparateCompilerVisitor */;
3540 val* var_m /* var m: Object */;
3541 long var_color /* var color: Int */;
3542 val* var /* : HashSet[Object] */;
3543 val* var2 /* : HashSet[Object] */;
3544 short int var3 /* : Bool */;
3545 short int var4 /* : Bool */;
3546 int cltype;
3547 int idtype;
3548 val* var5 /* : ModelBuilder */;
3549 val* var7 /* : ModelBuilder */;
3550 val* var8 /* : ToolContext */;
3551 val* var10 /* : ToolContext */;
3552 val* var11 /* : OptionBool */;
3553 val* var13 /* : OptionBool */;
3554 val* var14 /* : nullable Object */;
3555 val* var16 /* : nullable Object */;
3556 short int var17 /* : Bool */;
3557 val* var18 /* : String */;
3558 static val* varonce;
3559 val* var19 /* : String */;
3560 char* var20 /* : NativeString */;
3561 long var21 /* : Int */;
3562 val* var22 /* : FlatString */;
3563 val* var23 /* : String */;
3564 static val* varonce24;
3565 val* var25 /* : String */;
3566 char* var26 /* : NativeString */;
3567 long var27 /* : Int */;
3568 val* var28 /* : FlatString */;
3569 val* var29 /* : Array[Object] */;
3570 long var30 /* : Int */;
3571 val* var31 /* : NativeArray[Object] */;
3572 val* var32 /* : Object */;
3573 val* var33 /* : String */;
3574 val* var34 /* : String */;
3575 static val* varonce35;
3576 val* var36 /* : String */;
3577 char* var37 /* : NativeString */;
3578 long var38 /* : Int */;
3579 val* var39 /* : FlatString */;
3580 val* var40 /* : String */;
3581 static val* varonce41;
3582 val* var42 /* : String */;
3583 char* var43 /* : NativeString */;
3584 long var44 /* : Int */;
3585 val* var45 /* : FlatString */;
3586 val* var46 /* : Array[Object] */;
3587 long var47 /* : Int */;
3588 val* var48 /* : NativeArray[Object] */;
3589 val* var49 /* : String */;
3590 static val* varonce50;
3591 val* var51 /* : String */;
3592 char* var52 /* : NativeString */;
3593 long var53 /* : Int */;
3594 val* var54 /* : FlatString */;
3595 val* var55 /* : String */;
3596 static val* varonce56;
3597 val* var57 /* : String */;
3598 char* var58 /* : NativeString */;
3599 long var59 /* : Int */;
3600 val* var60 /* : FlatString */;
3601 static val* varonce61;
3602 val* var62 /* : String */;
3603 char* var63 /* : NativeString */;
3604 long var64 /* : Int */;
3605 val* var65 /* : FlatString */;
3606 val* var66 /* : Array[Object] */;
3607 long var67 /* : Int */;
3608 val* var68 /* : NativeArray[Object] */;
3609 val* var69 /* : Object */;
3610 val* var70 /* : String */;
3611 short int var71 /* : Bool */;
3612 int cltype72;
3613 int idtype73;
3614 val* var74 /* : ModelBuilder */;
3615 val* var76 /* : ModelBuilder */;
3616 val* var77 /* : ToolContext */;
3617 val* var79 /* : ToolContext */;
3618 val* var80 /* : OptionBool */;
3619 val* var82 /* : OptionBool */;
3620 val* var83 /* : nullable Object */;
3621 val* var85 /* : nullable Object */;
3622 short int var86 /* : Bool */;
3623 val* var87 /* : String */;
3624 static val* varonce88;
3625 val* var89 /* : String */;
3626 char* var90 /* : NativeString */;
3627 long var91 /* : Int */;
3628 val* var92 /* : FlatString */;
3629 val* var93 /* : String */;
3630 static val* varonce94;
3631 val* var95 /* : String */;
3632 char* var96 /* : NativeString */;
3633 long var97 /* : Int */;
3634 val* var98 /* : FlatString */;
3635 val* var99 /* : Array[Object] */;
3636 long var100 /* : Int */;
3637 val* var101 /* : NativeArray[Object] */;
3638 val* var102 /* : Object */;
3639 val* var103 /* : String */;
3640 val* var104 /* : String */;
3641 static val* varonce105;
3642 val* var106 /* : String */;
3643 char* var107 /* : NativeString */;
3644 long var108 /* : Int */;
3645 val* var109 /* : FlatString */;
3646 val* var110 /* : String */;
3647 static val* varonce111;
3648 val* var112 /* : String */;
3649 char* var113 /* : NativeString */;
3650 long var114 /* : Int */;
3651 val* var115 /* : FlatString */;
3652 val* var116 /* : Array[Object] */;
3653 long var117 /* : Int */;
3654 val* var118 /* : NativeArray[Object] */;
3655 val* var119 /* : String */;
3656 static val* varonce120;
3657 val* var121 /* : String */;
3658 char* var122 /* : NativeString */;
3659 long var123 /* : Int */;
3660 val* var124 /* : FlatString */;
3661 val* var125 /* : String */;
3662 static val* varonce126;
3663 val* var127 /* : String */;
3664 char* var128 /* : NativeString */;
3665 long var129 /* : Int */;
3666 val* var130 /* : FlatString */;
3667 static val* varonce131;
3668 val* var132 /* : String */;
3669 char* var133 /* : NativeString */;
3670 long var134 /* : Int */;
3671 val* var135 /* : FlatString */;
3672 val* var136 /* : Array[Object] */;
3673 long var137 /* : Int */;
3674 val* var138 /* : NativeArray[Object] */;
3675 val* var139 /* : Object */;
3676 val* var140 /* : String */;
3677 short int var141 /* : Bool */;
3678 int cltype142;
3679 int idtype143;
3680 val* var144 /* : ModelBuilder */;
3681 val* var146 /* : ModelBuilder */;
3682 val* var147 /* : ToolContext */;
3683 val* var149 /* : ToolContext */;
3684 val* var150 /* : OptionBool */;
3685 val* var152 /* : OptionBool */;
3686 val* var153 /* : nullable Object */;
3687 val* var155 /* : nullable Object */;
3688 short int var156 /* : Bool */;
3689 val* var157 /* : String */;
3690 static val* varonce158;
3691 val* var159 /* : String */;
3692 char* var160 /* : NativeString */;
3693 long var161 /* : Int */;
3694 val* var162 /* : FlatString */;
3695 val* var163 /* : String */;
3696 static val* varonce164;
3697 val* var165 /* : String */;
3698 char* var166 /* : NativeString */;
3699 long var167 /* : Int */;
3700 val* var168 /* : FlatString */;
3701 val* var169 /* : Array[Object] */;
3702 long var170 /* : Int */;
3703 val* var171 /* : NativeArray[Object] */;
3704 val* var172 /* : Object */;
3705 val* var173 /* : String */;
3706 val* var174 /* : String */;
3707 static val* varonce175;
3708 val* var176 /* : String */;
3709 char* var177 /* : NativeString */;
3710 long var178 /* : Int */;
3711 val* var179 /* : FlatString */;
3712 val* var180 /* : String */;
3713 static val* varonce181;
3714 val* var182 /* : String */;
3715 char* var183 /* : NativeString */;
3716 long var184 /* : Int */;
3717 val* var185 /* : FlatString */;
3718 val* var186 /* : Array[Object] */;
3719 long var187 /* : Int */;
3720 val* var188 /* : NativeArray[Object] */;
3721 val* var189 /* : String */;
3722 static val* varonce190;
3723 val* var191 /* : String */;
3724 char* var192 /* : NativeString */;
3725 long var193 /* : Int */;
3726 val* var194 /* : FlatString */;
3727 val* var195 /* : String */;
3728 static val* varonce196;
3729 val* var197 /* : String */;
3730 char* var198 /* : NativeString */;
3731 long var199 /* : Int */;
3732 val* var200 /* : FlatString */;
3733 static val* varonce201;
3734 val* var202 /* : String */;
3735 char* var203 /* : NativeString */;
3736 long var204 /* : Int */;
3737 val* var205 /* : FlatString */;
3738 val* var206 /* : Array[Object] */;
3739 long var207 /* : Int */;
3740 val* var208 /* : NativeArray[Object] */;
3741 val* var209 /* : Object */;
3742 val* var210 /* : String */;
3743 val* var211 /* : HashSet[Object] */;
3744 val* var213 /* : HashSet[Object] */;
3745 var_v = p0;
3746 var_m = p1;
3747 var_color = p2;
3748 {
3749 { /* Inline separate_compiler#SeparateCompiler#color_consts_done (self) on <self:SeparateCompiler> */
3750 var2 = self->attrs[COLOR_separate_compiler__SeparateCompiler___color_consts_done].val; /* _color_consts_done on <self:SeparateCompiler> */
3751 if (unlikely(var2 == NULL)) {
3752 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _color_consts_done");
3753 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 266);
3754 show_backtrace(1);
3755 }
3756 var = var2;
3757 RET_LABEL1:(void)0;
3758 }
3759 }
3760 {
3761 var3 = hash_collection__HashSet__has(var, var_m);
3762 }
3763 if (var3){
3764 goto RET_LABEL;
3765 } else {
3766 }
3767 /* <var_m:Object> isa MProperty */
3768 cltype = type_model__MProperty.color;
3769 idtype = type_model__MProperty.id;
3770 if(cltype >= var_m->type->table_size) {
3771 var4 = 0;
3772 } else {
3773 var4 = var_m->type->type_table[cltype] == idtype;
3774 }
3775 if (var4){
3776 {
3777 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (self) on <self:SeparateCompiler> */
3778 var7 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <self:SeparateCompiler> */
3779 if (unlikely(var7 == NULL)) {
3780 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
3781 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
3782 show_backtrace(1);
3783 }
3784 var5 = var7;
3785 RET_LABEL6:(void)0;
3786 }
3787 }
3788 {
3789 { /* Inline modelbuilder#ModelBuilder#toolcontext (var5) on <var5:ModelBuilder> */
3790 var10 = var5->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var5:ModelBuilder> */
3791 if (unlikely(var10 == NULL)) {
3792 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
3793 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
3794 show_backtrace(1);
3795 }
3796 var8 = var10;
3797 RET_LABEL9:(void)0;
3798 }
3799 }
3800 {
3801 { /* Inline separate_compiler#ToolContext#opt_inline_coloring_numbers (var8) on <var8:ToolContext> */
3802 var13 = var8->attrs[COLOR_separate_compiler__ToolContext___opt_inline_coloring_numbers].val; /* _opt_inline_coloring_numbers on <var8:ToolContext> */
3803 if (unlikely(var13 == NULL)) {
3804 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_coloring_numbers");
3805 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 32);
3806 show_backtrace(1);
3807 }
3808 var11 = var13;
3809 RET_LABEL12:(void)0;
3810 }
3811 }
3812 {
3813 { /* Inline opts#Option#value (var11) on <var11:OptionBool> */
3814 var16 = var11->attrs[COLOR_opts__Option___value].val; /* _value on <var11:OptionBool> */
3815 var14 = var16;
3816 RET_LABEL15:(void)0;
3817 }
3818 }
3819 var17 = ((struct instance_kernel__Bool*)var14)->value; /* autounbox from nullable Object to Bool */;
3820 if (var17){
3821 {
3822 var18 = separate_compiler__MProperty__const_color(var_m);
3823 }
3824 if (varonce) {
3825 var19 = varonce;
3826 } else {
3827 var20 = "#define ";
3828 var21 = 8;
3829 var22 = string__NativeString__to_s_with_length(var20, var21);
3830 var19 = var22;
3831 varonce = var19;
3832 }
3833 {
3834 var23 = separate_compiler__MProperty__const_color(var_m);
3835 }
3836 if (varonce24) {
3837 var25 = varonce24;
3838 } else {
3839 var26 = " ";
3840 var27 = 1;
3841 var28 = string__NativeString__to_s_with_length(var26, var27);
3842 var25 = var28;
3843 varonce24 = var25;
3844 }
3845 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
3846 { /* var29 = array_instance Array[Object] */
3847 var30 = 4;
3848 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
3849 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var19;
3850 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var23;
3851 ((struct instance_array__NativeArray*)var31)->values[2] = (val*) var25;
3852 var32 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
3853 ((struct instance_array__NativeArray*)var31)->values[3] = (val*) var32;
3854 {
3855 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
3856 }
3857 }
3858 {
3859 var33 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
3860 }
3861 {
3862 abstract_compiler__AbstractCompiler__provide_declaration(self, var18, var33); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateCompiler>*/
3863 }
3864 } else {
3865 {
3866 var34 = separate_compiler__MProperty__const_color(var_m);
3867 }
3868 if (varonce35) {
3869 var36 = varonce35;
3870 } else {
3871 var37 = "extern const int ";
3872 var38 = 17;
3873 var39 = string__NativeString__to_s_with_length(var37, var38);
3874 var36 = var39;
3875 varonce35 = var36;
3876 }
3877 {
3878 var40 = separate_compiler__MProperty__const_color(var_m);
3879 }
3880 if (varonce41) {
3881 var42 = varonce41;
3882 } else {
3883 var43 = ";";
3884 var44 = 1;
3885 var45 = string__NativeString__to_s_with_length(var43, var44);
3886 var42 = var45;
3887 varonce41 = var42;
3888 }
3889 var46 = NEW_array__Array(&type_array__Arraykernel__Object);
3890 { /* var46 = array_instance Array[Object] */
3891 var47 = 3;
3892 var48 = NEW_array__NativeArray(var47, &type_array__NativeArraykernel__Object);
3893 ((struct instance_array__NativeArray*)var48)->values[0] = (val*) var36;
3894 ((struct instance_array__NativeArray*)var48)->values[1] = (val*) var40;
3895 ((struct instance_array__NativeArray*)var48)->values[2] = (val*) var42;
3896 {
3897 ((void (*)(val*, val*, long))(var46->class->vft[COLOR_array__Array__with_native]))(var46, var48, var47) /* with_native on <var46:Array[Object]>*/;
3898 }
3899 }
3900 {
3901 var49 = ((val* (*)(val*))(var46->class->vft[COLOR_string__Object__to_s]))(var46) /* to_s on <var46:Array[Object]>*/;
3902 }
3903 {
3904 abstract_compiler__AbstractCompiler__provide_declaration(self, var34, var49); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateCompiler>*/
3905 }
3906 if (varonce50) {
3907 var51 = varonce50;
3908 } else {
3909 var52 = "const int ";
3910 var53 = 10;
3911 var54 = string__NativeString__to_s_with_length(var52, var53);
3912 var51 = var54;
3913 varonce50 = var51;
3914 }
3915 {
3916 var55 = separate_compiler__MProperty__const_color(var_m);
3917 }
3918 if (varonce56) {
3919 var57 = varonce56;
3920 } else {
3921 var58 = " = ";
3922 var59 = 3;
3923 var60 = string__NativeString__to_s_with_length(var58, var59);
3924 var57 = var60;
3925 varonce56 = var57;
3926 }
3927 if (varonce61) {
3928 var62 = varonce61;
3929 } else {
3930 var63 = ";";
3931 var64 = 1;
3932 var65 = string__NativeString__to_s_with_length(var63, var64);
3933 var62 = var65;
3934 varonce61 = var62;
3935 }
3936 var66 = NEW_array__Array(&type_array__Arraykernel__Object);
3937 { /* var66 = array_instance Array[Object] */
3938 var67 = 5;
3939 var68 = NEW_array__NativeArray(var67, &type_array__NativeArraykernel__Object);
3940 ((struct instance_array__NativeArray*)var68)->values[0] = (val*) var51;
3941 ((struct instance_array__NativeArray*)var68)->values[1] = (val*) var55;
3942 ((struct instance_array__NativeArray*)var68)->values[2] = (val*) var57;
3943 var69 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
3944 ((struct instance_array__NativeArray*)var68)->values[3] = (val*) var69;
3945 ((struct instance_array__NativeArray*)var68)->values[4] = (val*) var62;
3946 {
3947 ((void (*)(val*, val*, long))(var66->class->vft[COLOR_array__Array__with_native]))(var66, var68, var67) /* with_native on <var66:Array[Object]>*/;
3948 }
3949 }
3950 {
3951 var70 = ((val* (*)(val*))(var66->class->vft[COLOR_string__Object__to_s]))(var66) /* to_s on <var66:Array[Object]>*/;
3952 }
3953 {
3954 abstract_compiler__AbstractCompilerVisitor__add(var_v, var70); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
3955 }
3956 }
3957 } else {
3958 /* <var_m:Object> isa MPropDef */
3959 cltype72 = type_model__MPropDef.color;
3960 idtype73 = type_model__MPropDef.id;
3961 if(cltype72 >= var_m->type->table_size) {
3962 var71 = 0;
3963 } else {
3964 var71 = var_m->type->type_table[cltype72] == idtype73;
3965 }
3966 if (var71){
3967 {
3968 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (self) on <self:SeparateCompiler> */
3969 var76 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <self:SeparateCompiler> */
3970 if (unlikely(var76 == NULL)) {
3971 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
3972 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
3973 show_backtrace(1);
3974 }
3975 var74 = var76;
3976 RET_LABEL75:(void)0;
3977 }
3978 }
3979 {
3980 { /* Inline modelbuilder#ModelBuilder#toolcontext (var74) on <var74:ModelBuilder> */
3981 var79 = var74->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var74:ModelBuilder> */
3982 if (unlikely(var79 == NULL)) {
3983 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
3984 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
3985 show_backtrace(1);
3986 }
3987 var77 = var79;
3988 RET_LABEL78:(void)0;
3989 }
3990 }
3991 {
3992 { /* Inline separate_compiler#ToolContext#opt_inline_coloring_numbers (var77) on <var77:ToolContext> */
3993 var82 = var77->attrs[COLOR_separate_compiler__ToolContext___opt_inline_coloring_numbers].val; /* _opt_inline_coloring_numbers on <var77:ToolContext> */
3994 if (unlikely(var82 == NULL)) {
3995 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_coloring_numbers");
3996 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 32);
3997 show_backtrace(1);
3998 }
3999 var80 = var82;
4000 RET_LABEL81:(void)0;
4001 }
4002 }
4003 {
4004 { /* Inline opts#Option#value (var80) on <var80:OptionBool> */
4005 var85 = var80->attrs[COLOR_opts__Option___value].val; /* _value on <var80:OptionBool> */
4006 var83 = var85;
4007 RET_LABEL84:(void)0;
4008 }
4009 }
4010 var86 = ((struct instance_kernel__Bool*)var83)->value; /* autounbox from nullable Object to Bool */;
4011 if (var86){
4012 {
4013 var87 = separate_compiler__MPropDef__const_color(var_m);
4014 }
4015 if (varonce88) {
4016 var89 = varonce88;
4017 } else {
4018 var90 = "#define ";
4019 var91 = 8;
4020 var92 = string__NativeString__to_s_with_length(var90, var91);
4021 var89 = var92;
4022 varonce88 = var89;
4023 }
4024 {
4025 var93 = separate_compiler__MPropDef__const_color(var_m);
4026 }
4027 if (varonce94) {
4028 var95 = varonce94;
4029 } else {
4030 var96 = " ";
4031 var97 = 1;
4032 var98 = string__NativeString__to_s_with_length(var96, var97);
4033 var95 = var98;
4034 varonce94 = var95;
4035 }
4036 var99 = NEW_array__Array(&type_array__Arraykernel__Object);
4037 { /* var99 = array_instance Array[Object] */
4038 var100 = 4;
4039 var101 = NEW_array__NativeArray(var100, &type_array__NativeArraykernel__Object);
4040 ((struct instance_array__NativeArray*)var101)->values[0] = (val*) var89;
4041 ((struct instance_array__NativeArray*)var101)->values[1] = (val*) var93;
4042 ((struct instance_array__NativeArray*)var101)->values[2] = (val*) var95;
4043 var102 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
4044 ((struct instance_array__NativeArray*)var101)->values[3] = (val*) var102;
4045 {
4046 ((void (*)(val*, val*, long))(var99->class->vft[COLOR_array__Array__with_native]))(var99, var101, var100) /* with_native on <var99:Array[Object]>*/;
4047 }
4048 }
4049 {
4050 var103 = ((val* (*)(val*))(var99->class->vft[COLOR_string__Object__to_s]))(var99) /* to_s on <var99:Array[Object]>*/;
4051 }
4052 {
4053 abstract_compiler__AbstractCompiler__provide_declaration(self, var87, var103); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateCompiler>*/
4054 }
4055 } else {
4056 {
4057 var104 = separate_compiler__MPropDef__const_color(var_m);
4058 }
4059 if (varonce105) {
4060 var106 = varonce105;
4061 } else {
4062 var107 = "extern const int ";
4063 var108 = 17;
4064 var109 = string__NativeString__to_s_with_length(var107, var108);
4065 var106 = var109;
4066 varonce105 = var106;
4067 }
4068 {
4069 var110 = separate_compiler__MPropDef__const_color(var_m);
4070 }
4071 if (varonce111) {
4072 var112 = varonce111;
4073 } else {
4074 var113 = ";";
4075 var114 = 1;
4076 var115 = string__NativeString__to_s_with_length(var113, var114);
4077 var112 = var115;
4078 varonce111 = var112;
4079 }
4080 var116 = NEW_array__Array(&type_array__Arraykernel__Object);
4081 { /* var116 = array_instance Array[Object] */
4082 var117 = 3;
4083 var118 = NEW_array__NativeArray(var117, &type_array__NativeArraykernel__Object);
4084 ((struct instance_array__NativeArray*)var118)->values[0] = (val*) var106;
4085 ((struct instance_array__NativeArray*)var118)->values[1] = (val*) var110;
4086 ((struct instance_array__NativeArray*)var118)->values[2] = (val*) var112;
4087 {
4088 ((void (*)(val*, val*, long))(var116->class->vft[COLOR_array__Array__with_native]))(var116, var118, var117) /* with_native on <var116:Array[Object]>*/;
4089 }
4090 }
4091 {
4092 var119 = ((val* (*)(val*))(var116->class->vft[COLOR_string__Object__to_s]))(var116) /* to_s on <var116:Array[Object]>*/;
4093 }
4094 {
4095 abstract_compiler__AbstractCompiler__provide_declaration(self, var104, var119); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateCompiler>*/
4096 }
4097 if (varonce120) {
4098 var121 = varonce120;
4099 } else {
4100 var122 = "const int ";
4101 var123 = 10;
4102 var124 = string__NativeString__to_s_with_length(var122, var123);
4103 var121 = var124;
4104 varonce120 = var121;
4105 }
4106 {
4107 var125 = separate_compiler__MPropDef__const_color(var_m);
4108 }
4109 if (varonce126) {
4110 var127 = varonce126;
4111 } else {
4112 var128 = " = ";
4113 var129 = 3;
4114 var130 = string__NativeString__to_s_with_length(var128, var129);
4115 var127 = var130;
4116 varonce126 = var127;
4117 }
4118 if (varonce131) {
4119 var132 = varonce131;
4120 } else {
4121 var133 = ";";
4122 var134 = 1;
4123 var135 = string__NativeString__to_s_with_length(var133, var134);
4124 var132 = var135;
4125 varonce131 = var132;
4126 }
4127 var136 = NEW_array__Array(&type_array__Arraykernel__Object);
4128 { /* var136 = array_instance Array[Object] */
4129 var137 = 5;
4130 var138 = NEW_array__NativeArray(var137, &type_array__NativeArraykernel__Object);
4131 ((struct instance_array__NativeArray*)var138)->values[0] = (val*) var121;
4132 ((struct instance_array__NativeArray*)var138)->values[1] = (val*) var125;
4133 ((struct instance_array__NativeArray*)var138)->values[2] = (val*) var127;
4134 var139 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
4135 ((struct instance_array__NativeArray*)var138)->values[3] = (val*) var139;
4136 ((struct instance_array__NativeArray*)var138)->values[4] = (val*) var132;
4137 {
4138 ((void (*)(val*, val*, long))(var136->class->vft[COLOR_array__Array__with_native]))(var136, var138, var137) /* with_native on <var136:Array[Object]>*/;
4139 }
4140 }
4141 {
4142 var140 = ((val* (*)(val*))(var136->class->vft[COLOR_string__Object__to_s]))(var136) /* to_s on <var136:Array[Object]>*/;
4143 }
4144 {
4145 abstract_compiler__AbstractCompilerVisitor__add(var_v, var140); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
4146 }
4147 }
4148 } else {
4149 /* <var_m:Object> isa MType */
4150 cltype142 = type_model__MType.color;
4151 idtype143 = type_model__MType.id;
4152 if(cltype142 >= var_m->type->table_size) {
4153 var141 = 0;
4154 } else {
4155 var141 = var_m->type->type_table[cltype142] == idtype143;
4156 }
4157 if (var141){
4158 {
4159 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (self) on <self:SeparateCompiler> */
4160 var146 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <self:SeparateCompiler> */
4161 if (unlikely(var146 == NULL)) {
4162 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
4163 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
4164 show_backtrace(1);
4165 }
4166 var144 = var146;
4167 RET_LABEL145:(void)0;
4168 }
4169 }
4170 {
4171 { /* Inline modelbuilder#ModelBuilder#toolcontext (var144) on <var144:ModelBuilder> */
4172 var149 = var144->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var144:ModelBuilder> */
4173 if (unlikely(var149 == NULL)) {
4174 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
4175 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
4176 show_backtrace(1);
4177 }
4178 var147 = var149;
4179 RET_LABEL148:(void)0;
4180 }
4181 }
4182 {
4183 { /* Inline separate_compiler#ToolContext#opt_inline_coloring_numbers (var147) on <var147:ToolContext> */
4184 var152 = var147->attrs[COLOR_separate_compiler__ToolContext___opt_inline_coloring_numbers].val; /* _opt_inline_coloring_numbers on <var147:ToolContext> */
4185 if (unlikely(var152 == NULL)) {
4186 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_inline_coloring_numbers");
4187 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 32);
4188 show_backtrace(1);
4189 }
4190 var150 = var152;
4191 RET_LABEL151:(void)0;
4192 }
4193 }
4194 {
4195 { /* Inline opts#Option#value (var150) on <var150:OptionBool> */
4196 var155 = var150->attrs[COLOR_opts__Option___value].val; /* _value on <var150:OptionBool> */
4197 var153 = var155;
4198 RET_LABEL154:(void)0;
4199 }
4200 }
4201 var156 = ((struct instance_kernel__Bool*)var153)->value; /* autounbox from nullable Object to Bool */;
4202 if (var156){
4203 {
4204 var157 = separate_compiler__MType__const_color(var_m);
4205 }
4206 if (varonce158) {
4207 var159 = varonce158;
4208 } else {
4209 var160 = "#define ";
4210 var161 = 8;
4211 var162 = string__NativeString__to_s_with_length(var160, var161);
4212 var159 = var162;
4213 varonce158 = var159;
4214 }
4215 {
4216 var163 = separate_compiler__MType__const_color(var_m);
4217 }
4218 if (varonce164) {
4219 var165 = varonce164;
4220 } else {
4221 var166 = " ";
4222 var167 = 1;
4223 var168 = string__NativeString__to_s_with_length(var166, var167);
4224 var165 = var168;
4225 varonce164 = var165;
4226 }
4227 var169 = NEW_array__Array(&type_array__Arraykernel__Object);
4228 { /* var169 = array_instance Array[Object] */
4229 var170 = 4;
4230 var171 = NEW_array__NativeArray(var170, &type_array__NativeArraykernel__Object);
4231 ((struct instance_array__NativeArray*)var171)->values[0] = (val*) var159;
4232 ((struct instance_array__NativeArray*)var171)->values[1] = (val*) var163;
4233 ((struct instance_array__NativeArray*)var171)->values[2] = (val*) var165;
4234 var172 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
4235 ((struct instance_array__NativeArray*)var171)->values[3] = (val*) var172;
4236 {
4237 ((void (*)(val*, val*, long))(var169->class->vft[COLOR_array__Array__with_native]))(var169, var171, var170) /* with_native on <var169:Array[Object]>*/;
4238 }
4239 }
4240 {
4241 var173 = ((val* (*)(val*))(var169->class->vft[COLOR_string__Object__to_s]))(var169) /* to_s on <var169:Array[Object]>*/;
4242 }
4243 {
4244 abstract_compiler__AbstractCompiler__provide_declaration(self, var157, var173); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateCompiler>*/
4245 }
4246 } else {
4247 {
4248 var174 = separate_compiler__MType__const_color(var_m);
4249 }
4250 if (varonce175) {
4251 var176 = varonce175;
4252 } else {
4253 var177 = "extern const int ";
4254 var178 = 17;
4255 var179 = string__NativeString__to_s_with_length(var177, var178);
4256 var176 = var179;
4257 varonce175 = var176;
4258 }
4259 {
4260 var180 = separate_compiler__MType__const_color(var_m);
4261 }
4262 if (varonce181) {
4263 var182 = varonce181;
4264 } else {
4265 var183 = ";";
4266 var184 = 1;
4267 var185 = string__NativeString__to_s_with_length(var183, var184);
4268 var182 = var185;
4269 varonce181 = var182;
4270 }
4271 var186 = NEW_array__Array(&type_array__Arraykernel__Object);
4272 { /* var186 = array_instance Array[Object] */
4273 var187 = 3;
4274 var188 = NEW_array__NativeArray(var187, &type_array__NativeArraykernel__Object);
4275 ((struct instance_array__NativeArray*)var188)->values[0] = (val*) var176;
4276 ((struct instance_array__NativeArray*)var188)->values[1] = (val*) var180;
4277 ((struct instance_array__NativeArray*)var188)->values[2] = (val*) var182;
4278 {
4279 ((void (*)(val*, val*, long))(var186->class->vft[COLOR_array__Array__with_native]))(var186, var188, var187) /* with_native on <var186:Array[Object]>*/;
4280 }
4281 }
4282 {
4283 var189 = ((val* (*)(val*))(var186->class->vft[COLOR_string__Object__to_s]))(var186) /* to_s on <var186:Array[Object]>*/;
4284 }
4285 {
4286 abstract_compiler__AbstractCompiler__provide_declaration(self, var174, var189); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateCompiler>*/
4287 }
4288 if (varonce190) {
4289 var191 = varonce190;
4290 } else {
4291 var192 = "const int ";
4292 var193 = 10;
4293 var194 = string__NativeString__to_s_with_length(var192, var193);
4294 var191 = var194;
4295 varonce190 = var191;
4296 }
4297 {
4298 var195 = separate_compiler__MType__const_color(var_m);
4299 }
4300 if (varonce196) {
4301 var197 = varonce196;
4302 } else {
4303 var198 = " = ";
4304 var199 = 3;
4305 var200 = string__NativeString__to_s_with_length(var198, var199);
4306 var197 = var200;
4307 varonce196 = var197;
4308 }
4309 if (varonce201) {
4310 var202 = varonce201;
4311 } else {
4312 var203 = ";";
4313 var204 = 1;
4314 var205 = string__NativeString__to_s_with_length(var203, var204);
4315 var202 = var205;
4316 varonce201 = var202;
4317 }
4318 var206 = NEW_array__Array(&type_array__Arraykernel__Object);
4319 { /* var206 = array_instance Array[Object] */
4320 var207 = 5;
4321 var208 = NEW_array__NativeArray(var207, &type_array__NativeArraykernel__Object);
4322 ((struct instance_array__NativeArray*)var208)->values[0] = (val*) var191;
4323 ((struct instance_array__NativeArray*)var208)->values[1] = (val*) var195;
4324 ((struct instance_array__NativeArray*)var208)->values[2] = (val*) var197;
4325 var209 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
4326 ((struct instance_array__NativeArray*)var208)->values[3] = (val*) var209;
4327 ((struct instance_array__NativeArray*)var208)->values[4] = (val*) var202;
4328 {
4329 ((void (*)(val*, val*, long))(var206->class->vft[COLOR_array__Array__with_native]))(var206, var208, var207) /* with_native on <var206:Array[Object]>*/;
4330 }
4331 }
4332 {
4333 var210 = ((val* (*)(val*))(var206->class->vft[COLOR_string__Object__to_s]))(var206) /* to_s on <var206:Array[Object]>*/;
4334 }
4335 {
4336 abstract_compiler__AbstractCompilerVisitor__add(var_v, var210); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
4337 }
4338 }
4339 } else {
4340 }
4341 }
4342 }
4343 {
4344 { /* Inline separate_compiler#SeparateCompiler#color_consts_done (self) on <self:SeparateCompiler> */
4345 var213 = self->attrs[COLOR_separate_compiler__SeparateCompiler___color_consts_done].val; /* _color_consts_done on <self:SeparateCompiler> */
4346 if (unlikely(var213 == NULL)) {
4347 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _color_consts_done");
4348 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 266);
4349 show_backtrace(1);
4350 }
4351 var211 = var213;
4352 RET_LABEL212:(void)0;
4353 }
4354 }
4355 {
4356 hash_collection__HashSet__add(var211, var_m); /* Direct call hash_collection#HashSet#add on <var211:HashSet[Object]>*/
4357 }
4358 RET_LABEL:;
4359 }
4360 /* method separate_compiler#SeparateCompiler#compile_color_const for (self: Object, SeparateCompilerVisitor, Object, Int) */
4361 void VIRTUAL_separate_compiler__SeparateCompiler__compile_color_const(val* self, val* p0, val* p1, long p2) {
4362 separate_compiler__SeparateCompiler__compile_color_const(self, p0, p1, p2); /* Direct call separate_compiler#SeparateCompiler#compile_color_const on <self:Object(SeparateCompiler)>*/
4363 RET_LABEL:;
4364 }
4365 /* method separate_compiler#SeparateCompiler#color_consts_done for (self: SeparateCompiler): HashSet[Object] */
4366 val* separate_compiler__SeparateCompiler__color_consts_done(val* self) {
4367 val* var /* : HashSet[Object] */;
4368 val* var1 /* : HashSet[Object] */;
4369 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___color_consts_done].val; /* _color_consts_done on <self:SeparateCompiler> */
4370 if (unlikely(var1 == NULL)) {
4371 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _color_consts_done");
4372 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 266);
4373 show_backtrace(1);
4374 }
4375 var = var1;
4376 RET_LABEL:;
4377 return var;
4378 }
4379 /* method separate_compiler#SeparateCompiler#color_consts_done for (self: Object): HashSet[Object] */
4380 val* VIRTUAL_separate_compiler__SeparateCompiler__color_consts_done(val* self) {
4381 val* var /* : HashSet[Object] */;
4382 val* var1 /* : HashSet[Object] */;
4383 val* var3 /* : HashSet[Object] */;
4384 { /* Inline separate_compiler#SeparateCompiler#color_consts_done (self) on <self:Object(SeparateCompiler)> */
4385 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___color_consts_done].val; /* _color_consts_done on <self:Object(SeparateCompiler)> */
4386 if (unlikely(var3 == NULL)) {
4387 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _color_consts_done");
4388 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 266);
4389 show_backtrace(1);
4390 }
4391 var1 = var3;
4392 RET_LABEL2:(void)0;
4393 }
4394 var = var1;
4395 RET_LABEL:;
4396 return var;
4397 }
4398 /* method separate_compiler#SeparateCompiler#do_property_coloring for (self: SeparateCompiler) */
4399 void separate_compiler__SeparateCompiler__do_property_coloring(val* self) {
4400 val* var /* : nullable RapidTypeAnalysis */;
4401 val* var2 /* : nullable RapidTypeAnalysis */;
4402 val* var_rta /* var rta: nullable RapidTypeAnalysis */;
4403 val* var3 /* : MModule */;
4404 val* var5 /* : MModule */;
4405 val* var6 /* : POSet[MClass] */;
4406 val* var_poset /* var poset: POSet[MClass] */;
4407 val* var7 /* : HashSet[MClass] */;
4408 val* var_mclasses /* var mclasses: HashSet[MClass] */;
4409 val* var8 /* : POSetColorer[MClass] */;
4410 val* var_colorer /* var colorer: POSetColorer[MClass] */;
4411 val* var9 /* : Array[MMethod] */;
4412 val* var_dead_methods /* var dead_methods: Array[MMethod] */;
4413 val* var10 /* : HashMap[MClass, Set[PropertyLayoutElement]] */;
4414 val* var_mmethods /* var mmethods: HashMap[MClass, Set[PropertyLayoutElement]] */;
4415 val* var11 /* : HashMap[MClass, Set[MAttribute]] */;
4416 val* var_mattributes /* var mattributes: HashMap[MClass, Set[MAttribute]] */;
4417 val* var_ /* var : HashSet[MClass] */;
4418 val* var12 /* : Iterator[Object] */;
4419 val* var_13 /* var : Iterator[MClass] */;
4420 short int var14 /* : Bool */;
4421 val* var15 /* : nullable Object */;
4422 val* var_mclass /* var mclass: MClass */;
4423 val* var16 /* : HashSet[PropertyLayoutElement] */;
4424 val* var17 /* : HashSet[MAttribute] */;
4425 val* var18 /* : MModule */;
4426 val* var20 /* : MModule */;
4427 val* var21 /* : Set[MProperty] */;
4428 val* var_22 /* var : Set[MProperty] */;
4429 val* var23 /* : Iterator[nullable Object] */;
4430 val* var_24 /* var : Iterator[MProperty] */;
4431 short int var25 /* : Bool */;
4432 val* var26 /* : nullable Object */;
4433 val* var_mprop /* var mprop: MProperty */;
4434 short int var27 /* : Bool */;
4435 int cltype;
4436 int idtype;
4437 short int var28 /* : Bool */;
4438 short int var29 /* : Bool */;
4439 val* var30 /* : ModelBuilder */;
4440 val* var32 /* : ModelBuilder */;
4441 val* var33 /* : ToolContext */;
4442 val* var35 /* : ToolContext */;
4443 val* var36 /* : OptionBool */;
4444 val* var38 /* : OptionBool */;
4445 val* var39 /* : nullable Object */;
4446 val* var41 /* : nullable Object */;
4447 short int var42 /* : Bool */;
4448 short int var43 /* : Bool */;
4449 short int var_44 /* var : Bool */;
4450 val* var45 /* : null */;
4451 short int var46 /* : Bool */;
4452 short int var47 /* : Bool */;
4453 val* var_other /* var other: nullable Object */;
4454 short int var49 /* : Bool */;
4455 short int var50 /* : Bool */;
4456 short int var51 /* : Bool */;
4457 short int var_52 /* var : Bool */;
4458 val* var53 /* : HashSet[MMethod] */;
4459 val* var55 /* : HashSet[MMethod] */;
4460 short int var56 /* : Bool */;
4461 short int var57 /* : Bool */;
4462 val* var58 /* : nullable Object */;
4463 short int var59 /* : Bool */;
4464 int cltype60;
4465 int idtype61;
4466 val* var62 /* : nullable Object */;
4467 val* var67 /* : HashSet[MMethodDef] */;
4468 val* var_all_super_calls /* var all_super_calls: HashSet[MMethodDef] */;
4469 val* var68 /* : MModule */;
4470 val* var70 /* : MModule */;
4471 val* var71 /* : POSetElement[MModule] */;
4472 val* var73 /* : POSetElement[MModule] */;
4473 val* var74 /* : Collection[Object] */;
4474 val* var_75 /* var : Collection[MModule] */;
4475 val* var76 /* : Iterator[nullable Object] */;
4476 val* var_77 /* var : Iterator[MModule] */;
4477 short int var78 /* : Bool */;
4478 val* var79 /* : nullable Object */;
4479 val* var_mmodule /* var mmodule: MModule */;
4480 val* var80 /* : Array[MClassDef] */;
4481 val* var82 /* : Array[MClassDef] */;
4482 val* var_83 /* var : Array[MClassDef] */;
4483 val* var84 /* : ArrayIterator[nullable Object] */;
4484 val* var_85 /* var : ArrayIterator[MClassDef] */;
4485 short int var86 /* : Bool */;
4486 val* var87 /* : nullable Object */;
4487 val* var_mclassdef /* var mclassdef: MClassDef */;
4488 val* var88 /* : Array[MPropDef] */;
4489 val* var90 /* : Array[MPropDef] */;
4490 val* var_91 /* var : Array[MPropDef] */;
4491 val* var92 /* : ArrayIterator[nullable Object] */;
4492 val* var_93 /* var : ArrayIterator[MPropDef] */;
4493 short int var94 /* : Bool */;
4494 val* var95 /* : nullable Object */;
4495 val* var_mpropdef /* var mpropdef: MPropDef */;
4496 short int var96 /* : Bool */;
4497 int cltype97;
4498 int idtype98;
4499 short int var99 /* : Bool */;
4500 short int var101 /* : Bool */;
4501 short int var103 /* : Bool */;
4502 val* var110 /* : null */;
4503 short int var111 /* : Bool */;
4504 short int var112 /* : Bool */;
4505 short int var114 /* : Bool */;
4506 short int var115 /* : Bool */;
4507 short int var116 /* : Bool */;
4508 val* var117 /* : HashSet[MMethodDef] */;
4509 val* var119 /* : HashSet[MMethodDef] */;
4510 val* var_super_calls /* var super_calls: nullable Object */;
4511 val* var_120 /* var : HashSet[MMethodDef] */;
4512 val* var121 /* : Iterator[Object] */;
4513 val* var_122 /* var : Iterator[MMethodDef] */;
4514 short int var123 /* : Bool */;
4515 val* var124 /* : nullable Object */;
4516 val* var_mmethoddef /* var mmethoddef: MMethodDef */;
4517 val* var125 /* : MClassDef */;
4518 val* var127 /* : MClassDef */;
4519 val* var128 /* : MClass */;
4520 val* var130 /* : MClass */;
4521 val* var_mclass131 /* var mclass: MClass */;
4522 val* var132 /* : nullable Object */;
4523 val* var133 /* : MModule */;
4524 val* var135 /* : MModule */;
4525 val* var136 /* : POSetElement[MClass] */;
4526 val* var137 /* : Collection[Object] */;
4527 val* var_138 /* var : Collection[MClass] */;
4528 val* var139 /* : Iterator[nullable Object] */;
4529 val* var_140 /* var : Iterator[MClass] */;
4530 short int var141 /* : Bool */;
4531 val* var142 /* : nullable Object */;
4532 val* var_descendant /* var descendant: MClass */;
4533 val* var143 /* : nullable Object */;
4534 val* var148 /* : POSetBucketsColorer[MClass, PropertyLayoutElement] */;
4535 val* var149 /* : Map[Object, Set[Object]] */;
4536 val* var_meth_colorer /* var meth_colorer: POSetBucketsColorer[MClass, PropertyLayoutElement] */;
4537 val* var150 /* : Map[Object, Int] */;
4538 val* var152 /* : Map[MClass, Array[nullable MPropDef]] */;
4539 val* var154 /* : Map[PropertyLayoutElement, Int] */;
4540 val* var156 /* : Map[PropertyLayoutElement, Int] */;
4541 val* var_157 /* var : Array[MMethod] */;
4542 val* var158 /* : ArrayIterator[nullable Object] */;
4543 val* var_159 /* var : ArrayIterator[MMethod] */;
4544 short int var160 /* : Bool */;
4545 val* var161 /* : nullable Object */;
4546 val* var_mproperty /* var mproperty: MMethod */;
4547 val* var162 /* : AbstractCompilerVisitor */;
4548 long var163 /* : Int */;
4549 long var164 /* : Int */;
4550 long var166 /* : Int */;
4551 val* var_169 /* var : HashSet[MMethodDef] */;
4552 val* var170 /* : Iterator[Object] */;
4553 val* var_171 /* var : Iterator[MMethodDef] */;
4554 short int var172 /* : Bool */;
4555 val* var173 /* : nullable Object */;
4556 val* var_mpropdef174 /* var mpropdef: MMethodDef */;
4557 short int var175 /* : Bool */;
4558 val* var177 /* : AbstractCompilerVisitor */;
4559 long var178 /* : Int */;
4560 long var179 /* : Int */;
4561 long var181 /* : Int */;
4562 val* var184 /* : POSetBucketsColorer[MClass, MAttribute] */;
4563 val* var185 /* : Map[Object, Set[Object]] */;
4564 val* var_attr_colorer /* var attr_colorer: POSetBucketsColorer[MClass, MAttribute] */;
4565 val* var186 /* : Map[Object, Int] */;
4566 val* var188 /* : Map[MClass, Array[nullable MPropDef]] */;
4567 val* var190 /* : Map[MAttribute, Int] */;
4568 val* var192 /* : Map[MAttribute, Int] */;
4569 {
4570 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateCompiler> */
4571 var2 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateCompiler> */
4572 var = var2;
4573 RET_LABEL1:(void)0;
4574 }
4575 }
4576 var_rta = var;
4577 {
4578 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
4579 var5 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
4580 if (unlikely(var5 == NULL)) {
4581 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
4582 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
4583 show_backtrace(1);
4584 }
4585 var3 = var5;
4586 RET_LABEL4:(void)0;
4587 }
4588 }
4589 {
4590 var6 = model__MModule__flatten_mclass_hierarchy(var3);
4591 }
4592 var_poset = var6;
4593 var7 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
4594 {
4595 hash_collection__HashSet__from(var7, var_poset); /* Direct call hash_collection#HashSet#from on <var7:HashSet[MClass]>*/
4596 }
4597 var_mclasses = var7;
4598 var8 = NEW_coloring__POSetColorer(&type_coloring__POSetColorermodel__MClass);
4599 {
4600 ((void (*)(val*))(var8->class->vft[COLOR_kernel__Object__init]))(var8) /* init on <var8:POSetColorer[MClass]>*/;
4601 }
4602 var_colorer = var8;
4603 {
4604 coloring__POSetColorer__colorize(var_colorer, var_poset); /* Direct call coloring#POSetColorer#colorize on <var_colorer:POSetColorer[MClass]>*/
4605 }
4606 var9 = NEW_array__Array(&type_array__Arraymodel__MMethod);
4607 {
4608 ((void (*)(val*))(var9->class->vft[COLOR_kernel__Object__init]))(var9) /* init on <var9:Array[MMethod]>*/;
4609 }
4610 var_dead_methods = var9;
4611 var10 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setseparate_compiler__PropertyLayoutElement);
4612 {
4613 ((void (*)(val*))(var10->class->vft[COLOR_kernel__Object__init]))(var10) /* init on <var10:HashMap[MClass, Set[PropertyLayoutElement]]>*/;
4614 }
4615 var_mmethods = var10;
4616 var11 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setmodel__MAttribute);
4617 {
4618 ((void (*)(val*))(var11->class->vft[COLOR_kernel__Object__init]))(var11) /* init on <var11:HashMap[MClass, Set[MAttribute]]>*/;
4619 }
4620 var_mattributes = var11;
4621 var_ = var_mclasses;
4622 {
4623 var12 = hash_collection__HashSet__iterator(var_);
4624 }
4625 var_13 = var12;
4626 for(;;) {
4627 {
4628 var14 = ((short int (*)(val*))(var_13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_13) /* is_ok on <var_13:Iterator[MClass]>*/;
4629 }
4630 if (var14){
4631 {
4632 var15 = ((val* (*)(val*))(var_13->class->vft[COLOR_abstract_collection__Iterator__item]))(var_13) /* item on <var_13:Iterator[MClass]>*/;
4633 }
4634 var_mclass = var15;
4635 var16 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetseparate_compiler__PropertyLayoutElement);
4636 {
4637 ((void (*)(val*))(var16->class->vft[COLOR_kernel__Object__init]))(var16) /* init on <var16:HashSet[PropertyLayoutElement]>*/;
4638 }
4639 {
4640 hash_collection__HashMap___91d_93d_61d(var_mmethods, var_mclass, var16); /* Direct call hash_collection#HashMap#[]= on <var_mmethods:HashMap[MClass, Set[PropertyLayoutElement]]>*/
4641 }
4642 var17 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MAttribute);
4643 {
4644 ((void (*)(val*))(var17->class->vft[COLOR_kernel__Object__init]))(var17) /* init on <var17:HashSet[MAttribute]>*/;
4645 }
4646 {
4647 hash_collection__HashMap___91d_93d_61d(var_mattributes, var_mclass, var17); /* Direct call hash_collection#HashMap#[]= on <var_mattributes:HashMap[MClass, Set[MAttribute]]>*/
4648 }
4649 {
4650 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
4651 var20 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
4652 if (unlikely(var20 == NULL)) {
4653 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
4654 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
4655 show_backtrace(1);
4656 }
4657 var18 = var20;
4658 RET_LABEL19:(void)0;
4659 }
4660 }
4661 {
4662 var21 = abstract_compiler__MModule__properties(var18, var_mclass);
4663 }
4664 var_22 = var21;
4665 {
4666 var23 = ((val* (*)(val*))(var_22->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_22) /* iterator on <var_22:Set[MProperty]>*/;
4667 }
4668 var_24 = var23;
4669 for(;;) {
4670 {
4671 var25 = ((short int (*)(val*))(var_24->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_24) /* is_ok on <var_24:Iterator[MProperty]>*/;
4672 }
4673 if (var25){
4674 {
4675 var26 = ((val* (*)(val*))(var_24->class->vft[COLOR_abstract_collection__Iterator__item]))(var_24) /* item on <var_24:Iterator[MProperty]>*/;
4676 }
4677 var_mprop = var26;
4678 /* <var_mprop:MProperty> isa MMethod */
4679 cltype = type_model__MMethod.color;
4680 idtype = type_model__MMethod.id;
4681 if(cltype >= var_mprop->type->table_size) {
4682 var27 = 0;
4683 } else {
4684 var27 = var_mprop->type->type_table[cltype] == idtype;
4685 }
4686 if (var27){
4687 {
4688 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (self) on <self:SeparateCompiler> */
4689 var32 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <self:SeparateCompiler> */
4690 if (unlikely(var32 == NULL)) {
4691 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
4692 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
4693 show_backtrace(1);
4694 }
4695 var30 = var32;
4696 RET_LABEL31:(void)0;
4697 }
4698 }
4699 {
4700 { /* Inline modelbuilder#ModelBuilder#toolcontext (var30) on <var30:ModelBuilder> */
4701 var35 = var30->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var30:ModelBuilder> */
4702 if (unlikely(var35 == NULL)) {
4703 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
4704 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
4705 show_backtrace(1);
4706 }
4707 var33 = var35;
4708 RET_LABEL34:(void)0;
4709 }
4710 }
4711 {
4712 { /* Inline separate_compiler#ToolContext#opt_colo_dead_methods (var33) on <var33:ToolContext> */
4713 var38 = var33->attrs[COLOR_separate_compiler__ToolContext___opt_colo_dead_methods].val; /* _opt_colo_dead_methods on <var33:ToolContext> */
4714 if (unlikely(var38 == NULL)) {
4715 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_colo_dead_methods");
4716 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 42);
4717 show_backtrace(1);
4718 }
4719 var36 = var38;
4720 RET_LABEL37:(void)0;
4721 }
4722 }
4723 {
4724 { /* Inline opts#Option#value (var36) on <var36:OptionBool> */
4725 var41 = var36->attrs[COLOR_opts__Option___value].val; /* _value on <var36:OptionBool> */
4726 var39 = var41;
4727 RET_LABEL40:(void)0;
4728 }
4729 }
4730 var42 = ((struct instance_kernel__Bool*)var39)->value; /* autounbox from nullable Object to Bool */;
4731 var43 = !var42;
4732 var_44 = var43;
4733 if (var43){
4734 var45 = NULL;
4735 if (var_rta == NULL) {
4736 var46 = 0; /* is null */
4737 } else {
4738 var46 = 1; /* arg is null and recv is not */
4739 }
4740 if (0) {
4741 { /* Inline kernel#Object#!= (var_rta,var45) on <var_rta:nullable RapidTypeAnalysis> */
4742 var_other = var45;
4743 {
4744 var50 = ((short int (*)(val*, val*))(var_rta->class->vft[COLOR_kernel__Object___61d_61d]))(var_rta, var_other) /* == on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/;
4745 var49 = var50;
4746 }
4747 var51 = !var49;
4748 var47 = var51;
4749 goto RET_LABEL48;
4750 RET_LABEL48:(void)0;
4751 }
4752 var46 = var47;
4753 }
4754 var29 = var46;
4755 } else {
4756 var29 = var_44;
4757 }
4758 var_52 = var29;
4759 if (var29){
4760 {
4761 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_methods (var_rta) on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
4762 var55 = var_rta->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_methods].val; /* _live_methods on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
4763 if (unlikely(var55 == NULL)) {
4764 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_methods");
4765 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 75);
4766 show_backtrace(1);
4767 }
4768 var53 = var55;
4769 RET_LABEL54:(void)0;
4770 }
4771 }
4772 {
4773 var56 = hash_collection__HashSet__has(var53, var_mprop);
4774 }
4775 var57 = !var56;
4776 var28 = var57;
4777 } else {
4778 var28 = var_52;
4779 }
4780 if (var28){
4781 {
4782 array__Array__add(var_dead_methods, var_mprop); /* Direct call array#Array#add on <var_dead_methods:Array[MMethod]>*/
4783 }
4784 goto BREAK_label;
4785 } else {
4786 }
4787 {
4788 var58 = hash_collection__HashMap___91d_93d(var_mmethods, var_mclass);
4789 }
4790 {
4791 ((void (*)(val*, val*))(var58->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var58, var_mprop) /* add on <var58:nullable Object(Set[PropertyLayoutElement])>*/;
4792 }
4793 } else {
4794 /* <var_mprop:MProperty> isa MAttribute */
4795 cltype60 = type_model__MAttribute.color;
4796 idtype61 = type_model__MAttribute.id;
4797 if(cltype60 >= var_mprop->type->table_size) {
4798 var59 = 0;
4799 } else {
4800 var59 = var_mprop->type->type_table[cltype60] == idtype61;
4801 }
4802 if (var59){
4803 {
4804 var62 = hash_collection__HashMap___91d_93d(var_mattributes, var_mclass);
4805 }
4806 {
4807 ((void (*)(val*, val*))(var62->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var62, var_mprop) /* add on <var62:nullable Object(Set[MAttribute])>*/;
4808 }
4809 } else {
4810 }
4811 }
4812 BREAK_label: (void)0;
4813 {
4814 ((void (*)(val*))(var_24->class->vft[COLOR_abstract_collection__Iterator__next]))(var_24) /* next on <var_24:Iterator[MProperty]>*/;
4815 }
4816 } else {
4817 goto BREAK_label63;
4818 }
4819 }
4820 BREAK_label63: (void)0;
4821 {
4822 { /* Inline abstract_collection#Iterator#finish (var_24) on <var_24:Iterator[MProperty]> */
4823 RET_LABEL64:(void)0;
4824 }
4825 }
4826 {
4827 ((void (*)(val*))(var_13->class->vft[COLOR_abstract_collection__Iterator__next]))(var_13) /* next on <var_13:Iterator[MClass]>*/;
4828 }
4829 } else {
4830 goto BREAK_label65;
4831 }
4832 }
4833 BREAK_label65: (void)0;
4834 {
4835 { /* Inline abstract_collection#Iterator#finish (var_13) on <var_13:Iterator[MClass]> */
4836 RET_LABEL66:(void)0;
4837 }
4838 }
4839 var67 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MMethodDef);
4840 {
4841 ((void (*)(val*))(var67->class->vft[COLOR_kernel__Object__init]))(var67) /* init on <var67:HashSet[MMethodDef]>*/;
4842 }
4843 var_all_super_calls = var67;
4844 {
4845 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
4846 var70 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
4847 if (unlikely(var70 == NULL)) {
4848 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
4849 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
4850 show_backtrace(1);
4851 }
4852 var68 = var70;
4853 RET_LABEL69:(void)0;
4854 }
4855 }
4856 {
4857 { /* Inline mmodule#MModule#in_importation (var68) on <var68:MModule> */
4858 var73 = var68->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var68:MModule> */
4859 if (unlikely(var73 == NULL)) {
4860 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
4861 PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 93);
4862 show_backtrace(1);
4863 }
4864 var71 = var73;
4865 RET_LABEL72:(void)0;
4866 }
4867 }
4868 {
4869 var74 = poset__POSetElement__greaters(var71);
4870 }
4871 var_75 = var74;
4872 {
4873 var76 = ((val* (*)(val*))(var_75->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_75) /* iterator on <var_75:Collection[MModule]>*/;
4874 }
4875 var_77 = var76;
4876 for(;;) {
4877 {
4878 var78 = ((short int (*)(val*))(var_77->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_77) /* is_ok on <var_77:Iterator[MModule]>*/;
4879 }
4880 if (var78){
4881 {
4882 var79 = ((val* (*)(val*))(var_77->class->vft[COLOR_abstract_collection__Iterator__item]))(var_77) /* item on <var_77:Iterator[MModule]>*/;
4883 }
4884 var_mmodule = var79;
4885 {
4886 { /* Inline model#MModule#mclassdefs (var_mmodule) on <var_mmodule:MModule> */
4887 var82 = var_mmodule->attrs[COLOR_model__MModule___mclassdefs].val; /* _mclassdefs on <var_mmodule:MModule> */
4888 if (unlikely(var82 == NULL)) {
4889 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdefs");
4890 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 139);
4891 show_backtrace(1);
4892 }
4893 var80 = var82;
4894 RET_LABEL81:(void)0;
4895 }
4896 }
4897 var_83 = var80;
4898 {
4899 var84 = array__AbstractArrayRead__iterator(var_83);
4900 }
4901 var_85 = var84;
4902 for(;;) {
4903 {
4904 var86 = array__ArrayIterator__is_ok(var_85);
4905 }
4906 if (var86){
4907 {
4908 var87 = array__ArrayIterator__item(var_85);
4909 }
4910 var_mclassdef = var87;
4911 {
4912 { /* Inline model#MClassDef#mpropdefs (var_mclassdef) on <var_mclassdef:MClassDef> */
4913 var90 = var_mclassdef->attrs[COLOR_model__MClassDef___mpropdefs].val; /* _mpropdefs on <var_mclassdef:MClassDef> */
4914 if (unlikely(var90 == NULL)) {
4915 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
4916 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 591);
4917 show_backtrace(1);
4918 }
4919 var88 = var90;
4920 RET_LABEL89:(void)0;
4921 }
4922 }
4923 var_91 = var88;
4924 {
4925 var92 = array__AbstractArrayRead__iterator(var_91);
4926 }
4927 var_93 = var92;
4928 for(;;) {
4929 {
4930 var94 = array__ArrayIterator__is_ok(var_93);
4931 }
4932 if (var94){
4933 {
4934 var95 = array__ArrayIterator__item(var_93);
4935 }
4936 var_mpropdef = var95;
4937 /* <var_mpropdef:MPropDef> isa MMethodDef */
4938 cltype97 = type_model__MMethodDef.color;
4939 idtype98 = type_model__MMethodDef.id;
4940 if(cltype97 >= var_mpropdef->type->table_size) {
4941 var96 = 0;
4942 } else {
4943 var96 = var_mpropdef->type->type_table[cltype97] == idtype98;
4944 }
4945 var99 = !var96;
4946 if (var99){
4947 goto BREAK_label100;
4948 } else {
4949 }
4950 {
4951 { /* Inline modelize_property#MPropDef#has_supercall (var_mpropdef) on <var_mpropdef:MPropDef(MMethodDef)> */
4952 var103 = var_mpropdef->attrs[COLOR_modelize_property__MPropDef___has_supercall].s; /* _has_supercall on <var_mpropdef:MPropDef(MMethodDef)> */
4953 var101 = var103;
4954 RET_LABEL102:(void)0;
4955 }
4956 }
4957 if (var101){
4958 {
4959 hash_collection__HashSet__add(var_all_super_calls, var_mpropdef); /* Direct call hash_collection#HashSet#add on <var_all_super_calls:HashSet[MMethodDef]>*/
4960 }
4961 } else {
4962 }
4963 BREAK_label100: (void)0;
4964 {
4965 array__ArrayIterator__next(var_93); /* Direct call array#ArrayIterator#next on <var_93:ArrayIterator[MPropDef]>*/
4966 }
4967 } else {
4968 goto BREAK_label104;
4969 }
4970 }
4971 BREAK_label104: (void)0;
4972 {
4973 { /* Inline abstract_collection#Iterator#finish (var_93) on <var_93:ArrayIterator[MPropDef]> */
4974 RET_LABEL105:(void)0;
4975 }
4976 }
4977 {
4978 array__ArrayIterator__next(var_85); /* Direct call array#ArrayIterator#next on <var_85:ArrayIterator[MClassDef]>*/
4979 }
4980 } else {
4981 goto BREAK_label106;
4982 }
4983 }
4984 BREAK_label106: (void)0;
4985 {
4986 { /* Inline abstract_collection#Iterator#finish (var_85) on <var_85:ArrayIterator[MClassDef]> */
4987 RET_LABEL107:(void)0;
4988 }
4989 }
4990 {
4991 ((void (*)(val*))(var_77->class->vft[COLOR_abstract_collection__Iterator__next]))(var_77) /* next on <var_77:Iterator[MModule]>*/;
4992 }
4993 } else {
4994 goto BREAK_label108;
4995 }
4996 }
4997 BREAK_label108: (void)0;
4998 {
4999 { /* Inline abstract_collection#Iterator#finish (var_77) on <var_77:Iterator[MModule]> */
5000 RET_LABEL109:(void)0;
5001 }
5002 }
5003 var110 = NULL;
5004 if (var_rta == NULL) {
5005 var111 = 0; /* is null */
5006 } else {
5007 var111 = 1; /* arg is null and recv is not */
5008 }
5009 if (0) {
5010 { /* Inline kernel#Object#!= (var_rta,var110) on <var_rta:nullable RapidTypeAnalysis> */
5011 var_other = var110;
5012 {
5013 var115 = ((short int (*)(val*, val*))(var_rta->class->vft[COLOR_kernel__Object___61d_61d]))(var_rta, var_other) /* == on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/;
5014 var114 = var115;
5015 }
5016 var116 = !var114;
5017 var112 = var116;
5018 goto RET_LABEL113;
5019 RET_LABEL113:(void)0;
5020 }
5021 var111 = var112;
5022 }
5023 if (var111){
5024 {
5025 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_super_sends (var_rta) on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
5026 var119 = var_rta->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_super_sends].val; /* _live_super_sends on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
5027 if (unlikely(var119 == NULL)) {
5028 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_super_sends");
5029 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 108);
5030 show_backtrace(1);
5031 }
5032 var117 = var119;
5033 RET_LABEL118:(void)0;
5034 }
5035 }
5036 var_super_calls = var117;
5037 } else {
5038 var_super_calls = var_all_super_calls;
5039 }
5040 var_120 = var_super_calls;
5041 {
5042 var121 = hash_collection__HashSet__iterator(var_120);
5043 }
5044 var_122 = var121;
5045 for(;;) {
5046 {
5047 var123 = ((short int (*)(val*))(var_122->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_122) /* is_ok on <var_122:Iterator[MMethodDef]>*/;
5048 }
5049 if (var123){
5050 {
5051 var124 = ((val* (*)(val*))(var_122->class->vft[COLOR_abstract_collection__Iterator__item]))(var_122) /* item on <var_122:Iterator[MMethodDef]>*/;
5052 }
5053 var_mmethoddef = var124;
5054 {
5055 { /* Inline model#MPropDef#mclassdef (var_mmethoddef) on <var_mmethoddef:MMethodDef> */
5056 var127 = var_mmethoddef->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_mmethoddef:MMethodDef> */
5057 if (unlikely(var127 == NULL)) {
5058 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
5059 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
5060 show_backtrace(1);
5061 }
5062 var125 = var127;
5063 RET_LABEL126:(void)0;
5064 }
5065 }
5066 {
5067 { /* Inline model#MClassDef#mclass (var125) on <var125:MClassDef> */
5068 var130 = var125->attrs[COLOR_model__MClassDef___mclass].val; /* _mclass on <var125:MClassDef> */
5069 if (unlikely(var130 == NULL)) {
5070 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
5071 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 492);
5072 show_backtrace(1);
5073 }
5074 var128 = var130;
5075 RET_LABEL129:(void)0;
5076 }
5077 }
5078 var_mclass131 = var128;
5079 {
5080 var132 = hash_collection__HashMap___91d_93d(var_mmethods, var_mclass131);
5081 }
5082 {
5083 ((void (*)(val*, val*))(var132->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var132, var_mmethoddef) /* add on <var132:nullable Object(Set[PropertyLayoutElement])>*/;
5084 }
5085 {
5086 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
5087 var135 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
5088 if (unlikely(var135 == NULL)) {
5089 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
5090 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
5091 show_backtrace(1);
5092 }
5093 var133 = var135;
5094 RET_LABEL134:(void)0;
5095 }
5096 }
5097 {
5098 var136 = model__MClass__in_hierarchy(var_mclass131, var133);
5099 }
5100 {
5101 var137 = poset__POSetElement__smallers(var136);
5102 }
5103 var_138 = var137;
5104 {
5105 var139 = ((val* (*)(val*))(var_138->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_138) /* iterator on <var_138:Collection[MClass]>*/;
5106 }
5107 var_140 = var139;
5108 for(;;) {
5109 {
5110 var141 = ((short int (*)(val*))(var_140->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_140) /* is_ok on <var_140:Iterator[MClass]>*/;
5111 }
5112 if (var141){
5113 {
5114 var142 = ((val* (*)(val*))(var_140->class->vft[COLOR_abstract_collection__Iterator__item]))(var_140) /* item on <var_140:Iterator[MClass]>*/;
5115 }
5116 var_descendant = var142;
5117 {
5118 var143 = hash_collection__HashMap___91d_93d(var_mmethods, var_descendant);
5119 }
5120 {
5121 ((void (*)(val*, val*))(var143->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var143, var_mmethoddef) /* add on <var143:nullable Object(Set[PropertyLayoutElement])>*/;
5122 }
5123 {
5124 ((void (*)(val*))(var_140->class->vft[COLOR_abstract_collection__Iterator__next]))(var_140) /* next on <var_140:Iterator[MClass]>*/;
5125 }
5126 } else {
5127 goto BREAK_label144;
5128 }
5129 }
5130 BREAK_label144: (void)0;
5131 {
5132 { /* Inline abstract_collection#Iterator#finish (var_140) on <var_140:Iterator[MClass]> */
5133 RET_LABEL145:(void)0;
5134 }
5135 }
5136 {
5137 ((void (*)(val*))(var_122->class->vft[COLOR_abstract_collection__Iterator__next]))(var_122) /* next on <var_122:Iterator[MMethodDef]>*/;
5138 }
5139 } else {
5140 goto BREAK_label146;
5141 }
5142 }
5143 BREAK_label146: (void)0;
5144 {
5145 { /* Inline abstract_collection#Iterator#finish (var_122) on <var_122:Iterator[MMethodDef]> */
5146 RET_LABEL147:(void)0;
5147 }
5148 }
5149 var148 = NEW_coloring__POSetBucketsColorer(&type_coloring__POSetBucketsColorermodel__MClassseparate_compiler__PropertyLayoutElement);
5150 {
5151 var149 = coloring__POSetColorer__conflicts(var_colorer);
5152 }
5153 {
5154 coloring__POSetBucketsColorer__init(var148, var_poset, var149); /* Direct call coloring#POSetBucketsColorer#init on <var148:POSetBucketsColorer[MClass, PropertyLayoutElement]>*/
5155 }
5156 var_meth_colorer = var148;
5157 {
5158 var150 = coloring__POSetBucketsColorer__colorize(var_meth_colorer, var_mmethods);
5159 }
5160 {
5161 { /* Inline separate_compiler#SeparateCompiler#method_colors= (self,var150) on <self:SeparateCompiler> */
5162 self->attrs[COLOR_separate_compiler__SeparateCompiler___method_colors].val = var150; /* _method_colors on <self:SeparateCompiler> */
5163 RET_LABEL151:(void)0;
5164 }
5165 }
5166 {
5167 var152 = separate_compiler__SeparateCompiler__build_method_tables(self, var_mclasses, var_super_calls);
5168 }
5169 {
5170 { /* Inline separate_compiler#SeparateCompiler#method_tables= (self,var152) on <self:SeparateCompiler> */
5171 self->attrs[COLOR_separate_compiler__SeparateCompiler___method_tables].val = var152; /* _method_tables on <self:SeparateCompiler> */
5172 RET_LABEL153:(void)0;
5173 }
5174 }
5175 {
5176 { /* Inline separate_compiler#SeparateCompiler#method_colors (self) on <self:SeparateCompiler> */
5177 var156 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_colors].val; /* _method_colors on <self:SeparateCompiler> */
5178 if (unlikely(var156 == NULL)) {
5179 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_colors");
5180 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 162);
5181 show_backtrace(1);
5182 }
5183 var154 = var156;
5184 RET_LABEL155:(void)0;
5185 }
5186 }
5187 {
5188 separate_compiler__SeparateCompiler__compile_color_consts(self, var154); /* Direct call separate_compiler#SeparateCompiler#compile_color_consts on <self:SeparateCompiler>*/
5189 }
5190 var_157 = var_dead_methods;
5191 {
5192 var158 = array__AbstractArrayRead__iterator(var_157);
5193 }
5194 var_159 = var158;
5195 for(;;) {
5196 {
5197 var160 = array__ArrayIterator__is_ok(var_159);
5198 }
5199 if (var160){
5200 {
5201 var161 = array__ArrayIterator__item(var_159);
5202 }
5203 var_mproperty = var161;
5204 {
5205 var162 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateCompiler>*/;
5206 }
5207 var163 = 1;
5208 {
5209 { /* Inline kernel#Int#unary - (var163) on <var163:Int> */
5210 var166 = -var163;
5211 var164 = var166;
5212 goto RET_LABEL165;
5213 RET_LABEL165:(void)0;
5214 }
5215 }
5216 {
5217 separate_compiler__SeparateCompiler__compile_color_const(self, var162, var_mproperty, var164); /* Direct call separate_compiler#SeparateCompiler#compile_color_const on <self:SeparateCompiler>*/
5218 }
5219 {
5220 array__ArrayIterator__next(var_159); /* Direct call array#ArrayIterator#next on <var_159:ArrayIterator[MMethod]>*/
5221 }
5222 } else {
5223 goto BREAK_label167;
5224 }
5225 }
5226 BREAK_label167: (void)0;
5227 {
5228 { /* Inline abstract_collection#Iterator#finish (var_159) on <var_159:ArrayIterator[MMethod]> */
5229 RET_LABEL168:(void)0;
5230 }
5231 }
5232 var_169 = var_all_super_calls;
5233 {
5234 var170 = hash_collection__HashSet__iterator(var_169);
5235 }
5236 var_171 = var170;
5237 for(;;) {
5238 {
5239 var172 = ((short int (*)(val*))(var_171->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_171) /* is_ok on <var_171:Iterator[MMethodDef]>*/;
5240 }
5241 if (var172){
5242 {
5243 var173 = ((val* (*)(val*))(var_171->class->vft[COLOR_abstract_collection__Iterator__item]))(var_171) /* item on <var_171:Iterator[MMethodDef]>*/;
5244 }
5245 var_mpropdef174 = var173;
5246 {
5247 var175 = hash_collection__HashSet__has(var_super_calls, var_mpropdef174);
5248 }
5249 if (var175){
5250 goto BREAK_label176;
5251 } else {
5252 }
5253 {
5254 var177 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateCompiler>*/;
5255 }
5256 var178 = 1;
5257 {
5258 { /* Inline kernel#Int#unary - (var178) on <var178:Int> */
5259 var181 = -var178;
5260 var179 = var181;
5261 goto RET_LABEL180;
5262 RET_LABEL180:(void)0;
5263 }
5264 }
5265 {
5266 separate_compiler__SeparateCompiler__compile_color_const(self, var177, var_mpropdef174, var179); /* Direct call separate_compiler#SeparateCompiler#compile_color_const on <self:SeparateCompiler>*/
5267 }
5268 BREAK_label176: (void)0;
5269 {
5270 ((void (*)(val*))(var_171->class->vft[COLOR_abstract_collection__Iterator__next]))(var_171) /* next on <var_171:Iterator[MMethodDef]>*/;
5271 }
5272 } else {
5273 goto BREAK_label182;
5274 }
5275 }
5276 BREAK_label182: (void)0;
5277 {
5278 { /* Inline abstract_collection#Iterator#finish (var_171) on <var_171:Iterator[MMethodDef]> */
5279 RET_LABEL183:(void)0;
5280 }
5281 }
5282 var184 = NEW_coloring__POSetBucketsColorer(&type_coloring__POSetBucketsColorermodel__MClassmodel__MAttribute);
5283 {
5284 var185 = coloring__POSetColorer__conflicts(var_colorer);
5285 }
5286 {
5287 coloring__POSetBucketsColorer__init(var184, var_poset, var185); /* Direct call coloring#POSetBucketsColorer#init on <var184:POSetBucketsColorer[MClass, MAttribute]>*/
5288 }
5289 var_attr_colorer = var184;
5290 {
5291 var186 = coloring__POSetBucketsColorer__colorize(var_attr_colorer, var_mattributes);
5292 }
5293 {
5294 { /* Inline separate_compiler#SeparateCompiler#attr_colors= (self,var186) on <self:SeparateCompiler> */
5295 self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_colors].val = var186; /* _attr_colors on <self:SeparateCompiler> */
5296 RET_LABEL187:(void)0;
5297 }
5298 }
5299 {
5300 var188 = separate_compiler__SeparateCompiler__build_attr_tables(self, var_mclasses);
5301 }
5302 {
5303 { /* Inline separate_compiler#SeparateCompiler#attr_tables= (self,var188) on <self:SeparateCompiler> */
5304 self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_tables].val = var188; /* _attr_tables on <self:SeparateCompiler> */
5305 RET_LABEL189:(void)0;
5306 }
5307 }
5308 {
5309 { /* Inline separate_compiler#SeparateCompiler#attr_colors (self) on <self:SeparateCompiler> */
5310 var192 = self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_colors].val; /* _attr_colors on <self:SeparateCompiler> */
5311 if (unlikely(var192 == NULL)) {
5312 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_colors");
5313 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 163);
5314 show_backtrace(1);
5315 }
5316 var190 = var192;
5317 RET_LABEL191:(void)0;
5318 }
5319 }
5320 {
5321 separate_compiler__SeparateCompiler__compile_color_consts(self, var190); /* Direct call separate_compiler#SeparateCompiler#compile_color_consts on <self:SeparateCompiler>*/
5322 }
5323 RET_LABEL:;
5324 }
5325 /* method separate_compiler#SeparateCompiler#do_property_coloring for (self: Object) */
5326 void VIRTUAL_separate_compiler__SeparateCompiler__do_property_coloring(val* self) {
5327 separate_compiler__SeparateCompiler__do_property_coloring(self); /* Direct call separate_compiler#SeparateCompiler#do_property_coloring on <self:Object(SeparateCompiler)>*/
5328 RET_LABEL:;
5329 }
5330 /* method separate_compiler#SeparateCompiler#build_method_tables for (self: SeparateCompiler, Set[MClass], Set[MMethodDef]): Map[MClass, Array[nullable MPropDef]] */
5331 val* separate_compiler__SeparateCompiler__build_method_tables(val* self, val* p0, val* p1) {
5332 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
5333 val* var_mclasses /* var mclasses: Set[MClass] */;
5334 val* var_super_calls /* var super_calls: Set[MMethodDef] */;
5335 val* var1 /* : HashMap[MClass, Array[nullable MPropDef]] */;
5336 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
5337 val* var_ /* var : Set[MClass] */;
5338 val* var2 /* : Iterator[nullable Object] */;
5339 val* var_3 /* var : Iterator[MClass] */;
5340 short int var4 /* : Bool */;
5341 val* var5 /* : nullable Object */;
5342 val* var_mclass /* var mclass: MClass */;
5343 val* var6 /* : Array[nullable MPropDef] */;
5344 val* var_table /* var table: Array[nullable MPropDef] */;
5345 val* var7 /* : MModule */;
5346 val* var9 /* : MModule */;
5347 val* var10 /* : Set[MProperty] */;
5348 val* var_mproperties /* var mproperties: Set[MProperty] */;
5349 val* var11 /* : MClassDef */;
5350 val* var13 /* : MClassDef */;
5351 val* var14 /* : MClassType */;
5352 val* var16 /* : MClassType */;
5353 val* var_mtype /* var mtype: MClassType */;
5354 val* var_17 /* var : Set[MProperty] */;
5355 val* var18 /* : Iterator[nullable Object] */;
5356 val* var_19 /* var : Iterator[MProperty] */;
5357 short int var20 /* : Bool */;
5358 val* var21 /* : nullable Object */;
5359 val* var_mproperty /* var mproperty: MProperty */;
5360 short int var22 /* : Bool */;
5361 int cltype;
5362 int idtype;
5363 short int var23 /* : Bool */;
5364 val* var24 /* : Map[PropertyLayoutElement, Int] */;
5365 val* var26 /* : Map[PropertyLayoutElement, Int] */;
5366 short int var27 /* : Bool */;
5367 short int var28 /* : Bool */;
5368 val* var29 /* : Map[PropertyLayoutElement, Int] */;
5369 val* var31 /* : Map[PropertyLayoutElement, Int] */;
5370 val* var32 /* : nullable Object */;
5371 long var33 /* : Int */;
5372 long var_color /* var color: Int */;
5373 long var34 /* : Int */;
5374 long var36 /* : Int */;
5375 short int var37 /* : Bool */;
5376 short int var39 /* : Bool */;
5377 int cltype40;
5378 int idtype41;
5379 const char* var_class_name;
5380 short int var42 /* : Bool */;
5381 long var43 /* : Int */;
5382 long var45 /* : Int */;
5383 long var_i /* var i: Int */;
5384 long var_46 /* var : Int */;
5385 short int var47 /* : Bool */;
5386 short int var49 /* : Bool */;
5387 int cltype50;
5388 int idtype51;
5389 const char* var_class_name52;
5390 short int var53 /* : Bool */;
5391 val* var54 /* : null */;
5392 long var55 /* : Int */;
5393 long var56 /* : Int */;
5394 val* var58 /* : MModule */;
5395 val* var60 /* : MModule */;
5396 val* var61 /* : MPropDef */;
5397 val* var_64 /* var : Set[MMethodDef] */;
5398 val* var65 /* : Iterator[nullable Object] */;
5399 val* var_66 /* var : Iterator[MMethodDef] */;
5400 short int var67 /* : Bool */;
5401 val* var68 /* : nullable Object */;
5402 val* var_supercall /* var supercall: MMethodDef */;
5403 val* var69 /* : MModule */;
5404 val* var71 /* : MModule */;
5405 val* var72 /* : Set[MClassDef] */;
5406 val* var73 /* : MClassDef */;
5407 val* var75 /* : MClassDef */;
5408 short int var76 /* : Bool */;
5409 short int var77 /* : Bool */;
5410 val* var79 /* : Map[PropertyLayoutElement, Int] */;
5411 val* var81 /* : Map[PropertyLayoutElement, Int] */;
5412 val* var82 /* : nullable Object */;
5413 long var83 /* : Int */;
5414 long var_color84 /* var color: Int */;
5415 long var85 /* : Int */;
5416 long var87 /* : Int */;
5417 short int var88 /* : Bool */;
5418 short int var90 /* : Bool */;
5419 int cltype91;
5420 int idtype92;
5421 const char* var_class_name93;
5422 short int var94 /* : Bool */;
5423 long var95 /* : Int */;
5424 long var97 /* : Int */;
5425 long var_i98 /* var i: Int */;
5426 long var_99 /* var : Int */;
5427 short int var100 /* : Bool */;
5428 short int var102 /* : Bool */;
5429 int cltype103;
5430 int idtype104;
5431 const char* var_class_name105;
5432 short int var106 /* : Bool */;
5433 val* var107 /* : null */;
5434 long var108 /* : Int */;
5435 long var109 /* : Int */;
5436 val* var111 /* : MModule */;
5437 val* var113 /* : MModule */;
5438 val* var114 /* : MPropDef */;
5439 val* var_mmethoddef /* var mmethoddef: MMethodDef */;
5440 var_mclasses = p0;
5441 var_super_calls = p1;
5442 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
5443 {
5444 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MPropDef]]>*/;
5445 }
5446 var_tables = var1;
5447 var_ = var_mclasses;
5448 {
5449 var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[MClass]>*/;
5450 }
5451 var_3 = var2;
5452 for(;;) {
5453 {
5454 var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[MClass]>*/;
5455 }
5456 if (var4){
5457 {
5458 var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[MClass]>*/;
5459 }
5460 var_mclass = var5;
5461 var6 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
5462 {
5463 ((void (*)(val*))(var6->class->vft[COLOR_kernel__Object__init]))(var6) /* init on <var6:Array[nullable MPropDef]>*/;
5464 }
5465 var_table = var6;
5466 {
5467 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]]>*/
5468 }
5469 {
5470 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
5471 var9 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
5472 if (unlikely(var9 == NULL)) {
5473 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
5474 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
5475 show_backtrace(1);
5476 }
5477 var7 = var9;
5478 RET_LABEL8:(void)0;
5479 }
5480 }
5481 {
5482 var10 = abstract_compiler__MModule__properties(var7, var_mclass);
5483 }
5484 var_mproperties = var10;
5485 {
5486 { /* Inline model#MClass#intro (var_mclass) on <var_mclass:MClass> */
5487 var13 = var_mclass->attrs[COLOR_model__MClass___intro].val; /* _intro on <var_mclass:MClass> */
5488 if (unlikely(var13 == NULL)) {
5489 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
5490 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 420);
5491 show_backtrace(1);
5492 }
5493 var11 = var13;
5494 RET_LABEL12:(void)0;
5495 }
5496 }
5497 {
5498 { /* Inline model#MClassDef#bound_mtype (var11) on <var11:MClassDef> */
5499 var16 = var11->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var11:MClassDef> */
5500 if (unlikely(var16 == NULL)) {
5501 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
5502 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
5503 show_backtrace(1);
5504 }
5505 var14 = var16;
5506 RET_LABEL15:(void)0;
5507 }
5508 }
5509 var_mtype = var14;
5510 var_17 = var_mproperties;
5511 {
5512 var18 = ((val* (*)(val*))(var_17->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_17) /* iterator on <var_17:Set[MProperty]>*/;
5513 }
5514 var_19 = var18;
5515 for(;;) {
5516 {
5517 var20 = ((short int (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_19) /* is_ok on <var_19:Iterator[MProperty]>*/;
5518 }
5519 if (var20){
5520 {
5521 var21 = ((val* (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__item]))(var_19) /* item on <var_19:Iterator[MProperty]>*/;
5522 }
5523 var_mproperty = var21;
5524 /* <var_mproperty:MProperty> isa MMethod */
5525 cltype = type_model__MMethod.color;
5526 idtype = type_model__MMethod.id;
5527 if(cltype >= var_mproperty->type->table_size) {
5528 var22 = 0;
5529 } else {
5530 var22 = var_mproperty->type->type_table[cltype] == idtype;
5531 }
5532 var23 = !var22;
5533 if (var23){
5534 goto BREAK_label;
5535 } else {
5536 }
5537 {
5538 { /* Inline separate_compiler#SeparateCompiler#method_colors (self) on <self:SeparateCompiler> */
5539 var26 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_colors].val; /* _method_colors on <self:SeparateCompiler> */
5540 if (unlikely(var26 == NULL)) {
5541 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_colors");
5542 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 162);
5543 show_backtrace(1);
5544 }
5545 var24 = var26;
5546 RET_LABEL25:(void)0;
5547 }
5548 }
5549 {
5550 var27 = abstract_collection__MapRead__has_key(var24, var_mproperty);
5551 }
5552 var28 = !var27;
5553 if (var28){
5554 goto BREAK_label;
5555 } else {
5556 }
5557 {
5558 { /* Inline separate_compiler#SeparateCompiler#method_colors (self) on <self:SeparateCompiler> */
5559 var31 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_colors].val; /* _method_colors on <self:SeparateCompiler> */
5560 if (unlikely(var31 == NULL)) {
5561 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_colors");
5562 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 162);
5563 show_backtrace(1);
5564 }
5565 var29 = var31;
5566 RET_LABEL30:(void)0;
5567 }
5568 }
5569 {
5570 var32 = ((val* (*)(val*, val*))(var29->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var29, var_mproperty) /* [] on <var29:Map[PropertyLayoutElement, Int]>*/;
5571 }
5572 var33 = ((struct instance_kernel__Int*)var32)->value; /* autounbox from nullable Object to Int */;
5573 var_color = var33;
5574 {
5575 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
5576 var36 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
5577 var34 = var36;
5578 RET_LABEL35:(void)0;
5579 }
5580 }
5581 {
5582 { /* Inline kernel#Int#<= (var34,var_color) on <var34:Int> */
5583 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
5584 /* <var_color:Int> isa OTHER */
5585 var39 = 1; /* easy <var_color:Int> isa OTHER*/
5586 if (unlikely(!var39)) {
5587 var_class_name = type_kernel__Int.name;
5588 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
5589 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
5590 show_backtrace(1);
5591 }
5592 var42 = var34 <= var_color;
5593 var37 = var42;
5594 goto RET_LABEL38;
5595 RET_LABEL38:(void)0;
5596 }
5597 }
5598 if (var37){
5599 {
5600 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
5601 var45 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
5602 var43 = var45;
5603 RET_LABEL44:(void)0;
5604 }
5605 }
5606 var_i = var43;
5607 var_46 = var_color;
5608 for(;;) {
5609 {
5610 { /* Inline kernel#Int#< (var_i,var_46) on <var_i:Int> */
5611 /* Covariant cast for argument 0 (i) <var_46:Int> isa OTHER */
5612 /* <var_46:Int> isa OTHER */
5613 var49 = 1; /* easy <var_46:Int> isa OTHER*/
5614 if (unlikely(!var49)) {
5615 var_class_name52 = type_kernel__Int.name;
5616 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name52);
5617 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
5618 show_backtrace(1);
5619 }
5620 var53 = var_i < var_46;
5621 var47 = var53;
5622 goto RET_LABEL48;
5623 RET_LABEL48:(void)0;
5624 }
5625 }
5626 if (var47){
5627 var54 = NULL;
5628 {
5629 array__Array___91d_93d_61d(var_table, var_i, var54); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
5630 }
5631 var55 = 1;
5632 {
5633 var56 = kernel__Int__successor(var_i, var55);
5634 }
5635 var_i = var56;
5636 } else {
5637 goto BREAK_label57;
5638 }
5639 }
5640 BREAK_label57: (void)0;
5641 } else {
5642 }
5643 {
5644 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
5645 var60 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
5646 if (unlikely(var60 == NULL)) {
5647 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
5648 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
5649 show_backtrace(1);
5650 }
5651 var58 = var60;
5652 RET_LABEL59:(void)0;
5653 }
5654 }
5655 {
5656 var61 = model__MProperty__lookup_first_definition(var_mproperty, var58, var_mtype);
5657 }
5658 {
5659 array__Array___91d_93d_61d(var_table, var_color, var61); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
5660 }
5661 BREAK_label: (void)0;
5662 {
5663 ((void (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__next]))(var_19) /* next on <var_19:Iterator[MProperty]>*/;
5664 }
5665 } else {
5666 goto BREAK_label62;
5667 }
5668 }
5669 BREAK_label62: (void)0;
5670 {
5671 { /* Inline abstract_collection#Iterator#finish (var_19) on <var_19:Iterator[MProperty]> */
5672 RET_LABEL63:(void)0;
5673 }
5674 }
5675 var_64 = var_super_calls;
5676 {
5677 var65 = ((val* (*)(val*))(var_64->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_64) /* iterator on <var_64:Set[MMethodDef]>*/;
5678 }
5679 var_66 = var65;
5680 for(;;) {
5681 {
5682 var67 = ((short int (*)(val*))(var_66->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_66) /* is_ok on <var_66:Iterator[MMethodDef]>*/;
5683 }
5684 if (var67){
5685 {
5686 var68 = ((val* (*)(val*))(var_66->class->vft[COLOR_abstract_collection__Iterator__item]))(var_66) /* item on <var_66:Iterator[MMethodDef]>*/;
5687 }
5688 var_supercall = var68;
5689 {
5690 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
5691 var71 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
5692 if (unlikely(var71 == NULL)) {
5693 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
5694 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
5695 show_backtrace(1);
5696 }
5697 var69 = var71;
5698 RET_LABEL70:(void)0;
5699 }
5700 }
5701 {
5702 var72 = model__MClassType__collect_mclassdefs(var_mtype, var69);
5703 }
5704 {
5705 { /* Inline model#MPropDef#mclassdef (var_supercall) on <var_supercall:MMethodDef> */
5706 var75 = var_supercall->attrs[COLOR_model__MPropDef___mclassdef].val; /* _mclassdef on <var_supercall:MMethodDef> */
5707 if (unlikely(var75 == NULL)) {
5708 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
5709 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1895);
5710 show_backtrace(1);
5711 }
5712 var73 = var75;
5713 RET_LABEL74:(void)0;
5714 }
5715 }
5716 {
5717 var76 = ((short int (*)(val*, val*))(var72->class->vft[COLOR_abstract_collection__Collection__has]))(var72, var73) /* has on <var72:Set[MClassDef]>*/;
5718 }
5719 var77 = !var76;
5720 if (var77){
5721 goto BREAK_label78;
5722 } else {
5723 }
5724 {
5725 { /* Inline separate_compiler#SeparateCompiler#method_colors (self) on <self:SeparateCompiler> */
5726 var81 = self->attrs[COLOR_separate_compiler__SeparateCompiler___method_colors].val; /* _method_colors on <self:SeparateCompiler> */
5727 if (unlikely(var81 == NULL)) {
5728 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_colors");
5729 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 162);
5730 show_backtrace(1);
5731 }
5732 var79 = var81;
5733 RET_LABEL80:(void)0;
5734 }
5735 }
5736 {
5737 var82 = ((val* (*)(val*, val*))(var79->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var79, var_supercall) /* [] on <var79:Map[PropertyLayoutElement, Int]>*/;
5738 }
5739 var83 = ((struct instance_kernel__Int*)var82)->value; /* autounbox from nullable Object to Int */;
5740 var_color84 = var83;
5741 {
5742 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
5743 var87 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
5744 var85 = var87;
5745 RET_LABEL86:(void)0;
5746 }
5747 }
5748 {
5749 { /* Inline kernel#Int#<= (var85,var_color84) on <var85:Int> */
5750 /* Covariant cast for argument 0 (i) <var_color84:Int> isa OTHER */
5751 /* <var_color84:Int> isa OTHER */
5752 var90 = 1; /* easy <var_color84:Int> isa OTHER*/
5753 if (unlikely(!var90)) {
5754 var_class_name93 = type_kernel__Int.name;
5755 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name93);
5756 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
5757 show_backtrace(1);
5758 }
5759 var94 = var85 <= var_color84;
5760 var88 = var94;
5761 goto RET_LABEL89;
5762 RET_LABEL89:(void)0;
5763 }
5764 }
5765 if (var88){
5766 {
5767 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
5768 var97 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
5769 var95 = var97;
5770 RET_LABEL96:(void)0;
5771 }
5772 }
5773 var_i98 = var95;
5774 var_99 = var_color84;
5775 for(;;) {
5776 {
5777 { /* Inline kernel#Int#< (var_i98,var_99) on <var_i98:Int> */
5778 /* Covariant cast for argument 0 (i) <var_99:Int> isa OTHER */
5779 /* <var_99:Int> isa OTHER */
5780 var102 = 1; /* easy <var_99:Int> isa OTHER*/
5781 if (unlikely(!var102)) {
5782 var_class_name105 = type_kernel__Int.name;
5783 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name105);
5784 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
5785 show_backtrace(1);
5786 }
5787 var106 = var_i98 < var_99;
5788 var100 = var106;
5789 goto RET_LABEL101;
5790 RET_LABEL101:(void)0;
5791 }
5792 }
5793 if (var100){
5794 var107 = NULL;
5795 {
5796 array__Array___91d_93d_61d(var_table, var_i98, var107); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
5797 }
5798 var108 = 1;
5799 {
5800 var109 = kernel__Int__successor(var_i98, var108);
5801 }
5802 var_i98 = var109;
5803 } else {
5804 goto BREAK_label110;
5805 }
5806 }
5807 BREAK_label110: (void)0;
5808 } else {
5809 }
5810 {
5811 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
5812 var113 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
5813 if (unlikely(var113 == NULL)) {
5814 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
5815 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
5816 show_backtrace(1);
5817 }
5818 var111 = var113;
5819 RET_LABEL112:(void)0;
5820 }
5821 }
5822 {
5823 var114 = model__MPropDef__lookup_next_definition(var_supercall, var111, var_mtype);
5824 }
5825 var_mmethoddef = var114;
5826 {
5827 array__Array___91d_93d_61d(var_table, var_color84, var_mmethoddef); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
5828 }
5829 BREAK_label78: (void)0;
5830 {
5831 ((void (*)(val*))(var_66->class->vft[COLOR_abstract_collection__Iterator__next]))(var_66) /* next on <var_66:Iterator[MMethodDef]>*/;
5832 }
5833 } else {
5834 goto BREAK_label115;
5835 }
5836 }
5837 BREAK_label115: (void)0;
5838 {
5839 { /* Inline abstract_collection#Iterator#finish (var_66) on <var_66:Iterator[MMethodDef]> */
5840 RET_LABEL116:(void)0;
5841 }
5842 }
5843 {
5844 ((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[MClass]>*/;
5845 }
5846 } else {
5847 goto BREAK_label117;
5848 }
5849 }
5850 BREAK_label117: (void)0;
5851 {
5852 { /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[MClass]> */
5853 RET_LABEL118:(void)0;
5854 }
5855 }
5856 var = var_tables;
5857 goto RET_LABEL;
5858 RET_LABEL:;
5859 return var;
5860 }
5861 /* method separate_compiler#SeparateCompiler#build_method_tables for (self: Object, Set[MClass], Set[MMethodDef]): Map[MClass, Array[nullable MPropDef]] */
5862 val* VIRTUAL_separate_compiler__SeparateCompiler__build_method_tables(val* self, val* p0, val* p1) {
5863 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
5864 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
5865 var1 = separate_compiler__SeparateCompiler__build_method_tables(self, p0, p1);
5866 var = var1;
5867 RET_LABEL:;
5868 return var;
5869 }
5870 /* method separate_compiler#SeparateCompiler#build_attr_tables for (self: SeparateCompiler, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
5871 val* separate_compiler__SeparateCompiler__build_attr_tables(val* self, val* p0) {
5872 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
5873 val* var_mclasses /* var mclasses: Set[MClass] */;
5874 val* var1 /* : HashMap[MClass, Array[nullable MPropDef]] */;
5875 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
5876 val* var_ /* var : Set[MClass] */;
5877 val* var2 /* : Iterator[nullable Object] */;
5878 val* var_3 /* var : Iterator[MClass] */;
5879 short int var4 /* : Bool */;
5880 val* var5 /* : nullable Object */;
5881 val* var_mclass /* var mclass: MClass */;
5882 val* var6 /* : Array[nullable MPropDef] */;
5883 val* var_table /* var table: Array[nullable MPropDef] */;
5884 val* var7 /* : MModule */;
5885 val* var9 /* : MModule */;
5886 val* var10 /* : Set[MProperty] */;
5887 val* var_mproperties /* var mproperties: Set[MProperty] */;
5888 val* var11 /* : MClassDef */;
5889 val* var13 /* : MClassDef */;
5890 val* var14 /* : MClassType */;
5891 val* var16 /* : MClassType */;
5892 val* var_mtype /* var mtype: MClassType */;
5893 val* var_17 /* var : Set[MProperty] */;
5894 val* var18 /* : Iterator[nullable Object] */;
5895 val* var_19 /* var : Iterator[MProperty] */;
5896 short int var20 /* : Bool */;
5897 val* var21 /* : nullable Object */;
5898 val* var_mproperty /* var mproperty: MProperty */;
5899 short int var22 /* : Bool */;
5900 int cltype;
5901 int idtype;
5902 short int var23 /* : Bool */;
5903 val* var24 /* : Map[MAttribute, Int] */;
5904 val* var26 /* : Map[MAttribute, Int] */;
5905 short int var27 /* : Bool */;
5906 short int var28 /* : Bool */;
5907 val* var29 /* : Map[MAttribute, Int] */;
5908 val* var31 /* : Map[MAttribute, Int] */;
5909 val* var32 /* : nullable Object */;
5910 long var33 /* : Int */;
5911 long var_color /* var color: Int */;
5912 long var34 /* : Int */;
5913 long var36 /* : Int */;
5914 short int var37 /* : Bool */;
5915 short int var39 /* : Bool */;
5916 int cltype40;
5917 int idtype41;
5918 const char* var_class_name;
5919 short int var42 /* : Bool */;
5920 long var43 /* : Int */;
5921 long var45 /* : Int */;
5922 long var_i /* var i: Int */;
5923 long var_46 /* var : Int */;
5924 short int var47 /* : Bool */;
5925 short int var49 /* : Bool */;
5926 int cltype50;
5927 int idtype51;
5928 const char* var_class_name52;
5929 short int var53 /* : Bool */;
5930 val* var54 /* : null */;
5931 long var55 /* : Int */;
5932 long var56 /* : Int */;
5933 val* var58 /* : MModule */;
5934 val* var60 /* : MModule */;
5935 val* var61 /* : MPropDef */;
5936 var_mclasses = p0;
5937 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
5938 {
5939 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MPropDef]]>*/;
5940 }
5941 var_tables = var1;
5942 var_ = var_mclasses;
5943 {
5944 var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[MClass]>*/;
5945 }
5946 var_3 = var2;
5947 for(;;) {
5948 {
5949 var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[MClass]>*/;
5950 }
5951 if (var4){
5952 {
5953 var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[MClass]>*/;
5954 }
5955 var_mclass = var5;
5956 var6 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
5957 {
5958 ((void (*)(val*))(var6->class->vft[COLOR_kernel__Object__init]))(var6) /* init on <var6:Array[nullable MPropDef]>*/;
5959 }
5960 var_table = var6;
5961 {
5962 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]]>*/
5963 }
5964 {
5965 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
5966 var9 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
5967 if (unlikely(var9 == NULL)) {
5968 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
5969 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
5970 show_backtrace(1);
5971 }
5972 var7 = var9;
5973 RET_LABEL8:(void)0;
5974 }
5975 }
5976 {
5977 var10 = abstract_compiler__MModule__properties(var7, var_mclass);
5978 }
5979 var_mproperties = var10;
5980 {
5981 { /* Inline model#MClass#intro (var_mclass) on <var_mclass:MClass> */
5982 var13 = var_mclass->attrs[COLOR_model__MClass___intro].val; /* _intro on <var_mclass:MClass> */
5983 if (unlikely(var13 == NULL)) {
5984 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
5985 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 420);
5986 show_backtrace(1);
5987 }
5988 var11 = var13;
5989 RET_LABEL12:(void)0;
5990 }
5991 }
5992 {
5993 { /* Inline model#MClassDef#bound_mtype (var11) on <var11:MClassDef> */
5994 var16 = var11->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var11:MClassDef> */
5995 if (unlikely(var16 == NULL)) {
5996 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
5997 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
5998 show_backtrace(1);
5999 }
6000 var14 = var16;
6001 RET_LABEL15:(void)0;
6002 }
6003 }
6004 var_mtype = var14;
6005 var_17 = var_mproperties;
6006 {
6007 var18 = ((val* (*)(val*))(var_17->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_17) /* iterator on <var_17:Set[MProperty]>*/;
6008 }
6009 var_19 = var18;
6010 for(;;) {
6011 {
6012 var20 = ((short int (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_19) /* is_ok on <var_19:Iterator[MProperty]>*/;
6013 }
6014 if (var20){
6015 {
6016 var21 = ((val* (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__item]))(var_19) /* item on <var_19:Iterator[MProperty]>*/;
6017 }
6018 var_mproperty = var21;
6019 /* <var_mproperty:MProperty> isa MAttribute */
6020 cltype = type_model__MAttribute.color;
6021 idtype = type_model__MAttribute.id;
6022 if(cltype >= var_mproperty->type->table_size) {
6023 var22 = 0;
6024 } else {
6025 var22 = var_mproperty->type->type_table[cltype] == idtype;
6026 }
6027 var23 = !var22;
6028 if (var23){
6029 goto BREAK_label;
6030 } else {
6031 }
6032 {
6033 { /* Inline separate_compiler#SeparateCompiler#attr_colors (self) on <self:SeparateCompiler> */
6034 var26 = self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_colors].val; /* _attr_colors on <self:SeparateCompiler> */
6035 if (unlikely(var26 == NULL)) {
6036 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_colors");
6037 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 163);
6038 show_backtrace(1);
6039 }
6040 var24 = var26;
6041 RET_LABEL25:(void)0;
6042 }
6043 }
6044 {
6045 var27 = abstract_collection__MapRead__has_key(var24, var_mproperty);
6046 }
6047 var28 = !var27;
6048 if (var28){
6049 goto BREAK_label;
6050 } else {
6051 }
6052 {
6053 { /* Inline separate_compiler#SeparateCompiler#attr_colors (self) on <self:SeparateCompiler> */
6054 var31 = self->attrs[COLOR_separate_compiler__SeparateCompiler___attr_colors].val; /* _attr_colors on <self:SeparateCompiler> */
6055 if (unlikely(var31 == NULL)) {
6056 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_colors");
6057 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 163);
6058 show_backtrace(1);
6059 }
6060 var29 = var31;
6061 RET_LABEL30:(void)0;
6062 }
6063 }
6064 {
6065 var32 = ((val* (*)(val*, val*))(var29->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var29, var_mproperty) /* [] on <var29:Map[MAttribute, Int]>*/;
6066 }
6067 var33 = ((struct instance_kernel__Int*)var32)->value; /* autounbox from nullable Object to Int */;
6068 var_color = var33;
6069 {
6070 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
6071 var36 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
6072 var34 = var36;
6073 RET_LABEL35:(void)0;
6074 }
6075 }
6076 {
6077 { /* Inline kernel#Int#<= (var34,var_color) on <var34:Int> */
6078 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
6079 /* <var_color:Int> isa OTHER */
6080 var39 = 1; /* easy <var_color:Int> isa OTHER*/
6081 if (unlikely(!var39)) {
6082 var_class_name = type_kernel__Int.name;
6083 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
6084 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
6085 show_backtrace(1);
6086 }
6087 var42 = var34 <= var_color;
6088 var37 = var42;
6089 goto RET_LABEL38;
6090 RET_LABEL38:(void)0;
6091 }
6092 }
6093 if (var37){
6094 {
6095 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
6096 var45 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
6097 var43 = var45;
6098 RET_LABEL44:(void)0;
6099 }
6100 }
6101 var_i = var43;
6102 var_46 = var_color;
6103 for(;;) {
6104 {
6105 { /* Inline kernel#Int#< (var_i,var_46) on <var_i:Int> */
6106 /* Covariant cast for argument 0 (i) <var_46:Int> isa OTHER */
6107 /* <var_46:Int> isa OTHER */
6108 var49 = 1; /* easy <var_46:Int> isa OTHER*/
6109 if (unlikely(!var49)) {
6110 var_class_name52 = type_kernel__Int.name;
6111 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name52);
6112 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
6113 show_backtrace(1);
6114 }
6115 var53 = var_i < var_46;
6116 var47 = var53;
6117 goto RET_LABEL48;
6118 RET_LABEL48:(void)0;
6119 }
6120 }
6121 if (var47){
6122 var54 = NULL;
6123 {
6124 array__Array___91d_93d_61d(var_table, var_i, var54); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
6125 }
6126 var55 = 1;
6127 {
6128 var56 = kernel__Int__successor(var_i, var55);
6129 }
6130 var_i = var56;
6131 } else {
6132 goto BREAK_label57;
6133 }
6134 }
6135 BREAK_label57: (void)0;
6136 } else {
6137 }
6138 {
6139 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
6140 var60 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
6141 if (unlikely(var60 == NULL)) {
6142 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
6143 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
6144 show_backtrace(1);
6145 }
6146 var58 = var60;
6147 RET_LABEL59:(void)0;
6148 }
6149 }
6150 {
6151 var61 = model__MProperty__lookup_first_definition(var_mproperty, var58, var_mtype);
6152 }
6153 {
6154 array__Array___91d_93d_61d(var_table, var_color, var61); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
6155 }
6156 BREAK_label: (void)0;
6157 {
6158 ((void (*)(val*))(var_19->class->vft[COLOR_abstract_collection__Iterator__next]))(var_19) /* next on <var_19:Iterator[MProperty]>*/;
6159 }
6160 } else {
6161 goto BREAK_label62;
6162 }
6163 }
6164 BREAK_label62: (void)0;
6165 {
6166 { /* Inline abstract_collection#Iterator#finish (var_19) on <var_19:Iterator[MProperty]> */
6167 RET_LABEL63:(void)0;
6168 }
6169 }
6170 {
6171 ((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[MClass]>*/;
6172 }
6173 } else {
6174 goto BREAK_label64;
6175 }
6176 }
6177 BREAK_label64: (void)0;
6178 {
6179 { /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[MClass]> */
6180 RET_LABEL65:(void)0;
6181 }
6182 }
6183 var = var_tables;
6184 goto RET_LABEL;
6185 RET_LABEL:;
6186 return var;
6187 }
6188 /* method separate_compiler#SeparateCompiler#build_attr_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
6189 val* VIRTUAL_separate_compiler__SeparateCompiler__build_attr_tables(val* self, val* p0) {
6190 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
6191 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
6192 var1 = separate_compiler__SeparateCompiler__build_attr_tables(self, p0);
6193 var = var1;
6194 RET_LABEL:;
6195 return var;
6196 }
6197 /* method separate_compiler#SeparateCompiler#do_type_coloring for (self: SeparateCompiler): POSet[MType] */
6198 val* separate_compiler__SeparateCompiler__do_type_coloring(val* self) {
6199 val* var /* : POSet[MType] */;
6200 val* var1 /* : nullable RapidTypeAnalysis */;
6201 val* var3 /* : nullable RapidTypeAnalysis */;
6202 val* var4 /* : HashSet[MClassType] */;
6203 val* var6 /* : HashSet[MClassType] */;
6204 val* var_live_types /* var live_types: HashSet[MClassType] */;
6205 val* var7 /* : nullable RapidTypeAnalysis */;
6206 val* var9 /* : nullable RapidTypeAnalysis */;
6207 val* var10 /* : HashSet[MType] */;
6208 val* var12 /* : HashSet[MType] */;
6209 val* var_live_cast_types /* var live_cast_types: HashSet[MType] */;
6210 val* var13 /* : HashSet[MType] */;
6211 val* var_mtypes /* var mtypes: HashSet[MType] */;
6212 val* var14 /* : HashMap[MClass, Int] */;
6213 val* var16 /* : HashMap[MClass, Int] */;
6214 val* var17 /* : RemovableCollection[Object] */;
6215 val* var19 /* : RemovableCollection[Object] */;
6216 val* var_ /* var : RemovableCollection[MClass] */;
6217 val* var20 /* : Iterator[nullable Object] */;
6218 val* var_21 /* var : Iterator[MClass] */;
6219 short int var22 /* : Bool */;
6220 val* var23 /* : nullable Object */;
6221 val* var_c /* var c: MClass */;
6222 val* var24 /* : MClassType */;
6223 val* var26 /* : MClassType */;
6224 val* var28 /* : POSet[MType] */;
6225 val* var_poset /* var poset: POSet[MType] */;
6226 val* var29 /* : POSetColorer[MType] */;
6227 val* var_colorer /* var colorer: POSetColorer[MType] */;
6228 val* var30 /* : Map[Object, Int] */;
6229 val* var32 /* : Map[Object, Int] */;
6230 val* var34 /* : Map[MType, Array[nullable MType]] */;
6231 {
6232 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateCompiler> */
6233 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateCompiler> */
6234 var1 = var3;
6235 RET_LABEL2:(void)0;
6236 }
6237 }
6238 if (var1 == NULL) {
6239 PRINT_ERROR("Runtime error: %s", "Receiver is null");
6240 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 417);
6241 show_backtrace(1);
6242 } else {
6243 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_types (var1) on <var1:nullable RapidTypeAnalysis> */
6244 if (unlikely(var1 == NULL)) {
6245 PRINT_ERROR("Runtime error: %s", "Receiver is null");
6246 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 53);
6247 show_backtrace(1);
6248 }
6249 var6 = var1->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_types].val; /* _live_types on <var1:nullable RapidTypeAnalysis> */
6250 if (unlikely(var6 == NULL)) {
6251 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_types");
6252 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 53);
6253 show_backtrace(1);
6254 }
6255 var4 = var6;
6256 RET_LABEL5:(void)0;
6257 }
6258 }
6259 var_live_types = var4;
6260 {
6261 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateCompiler> */
6262 var9 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateCompiler> */
6263 var7 = var9;
6264 RET_LABEL8:(void)0;
6265 }
6266 }
6267 if (var7 == NULL) {
6268 PRINT_ERROR("Runtime error: %s", "Receiver is null");
6269 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 418);
6270 show_backtrace(1);
6271 } else {
6272 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_cast_types (var7) on <var7:nullable RapidTypeAnalysis> */
6273 if (unlikely(var7 == NULL)) {
6274 PRINT_ERROR("Runtime error: %s", "Receiver is null");
6275 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 65);
6276 show_backtrace(1);
6277 }
6278 var12 = var7->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_cast_types].val; /* _live_cast_types on <var7:nullable RapidTypeAnalysis> */
6279 if (unlikely(var12 == NULL)) {
6280 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_cast_types");
6281 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 65);
6282 show_backtrace(1);
6283 }
6284 var10 = var12;
6285 RET_LABEL11:(void)0;
6286 }
6287 }
6288 var_live_cast_types = var10;
6289 var13 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
6290 {
6291 ((void (*)(val*))(var13->class->vft[COLOR_kernel__Object__init]))(var13) /* init on <var13:HashSet[MType]>*/;
6292 }
6293 var_mtypes = var13;
6294 {
6295 abstract_collection__SimpleCollection__add_all(var_mtypes, var_live_types); /* Direct call abstract_collection#SimpleCollection#add_all on <var_mtypes:HashSet[MType]>*/
6296 }
6297 {
6298 abstract_collection__SimpleCollection__add_all(var_mtypes, var_live_cast_types); /* Direct call abstract_collection#SimpleCollection#add_all on <var_mtypes:HashSet[MType]>*/
6299 }
6300 {
6301 { /* Inline separate_compiler#SeparateCompiler#box_kinds (self) on <self:SeparateCompiler> */
6302 var16 = self->attrs[COLOR_separate_compiler__SeparateCompiler___box_kinds].val; /* _box_kinds on <self:SeparateCompiler> */
6303 if (unlikely(var16 == NULL)) {
6304 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _box_kinds");
6305 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 216);
6306 show_backtrace(1);
6307 }
6308 var14 = var16;
6309 RET_LABEL15:(void)0;
6310 }
6311 }
6312 {
6313 { /* Inline hash_collection#HashMap#keys (var14) on <var14:HashMap[MClass, Int]> */
6314 var19 = var14->attrs[COLOR_hash_collection__HashMap___keys].val; /* _keys on <var14:HashMap[MClass, Int]> */
6315 if (unlikely(var19 == NULL)) {
6316 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _keys");
6317 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/collection/hash_collection.nit", 249);
6318 show_backtrace(1);
6319 }
6320 var17 = var19;
6321 RET_LABEL18:(void)0;
6322 }
6323 }
6324 var_ = var17;
6325 {
6326 var20 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:RemovableCollection[MClass]>*/;
6327 }
6328 var_21 = var20;
6329 for(;;) {
6330 {
6331 var22 = ((short int (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_21) /* is_ok on <var_21:Iterator[MClass]>*/;
6332 }
6333 if (var22){
6334 {
6335 var23 = ((val* (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Iterator__item]))(var_21) /* item on <var_21:Iterator[MClass]>*/;
6336 }
6337 var_c = var23;
6338 {
6339 { /* Inline model#MClass#mclass_type (var_c) on <var_c:MClass> */
6340 var26 = var_c->attrs[COLOR_model__MClass___mclass_type].val; /* _mclass_type on <var_c:MClass> */
6341 if (unlikely(var26 == NULL)) {
6342 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
6343 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 435);
6344 show_backtrace(1);
6345 }
6346 var24 = var26;
6347 RET_LABEL25:(void)0;
6348 }
6349 }
6350 {
6351 hash_collection__HashSet__add(var_mtypes, var24); /* Direct call hash_collection#HashSet#add on <var_mtypes:HashSet[MType]>*/
6352 }
6353 {
6354 ((void (*)(val*))(var_21->class->vft[COLOR_abstract_collection__Iterator__next]))(var_21) /* next on <var_21:Iterator[MClass]>*/;
6355 }
6356 } else {
6357 goto BREAK_label;
6358 }
6359 }
6360 BREAK_label: (void)0;
6361 {
6362 { /* Inline abstract_collection#Iterator#finish (var_21) on <var_21:Iterator[MClass]> */
6363 RET_LABEL27:(void)0;
6364 }
6365 }
6366 {
6367 var28 = separate_compiler__SeparateCompiler__poset_from_mtypes(self, var_mtypes);
6368 }
6369 var_poset = var28;
6370 var29 = NEW_coloring__POSetColorer(&type_coloring__POSetColorermodel__MType);
6371 {
6372 ((void (*)(val*))(var29->class->vft[COLOR_kernel__Object__init]))(var29) /* init on <var29:POSetColorer[MType]>*/;
6373 }
6374 var_colorer = var29;
6375 {
6376 coloring__POSetColorer__colorize(var_colorer, var_poset); /* Direct call coloring#POSetColorer#colorize on <var_colorer:POSetColorer[MType]>*/
6377 }
6378 {
6379 var30 = coloring__POSetColorer__ids(var_colorer);
6380 }
6381 {
6382 { /* Inline separate_compiler#SeparateCompiler#type_ids= (self,var30) on <self:SeparateCompiler> */
6383 self->attrs[COLOR_separate_compiler__SeparateCompiler___type_ids].val = var30; /* _type_ids on <self:SeparateCompiler> */
6384 RET_LABEL31:(void)0;
6385 }
6386 }
6387 {
6388 var32 = coloring__POSetColorer__colors(var_colorer);
6389 }
6390 {
6391 { /* Inline separate_compiler#SeparateCompiler#type_colors= (self,var32) on <self:SeparateCompiler> */
6392 self->attrs[COLOR_separate_compiler__SeparateCompiler___type_colors].val = var32; /* _type_colors on <self:SeparateCompiler> */
6393 RET_LABEL33:(void)0;
6394 }
6395 }
6396 {
6397 var34 = separate_compiler__SeparateCompiler__build_type_tables(self, var_poset);
6398 }
6399 {
6400 { /* Inline separate_compiler#SeparateCompiler#type_tables= (self,var34) on <self:SeparateCompiler> */
6401 self->attrs[COLOR_separate_compiler__SeparateCompiler___type_tables].val = var34; /* _type_tables on <self:SeparateCompiler> */
6402 RET_LABEL35:(void)0;
6403 }
6404 }
6405 {
6406 separate_compiler__SeparateCompiler__compile_resolution_tables(self, var_mtypes); /* Direct call separate_compiler#SeparateCompiler#compile_resolution_tables on <self:SeparateCompiler>*/
6407 }
6408 var = var_poset;
6409 goto RET_LABEL;
6410 RET_LABEL:;
6411 return var;
6412 }
6413 /* method separate_compiler#SeparateCompiler#do_type_coloring for (self: Object): POSet[MType] */
6414 val* VIRTUAL_separate_compiler__SeparateCompiler__do_type_coloring(val* self) {
6415 val* var /* : POSet[MType] */;
6416 val* var1 /* : POSet[MType] */;
6417 var1 = separate_compiler__SeparateCompiler__do_type_coloring(self);
6418 var = var1;
6419 RET_LABEL:;
6420 return var;
6421 }
6422 /* method separate_compiler#SeparateCompiler#poset_from_mtypes for (self: SeparateCompiler, Set[MType]): POSet[MType] */
6423 val* separate_compiler__SeparateCompiler__poset_from_mtypes(val* self, val* p0) {
6424 val* var /* : POSet[MType] */;
6425 val* var_mtypes /* var mtypes: Set[MType] */;
6426 val* var1 /* : POSet[MType] */;
6427 val* var_poset /* var poset: POSet[MType] */;
6428 val* var_ /* var : Set[MType] */;
6429 val* var2 /* : Iterator[nullable Object] */;
6430 val* var_3 /* var : Iterator[MType] */;
6431 short int var4 /* : Bool */;
6432 val* var5 /* : nullable Object */;
6433 val* var_e /* var e: MType */;
6434 val* var6 /* : POSetElement[Object] */;
6435 val* var_7 /* var : Set[MType] */;
6436 val* var8 /* : Iterator[nullable Object] */;
6437 val* var_9 /* var : Iterator[MType] */;
6438 short int var10 /* : Bool */;
6439 val* var11 /* : nullable Object */;
6440 val* var_o /* var o: MType */;
6441 short int var12 /* : Bool */;
6442 short int var13 /* : Bool */;
6443 val* var_other /* var other: nullable Object */;
6444 short int var15 /* : Bool */;
6445 short int var17 /* : Bool */;
6446 val* var18 /* : MModule */;
6447 val* var20 /* : MModule */;
6448 val* var21 /* : null */;
6449 short int var22 /* : Bool */;
6450 var_mtypes = p0;
6451 var1 = NEW_poset__POSet(&type_poset__POSetmodel__MType);
6452 {
6453 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:POSet[MType]>*/;
6454 }
6455 var_poset = var1;
6456 var_ = var_mtypes;
6457 {
6458 var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Set[MType]>*/;
6459 }
6460 var_3 = var2;
6461 for(;;) {
6462 {
6463 var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[MType]>*/;
6464 }
6465 if (var4){
6466 {
6467 var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[MType]>*/;
6468 }
6469 var_e = var5;
6470 {
6471 var6 = poset__POSet__add_node(var_poset, var_e);
6472 }
6473 var_7 = var_mtypes;
6474 {
6475 var8 = ((val* (*)(val*))(var_7->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_7) /* iterator on <var_7:Set[MType]>*/;
6476 }
6477 var_9 = var8;
6478 for(;;) {
6479 {
6480 var10 = ((short int (*)(val*))(var_9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_9) /* is_ok on <var_9:Iterator[MType]>*/;
6481 }
6482 if (var10){
6483 {
6484 var11 = ((val* (*)(val*))(var_9->class->vft[COLOR_abstract_collection__Iterator__item]))(var_9) /* item on <var_9:Iterator[MType]>*/;
6485 }
6486 var_o = var11;
6487 {
6488 { /* Inline kernel#Object#== (var_e,var_o) on <var_e:MType> */
6489 var_other = var_o;
6490 {
6491 { /* Inline kernel#Object#is_same_instance (var_e,var_other) on <var_e:MType> */
6492 var17 = var_e == var_other;
6493 var15 = var17;
6494 goto RET_LABEL16;
6495 RET_LABEL16:(void)0;
6496 }
6497 }
6498 var13 = var15;
6499 goto RET_LABEL14;
6500 RET_LABEL14:(void)0;
6501 }
6502 var12 = var13;
6503 }
6504 if (var12){
6505 goto BREAK_label;
6506 } else {
6507 }
6508 {
6509 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
6510 var20 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
6511 if (unlikely(var20 == NULL)) {
6512 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
6513 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
6514 show_backtrace(1);
6515 }
6516 var18 = var20;
6517 RET_LABEL19:(void)0;
6518 }
6519 }
6520 var21 = NULL;
6521 {
6522 var22 = model__MType__is_subtype(var_e, var18, var21, var_o);
6523 }
6524 if (var22){
6525 {
6526 poset__POSet__add_edge(var_poset, var_e, var_o); /* Direct call poset#POSet#add_edge on <var_poset:POSet[MType]>*/
6527 }
6528 } else {
6529 }
6530 BREAK_label: (void)0;
6531 {
6532 ((void (*)(val*))(var_9->class->vft[COLOR_abstract_collection__Iterator__next]))(var_9) /* next on <var_9:Iterator[MType]>*/;
6533 }
6534 } else {
6535 goto BREAK_label23;
6536 }
6537 }
6538 BREAK_label23: (void)0;
6539 {
6540 { /* Inline abstract_collection#Iterator#finish (var_9) on <var_9:Iterator[MType]> */
6541 RET_LABEL24:(void)0;
6542 }
6543 }
6544 {
6545 ((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[MType]>*/;
6546 }
6547 } else {
6548 goto BREAK_label25;
6549 }
6550 }
6551 BREAK_label25: (void)0;
6552 {
6553 { /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[MType]> */
6554 RET_LABEL26:(void)0;
6555 }
6556 }
6557 var = var_poset;
6558 goto RET_LABEL;
6559 RET_LABEL:;
6560 return var;
6561 }
6562 /* method separate_compiler#SeparateCompiler#poset_from_mtypes for (self: Object, Set[MType]): POSet[MType] */
6563 val* VIRTUAL_separate_compiler__SeparateCompiler__poset_from_mtypes(val* self, val* p0) {
6564 val* var /* : POSet[MType] */;
6565 val* var1 /* : POSet[MType] */;
6566 var1 = separate_compiler__SeparateCompiler__poset_from_mtypes(self, p0);
6567 var = var1;
6568 RET_LABEL:;
6569 return var;
6570 }
6571 /* method separate_compiler#SeparateCompiler#build_type_tables for (self: SeparateCompiler, POSet[MType]): Map[MType, Array[nullable MType]] */
6572 val* separate_compiler__SeparateCompiler__build_type_tables(val* self, val* p0) {
6573 val* var /* : Map[MType, Array[nullable MType]] */;
6574 val* var_mtypes /* var mtypes: POSet[MType] */;
6575 val* var1 /* : HashMap[MType, Array[nullable MType]] */;
6576 val* var_tables /* var tables: HashMap[MType, Array[nullable MType]] */;
6577 val* var_ /* var : POSet[MType] */;
6578 val* var2 /* : Iterator[Object] */;
6579 val* var_3 /* var : Iterator[MType] */;
6580 short int var4 /* : Bool */;
6581 val* var5 /* : nullable Object */;
6582 val* var_mtype /* var mtype: MType */;
6583 val* var6 /* : Array[nullable MType] */;
6584 val* var_table /* var table: Array[nullable MType] */;
6585 val* var7 /* : POSetElement[Object] */;
6586 val* var8 /* : Collection[Object] */;
6587 val* var_9 /* var : Collection[MType] */;
6588 val* var10 /* : Iterator[nullable Object] */;
6589 val* var_11 /* var : Iterator[MType] */;
6590 short int var12 /* : Bool */;
6591 val* var13 /* : nullable Object */;
6592 val* var_sup /* var sup: MType */;
6593 val* var14 /* : Map[MType, Int] */;
6594 val* var16 /* : Map[MType, Int] */;
6595 val* var17 /* : nullable Object */;
6596 long var18 /* : Int */;
6597 long var_color /* var color: Int */;
6598 long var19 /* : Int */;
6599 long var21 /* : Int */;
6600 short int var22 /* : Bool */;
6601 short int var24 /* : Bool */;
6602 int cltype;
6603 int idtype;
6604 const char* var_class_name;
6605 short int var25 /* : Bool */;
6606 long var26 /* : Int */;
6607 long var28 /* : Int */;
6608 long var_i /* var i: Int */;
6609 long var_29 /* var : Int */;
6610 short int var30 /* : Bool */;
6611 short int var32 /* : Bool */;
6612 int cltype33;
6613 int idtype34;
6614 const char* var_class_name35;
6615 short int var36 /* : Bool */;
6616 val* var37 /* : null */;
6617 long var38 /* : Int */;
6618 long var39 /* : Int */;
6619 var_mtypes = p0;
6620 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypearray__Arraynullable_model__MType);
6621 {
6622 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:HashMap[MType, Array[nullable MType]]>*/;
6623 }
6624 var_tables = var1;
6625 var_ = var_mtypes;
6626 {
6627 var2 = poset__POSet__iterator(var_);
6628 }
6629 var_3 = var2;
6630 for(;;) {
6631 {
6632 var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[MType]>*/;
6633 }
6634 if (var4){
6635 {
6636 var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[MType]>*/;
6637 }
6638 var_mtype = var5;
6639 var6 = NEW_array__Array(&type_array__Arraynullable_model__MType);
6640 {
6641 ((void (*)(val*))(var6->class->vft[COLOR_kernel__Object__init]))(var6) /* init on <var6:Array[nullable MType]>*/;
6642 }
6643 var_table = var6;
6644 {
6645 var7 = poset__POSet___91d_93d(var_mtypes, var_mtype);
6646 }
6647 {
6648 var8 = poset__POSetElement__greaters(var7);
6649 }
6650 var_9 = var8;
6651 {
6652 var10 = ((val* (*)(val*))(var_9->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_9) /* iterator on <var_9:Collection[MType]>*/;
6653 }
6654 var_11 = var10;
6655 for(;;) {
6656 {
6657 var12 = ((short int (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_11) /* is_ok on <var_11:Iterator[MType]>*/;
6658 }
6659 if (var12){
6660 {
6661 var13 = ((val* (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__item]))(var_11) /* item on <var_11:Iterator[MType]>*/;
6662 }
6663 var_sup = var13;
6664 {
6665 { /* Inline separate_compiler#SeparateCompiler#type_colors (self) on <self:SeparateCompiler> */
6666 var16 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_colors].val; /* _type_colors on <self:SeparateCompiler> */
6667 if (unlikely(var16 == NULL)) {
6668 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_colors");
6669 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 160);
6670 show_backtrace(1);
6671 }
6672 var14 = var16;
6673 RET_LABEL15:(void)0;
6674 }
6675 }
6676 {
6677 var17 = ((val* (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var14, var_sup) /* [] on <var14:Map[MType, Int]>*/;
6678 }
6679 var18 = ((struct instance_kernel__Int*)var17)->value; /* autounbox from nullable Object to Int */;
6680 var_color = var18;
6681 {
6682 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MType]> */
6683 var21 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MType]> */
6684 var19 = var21;
6685 RET_LABEL20:(void)0;
6686 }
6687 }
6688 {
6689 { /* Inline kernel#Int#<= (var19,var_color) on <var19:Int> */
6690 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
6691 /* <var_color:Int> isa OTHER */
6692 var24 = 1; /* easy <var_color:Int> isa OTHER*/
6693 if (unlikely(!var24)) {
6694 var_class_name = type_kernel__Int.name;
6695 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
6696 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
6697 show_backtrace(1);
6698 }
6699 var25 = var19 <= var_color;
6700 var22 = var25;
6701 goto RET_LABEL23;
6702 RET_LABEL23:(void)0;
6703 }
6704 }
6705 if (var22){
6706 {
6707 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MType]> */
6708 var28 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MType]> */
6709 var26 = var28;
6710 RET_LABEL27:(void)0;
6711 }
6712 }
6713 var_i = var26;
6714 var_29 = var_color;
6715 for(;;) {
6716 {
6717 { /* Inline kernel#Int#< (var_i,var_29) on <var_i:Int> */
6718 /* Covariant cast for argument 0 (i) <var_29:Int> isa OTHER */
6719 /* <var_29:Int> isa OTHER */
6720 var32 = 1; /* easy <var_29:Int> isa OTHER*/
6721 if (unlikely(!var32)) {
6722 var_class_name35 = type_kernel__Int.name;
6723 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name35);
6724 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
6725 show_backtrace(1);
6726 }
6727 var36 = var_i < var_29;
6728 var30 = var36;
6729 goto RET_LABEL31;
6730 RET_LABEL31:(void)0;
6731 }
6732 }
6733 if (var30){
6734 var37 = NULL;
6735 {
6736 array__Array___91d_93d_61d(var_table, var_i, var37); /* Direct call array#Array#[]= on <var_table:Array[nullable MType]>*/
6737 }
6738 var38 = 1;
6739 {
6740 var39 = kernel__Int__successor(var_i, var38);
6741 }
6742 var_i = var39;
6743 } else {
6744 goto BREAK_label;
6745 }
6746 }
6747 BREAK_label: (void)0;
6748 } else {
6749 }
6750 {
6751 array__Array___91d_93d_61d(var_table, var_color, var_sup); /* Direct call array#Array#[]= on <var_table:Array[nullable MType]>*/
6752 }
6753 {
6754 ((void (*)(val*))(var_11->class->vft[COLOR_abstract_collection__Iterator__next]))(var_11) /* next on <var_11:Iterator[MType]>*/;
6755 }
6756 } else {
6757 goto BREAK_label40;
6758 }
6759 }
6760 BREAK_label40: (void)0;
6761 {
6762 { /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:Iterator[MType]> */
6763 RET_LABEL41:(void)0;
6764 }
6765 }
6766 {
6767 hash_collection__HashMap___91d_93d_61d(var_tables, var_mtype, var_table); /* Direct call hash_collection#HashMap#[]= on <var_tables:HashMap[MType, Array[nullable MType]]>*/
6768 }
6769 {
6770 ((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[MType]>*/;
6771 }
6772 } else {
6773 goto BREAK_label42;
6774 }
6775 }
6776 BREAK_label42: (void)0;
6777 {
6778 { /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[MType]> */
6779 RET_LABEL43:(void)0;
6780 }
6781 }
6782 var = var_tables;
6783 goto RET_LABEL;
6784 RET_LABEL:;
6785 return var;
6786 }
6787 /* method separate_compiler#SeparateCompiler#build_type_tables for (self: Object, POSet[MType]): Map[MType, Array[nullable MType]] */
6788 val* VIRTUAL_separate_compiler__SeparateCompiler__build_type_tables(val* self, val* p0) {
6789 val* var /* : Map[MType, Array[nullable MType]] */;
6790 val* var1 /* : Map[MType, Array[nullable MType]] */;
6791 var1 = separate_compiler__SeparateCompiler__build_type_tables(self, p0);
6792 var = var1;
6793 RET_LABEL:;
6794 return var;
6795 }
6796 /* method separate_compiler#SeparateCompiler#compile_resolution_tables for (self: SeparateCompiler, Set[MType]) */
6797 void separate_compiler__SeparateCompiler__compile_resolution_tables(val* self, val* p0) {
6798 val* var_mtypes /* var mtypes: Set[MType] */;
6799 val* var /* : HashMap[MClassType, Set[MType]] */;
6800 val* var_mtype2unresolved /* var mtype2unresolved: HashMap[MClassType, Set[MType]] */;
6801 val* var1 /* : nullable RapidTypeAnalysis */;
6802 val* var3 /* : nullable RapidTypeAnalysis */;
6803 val* var4 /* : HashSet[MClassType] */;
6804 val* var6 /* : HashSet[MClassType] */;
6805 val* var_ /* var : HashSet[MClassType] */;
6806 val* var7 /* : Iterator[Object] */;
6807 val* var_8 /* var : Iterator[MClassType] */;
6808 short int var9 /* : Bool */;
6809 val* var10 /* : nullable Object */;
6810 val* var_mtype /* var mtype: MClassType */;
6811 val* var11 /* : HashSet[MType] */;
6812 val* var_set /* var set: HashSet[MType] */;
6813 val* var12 /* : MModule */;
6814 val* var14 /* : MModule */;
6815 val* var15 /* : Set[MClassDef] */;
6816 val* var_16 /* var : Set[MClassDef] */;
6817 val* var17 /* : Iterator[nullable Object] */;
6818 val* var_18 /* var : Iterator[MClassDef] */;
6819 short int var19 /* : Bool */;
6820 val* var20 /* : nullable Object */;
6821 val* var_cd /* var cd: MClassDef */;
6822 val* var21 /* : Map[MClassDef, Set[MType]] */;
6823 val* var23 /* : Map[MClassDef, Set[MType]] */;
6824 short int var24 /* : Bool */;
6825 val* var25 /* : Map[MClassDef, Set[MType]] */;
6826 val* var27 /* : Map[MClassDef, Set[MType]] */;
6827 val* var28 /* : nullable Object */;
6828 val* var32 /* : BucketsColorer[MType, MType] */;
6829 val* var_colorer /* var colorer: BucketsColorer[MType, MType] */;
6830 val* var33 /* : Map[Object, Int] */;
6831 val* var35 /* : Map[MClassType, Array[nullable MType]] */;
6832 val* var37 /* : HashSet[MType] */;
6833 val* var_all_unresolved /* var all_unresolved: HashSet[MType] */;
6834 val* var38 /* : Map[MClassDef, Set[MType]] */;
6835 val* var40 /* : Map[MClassDef, Set[MType]] */;
6836 val* var41 /* : Collection[nullable Object] */;
6837 val* var_42 /* var : RemovableCollection[Set[MType]] */;
6838 val* var43 /* : Iterator[nullable Object] */;
6839 val* var_44 /* var : Iterator[Set[MType]] */;
6840 short int var45 /* : Bool */;
6841 val* var46 /* : nullable Object */;
6842 val* var_t /* var t: Set[MType] */;
6843 val* var49 /* : HashMap[MType, Int] */;
6844 val* var_all_unresolved_types_colors /* var all_unresolved_types_colors: HashMap[MType, Int] */;
6845 val* var_50 /* var : HashSet[MType] */;
6846 val* var51 /* : Iterator[Object] */;
6847 val* var_52 /* var : Iterator[MType] */;
6848 short int var53 /* : Bool */;
6849 val* var54 /* : nullable Object */;
6850 val* var_t55 /* var t: MType */;
6851 val* var56 /* : Map[MType, Int] */;
6852 val* var58 /* : Map[MType, Int] */;
6853 short int var59 /* : Bool */;
6854 val* var60 /* : Map[MType, Int] */;
6855 val* var62 /* : Map[MType, Int] */;
6856 val* var63 /* : nullable Object */;
6857 long var64 /* : Int */;
6858 long var65 /* : Int */;
6859 long var67 /* : Int */;
6860 val* var68 /* : nullable Object */;
6861 var_mtypes = p0;
6862 var = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassTypeabstract_collection__Setmodel__MType);
6863 {
6864 ((void (*)(val*))(var->class->vft[COLOR_kernel__Object__init]))(var) /* init on <var:HashMap[MClassType, Set[MType]]>*/;
6865 }
6866 var_mtype2unresolved = var;
6867 {
6868 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateCompiler> */
6869 var3 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateCompiler> */
6870 var1 = var3;
6871 RET_LABEL2:(void)0;
6872 }
6873 }
6874 if (var1 == NULL) {
6875 PRINT_ERROR("Runtime error: %s", "Receiver is null");
6876 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 482);
6877 show_backtrace(1);
6878 } else {
6879 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_types (var1) on <var1:nullable RapidTypeAnalysis> */
6880 if (unlikely(var1 == NULL)) {
6881 PRINT_ERROR("Runtime error: %s", "Receiver is null");
6882 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 53);
6883 show_backtrace(1);
6884 }
6885 var6 = var1->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_types].val; /* _live_types on <var1:nullable RapidTypeAnalysis> */
6886 if (unlikely(var6 == NULL)) {
6887 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_types");
6888 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 53);
6889 show_backtrace(1);
6890 }
6891 var4 = var6;
6892 RET_LABEL5:(void)0;
6893 }
6894 }
6895 var_ = var4;
6896 {
6897 var7 = hash_collection__HashSet__iterator(var_);
6898 }
6899 var_8 = var7;
6900 for(;;) {
6901 {
6902 var9 = ((short int (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_8) /* is_ok on <var_8:Iterator[MClassType]>*/;
6903 }
6904 if (var9){
6905 {
6906 var10 = ((val* (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__item]))(var_8) /* item on <var_8:Iterator[MClassType]>*/;
6907 }
6908 var_mtype = var10;
6909 var11 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
6910 {
6911 ((void (*)(val*))(var11->class->vft[COLOR_kernel__Object__init]))(var11) /* init on <var11:HashSet[MType]>*/;
6912 }
6913 var_set = var11;
6914 {
6915 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
6916 var14 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
6917 if (unlikely(var14 == NULL)) {
6918 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
6919 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
6920 show_backtrace(1);
6921 }
6922 var12 = var14;
6923 RET_LABEL13:(void)0;
6924 }
6925 }
6926 {
6927 var15 = model__MClassType__collect_mclassdefs(var_mtype, var12);
6928 }
6929 var_16 = var15;
6930 {
6931 var17 = ((val* (*)(val*))(var_16->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_16) /* iterator on <var_16:Set[MClassDef]>*/;
6932 }
6933 var_18 = var17;
6934 for(;;) {
6935 {
6936 var19 = ((short int (*)(val*))(var_18->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_18) /* is_ok on <var_18:Iterator[MClassDef]>*/;
6937 }
6938 if (var19){
6939 {
6940 var20 = ((val* (*)(val*))(var_18->class->vft[COLOR_abstract_collection__Iterator__item]))(var_18) /* item on <var_18:Iterator[MClassDef]>*/;
6941 }
6942 var_cd = var20;
6943 {
6944 { /* Inline separate_compiler#SeparateCompiler#live_unresolved_types (self) on <self:SeparateCompiler> */
6945 var23 = self->attrs[COLOR_separate_compiler__SeparateCompiler___live_unresolved_types].val; /* _live_unresolved_types on <self:SeparateCompiler> */
6946 if (unlikely(var23 == NULL)) {
6947 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_unresolved_types");
6948 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 157);
6949 show_backtrace(1);
6950 }
6951 var21 = var23;
6952 RET_LABEL22:(void)0;
6953 }
6954 }
6955 {
6956 var24 = abstract_collection__MapRead__has_key(var21, var_cd);
6957 }
6958 if (var24){
6959 {
6960 { /* Inline separate_compiler#SeparateCompiler#live_unresolved_types (self) on <self:SeparateCompiler> */
6961 var27 = self->attrs[COLOR_separate_compiler__SeparateCompiler___live_unresolved_types].val; /* _live_unresolved_types on <self:SeparateCompiler> */
6962 if (unlikely(var27 == NULL)) {
6963 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_unresolved_types");
6964 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 157);
6965 show_backtrace(1);
6966 }
6967 var25 = var27;
6968 RET_LABEL26:(void)0;
6969 }
6970 }
6971 {
6972 var28 = ((val* (*)(val*, val*))(var25->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var25, var_cd) /* [] on <var25:Map[MClassDef, Set[MType]]>*/;
6973 }
6974 {
6975 abstract_collection__SimpleCollection__add_all(var_set, var28); /* Direct call abstract_collection#SimpleCollection#add_all on <var_set:HashSet[MType]>*/
6976 }
6977 } else {
6978 }
6979 {
6980 ((void (*)(val*))(var_18->class->vft[COLOR_abstract_collection__Iterator__next]))(var_18) /* next on <var_18:Iterator[MClassDef]>*/;
6981 }
6982 } else {
6983 goto BREAK_label;
6984 }
6985 }
6986 BREAK_label: (void)0;
6987 {
6988 { /* Inline abstract_collection#Iterator#finish (var_18) on <var_18:Iterator[MClassDef]> */
6989 RET_LABEL29:(void)0;
6990 }
6991 }
6992 {
6993 hash_collection__HashMap___91d_93d_61d(var_mtype2unresolved, var_mtype, var_set); /* Direct call hash_collection#HashMap#[]= on <var_mtype2unresolved:HashMap[MClassType, Set[MType]]>*/
6994 }
6995 {
6996 ((void (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__next]))(var_8) /* next on <var_8:Iterator[MClassType]>*/;
6997 }
6998 } else {
6999 goto BREAK_label30;
7000 }
7001 }
7002 BREAK_label30: (void)0;
7003 {
7004 { /* Inline abstract_collection#Iterator#finish (var_8) on <var_8:Iterator[MClassType]> */
7005 RET_LABEL31:(void)0;
7006 }
7007 }
7008 var32 = NEW_coloring__BucketsColorer(&type_coloring__BucketsColorermodel__MTypemodel__MType);
7009 {
7010 ((void (*)(val*))(var32->class->vft[COLOR_kernel__Object__init]))(var32) /* init on <var32:BucketsColorer[MType, MType]>*/;
7011 }
7012 var_colorer = var32;
7013 {
7014 var33 = coloring__BucketsColorer__colorize(var_colorer, var_mtype2unresolved);
7015 }
7016 {
7017 { /* Inline separate_compiler#SeparateCompiler#opentype_colors= (self,var33) on <self:SeparateCompiler> */
7018 self->attrs[COLOR_separate_compiler__SeparateCompiler___opentype_colors].val = var33; /* _opentype_colors on <self:SeparateCompiler> */
7019 RET_LABEL34:(void)0;
7020 }
7021 }
7022 {
7023 var35 = separate_compiler__SeparateCompiler__build_resolution_tables(self, var_mtype2unresolved);
7024 }
7025 {
7026 { /* Inline separate_compiler#SeparateCompiler#resolution_tables= (self,var35) on <self:SeparateCompiler> */
7027 self->attrs[COLOR_separate_compiler__SeparateCompiler___resolution_tables].val = var35; /* _resolution_tables on <self:SeparateCompiler> */
7028 RET_LABEL36:(void)0;
7029 }
7030 }
7031 var37 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
7032 {
7033 ((void (*)(val*))(var37->class->vft[COLOR_kernel__Object__init]))(var37) /* init on <var37:HashSet[MType]>*/;
7034 }
7035 var_all_unresolved = var37;
7036 {
7037 { /* Inline separate_compiler#SeparateCompiler#live_unresolved_types (self) on <self:SeparateCompiler> */
7038 var40 = self->attrs[COLOR_separate_compiler__SeparateCompiler___live_unresolved_types].val; /* _live_unresolved_types on <self:SeparateCompiler> */
7039 if (unlikely(var40 == NULL)) {
7040 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_unresolved_types");
7041 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 157);
7042 show_backtrace(1);
7043 }
7044 var38 = var40;
7045 RET_LABEL39:(void)0;
7046 }
7047 }
7048 {
7049 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_abstract_collection__MapRead__values]))(var38) /* values on <var38:Map[MClassDef, Set[MType]]>*/;
7050 }
7051 var_42 = var41;
7052 {
7053 var43 = ((val* (*)(val*))(var_42->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_42) /* iterator on <var_42:RemovableCollection[Set[MType]]>*/;
7054 }
7055 var_44 = var43;
7056 for(;;) {
7057 {
7058 var45 = ((short int (*)(val*))(var_44->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_44) /* is_ok on <var_44:Iterator[Set[MType]]>*/;
7059 }
7060 if (var45){
7061 {
7062 var46 = ((val* (*)(val*))(var_44->class->vft[COLOR_abstract_collection__Iterator__item]))(var_44) /* item on <var_44:Iterator[Set[MType]]>*/;
7063 }
7064 var_t = var46;
7065 {
7066 abstract_collection__SimpleCollection__add_all(var_all_unresolved, var_t); /* Direct call abstract_collection#SimpleCollection#add_all on <var_all_unresolved:HashSet[MType]>*/
7067 }
7068 {
7069 ((void (*)(val*))(var_44->class->vft[COLOR_abstract_collection__Iterator__next]))(var_44) /* next on <var_44:Iterator[Set[MType]]>*/;
7070 }
7071 } else {
7072 goto BREAK_label47;
7073 }
7074 }
7075 BREAK_label47: (void)0;
7076 {
7077 { /* Inline abstract_collection#Iterator#finish (var_44) on <var_44:Iterator[Set[MType]]> */
7078 RET_LABEL48:(void)0;
7079 }
7080 }
7081 var49 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypekernel__Int);
7082 {
7083 ((void (*)(val*))(var49->class->vft[COLOR_kernel__Object__init]))(var49) /* init on <var49:HashMap[MType, Int]>*/;
7084 }
7085 var_all_unresolved_types_colors = var49;
7086 var_50 = var_all_unresolved;
7087 {
7088 var51 = hash_collection__HashSet__iterator(var_50);
7089 }
7090 var_52 = var51;
7091 for(;;) {
7092 {
7093 var53 = ((short int (*)(val*))(var_52->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_52) /* is_ok on <var_52:Iterator[MType]>*/;
7094 }
7095 if (var53){
7096 {
7097 var54 = ((val* (*)(val*))(var_52->class->vft[COLOR_abstract_collection__Iterator__item]))(var_52) /* item on <var_52:Iterator[MType]>*/;
7098 }
7099 var_t55 = var54;
7100 {
7101 { /* Inline separate_compiler#SeparateCompiler#opentype_colors (self) on <self:SeparateCompiler> */
7102 var58 = self->attrs[COLOR_separate_compiler__SeparateCompiler___opentype_colors].val; /* _opentype_colors on <self:SeparateCompiler> */
7103 if (unlikely(var58 == NULL)) {
7104 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opentype_colors");
7105 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 161);
7106 show_backtrace(1);
7107 }
7108 var56 = var58;
7109 RET_LABEL57:(void)0;
7110 }
7111 }
7112 {
7113 var59 = abstract_collection__MapRead__has_key(var56, var_t55);
7114 }
7115 if (var59){
7116 {
7117 { /* Inline separate_compiler#SeparateCompiler#opentype_colors (self) on <self:SeparateCompiler> */
7118 var62 = self->attrs[COLOR_separate_compiler__SeparateCompiler___opentype_colors].val; /* _opentype_colors on <self:SeparateCompiler> */
7119 if (unlikely(var62 == NULL)) {
7120 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opentype_colors");
7121 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 161);
7122 show_backtrace(1);
7123 }
7124 var60 = var62;
7125 RET_LABEL61:(void)0;
7126 }
7127 }
7128 {
7129 var63 = ((val* (*)(val*, val*))(var60->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var60, var_t55) /* [] on <var60:Map[MType, Int]>*/;
7130 }
7131 {
7132 hash_collection__HashMap___91d_93d_61d(var_all_unresolved_types_colors, var_t55, var63); /* Direct call hash_collection#HashMap#[]= on <var_all_unresolved_types_colors:HashMap[MType, Int]>*/
7133 }
7134 } else {
7135 var64 = 1;
7136 {
7137 { /* Inline kernel#Int#unary - (var64) on <var64:Int> */
7138 var67 = -var64;
7139 var65 = var67;
7140 goto RET_LABEL66;
7141 RET_LABEL66:(void)0;
7142 }
7143 }
7144 {
7145 var68 = BOX_kernel__Int(var65); /* autobox from Int to nullable Object */
7146 hash_collection__HashMap___91d_93d_61d(var_all_unresolved_types_colors, var_t55, var68); /* Direct call hash_collection#HashMap#[]= on <var_all_unresolved_types_colors:HashMap[MType, Int]>*/
7147 }
7148 }
7149 {
7150 ((void (*)(val*))(var_52->class->vft[COLOR_abstract_collection__Iterator__next]))(var_52) /* next on <var_52:Iterator[MType]>*/;
7151 }
7152 } else {
7153 goto BREAK_label69;
7154 }
7155 }
7156 BREAK_label69: (void)0;
7157 {
7158 { /* Inline abstract_collection#Iterator#finish (var_52) on <var_52:Iterator[MType]> */
7159 RET_LABEL70:(void)0;
7160 }
7161 }
7162 {
7163 separate_compiler__SeparateCompiler__compile_color_consts(self, var_all_unresolved_types_colors); /* Direct call separate_compiler#SeparateCompiler#compile_color_consts on <self:SeparateCompiler>*/
7164 }
7165 RET_LABEL:;
7166 }
7167 /* method separate_compiler#SeparateCompiler#compile_resolution_tables for (self: Object, Set[MType]) */
7168 void VIRTUAL_separate_compiler__SeparateCompiler__compile_resolution_tables(val* self, val* p0) {
7169 separate_compiler__SeparateCompiler__compile_resolution_tables(self, p0); /* Direct call separate_compiler#SeparateCompiler#compile_resolution_tables on <self:Object(SeparateCompiler)>*/
7170 RET_LABEL:;
7171 }
7172 /* method separate_compiler#SeparateCompiler#build_resolution_tables for (self: SeparateCompiler, Map[MClassType, Set[MType]]): Map[MClassType, Array[nullable MType]] */
7173 val* separate_compiler__SeparateCompiler__build_resolution_tables(val* self, val* p0) {
7174 val* var /* : Map[MClassType, Array[nullable MType]] */;
7175 val* var_elements /* var elements: Map[MClassType, Set[MType]] */;
7176 val* var1 /* : HashMap[MClassType, Array[nullable MType]] */;
7177 val* var_tables /* var tables: HashMap[MClassType, Array[nullable MType]] */;
7178 val* var_ /* var : Map[MClassType, Set[MType]] */;
7179 val* var2 /* : MapIterator[Object, nullable Object] */;
7180 val* var_3 /* var : MapIterator[MClassType, Set[MType]] */;
7181 short int var4 /* : Bool */;
7182 val* var5 /* : Object */;
7183 val* var_mclasstype /* var mclasstype: MClassType */;
7184 val* var6 /* : nullable Object */;
7185 val* var_mtypes /* var mtypes: Set[MType] */;
7186 val* var7 /* : Array[nullable MType] */;
7187 val* var_table /* var table: Array[nullable MType] */;
7188 val* var_8 /* var : Set[MType] */;
7189 val* var9 /* : Iterator[nullable Object] */;
7190 val* var_10 /* var : Iterator[MType] */;
7191 short int var11 /* : Bool */;
7192 val* var12 /* : nullable Object */;
7193 val* var_mtype /* var mtype: MType */;
7194 val* var13 /* : Map[MType, Int] */;
7195 val* var15 /* : Map[MType, Int] */;
7196 val* var16 /* : nullable Object */;
7197 long var17 /* : Int */;
7198 long var_color /* var color: Int */;
7199 long var18 /* : Int */;
7200 long var20 /* : Int */;
7201 short int var21 /* : Bool */;
7202 short int var23 /* : Bool */;
7203 int cltype;
7204 int idtype;
7205 const char* var_class_name;
7206 short int var24 /* : Bool */;
7207 long var25 /* : Int */;
7208 long var27 /* : Int */;
7209 long var_i /* var i: Int */;
7210 long var_28 /* var : Int */;
7211 short int var29 /* : Bool */;
7212 short int var31 /* : Bool */;
7213 int cltype32;
7214 int idtype33;
7215 const char* var_class_name34;
7216 short int var35 /* : Bool */;
7217 val* var36 /* : null */;
7218 long var37 /* : Int */;
7219 long var38 /* : Int */;
7220 var_elements = p0;
7221 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassTypearray__Arraynullable_model__MType);
7222 {
7223 ((void (*)(val*))(var1->class->vft[COLOR_kernel__Object__init]))(var1) /* init on <var1:HashMap[MClassType, Array[nullable MType]]>*/;
7224 }
7225 var_tables = var1;
7226 var_ = var_elements;
7227 {
7228 var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_) /* iterator on <var_:Map[MClassType, Set[MType]]>*/;
7229 }
7230 var_3 = var2;
7231 for(;;) {
7232 {
7233 var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var_3) /* is_ok on <var_3:MapIterator[MClassType, Set[MType]]>*/;
7234 }
7235 if (var4){
7236 {
7237 var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__MapIterator__key]))(var_3) /* key on <var_3:MapIterator[MClassType, Set[MType]]>*/;
7238 }
7239 var_mclasstype = var5;
7240 {
7241 var6 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__MapIterator__item]))(var_3) /* item on <var_3:MapIterator[MClassType, Set[MType]]>*/;
7242 }
7243 var_mtypes = var6;
7244 var7 = NEW_array__Array(&type_array__Arraynullable_model__MType);
7245 {
7246 ((void (*)(val*))(var7->class->vft[COLOR_kernel__Object__init]))(var7) /* init on <var7:Array[nullable MType]>*/;
7247 }
7248 var_table = var7;
7249 var_8 = var_mtypes;
7250 {
7251 var9 = ((val* (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_8) /* iterator on <var_8:Set[MType]>*/;
7252 }
7253 var_10 = var9;
7254 for(;;) {
7255 {
7256 var11 = ((short int (*)(val*))(var_10->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_10) /* is_ok on <var_10:Iterator[MType]>*/;
7257 }
7258 if (var11){
7259 {
7260 var12 = ((val* (*)(val*))(var_10->class->vft[COLOR_abstract_collection__Iterator__item]))(var_10) /* item on <var_10:Iterator[MType]>*/;
7261 }
7262 var_mtype = var12;
7263 {
7264 { /* Inline separate_compiler#SeparateCompiler#opentype_colors (self) on <self:SeparateCompiler> */
7265 var15 = self->attrs[COLOR_separate_compiler__SeparateCompiler___opentype_colors].val; /* _opentype_colors on <self:SeparateCompiler> */
7266 if (unlikely(var15 == NULL)) {
7267 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opentype_colors");
7268 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 161);
7269 show_backtrace(1);
7270 }
7271 var13 = var15;
7272 RET_LABEL14:(void)0;
7273 }
7274 }
7275 {
7276 var16 = ((val* (*)(val*, val*))(var13->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var13, var_mtype) /* [] on <var13:Map[MType, Int]>*/;
7277 }
7278 var17 = ((struct instance_kernel__Int*)var16)->value; /* autounbox from nullable Object to Int */;
7279 var_color = var17;
7280 {
7281 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MType]> */
7282 var20 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MType]> */
7283 var18 = var20;
7284 RET_LABEL19:(void)0;
7285 }
7286 }
7287 {
7288 { /* Inline kernel#Int#<= (var18,var_color) on <var18:Int> */
7289 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
7290 /* <var_color:Int> isa OTHER */
7291 var23 = 1; /* easy <var_color:Int> isa OTHER*/
7292 if (unlikely(!var23)) {
7293 var_class_name = type_kernel__Int.name;
7294 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
7295 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
7296 show_backtrace(1);
7297 }
7298 var24 = var18 <= var_color;
7299 var21 = var24;
7300 goto RET_LABEL22;
7301 RET_LABEL22:(void)0;
7302 }
7303 }
7304 if (var21){
7305 {
7306 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MType]> */
7307 var27 = var_table->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MType]> */
7308 var25 = var27;
7309 RET_LABEL26:(void)0;
7310 }
7311 }
7312 var_i = var25;
7313 var_28 = var_color;
7314 for(;;) {
7315 {
7316 { /* Inline kernel#Int#< (var_i,var_28) on <var_i:Int> */
7317 /* Covariant cast for argument 0 (i) <var_28:Int> isa OTHER */
7318 /* <var_28:Int> isa OTHER */
7319 var31 = 1; /* easy <var_28:Int> isa OTHER*/
7320 if (unlikely(!var31)) {
7321 var_class_name34 = type_kernel__Int.name;
7322 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name34);
7323 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
7324 show_backtrace(1);
7325 }
7326 var35 = var_i < var_28;
7327 var29 = var35;
7328 goto RET_LABEL30;
7329 RET_LABEL30:(void)0;
7330 }
7331 }
7332 if (var29){
7333 var36 = NULL;
7334 {
7335 array__Array___91d_93d_61d(var_table, var_i, var36); /* Direct call array#Array#[]= on <var_table:Array[nullable MType]>*/
7336 }
7337 var37 = 1;
7338 {
7339 var38 = kernel__Int__successor(var_i, var37);
7340 }
7341 var_i = var38;
7342 } else {
7343 goto BREAK_label;
7344 }
7345 }
7346 BREAK_label: (void)0;
7347 } else {
7348 }
7349 {
7350 array__Array___91d_93d_61d(var_table, var_color, var_mtype); /* Direct call array#Array#[]= on <var_table:Array[nullable MType]>*/
7351 }
7352 {
7353 ((void (*)(val*))(var_10->class->vft[COLOR_abstract_collection__Iterator__next]))(var_10) /* next on <var_10:Iterator[MType]>*/;
7354 }
7355 } else {
7356 goto BREAK_label39;
7357 }
7358 }
7359 BREAK_label39: (void)0;
7360 {
7361 { /* Inline abstract_collection#Iterator#finish (var_10) on <var_10:Iterator[MType]> */
7362 RET_LABEL40:(void)0;
7363 }
7364 }
7365 {
7366 hash_collection__HashMap___91d_93d_61d(var_tables, var_mclasstype, var_table); /* Direct call hash_collection#HashMap#[]= on <var_tables:HashMap[MClassType, Array[nullable MType]]>*/
7367 }
7368 {
7369 ((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__MapIterator__next]))(var_3) /* next on <var_3:MapIterator[MClassType, Set[MType]]>*/;
7370 }
7371 } else {
7372 goto BREAK_label41;
7373 }
7374 }
7375 BREAK_label41: (void)0;
7376 {
7377 { /* Inline abstract_collection#MapIterator#finish (var_3) on <var_3:MapIterator[MClassType, Set[MType]]> */
7378 RET_LABEL42:(void)0;
7379 }
7380 }
7381 var = var_tables;
7382 goto RET_LABEL;
7383 RET_LABEL:;
7384 return var;
7385 }
7386 /* method separate_compiler#SeparateCompiler#build_resolution_tables for (self: Object, Map[MClassType, Set[MType]]): Map[MClassType, Array[nullable MType]] */
7387 val* VIRTUAL_separate_compiler__SeparateCompiler__build_resolution_tables(val* self, val* p0) {
7388 val* var /* : Map[MClassType, Array[nullable MType]] */;
7389 val* var1 /* : Map[MClassType, Array[nullable MType]] */;
7390 var1 = separate_compiler__SeparateCompiler__build_resolution_tables(self, p0);
7391 var = var1;
7392 RET_LABEL:;
7393 return var;
7394 }
7395 /* method separate_compiler#SeparateCompiler#compile_module_to_c for (self: SeparateCompiler, MModule) */
7396 void separate_compiler__SeparateCompiler__compile_module_to_c(val* self, val* p0) {
7397 val* var_mmodule /* var mmodule: MModule */;
7398 val* var /* : MModule */;
7399 val* var2 /* : MModule */;
7400 val* var_old_module /* var old_module: MModule */;
7401 val* var4 /* : Array[MClassDef] */;
7402 val* var6 /* : Array[MClassDef] */;
7403 val* var_ /* var : Array[MClassDef] */;
7404 val* var7 /* : ArrayIterator[nullable Object] */;
7405 val* var_8 /* var : ArrayIterator[MClassDef] */;
7406 short int var9 /* : Bool */;
7407 val* var10 /* : nullable Object */;
7408 val* var_cd /* var cd: MClassDef */;
7409 val* var11 /* : Array[MPropDef] */;
7410 val* var13 /* : Array[MPropDef] */;
7411 val* var_14 /* var : Array[MPropDef] */;
7412 val* var15 /* : ArrayIterator[nullable Object] */;
7413 val* var_16 /* var : ArrayIterator[MPropDef] */;
7414 short int var17 /* : Bool */;
7415 val* var18 /* : nullable Object */;
7416 val* var_pd /* var pd: MPropDef */;
7417 short int var19 /* : Bool */;
7418 int cltype;
7419 int idtype;
7420 short int var20 /* : Bool */;
7421 val* var21 /* : nullable RapidTypeAnalysis */;
7422 val* var23 /* : nullable RapidTypeAnalysis */;
7423 val* var_rta /* var rta: nullable RapidTypeAnalysis */;
7424 short int var24 /* : Bool */;
7425 short int var25 /* : Bool */;
7426 val* var26 /* : ModelBuilder */;
7427 val* var28 /* : ModelBuilder */;
7428 val* var29 /* : ToolContext */;
7429 val* var31 /* : ToolContext */;
7430 val* var32 /* : OptionBool */;
7431 val* var34 /* : OptionBool */;
7432 val* var35 /* : nullable Object */;
7433 val* var37 /* : nullable Object */;
7434 short int var38 /* : Bool */;
7435 short int var_39 /* var : Bool */;
7436 val* var40 /* : null */;
7437 short int var41 /* : Bool */;
7438 short int var42 /* : Bool */;
7439 val* var_other /* var other: nullable Object */;
7440 short int var44 /* : Bool */;
7441 short int var45 /* : Bool */;
7442 short int var46 /* : Bool */;
7443 short int var_47 /* var : Bool */;
7444 val* var48 /* : HashSet[MMethodDef] */;
7445 val* var50 /* : HashSet[MMethodDef] */;
7446 short int var51 /* : Bool */;
7447 short int var52 /* : Bool */;
7448 val* var53 /* : AbstractRuntimeFunction */;
7449 val* var_r /* var r: AbstractRuntimeFunction */;
7450 val* var54 /* : AbstractRuntimeFunction */;
7451 val* var_r2 /* var r2: AbstractRuntimeFunction */;
7452 var_mmodule = p0;
7453 {
7454 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
7455 var2 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
7456 if (unlikely(var2 == NULL)) {
7457 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
7458 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
7459 show_backtrace(1);
7460 }
7461 var = var2;
7462 RET_LABEL1:(void)0;
7463 }
7464 }
7465 var_old_module = var;
7466 {
7467 { /* Inline abstract_compiler#AbstractCompiler#mainmodule= (self,var_mmodule) on <self:SeparateCompiler> */
7468 self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val = var_mmodule; /* _mainmodule on <self:SeparateCompiler> */
7469 RET_LABEL3:(void)0;
7470 }
7471 }
7472 {
7473 { /* Inline model#MModule#mclassdefs (var_mmodule) on <var_mmodule:MModule> */
7474 var6 = var_mmodule->attrs[COLOR_model__MModule___mclassdefs].val; /* _mclassdefs on <var_mmodule:MModule> */
7475 if (unlikely(var6 == NULL)) {
7476 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdefs");
7477 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 139);
7478 show_backtrace(1);
7479 }
7480 var4 = var6;
7481 RET_LABEL5:(void)0;
7482 }
7483 }
7484 var_ = var4;
7485 {
7486 var7 = array__AbstractArrayRead__iterator(var_);
7487 }
7488 var_8 = var7;
7489 for(;;) {
7490 {
7491 var9 = array__ArrayIterator__is_ok(var_8);
7492 }
7493 if (var9){
7494 {
7495 var10 = array__ArrayIterator__item(var_8);
7496 }
7497 var_cd = var10;
7498 {
7499 { /* Inline model#MClassDef#mpropdefs (var_cd) on <var_cd:MClassDef> */
7500 var13 = var_cd->attrs[COLOR_model__MClassDef___mpropdefs].val; /* _mpropdefs on <var_cd:MClassDef> */
7501 if (unlikely(var13 == NULL)) {
7502 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
7503 PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 591);
7504 show_backtrace(1);
7505 }
7506 var11 = var13;
7507 RET_LABEL12:(void)0;
7508 }
7509 }
7510 var_14 = var11;
7511 {
7512 var15 = array__AbstractArrayRead__iterator(var_14);
7513 }
7514 var_16 = var15;
7515 for(;;) {
7516 {
7517 var17 = array__ArrayIterator__is_ok(var_16);
7518 }
7519 if (var17){
7520 {
7521 var18 = array__ArrayIterator__item(var_16);
7522 }
7523 var_pd = var18;
7524 /* <var_pd:MPropDef> isa MMethodDef */
7525 cltype = type_model__MMethodDef.color;
7526 idtype = type_model__MMethodDef.id;
7527 if(cltype >= var_pd->type->table_size) {
7528 var19 = 0;
7529 } else {
7530 var19 = var_pd->type->type_table[cltype] == idtype;
7531 }
7532 var20 = !var19;
7533 if (var20){
7534 goto BREAK_label;
7535 } else {
7536 }
7537 {
7538 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateCompiler> */
7539 var23 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateCompiler> */
7540 var21 = var23;
7541 RET_LABEL22:(void)0;
7542 }
7543 }
7544 var_rta = var21;
7545 {
7546 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (self) on <self:SeparateCompiler> */
7547 var28 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <self:SeparateCompiler> */
7548 if (unlikely(var28 == NULL)) {
7549 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
7550 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 470);
7551 show_backtrace(1);
7552 }
7553 var26 = var28;
7554 RET_LABEL27:(void)0;
7555 }
7556 }
7557 {
7558 { /* Inline modelbuilder#ModelBuilder#toolcontext (var26) on <var26:ModelBuilder> */
7559 var31 = var26->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <var26:ModelBuilder> */
7560 if (unlikely(var31 == NULL)) {
7561 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
7562 PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
7563 show_backtrace(1);
7564 }
7565 var29 = var31;
7566 RET_LABEL30:(void)0;
7567 }
7568 }
7569 {
7570 { /* Inline separate_compiler#ToolContext#opt_skip_dead_methods (var29) on <var29:ToolContext> */
7571 var34 = var29->attrs[COLOR_separate_compiler__ToolContext___opt_skip_dead_methods].val; /* _opt_skip_dead_methods on <var29:ToolContext> */
7572 if (unlikely(var34 == NULL)) {
7573 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_skip_dead_methods");
7574 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 38);
7575 show_backtrace(1);
7576 }
7577 var32 = var34;
7578 RET_LABEL33:(void)0;
7579 }
7580 }
7581 {
7582 { /* Inline opts#Option#value (var32) on <var32:OptionBool> */
7583 var37 = var32->attrs[COLOR_opts__Option___value].val; /* _value on <var32:OptionBool> */
7584 var35 = var37;
7585 RET_LABEL36:(void)0;
7586 }
7587 }
7588 var38 = ((struct instance_kernel__Bool*)var35)->value; /* autounbox from nullable Object to Bool */;
7589 var_39 = var38;
7590 if (var38){
7591 var40 = NULL;
7592 if (var_rta == NULL) {
7593 var41 = 0; /* is null */
7594 } else {
7595 var41 = 1; /* arg is null and recv is not */
7596 }
7597 if (0) {
7598 { /* Inline kernel#Object#!= (var_rta,var40) on <var_rta:nullable RapidTypeAnalysis> */
7599 var_other = var40;
7600 {
7601 var45 = ((short int (*)(val*, val*))(var_rta->class->vft[COLOR_kernel__Object___61d_61d]))(var_rta, var_other) /* == on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/;
7602 var44 = var45;
7603 }
7604 var46 = !var44;
7605 var42 = var46;
7606 goto RET_LABEL43;
7607 RET_LABEL43:(void)0;
7608 }
7609 var41 = var42;
7610 }
7611 var25 = var41;
7612 } else {
7613 var25 = var_39;
7614 }
7615 var_47 = var25;
7616 if (var25){
7617 {
7618 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_methoddefs (var_rta) on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
7619 var50 = var_rta->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_methoddefs].val; /* _live_methoddefs on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
7620 if (unlikely(var50 == NULL)) {
7621 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_methoddefs");
7622 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 72);
7623 show_backtrace(1);
7624 }
7625 var48 = var50;
7626 RET_LABEL49:(void)0;
7627 }
7628 }
7629 {
7630 var51 = hash_collection__HashSet__has(var48, var_pd);
7631 }
7632 var52 = !var51;
7633 var24 = var52;
7634 } else {
7635 var24 = var_47;
7636 }
7637 if (var24){
7638 goto BREAK_label;
7639 } else {
7640 }
7641 {
7642 var53 = separate_compiler__MMethodDef__separate_runtime_function(var_pd);
7643 }
7644 var_r = var53;
7645 {
7646 ((void (*)(val*, val*))(var_r->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__compile_to_c]))(var_r, self) /* compile_to_c on <var_r:AbstractRuntimeFunction>*/;
7647 }
7648 {
7649 var54 = separate_compiler__MMethodDef__virtual_runtime_function(var_pd);
7650 }
7651 var_r2 = var54;
7652 {
7653 ((void (*)(val*, val*))(var_r2->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__compile_to_c]))(var_r2, self) /* compile_to_c on <var_r2:AbstractRuntimeFunction>*/;
7654 }
7655 BREAK_label: (void)0;
7656 {
7657 array__ArrayIterator__next(var_16); /* Direct call array#ArrayIterator#next on <var_16:ArrayIterator[MPropDef]>*/
7658 }
7659 } else {
7660 goto BREAK_label55;
7661 }
7662 }
7663 BREAK_label55: (void)0;
7664 {
7665 { /* Inline abstract_collection#Iterator#finish (var_16) on <var_16:ArrayIterator[MPropDef]> */
7666 RET_LABEL56:(void)0;
7667 }
7668 }
7669 {
7670 array__ArrayIterator__next(var_8); /* Direct call array#ArrayIterator#next on <var_8:ArrayIterator[MClassDef]>*/
7671 }
7672 } else {
7673 goto BREAK_label57;
7674 }
7675 }
7676 BREAK_label57: (void)0;
7677 {
7678 { /* Inline abstract_collection#Iterator#finish (var_8) on <var_8:ArrayIterator[MClassDef]> */
7679 RET_LABEL58:(void)0;
7680 }
7681 }
7682 {
7683 { /* Inline abstract_compiler#AbstractCompiler#mainmodule= (self,var_old_module) on <self:SeparateCompiler> */
7684 self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val = var_old_module; /* _mainmodule on <self:SeparateCompiler> */
7685 RET_LABEL59:(void)0;
7686 }
7687 }
7688 RET_LABEL:;
7689 }
7690 /* method separate_compiler#SeparateCompiler#compile_module_to_c for (self: Object, MModule) */
7691 void VIRTUAL_separate_compiler__SeparateCompiler__compile_module_to_c(val* self, val* p0) {
7692 separate_compiler__SeparateCompiler__compile_module_to_c(self, p0); /* Direct call separate_compiler#SeparateCompiler#compile_module_to_c on <self:Object(SeparateCompiler)>*/
7693 RET_LABEL:;
7694 }
7695 /* method separate_compiler#SeparateCompiler#compile_type_to_c for (self: SeparateCompiler, MType) */
7696 void separate_compiler__SeparateCompiler__compile_type_to_c(val* self, val* p0) {
7697 val* var_mtype /* var mtype: MType */;
7698 short int var /* : Bool */;
7699 short int var1 /* : Bool */;
7700 short int var2 /* : Bool */;
7701 short int var3 /* : Bool */;
7702 int cltype;
7703 int idtype;
7704 short int var_ /* var : Bool */;
7705 val* var4 /* : nullable RapidTypeAnalysis */;
7706 val* var6 /* : nullable RapidTypeAnalysis */;
7707 val* var7 /* : HashSet[MClassType] */;
7708 val* var9 /* : HashSet[MClassType] */;
7709 short int var10 /* : Bool */;
7710 short int var_is_live /* var is_live: Bool */;
7711 val* var11 /* : nullable RapidTypeAnalysis */;
7712 val* var13 /* : nullable RapidTypeAnalysis */;
7713 val* var14 /* : HashSet[MType] */;
7714 val* var16 /* : HashSet[MType] */;
7715 short int var17 /* : Bool */;
7716 short int var_is_cast_live /* var is_cast_live: Bool */;
7717 val* var18 /* : String */;
7718 val* var_c_name /* var c_name: String */;
7719 val* var19 /* : SeparateCompilerVisitor */;
7720 val* var_v /* var v: SeparateCompilerVisitor */;
7721 static val* varonce;
7722 val* var20 /* : String */;
7723 char* var21 /* : NativeString */;
7724 long var22 /* : Int */;
7725 val* var23 /* : FlatString */;
7726 static val* varonce24;
7727 val* var25 /* : String */;
7728 char* var26 /* : NativeString */;
7729 long var27 /* : Int */;
7730 val* var28 /* : FlatString */;
7731 val* var29 /* : Array[Object] */;
7732 long var30 /* : Int */;
7733 val* var31 /* : NativeArray[Object] */;
7734 val* var32 /* : String */;
7735 static val* varonce33;
7736 val* var34 /* : String */;
7737 char* var35 /* : NativeString */;
7738 long var36 /* : Int */;
7739 val* var37 /* : FlatString */;
7740 val* var38 /* : Array[Object] */;
7741 long var39 /* : Int */;
7742 val* var40 /* : NativeArray[Object] */;
7743 val* var41 /* : String */;
7744 static val* varonce42;
7745 val* var43 /* : String */;
7746 char* var44 /* : NativeString */;
7747 long var45 /* : Int */;
7748 val* var46 /* : FlatString */;
7749 static val* varonce47;
7750 val* var48 /* : String */;
7751 char* var49 /* : NativeString */;
7752 long var50 /* : Int */;
7753 val* var51 /* : FlatString */;
7754 val* var52 /* : Array[Object] */;
7755 long var53 /* : Int */;
7756 val* var54 /* : NativeArray[Object] */;
7757 val* var55 /* : String */;
7758 static val* varonce56;
7759 val* var57 /* : String */;
7760 char* var58 /* : NativeString */;
7761 long var59 /* : Int */;
7762 val* var60 /* : FlatString */;
7763 static val* varonce61;
7764 val* var62 /* : String */;
7765 char* var63 /* : NativeString */;
7766 long var64 /* : Int */;
7767 val* var65 /* : FlatString */;
7768 val* var66 /* : Array[Object] */;
7769 long var67 /* : Int */;
7770 val* var68 /* : NativeArray[Object] */;
7771 val* var69 /* : String */;
7772 val* var70 /* : Map[MType, Int] */;
7773 val* var72 /* : Map[MType, Int] */;
7774 val* var73 /* : nullable Object */;
7775 static val* varonce74;
7776 val* var75 /* : String */;
7777 char* var76 /* : NativeString */;
7778 long var77 /* : Int */;
7779 val* var78 /* : FlatString */;
7780 val* var79 /* : Array[Object] */;
7781 long var80 /* : Int */;
7782 val* var81 /* : NativeArray[Object] */;
7783 val* var82 /* : String */;
7784 static val* varonce83;
7785 val* var84 /* : String */;
7786 char* var85 /* : NativeString */;
7787 long var86 /* : Int */;
7788 val* var87 /* : FlatString */;
7789 static val* varonce88;
7790 val* var89 /* : String */;
7791 char* var90 /* : NativeString */;
7792 long var91 /* : Int */;
7793 val* var92 /* : FlatString */;
7794 static val* varonce93;
7795 val* var94 /* : String */;
7796 char* var95 /* : NativeString */;
7797 long var96 /* : Int */;
7798 val* var97 /* : FlatString */;
7799 val* var98 /* : Array[Object] */;
7800 long var99 /* : Int */;
7801 val* var100 /* : NativeArray[Object] */;
7802 val* var101 /* : String */;
7803 val* var102 /* : Map[MType, Int] */;
7804 val* var104 /* : Map[MType, Int] */;
7805 val* var105 /* : nullable Object */;
7806 static val* varonce106;
7807 val* var107 /* : String */;
7808 char* var108 /* : NativeString */;
7809 long var109 /* : Int */;
7810 val* var110 /* : FlatString */;
7811 val* var111 /* : Array[Object] */;
7812 long var112 /* : Int */;
7813 val* var113 /* : NativeArray[Object] */;
7814 val* var114 /* : String */;
7815 static val* varonce115;
7816 val* var116 /* : String */;
7817 char* var117 /* : NativeString */;
7818 long var118 /* : Int */;
7819 val* var119 /* : FlatString */;
7820 short int var120 /* : Bool */;
7821 int cltype121;
7822 int idtype122;
7823 static val* varonce123;
7824 val* var124 /* : String */;
7825 char* var125 /* : NativeString */;
7826 long var126 /* : Int */;
7827 val* var127 /* : FlatString */;
7828 static val* varonce128;
7829 val* var129 /* : String */;
7830 char* var130 /* : NativeString */;
7831 long var131 /* : Int */;
7832 val* var132 /* : FlatString */;
7833 val* var133 /* : MType */;
7834 val* var_mclass_type /* var mclass_type: MType */;
7835 short int var134 /* : Bool */;
7836 int cltype135;
7837 int idtype136;
7838 val* var137 /* : Map[MClassType, Array[nullable MType]] */;
7839 val* var139 /* : Map[MClassType, Array[nullable MType]] */;
7840 val* var140 /* : nullable Object */;
7841 short int var141 /* : Bool */;
7842 static val* varonce142;
7843 val* var143 /* : String */;
7844 char* var144 /* : NativeString */;
7845 long var145 /* : Int */;
7846 val* var146 /* : FlatString */;
7847 static val* varonce147;
7848 val* var148 /* : String */;
7849 char* var149 /* : NativeString */;
7850 long var150 /* : Int */;
7851 val* var151 /* : FlatString */;
7852 val* var152 /* : Array[Object] */;
7853 long var153 /* : Int */;
7854 val* var154 /* : NativeArray[Object] */;
7855 val* var155 /* : String */;
7856 static val* varonce156;
7857 val* var157 /* : String */;
7858 char* var158 /* : NativeString */;
7859 long var159 /* : Int */;
7860 val* var160 /* : FlatString */;
7861 static val* varonce161;
7862 val* var162 /* : String */;
7863 char* var163 /* : NativeString */;
7864 long var164 /* : Int */;
7865 val* var165 /* : FlatString */;
7866 val* var166 /* : Array[Object] */;
7867 long var167 /* : Int */;
7868 val* var168 /* : NativeArray[Object] */;
7869 val* var169 /* : String */;
7870 static val* varonce170;
7871 val* var171 /* : String */;
7872 char* var172 /* : NativeString */;
7873 long var173 /* : Int */;
7874 val* var174 /* : FlatString */;
7875 val* var175 /* : Map[MType, Array[nullable MType]] */;
7876 val* var177 /* : Map[MType, Array[nullable MType]] */;
7877 val* var178 /* : nullable Object */;
7878 long var179 /* : Int */;
7879 long var181 /* : Int */;
7880 static val* varonce182;
7881 val* var183 /* : String */;
7882 char* var184 /* : NativeString */;
7883 long var185 /* : Int */;
7884 val* var186 /* : FlatString */;
7885 val* var187 /* : Array[Object] */;
7886 long var188 /* : Int */;
7887 val* var189 /* : NativeArray[Object] */;
7888 val* var190 /* : Object */;
7889 val* var191 /* : String */;
7890 static val* varonce192;
7891 val* var193 /* : String */;
7892 char* var194 /* : NativeString */;
7893 long var195 /* : Int */;
7894 val* var196 /* : FlatString */;
7895 val* var197 /* : Map[MType, Array[nullable MType]] */;
7896 val* var199 /* : Map[MType, Array[nullable MType]] */;
7897 val* var200 /* : nullable Object */;
7898 val* var_201 /* var : Array[nullable MType] */;
7899 val* var202 /* : ArrayIterator[nullable Object] */;
7900 val* var_203 /* var : ArrayIterator[nullable MType] */;
7901 short int var204 /* : Bool */;
7902 val* var205 /* : nullable Object */;
7903 val* var_stype /* var stype: nullable MType */;
7904 val* var206 /* : null */;
7905 short int var207 /* : Bool */;
7906 short int var208 /* : Bool */;
7907 val* var_other /* var other: nullable Object */;
7908 short int var210 /* : Bool */;
7909 short int var212 /* : Bool */;
7910 static val* varonce213;
7911 val* var214 /* : String */;
7912 char* var215 /* : NativeString */;
7913 long var216 /* : Int */;
7914 val* var217 /* : FlatString */;
7915 val* var218 /* : Map[MType, Int] */;
7916 val* var220 /* : Map[MType, Int] */;
7917 val* var221 /* : nullable Object */;
7918 static val* varonce222;
7919 val* var223 /* : String */;
7920 char* var224 /* : NativeString */;
7921 long var225 /* : Int */;
7922 val* var226 /* : FlatString */;
7923 static val* varonce227;
7924 val* var228 /* : String */;
7925 char* var229 /* : NativeString */;
7926 long var230 /* : Int */;
7927 val* var231 /* : FlatString */;
7928 val* var232 /* : Array[Object] */;
7929 long var233 /* : Int */;
7930 val* var234 /* : NativeArray[Object] */;
7931 val* var235 /* : String */;
7932 static val* varonce237;
7933 val* var238 /* : String */;
7934 char* var239 /* : NativeString */;
7935 long var240 /* : Int */;
7936 val* var241 /* : FlatString */;
7937 static val* varonce242;
7938 val* var243 /* : String */;
7939 char* var244 /* : NativeString */;
7940 long var245 /* : Int */;
7941 val* var246 /* : FlatString */;
7942 static val* varonce247;
7943 val* var248 /* : String */;
7944 char* var249 /* : NativeString */;
7945 long var250 /* : Int */;
7946 val* var251 /* : FlatString */;
7947 var_mtype = p0;
7948 {
7949 var = ((short int (*)(val*))(var_mtype->class->vft[COLOR_model__MType__need_anchor]))(var_mtype) /* need_anchor on <var_mtype:MType>*/;
7950 }
7951 var1 = !var;
7952 if (unlikely(!var1)) {
7953 PRINT_ERROR("Runtime error: %s", "Assert failed");
7954 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 561);
7955 show_backtrace(1);
7956 }
7957 /* <var_mtype:MType> isa MClassType */
7958 cltype = type_model__MClassType.color;
7959 idtype = type_model__MClassType.id;
7960 if(cltype >= var_mtype->type->table_size) {
7961 var3 = 0;
7962 } else {
7963 var3 = var_mtype->type->type_table[cltype] == idtype;
7964 }
7965 var_ = var3;
7966 if (var3){
7967 {
7968 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateCompiler> */
7969 var6 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateCompiler> */
7970 var4 = var6;
7971 RET_LABEL5:(void)0;
7972 }
7973 }
7974 if (var4 == NULL) {
7975 PRINT_ERROR("Runtime error: %s", "Receiver is null");
7976 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 562);
7977 show_backtrace(1);
7978 } else {
7979 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_types (var4) on <var4:nullable RapidTypeAnalysis> */
7980 if (unlikely(var4 == NULL)) {
7981 PRINT_ERROR("Runtime error: %s", "Receiver is null");
7982 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 53);
7983 show_backtrace(1);
7984 }
7985 var9 = var4->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_types].val; /* _live_types on <var4:nullable RapidTypeAnalysis> */
7986 if (unlikely(var9 == NULL)) {
7987 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_types");
7988 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 53);
7989 show_backtrace(1);
7990 }
7991 var7 = var9;
7992 RET_LABEL8:(void)0;
7993 }
7994 }
7995 {
7996 var10 = hash_collection__HashSet__has(var7, var_mtype);
7997 }
7998 var2 = var10;
7999 } else {
8000 var2 = var_;
8001 }
8002 var_is_live = var2;
8003 {
8004 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateCompiler> */
8005 var13 = self->attrs[COLOR_separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateCompiler> */
8006 var11 = var13;
8007 RET_LABEL12:(void)0;
8008 }
8009 }
8010 if (var11 == NULL) {
8011 PRINT_ERROR("Runtime error: %s", "Receiver is null");
8012 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 563);
8013 show_backtrace(1);
8014 } else {
8015 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_cast_types (var11) on <var11:nullable RapidTypeAnalysis> */
8016 if (unlikely(var11 == NULL)) {
8017 PRINT_ERROR("Runtime error: %s", "Receiver is null");
8018 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 65);
8019 show_backtrace(1);
8020 }
8021 var16 = var11->attrs[COLOR_rapid_type_analysis__RapidTypeAnalysis___live_cast_types].val; /* _live_cast_types on <var11:nullable RapidTypeAnalysis> */
8022 if (unlikely(var16 == NULL)) {
8023 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_cast_types");
8024 PRINT_ERROR(" (%s:%d)\n", "rapid_type_analysis.nit", 65);
8025 show_backtrace(1);
8026 }
8027 var14 = var16;
8028 RET_LABEL15:(void)0;
8029 }
8030 }
8031 {
8032 var17 = hash_collection__HashSet__has(var14, var_mtype);
8033 }
8034 var_is_cast_live = var17;
8035 {
8036 var18 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
8037 }
8038 var_c_name = var18;
8039 var19 = NEW_separate_compiler__SeparateCompilerVisitor(&type_separate_compiler__SeparateCompilerVisitor);
8040 {
8041 abstract_compiler__AbstractCompilerVisitor__init(var19, self); /* Direct call abstract_compiler#AbstractCompilerVisitor#init on <var19:SeparateCompilerVisitor>*/
8042 }
8043 var_v = var19;
8044 if (varonce) {
8045 var20 = varonce;
8046 } else {
8047 var21 = "/* runtime type ";
8048 var22 = 16;
8049 var23 = string__NativeString__to_s_with_length(var21, var22);
8050 var20 = var23;
8051 varonce = var20;
8052 }
8053 if (varonce24) {
8054 var25 = varonce24;
8055 } else {
8056 var26 = " */";
8057 var27 = 3;
8058 var28 = string__NativeString__to_s_with_length(var26, var27);
8059 var25 = var28;
8060 varonce24 = var25;
8061 }
8062 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
8063 { /* var29 = array_instance Array[Object] */
8064 var30 = 3;
8065 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
8066 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var20;
8067 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var_mtype;
8068 ((struct instance_array__NativeArray*)var31)->values[2] = (val*) var25;
8069 {
8070 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
8071 }
8072 }
8073 {
8074 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
8075 }
8076 {
8077 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var32); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8078 }
8079 if (varonce33) {
8080 var34 = varonce33;
8081 } else {
8082 var35 = "type_";
8083 var36 = 5;
8084 var37 = string__NativeString__to_s_with_length(var35, var36);
8085 var34 = var37;
8086 varonce33 = var34;
8087 }
8088 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
8089 { /* var38 = array_instance Array[Object] */
8090 var39 = 2;
8091 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
8092 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var34;
8093 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_c_name;
8094 {
8095 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
8096 }
8097 }
8098 {
8099 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
8100 }
8101 if (varonce42) {
8102 var43 = varonce42;
8103 } else {
8104 var44 = "extern const struct type type_";
8105 var45 = 30;
8106 var46 = string__NativeString__to_s_with_length(var44, var45);
8107 var43 = var46;
8108 varonce42 = var43;
8109 }
8110 if (varonce47) {
8111 var48 = varonce47;
8112 } else {
8113 var49 = ";";
8114 var50 = 1;
8115 var51 = string__NativeString__to_s_with_length(var49, var50);
8116 var48 = var51;
8117 varonce47 = var48;
8118 }
8119 var52 = NEW_array__Array(&type_array__Arraykernel__Object);
8120 { /* var52 = array_instance Array[Object] */
8121 var53 = 3;
8122 var54 = NEW_array__NativeArray(var53, &type_array__NativeArraykernel__Object);
8123 ((struct instance_array__NativeArray*)var54)->values[0] = (val*) var43;
8124 ((struct instance_array__NativeArray*)var54)->values[1] = (val*) var_c_name;
8125 ((struct instance_array__NativeArray*)var54)->values[2] = (val*) var48;
8126 {
8127 ((void (*)(val*, val*, long))(var52->class->vft[COLOR_array__Array__with_native]))(var52, var54, var53) /* with_native on <var52:Array[Object]>*/;
8128 }
8129 }
8130 {
8131 var55 = ((val* (*)(val*))(var52->class->vft[COLOR_string__Object__to_s]))(var52) /* to_s on <var52:Array[Object]>*/;
8132 }
8133 {
8134 abstract_compiler__AbstractCompiler__provide_declaration(self, var41, var55); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateCompiler>*/
8135 }
8136 if (varonce56) {
8137 var57 = varonce56;
8138 } else {
8139 var58 = "const struct type type_";
8140 var59 = 23;
8141 var60 = string__NativeString__to_s_with_length(var58, var59);
8142 var57 = var60;
8143 varonce56 = var57;
8144 }
8145 if (varonce61) {
8146 var62 = varonce61;
8147 } else {
8148 var63 = " = {";
8149 var64 = 4;
8150 var65 = string__NativeString__to_s_with_length(var63, var64);
8151 var62 = var65;
8152 varonce61 = var62;
8153 }
8154 var66 = NEW_array__Array(&type_array__Arraykernel__Object);
8155 { /* var66 = array_instance Array[Object] */
8156 var67 = 3;
8157 var68 = NEW_array__NativeArray(var67, &type_array__NativeArraykernel__Object);
8158 ((struct instance_array__NativeArray*)var68)->values[0] = (val*) var57;
8159 ((struct instance_array__NativeArray*)var68)->values[1] = (val*) var_c_name;
8160 ((struct instance_array__NativeArray*)var68)->values[2] = (val*) var62;
8161 {
8162 ((void (*)(val*, val*, long))(var66->class->vft[COLOR_array__Array__with_native]))(var66, var68, var67) /* with_native on <var66:Array[Object]>*/;
8163 }
8164 }
8165 {
8166 var69 = ((val* (*)(val*))(var66->class->vft[COLOR_string__Object__to_s]))(var66) /* to_s on <var66:Array[Object]>*/;
8167 }
8168 {
8169 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var69); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8170 }
8171 if (var_is_cast_live){
8172 {
8173 { /* Inline separate_compiler#SeparateCompiler#type_ids (self) on <self:SeparateCompiler> */
8174 var72 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_ids].val; /* _type_ids on <self:SeparateCompiler> */
8175 if (unlikely(var72 == NULL)) {
8176 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_ids");
8177 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 159);
8178 show_backtrace(1);
8179 }
8180 var70 = var72;
8181 RET_LABEL71:(void)0;
8182 }
8183 }
8184 {
8185 var73 = ((val* (*)(val*, val*))(var70->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var70, var_mtype) /* [] on <var70:Map[MType, Int]>*/;
8186 }
8187 if (varonce74) {
8188 var75 = varonce74;
8189 } else {
8190 var76 = ",";
8191 var77 = 1;
8192 var78 = string__NativeString__to_s_with_length(var76, var77);
8193 var75 = var78;
8194 varonce74 = var75;
8195 }
8196 var79 = NEW_array__Array(&type_array__Arraykernel__Object);
8197 { /* var79 = array_instance Array[Object] */
8198 var80 = 2;
8199 var81 = NEW_array__NativeArray(var80, &type_array__NativeArraykernel__Object);
8200 ((struct instance_array__NativeArray*)var81)->values[0] = (val*) var73;
8201 ((struct instance_array__NativeArray*)var81)->values[1] = (val*) var75;
8202 {
8203 ((void (*)(val*, val*, long))(var79->class->vft[COLOR_array__Array__with_native]))(var79, var81, var80) /* with_native on <var79:Array[Object]>*/;
8204 }
8205 }
8206 {
8207 var82 = ((val* (*)(val*))(var79->class->vft[COLOR_string__Object__to_s]))(var79) /* to_s on <var79:Array[Object]>*/;
8208 }
8209 {
8210 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var82); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8211 }
8212 } else {
8213 if (varonce83) {
8214 var84 = varonce83;
8215 } else {
8216 var85 = "-1, /*CAST DEAD*/";
8217 var86 = 17;
8218 var87 = string__NativeString__to_s_with_length(var85, var86);
8219 var84 = var87;
8220 varonce83 = var84;
8221 }
8222 {
8223 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var84); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8224 }
8225 }
8226 if (varonce88) {
8227 var89 = varonce88;
8228 } else {
8229 var90 = "\"";
8230 var91 = 1;
8231 var92 = string__NativeString__to_s_with_length(var90, var91);
8232 var89 = var92;
8233 varonce88 = var89;
8234 }
8235 if (varonce93) {
8236 var94 = varonce93;
8237 } else {
8238 var95 = "\", /* class_name_string */";
8239 var96 = 26;
8240 var97 = string__NativeString__to_s_with_length(var95, var96);
8241 var94 = var97;
8242 varonce93 = var94;
8243 }
8244 var98 = NEW_array__Array(&type_array__Arraykernel__Object);
8245 { /* var98 = array_instance Array[Object] */
8246 var99 = 3;
8247 var100 = NEW_array__NativeArray(var99, &type_array__NativeArraykernel__Object);
8248 ((struct instance_array__NativeArray*)var100)->values[0] = (val*) var89;
8249 ((struct instance_array__NativeArray*)var100)->values[1] = (val*) var_mtype;
8250 ((struct instance_array__NativeArray*)var100)->values[2] = (val*) var94;
8251 {
8252 ((void (*)(val*, val*, long))(var98->class->vft[COLOR_array__Array__with_native]))(var98, var100, var99) /* with_native on <var98:Array[Object]>*/;
8253 }
8254 }
8255 {
8256 var101 = ((val* (*)(val*))(var98->class->vft[COLOR_string__Object__to_s]))(var98) /* to_s on <var98:Array[Object]>*/;
8257 }
8258 {
8259 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var101); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8260 }
8261 if (var_is_cast_live){
8262 {
8263 { /* Inline separate_compiler#SeparateCompiler#type_colors (self) on <self:SeparateCompiler> */
8264 var104 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_colors].val; /* _type_colors on <self:SeparateCompiler> */
8265 if (unlikely(var104 == NULL)) {
8266 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_colors");
8267 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 160);
8268 show_backtrace(1);
8269 }
8270 var102 = var104;
8271 RET_LABEL103:(void)0;
8272 }
8273 }
8274 {
8275 var105 = ((val* (*)(val*, val*))(var102->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var102, var_mtype) /* [] on <var102:Map[MType, Int]>*/;
8276 }
8277 if (varonce106) {
8278 var107 = varonce106;
8279 } else {
8280 var108 = ",";
8281 var109 = 1;
8282 var110 = string__NativeString__to_s_with_length(var108, var109);
8283 var107 = var110;
8284 varonce106 = var107;
8285 }
8286 var111 = NEW_array__Array(&type_array__Arraykernel__Object);
8287 { /* var111 = array_instance Array[Object] */
8288 var112 = 2;
8289 var113 = NEW_array__NativeArray(var112, &type_array__NativeArraykernel__Object);
8290 ((struct instance_array__NativeArray*)var113)->values[0] = (val*) var105;
8291 ((struct instance_array__NativeArray*)var113)->values[1] = (val*) var107;
8292 {
8293 ((void (*)(val*, val*, long))(var111->class->vft[COLOR_array__Array__with_native]))(var111, var113, var112) /* with_native on <var111:Array[Object]>*/;
8294 }
8295 }
8296 {
8297 var114 = ((val* (*)(val*))(var111->class->vft[COLOR_string__Object__to_s]))(var111) /* to_s on <var111:Array[Object]>*/;
8298 }
8299 {
8300 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var114); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8301 }
8302 } else {
8303 if (varonce115) {
8304 var116 = varonce115;
8305 } else {
8306 var117 = "-1, /*CAST DEAD*/";
8307 var118 = 17;
8308 var119 = string__NativeString__to_s_with_length(var117, var118);
8309 var116 = var119;
8310 varonce115 = var116;
8311 }
8312 {
8313 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var116); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8314 }
8315 }
8316 /* <var_mtype:MType> isa MNullableType */
8317 cltype121 = type_model__MNullableType.color;
8318 idtype122 = type_model__MNullableType.id;
8319 if(cltype121 >= var_mtype->type->table_size) {
8320 var120 = 0;
8321 } else {
8322 var120 = var_mtype->type->type_table[cltype121] == idtype122;
8323 }
8324 if (var120){
8325 if (varonce123) {
8326 var124 = varonce123;
8327 } else {
8328 var125 = "1,";
8329 var126 = 2;
8330 var127 = string__NativeString__to_s_with_length(var125, var126);
8331 var124 = var127;
8332 varonce123 = var124;
8333 }
8334 {
8335 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var124); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8336 }
8337 } else {
8338 if (varonce128) {
8339 var129 = varonce128;
8340 } else {
8341 var130 = "0,";
8342 var131 = 2;
8343 var132 = string__NativeString__to_s_with_length(var130, var131);
8344 var129 = var132;
8345 varonce128 = var129;
8346 }
8347 {
8348 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var129); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8349 }
8350 }
8351 if (var_is_live){
8352 {
8353 var133 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MType__as_notnullable]))(var_mtype) /* as_notnullable on <var_mtype:MType>*/;
8354 }
8355 var_mclass_type = var133;
8356 /* <var_mclass_type:MType> isa MClassType */
8357 cltype135 = type_model__MClassType.color;
8358 idtype136 = type_model__MClassType.id;
8359 if(cltype135 >= var_mclass_type->type->table_size) {
8360 var134 = 0;
8361 } else {
8362 var134 = var_mclass_type->type->type_table[cltype135] == idtype136;
8363 }
8364 if (unlikely(!var134)) {
8365 PRINT_ERROR("Runtime error: %s", "Assert failed");
8366 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 601);
8367 show_backtrace(1);
8368 }
8369 {
8370 { /* Inline separate_compiler#SeparateCompiler#resolution_tables (self) on <self:SeparateCompiler> */
8371 var139 = self->attrs[COLOR_separate_compiler__SeparateCompiler___resolution_tables].val; /* _resolution_tables on <self:SeparateCompiler> */
8372 if (unlikely(var139 == NULL)) {
8373 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _resolution_tables");
8374 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 844);
8375 show_backtrace(1);
8376 }
8377 var137 = var139;
8378 RET_LABEL138:(void)0;
8379 }
8380 }
8381 {
8382 var140 = ((val* (*)(val*, val*))(var137->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var137, var_mclass_type) /* [] on <var137:Map[MClassType, Array[nullable MType]]>*/;
8383 }
8384 {
8385 var141 = array__AbstractArrayRead__is_empty(var140);
8386 }
8387 if (var141){
8388 if (varonce142) {
8389 var143 = varonce142;
8390 } else {
8391 var144 = "NULL, /*NO RESOLUTIONS*/";
8392 var145 = 24;
8393 var146 = string__NativeString__to_s_with_length(var144, var145);
8394 var143 = var146;
8395 varonce142 = var143;
8396 }
8397 {
8398 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var143); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8399 }
8400 } else {
8401 {
8402 separate_compiler__SeparateCompiler__compile_type_resolution_table(self, var_mtype); /* Direct call separate_compiler#SeparateCompiler#compile_type_resolution_table on <self:SeparateCompiler>*/
8403 }
8404 if (varonce147) {
8405 var148 = varonce147;
8406 } else {
8407 var149 = "resolution_table_";
8408 var150 = 17;
8409 var151 = string__NativeString__to_s_with_length(var149, var150);
8410 var148 = var151;
8411 varonce147 = var148;
8412 }
8413 var152 = NEW_array__Array(&type_array__Arraykernel__Object);
8414 { /* var152 = array_instance Array[Object] */
8415 var153 = 2;
8416 var154 = NEW_array__NativeArray(var153, &type_array__NativeArraykernel__Object);
8417 ((struct instance_array__NativeArray*)var154)->values[0] = (val*) var148;
8418 ((struct instance_array__NativeArray*)var154)->values[1] = (val*) var_c_name;
8419 {
8420 ((void (*)(val*, val*, long))(var152->class->vft[COLOR_array__Array__with_native]))(var152, var154, var153) /* with_native on <var152:Array[Object]>*/;
8421 }
8422 }
8423 {
8424 var155 = ((val* (*)(val*))(var152->class->vft[COLOR_string__Object__to_s]))(var152) /* to_s on <var152:Array[Object]>*/;
8425 }
8426 {
8427 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var155); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
8428 }
8429 if (varonce156) {
8430 var157 = varonce156;
8431 } else {
8432 var158 = "&resolution_table_";
8433 var159 = 18;
8434 var160 = string__NativeString__to_s_with_length(var158, var159);
8435 var157 = var160;
8436 varonce156 = var157;
8437 }
8438 if (varonce161) {
8439 var162 = varonce161;
8440 } else {
8441 var163 = ",";
8442 var164 = 1;
8443 var165 = string__NativeString__to_s_with_length(var163, var164);
8444 var162 = var165;
8445 varonce161 = var162;
8446 }
8447 var166 = NEW_array__Array(&type_array__Arraykernel__Object);
8448 { /* var166 = array_instance Array[Object] */
8449 var167 = 3;
8450 var168 = NEW_array__NativeArray(var167, &type_array__NativeArraykernel__Object);
8451 ((struct instance_array__NativeArray*)var168)->values[0] = (val*) var157;
8452 ((struct instance_array__NativeArray*)var168)->values[1] = (val*) var_c_name;
8453 ((struct instance_array__NativeArray*)var168)->values[2] = (val*) var162;
8454 {
8455 ((void (*)(val*, val*, long))(var166->class->vft[COLOR_array__Array__with_native]))(var166, var168, var167) /* with_native on <var166:Array[Object]>*/;
8456 }
8457 }
8458 {
8459 var169 = ((val* (*)(val*))(var166->class->vft[COLOR_string__Object__to_s]))(var166) /* to_s on <var166:Array[Object]>*/;
8460 }
8461 {
8462 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var169); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8463 }
8464 }
8465 } else {
8466 if (varonce170) {
8467 var171 = varonce170;
8468 } else {
8469 var172 = "NULL, /*DEAD*/";
8470 var173 = 14;
8471 var174 = string__NativeString__to_s_with_length(var172, var173);
8472 var171 = var174;
8473 varonce170 = var171;
8474 }
8475 {
8476 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var171); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8477 }
8478 }
8479 if (var_is_live){
8480 {
8481 { /* Inline separate_compiler#SeparateCompiler#type_tables (self) on <self:SeparateCompiler> */
8482 var177 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_tables].val; /* _type_tables on <self:SeparateCompiler> */
8483 if (unlikely(var177 == NULL)) {
8484 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_tables");
8485 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 843);
8486 show_backtrace(1);
8487 }
8488 var175 = var177;
8489 RET_LABEL176:(void)0;
8490 }
8491 }
8492 {
8493 var178 = ((val* (*)(val*, val*))(var175->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var175, var_mtype) /* [] on <var175:Map[MType, Array[nullable MType]]>*/;
8494 }
8495 {
8496 { /* Inline array#AbstractArrayRead#length (var178) on <var178:nullable Object(Array[nullable MType])> */
8497 var181 = var178->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var178:nullable Object(Array[nullable MType])> */
8498 var179 = var181;
8499 RET_LABEL180:(void)0;
8500 }
8501 }
8502 if (varonce182) {
8503 var183 = varonce182;
8504 } else {
8505 var184 = ",";
8506 var185 = 1;
8507 var186 = string__NativeString__to_s_with_length(var184, var185);
8508 var183 = var186;
8509 varonce182 = var183;
8510 }
8511 var187 = NEW_array__Array(&type_array__Arraykernel__Object);
8512 { /* var187 = array_instance Array[Object] */
8513 var188 = 2;
8514 var189 = NEW_array__NativeArray(var188, &type_array__NativeArraykernel__Object);
8515 var190 = BOX_kernel__Int(var179); /* autobox from Int to Object */
8516 ((struct instance_array__NativeArray*)var189)->values[0] = (val*) var190;
8517 ((struct instance_array__NativeArray*)var189)->values[1] = (val*) var183;
8518 {
8519 ((void (*)(val*, val*, long))(var187->class->vft[COLOR_array__Array__with_native]))(var187, var189, var188) /* with_native on <var187:Array[Object]>*/;
8520 }
8521 }
8522 {
8523 var191 = ((val* (*)(val*))(var187->class->vft[COLOR_string__Object__to_s]))(var187) /* to_s on <var187:Array[Object]>*/;
8524 }
8525 {
8526 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var191); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8527 }
8528 if (varonce192) {
8529 var193 = varonce192;
8530 } else {
8531 var194 = "{";
8532 var195 = 1;
8533 var196 = string__NativeString__to_s_with_length(var194, var195);
8534 var193 = var196;
8535 varonce192 = var193;
8536 }
8537 {
8538 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var193); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8539 }
8540 {
8541 { /* Inline separate_compiler#SeparateCompiler#type_tables (self) on <self:SeparateCompiler> */
8542 var199 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_tables].val; /* _type_tables on <self:SeparateCompiler> */
8543 if (unlikely(var199 == NULL)) {
8544 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_tables");
8545 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 843);
8546 show_backtrace(1);
8547 }
8548 var197 = var199;
8549 RET_LABEL198:(void)0;
8550 }
8551 }
8552 {
8553 var200 = ((val* (*)(val*, val*))(var197->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var197, var_mtype) /* [] on <var197:Map[MType, Array[nullable MType]]>*/;
8554 }
8555 var_201 = var200;
8556 {
8557 var202 = array__AbstractArrayRead__iterator(var_201);
8558 }
8559 var_203 = var202;
8560 for(;;) {
8561 {
8562 var204 = array__ArrayIterator__is_ok(var_203);
8563 }
8564 if (var204){
8565 {
8566 var205 = array__ArrayIterator__item(var_203);
8567 }
8568 var_stype = var205;
8569 var206 = NULL;
8570 if (var_stype == NULL) {
8571 var207 = 1; /* is null */
8572 } else {
8573 var207 = 0; /* arg is null but recv is not */
8574 }
8575 if (0) {
8576 { /* Inline kernel#Object#== (var_stype,var206) on <var_stype:nullable MType> */
8577 var_other = var206;
8578 {
8579 { /* Inline kernel#Object#is_same_instance (var_stype,var_other) on <var_stype:nullable MType(MType)> */
8580 var212 = var_stype == var_other;
8581 var210 = var212;
8582 goto RET_LABEL211;
8583 RET_LABEL211:(void)0;
8584 }
8585 }
8586 var208 = var210;
8587 goto RET_LABEL209;
8588 RET_LABEL209:(void)0;
8589 }
8590 var207 = var208;
8591 }
8592 if (var207){
8593 if (varonce213) {
8594 var214 = varonce213;
8595 } else {
8596 var215 = "-1, /* empty */";
8597 var216 = 15;
8598 var217 = string__NativeString__to_s_with_length(var215, var216);
8599 var214 = var217;
8600 varonce213 = var214;
8601 }
8602 {
8603 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var214); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8604 }
8605 } else {
8606 {
8607 { /* Inline separate_compiler#SeparateCompiler#type_ids (self) on <self:SeparateCompiler> */
8608 var220 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_ids].val; /* _type_ids on <self:SeparateCompiler> */
8609 if (unlikely(var220 == NULL)) {
8610 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_ids");
8611 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 159);
8612 show_backtrace(1);
8613 }
8614 var218 = var220;
8615 RET_LABEL219:(void)0;
8616 }
8617 }
8618 {
8619 var221 = ((val* (*)(val*, val*))(var218->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var218, var_stype) /* [] on <var218:Map[MType, Int]>*/;
8620 }
8621 if (varonce222) {
8622 var223 = varonce222;
8623 } else {
8624 var224 = ", /* ";
8625 var225 = 5;
8626 var226 = string__NativeString__to_s_with_length(var224, var225);
8627 var223 = var226;
8628 varonce222 = var223;
8629 }
8630 if (varonce227) {
8631 var228 = varonce227;
8632 } else {
8633 var229 = " */";
8634 var230 = 3;
8635 var231 = string__NativeString__to_s_with_length(var229, var230);
8636 var228 = var231;
8637 varonce227 = var228;
8638 }
8639 var232 = NEW_array__Array(&type_array__Arraykernel__Object);
8640 { /* var232 = array_instance Array[Object] */
8641 var233 = 4;
8642 var234 = NEW_array__NativeArray(var233, &type_array__NativeArraykernel__Object);
8643 ((struct instance_array__NativeArray*)var234)->values[0] = (val*) var221;
8644 ((struct instance_array__NativeArray*)var234)->values[1] = (val*) var223;
8645 ((struct instance_array__NativeArray*)var234)->values[2] = (val*) var_stype;
8646 ((struct instance_array__NativeArray*)var234)->values[3] = (val*) var228;
8647 {
8648 ((void (*)(val*, val*, long))(var232->class->vft[COLOR_array__Array__with_native]))(var232, var234, var233) /* with_native on <var232:Array[Object]>*/;
8649 }
8650 }
8651 {
8652 var235 = ((val* (*)(val*))(var232->class->vft[COLOR_string__Object__to_s]))(var232) /* to_s on <var232:Array[Object]>*/;
8653 }
8654 {
8655 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var235); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8656 }
8657 }
8658 {
8659 array__ArrayIterator__next(var_203); /* Direct call array#ArrayIterator#next on <var_203:ArrayIterator[nullable MType]>*/
8660 }
8661 } else {
8662 goto BREAK_label;
8663 }
8664 }
8665 BREAK_label: (void)0;
8666 {
8667 { /* Inline abstract_collection#Iterator#finish (var_203) on <var_203:ArrayIterator[nullable MType]> */
8668 RET_LABEL236:(void)0;
8669 }
8670 }
8671 if (varonce237) {
8672 var238 = varonce237;
8673 } else {
8674 var239 = "},";
8675 var240 = 2;
8676 var241 = string__NativeString__to_s_with_length(var239, var240);
8677 var238 = var241;
8678 varonce237 = var238;
8679 }
8680 {
8681 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var238); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8682 }
8683 } else {
8684 if (varonce242) {
8685 var243 = varonce242;
8686 } else {
8687 var244 = "0, {}, /*DEAD TYPE*/";
8688 var245 = 20;
8689 var246 = string__NativeString__to_s_with_length(var244, var245);
8690 var243 = var246;
8691 varonce242 = var243;
8692 }
8693 {
8694 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var243); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8695 }
8696 }
8697 if (varonce247) {
8698 var248 = varonce247;
8699 } else {
8700 var249 = "};";
8701 var250 = 2;
8702 var251 = string__NativeString__to_s_with_length(var249, var250);
8703 var248 = var251;
8704 varonce247 = var248;
8705 }
8706 {
8707 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var248); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8708 }
8709 RET_LABEL:;
8710 }
8711 /* method separate_compiler#SeparateCompiler#compile_type_to_c for (self: Object, MType) */
8712 void VIRTUAL_separate_compiler__SeparateCompiler__compile_type_to_c(val* self, val* p0) {
8713 separate_compiler__SeparateCompiler__compile_type_to_c(self, p0); /* Direct call separate_compiler#SeparateCompiler#compile_type_to_c on <self:Object(SeparateCompiler)>*/
8714 RET_LABEL:;
8715 }
8716 /* method separate_compiler#SeparateCompiler#compile_type_resolution_table for (self: SeparateCompiler, MType) */
8717 void separate_compiler__SeparateCompiler__compile_type_resolution_table(val* self, val* p0) {
8718 val* var_mtype /* var mtype: MType */;
8719 val* var /* : MType */;
8720 short int var1 /* : Bool */;
8721 int cltype;
8722 int idtype;
8723 const char* var_class_name;
8724 val* var_mclass_type /* var mclass_type: MClassType */;
8725 static val* varonce;
8726 val* var2 /* : String */;
8727 char* var3 /* : NativeString */;
8728 long var4 /* : Int */;
8729 val* var5 /* : FlatString */;
8730 val* var6 /* : String */;
8731 val* var7 /* : Array[Object] */;
8732 long var8 /* : Int */;
8733 val* var9 /* : NativeArray[Object] */;
8734 val* var10 /* : String */;
8735 static val* varonce11;
8736 val* var12 /* : String */;
8737 char* var13 /* : NativeString */;
8738 long var14 /* : Int */;
8739 val* var15 /* : FlatString */;
8740 val* var16 /* : String */;
8741 static val* varonce17;
8742 val* var18 /* : String */;
8743 char* var19 /* : NativeString */;
8744 long var20 /* : Int */;
8745 val* var21 /* : FlatString */;
8746 val* var22 /* : Array[Object] */;
8747 long var23 /* : Int */;
8748 val* var24 /* : NativeArray[Object] */;
8749 val* var25 /* : String */;
8750 val* var26 /* : AbstractCompilerVisitor */;
8751 val* var_v /* var v: SeparateCompilerVisitor */;
8752 static val* varonce27;
8753 val* var28 /* : String */;
8754 char* var29 /* : NativeString */;
8755 long var30 /* : Int */;
8756 val* var31 /* : FlatString */;
8757 val* var32 /* : String */;
8758 static val* varonce33;
8759 val* var34 /* : String */;
8760 char* var35 /* : NativeString */;
8761 long var36 /* : Int */;
8762 val* var37 /* : FlatString */;
8763 val* var38 /* : Array[Object] */;
8764 long var39 /* : Int */;
8765 val* var40 /* : NativeArray[Object] */;
8766 val* var41 /* : String */;
8767 static val* varonce42;
8768 val* var43 /* : String */;
8769 char* var44 /* : NativeString */;
8770 long var45 /* : Int */;
8771 val* var46 /* : FlatString */;
8772 static val* varonce47;
8773 val* var48 /* : String */;
8774 char* var49 /* : NativeString */;
8775 long var50 /* : Int */;
8776 val* var51 /* : FlatString */;
8777 val* var52 /* : Map[MClassType, Array[nullable MType]] */;
8778 val* var54 /* : Map[MClassType, Array[nullable MType]] */;
8779 val* var55 /* : nullable Object */;
8780 val* var_ /* var : Array[nullable MType] */;
8781 val* var56 /* : ArrayIterator[nullable Object] */;
8782 val* var_57 /* var : ArrayIterator[nullable MType] */;
8783 short int var58 /* : Bool */;
8784 val* var59 /* : nullable Object */;
8785 val* var_t /* var t: nullable MType */;
8786 val* var60 /* : null */;
8787 short int var61 /* : Bool */;
8788 short int var62 /* : Bool */;
8789 val* var_other /* var other: nullable Object */;
8790 short int var64 /* : Bool */;
8791 short int var66 /* : Bool */;
8792 static val* varonce67;
8793 val* var68 /* : String */;
8794 char* var69 /* : NativeString */;
8795 long var70 /* : Int */;
8796 val* var71 /* : FlatString */;
8797 val* var72 /* : MModule */;
8798 val* var74 /* : MModule */;
8799 short int var75 /* : Bool */;
8800 val* var76 /* : MType */;
8801 val* var_tv /* var tv: MType */;
8802 val* var77 /* : Map[MType, Int] */;
8803 val* var79 /* : Map[MType, Int] */;
8804 short int var80 /* : Bool */;
8805 static val* varonce81;
8806 val* var82 /* : String */;
8807 char* var83 /* : NativeString */;
8808 long var84 /* : Int */;
8809 val* var85 /* : FlatString */;
8810 val* var86 /* : String */;
8811 val* var87 /* : Array[Object] */;
8812 long var88 /* : Int */;
8813 val* var89 /* : NativeArray[Object] */;
8814 val* var90 /* : String */;
8815 static val* varonce91;
8816 val* var92 /* : String */;
8817 char* var93 /* : NativeString */;
8818 long var94 /* : Int */;
8819 val* var95 /* : FlatString */;
8820 val* var96 /* : String */;
8821 static val* varonce97;
8822 val* var98 /* : String */;
8823 char* var99 /* : NativeString */;
8824 long var100 /* : Int */;
8825 val* var101 /* : FlatString */;
8826 static val* varonce102;
8827 val* var103 /* : String */;
8828 char* var104 /* : NativeString */;
8829 long var105 /* : Int */;
8830 val* var106 /* : FlatString */;
8831 static val* varonce107;
8832 val* var108 /* : String */;
8833 char* var109 /* : NativeString */;
8834 long var110 /* : Int */;
8835 val* var111 /* : FlatString */;
8836 val* var112 /* : Array[Object] */;
8837 long var113 /* : Int */;
8838 val* var114 /* : NativeArray[Object] */;
8839 val* var115 /* : String */;
8840 static val* varonce116;
8841 val* var117 /* : String */;
8842 char* var118 /* : NativeString */;
8843 long var119 /* : Int */;
8844 val* var120 /* : FlatString */;
8845 static val* varonce121;
8846 val* var122 /* : String */;
8847 char* var123 /* : NativeString */;
8848 long var124 /* : Int */;
8849 val* var125 /* : FlatString */;
8850 static val* varonce126;
8851 val* var127 /* : String */;
8852 char* var128 /* : NativeString */;
8853 long var129 /* : Int */;
8854 val* var130 /* : FlatString */;
8855 val* var131 /* : Array[Object] */;
8856 long var132 /* : Int */;
8857 val* var133 /* : NativeArray[Object] */;
8858 val* var134 /* : String */;
8859 static val* varonce136;
8860 val* var137 /* : String */;
8861 char* var138 /* : NativeString */;
8862 long var139 /* : Int */;
8863 val* var140 /* : FlatString */;
8864 static val* varonce141;
8865 val* var142 /* : String */;
8866 char* var143 /* : NativeString */;
8867 long var144 /* : Int */;
8868 val* var145 /* : FlatString */;
8869 var_mtype = p0;
8870 {
8871 var = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MType__as_notnullable]))(var_mtype) /* as_notnullable on <var_mtype:MType>*/;
8872 }
8873 /* <var:MType> isa MClassType */
8874 cltype = type_model__MClassType.color;
8875 idtype = type_model__MClassType.id;
8876 if(cltype >= var->type->table_size) {
8877 var1 = 0;
8878 } else {
8879 var1 = var->type->type_table[cltype] == idtype;
8880 }
8881 if (unlikely(!var1)) {
8882 var_class_name = var == NULL ? "null" : var->type->name;
8883 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
8884 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 633);
8885 show_backtrace(1);
8886 }
8887 var_mclass_type = var;
8888 if (varonce) {
8889 var2 = varonce;
8890 } else {
8891 var3 = "resolution_table_";
8892 var4 = 17;
8893 var5 = string__NativeString__to_s_with_length(var3, var4);
8894 var2 = var5;
8895 varonce = var2;
8896 }
8897 {
8898 var6 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
8899 }
8900 var7 = NEW_array__Array(&type_array__Arraykernel__Object);
8901 { /* var7 = array_instance Array[Object] */
8902 var8 = 2;
8903 var9 = NEW_array__NativeArray(var8, &type_array__NativeArraykernel__Object);
8904 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var2;
8905 ((struct instance_array__NativeArray*)var9)->values[1] = (val*) var6;
8906 {
8907 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Object]>*/;
8908 }
8909 }
8910 {
8911 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_string__Object__to_s]))(var7) /* to_s on <var7:Array[Object]>*/;
8912 }
8913 if (varonce11) {
8914 var12 = varonce11;
8915 } else {
8916 var13 = "extern const struct types resolution_table_";
8917 var14 = 43;
8918 var15 = string__NativeString__to_s_with_length(var13, var14);
8919 var12 = var15;
8920 varonce11 = var12;
8921 }
8922 {
8923 var16 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
8924 }
8925 if (varonce17) {
8926 var18 = varonce17;
8927 } else {
8928 var19 = ";";
8929 var20 = 1;
8930 var21 = string__NativeString__to_s_with_length(var19, var20);
8931 var18 = var21;
8932 varonce17 = var18;
8933 }
8934 var22 = NEW_array__Array(&type_array__Arraykernel__Object);
8935 { /* var22 = array_instance Array[Object] */
8936 var23 = 3;
8937 var24 = NEW_array__NativeArray(var23, &type_array__NativeArraykernel__Object);
8938 ((struct instance_array__NativeArray*)var24)->values[0] = (val*) var12;
8939 ((struct instance_array__NativeArray*)var24)->values[1] = (val*) var16;
8940 ((struct instance_array__NativeArray*)var24)->values[2] = (val*) var18;
8941 {
8942 ((void (*)(val*, val*, long))(var22->class->vft[COLOR_array__Array__with_native]))(var22, var24, var23) /* with_native on <var22:Array[Object]>*/;
8943 }
8944 }
8945 {
8946 var25 = ((val* (*)(val*))(var22->class->vft[COLOR_string__Object__to_s]))(var22) /* to_s on <var22:Array[Object]>*/;
8947 }
8948 {
8949 abstract_compiler__AbstractCompiler__provide_declaration(self, var10, var25); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateCompiler>*/
8950 }
8951 {
8952 var26 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateCompiler>*/;
8953 }
8954 var_v = var26;
8955 if (varonce27) {
8956 var28 = varonce27;
8957 } else {
8958 var29 = "const struct types resolution_table_";
8959 var30 = 36;
8960 var31 = string__NativeString__to_s_with_length(var29, var30);
8961 var28 = var31;
8962 varonce27 = var28;
8963 }
8964 {
8965 var32 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
8966 }
8967 if (varonce33) {
8968 var34 = varonce33;
8969 } else {
8970 var35 = " = {";
8971 var36 = 4;
8972 var37 = string__NativeString__to_s_with_length(var35, var36);
8973 var34 = var37;
8974 varonce33 = var34;
8975 }
8976 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
8977 { /* var38 = array_instance Array[Object] */
8978 var39 = 3;
8979 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
8980 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var28;
8981 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var32;
8982 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var34;
8983 {
8984 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
8985 }
8986 }
8987 {
8988 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
8989 }
8990 {
8991 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var41); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
8992 }
8993 if (varonce42) {
8994 var43 = varonce42;
8995 } else {
8996 var44 = "0, /* dummy */";
8997 var45 = 14;
8998 var46 = string__NativeString__to_s_with_length(var44, var45);
8999 var43 = var46;
9000 varonce42 = var43;
9001 }
9002 {
9003 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var43); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
9004 }
9005 if (varonce47) {
9006 var48 = varonce47;
9007 } else {
9008 var49 = "{";
9009 var50 = 1;
9010 var51 = string__NativeString__to_s_with_length(var49, var50);
9011 var48 = var51;
9012 varonce47 = var48;
9013 }
9014 {
9015 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var48); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
9016 }
9017 {
9018 { /* Inline separate_compiler#SeparateCompiler#resolution_tables (self) on <self:SeparateCompiler> */
9019 var54 = self->attrs[COLOR_separate_compiler__SeparateCompiler___resolution_tables].val; /* _resolution_tables on <self:SeparateCompiler> */
9020 if (unlikely(var54 == NULL)) {
9021 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _resolution_tables");
9022 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 844);
9023 show_backtrace(1);
9024 }
9025 var52 = var54;
9026 RET_LABEL53:(void)0;
9027 }
9028 }
9029 {
9030 var55 = ((val* (*)(val*, val*))(var52->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var52, var_mclass_type) /* [] on <var52:Map[MClassType, Array[nullable MType]]>*/;
9031 }
9032 var_ = var55;
9033 {
9034 var56 = array__AbstractArrayRead__iterator(var_);
9035 }
9036 var_57 = var56;
9037 for(;;) {
9038 {
9039 var58 = array__ArrayIterator__is_ok(var_57);
9040 }
9041 if (var58){
9042 {
9043 var59 = array__ArrayIterator__item(var_57);
9044 }
9045 var_t = var59;
9046 var60 = NULL;
9047 if (var_t == NULL) {
9048 var61 = 1; /* is null */
9049 } else {
9050 var61 = 0; /* arg is null but recv is not */
9051 }
9052 if (0) {
9053 { /* Inline kernel#Object#== (var_t,var60) on <var_t:nullable MType> */
9054 var_other = var60;
9055 {
9056 { /* Inline kernel#Object#is_same_instance (var_t,var_other) on <var_t:nullable MType(MType)> */
9057 var66 = var_t == var_other;
9058 var64 = var66;
9059 goto RET_LABEL65;
9060 RET_LABEL65:(void)0;
9061 }
9062 }
9063 var62 = var64;
9064 goto RET_LABEL63;
9065 RET_LABEL63:(void)0;
9066 }
9067 var61 = var62;
9068 }
9069 if (var61){
9070 if (varonce67) {
9071 var68 = varonce67;
9072 } else {
9073 var69 = "NULL, /* empty */";
9074 var70 = 17;
9075 var71 = string__NativeString__to_s_with_length(var69, var70);
9076 var68 = var71;
9077 varonce67 = var68;
9078 }
9079 {
9080 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var68); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
9081 }
9082 } else {
9083 {
9084 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateCompiler> */
9085 var74 = self->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateCompiler> */
9086 if (unlikely(var74 == NULL)) {
9087 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
9088 PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
9089 show_backtrace(1);
9090 }
9091 var72 = var74;
9092 RET_LABEL73:(void)0;
9093 }
9094 }
9095 var75 = 1;
9096 {
9097 var76 = ((val* (*)(val*, val*, val*, val*, short int))(var_t->class->vft[COLOR_model__MType__resolve_for]))(var_t, var_mclass_type, var_mclass_type, var72, var75) /* resolve_for on <var_t:nullable MType(MType)>*/;
9098 }
9099 var_tv = var76;
9100 {
9101 { /* Inline separate_compiler#SeparateCompiler#type_ids (self) on <self:SeparateCompiler> */
9102 var79 = self->attrs[COLOR_separate_compiler__SeparateCompiler___type_ids].val; /* _type_ids on <self:SeparateCompiler> */
9103 if (unlikely(var79 == NULL)) {
9104 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _type_ids");
9105 PRINT_ERROR(" (%s:%d)\n", "compiler/separate_compiler.nit", 159);
9106 show_backtrace(1);
9107 }
9108 var77 = var79;
9109 RET_LABEL78:(void)0;
9110 }
9111 }
9112 {
9113 var80 = abstract_collection__MapRead__has_key(var77, var_tv);
9114 }
9115 if (var80){
9116 if (varonce81) {
9117 var82 = varonce81;
9118 } else {
9119 var83 = "type_";
9120 var84 = 5;
9121 var85 = string__NativeString__to_s_with_length(var83, var84);
9122 var82 = var85;
9123 varonce81 = var82;
9124 }
9125 {
9126 var86 = ((val* (*)(val*))(var_tv->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_tv) /* c_name on <var_tv:MType>*/;
9127 }
9128 var87 = NEW_array__Array(&type_array__Arraykernel__Object);
9129 { /* var87 = array_instance Array[Object] */
9130 var88 = 2;
9131 var89 = NEW_array__NativeArray(var88, &type_array__NativeArraykernel__Object);
9132 ((struct instance_array__NativeArray*)var89)->values[0] = (val*) var82;
9133 ((struct instance_array__NativeArray*)var89)->values[1] = (val*) var86;
9134 {
9135 ((void (*)(val*, val*, long))(var87->class->vft[COLOR_array__Array__with_native]))(var87, var89, var88) /* with_native on <var87:Array[Object]>*/;
9136 }
9137 }
9138 {
9139 var90 = ((val* (*)(val*))(var87->class->vft[COLOR_string__Object__to_s]))(var87) /* to_s on <var87:Array[Object]>*/;
9140 }
9141 {
9142 abstract_compiler__AbstractCompilerVisitor__require_declaration(var_v, var90); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
9143 }
9144 if (varonce91) {
9145 var92 = varonce91;
9146 } else {
9147 var93 = "&type_";
9148 var94 = 6;
9149 var95 = string__NativeString__to_s_with_length(var93, var94);
9150 var92 = var95;
9151 varonce91 = var92;
9152 }
9153 {
9154 var96 = ((val* (*)(val*))(var_tv->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_tv) /* c_name on <var_tv:MType>*/;
9155 }
9156 if (varonce97) {
9157 var98 = varonce97;
9158 } else {
9159 var99 = ", /* ";
9160 var100 = 5;
9161 var101 = string__NativeString__to_s_with_length(var99, var100);
9162 var98 = var101;
9163 varonce97 = var98;
9164 }
9165 if (varonce102) {
9166 var103 = varonce102;
9167 } else {
9168 var104 = ": ";
9169 var105 = 2;
9170 var106 = string__NativeString__to_s_with_length(var104, var105);
9171 var103 = var106;
9172 varonce102 = var103;
9173 }
9174 if (varonce107) {
9175 var108 = varonce107;
9176 } else {
9177 var109 = " */";
9178 var110 = 3;
9179 var111 = string__NativeString__to_s_with_length(var109, var110);
9180 var108 = var111;
9181 varonce107 = var108;
9182 }
9183 var112 = NEW_array__Array(&type_array__Arraykernel__Object);
9184 { /* var112 = array_instance Array[Object] */
9185 var113 = 7;
9186 var114 = NEW_array__NativeArray(var113, &type_array__NativeArraykernel__Object);
9187 ((struct instance_array__NativeArray*)var114)->values[0] = (val*) var92;
9188 ((struct instance_array__NativeArray*)var114)->values[1] = (val*) var96;
9189 ((struct instance_array__NativeArray*)var114)->values[2] = (val*) var98;
9190 ((struct instance_array__NativeArray*)var114)->values[3] = (val*) var_t;
9191 ((struct instance_array__NativeArray*)var114)->values[4] = (val*) var103;
9192 ((struct instance_array__NativeArray*)var114)->values[5] = (val*) var_tv;
9193 ((struct instance_array__NativeArray*)var114)->values[6] = (val*) var108;
9194 {
9195 ((void (*)(val*, val*, long))(var112->class->vft[COLOR_array__Array__with_native]))(var112, var114, var113) /* with_native on <var112:Array[Object]>*/;
9196 }
9197 }
9198 {
9199 var115 = ((val* (*)(val*))(var112->class->vft[COLOR_string__Object__to_s]))(var112) /* to_s on <var112:Array[Object]>*/;
9200 }
9201 {
9202 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var115); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
9203 }
9204 } else {
9205 if (varonce116) {
9206 var117 = varonce116;
9207 } else {
9208 var118 = "NULL, /* empty (";
9209 var119 = 16;
9210 var120 = string__NativeString__to_s_with_length(var118, var119);
9211 var117 = var120;
9212 varonce116 = var117;
9213 }
9214 if (varonce121) {
9215 var122 = varonce121;
9216 } else {
9217 var123 = ": ";
9218 var124 = 2;
9219 var125 = string__NativeString__to_s_with_length(var123, var124);
9220 var122 = var125;
9221 varonce121 = var122;
9222 }
9223 if (varonce126) {
9224 var127 = varonce126;
9225 } else {
9226 var128 = " not a live type) */";
9227 var129 = 20;
9228 var130 = string__NativeString__to_s_with_length(var128, var129);
9229 var127 = var130;
9230 varonce126 = var127;
9231 }
9232 var131 = NEW_array__Array(&type_array__Arraykernel__Object);
9233 { /* var131 = array_instance Array[Object] */
9234 var132 = 5;
9235 var133 = NEW_array__NativeArray(var132, &type_array__NativeArraykernel__Object);
9236 ((struct instance_array__NativeArray*)var133)->values[0] = (val*) var117;
9237 ((struct instance_array__NativeArray*)var133)->values[1] = (val*) var_t;
9238 ((struct instance_array__NativeArray*)var133)->values[2] = (val*) var122;
9239 ((struct instance_array__NativeArray*)var133)->values[3] = (val*) var_tv;
9240 ((struct instance_array__NativeArray*)var133)->values[4] = (val*) var127;
9241 {
9242 ((void (*)(val*, val*, long))(var131->class->vft[COLOR_array__Array__with_native]))(var131, var133, var132) /* with_native on <var131:Array[Object]>*/;
9243 }
9244 }
9245 {
9246 var134 = ((val* (*)(val*))(var131->class->vft[COLOR_string__Object__to_s]))(var131) /* to_s on <var131:Array[Object]>*/;
9247 }
9248 {
9249 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var134); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
9250 }
9251 }
9252 }
9253 {
9254 array__ArrayIterator__next(var_57); /* Direct call array#ArrayIterator#next on <var_57:ArrayIterator[nullable MType]>*/
9255 }
9256 } else {
9257 goto BREAK_label;
9258 }
9259 }
9260 BREAK_label: (void)0;
9261 {
9262 { /* Inline abstract_collection#Iterator#finish (var_57) on <var_57:ArrayIterator[nullable MType]> */
9263 RET_LABEL135:(void)0;
9264 }
9265 }
9266 if (varonce136) {
9267 var137 = varonce136;
9268 } else {
9269 var138 = "}";
9270 var139 = 1;
9271 var140 = string__NativeString__to_s_with_length(var138, var139);
9272 var137 = var140;
9273 varonce136 = var137;
9274 }
9275 {
9276 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var137); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
9277 }
9278 if (varonce141) {
9279 var142 = varonce141;
9280 } else {
9281 var143 = "};";
9282 var144 = 2;
9283 var145 = string__NativeString__to_s_with_length(var143, var144);
9284 var142 = var145;
9285 varonce141 = var142;
9286 }
9287 {
9288 abstract_compiler__AbstractCompilerVisitor__add_decl(var_v, var142); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
9289 }
9290 RET_LABEL:;
9291 }
9292 /* method separate_compiler#SeparateCompiler#compile_type_resolution_table for (self: Object, MType) */
9293 void VIRTUAL_separate_compiler__SeparateCompiler__compile_type_resolution_table(val* self, val* p0) {
9294 separate_compiler__SeparateCompiler__compile_type_resolution_table(self, p0); /* Direct call separate_compiler#SeparateCompiler#compile_type_resolution_table on <self:Object(SeparateCompiler)>*/
9295 RET_LABEL:;
9296 }