c_src: update for kill is
[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___64dopt_separate].val; /* @opt_separate on <self:ToolContext> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_separate");
9 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 24);
10 exit(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 var1 = separate_compiler__ToolContext__opt_separate(self);
21 var = var1;
22 RET_LABEL:;
23 return var;
24 }
25 /* method separate_compiler#ToolContext#opt_separate= for (self: ToolContext, OptionBool) */
26 void separate_compiler__ToolContext__opt_separate_61d(val* self, val* p0) {
27 self->attrs[COLOR_separate_compiler__ToolContext___64dopt_separate].val = p0; /* @opt_separate on <self:ToolContext> */
28 RET_LABEL:;
29 }
30 /* method separate_compiler#ToolContext#opt_separate= for (self: Object, OptionBool) */
31 void VIRTUAL_separate_compiler__ToolContext__opt_separate_61d(val* self, val* p0) {
32 separate_compiler__ToolContext__opt_separate_61d(self, p0);
33 RET_LABEL:;
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___64dopt_no_inline_intern].val; /* @opt_no_inline_intern on <self:ToolContext> */
40 if (var1 == NULL) {
41 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_no_inline_intern");
42 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 26);
43 exit(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 var1 = separate_compiler__ToolContext__opt_no_inline_intern(self);
54 var = var1;
55 RET_LABEL:;
56 return var;
57 }
58 /* method separate_compiler#ToolContext#opt_no_inline_intern= for (self: ToolContext, OptionBool) */
59 void separate_compiler__ToolContext__opt_no_inline_intern_61d(val* self, val* p0) {
60 self->attrs[COLOR_separate_compiler__ToolContext___64dopt_no_inline_intern].val = p0; /* @opt_no_inline_intern on <self:ToolContext> */
61 RET_LABEL:;
62 }
63 /* method separate_compiler#ToolContext#opt_no_inline_intern= for (self: Object, OptionBool) */
64 void VIRTUAL_separate_compiler__ToolContext__opt_no_inline_intern_61d(val* self, val* p0) {
65 separate_compiler__ToolContext__opt_no_inline_intern_61d(self, p0);
66 RET_LABEL:;
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___64dopt_no_union_attribute].val; /* @opt_no_union_attribute on <self:ToolContext> */
73 if (var1 == NULL) {
74 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_no_union_attribute");
75 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 28);
76 exit(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 var1 = separate_compiler__ToolContext__opt_no_union_attribute(self);
87 var = var1;
88 RET_LABEL:;
89 return var;
90 }
91 /* method separate_compiler#ToolContext#opt_no_union_attribute= for (self: ToolContext, OptionBool) */
92 void separate_compiler__ToolContext__opt_no_union_attribute_61d(val* self, val* p0) {
93 self->attrs[COLOR_separate_compiler__ToolContext___64dopt_no_union_attribute].val = p0; /* @opt_no_union_attribute on <self:ToolContext> */
94 RET_LABEL:;
95 }
96 /* method separate_compiler#ToolContext#opt_no_union_attribute= for (self: Object, OptionBool) */
97 void VIRTUAL_separate_compiler__ToolContext__opt_no_union_attribute_61d(val* self, val* p0) {
98 separate_compiler__ToolContext__opt_no_union_attribute_61d(self, p0);
99 RET_LABEL:;
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___64dopt_no_shortcut_equate].val; /* @opt_no_shortcut_equate on <self:ToolContext> */
106 if (var1 == NULL) {
107 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_no_shortcut_equate");
108 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 30);
109 exit(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 var1 = separate_compiler__ToolContext__opt_no_shortcut_equate(self);
120 var = var1;
121 RET_LABEL:;
122 return var;
123 }
124 /* method separate_compiler#ToolContext#opt_no_shortcut_equate= for (self: ToolContext, OptionBool) */
125 void separate_compiler__ToolContext__opt_no_shortcut_equate_61d(val* self, val* p0) {
126 self->attrs[COLOR_separate_compiler__ToolContext___64dopt_no_shortcut_equate].val = p0; /* @opt_no_shortcut_equate on <self:ToolContext> */
127 RET_LABEL:;
128 }
129 /* method separate_compiler#ToolContext#opt_no_shortcut_equate= for (self: Object, OptionBool) */
130 void VIRTUAL_separate_compiler__ToolContext__opt_no_shortcut_equate_61d(val* self, val* p0) {
131 separate_compiler__ToolContext__opt_no_shortcut_equate_61d(self, p0);
132 RET_LABEL:;
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___64dopt_inline_coloring_numbers].val; /* @opt_inline_coloring_numbers on <self:ToolContext> */
139 if (var1 == NULL) {
140 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_inline_coloring_numbers");
141 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 32);
142 exit(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 var1 = separate_compiler__ToolContext__opt_inline_coloring_numbers(self);
153 var = var1;
154 RET_LABEL:;
155 return var;
156 }
157 /* method separate_compiler#ToolContext#opt_inline_coloring_numbers= for (self: ToolContext, OptionBool) */
158 void separate_compiler__ToolContext__opt_inline_coloring_numbers_61d(val* self, val* p0) {
159 self->attrs[COLOR_separate_compiler__ToolContext___64dopt_inline_coloring_numbers].val = p0; /* @opt_inline_coloring_numbers on <self:ToolContext> */
160 RET_LABEL:;
161 }
162 /* method separate_compiler#ToolContext#opt_inline_coloring_numbers= for (self: Object, OptionBool) */
163 void VIRTUAL_separate_compiler__ToolContext__opt_inline_coloring_numbers_61d(val* self, val* p0) {
164 separate_compiler__ToolContext__opt_inline_coloring_numbers_61d(self, p0);
165 RET_LABEL:;
166 }
167 /* method separate_compiler#ToolContext#opt_bm_typing for (self: ToolContext): OptionBool */
168 val* separate_compiler__ToolContext__opt_bm_typing(val* self) {
169 val* var /* : OptionBool */;
170 val* var1 /* : OptionBool */;
171 var1 = self->attrs[COLOR_separate_compiler__ToolContext___64dopt_bm_typing].val; /* @opt_bm_typing on <self:ToolContext> */
172 if (var1 == NULL) {
173 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_bm_typing");
174 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 34);
175 exit(1);
176 }
177 var = var1;
178 RET_LABEL:;
179 return var;
180 }
181 /* method separate_compiler#ToolContext#opt_bm_typing for (self: Object): OptionBool */
182 val* VIRTUAL_separate_compiler__ToolContext__opt_bm_typing(val* self) {
183 val* var /* : OptionBool */;
184 val* var1 /* : OptionBool */;
185 var1 = separate_compiler__ToolContext__opt_bm_typing(self);
186 var = var1;
187 RET_LABEL:;
188 return var;
189 }
190 /* method separate_compiler#ToolContext#opt_bm_typing= for (self: ToolContext, OptionBool) */
191 void separate_compiler__ToolContext__opt_bm_typing_61d(val* self, val* p0) {
192 self->attrs[COLOR_separate_compiler__ToolContext___64dopt_bm_typing].val = p0; /* @opt_bm_typing on <self:ToolContext> */
193 RET_LABEL:;
194 }
195 /* method separate_compiler#ToolContext#opt_bm_typing= for (self: Object, OptionBool) */
196 void VIRTUAL_separate_compiler__ToolContext__opt_bm_typing_61d(val* self, val* p0) {
197 separate_compiler__ToolContext__opt_bm_typing_61d(self, p0);
198 RET_LABEL:;
199 }
200 /* method separate_compiler#ToolContext#opt_phmod_typing for (self: ToolContext): OptionBool */
201 val* separate_compiler__ToolContext__opt_phmod_typing(val* self) {
202 val* var /* : OptionBool */;
203 val* var1 /* : OptionBool */;
204 var1 = self->attrs[COLOR_separate_compiler__ToolContext___64dopt_phmod_typing].val; /* @opt_phmod_typing on <self:ToolContext> */
205 if (var1 == NULL) {
206 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_phmod_typing");
207 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 36);
208 exit(1);
209 }
210 var = var1;
211 RET_LABEL:;
212 return var;
213 }
214 /* method separate_compiler#ToolContext#opt_phmod_typing for (self: Object): OptionBool */
215 val* VIRTUAL_separate_compiler__ToolContext__opt_phmod_typing(val* self) {
216 val* var /* : OptionBool */;
217 val* var1 /* : OptionBool */;
218 var1 = separate_compiler__ToolContext__opt_phmod_typing(self);
219 var = var1;
220 RET_LABEL:;
221 return var;
222 }
223 /* method separate_compiler#ToolContext#opt_phmod_typing= for (self: ToolContext, OptionBool) */
224 void separate_compiler__ToolContext__opt_phmod_typing_61d(val* self, val* p0) {
225 self->attrs[COLOR_separate_compiler__ToolContext___64dopt_phmod_typing].val = p0; /* @opt_phmod_typing on <self:ToolContext> */
226 RET_LABEL:;
227 }
228 /* method separate_compiler#ToolContext#opt_phmod_typing= for (self: Object, OptionBool) */
229 void VIRTUAL_separate_compiler__ToolContext__opt_phmod_typing_61d(val* self, val* p0) {
230 separate_compiler__ToolContext__opt_phmod_typing_61d(self, p0);
231 RET_LABEL:;
232 }
233 /* method separate_compiler#ToolContext#opt_phand_typing for (self: ToolContext): OptionBool */
234 val* separate_compiler__ToolContext__opt_phand_typing(val* self) {
235 val* var /* : OptionBool */;
236 val* var1 /* : OptionBool */;
237 var1 = self->attrs[COLOR_separate_compiler__ToolContext___64dopt_phand_typing].val; /* @opt_phand_typing on <self:ToolContext> */
238 if (var1 == NULL) {
239 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_phand_typing");
240 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 38);
241 exit(1);
242 }
243 var = var1;
244 RET_LABEL:;
245 return var;
246 }
247 /* method separate_compiler#ToolContext#opt_phand_typing for (self: Object): OptionBool */
248 val* VIRTUAL_separate_compiler__ToolContext__opt_phand_typing(val* self) {
249 val* var /* : OptionBool */;
250 val* var1 /* : OptionBool */;
251 var1 = separate_compiler__ToolContext__opt_phand_typing(self);
252 var = var1;
253 RET_LABEL:;
254 return var;
255 }
256 /* method separate_compiler#ToolContext#opt_phand_typing= for (self: ToolContext, OptionBool) */
257 void separate_compiler__ToolContext__opt_phand_typing_61d(val* self, val* p0) {
258 self->attrs[COLOR_separate_compiler__ToolContext___64dopt_phand_typing].val = p0; /* @opt_phand_typing on <self:ToolContext> */
259 RET_LABEL:;
260 }
261 /* method separate_compiler#ToolContext#opt_phand_typing= for (self: Object, OptionBool) */
262 void VIRTUAL_separate_compiler__ToolContext__opt_phand_typing_61d(val* self, val* p0) {
263 separate_compiler__ToolContext__opt_phand_typing_61d(self, p0);
264 RET_LABEL:;
265 }
266 /* method separate_compiler#ToolContext#opt_tables_metrics for (self: ToolContext): OptionBool */
267 val* separate_compiler__ToolContext__opt_tables_metrics(val* self) {
268 val* var /* : OptionBool */;
269 val* var1 /* : OptionBool */;
270 var1 = self->attrs[COLOR_separate_compiler__ToolContext___64dopt_tables_metrics].val; /* @opt_tables_metrics on <self:ToolContext> */
271 if (var1 == NULL) {
272 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_tables_metrics");
273 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 40);
274 exit(1);
275 }
276 var = var1;
277 RET_LABEL:;
278 return var;
279 }
280 /* method separate_compiler#ToolContext#opt_tables_metrics for (self: Object): OptionBool */
281 val* VIRTUAL_separate_compiler__ToolContext__opt_tables_metrics(val* self) {
282 val* var /* : OptionBool */;
283 val* var1 /* : OptionBool */;
284 var1 = separate_compiler__ToolContext__opt_tables_metrics(self);
285 var = var1;
286 RET_LABEL:;
287 return var;
288 }
289 /* method separate_compiler#ToolContext#opt_tables_metrics= for (self: ToolContext, OptionBool) */
290 void separate_compiler__ToolContext__opt_tables_metrics_61d(val* self, val* p0) {
291 self->attrs[COLOR_separate_compiler__ToolContext___64dopt_tables_metrics].val = p0; /* @opt_tables_metrics on <self:ToolContext> */
292 RET_LABEL:;
293 }
294 /* method separate_compiler#ToolContext#opt_tables_metrics= for (self: Object, OptionBool) */
295 void VIRTUAL_separate_compiler__ToolContext__opt_tables_metrics_61d(val* self, val* p0) {
296 separate_compiler__ToolContext__opt_tables_metrics_61d(self, p0);
297 RET_LABEL:;
298 }
299 /* method separate_compiler#ToolContext#init for (self: ToolContext) */
300 void separate_compiler__ToolContext__init(val* self) {
301 val* var /* : OptionContext */;
302 val* var1 /* : OptionBool */;
303 val* var2 /* : Array[Option] */;
304 long var3 /* : Int */;
305 val* var4 /* : NativeArray[Option] */;
306 val* var5 /* : OptionContext */;
307 val* var6 /* : OptionBool */;
308 val* var7 /* : Array[Option] */;
309 long var8 /* : Int */;
310 val* var9 /* : NativeArray[Option] */;
311 val* var10 /* : OptionContext */;
312 val* var11 /* : OptionBool */;
313 val* var12 /* : Array[Option] */;
314 long var13 /* : Int */;
315 val* var14 /* : NativeArray[Option] */;
316 val* var15 /* : OptionContext */;
317 val* var16 /* : OptionBool */;
318 val* var17 /* : Array[Option] */;
319 long var18 /* : Int */;
320 val* var19 /* : NativeArray[Option] */;
321 val* var20 /* : OptionContext */;
322 val* var21 /* : OptionBool */;
323 val* var22 /* : Array[Option] */;
324 long var23 /* : Int */;
325 val* var24 /* : NativeArray[Option] */;
326 val* var25 /* : OptionContext */;
327 val* var26 /* : OptionBool */;
328 val* var27 /* : Array[Option] */;
329 long var28 /* : Int */;
330 val* var29 /* : NativeArray[Option] */;
331 val* var30 /* : OptionContext */;
332 val* var31 /* : OptionBool */;
333 val* var32 /* : Array[Option] */;
334 long var33 /* : Int */;
335 val* var34 /* : NativeArray[Option] */;
336 val* var35 /* : OptionContext */;
337 val* var36 /* : OptionBool */;
338 val* var37 /* : Array[Option] */;
339 long var38 /* : Int */;
340 val* var39 /* : NativeArray[Option] */;
341 val* var40 /* : OptionContext */;
342 val* var41 /* : OptionBool */;
343 val* var42 /* : Array[Option] */;
344 long var43 /* : Int */;
345 val* var44 /* : NativeArray[Option] */;
346 ((void (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__init]))(self) /* init on <self:ToolContext>*/;
347 var = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
348 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__opt_separate]))(self) /* opt_separate on <self:ToolContext>*/;
349 var2 = NEW_array__Array(&type_array__Arrayopts__Option);
350 { /* var2 = array_instance Array[Option] */
351 var3 = 1;
352 var4 = NEW_array__NativeArray(var3, &type_array__NativeArrayopts__Option);
353 ((struct instance_array__NativeArray*)var4)->values[0] = (val*) var1;
354 ((void (*)(val*, val*, long))(var2->class->vft[COLOR_array__Array__with_native]))(var2, var4, var3) /* with_native on <var2:Array[Option]>*/;
355 CHECK_NEW_array__Array(var2);
356 }
357 ((void (*)(val*, val*))(var->class->vft[COLOR_opts__OptionContext__add_option]))(var, var2) /* add_option on <var:OptionContext>*/;
358 var5 = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
359 var6 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__opt_no_inline_intern]))(self) /* opt_no_inline_intern on <self:ToolContext>*/;
360 var7 = NEW_array__Array(&type_array__Arrayopts__Option);
361 { /* var7 = array_instance Array[Option] */
362 var8 = 1;
363 var9 = NEW_array__NativeArray(var8, &type_array__NativeArrayopts__Option);
364 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var6;
365 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Option]>*/;
366 CHECK_NEW_array__Array(var7);
367 }
368 ((void (*)(val*, val*))(var5->class->vft[COLOR_opts__OptionContext__add_option]))(var5, var7) /* add_option on <var5:OptionContext>*/;
369 var10 = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
370 var11 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__opt_no_union_attribute]))(self) /* opt_no_union_attribute on <self:ToolContext>*/;
371 var12 = NEW_array__Array(&type_array__Arrayopts__Option);
372 { /* var12 = array_instance Array[Option] */
373 var13 = 1;
374 var14 = NEW_array__NativeArray(var13, &type_array__NativeArrayopts__Option);
375 ((struct instance_array__NativeArray*)var14)->values[0] = (val*) var11;
376 ((void (*)(val*, val*, long))(var12->class->vft[COLOR_array__Array__with_native]))(var12, var14, var13) /* with_native on <var12:Array[Option]>*/;
377 CHECK_NEW_array__Array(var12);
378 }
379 ((void (*)(val*, val*))(var10->class->vft[COLOR_opts__OptionContext__add_option]))(var10, var12) /* add_option on <var10:OptionContext>*/;
380 var15 = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
381 var16 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__opt_no_shortcut_equate]))(self) /* opt_no_shortcut_equate on <self:ToolContext>*/;
382 var17 = NEW_array__Array(&type_array__Arrayopts__Option);
383 { /* var17 = array_instance Array[Option] */
384 var18 = 1;
385 var19 = NEW_array__NativeArray(var18, &type_array__NativeArrayopts__Option);
386 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var16;
387 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Option]>*/;
388 CHECK_NEW_array__Array(var17);
389 }
390 ((void (*)(val*, val*))(var15->class->vft[COLOR_opts__OptionContext__add_option]))(var15, var17) /* add_option on <var15:OptionContext>*/;
391 var20 = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
392 var21 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__opt_inline_coloring_numbers]))(self) /* opt_inline_coloring_numbers on <self:ToolContext>*/;
393 var22 = NEW_array__Array(&type_array__Arrayopts__Option);
394 { /* var22 = array_instance Array[Option] */
395 var23 = 1;
396 var24 = NEW_array__NativeArray(var23, &type_array__NativeArrayopts__Option);
397 ((struct instance_array__NativeArray*)var24)->values[0] = (val*) var21;
398 ((void (*)(val*, val*, long))(var22->class->vft[COLOR_array__Array__with_native]))(var22, var24, var23) /* with_native on <var22:Array[Option]>*/;
399 CHECK_NEW_array__Array(var22);
400 }
401 ((void (*)(val*, val*))(var20->class->vft[COLOR_opts__OptionContext__add_option]))(var20, var22) /* add_option on <var20:OptionContext>*/;
402 var25 = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
403 var26 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__opt_bm_typing]))(self) /* opt_bm_typing on <self:ToolContext>*/;
404 var27 = NEW_array__Array(&type_array__Arrayopts__Option);
405 { /* var27 = array_instance Array[Option] */
406 var28 = 1;
407 var29 = NEW_array__NativeArray(var28, &type_array__NativeArrayopts__Option);
408 ((struct instance_array__NativeArray*)var29)->values[0] = (val*) var26;
409 ((void (*)(val*, val*, long))(var27->class->vft[COLOR_array__Array__with_native]))(var27, var29, var28) /* with_native on <var27:Array[Option]>*/;
410 CHECK_NEW_array__Array(var27);
411 }
412 ((void (*)(val*, val*))(var25->class->vft[COLOR_opts__OptionContext__add_option]))(var25, var27) /* add_option on <var25:OptionContext>*/;
413 var30 = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
414 var31 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(self) /* opt_phmod_typing on <self:ToolContext>*/;
415 var32 = NEW_array__Array(&type_array__Arrayopts__Option);
416 { /* var32 = array_instance Array[Option] */
417 var33 = 1;
418 var34 = NEW_array__NativeArray(var33, &type_array__NativeArrayopts__Option);
419 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var31;
420 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Option]>*/;
421 CHECK_NEW_array__Array(var32);
422 }
423 ((void (*)(val*, val*))(var30->class->vft[COLOR_opts__OptionContext__add_option]))(var30, var32) /* add_option on <var30:OptionContext>*/;
424 var35 = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
425 var36 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(self) /* opt_phand_typing on <self:ToolContext>*/;
426 var37 = NEW_array__Array(&type_array__Arrayopts__Option);
427 { /* var37 = array_instance Array[Option] */
428 var38 = 1;
429 var39 = NEW_array__NativeArray(var38, &type_array__NativeArrayopts__Option);
430 ((struct instance_array__NativeArray*)var39)->values[0] = (val*) var36;
431 ((void (*)(val*, val*, long))(var37->class->vft[COLOR_array__Array__with_native]))(var37, var39, var38) /* with_native on <var37:Array[Option]>*/;
432 CHECK_NEW_array__Array(var37);
433 }
434 ((void (*)(val*, val*))(var35->class->vft[COLOR_opts__OptionContext__add_option]))(var35, var37) /* add_option on <var35:OptionContext>*/;
435 var40 = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
436 var41 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__ToolContext__opt_tables_metrics]))(self) /* opt_tables_metrics on <self:ToolContext>*/;
437 var42 = NEW_array__Array(&type_array__Arrayopts__Option);
438 { /* var42 = array_instance Array[Option] */
439 var43 = 1;
440 var44 = NEW_array__NativeArray(var43, &type_array__NativeArrayopts__Option);
441 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var41;
442 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Option]>*/;
443 CHECK_NEW_array__Array(var42);
444 }
445 ((void (*)(val*, val*))(var40->class->vft[COLOR_opts__OptionContext__add_option]))(var40, var42) /* add_option on <var40:OptionContext>*/;
446 RET_LABEL:;
447 }
448 /* method separate_compiler#ToolContext#init for (self: Object) */
449 void VIRTUAL_separate_compiler__ToolContext__init(val* self) {
450 separate_compiler__ToolContext__init(self);
451 RET_LABEL:;
452 }
453 /* method separate_compiler#ModelBuilder#run_separate_compiler for (self: ModelBuilder, MModule, RapidTypeAnalysis) */
454 void separate_compiler__ModelBuilder__run_separate_compiler(val* self, val* p0, val* p1) {
455 val* var_mainmodule /* var mainmodule: MModule */;
456 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
457 long var /* : Int */;
458 long var_time0 /* var time0: Int */;
459 val* var1 /* : ToolContext */;
460 static val* varonce;
461 val* var2 /* : String */;
462 char* var3 /* : NativeString */;
463 long var4 /* : Int */;
464 val* var5 /* : String */;
465 long var6 /* : Int */;
466 val* var7 /* : SeparateCompiler */;
467 val* var_compiler /* var compiler: SeparateCompiler */;
468 val* var8 /* : ToolContext */;
469 static val* varonce9;
470 val* var10 /* : String */;
471 char* var11 /* : NativeString */;
472 long var12 /* : Int */;
473 val* var13 /* : String */;
474 long var14 /* : Int */;
475 val* var15 /* : String */;
476 static val* varonce16;
477 val* var17 /* : String */;
478 char* var18 /* : NativeString */;
479 long var19 /* : Int */;
480 val* var20 /* : String */;
481 val* var21 /* : Array[Object] */;
482 long var22 /* : Int */;
483 val* var23 /* : NativeArray[Object] */;
484 val* var24 /* : String */;
485 val* var25 /* : CodeFile */;
486 val* var26 /* : POSetElement[MModule] */;
487 val* var27 /* : Collection[Object] */;
488 val* var28 /* : Iterator[nullable Object] */;
489 short int var29 /* : Bool */;
490 val* var30 /* : nullable Object */;
491 val* var_m /* var m: MModule */;
492 val* var31 /* : Array[MClass] */;
493 val* var32 /* : Iterator[nullable Object] */;
494 short int var33 /* : Bool */;
495 val* var34 /* : nullable Object */;
496 val* var_mclass /* var mclass: MClass */;
497 short int var35 /* : Bool */;
498 val* var36 /* : MClassKind */;
499 val* var37 /* : MClassKind */;
500 short int var38 /* : Bool */;
501 short int var_ /* var : Bool */;
502 val* var39 /* : MClassKind */;
503 val* var40 /* : MClassKind */;
504 short int var41 /* : Bool */;
505 val* var43 /* : String */;
506 static val* varonce44;
507 val* var45 /* : String */;
508 char* var46 /* : NativeString */;
509 long var47 /* : Int */;
510 val* var48 /* : String */;
511 val* var49 /* : Array[Object] */;
512 long var50 /* : Int */;
513 val* var51 /* : NativeArray[Object] */;
514 val* var52 /* : String */;
515 val* var53 /* : CodeFile */;
516 val* var54 /* : POSetElement[MModule] */;
517 val* var55 /* : Collection[Object] */;
518 val* var56 /* : Iterator[nullable Object] */;
519 short int var57 /* : Bool */;
520 val* var58 /* : nullable Object */;
521 val* var_m59 /* var m: MModule */;
522 val* var60 /* : ToolContext */;
523 static val* varonce61;
524 val* var62 /* : String */;
525 char* var63 /* : NativeString */;
526 long var64 /* : Int */;
527 val* var65 /* : String */;
528 val* var66 /* : Array[Object] */;
529 long var67 /* : Int */;
530 val* var68 /* : NativeArray[Object] */;
531 val* var69 /* : String */;
532 long var70 /* : Int */;
533 val* var71 /* : String */;
534 static val* varonce72;
535 val* var73 /* : String */;
536 char* var74 /* : NativeString */;
537 long var75 /* : Int */;
538 val* var76 /* : String */;
539 val* var77 /* : Array[Object] */;
540 long var78 /* : Int */;
541 val* var79 /* : NativeArray[Object] */;
542 val* var80 /* : String */;
543 val* var81 /* : CodeFile */;
544 val* var83 /* : ToolContext */;
545 static val* varonce84;
546 val* var85 /* : String */;
547 char* var86 /* : NativeString */;
548 long var87 /* : Int */;
549 val* var88 /* : String */;
550 long var89 /* : Int */;
551 val* var90 /* : String */;
552 static val* varonce91;
553 val* var92 /* : String */;
554 char* var93 /* : NativeString */;
555 long var94 /* : Int */;
556 val* var95 /* : String */;
557 val* var96 /* : Array[Object] */;
558 long var97 /* : Int */;
559 val* var98 /* : NativeArray[Object] */;
560 val* var99 /* : String */;
561 val* var100 /* : CodeFile */;
562 val* var101 /* : POSet[MType] */;
563 val* var_mtypes /* var mtypes: POSet[MType] */;
564 val* var102 /* : Iterator[nullable Object] */;
565 short int var103 /* : Bool */;
566 val* var104 /* : nullable Object */;
567 val* var_t /* var t: MType */;
568 long var106 /* : Int */;
569 long var_time1 /* var time1: Int */;
570 val* var107 /* : ToolContext */;
571 static val* varonce108;
572 val* var109 /* : String */;
573 char* var110 /* : NativeString */;
574 long var111 /* : Int */;
575 val* var112 /* : String */;
576 long var113 /* : Int */;
577 long var115 /* : Int */;
578 static val* varonce116;
579 val* var117 /* : String */;
580 char* var118 /* : NativeString */;
581 long var119 /* : Int */;
582 val* var120 /* : String */;
583 val* var121 /* : Array[Object] */;
584 long var122 /* : Int */;
585 val* var123 /* : NativeArray[Object] */;
586 val* var124 /* : Object */;
587 val* var125 /* : String */;
588 long var126 /* : Int */;
589 var_mainmodule = p0;
590 var_runtime_type_analysis = p1;
591 var = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
592 var_time0 = var;
593 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
594 if (varonce) {
595 var2 = varonce;
596 } else {
597 var3 = "*** GENERATING C ***";
598 var4 = 20;
599 var5 = string__NativeString__to_s_with_length(var3, var4);
600 var2 = var5;
601 varonce = var2;
602 }
603 var6 = 1;
604 ((void (*)(val*, val*, long))(var1->class->vft[COLOR_toolcontext__ToolContext__info]))(var1, var2, var6) /* info on <var1:ToolContext>*/;
605 var7 = NEW_separate_compiler__SeparateCompiler(&type_separate_compiler__SeparateCompiler);
606 ((void (*)(val*, val*, val*, val*))(var7->class->vft[COLOR_separate_compiler__SeparateCompiler__init]))(var7, var_mainmodule, self, var_runtime_type_analysis) /* init on <var7:SeparateCompiler>*/;
607 CHECK_NEW_separate_compiler__SeparateCompiler(var7);
608 var_compiler = var7;
609 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_header]))(var_compiler) /* compile_header on <var_compiler:SeparateCompiler>*/;
610 var8 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
611 if (varonce9) {
612 var10 = varonce9;
613 } else {
614 var11 = "Property coloring";
615 var12 = 17;
616 var13 = string__NativeString__to_s_with_length(var11, var12);
617 var10 = var13;
618 varonce9 = var10;
619 }
620 var14 = 2;
621 ((void (*)(val*, val*, long))(var8->class->vft[COLOR_toolcontext__ToolContext__info]))(var8, var10, var14) /* info on <var8:ToolContext>*/;
622 var15 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
623 if (varonce16) {
624 var17 = varonce16;
625 } else {
626 var18 = ".classes";
627 var19 = 8;
628 var20 = string__NativeString__to_s_with_length(var18, var19);
629 var17 = var20;
630 varonce16 = var17;
631 }
632 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
633 { /* var21 = array_instance Array[Object] */
634 var22 = 2;
635 var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
636 ((struct instance_array__NativeArray*)var23)->values[0] = (val*) var15;
637 ((struct instance_array__NativeArray*)var23)->values[1] = (val*) var17;
638 ((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
639 CHECK_NEW_array__Array(var21);
640 }
641 var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
642 var25 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var24) /* new_file on <var_compiler:SeparateCompiler>*/;
643 var25;
644 ((void (*)(val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__do_property_coloring]))(var_compiler) /* do_property_coloring on <var_compiler:SeparateCompiler>*/;
645 var26 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__in_importation]))(var_mainmodule) /* in_importation on <var_mainmodule:MModule>*/;
646 var27 = ((val* (*)(val*))(var26->class->vft[COLOR_poset__POSetElement__greaters]))(var26) /* greaters on <var26:POSetElement[MModule]>*/;
647 var28 = ((val* (*)(val*))(var27->class->vft[COLOR_abstract_collection__Collection__iterator]))(var27) /* iterator on <var27:Collection[Object](Collection[MModule])>*/;
648 for(;;) {
649 var29 = ((short int (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var28) /* is_ok on <var28:Iterator[nullable Object]>*/;
650 if(!var29) break;
651 var30 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__item]))(var28) /* item on <var28:Iterator[nullable Object]>*/;
652 var_m = var30;
653 var31 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MModule__intro_mclasses]))(var_m) /* intro_mclasses on <var_m:MModule>*/;
654 var32 = ((val* (*)(val*))(var31->class->vft[COLOR_abstract_collection__Collection__iterator]))(var31) /* iterator on <var31:Array[MClass]>*/;
655 for(;;) {
656 var33 = ((short int (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var32) /* is_ok on <var32:Iterator[nullable Object]>*/;
657 if(!var33) break;
658 var34 = ((val* (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__item]))(var32) /* item on <var32:Iterator[nullable Object]>*/;
659 var_mclass = var34;
660 var36 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__kind]))(var_mclass) /* kind on <var_mclass:MClass>*/;
661 var37 = ((val* (*)(val*))(self->class->vft[COLOR_model__Object__abstract_kind]))(self) /* abstract_kind on <self:ModelBuilder>*/;
662 var38 = ((short int (*)(val*, val*))(var36->class->vft[COLOR_kernel__Object___61d_61d]))(var36, var37) /* == on <var36:MClassKind>*/;
663 var_ = var38;
664 if (var38){
665 var35 = var_;
666 } else {
667 var39 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__kind]))(var_mclass) /* kind on <var_mclass:MClass>*/;
668 var40 = ((val* (*)(val*))(self->class->vft[COLOR_model__Object__interface_kind]))(self) /* interface_kind on <self:ModelBuilder>*/;
669 var41 = ((short int (*)(val*, val*))(var39->class->vft[COLOR_kernel__Object___61d_61d]))(var39, var40) /* == on <var39:MClassKind>*/;
670 var35 = var41;
671 }
672 if (var35){
673 goto CONTINUE_label;
674 } else {
675 }
676 ((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>*/;
677 CONTINUE_label: (void)0;
678 ((void (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__next]))(var32) /* next on <var32:Iterator[nullable Object]>*/;
679 }
680 BREAK_label: (void)0;
681 CONTINUE_label42: (void)0;
682 ((void (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__next]))(var28) /* next on <var28:Iterator[nullable Object]>*/;
683 }
684 BREAK_label42: (void)0;
685 var43 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
686 if (varonce44) {
687 var45 = varonce44;
688 } else {
689 var46 = ".main";
690 var47 = 5;
691 var48 = string__NativeString__to_s_with_length(var46, var47);
692 var45 = var48;
693 varonce44 = var45;
694 }
695 var49 = NEW_array__Array(&type_array__Arraykernel__Object);
696 { /* var49 = array_instance Array[Object] */
697 var50 = 2;
698 var51 = NEW_array__NativeArray(var50, &type_array__NativeArraykernel__Object);
699 ((struct instance_array__NativeArray*)var51)->values[0] = (val*) var43;
700 ((struct instance_array__NativeArray*)var51)->values[1] = (val*) var45;
701 ((void (*)(val*, val*, long))(var49->class->vft[COLOR_array__Array__with_native]))(var49, var51, var50) /* with_native on <var49:Array[Object]>*/;
702 CHECK_NEW_array__Array(var49);
703 }
704 var52 = ((val* (*)(val*))(var49->class->vft[COLOR_string__Object__to_s]))(var49) /* to_s on <var49:Array[Object]>*/;
705 var53 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var52) /* new_file on <var_compiler:SeparateCompiler>*/;
706 var53;
707 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_main_function]))(var_compiler) /* compile_main_function on <var_compiler:SeparateCompiler>*/;
708 var54 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__in_importation]))(var_mainmodule) /* in_importation on <var_mainmodule:MModule>*/;
709 var55 = ((val* (*)(val*))(var54->class->vft[COLOR_poset__POSetElement__greaters]))(var54) /* greaters on <var54:POSetElement[MModule]>*/;
710 var56 = ((val* (*)(val*))(var55->class->vft[COLOR_abstract_collection__Collection__iterator]))(var55) /* iterator on <var55:Collection[Object](Collection[MModule])>*/;
711 for(;;) {
712 var57 = ((short int (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var56) /* is_ok on <var56:Iterator[nullable Object]>*/;
713 if(!var57) break;
714 var58 = ((val* (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__item]))(var56) /* item on <var56:Iterator[nullable Object]>*/;
715 var_m59 = var58;
716 var60 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
717 if (varonce61) {
718 var62 = varonce61;
719 } else {
720 var63 = "Generate C for module ";
721 var64 = 22;
722 var65 = string__NativeString__to_s_with_length(var63, var64);
723 var62 = var65;
724 varonce61 = var62;
725 }
726 var66 = NEW_array__Array(&type_array__Arraykernel__Object);
727 { /* var66 = array_instance Array[Object] */
728 var67 = 2;
729 var68 = NEW_array__NativeArray(var67, &type_array__NativeArraykernel__Object);
730 ((struct instance_array__NativeArray*)var68)->values[0] = (val*) var62;
731 ((struct instance_array__NativeArray*)var68)->values[1] = (val*) var_m59;
732 ((void (*)(val*, val*, long))(var66->class->vft[COLOR_array__Array__with_native]))(var66, var68, var67) /* with_native on <var66:Array[Object]>*/;
733 CHECK_NEW_array__Array(var66);
734 }
735 var69 = ((val* (*)(val*))(var66->class->vft[COLOR_string__Object__to_s]))(var66) /* to_s on <var66:Array[Object]>*/;
736 var70 = 2;
737 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_toolcontext__ToolContext__info]))(var60, var69, var70) /* info on <var60:ToolContext>*/;
738 var71 = ((val* (*)(val*))(var_m59->class->vft[COLOR_model_base__MModule__name]))(var_m59) /* name on <var_m59:MModule>*/;
739 if (varonce72) {
740 var73 = varonce72;
741 } else {
742 var74 = ".sep";
743 var75 = 4;
744 var76 = string__NativeString__to_s_with_length(var74, var75);
745 var73 = var76;
746 varonce72 = var73;
747 }
748 var77 = NEW_array__Array(&type_array__Arraykernel__Object);
749 { /* var77 = array_instance Array[Object] */
750 var78 = 2;
751 var79 = NEW_array__NativeArray(var78, &type_array__NativeArraykernel__Object);
752 ((struct instance_array__NativeArray*)var79)->values[0] = (val*) var71;
753 ((struct instance_array__NativeArray*)var79)->values[1] = (val*) var73;
754 ((void (*)(val*, val*, long))(var77->class->vft[COLOR_array__Array__with_native]))(var77, var79, var78) /* with_native on <var77:Array[Object]>*/;
755 CHECK_NEW_array__Array(var77);
756 }
757 var80 = ((val* (*)(val*))(var77->class->vft[COLOR_string__Object__to_s]))(var77) /* to_s on <var77:Array[Object]>*/;
758 var81 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var80) /* new_file on <var_compiler:SeparateCompiler>*/;
759 var81;
760 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_module_to_c]))(var_compiler, var_m59) /* compile_module_to_c on <var_compiler:SeparateCompiler>*/;
761 CONTINUE_label82: (void)0;
762 ((void (*)(val*))(var56->class->vft[COLOR_abstract_collection__Iterator__next]))(var56) /* next on <var56:Iterator[nullable Object]>*/;
763 }
764 BREAK_label82: (void)0;
765 var83 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
766 if (varonce84) {
767 var85 = varonce84;
768 } else {
769 var86 = "Type coloring";
770 var87 = 13;
771 var88 = string__NativeString__to_s_with_length(var86, var87);
772 var85 = var88;
773 varonce84 = var85;
774 }
775 var89 = 2;
776 ((void (*)(val*, val*, long))(var83->class->vft[COLOR_toolcontext__ToolContext__info]))(var83, var85, var89) /* info on <var83:ToolContext>*/;
777 var90 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
778 if (varonce91) {
779 var92 = varonce91;
780 } else {
781 var93 = ".types";
782 var94 = 6;
783 var95 = string__NativeString__to_s_with_length(var93, var94);
784 var92 = var95;
785 varonce91 = var92;
786 }
787 var96 = NEW_array__Array(&type_array__Arraykernel__Object);
788 { /* var96 = array_instance Array[Object] */
789 var97 = 2;
790 var98 = NEW_array__NativeArray(var97, &type_array__NativeArraykernel__Object);
791 ((struct instance_array__NativeArray*)var98)->values[0] = (val*) var90;
792 ((struct instance_array__NativeArray*)var98)->values[1] = (val*) var92;
793 ((void (*)(val*, val*, long))(var96->class->vft[COLOR_array__Array__with_native]))(var96, var98, var97) /* with_native on <var96:Array[Object]>*/;
794 CHECK_NEW_array__Array(var96);
795 }
796 var99 = ((val* (*)(val*))(var96->class->vft[COLOR_string__Object__to_s]))(var96) /* to_s on <var96:Array[Object]>*/;
797 var100 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var99) /* new_file on <var_compiler:SeparateCompiler>*/;
798 var100;
799 var101 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__do_type_coloring]))(var_compiler) /* do_type_coloring on <var_compiler:SeparateCompiler>*/;
800 var_mtypes = var101;
801 var102 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:POSet[MType]>*/;
802 for(;;) {
803 var103 = ((short int (*)(val*))(var102->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var102) /* is_ok on <var102:Iterator[nullable Object]>*/;
804 if(!var103) break;
805 var104 = ((val* (*)(val*))(var102->class->vft[COLOR_abstract_collection__Iterator__item]))(var102) /* item on <var102:Iterator[nullable Object]>*/;
806 var_t = var104;
807 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_type_to_c]))(var_compiler, var_t) /* compile_type_to_c on <var_compiler:SeparateCompiler>*/;
808 CONTINUE_label105: (void)0;
809 ((void (*)(val*))(var102->class->vft[COLOR_abstract_collection__Iterator__next]))(var102) /* next on <var102:Iterator[nullable Object]>*/;
810 }
811 BREAK_label105: (void)0;
812 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__display_stats]))(var_compiler) /* display_stats on <var_compiler:SeparateCompiler>*/;
813 var106 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
814 var_time1 = var106;
815 var107 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
816 if (varonce108) {
817 var109 = varonce108;
818 } else {
819 var110 = "*** END GENERATING C: ";
820 var111 = 22;
821 var112 = string__NativeString__to_s_with_length(var110, var111);
822 var109 = var112;
823 varonce108 = var109;
824 }
825 { /* Inline kernel#Int#- (var_time1,var_time0) */
826 var115 = var_time1 - var_time0;
827 var113 = var115;
828 goto RET_LABEL114;
829 RET_LABEL114:(void)0;
830 }
831 if (varonce116) {
832 var117 = varonce116;
833 } else {
834 var118 = " ***";
835 var119 = 4;
836 var120 = string__NativeString__to_s_with_length(var118, var119);
837 var117 = var120;
838 varonce116 = var117;
839 }
840 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
841 { /* var121 = array_instance Array[Object] */
842 var122 = 3;
843 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
844 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var109;
845 var124 = BOX_kernel__Int(var113); /* autobox from Int to Object */
846 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var124;
847 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var117;
848 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
849 CHECK_NEW_array__Array(var121);
850 }
851 var125 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
852 var126 = 2;
853 ((void (*)(val*, val*, long))(var107->class->vft[COLOR_toolcontext__ToolContext__info]))(var107, var125, var126) /* info on <var107:ToolContext>*/;
854 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__ModelBuilder__write_and_make]))(self, var_compiler) /* write_and_make on <self:ModelBuilder>*/;
855 RET_LABEL:;
856 }
857 /* method separate_compiler#ModelBuilder#run_separate_compiler for (self: Object, MModule, RapidTypeAnalysis) */
858 void VIRTUAL_separate_compiler__ModelBuilder__run_separate_compiler(val* self, val* p0, val* p1) {
859 separate_compiler__ModelBuilder__run_separate_compiler(self, p0, p1);
860 RET_LABEL:;
861 }
862 /* method separate_compiler#SeparateCompiler#runtime_type_analysis for (self: SeparateCompiler): RapidTypeAnalysis */
863 val* separate_compiler__SeparateCompiler__runtime_type_analysis(val* self) {
864 val* var /* : RapidTypeAnalysis */;
865 val* var1 /* : RapidTypeAnalysis */;
866 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64druntime_type_analysis].val; /* @runtime_type_analysis on <self:SeparateCompiler> */
867 if (var1 == NULL) {
868 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @runtime_type_analysis");
869 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 111);
870 exit(1);
871 }
872 var = var1;
873 RET_LABEL:;
874 return var;
875 }
876 /* method separate_compiler#SeparateCompiler#runtime_type_analysis for (self: Object): RapidTypeAnalysis */
877 val* VIRTUAL_separate_compiler__SeparateCompiler__runtime_type_analysis(val* self) {
878 val* var /* : RapidTypeAnalysis */;
879 val* var1 /* : RapidTypeAnalysis */;
880 var1 = separate_compiler__SeparateCompiler__runtime_type_analysis(self);
881 var = var1;
882 RET_LABEL:;
883 return var;
884 }
885 /* method separate_compiler#SeparateCompiler#runtime_type_analysis= for (self: SeparateCompiler, RapidTypeAnalysis) */
886 void separate_compiler__SeparateCompiler__runtime_type_analysis_61d(val* self, val* p0) {
887 self->attrs[COLOR_separate_compiler__SeparateCompiler___64druntime_type_analysis].val = p0; /* @runtime_type_analysis on <self:SeparateCompiler> */
888 RET_LABEL:;
889 }
890 /* method separate_compiler#SeparateCompiler#runtime_type_analysis= for (self: Object, RapidTypeAnalysis) */
891 void VIRTUAL_separate_compiler__SeparateCompiler__runtime_type_analysis_61d(val* self, val* p0) {
892 separate_compiler__SeparateCompiler__runtime_type_analysis_61d(self, p0);
893 RET_LABEL:;
894 }
895 /* method separate_compiler#SeparateCompiler#undead_types for (self: SeparateCompiler): Set[MType] */
896 val* separate_compiler__SeparateCompiler__undead_types(val* self) {
897 val* var /* : Set[MType] */;
898 val* var1 /* : Set[MType] */;
899 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dundead_types].val; /* @undead_types on <self:SeparateCompiler> */
900 if (var1 == NULL) {
901 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @undead_types");
902 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 114);
903 exit(1);
904 }
905 var = var1;
906 RET_LABEL:;
907 return var;
908 }
909 /* method separate_compiler#SeparateCompiler#undead_types for (self: Object): Set[MType] */
910 val* VIRTUAL_separate_compiler__SeparateCompiler__undead_types(val* self) {
911 val* var /* : Set[MType] */;
912 val* var1 /* : Set[MType] */;
913 var1 = separate_compiler__SeparateCompiler__undead_types(self);
914 var = var1;
915 RET_LABEL:;
916 return var;
917 }
918 /* method separate_compiler#SeparateCompiler#undead_types= for (self: SeparateCompiler, Set[MType]) */
919 void separate_compiler__SeparateCompiler__undead_types_61d(val* self, val* p0) {
920 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dundead_types].val = p0; /* @undead_types on <self:SeparateCompiler> */
921 RET_LABEL:;
922 }
923 /* method separate_compiler#SeparateCompiler#undead_types= for (self: Object, Set[MType]) */
924 void VIRTUAL_separate_compiler__SeparateCompiler__undead_types_61d(val* self, val* p0) {
925 separate_compiler__SeparateCompiler__undead_types_61d(self, p0);
926 RET_LABEL:;
927 }
928 /* method separate_compiler#SeparateCompiler#partial_types for (self: SeparateCompiler): Set[MType] */
929 val* separate_compiler__SeparateCompiler__partial_types(val* self) {
930 val* var /* : Set[MType] */;
931 val* var1 /* : Set[MType] */;
932 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dpartial_types].val; /* @partial_types on <self:SeparateCompiler> */
933 if (var1 == NULL) {
934 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @partial_types");
935 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 115);
936 exit(1);
937 }
938 var = var1;
939 RET_LABEL:;
940 return var;
941 }
942 /* method separate_compiler#SeparateCompiler#partial_types for (self: Object): Set[MType] */
943 val* VIRTUAL_separate_compiler__SeparateCompiler__partial_types(val* self) {
944 val* var /* : Set[MType] */;
945 val* var1 /* : Set[MType] */;
946 var1 = separate_compiler__SeparateCompiler__partial_types(self);
947 var = var1;
948 RET_LABEL:;
949 return var;
950 }
951 /* method separate_compiler#SeparateCompiler#partial_types= for (self: SeparateCompiler, Set[MType]) */
952 void separate_compiler__SeparateCompiler__partial_types_61d(val* self, val* p0) {
953 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dpartial_types].val = p0; /* @partial_types on <self:SeparateCompiler> */
954 RET_LABEL:;
955 }
956 /* method separate_compiler#SeparateCompiler#partial_types= for (self: Object, Set[MType]) */
957 void VIRTUAL_separate_compiler__SeparateCompiler__partial_types_61d(val* self, val* p0) {
958 separate_compiler__SeparateCompiler__partial_types_61d(self, p0);
959 RET_LABEL:;
960 }
961 /* method separate_compiler#SeparateCompiler#live_unresolved_types for (self: SeparateCompiler): Map[MClassDef, Set[MType]] */
962 val* separate_compiler__SeparateCompiler__live_unresolved_types(val* self) {
963 val* var /* : Map[MClassDef, Set[MType]] */;
964 val* var1 /* : Map[MClassDef, Set[MType]] */;
965 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dlive_unresolved_types].val; /* @live_unresolved_types on <self:SeparateCompiler> */
966 if (var1 == NULL) {
967 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @live_unresolved_types");
968 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 116);
969 exit(1);
970 }
971 var = var1;
972 RET_LABEL:;
973 return var;
974 }
975 /* method separate_compiler#SeparateCompiler#live_unresolved_types for (self: Object): Map[MClassDef, Set[MType]] */
976 val* VIRTUAL_separate_compiler__SeparateCompiler__live_unresolved_types(val* self) {
977 val* var /* : Map[MClassDef, Set[MType]] */;
978 val* var1 /* : Map[MClassDef, Set[MType]] */;
979 var1 = separate_compiler__SeparateCompiler__live_unresolved_types(self);
980 var = var1;
981 RET_LABEL:;
982 return var;
983 }
984 /* method separate_compiler#SeparateCompiler#live_unresolved_types= for (self: SeparateCompiler, Map[MClassDef, Set[MType]]) */
985 void separate_compiler__SeparateCompiler__live_unresolved_types_61d(val* self, val* p0) {
986 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dlive_unresolved_types].val = p0; /* @live_unresolved_types on <self:SeparateCompiler> */
987 RET_LABEL:;
988 }
989 /* method separate_compiler#SeparateCompiler#live_unresolved_types= for (self: Object, Map[MClassDef, Set[MType]]) */
990 void VIRTUAL_separate_compiler__SeparateCompiler__live_unresolved_types_61d(val* self, val* p0) {
991 separate_compiler__SeparateCompiler__live_unresolved_types_61d(self, p0);
992 RET_LABEL:;
993 }
994 /* method separate_compiler#SeparateCompiler#type_layout for (self: SeparateCompiler): nullable Layout[MType] */
995 val* separate_compiler__SeparateCompiler__type_layout(val* self) {
996 val* var /* : nullable Layout[MType] */;
997 val* var1 /* : nullable Layout[MType] */;
998 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dtype_layout].val; /* @type_layout on <self:SeparateCompiler> */
999 var = var1;
1000 RET_LABEL:;
1001 return var;
1002 }
1003 /* method separate_compiler#SeparateCompiler#type_layout for (self: Object): nullable Layout[MType] */
1004 val* VIRTUAL_separate_compiler__SeparateCompiler__type_layout(val* self) {
1005 val* var /* : nullable Layout[MType] */;
1006 val* var1 /* : nullable Layout[MType] */;
1007 var1 = separate_compiler__SeparateCompiler__type_layout(self);
1008 var = var1;
1009 RET_LABEL:;
1010 return var;
1011 }
1012 /* method separate_compiler#SeparateCompiler#type_layout= for (self: SeparateCompiler, nullable Layout[MType]) */
1013 void separate_compiler__SeparateCompiler__type_layout_61d(val* self, val* p0) {
1014 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dtype_layout].val = p0; /* @type_layout on <self:SeparateCompiler> */
1015 RET_LABEL:;
1016 }
1017 /* method separate_compiler#SeparateCompiler#type_layout= for (self: Object, nullable Layout[MType]) */
1018 void VIRTUAL_separate_compiler__SeparateCompiler__type_layout_61d(val* self, val* p0) {
1019 separate_compiler__SeparateCompiler__type_layout_61d(self, p0);
1020 RET_LABEL:;
1021 }
1022 /* method separate_compiler#SeparateCompiler#resolution_layout for (self: SeparateCompiler): nullable Layout[MType] */
1023 val* separate_compiler__SeparateCompiler__resolution_layout(val* self) {
1024 val* var /* : nullable Layout[MType] */;
1025 val* var1 /* : nullable Layout[MType] */;
1026 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dresolution_layout].val; /* @resolution_layout on <self:SeparateCompiler> */
1027 var = var1;
1028 RET_LABEL:;
1029 return var;
1030 }
1031 /* method separate_compiler#SeparateCompiler#resolution_layout for (self: Object): nullable Layout[MType] */
1032 val* VIRTUAL_separate_compiler__SeparateCompiler__resolution_layout(val* self) {
1033 val* var /* : nullable Layout[MType] */;
1034 val* var1 /* : nullable Layout[MType] */;
1035 var1 = separate_compiler__SeparateCompiler__resolution_layout(self);
1036 var = var1;
1037 RET_LABEL:;
1038 return var;
1039 }
1040 /* method separate_compiler#SeparateCompiler#resolution_layout= for (self: SeparateCompiler, nullable Layout[MType]) */
1041 void separate_compiler__SeparateCompiler__resolution_layout_61d(val* self, val* p0) {
1042 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dresolution_layout].val = p0; /* @resolution_layout on <self:SeparateCompiler> */
1043 RET_LABEL:;
1044 }
1045 /* method separate_compiler#SeparateCompiler#resolution_layout= for (self: Object, nullable Layout[MType]) */
1046 void VIRTUAL_separate_compiler__SeparateCompiler__resolution_layout_61d(val* self, val* p0) {
1047 separate_compiler__SeparateCompiler__resolution_layout_61d(self, p0);
1048 RET_LABEL:;
1049 }
1050 /* method separate_compiler#SeparateCompiler#method_layout for (self: SeparateCompiler): nullable Layout[PropertyLayoutElement] */
1051 val* separate_compiler__SeparateCompiler__method_layout(val* self) {
1052 val* var /* : nullable Layout[PropertyLayoutElement] */;
1053 val* var1 /* : nullable Layout[PropertyLayoutElement] */;
1054 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dmethod_layout].val; /* @method_layout on <self:SeparateCompiler> */
1055 var = var1;
1056 RET_LABEL:;
1057 return var;
1058 }
1059 /* method separate_compiler#SeparateCompiler#method_layout for (self: Object): nullable Layout[PropertyLayoutElement] */
1060 val* VIRTUAL_separate_compiler__SeparateCompiler__method_layout(val* self) {
1061 val* var /* : nullable Layout[PropertyLayoutElement] */;
1062 val* var1 /* : nullable Layout[PropertyLayoutElement] */;
1063 var1 = separate_compiler__SeparateCompiler__method_layout(self);
1064 var = var1;
1065 RET_LABEL:;
1066 return var;
1067 }
1068 /* method separate_compiler#SeparateCompiler#method_layout= for (self: SeparateCompiler, nullable Layout[PropertyLayoutElement]) */
1069 void separate_compiler__SeparateCompiler__method_layout_61d(val* self, val* p0) {
1070 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dmethod_layout].val = p0; /* @method_layout on <self:SeparateCompiler> */
1071 RET_LABEL:;
1072 }
1073 /* method separate_compiler#SeparateCompiler#method_layout= for (self: Object, nullable Layout[PropertyLayoutElement]) */
1074 void VIRTUAL_separate_compiler__SeparateCompiler__method_layout_61d(val* self, val* p0) {
1075 separate_compiler__SeparateCompiler__method_layout_61d(self, p0);
1076 RET_LABEL:;
1077 }
1078 /* method separate_compiler#SeparateCompiler#attr_layout for (self: SeparateCompiler): nullable Layout[MAttribute] */
1079 val* separate_compiler__SeparateCompiler__attr_layout(val* self) {
1080 val* var /* : nullable Layout[MAttribute] */;
1081 val* var1 /* : nullable Layout[MAttribute] */;
1082 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dattr_layout].val; /* @attr_layout on <self:SeparateCompiler> */
1083 var = var1;
1084 RET_LABEL:;
1085 return var;
1086 }
1087 /* method separate_compiler#SeparateCompiler#attr_layout for (self: Object): nullable Layout[MAttribute] */
1088 val* VIRTUAL_separate_compiler__SeparateCompiler__attr_layout(val* self) {
1089 val* var /* : nullable Layout[MAttribute] */;
1090 val* var1 /* : nullable Layout[MAttribute] */;
1091 var1 = separate_compiler__SeparateCompiler__attr_layout(self);
1092 var = var1;
1093 RET_LABEL:;
1094 return var;
1095 }
1096 /* method separate_compiler#SeparateCompiler#attr_layout= for (self: SeparateCompiler, nullable Layout[MAttribute]) */
1097 void separate_compiler__SeparateCompiler__attr_layout_61d(val* self, val* p0) {
1098 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dattr_layout].val = p0; /* @attr_layout on <self:SeparateCompiler> */
1099 RET_LABEL:;
1100 }
1101 /* method separate_compiler#SeparateCompiler#attr_layout= for (self: Object, nullable Layout[MAttribute]) */
1102 void VIRTUAL_separate_compiler__SeparateCompiler__attr_layout_61d(val* self, val* p0) {
1103 separate_compiler__SeparateCompiler__attr_layout_61d(self, p0);
1104 RET_LABEL:;
1105 }
1106 /* method separate_compiler#SeparateCompiler#init for (self: SeparateCompiler, MModule, ModelBuilder, RapidTypeAnalysis) */
1107 void separate_compiler__SeparateCompiler__init(val* self, val* p0, val* p1, val* p2) {
1108 val* var_mainmodule /* var mainmodule: MModule */;
1109 val* var_mmbuilder /* var mmbuilder: ModelBuilder */;
1110 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
1111 static val* varonce;
1112 val* var /* : String */;
1113 char* var1 /* : NativeString */;
1114 long var2 /* : Int */;
1115 val* var3 /* : String */;
1116 val* var4 /* : CodeFile */;
1117 val* var_file /* var file: CodeFile */;
1118 val* var5 /* : CodeWriter */;
1119 var_mainmodule = p0;
1120 var_mmbuilder = p1;
1121 var_runtime_type_analysis = p2;
1122 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__init]))(self, var_mainmodule, var_mmbuilder) /* init on <self:SeparateCompiler>*/;
1123 if (varonce) {
1124 var = varonce;
1125 } else {
1126 var1 = "nit.common";
1127 var2 = 10;
1128 var3 = string__NativeString__to_s_with_length(var1, var2);
1129 var = var3;
1130 varonce = var;
1131 }
1132 var4 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(self, var) /* new_file on <self:SeparateCompiler>*/;
1133 var_file = var4;
1134 var5 = NEW_abstract_compiler__CodeWriter(&type_abstract_compiler__CodeWriter);
1135 ((void (*)(val*, val*))(var5->class->vft[COLOR_abstract_compiler__CodeWriter__init]))(var5, var_file) /* init on <var5:CodeWriter>*/;
1136 CHECK_NEW_abstract_compiler__CodeWriter(var5);
1137 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header_61d]))(self, var5) /* header= on <self:SeparateCompiler>*/;
1138 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__runtime_type_analysis_61d]))(self, var_runtime_type_analysis) /* runtime_type_analysis= on <self:SeparateCompiler>*/;
1139 ((void (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_box_kinds]))(self) /* compile_box_kinds on <self:SeparateCompiler>*/;
1140 RET_LABEL:;
1141 }
1142 /* method separate_compiler#SeparateCompiler#init for (self: Object, MModule, ModelBuilder, RapidTypeAnalysis) */
1143 void VIRTUAL_separate_compiler__SeparateCompiler__init(val* self, val* p0, val* p1, val* p2) {
1144 separate_compiler__SeparateCompiler__init(self, p0, p1, p2);
1145 RET_LABEL:;
1146 }
1147 /* method separate_compiler#SeparateCompiler#compile_header_structs for (self: SeparateCompiler) */
1148 void separate_compiler__SeparateCompiler__compile_header_structs(val* self) {
1149 val* var /* : CodeWriter */;
1150 static val* varonce;
1151 val* var1 /* : String */;
1152 char* var2 /* : NativeString */;
1153 long var3 /* : Int */;
1154 val* var4 /* : String */;
1155 val* var5 /* : CodeWriter */;
1156 static val* varonce6;
1157 val* var7 /* : String */;
1158 char* var8 /* : NativeString */;
1159 long var9 /* : Int */;
1160 val* var10 /* : String */;
1161 val* var11 /* : CodeWriter */;
1162 static val* varonce12;
1163 val* var13 /* : String */;
1164 char* var14 /* : NativeString */;
1165 long var15 /* : Int */;
1166 val* var16 /* : String */;
1167 val* var17 /* : CodeWriter */;
1168 static val* varonce18;
1169 val* var19 /* : String */;
1170 char* var20 /* : NativeString */;
1171 long var21 /* : Int */;
1172 val* var22 /* : String */;
1173 short int var23 /* : Bool */;
1174 val* var24 /* : ModelBuilder */;
1175 val* var25 /* : ToolContext */;
1176 val* var26 /* : OptionBool */;
1177 val* var27 /* : nullable Object */;
1178 short int var28 /* : Bool */;
1179 short int var_ /* var : Bool */;
1180 val* var29 /* : ModelBuilder */;
1181 val* var30 /* : ToolContext */;
1182 val* var31 /* : OptionBool */;
1183 val* var32 /* : nullable Object */;
1184 short int var33 /* : Bool */;
1185 val* var34 /* : CodeWriter */;
1186 static val* varonce35;
1187 val* var36 /* : String */;
1188 char* var37 /* : NativeString */;
1189 long var38 /* : Int */;
1190 val* var39 /* : String */;
1191 val* var40 /* : CodeWriter */;
1192 static val* varonce41;
1193 val* var42 /* : String */;
1194 char* var43 /* : NativeString */;
1195 long var44 /* : Int */;
1196 val* var45 /* : String */;
1197 val* var46 /* : ModelBuilder */;
1198 val* var47 /* : ToolContext */;
1199 val* var48 /* : OptionBool */;
1200 val* var49 /* : nullable Object */;
1201 short int var50 /* : Bool */;
1202 val* var51 /* : CodeWriter */;
1203 static val* varonce52;
1204 val* var53 /* : String */;
1205 char* var54 /* : NativeString */;
1206 long var55 /* : Int */;
1207 val* var56 /* : String */;
1208 val* var57 /* : ModelBuilder */;
1209 val* var58 /* : ToolContext */;
1210 val* var59 /* : OptionBool */;
1211 val* var60 /* : nullable Object */;
1212 short int var61 /* : Bool */;
1213 val* var62 /* : CodeWriter */;
1214 static val* varonce63;
1215 val* var64 /* : String */;
1216 char* var65 /* : NativeString */;
1217 long var66 /* : Int */;
1218 val* var67 /* : String */;
1219 val* var68 /* : CodeWriter */;
1220 static val* varonce69;
1221 val* var70 /* : String */;
1222 char* var71 /* : NativeString */;
1223 long var72 /* : Int */;
1224 val* var73 /* : String */;
1225 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1226 if (varonce) {
1227 var1 = varonce;
1228 } else {
1229 var2 = "typedef void(*nitmethod_t)(void); /* general C type representing a Nit method. */";
1230 var3 = 81;
1231 var4 = string__NativeString__to_s_with_length(var2, var3);
1232 var1 = var4;
1233 varonce = var1;
1234 }
1235 ((void (*)(val*, val*))(var->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var, var1) /* add_decl on <var:CodeWriter>*/;
1236 ((void (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_header_attribute_structs]))(self) /* compile_header_attribute_structs on <self:SeparateCompiler>*/;
1237 var5 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1238 if (varonce6) {
1239 var7 = varonce6;
1240 } else {
1241 var8 = "struct class { int box_kind; nitmethod_t vft[]; }; /* general C type representing a Nit class. */";
1242 var9 = 97;
1243 var10 = string__NativeString__to_s_with_length(var8, var9);
1244 var7 = var10;
1245 varonce6 = var7;
1246 }
1247 ((void (*)(val*, val*))(var5->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var5, var7) /* add_decl on <var5:CodeWriter>*/;
1248 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1249 if (varonce12) {
1250 var13 = varonce12;
1251 } else {
1252 var14 = "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. */";
1253 var15 = 194;
1254 var16 = string__NativeString__to_s_with_length(var14, var15);
1255 var13 = var16;
1256 varonce12 = var13;
1257 }
1258 ((void (*)(val*, val*))(var11->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var11, var13) /* add_decl on <var11:CodeWriter>*/;
1259 var17 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1260 if (varonce18) {
1261 var19 = varonce18;
1262 } else {
1263 var20 = "struct instance { const struct type *type; const struct class *class; nitattribute_t attrs[]; }; /* general C type representing a Nit instance. */";
1264 var21 = 146;
1265 var22 = string__NativeString__to_s_with_length(var20, var21);
1266 var19 = var22;
1267 varonce18 = var19;
1268 }
1269 ((void (*)(val*, val*))(var17->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var17, var19) /* add_decl on <var17:CodeWriter>*/;
1270 var24 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
1271 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var24) /* toolcontext on <var24:ModelBuilder>*/;
1272 var26 = ((val* (*)(val*))(var25->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var25) /* opt_phmod_typing on <var25:ToolContext>*/;
1273 var27 = ((val* (*)(val*))(var26->class->vft[COLOR_opts__Option__value]))(var26) /* value on <var26:OptionBool>*/;
1274 var28 = ((struct instance_kernel__Bool*)var27)->value; /* autounbox from nullable Object to Bool */;
1275 var_ = var28;
1276 if (var28){
1277 var23 = var_;
1278 } else {
1279 var29 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
1280 var30 = ((val* (*)(val*))(var29->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var29) /* toolcontext on <var29:ModelBuilder>*/;
1281 var31 = ((val* (*)(val*))(var30->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var30) /* opt_phand_typing on <var30:ToolContext>*/;
1282 var32 = ((val* (*)(val*))(var31->class->vft[COLOR_opts__Option__value]))(var31) /* value on <var31:OptionBool>*/;
1283 var33 = ((struct instance_kernel__Bool*)var32)->value; /* autounbox from nullable Object to Bool */;
1284 var23 = var33;
1285 }
1286 if (var23){
1287 var34 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1288 if (varonce35) {
1289 var36 = varonce35;
1290 } else {
1291 var37 = "struct types { int mask; const struct type *types[]; }; /* a list types (used for vts, fts and unresolved lists). */";
1292 var38 = 116;
1293 var39 = string__NativeString__to_s_with_length(var37, var38);
1294 var36 = var39;
1295 varonce35 = var36;
1296 }
1297 ((void (*)(val*, val*))(var34->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var34, var36) /* add_decl on <var34:CodeWriter>*/;
1298 } else {
1299 var40 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1300 if (varonce41) {
1301 var42 = varonce41;
1302 } else {
1303 var43 = "struct types { int dummy; const struct type *types[]; }; /* a list types (used for vts, fts and unresolved lists). */";
1304 var44 = 117;
1305 var45 = string__NativeString__to_s_with_length(var43, var44);
1306 var42 = var45;
1307 varonce41 = var42;
1308 }
1309 ((void (*)(val*, val*))(var40->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var40, var42) /* add_decl on <var40:CodeWriter>*/;
1310 }
1311 var46 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
1312 var47 = ((val* (*)(val*))(var46->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var46) /* toolcontext on <var46:ModelBuilder>*/;
1313 var48 = ((val* (*)(val*))(var47->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var47) /* opt_phmod_typing on <var47:ToolContext>*/;
1314 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_opts__Option__value]))(var48) /* value on <var48:OptionBool>*/;
1315 var50 = ((struct instance_kernel__Bool*)var49)->value; /* autounbox from nullable Object to Bool */;
1316 if (var50){
1317 var51 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1318 if (varonce52) {
1319 var53 = varonce52;
1320 } else {
1321 var54 = "#define HASH(mask, id) ((mask)%(id))";
1322 var55 = 36;
1323 var56 = string__NativeString__to_s_with_length(var54, var55);
1324 var53 = var56;
1325 varonce52 = var53;
1326 }
1327 ((void (*)(val*, val*))(var51->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var51, var53) /* add_decl on <var51:CodeWriter>*/;
1328 } else {
1329 var57 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
1330 var58 = ((val* (*)(val*))(var57->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var57) /* toolcontext on <var57:ModelBuilder>*/;
1331 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var58) /* opt_phand_typing on <var58:ToolContext>*/;
1332 var60 = ((val* (*)(val*))(var59->class->vft[COLOR_opts__Option__value]))(var59) /* value on <var59:OptionBool>*/;
1333 var61 = ((struct instance_kernel__Bool*)var60)->value; /* autounbox from nullable Object to Bool */;
1334 if (var61){
1335 var62 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1336 if (varonce63) {
1337 var64 = varonce63;
1338 } else {
1339 var65 = "#define HASH(mask, id) ((mask)&(id))";
1340 var66 = 36;
1341 var67 = string__NativeString__to_s_with_length(var65, var66);
1342 var64 = var67;
1343 varonce63 = var64;
1344 }
1345 ((void (*)(val*, val*))(var62->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var62, var64) /* add_decl on <var62:CodeWriter>*/;
1346 } else {
1347 }
1348 }
1349 var68 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1350 if (varonce69) {
1351 var70 = varonce69;
1352 } else {
1353 var71 = "typedef struct instance val; /* general C type representing a Nit instance. */";
1354 var72 = 78;
1355 var73 = string__NativeString__to_s_with_length(var71, var72);
1356 var70 = var73;
1357 varonce69 = var70;
1358 }
1359 ((void (*)(val*, val*))(var68->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var68, var70) /* add_decl on <var68:CodeWriter>*/;
1360 RET_LABEL:;
1361 }
1362 /* method separate_compiler#SeparateCompiler#compile_header_structs for (self: Object) */
1363 void VIRTUAL_separate_compiler__SeparateCompiler__compile_header_structs(val* self) {
1364 separate_compiler__SeparateCompiler__compile_header_structs(self);
1365 RET_LABEL:;
1366 }
1367 /* method separate_compiler#SeparateCompiler#compile_header_attribute_structs for (self: SeparateCompiler) */
1368 void separate_compiler__SeparateCompiler__compile_header_attribute_structs(val* self) {
1369 val* var /* : ModelBuilder */;
1370 val* var1 /* : ToolContext */;
1371 val* var2 /* : OptionBool */;
1372 val* var3 /* : nullable Object */;
1373 short int var4 /* : Bool */;
1374 val* var5 /* : CodeWriter */;
1375 static val* varonce;
1376 val* var6 /* : String */;
1377 char* var7 /* : NativeString */;
1378 long var8 /* : Int */;
1379 val* var9 /* : String */;
1380 val* var10 /* : CodeWriter */;
1381 static val* varonce11;
1382 val* var12 /* : String */;
1383 char* var13 /* : NativeString */;
1384 long var14 /* : Int */;
1385 val* var15 /* : String */;
1386 val* var16 /* : CodeWriter */;
1387 static val* varonce17;
1388 val* var18 /* : String */;
1389 char* var19 /* : NativeString */;
1390 long var20 /* : Int */;
1391 val* var21 /* : String */;
1392 val* var22 /* : HashMap[MClass, Int] */;
1393 val* var23 /* : MapIterator[Object, nullable Object] */;
1394 short int var24 /* : Bool */;
1395 val* var25 /* : Object */;
1396 val* var_c /* var c: MClass */;
1397 val* var26 /* : nullable Object */;
1398 long var_v /* var v: Int */;
1399 long var27 /* : Int */;
1400 val* var28 /* : MClassType */;
1401 val* var_t /* var t: MClassType */;
1402 val* var29 /* : CodeWriter */;
1403 val* var30 /* : String */;
1404 static val* varonce31;
1405 val* var32 /* : String */;
1406 char* var33 /* : NativeString */;
1407 long var34 /* : Int */;
1408 val* var35 /* : String */;
1409 val* var36 /* : String */;
1410 static val* varonce37;
1411 val* var38 /* : String */;
1412 char* var39 /* : NativeString */;
1413 long var40 /* : Int */;
1414 val* var41 /* : String */;
1415 val* var42 /* : Array[Object] */;
1416 long var43 /* : Int */;
1417 val* var44 /* : NativeArray[Object] */;
1418 val* var45 /* : String */;
1419 val* var46 /* : CodeWriter */;
1420 static val* varonce47;
1421 val* var48 /* : String */;
1422 char* var49 /* : NativeString */;
1423 long var50 /* : Int */;
1424 val* var51 /* : String */;
1425 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
1426 var1 = ((val* (*)(val*))(var->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var) /* toolcontext on <var:ModelBuilder>*/;
1427 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_separate_compiler__ToolContext__opt_no_union_attribute]))(var1) /* opt_no_union_attribute on <var1:ToolContext>*/;
1428 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_opts__Option__value]))(var2) /* value on <var2:OptionBool>*/;
1429 var4 = ((struct instance_kernel__Bool*)var3)->value; /* autounbox from nullable Object to Bool */;
1430 if (var4){
1431 var5 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1432 if (varonce) {
1433 var6 = varonce;
1434 } else {
1435 var7 = "typedef void* nitattribute_t; /* general C type representing a Nit attribute. */";
1436 var8 = 80;
1437 var9 = string__NativeString__to_s_with_length(var7, var8);
1438 var6 = var9;
1439 varonce = var6;
1440 }
1441 ((void (*)(val*, val*))(var5->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var5, var6) /* add_decl on <var5:CodeWriter>*/;
1442 } else {
1443 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1444 if (varonce11) {
1445 var12 = varonce11;
1446 } else {
1447 var13 = "typedef union {";
1448 var14 = 15;
1449 var15 = string__NativeString__to_s_with_length(var13, var14);
1450 var12 = var15;
1451 varonce11 = var12;
1452 }
1453 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var10, var12) /* add_decl on <var10:CodeWriter>*/;
1454 var16 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1455 if (varonce17) {
1456 var18 = varonce17;
1457 } else {
1458 var19 = "void* val;";
1459 var20 = 10;
1460 var21 = string__NativeString__to_s_with_length(var19, var20);
1461 var18 = var21;
1462 varonce17 = var18;
1463 }
1464 ((void (*)(val*, val*))(var16->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var16, var18) /* add_decl on <var16:CodeWriter>*/;
1465 var22 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kinds]))(self) /* box_kinds on <self:SeparateCompiler>*/;
1466 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var22) /* iterator on <var22:HashMap[MClass, Int]>*/;
1467 for(;;) {
1468 var24 = ((short int (*)(val*))(var23->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var23) /* is_ok on <var23:MapIterator[Object, nullable Object]>*/;
1469 if(!var24) break;
1470 var25 = ((val* (*)(val*))(var23->class->vft[COLOR_abstract_collection__MapIterator__key]))(var23) /* key on <var23:MapIterator[Object, nullable Object]>*/;
1471 var_c = var25;
1472 var26 = ((val* (*)(val*))(var23->class->vft[COLOR_abstract_collection__MapIterator__item]))(var23) /* item on <var23:MapIterator[Object, nullable Object]>*/;
1473 var27 = ((struct instance_kernel__Int*)var26)->value; /* autounbox from nullable Object to Int */;
1474 var_v = var27;
1475 var28 = ((val* (*)(val*))(var_c->class->vft[COLOR_model__MClass__mclass_type]))(var_c) /* mclass_type on <var_c:MClass>*/;
1476 var_t = var28;
1477 var29 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1478 var30 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_t) /* ctype on <var_t:MClassType>*/;
1479 if (varonce31) {
1480 var32 = varonce31;
1481 } else {
1482 var33 = " ";
1483 var34 = 1;
1484 var35 = string__NativeString__to_s_with_length(var33, var34);
1485 var32 = var35;
1486 varonce31 = var32;
1487 }
1488 var36 = ((val* (*)(val*))(var_t->class->vft[COLOR_abstract_compiler__MType__ctypename]))(var_t) /* ctypename on <var_t:MClassType>*/;
1489 if (varonce37) {
1490 var38 = varonce37;
1491 } else {
1492 var39 = ";";
1493 var40 = 1;
1494 var41 = string__NativeString__to_s_with_length(var39, var40);
1495 var38 = var41;
1496 varonce37 = var38;
1497 }
1498 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
1499 { /* var42 = array_instance Array[Object] */
1500 var43 = 4;
1501 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
1502 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var30;
1503 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var32;
1504 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var36;
1505 ((struct instance_array__NativeArray*)var44)->values[3] = (val*) var38;
1506 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
1507 CHECK_NEW_array__Array(var42);
1508 }
1509 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
1510 ((void (*)(val*, val*))(var29->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var29, var45) /* add_decl on <var29:CodeWriter>*/;
1511 CONTINUE_label: (void)0;
1512 ((void (*)(val*))(var23->class->vft[COLOR_abstract_collection__MapIterator__next]))(var23) /* next on <var23:MapIterator[Object, nullable Object]>*/;
1513 }
1514 BREAK_label: (void)0;
1515 var46 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
1516 if (varonce47) {
1517 var48 = varonce47;
1518 } else {
1519 var49 = "} nitattribute_t; /* general C type representing a Nit attribute. */";
1520 var50 = 68;
1521 var51 = string__NativeString__to_s_with_length(var49, var50);
1522 var48 = var51;
1523 varonce47 = var48;
1524 }
1525 ((void (*)(val*, val*))(var46->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var46, var48) /* add_decl on <var46:CodeWriter>*/;
1526 }
1527 RET_LABEL:;
1528 }
1529 /* method separate_compiler#SeparateCompiler#compile_header_attribute_structs for (self: Object) */
1530 void VIRTUAL_separate_compiler__SeparateCompiler__compile_header_attribute_structs(val* self) {
1531 separate_compiler__SeparateCompiler__compile_header_attribute_structs(self);
1532 RET_LABEL:;
1533 }
1534 /* method separate_compiler#SeparateCompiler#compile_box_kinds for (self: SeparateCompiler) */
1535 void separate_compiler__SeparateCompiler__compile_box_kinds(val* self) {
1536 val* var /* : Array[String] */;
1537 long var1 /* : Int */;
1538 val* var_ /* var : Array[String] */;
1539 static val* varonce;
1540 val* var2 /* : String */;
1541 char* var3 /* : NativeString */;
1542 long var4 /* : Int */;
1543 val* var5 /* : String */;
1544 static val* varonce6;
1545 val* var7 /* : String */;
1546 char* var8 /* : NativeString */;
1547 long var9 /* : Int */;
1548 val* var10 /* : String */;
1549 static val* varonce11;
1550 val* var12 /* : String */;
1551 char* var13 /* : NativeString */;
1552 long var14 /* : Int */;
1553 val* var15 /* : String */;
1554 static val* varonce16;
1555 val* var17 /* : String */;
1556 char* var18 /* : NativeString */;
1557 long var19 /* : Int */;
1558 val* var20 /* : String */;
1559 static val* varonce21;
1560 val* var22 /* : String */;
1561 char* var23 /* : NativeString */;
1562 long var24 /* : Int */;
1563 val* var25 /* : String */;
1564 static val* varonce26;
1565 val* var27 /* : String */;
1566 char* var28 /* : NativeString */;
1567 long var29 /* : Int */;
1568 val* var30 /* : String */;
1569 val* var31 /* : Iterator[nullable Object] */;
1570 short int var32 /* : Bool */;
1571 val* var33 /* : nullable Object */;
1572 val* var_classname /* var classname: String */;
1573 val* var34 /* : MModule */;
1574 val* var35 /* : Model */;
1575 val* var36 /* : nullable Array[MClass] */;
1576 val* var_classes /* var classes: nullable Array[MClass] */;
1577 val* var37 /* : null */;
1578 short int var38 /* : Bool */;
1579 long var39 /* : Int */;
1580 long var40 /* : Int */;
1581 short int var41 /* : Bool */;
1582 short int var43 /* : Bool */;
1583 static val* varonce44;
1584 val* var45 /* : String */;
1585 char* var46 /* : NativeString */;
1586 long var47 /* : Int */;
1587 val* var48 /* : String */;
1588 val* var49 /* : String */;
1589 val* var50 /* : HashMap[MClass, Int] */;
1590 val* var51 /* : nullable Object */;
1591 val* var52 /* : HashMap[MClass, Int] */;
1592 long var53 /* : Int */;
1593 long var54 /* : Int */;
1594 long var55 /* : Int */;
1595 long var57 /* : Int */;
1596 val* var58 /* : nullable Object */;
1597 var = NEW_array__Array(&type_array__Arraystring__String);
1598 var1 = 6;
1599 ((void (*)(val*, long))(var->class->vft[COLOR_array__Array__with_capacity]))(var, var1) /* with_capacity on <var:Array[String]>*/;
1600 CHECK_NEW_array__Array(var);
1601 var_ = var;
1602 if (varonce) {
1603 var2 = varonce;
1604 } else {
1605 var3 = "Int";
1606 var4 = 3;
1607 var5 = string__NativeString__to_s_with_length(var3, var4);
1608 var2 = var5;
1609 varonce = var2;
1610 }
1611 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var2) /* push on <var_:Array[String]>*/;
1612 if (varonce6) {
1613 var7 = varonce6;
1614 } else {
1615 var8 = "Bool";
1616 var9 = 4;
1617 var10 = string__NativeString__to_s_with_length(var8, var9);
1618 var7 = var10;
1619 varonce6 = var7;
1620 }
1621 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var7) /* push on <var_:Array[String]>*/;
1622 if (varonce11) {
1623 var12 = varonce11;
1624 } else {
1625 var13 = "Char";
1626 var14 = 4;
1627 var15 = string__NativeString__to_s_with_length(var13, var14);
1628 var12 = var15;
1629 varonce11 = var12;
1630 }
1631 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var12) /* push on <var_:Array[String]>*/;
1632 if (varonce16) {
1633 var17 = varonce16;
1634 } else {
1635 var18 = "Float";
1636 var19 = 5;
1637 var20 = string__NativeString__to_s_with_length(var18, var19);
1638 var17 = var20;
1639 varonce16 = var17;
1640 }
1641 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var17) /* push on <var_:Array[String]>*/;
1642 if (varonce21) {
1643 var22 = varonce21;
1644 } else {
1645 var23 = "NativeString";
1646 var24 = 12;
1647 var25 = string__NativeString__to_s_with_length(var23, var24);
1648 var22 = var25;
1649 varonce21 = var22;
1650 }
1651 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var22) /* push on <var_:Array[String]>*/;
1652 if (varonce26) {
1653 var27 = varonce26;
1654 } else {
1655 var28 = "Pointer";
1656 var29 = 7;
1657 var30 = string__NativeString__to_s_with_length(var28, var29);
1658 var27 = var30;
1659 varonce26 = var27;
1660 }
1661 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__Sequence__push]))(var_, var27) /* push on <var_:Array[String]>*/;
1662 var31 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Array[String]>*/;
1663 for(;;) {
1664 var32 = ((short int (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var31) /* is_ok on <var31:Iterator[nullable Object]>*/;
1665 if(!var32) break;
1666 var33 = ((val* (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator__item]))(var31) /* item on <var31:Iterator[nullable Object]>*/;
1667 var_classname = var33;
1668 var34 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
1669 var35 = ((val* (*)(val*))(var34->class->vft[COLOR_model_base__MModule__model]))(var34) /* model on <var34:MModule>*/;
1670 var36 = ((val* (*)(val*, val*))(var35->class->vft[COLOR_model__Model__get_mclasses_by_name]))(var35, var_classname) /* get_mclasses_by_name on <var35:Model>*/;
1671 var_classes = var36;
1672 var37 = NULL;
1673 if (var_classes == NULL) {
1674 var38 = 1; /* is null */
1675 } else {
1676 var38 = 0; /* arg is null but recv is not */
1677 }
1678 if (var38){
1679 goto CONTINUE_label;
1680 } else {
1681 }
1682 var39 = ((long (*)(val*))(var_classes->class->vft[COLOR_abstract_collection__Collection__length]))(var_classes) /* length on <var_classes:nullable Array[MClass](Array[MClass])>*/;
1683 var40 = 1;
1684 { /* Inline kernel#Int#== (var39,var40) */
1685 var43 = var39 == var40;
1686 var41 = var43;
1687 goto RET_LABEL42;
1688 RET_LABEL42:(void)0;
1689 }
1690 if (!var41) {
1691 if (varonce44) {
1692 var45 = varonce44;
1693 } else {
1694 var46 = ", ";
1695 var47 = 2;
1696 var48 = string__NativeString__to_s_with_length(var46, var47);
1697 var45 = var48;
1698 varonce44 = var45;
1699 }
1700 var49 = ((val* (*)(val*, val*))(var_classes->class->vft[COLOR_string__Collection__join]))(var_classes, var45) /* join on <var_classes:nullable Array[MClass](Array[MClass])>*/;
1701 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var49) /* print on <self:SeparateCompiler>*/;
1702 fprintf(stderr, "Runtime error: %s", "Assert failed");
1703 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 177);
1704 exit(1);
1705 }
1706 var50 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kinds]))(self) /* box_kinds on <self:SeparateCompiler>*/;
1707 var51 = ((val* (*)(val*))(var_classes->class->vft[COLOR_abstract_collection__Collection__first]))(var_classes) /* first on <var_classes:nullable Array[MClass](Array[MClass])>*/;
1708 var52 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kinds]))(self) /* box_kinds on <self:SeparateCompiler>*/;
1709 var53 = ((long (*)(val*))(var52->class->vft[COLOR_abstract_collection__MapRead__length]))(var52) /* length on <var52:HashMap[MClass, Int]>*/;
1710 var54 = 1;
1711 { /* Inline kernel#Int#+ (var53,var54) */
1712 var57 = var53 + var54;
1713 var55 = var57;
1714 goto RET_LABEL56;
1715 RET_LABEL56:(void)0;
1716 }
1717 var58 = BOX_kernel__Int(var55); /* autobox from Int to nullable Object */
1718 ((void (*)(val*, val*, val*))(var50->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var50, var51, var58) /* []= on <var50:HashMap[MClass, Int]>*/;
1719 CONTINUE_label: (void)0;
1720 ((void (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator__next]))(var31) /* next on <var31:Iterator[nullable Object]>*/;
1721 }
1722 BREAK_label: (void)0;
1723 RET_LABEL:;
1724 }
1725 /* method separate_compiler#SeparateCompiler#compile_box_kinds for (self: Object) */
1726 void VIRTUAL_separate_compiler__SeparateCompiler__compile_box_kinds(val* self) {
1727 separate_compiler__SeparateCompiler__compile_box_kinds(self);
1728 RET_LABEL:;
1729 }
1730 /* method separate_compiler#SeparateCompiler#box_kinds for (self: SeparateCompiler): HashMap[MClass, Int] */
1731 val* separate_compiler__SeparateCompiler__box_kinds(val* self) {
1732 val* var /* : HashMap[MClass, Int] */;
1733 val* var1 /* : HashMap[MClass, Int] */;
1734 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dbox_kinds].val; /* @box_kinds on <self:SeparateCompiler> */
1735 if (var1 == NULL) {
1736 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @box_kinds");
1737 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 182);
1738 exit(1);
1739 }
1740 var = var1;
1741 RET_LABEL:;
1742 return var;
1743 }
1744 /* method separate_compiler#SeparateCompiler#box_kinds for (self: Object): HashMap[MClass, Int] */
1745 val* VIRTUAL_separate_compiler__SeparateCompiler__box_kinds(val* self) {
1746 val* var /* : HashMap[MClass, Int] */;
1747 val* var1 /* : HashMap[MClass, Int] */;
1748 var1 = separate_compiler__SeparateCompiler__box_kinds(self);
1749 var = var1;
1750 RET_LABEL:;
1751 return var;
1752 }
1753 /* method separate_compiler#SeparateCompiler#box_kinds= for (self: SeparateCompiler, HashMap[MClass, Int]) */
1754 void separate_compiler__SeparateCompiler__box_kinds_61d(val* self, val* p0) {
1755 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dbox_kinds].val = p0; /* @box_kinds on <self:SeparateCompiler> */
1756 RET_LABEL:;
1757 }
1758 /* method separate_compiler#SeparateCompiler#box_kinds= for (self: Object, HashMap[MClass, Int]) */
1759 void VIRTUAL_separate_compiler__SeparateCompiler__box_kinds_61d(val* self, val* p0) {
1760 separate_compiler__SeparateCompiler__box_kinds_61d(self, p0);
1761 RET_LABEL:;
1762 }
1763 /* method separate_compiler#SeparateCompiler#box_kind_of for (self: SeparateCompiler, MClass): Int */
1764 long separate_compiler__SeparateCompiler__box_kind_of(val* self, val* p0) {
1765 long var /* : Int */;
1766 val* var_mclass /* var mclass: MClass */;
1767 val* var1 /* : MClassType */;
1768 val* var2 /* : String */;
1769 static val* varonce;
1770 val* var3 /* : String */;
1771 char* var4 /* : NativeString */;
1772 long var5 /* : Int */;
1773 val* var6 /* : String */;
1774 short int var7 /* : Bool */;
1775 long var8 /* : Int */;
1776 val* var9 /* : MClassKind */;
1777 val* var10 /* : MClassKind */;
1778 short int var11 /* : Bool */;
1779 val* var12 /* : HashMap[MClass, Int] */;
1780 val* var13 /* : MModule */;
1781 static val* varonce14;
1782 val* var15 /* : String */;
1783 char* var16 /* : NativeString */;
1784 long var17 /* : Int */;
1785 val* var18 /* : String */;
1786 val* var19 /* : MClass */;
1787 val* var20 /* : nullable Object */;
1788 long var21 /* : Int */;
1789 val* var22 /* : HashMap[MClass, Int] */;
1790 val* var23 /* : nullable Object */;
1791 long var24 /* : Int */;
1792 var_mclass = p0;
1793 var1 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__mclass_type]))(var_mclass) /* mclass_type on <var_mclass:MClass>*/;
1794 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_compiler__MType__ctype]))(var1) /* ctype on <var1:MClassType>*/;
1795 if (varonce) {
1796 var3 = varonce;
1797 } else {
1798 var4 = "val*";
1799 var5 = 4;
1800 var6 = string__NativeString__to_s_with_length(var4, var5);
1801 var3 = var6;
1802 varonce = var3;
1803 }
1804 var7 = ((short int (*)(val*, val*))(var2->class->vft[COLOR_kernel__Object___61d_61d]))(var2, var3) /* == on <var2:String>*/;
1805 if (var7){
1806 var8 = 0;
1807 var = var8;
1808 goto RET_LABEL;
1809 } else {
1810 var9 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__kind]))(var_mclass) /* kind on <var_mclass:MClass>*/;
1811 var10 = ((val* (*)(val*))(self->class->vft[COLOR_model__Object__extern_kind]))(self) /* extern_kind on <self:SeparateCompiler>*/;
1812 var11 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_kernel__Object___61d_61d]))(var9, var10) /* == on <var9:MClassKind>*/;
1813 if (var11){
1814 var12 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kinds]))(self) /* box_kinds on <self:SeparateCompiler>*/;
1815 var13 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
1816 if (varonce14) {
1817 var15 = varonce14;
1818 } else {
1819 var16 = "Pointer";
1820 var17 = 7;
1821 var18 = string__NativeString__to_s_with_length(var16, var17);
1822 var15 = var18;
1823 varonce14 = var15;
1824 }
1825 var19 = ((val* (*)(val*, val*))(var13->class->vft[COLOR_model__MModule__get_primitive_class]))(var13, var15) /* get_primitive_class on <var13:MModule>*/;
1826 var20 = ((val* (*)(val*, val*))(var12->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var12, var19) /* [] on <var12:HashMap[MClass, Int]>*/;
1827 var21 = ((struct instance_kernel__Int*)var20)->value; /* autounbox from nullable Object to Int */;
1828 var = var21;
1829 goto RET_LABEL;
1830 } else {
1831 var22 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kinds]))(self) /* box_kinds on <self:SeparateCompiler>*/;
1832 var23 = ((val* (*)(val*, val*))(var22->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var22, var_mclass) /* [] on <var22:HashMap[MClass, Int]>*/;
1833 var24 = ((struct instance_kernel__Int*)var23)->value; /* autounbox from nullable Object to Int */;
1834 var = var24;
1835 goto RET_LABEL;
1836 }
1837 }
1838 RET_LABEL:;
1839 return var;
1840 }
1841 /* method separate_compiler#SeparateCompiler#box_kind_of for (self: Object, MClass): Int */
1842 long VIRTUAL_separate_compiler__SeparateCompiler__box_kind_of(val* self, val* p0) {
1843 long var /* : Int */;
1844 long var1 /* : Int */;
1845 var1 = separate_compiler__SeparateCompiler__box_kind_of(self, p0);
1846 var = var1;
1847 RET_LABEL:;
1848 return var;
1849 }
1850 /* method separate_compiler#SeparateCompiler#compile_color_consts for (self: SeparateCompiler, Map[Object, Int]) */
1851 void separate_compiler__SeparateCompiler__compile_color_consts(val* self, val* p0) {
1852 val* var_colors /* var colors: Map[Object, Int] */;
1853 val* var /* : AbstractCompilerVisitor */;
1854 val* var_v /* var v: SeparateCompilerVisitor */;
1855 val* var1 /* : MapIterator[Object, nullable Object] */;
1856 short int var2 /* : Bool */;
1857 val* var3 /* : Object */;
1858 val* var_m /* var m: Object */;
1859 val* var4 /* : nullable Object */;
1860 long var_c /* var c: Int */;
1861 long var5 /* : Int */;
1862 var_colors = p0;
1863 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateCompiler>*/;
1864 var_v = var;
1865 var1 = ((val* (*)(val*))(var_colors->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_colors) /* iterator on <var_colors:Map[Object, Int]>*/;
1866 for(;;) {
1867 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var1) /* is_ok on <var1:MapIterator[Object, nullable Object]>*/;
1868 if(!var2) break;
1869 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__MapIterator__key]))(var1) /* key on <var1:MapIterator[Object, nullable Object]>*/;
1870 var_m = var3;
1871 var4 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__MapIterator__item]))(var1) /* item on <var1:MapIterator[Object, nullable Object]>*/;
1872 var5 = ((struct instance_kernel__Int*)var4)->value; /* autounbox from nullable Object to Int */;
1873 var_c = var5;
1874 ((void (*)(val*, val*, val*, long))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_color_const]))(self, var_v, var_m, var_c) /* compile_color_const on <self:SeparateCompiler>*/;
1875 CONTINUE_label: (void)0;
1876 ((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__MapIterator__next]))(var1) /* next on <var1:MapIterator[Object, nullable Object]>*/;
1877 }
1878 BREAK_label: (void)0;
1879 RET_LABEL:;
1880 }
1881 /* method separate_compiler#SeparateCompiler#compile_color_consts for (self: Object, Map[Object, Int]) */
1882 void VIRTUAL_separate_compiler__SeparateCompiler__compile_color_consts(val* self, val* p0) {
1883 separate_compiler__SeparateCompiler__compile_color_consts(self, p0);
1884 RET_LABEL:;
1885 }
1886 /* method separate_compiler#SeparateCompiler#compile_color_const for (self: SeparateCompiler, SeparateCompilerVisitor, Object, Int) */
1887 void separate_compiler__SeparateCompiler__compile_color_const(val* self, val* p0, val* p1, long p2) {
1888 val* var_v /* var v: SeparateCompilerVisitor */;
1889 val* var_m /* var m: Object */;
1890 long var_color /* var color: Int */;
1891 val* var /* : HashSet[Object] */;
1892 short int var1 /* : Bool */;
1893 short int var2 /* : Bool */;
1894 int cltype;
1895 int idtype;
1896 val* var3 /* : ModelBuilder */;
1897 val* var4 /* : ToolContext */;
1898 val* var5 /* : OptionBool */;
1899 val* var6 /* : nullable Object */;
1900 short int var7 /* : Bool */;
1901 val* var8 /* : String */;
1902 static val* varonce;
1903 val* var9 /* : String */;
1904 char* var10 /* : NativeString */;
1905 long var11 /* : Int */;
1906 val* var12 /* : String */;
1907 val* var13 /* : String */;
1908 static val* varonce14;
1909 val* var15 /* : String */;
1910 char* var16 /* : NativeString */;
1911 long var17 /* : Int */;
1912 val* var18 /* : String */;
1913 val* var19 /* : Array[Object] */;
1914 long var20 /* : Int */;
1915 val* var21 /* : NativeArray[Object] */;
1916 val* var22 /* : Object */;
1917 val* var23 /* : String */;
1918 val* var24 /* : String */;
1919 static val* varonce25;
1920 val* var26 /* : String */;
1921 char* var27 /* : NativeString */;
1922 long var28 /* : Int */;
1923 val* var29 /* : String */;
1924 val* var30 /* : String */;
1925 static val* varonce31;
1926 val* var32 /* : String */;
1927 char* var33 /* : NativeString */;
1928 long var34 /* : Int */;
1929 val* var35 /* : String */;
1930 val* var36 /* : Array[Object] */;
1931 long var37 /* : Int */;
1932 val* var38 /* : NativeArray[Object] */;
1933 val* var39 /* : String */;
1934 static val* varonce40;
1935 val* var41 /* : String */;
1936 char* var42 /* : NativeString */;
1937 long var43 /* : Int */;
1938 val* var44 /* : String */;
1939 val* var45 /* : String */;
1940 static val* varonce46;
1941 val* var47 /* : String */;
1942 char* var48 /* : NativeString */;
1943 long var49 /* : Int */;
1944 val* var50 /* : String */;
1945 static val* varonce51;
1946 val* var52 /* : String */;
1947 char* var53 /* : NativeString */;
1948 long var54 /* : Int */;
1949 val* var55 /* : String */;
1950 val* var56 /* : Array[Object] */;
1951 long var57 /* : Int */;
1952 val* var58 /* : NativeArray[Object] */;
1953 val* var59 /* : Object */;
1954 val* var60 /* : String */;
1955 short int var61 /* : Bool */;
1956 int cltype62;
1957 int idtype63;
1958 val* var64 /* : ModelBuilder */;
1959 val* var65 /* : ToolContext */;
1960 val* var66 /* : OptionBool */;
1961 val* var67 /* : nullable Object */;
1962 short int var68 /* : Bool */;
1963 val* var69 /* : String */;
1964 static val* varonce70;
1965 val* var71 /* : String */;
1966 char* var72 /* : NativeString */;
1967 long var73 /* : Int */;
1968 val* var74 /* : String */;
1969 val* var75 /* : String */;
1970 static val* varonce76;
1971 val* var77 /* : String */;
1972 char* var78 /* : NativeString */;
1973 long var79 /* : Int */;
1974 val* var80 /* : String */;
1975 val* var81 /* : Array[Object] */;
1976 long var82 /* : Int */;
1977 val* var83 /* : NativeArray[Object] */;
1978 val* var84 /* : Object */;
1979 val* var85 /* : String */;
1980 val* var86 /* : String */;
1981 static val* varonce87;
1982 val* var88 /* : String */;
1983 char* var89 /* : NativeString */;
1984 long var90 /* : Int */;
1985 val* var91 /* : String */;
1986 val* var92 /* : String */;
1987 static val* varonce93;
1988 val* var94 /* : String */;
1989 char* var95 /* : NativeString */;
1990 long var96 /* : Int */;
1991 val* var97 /* : String */;
1992 val* var98 /* : Array[Object] */;
1993 long var99 /* : Int */;
1994 val* var100 /* : NativeArray[Object] */;
1995 val* var101 /* : String */;
1996 static val* varonce102;
1997 val* var103 /* : String */;
1998 char* var104 /* : NativeString */;
1999 long var105 /* : Int */;
2000 val* var106 /* : String */;
2001 val* var107 /* : String */;
2002 static val* varonce108;
2003 val* var109 /* : String */;
2004 char* var110 /* : NativeString */;
2005 long var111 /* : Int */;
2006 val* var112 /* : String */;
2007 static val* varonce113;
2008 val* var114 /* : String */;
2009 char* var115 /* : NativeString */;
2010 long var116 /* : Int */;
2011 val* var117 /* : String */;
2012 val* var118 /* : Array[Object] */;
2013 long var119 /* : Int */;
2014 val* var120 /* : NativeArray[Object] */;
2015 val* var121 /* : Object */;
2016 val* var122 /* : String */;
2017 short int var123 /* : Bool */;
2018 int cltype124;
2019 int idtype125;
2020 val* var126 /* : ModelBuilder */;
2021 val* var127 /* : ToolContext */;
2022 val* var128 /* : OptionBool */;
2023 val* var129 /* : nullable Object */;
2024 short int var130 /* : Bool */;
2025 val* var131 /* : String */;
2026 static val* varonce132;
2027 val* var133 /* : String */;
2028 char* var134 /* : NativeString */;
2029 long var135 /* : Int */;
2030 val* var136 /* : String */;
2031 val* var137 /* : String */;
2032 static val* varonce138;
2033 val* var139 /* : String */;
2034 char* var140 /* : NativeString */;
2035 long var141 /* : Int */;
2036 val* var142 /* : String */;
2037 val* var143 /* : Array[Object] */;
2038 long var144 /* : Int */;
2039 val* var145 /* : NativeArray[Object] */;
2040 val* var146 /* : Object */;
2041 val* var147 /* : String */;
2042 val* var148 /* : String */;
2043 static val* varonce149;
2044 val* var150 /* : String */;
2045 char* var151 /* : NativeString */;
2046 long var152 /* : Int */;
2047 val* var153 /* : String */;
2048 val* var154 /* : String */;
2049 static val* varonce155;
2050 val* var156 /* : String */;
2051 char* var157 /* : NativeString */;
2052 long var158 /* : Int */;
2053 val* var159 /* : String */;
2054 val* var160 /* : Array[Object] */;
2055 long var161 /* : Int */;
2056 val* var162 /* : NativeArray[Object] */;
2057 val* var163 /* : String */;
2058 static val* varonce164;
2059 val* var165 /* : String */;
2060 char* var166 /* : NativeString */;
2061 long var167 /* : Int */;
2062 val* var168 /* : String */;
2063 val* var169 /* : String */;
2064 static val* varonce170;
2065 val* var171 /* : String */;
2066 char* var172 /* : NativeString */;
2067 long var173 /* : Int */;
2068 val* var174 /* : String */;
2069 static val* varonce175;
2070 val* var176 /* : String */;
2071 char* var177 /* : NativeString */;
2072 long var178 /* : Int */;
2073 val* var179 /* : String */;
2074 val* var180 /* : Array[Object] */;
2075 long var181 /* : Int */;
2076 val* var182 /* : NativeArray[Object] */;
2077 val* var183 /* : Object */;
2078 val* var184 /* : String */;
2079 val* var185 /* : HashSet[Object] */;
2080 var_v = p0;
2081 var_m = p1;
2082 var_color = p2;
2083 var = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__color_consts_done]))(self) /* color_consts_done on <self:SeparateCompiler>*/;
2084 var1 = ((short int (*)(val*, val*))(var->class->vft[COLOR_abstract_collection__Collection__has]))(var, var_m) /* has on <var:HashSet[Object]>*/;
2085 if (var1){
2086 goto RET_LABEL;
2087 } else {
2088 }
2089 /* <var_m:Object> isa MProperty */
2090 cltype = type_model__MProperty.color;
2091 idtype = type_model__MProperty.id;
2092 if(cltype >= var_m->type->table_size) {
2093 var2 = 0;
2094 } else {
2095 var2 = var_m->type->type_table[cltype] == idtype;
2096 }
2097 if (var2){
2098 var3 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
2099 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var3) /* toolcontext on <var3:ModelBuilder>*/;
2100 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_separate_compiler__ToolContext__opt_inline_coloring_numbers]))(var4) /* opt_inline_coloring_numbers on <var4:ToolContext>*/;
2101 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_opts__Option__value]))(var5) /* value on <var5:OptionBool>*/;
2102 var7 = ((struct instance_kernel__Bool*)var6)->value; /* autounbox from nullable Object to Bool */;
2103 if (var7){
2104 var8 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var_m) /* const_color on <var_m:Object(MProperty)>*/;
2105 if (varonce) {
2106 var9 = varonce;
2107 } else {
2108 var10 = "#define ";
2109 var11 = 8;
2110 var12 = string__NativeString__to_s_with_length(var10, var11);
2111 var9 = var12;
2112 varonce = var9;
2113 }
2114 var13 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var_m) /* const_color on <var_m:Object(MProperty)>*/;
2115 if (varonce14) {
2116 var15 = varonce14;
2117 } else {
2118 var16 = " ";
2119 var17 = 1;
2120 var18 = string__NativeString__to_s_with_length(var16, var17);
2121 var15 = var18;
2122 varonce14 = var15;
2123 }
2124 var19 = NEW_array__Array(&type_array__Arraykernel__Object);
2125 { /* var19 = array_instance Array[Object] */
2126 var20 = 4;
2127 var21 = NEW_array__NativeArray(var20, &type_array__NativeArraykernel__Object);
2128 ((struct instance_array__NativeArray*)var21)->values[0] = (val*) var9;
2129 ((struct instance_array__NativeArray*)var21)->values[1] = (val*) var13;
2130 ((struct instance_array__NativeArray*)var21)->values[2] = (val*) var15;
2131 var22 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
2132 ((struct instance_array__NativeArray*)var21)->values[3] = (val*) var22;
2133 ((void (*)(val*, val*, long))(var19->class->vft[COLOR_array__Array__with_native]))(var19, var21, var20) /* with_native on <var19:Array[Object]>*/;
2134 CHECK_NEW_array__Array(var19);
2135 }
2136 var23 = ((val* (*)(val*))(var19->class->vft[COLOR_string__Object__to_s]))(var19) /* to_s on <var19:Array[Object]>*/;
2137 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var8, var23) /* provide_declaration on <self:SeparateCompiler>*/;
2138 } else {
2139 var24 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var_m) /* const_color on <var_m:Object(MProperty)>*/;
2140 if (varonce25) {
2141 var26 = varonce25;
2142 } else {
2143 var27 = "extern const int ";
2144 var28 = 17;
2145 var29 = string__NativeString__to_s_with_length(var27, var28);
2146 var26 = var29;
2147 varonce25 = var26;
2148 }
2149 var30 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var_m) /* const_color on <var_m:Object(MProperty)>*/;
2150 if (varonce31) {
2151 var32 = varonce31;
2152 } else {
2153 var33 = ";";
2154 var34 = 1;
2155 var35 = string__NativeString__to_s_with_length(var33, var34);
2156 var32 = var35;
2157 varonce31 = var32;
2158 }
2159 var36 = NEW_array__Array(&type_array__Arraykernel__Object);
2160 { /* var36 = array_instance Array[Object] */
2161 var37 = 3;
2162 var38 = NEW_array__NativeArray(var37, &type_array__NativeArraykernel__Object);
2163 ((struct instance_array__NativeArray*)var38)->values[0] = (val*) var26;
2164 ((struct instance_array__NativeArray*)var38)->values[1] = (val*) var30;
2165 ((struct instance_array__NativeArray*)var38)->values[2] = (val*) var32;
2166 ((void (*)(val*, val*, long))(var36->class->vft[COLOR_array__Array__with_native]))(var36, var38, var37) /* with_native on <var36:Array[Object]>*/;
2167 CHECK_NEW_array__Array(var36);
2168 }
2169 var39 = ((val* (*)(val*))(var36->class->vft[COLOR_string__Object__to_s]))(var36) /* to_s on <var36:Array[Object]>*/;
2170 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var24, var39) /* provide_declaration on <self:SeparateCompiler>*/;
2171 if (varonce40) {
2172 var41 = varonce40;
2173 } else {
2174 var42 = "const int ";
2175 var43 = 10;
2176 var44 = string__NativeString__to_s_with_length(var42, var43);
2177 var41 = var44;
2178 varonce40 = var41;
2179 }
2180 var45 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var_m) /* const_color on <var_m:Object(MProperty)>*/;
2181 if (varonce46) {
2182 var47 = varonce46;
2183 } else {
2184 var48 = " = ";
2185 var49 = 3;
2186 var50 = string__NativeString__to_s_with_length(var48, var49);
2187 var47 = var50;
2188 varonce46 = var47;
2189 }
2190 if (varonce51) {
2191 var52 = varonce51;
2192 } else {
2193 var53 = ";";
2194 var54 = 1;
2195 var55 = string__NativeString__to_s_with_length(var53, var54);
2196 var52 = var55;
2197 varonce51 = var52;
2198 }
2199 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
2200 { /* var56 = array_instance Array[Object] */
2201 var57 = 5;
2202 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
2203 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var41;
2204 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var45;
2205 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var47;
2206 var59 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
2207 ((struct instance_array__NativeArray*)var58)->values[3] = (val*) var59;
2208 ((struct instance_array__NativeArray*)var58)->values[4] = (val*) var52;
2209 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
2210 CHECK_NEW_array__Array(var56);
2211 }
2212 var60 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
2213 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var60) /* add on <var_v:SeparateCompilerVisitor>*/;
2214 }
2215 } else {
2216 /* <var_m:Object> isa MPropDef */
2217 cltype62 = type_model__MPropDef.color;
2218 idtype63 = type_model__MPropDef.id;
2219 if(cltype62 >= var_m->type->table_size) {
2220 var61 = 0;
2221 } else {
2222 var61 = var_m->type->type_table[cltype62] == idtype63;
2223 }
2224 if (var61){
2225 var64 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
2226 var65 = ((val* (*)(val*))(var64->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var64) /* toolcontext on <var64:ModelBuilder>*/;
2227 var66 = ((val* (*)(val*))(var65->class->vft[COLOR_separate_compiler__ToolContext__opt_inline_coloring_numbers]))(var65) /* opt_inline_coloring_numbers on <var65:ToolContext>*/;
2228 var67 = ((val* (*)(val*))(var66->class->vft[COLOR_opts__Option__value]))(var66) /* value on <var66:OptionBool>*/;
2229 var68 = ((struct instance_kernel__Bool*)var67)->value; /* autounbox from nullable Object to Bool */;
2230 if (var68){
2231 var69 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MPropDef__const_color]))(var_m) /* const_color on <var_m:Object(MPropDef)>*/;
2232 if (varonce70) {
2233 var71 = varonce70;
2234 } else {
2235 var72 = "#define ";
2236 var73 = 8;
2237 var74 = string__NativeString__to_s_with_length(var72, var73);
2238 var71 = var74;
2239 varonce70 = var71;
2240 }
2241 var75 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MPropDef__const_color]))(var_m) /* const_color on <var_m:Object(MPropDef)>*/;
2242 if (varonce76) {
2243 var77 = varonce76;
2244 } else {
2245 var78 = " ";
2246 var79 = 1;
2247 var80 = string__NativeString__to_s_with_length(var78, var79);
2248 var77 = var80;
2249 varonce76 = var77;
2250 }
2251 var81 = NEW_array__Array(&type_array__Arraykernel__Object);
2252 { /* var81 = array_instance Array[Object] */
2253 var82 = 4;
2254 var83 = NEW_array__NativeArray(var82, &type_array__NativeArraykernel__Object);
2255 ((struct instance_array__NativeArray*)var83)->values[0] = (val*) var71;
2256 ((struct instance_array__NativeArray*)var83)->values[1] = (val*) var75;
2257 ((struct instance_array__NativeArray*)var83)->values[2] = (val*) var77;
2258 var84 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
2259 ((struct instance_array__NativeArray*)var83)->values[3] = (val*) var84;
2260 ((void (*)(val*, val*, long))(var81->class->vft[COLOR_array__Array__with_native]))(var81, var83, var82) /* with_native on <var81:Array[Object]>*/;
2261 CHECK_NEW_array__Array(var81);
2262 }
2263 var85 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__to_s]))(var81) /* to_s on <var81:Array[Object]>*/;
2264 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var69, var85) /* provide_declaration on <self:SeparateCompiler>*/;
2265 } else {
2266 var86 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MPropDef__const_color]))(var_m) /* const_color on <var_m:Object(MPropDef)>*/;
2267 if (varonce87) {
2268 var88 = varonce87;
2269 } else {
2270 var89 = "extern const int ";
2271 var90 = 17;
2272 var91 = string__NativeString__to_s_with_length(var89, var90);
2273 var88 = var91;
2274 varonce87 = var88;
2275 }
2276 var92 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MPropDef__const_color]))(var_m) /* const_color on <var_m:Object(MPropDef)>*/;
2277 if (varonce93) {
2278 var94 = varonce93;
2279 } else {
2280 var95 = ";";
2281 var96 = 1;
2282 var97 = string__NativeString__to_s_with_length(var95, var96);
2283 var94 = var97;
2284 varonce93 = var94;
2285 }
2286 var98 = NEW_array__Array(&type_array__Arraykernel__Object);
2287 { /* var98 = array_instance Array[Object] */
2288 var99 = 3;
2289 var100 = NEW_array__NativeArray(var99, &type_array__NativeArraykernel__Object);
2290 ((struct instance_array__NativeArray*)var100)->values[0] = (val*) var88;
2291 ((struct instance_array__NativeArray*)var100)->values[1] = (val*) var92;
2292 ((struct instance_array__NativeArray*)var100)->values[2] = (val*) var94;
2293 ((void (*)(val*, val*, long))(var98->class->vft[COLOR_array__Array__with_native]))(var98, var100, var99) /* with_native on <var98:Array[Object]>*/;
2294 CHECK_NEW_array__Array(var98);
2295 }
2296 var101 = ((val* (*)(val*))(var98->class->vft[COLOR_string__Object__to_s]))(var98) /* to_s on <var98:Array[Object]>*/;
2297 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var86, var101) /* provide_declaration on <self:SeparateCompiler>*/;
2298 if (varonce102) {
2299 var103 = varonce102;
2300 } else {
2301 var104 = "const int ";
2302 var105 = 10;
2303 var106 = string__NativeString__to_s_with_length(var104, var105);
2304 var103 = var106;
2305 varonce102 = var103;
2306 }
2307 var107 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MPropDef__const_color]))(var_m) /* const_color on <var_m:Object(MPropDef)>*/;
2308 if (varonce108) {
2309 var109 = varonce108;
2310 } else {
2311 var110 = " = ";
2312 var111 = 3;
2313 var112 = string__NativeString__to_s_with_length(var110, var111);
2314 var109 = var112;
2315 varonce108 = var109;
2316 }
2317 if (varonce113) {
2318 var114 = varonce113;
2319 } else {
2320 var115 = ";";
2321 var116 = 1;
2322 var117 = string__NativeString__to_s_with_length(var115, var116);
2323 var114 = var117;
2324 varonce113 = var114;
2325 }
2326 var118 = NEW_array__Array(&type_array__Arraykernel__Object);
2327 { /* var118 = array_instance Array[Object] */
2328 var119 = 5;
2329 var120 = NEW_array__NativeArray(var119, &type_array__NativeArraykernel__Object);
2330 ((struct instance_array__NativeArray*)var120)->values[0] = (val*) var103;
2331 ((struct instance_array__NativeArray*)var120)->values[1] = (val*) var107;
2332 ((struct instance_array__NativeArray*)var120)->values[2] = (val*) var109;
2333 var121 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
2334 ((struct instance_array__NativeArray*)var120)->values[3] = (val*) var121;
2335 ((struct instance_array__NativeArray*)var120)->values[4] = (val*) var114;
2336 ((void (*)(val*, val*, long))(var118->class->vft[COLOR_array__Array__with_native]))(var118, var120, var119) /* with_native on <var118:Array[Object]>*/;
2337 CHECK_NEW_array__Array(var118);
2338 }
2339 var122 = ((val* (*)(val*))(var118->class->vft[COLOR_string__Object__to_s]))(var118) /* to_s on <var118:Array[Object]>*/;
2340 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var122) /* add on <var_v:SeparateCompilerVisitor>*/;
2341 }
2342 } else {
2343 /* <var_m:Object> isa MType */
2344 cltype124 = type_model__MType.color;
2345 idtype125 = type_model__MType.id;
2346 if(cltype124 >= var_m->type->table_size) {
2347 var123 = 0;
2348 } else {
2349 var123 = var_m->type->type_table[cltype124] == idtype125;
2350 }
2351 if (var123){
2352 var126 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
2353 var127 = ((val* (*)(val*))(var126->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var126) /* toolcontext on <var126:ModelBuilder>*/;
2354 var128 = ((val* (*)(val*))(var127->class->vft[COLOR_separate_compiler__ToolContext__opt_inline_coloring_numbers]))(var127) /* opt_inline_coloring_numbers on <var127:ToolContext>*/;
2355 var129 = ((val* (*)(val*))(var128->class->vft[COLOR_opts__Option__value]))(var128) /* value on <var128:OptionBool>*/;
2356 var130 = ((struct instance_kernel__Bool*)var129)->value; /* autounbox from nullable Object to Bool */;
2357 if (var130){
2358 var131 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MType__const_color]))(var_m) /* const_color on <var_m:Object(MType)>*/;
2359 if (varonce132) {
2360 var133 = varonce132;
2361 } else {
2362 var134 = "#define ";
2363 var135 = 8;
2364 var136 = string__NativeString__to_s_with_length(var134, var135);
2365 var133 = var136;
2366 varonce132 = var133;
2367 }
2368 var137 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MType__const_color]))(var_m) /* const_color on <var_m:Object(MType)>*/;
2369 if (varonce138) {
2370 var139 = varonce138;
2371 } else {
2372 var140 = " ";
2373 var141 = 1;
2374 var142 = string__NativeString__to_s_with_length(var140, var141);
2375 var139 = var142;
2376 varonce138 = var139;
2377 }
2378 var143 = NEW_array__Array(&type_array__Arraykernel__Object);
2379 { /* var143 = array_instance Array[Object] */
2380 var144 = 4;
2381 var145 = NEW_array__NativeArray(var144, &type_array__NativeArraykernel__Object);
2382 ((struct instance_array__NativeArray*)var145)->values[0] = (val*) var133;
2383 ((struct instance_array__NativeArray*)var145)->values[1] = (val*) var137;
2384 ((struct instance_array__NativeArray*)var145)->values[2] = (val*) var139;
2385 var146 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
2386 ((struct instance_array__NativeArray*)var145)->values[3] = (val*) var146;
2387 ((void (*)(val*, val*, long))(var143->class->vft[COLOR_array__Array__with_native]))(var143, var145, var144) /* with_native on <var143:Array[Object]>*/;
2388 CHECK_NEW_array__Array(var143);
2389 }
2390 var147 = ((val* (*)(val*))(var143->class->vft[COLOR_string__Object__to_s]))(var143) /* to_s on <var143:Array[Object]>*/;
2391 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var131, var147) /* provide_declaration on <self:SeparateCompiler>*/;
2392 } else {
2393 var148 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MType__const_color]))(var_m) /* const_color on <var_m:Object(MType)>*/;
2394 if (varonce149) {
2395 var150 = varonce149;
2396 } else {
2397 var151 = "extern const int ";
2398 var152 = 17;
2399 var153 = string__NativeString__to_s_with_length(var151, var152);
2400 var150 = var153;
2401 varonce149 = var150;
2402 }
2403 var154 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MType__const_color]))(var_m) /* const_color on <var_m:Object(MType)>*/;
2404 if (varonce155) {
2405 var156 = varonce155;
2406 } else {
2407 var157 = ";";
2408 var158 = 1;
2409 var159 = string__NativeString__to_s_with_length(var157, var158);
2410 var156 = var159;
2411 varonce155 = var156;
2412 }
2413 var160 = NEW_array__Array(&type_array__Arraykernel__Object);
2414 { /* var160 = array_instance Array[Object] */
2415 var161 = 3;
2416 var162 = NEW_array__NativeArray(var161, &type_array__NativeArraykernel__Object);
2417 ((struct instance_array__NativeArray*)var162)->values[0] = (val*) var150;
2418 ((struct instance_array__NativeArray*)var162)->values[1] = (val*) var154;
2419 ((struct instance_array__NativeArray*)var162)->values[2] = (val*) var156;
2420 ((void (*)(val*, val*, long))(var160->class->vft[COLOR_array__Array__with_native]))(var160, var162, var161) /* with_native on <var160:Array[Object]>*/;
2421 CHECK_NEW_array__Array(var160);
2422 }
2423 var163 = ((val* (*)(val*))(var160->class->vft[COLOR_string__Object__to_s]))(var160) /* to_s on <var160:Array[Object]>*/;
2424 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var148, var163) /* provide_declaration on <self:SeparateCompiler>*/;
2425 if (varonce164) {
2426 var165 = varonce164;
2427 } else {
2428 var166 = "const int ";
2429 var167 = 10;
2430 var168 = string__NativeString__to_s_with_length(var166, var167);
2431 var165 = var168;
2432 varonce164 = var165;
2433 }
2434 var169 = ((val* (*)(val*))(var_m->class->vft[COLOR_separate_compiler__MType__const_color]))(var_m) /* const_color on <var_m:Object(MType)>*/;
2435 if (varonce170) {
2436 var171 = varonce170;
2437 } else {
2438 var172 = " = ";
2439 var173 = 3;
2440 var174 = string__NativeString__to_s_with_length(var172, var173);
2441 var171 = var174;
2442 varonce170 = var171;
2443 }
2444 if (varonce175) {
2445 var176 = varonce175;
2446 } else {
2447 var177 = ";";
2448 var178 = 1;
2449 var179 = string__NativeString__to_s_with_length(var177, var178);
2450 var176 = var179;
2451 varonce175 = var176;
2452 }
2453 var180 = NEW_array__Array(&type_array__Arraykernel__Object);
2454 { /* var180 = array_instance Array[Object] */
2455 var181 = 5;
2456 var182 = NEW_array__NativeArray(var181, &type_array__NativeArraykernel__Object);
2457 ((struct instance_array__NativeArray*)var182)->values[0] = (val*) var165;
2458 ((struct instance_array__NativeArray*)var182)->values[1] = (val*) var169;
2459 ((struct instance_array__NativeArray*)var182)->values[2] = (val*) var171;
2460 var183 = BOX_kernel__Int(var_color); /* autobox from Int to Object */
2461 ((struct instance_array__NativeArray*)var182)->values[3] = (val*) var183;
2462 ((struct instance_array__NativeArray*)var182)->values[4] = (val*) var176;
2463 ((void (*)(val*, val*, long))(var180->class->vft[COLOR_array__Array__with_native]))(var180, var182, var181) /* with_native on <var180:Array[Object]>*/;
2464 CHECK_NEW_array__Array(var180);
2465 }
2466 var184 = ((val* (*)(val*))(var180->class->vft[COLOR_string__Object__to_s]))(var180) /* to_s on <var180:Array[Object]>*/;
2467 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var184) /* add on <var_v:SeparateCompilerVisitor>*/;
2468 }
2469 } else {
2470 }
2471 }
2472 }
2473 var185 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__color_consts_done]))(self) /* color_consts_done on <self:SeparateCompiler>*/;
2474 ((void (*)(val*, val*))(var185->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var185, var_m) /* add on <var185:HashSet[Object]>*/;
2475 RET_LABEL:;
2476 }
2477 /* method separate_compiler#SeparateCompiler#compile_color_const for (self: Object, SeparateCompilerVisitor, Object, Int) */
2478 void VIRTUAL_separate_compiler__SeparateCompiler__compile_color_const(val* self, val* p0, val* p1, long p2) {
2479 separate_compiler__SeparateCompiler__compile_color_const(self, p0, p1, p2);
2480 RET_LABEL:;
2481 }
2482 /* method separate_compiler#SeparateCompiler#color_consts_done for (self: SeparateCompiler): HashSet[Object] */
2483 val* separate_compiler__SeparateCompiler__color_consts_done(val* self) {
2484 val* var /* : HashSet[Object] */;
2485 val* var1 /* : HashSet[Object] */;
2486 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dcolor_consts_done].val; /* @color_consts_done on <self:SeparateCompiler> */
2487 if (var1 == NULL) {
2488 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @color_consts_done");
2489 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 230);
2490 exit(1);
2491 }
2492 var = var1;
2493 RET_LABEL:;
2494 return var;
2495 }
2496 /* method separate_compiler#SeparateCompiler#color_consts_done for (self: Object): HashSet[Object] */
2497 val* VIRTUAL_separate_compiler__SeparateCompiler__color_consts_done(val* self) {
2498 val* var /* : HashSet[Object] */;
2499 val* var1 /* : HashSet[Object] */;
2500 var1 = separate_compiler__SeparateCompiler__color_consts_done(self);
2501 var = var1;
2502 RET_LABEL:;
2503 return var;
2504 }
2505 /* method separate_compiler#SeparateCompiler#color_consts_done= for (self: SeparateCompiler, HashSet[Object]) */
2506 void separate_compiler__SeparateCompiler__color_consts_done_61d(val* self, val* p0) {
2507 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dcolor_consts_done].val = p0; /* @color_consts_done on <self:SeparateCompiler> */
2508 RET_LABEL:;
2509 }
2510 /* method separate_compiler#SeparateCompiler#color_consts_done= for (self: Object, HashSet[Object]) */
2511 void VIRTUAL_separate_compiler__SeparateCompiler__color_consts_done_61d(val* self, val* p0) {
2512 separate_compiler__SeparateCompiler__color_consts_done_61d(self, p0);
2513 RET_LABEL:;
2514 }
2515 /* method separate_compiler#SeparateCompiler#do_property_coloring for (self: SeparateCompiler) */
2516 void separate_compiler__SeparateCompiler__do_property_coloring(val* self) {
2517 val* var /* : HashSet[MClass] */;
2518 val* var1 /* : ModelBuilder */;
2519 val* var2 /* : Model */;
2520 val* var3 /* : Array[MClass] */;
2521 val* var_mclasses /* var mclasses: HashSet[MClass] */;
2522 val* var4 /* : MClassColorer */;
2523 val* var5 /* : MModule */;
2524 val* var_class_layout_builder /* var class_layout_builder: MClassColorer */;
2525 val* var6 /* : Layout[Object] */;
2526 val* var7 /* : MPropertyColorer[PropertyLayoutElement] */;
2527 val* var8 /* : MModule */;
2528 val* var_method_layout_builder /* var method_layout_builder: PropertyLayoutBuilder[PropertyLayoutElement] */;
2529 val* var9 /* : MPropertyColorer[MAttribute] */;
2530 val* var10 /* : MModule */;
2531 val* var_attribute_layout_builder /* var attribute_layout_builder: PropertyLayoutBuilder[MAttribute] */;
2532 val* var11 /* : HashMap[MClass, Set[PropertyLayoutElement]] */;
2533 val* var_mmethods /* var mmethods: HashMap[MClass, Set[PropertyLayoutElement]] */;
2534 val* var12 /* : HashMap[MClass, Set[MAttribute]] */;
2535 val* var_mattributes /* var mattributes: HashMap[MClass, Set[MAttribute]] */;
2536 val* var13 /* : Iterator[nullable Object] */;
2537 short int var14 /* : Bool */;
2538 val* var15 /* : nullable Object */;
2539 val* var_mclass /* var mclass: MClass */;
2540 val* var16 /* : HashSet[PropertyLayoutElement] */;
2541 val* var17 /* : HashSet[MAttribute] */;
2542 val* var18 /* : MModule */;
2543 val* var19 /* : Set[MProperty] */;
2544 val* var20 /* : Iterator[nullable Object] */;
2545 short int var21 /* : Bool */;
2546 val* var22 /* : nullable Object */;
2547 val* var_mprop /* var mprop: MProperty */;
2548 short int var23 /* : Bool */;
2549 int cltype;
2550 int idtype;
2551 val* var24 /* : nullable Object */;
2552 short int var25 /* : Bool */;
2553 int cltype26;
2554 int idtype27;
2555 val* var28 /* : nullable Object */;
2556 val* var30 /* : RapidTypeAnalysis */;
2557 val* var31 /* : HashSet[MMethodDef] */;
2558 val* var_super_calls /* var super_calls: HashSet[MMethodDef] */;
2559 val* var32 /* : Iterator[nullable Object] */;
2560 short int var33 /* : Bool */;
2561 val* var34 /* : nullable Object */;
2562 val* var_mmethoddef /* var mmethoddef: MMethodDef */;
2563 val* var35 /* : MClassDef */;
2564 val* var36 /* : MClass */;
2565 val* var_mclass37 /* var mclass: MClass */;
2566 val* var38 /* : nullable Object */;
2567 val* var39 /* : MModule */;
2568 val* var40 /* : POSetElement[MClass] */;
2569 val* var41 /* : Collection[Object] */;
2570 val* var42 /* : Iterator[nullable Object] */;
2571 short int var43 /* : Bool */;
2572 val* var44 /* : nullable Object */;
2573 val* var_descendant /* var descendant: MClass */;
2574 val* var45 /* : nullable Object */;
2575 val* var48 /* : Layout[PropertyLayoutElement] */;
2576 val* var49 /* : Map[MClass, Array[nullable MPropDef]] */;
2577 val* var50 /* : nullable Layout[PropertyLayoutElement] */;
2578 val* var51 /* : Map[Object, Int] */;
2579 val* var52 /* : MModule */;
2580 val* var53 /* : POSetElement[MModule] */;
2581 val* var54 /* : Collection[Object] */;
2582 val* var55 /* : Iterator[nullable Object] */;
2583 short int var56 /* : Bool */;
2584 val* var57 /* : nullable Object */;
2585 val* var_mmodule /* var mmodule: MModule */;
2586 val* var58 /* : Array[MClassDef] */;
2587 val* var59 /* : Iterator[nullable Object] */;
2588 short int var60 /* : Bool */;
2589 val* var61 /* : nullable Object */;
2590 val* var_mclassdef /* var mclassdef: MClassDef */;
2591 val* var62 /* : Array[MPropDef] */;
2592 val* var63 /* : Iterator[nullable Object] */;
2593 short int var64 /* : Bool */;
2594 val* var65 /* : nullable Object */;
2595 val* var_mpropdef /* var mpropdef: MPropDef */;
2596 short int var66 /* : Bool */;
2597 val* var67 /* : AbstractCompilerVisitor */;
2598 long var68 /* : Int */;
2599 long var69 /* : Int */;
2600 long var71 /* : Int */;
2601 val* var75 /* : Layout[PropertyLayoutElement] */;
2602 val* var76 /* : Map[MClass, Array[nullable MPropDef]] */;
2603 val* var77 /* : nullable Layout[MAttribute] */;
2604 val* var78 /* : Map[Object, Int] */;
2605 var = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
2606 var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
2607 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(var1) /* model on <var1:ModelBuilder>*/;
2608 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__Model__mclasses]))(var2) /* mclasses on <var2:Model>*/;
2609 ((void (*)(val*, val*))(var->class->vft[COLOR_hash_collection__HashSet__from]))(var, var3) /* from on <var:HashSet[MClass]>*/;
2610 CHECK_NEW_hash_collection__HashSet(var);
2611 var_mclasses = var;
2612 var4 = NEW_layout_builders__MClassColorer(&type_layout_builders__MClassColorer);
2613 var5 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
2614 ((void (*)(val*, val*))(var4->class->vft[COLOR_layout_builders__MClassColorer__init]))(var4, var5) /* init on <var4:MClassColorer>*/;
2615 CHECK_NEW_layout_builders__MClassColorer(var4);
2616 var_class_layout_builder = var4;
2617 var6 = ((val* (*)(val*, val*))(var_class_layout_builder->class->vft[COLOR_layout_builders__TypingLayoutBuilder__build_layout]))(var_class_layout_builder, var_mclasses) /* build_layout on <var_class_layout_builder:MClassColorer>*/;
2618 var6;
2619 var7 = NEW_layout_builders__MPropertyColorer(&type_layout_builders__MPropertyColorerlayout_builders__PropertyLayoutElement);
2620 var8 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
2621 ((void (*)(val*, val*, val*))(var7->class->vft[COLOR_layout_builders__MPropertyColorer__init]))(var7, var8, var_class_layout_builder) /* init on <var7:MPropertyColorer[PropertyLayoutElement]>*/;
2622 CHECK_NEW_layout_builders__MPropertyColorer(var7);
2623 var_method_layout_builder = var7;
2624 var9 = NEW_layout_builders__MPropertyColorer(&type_layout_builders__MPropertyColorermodel__MAttribute);
2625 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
2626 ((void (*)(val*, val*, val*))(var9->class->vft[COLOR_layout_builders__MPropertyColorer__init]))(var9, var10, var_class_layout_builder) /* init on <var9:MPropertyColorer[MAttribute]>*/;
2627 CHECK_NEW_layout_builders__MPropertyColorer(var9);
2628 var_attribute_layout_builder = var9;
2629 var11 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setlayout_builders__PropertyLayoutElement);
2630 ((void (*)(val*))(var11->class->vft[COLOR_hash_collection__HashMap__init]))(var11) /* init on <var11:HashMap[MClass, Set[PropertyLayoutElement]]>*/;
2631 CHECK_NEW_hash_collection__HashMap(var11);
2632 var_mmethods = var11;
2633 var12 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setmodel__MAttribute);
2634 ((void (*)(val*))(var12->class->vft[COLOR_hash_collection__HashMap__init]))(var12) /* init on <var12:HashMap[MClass, Set[MAttribute]]>*/;
2635 CHECK_NEW_hash_collection__HashMap(var12);
2636 var_mattributes = var12;
2637 var13 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:HashSet[MClass]>*/;
2638 for(;;) {
2639 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
2640 if(!var14) break;
2641 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
2642 var_mclass = var15;
2643 var16 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetlayout_builders__PropertyLayoutElement);
2644 ((void (*)(val*))(var16->class->vft[COLOR_hash_collection__HashSet__init]))(var16) /* init on <var16:HashSet[PropertyLayoutElement]>*/;
2645 CHECK_NEW_hash_collection__HashSet(var16);
2646 ((void (*)(val*, val*, val*))(var_mmethods->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_mmethods, var_mclass, var16) /* []= on <var_mmethods:HashMap[MClass, Set[PropertyLayoutElement]]>*/;
2647 var17 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MAttribute);
2648 ((void (*)(val*))(var17->class->vft[COLOR_hash_collection__HashSet__init]))(var17) /* init on <var17:HashSet[MAttribute]>*/;
2649 CHECK_NEW_hash_collection__HashSet(var17);
2650 ((void (*)(val*, val*, val*))(var_mattributes->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_mattributes, var_mclass, var17) /* []= on <var_mattributes:HashMap[MClass, Set[MAttribute]]>*/;
2651 var18 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
2652 var19 = ((val* (*)(val*, val*))(var18->class->vft[COLOR_abstract_compiler__MModule__properties]))(var18, var_mclass) /* properties on <var18:MModule>*/;
2653 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_abstract_collection__Collection__iterator]))(var19) /* iterator on <var19:Set[MProperty]>*/;
2654 for(;;) {
2655 var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
2656 if(!var21) break;
2657 var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
2658 var_mprop = var22;
2659 /* <var_mprop:MProperty> isa MMethod */
2660 cltype = type_model__MMethod.color;
2661 idtype = type_model__MMethod.id;
2662 if(cltype >= var_mprop->type->table_size) {
2663 var23 = 0;
2664 } else {
2665 var23 = var_mprop->type->type_table[cltype] == idtype;
2666 }
2667 if (var23){
2668 var24 = ((val* (*)(val*, val*))(var_mmethods->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_mmethods, var_mclass) /* [] on <var_mmethods:HashMap[MClass, Set[PropertyLayoutElement]]>*/;
2669 ((void (*)(val*, val*))(var24->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var24, var_mprop) /* add on <var24:nullable Object(Set[PropertyLayoutElement])>*/;
2670 } else {
2671 /* <var_mprop:MProperty> isa MAttribute */
2672 cltype26 = type_model__MAttribute.color;
2673 idtype27 = type_model__MAttribute.id;
2674 if(cltype26 >= var_mprop->type->table_size) {
2675 var25 = 0;
2676 } else {
2677 var25 = var_mprop->type->type_table[cltype26] == idtype27;
2678 }
2679 if (var25){
2680 var28 = ((val* (*)(val*, val*))(var_mattributes->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_mattributes, var_mclass) /* [] on <var_mattributes:HashMap[MClass, Set[MAttribute]]>*/;
2681 ((void (*)(val*, val*))(var28->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var28, var_mprop) /* add on <var28:nullable Object(Set[MAttribute])>*/;
2682 } else {
2683 }
2684 }
2685 CONTINUE_label: (void)0;
2686 ((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
2687 }
2688 BREAK_label: (void)0;
2689 CONTINUE_label29: (void)0;
2690 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
2691 }
2692 BREAK_label29: (void)0;
2693 var30 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:SeparateCompiler>*/;
2694 var31 = ((val* (*)(val*))(var30->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_super_sends]))(var30) /* live_super_sends on <var30:RapidTypeAnalysis>*/;
2695 var_super_calls = var31;
2696 var32 = ((val* (*)(val*))(var_super_calls->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_super_calls) /* iterator on <var_super_calls:HashSet[MMethodDef]>*/;
2697 for(;;) {
2698 var33 = ((short int (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var32) /* is_ok on <var32:Iterator[nullable Object]>*/;
2699 if(!var33) break;
2700 var34 = ((val* (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__item]))(var32) /* item on <var32:Iterator[nullable Object]>*/;
2701 var_mmethoddef = var34;
2702 var35 = ((val* (*)(val*))(var_mmethoddef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mmethoddef) /* mclassdef on <var_mmethoddef:MMethodDef>*/;
2703 var36 = ((val* (*)(val*))(var35->class->vft[COLOR_model__MClassDef__mclass]))(var35) /* mclass on <var35:MClassDef>*/;
2704 var_mclass37 = var36;
2705 var38 = ((val* (*)(val*, val*))(var_mmethods->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_mmethods, var_mclass37) /* [] on <var_mmethods:HashMap[MClass, Set[PropertyLayoutElement]]>*/;
2706 ((void (*)(val*, val*))(var38->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var38, var_mmethoddef) /* add on <var38:nullable Object(Set[PropertyLayoutElement])>*/;
2707 var39 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
2708 var40 = ((val* (*)(val*, val*))(var_mclass37->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass37, var39) /* in_hierarchy on <var_mclass37:MClass>*/;
2709 var41 = ((val* (*)(val*))(var40->class->vft[COLOR_poset__POSetElement__smallers]))(var40) /* smallers on <var40:POSetElement[MClass]>*/;
2710 var42 = ((val* (*)(val*))(var41->class->vft[COLOR_abstract_collection__Collection__iterator]))(var41) /* iterator on <var41:Collection[Object](Collection[MClass])>*/;
2711 for(;;) {
2712 var43 = ((short int (*)(val*))(var42->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var42) /* is_ok on <var42:Iterator[nullable Object]>*/;
2713 if(!var43) break;
2714 var44 = ((val* (*)(val*))(var42->class->vft[COLOR_abstract_collection__Iterator__item]))(var42) /* item on <var42:Iterator[nullable Object]>*/;
2715 var_descendant = var44;
2716 var45 = ((val* (*)(val*, val*))(var_mmethods->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_mmethods, var_descendant) /* [] on <var_mmethods:HashMap[MClass, Set[PropertyLayoutElement]]>*/;
2717 ((void (*)(val*, val*))(var45->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var45, var_mmethoddef) /* add on <var45:nullable Object(Set[PropertyLayoutElement])>*/;
2718 CONTINUE_label46: (void)0;
2719 ((void (*)(val*))(var42->class->vft[COLOR_abstract_collection__Iterator__next]))(var42) /* next on <var42:Iterator[nullable Object]>*/;
2720 }
2721 BREAK_label46: (void)0;
2722 CONTINUE_label47: (void)0;
2723 ((void (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__next]))(var32) /* next on <var32:Iterator[nullable Object]>*/;
2724 }
2725 BREAK_label47: (void)0;
2726 var48 = ((val* (*)(val*, val*))(var_method_layout_builder->class->vft[COLOR_layout_builders__PropertyLayoutBuilder__build_layout]))(var_method_layout_builder, var_mmethods) /* build_layout on <var_method_layout_builder:PropertyLayoutBuilder[PropertyLayoutElement](MPropertyColorer[PropertyLayoutElement])>*/;
2727 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_layout_61d]))(self, var48) /* method_layout= on <self:SeparateCompiler>*/;
2728 var49 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__build_method_tables]))(self, var_mclasses, var_super_calls) /* build_method_tables on <self:SeparateCompiler>*/;
2729 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables_61d]))(self, var49) /* method_tables= on <self:SeparateCompiler>*/;
2730 var50 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_layout]))(self) /* method_layout on <self:SeparateCompiler>*/;
2731 if (var50 == NULL) {
2732 fprintf(stderr, "Runtime error: %s", "Reciever is null");
2733 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 285);
2734 exit(1);
2735 } else {
2736 var51 = ((val* (*)(val*))(var50->class->vft[COLOR_layout_builders__Layout__pos]))(var50) /* pos on <var50:nullable Layout[PropertyLayoutElement]>*/;
2737 }
2738 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_color_consts]))(self, var51) /* compile_color_consts on <self:SeparateCompiler>*/;
2739 var52 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
2740 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_model_base__MModule__in_importation]))(var52) /* in_importation on <var52:MModule>*/;
2741 var54 = ((val* (*)(val*))(var53->class->vft[COLOR_poset__POSetElement__greaters]))(var53) /* greaters on <var53:POSetElement[MModule]>*/;
2742 var55 = ((val* (*)(val*))(var54->class->vft[COLOR_abstract_collection__Collection__iterator]))(var54) /* iterator on <var54:Collection[Object](Collection[MModule])>*/;
2743 for(;;) {
2744 var56 = ((short int (*)(val*))(var55->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var55) /* is_ok on <var55:Iterator[nullable Object]>*/;
2745 if(!var56) break;
2746 var57 = ((val* (*)(val*))(var55->class->vft[COLOR_abstract_collection__Iterator__item]))(var55) /* item on <var55:Iterator[nullable Object]>*/;
2747 var_mmodule = var57;
2748 var58 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_model__MModule__mclassdefs]))(var_mmodule) /* mclassdefs on <var_mmodule:MModule>*/;
2749 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__Collection__iterator]))(var58) /* iterator on <var58:Array[MClassDef]>*/;
2750 for(;;) {
2751 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var59) /* is_ok on <var59:Iterator[nullable Object]>*/;
2752 if(!var60) break;
2753 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__item]))(var59) /* item on <var59:Iterator[nullable Object]>*/;
2754 var_mclassdef = var61;
2755 var62 = ((val* (*)(val*))(var_mclassdef->class->vft[COLOR_model__MClassDef__mpropdefs]))(var_mclassdef) /* mpropdefs on <var_mclassdef:MClassDef>*/;
2756 var63 = ((val* (*)(val*))(var62->class->vft[COLOR_abstract_collection__Collection__iterator]))(var62) /* iterator on <var62:Array[MPropDef]>*/;
2757 for(;;) {
2758 var64 = ((short int (*)(val*))(var63->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var63) /* is_ok on <var63:Iterator[nullable Object]>*/;
2759 if(!var64) break;
2760 var65 = ((val* (*)(val*))(var63->class->vft[COLOR_abstract_collection__Iterator__item]))(var63) /* item on <var63:Iterator[nullable Object]>*/;
2761 var_mpropdef = var65;
2762 var66 = ((short int (*)(val*))(var_mpropdef->class->vft[COLOR_typing__MPropDef__has_supercall]))(var_mpropdef) /* has_supercall on <var_mpropdef:MPropDef>*/;
2763 if (var66){
2764 var67 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateCompiler>*/;
2765 var68 = 1;
2766 { /* Inline kernel#Int#unary - (var68) */
2767 var71 = -var68;
2768 var69 = var71;
2769 goto RET_LABEL70;
2770 RET_LABEL70:(void)0;
2771 }
2772 ((void (*)(val*, val*, val*, long))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_color_const]))(self, var67, var_mpropdef, var69) /* compile_color_const on <self:SeparateCompiler>*/;
2773 } else {
2774 }
2775 CONTINUE_label72: (void)0;
2776 ((void (*)(val*))(var63->class->vft[COLOR_abstract_collection__Iterator__next]))(var63) /* next on <var63:Iterator[nullable Object]>*/;
2777 }
2778 BREAK_label72: (void)0;
2779 CONTINUE_label73: (void)0;
2780 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__next]))(var59) /* next on <var59:Iterator[nullable Object]>*/;
2781 }
2782 BREAK_label73: (void)0;
2783 CONTINUE_label74: (void)0;
2784 ((void (*)(val*))(var55->class->vft[COLOR_abstract_collection__Iterator__next]))(var55) /* next on <var55:Iterator[nullable Object]>*/;
2785 }
2786 BREAK_label74: (void)0;
2787 var75 = ((val* (*)(val*, val*))(var_attribute_layout_builder->class->vft[COLOR_layout_builders__PropertyLayoutBuilder__build_layout]))(var_attribute_layout_builder, var_mattributes) /* build_layout on <var_attribute_layout_builder:PropertyLayoutBuilder[MAttribute](MPropertyColorer[MAttribute])>*/;
2788 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_layout_61d]))(self, var75) /* attr_layout= on <self:SeparateCompiler>*/;
2789 var76 = ((val* (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__build_attr_tables]))(self, var_mclasses) /* build_attr_tables on <self:SeparateCompiler>*/;
2790 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables_61d]))(self, var76) /* attr_tables= on <self:SeparateCompiler>*/;
2791 var77 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_layout]))(self) /* attr_layout on <self:SeparateCompiler>*/;
2792 if (var77 == NULL) {
2793 fprintf(stderr, "Runtime error: %s", "Reciever is null");
2794 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 301);
2795 exit(1);
2796 } else {
2797 var78 = ((val* (*)(val*))(var77->class->vft[COLOR_layout_builders__Layout__pos]))(var77) /* pos on <var77:nullable Layout[MAttribute]>*/;
2798 }
2799 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_color_consts]))(self, var78) /* compile_color_consts on <self:SeparateCompiler>*/;
2800 RET_LABEL:;
2801 }
2802 /* method separate_compiler#SeparateCompiler#do_property_coloring for (self: Object) */
2803 void VIRTUAL_separate_compiler__SeparateCompiler__do_property_coloring(val* self) {
2804 separate_compiler__SeparateCompiler__do_property_coloring(self);
2805 RET_LABEL:;
2806 }
2807 /* method separate_compiler#SeparateCompiler#build_method_tables for (self: SeparateCompiler, Set[MClass], Set[MMethodDef]): Map[MClass, Array[nullable MPropDef]] */
2808 val* separate_compiler__SeparateCompiler__build_method_tables(val* self, val* p0, val* p1) {
2809 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
2810 val* var_mclasses /* var mclasses: Set[MClass] */;
2811 val* var_super_calls /* var super_calls: Set[MMethodDef] */;
2812 val* var1 /* : nullable Layout[PropertyLayoutElement] */;
2813 val* var_layout /* var layout: nullable Layout[PropertyLayoutElement] */;
2814 val* var2 /* : HashMap[MClass, Array[nullable MPropDef]] */;
2815 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
2816 val* var3 /* : Iterator[nullable Object] */;
2817 short int var4 /* : Bool */;
2818 val* var5 /* : nullable Object */;
2819 val* var_mclass /* var mclass: MClass */;
2820 val* var6 /* : Array[nullable MPropDef] */;
2821 val* var_table /* var table: Array[nullable MPropDef] */;
2822 val* var7 /* : List[MMethodDef] */;
2823 val* var_supercalls /* var supercalls: List[MMethodDef] */;
2824 val* var8 /* : Array[MClass] */;
2825 val* var_parents /* var parents: Array[MClass] */;
2826 val* var9 /* : MModule */;
2827 val* var10 /* : POSet[MClass] */;
2828 short int var11 /* : Bool */;
2829 val* var12 /* : MModule */;
2830 val* var13 /* : POSetElement[MClass] */;
2831 val* var14 /* : Collection[Object] */;
2832 val* var15 /* : Array[nullable Object] */;
2833 val* var16 /* : MModule */;
2834 val* var17 /* : Iterator[nullable Object] */;
2835 short int var18 /* : Bool */;
2836 val* var19 /* : nullable Object */;
2837 val* var_parent /* var parent: MClass */;
2838 short int var20 /* : Bool */;
2839 val* var21 /* : MModule */;
2840 val* var22 /* : Set[MProperty] */;
2841 val* var23 /* : Iterator[nullable Object] */;
2842 short int var24 /* : Bool */;
2843 val* var25 /* : nullable Object */;
2844 val* var_mproperty /* var mproperty: MProperty */;
2845 short int var26 /* : Bool */;
2846 int cltype;
2847 int idtype;
2848 short int var27 /* : Bool */;
2849 val* var29 /* : Map[Object, Int] */;
2850 val* var30 /* : nullable Object */;
2851 long var31 /* : Int */;
2852 long var_color /* var color: Int */;
2853 long var32 /* : Int */;
2854 short int var33 /* : Bool */;
2855 short int var35 /* : Bool */;
2856 int cltype36;
2857 int idtype37;
2858 const char* var_class_name;
2859 short int var38 /* : Bool */;
2860 val* var39 /* : Range[Int] */;
2861 long var40 /* : Int */;
2862 val* var41 /* : Discrete */;
2863 val* var42 /* : Discrete */;
2864 val* var43 /* : Iterator[nullable Object] */;
2865 short int var44 /* : Bool */;
2866 val* var45 /* : nullable Object */;
2867 long var_i /* var i: Int */;
2868 long var46 /* : Int */;
2869 val* var47 /* : null */;
2870 val* var49 /* : Array[MPropDef] */;
2871 val* var50 /* : Iterator[nullable Object] */;
2872 short int var51 /* : Bool */;
2873 val* var52 /* : nullable Object */;
2874 val* var_mpropdef /* var mpropdef: MMethodDef */;
2875 val* var53 /* : MClassDef */;
2876 val* var54 /* : MClass */;
2877 short int var55 /* : Bool */;
2878 val* var57 /* : Iterator[nullable Object] */;
2879 short int var58 /* : Bool */;
2880 val* var59 /* : nullable Object */;
2881 val* var_mmethoddef /* var mmethoddef: MMethodDef */;
2882 val* var60 /* : Array[MClassDef] */;
2883 val* var61 /* : Iterator[nullable Object] */;
2884 short int var62 /* : Bool */;
2885 val* var63 /* : nullable Object */;
2886 val* var_mclassdef /* var mclassdef: MClassDef */;
2887 val* var64 /* : Array[MPropDef] */;
2888 short int var65 /* : Bool */;
2889 val* var68 /* : MModule */;
2890 val* var69 /* : Set[MProperty] */;
2891 val* var70 /* : Iterator[nullable Object] */;
2892 short int var71 /* : Bool */;
2893 val* var72 /* : nullable Object */;
2894 val* var_mproperty73 /* var mproperty: MProperty */;
2895 short int var74 /* : Bool */;
2896 int cltype75;
2897 int idtype76;
2898 short int var77 /* : Bool */;
2899 val* var79 /* : Map[Object, Int] */;
2900 val* var80 /* : nullable Object */;
2901 long var81 /* : Int */;
2902 long var_color82 /* var color: Int */;
2903 long var83 /* : Int */;
2904 short int var84 /* : Bool */;
2905 short int var86 /* : Bool */;
2906 int cltype87;
2907 int idtype88;
2908 const char* var_class_name89;
2909 short int var90 /* : Bool */;
2910 val* var91 /* : Range[Int] */;
2911 long var92 /* : Int */;
2912 val* var93 /* : Discrete */;
2913 val* var94 /* : Discrete */;
2914 val* var95 /* : Iterator[nullable Object] */;
2915 short int var96 /* : Bool */;
2916 val* var97 /* : nullable Object */;
2917 long var_i98 /* var i: Int */;
2918 long var99 /* : Int */;
2919 val* var100 /* : null */;
2920 val* var102 /* : Array[MPropDef] */;
2921 val* var103 /* : Iterator[nullable Object] */;
2922 short int var104 /* : Bool */;
2923 val* var105 /* : nullable Object */;
2924 val* var_mpropdef106 /* var mpropdef: MMethodDef */;
2925 val* var107 /* : MClassDef */;
2926 val* var108 /* : MClass */;
2927 short int var109 /* : Bool */;
2928 val* var111 /* : Iterator[nullable Object] */;
2929 short int var112 /* : Bool */;
2930 val* var113 /* : nullable Object */;
2931 val* var_mmethoddef114 /* var mmethoddef: MMethodDef */;
2932 val* var115 /* : Array[MClassDef] */;
2933 val* var116 /* : Iterator[nullable Object] */;
2934 short int var117 /* : Bool */;
2935 val* var118 /* : nullable Object */;
2936 val* var_mclassdef119 /* var mclassdef: MClassDef */;
2937 val* var120 /* : Array[MPropDef] */;
2938 short int var121 /* : Bool */;
2939 val* var124 /* : Iterator[nullable Object] */;
2940 short int var125 /* : Bool */;
2941 val* var126 /* : nullable Object */;
2942 val* var_supercall /* var supercall: MMethodDef */;
2943 val* var127 /* : Map[Object, Int] */;
2944 val* var128 /* : nullable Object */;
2945 long var129 /* : Int */;
2946 long var_color130 /* var color: Int */;
2947 long var131 /* : Int */;
2948 short int var132 /* : Bool */;
2949 short int var134 /* : Bool */;
2950 int cltype135;
2951 int idtype136;
2952 const char* var_class_name137;
2953 short int var138 /* : Bool */;
2954 val* var139 /* : Range[Int] */;
2955 long var140 /* : Int */;
2956 val* var141 /* : Discrete */;
2957 val* var142 /* : Discrete */;
2958 val* var143 /* : Iterator[nullable Object] */;
2959 short int var144 /* : Bool */;
2960 val* var145 /* : nullable Object */;
2961 long var_i146 /* var i: Int */;
2962 long var147 /* : Int */;
2963 val* var148 /* : null */;
2964 val* var150 /* : MModule */;
2965 val* var151 /* : MClassDef */;
2966 val* var152 /* : MClassType */;
2967 val* var153 /* : MPropDef */;
2968 val* var_mmethoddef154 /* var mmethoddef: MMethodDef */;
2969 var_mclasses = p0;
2970 var_super_calls = p1;
2971 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_layout]))(self) /* method_layout on <self:SeparateCompiler>*/;
2972 var_layout = var1;
2973 var2 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
2974 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[MClass, Array[nullable MPropDef]]>*/;
2975 CHECK_NEW_hash_collection__HashMap(var2);
2976 var_tables = var2;
2977 var3 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
2978 for(;;) {
2979 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
2980 if(!var4) break;
2981 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
2982 var_mclass = var5;
2983 var6 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
2984 ((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[nullable MPropDef]>*/;
2985 CHECK_NEW_array__Array(var6);
2986 var_table = var6;
2987 var7 = NEW_list__List(&type_list__Listmodel__MMethodDef);
2988 ((void (*)(val*))(var7->class->vft[COLOR_list__List__init]))(var7) /* init on <var7:List[MMethodDef]>*/;
2989 CHECK_NEW_list__List(var7);
2990 var_supercalls = var7;
2991 var8 = NEW_array__Array(&type_array__Arraymodel__MClass);
2992 ((void (*)(val*))(var8->class->vft[COLOR_array__Array__init]))(var8) /* init on <var8:Array[MClass]>*/;
2993 CHECK_NEW_array__Array(var8);
2994 var_parents = var8;
2995 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
2996 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var9) /* flatten_mclass_hierarchy on <var9:MModule>*/;
2997 var11 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_abstract_collection__Collection__has]))(var10, var_mclass) /* has on <var10:POSet[MClass]>*/;
2998 if (var11){
2999 var12 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3000 var13 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var12) /* in_hierarchy on <var_mclass:MClass>*/;
3001 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_poset__POSetElement__greaters]))(var13) /* greaters on <var13:POSetElement[MClass]>*/;
3002 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_array__Collection__to_a]))(var14) /* to_a on <var14:Collection[Object](Collection[MClass])>*/;
3003 var_parents = var15;
3004 var16 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3005 ((void (*)(val*, val*))(var16->class->vft[COLOR_model__MModule__linearize_mclasses]))(var16, var_parents) /* linearize_mclasses on <var16:MModule>*/;
3006 } else {
3007 }
3008 var17 = ((val* (*)(val*))(var_parents->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_parents) /* iterator on <var_parents:Array[MClass]>*/;
3009 for(;;) {
3010 var18 = ((short int (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var17) /* is_ok on <var17:Iterator[nullable Object]>*/;
3011 if(!var18) break;
3012 var19 = ((val* (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__item]))(var17) /* item on <var17:Iterator[nullable Object]>*/;
3013 var_parent = var19;
3014 var20 = ((short int (*)(val*, val*))(var_parent->class->vft[COLOR_kernel__Object___61d_61d]))(var_parent, var_mclass) /* == on <var_parent:MClass>*/;
3015 if (var20){
3016 goto CONTINUE_label;
3017 } else {
3018 }
3019 var21 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3020 var22 = ((val* (*)(val*, val*))(var21->class->vft[COLOR_abstract_compiler__MModule__properties]))(var21, var_parent) /* properties on <var21:MModule>*/;
3021 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_abstract_collection__Collection__iterator]))(var22) /* iterator on <var22:Set[MProperty]>*/;
3022 for(;;) {
3023 var24 = ((short int (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var23) /* is_ok on <var23:Iterator[nullable Object]>*/;
3024 if(!var24) break;
3025 var25 = ((val* (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator__item]))(var23) /* item on <var23:Iterator[nullable Object]>*/;
3026 var_mproperty = var25;
3027 /* <var_mproperty:MProperty> isa MMethod */
3028 cltype = type_model__MMethod.color;
3029 idtype = type_model__MMethod.id;
3030 if(cltype >= var_mproperty->type->table_size) {
3031 var26 = 0;
3032 } else {
3033 var26 = var_mproperty->type->type_table[cltype] == idtype;
3034 }
3035 var27 = !var26;
3036 if (var27){
3037 goto CONTINUE_label28;
3038 } else {
3039 }
3040 if (var_layout == NULL) {
3041 fprintf(stderr, "Runtime error: %s", "Reciever is null");
3042 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 322);
3043 exit(1);
3044 } else {
3045 var29 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[PropertyLayoutElement]>*/;
3046 }
3047 var30 = ((val* (*)(val*, val*))(var29->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var29, var_mproperty) /* [] on <var29:Map[Object, Int](Map[PropertyLayoutElement, Int])>*/;
3048 var31 = ((struct instance_kernel__Int*)var30)->value; /* autounbox from nullable Object to Int */;
3049 var_color = var31;
3050 var32 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3051 { /* Inline kernel#Int#<= (var32,var_color) */
3052 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
3053 /* <var_color:Int> isa OTHER */
3054 var35 = 1; /* easy <var_color:Int> isa OTHER*/
3055 if (!var35) {
3056 var_class_name = type_kernel__Int.name;
3057 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
3058 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
3059 exit(1);
3060 }
3061 var38 = var32 <= var_color;
3062 var33 = var38;
3063 goto RET_LABEL34;
3064 RET_LABEL34:(void)0;
3065 }
3066 if (var33){
3067 var39 = NEW_range__Range(&type_range__Rangekernel__Int);
3068 var40 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3069 var41 = BOX_kernel__Int(var40); /* autobox from Int to Discrete */
3070 var42 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
3071 ((void (*)(val*, val*, val*))(var39->class->vft[COLOR_range__Range__without_last]))(var39, var41, var42) /* without_last on <var39:Range[Int]>*/;
3072 CHECK_NEW_range__Range(var39);
3073 var43 = ((val* (*)(val*))(var39->class->vft[COLOR_abstract_collection__Collection__iterator]))(var39) /* iterator on <var39:Range[Int]>*/;
3074 for(;;) {
3075 var44 = ((short int (*)(val*))(var43->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var43) /* is_ok on <var43:Iterator[nullable Object]>*/;
3076 if(!var44) break;
3077 var45 = ((val* (*)(val*))(var43->class->vft[COLOR_abstract_collection__Iterator__item]))(var43) /* item on <var43:Iterator[nullable Object]>*/;
3078 var46 = ((struct instance_kernel__Int*)var45)->value; /* autounbox from nullable Object to Int */;
3079 var_i = var46;
3080 var47 = NULL;
3081 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i, var47) /* []= on <var_table:Array[nullable MPropDef]>*/;
3082 CONTINUE_label48: (void)0;
3083 ((void (*)(val*))(var43->class->vft[COLOR_abstract_collection__Iterator__next]))(var43) /* next on <var43:Iterator[nullable Object]>*/;
3084 }
3085 BREAK_label48: (void)0;
3086 } else {
3087 }
3088 var49 = ((val* (*)(val*))(var_mproperty->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty) /* mpropdefs on <var_mproperty:MProperty(MMethod)>*/;
3089 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_abstract_collection__Collection__iterator]))(var49) /* iterator on <var49:Array[MPropDef](Array[MMethodDef])>*/;
3090 for(;;) {
3091 var51 = ((short int (*)(val*))(var50->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var50) /* is_ok on <var50:Iterator[nullable Object]>*/;
3092 if(!var51) break;
3093 var52 = ((val* (*)(val*))(var50->class->vft[COLOR_abstract_collection__Iterator__item]))(var50) /* item on <var50:Iterator[nullable Object]>*/;
3094 var_mpropdef = var52;
3095 var53 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MMethodDef>*/;
3096 var54 = ((val* (*)(val*))(var53->class->vft[COLOR_model__MClassDef__mclass]))(var53) /* mclass on <var53:MClassDef>*/;
3097 var55 = ((short int (*)(val*, val*))(var54->class->vft[COLOR_kernel__Object___61d_61d]))(var54, var_parent) /* == on <var54:MClass>*/;
3098 if (var55){
3099 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color, var_mpropdef) /* []= on <var_table:Array[nullable MPropDef]>*/;
3100 } else {
3101 }
3102 CONTINUE_label56: (void)0;
3103 ((void (*)(val*))(var50->class->vft[COLOR_abstract_collection__Iterator__next]))(var50) /* next on <var50:Iterator[nullable Object]>*/;
3104 }
3105 BREAK_label56: (void)0;
3106 CONTINUE_label28: (void)0;
3107 ((void (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator__next]))(var23) /* next on <var23:Iterator[nullable Object]>*/;
3108 }
3109 BREAK_label28: (void)0;
3110 var57 = ((val* (*)(val*))(var_super_calls->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_super_calls) /* iterator on <var_super_calls:Set[MMethodDef]>*/;
3111 for(;;) {
3112 var58 = ((short int (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var57) /* is_ok on <var57:Iterator[nullable Object]>*/;
3113 if(!var58) break;
3114 var59 = ((val* (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__item]))(var57) /* item on <var57:Iterator[nullable Object]>*/;
3115 var_mmethoddef = var59;
3116 var60 = ((val* (*)(val*))(var_parent->class->vft[COLOR_model__MClass__mclassdefs]))(var_parent) /* mclassdefs on <var_parent:MClass>*/;
3117 var61 = ((val* (*)(val*))(var60->class->vft[COLOR_abstract_collection__Collection__iterator]))(var60) /* iterator on <var60:Array[MClassDef]>*/;
3118 for(;;) {
3119 var62 = ((short int (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var61) /* is_ok on <var61:Iterator[nullable Object]>*/;
3120 if(!var62) break;
3121 var63 = ((val* (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__item]))(var61) /* item on <var61:Iterator[nullable Object]>*/;
3122 var_mclassdef = var63;
3123 var64 = ((val* (*)(val*))(var_mclassdef->class->vft[COLOR_model__MClassDef__mpropdefs]))(var_mclassdef) /* mpropdefs on <var_mclassdef:MClassDef>*/;
3124 var65 = ((short int (*)(val*, val*))(var64->class->vft[COLOR_abstract_collection__Collection__has]))(var64, var_mmethoddef) /* has on <var64:Array[MPropDef]>*/;
3125 if (var65){
3126 ((void (*)(val*, val*))(var_supercalls->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_supercalls, var_mmethoddef) /* add on <var_supercalls:List[MMethodDef]>*/;
3127 } else {
3128 }
3129 CONTINUE_label66: (void)0;
3130 ((void (*)(val*))(var61->class->vft[COLOR_abstract_collection__Iterator__next]))(var61) /* next on <var61:Iterator[nullable Object]>*/;
3131 }
3132 BREAK_label66: (void)0;
3133 CONTINUE_label67: (void)0;
3134 ((void (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__next]))(var57) /* next on <var57:Iterator[nullable Object]>*/;
3135 }
3136 BREAK_label67: (void)0;
3137 CONTINUE_label: (void)0;
3138 ((void (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__next]))(var17) /* next on <var17:Iterator[nullable Object]>*/;
3139 }
3140 BREAK_label: (void)0;
3141 var68 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3142 var69 = ((val* (*)(val*, val*))(var68->class->vft[COLOR_abstract_compiler__MModule__properties]))(var68, var_mclass) /* properties on <var68:MModule>*/;
3143 var70 = ((val* (*)(val*))(var69->class->vft[COLOR_abstract_collection__Collection__iterator]))(var69) /* iterator on <var69:Set[MProperty]>*/;
3144 for(;;) {
3145 var71 = ((short int (*)(val*))(var70->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var70) /* is_ok on <var70:Iterator[nullable Object]>*/;
3146 if(!var71) break;
3147 var72 = ((val* (*)(val*))(var70->class->vft[COLOR_abstract_collection__Iterator__item]))(var70) /* item on <var70:Iterator[nullable Object]>*/;
3148 var_mproperty73 = var72;
3149 /* <var_mproperty73:MProperty> isa MMethod */
3150 cltype75 = type_model__MMethod.color;
3151 idtype76 = type_model__MMethod.id;
3152 if(cltype75 >= var_mproperty73->type->table_size) {
3153 var74 = 0;
3154 } else {
3155 var74 = var_mproperty73->type->type_table[cltype75] == idtype76;
3156 }
3157 var77 = !var74;
3158 if (var77){
3159 goto CONTINUE_label78;
3160 } else {
3161 }
3162 if (var_layout == NULL) {
3163 fprintf(stderr, "Runtime error: %s", "Reciever is null");
3164 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 348);
3165 exit(1);
3166 } else {
3167 var79 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[PropertyLayoutElement]>*/;
3168 }
3169 var80 = ((val* (*)(val*, val*))(var79->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var79, var_mproperty73) /* [] on <var79:Map[Object, Int](Map[PropertyLayoutElement, Int])>*/;
3170 var81 = ((struct instance_kernel__Int*)var80)->value; /* autounbox from nullable Object to Int */;
3171 var_color82 = var81;
3172 var83 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3173 { /* Inline kernel#Int#<= (var83,var_color82) */
3174 /* Covariant cast for argument 0 (i) <var_color82:Int> isa OTHER */
3175 /* <var_color82:Int> isa OTHER */
3176 var86 = 1; /* easy <var_color82:Int> isa OTHER*/
3177 if (!var86) {
3178 var_class_name89 = type_kernel__Int.name;
3179 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name89);
3180 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
3181 exit(1);
3182 }
3183 var90 = var83 <= var_color82;
3184 var84 = var90;
3185 goto RET_LABEL85;
3186 RET_LABEL85:(void)0;
3187 }
3188 if (var84){
3189 var91 = NEW_range__Range(&type_range__Rangekernel__Int);
3190 var92 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3191 var93 = BOX_kernel__Int(var92); /* autobox from Int to Discrete */
3192 var94 = BOX_kernel__Int(var_color82); /* autobox from Int to Discrete */
3193 ((void (*)(val*, val*, val*))(var91->class->vft[COLOR_range__Range__without_last]))(var91, var93, var94) /* without_last on <var91:Range[Int]>*/;
3194 CHECK_NEW_range__Range(var91);
3195 var95 = ((val* (*)(val*))(var91->class->vft[COLOR_abstract_collection__Collection__iterator]))(var91) /* iterator on <var91:Range[Int]>*/;
3196 for(;;) {
3197 var96 = ((short int (*)(val*))(var95->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var95) /* is_ok on <var95:Iterator[nullable Object]>*/;
3198 if(!var96) break;
3199 var97 = ((val* (*)(val*))(var95->class->vft[COLOR_abstract_collection__Iterator__item]))(var95) /* item on <var95:Iterator[nullable Object]>*/;
3200 var99 = ((struct instance_kernel__Int*)var97)->value; /* autounbox from nullable Object to Int */;
3201 var_i98 = var99;
3202 var100 = NULL;
3203 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i98, var100) /* []= on <var_table:Array[nullable MPropDef]>*/;
3204 CONTINUE_label101: (void)0;
3205 ((void (*)(val*))(var95->class->vft[COLOR_abstract_collection__Iterator__next]))(var95) /* next on <var95:Iterator[nullable Object]>*/;
3206 }
3207 BREAK_label101: (void)0;
3208 } else {
3209 }
3210 var102 = ((val* (*)(val*))(var_mproperty73->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty73) /* mpropdefs on <var_mproperty73:MProperty(MMethod)>*/;
3211 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_abstract_collection__Collection__iterator]))(var102) /* iterator on <var102:Array[MPropDef](Array[MMethodDef])>*/;
3212 for(;;) {
3213 var104 = ((short int (*)(val*))(var103->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var103) /* is_ok on <var103:Iterator[nullable Object]>*/;
3214 if(!var104) break;
3215 var105 = ((val* (*)(val*))(var103->class->vft[COLOR_abstract_collection__Iterator__item]))(var103) /* item on <var103:Iterator[nullable Object]>*/;
3216 var_mpropdef106 = var105;
3217 var107 = ((val* (*)(val*))(var_mpropdef106->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef106) /* mclassdef on <var_mpropdef106:MMethodDef>*/;
3218 var108 = ((val* (*)(val*))(var107->class->vft[COLOR_model__MClassDef__mclass]))(var107) /* mclass on <var107:MClassDef>*/;
3219 var109 = ((short int (*)(val*, val*))(var108->class->vft[COLOR_kernel__Object___61d_61d]))(var108, var_mclass) /* == on <var108:MClass>*/;
3220 if (var109){
3221 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color82, var_mpropdef106) /* []= on <var_table:Array[nullable MPropDef]>*/;
3222 } else {
3223 }
3224 CONTINUE_label110: (void)0;
3225 ((void (*)(val*))(var103->class->vft[COLOR_abstract_collection__Iterator__next]))(var103) /* next on <var103:Iterator[nullable Object]>*/;
3226 }
3227 BREAK_label110: (void)0;
3228 CONTINUE_label78: (void)0;
3229 ((void (*)(val*))(var70->class->vft[COLOR_abstract_collection__Iterator__next]))(var70) /* next on <var70:Iterator[nullable Object]>*/;
3230 }
3231 BREAK_label78: (void)0;
3232 var111 = ((val* (*)(val*))(var_super_calls->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_super_calls) /* iterator on <var_super_calls:Set[MMethodDef]>*/;
3233 for(;;) {
3234 var112 = ((short int (*)(val*))(var111->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var111) /* is_ok on <var111:Iterator[nullable Object]>*/;
3235 if(!var112) break;
3236 var113 = ((val* (*)(val*))(var111->class->vft[COLOR_abstract_collection__Iterator__item]))(var111) /* item on <var111:Iterator[nullable Object]>*/;
3237 var_mmethoddef114 = var113;
3238 var115 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__mclassdefs]))(var_mclass) /* mclassdefs on <var_mclass:MClass>*/;
3239 var116 = ((val* (*)(val*))(var115->class->vft[COLOR_abstract_collection__Collection__iterator]))(var115) /* iterator on <var115:Array[MClassDef]>*/;
3240 for(;;) {
3241 var117 = ((short int (*)(val*))(var116->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var116) /* is_ok on <var116:Iterator[nullable Object]>*/;
3242 if(!var117) break;
3243 var118 = ((val* (*)(val*))(var116->class->vft[COLOR_abstract_collection__Iterator__item]))(var116) /* item on <var116:Iterator[nullable Object]>*/;
3244 var_mclassdef119 = var118;
3245 var120 = ((val* (*)(val*))(var_mclassdef119->class->vft[COLOR_model__MClassDef__mpropdefs]))(var_mclassdef119) /* mpropdefs on <var_mclassdef119:MClassDef>*/;
3246 var121 = ((short int (*)(val*, val*))(var120->class->vft[COLOR_abstract_collection__Collection__has]))(var120, var_mmethoddef114) /* has on <var120:Array[MPropDef]>*/;
3247 if (var121){
3248 ((void (*)(val*, val*))(var_supercalls->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_supercalls, var_mmethoddef114) /* add on <var_supercalls:List[MMethodDef]>*/;
3249 } else {
3250 }
3251 CONTINUE_label122: (void)0;
3252 ((void (*)(val*))(var116->class->vft[COLOR_abstract_collection__Iterator__next]))(var116) /* next on <var116:Iterator[nullable Object]>*/;
3253 }
3254 BREAK_label122: (void)0;
3255 CONTINUE_label123: (void)0;
3256 ((void (*)(val*))(var111->class->vft[COLOR_abstract_collection__Iterator__next]))(var111) /* next on <var111:Iterator[nullable Object]>*/;
3257 }
3258 BREAK_label123: (void)0;
3259 var124 = ((val* (*)(val*))(var_supercalls->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_supercalls) /* iterator on <var_supercalls:List[MMethodDef]>*/;
3260 for(;;) {
3261 var125 = ((short int (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var124) /* is_ok on <var124:Iterator[nullable Object]>*/;
3262 if(!var125) break;
3263 var126 = ((val* (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__item]))(var124) /* item on <var124:Iterator[nullable Object]>*/;
3264 var_supercall = var126;
3265 if (var_layout == NULL) {
3266 fprintf(stderr, "Runtime error: %s", "Reciever is null");
3267 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 371);
3268 exit(1);
3269 } else {
3270 var127 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[PropertyLayoutElement]>*/;
3271 }
3272 var128 = ((val* (*)(val*, val*))(var127->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var127, var_supercall) /* [] on <var127:Map[Object, Int](Map[PropertyLayoutElement, Int])>*/;
3273 var129 = ((struct instance_kernel__Int*)var128)->value; /* autounbox from nullable Object to Int */;
3274 var_color130 = var129;
3275 var131 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3276 { /* Inline kernel#Int#<= (var131,var_color130) */
3277 /* Covariant cast for argument 0 (i) <var_color130:Int> isa OTHER */
3278 /* <var_color130:Int> isa OTHER */
3279 var134 = 1; /* easy <var_color130:Int> isa OTHER*/
3280 if (!var134) {
3281 var_class_name137 = type_kernel__Int.name;
3282 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name137);
3283 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
3284 exit(1);
3285 }
3286 var138 = var131 <= var_color130;
3287 var132 = var138;
3288 goto RET_LABEL133;
3289 RET_LABEL133:(void)0;
3290 }
3291 if (var132){
3292 var139 = NEW_range__Range(&type_range__Rangekernel__Int);
3293 var140 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3294 var141 = BOX_kernel__Int(var140); /* autobox from Int to Discrete */
3295 var142 = BOX_kernel__Int(var_color130); /* autobox from Int to Discrete */
3296 ((void (*)(val*, val*, val*))(var139->class->vft[COLOR_range__Range__without_last]))(var139, var141, var142) /* without_last on <var139:Range[Int]>*/;
3297 CHECK_NEW_range__Range(var139);
3298 var143 = ((val* (*)(val*))(var139->class->vft[COLOR_abstract_collection__Collection__iterator]))(var139) /* iterator on <var139:Range[Int]>*/;
3299 for(;;) {
3300 var144 = ((short int (*)(val*))(var143->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var143) /* is_ok on <var143:Iterator[nullable Object]>*/;
3301 if(!var144) break;
3302 var145 = ((val* (*)(val*))(var143->class->vft[COLOR_abstract_collection__Iterator__item]))(var143) /* item on <var143:Iterator[nullable Object]>*/;
3303 var147 = ((struct instance_kernel__Int*)var145)->value; /* autounbox from nullable Object to Int */;
3304 var_i146 = var147;
3305 var148 = NULL;
3306 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i146, var148) /* []= on <var_table:Array[nullable MPropDef]>*/;
3307 CONTINUE_label149: (void)0;
3308 ((void (*)(val*))(var143->class->vft[COLOR_abstract_collection__Iterator__next]))(var143) /* next on <var143:Iterator[nullable Object]>*/;
3309 }
3310 BREAK_label149: (void)0;
3311 } else {
3312 }
3313 var150 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3314 var151 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
3315 var152 = ((val* (*)(val*))(var151->class->vft[COLOR_model__MClassDef__bound_mtype]))(var151) /* bound_mtype on <var151:MClassDef>*/;
3316 var153 = ((val* (*)(val*, val*, val*))(var_supercall->class->vft[COLOR_model__MPropDef__lookup_next_definition]))(var_supercall, var150, var152) /* lookup_next_definition on <var_supercall:MMethodDef>*/;
3317 var_mmethoddef154 = var153;
3318 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color130, var_mmethoddef154) /* []= on <var_table:Array[nullable MPropDef]>*/;
3319 CONTINUE_label155: (void)0;
3320 ((void (*)(val*))(var124->class->vft[COLOR_abstract_collection__Iterator__next]))(var124) /* next on <var124:Iterator[nullable Object]>*/;
3321 }
3322 BREAK_label155: (void)0;
3323 ((void (*)(val*, val*, val*))(var_tables->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_tables, var_mclass, var_table) /* []= on <var_tables:HashMap[MClass, Array[nullable MPropDef]]>*/;
3324 CONTINUE_label156: (void)0;
3325 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
3326 }
3327 BREAK_label156: (void)0;
3328 var = var_tables;
3329 goto RET_LABEL;
3330 RET_LABEL:;
3331 return var;
3332 }
3333 /* method separate_compiler#SeparateCompiler#build_method_tables for (self: Object, Set[MClass], Set[MMethodDef]): Map[MClass, Array[nullable MPropDef]] */
3334 val* VIRTUAL_separate_compiler__SeparateCompiler__build_method_tables(val* self, val* p0, val* p1) {
3335 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
3336 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
3337 var1 = separate_compiler__SeparateCompiler__build_method_tables(self, p0, p1);
3338 var = var1;
3339 RET_LABEL:;
3340 return var;
3341 }
3342 /* method separate_compiler#SeparateCompiler#build_attr_tables for (self: SeparateCompiler, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
3343 val* separate_compiler__SeparateCompiler__build_attr_tables(val* self, val* p0) {
3344 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
3345 val* var_mclasses /* var mclasses: Set[MClass] */;
3346 val* var1 /* : nullable Layout[MAttribute] */;
3347 val* var_layout /* var layout: nullable Layout[MAttribute] */;
3348 val* var2 /* : HashMap[MClass, Array[nullable MPropDef]] */;
3349 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
3350 val* var3 /* : Iterator[nullable Object] */;
3351 short int var4 /* : Bool */;
3352 val* var5 /* : nullable Object */;
3353 val* var_mclass /* var mclass: MClass */;
3354 val* var6 /* : Array[nullable MPropDef] */;
3355 val* var_table /* var table: Array[nullable MPropDef] */;
3356 val* var7 /* : Array[MClass] */;
3357 val* var_parents /* var parents: Array[MClass] */;
3358 val* var8 /* : MModule */;
3359 val* var9 /* : POSet[MClass] */;
3360 short int var10 /* : Bool */;
3361 val* var11 /* : MModule */;
3362 val* var12 /* : POSetElement[MClass] */;
3363 val* var13 /* : Collection[Object] */;
3364 val* var14 /* : Array[nullable Object] */;
3365 val* var15 /* : MModule */;
3366 val* var16 /* : Iterator[nullable Object] */;
3367 short int var17 /* : Bool */;
3368 val* var18 /* : nullable Object */;
3369 val* var_parent /* var parent: MClass */;
3370 short int var19 /* : Bool */;
3371 val* var20 /* : MModule */;
3372 val* var21 /* : Set[MProperty] */;
3373 val* var22 /* : Iterator[nullable Object] */;
3374 short int var23 /* : Bool */;
3375 val* var24 /* : nullable Object */;
3376 val* var_mproperty /* var mproperty: MProperty */;
3377 short int var25 /* : Bool */;
3378 int cltype;
3379 int idtype;
3380 short int var26 /* : Bool */;
3381 val* var28 /* : Map[Object, Int] */;
3382 val* var29 /* : nullable Object */;
3383 long var30 /* : Int */;
3384 long var_color /* var color: Int */;
3385 long var31 /* : Int */;
3386 short int var32 /* : Bool */;
3387 short int var34 /* : Bool */;
3388 int cltype35;
3389 int idtype36;
3390 const char* var_class_name;
3391 short int var37 /* : Bool */;
3392 val* var38 /* : Range[Int] */;
3393 long var39 /* : Int */;
3394 val* var40 /* : Discrete */;
3395 val* var41 /* : Discrete */;
3396 val* var42 /* : Iterator[nullable Object] */;
3397 short int var43 /* : Bool */;
3398 val* var44 /* : nullable Object */;
3399 long var_i /* var i: Int */;
3400 long var45 /* : Int */;
3401 val* var46 /* : null */;
3402 val* var48 /* : Array[MPropDef] */;
3403 val* var49 /* : Iterator[nullable Object] */;
3404 short int var50 /* : Bool */;
3405 val* var51 /* : nullable Object */;
3406 val* var_mpropdef /* var mpropdef: MAttributeDef */;
3407 val* var52 /* : MClassDef */;
3408 val* var53 /* : MClass */;
3409 short int var54 /* : Bool */;
3410 val* var56 /* : MModule */;
3411 val* var57 /* : Set[MProperty] */;
3412 val* var58 /* : Iterator[nullable Object] */;
3413 short int var59 /* : Bool */;
3414 val* var60 /* : nullable Object */;
3415 val* var_mproperty61 /* var mproperty: MProperty */;
3416 short int var62 /* : Bool */;
3417 int cltype63;
3418 int idtype64;
3419 short int var65 /* : Bool */;
3420 val* var67 /* : Map[Object, Int] */;
3421 val* var68 /* : nullable Object */;
3422 long var69 /* : Int */;
3423 long var_color70 /* var color: Int */;
3424 long var71 /* : Int */;
3425 short int var72 /* : Bool */;
3426 short int var74 /* : Bool */;
3427 int cltype75;
3428 int idtype76;
3429 const char* var_class_name77;
3430 short int var78 /* : Bool */;
3431 val* var79 /* : Range[Int] */;
3432 long var80 /* : Int */;
3433 val* var81 /* : Discrete */;
3434 val* var82 /* : Discrete */;
3435 val* var83 /* : Iterator[nullable Object] */;
3436 short int var84 /* : Bool */;
3437 val* var85 /* : nullable Object */;
3438 long var_i86 /* var i: Int */;
3439 long var87 /* : Int */;
3440 val* var88 /* : null */;
3441 val* var90 /* : Array[MPropDef] */;
3442 val* var91 /* : Iterator[nullable Object] */;
3443 short int var92 /* : Bool */;
3444 val* var93 /* : nullable Object */;
3445 val* var_mpropdef94 /* var mpropdef: MAttributeDef */;
3446 val* var95 /* : MClassDef */;
3447 val* var96 /* : MClass */;
3448 short int var97 /* : Bool */;
3449 var_mclasses = p0;
3450 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_layout]))(self) /* attr_layout on <self:SeparateCompiler>*/;
3451 var_layout = var1;
3452 var2 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
3453 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[MClass, Array[nullable MPropDef]]>*/;
3454 CHECK_NEW_hash_collection__HashMap(var2);
3455 var_tables = var2;
3456 var3 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
3457 for(;;) {
3458 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
3459 if(!var4) break;
3460 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
3461 var_mclass = var5;
3462 var6 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
3463 ((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[nullable MPropDef]>*/;
3464 CHECK_NEW_array__Array(var6);
3465 var_table = var6;
3466 var7 = NEW_array__Array(&type_array__Arraymodel__MClass);
3467 ((void (*)(val*))(var7->class->vft[COLOR_array__Array__init]))(var7) /* init on <var7:Array[MClass]>*/;
3468 CHECK_NEW_array__Array(var7);
3469 var_parents = var7;
3470 var8 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3471 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var8) /* flatten_mclass_hierarchy on <var8:MModule>*/;
3472 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__Collection__has]))(var9, var_mclass) /* has on <var9:POSet[MClass]>*/;
3473 if (var10){
3474 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3475 var12 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var11) /* in_hierarchy on <var_mclass:MClass>*/;
3476 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_poset__POSetElement__greaters]))(var12) /* greaters on <var12:POSetElement[MClass]>*/;
3477 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_array__Collection__to_a]))(var13) /* to_a on <var13:Collection[Object](Collection[MClass])>*/;
3478 var_parents = var14;
3479 var15 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3480 ((void (*)(val*, val*))(var15->class->vft[COLOR_model__MModule__linearize_mclasses]))(var15, var_parents) /* linearize_mclasses on <var15:MModule>*/;
3481 } else {
3482 }
3483 var16 = ((val* (*)(val*))(var_parents->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_parents) /* iterator on <var_parents:Array[MClass]>*/;
3484 for(;;) {
3485 var17 = ((short int (*)(val*))(var16->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var16) /* is_ok on <var16:Iterator[nullable Object]>*/;
3486 if(!var17) break;
3487 var18 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_collection__Iterator__item]))(var16) /* item on <var16:Iterator[nullable Object]>*/;
3488 var_parent = var18;
3489 var19 = ((short int (*)(val*, val*))(var_parent->class->vft[COLOR_kernel__Object___61d_61d]))(var_parent, var_mclass) /* == on <var_parent:MClass>*/;
3490 if (var19){
3491 goto CONTINUE_label;
3492 } else {
3493 }
3494 var20 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3495 var21 = ((val* (*)(val*, val*))(var20->class->vft[COLOR_abstract_compiler__MModule__properties]))(var20, var_parent) /* properties on <var20:MModule>*/;
3496 var22 = ((val* (*)(val*))(var21->class->vft[COLOR_abstract_collection__Collection__iterator]))(var21) /* iterator on <var21:Set[MProperty]>*/;
3497 for(;;) {
3498 var23 = ((short int (*)(val*))(var22->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var22) /* is_ok on <var22:Iterator[nullable Object]>*/;
3499 if(!var23) break;
3500 var24 = ((val* (*)(val*))(var22->class->vft[COLOR_abstract_collection__Iterator__item]))(var22) /* item on <var22:Iterator[nullable Object]>*/;
3501 var_mproperty = var24;
3502 /* <var_mproperty:MProperty> isa MAttribute */
3503 cltype = type_model__MAttribute.color;
3504 idtype = type_model__MAttribute.id;
3505 if(cltype >= var_mproperty->type->table_size) {
3506 var25 = 0;
3507 } else {
3508 var25 = var_mproperty->type->type_table[cltype] == idtype;
3509 }
3510 var26 = !var25;
3511 if (var26){
3512 goto CONTINUE_label27;
3513 } else {
3514 }
3515 if (var_layout == NULL) {
3516 fprintf(stderr, "Runtime error: %s", "Reciever is null");
3517 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 400);
3518 exit(1);
3519 } else {
3520 var28 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MAttribute]>*/;
3521 }
3522 var29 = ((val* (*)(val*, val*))(var28->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var28, var_mproperty) /* [] on <var28:Map[Object, Int](Map[MAttribute, Int])>*/;
3523 var30 = ((struct instance_kernel__Int*)var29)->value; /* autounbox from nullable Object to Int */;
3524 var_color = var30;
3525 var31 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3526 { /* Inline kernel#Int#<= (var31,var_color) */
3527 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
3528 /* <var_color:Int> isa OTHER */
3529 var34 = 1; /* easy <var_color:Int> isa OTHER*/
3530 if (!var34) {
3531 var_class_name = type_kernel__Int.name;
3532 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
3533 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
3534 exit(1);
3535 }
3536 var37 = var31 <= var_color;
3537 var32 = var37;
3538 goto RET_LABEL33;
3539 RET_LABEL33:(void)0;
3540 }
3541 if (var32){
3542 var38 = NEW_range__Range(&type_range__Rangekernel__Int);
3543 var39 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3544 var40 = BOX_kernel__Int(var39); /* autobox from Int to Discrete */
3545 var41 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
3546 ((void (*)(val*, val*, val*))(var38->class->vft[COLOR_range__Range__without_last]))(var38, var40, var41) /* without_last on <var38:Range[Int]>*/;
3547 CHECK_NEW_range__Range(var38);
3548 var42 = ((val* (*)(val*))(var38->class->vft[COLOR_abstract_collection__Collection__iterator]))(var38) /* iterator on <var38:Range[Int]>*/;
3549 for(;;) {
3550 var43 = ((short int (*)(val*))(var42->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var42) /* is_ok on <var42:Iterator[nullable Object]>*/;
3551 if(!var43) break;
3552 var44 = ((val* (*)(val*))(var42->class->vft[COLOR_abstract_collection__Iterator__item]))(var42) /* item on <var42:Iterator[nullable Object]>*/;
3553 var45 = ((struct instance_kernel__Int*)var44)->value; /* autounbox from nullable Object to Int */;
3554 var_i = var45;
3555 var46 = NULL;
3556 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i, var46) /* []= on <var_table:Array[nullable MPropDef]>*/;
3557 CONTINUE_label47: (void)0;
3558 ((void (*)(val*))(var42->class->vft[COLOR_abstract_collection__Iterator__next]))(var42) /* next on <var42:Iterator[nullable Object]>*/;
3559 }
3560 BREAK_label47: (void)0;
3561 } else {
3562 }
3563 var48 = ((val* (*)(val*))(var_mproperty->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty) /* mpropdefs on <var_mproperty:MProperty(MAttribute)>*/;
3564 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_abstract_collection__Collection__iterator]))(var48) /* iterator on <var48:Array[MPropDef](Array[MAttributeDef])>*/;
3565 for(;;) {
3566 var50 = ((short int (*)(val*))(var49->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var49) /* is_ok on <var49:Iterator[nullable Object]>*/;
3567 if(!var50) break;
3568 var51 = ((val* (*)(val*))(var49->class->vft[COLOR_abstract_collection__Iterator__item]))(var49) /* item on <var49:Iterator[nullable Object]>*/;
3569 var_mpropdef = var51;
3570 var52 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MAttributeDef>*/;
3571 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_model__MClassDef__mclass]))(var52) /* mclass on <var52:MClassDef>*/;
3572 var54 = ((short int (*)(val*, val*))(var53->class->vft[COLOR_kernel__Object___61d_61d]))(var53, var_parent) /* == on <var53:MClass>*/;
3573 if (var54){
3574 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color, var_mpropdef) /* []= on <var_table:Array[nullable MPropDef]>*/;
3575 } else {
3576 }
3577 CONTINUE_label55: (void)0;
3578 ((void (*)(val*))(var49->class->vft[COLOR_abstract_collection__Iterator__next]))(var49) /* next on <var49:Iterator[nullable Object]>*/;
3579 }
3580 BREAK_label55: (void)0;
3581 CONTINUE_label27: (void)0;
3582 ((void (*)(val*))(var22->class->vft[COLOR_abstract_collection__Iterator__next]))(var22) /* next on <var22:Iterator[nullable Object]>*/;
3583 }
3584 BREAK_label27: (void)0;
3585 CONTINUE_label: (void)0;
3586 ((void (*)(val*))(var16->class->vft[COLOR_abstract_collection__Iterator__next]))(var16) /* next on <var16:Iterator[nullable Object]>*/;
3587 }
3588 BREAK_label: (void)0;
3589 var56 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3590 var57 = ((val* (*)(val*, val*))(var56->class->vft[COLOR_abstract_compiler__MModule__properties]))(var56, var_mclass) /* properties on <var56:MModule>*/;
3591 var58 = ((val* (*)(val*))(var57->class->vft[COLOR_abstract_collection__Collection__iterator]))(var57) /* iterator on <var57:Set[MProperty]>*/;
3592 for(;;) {
3593 var59 = ((short int (*)(val*))(var58->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var58) /* is_ok on <var58:Iterator[nullable Object]>*/;
3594 if(!var59) break;
3595 var60 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__Iterator__item]))(var58) /* item on <var58:Iterator[nullable Object]>*/;
3596 var_mproperty61 = var60;
3597 /* <var_mproperty61:MProperty> isa MAttribute */
3598 cltype63 = type_model__MAttribute.color;
3599 idtype64 = type_model__MAttribute.id;
3600 if(cltype63 >= var_mproperty61->type->table_size) {
3601 var62 = 0;
3602 } else {
3603 var62 = var_mproperty61->type->type_table[cltype63] == idtype64;
3604 }
3605 var65 = !var62;
3606 if (var65){
3607 goto CONTINUE_label66;
3608 } else {
3609 }
3610 if (var_layout == NULL) {
3611 fprintf(stderr, "Runtime error: %s", "Reciever is null");
3612 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 417);
3613 exit(1);
3614 } else {
3615 var67 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MAttribute]>*/;
3616 }
3617 var68 = ((val* (*)(val*, val*))(var67->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var67, var_mproperty61) /* [] on <var67:Map[Object, Int](Map[MAttribute, Int])>*/;
3618 var69 = ((struct instance_kernel__Int*)var68)->value; /* autounbox from nullable Object to Int */;
3619 var_color70 = var69;
3620 var71 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3621 { /* Inline kernel#Int#<= (var71,var_color70) */
3622 /* Covariant cast for argument 0 (i) <var_color70:Int> isa OTHER */
3623 /* <var_color70:Int> isa OTHER */
3624 var74 = 1; /* easy <var_color70:Int> isa OTHER*/
3625 if (!var74) {
3626 var_class_name77 = type_kernel__Int.name;
3627 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name77);
3628 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
3629 exit(1);
3630 }
3631 var78 = var71 <= var_color70;
3632 var72 = var78;
3633 goto RET_LABEL73;
3634 RET_LABEL73:(void)0;
3635 }
3636 if (var72){
3637 var79 = NEW_range__Range(&type_range__Rangekernel__Int);
3638 var80 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
3639 var81 = BOX_kernel__Int(var80); /* autobox from Int to Discrete */
3640 var82 = BOX_kernel__Int(var_color70); /* autobox from Int to Discrete */
3641 ((void (*)(val*, val*, val*))(var79->class->vft[COLOR_range__Range__without_last]))(var79, var81, var82) /* without_last on <var79:Range[Int]>*/;
3642 CHECK_NEW_range__Range(var79);
3643 var83 = ((val* (*)(val*))(var79->class->vft[COLOR_abstract_collection__Collection__iterator]))(var79) /* iterator on <var79:Range[Int]>*/;
3644 for(;;) {
3645 var84 = ((short int (*)(val*))(var83->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var83) /* is_ok on <var83:Iterator[nullable Object]>*/;
3646 if(!var84) break;
3647 var85 = ((val* (*)(val*))(var83->class->vft[COLOR_abstract_collection__Iterator__item]))(var83) /* item on <var83:Iterator[nullable Object]>*/;
3648 var87 = ((struct instance_kernel__Int*)var85)->value; /* autounbox from nullable Object to Int */;
3649 var_i86 = var87;
3650 var88 = NULL;
3651 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i86, var88) /* []= on <var_table:Array[nullable MPropDef]>*/;
3652 CONTINUE_label89: (void)0;
3653 ((void (*)(val*))(var83->class->vft[COLOR_abstract_collection__Iterator__next]))(var83) /* next on <var83:Iterator[nullable Object]>*/;
3654 }
3655 BREAK_label89: (void)0;
3656 } else {
3657 }
3658 var90 = ((val* (*)(val*))(var_mproperty61->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty61) /* mpropdefs on <var_mproperty61:MProperty(MAttribute)>*/;
3659 var91 = ((val* (*)(val*))(var90->class->vft[COLOR_abstract_collection__Collection__iterator]))(var90) /* iterator on <var90:Array[MPropDef](Array[MAttributeDef])>*/;
3660 for(;;) {
3661 var92 = ((short int (*)(val*))(var91->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var91) /* is_ok on <var91:Iterator[nullable Object]>*/;
3662 if(!var92) break;
3663 var93 = ((val* (*)(val*))(var91->class->vft[COLOR_abstract_collection__Iterator__item]))(var91) /* item on <var91:Iterator[nullable Object]>*/;
3664 var_mpropdef94 = var93;
3665 var95 = ((val* (*)(val*))(var_mpropdef94->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef94) /* mclassdef on <var_mpropdef94:MAttributeDef>*/;
3666 var96 = ((val* (*)(val*))(var95->class->vft[COLOR_model__MClassDef__mclass]))(var95) /* mclass on <var95:MClassDef>*/;
3667 var97 = ((short int (*)(val*, val*))(var96->class->vft[COLOR_kernel__Object___61d_61d]))(var96, var_mclass) /* == on <var96:MClass>*/;
3668 if (var97){
3669 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color70, var_mpropdef94) /* []= on <var_table:Array[nullable MPropDef]>*/;
3670 } else {
3671 }
3672 CONTINUE_label98: (void)0;
3673 ((void (*)(val*))(var91->class->vft[COLOR_abstract_collection__Iterator__next]))(var91) /* next on <var91:Iterator[nullable Object]>*/;
3674 }
3675 BREAK_label98: (void)0;
3676 CONTINUE_label66: (void)0;
3677 ((void (*)(val*))(var58->class->vft[COLOR_abstract_collection__Iterator__next]))(var58) /* next on <var58:Iterator[nullable Object]>*/;
3678 }
3679 BREAK_label66: (void)0;
3680 ((void (*)(val*, val*, val*))(var_tables->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_tables, var_mclass, var_table) /* []= on <var_tables:HashMap[MClass, Array[nullable MPropDef]]>*/;
3681 CONTINUE_label99: (void)0;
3682 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
3683 }
3684 BREAK_label99: (void)0;
3685 var = var_tables;
3686 goto RET_LABEL;
3687 RET_LABEL:;
3688 return var;
3689 }
3690 /* method separate_compiler#SeparateCompiler#build_attr_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
3691 val* VIRTUAL_separate_compiler__SeparateCompiler__build_attr_tables(val* self, val* p0) {
3692 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
3693 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
3694 var1 = separate_compiler__SeparateCompiler__build_attr_tables(self, p0);
3695 var = var1;
3696 RET_LABEL:;
3697 return var;
3698 }
3699 /* method separate_compiler#SeparateCompiler#do_type_coloring for (self: SeparateCompiler): POSet[MType] */
3700 val* separate_compiler__SeparateCompiler__do_type_coloring(val* self) {
3701 val* var /* : POSet[MType] */;
3702 val* var1 /* : HashSet[MType] */;
3703 val* var_mtypes /* var mtypes: HashSet[MType] */;
3704 val* var2 /* : RapidTypeAnalysis */;
3705 val* var3 /* : HashSet[MClassType] */;
3706 val* var4 /* : RapidTypeAnalysis */;
3707 val* var5 /* : HashSet[MClassType] */;
3708 val* var6 /* : Set[MType] */;
3709 val* var7 /* : HashMap[MClass, Int] */;
3710 val* var8 /* : Collection[Object] */;
3711 val* var9 /* : Iterator[nullable Object] */;
3712 short int var10 /* : Bool */;
3713 val* var11 /* : nullable Object */;
3714 val* var_c /* var c: MClass */;
3715 val* var12 /* : MClassType */;
3716 val* var13 /* : Iterator[nullable Object] */;
3717 short int var14 /* : Bool */;
3718 val* var15 /* : nullable Object */;
3719 val* var_mtype /* var mtype: MType */;
3720 val* var17 /* : Set[MType] */;
3721 val* var18 /* : ModelBuilder */;
3722 val* var19 /* : ToolContext */;
3723 val* var20 /* : OptionBool */;
3724 val* var21 /* : nullable Object */;
3725 short int var22 /* : Bool */;
3726 val* var23 /* : MTypeBMizer */;
3727 val* var24 /* : MModule */;
3728 val* var_layout_builder /* var layout_builder: TypingLayoutBuilder[MType] */;
3729 val* var25 /* : ModelBuilder */;
3730 val* var26 /* : ToolContext */;
3731 val* var27 /* : OptionBool */;
3732 val* var28 /* : nullable Object */;
3733 short int var29 /* : Bool */;
3734 val* var30 /* : MTypeHasher */;
3735 val* var31 /* : PHModOperator */;
3736 val* var32 /* : MModule */;
3737 val* var33 /* : ModelBuilder */;
3738 val* var34 /* : ToolContext */;
3739 val* var35 /* : OptionBool */;
3740 val* var36 /* : nullable Object */;
3741 short int var37 /* : Bool */;
3742 val* var38 /* : MTypeHasher */;
3743 val* var39 /* : PHAndOperator */;
3744 val* var40 /* : MModule */;
3745 val* var41 /* : MTypeColorer */;
3746 val* var42 /* : MModule */;
3747 val* var43 /* : Layout[Object] */;
3748 val* var44 /* : nullable POSet[Object] */;
3749 val* var_poset /* var poset: POSet[MType] */;
3750 val* var45 /* : Map[MType, Array[nullable MType]] */;
3751 var1 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
3752 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashSet__init]))(var1) /* init on <var1:HashSet[MType]>*/;
3753 CHECK_NEW_hash_collection__HashSet(var1);
3754 var_mtypes = var1;
3755 var2 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:SeparateCompiler>*/;
3756 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var2) /* live_types on <var2:RapidTypeAnalysis>*/;
3757 ((void (*)(val*, val*))(var_mtypes->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_mtypes, var3) /* add_all on <var_mtypes:HashSet[MType]>*/;
3758 var4 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:SeparateCompiler>*/;
3759 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_cast_types]))(var4) /* live_cast_types on <var4:RapidTypeAnalysis>*/;
3760 ((void (*)(val*, val*))(var_mtypes->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_mtypes, var5) /* add_all on <var_mtypes:HashSet[MType]>*/;
3761 var6 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__undead_types]))(self) /* undead_types on <self:SeparateCompiler>*/;
3762 ((void (*)(val*, val*))(var_mtypes->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_mtypes, var6) /* add_all on <var_mtypes:HashSet[MType]>*/;
3763 var7 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kinds]))(self) /* box_kinds on <self:SeparateCompiler>*/;
3764 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapRead__keys]))(var7) /* keys on <var7:HashMap[MClass, Int]>*/;
3765 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Collection__iterator]))(var8) /* iterator on <var8:Collection[Object](HashMapKeys[MClass, Int])>*/;
3766 for(;;) {
3767 var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
3768 if(!var10) break;
3769 var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
3770 var_c = var11;
3771 var12 = ((val* (*)(val*))(var_c->class->vft[COLOR_model__MClass__mclass_type]))(var_c) /* mclass_type on <var_c:MClass>*/;
3772 ((void (*)(val*, val*))(var_mtypes->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_mtypes, var12) /* add on <var_mtypes:HashSet[MType]>*/;
3773 CONTINUE_label: (void)0;
3774 ((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
3775 }
3776 BREAK_label: (void)0;
3777 var13 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:HashSet[MType]>*/;
3778 for(;;) {
3779 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
3780 if(!var14) break;
3781 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
3782 var_mtype = var15;
3783 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__retrieve_partial_types]))(self, var_mtype) /* retrieve_partial_types on <self:SeparateCompiler>*/;
3784 CONTINUE_label16: (void)0;
3785 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
3786 }
3787 BREAK_label16: (void)0;
3788 var17 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__partial_types]))(self) /* partial_types on <self:SeparateCompiler>*/;
3789 ((void (*)(val*, val*))(var_mtypes->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_mtypes, var17) /* add_all on <var_mtypes:HashSet[MType]>*/;
3790 var18 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
3791 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var18) /* toolcontext on <var18:ModelBuilder>*/;
3792 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_separate_compiler__ToolContext__opt_bm_typing]))(var19) /* opt_bm_typing on <var19:ToolContext>*/;
3793 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_opts__Option__value]))(var20) /* value on <var20:OptionBool>*/;
3794 var22 = ((struct instance_kernel__Bool*)var21)->value; /* autounbox from nullable Object to Bool */;
3795 if (var22){
3796 var23 = NEW_layout_builders__MTypeBMizer(&type_layout_builders__MTypeBMizer);
3797 var24 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3798 ((void (*)(val*, val*))(var23->class->vft[COLOR_layout_builders__MTypeBMizer__init]))(var23, var24) /* init on <var23:MTypeBMizer>*/;
3799 CHECK_NEW_layout_builders__MTypeBMizer(var23);
3800 var_layout_builder = var23;
3801 } else {
3802 var25 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
3803 var26 = ((val* (*)(val*))(var25->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var25) /* toolcontext on <var25:ModelBuilder>*/;
3804 var27 = ((val* (*)(val*))(var26->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var26) /* opt_phmod_typing on <var26:ToolContext>*/;
3805 var28 = ((val* (*)(val*))(var27->class->vft[COLOR_opts__Option__value]))(var27) /* value on <var27:OptionBool>*/;
3806 var29 = ((struct instance_kernel__Bool*)var28)->value; /* autounbox from nullable Object to Bool */;
3807 if (var29){
3808 var30 = NEW_layout_builders__MTypeHasher(&type_layout_builders__MTypeHasher);
3809 var31 = NEW_layout_builders__PHModOperator(&type_layout_builders__PHModOperator);
3810 ((void (*)(val*))(var31->class->vft[COLOR_layout_builders__PHModOperator__init]))(var31) /* init on <var31:PHModOperator>*/;
3811 CHECK_NEW_layout_builders__PHModOperator(var31);
3812 var32 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3813 ((void (*)(val*, val*, val*))(var30->class->vft[COLOR_layout_builders__MTypeHasher__init]))(var30, var31, var32) /* init on <var30:MTypeHasher>*/;
3814 CHECK_NEW_layout_builders__MTypeHasher(var30);
3815 var_layout_builder = var30;
3816 } else {
3817 var33 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
3818 var34 = ((val* (*)(val*))(var33->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var33) /* toolcontext on <var33:ModelBuilder>*/;
3819 var35 = ((val* (*)(val*))(var34->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var34) /* opt_phand_typing on <var34:ToolContext>*/;
3820 var36 = ((val* (*)(val*))(var35->class->vft[COLOR_opts__Option__value]))(var35) /* value on <var35:OptionBool>*/;
3821 var37 = ((struct instance_kernel__Bool*)var36)->value; /* autounbox from nullable Object to Bool */;
3822 if (var37){
3823 var38 = NEW_layout_builders__MTypeHasher(&type_layout_builders__MTypeHasher);
3824 var39 = NEW_layout_builders__PHAndOperator(&type_layout_builders__PHAndOperator);
3825 ((void (*)(val*))(var39->class->vft[COLOR_layout_builders__PHAndOperator__init]))(var39) /* init on <var39:PHAndOperator>*/;
3826 CHECK_NEW_layout_builders__PHAndOperator(var39);
3827 var40 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3828 ((void (*)(val*, val*, val*))(var38->class->vft[COLOR_layout_builders__MTypeHasher__init]))(var38, var39, var40) /* init on <var38:MTypeHasher>*/;
3829 CHECK_NEW_layout_builders__MTypeHasher(var38);
3830 var_layout_builder = var38;
3831 } else {
3832 var41 = NEW_layout_builders__MTypeColorer(&type_layout_builders__MTypeColorer);
3833 var42 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
3834 ((void (*)(val*, val*))(var41->class->vft[COLOR_layout_builders__MTypeColorer__init]))(var41, var42) /* init on <var41:MTypeColorer>*/;
3835 CHECK_NEW_layout_builders__MTypeColorer(var41);
3836 var_layout_builder = var41;
3837 }
3838 }
3839 }
3840 var43 = ((val* (*)(val*, val*))(var_layout_builder->class->vft[COLOR_layout_builders__TypingLayoutBuilder__build_layout]))(var_layout_builder, var_mtypes) /* build_layout on <var_layout_builder:TypingLayoutBuilder[MType]>*/;
3841 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_layout_61d]))(self, var43) /* type_layout= on <self:SeparateCompiler>*/;
3842 var44 = ((val* (*)(val*))(var_layout_builder->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(var_layout_builder) /* poset on <var_layout_builder:TypingLayoutBuilder[MType]>*/;
3843 if (var44 == NULL) {
3844 fprintf(stderr, "Runtime error: %s", "Cast failed");
3845 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 463);
3846 exit(1);
3847 }
3848 var_poset = var44;
3849 var45 = ((val* (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__build_type_tables]))(self, var_poset) /* build_type_tables on <self:SeparateCompiler>*/;
3850 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_tables_61d]))(self, var45) /* type_tables= on <self:SeparateCompiler>*/;
3851 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_resolution_tables]))(self, var_mtypes) /* compile_resolution_tables on <self:SeparateCompiler>*/;
3852 var = var_poset;
3853 goto RET_LABEL;
3854 RET_LABEL:;
3855 return var;
3856 }
3857 /* method separate_compiler#SeparateCompiler#do_type_coloring for (self: Object): POSet[MType] */
3858 val* VIRTUAL_separate_compiler__SeparateCompiler__do_type_coloring(val* self) {
3859 val* var /* : POSet[MType] */;
3860 val* var1 /* : POSet[MType] */;
3861 var1 = separate_compiler__SeparateCompiler__do_type_coloring(self);
3862 var = var1;
3863 RET_LABEL:;
3864 return var;
3865 }
3866 /* method separate_compiler#SeparateCompiler#build_type_tables for (self: SeparateCompiler, POSet[MType]): Map[MType, Array[nullable MType]] */
3867 val* separate_compiler__SeparateCompiler__build_type_tables(val* self, val* p0) {
3868 val* var /* : Map[MType, Array[nullable MType]] */;
3869 val* var_mtypes /* var mtypes: POSet[MType] */;
3870 val* var1 /* : HashMap[MType, Array[nullable MType]] */;
3871 val* var_tables /* var tables: HashMap[MType, Array[nullable MType]] */;
3872 val* var2 /* : nullable Layout[MType] */;
3873 val* var_layout /* var layout: nullable Layout[MType] */;
3874 val* var3 /* : Iterator[nullable Object] */;
3875 short int var4 /* : Bool */;
3876 val* var5 /* : nullable Object */;
3877 val* var_mtype /* var mtype: MType */;
3878 val* var6 /* : Array[nullable MType] */;
3879 val* var_table /* var table: Array[nullable MType] */;
3880 val* var7 /* : POSetElement[Object] */;
3881 val* var8 /* : Collection[Object] */;
3882 val* var9 /* : Iterator[nullable Object] */;
3883 short int var10 /* : Bool */;
3884 val* var11 /* : nullable Object */;
3885 val* var_sup /* var sup: MType */;
3886 short int var12 /* : Bool */;
3887 int cltype;
3888 int idtype;
3889 val* var13 /* : Map[Object, Map[Object, Int]] */;
3890 val* var14 /* : nullable Object */;
3891 val* var15 /* : nullable Object */;
3892 long var16 /* : Int */;
3893 long var_color /* var color: Int */;
3894 val* var17 /* : Map[Object, Int] */;
3895 val* var18 /* : nullable Object */;
3896 long var19 /* : Int */;
3897 long var20 /* : Int */;
3898 short int var21 /* : Bool */;
3899 short int var23 /* : Bool */;
3900 int cltype24;
3901 int idtype25;
3902 const char* var_class_name;
3903 short int var26 /* : Bool */;
3904 val* var27 /* : Range[Int] */;
3905 long var28 /* : Int */;
3906 val* var29 /* : Discrete */;
3907 val* var30 /* : Discrete */;
3908 val* var31 /* : Iterator[nullable Object] */;
3909 short int var32 /* : Bool */;
3910 val* var33 /* : nullable Object */;
3911 long var_i /* var i: Int */;
3912 long var34 /* : Int */;
3913 val* var35 /* : null */;
3914 var_mtypes = p0;
3915 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypearray__Arraynullable_model__MType);
3916 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MType, Array[nullable MType]]>*/;
3917 CHECK_NEW_hash_collection__HashMap(var1);
3918 var_tables = var1;
3919 var2 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_layout]))(self) /* type_layout on <self:SeparateCompiler>*/;
3920 var_layout = var2;
3921 var3 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:POSet[MType]>*/;
3922 for(;;) {
3923 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
3924 if(!var4) break;
3925 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
3926 var_mtype = var5;
3927 var6 = NEW_array__Array(&type_array__Arraynullable_model__MType);
3928 ((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[nullable MType]>*/;
3929 CHECK_NEW_array__Array(var6);
3930 var_table = var6;
3931 var7 = ((val* (*)(val*, val*))(var_mtypes->class->vft[COLOR_poset__POSet___91d_93d]))(var_mtypes, var_mtype) /* [] on <var_mtypes:POSet[MType]>*/;
3932 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_poset__POSetElement__greaters]))(var7) /* greaters on <var7:POSetElement[Object](POSetElement[MType])>*/;
3933 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Collection__iterator]))(var8) /* iterator on <var8:Collection[Object](Collection[MType])>*/;
3934 for(;;) {
3935 var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
3936 if(!var10) break;
3937 var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
3938 var_sup = var11;
3939 /* <var_layout:nullable Layout[MType]> isa PHLayout[MType, MType] */
3940 cltype = type_layout_builders__PHLayoutmodel__MTypemodel__MType.color;
3941 idtype = type_layout_builders__PHLayoutmodel__MTypemodel__MType.id;
3942 if(var_layout == NULL) {
3943 var12 = 0;
3944 } else {
3945 if(cltype >= var_layout->type->table_size) {
3946 var12 = 0;
3947 } else {
3948 var12 = var_layout->type->type_table[cltype] == idtype;
3949 }
3950 }
3951 if (var12){
3952 var13 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__hashes]))(var_layout) /* hashes on <var_layout:nullable Layout[MType](PHLayout[MType, MType])>*/;
3953 var14 = ((val* (*)(val*, val*))(var13->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var13, var_mtype) /* [] on <var13:Map[Object, Map[Object, Int]](Map[MType, Map[MType, Int]])>*/;
3954 var15 = ((val* (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var14, var_sup) /* [] on <var14:nullable Object(Map[MType, Int])>*/;
3955 var16 = ((struct instance_kernel__Int*)var15)->value; /* autounbox from nullable Object to Int */;
3956 var_color = var16;
3957 } else {
3958 if (var_layout == NULL) {
3959 fprintf(stderr, "Runtime error: %s", "Reciever is null");
3960 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 483);
3961 exit(1);
3962 } else {
3963 var17 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MType]>*/;
3964 }
3965 var18 = ((val* (*)(val*, val*))(var17->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var17, var_sup) /* [] on <var17:Map[Object, Int](Map[MType, Int])>*/;
3966 var19 = ((struct instance_kernel__Int*)var18)->value; /* autounbox from nullable Object to Int */;
3967 var_color = var19;
3968 }
3969 var20 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MType]>*/;
3970 { /* Inline kernel#Int#<= (var20,var_color) */
3971 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
3972 /* <var_color:Int> isa OTHER */
3973 var23 = 1; /* easy <var_color:Int> isa OTHER*/
3974 if (!var23) {
3975 var_class_name = type_kernel__Int.name;
3976 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
3977 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
3978 exit(1);
3979 }
3980 var26 = var20 <= var_color;
3981 var21 = var26;
3982 goto RET_LABEL22;
3983 RET_LABEL22:(void)0;
3984 }
3985 if (var21){
3986 var27 = NEW_range__Range(&type_range__Rangekernel__Int);
3987 var28 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MType]>*/;
3988 var29 = BOX_kernel__Int(var28); /* autobox from Int to Discrete */
3989 var30 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
3990 ((void (*)(val*, val*, val*))(var27->class->vft[COLOR_range__Range__without_last]))(var27, var29, var30) /* without_last on <var27:Range[Int]>*/;
3991 CHECK_NEW_range__Range(var27);
3992 var31 = ((val* (*)(val*))(var27->class->vft[COLOR_abstract_collection__Collection__iterator]))(var27) /* iterator on <var27:Range[Int]>*/;
3993 for(;;) {
3994 var32 = ((short int (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var31) /* is_ok on <var31:Iterator[nullable Object]>*/;
3995 if(!var32) break;
3996 var33 = ((val* (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator__item]))(var31) /* item on <var31:Iterator[nullable Object]>*/;
3997 var34 = ((struct instance_kernel__Int*)var33)->value; /* autounbox from nullable Object to Int */;
3998 var_i = var34;
3999 var35 = NULL;
4000 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i, var35) /* []= on <var_table:Array[nullable MType]>*/;
4001 CONTINUE_label: (void)0;
4002 ((void (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator__next]))(var31) /* next on <var31:Iterator[nullable Object]>*/;
4003 }
4004 BREAK_label: (void)0;
4005 } else {
4006 }
4007 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color, var_sup) /* []= on <var_table:Array[nullable MType]>*/;
4008 CONTINUE_label36: (void)0;
4009 ((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
4010 }
4011 BREAK_label36: (void)0;
4012 ((void (*)(val*, val*, val*))(var_tables->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_tables, var_mtype, var_table) /* []= on <var_tables:HashMap[MType, Array[nullable MType]]>*/;
4013 CONTINUE_label37: (void)0;
4014 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
4015 }
4016 BREAK_label37: (void)0;
4017 var = var_tables;
4018 goto RET_LABEL;
4019 RET_LABEL:;
4020 return var;
4021 }
4022 /* method separate_compiler#SeparateCompiler#build_type_tables for (self: Object, POSet[MType]): Map[MType, Array[nullable MType]] */
4023 val* VIRTUAL_separate_compiler__SeparateCompiler__build_type_tables(val* self, val* p0) {
4024 val* var /* : Map[MType, Array[nullable MType]] */;
4025 val* var1 /* : Map[MType, Array[nullable MType]] */;
4026 var1 = separate_compiler__SeparateCompiler__build_type_tables(self, p0);
4027 var = var1;
4028 RET_LABEL:;
4029 return var;
4030 }
4031 /* method separate_compiler#SeparateCompiler#compile_resolution_tables for (self: SeparateCompiler, Set[MType]) */
4032 void separate_compiler__SeparateCompiler__compile_resolution_tables(val* self, val* p0) {
4033 val* var_mtypes /* var mtypes: Set[MType] */;
4034 val* var /* : HashMap[MClassType, Set[MType]] */;
4035 val* var_mtype2unresolved /* var mtype2unresolved: HashMap[MClassType, Set[MType]] */;
4036 val* var1 /* : RapidTypeAnalysis */;
4037 val* var2 /* : HashSet[MClassType] */;
4038 val* var3 /* : Iterator[nullable Object] */;
4039 short int var4 /* : Bool */;
4040 val* var5 /* : nullable Object */;
4041 val* var_mtype /* var mtype: MClassType */;
4042 val* var6 /* : HashSet[MType] */;
4043 val* var_set /* var set: HashSet[MType] */;
4044 val* var7 /* : MModule */;
4045 val* var8 /* : Set[MClassDef] */;
4046 val* var9 /* : Iterator[nullable Object] */;
4047 short int var10 /* : Bool */;
4048 val* var11 /* : nullable Object */;
4049 val* var_cd /* var cd: MClassDef */;
4050 val* var12 /* : Map[MClassDef, Set[MType]] */;
4051 short int var13 /* : Bool */;
4052 val* var14 /* : Map[MClassDef, Set[MType]] */;
4053 val* var15 /* : nullable Object */;
4054 val* var17 /* : ModelBuilder */;
4055 val* var18 /* : ToolContext */;
4056 val* var19 /* : OptionBool */;
4057 val* var20 /* : nullable Object */;
4058 short int var21 /* : Bool */;
4059 val* var22 /* : ResolutionBMizer */;
4060 val* var_resolution_builder /* var resolution_builder: ResolutionLayoutBuilder */;
4061 val* var23 /* : ModelBuilder */;
4062 val* var24 /* : ToolContext */;
4063 val* var25 /* : OptionBool */;
4064 val* var26 /* : nullable Object */;
4065 short int var27 /* : Bool */;
4066 val* var28 /* : ResolutionHasher */;
4067 val* var29 /* : PHModOperator */;
4068 val* var30 /* : ModelBuilder */;
4069 val* var31 /* : ToolContext */;
4070 val* var32 /* : OptionBool */;
4071 val* var33 /* : nullable Object */;
4072 short int var34 /* : Bool */;
4073 val* var35 /* : ResolutionHasher */;
4074 val* var36 /* : PHAndOperator */;
4075 val* var37 /* : ResolutionColorer */;
4076 val* var38 /* : Layout[MType] */;
4077 val* var39 /* : Map[MClassType, Array[nullable MType]] */;
4078 val* var40 /* : HashSet[MType] */;
4079 val* var_all_unresolved /* var all_unresolved: HashSet[MType] */;
4080 val* var41 /* : Map[MClassDef, Set[MType]] */;
4081 val* var42 /* : Collection[nullable Object] */;
4082 val* var43 /* : Iterator[nullable Object] */;
4083 short int var44 /* : Bool */;
4084 val* var45 /* : nullable Object */;
4085 val* var_t /* var t: Set[MType] */;
4086 val* var47 /* : HashMap[MType, Int] */;
4087 val* var_all_unresolved_types_colors /* var all_unresolved_types_colors: HashMap[MType, Int] */;
4088 val* var48 /* : Iterator[nullable Object] */;
4089 short int var49 /* : Bool */;
4090 val* var50 /* : nullable Object */;
4091 val* var_t51 /* var t: MType */;
4092 val* var52 /* : nullable Layout[MType] */;
4093 val* var53 /* : Map[Object, Int] */;
4094 short int var54 /* : Bool */;
4095 val* var55 /* : nullable Layout[MType] */;
4096 val* var56 /* : Map[Object, Int] */;
4097 val* var57 /* : nullable Object */;
4098 long var58 /* : Int */;
4099 long var59 /* : Int */;
4100 long var61 /* : Int */;
4101 val* var62 /* : nullable Object */;
4102 var_mtypes = p0;
4103 var = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassTypeabstract_collection__Setmodel__MType);
4104 ((void (*)(val*))(var->class->vft[COLOR_hash_collection__HashMap__init]))(var) /* init on <var:HashMap[MClassType, Set[MType]]>*/;
4105 CHECK_NEW_hash_collection__HashMap(var);
4106 var_mtype2unresolved = var;
4107 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:SeparateCompiler>*/;
4108 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var1) /* live_types on <var1:RapidTypeAnalysis>*/;
4109 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:HashSet[MClassType]>*/;
4110 for(;;) {
4111 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
4112 if(!var4) break;
4113 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
4114 var_mtype = var5;
4115 var6 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
4116 ((void (*)(val*))(var6->class->vft[COLOR_hash_collection__HashSet__init]))(var6) /* init on <var6:HashSet[MType]>*/;
4117 CHECK_NEW_hash_collection__HashSet(var6);
4118 var_set = var6;
4119 var7 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
4120 var8 = ((val* (*)(val*, val*))(var_mtype->class->vft[COLOR_model__MType__collect_mclassdefs]))(var_mtype, var7) /* collect_mclassdefs on <var_mtype:MClassType>*/;
4121 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Collection__iterator]))(var8) /* iterator on <var8:Set[MClassDef]>*/;
4122 for(;;) {
4123 var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
4124 if(!var10) break;
4125 var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
4126 var_cd = var11;
4127 var12 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__live_unresolved_types]))(self) /* live_unresolved_types on <self:SeparateCompiler>*/;
4128 var13 = ((short int (*)(val*, val*))(var12->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var12, var_cd) /* has_key on <var12:Map[MClassDef, Set[MType]]>*/;
4129 if (var13){
4130 var14 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__live_unresolved_types]))(self) /* live_unresolved_types on <self:SeparateCompiler>*/;
4131 var15 = ((val* (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var14, var_cd) /* [] on <var14:Map[MClassDef, Set[MType]]>*/;
4132 ((void (*)(val*, val*))(var_set->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_set, var15) /* add_all on <var_set:HashSet[MType]>*/;
4133 } else {
4134 }
4135 CONTINUE_label: (void)0;
4136 ((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
4137 }
4138 BREAK_label: (void)0;
4139 ((void (*)(val*, val*, val*))(var_mtype2unresolved->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_mtype2unresolved, var_mtype, var_set) /* []= on <var_mtype2unresolved:HashMap[MClassType, Set[MType]]>*/;
4140 CONTINUE_label16: (void)0;
4141 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
4142 }
4143 BREAK_label16: (void)0;
4144 var17 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
4145 var18 = ((val* (*)(val*))(var17->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var17) /* toolcontext on <var17:ModelBuilder>*/;
4146 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_separate_compiler__ToolContext__opt_bm_typing]))(var18) /* opt_bm_typing on <var18:ToolContext>*/;
4147 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_opts__Option__value]))(var19) /* value on <var19:OptionBool>*/;
4148 var21 = ((struct instance_kernel__Bool*)var20)->value; /* autounbox from nullable Object to Bool */;
4149 if (var21){
4150 var22 = NEW_layout_builders__ResolutionBMizer(&type_layout_builders__ResolutionBMizer);
4151 ((void (*)(val*))(var22->class->vft[COLOR_layout_builders__ResolutionBMizer__init]))(var22) /* init on <var22:ResolutionBMizer>*/;
4152 CHECK_NEW_layout_builders__ResolutionBMizer(var22);
4153 var_resolution_builder = var22;
4154 } else {
4155 var23 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
4156 var24 = ((val* (*)(val*))(var23->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var23) /* toolcontext on <var23:ModelBuilder>*/;
4157 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var24) /* opt_phmod_typing on <var24:ToolContext>*/;
4158 var26 = ((val* (*)(val*))(var25->class->vft[COLOR_opts__Option__value]))(var25) /* value on <var25:OptionBool>*/;
4159 var27 = ((struct instance_kernel__Bool*)var26)->value; /* autounbox from nullable Object to Bool */;
4160 if (var27){
4161 var28 = NEW_layout_builders__ResolutionHasher(&type_layout_builders__ResolutionHasher);
4162 var29 = NEW_layout_builders__PHModOperator(&type_layout_builders__PHModOperator);
4163 ((void (*)(val*))(var29->class->vft[COLOR_layout_builders__PHModOperator__init]))(var29) /* init on <var29:PHModOperator>*/;
4164 CHECK_NEW_layout_builders__PHModOperator(var29);
4165 ((void (*)(val*, val*))(var28->class->vft[COLOR_layout_builders__ResolutionHasher__init]))(var28, var29) /* init on <var28:ResolutionHasher>*/;
4166 CHECK_NEW_layout_builders__ResolutionHasher(var28);
4167 var_resolution_builder = var28;
4168 } else {
4169 var30 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
4170 var31 = ((val* (*)(val*))(var30->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var30) /* toolcontext on <var30:ModelBuilder>*/;
4171 var32 = ((val* (*)(val*))(var31->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var31) /* opt_phand_typing on <var31:ToolContext>*/;
4172 var33 = ((val* (*)(val*))(var32->class->vft[COLOR_opts__Option__value]))(var32) /* value on <var32:OptionBool>*/;
4173 var34 = ((struct instance_kernel__Bool*)var33)->value; /* autounbox from nullable Object to Bool */;
4174 if (var34){
4175 var35 = NEW_layout_builders__ResolutionHasher(&type_layout_builders__ResolutionHasher);
4176 var36 = NEW_layout_builders__PHAndOperator(&type_layout_builders__PHAndOperator);
4177 ((void (*)(val*))(var36->class->vft[COLOR_layout_builders__PHAndOperator__init]))(var36) /* init on <var36:PHAndOperator>*/;
4178 CHECK_NEW_layout_builders__PHAndOperator(var36);
4179 ((void (*)(val*, val*))(var35->class->vft[COLOR_layout_builders__ResolutionHasher__init]))(var35, var36) /* init on <var35:ResolutionHasher>*/;
4180 CHECK_NEW_layout_builders__ResolutionHasher(var35);
4181 var_resolution_builder = var35;
4182 } else {
4183 var37 = NEW_layout_builders__ResolutionColorer(&type_layout_builders__ResolutionColorer);
4184 ((void (*)(val*))(var37->class->vft[COLOR_layout_builders__ResolutionColorer__init]))(var37) /* init on <var37:ResolutionColorer>*/;
4185 CHECK_NEW_layout_builders__ResolutionColorer(var37);
4186 var_resolution_builder = var37;
4187 }
4188 }
4189 }
4190 var38 = ((val* (*)(val*, val*))(var_resolution_builder->class->vft[COLOR_layout_builders__ResolutionLayoutBuilder__build_layout]))(var_resolution_builder, var_mtype2unresolved) /* build_layout on <var_resolution_builder:ResolutionLayoutBuilder>*/;
4191 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__resolution_layout_61d]))(self, var38) /* resolution_layout= on <self:SeparateCompiler>*/;
4192 var39 = ((val* (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__build_resolution_tables]))(self, var_mtype2unresolved) /* build_resolution_tables on <self:SeparateCompiler>*/;
4193 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__resolution_tables_61d]))(self, var39) /* resolution_tables= on <self:SeparateCompiler>*/;
4194 var40 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
4195 ((void (*)(val*))(var40->class->vft[COLOR_hash_collection__HashSet__init]))(var40) /* init on <var40:HashSet[MType]>*/;
4196 CHECK_NEW_hash_collection__HashSet(var40);
4197 var_all_unresolved = var40;
4198 var41 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__live_unresolved_types]))(self) /* live_unresolved_types on <self:SeparateCompiler>*/;
4199 var42 = ((val* (*)(val*))(var41->class->vft[COLOR_abstract_collection__MapRead__values]))(var41) /* values on <var41:Map[MClassDef, Set[MType]]>*/;
4200 var43 = ((val* (*)(val*))(var42->class->vft[COLOR_abstract_collection__Collection__iterator]))(var42) /* iterator on <var42:Collection[nullable Object](RemovableCollection[Set[MType]])>*/;
4201 for(;;) {
4202 var44 = ((short int (*)(val*))(var43->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var43) /* is_ok on <var43:Iterator[nullable Object]>*/;
4203 if(!var44) break;
4204 var45 = ((val* (*)(val*))(var43->class->vft[COLOR_abstract_collection__Iterator__item]))(var43) /* item on <var43:Iterator[nullable Object]>*/;
4205 var_t = var45;
4206 ((void (*)(val*, val*))(var_all_unresolved->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_all_unresolved, var_t) /* add_all on <var_all_unresolved:HashSet[MType]>*/;
4207 CONTINUE_label46: (void)0;
4208 ((void (*)(val*))(var43->class->vft[COLOR_abstract_collection__Iterator__next]))(var43) /* next on <var43:Iterator[nullable Object]>*/;
4209 }
4210 BREAK_label46: (void)0;
4211 var47 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypekernel__Int);
4212 ((void (*)(val*))(var47->class->vft[COLOR_hash_collection__HashMap__init]))(var47) /* init on <var47:HashMap[MType, Int]>*/;
4213 CHECK_NEW_hash_collection__HashMap(var47);
4214 var_all_unresolved_types_colors = var47;
4215 var48 = ((val* (*)(val*))(var_all_unresolved->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_all_unresolved) /* iterator on <var_all_unresolved:HashSet[MType]>*/;
4216 for(;;) {
4217 var49 = ((short int (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var48) /* is_ok on <var48:Iterator[nullable Object]>*/;
4218 if(!var49) break;
4219 var50 = ((val* (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__item]))(var48) /* item on <var48:Iterator[nullable Object]>*/;
4220 var_t51 = var50;
4221 var52 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__resolution_layout]))(self) /* resolution_layout on <self:SeparateCompiler>*/;
4222 if (var52 == NULL) {
4223 fprintf(stderr, "Runtime error: %s", "Reciever is null");
4224 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 538);
4225 exit(1);
4226 } else {
4227 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_layout_builders__Layout__pos]))(var52) /* pos on <var52:nullable Layout[MType]>*/;
4228 }
4229 var54 = ((short int (*)(val*, val*))(var53->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var53, var_t51) /* has_key on <var53:Map[Object, Int](Map[MType, Int])>*/;
4230 if (var54){
4231 var55 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__resolution_layout]))(self) /* resolution_layout on <self:SeparateCompiler>*/;
4232 if (var55 == NULL) {
4233 fprintf(stderr, "Runtime error: %s", "Reciever is null");
4234 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 539);
4235 exit(1);
4236 } else {
4237 var56 = ((val* (*)(val*))(var55->class->vft[COLOR_layout_builders__Layout__pos]))(var55) /* pos on <var55:nullable Layout[MType]>*/;
4238 }
4239 var57 = ((val* (*)(val*, val*))(var56->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var56, var_t51) /* [] on <var56:Map[Object, Int](Map[MType, Int])>*/;
4240 ((void (*)(val*, val*, val*))(var_all_unresolved_types_colors->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_all_unresolved_types_colors, var_t51, var57) /* []= on <var_all_unresolved_types_colors:HashMap[MType, Int]>*/;
4241 } else {
4242 var58 = 1;
4243 { /* Inline kernel#Int#unary - (var58) */
4244 var61 = -var58;
4245 var59 = var61;
4246 goto RET_LABEL60;
4247 RET_LABEL60:(void)0;
4248 }
4249 var62 = BOX_kernel__Int(var59); /* autobox from Int to nullable Object */
4250 ((void (*)(val*, val*, val*))(var_all_unresolved_types_colors->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_all_unresolved_types_colors, var_t51, var62) /* []= on <var_all_unresolved_types_colors:HashMap[MType, Int]>*/;
4251 }
4252 CONTINUE_label63: (void)0;
4253 ((void (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__next]))(var48) /* next on <var48:Iterator[nullable Object]>*/;
4254 }
4255 BREAK_label63: (void)0;
4256 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_color_consts]))(self, var_all_unresolved_types_colors) /* compile_color_consts on <self:SeparateCompiler>*/;
4257 RET_LABEL:;
4258 }
4259 /* method separate_compiler#SeparateCompiler#compile_resolution_tables for (self: Object, Set[MType]) */
4260 void VIRTUAL_separate_compiler__SeparateCompiler__compile_resolution_tables(val* self, val* p0) {
4261 separate_compiler__SeparateCompiler__compile_resolution_tables(self, p0);
4262 RET_LABEL:;
4263 }
4264 /* method separate_compiler#SeparateCompiler#build_resolution_tables for (self: SeparateCompiler, Map[MClassType, Set[MType]]): Map[MClassType, Array[nullable MType]] */
4265 val* separate_compiler__SeparateCompiler__build_resolution_tables(val* self, val* p0) {
4266 val* var /* : Map[MClassType, Array[nullable MType]] */;
4267 val* var_elements /* var elements: Map[MClassType, Set[MType]] */;
4268 val* var1 /* : HashMap[MClassType, Array[nullable MType]] */;
4269 val* var_tables /* var tables: HashMap[MClassType, Array[nullable MType]] */;
4270 val* var2 /* : nullable Layout[MType] */;
4271 val* var_layout /* var layout: nullable Layout[MType] */;
4272 val* var3 /* : MapIterator[Object, nullable Object] */;
4273 short int var4 /* : Bool */;
4274 val* var5 /* : Object */;
4275 val* var_mclasstype /* var mclasstype: MClassType */;
4276 val* var6 /* : nullable Object */;
4277 val* var_mtypes /* var mtypes: Set[MType] */;
4278 val* var7 /* : Array[nullable MType] */;
4279 val* var_table /* var table: Array[nullable MType] */;
4280 val* var8 /* : Iterator[nullable Object] */;
4281 short int var9 /* : Bool */;
4282 val* var10 /* : nullable Object */;
4283 val* var_mtype /* var mtype: MType */;
4284 short int var11 /* : Bool */;
4285 int cltype;
4286 int idtype;
4287 val* var12 /* : Map[Object, Map[Object, Int]] */;
4288 val* var13 /* : nullable Object */;
4289 val* var14 /* : nullable Object */;
4290 long var15 /* : Int */;
4291 long var_color /* var color: Int */;
4292 val* var16 /* : Map[Object, Int] */;
4293 val* var17 /* : nullable Object */;
4294 long var18 /* : Int */;
4295 long var19 /* : Int */;
4296 short int var20 /* : Bool */;
4297 short int var22 /* : Bool */;
4298 int cltype23;
4299 int idtype24;
4300 const char* var_class_name;
4301 short int var25 /* : Bool */;
4302 val* var26 /* : Range[Int] */;
4303 long var27 /* : Int */;
4304 val* var28 /* : Discrete */;
4305 val* var29 /* : Discrete */;
4306 val* var30 /* : Iterator[nullable Object] */;
4307 short int var31 /* : Bool */;
4308 val* var32 /* : nullable Object */;
4309 long var_i /* var i: Int */;
4310 long var33 /* : Int */;
4311 val* var34 /* : null */;
4312 var_elements = p0;
4313 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassTypearray__Arraynullable_model__MType);
4314 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MClassType, Array[nullable MType]]>*/;
4315 CHECK_NEW_hash_collection__HashMap(var1);
4316 var_tables = var1;
4317 var2 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__resolution_layout]))(self) /* resolution_layout on <self:SeparateCompiler>*/;
4318 var_layout = var2;
4319 var3 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_elements) /* iterator on <var_elements:Map[MClassType, Set[MType]]>*/;
4320 for(;;) {
4321 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var3) /* is_ok on <var3:MapIterator[Object, nullable Object]>*/;
4322 if(!var4) break;
4323 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__key]))(var3) /* key on <var3:MapIterator[Object, nullable Object]>*/;
4324 var_mclasstype = var5;
4325 var6 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__item]))(var3) /* item on <var3:MapIterator[Object, nullable Object]>*/;
4326 var_mtypes = var6;
4327 var7 = NEW_array__Array(&type_array__Arraynullable_model__MType);
4328 ((void (*)(val*))(var7->class->vft[COLOR_array__Array__init]))(var7) /* init on <var7:Array[nullable MType]>*/;
4329 CHECK_NEW_array__Array(var7);
4330 var_table = var7;
4331 var8 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:Set[MType]>*/;
4332 for(;;) {
4333 var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var8) /* is_ok on <var8:Iterator[nullable Object]>*/;
4334 if(!var9) break;
4335 var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__item]))(var8) /* item on <var8:Iterator[nullable Object]>*/;
4336 var_mtype = var10;
4337 /* <var_layout:nullable Layout[MType]> isa PHLayout[MClassType, MType] */
4338 cltype = type_layout_builders__PHLayoutmodel__MClassTypemodel__MType.color;
4339 idtype = type_layout_builders__PHLayoutmodel__MClassTypemodel__MType.id;
4340 if(var_layout == NULL) {
4341 var11 = 0;
4342 } else {
4343 if(cltype >= var_layout->type->table_size) {
4344 var11 = 0;
4345 } else {
4346 var11 = var_layout->type->type_table[cltype] == idtype;
4347 }
4348 }
4349 if (var11){
4350 var12 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__hashes]))(var_layout) /* hashes on <var_layout:nullable Layout[MType](PHLayout[MClassType, MType])>*/;
4351 var13 = ((val* (*)(val*, val*))(var12->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var12, var_mclasstype) /* [] on <var12:Map[Object, Map[Object, Int]](Map[MClassType, Map[MType, Int]])>*/;
4352 var14 = ((val* (*)(val*, val*))(var13->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var13, var_mtype) /* [] on <var13:nullable Object(Map[MType, Int])>*/;
4353 var15 = ((struct instance_kernel__Int*)var14)->value; /* autounbox from nullable Object to Int */;
4354 var_color = var15;
4355 } else {
4356 if (var_layout == NULL) {
4357 fprintf(stderr, "Runtime error: %s", "Reciever is null");
4358 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 563);
4359 exit(1);
4360 } else {
4361 var16 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MType]>*/;
4362 }
4363 var17 = ((val* (*)(val*, val*))(var16->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var16, var_mtype) /* [] on <var16:Map[Object, Int](Map[MType, Int])>*/;
4364 var18 = ((struct instance_kernel__Int*)var17)->value; /* autounbox from nullable Object to Int */;
4365 var_color = var18;
4366 }
4367 var19 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MType]>*/;
4368 { /* Inline kernel#Int#<= (var19,var_color) */
4369 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
4370 /* <var_color:Int> isa OTHER */
4371 var22 = 1; /* easy <var_color:Int> isa OTHER*/
4372 if (!var22) {
4373 var_class_name = type_kernel__Int.name;
4374 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
4375 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
4376 exit(1);
4377 }
4378 var25 = var19 <= var_color;
4379 var20 = var25;
4380 goto RET_LABEL21;
4381 RET_LABEL21:(void)0;
4382 }
4383 if (var20){
4384 var26 = NEW_range__Range(&type_range__Rangekernel__Int);
4385 var27 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MType]>*/;
4386 var28 = BOX_kernel__Int(var27); /* autobox from Int to Discrete */
4387 var29 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
4388 ((void (*)(val*, val*, val*))(var26->class->vft[COLOR_range__Range__without_last]))(var26, var28, var29) /* without_last on <var26:Range[Int]>*/;
4389 CHECK_NEW_range__Range(var26);
4390 var30 = ((val* (*)(val*))(var26->class->vft[COLOR_abstract_collection__Collection__iterator]))(var26) /* iterator on <var26:Range[Int]>*/;
4391 for(;;) {
4392 var31 = ((short int (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var30) /* is_ok on <var30:Iterator[nullable Object]>*/;
4393 if(!var31) break;
4394 var32 = ((val* (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__item]))(var30) /* item on <var30:Iterator[nullable Object]>*/;
4395 var33 = ((struct instance_kernel__Int*)var32)->value; /* autounbox from nullable Object to Int */;
4396 var_i = var33;
4397 var34 = NULL;
4398 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i, var34) /* []= on <var_table:Array[nullable MType]>*/;
4399 CONTINUE_label: (void)0;
4400 ((void (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__next]))(var30) /* next on <var30:Iterator[nullable Object]>*/;
4401 }
4402 BREAK_label: (void)0;
4403 } else {
4404 }
4405 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color, var_mtype) /* []= on <var_table:Array[nullable MType]>*/;
4406 CONTINUE_label35: (void)0;
4407 ((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
4408 }
4409 BREAK_label35: (void)0;
4410 ((void (*)(val*, val*, val*))(var_tables->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_tables, var_mclasstype, var_table) /* []= on <var_tables:HashMap[MClassType, Array[nullable MType]]>*/;
4411 CONTINUE_label36: (void)0;
4412 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__next]))(var3) /* next on <var3:MapIterator[Object, nullable Object]>*/;
4413 }
4414 BREAK_label36: (void)0;
4415 var = var_tables;
4416 goto RET_LABEL;
4417 RET_LABEL:;
4418 return var;
4419 }
4420 /* method separate_compiler#SeparateCompiler#build_resolution_tables for (self: Object, Map[MClassType, Set[MType]]): Map[MClassType, Array[nullable MType]] */
4421 val* VIRTUAL_separate_compiler__SeparateCompiler__build_resolution_tables(val* self, val* p0) {
4422 val* var /* : Map[MClassType, Array[nullable MType]] */;
4423 val* var1 /* : Map[MClassType, Array[nullable MType]] */;
4424 var1 = separate_compiler__SeparateCompiler__build_resolution_tables(self, p0);
4425 var = var1;
4426 RET_LABEL:;
4427 return var;
4428 }
4429 /* method separate_compiler#SeparateCompiler#retrieve_partial_types for (self: SeparateCompiler, MType) */
4430 void separate_compiler__SeparateCompiler__retrieve_partial_types(val* self, val* p0) {
4431 val* var_mtype /* var mtype: MType */;
4432 short int var /* : Bool */;
4433 int cltype;
4434 int idtype;
4435 val* var1 /* : Array[MType] */;
4436 val* var2 /* : Iterator[nullable Object] */;
4437 short int var3 /* : Bool */;
4438 val* var4 /* : nullable Object */;
4439 val* var_ft /* var ft: MType */;
4440 short int var5 /* : Bool */;
4441 static val* varonce;
4442 val* var6 /* : String */;
4443 char* var7 /* : NativeString */;
4444 long var8 /* : Int */;
4445 val* var9 /* : String */;
4446 val* var10 /* : Set[MType] */;
4447 short int var11 /* : Bool */;
4448 int cltype12;
4449 int idtype13;
4450 val* var14 /* : MType */;
4451 short int var15 /* : Bool */;
4452 int cltype16;
4453 int idtype17;
4454 const char* var_class_name;
4455 val* var_mclass_type /* var mclass_type: MClassType */;
4456 short int var18 /* : Bool */;
4457 int cltype19;
4458 int idtype20;
4459 const char* var_class_name21;
4460 val* var22 /* : MModule */;
4461 val* var23 /* : MClass */;
4462 val* var24 /* : Set[MProperty] */;
4463 val* var25 /* : Iterator[nullable Object] */;
4464 short int var26 /* : Bool */;
4465 val* var27 /* : nullable Object */;
4466 val* var_vt /* var vt: MProperty */;
4467 short int var28 /* : Bool */;
4468 int cltype29;
4469 int idtype30;
4470 val* var31 /* : MVirtualType */;
4471 val* var32 /* : MModule */;
4472 val* var33 /* : MType */;
4473 val* var34 /* : MModule */;
4474 val* var35 /* : MType */;
4475 val* var_anchored /* var anchored: MType */;
4476 val* var36 /* : Set[MType] */;
4477 var_mtype = p0;
4478 /* <var_mtype:MType> isa MGenericType */
4479 cltype = type_model__MGenericType.color;
4480 idtype = type_model__MGenericType.id;
4481 if(cltype >= var_mtype->type->table_size) {
4482 var = 0;
4483 } else {
4484 var = var_mtype->type->type_table[cltype] == idtype;
4485 }
4486 if (var){
4487 var1 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MType(MGenericType)>*/;
4488 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__iterator]))(var1) /* iterator on <var1:Array[MType]>*/;
4489 for(;;) {
4490 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
4491 if(!var3) break;
4492 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
4493 var_ft = var4;
4494 var5 = ((short int (*)(val*))(var_ft->class->vft[COLOR_model__MType__need_anchor]))(var_ft) /* need_anchor on <var_ft:MType>*/;
4495 if (var5){
4496 if (varonce) {
4497 var6 = varonce;
4498 } else {
4499 var7 = "Why do we need anchor here ?";
4500 var8 = 28;
4501 var9 = string__NativeString__to_s_with_length(var7, var8);
4502 var6 = var9;
4503 varonce = var6;
4504 }
4505 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var6) /* print on <self:SeparateCompiler>*/;
4506 fprintf(stderr, "Runtime error: %s", "Aborted");
4507 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 583);
4508 exit(1);
4509 } else {
4510 }
4511 var10 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__partial_types]))(self) /* partial_types on <self:SeparateCompiler>*/;
4512 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var10, var_ft) /* add on <var10:Set[MType]>*/;
4513 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__retrieve_partial_types]))(self, var_ft) /* retrieve_partial_types on <self:SeparateCompiler>*/;
4514 CONTINUE_label: (void)0;
4515 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
4516 }
4517 BREAK_label: (void)0;
4518 } else {
4519 }
4520 /* <var_mtype:MType> isa MNullableType */
4521 cltype12 = type_model__MNullableType.color;
4522 idtype13 = type_model__MNullableType.id;
4523 if(cltype12 >= var_mtype->type->table_size) {
4524 var11 = 0;
4525 } else {
4526 var11 = var_mtype->type->type_table[cltype12] == idtype13;
4527 }
4528 if (var11){
4529 var14 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
4530 /* <var14:MType> isa MClassType */
4531 cltype16 = type_model__MClassType.color;
4532 idtype17 = type_model__MClassType.id;
4533 if(cltype16 >= var14->type->table_size) {
4534 var15 = 0;
4535 } else {
4536 var15 = var14->type->type_table[cltype16] == idtype17;
4537 }
4538 if (!var15) {
4539 var_class_name = var14 == NULL ? "null" : var14->type->name;
4540 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
4541 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 591);
4542 exit(1);
4543 }
4544 var_mclass_type = var14;
4545 } else {
4546 /* <var_mtype:MType> isa MClassType */
4547 cltype19 = type_model__MClassType.color;
4548 idtype20 = type_model__MClassType.id;
4549 if(cltype19 >= var_mtype->type->table_size) {
4550 var18 = 0;
4551 } else {
4552 var18 = var_mtype->type->type_table[cltype19] == idtype20;
4553 }
4554 if (!var18) {
4555 var_class_name21 = var_mtype == NULL ? "null" : var_mtype->type->name;
4556 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name21);
4557 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 593);
4558 exit(1);
4559 }
4560 var_mclass_type = var_mtype;
4561 }
4562 var22 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
4563 var23 = ((val* (*)(val*))(var_mclass_type->class->vft[COLOR_model__MClassType__mclass]))(var_mclass_type) /* mclass on <var_mclass_type:MClassType>*/;
4564 var24 = ((val* (*)(val*, val*))(var22->class->vft[COLOR_abstract_compiler__MModule__properties]))(var22, var23) /* properties on <var22:MModule>*/;
4565 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_abstract_collection__Collection__iterator]))(var24) /* iterator on <var24:Set[MProperty]>*/;
4566 for(;;) {
4567 var26 = ((short int (*)(val*))(var25->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var25) /* is_ok on <var25:Iterator[nullable Object]>*/;
4568 if(!var26) break;
4569 var27 = ((val* (*)(val*))(var25->class->vft[COLOR_abstract_collection__Iterator__item]))(var25) /* item on <var25:Iterator[nullable Object]>*/;
4570 var_vt = var27;
4571 /* <var_vt:MProperty> isa MVirtualTypeProp */
4572 cltype29 = type_model__MVirtualTypeProp.color;
4573 idtype30 = type_model__MVirtualTypeProp.id;
4574 if(cltype29 >= var_vt->type->table_size) {
4575 var28 = 0;
4576 } else {
4577 var28 = var_vt->type->type_table[cltype29] == idtype30;
4578 }
4579 if (var28){
4580 var31 = ((val* (*)(val*))(var_vt->class->vft[COLOR_model__MVirtualTypeProp__mvirtualtype]))(var_vt) /* mvirtualtype on <var_vt:MProperty(MVirtualTypeProp)>*/;
4581 var32 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
4582 var33 = ((val* (*)(val*, val*, val*))(var31->class->vft[COLOR_model__MVirtualType__lookup_bound]))(var31, var32, var_mclass_type) /* lookup_bound on <var31:MVirtualType>*/;
4583 var34 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
4584 var35 = ((val* (*)(val*, val*, val*))(var33->class->vft[COLOR_model__MType__anchor_to]))(var33, var34, var_mclass_type) /* anchor_to on <var33:MType>*/;
4585 var_anchored = var35;
4586 var36 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__partial_types]))(self) /* partial_types on <self:SeparateCompiler>*/;
4587 ((void (*)(val*, val*))(var36->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var36, var_anchored) /* add on <var36:Set[MType]>*/;
4588 } else {
4589 }
4590 CONTINUE_label37: (void)0;
4591 ((void (*)(val*))(var25->class->vft[COLOR_abstract_collection__Iterator__next]))(var25) /* next on <var25:Iterator[nullable Object]>*/;
4592 }
4593 BREAK_label37: (void)0;
4594 RET_LABEL:;
4595 }
4596 /* method separate_compiler#SeparateCompiler#retrieve_partial_types for (self: Object, MType) */
4597 void VIRTUAL_separate_compiler__SeparateCompiler__retrieve_partial_types(val* self, val* p0) {
4598 separate_compiler__SeparateCompiler__retrieve_partial_types(self, p0);
4599 RET_LABEL:;
4600 }
4601 /* method separate_compiler#SeparateCompiler#compile_module_to_c for (self: SeparateCompiler, MModule) */
4602 void separate_compiler__SeparateCompiler__compile_module_to_c(val* self, val* p0) {
4603 val* var_mmodule /* var mmodule: MModule */;
4604 val* var /* : MModule */;
4605 val* var_old_module /* var old_module: MModule */;
4606 val* var1 /* : Array[MClassDef] */;
4607 val* var2 /* : Iterator[nullable Object] */;
4608 short int var3 /* : Bool */;
4609 val* var4 /* : nullable Object */;
4610 val* var_cd /* var cd: MClassDef */;
4611 val* var5 /* : Array[MPropDef] */;
4612 val* var6 /* : Iterator[nullable Object] */;
4613 short int var7 /* : Bool */;
4614 val* var8 /* : nullable Object */;
4615 val* var_pd /* var pd: MPropDef */;
4616 short int var9 /* : Bool */;
4617 int cltype;
4618 int idtype;
4619 short int var10 /* : Bool */;
4620 val* var11 /* : AbstractRuntimeFunction */;
4621 val* var_r /* var r: AbstractRuntimeFunction */;
4622 val* var12 /* : AbstractRuntimeFunction */;
4623 val* var_r2 /* var r2: AbstractRuntimeFunction */;
4624 var_mmodule = p0;
4625 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
4626 var_old_module = var;
4627 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule_61d]))(self, var_mmodule) /* mainmodule= on <self:SeparateCompiler>*/;
4628 var1 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_model__MModule__mclassdefs]))(var_mmodule) /* mclassdefs on <var_mmodule:MModule>*/;
4629 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__iterator]))(var1) /* iterator on <var1:Array[MClassDef]>*/;
4630 for(;;) {
4631 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
4632 if(!var3) break;
4633 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
4634 var_cd = var4;
4635 var5 = ((val* (*)(val*))(var_cd->class->vft[COLOR_model__MClassDef__mpropdefs]))(var_cd) /* mpropdefs on <var_cd:MClassDef>*/;
4636 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__iterator]))(var5) /* iterator on <var5:Array[MPropDef]>*/;
4637 for(;;) {
4638 var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[nullable Object]>*/;
4639 if(!var7) break;
4640 var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[nullable Object]>*/;
4641 var_pd = var8;
4642 /* <var_pd:MPropDef> isa MMethodDef */
4643 cltype = type_model__MMethodDef.color;
4644 idtype = type_model__MMethodDef.id;
4645 if(cltype >= var_pd->type->table_size) {
4646 var9 = 0;
4647 } else {
4648 var9 = var_pd->type->type_table[cltype] == idtype;
4649 }
4650 var10 = !var9;
4651 if (var10){
4652 goto CONTINUE_label;
4653 } else {
4654 }
4655 var11 = ((val* (*)(val*))(var_pd->class->vft[COLOR_separate_compiler__MMethodDef__separate_runtime_function]))(var_pd) /* separate_runtime_function on <var_pd:MPropDef(MMethodDef)>*/;
4656 var_r = var11;
4657 ((void (*)(val*, val*))(var_r->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__compile_to_c]))(var_r, self) /* compile_to_c on <var_r:AbstractRuntimeFunction>*/;
4658 var12 = ((val* (*)(val*))(var_pd->class->vft[COLOR_separate_compiler__MMethodDef__virtual_runtime_function]))(var_pd) /* virtual_runtime_function on <var_pd:MPropDef(MMethodDef)>*/;
4659 var_r2 = var12;
4660 ((void (*)(val*, val*))(var_r2->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__compile_to_c]))(var_r2, self) /* compile_to_c on <var_r2:AbstractRuntimeFunction>*/;
4661 CONTINUE_label: (void)0;
4662 ((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
4663 }
4664 BREAK_label: (void)0;
4665 CONTINUE_label13: (void)0;
4666 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
4667 }
4668 BREAK_label13: (void)0;
4669 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule_61d]))(self, var_old_module) /* mainmodule= on <self:SeparateCompiler>*/;
4670 RET_LABEL:;
4671 }
4672 /* method separate_compiler#SeparateCompiler#compile_module_to_c for (self: Object, MModule) */
4673 void VIRTUAL_separate_compiler__SeparateCompiler__compile_module_to_c(val* self, val* p0) {
4674 separate_compiler__SeparateCompiler__compile_module_to_c(self, p0);
4675 RET_LABEL:;
4676 }
4677 /* method separate_compiler#SeparateCompiler#compile_type_to_c for (self: SeparateCompiler, MType) */
4678 void separate_compiler__SeparateCompiler__compile_type_to_c(val* self, val* p0) {
4679 val* var_mtype /* var mtype: MType */;
4680 val* var /* : String */;
4681 val* var_c_name /* var c_name: String */;
4682 val* var1 /* : SeparateCompilerVisitor */;
4683 val* var_v /* var v: SeparateCompilerVisitor */;
4684 static val* varonce;
4685 val* var2 /* : String */;
4686 char* var3 /* : NativeString */;
4687 long var4 /* : Int */;
4688 val* var5 /* : String */;
4689 static val* varonce6;
4690 val* var7 /* : String */;
4691 char* var8 /* : NativeString */;
4692 long var9 /* : Int */;
4693 val* var10 /* : String */;
4694 val* var11 /* : Array[Object] */;
4695 long var12 /* : Int */;
4696 val* var13 /* : NativeArray[Object] */;
4697 val* var14 /* : String */;
4698 static val* varonce15;
4699 val* var16 /* : String */;
4700 char* var17 /* : NativeString */;
4701 long var18 /* : Int */;
4702 val* var19 /* : String */;
4703 val* var20 /* : Array[Object] */;
4704 long var21 /* : Int */;
4705 val* var22 /* : NativeArray[Object] */;
4706 val* var23 /* : String */;
4707 static val* varonce24;
4708 val* var25 /* : String */;
4709 char* var26 /* : NativeString */;
4710 long var27 /* : Int */;
4711 val* var28 /* : String */;
4712 static val* varonce29;
4713 val* var30 /* : String */;
4714 char* var31 /* : NativeString */;
4715 long var32 /* : Int */;
4716 val* var33 /* : String */;
4717 val* var34 /* : Array[Object] */;
4718 long var35 /* : Int */;
4719 val* var36 /* : NativeArray[Object] */;
4720 val* var37 /* : String */;
4721 static val* varonce38;
4722 val* var39 /* : String */;
4723 char* var40 /* : NativeString */;
4724 long var41 /* : Int */;
4725 val* var42 /* : String */;
4726 static val* varonce43;
4727 val* var44 /* : String */;
4728 char* var45 /* : NativeString */;
4729 long var46 /* : Int */;
4730 val* var47 /* : String */;
4731 val* var48 /* : Array[Object] */;
4732 long var49 /* : Int */;
4733 val* var50 /* : NativeArray[Object] */;
4734 val* var51 /* : String */;
4735 val* var52 /* : nullable Layout[MType] */;
4736 val* var53 /* : Map[Object, Int] */;
4737 val* var54 /* : nullable Object */;
4738 static val* varonce55;
4739 val* var56 /* : String */;
4740 char* var57 /* : NativeString */;
4741 long var58 /* : Int */;
4742 val* var59 /* : String */;
4743 val* var60 /* : Array[Object] */;
4744 long var61 /* : Int */;
4745 val* var62 /* : NativeArray[Object] */;
4746 val* var63 /* : String */;
4747 static val* varonce64;
4748 val* var65 /* : String */;
4749 char* var66 /* : NativeString */;
4750 long var67 /* : Int */;
4751 val* var68 /* : String */;
4752 static val* varonce69;
4753 val* var70 /* : String */;
4754 char* var71 /* : NativeString */;
4755 long var72 /* : Int */;
4756 val* var73 /* : String */;
4757 val* var74 /* : Array[Object] */;
4758 long var75 /* : Int */;
4759 val* var76 /* : NativeArray[Object] */;
4760 val* var77 /* : String */;
4761 val* var78 /* : nullable Layout[MType] */;
4762 val* var_layout /* var layout: nullable Layout[MType] */;
4763 short int var79 /* : Bool */;
4764 int cltype;
4765 int idtype;
4766 val* var80 /* : Map[Object, Int] */;
4767 val* var81 /* : nullable Object */;
4768 static val* varonce82;
4769 val* var83 /* : String */;
4770 char* var84 /* : NativeString */;
4771 long var85 /* : Int */;
4772 val* var86 /* : String */;
4773 val* var87 /* : Array[Object] */;
4774 long var88 /* : Int */;
4775 val* var89 /* : NativeArray[Object] */;
4776 val* var90 /* : String */;
4777 val* var91 /* : Map[Object, Int] */;
4778 val* var92 /* : nullable Object */;
4779 static val* varonce93;
4780 val* var94 /* : String */;
4781 char* var95 /* : NativeString */;
4782 long var96 /* : Int */;
4783 val* var97 /* : String */;
4784 val* var98 /* : Array[Object] */;
4785 long var99 /* : Int */;
4786 val* var100 /* : NativeArray[Object] */;
4787 val* var101 /* : String */;
4788 short int var102 /* : Bool */;
4789 int cltype103;
4790 int idtype104;
4791 static val* varonce105;
4792 val* var106 /* : String */;
4793 char* var107 /* : NativeString */;
4794 long var108 /* : Int */;
4795 val* var109 /* : String */;
4796 static val* varonce110;
4797 val* var111 /* : String */;
4798 char* var112 /* : NativeString */;
4799 long var113 /* : Int */;
4800 val* var114 /* : String */;
4801 short int var115 /* : Bool */;
4802 static val* varonce116;
4803 val* var117 /* : String */;
4804 char* var118 /* : NativeString */;
4805 long var119 /* : Int */;
4806 val* var120 /* : String */;
4807 val* var121 /* : Array[Object] */;
4808 long var122 /* : Int */;
4809 val* var123 /* : NativeArray[Object] */;
4810 val* var124 /* : String */;
4811 static val* varonce125;
4812 val* var126 /* : String */;
4813 char* var127 /* : NativeString */;
4814 long var128 /* : Int */;
4815 val* var129 /* : String */;
4816 static val* varonce130;
4817 val* var131 /* : String */;
4818 char* var132 /* : NativeString */;
4819 long var133 /* : Int */;
4820 val* var134 /* : String */;
4821 val* var135 /* : Array[Object] */;
4822 long var136 /* : Int */;
4823 val* var137 /* : NativeArray[Object] */;
4824 val* var138 /* : String */;
4825 static val* varonce139;
4826 val* var140 /* : String */;
4827 char* var141 /* : NativeString */;
4828 long var142 /* : Int */;
4829 val* var143 /* : String */;
4830 val* var144 /* : Map[MType, Array[nullable MType]] */;
4831 val* var145 /* : nullable Object */;
4832 long var146 /* : Int */;
4833 static val* varonce147;
4834 val* var148 /* : String */;
4835 char* var149 /* : NativeString */;
4836 long var150 /* : Int */;
4837 val* var151 /* : String */;
4838 val* var152 /* : Array[Object] */;
4839 long var153 /* : Int */;
4840 val* var154 /* : NativeArray[Object] */;
4841 val* var155 /* : Object */;
4842 val* var156 /* : String */;
4843 static val* varonce157;
4844 val* var158 /* : String */;
4845 char* var159 /* : NativeString */;
4846 long var160 /* : Int */;
4847 val* var161 /* : String */;
4848 val* var162 /* : Map[MType, Array[nullable MType]] */;
4849 val* var163 /* : nullable Object */;
4850 val* var164 /* : Iterator[nullable Object] */;
4851 short int var165 /* : Bool */;
4852 val* var166 /* : nullable Object */;
4853 val* var_stype /* var stype: nullable MType */;
4854 val* var167 /* : null */;
4855 short int var168 /* : Bool */;
4856 static val* varonce169;
4857 val* var170 /* : String */;
4858 char* var171 /* : NativeString */;
4859 long var172 /* : Int */;
4860 val* var173 /* : String */;
4861 val* var174 /* : nullable Layout[MType] */;
4862 val* var175 /* : Map[Object, Int] */;
4863 val* var176 /* : nullable Object */;
4864 static val* varonce177;
4865 val* var178 /* : String */;
4866 char* var179 /* : NativeString */;
4867 long var180 /* : Int */;
4868 val* var181 /* : String */;
4869 static val* varonce182;
4870 val* var183 /* : String */;
4871 char* var184 /* : NativeString */;
4872 long var185 /* : Int */;
4873 val* var186 /* : String */;
4874 val* var187 /* : Array[Object] */;
4875 long var188 /* : Int */;
4876 val* var189 /* : NativeArray[Object] */;
4877 val* var190 /* : String */;
4878 static val* varonce191;
4879 val* var192 /* : String */;
4880 char* var193 /* : NativeString */;
4881 long var194 /* : Int */;
4882 val* var195 /* : String */;
4883 static val* varonce196;
4884 val* var197 /* : String */;
4885 char* var198 /* : NativeString */;
4886 long var199 /* : Int */;
4887 val* var200 /* : String */;
4888 var_mtype = p0;
4889 var = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
4890 var_c_name = var;
4891 var1 = NEW_separate_compiler__SeparateCompilerVisitor(&type_separate_compiler__SeparateCompilerVisitor);
4892 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init]))(var1, self) /* init on <var1:SeparateCompilerVisitor>*/;
4893 CHECK_NEW_separate_compiler__SeparateCompilerVisitor(var1);
4894 var_v = var1;
4895 if (varonce) {
4896 var2 = varonce;
4897 } else {
4898 var3 = "/* runtime type ";
4899 var4 = 16;
4900 var5 = string__NativeString__to_s_with_length(var3, var4);
4901 var2 = var5;
4902 varonce = var2;
4903 }
4904 if (varonce6) {
4905 var7 = varonce6;
4906 } else {
4907 var8 = " */";
4908 var9 = 3;
4909 var10 = string__NativeString__to_s_with_length(var8, var9);
4910 var7 = var10;
4911 varonce6 = var7;
4912 }
4913 var11 = NEW_array__Array(&type_array__Arraykernel__Object);
4914 { /* var11 = array_instance Array[Object] */
4915 var12 = 3;
4916 var13 = NEW_array__NativeArray(var12, &type_array__NativeArraykernel__Object);
4917 ((struct instance_array__NativeArray*)var13)->values[0] = (val*) var2;
4918 ((struct instance_array__NativeArray*)var13)->values[1] = (val*) var_mtype;
4919 ((struct instance_array__NativeArray*)var13)->values[2] = (val*) var7;
4920 ((void (*)(val*, val*, long))(var11->class->vft[COLOR_array__Array__with_native]))(var11, var13, var12) /* with_native on <var11:Array[Object]>*/;
4921 CHECK_NEW_array__Array(var11);
4922 }
4923 var14 = ((val* (*)(val*))(var11->class->vft[COLOR_string__Object__to_s]))(var11) /* to_s on <var11:Array[Object]>*/;
4924 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var14) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4925 if (varonce15) {
4926 var16 = varonce15;
4927 } else {
4928 var17 = "type_";
4929 var18 = 5;
4930 var19 = string__NativeString__to_s_with_length(var17, var18);
4931 var16 = var19;
4932 varonce15 = var16;
4933 }
4934 var20 = NEW_array__Array(&type_array__Arraykernel__Object);
4935 { /* var20 = array_instance Array[Object] */
4936 var21 = 2;
4937 var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
4938 ((struct instance_array__NativeArray*)var22)->values[0] = (val*) var16;
4939 ((struct instance_array__NativeArray*)var22)->values[1] = (val*) var_c_name;
4940 ((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
4941 CHECK_NEW_array__Array(var20);
4942 }
4943 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
4944 if (varonce24) {
4945 var25 = varonce24;
4946 } else {
4947 var26 = "extern const struct type type_";
4948 var27 = 30;
4949 var28 = string__NativeString__to_s_with_length(var26, var27);
4950 var25 = var28;
4951 varonce24 = var25;
4952 }
4953 if (varonce29) {
4954 var30 = varonce29;
4955 } else {
4956 var31 = ";";
4957 var32 = 1;
4958 var33 = string__NativeString__to_s_with_length(var31, var32);
4959 var30 = var33;
4960 varonce29 = var30;
4961 }
4962 var34 = NEW_array__Array(&type_array__Arraykernel__Object);
4963 { /* var34 = array_instance Array[Object] */
4964 var35 = 3;
4965 var36 = NEW_array__NativeArray(var35, &type_array__NativeArraykernel__Object);
4966 ((struct instance_array__NativeArray*)var36)->values[0] = (val*) var25;
4967 ((struct instance_array__NativeArray*)var36)->values[1] = (val*) var_c_name;
4968 ((struct instance_array__NativeArray*)var36)->values[2] = (val*) var30;
4969 ((void (*)(val*, val*, long))(var34->class->vft[COLOR_array__Array__with_native]))(var34, var36, var35) /* with_native on <var34:Array[Object]>*/;
4970 CHECK_NEW_array__Array(var34);
4971 }
4972 var37 = ((val* (*)(val*))(var34->class->vft[COLOR_string__Object__to_s]))(var34) /* to_s on <var34:Array[Object]>*/;
4973 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var23, var37) /* provide_declaration on <self:SeparateCompiler>*/;
4974 if (varonce38) {
4975 var39 = varonce38;
4976 } else {
4977 var40 = "const struct type type_";
4978 var41 = 23;
4979 var42 = string__NativeString__to_s_with_length(var40, var41);
4980 var39 = var42;
4981 varonce38 = var39;
4982 }
4983 if (varonce43) {
4984 var44 = varonce43;
4985 } else {
4986 var45 = " = {";
4987 var46 = 4;
4988 var47 = string__NativeString__to_s_with_length(var45, var46);
4989 var44 = var47;
4990 varonce43 = var44;
4991 }
4992 var48 = NEW_array__Array(&type_array__Arraykernel__Object);
4993 { /* var48 = array_instance Array[Object] */
4994 var49 = 3;
4995 var50 = NEW_array__NativeArray(var49, &type_array__NativeArraykernel__Object);
4996 ((struct instance_array__NativeArray*)var50)->values[0] = (val*) var39;
4997 ((struct instance_array__NativeArray*)var50)->values[1] = (val*) var_c_name;
4998 ((struct instance_array__NativeArray*)var50)->values[2] = (val*) var44;
4999 ((void (*)(val*, val*, long))(var48->class->vft[COLOR_array__Array__with_native]))(var48, var50, var49) /* with_native on <var48:Array[Object]>*/;
5000 CHECK_NEW_array__Array(var48);
5001 }
5002 var51 = ((val* (*)(val*))(var48->class->vft[COLOR_string__Object__to_s]))(var48) /* to_s on <var48:Array[Object]>*/;
5003 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var51) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5004 var52 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_layout]))(self) /* type_layout on <self:SeparateCompiler>*/;
5005 if (var52 == NULL) {
5006 fprintf(stderr, "Runtime error: %s", "Reciever is null");
5007 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 635);
5008 exit(1);
5009 } else {
5010 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_layout_builders__Layout__ids]))(var52) /* ids on <var52:nullable Layout[MType]>*/;
5011 }
5012 var54 = ((val* (*)(val*, val*))(var53->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var53, var_mtype) /* [] on <var53:Map[Object, Int](Map[MType, Int])>*/;
5013 if (varonce55) {
5014 var56 = varonce55;
5015 } else {
5016 var57 = ",";
5017 var58 = 1;
5018 var59 = string__NativeString__to_s_with_length(var57, var58);
5019 var56 = var59;
5020 varonce55 = var56;
5021 }
5022 var60 = NEW_array__Array(&type_array__Arraykernel__Object);
5023 { /* var60 = array_instance Array[Object] */
5024 var61 = 2;
5025 var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
5026 ((struct instance_array__NativeArray*)var62)->values[0] = (val*) var54;
5027 ((struct instance_array__NativeArray*)var62)->values[1] = (val*) var56;
5028 ((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
5029 CHECK_NEW_array__Array(var60);
5030 }
5031 var63 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
5032 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var63) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5033 if (varonce64) {
5034 var65 = varonce64;
5035 } else {
5036 var66 = "\"";
5037 var67 = 1;
5038 var68 = string__NativeString__to_s_with_length(var66, var67);
5039 var65 = var68;
5040 varonce64 = var65;
5041 }
5042 if (varonce69) {
5043 var70 = varonce69;
5044 } else {
5045 var71 = "\", /* class_name_string */";
5046 var72 = 26;
5047 var73 = string__NativeString__to_s_with_length(var71, var72);
5048 var70 = var73;
5049 varonce69 = var70;
5050 }
5051 var74 = NEW_array__Array(&type_array__Arraykernel__Object);
5052 { /* var74 = array_instance Array[Object] */
5053 var75 = 3;
5054 var76 = NEW_array__NativeArray(var75, &type_array__NativeArraykernel__Object);
5055 ((struct instance_array__NativeArray*)var76)->values[0] = (val*) var65;
5056 ((struct instance_array__NativeArray*)var76)->values[1] = (val*) var_mtype;
5057 ((struct instance_array__NativeArray*)var76)->values[2] = (val*) var70;
5058 ((void (*)(val*, val*, long))(var74->class->vft[COLOR_array__Array__with_native]))(var74, var76, var75) /* with_native on <var74:Array[Object]>*/;
5059 CHECK_NEW_array__Array(var74);
5060 }
5061 var77 = ((val* (*)(val*))(var74->class->vft[COLOR_string__Object__to_s]))(var74) /* to_s on <var74:Array[Object]>*/;
5062 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var77) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5063 var78 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_layout]))(self) /* type_layout on <self:SeparateCompiler>*/;
5064 var_layout = var78;
5065 /* <var_layout:nullable Layout[MType]> isa PHLayout[MType, MType] */
5066 cltype = type_layout_builders__PHLayoutmodel__MTypemodel__MType.color;
5067 idtype = type_layout_builders__PHLayoutmodel__MTypemodel__MType.id;
5068 if(var_layout == NULL) {
5069 var79 = 0;
5070 } else {
5071 if(cltype >= var_layout->type->table_size) {
5072 var79 = 0;
5073 } else {
5074 var79 = var_layout->type->type_table[cltype] == idtype;
5075 }
5076 }
5077 if (var79){
5078 var80 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__masks]))(var_layout) /* masks on <var_layout:nullable Layout[MType](PHLayout[MType, MType])>*/;
5079 var81 = ((val* (*)(val*, val*))(var80->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var80, var_mtype) /* [] on <var80:Map[Object, Int](Map[MType, Int])>*/;
5080 if (varonce82) {
5081 var83 = varonce82;
5082 } else {
5083 var84 = ",";
5084 var85 = 1;
5085 var86 = string__NativeString__to_s_with_length(var84, var85);
5086 var83 = var86;
5087 varonce82 = var83;
5088 }
5089 var87 = NEW_array__Array(&type_array__Arraykernel__Object);
5090 { /* var87 = array_instance Array[Object] */
5091 var88 = 2;
5092 var89 = NEW_array__NativeArray(var88, &type_array__NativeArraykernel__Object);
5093 ((struct instance_array__NativeArray*)var89)->values[0] = (val*) var81;
5094 ((struct instance_array__NativeArray*)var89)->values[1] = (val*) var83;
5095 ((void (*)(val*, val*, long))(var87->class->vft[COLOR_array__Array__with_native]))(var87, var89, var88) /* with_native on <var87:Array[Object]>*/;
5096 CHECK_NEW_array__Array(var87);
5097 }
5098 var90 = ((val* (*)(val*))(var87->class->vft[COLOR_string__Object__to_s]))(var87) /* to_s on <var87:Array[Object]>*/;
5099 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var90) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5100 } else {
5101 if (var_layout == NULL) {
5102 fprintf(stderr, "Runtime error: %s", "Reciever is null");
5103 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 641);
5104 exit(1);
5105 } else {
5106 var91 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MType]>*/;
5107 }
5108 var92 = ((val* (*)(val*, val*))(var91->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var91, var_mtype) /* [] on <var91:Map[Object, Int](Map[MType, Int])>*/;
5109 if (varonce93) {
5110 var94 = varonce93;
5111 } else {
5112 var95 = ",";
5113 var96 = 1;
5114 var97 = string__NativeString__to_s_with_length(var95, var96);
5115 var94 = var97;
5116 varonce93 = var94;
5117 }
5118 var98 = NEW_array__Array(&type_array__Arraykernel__Object);
5119 { /* var98 = array_instance Array[Object] */
5120 var99 = 2;
5121 var100 = NEW_array__NativeArray(var99, &type_array__NativeArraykernel__Object);
5122 ((struct instance_array__NativeArray*)var100)->values[0] = (val*) var92;
5123 ((struct instance_array__NativeArray*)var100)->values[1] = (val*) var94;
5124 ((void (*)(val*, val*, long))(var98->class->vft[COLOR_array__Array__with_native]))(var98, var100, var99) /* with_native on <var98:Array[Object]>*/;
5125 CHECK_NEW_array__Array(var98);
5126 }
5127 var101 = ((val* (*)(val*))(var98->class->vft[COLOR_string__Object__to_s]))(var98) /* to_s on <var98:Array[Object]>*/;
5128 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var101) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5129 }
5130 /* <var_mtype:MType> isa MNullableType */
5131 cltype103 = type_model__MNullableType.color;
5132 idtype104 = type_model__MNullableType.id;
5133 if(cltype103 >= var_mtype->type->table_size) {
5134 var102 = 0;
5135 } else {
5136 var102 = var_mtype->type->type_table[cltype103] == idtype104;
5137 }
5138 if (var102){
5139 if (varonce105) {
5140 var106 = varonce105;
5141 } else {
5142 var107 = "1,";
5143 var108 = 2;
5144 var109 = string__NativeString__to_s_with_length(var107, var108);
5145 var106 = var109;
5146 varonce105 = var106;
5147 }
5148 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var106) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5149 } else {
5150 if (varonce110) {
5151 var111 = varonce110;
5152 } else {
5153 var112 = "0,";
5154 var113 = 2;
5155 var114 = string__NativeString__to_s_with_length(var112, var113);
5156 var111 = var114;
5157 varonce110 = var111;
5158 }
5159 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var111) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5160 }
5161 var115 = ((short int (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_type_resolution_table]))(self, var_mtype) /* compile_type_resolution_table on <self:SeparateCompiler>*/;
5162 if (var115){
5163 if (varonce116) {
5164 var117 = varonce116;
5165 } else {
5166 var118 = "resolution_table_";
5167 var119 = 17;
5168 var120 = string__NativeString__to_s_with_length(var118, var119);
5169 var117 = var120;
5170 varonce116 = var117;
5171 }
5172 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
5173 { /* var121 = array_instance Array[Object] */
5174 var122 = 2;
5175 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
5176 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var117;
5177 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var_c_name;
5178 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
5179 CHECK_NEW_array__Array(var121);
5180 }
5181 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
5182 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var124) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
5183 if (varonce125) {
5184 var126 = varonce125;
5185 } else {
5186 var127 = "&resolution_table_";
5187 var128 = 18;
5188 var129 = string__NativeString__to_s_with_length(var127, var128);
5189 var126 = var129;
5190 varonce125 = var126;
5191 }
5192 if (varonce130) {
5193 var131 = varonce130;
5194 } else {
5195 var132 = ",";
5196 var133 = 1;
5197 var134 = string__NativeString__to_s_with_length(var132, var133);
5198 var131 = var134;
5199 varonce130 = var131;
5200 }
5201 var135 = NEW_array__Array(&type_array__Arraykernel__Object);
5202 { /* var135 = array_instance Array[Object] */
5203 var136 = 3;
5204 var137 = NEW_array__NativeArray(var136, &type_array__NativeArraykernel__Object);
5205 ((struct instance_array__NativeArray*)var137)->values[0] = (val*) var126;
5206 ((struct instance_array__NativeArray*)var137)->values[1] = (val*) var_c_name;
5207 ((struct instance_array__NativeArray*)var137)->values[2] = (val*) var131;
5208 ((void (*)(val*, val*, long))(var135->class->vft[COLOR_array__Array__with_native]))(var135, var137, var136) /* with_native on <var135:Array[Object]>*/;
5209 CHECK_NEW_array__Array(var135);
5210 }
5211 var138 = ((val* (*)(val*))(var135->class->vft[COLOR_string__Object__to_s]))(var135) /* to_s on <var135:Array[Object]>*/;
5212 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var138) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5213 } else {
5214 if (varonce139) {
5215 var140 = varonce139;
5216 } else {
5217 var141 = "NULL,";
5218 var142 = 5;
5219 var143 = string__NativeString__to_s_with_length(var141, var142);
5220 var140 = var143;
5221 varonce139 = var140;
5222 }
5223 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var140) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5224 }
5225 var144 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_tables]))(self) /* type_tables on <self:SeparateCompiler>*/;
5226 var145 = ((val* (*)(val*, val*))(var144->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var144, var_mtype) /* [] on <var144:Map[MType, Array[nullable MType]]>*/;
5227 var146 = ((long (*)(val*))(var145->class->vft[COLOR_abstract_collection__Collection__length]))(var145) /* length on <var145:nullable Object(Array[nullable MType])>*/;
5228 if (varonce147) {
5229 var148 = varonce147;
5230 } else {
5231 var149 = ",";
5232 var150 = 1;
5233 var151 = string__NativeString__to_s_with_length(var149, var150);
5234 var148 = var151;
5235 varonce147 = var148;
5236 }
5237 var152 = NEW_array__Array(&type_array__Arraykernel__Object);
5238 { /* var152 = array_instance Array[Object] */
5239 var153 = 2;
5240 var154 = NEW_array__NativeArray(var153, &type_array__NativeArraykernel__Object);
5241 var155 = BOX_kernel__Int(var146); /* autobox from Int to Object */
5242 ((struct instance_array__NativeArray*)var154)->values[0] = (val*) var155;
5243 ((struct instance_array__NativeArray*)var154)->values[1] = (val*) var148;
5244 ((void (*)(val*, val*, long))(var152->class->vft[COLOR_array__Array__with_native]))(var152, var154, var153) /* with_native on <var152:Array[Object]>*/;
5245 CHECK_NEW_array__Array(var152);
5246 }
5247 var156 = ((val* (*)(val*))(var152->class->vft[COLOR_string__Object__to_s]))(var152) /* to_s on <var152:Array[Object]>*/;
5248 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var156) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5249 if (varonce157) {
5250 var158 = varonce157;
5251 } else {
5252 var159 = "{";
5253 var160 = 1;
5254 var161 = string__NativeString__to_s_with_length(var159, var160);
5255 var158 = var161;
5256 varonce157 = var158;
5257 }
5258 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var158) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5259 var162 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_tables]))(self) /* type_tables on <self:SeparateCompiler>*/;
5260 var163 = ((val* (*)(val*, val*))(var162->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var162, var_mtype) /* [] on <var162:Map[MType, Array[nullable MType]]>*/;
5261 var164 = ((val* (*)(val*))(var163->class->vft[COLOR_abstract_collection__Collection__iterator]))(var163) /* iterator on <var163:nullable Object(Array[nullable MType])>*/;
5262 for(;;) {
5263 var165 = ((short int (*)(val*))(var164->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var164) /* is_ok on <var164:Iterator[nullable Object]>*/;
5264 if(!var165) break;
5265 var166 = ((val* (*)(val*))(var164->class->vft[COLOR_abstract_collection__Iterator__item]))(var164) /* item on <var164:Iterator[nullable Object]>*/;
5266 var_stype = var166;
5267 var167 = NULL;
5268 if (var_stype == NULL) {
5269 var168 = 1; /* is null */
5270 } else {
5271 var168 = 0; /* arg is null but recv is not */
5272 }
5273 if (var168){
5274 if (varonce169) {
5275 var170 = varonce169;
5276 } else {
5277 var171 = "-1, /* empty */";
5278 var172 = 15;
5279 var173 = string__NativeString__to_s_with_length(var171, var172);
5280 var170 = var173;
5281 varonce169 = var170;
5282 }
5283 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var170) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5284 } else {
5285 var174 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_layout]))(self) /* type_layout on <self:SeparateCompiler>*/;
5286 if (var174 == NULL) {
5287 fprintf(stderr, "Runtime error: %s", "Reciever is null");
5288 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 660);
5289 exit(1);
5290 } else {
5291 var175 = ((val* (*)(val*))(var174->class->vft[COLOR_layout_builders__Layout__ids]))(var174) /* ids on <var174:nullable Layout[MType]>*/;
5292 }
5293 var176 = ((val* (*)(val*, val*))(var175->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var175, var_stype) /* [] on <var175:Map[Object, Int](Map[MType, Int])>*/;
5294 if (varonce177) {
5295 var178 = varonce177;
5296 } else {
5297 var179 = ", /* ";
5298 var180 = 5;
5299 var181 = string__NativeString__to_s_with_length(var179, var180);
5300 var178 = var181;
5301 varonce177 = var178;
5302 }
5303 if (varonce182) {
5304 var183 = varonce182;
5305 } else {
5306 var184 = " */";
5307 var185 = 3;
5308 var186 = string__NativeString__to_s_with_length(var184, var185);
5309 var183 = var186;
5310 varonce182 = var183;
5311 }
5312 var187 = NEW_array__Array(&type_array__Arraykernel__Object);
5313 { /* var187 = array_instance Array[Object] */
5314 var188 = 4;
5315 var189 = NEW_array__NativeArray(var188, &type_array__NativeArraykernel__Object);
5316 ((struct instance_array__NativeArray*)var189)->values[0] = (val*) var176;
5317 ((struct instance_array__NativeArray*)var189)->values[1] = (val*) var178;
5318 ((struct instance_array__NativeArray*)var189)->values[2] = (val*) var_stype;
5319 ((struct instance_array__NativeArray*)var189)->values[3] = (val*) var183;
5320 ((void (*)(val*, val*, long))(var187->class->vft[COLOR_array__Array__with_native]))(var187, var189, var188) /* with_native on <var187:Array[Object]>*/;
5321 CHECK_NEW_array__Array(var187);
5322 }
5323 var190 = ((val* (*)(val*))(var187->class->vft[COLOR_string__Object__to_s]))(var187) /* to_s on <var187:Array[Object]>*/;
5324 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var190) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5325 }
5326 CONTINUE_label: (void)0;
5327 ((void (*)(val*))(var164->class->vft[COLOR_abstract_collection__Iterator__next]))(var164) /* next on <var164:Iterator[nullable Object]>*/;
5328 }
5329 BREAK_label: (void)0;
5330 if (varonce191) {
5331 var192 = varonce191;
5332 } else {
5333 var193 = "},";
5334 var194 = 2;
5335 var195 = string__NativeString__to_s_with_length(var193, var194);
5336 var192 = var195;
5337 varonce191 = var192;
5338 }
5339 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var192) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5340 if (varonce196) {
5341 var197 = varonce196;
5342 } else {
5343 var198 = "};";
5344 var199 = 2;
5345 var200 = string__NativeString__to_s_with_length(var198, var199);
5346 var197 = var200;
5347 varonce196 = var197;
5348 }
5349 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var197) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5350 RET_LABEL:;
5351 }
5352 /* method separate_compiler#SeparateCompiler#compile_type_to_c for (self: Object, MType) */
5353 void VIRTUAL_separate_compiler__SeparateCompiler__compile_type_to_c(val* self, val* p0) {
5354 separate_compiler__SeparateCompiler__compile_type_to_c(self, p0);
5355 RET_LABEL:;
5356 }
5357 /* method separate_compiler#SeparateCompiler#compile_type_resolution_table for (self: SeparateCompiler, MType): Bool */
5358 short int separate_compiler__SeparateCompiler__compile_type_resolution_table(val* self, val* p0) {
5359 short int var /* : Bool */;
5360 val* var_mtype /* var mtype: MType */;
5361 short int var1 /* : Bool */;
5362 int cltype;
5363 int idtype;
5364 val* var2 /* : MType */;
5365 short int var3 /* : Bool */;
5366 int cltype4;
5367 int idtype5;
5368 const char* var_class_name;
5369 val* var_mclass_type /* var mclass_type: MClassType */;
5370 short int var6 /* : Bool */;
5371 int cltype7;
5372 int idtype8;
5373 const char* var_class_name9;
5374 val* var10 /* : Map[MClassType, Array[nullable MType]] */;
5375 short int var11 /* : Bool */;
5376 short int var12 /* : Bool */;
5377 short int var13 /* : Bool */;
5378 val* var14 /* : nullable Layout[MType] */;
5379 val* var_layout /* var layout: nullable Layout[MType] */;
5380 static val* varonce;
5381 val* var15 /* : String */;
5382 char* var16 /* : NativeString */;
5383 long var17 /* : Int */;
5384 val* var18 /* : String */;
5385 val* var19 /* : String */;
5386 val* var20 /* : Array[Object] */;
5387 long var21 /* : Int */;
5388 val* var22 /* : NativeArray[Object] */;
5389 val* var23 /* : String */;
5390 static val* varonce24;
5391 val* var25 /* : String */;
5392 char* var26 /* : NativeString */;
5393 long var27 /* : Int */;
5394 val* var28 /* : String */;
5395 val* var29 /* : String */;
5396 static val* varonce30;
5397 val* var31 /* : String */;
5398 char* var32 /* : NativeString */;
5399 long var33 /* : Int */;
5400 val* var34 /* : String */;
5401 val* var35 /* : Array[Object] */;
5402 long var36 /* : Int */;
5403 val* var37 /* : NativeArray[Object] */;
5404 val* var38 /* : String */;
5405 val* var39 /* : AbstractCompilerVisitor */;
5406 val* var_v /* var v: SeparateCompilerVisitor */;
5407 static val* varonce40;
5408 val* var41 /* : String */;
5409 char* var42 /* : NativeString */;
5410 long var43 /* : Int */;
5411 val* var44 /* : String */;
5412 val* var45 /* : String */;
5413 static val* varonce46;
5414 val* var47 /* : String */;
5415 char* var48 /* : NativeString */;
5416 long var49 /* : Int */;
5417 val* var50 /* : String */;
5418 val* var51 /* : Array[Object] */;
5419 long var52 /* : Int */;
5420 val* var53 /* : NativeArray[Object] */;
5421 val* var54 /* : String */;
5422 short int var55 /* : Bool */;
5423 int cltype56;
5424 int idtype57;
5425 val* var58 /* : Map[Object, Int] */;
5426 val* var59 /* : nullable Object */;
5427 static val* varonce60;
5428 val* var61 /* : String */;
5429 char* var62 /* : NativeString */;
5430 long var63 /* : Int */;
5431 val* var64 /* : String */;
5432 val* var65 /* : Array[Object] */;
5433 long var66 /* : Int */;
5434 val* var67 /* : NativeArray[Object] */;
5435 val* var68 /* : String */;
5436 static val* varonce69;
5437 val* var70 /* : String */;
5438 char* var71 /* : NativeString */;
5439 long var72 /* : Int */;
5440 val* var73 /* : String */;
5441 static val* varonce74;
5442 val* var75 /* : String */;
5443 char* var76 /* : NativeString */;
5444 long var77 /* : Int */;
5445 val* var78 /* : String */;
5446 val* var79 /* : Map[MClassType, Array[nullable MType]] */;
5447 val* var80 /* : nullable Object */;
5448 val* var81 /* : Iterator[nullable Object] */;
5449 short int var82 /* : Bool */;
5450 val* var83 /* : nullable Object */;
5451 val* var_t /* var t: nullable MType */;
5452 val* var84 /* : null */;
5453 short int var85 /* : Bool */;
5454 static val* varonce86;
5455 val* var87 /* : String */;
5456 char* var88 /* : NativeString */;
5457 long var89 /* : Int */;
5458 val* var90 /* : String */;
5459 val* var91 /* : MModule */;
5460 short int var92 /* : Bool */;
5461 val* var93 /* : MType */;
5462 val* var_tv /* var tv: MType */;
5463 val* var94 /* : nullable Layout[MType] */;
5464 val* var95 /* : Map[Object, Int] */;
5465 short int var96 /* : Bool */;
5466 static val* varonce97;
5467 val* var98 /* : String */;
5468 char* var99 /* : NativeString */;
5469 long var100 /* : Int */;
5470 val* var101 /* : String */;
5471 val* var102 /* : String */;
5472 val* var103 /* : Array[Object] */;
5473 long var104 /* : Int */;
5474 val* var105 /* : NativeArray[Object] */;
5475 val* var106 /* : String */;
5476 static val* varonce107;
5477 val* var108 /* : String */;
5478 char* var109 /* : NativeString */;
5479 long var110 /* : Int */;
5480 val* var111 /* : String */;
5481 val* var112 /* : String */;
5482 static val* varonce113;
5483 val* var114 /* : String */;
5484 char* var115 /* : NativeString */;
5485 long var116 /* : Int */;
5486 val* var117 /* : String */;
5487 static val* varonce118;
5488 val* var119 /* : String */;
5489 char* var120 /* : NativeString */;
5490 long var121 /* : Int */;
5491 val* var122 /* : String */;
5492 static val* varonce123;
5493 val* var124 /* : String */;
5494 char* var125 /* : NativeString */;
5495 long var126 /* : Int */;
5496 val* var127 /* : String */;
5497 val* var128 /* : Array[Object] */;
5498 long var129 /* : Int */;
5499 val* var130 /* : NativeArray[Object] */;
5500 val* var131 /* : String */;
5501 static val* varonce132;
5502 val* var133 /* : String */;
5503 char* var134 /* : NativeString */;
5504 long var135 /* : Int */;
5505 val* var136 /* : String */;
5506 static val* varonce137;
5507 val* var138 /* : String */;
5508 char* var139 /* : NativeString */;
5509 long var140 /* : Int */;
5510 val* var141 /* : String */;
5511 static val* varonce142;
5512 val* var143 /* : String */;
5513 char* var144 /* : NativeString */;
5514 long var145 /* : Int */;
5515 val* var146 /* : String */;
5516 val* var147 /* : Array[Object] */;
5517 long var148 /* : Int */;
5518 val* var149 /* : NativeArray[Object] */;
5519 val* var150 /* : String */;
5520 static val* varonce151;
5521 val* var152 /* : String */;
5522 char* var153 /* : NativeString */;
5523 long var154 /* : Int */;
5524 val* var155 /* : String */;
5525 static val* varonce156;
5526 val* var157 /* : String */;
5527 char* var158 /* : NativeString */;
5528 long var159 /* : Int */;
5529 val* var160 /* : String */;
5530 short int var161 /* : Bool */;
5531 var_mtype = p0;
5532 /* <var_mtype:MType> isa MNullableType */
5533 cltype = type_model__MNullableType.color;
5534 idtype = type_model__MNullableType.id;
5535 if(cltype >= var_mtype->type->table_size) {
5536 var1 = 0;
5537 } else {
5538 var1 = var_mtype->type->type_table[cltype] == idtype;
5539 }
5540 if (var1){
5541 var2 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
5542 /* <var2:MType> isa MClassType */
5543 cltype4 = type_model__MClassType.color;
5544 idtype5 = type_model__MClassType.id;
5545 if(cltype4 >= var2->type->table_size) {
5546 var3 = 0;
5547 } else {
5548 var3 = var2->type->type_table[cltype4] == idtype5;
5549 }
5550 if (!var3) {
5551 var_class_name = var2 == NULL ? "null" : var2->type->name;
5552 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
5553 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 671);
5554 exit(1);
5555 }
5556 var_mclass_type = var2;
5557 } else {
5558 /* <var_mtype:MType> isa MClassType */
5559 cltype7 = type_model__MClassType.color;
5560 idtype8 = type_model__MClassType.id;
5561 if(cltype7 >= var_mtype->type->table_size) {
5562 var6 = 0;
5563 } else {
5564 var6 = var_mtype->type->type_table[cltype7] == idtype8;
5565 }
5566 if (!var6) {
5567 var_class_name9 = var_mtype == NULL ? "null" : var_mtype->type->name;
5568 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name9);
5569 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 673);
5570 exit(1);
5571 }
5572 var_mclass_type = var_mtype;
5573 }
5574 var10 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__resolution_tables]))(self) /* resolution_tables on <self:SeparateCompiler>*/;
5575 var11 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var10, var_mclass_type) /* has_key on <var10:Map[MClassType, Array[nullable MType]]>*/;
5576 var12 = !var11;
5577 if (var12){
5578 var13 = 0;
5579 var = var13;
5580 goto RET_LABEL;
5581 } else {
5582 }
5583 var14 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__resolution_layout]))(self) /* resolution_layout on <self:SeparateCompiler>*/;
5584 var_layout = var14;
5585 if (varonce) {
5586 var15 = varonce;
5587 } else {
5588 var16 = "resolution_table_";
5589 var17 = 17;
5590 var18 = string__NativeString__to_s_with_length(var16, var17);
5591 var15 = var18;
5592 varonce = var15;
5593 }
5594 var19 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
5595 var20 = NEW_array__Array(&type_array__Arraykernel__Object);
5596 { /* var20 = array_instance Array[Object] */
5597 var21 = 2;
5598 var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
5599 ((struct instance_array__NativeArray*)var22)->values[0] = (val*) var15;
5600 ((struct instance_array__NativeArray*)var22)->values[1] = (val*) var19;
5601 ((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
5602 CHECK_NEW_array__Array(var20);
5603 }
5604 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
5605 if (varonce24) {
5606 var25 = varonce24;
5607 } else {
5608 var26 = "extern const struct types resolution_table_";
5609 var27 = 43;
5610 var28 = string__NativeString__to_s_with_length(var26, var27);
5611 var25 = var28;
5612 varonce24 = var25;
5613 }
5614 var29 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
5615 if (varonce30) {
5616 var31 = varonce30;
5617 } else {
5618 var32 = ";";
5619 var33 = 1;
5620 var34 = string__NativeString__to_s_with_length(var32, var33);
5621 var31 = var34;
5622 varonce30 = var31;
5623 }
5624 var35 = NEW_array__Array(&type_array__Arraykernel__Object);
5625 { /* var35 = array_instance Array[Object] */
5626 var36 = 3;
5627 var37 = NEW_array__NativeArray(var36, &type_array__NativeArraykernel__Object);
5628 ((struct instance_array__NativeArray*)var37)->values[0] = (val*) var25;
5629 ((struct instance_array__NativeArray*)var37)->values[1] = (val*) var29;
5630 ((struct instance_array__NativeArray*)var37)->values[2] = (val*) var31;
5631 ((void (*)(val*, val*, long))(var35->class->vft[COLOR_array__Array__with_native]))(var35, var37, var36) /* with_native on <var35:Array[Object]>*/;
5632 CHECK_NEW_array__Array(var35);
5633 }
5634 var38 = ((val* (*)(val*))(var35->class->vft[COLOR_string__Object__to_s]))(var35) /* to_s on <var35:Array[Object]>*/;
5635 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var23, var38) /* provide_declaration on <self:SeparateCompiler>*/;
5636 var39 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateCompiler>*/;
5637 var_v = var39;
5638 if (varonce40) {
5639 var41 = varonce40;
5640 } else {
5641 var42 = "const struct types resolution_table_";
5642 var43 = 36;
5643 var44 = string__NativeString__to_s_with_length(var42, var43);
5644 var41 = var44;
5645 varonce40 = var41;
5646 }
5647 var45 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MType>*/;
5648 if (varonce46) {
5649 var47 = varonce46;
5650 } else {
5651 var48 = " = {";
5652 var49 = 4;
5653 var50 = string__NativeString__to_s_with_length(var48, var49);
5654 var47 = var50;
5655 varonce46 = var47;
5656 }
5657 var51 = NEW_array__Array(&type_array__Arraykernel__Object);
5658 { /* var51 = array_instance Array[Object] */
5659 var52 = 3;
5660 var53 = NEW_array__NativeArray(var52, &type_array__NativeArraykernel__Object);
5661 ((struct instance_array__NativeArray*)var53)->values[0] = (val*) var41;
5662 ((struct instance_array__NativeArray*)var53)->values[1] = (val*) var45;
5663 ((struct instance_array__NativeArray*)var53)->values[2] = (val*) var47;
5664 ((void (*)(val*, val*, long))(var51->class->vft[COLOR_array__Array__with_native]))(var51, var53, var52) /* with_native on <var51:Array[Object]>*/;
5665 CHECK_NEW_array__Array(var51);
5666 }
5667 var54 = ((val* (*)(val*))(var51->class->vft[COLOR_string__Object__to_s]))(var51) /* to_s on <var51:Array[Object]>*/;
5668 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var54) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5669 /* <var_layout:nullable Layout[MType]> isa PHLayout[MClassType, MType] */
5670 cltype56 = type_layout_builders__PHLayoutmodel__MClassTypemodel__MType.color;
5671 idtype57 = type_layout_builders__PHLayoutmodel__MClassTypemodel__MType.id;
5672 if(var_layout == NULL) {
5673 var55 = 0;
5674 } else {
5675 if(cltype56 >= var_layout->type->table_size) {
5676 var55 = 0;
5677 } else {
5678 var55 = var_layout->type->type_table[cltype56] == idtype57;
5679 }
5680 }
5681 if (var55){
5682 var58 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__masks]))(var_layout) /* masks on <var_layout:nullable Layout[MType](PHLayout[MClassType, MType])>*/;
5683 var59 = ((val* (*)(val*, val*))(var58->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var58, var_mclass_type) /* [] on <var58:Map[Object, Int](Map[MClassType, Int])>*/;
5684 if (varonce60) {
5685 var61 = varonce60;
5686 } else {
5687 var62 = ",";
5688 var63 = 1;
5689 var64 = string__NativeString__to_s_with_length(var62, var63);
5690 var61 = var64;
5691 varonce60 = var61;
5692 }
5693 var65 = NEW_array__Array(&type_array__Arraykernel__Object);
5694 { /* var65 = array_instance Array[Object] */
5695 var66 = 2;
5696 var67 = NEW_array__NativeArray(var66, &type_array__NativeArraykernel__Object);
5697 ((struct instance_array__NativeArray*)var67)->values[0] = (val*) var59;
5698 ((struct instance_array__NativeArray*)var67)->values[1] = (val*) var61;
5699 ((void (*)(val*, val*, long))(var65->class->vft[COLOR_array__Array__with_native]))(var65, var67, var66) /* with_native on <var65:Array[Object]>*/;
5700 CHECK_NEW_array__Array(var65);
5701 }
5702 var68 = ((val* (*)(val*))(var65->class->vft[COLOR_string__Object__to_s]))(var65) /* to_s on <var65:Array[Object]>*/;
5703 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var68) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5704 } else {
5705 if (varonce69) {
5706 var70 = varonce69;
5707 } else {
5708 var71 = "0, /* dummy */";
5709 var72 = 14;
5710 var73 = string__NativeString__to_s_with_length(var71, var72);
5711 var70 = var73;
5712 varonce69 = var70;
5713 }
5714 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var70) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5715 }
5716 if (varonce74) {
5717 var75 = varonce74;
5718 } else {
5719 var76 = "{";
5720 var77 = 1;
5721 var78 = string__NativeString__to_s_with_length(var76, var77);
5722 var75 = var78;
5723 varonce74 = var75;
5724 }
5725 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var75) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5726 var79 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__resolution_tables]))(self) /* resolution_tables on <self:SeparateCompiler>*/;
5727 var80 = ((val* (*)(val*, val*))(var79->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var79, var_mclass_type) /* [] on <var79:Map[MClassType, Array[nullable MType]]>*/;
5728 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_abstract_collection__Collection__iterator]))(var80) /* iterator on <var80:nullable Object(Array[nullable MType])>*/;
5729 for(;;) {
5730 var82 = ((short int (*)(val*))(var81->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var81) /* is_ok on <var81:Iterator[nullable Object]>*/;
5731 if(!var82) break;
5732 var83 = ((val* (*)(val*))(var81->class->vft[COLOR_abstract_collection__Iterator__item]))(var81) /* item on <var81:Iterator[nullable Object]>*/;
5733 var_t = var83;
5734 var84 = NULL;
5735 if (var_t == NULL) {
5736 var85 = 1; /* is null */
5737 } else {
5738 var85 = 0; /* arg is null but recv is not */
5739 }
5740 if (var85){
5741 if (varonce86) {
5742 var87 = varonce86;
5743 } else {
5744 var88 = "NULL, /* empty */";
5745 var89 = 17;
5746 var90 = string__NativeString__to_s_with_length(var88, var89);
5747 var87 = var90;
5748 varonce86 = var87;
5749 }
5750 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var87) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5751 } else {
5752 var91 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateCompiler>*/;
5753 var92 = 1;
5754 var93 = ((val* (*)(val*, val*, val*, val*, short int))(var_t->class->vft[COLOR_model__MType__resolve_for]))(var_t, var_mclass_type, var_mclass_type, var91, var92) /* resolve_for on <var_t:nullable MType(MType)>*/;
5755 var_tv = var93;
5756 var94 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_layout]))(self) /* type_layout on <self:SeparateCompiler>*/;
5757 if (var94 == NULL) {
5758 fprintf(stderr, "Runtime error: %s", "Reciever is null");
5759 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 700);
5760 exit(1);
5761 } else {
5762 var95 = ((val* (*)(val*))(var94->class->vft[COLOR_layout_builders__Layout__ids]))(var94) /* ids on <var94:nullable Layout[MType]>*/;
5763 }
5764 var96 = ((short int (*)(val*, val*))(var95->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var95, var_tv) /* has_key on <var95:Map[Object, Int](Map[MType, Int])>*/;
5765 if (var96){
5766 if (varonce97) {
5767 var98 = varonce97;
5768 } else {
5769 var99 = "type_";
5770 var100 = 5;
5771 var101 = string__NativeString__to_s_with_length(var99, var100);
5772 var98 = var101;
5773 varonce97 = var98;
5774 }
5775 var102 = ((val* (*)(val*))(var_tv->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_tv) /* c_name on <var_tv:MType>*/;
5776 var103 = NEW_array__Array(&type_array__Arraykernel__Object);
5777 { /* var103 = array_instance Array[Object] */
5778 var104 = 2;
5779 var105 = NEW_array__NativeArray(var104, &type_array__NativeArraykernel__Object);
5780 ((struct instance_array__NativeArray*)var105)->values[0] = (val*) var98;
5781 ((struct instance_array__NativeArray*)var105)->values[1] = (val*) var102;
5782 ((void (*)(val*, val*, long))(var103->class->vft[COLOR_array__Array__with_native]))(var103, var105, var104) /* with_native on <var103:Array[Object]>*/;
5783 CHECK_NEW_array__Array(var103);
5784 }
5785 var106 = ((val* (*)(val*))(var103->class->vft[COLOR_string__Object__to_s]))(var103) /* to_s on <var103:Array[Object]>*/;
5786 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var106) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
5787 if (varonce107) {
5788 var108 = varonce107;
5789 } else {
5790 var109 = "&type_";
5791 var110 = 6;
5792 var111 = string__NativeString__to_s_with_length(var109, var110);
5793 var108 = var111;
5794 varonce107 = var108;
5795 }
5796 var112 = ((val* (*)(val*))(var_tv->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_tv) /* c_name on <var_tv:MType>*/;
5797 if (varonce113) {
5798 var114 = varonce113;
5799 } else {
5800 var115 = ", /* ";
5801 var116 = 5;
5802 var117 = string__NativeString__to_s_with_length(var115, var116);
5803 var114 = var117;
5804 varonce113 = var114;
5805 }
5806 if (varonce118) {
5807 var119 = varonce118;
5808 } else {
5809 var120 = ": ";
5810 var121 = 2;
5811 var122 = string__NativeString__to_s_with_length(var120, var121);
5812 var119 = var122;
5813 varonce118 = var119;
5814 }
5815 if (varonce123) {
5816 var124 = varonce123;
5817 } else {
5818 var125 = " */";
5819 var126 = 3;
5820 var127 = string__NativeString__to_s_with_length(var125, var126);
5821 var124 = var127;
5822 varonce123 = var124;
5823 }
5824 var128 = NEW_array__Array(&type_array__Arraykernel__Object);
5825 { /* var128 = array_instance Array[Object] */
5826 var129 = 7;
5827 var130 = NEW_array__NativeArray(var129, &type_array__NativeArraykernel__Object);
5828 ((struct instance_array__NativeArray*)var130)->values[0] = (val*) var108;
5829 ((struct instance_array__NativeArray*)var130)->values[1] = (val*) var112;
5830 ((struct instance_array__NativeArray*)var130)->values[2] = (val*) var114;
5831 ((struct instance_array__NativeArray*)var130)->values[3] = (val*) var_t;
5832 ((struct instance_array__NativeArray*)var130)->values[4] = (val*) var119;
5833 ((struct instance_array__NativeArray*)var130)->values[5] = (val*) var_tv;
5834 ((struct instance_array__NativeArray*)var130)->values[6] = (val*) var124;
5835 ((void (*)(val*, val*, long))(var128->class->vft[COLOR_array__Array__with_native]))(var128, var130, var129) /* with_native on <var128:Array[Object]>*/;
5836 CHECK_NEW_array__Array(var128);
5837 }
5838 var131 = ((val* (*)(val*))(var128->class->vft[COLOR_string__Object__to_s]))(var128) /* to_s on <var128:Array[Object]>*/;
5839 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var131) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5840 } else {
5841 if (varonce132) {
5842 var133 = varonce132;
5843 } else {
5844 var134 = "NULL, /* empty (";
5845 var135 = 16;
5846 var136 = string__NativeString__to_s_with_length(var134, var135);
5847 var133 = var136;
5848 varonce132 = var133;
5849 }
5850 if (varonce137) {
5851 var138 = varonce137;
5852 } else {
5853 var139 = ": ";
5854 var140 = 2;
5855 var141 = string__NativeString__to_s_with_length(var139, var140);
5856 var138 = var141;
5857 varonce137 = var138;
5858 }
5859 if (varonce142) {
5860 var143 = varonce142;
5861 } else {
5862 var144 = " not a live type) */";
5863 var145 = 20;
5864 var146 = string__NativeString__to_s_with_length(var144, var145);
5865 var143 = var146;
5866 varonce142 = var143;
5867 }
5868 var147 = NEW_array__Array(&type_array__Arraykernel__Object);
5869 { /* var147 = array_instance Array[Object] */
5870 var148 = 5;
5871 var149 = NEW_array__NativeArray(var148, &type_array__NativeArraykernel__Object);
5872 ((struct instance_array__NativeArray*)var149)->values[0] = (val*) var133;
5873 ((struct instance_array__NativeArray*)var149)->values[1] = (val*) var_t;
5874 ((struct instance_array__NativeArray*)var149)->values[2] = (val*) var138;
5875 ((struct instance_array__NativeArray*)var149)->values[3] = (val*) var_tv;
5876 ((struct instance_array__NativeArray*)var149)->values[4] = (val*) var143;
5877 ((void (*)(val*, val*, long))(var147->class->vft[COLOR_array__Array__with_native]))(var147, var149, var148) /* with_native on <var147:Array[Object]>*/;
5878 CHECK_NEW_array__Array(var147);
5879 }
5880 var150 = ((val* (*)(val*))(var147->class->vft[COLOR_string__Object__to_s]))(var147) /* to_s on <var147:Array[Object]>*/;
5881 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var150) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5882 }
5883 }
5884 CONTINUE_label: (void)0;
5885 ((void (*)(val*))(var81->class->vft[COLOR_abstract_collection__Iterator__next]))(var81) /* next on <var81:Iterator[nullable Object]>*/;
5886 }
5887 BREAK_label: (void)0;
5888 if (varonce151) {
5889 var152 = varonce151;
5890 } else {
5891 var153 = "}";
5892 var154 = 1;
5893 var155 = string__NativeString__to_s_with_length(var153, var154);
5894 var152 = var155;
5895 varonce151 = var152;
5896 }
5897 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var152) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5898 if (varonce156) {
5899 var157 = varonce156;
5900 } else {
5901 var158 = "};";
5902 var159 = 2;
5903 var160 = string__NativeString__to_s_with_length(var158, var159);
5904 var157 = var160;
5905 varonce156 = var157;
5906 }
5907 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var157) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
5908 var161 = 1;
5909 var = var161;
5910 goto RET_LABEL;
5911 RET_LABEL:;
5912 return var;
5913 }
5914 /* method separate_compiler#SeparateCompiler#compile_type_resolution_table for (self: Object, MType): Bool */
5915 short int VIRTUAL_separate_compiler__SeparateCompiler__compile_type_resolution_table(val* self, val* p0) {
5916 short int var /* : Bool */;
5917 short int var1 /* : Bool */;
5918 var1 = separate_compiler__SeparateCompiler__compile_type_resolution_table(self, p0);
5919 var = var1;
5920 RET_LABEL:;
5921 return var;
5922 }
5923 /* method separate_compiler#SeparateCompiler#compile_class_to_c for (self: SeparateCompiler, MClass) */
5924 void separate_compiler__SeparateCompiler__compile_class_to_c(val* self, val* p0) {
5925 val* var_mclass /* var mclass: MClass */;
5926 val* var /* : MClassDef */;
5927 val* var1 /* : MClassType */;
5928 val* var_mtype /* var mtype: MClassType */;
5929 val* var2 /* : String */;
5930 val* var_c_name /* var c_name: String */;
5931 val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
5932 val* var4 /* : nullable Object */;
5933 val* var_vft /* var vft: Array[nullable MPropDef] */;
5934 val* var5 /* : Map[MClass, Array[nullable MPropDef]] */;
5935 val* var6 /* : nullable Object */;
5936 val* var_attrs /* var attrs: Array[nullable MPropDef] */;
5937 val* var7 /* : AbstractCompilerVisitor */;
5938 val* var_v /* var v: SeparateCompilerVisitor */;
5939 short int var8 /* : Bool */;
5940 short int var9 /* : Bool */;
5941 val* var10 /* : RapidTypeAnalysis */;
5942 val* var11 /* : HashSet[MClass] */;
5943 short int var12 /* : Bool */;
5944 short int var13 /* : Bool */;
5945 short int var_ /* var : Bool */;
5946 val* var14 /* : String */;
5947 static val* varonce;
5948 val* var15 /* : String */;
5949 char* var16 /* : NativeString */;
5950 long var17 /* : Int */;
5951 val* var18 /* : String */;
5952 short int var19 /* : Bool */;
5953 short int var_20 /* var : Bool */;
5954 val* var21 /* : String */;
5955 static val* varonce22;
5956 val* var23 /* : String */;
5957 char* var24 /* : NativeString */;
5958 long var25 /* : Int */;
5959 val* var26 /* : String */;
5960 short int var27 /* : Bool */;
5961 short int var_is_dead /* var is_dead: Bool */;
5962 static val* varonce28;
5963 val* var29 /* : String */;
5964 char* var30 /* : NativeString */;
5965 long var31 /* : Int */;
5966 val* var32 /* : String */;
5967 static val* varonce33;
5968 val* var34 /* : String */;
5969 char* var35 /* : NativeString */;
5970 long var36 /* : Int */;
5971 val* var37 /* : String */;
5972 val* var38 /* : Array[Object] */;
5973 long var39 /* : Int */;
5974 val* var40 /* : NativeArray[Object] */;
5975 val* var41 /* : String */;
5976 short int var42 /* : Bool */;
5977 static val* varonce43;
5978 val* var44 /* : String */;
5979 char* var45 /* : NativeString */;
5980 long var46 /* : Int */;
5981 val* var47 /* : String */;
5982 val* var48 /* : Array[Object] */;
5983 long var49 /* : Int */;
5984 val* var50 /* : NativeArray[Object] */;
5985 val* var51 /* : String */;
5986 static val* varonce52;
5987 val* var53 /* : String */;
5988 char* var54 /* : NativeString */;
5989 long var55 /* : Int */;
5990 val* var56 /* : String */;
5991 static val* varonce57;
5992 val* var58 /* : String */;
5993 char* var59 /* : NativeString */;
5994 long var60 /* : Int */;
5995 val* var61 /* : String */;
5996 val* var62 /* : Array[Object] */;
5997 long var63 /* : Int */;
5998 val* var64 /* : NativeArray[Object] */;
5999 val* var65 /* : String */;
6000 static val* varonce66;
6001 val* var67 /* : String */;
6002 char* var68 /* : NativeString */;
6003 long var69 /* : Int */;
6004 val* var70 /* : String */;
6005 static val* varonce71;
6006 val* var72 /* : String */;
6007 char* var73 /* : NativeString */;
6008 long var74 /* : Int */;
6009 val* var75 /* : String */;
6010 val* var76 /* : Array[Object] */;
6011 long var77 /* : Int */;
6012 val* var78 /* : NativeArray[Object] */;
6013 val* var79 /* : String */;
6014 long var80 /* : Int */;
6015 static val* varonce81;
6016 val* var82 /* : String */;
6017 char* var83 /* : NativeString */;
6018 long var84 /* : Int */;
6019 val* var85 /* : String */;
6020 val* var86 /* : Array[Object] */;
6021 long var87 /* : Int */;
6022 val* var88 /* : NativeArray[Object] */;
6023 val* var89 /* : Object */;
6024 val* var90 /* : String */;
6025 static val* varonce91;
6026 val* var92 /* : String */;
6027 char* var93 /* : NativeString */;
6028 long var94 /* : Int */;
6029 val* var95 /* : String */;
6030 val* var96 /* : Range[Int] */;
6031 long var97 /* : Int */;
6032 long var98 /* : Int */;
6033 val* var99 /* : Discrete */;
6034 val* var100 /* : Discrete */;
6035 val* var101 /* : Iterator[nullable Object] */;
6036 short int var102 /* : Bool */;
6037 val* var103 /* : nullable Object */;
6038 long var_i /* var i: Int */;
6039 long var104 /* : Int */;
6040 val* var105 /* : nullable Object */;
6041 val* var_mpropdef /* var mpropdef: nullable MPropDef */;
6042 val* var106 /* : null */;
6043 short int var107 /* : Bool */;
6044 static val* varonce108;
6045 val* var109 /* : String */;
6046 char* var110 /* : NativeString */;
6047 long var111 /* : Int */;
6048 val* var112 /* : String */;
6049 short int var113 /* : Bool */;
6050 int cltype;
6051 int idtype;
6052 val* var114 /* : AbstractRuntimeFunction */;
6053 val* var_rf /* var rf: AbstractRuntimeFunction */;
6054 val* var115 /* : String */;
6055 static val* varonce116;
6056 val* var117 /* : String */;
6057 char* var118 /* : NativeString */;
6058 long var119 /* : Int */;
6059 val* var120 /* : String */;
6060 val* var121 /* : String */;
6061 static val* varonce122;
6062 val* var123 /* : String */;
6063 char* var124 /* : NativeString */;
6064 long var125 /* : Int */;
6065 val* var126 /* : String */;
6066 val* var127 /* : MModule */;
6067 static val* varonce128;
6068 val* var129 /* : String */;
6069 char* var130 /* : NativeString */;
6070 long var131 /* : Int */;
6071 val* var132 /* : String */;
6072 static val* varonce133;
6073 val* var134 /* : String */;
6074 char* var135 /* : NativeString */;
6075 long var136 /* : Int */;
6076 val* var137 /* : String */;
6077 static val* varonce138;
6078 val* var139 /* : String */;
6079 char* var140 /* : NativeString */;
6080 long var141 /* : Int */;
6081 val* var142 /* : String */;
6082 val* var143 /* : Array[Object] */;
6083 long var144 /* : Int */;
6084 val* var145 /* : NativeArray[Object] */;
6085 val* var146 /* : String */;
6086 static val* varonce147;
6087 val* var148 /* : String */;
6088 char* var149 /* : NativeString */;
6089 long var150 /* : Int */;
6090 val* var151 /* : String */;
6091 static val* varonce152;
6092 val* var153 /* : String */;
6093 char* var154 /* : NativeString */;
6094 long var155 /* : Int */;
6095 val* var156 /* : String */;
6096 val* var157 /* : String */;
6097 static val* varonce158;
6098 val* var159 /* : String */;
6099 char* var160 /* : NativeString */;
6100 long var161 /* : Int */;
6101 val* var162 /* : String */;
6102 short int var163 /* : Bool */;
6103 val* var164 /* : CodeWriter */;
6104 static val* varonce165;
6105 val* var166 /* : String */;
6106 char* var167 /* : NativeString */;
6107 long var168 /* : Int */;
6108 val* var169 /* : String */;
6109 static val* varonce170;
6110 val* var171 /* : String */;
6111 char* var172 /* : NativeString */;
6112 long var173 /* : Int */;
6113 val* var174 /* : String */;
6114 val* var175 /* : Array[Object] */;
6115 long var176 /* : Int */;
6116 val* var177 /* : NativeArray[Object] */;
6117 val* var178 /* : String */;
6118 val* var179 /* : CodeWriter */;
6119 static val* varonce180;
6120 val* var181 /* : String */;
6121 char* var182 /* : NativeString */;
6122 long var183 /* : Int */;
6123 val* var184 /* : String */;
6124 val* var185 /* : CodeWriter */;
6125 static val* varonce186;
6126 val* var187 /* : String */;
6127 char* var188 /* : NativeString */;
6128 long var189 /* : Int */;
6129 val* var190 /* : String */;
6130 val* var191 /* : CodeWriter */;
6131 val* var192 /* : String */;
6132 static val* varonce193;
6133 val* var194 /* : String */;
6134 char* var195 /* : NativeString */;
6135 long var196 /* : Int */;
6136 val* var197 /* : String */;
6137 val* var198 /* : Array[Object] */;
6138 long var199 /* : Int */;
6139 val* var200 /* : NativeArray[Object] */;
6140 val* var201 /* : String */;
6141 val* var202 /* : CodeWriter */;
6142 static val* varonce203;
6143 val* var204 /* : String */;
6144 char* var205 /* : NativeString */;
6145 long var206 /* : Int */;
6146 val* var207 /* : String */;
6147 val* var208 /* : RapidTypeAnalysis */;
6148 val* var209 /* : HashSet[MClassType] */;
6149 short int var210 /* : Bool */;
6150 short int var211 /* : Bool */;
6151 val* var212 /* : CodeWriter */;
6152 static val* varonce213;
6153 val* var214 /* : String */;
6154 char* var215 /* : NativeString */;
6155 long var216 /* : Int */;
6156 val* var217 /* : String */;
6157 static val* varonce218;
6158 val* var219 /* : String */;
6159 char* var220 /* : NativeString */;
6160 long var221 /* : Int */;
6161 val* var222 /* : String */;
6162 val* var223 /* : String */;
6163 static val* varonce224;
6164 val* var225 /* : String */;
6165 char* var226 /* : NativeString */;
6166 long var227 /* : Int */;
6167 val* var228 /* : String */;
6168 val* var229 /* : Array[Object] */;
6169 long var230 /* : Int */;
6170 val* var231 /* : NativeArray[Object] */;
6171 val* var232 /* : String */;
6172 static val* varonce233;
6173 val* var234 /* : String */;
6174 char* var235 /* : NativeString */;
6175 long var236 /* : Int */;
6176 val* var237 /* : String */;
6177 static val* varonce238;
6178 val* var239 /* : String */;
6179 char* var240 /* : NativeString */;
6180 long var241 /* : Int */;
6181 val* var242 /* : String */;
6182 val* var243 /* : Array[Object] */;
6183 long var244 /* : Int */;
6184 val* var245 /* : NativeArray[Object] */;
6185 val* var246 /* : String */;
6186 static val* varonce247;
6187 val* var248 /* : String */;
6188 char* var249 /* : NativeString */;
6189 long var250 /* : Int */;
6190 val* var251 /* : String */;
6191 val* var252 /* : String */;
6192 static val* varonce253;
6193 val* var254 /* : String */;
6194 char* var255 /* : NativeString */;
6195 long var256 /* : Int */;
6196 val* var257 /* : String */;
6197 val* var258 /* : String */;
6198 static val* varonce259;
6199 val* var260 /* : String */;
6200 char* var261 /* : NativeString */;
6201 long var262 /* : Int */;
6202 val* var263 /* : String */;
6203 val* var264 /* : Array[Object] */;
6204 long var265 /* : Int */;
6205 val* var266 /* : NativeArray[Object] */;
6206 val* var267 /* : String */;
6207 static val* varonce268;
6208 val* var269 /* : String */;
6209 char* var270 /* : NativeString */;
6210 long var271 /* : Int */;
6211 val* var272 /* : String */;
6212 static val* varonce273;
6213 val* var274 /* : String */;
6214 char* var275 /* : NativeString */;
6215 long var276 /* : Int */;
6216 val* var277 /* : String */;
6217 static val* varonce278;
6218 val* var279 /* : String */;
6219 char* var280 /* : NativeString */;
6220 long var281 /* : Int */;
6221 val* var282 /* : String */;
6222 val* var283 /* : Array[Object] */;
6223 long var284 /* : Int */;
6224 val* var285 /* : NativeArray[Object] */;
6225 val* var286 /* : String */;
6226 static val* varonce287;
6227 val* var288 /* : String */;
6228 char* var289 /* : NativeString */;
6229 long var290 /* : Int */;
6230 val* var291 /* : String */;
6231 val* var292 /* : Array[Object] */;
6232 long var293 /* : Int */;
6233 val* var294 /* : NativeArray[Object] */;
6234 val* var295 /* : String */;
6235 static val* varonce296;
6236 val* var297 /* : String */;
6237 char* var298 /* : NativeString */;
6238 long var299 /* : Int */;
6239 val* var300 /* : String */;
6240 static val* varonce301;
6241 val* var302 /* : String */;
6242 char* var303 /* : NativeString */;
6243 long var304 /* : Int */;
6244 val* var305 /* : String */;
6245 val* var306 /* : Array[Object] */;
6246 long var307 /* : Int */;
6247 val* var308 /* : NativeArray[Object] */;
6248 val* var309 /* : String */;
6249 static val* varonce310;
6250 val* var311 /* : String */;
6251 char* var312 /* : NativeString */;
6252 long var313 /* : Int */;
6253 val* var314 /* : String */;
6254 val* var315 /* : Array[Object] */;
6255 long var316 /* : Int */;
6256 val* var317 /* : NativeArray[Object] */;
6257 val* var318 /* : String */;
6258 static val* varonce319;
6259 val* var320 /* : String */;
6260 char* var321 /* : NativeString */;
6261 long var322 /* : Int */;
6262 val* var323 /* : String */;
6263 static val* varonce324;
6264 val* var325 /* : String */;
6265 char* var326 /* : NativeString */;
6266 long var327 /* : Int */;
6267 val* var328 /* : String */;
6268 val* var329 /* : Array[Object] */;
6269 long var330 /* : Int */;
6270 val* var331 /* : NativeArray[Object] */;
6271 val* var332 /* : String */;
6272 static val* varonce333;
6273 val* var334 /* : String */;
6274 char* var335 /* : NativeString */;
6275 long var336 /* : Int */;
6276 val* var337 /* : String */;
6277 static val* varonce338;
6278 val* var339 /* : String */;
6279 char* var340 /* : NativeString */;
6280 long var341 /* : Int */;
6281 val* var342 /* : String */;
6282 static val* varonce343;
6283 val* var344 /* : String */;
6284 char* var345 /* : NativeString */;
6285 long var346 /* : Int */;
6286 val* var347 /* : String */;
6287 val* var348 /* : String */;
6288 static val* varonce349;
6289 val* var350 /* : String */;
6290 char* var351 /* : NativeString */;
6291 long var352 /* : Int */;
6292 val* var353 /* : String */;
6293 short int var354 /* : Bool */;
6294 val* var355 /* : CodeWriter */;
6295 static val* varonce356;
6296 val* var357 /* : String */;
6297 char* var358 /* : NativeString */;
6298 long var359 /* : Int */;
6299 val* var360 /* : String */;
6300 static val* varonce361;
6301 val* var362 /* : String */;
6302 char* var363 /* : NativeString */;
6303 long var364 /* : Int */;
6304 val* var365 /* : String */;
6305 val* var366 /* : Array[Object] */;
6306 long var367 /* : Int */;
6307 val* var368 /* : NativeArray[Object] */;
6308 val* var369 /* : String */;
6309 val* var370 /* : CodeWriter */;
6310 static val* varonce371;
6311 val* var372 /* : String */;
6312 char* var373 /* : NativeString */;
6313 long var374 /* : Int */;
6314 val* var375 /* : String */;
6315 val* var376 /* : CodeWriter */;
6316 static val* varonce377;
6317 val* var378 /* : String */;
6318 char* var379 /* : NativeString */;
6319 long var380 /* : Int */;
6320 val* var381 /* : String */;
6321 val* var382 /* : CodeWriter */;
6322 static val* varonce383;
6323 val* var384 /* : String */;
6324 char* var385 /* : NativeString */;
6325 long var386 /* : Int */;
6326 val* var387 /* : String */;
6327 val* var388 /* : CodeWriter */;
6328 static val* varonce389;
6329 val* var390 /* : String */;
6330 char* var391 /* : NativeString */;
6331 long var392 /* : Int */;
6332 val* var393 /* : String */;
6333 static val* varonce394;
6334 val* var395 /* : String */;
6335 char* var396 /* : NativeString */;
6336 long var397 /* : Int */;
6337 val* var398 /* : String */;
6338 val* var399 /* : Array[Object] */;
6339 long var400 /* : Int */;
6340 val* var401 /* : NativeArray[Object] */;
6341 val* var402 /* : String */;
6342 val* var403 /* : String */;
6343 static val* varonce404;
6344 val* var405 /* : String */;
6345 char* var406 /* : NativeString */;
6346 long var407 /* : Int */;
6347 val* var408 /* : String */;
6348 static val* varonce409;
6349 val* var410 /* : String */;
6350 char* var411 /* : NativeString */;
6351 long var412 /* : Int */;
6352 val* var413 /* : String */;
6353 val* var414 /* : Array[Object] */;
6354 long var415 /* : Int */;
6355 val* var416 /* : NativeArray[Object] */;
6356 val* var417 /* : String */;
6357 static val* varonce418;
6358 val* var419 /* : String */;
6359 char* var420 /* : NativeString */;
6360 long var421 /* : Int */;
6361 val* var422 /* : String */;
6362 static val* varonce423;
6363 val* var424 /* : String */;
6364 char* var425 /* : NativeString */;
6365 long var426 /* : Int */;
6366 val* var427 /* : String */;
6367 val* var428 /* : Array[Object] */;
6368 long var429 /* : Int */;
6369 val* var430 /* : NativeArray[Object] */;
6370 val* var431 /* : String */;
6371 val* var432 /* : String */;
6372 static val* varonce433;
6373 val* var434 /* : String */;
6374 char* var435 /* : NativeString */;
6375 long var436 /* : Int */;
6376 val* var437 /* : String */;
6377 static val* varonce438;
6378 val* var439 /* : String */;
6379 char* var440 /* : NativeString */;
6380 long var441 /* : Int */;
6381 val* var442 /* : String */;
6382 val* var443 /* : Array[Object] */;
6383 long var444 /* : Int */;
6384 val* var445 /* : NativeArray[Object] */;
6385 val* var446 /* : String */;
6386 static val* varonce447;
6387 val* var448 /* : String */;
6388 char* var449 /* : NativeString */;
6389 long var450 /* : Int */;
6390 val* var451 /* : String */;
6391 val* var452 /* : RuntimeVariable */;
6392 val* var_res /* var res: RuntimeVariable */;
6393 short int var453 /* : Bool */;
6394 val* var454 /* : Array[MType] */;
6395 val* var455 /* : nullable Object */;
6396 val* var_mtype_elt /* var mtype_elt: MType */;
6397 static val* varonce456;
6398 val* var457 /* : String */;
6399 char* var458 /* : NativeString */;
6400 long var459 /* : Int */;
6401 val* var460 /* : String */;
6402 static val* varonce461;
6403 val* var462 /* : String */;
6404 char* var463 /* : NativeString */;
6405 long var464 /* : Int */;
6406 val* var465 /* : String */;
6407 val* var466 /* : String */;
6408 static val* varonce467;
6409 val* var468 /* : String */;
6410 char* var469 /* : NativeString */;
6411 long var470 /* : Int */;
6412 val* var471 /* : String */;
6413 val* var472 /* : Array[Object] */;
6414 long var473 /* : Int */;
6415 val* var474 /* : NativeArray[Object] */;
6416 val* var475 /* : String */;
6417 static val* varonce476;
6418 val* var477 /* : String */;
6419 char* var478 /* : NativeString */;
6420 long var479 /* : Int */;
6421 val* var480 /* : String */;
6422 val* var481 /* : Array[Object] */;
6423 long var482 /* : Int */;
6424 val* var483 /* : NativeArray[Object] */;
6425 val* var484 /* : String */;
6426 static val* varonce485;
6427 val* var486 /* : String */;
6428 char* var487 /* : NativeString */;
6429 long var488 /* : Int */;
6430 val* var489 /* : String */;
6431 static val* varonce490;
6432 val* var491 /* : String */;
6433 char* var492 /* : NativeString */;
6434 long var493 /* : Int */;
6435 val* var494 /* : String */;
6436 val* var495 /* : Array[Object] */;
6437 long var496 /* : Int */;
6438 val* var497 /* : NativeArray[Object] */;
6439 val* var498 /* : String */;
6440 static val* varonce499;
6441 val* var500 /* : String */;
6442 char* var501 /* : NativeString */;
6443 long var502 /* : Int */;
6444 val* var503 /* : String */;
6445 static val* varonce504;
6446 val* var505 /* : String */;
6447 char* var506 /* : NativeString */;
6448 long var507 /* : Int */;
6449 val* var508 /* : String */;
6450 val* var509 /* : Array[Object] */;
6451 long var510 /* : Int */;
6452 val* var511 /* : NativeArray[Object] */;
6453 val* var512 /* : String */;
6454 static val* varonce513;
6455 val* var514 /* : String */;
6456 char* var515 /* : NativeString */;
6457 long var516 /* : Int */;
6458 val* var517 /* : String */;
6459 static val* varonce518;
6460 val* var519 /* : String */;
6461 char* var520 /* : NativeString */;
6462 long var521 /* : Int */;
6463 val* var522 /* : String */;
6464 val* var523 /* : Array[Object] */;
6465 long var524 /* : Int */;
6466 val* var525 /* : NativeArray[Object] */;
6467 val* var526 /* : String */;
6468 static val* varonce527;
6469 val* var528 /* : String */;
6470 char* var529 /* : NativeString */;
6471 long var530 /* : Int */;
6472 val* var531 /* : String */;
6473 static val* varonce532;
6474 val* var533 /* : String */;
6475 char* var534 /* : NativeString */;
6476 long var535 /* : Int */;
6477 val* var536 /* : String */;
6478 val* var537 /* : Array[Object] */;
6479 long var538 /* : Int */;
6480 val* var539 /* : NativeArray[Object] */;
6481 val* var540 /* : String */;
6482 val* var541 /* : String */;
6483 static val* varonce542;
6484 val* var543 /* : String */;
6485 char* var544 /* : NativeString */;
6486 long var545 /* : Int */;
6487 val* var546 /* : String */;
6488 static val* varonce547;
6489 val* var548 /* : String */;
6490 char* var549 /* : NativeString */;
6491 long var550 /* : Int */;
6492 val* var551 /* : String */;
6493 val* var552 /* : Array[Object] */;
6494 long var553 /* : Int */;
6495 val* var554 /* : NativeArray[Object] */;
6496 val* var555 /* : String */;
6497 static val* varonce556;
6498 val* var557 /* : String */;
6499 char* var558 /* : NativeString */;
6500 long var559 /* : Int */;
6501 val* var560 /* : String */;
6502 static val* varonce561;
6503 val* var562 /* : String */;
6504 char* var563 /* : NativeString */;
6505 long var564 /* : Int */;
6506 val* var565 /* : String */;
6507 val* var566 /* : Array[Object] */;
6508 long var567 /* : Int */;
6509 val* var568 /* : NativeArray[Object] */;
6510 val* var569 /* : String */;
6511 val* var570 /* : String */;
6512 static val* varonce571;
6513 val* var572 /* : String */;
6514 char* var573 /* : NativeString */;
6515 long var574 /* : Int */;
6516 val* var575 /* : String */;
6517 static val* varonce576;
6518 val* var577 /* : String */;
6519 char* var578 /* : NativeString */;
6520 long var579 /* : Int */;
6521 val* var580 /* : String */;
6522 val* var581 /* : Array[Object] */;
6523 long var582 /* : Int */;
6524 val* var583 /* : NativeArray[Object] */;
6525 val* var584 /* : String */;
6526 static val* varonce585;
6527 val* var586 /* : String */;
6528 char* var587 /* : NativeString */;
6529 long var588 /* : Int */;
6530 val* var589 /* : String */;
6531 val* var590 /* : Array[Object] */;
6532 long var591 /* : Int */;
6533 val* var592 /* : NativeArray[Object] */;
6534 val* var593 /* : String */;
6535 static val* varonce594;
6536 val* var595 /* : String */;
6537 char* var596 /* : NativeString */;
6538 long var597 /* : Int */;
6539 val* var598 /* : String */;
6540 val* var599 /* : RuntimeVariable */;
6541 val* var_res600 /* var res: RuntimeVariable */;
6542 short int var601 /* : Bool */;
6543 static val* varonce602;
6544 val* var603 /* : String */;
6545 char* var604 /* : NativeString */;
6546 long var605 /* : Int */;
6547 val* var606 /* : String */;
6548 long var607 /* : Int */;
6549 static val* varonce608;
6550 val* var609 /* : String */;
6551 char* var610 /* : NativeString */;
6552 long var611 /* : Int */;
6553 val* var612 /* : String */;
6554 val* var613 /* : Array[Object] */;
6555 long var614 /* : Int */;
6556 val* var615 /* : NativeArray[Object] */;
6557 val* var616 /* : Object */;
6558 val* var617 /* : String */;
6559 static val* varonce618;
6560 val* var619 /* : String */;
6561 char* var620 /* : NativeString */;
6562 long var621 /* : Int */;
6563 val* var622 /* : String */;
6564 val* var623 /* : Array[Object] */;
6565 long var624 /* : Int */;
6566 val* var625 /* : NativeArray[Object] */;
6567 val* var626 /* : String */;
6568 static val* varonce627;
6569 val* var628 /* : String */;
6570 char* var629 /* : NativeString */;
6571 long var630 /* : Int */;
6572 val* var631 /* : String */;
6573 static val* varonce632;
6574 val* var633 /* : String */;
6575 char* var634 /* : NativeString */;
6576 long var635 /* : Int */;
6577 val* var636 /* : String */;
6578 val* var637 /* : Array[Object] */;
6579 long var638 /* : Int */;
6580 val* var639 /* : NativeArray[Object] */;
6581 val* var640 /* : String */;
6582 static val* varonce641;
6583 val* var642 /* : String */;
6584 char* var643 /* : NativeString */;
6585 long var644 /* : Int */;
6586 val* var645 /* : String */;
6587 static val* varonce646;
6588 val* var647 /* : String */;
6589 char* var648 /* : NativeString */;
6590 long var649 /* : Int */;
6591 val* var650 /* : String */;
6592 val* var651 /* : Array[Object] */;
6593 long var652 /* : Int */;
6594 val* var653 /* : NativeArray[Object] */;
6595 val* var654 /* : String */;
6596 static val* varonce655;
6597 val* var656 /* : String */;
6598 char* var657 /* : NativeString */;
6599 long var658 /* : Int */;
6600 val* var659 /* : String */;
6601 static val* varonce660;
6602 val* var661 /* : String */;
6603 char* var662 /* : NativeString */;
6604 long var663 /* : Int */;
6605 val* var664 /* : String */;
6606 val* var665 /* : Array[Object] */;
6607 long var666 /* : Int */;
6608 val* var667 /* : NativeArray[Object] */;
6609 val* var668 /* : String */;
6610 static val* varonce669;
6611 val* var670 /* : String */;
6612 char* var671 /* : NativeString */;
6613 long var672 /* : Int */;
6614 val* var673 /* : String */;
6615 var_mclass = p0;
6616 var = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
6617 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model__MClassDef__bound_mtype]))(var) /* bound_mtype on <var:MClassDef>*/;
6618 var_mtype = var1;
6619 var2 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
6620 var_c_name = var2;
6621 var3 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateCompiler>*/;
6622 var4 = ((val* (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var3, var_mclass) /* [] on <var3:Map[MClass, Array[nullable MPropDef]]>*/;
6623 var_vft = var4;
6624 var5 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateCompiler>*/;
6625 var6 = ((val* (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var5, var_mclass) /* [] on <var5:Map[MClass, Array[nullable MPropDef]]>*/;
6626 var_attrs = var6;
6627 var7 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateCompiler>*/;
6628 var_v = var7;
6629 var10 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:SeparateCompiler>*/;
6630 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_classes]))(var10) /* live_classes on <var10:RapidTypeAnalysis>*/;
6631 var12 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_abstract_collection__Collection__has]))(var11, var_mclass) /* has on <var11:HashSet[MClass]>*/;
6632 var13 = !var12;
6633 var_ = var13;
6634 if (var13){
6635 var14 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
6636 if (varonce) {
6637 var15 = varonce;
6638 } else {
6639 var16 = "val*";
6640 var17 = 4;
6641 var18 = string__NativeString__to_s_with_length(var16, var17);
6642 var15 = var18;
6643 varonce = var15;
6644 }
6645 var19 = ((short int (*)(val*, val*))(var14->class->vft[COLOR_kernel__Object___61d_61d]))(var14, var15) /* == on <var14:String>*/;
6646 var9 = var19;
6647 } else {
6648 var9 = var_;
6649 }
6650 var_20 = var9;
6651 if (var9){
6652 var21 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
6653 if (varonce22) {
6654 var23 = varonce22;
6655 } else {
6656 var24 = "NativeArray";
6657 var25 = 11;
6658 var26 = string__NativeString__to_s_with_length(var24, var25);
6659 var23 = var26;
6660 varonce22 = var23;
6661 }
6662 var27 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___33d_61d]))(var21, var23) /* != on <var21:String>*/;
6663 var8 = var27;
6664 } else {
6665 var8 = var_20;
6666 }
6667 var_is_dead = var8;
6668 if (varonce28) {
6669 var29 = varonce28;
6670 } else {
6671 var30 = "/* runtime class ";
6672 var31 = 17;
6673 var32 = string__NativeString__to_s_with_length(var30, var31);
6674 var29 = var32;
6675 varonce28 = var29;
6676 }
6677 if (varonce33) {
6678 var34 = varonce33;
6679 } else {
6680 var35 = " */";
6681 var36 = 3;
6682 var37 = string__NativeString__to_s_with_length(var35, var36);
6683 var34 = var37;
6684 varonce33 = var34;
6685 }
6686 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
6687 { /* var38 = array_instance Array[Object] */
6688 var39 = 3;
6689 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
6690 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var29;
6691 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_c_name;
6692 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var34;
6693 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
6694 CHECK_NEW_array__Array(var38);
6695 }
6696 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
6697 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var41) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
6698 var42 = !var_is_dead;
6699 if (var42){
6700 if (varonce43) {
6701 var44 = varonce43;
6702 } else {
6703 var45 = "class_";
6704 var46 = 6;
6705 var47 = string__NativeString__to_s_with_length(var45, var46);
6706 var44 = var47;
6707 varonce43 = var44;
6708 }
6709 var48 = NEW_array__Array(&type_array__Arraykernel__Object);
6710 { /* var48 = array_instance Array[Object] */
6711 var49 = 2;
6712 var50 = NEW_array__NativeArray(var49, &type_array__NativeArraykernel__Object);
6713 ((struct instance_array__NativeArray*)var50)->values[0] = (val*) var44;
6714 ((struct instance_array__NativeArray*)var50)->values[1] = (val*) var_c_name;
6715 ((void (*)(val*, val*, long))(var48->class->vft[COLOR_array__Array__with_native]))(var48, var50, var49) /* with_native on <var48:Array[Object]>*/;
6716 CHECK_NEW_array__Array(var48);
6717 }
6718 var51 = ((val* (*)(val*))(var48->class->vft[COLOR_string__Object__to_s]))(var48) /* to_s on <var48:Array[Object]>*/;
6719 if (varonce52) {
6720 var53 = varonce52;
6721 } else {
6722 var54 = "extern const struct class class_";
6723 var55 = 32;
6724 var56 = string__NativeString__to_s_with_length(var54, var55);
6725 var53 = var56;
6726 varonce52 = var53;
6727 }
6728 if (varonce57) {
6729 var58 = varonce57;
6730 } else {
6731 var59 = ";";
6732 var60 = 1;
6733 var61 = string__NativeString__to_s_with_length(var59, var60);
6734 var58 = var61;
6735 varonce57 = var58;
6736 }
6737 var62 = NEW_array__Array(&type_array__Arraykernel__Object);
6738 { /* var62 = array_instance Array[Object] */
6739 var63 = 3;
6740 var64 = NEW_array__NativeArray(var63, &type_array__NativeArraykernel__Object);
6741 ((struct instance_array__NativeArray*)var64)->values[0] = (val*) var53;
6742 ((struct instance_array__NativeArray*)var64)->values[1] = (val*) var_c_name;
6743 ((struct instance_array__NativeArray*)var64)->values[2] = (val*) var58;
6744 ((void (*)(val*, val*, long))(var62->class->vft[COLOR_array__Array__with_native]))(var62, var64, var63) /* with_native on <var62:Array[Object]>*/;
6745 CHECK_NEW_array__Array(var62);
6746 }
6747 var65 = ((val* (*)(val*))(var62->class->vft[COLOR_string__Object__to_s]))(var62) /* to_s on <var62:Array[Object]>*/;
6748 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var51, var65) /* provide_declaration on <self:SeparateCompiler>*/;
6749 if (varonce66) {
6750 var67 = varonce66;
6751 } else {
6752 var68 = "const struct class class_";
6753 var69 = 25;
6754 var70 = string__NativeString__to_s_with_length(var68, var69);
6755 var67 = var70;
6756 varonce66 = var67;
6757 }
6758 if (varonce71) {
6759 var72 = varonce71;
6760 } else {
6761 var73 = " = {";
6762 var74 = 4;
6763 var75 = string__NativeString__to_s_with_length(var73, var74);
6764 var72 = var75;
6765 varonce71 = var72;
6766 }
6767 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
6768 { /* var76 = array_instance Array[Object] */
6769 var77 = 3;
6770 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
6771 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var67;
6772 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var_c_name;
6773 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var72;
6774 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
6775 CHECK_NEW_array__Array(var76);
6776 }
6777 var79 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
6778 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var79) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
6779 var80 = ((long (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kind_of]))(self, var_mclass) /* box_kind_of on <self:SeparateCompiler>*/;
6780 if (varonce81) {
6781 var82 = varonce81;
6782 } else {
6783 var83 = ", /* box_kind */";
6784 var84 = 16;
6785 var85 = string__NativeString__to_s_with_length(var83, var84);
6786 var82 = var85;
6787 varonce81 = var82;
6788 }
6789 var86 = NEW_array__Array(&type_array__Arraykernel__Object);
6790 { /* var86 = array_instance Array[Object] */
6791 var87 = 2;
6792 var88 = NEW_array__NativeArray(var87, &type_array__NativeArraykernel__Object);
6793 var89 = BOX_kernel__Int(var80); /* autobox from Int to Object */
6794 ((struct instance_array__NativeArray*)var88)->values[0] = (val*) var89;
6795 ((struct instance_array__NativeArray*)var88)->values[1] = (val*) var82;
6796 ((void (*)(val*, val*, long))(var86->class->vft[COLOR_array__Array__with_native]))(var86, var88, var87) /* with_native on <var86:Array[Object]>*/;
6797 CHECK_NEW_array__Array(var86);
6798 }
6799 var90 = ((val* (*)(val*))(var86->class->vft[COLOR_string__Object__to_s]))(var86) /* to_s on <var86:Array[Object]>*/;
6800 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var90) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
6801 if (varonce91) {
6802 var92 = varonce91;
6803 } else {
6804 var93 = "{";
6805 var94 = 1;
6806 var95 = string__NativeString__to_s_with_length(var93, var94);
6807 var92 = var95;
6808 varonce91 = var92;
6809 }
6810 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var92) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
6811 var96 = NEW_range__Range(&type_range__Rangekernel__Int);
6812 var97 = 0;
6813 var98 = ((long (*)(val*))(var_vft->class->vft[COLOR_abstract_collection__Collection__length]))(var_vft) /* length on <var_vft:Array[nullable MPropDef]>*/;
6814 var99 = BOX_kernel__Int(var97); /* autobox from Int to Discrete */
6815 var100 = BOX_kernel__Int(var98); /* autobox from Int to Discrete */
6816 ((void (*)(val*, val*, val*))(var96->class->vft[COLOR_range__Range__without_last]))(var96, var99, var100) /* without_last on <var96:Range[Int]>*/;
6817 CHECK_NEW_range__Range(var96);
6818 var101 = ((val* (*)(val*))(var96->class->vft[COLOR_abstract_collection__Collection__iterator]))(var96) /* iterator on <var96:Range[Int]>*/;
6819 for(;;) {
6820 var102 = ((short int (*)(val*))(var101->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var101) /* is_ok on <var101:Iterator[nullable Object]>*/;
6821 if(!var102) break;
6822 var103 = ((val* (*)(val*))(var101->class->vft[COLOR_abstract_collection__Iterator__item]))(var101) /* item on <var101:Iterator[nullable Object]>*/;
6823 var104 = ((struct instance_kernel__Int*)var103)->value; /* autounbox from nullable Object to Int */;
6824 var_i = var104;
6825 var105 = ((val* (*)(val*, long))(var_vft->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_vft, var_i) /* [] on <var_vft:Array[nullable MPropDef]>*/;
6826 var_mpropdef = var105;
6827 var106 = NULL;
6828 if (var_mpropdef == NULL) {
6829 var107 = 1; /* is null */
6830 } else {
6831 var107 = 0; /* arg is null but recv is not */
6832 }
6833 if (var107){
6834 if (varonce108) {
6835 var109 = varonce108;
6836 } else {
6837 var110 = "NULL, /* empty */";
6838 var111 = 17;
6839 var112 = string__NativeString__to_s_with_length(var110, var111);
6840 var109 = var112;
6841 varonce108 = var109;
6842 }
6843 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var109) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
6844 } else {
6845 /* <var_mpropdef:nullable MPropDef(MPropDef)> isa MMethodDef */
6846 cltype = type_model__MMethodDef.color;
6847 idtype = type_model__MMethodDef.id;
6848 if(cltype >= var_mpropdef->type->table_size) {
6849 var113 = 0;
6850 } else {
6851 var113 = var_mpropdef->type->type_table[cltype] == idtype;
6852 }
6853 if (!var113) {
6854 fprintf(stderr, "Runtime error: %s", "Assert failed");
6855 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 740);
6856 exit(1);
6857 }
6858 var114 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_separate_compiler__MMethodDef__virtual_runtime_function]))(var_mpropdef) /* virtual_runtime_function on <var_mpropdef:nullable MPropDef(MMethodDef)>*/;
6859 var_rf = var114;
6860 var115 = ((val* (*)(val*))(var_rf->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__c_name]))(var_rf) /* c_name on <var_rf:AbstractRuntimeFunction>*/;
6861 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var115) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
6862 if (varonce116) {
6863 var117 = varonce116;
6864 } else {
6865 var118 = "(nitmethod_t)";
6866 var119 = 13;
6867 var120 = string__NativeString__to_s_with_length(var118, var119);
6868 var117 = var120;
6869 varonce116 = var117;
6870 }
6871 var121 = ((val* (*)(val*))(var_rf->class->vft[COLOR_abstract_compiler__AbstractRuntimeFunction__c_name]))(var_rf) /* c_name on <var_rf:AbstractRuntimeFunction>*/;
6872 if (varonce122) {
6873 var123 = varonce122;
6874 } else {
6875 var124 = ", /* pointer to ";
6876 var125 = 16;
6877 var126 = string__NativeString__to_s_with_length(var124, var125);
6878 var123 = var126;
6879 varonce122 = var123;
6880 }
6881 var127 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
6882 if (varonce128) {
6883 var129 = varonce128;
6884 } else {
6885 var130 = ":";
6886 var131 = 1;
6887 var132 = string__NativeString__to_s_with_length(var130, var131);
6888 var129 = var132;
6889 varonce128 = var129;
6890 }
6891 if (varonce133) {
6892 var134 = varonce133;
6893 } else {
6894 var135 = ":";
6895 var136 = 1;
6896 var137 = string__NativeString__to_s_with_length(var135, var136);
6897 var134 = var137;
6898 varonce133 = var134;
6899 }
6900 if (varonce138) {
6901 var139 = varonce138;
6902 } else {
6903 var140 = " */";
6904 var141 = 3;
6905 var142 = string__NativeString__to_s_with_length(var140, var141);
6906 var139 = var142;
6907 varonce138 = var139;
6908 }
6909 var143 = NEW_array__Array(&type_array__Arraykernel__Object);
6910 { /* var143 = array_instance Array[Object] */
6911 var144 = 9;
6912 var145 = NEW_array__NativeArray(var144, &type_array__NativeArraykernel__Object);
6913 ((struct instance_array__NativeArray*)var145)->values[0] = (val*) var117;
6914 ((struct instance_array__NativeArray*)var145)->values[1] = (val*) var121;
6915 ((struct instance_array__NativeArray*)var145)->values[2] = (val*) var123;
6916 ((struct instance_array__NativeArray*)var145)->values[3] = (val*) var127;
6917 ((struct instance_array__NativeArray*)var145)->values[4] = (val*) var129;
6918 ((struct instance_array__NativeArray*)var145)->values[5] = (val*) var_mclass;
6919 ((struct instance_array__NativeArray*)var145)->values[6] = (val*) var134;
6920 ((struct instance_array__NativeArray*)var145)->values[7] = (val*) var_mpropdef;
6921 ((struct instance_array__NativeArray*)var145)->values[8] = (val*) var139;
6922 ((void (*)(val*, val*, long))(var143->class->vft[COLOR_array__Array__with_native]))(var143, var145, var144) /* with_native on <var143:Array[Object]>*/;
6923 CHECK_NEW_array__Array(var143);
6924 }
6925 var146 = ((val* (*)(val*))(var143->class->vft[COLOR_string__Object__to_s]))(var143) /* to_s on <var143:Array[Object]>*/;
6926 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var146) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
6927 }
6928 CONTINUE_label: (void)0;
6929 ((void (*)(val*))(var101->class->vft[COLOR_abstract_collection__Iterator__next]))(var101) /* next on <var101:Iterator[nullable Object]>*/;
6930 }
6931 BREAK_label: (void)0;
6932 if (varonce147) {
6933 var148 = varonce147;
6934 } else {
6935 var149 = "}";
6936 var150 = 1;
6937 var151 = string__NativeString__to_s_with_length(var149, var150);
6938 var148 = var151;
6939 varonce147 = var148;
6940 }
6941 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var148) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
6942 if (varonce152) {
6943 var153 = varonce152;
6944 } else {
6945 var154 = "};";
6946 var155 = 2;
6947 var156 = string__NativeString__to_s_with_length(var154, var155);
6948 var153 = var156;
6949 varonce152 = var153;
6950 }
6951 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var153) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
6952 } else {
6953 }
6954 var157 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
6955 if (varonce158) {
6956 var159 = varonce158;
6957 } else {
6958 var160 = "val*";
6959 var161 = 4;
6960 var162 = string__NativeString__to_s_with_length(var160, var161);
6961 var159 = var162;
6962 varonce158 = var159;
6963 }
6964 var163 = ((short int (*)(val*, val*))(var157->class->vft[COLOR_kernel__Object___33d_61d]))(var157, var159) /* != on <var157:String>*/;
6965 if (var163){
6966 var164 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
6967 if (varonce165) {
6968 var166 = varonce165;
6969 } else {
6970 var167 = "struct instance_";
6971 var168 = 16;
6972 var169 = string__NativeString__to_s_with_length(var167, var168);
6973 var166 = var169;
6974 varonce165 = var166;
6975 }
6976 if (varonce170) {
6977 var171 = varonce170;
6978 } else {
6979 var172 = " {";
6980 var173 = 2;
6981 var174 = string__NativeString__to_s_with_length(var172, var173);
6982 var171 = var174;
6983 varonce170 = var171;
6984 }
6985 var175 = NEW_array__Array(&type_array__Arraykernel__Object);
6986 { /* var175 = array_instance Array[Object] */
6987 var176 = 3;
6988 var177 = NEW_array__NativeArray(var176, &type_array__NativeArraykernel__Object);
6989 ((struct instance_array__NativeArray*)var177)->values[0] = (val*) var166;
6990 ((struct instance_array__NativeArray*)var177)->values[1] = (val*) var_c_name;
6991 ((struct instance_array__NativeArray*)var177)->values[2] = (val*) var171;
6992 ((void (*)(val*, val*, long))(var175->class->vft[COLOR_array__Array__with_native]))(var175, var177, var176) /* with_native on <var175:Array[Object]>*/;
6993 CHECK_NEW_array__Array(var175);
6994 }
6995 var178 = ((val* (*)(val*))(var175->class->vft[COLOR_string__Object__to_s]))(var175) /* to_s on <var175:Array[Object]>*/;
6996 ((void (*)(val*, val*))(var164->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var164, var178) /* add_decl on <var164:CodeWriter>*/;
6997 var179 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
6998 if (varonce180) {
6999 var181 = varonce180;
7000 } else {
7001 var182 = "const struct type *type;";
7002 var183 = 24;
7003 var184 = string__NativeString__to_s_with_length(var182, var183);
7004 var181 = var184;
7005 varonce180 = var181;
7006 }
7007 ((void (*)(val*, val*))(var179->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var179, var181) /* add_decl on <var179:CodeWriter>*/;
7008 var185 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
7009 if (varonce186) {
7010 var187 = varonce186;
7011 } else {
7012 var188 = "const struct class *class;";
7013 var189 = 26;
7014 var190 = string__NativeString__to_s_with_length(var188, var189);
7015 var187 = var190;
7016 varonce186 = var187;
7017 }
7018 ((void (*)(val*, val*))(var185->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var185, var187) /* add_decl on <var185:CodeWriter>*/;
7019 var191 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
7020 var192 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
7021 if (varonce193) {
7022 var194 = varonce193;
7023 } else {
7024 var195 = " value;";
7025 var196 = 7;
7026 var197 = string__NativeString__to_s_with_length(var195, var196);
7027 var194 = var197;
7028 varonce193 = var194;
7029 }
7030 var198 = NEW_array__Array(&type_array__Arraykernel__Object);
7031 { /* var198 = array_instance Array[Object] */
7032 var199 = 2;
7033 var200 = NEW_array__NativeArray(var199, &type_array__NativeArraykernel__Object);
7034 ((struct instance_array__NativeArray*)var200)->values[0] = (val*) var192;
7035 ((struct instance_array__NativeArray*)var200)->values[1] = (val*) var194;
7036 ((void (*)(val*, val*, long))(var198->class->vft[COLOR_array__Array__with_native]))(var198, var200, var199) /* with_native on <var198:Array[Object]>*/;
7037 CHECK_NEW_array__Array(var198);
7038 }
7039 var201 = ((val* (*)(val*))(var198->class->vft[COLOR_string__Object__to_s]))(var198) /* to_s on <var198:Array[Object]>*/;
7040 ((void (*)(val*, val*))(var191->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var191, var201) /* add_decl on <var191:CodeWriter>*/;
7041 var202 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
7042 if (varonce203) {
7043 var204 = varonce203;
7044 } else {
7045 var205 = "};";
7046 var206 = 2;
7047 var207 = string__NativeString__to_s_with_length(var205, var206);
7048 var204 = var207;
7049 varonce203 = var204;
7050 }
7051 ((void (*)(val*, val*))(var202->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var202, var204) /* add_decl on <var202:CodeWriter>*/;
7052 var208 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:SeparateCompiler>*/;
7053 var209 = ((val* (*)(val*))(var208->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_types]))(var208) /* live_types on <var208:RapidTypeAnalysis>*/;
7054 var210 = ((short int (*)(val*, val*))(var209->class->vft[COLOR_abstract_collection__Collection__has]))(var209, var_mtype) /* has on <var209:HashSet[MClassType]>*/;
7055 var211 = !var210;
7056 if (var211){
7057 goto RET_LABEL;
7058 } else {
7059 }
7060 var212 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
7061 if (varonce213) {
7062 var214 = varonce213;
7063 } else {
7064 var215 = "val* BOX_";
7065 var216 = 9;
7066 var217 = string__NativeString__to_s_with_length(var215, var216);
7067 var214 = var217;
7068 varonce213 = var214;
7069 }
7070 if (varonce218) {
7071 var219 = varonce218;
7072 } else {
7073 var220 = "(";
7074 var221 = 1;
7075 var222 = string__NativeString__to_s_with_length(var220, var221);
7076 var219 = var222;
7077 varonce218 = var219;
7078 }
7079 var223 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
7080 if (varonce224) {
7081 var225 = varonce224;
7082 } else {
7083 var226 = ");";
7084 var227 = 2;
7085 var228 = string__NativeString__to_s_with_length(var226, var227);
7086 var225 = var228;
7087 varonce224 = var225;
7088 }
7089 var229 = NEW_array__Array(&type_array__Arraykernel__Object);
7090 { /* var229 = array_instance Array[Object] */
7091 var230 = 5;
7092 var231 = NEW_array__NativeArray(var230, &type_array__NativeArraykernel__Object);
7093 ((struct instance_array__NativeArray*)var231)->values[0] = (val*) var214;
7094 ((struct instance_array__NativeArray*)var231)->values[1] = (val*) var_c_name;
7095 ((struct instance_array__NativeArray*)var231)->values[2] = (val*) var219;
7096 ((struct instance_array__NativeArray*)var231)->values[3] = (val*) var223;
7097 ((struct instance_array__NativeArray*)var231)->values[4] = (val*) var225;
7098 ((void (*)(val*, val*, long))(var229->class->vft[COLOR_array__Array__with_native]))(var229, var231, var230) /* with_native on <var229:Array[Object]>*/;
7099 CHECK_NEW_array__Array(var229);
7100 }
7101 var232 = ((val* (*)(val*))(var229->class->vft[COLOR_string__Object__to_s]))(var229) /* to_s on <var229:Array[Object]>*/;
7102 ((void (*)(val*, val*))(var212->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var212, var232) /* add_decl on <var212:CodeWriter>*/;
7103 if (varonce233) {
7104 var234 = varonce233;
7105 } else {
7106 var235 = "/* allocate ";
7107 var236 = 12;
7108 var237 = string__NativeString__to_s_with_length(var235, var236);
7109 var234 = var237;
7110 varonce233 = var234;
7111 }
7112 if (varonce238) {
7113 var239 = varonce238;
7114 } else {
7115 var240 = " */";
7116 var241 = 3;
7117 var242 = string__NativeString__to_s_with_length(var240, var241);
7118 var239 = var242;
7119 varonce238 = var239;
7120 }
7121 var243 = NEW_array__Array(&type_array__Arraykernel__Object);
7122 { /* var243 = array_instance Array[Object] */
7123 var244 = 3;
7124 var245 = NEW_array__NativeArray(var244, &type_array__NativeArraykernel__Object);
7125 ((struct instance_array__NativeArray*)var245)->values[0] = (val*) var234;
7126 ((struct instance_array__NativeArray*)var245)->values[1] = (val*) var_mtype;
7127 ((struct instance_array__NativeArray*)var245)->values[2] = (val*) var239;
7128 ((void (*)(val*, val*, long))(var243->class->vft[COLOR_array__Array__with_native]))(var243, var245, var244) /* with_native on <var243:Array[Object]>*/;
7129 CHECK_NEW_array__Array(var243);
7130 }
7131 var246 = ((val* (*)(val*))(var243->class->vft[COLOR_string__Object__to_s]))(var243) /* to_s on <var243:Array[Object]>*/;
7132 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var246) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
7133 if (varonce247) {
7134 var248 = varonce247;
7135 } else {
7136 var249 = "val* BOX_";
7137 var250 = 9;
7138 var251 = string__NativeString__to_s_with_length(var249, var250);
7139 var248 = var251;
7140 varonce247 = var248;
7141 }
7142 var252 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
7143 if (varonce253) {
7144 var254 = varonce253;
7145 } else {
7146 var255 = "(";
7147 var256 = 1;
7148 var257 = string__NativeString__to_s_with_length(var255, var256);
7149 var254 = var257;
7150 varonce253 = var254;
7151 }
7152 var258 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
7153 if (varonce259) {
7154 var260 = varonce259;
7155 } else {
7156 var261 = " value) {";
7157 var262 = 9;
7158 var263 = string__NativeString__to_s_with_length(var261, var262);
7159 var260 = var263;
7160 varonce259 = var260;
7161 }
7162 var264 = NEW_array__Array(&type_array__Arraykernel__Object);
7163 { /* var264 = array_instance Array[Object] */
7164 var265 = 5;
7165 var266 = NEW_array__NativeArray(var265, &type_array__NativeArraykernel__Object);
7166 ((struct instance_array__NativeArray*)var266)->values[0] = (val*) var248;
7167 ((struct instance_array__NativeArray*)var266)->values[1] = (val*) var252;
7168 ((struct instance_array__NativeArray*)var266)->values[2] = (val*) var254;
7169 ((struct instance_array__NativeArray*)var266)->values[3] = (val*) var258;
7170 ((struct instance_array__NativeArray*)var266)->values[4] = (val*) var260;
7171 ((void (*)(val*, val*, long))(var264->class->vft[COLOR_array__Array__with_native]))(var264, var266, var265) /* with_native on <var264:Array[Object]>*/;
7172 CHECK_NEW_array__Array(var264);
7173 }
7174 var267 = ((val* (*)(val*))(var264->class->vft[COLOR_string__Object__to_s]))(var264) /* to_s on <var264:Array[Object]>*/;
7175 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var267) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
7176 if (varonce268) {
7177 var269 = varonce268;
7178 } else {
7179 var270 = "struct instance_";
7180 var271 = 16;
7181 var272 = string__NativeString__to_s_with_length(var270, var271);
7182 var269 = var272;
7183 varonce268 = var269;
7184 }
7185 if (varonce273) {
7186 var274 = varonce273;
7187 } else {
7188 var275 = "*res = nit_alloc(sizeof(struct instance_";
7189 var276 = 40;
7190 var277 = string__NativeString__to_s_with_length(var275, var276);
7191 var274 = var277;
7192 varonce273 = var274;
7193 }
7194 if (varonce278) {
7195 var279 = varonce278;
7196 } else {
7197 var280 = "));";
7198 var281 = 3;
7199 var282 = string__NativeString__to_s_with_length(var280, var281);
7200 var279 = var282;
7201 varonce278 = var279;
7202 }
7203 var283 = NEW_array__Array(&type_array__Arraykernel__Object);
7204 { /* var283 = array_instance Array[Object] */
7205 var284 = 5;
7206 var285 = NEW_array__NativeArray(var284, &type_array__NativeArraykernel__Object);
7207 ((struct instance_array__NativeArray*)var285)->values[0] = (val*) var269;
7208 ((struct instance_array__NativeArray*)var285)->values[1] = (val*) var_c_name;
7209 ((struct instance_array__NativeArray*)var285)->values[2] = (val*) var274;
7210 ((struct instance_array__NativeArray*)var285)->values[3] = (val*) var_c_name;
7211 ((struct instance_array__NativeArray*)var285)->values[4] = (val*) var279;
7212 ((void (*)(val*, val*, long))(var283->class->vft[COLOR_array__Array__with_native]))(var283, var285, var284) /* with_native on <var283:Array[Object]>*/;
7213 CHECK_NEW_array__Array(var283);
7214 }
7215 var286 = ((val* (*)(val*))(var283->class->vft[COLOR_string__Object__to_s]))(var283) /* to_s on <var283:Array[Object]>*/;
7216 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var286) /* add on <var_v:SeparateCompilerVisitor>*/;
7217 if (varonce287) {
7218 var288 = varonce287;
7219 } else {
7220 var289 = "type_";
7221 var290 = 5;
7222 var291 = string__NativeString__to_s_with_length(var289, var290);
7223 var288 = var291;
7224 varonce287 = var288;
7225 }
7226 var292 = NEW_array__Array(&type_array__Arraykernel__Object);
7227 { /* var292 = array_instance Array[Object] */
7228 var293 = 2;
7229 var294 = NEW_array__NativeArray(var293, &type_array__NativeArraykernel__Object);
7230 ((struct instance_array__NativeArray*)var294)->values[0] = (val*) var288;
7231 ((struct instance_array__NativeArray*)var294)->values[1] = (val*) var_c_name;
7232 ((void (*)(val*, val*, long))(var292->class->vft[COLOR_array__Array__with_native]))(var292, var294, var293) /* with_native on <var292:Array[Object]>*/;
7233 CHECK_NEW_array__Array(var292);
7234 }
7235 var295 = ((val* (*)(val*))(var292->class->vft[COLOR_string__Object__to_s]))(var292) /* to_s on <var292:Array[Object]>*/;
7236 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var295) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
7237 if (varonce296) {
7238 var297 = varonce296;
7239 } else {
7240 var298 = "res->type = &type_";
7241 var299 = 18;
7242 var300 = string__NativeString__to_s_with_length(var298, var299);
7243 var297 = var300;
7244 varonce296 = var297;
7245 }
7246 if (varonce301) {
7247 var302 = varonce301;
7248 } else {
7249 var303 = ";";
7250 var304 = 1;
7251 var305 = string__NativeString__to_s_with_length(var303, var304);
7252 var302 = var305;
7253 varonce301 = var302;
7254 }
7255 var306 = NEW_array__Array(&type_array__Arraykernel__Object);
7256 { /* var306 = array_instance Array[Object] */
7257 var307 = 3;
7258 var308 = NEW_array__NativeArray(var307, &type_array__NativeArraykernel__Object);
7259 ((struct instance_array__NativeArray*)var308)->values[0] = (val*) var297;
7260 ((struct instance_array__NativeArray*)var308)->values[1] = (val*) var_c_name;
7261 ((struct instance_array__NativeArray*)var308)->values[2] = (val*) var302;
7262 ((void (*)(val*, val*, long))(var306->class->vft[COLOR_array__Array__with_native]))(var306, var308, var307) /* with_native on <var306:Array[Object]>*/;
7263 CHECK_NEW_array__Array(var306);
7264 }
7265 var309 = ((val* (*)(val*))(var306->class->vft[COLOR_string__Object__to_s]))(var306) /* to_s on <var306:Array[Object]>*/;
7266 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var309) /* add on <var_v:SeparateCompilerVisitor>*/;
7267 if (varonce310) {
7268 var311 = varonce310;
7269 } else {
7270 var312 = "class_";
7271 var313 = 6;
7272 var314 = string__NativeString__to_s_with_length(var312, var313);
7273 var311 = var314;
7274 varonce310 = var311;
7275 }
7276 var315 = NEW_array__Array(&type_array__Arraykernel__Object);
7277 { /* var315 = array_instance Array[Object] */
7278 var316 = 2;
7279 var317 = NEW_array__NativeArray(var316, &type_array__NativeArraykernel__Object);
7280 ((struct instance_array__NativeArray*)var317)->values[0] = (val*) var311;
7281 ((struct instance_array__NativeArray*)var317)->values[1] = (val*) var_c_name;
7282 ((void (*)(val*, val*, long))(var315->class->vft[COLOR_array__Array__with_native]))(var315, var317, var316) /* with_native on <var315:Array[Object]>*/;
7283 CHECK_NEW_array__Array(var315);
7284 }
7285 var318 = ((val* (*)(val*))(var315->class->vft[COLOR_string__Object__to_s]))(var315) /* to_s on <var315:Array[Object]>*/;
7286 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var318) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
7287 if (varonce319) {
7288 var320 = varonce319;
7289 } else {
7290 var321 = "res->class = &class_";
7291 var322 = 20;
7292 var323 = string__NativeString__to_s_with_length(var321, var322);
7293 var320 = var323;
7294 varonce319 = var320;
7295 }
7296 if (varonce324) {
7297 var325 = varonce324;
7298 } else {
7299 var326 = ";";
7300 var327 = 1;
7301 var328 = string__NativeString__to_s_with_length(var326, var327);
7302 var325 = var328;
7303 varonce324 = var325;
7304 }
7305 var329 = NEW_array__Array(&type_array__Arraykernel__Object);
7306 { /* var329 = array_instance Array[Object] */
7307 var330 = 3;
7308 var331 = NEW_array__NativeArray(var330, &type_array__NativeArraykernel__Object);
7309 ((struct instance_array__NativeArray*)var331)->values[0] = (val*) var320;
7310 ((struct instance_array__NativeArray*)var331)->values[1] = (val*) var_c_name;
7311 ((struct instance_array__NativeArray*)var331)->values[2] = (val*) var325;
7312 ((void (*)(val*, val*, long))(var329->class->vft[COLOR_array__Array__with_native]))(var329, var331, var330) /* with_native on <var329:Array[Object]>*/;
7313 CHECK_NEW_array__Array(var329);
7314 }
7315 var332 = ((val* (*)(val*))(var329->class->vft[COLOR_string__Object__to_s]))(var329) /* to_s on <var329:Array[Object]>*/;
7316 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var332) /* add on <var_v:SeparateCompilerVisitor>*/;
7317 if (varonce333) {
7318 var334 = varonce333;
7319 } else {
7320 var335 = "res->value = value;";
7321 var336 = 19;
7322 var337 = string__NativeString__to_s_with_length(var335, var336);
7323 var334 = var337;
7324 varonce333 = var334;
7325 }
7326 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var334) /* add on <var_v:SeparateCompilerVisitor>*/;
7327 if (varonce338) {
7328 var339 = varonce338;
7329 } else {
7330 var340 = "return (val*)res;";
7331 var341 = 17;
7332 var342 = string__NativeString__to_s_with_length(var340, var341);
7333 var339 = var342;
7334 varonce338 = var339;
7335 }
7336 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var339) /* add on <var_v:SeparateCompilerVisitor>*/;
7337 if (varonce343) {
7338 var344 = varonce343;
7339 } else {
7340 var345 = "}";
7341 var346 = 1;
7342 var347 = string__NativeString__to_s_with_length(var345, var346);
7343 var344 = var347;
7344 varonce343 = var344;
7345 }
7346 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var344) /* add on <var_v:SeparateCompilerVisitor>*/;
7347 goto RET_LABEL;
7348 } else {
7349 var348 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
7350 if (varonce349) {
7351 var350 = varonce349;
7352 } else {
7353 var351 = "NativeArray";
7354 var352 = 11;
7355 var353 = string__NativeString__to_s_with_length(var351, var352);
7356 var350 = var353;
7357 varonce349 = var350;
7358 }
7359 var354 = ((short int (*)(val*, val*))(var348->class->vft[COLOR_kernel__Object___61d_61d]))(var348, var350) /* == on <var348:String>*/;
7360 if (var354){
7361 var355 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
7362 if (varonce356) {
7363 var357 = varonce356;
7364 } else {
7365 var358 = "struct instance_";
7366 var359 = 16;
7367 var360 = string__NativeString__to_s_with_length(var358, var359);
7368 var357 = var360;
7369 varonce356 = var357;
7370 }
7371 if (varonce361) {
7372 var362 = varonce361;
7373 } else {
7374 var363 = " {";
7375 var364 = 2;
7376 var365 = string__NativeString__to_s_with_length(var363, var364);
7377 var362 = var365;
7378 varonce361 = var362;
7379 }
7380 var366 = NEW_array__Array(&type_array__Arraykernel__Object);
7381 { /* var366 = array_instance Array[Object] */
7382 var367 = 3;
7383 var368 = NEW_array__NativeArray(var367, &type_array__NativeArraykernel__Object);
7384 ((struct instance_array__NativeArray*)var368)->values[0] = (val*) var357;
7385 ((struct instance_array__NativeArray*)var368)->values[1] = (val*) var_c_name;
7386 ((struct instance_array__NativeArray*)var368)->values[2] = (val*) var362;
7387 ((void (*)(val*, val*, long))(var366->class->vft[COLOR_array__Array__with_native]))(var366, var368, var367) /* with_native on <var366:Array[Object]>*/;
7388 CHECK_NEW_array__Array(var366);
7389 }
7390 var369 = ((val* (*)(val*))(var366->class->vft[COLOR_string__Object__to_s]))(var366) /* to_s on <var366:Array[Object]>*/;
7391 ((void (*)(val*, val*))(var355->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var355, var369) /* add_decl on <var355:CodeWriter>*/;
7392 var370 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
7393 if (varonce371) {
7394 var372 = varonce371;
7395 } else {
7396 var373 = "const struct type *type;";
7397 var374 = 24;
7398 var375 = string__NativeString__to_s_with_length(var373, var374);
7399 var372 = var375;
7400 varonce371 = var372;
7401 }
7402 ((void (*)(val*, val*))(var370->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var370, var372) /* add_decl on <var370:CodeWriter>*/;
7403 var376 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
7404 if (varonce377) {
7405 var378 = varonce377;
7406 } else {
7407 var379 = "const struct class *class;";
7408 var380 = 26;
7409 var381 = string__NativeString__to_s_with_length(var379, var380);
7410 var378 = var381;
7411 varonce377 = var378;
7412 }
7413 ((void (*)(val*, val*))(var376->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var376, var378) /* add_decl on <var376:CodeWriter>*/;
7414 var382 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
7415 if (varonce383) {
7416 var384 = varonce383;
7417 } else {
7418 var385 = "val* values[0];";
7419 var386 = 15;
7420 var387 = string__NativeString__to_s_with_length(var385, var386);
7421 var384 = var387;
7422 varonce383 = var384;
7423 }
7424 ((void (*)(val*, val*))(var382->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var382, var384) /* add_decl on <var382:CodeWriter>*/;
7425 var388 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateCompiler>*/;
7426 if (varonce389) {
7427 var390 = varonce389;
7428 } else {
7429 var391 = "};";
7430 var392 = 2;
7431 var393 = string__NativeString__to_s_with_length(var391, var392);
7432 var390 = var393;
7433 varonce389 = var390;
7434 }
7435 ((void (*)(val*, val*))(var388->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var388, var390) /* add_decl on <var388:CodeWriter>*/;
7436 if (varonce394) {
7437 var395 = varonce394;
7438 } else {
7439 var396 = "NEW_";
7440 var397 = 4;
7441 var398 = string__NativeString__to_s_with_length(var396, var397);
7442 var395 = var398;
7443 varonce394 = var395;
7444 }
7445 var399 = NEW_array__Array(&type_array__Arraykernel__Object);
7446 { /* var399 = array_instance Array[Object] */
7447 var400 = 2;
7448 var401 = NEW_array__NativeArray(var400, &type_array__NativeArraykernel__Object);
7449 ((struct instance_array__NativeArray*)var401)->values[0] = (val*) var395;
7450 ((struct instance_array__NativeArray*)var401)->values[1] = (val*) var_c_name;
7451 ((void (*)(val*, val*, long))(var399->class->vft[COLOR_array__Array__with_native]))(var399, var401, var400) /* with_native on <var399:Array[Object]>*/;
7452 CHECK_NEW_array__Array(var399);
7453 }
7454 var402 = ((val* (*)(val*))(var399->class->vft[COLOR_string__Object__to_s]))(var399) /* to_s on <var399:Array[Object]>*/;
7455 var403 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
7456 if (varonce404) {
7457 var405 = varonce404;
7458 } else {
7459 var406 = " NEW_";
7460 var407 = 5;
7461 var408 = string__NativeString__to_s_with_length(var406, var407);
7462 var405 = var408;
7463 varonce404 = var405;
7464 }
7465 if (varonce409) {
7466 var410 = varonce409;
7467 } else {
7468 var411 = "(int length, const struct type* type);";
7469 var412 = 38;
7470 var413 = string__NativeString__to_s_with_length(var411, var412);
7471 var410 = var413;
7472 varonce409 = var410;
7473 }
7474 var414 = NEW_array__Array(&type_array__Arraykernel__Object);
7475 { /* var414 = array_instance Array[Object] */
7476 var415 = 4;
7477 var416 = NEW_array__NativeArray(var415, &type_array__NativeArraykernel__Object);
7478 ((struct instance_array__NativeArray*)var416)->values[0] = (val*) var403;
7479 ((struct instance_array__NativeArray*)var416)->values[1] = (val*) var405;
7480 ((struct instance_array__NativeArray*)var416)->values[2] = (val*) var_c_name;
7481 ((struct instance_array__NativeArray*)var416)->values[3] = (val*) var410;
7482 ((void (*)(val*, val*, long))(var414->class->vft[COLOR_array__Array__with_native]))(var414, var416, var415) /* with_native on <var414:Array[Object]>*/;
7483 CHECK_NEW_array__Array(var414);
7484 }
7485 var417 = ((val* (*)(val*))(var414->class->vft[COLOR_string__Object__to_s]))(var414) /* to_s on <var414:Array[Object]>*/;
7486 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var402, var417) /* provide_declaration on <self:SeparateCompiler>*/;
7487 if (varonce418) {
7488 var419 = varonce418;
7489 } else {
7490 var420 = "/* allocate ";
7491 var421 = 12;
7492 var422 = string__NativeString__to_s_with_length(var420, var421);
7493 var419 = var422;
7494 varonce418 = var419;
7495 }
7496 if (varonce423) {
7497 var424 = varonce423;
7498 } else {
7499 var425 = " */";
7500 var426 = 3;
7501 var427 = string__NativeString__to_s_with_length(var425, var426);
7502 var424 = var427;
7503 varonce423 = var424;
7504 }
7505 var428 = NEW_array__Array(&type_array__Arraykernel__Object);
7506 { /* var428 = array_instance Array[Object] */
7507 var429 = 3;
7508 var430 = NEW_array__NativeArray(var429, &type_array__NativeArraykernel__Object);
7509 ((struct instance_array__NativeArray*)var430)->values[0] = (val*) var419;
7510 ((struct instance_array__NativeArray*)var430)->values[1] = (val*) var_mtype;
7511 ((struct instance_array__NativeArray*)var430)->values[2] = (val*) var424;
7512 ((void (*)(val*, val*, long))(var428->class->vft[COLOR_array__Array__with_native]))(var428, var430, var429) /* with_native on <var428:Array[Object]>*/;
7513 CHECK_NEW_array__Array(var428);
7514 }
7515 var431 = ((val* (*)(val*))(var428->class->vft[COLOR_string__Object__to_s]))(var428) /* to_s on <var428:Array[Object]>*/;
7516 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var431) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
7517 var432 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
7518 if (varonce433) {
7519 var434 = varonce433;
7520 } else {
7521 var435 = " NEW_";
7522 var436 = 5;
7523 var437 = string__NativeString__to_s_with_length(var435, var436);
7524 var434 = var437;
7525 varonce433 = var434;
7526 }
7527 if (varonce438) {
7528 var439 = varonce438;
7529 } else {
7530 var440 = "(int length, const struct type* type) {";
7531 var441 = 39;
7532 var442 = string__NativeString__to_s_with_length(var440, var441);
7533 var439 = var442;
7534 varonce438 = var439;
7535 }
7536 var443 = NEW_array__Array(&type_array__Arraykernel__Object);
7537 { /* var443 = array_instance Array[Object] */
7538 var444 = 4;
7539 var445 = NEW_array__NativeArray(var444, &type_array__NativeArraykernel__Object);
7540 ((struct instance_array__NativeArray*)var445)->values[0] = (val*) var432;
7541 ((struct instance_array__NativeArray*)var445)->values[1] = (val*) var434;
7542 ((struct instance_array__NativeArray*)var445)->values[2] = (val*) var_c_name;
7543 ((struct instance_array__NativeArray*)var445)->values[3] = (val*) var439;
7544 ((void (*)(val*, val*, long))(var443->class->vft[COLOR_array__Array__with_native]))(var443, var445, var444) /* with_native on <var443:Array[Object]>*/;
7545 CHECK_NEW_array__Array(var443);
7546 }
7547 var446 = ((val* (*)(val*))(var443->class->vft[COLOR_string__Object__to_s]))(var443) /* to_s on <var443:Array[Object]>*/;
7548 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var446) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
7549 if (varonce447) {
7550 var448 = varonce447;
7551 } else {
7552 var449 = "self";
7553 var450 = 4;
7554 var451 = string__NativeString__to_s_with_length(var449, var450);
7555 var448 = var451;
7556 varonce447 = var448;
7557 }
7558 var452 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_named_var]))(var_v, var_mtype, var448) /* new_named_var on <var_v:SeparateCompilerVisitor>*/;
7559 var_res = var452;
7560 var453 = 1;
7561 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var453) /* is_exact= on <var_res:RuntimeVariable>*/;
7562 var454 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
7563 var455 = ((val* (*)(val*))(var454->class->vft[COLOR_abstract_collection__Collection__first]))(var454) /* first on <var454:Array[MType]>*/;
7564 var_mtype_elt = var455;
7565 if (varonce456) {
7566 var457 = varonce456;
7567 } else {
7568 var458 = " = nit_alloc(sizeof(struct instance_";
7569 var459 = 36;
7570 var460 = string__NativeString__to_s_with_length(var458, var459);
7571 var457 = var460;
7572 varonce456 = var457;
7573 }
7574 if (varonce461) {
7575 var462 = varonce461;
7576 } else {
7577 var463 = ") + length*sizeof(";
7578 var464 = 18;
7579 var465 = string__NativeString__to_s_with_length(var463, var464);
7580 var462 = var465;
7581 varonce461 = var462;
7582 }
7583 var466 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
7584 if (varonce467) {
7585 var468 = varonce467;
7586 } else {
7587 var469 = "));";
7588 var470 = 3;
7589 var471 = string__NativeString__to_s_with_length(var469, var470);
7590 var468 = var471;
7591 varonce467 = var468;
7592 }
7593 var472 = NEW_array__Array(&type_array__Arraykernel__Object);
7594 { /* var472 = array_instance Array[Object] */
7595 var473 = 6;
7596 var474 = NEW_array__NativeArray(var473, &type_array__NativeArraykernel__Object);
7597 ((struct instance_array__NativeArray*)var474)->values[0] = (val*) var_res;
7598 ((struct instance_array__NativeArray*)var474)->values[1] = (val*) var457;
7599 ((struct instance_array__NativeArray*)var474)->values[2] = (val*) var_c_name;
7600 ((struct instance_array__NativeArray*)var474)->values[3] = (val*) var462;
7601 ((struct instance_array__NativeArray*)var474)->values[4] = (val*) var466;
7602 ((struct instance_array__NativeArray*)var474)->values[5] = (val*) var468;
7603 ((void (*)(val*, val*, long))(var472->class->vft[COLOR_array__Array__with_native]))(var472, var474, var473) /* with_native on <var472:Array[Object]>*/;
7604 CHECK_NEW_array__Array(var472);
7605 }
7606 var475 = ((val* (*)(val*))(var472->class->vft[COLOR_string__Object__to_s]))(var472) /* to_s on <var472:Array[Object]>*/;
7607 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var475) /* add on <var_v:SeparateCompilerVisitor>*/;
7608 if (varonce476) {
7609 var477 = varonce476;
7610 } else {
7611 var478 = "->type = type;";
7612 var479 = 14;
7613 var480 = string__NativeString__to_s_with_length(var478, var479);
7614 var477 = var480;
7615 varonce476 = var477;
7616 }
7617 var481 = NEW_array__Array(&type_array__Arraykernel__Object);
7618 { /* var481 = array_instance Array[Object] */
7619 var482 = 2;
7620 var483 = NEW_array__NativeArray(var482, &type_array__NativeArraykernel__Object);
7621 ((struct instance_array__NativeArray*)var483)->values[0] = (val*) var_res;
7622 ((struct instance_array__NativeArray*)var483)->values[1] = (val*) var477;
7623 ((void (*)(val*, val*, long))(var481->class->vft[COLOR_array__Array__with_native]))(var481, var483, var482) /* with_native on <var481:Array[Object]>*/;
7624 CHECK_NEW_array__Array(var481);
7625 }
7626 var484 = ((val* (*)(val*))(var481->class->vft[COLOR_string__Object__to_s]))(var481) /* to_s on <var481:Array[Object]>*/;
7627 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var484) /* add on <var_v:SeparateCompilerVisitor>*/;
7628 if (varonce485) {
7629 var486 = varonce485;
7630 } else {
7631 var487 = "type";
7632 var488 = 4;
7633 var489 = string__NativeString__to_s_with_length(var487, var488);
7634 var486 = var489;
7635 varonce485 = var486;
7636 }
7637 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__hardening_live_type]))(self, var_v, var486) /* hardening_live_type on <self:SeparateCompiler>*/;
7638 if (varonce490) {
7639 var491 = varonce490;
7640 } else {
7641 var492 = "class_";
7642 var493 = 6;
7643 var494 = string__NativeString__to_s_with_length(var492, var493);
7644 var491 = var494;
7645 varonce490 = var491;
7646 }
7647 var495 = NEW_array__Array(&type_array__Arraykernel__Object);
7648 { /* var495 = array_instance Array[Object] */
7649 var496 = 2;
7650 var497 = NEW_array__NativeArray(var496, &type_array__NativeArraykernel__Object);
7651 ((struct instance_array__NativeArray*)var497)->values[0] = (val*) var491;
7652 ((struct instance_array__NativeArray*)var497)->values[1] = (val*) var_c_name;
7653 ((void (*)(val*, val*, long))(var495->class->vft[COLOR_array__Array__with_native]))(var495, var497, var496) /* with_native on <var495:Array[Object]>*/;
7654 CHECK_NEW_array__Array(var495);
7655 }
7656 var498 = ((val* (*)(val*))(var495->class->vft[COLOR_string__Object__to_s]))(var495) /* to_s on <var495:Array[Object]>*/;
7657 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var498) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
7658 if (varonce499) {
7659 var500 = varonce499;
7660 } else {
7661 var501 = "->class = &class_";
7662 var502 = 17;
7663 var503 = string__NativeString__to_s_with_length(var501, var502);
7664 var500 = var503;
7665 varonce499 = var500;
7666 }
7667 if (varonce504) {
7668 var505 = varonce504;
7669 } else {
7670 var506 = ";";
7671 var507 = 1;
7672 var508 = string__NativeString__to_s_with_length(var506, var507);
7673 var505 = var508;
7674 varonce504 = var505;
7675 }
7676 var509 = NEW_array__Array(&type_array__Arraykernel__Object);
7677 { /* var509 = array_instance Array[Object] */
7678 var510 = 4;
7679 var511 = NEW_array__NativeArray(var510, &type_array__NativeArraykernel__Object);
7680 ((struct instance_array__NativeArray*)var511)->values[0] = (val*) var_res;
7681 ((struct instance_array__NativeArray*)var511)->values[1] = (val*) var500;
7682 ((struct instance_array__NativeArray*)var511)->values[2] = (val*) var_c_name;
7683 ((struct instance_array__NativeArray*)var511)->values[3] = (val*) var505;
7684 ((void (*)(val*, val*, long))(var509->class->vft[COLOR_array__Array__with_native]))(var509, var511, var510) /* with_native on <var509:Array[Object]>*/;
7685 CHECK_NEW_array__Array(var509);
7686 }
7687 var512 = ((val* (*)(val*))(var509->class->vft[COLOR_string__Object__to_s]))(var509) /* to_s on <var509:Array[Object]>*/;
7688 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var512) /* add on <var_v:SeparateCompilerVisitor>*/;
7689 if (varonce513) {
7690 var514 = varonce513;
7691 } else {
7692 var515 = "return ";
7693 var516 = 7;
7694 var517 = string__NativeString__to_s_with_length(var515, var516);
7695 var514 = var517;
7696 varonce513 = var514;
7697 }
7698 if (varonce518) {
7699 var519 = varonce518;
7700 } else {
7701 var520 = ";";
7702 var521 = 1;
7703 var522 = string__NativeString__to_s_with_length(var520, var521);
7704 var519 = var522;
7705 varonce518 = var519;
7706 }
7707 var523 = NEW_array__Array(&type_array__Arraykernel__Object);
7708 { /* var523 = array_instance Array[Object] */
7709 var524 = 3;
7710 var525 = NEW_array__NativeArray(var524, &type_array__NativeArraykernel__Object);
7711 ((struct instance_array__NativeArray*)var525)->values[0] = (val*) var514;
7712 ((struct instance_array__NativeArray*)var525)->values[1] = (val*) var_res;
7713 ((struct instance_array__NativeArray*)var525)->values[2] = (val*) var519;
7714 ((void (*)(val*, val*, long))(var523->class->vft[COLOR_array__Array__with_native]))(var523, var525, var524) /* with_native on <var523:Array[Object]>*/;
7715 CHECK_NEW_array__Array(var523);
7716 }
7717 var526 = ((val* (*)(val*))(var523->class->vft[COLOR_string__Object__to_s]))(var523) /* to_s on <var523:Array[Object]>*/;
7718 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var526) /* add on <var_v:SeparateCompilerVisitor>*/;
7719 if (varonce527) {
7720 var528 = varonce527;
7721 } else {
7722 var529 = "}";
7723 var530 = 1;
7724 var531 = string__NativeString__to_s_with_length(var529, var530);
7725 var528 = var531;
7726 varonce527 = var528;
7727 }
7728 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var528) /* add on <var_v:SeparateCompilerVisitor>*/;
7729 goto RET_LABEL;
7730 } else {
7731 }
7732 }
7733 if (varonce532) {
7734 var533 = varonce532;
7735 } else {
7736 var534 = "NEW_";
7737 var535 = 4;
7738 var536 = string__NativeString__to_s_with_length(var534, var535);
7739 var533 = var536;
7740 varonce532 = var533;
7741 }
7742 var537 = NEW_array__Array(&type_array__Arraykernel__Object);
7743 { /* var537 = array_instance Array[Object] */
7744 var538 = 2;
7745 var539 = NEW_array__NativeArray(var538, &type_array__NativeArraykernel__Object);
7746 ((struct instance_array__NativeArray*)var539)->values[0] = (val*) var533;
7747 ((struct instance_array__NativeArray*)var539)->values[1] = (val*) var_c_name;
7748 ((void (*)(val*, val*, long))(var537->class->vft[COLOR_array__Array__with_native]))(var537, var539, var538) /* with_native on <var537:Array[Object]>*/;
7749 CHECK_NEW_array__Array(var537);
7750 }
7751 var540 = ((val* (*)(val*))(var537->class->vft[COLOR_string__Object__to_s]))(var537) /* to_s on <var537:Array[Object]>*/;
7752 var541 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
7753 if (varonce542) {
7754 var543 = varonce542;
7755 } else {
7756 var544 = " NEW_";
7757 var545 = 5;
7758 var546 = string__NativeString__to_s_with_length(var544, var545);
7759 var543 = var546;
7760 varonce542 = var543;
7761 }
7762 if (varonce547) {
7763 var548 = varonce547;
7764 } else {
7765 var549 = "(const struct type* type);";
7766 var550 = 26;
7767 var551 = string__NativeString__to_s_with_length(var549, var550);
7768 var548 = var551;
7769 varonce547 = var548;
7770 }
7771 var552 = NEW_array__Array(&type_array__Arraykernel__Object);
7772 { /* var552 = array_instance Array[Object] */
7773 var553 = 4;
7774 var554 = NEW_array__NativeArray(var553, &type_array__NativeArraykernel__Object);
7775 ((struct instance_array__NativeArray*)var554)->values[0] = (val*) var541;
7776 ((struct instance_array__NativeArray*)var554)->values[1] = (val*) var543;
7777 ((struct instance_array__NativeArray*)var554)->values[2] = (val*) var_c_name;
7778 ((struct instance_array__NativeArray*)var554)->values[3] = (val*) var548;
7779 ((void (*)(val*, val*, long))(var552->class->vft[COLOR_array__Array__with_native]))(var552, var554, var553) /* with_native on <var552:Array[Object]>*/;
7780 CHECK_NEW_array__Array(var552);
7781 }
7782 var555 = ((val* (*)(val*))(var552->class->vft[COLOR_string__Object__to_s]))(var552) /* to_s on <var552:Array[Object]>*/;
7783 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var540, var555) /* provide_declaration on <self:SeparateCompiler>*/;
7784 if (varonce556) {
7785 var557 = varonce556;
7786 } else {
7787 var558 = "/* allocate ";
7788 var559 = 12;
7789 var560 = string__NativeString__to_s_with_length(var558, var559);
7790 var557 = var560;
7791 varonce556 = var557;
7792 }
7793 if (varonce561) {
7794 var562 = varonce561;
7795 } else {
7796 var563 = " */";
7797 var564 = 3;
7798 var565 = string__NativeString__to_s_with_length(var563, var564);
7799 var562 = var565;
7800 varonce561 = var562;
7801 }
7802 var566 = NEW_array__Array(&type_array__Arraykernel__Object);
7803 { /* var566 = array_instance Array[Object] */
7804 var567 = 3;
7805 var568 = NEW_array__NativeArray(var567, &type_array__NativeArraykernel__Object);
7806 ((struct instance_array__NativeArray*)var568)->values[0] = (val*) var557;
7807 ((struct instance_array__NativeArray*)var568)->values[1] = (val*) var_mtype;
7808 ((struct instance_array__NativeArray*)var568)->values[2] = (val*) var562;
7809 ((void (*)(val*, val*, long))(var566->class->vft[COLOR_array__Array__with_native]))(var566, var568, var567) /* with_native on <var566:Array[Object]>*/;
7810 CHECK_NEW_array__Array(var566);
7811 }
7812 var569 = ((val* (*)(val*))(var566->class->vft[COLOR_string__Object__to_s]))(var566) /* to_s on <var566:Array[Object]>*/;
7813 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var569) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
7814 var570 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
7815 if (varonce571) {
7816 var572 = varonce571;
7817 } else {
7818 var573 = " NEW_";
7819 var574 = 5;
7820 var575 = string__NativeString__to_s_with_length(var573, var574);
7821 var572 = var575;
7822 varonce571 = var572;
7823 }
7824 if (varonce576) {
7825 var577 = varonce576;
7826 } else {
7827 var578 = "(const struct type* type) {";
7828 var579 = 27;
7829 var580 = string__NativeString__to_s_with_length(var578, var579);
7830 var577 = var580;
7831 varonce576 = var577;
7832 }
7833 var581 = NEW_array__Array(&type_array__Arraykernel__Object);
7834 { /* var581 = array_instance Array[Object] */
7835 var582 = 4;
7836 var583 = NEW_array__NativeArray(var582, &type_array__NativeArraykernel__Object);
7837 ((struct instance_array__NativeArray*)var583)->values[0] = (val*) var570;
7838 ((struct instance_array__NativeArray*)var583)->values[1] = (val*) var572;
7839 ((struct instance_array__NativeArray*)var583)->values[2] = (val*) var_c_name;
7840 ((struct instance_array__NativeArray*)var583)->values[3] = (val*) var577;
7841 ((void (*)(val*, val*, long))(var581->class->vft[COLOR_array__Array__with_native]))(var581, var583, var582) /* with_native on <var581:Array[Object]>*/;
7842 CHECK_NEW_array__Array(var581);
7843 }
7844 var584 = ((val* (*)(val*))(var581->class->vft[COLOR_string__Object__to_s]))(var581) /* to_s on <var581:Array[Object]>*/;
7845 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var584) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
7846 if (var_is_dead){
7847 if (varonce585) {
7848 var586 = varonce585;
7849 } else {
7850 var587 = " is DEAD";
7851 var588 = 8;
7852 var589 = string__NativeString__to_s_with_length(var587, var588);
7853 var586 = var589;
7854 varonce585 = var586;
7855 }
7856 var590 = NEW_array__Array(&type_array__Arraykernel__Object);
7857 { /* var590 = array_instance Array[Object] */
7858 var591 = 2;
7859 var592 = NEW_array__NativeArray(var591, &type_array__NativeArraykernel__Object);
7860 ((struct instance_array__NativeArray*)var592)->values[0] = (val*) var_mclass;
7861 ((struct instance_array__NativeArray*)var592)->values[1] = (val*) var586;
7862 ((void (*)(val*, val*, long))(var590->class->vft[COLOR_array__Array__with_native]))(var590, var592, var591) /* with_native on <var590:Array[Object]>*/;
7863 CHECK_NEW_array__Array(var590);
7864 }
7865 var593 = ((val* (*)(val*))(var590->class->vft[COLOR_string__Object__to_s]))(var590) /* to_s on <var590:Array[Object]>*/;
7866 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(var_v, var593) /* add_abort on <var_v:SeparateCompilerVisitor>*/;
7867 } else {
7868 if (varonce594) {
7869 var595 = varonce594;
7870 } else {
7871 var596 = "self";
7872 var597 = 4;
7873 var598 = string__NativeString__to_s_with_length(var596, var597);
7874 var595 = var598;
7875 varonce594 = var595;
7876 }
7877 var599 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_named_var]))(var_v, var_mtype, var595) /* new_named_var on <var_v:SeparateCompilerVisitor>*/;
7878 var_res600 = var599;
7879 var601 = 1;
7880 ((void (*)(val*, short int))(var_res600->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res600, var601) /* is_exact= on <var_res600:RuntimeVariable>*/;
7881 if (varonce602) {
7882 var603 = varonce602;
7883 } else {
7884 var604 = " = nit_alloc(sizeof(struct instance) + ";
7885 var605 = 39;
7886 var606 = string__NativeString__to_s_with_length(var604, var605);
7887 var603 = var606;
7888 varonce602 = var603;
7889 }
7890 var607 = ((long (*)(val*))(var_attrs->class->vft[COLOR_abstract_collection__Collection__length]))(var_attrs) /* length on <var_attrs:Array[nullable MPropDef]>*/;
7891 if (varonce608) {
7892 var609 = varonce608;
7893 } else {
7894 var610 = "*sizeof(nitattribute_t));";
7895 var611 = 25;
7896 var612 = string__NativeString__to_s_with_length(var610, var611);
7897 var609 = var612;
7898 varonce608 = var609;
7899 }
7900 var613 = NEW_array__Array(&type_array__Arraykernel__Object);
7901 { /* var613 = array_instance Array[Object] */
7902 var614 = 4;
7903 var615 = NEW_array__NativeArray(var614, &type_array__NativeArraykernel__Object);
7904 ((struct instance_array__NativeArray*)var615)->values[0] = (val*) var_res600;
7905 ((struct instance_array__NativeArray*)var615)->values[1] = (val*) var603;
7906 var616 = BOX_kernel__Int(var607); /* autobox from Int to Object */
7907 ((struct instance_array__NativeArray*)var615)->values[2] = (val*) var616;
7908 ((struct instance_array__NativeArray*)var615)->values[3] = (val*) var609;
7909 ((void (*)(val*, val*, long))(var613->class->vft[COLOR_array__Array__with_native]))(var613, var615, var614) /* with_native on <var613:Array[Object]>*/;
7910 CHECK_NEW_array__Array(var613);
7911 }
7912 var617 = ((val* (*)(val*))(var613->class->vft[COLOR_string__Object__to_s]))(var613) /* to_s on <var613:Array[Object]>*/;
7913 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var617) /* add on <var_v:SeparateCompilerVisitor>*/;
7914 if (varonce618) {
7915 var619 = varonce618;
7916 } else {
7917 var620 = "->type = type;";
7918 var621 = 14;
7919 var622 = string__NativeString__to_s_with_length(var620, var621);
7920 var619 = var622;
7921 varonce618 = var619;
7922 }
7923 var623 = NEW_array__Array(&type_array__Arraykernel__Object);
7924 { /* var623 = array_instance Array[Object] */
7925 var624 = 2;
7926 var625 = NEW_array__NativeArray(var624, &type_array__NativeArraykernel__Object);
7927 ((struct instance_array__NativeArray*)var625)->values[0] = (val*) var_res600;
7928 ((struct instance_array__NativeArray*)var625)->values[1] = (val*) var619;
7929 ((void (*)(val*, val*, long))(var623->class->vft[COLOR_array__Array__with_native]))(var623, var625, var624) /* with_native on <var623:Array[Object]>*/;
7930 CHECK_NEW_array__Array(var623);
7931 }
7932 var626 = ((val* (*)(val*))(var623->class->vft[COLOR_string__Object__to_s]))(var623) /* to_s on <var623:Array[Object]>*/;
7933 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var626) /* add on <var_v:SeparateCompilerVisitor>*/;
7934 if (varonce627) {
7935 var628 = varonce627;
7936 } else {
7937 var629 = "type";
7938 var630 = 4;
7939 var631 = string__NativeString__to_s_with_length(var629, var630);
7940 var628 = var631;
7941 varonce627 = var628;
7942 }
7943 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__hardening_live_type]))(self, var_v, var628) /* hardening_live_type on <self:SeparateCompiler>*/;
7944 if (varonce632) {
7945 var633 = varonce632;
7946 } else {
7947 var634 = "class_";
7948 var635 = 6;
7949 var636 = string__NativeString__to_s_with_length(var634, var635);
7950 var633 = var636;
7951 varonce632 = var633;
7952 }
7953 var637 = NEW_array__Array(&type_array__Arraykernel__Object);
7954 { /* var637 = array_instance Array[Object] */
7955 var638 = 2;
7956 var639 = NEW_array__NativeArray(var638, &type_array__NativeArraykernel__Object);
7957 ((struct instance_array__NativeArray*)var639)->values[0] = (val*) var633;
7958 ((struct instance_array__NativeArray*)var639)->values[1] = (val*) var_c_name;
7959 ((void (*)(val*, val*, long))(var637->class->vft[COLOR_array__Array__with_native]))(var637, var639, var638) /* with_native on <var637:Array[Object]>*/;
7960 CHECK_NEW_array__Array(var637);
7961 }
7962 var640 = ((val* (*)(val*))(var637->class->vft[COLOR_string__Object__to_s]))(var637) /* to_s on <var637:Array[Object]>*/;
7963 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var640) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
7964 if (varonce641) {
7965 var642 = varonce641;
7966 } else {
7967 var643 = "->class = &class_";
7968 var644 = 17;
7969 var645 = string__NativeString__to_s_with_length(var643, var644);
7970 var642 = var645;
7971 varonce641 = var642;
7972 }
7973 if (varonce646) {
7974 var647 = varonce646;
7975 } else {
7976 var648 = ";";
7977 var649 = 1;
7978 var650 = string__NativeString__to_s_with_length(var648, var649);
7979 var647 = var650;
7980 varonce646 = var647;
7981 }
7982 var651 = NEW_array__Array(&type_array__Arraykernel__Object);
7983 { /* var651 = array_instance Array[Object] */
7984 var652 = 4;
7985 var653 = NEW_array__NativeArray(var652, &type_array__NativeArraykernel__Object);
7986 ((struct instance_array__NativeArray*)var653)->values[0] = (val*) var_res600;
7987 ((struct instance_array__NativeArray*)var653)->values[1] = (val*) var642;
7988 ((struct instance_array__NativeArray*)var653)->values[2] = (val*) var_c_name;
7989 ((struct instance_array__NativeArray*)var653)->values[3] = (val*) var647;
7990 ((void (*)(val*, val*, long))(var651->class->vft[COLOR_array__Array__with_native]))(var651, var653, var652) /* with_native on <var651:Array[Object]>*/;
7991 CHECK_NEW_array__Array(var651);
7992 }
7993 var654 = ((val* (*)(val*))(var651->class->vft[COLOR_string__Object__to_s]))(var651) /* to_s on <var651:Array[Object]>*/;
7994 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var654) /* add on <var_v:SeparateCompilerVisitor>*/;
7995 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_init_attr]))(self, var_v, var_res600, var_mtype) /* generate_init_attr on <self:SeparateCompiler>*/;
7996 if (varonce655) {
7997 var656 = varonce655;
7998 } else {
7999 var657 = "return ";
8000 var658 = 7;
8001 var659 = string__NativeString__to_s_with_length(var657, var658);
8002 var656 = var659;
8003 varonce655 = var656;
8004 }
8005 if (varonce660) {
8006 var661 = varonce660;
8007 } else {
8008 var662 = ";";
8009 var663 = 1;
8010 var664 = string__NativeString__to_s_with_length(var662, var663);
8011 var661 = var664;
8012 varonce660 = var661;
8013 }
8014 var665 = NEW_array__Array(&type_array__Arraykernel__Object);
8015 { /* var665 = array_instance Array[Object] */
8016 var666 = 3;
8017 var667 = NEW_array__NativeArray(var666, &type_array__NativeArraykernel__Object);
8018 ((struct instance_array__NativeArray*)var667)->values[0] = (val*) var656;
8019 ((struct instance_array__NativeArray*)var667)->values[1] = (val*) var_res600;
8020 ((struct instance_array__NativeArray*)var667)->values[2] = (val*) var661;
8021 ((void (*)(val*, val*, long))(var665->class->vft[COLOR_array__Array__with_native]))(var665, var667, var666) /* with_native on <var665:Array[Object]>*/;
8022 CHECK_NEW_array__Array(var665);
8023 }
8024 var668 = ((val* (*)(val*))(var665->class->vft[COLOR_string__Object__to_s]))(var665) /* to_s on <var665:Array[Object]>*/;
8025 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var668) /* add on <var_v:SeparateCompilerVisitor>*/;
8026 }
8027 if (varonce669) {
8028 var670 = varonce669;
8029 } else {
8030 var671 = "}";
8031 var672 = 1;
8032 var673 = string__NativeString__to_s_with_length(var671, var672);
8033 var670 = var673;
8034 varonce669 = var670;
8035 }
8036 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var670) /* add on <var_v:SeparateCompilerVisitor>*/;
8037 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_check_init_instance]))(self, var_mtype) /* generate_check_init_instance on <self:SeparateCompiler>*/;
8038 RET_LABEL:;
8039 }
8040 /* method separate_compiler#SeparateCompiler#compile_class_to_c for (self: Object, MClass) */
8041 void VIRTUAL_separate_compiler__SeparateCompiler__compile_class_to_c(val* self, val* p0) {
8042 separate_compiler__SeparateCompiler__compile_class_to_c(self, p0);
8043 RET_LABEL:;
8044 }
8045 /* method separate_compiler#SeparateCompiler#hardening_live_type for (self: SeparateCompiler, SeparateCompilerVisitor, String) */
8046 void separate_compiler__SeparateCompiler__hardening_live_type(val* self, val* p0, val* p1) {
8047 short int var /* : Bool */;
8048 int cltype;
8049 int idtype;
8050 const struct type* type_struct;
8051 const char* var_class_name;
8052 val* var_v /* var v: SeparateCompilerVisitor */;
8053 val* var_t /* var t: String */;
8054 val* var1 /* : AbstractCompiler */;
8055 val* var2 /* : ModelBuilder */;
8056 val* var3 /* : ToolContext */;
8057 val* var4 /* : OptionBool */;
8058 val* var5 /* : nullable Object */;
8059 short int var6 /* : Bool */;
8060 short int var7 /* : Bool */;
8061 static val* varonce;
8062 val* var8 /* : String */;
8063 char* var9 /* : NativeString */;
8064 long var10 /* : Int */;
8065 val* var11 /* : String */;
8066 static val* varonce12;
8067 val* var13 /* : String */;
8068 char* var14 /* : NativeString */;
8069 long var15 /* : Int */;
8070 val* var16 /* : String */;
8071 val* var17 /* : Array[Object] */;
8072 long var18 /* : Int */;
8073 val* var19 /* : NativeArray[Object] */;
8074 val* var20 /* : String */;
8075 static val* varonce21;
8076 val* var22 /* : String */;
8077 char* var23 /* : NativeString */;
8078 long var24 /* : Int */;
8079 val* var25 /* : String */;
8080 static val* varonce26;
8081 val* var27 /* : String */;
8082 char* var28 /* : NativeString */;
8083 long var29 /* : Int */;
8084 val* var30 /* : String */;
8085 static val* varonce31;
8086 val* var32 /* : String */;
8087 char* var33 /* : NativeString */;
8088 long var34 /* : Int */;
8089 val* var35 /* : String */;
8090 static val* varonce36;
8091 val* var37 /* : String */;
8092 char* var38 /* : NativeString */;
8093 long var39 /* : Int */;
8094 val* var40 /* : String */;
8095 val* var41 /* : Array[Object] */;
8096 long var42 /* : Int */;
8097 val* var43 /* : NativeArray[Object] */;
8098 val* var44 /* : String */;
8099 static val* varonce45;
8100 val* var46 /* : String */;
8101 char* var47 /* : NativeString */;
8102 long var48 /* : Int */;
8103 val* var49 /* : String */;
8104 static val* varonce50;
8105 val* var51 /* : String */;
8106 char* var52 /* : NativeString */;
8107 long var53 /* : Int */;
8108 val* var54 /* : String */;
8109 val* var55 /* : Array[Object] */;
8110 long var56 /* : Int */;
8111 val* var57 /* : NativeArray[Object] */;
8112 val* var58 /* : String */;
8113 static val* varonce59;
8114 val* var60 /* : String */;
8115 char* var61 /* : NativeString */;
8116 long var62 /* : Int */;
8117 val* var63 /* : String */;
8118 static val* varonce64;
8119 val* var65 /* : String */;
8120 char* var66 /* : NativeString */;
8121 long var67 /* : Int */;
8122 val* var68 /* : String */;
8123 /* Covariant cast for argument 0 (v) <p0:SeparateCompilerVisitor> isa VISITOR */
8124 /* <p0:SeparateCompilerVisitor> isa VISITOR */
8125 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
8126 cltype = type_struct->color;
8127 idtype = type_struct->id;
8128 if(cltype >= p0->type->table_size) {
8129 var = 0;
8130 } else {
8131 var = p0->type->type_table[cltype] == idtype;
8132 }
8133 if (!var) {
8134 var_class_name = p0 == NULL ? "null" : p0->type->name;
8135 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
8136 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 821);
8137 exit(1);
8138 }
8139 var_v = p0;
8140 var_t = p1;
8141 var1 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:SeparateCompilerVisitor>*/;
8142 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var1) /* modelbuilder on <var1:AbstractCompiler(SeparateCompiler)>*/;
8143 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var2) /* toolcontext on <var2:ModelBuilder>*/;
8144 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_compiler__ToolContext__opt_hardening]))(var3) /* opt_hardening on <var3:ToolContext>*/;
8145 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_opts__Option__value]))(var4) /* value on <var4:OptionBool>*/;
8146 var6 = ((struct instance_kernel__Bool*)var5)->value; /* autounbox from nullable Object to Bool */;
8147 var7 = !var6;
8148 if (var7){
8149 goto RET_LABEL;
8150 } else {
8151 }
8152 if (varonce) {
8153 var8 = varonce;
8154 } else {
8155 var9 = "if(";
8156 var10 = 3;
8157 var11 = string__NativeString__to_s_with_length(var9, var10);
8158 var8 = var11;
8159 varonce = var8;
8160 }
8161 if (varonce12) {
8162 var13 = varonce12;
8163 } else {
8164 var14 = " == NULL) {";
8165 var15 = 11;
8166 var16 = string__NativeString__to_s_with_length(var14, var15);
8167 var13 = var16;
8168 varonce12 = var13;
8169 }
8170 var17 = NEW_array__Array(&type_array__Arraykernel__Object);
8171 { /* var17 = array_instance Array[Object] */
8172 var18 = 3;
8173 var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
8174 ((struct instance_array__NativeArray*)var19)->values[0] = (val*) var8;
8175 ((struct instance_array__NativeArray*)var19)->values[1] = (val*) var_t;
8176 ((struct instance_array__NativeArray*)var19)->values[2] = (val*) var13;
8177 ((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
8178 CHECK_NEW_array__Array(var17);
8179 }
8180 var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
8181 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var20) /* add on <var_v:SeparateCompilerVisitor>*/;
8182 if (varonce21) {
8183 var22 = varonce21;
8184 } else {
8185 var23 = "type null";
8186 var24 = 9;
8187 var25 = string__NativeString__to_s_with_length(var23, var24);
8188 var22 = var25;
8189 varonce21 = var22;
8190 }
8191 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(var_v, var22) /* add_abort on <var_v:SeparateCompilerVisitor>*/;
8192 if (varonce26) {
8193 var27 = varonce26;
8194 } else {
8195 var28 = "}";
8196 var29 = 1;
8197 var30 = string__NativeString__to_s_with_length(var28, var29);
8198 var27 = var30;
8199 varonce26 = var27;
8200 }
8201 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var27) /* add on <var_v:SeparateCompilerVisitor>*/;
8202 if (varonce31) {
8203 var32 = varonce31;
8204 } else {
8205 var33 = "if(";
8206 var34 = 3;
8207 var35 = string__NativeString__to_s_with_length(var33, var34);
8208 var32 = var35;
8209 varonce31 = var32;
8210 }
8211 if (varonce36) {
8212 var37 = varonce36;
8213 } else {
8214 var38 = "->resolution_table == NULL) {";
8215 var39 = 29;
8216 var40 = string__NativeString__to_s_with_length(var38, var39);
8217 var37 = var40;
8218 varonce36 = var37;
8219 }
8220 var41 = NEW_array__Array(&type_array__Arraykernel__Object);
8221 { /* var41 = array_instance Array[Object] */
8222 var42 = 3;
8223 var43 = NEW_array__NativeArray(var42, &type_array__NativeArraykernel__Object);
8224 ((struct instance_array__NativeArray*)var43)->values[0] = (val*) var32;
8225 ((struct instance_array__NativeArray*)var43)->values[1] = (val*) var_t;
8226 ((struct instance_array__NativeArray*)var43)->values[2] = (val*) var37;
8227 ((void (*)(val*, val*, long))(var41->class->vft[COLOR_array__Array__with_native]))(var41, var43, var42) /* with_native on <var41:Array[Object]>*/;
8228 CHECK_NEW_array__Array(var41);
8229 }
8230 var44 = ((val* (*)(val*))(var41->class->vft[COLOR_string__Object__to_s]))(var41) /* to_s on <var41:Array[Object]>*/;
8231 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var44) /* add on <var_v:SeparateCompilerVisitor>*/;
8232 if (varonce45) {
8233 var46 = varonce45;
8234 } else {
8235 var47 = "fprintf(stderr, \"Insantiation of a dead type: %s\\n\", ";
8236 var48 = 53;
8237 var49 = string__NativeString__to_s_with_length(var47, var48);
8238 var46 = var49;
8239 varonce45 = var46;
8240 }
8241 if (varonce50) {
8242 var51 = varonce50;
8243 } else {
8244 var52 = "->name);";
8245 var53 = 8;
8246 var54 = string__NativeString__to_s_with_length(var52, var53);
8247 var51 = var54;
8248 varonce50 = var51;
8249 }
8250 var55 = NEW_array__Array(&type_array__Arraykernel__Object);
8251 { /* var55 = array_instance Array[Object] */
8252 var56 = 3;
8253 var57 = NEW_array__NativeArray(var56, &type_array__NativeArraykernel__Object);
8254 ((struct instance_array__NativeArray*)var57)->values[0] = (val*) var46;
8255 ((struct instance_array__NativeArray*)var57)->values[1] = (val*) var_t;
8256 ((struct instance_array__NativeArray*)var57)->values[2] = (val*) var51;
8257 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_array__Array__with_native]))(var55, var57, var56) /* with_native on <var55:Array[Object]>*/;
8258 CHECK_NEW_array__Array(var55);
8259 }
8260 var58 = ((val* (*)(val*))(var55->class->vft[COLOR_string__Object__to_s]))(var55) /* to_s on <var55:Array[Object]>*/;
8261 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var58) /* add on <var_v:SeparateCompilerVisitor>*/;
8262 if (varonce59) {
8263 var60 = varonce59;
8264 } else {
8265 var61 = "type dead";
8266 var62 = 9;
8267 var63 = string__NativeString__to_s_with_length(var61, var62);
8268 var60 = var63;
8269 varonce59 = var60;
8270 }
8271 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(var_v, var60) /* add_abort on <var_v:SeparateCompilerVisitor>*/;
8272 if (varonce64) {
8273 var65 = varonce64;
8274 } else {
8275 var66 = "}";
8276 var67 = 1;
8277 var68 = string__NativeString__to_s_with_length(var66, var67);
8278 var65 = var68;
8279 varonce64 = var65;
8280 }
8281 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var65) /* add on <var_v:SeparateCompilerVisitor>*/;
8282 RET_LABEL:;
8283 }
8284 /* method separate_compiler#SeparateCompiler#hardening_live_type for (self: Object, SeparateCompilerVisitor, String) */
8285 void VIRTUAL_separate_compiler__SeparateCompiler__hardening_live_type(val* self, val* p0, val* p1) {
8286 separate_compiler__SeparateCompiler__hardening_live_type(self, p0, p1);
8287 RET_LABEL:;
8288 }
8289 /* method separate_compiler#SeparateCompiler#generate_check_init_instance for (self: SeparateCompiler, MClassType) */
8290 void separate_compiler__SeparateCompiler__generate_check_init_instance(val* self, val* p0) {
8291 val* var_mtype /* var mtype: MClassType */;
8292 val* var /* : ModelBuilder */;
8293 val* var1 /* : ToolContext */;
8294 val* var2 /* : OptionBool */;
8295 val* var3 /* : nullable Object */;
8296 short int var4 /* : Bool */;
8297 val* var5 /* : AbstractCompilerVisitor */;
8298 val* var_v /* var v: SeparateCompilerVisitor */;
8299 val* var6 /* : MClass */;
8300 val* var7 /* : String */;
8301 val* var_c_name /* var c_name: String */;
8302 val* var8 /* : RuntimeVariable */;
8303 static val* varonce;
8304 val* var9 /* : String */;
8305 char* var10 /* : NativeString */;
8306 long var11 /* : Int */;
8307 val* var12 /* : String */;
8308 val* var_res /* var res: RuntimeVariable */;
8309 static val* varonce13;
8310 val* var14 /* : String */;
8311 char* var15 /* : NativeString */;
8312 long var16 /* : Int */;
8313 val* var17 /* : String */;
8314 val* var18 /* : Array[Object] */;
8315 long var19 /* : Int */;
8316 val* var20 /* : NativeArray[Object] */;
8317 val* var21 /* : String */;
8318 static val* varonce22;
8319 val* var23 /* : String */;
8320 char* var24 /* : NativeString */;
8321 long var25 /* : Int */;
8322 val* var26 /* : String */;
8323 static val* varonce27;
8324 val* var28 /* : String */;
8325 char* var29 /* : NativeString */;
8326 long var30 /* : Int */;
8327 val* var31 /* : String */;
8328 val* var32 /* : String */;
8329 static val* varonce33;
8330 val* var34 /* : String */;
8331 char* var35 /* : NativeString */;
8332 long var36 /* : Int */;
8333 val* var37 /* : String */;
8334 val* var38 /* : Array[Object] */;
8335 long var39 /* : Int */;
8336 val* var40 /* : NativeArray[Object] */;
8337 val* var41 /* : String */;
8338 static val* varonce42;
8339 val* var43 /* : String */;
8340 char* var44 /* : NativeString */;
8341 long var45 /* : Int */;
8342 val* var46 /* : String */;
8343 static val* varonce47;
8344 val* var48 /* : String */;
8345 char* var49 /* : NativeString */;
8346 long var50 /* : Int */;
8347 val* var51 /* : String */;
8348 val* var52 /* : Array[Object] */;
8349 long var53 /* : Int */;
8350 val* var54 /* : NativeArray[Object] */;
8351 val* var55 /* : String */;
8352 static val* varonce56;
8353 val* var57 /* : String */;
8354 char* var58 /* : NativeString */;
8355 long var59 /* : Int */;
8356 val* var60 /* : String */;
8357 static val* varonce61;
8358 val* var62 /* : String */;
8359 char* var63 /* : NativeString */;
8360 long var64 /* : Int */;
8361 val* var65 /* : String */;
8362 val* var66 /* : String */;
8363 static val* varonce67;
8364 val* var68 /* : String */;
8365 char* var69 /* : NativeString */;
8366 long var70 /* : Int */;
8367 val* var71 /* : String */;
8368 static val* varonce72;
8369 val* var73 /* : String */;
8370 char* var74 /* : NativeString */;
8371 long var75 /* : Int */;
8372 val* var76 /* : String */;
8373 val* var77 /* : Array[Object] */;
8374 long var78 /* : Int */;
8375 val* var79 /* : NativeArray[Object] */;
8376 val* var80 /* : String */;
8377 val* var81 /* : RapidTypeAnalysis */;
8378 val* var82 /* : HashSet[MClass] */;
8379 val* var83 /* : MClass */;
8380 short int var84 /* : Bool */;
8381 val* var85 /* : MClass */;
8382 static val* varonce86;
8383 val* var87 /* : String */;
8384 char* var88 /* : NativeString */;
8385 long var89 /* : Int */;
8386 val* var90 /* : String */;
8387 val* var91 /* : Array[Object] */;
8388 long var92 /* : Int */;
8389 val* var93 /* : NativeArray[Object] */;
8390 val* var94 /* : String */;
8391 static val* varonce95;
8392 val* var96 /* : String */;
8393 char* var97 /* : NativeString */;
8394 long var98 /* : Int */;
8395 val* var99 /* : String */;
8396 var_mtype = p0;
8397 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
8398 var1 = ((val* (*)(val*))(var->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var) /* toolcontext on <var:ModelBuilder>*/;
8399 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_check_initialization]))(var1) /* opt_no_check_initialization on <var1:ToolContext>*/;
8400 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_opts__Option__value]))(var2) /* value on <var2:OptionBool>*/;
8401 var4 = ((struct instance_kernel__Bool*)var3)->value; /* autounbox from nullable Object to Bool */;
8402 if (var4){
8403 goto RET_LABEL;
8404 } else {
8405 }
8406 var5 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateCompiler>*/;
8407 var_v = var5;
8408 var6 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
8409 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var6) /* c_name on <var6:MClass>*/;
8410 var_c_name = var7;
8411 var8 = NEW_abstract_compiler__RuntimeVariable(&type_abstract_compiler__RuntimeVariable);
8412 if (varonce) {
8413 var9 = varonce;
8414 } else {
8415 var10 = "self";
8416 var11 = 4;
8417 var12 = string__NativeString__to_s_with_length(var10, var11);
8418 var9 = var12;
8419 varonce = var9;
8420 }
8421 ((void (*)(val*, val*, val*, val*))(var8->class->vft[COLOR_abstract_compiler__RuntimeVariable__init]))(var8, var9, var_mtype, var_mtype) /* init on <var8:RuntimeVariable>*/;
8422 CHECK_NEW_abstract_compiler__RuntimeVariable(var8);
8423 var_res = var8;
8424 if (varonce13) {
8425 var14 = varonce13;
8426 } else {
8427 var15 = "CHECK_NEW_";
8428 var16 = 10;
8429 var17 = string__NativeString__to_s_with_length(var15, var16);
8430 var14 = var17;
8431 varonce13 = var14;
8432 }
8433 var18 = NEW_array__Array(&type_array__Arraykernel__Object);
8434 { /* var18 = array_instance Array[Object] */
8435 var19 = 2;
8436 var20 = NEW_array__NativeArray(var19, &type_array__NativeArraykernel__Object);
8437 ((struct instance_array__NativeArray*)var20)->values[0] = (val*) var14;
8438 ((struct instance_array__NativeArray*)var20)->values[1] = (val*) var_c_name;
8439 ((void (*)(val*, val*, long))(var18->class->vft[COLOR_array__Array__with_native]))(var18, var20, var19) /* with_native on <var18:Array[Object]>*/;
8440 CHECK_NEW_array__Array(var18);
8441 }
8442 var21 = ((val* (*)(val*))(var18->class->vft[COLOR_string__Object__to_s]))(var18) /* to_s on <var18:Array[Object]>*/;
8443 if (varonce22) {
8444 var23 = varonce22;
8445 } else {
8446 var24 = "void CHECK_NEW_";
8447 var25 = 15;
8448 var26 = string__NativeString__to_s_with_length(var24, var25);
8449 var23 = var26;
8450 varonce22 = var23;
8451 }
8452 if (varonce27) {
8453 var28 = varonce27;
8454 } else {
8455 var29 = "(";
8456 var30 = 1;
8457 var31 = string__NativeString__to_s_with_length(var29, var30);
8458 var28 = var31;
8459 varonce27 = var28;
8460 }
8461 var32 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
8462 if (varonce33) {
8463 var34 = varonce33;
8464 } else {
8465 var35 = ");";
8466 var36 = 2;
8467 var37 = string__NativeString__to_s_with_length(var35, var36);
8468 var34 = var37;
8469 varonce33 = var34;
8470 }
8471 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
8472 { /* var38 = array_instance Array[Object] */
8473 var39 = 5;
8474 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
8475 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var23;
8476 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_c_name;
8477 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var28;
8478 ((struct instance_array__NativeArray*)var40)->values[3] = (val*) var32;
8479 ((struct instance_array__NativeArray*)var40)->values[4] = (val*) var34;
8480 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
8481 CHECK_NEW_array__Array(var38);
8482 }
8483 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
8484 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var21, var41) /* provide_declaration on <self:SeparateCompiler>*/;
8485 if (varonce42) {
8486 var43 = varonce42;
8487 } else {
8488 var44 = "/* allocate ";
8489 var45 = 12;
8490 var46 = string__NativeString__to_s_with_length(var44, var45);
8491 var43 = var46;
8492 varonce42 = var43;
8493 }
8494 if (varonce47) {
8495 var48 = varonce47;
8496 } else {
8497 var49 = " */";
8498 var50 = 3;
8499 var51 = string__NativeString__to_s_with_length(var49, var50);
8500 var48 = var51;
8501 varonce47 = var48;
8502 }
8503 var52 = NEW_array__Array(&type_array__Arraykernel__Object);
8504 { /* var52 = array_instance Array[Object] */
8505 var53 = 3;
8506 var54 = NEW_array__NativeArray(var53, &type_array__NativeArraykernel__Object);
8507 ((struct instance_array__NativeArray*)var54)->values[0] = (val*) var43;
8508 ((struct instance_array__NativeArray*)var54)->values[1] = (val*) var_mtype;
8509 ((struct instance_array__NativeArray*)var54)->values[2] = (val*) var48;
8510 ((void (*)(val*, val*, long))(var52->class->vft[COLOR_array__Array__with_native]))(var52, var54, var53) /* with_native on <var52:Array[Object]>*/;
8511 CHECK_NEW_array__Array(var52);
8512 }
8513 var55 = ((val* (*)(val*))(var52->class->vft[COLOR_string__Object__to_s]))(var52) /* to_s on <var52:Array[Object]>*/;
8514 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var55) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
8515 if (varonce56) {
8516 var57 = varonce56;
8517 } else {
8518 var58 = "void CHECK_NEW_";
8519 var59 = 15;
8520 var60 = string__NativeString__to_s_with_length(var58, var59);
8521 var57 = var60;
8522 varonce56 = var57;
8523 }
8524 if (varonce61) {
8525 var62 = varonce61;
8526 } else {
8527 var63 = "(";
8528 var64 = 1;
8529 var65 = string__NativeString__to_s_with_length(var63, var64);
8530 var62 = var65;
8531 varonce61 = var62;
8532 }
8533 var66 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
8534 if (varonce67) {
8535 var68 = varonce67;
8536 } else {
8537 var69 = " ";
8538 var70 = 1;
8539 var71 = string__NativeString__to_s_with_length(var69, var70);
8540 var68 = var71;
8541 varonce67 = var68;
8542 }
8543 if (varonce72) {
8544 var73 = varonce72;
8545 } else {
8546 var74 = ") {";
8547 var75 = 3;
8548 var76 = string__NativeString__to_s_with_length(var74, var75);
8549 var73 = var76;
8550 varonce72 = var73;
8551 }
8552 var77 = NEW_array__Array(&type_array__Arraykernel__Object);
8553 { /* var77 = array_instance Array[Object] */
8554 var78 = 7;
8555 var79 = NEW_array__NativeArray(var78, &type_array__NativeArraykernel__Object);
8556 ((struct instance_array__NativeArray*)var79)->values[0] = (val*) var57;
8557 ((struct instance_array__NativeArray*)var79)->values[1] = (val*) var_c_name;
8558 ((struct instance_array__NativeArray*)var79)->values[2] = (val*) var62;
8559 ((struct instance_array__NativeArray*)var79)->values[3] = (val*) var66;
8560 ((struct instance_array__NativeArray*)var79)->values[4] = (val*) var68;
8561 ((struct instance_array__NativeArray*)var79)->values[5] = (val*) var_res;
8562 ((struct instance_array__NativeArray*)var79)->values[6] = (val*) var73;
8563 ((void (*)(val*, val*, long))(var77->class->vft[COLOR_array__Array__with_native]))(var77, var79, var78) /* with_native on <var77:Array[Object]>*/;
8564 CHECK_NEW_array__Array(var77);
8565 }
8566 var80 = ((val* (*)(val*))(var77->class->vft[COLOR_string__Object__to_s]))(var77) /* to_s on <var77:Array[Object]>*/;
8567 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var80) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
8568 var81 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__runtime_type_analysis]))(self) /* runtime_type_analysis on <self:SeparateCompiler>*/;
8569 var82 = ((val* (*)(val*))(var81->class->vft[COLOR_rapid_type_analysis__RapidTypeAnalysis__live_classes]))(var81) /* live_classes on <var81:RapidTypeAnalysis>*/;
8570 var83 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
8571 var84 = ((short int (*)(val*, val*))(var82->class->vft[COLOR_abstract_collection__Collection__has]))(var82, var83) /* has on <var82:HashSet[MClass]>*/;
8572 if (var84){
8573 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_check_attr]))(self, var_v, var_res, var_mtype) /* generate_check_attr on <self:SeparateCompiler>*/;
8574 } else {
8575 var85 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
8576 if (varonce86) {
8577 var87 = varonce86;
8578 } else {
8579 var88 = " is DEAD";
8580 var89 = 8;
8581 var90 = string__NativeString__to_s_with_length(var88, var89);
8582 var87 = var90;
8583 varonce86 = var87;
8584 }
8585 var91 = NEW_array__Array(&type_array__Arraykernel__Object);
8586 { /* var91 = array_instance Array[Object] */
8587 var92 = 2;
8588 var93 = NEW_array__NativeArray(var92, &type_array__NativeArraykernel__Object);
8589 ((struct instance_array__NativeArray*)var93)->values[0] = (val*) var85;
8590 ((struct instance_array__NativeArray*)var93)->values[1] = (val*) var87;
8591 ((void (*)(val*, val*, long))(var91->class->vft[COLOR_array__Array__with_native]))(var91, var93, var92) /* with_native on <var91:Array[Object]>*/;
8592 CHECK_NEW_array__Array(var91);
8593 }
8594 var94 = ((val* (*)(val*))(var91->class->vft[COLOR_string__Object__to_s]))(var91) /* to_s on <var91:Array[Object]>*/;
8595 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(var_v, var94) /* add_abort on <var_v:SeparateCompilerVisitor>*/;
8596 }
8597 if (varonce95) {
8598 var96 = varonce95;
8599 } else {
8600 var97 = "}";
8601 var98 = 1;
8602 var99 = string__NativeString__to_s_with_length(var97, var98);
8603 var96 = var99;
8604 varonce95 = var96;
8605 }
8606 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var96) /* add on <var_v:SeparateCompilerVisitor>*/;
8607 RET_LABEL:;
8608 }
8609 /* method separate_compiler#SeparateCompiler#generate_check_init_instance for (self: Object, MClassType) */
8610 void VIRTUAL_separate_compiler__SeparateCompiler__generate_check_init_instance(val* self, val* p0) {
8611 separate_compiler__SeparateCompiler__generate_check_init_instance(self, p0);
8612 RET_LABEL:;
8613 }
8614 /* method separate_compiler#SeparateCompiler#new_visitor for (self: SeparateCompiler): SeparateCompilerVisitor */
8615 val* separate_compiler__SeparateCompiler__new_visitor(val* self) {
8616 val* var /* : SeparateCompilerVisitor */;
8617 val* var1 /* : SeparateCompilerVisitor */;
8618 short int var2 /* : Bool */;
8619 int cltype;
8620 int idtype;
8621 const struct type* type_struct;
8622 const char* var_class_name;
8623 var1 = NEW_separate_compiler__SeparateCompilerVisitor(&type_separate_compiler__SeparateCompilerVisitor);
8624 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init]))(var1, self) /* init on <var1:SeparateCompilerVisitor>*/;
8625 CHECK_NEW_separate_compiler__SeparateCompilerVisitor(var1);
8626 /* <var1:SeparateCompilerVisitor> isa VISITOR */
8627 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
8628 cltype = type_struct->color;
8629 idtype = type_struct->id;
8630 if(cltype >= var1->type->table_size) {
8631 var2 = 0;
8632 } else {
8633 var2 = var1->type->type_table[cltype] == idtype;
8634 }
8635 if (!var2) {
8636 var_class_name = var1 == NULL ? "null" : var1->type->name;
8637 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
8638 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 852);
8639 exit(1);
8640 }
8641 var = var1;
8642 goto RET_LABEL;
8643 RET_LABEL:;
8644 return var;
8645 }
8646 /* method separate_compiler#SeparateCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
8647 val* VIRTUAL_separate_compiler__SeparateCompiler__new_visitor(val* self) {
8648 val* var /* : AbstractCompilerVisitor */;
8649 val* var1 /* : SeparateCompilerVisitor */;
8650 var1 = separate_compiler__SeparateCompiler__new_visitor(self);
8651 var = var1;
8652 RET_LABEL:;
8653 return var;
8654 }
8655 /* method separate_compiler#SeparateCompiler#type_tables for (self: SeparateCompiler): Map[MType, Array[nullable MType]] */
8656 val* separate_compiler__SeparateCompiler__type_tables(val* self) {
8657 val* var /* : Map[MType, Array[nullable MType]] */;
8658 val* var1 /* : Map[MType, Array[nullable MType]] */;
8659 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dtype_tables].val; /* @type_tables on <self:SeparateCompiler> */
8660 if (var1 == NULL) {
8661 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @type_tables");
8662 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 856);
8663 exit(1);
8664 }
8665 var = var1;
8666 RET_LABEL:;
8667 return var;
8668 }
8669 /* method separate_compiler#SeparateCompiler#type_tables for (self: Object): Map[MType, Array[nullable MType]] */
8670 val* VIRTUAL_separate_compiler__SeparateCompiler__type_tables(val* self) {
8671 val* var /* : Map[MType, Array[nullable MType]] */;
8672 val* var1 /* : Map[MType, Array[nullable MType]] */;
8673 var1 = separate_compiler__SeparateCompiler__type_tables(self);
8674 var = var1;
8675 RET_LABEL:;
8676 return var;
8677 }
8678 /* method separate_compiler#SeparateCompiler#type_tables= for (self: SeparateCompiler, Map[MType, Array[nullable MType]]) */
8679 void separate_compiler__SeparateCompiler__type_tables_61d(val* self, val* p0) {
8680 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dtype_tables].val = p0; /* @type_tables on <self:SeparateCompiler> */
8681 RET_LABEL:;
8682 }
8683 /* method separate_compiler#SeparateCompiler#type_tables= for (self: Object, Map[MType, Array[nullable MType]]) */
8684 void VIRTUAL_separate_compiler__SeparateCompiler__type_tables_61d(val* self, val* p0) {
8685 separate_compiler__SeparateCompiler__type_tables_61d(self, p0);
8686 RET_LABEL:;
8687 }
8688 /* method separate_compiler#SeparateCompiler#resolution_tables for (self: SeparateCompiler): Map[MClassType, Array[nullable MType]] */
8689 val* separate_compiler__SeparateCompiler__resolution_tables(val* self) {
8690 val* var /* : Map[MClassType, Array[nullable MType]] */;
8691 val* var1 /* : Map[MClassType, Array[nullable MType]] */;
8692 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dresolution_tables].val; /* @resolution_tables on <self:SeparateCompiler> */
8693 if (var1 == NULL) {
8694 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @resolution_tables");
8695 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 857);
8696 exit(1);
8697 }
8698 var = var1;
8699 RET_LABEL:;
8700 return var;
8701 }
8702 /* method separate_compiler#SeparateCompiler#resolution_tables for (self: Object): Map[MClassType, Array[nullable MType]] */
8703 val* VIRTUAL_separate_compiler__SeparateCompiler__resolution_tables(val* self) {
8704 val* var /* : Map[MClassType, Array[nullable MType]] */;
8705 val* var1 /* : Map[MClassType, Array[nullable MType]] */;
8706 var1 = separate_compiler__SeparateCompiler__resolution_tables(self);
8707 var = var1;
8708 RET_LABEL:;
8709 return var;
8710 }
8711 /* method separate_compiler#SeparateCompiler#resolution_tables= for (self: SeparateCompiler, Map[MClassType, Array[nullable MType]]) */
8712 void separate_compiler__SeparateCompiler__resolution_tables_61d(val* self, val* p0) {
8713 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dresolution_tables].val = p0; /* @resolution_tables on <self:SeparateCompiler> */
8714 RET_LABEL:;
8715 }
8716 /* method separate_compiler#SeparateCompiler#resolution_tables= for (self: Object, Map[MClassType, Array[nullable MType]]) */
8717 void VIRTUAL_separate_compiler__SeparateCompiler__resolution_tables_61d(val* self, val* p0) {
8718 separate_compiler__SeparateCompiler__resolution_tables_61d(self, p0);
8719 RET_LABEL:;
8720 }
8721 /* method separate_compiler#SeparateCompiler#method_tables for (self: SeparateCompiler): Map[MClass, Array[nullable MPropDef]] */
8722 val* separate_compiler__SeparateCompiler__method_tables(val* self) {
8723 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
8724 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
8725 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dmethod_tables].val; /* @method_tables on <self:SeparateCompiler> */
8726 if (var1 == NULL) {
8727 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @method_tables");
8728 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 858);
8729 exit(1);
8730 }
8731 var = var1;
8732 RET_LABEL:;
8733 return var;
8734 }
8735 /* method separate_compiler#SeparateCompiler#method_tables for (self: Object): Map[MClass, Array[nullable MPropDef]] */
8736 val* VIRTUAL_separate_compiler__SeparateCompiler__method_tables(val* self) {
8737 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
8738 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
8739 var1 = separate_compiler__SeparateCompiler__method_tables(self);
8740 var = var1;
8741 RET_LABEL:;
8742 return var;
8743 }
8744 /* method separate_compiler#SeparateCompiler#method_tables= for (self: SeparateCompiler, Map[MClass, Array[nullable MPropDef]]) */
8745 void separate_compiler__SeparateCompiler__method_tables_61d(val* self, val* p0) {
8746 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dmethod_tables].val = p0; /* @method_tables on <self:SeparateCompiler> */
8747 RET_LABEL:;
8748 }
8749 /* method separate_compiler#SeparateCompiler#method_tables= for (self: Object, Map[MClass, Array[nullable MPropDef]]) */
8750 void VIRTUAL_separate_compiler__SeparateCompiler__method_tables_61d(val* self, val* p0) {
8751 separate_compiler__SeparateCompiler__method_tables_61d(self, p0);
8752 RET_LABEL:;
8753 }
8754 /* method separate_compiler#SeparateCompiler#attr_tables for (self: SeparateCompiler): Map[MClass, Array[nullable MPropDef]] */
8755 val* separate_compiler__SeparateCompiler__attr_tables(val* self) {
8756 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
8757 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
8758 var1 = self->attrs[COLOR_separate_compiler__SeparateCompiler___64dattr_tables].val; /* @attr_tables on <self:SeparateCompiler> */
8759 if (var1 == NULL) {
8760 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @attr_tables");
8761 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 859);
8762 exit(1);
8763 }
8764 var = var1;
8765 RET_LABEL:;
8766 return var;
8767 }
8768 /* method separate_compiler#SeparateCompiler#attr_tables for (self: Object): Map[MClass, Array[nullable MPropDef]] */
8769 val* VIRTUAL_separate_compiler__SeparateCompiler__attr_tables(val* self) {
8770 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
8771 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
8772 var1 = separate_compiler__SeparateCompiler__attr_tables(self);
8773 var = var1;
8774 RET_LABEL:;
8775 return var;
8776 }
8777 /* method separate_compiler#SeparateCompiler#attr_tables= for (self: SeparateCompiler, Map[MClass, Array[nullable MPropDef]]) */
8778 void separate_compiler__SeparateCompiler__attr_tables_61d(val* self, val* p0) {
8779 self->attrs[COLOR_separate_compiler__SeparateCompiler___64dattr_tables].val = p0; /* @attr_tables on <self:SeparateCompiler> */
8780 RET_LABEL:;
8781 }
8782 /* method separate_compiler#SeparateCompiler#attr_tables= for (self: Object, Map[MClass, Array[nullable MPropDef]]) */
8783 void VIRTUAL_separate_compiler__SeparateCompiler__attr_tables_61d(val* self, val* p0) {
8784 separate_compiler__SeparateCompiler__attr_tables_61d(self, p0);
8785 RET_LABEL:;
8786 }
8787 /* method separate_compiler#SeparateCompiler#display_stats for (self: SeparateCompiler) */
8788 void separate_compiler__SeparateCompiler__display_stats(val* self) {
8789 val* var /* : ModelBuilder */;
8790 val* var1 /* : ToolContext */;
8791 val* var2 /* : OptionBool */;
8792 val* var3 /* : nullable Object */;
8793 short int var4 /* : Bool */;
8794 ((void (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__display_stats]))(self) /* display_stats on <self:SeparateCompiler>*/;
8795 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateCompiler>*/;
8796 var1 = ((val* (*)(val*))(var->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var) /* toolcontext on <var:ModelBuilder>*/;
8797 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_separate_compiler__ToolContext__opt_tables_metrics]))(var1) /* opt_tables_metrics on <var1:ToolContext>*/;
8798 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_opts__Option__value]))(var2) /* value on <var2:OptionBool>*/;
8799 var4 = ((struct instance_kernel__Bool*)var3)->value; /* autounbox from nullable Object to Bool */;
8800 if (var4){
8801 ((void (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__display_sizes]))(self) /* display_sizes on <self:SeparateCompiler>*/;
8802 } else {
8803 }
8804 RET_LABEL:;
8805 }
8806 /* method separate_compiler#SeparateCompiler#display_stats for (self: Object) */
8807 void VIRTUAL_separate_compiler__SeparateCompiler__display_stats(val* self) {
8808 separate_compiler__SeparateCompiler__display_stats(self);
8809 RET_LABEL:;
8810 }
8811 /* method separate_compiler#SeparateCompiler#display_sizes for (self: SeparateCompiler) */
8812 void separate_compiler__SeparateCompiler__display_sizes(val* self) {
8813 static val* varonce;
8814 val* var /* : String */;
8815 char* var1 /* : NativeString */;
8816 long var2 /* : Int */;
8817 val* var3 /* : String */;
8818 static val* varonce4;
8819 val* var5 /* : String */;
8820 char* var6 /* : NativeString */;
8821 long var7 /* : Int */;
8822 val* var8 /* : String */;
8823 long var9 /* : Int */;
8824 long var_total /* var total: Int */;
8825 long var10 /* : Int */;
8826 long var_holes /* var holes: Int */;
8827 val* var11 /* : Map[MType, Array[nullable MType]] */;
8828 val* var12 /* : MapIterator[Object, nullable Object] */;
8829 short int var13 /* : Bool */;
8830 val* var14 /* : Object */;
8831 val* var_t /* var t: MType */;
8832 val* var15 /* : nullable Object */;
8833 val* var_table /* var table: Array[nullable MType] */;
8834 long var16 /* : Int */;
8835 long var17 /* : Int */;
8836 long var19 /* : Int */;
8837 val* var20 /* : Iterator[nullable Object] */;
8838 short int var21 /* : Bool */;
8839 val* var22 /* : nullable Object */;
8840 val* var_e /* var e: nullable MType */;
8841 val* var23 /* : null */;
8842 short int var24 /* : Bool */;
8843 long var25 /* : Int */;
8844 long var26 /* : Int */;
8845 long var28 /* : Int */;
8846 static val* varonce30;
8847 val* var31 /* : String */;
8848 char* var32 /* : NativeString */;
8849 long var33 /* : Int */;
8850 val* var34 /* : String */;
8851 static val* varonce35;
8852 val* var36 /* : String */;
8853 char* var37 /* : NativeString */;
8854 long var38 /* : Int */;
8855 val* var39 /* : String */;
8856 val* var40 /* : Array[Object] */;
8857 long var41 /* : Int */;
8858 val* var42 /* : NativeArray[Object] */;
8859 val* var43 /* : Object */;
8860 val* var44 /* : Object */;
8861 val* var45 /* : String */;
8862 static val* varonce46;
8863 val* var47 /* : String */;
8864 char* var48 /* : NativeString */;
8865 long var49 /* : Int */;
8866 val* var50 /* : String */;
8867 static val* varonce51;
8868 val* var52 /* : String */;
8869 char* var53 /* : NativeString */;
8870 long var54 /* : Int */;
8871 val* var55 /* : String */;
8872 long var56 /* : Int */;
8873 long var57 /* : Int */;
8874 val* var58 /* : Map[MClassType, Array[nullable MType]] */;
8875 val* var59 /* : MapIterator[Object, nullable Object] */;
8876 short int var60 /* : Bool */;
8877 val* var61 /* : Object */;
8878 val* var_t62 /* var t: MClassType */;
8879 val* var63 /* : nullable Object */;
8880 val* var_table64 /* var table: Array[nullable MType] */;
8881 long var65 /* : Int */;
8882 long var66 /* : Int */;
8883 long var68 /* : Int */;
8884 val* var69 /* : Iterator[nullable Object] */;
8885 short int var70 /* : Bool */;
8886 val* var71 /* : nullable Object */;
8887 val* var_e72 /* var e: nullable MType */;
8888 val* var73 /* : null */;
8889 short int var74 /* : Bool */;
8890 long var75 /* : Int */;
8891 long var76 /* : Int */;
8892 long var78 /* : Int */;
8893 static val* varonce81;
8894 val* var82 /* : String */;
8895 char* var83 /* : NativeString */;
8896 long var84 /* : Int */;
8897 val* var85 /* : String */;
8898 static val* varonce86;
8899 val* var87 /* : String */;
8900 char* var88 /* : NativeString */;
8901 long var89 /* : Int */;
8902 val* var90 /* : String */;
8903 val* var91 /* : Array[Object] */;
8904 long var92 /* : Int */;
8905 val* var93 /* : NativeArray[Object] */;
8906 val* var94 /* : Object */;
8907 val* var95 /* : Object */;
8908 val* var96 /* : String */;
8909 static val* varonce97;
8910 val* var98 /* : String */;
8911 char* var99 /* : NativeString */;
8912 long var100 /* : Int */;
8913 val* var101 /* : String */;
8914 static val* varonce102;
8915 val* var103 /* : String */;
8916 char* var104 /* : NativeString */;
8917 long var105 /* : Int */;
8918 val* var106 /* : String */;
8919 long var107 /* : Int */;
8920 long var108 /* : Int */;
8921 val* var109 /* : Map[MClass, Array[nullable MPropDef]] */;
8922 val* var110 /* : MapIterator[Object, nullable Object] */;
8923 short int var111 /* : Bool */;
8924 val* var112 /* : Object */;
8925 val* var_t113 /* var t: MClass */;
8926 val* var114 /* : nullable Object */;
8927 val* var_table115 /* var table: Array[nullable MPropDef] */;
8928 long var116 /* : Int */;
8929 long var117 /* : Int */;
8930 long var119 /* : Int */;
8931 val* var120 /* : Iterator[nullable Object] */;
8932 short int var121 /* : Bool */;
8933 val* var122 /* : nullable Object */;
8934 val* var_e123 /* var e: nullable MPropDef */;
8935 val* var124 /* : null */;
8936 short int var125 /* : Bool */;
8937 long var126 /* : Int */;
8938 long var127 /* : Int */;
8939 long var129 /* : Int */;
8940 static val* varonce132;
8941 val* var133 /* : String */;
8942 char* var134 /* : NativeString */;
8943 long var135 /* : Int */;
8944 val* var136 /* : String */;
8945 static val* varonce137;
8946 val* var138 /* : String */;
8947 char* var139 /* : NativeString */;
8948 long var140 /* : Int */;
8949 val* var141 /* : String */;
8950 val* var142 /* : Array[Object] */;
8951 long var143 /* : Int */;
8952 val* var144 /* : NativeArray[Object] */;
8953 val* var145 /* : Object */;
8954 val* var146 /* : Object */;
8955 val* var147 /* : String */;
8956 static val* varonce148;
8957 val* var149 /* : String */;
8958 char* var150 /* : NativeString */;
8959 long var151 /* : Int */;
8960 val* var152 /* : String */;
8961 static val* varonce153;
8962 val* var154 /* : String */;
8963 char* var155 /* : NativeString */;
8964 long var156 /* : Int */;
8965 val* var157 /* : String */;
8966 long var158 /* : Int */;
8967 long var159 /* : Int */;
8968 val* var160 /* : Map[MClass, Array[nullable MPropDef]] */;
8969 val* var161 /* : MapIterator[Object, nullable Object] */;
8970 short int var162 /* : Bool */;
8971 val* var163 /* : Object */;
8972 val* var_t164 /* var t: MClass */;
8973 val* var165 /* : nullable Object */;
8974 val* var_table166 /* var table: Array[nullable MPropDef] */;
8975 long var167 /* : Int */;
8976 long var168 /* : Int */;
8977 long var170 /* : Int */;
8978 val* var171 /* : Iterator[nullable Object] */;
8979 short int var172 /* : Bool */;
8980 val* var173 /* : nullable Object */;
8981 val* var_e174 /* var e: nullable MPropDef */;
8982 val* var175 /* : null */;
8983 short int var176 /* : Bool */;
8984 long var177 /* : Int */;
8985 long var178 /* : Int */;
8986 long var180 /* : Int */;
8987 static val* varonce183;
8988 val* var184 /* : String */;
8989 char* var185 /* : NativeString */;
8990 long var186 /* : Int */;
8991 val* var187 /* : String */;
8992 static val* varonce188;
8993 val* var189 /* : String */;
8994 char* var190 /* : NativeString */;
8995 long var191 /* : Int */;
8996 val* var192 /* : String */;
8997 val* var193 /* : Array[Object] */;
8998 long var194 /* : Int */;
8999 val* var195 /* : NativeArray[Object] */;
9000 val* var196 /* : Object */;
9001 val* var197 /* : Object */;
9002 val* var198 /* : String */;
9003 if (varonce) {
9004 var = varonce;
9005 } else {
9006 var1 = "# size of subtyping tables";
9007 var2 = 26;
9008 var3 = string__NativeString__to_s_with_length(var1, var2);
9009 var = var3;
9010 varonce = var;
9011 }
9012 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var) /* print on <self:SeparateCompiler>*/;
9013 if (varonce4) {
9014 var5 = varonce4;
9015 } else {
9016 var6 = "\11total \11holes";
9017 var7 = 13;
9018 var8 = string__NativeString__to_s_with_length(var6, var7);
9019 var5 = var8;
9020 varonce4 = var5;
9021 }
9022 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var5) /* print on <self:SeparateCompiler>*/;
9023 var9 = 0;
9024 var_total = var9;
9025 var10 = 0;
9026 var_holes = var10;
9027 var11 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__type_tables]))(self) /* type_tables on <self:SeparateCompiler>*/;
9028 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var11) /* iterator on <var11:Map[MType, Array[nullable MType]]>*/;
9029 for(;;) {
9030 var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var12) /* is_ok on <var12:MapIterator[Object, nullable Object]>*/;
9031 if(!var13) break;
9032 var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__key]))(var12) /* key on <var12:MapIterator[Object, nullable Object]>*/;
9033 var_t = var14;
9034 var15 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__item]))(var12) /* item on <var12:MapIterator[Object, nullable Object]>*/;
9035 var_table = var15;
9036 var16 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MType]>*/;
9037 { /* Inline kernel#Int#+ (var_total,var16) */
9038 var19 = var_total + var16;
9039 var17 = var19;
9040 goto RET_LABEL18;
9041 RET_LABEL18:(void)0;
9042 }
9043 var_total = var17;
9044 var20 = ((val* (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table) /* iterator on <var_table:Array[nullable MType]>*/;
9045 for(;;) {
9046 var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
9047 if(!var21) break;
9048 var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
9049 var_e = var22;
9050 var23 = NULL;
9051 if (var_e == NULL) {
9052 var24 = 1; /* is null */
9053 } else {
9054 var24 = 0; /* arg is null but recv is not */
9055 }
9056 if (var24){
9057 var25 = 1;
9058 { /* Inline kernel#Int#+ (var_holes,var25) */
9059 var28 = var_holes + var25;
9060 var26 = var28;
9061 goto RET_LABEL27;
9062 RET_LABEL27:(void)0;
9063 }
9064 var_holes = var26;
9065 } else {
9066 }
9067 CONTINUE_label: (void)0;
9068 ((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
9069 }
9070 BREAK_label: (void)0;
9071 CONTINUE_label29: (void)0;
9072 ((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__next]))(var12) /* next on <var12:MapIterator[Object, nullable Object]>*/;
9073 }
9074 BREAK_label29: (void)0;
9075 if (varonce30) {
9076 var31 = varonce30;
9077 } else {
9078 var32 = "\11";
9079 var33 = 1;
9080 var34 = string__NativeString__to_s_with_length(var32, var33);
9081 var31 = var34;
9082 varonce30 = var31;
9083 }
9084 if (varonce35) {
9085 var36 = varonce35;
9086 } else {
9087 var37 = "\11";
9088 var38 = 1;
9089 var39 = string__NativeString__to_s_with_length(var37, var38);
9090 var36 = var39;
9091 varonce35 = var36;
9092 }
9093 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
9094 { /* var40 = array_instance Array[Object] */
9095 var41 = 4;
9096 var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
9097 ((struct instance_array__NativeArray*)var42)->values[0] = (val*) var31;
9098 var43 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
9099 ((struct instance_array__NativeArray*)var42)->values[1] = (val*) var43;
9100 ((struct instance_array__NativeArray*)var42)->values[2] = (val*) var36;
9101 var44 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
9102 ((struct instance_array__NativeArray*)var42)->values[3] = (val*) var44;
9103 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
9104 CHECK_NEW_array__Array(var40);
9105 }
9106 var45 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
9107 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var45) /* print on <self:SeparateCompiler>*/;
9108 if (varonce46) {
9109 var47 = varonce46;
9110 } else {
9111 var48 = "# size of resolution tables";
9112 var49 = 27;
9113 var50 = string__NativeString__to_s_with_length(var48, var49);
9114 var47 = var50;
9115 varonce46 = var47;
9116 }
9117 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var47) /* print on <self:SeparateCompiler>*/;
9118 if (varonce51) {
9119 var52 = varonce51;
9120 } else {
9121 var53 = "\11total \11holes";
9122 var54 = 13;
9123 var55 = string__NativeString__to_s_with_length(var53, var54);
9124 var52 = var55;
9125 varonce51 = var52;
9126 }
9127 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var52) /* print on <self:SeparateCompiler>*/;
9128 var56 = 0;
9129 var_total = var56;
9130 var57 = 0;
9131 var_holes = var57;
9132 var58 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__resolution_tables]))(self) /* resolution_tables on <self:SeparateCompiler>*/;
9133 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var58) /* iterator on <var58:Map[MClassType, Array[nullable MType]]>*/;
9134 for(;;) {
9135 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var59) /* is_ok on <var59:MapIterator[Object, nullable Object]>*/;
9136 if(!var60) break;
9137 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__key]))(var59) /* key on <var59:MapIterator[Object, nullable Object]>*/;
9138 var_t62 = var61;
9139 var63 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__item]))(var59) /* item on <var59:MapIterator[Object, nullable Object]>*/;
9140 var_table64 = var63;
9141 var65 = ((long (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__length]))(var_table64) /* length on <var_table64:Array[nullable MType]>*/;
9142 { /* Inline kernel#Int#+ (var_total,var65) */
9143 var68 = var_total + var65;
9144 var66 = var68;
9145 goto RET_LABEL67;
9146 RET_LABEL67:(void)0;
9147 }
9148 var_total = var66;
9149 var69 = ((val* (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table64) /* iterator on <var_table64:Array[nullable MType]>*/;
9150 for(;;) {
9151 var70 = ((short int (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var69) /* is_ok on <var69:Iterator[nullable Object]>*/;
9152 if(!var70) break;
9153 var71 = ((val* (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__item]))(var69) /* item on <var69:Iterator[nullable Object]>*/;
9154 var_e72 = var71;
9155 var73 = NULL;
9156 if (var_e72 == NULL) {
9157 var74 = 1; /* is null */
9158 } else {
9159 var74 = 0; /* arg is null but recv is not */
9160 }
9161 if (var74){
9162 var75 = 1;
9163 { /* Inline kernel#Int#+ (var_holes,var75) */
9164 var78 = var_holes + var75;
9165 var76 = var78;
9166 goto RET_LABEL77;
9167 RET_LABEL77:(void)0;
9168 }
9169 var_holes = var76;
9170 } else {
9171 }
9172 CONTINUE_label79: (void)0;
9173 ((void (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__next]))(var69) /* next on <var69:Iterator[nullable Object]>*/;
9174 }
9175 BREAK_label79: (void)0;
9176 CONTINUE_label80: (void)0;
9177 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__next]))(var59) /* next on <var59:MapIterator[Object, nullable Object]>*/;
9178 }
9179 BREAK_label80: (void)0;
9180 if (varonce81) {
9181 var82 = varonce81;
9182 } else {
9183 var83 = "\11";
9184 var84 = 1;
9185 var85 = string__NativeString__to_s_with_length(var83, var84);
9186 var82 = var85;
9187 varonce81 = var82;
9188 }
9189 if (varonce86) {
9190 var87 = varonce86;
9191 } else {
9192 var88 = "\11";
9193 var89 = 1;
9194 var90 = string__NativeString__to_s_with_length(var88, var89);
9195 var87 = var90;
9196 varonce86 = var87;
9197 }
9198 var91 = NEW_array__Array(&type_array__Arraykernel__Object);
9199 { /* var91 = array_instance Array[Object] */
9200 var92 = 4;
9201 var93 = NEW_array__NativeArray(var92, &type_array__NativeArraykernel__Object);
9202 ((struct instance_array__NativeArray*)var93)->values[0] = (val*) var82;
9203 var94 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
9204 ((struct instance_array__NativeArray*)var93)->values[1] = (val*) var94;
9205 ((struct instance_array__NativeArray*)var93)->values[2] = (val*) var87;
9206 var95 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
9207 ((struct instance_array__NativeArray*)var93)->values[3] = (val*) var95;
9208 ((void (*)(val*, val*, long))(var91->class->vft[COLOR_array__Array__with_native]))(var91, var93, var92) /* with_native on <var91:Array[Object]>*/;
9209 CHECK_NEW_array__Array(var91);
9210 }
9211 var96 = ((val* (*)(val*))(var91->class->vft[COLOR_string__Object__to_s]))(var91) /* to_s on <var91:Array[Object]>*/;
9212 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var96) /* print on <self:SeparateCompiler>*/;
9213 if (varonce97) {
9214 var98 = varonce97;
9215 } else {
9216 var99 = "# size of methods tables";
9217 var100 = 24;
9218 var101 = string__NativeString__to_s_with_length(var99, var100);
9219 var98 = var101;
9220 varonce97 = var98;
9221 }
9222 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var98) /* print on <self:SeparateCompiler>*/;
9223 if (varonce102) {
9224 var103 = varonce102;
9225 } else {
9226 var104 = "\11total \11holes";
9227 var105 = 13;
9228 var106 = string__NativeString__to_s_with_length(var104, var105);
9229 var103 = var106;
9230 varonce102 = var103;
9231 }
9232 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var103) /* print on <self:SeparateCompiler>*/;
9233 var107 = 0;
9234 var_total = var107;
9235 var108 = 0;
9236 var_holes = var108;
9237 var109 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateCompiler>*/;
9238 var110 = ((val* (*)(val*))(var109->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var109) /* iterator on <var109:Map[MClass, Array[nullable MPropDef]]>*/;
9239 for(;;) {
9240 var111 = ((short int (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var110) /* is_ok on <var110:MapIterator[Object, nullable Object]>*/;
9241 if(!var111) break;
9242 var112 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__key]))(var110) /* key on <var110:MapIterator[Object, nullable Object]>*/;
9243 var_t113 = var112;
9244 var114 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__item]))(var110) /* item on <var110:MapIterator[Object, nullable Object]>*/;
9245 var_table115 = var114;
9246 var116 = ((long (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__length]))(var_table115) /* length on <var_table115:Array[nullable MPropDef]>*/;
9247 { /* Inline kernel#Int#+ (var_total,var116) */
9248 var119 = var_total + var116;
9249 var117 = var119;
9250 goto RET_LABEL118;
9251 RET_LABEL118:(void)0;
9252 }
9253 var_total = var117;
9254 var120 = ((val* (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table115) /* iterator on <var_table115:Array[nullable MPropDef]>*/;
9255 for(;;) {
9256 var121 = ((short int (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var120) /* is_ok on <var120:Iterator[nullable Object]>*/;
9257 if(!var121) break;
9258 var122 = ((val* (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__item]))(var120) /* item on <var120:Iterator[nullable Object]>*/;
9259 var_e123 = var122;
9260 var124 = NULL;
9261 if (var_e123 == NULL) {
9262 var125 = 1; /* is null */
9263 } else {
9264 var125 = 0; /* arg is null but recv is not */
9265 }
9266 if (var125){
9267 var126 = 1;
9268 { /* Inline kernel#Int#+ (var_holes,var126) */
9269 var129 = var_holes + var126;
9270 var127 = var129;
9271 goto RET_LABEL128;
9272 RET_LABEL128:(void)0;
9273 }
9274 var_holes = var127;
9275 } else {
9276 }
9277 CONTINUE_label130: (void)0;
9278 ((void (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__next]))(var120) /* next on <var120:Iterator[nullable Object]>*/;
9279 }
9280 BREAK_label130: (void)0;
9281 CONTINUE_label131: (void)0;
9282 ((void (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__next]))(var110) /* next on <var110:MapIterator[Object, nullable Object]>*/;
9283 }
9284 BREAK_label131: (void)0;
9285 if (varonce132) {
9286 var133 = varonce132;
9287 } else {
9288 var134 = "\11";
9289 var135 = 1;
9290 var136 = string__NativeString__to_s_with_length(var134, var135);
9291 var133 = var136;
9292 varonce132 = var133;
9293 }
9294 if (varonce137) {
9295 var138 = varonce137;
9296 } else {
9297 var139 = "\11";
9298 var140 = 1;
9299 var141 = string__NativeString__to_s_with_length(var139, var140);
9300 var138 = var141;
9301 varonce137 = var138;
9302 }
9303 var142 = NEW_array__Array(&type_array__Arraykernel__Object);
9304 { /* var142 = array_instance Array[Object] */
9305 var143 = 4;
9306 var144 = NEW_array__NativeArray(var143, &type_array__NativeArraykernel__Object);
9307 ((struct instance_array__NativeArray*)var144)->values[0] = (val*) var133;
9308 var145 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
9309 ((struct instance_array__NativeArray*)var144)->values[1] = (val*) var145;
9310 ((struct instance_array__NativeArray*)var144)->values[2] = (val*) var138;
9311 var146 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
9312 ((struct instance_array__NativeArray*)var144)->values[3] = (val*) var146;
9313 ((void (*)(val*, val*, long))(var142->class->vft[COLOR_array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
9314 CHECK_NEW_array__Array(var142);
9315 }
9316 var147 = ((val* (*)(val*))(var142->class->vft[COLOR_string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
9317 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var147) /* print on <self:SeparateCompiler>*/;
9318 if (varonce148) {
9319 var149 = varonce148;
9320 } else {
9321 var150 = "# size of attributes tables";
9322 var151 = 27;
9323 var152 = string__NativeString__to_s_with_length(var150, var151);
9324 var149 = var152;
9325 varonce148 = var149;
9326 }
9327 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var149) /* print on <self:SeparateCompiler>*/;
9328 if (varonce153) {
9329 var154 = varonce153;
9330 } else {
9331 var155 = "\11total \11holes";
9332 var156 = 13;
9333 var157 = string__NativeString__to_s_with_length(var155, var156);
9334 var154 = var157;
9335 varonce153 = var154;
9336 }
9337 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var154) /* print on <self:SeparateCompiler>*/;
9338 var158 = 0;
9339 var_total = var158;
9340 var159 = 0;
9341 var_holes = var159;
9342 var160 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateCompiler>*/;
9343 var161 = ((val* (*)(val*))(var160->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var160) /* iterator on <var160:Map[MClass, Array[nullable MPropDef]]>*/;
9344 for(;;) {
9345 var162 = ((short int (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var161) /* is_ok on <var161:MapIterator[Object, nullable Object]>*/;
9346 if(!var162) break;
9347 var163 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__key]))(var161) /* key on <var161:MapIterator[Object, nullable Object]>*/;
9348 var_t164 = var163;
9349 var165 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__item]))(var161) /* item on <var161:MapIterator[Object, nullable Object]>*/;
9350 var_table166 = var165;
9351 var167 = ((long (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__length]))(var_table166) /* length on <var_table166:Array[nullable MPropDef]>*/;
9352 { /* Inline kernel#Int#+ (var_total,var167) */
9353 var170 = var_total + var167;
9354 var168 = var170;
9355 goto RET_LABEL169;
9356 RET_LABEL169:(void)0;
9357 }
9358 var_total = var168;
9359 var171 = ((val* (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table166) /* iterator on <var_table166:Array[nullable MPropDef]>*/;
9360 for(;;) {
9361 var172 = ((short int (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var171) /* is_ok on <var171:Iterator[nullable Object]>*/;
9362 if(!var172) break;
9363 var173 = ((val* (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__item]))(var171) /* item on <var171:Iterator[nullable Object]>*/;
9364 var_e174 = var173;
9365 var175 = NULL;
9366 if (var_e174 == NULL) {
9367 var176 = 1; /* is null */
9368 } else {
9369 var176 = 0; /* arg is null but recv is not */
9370 }
9371 if (var176){
9372 var177 = 1;
9373 { /* Inline kernel#Int#+ (var_holes,var177) */
9374 var180 = var_holes + var177;
9375 var178 = var180;
9376 goto RET_LABEL179;
9377 RET_LABEL179:(void)0;
9378 }
9379 var_holes = var178;
9380 } else {
9381 }
9382 CONTINUE_label181: (void)0;
9383 ((void (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__next]))(var171) /* next on <var171:Iterator[nullable Object]>*/;
9384 }
9385 BREAK_label181: (void)0;
9386 CONTINUE_label182: (void)0;
9387 ((void (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__next]))(var161) /* next on <var161:MapIterator[Object, nullable Object]>*/;
9388 }
9389 BREAK_label182: (void)0;
9390 if (varonce183) {
9391 var184 = varonce183;
9392 } else {
9393 var185 = "\11";
9394 var186 = 1;
9395 var187 = string__NativeString__to_s_with_length(var185, var186);
9396 var184 = var187;
9397 varonce183 = var184;
9398 }
9399 if (varonce188) {
9400 var189 = varonce188;
9401 } else {
9402 var190 = "\11";
9403 var191 = 1;
9404 var192 = string__NativeString__to_s_with_length(var190, var191);
9405 var189 = var192;
9406 varonce188 = var189;
9407 }
9408 var193 = NEW_array__Array(&type_array__Arraykernel__Object);
9409 { /* var193 = array_instance Array[Object] */
9410 var194 = 4;
9411 var195 = NEW_array__NativeArray(var194, &type_array__NativeArraykernel__Object);
9412 ((struct instance_array__NativeArray*)var195)->values[0] = (val*) var184;
9413 var196 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
9414 ((struct instance_array__NativeArray*)var195)->values[1] = (val*) var196;
9415 ((struct instance_array__NativeArray*)var195)->values[2] = (val*) var189;
9416 var197 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
9417 ((struct instance_array__NativeArray*)var195)->values[3] = (val*) var197;
9418 ((void (*)(val*, val*, long))(var193->class->vft[COLOR_array__Array__with_native]))(var193, var195, var194) /* with_native on <var193:Array[Object]>*/;
9419 CHECK_NEW_array__Array(var193);
9420 }
9421 var198 = ((val* (*)(val*))(var193->class->vft[COLOR_string__Object__to_s]))(var193) /* to_s on <var193:Array[Object]>*/;
9422 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var198) /* print on <self:SeparateCompiler>*/;
9423 RET_LABEL:;
9424 }
9425 /* method separate_compiler#SeparateCompiler#display_sizes for (self: Object) */
9426 void VIRTUAL_separate_compiler__SeparateCompiler__display_sizes(val* self) {
9427 separate_compiler__SeparateCompiler__display_sizes(self);
9428 RET_LABEL:;
9429 }
9430 /* method separate_compiler#SeparateCompilerVisitor#adapt_signature for (self: SeparateCompilerVisitor, MMethodDef, Array[RuntimeVariable]) */
9431 void separate_compiler__SeparateCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
9432 val* var_m /* var m: MMethodDef */;
9433 val* var_args /* var args: Array[RuntimeVariable] */;
9434 val* var /* : nullable MSignature */;
9435 val* var1 /* : MClassDef */;
9436 val* var2 /* : MClassType */;
9437 val* var3 /* : MClassDef */;
9438 val* var4 /* : MClassType */;
9439 val* var5 /* : MClassDef */;
9440 val* var6 /* : MModule */;
9441 short int var7 /* : Bool */;
9442 val* var8 /* : MType */;
9443 val* var_msignature /* var msignature: MSignature */;
9444 val* var9 /* : nullable Object */;
9445 val* var_recv /* var recv: RuntimeVariable */;
9446 val* var10 /* : MType */;
9447 val* var11 /* : String */;
9448 val* var12 /* : MClassDef */;
9449 val* var13 /* : MClass */;
9450 val* var14 /* : MClassType */;
9451 val* var15 /* : String */;
9452 short int var16 /* : Bool */;
9453 val* var17 /* : nullable Object */;
9454 val* var18 /* : MClassDef */;
9455 val* var19 /* : MClass */;
9456 val* var20 /* : MClassType */;
9457 val* var21 /* : RuntimeVariable */;
9458 val* var22 /* : Range[Int] */;
9459 long var23 /* : Int */;
9460 long var24 /* : Int */;
9461 val* var25 /* : Discrete */;
9462 val* var26 /* : Discrete */;
9463 val* var27 /* : Iterator[nullable Object] */;
9464 short int var28 /* : Bool */;
9465 val* var29 /* : nullable Object */;
9466 long var_i /* var i: Int */;
9467 long var30 /* : Int */;
9468 val* var31 /* : Array[MParameter] */;
9469 val* var32 /* : nullable Object */;
9470 val* var33 /* : MType */;
9471 val* var_t /* var t: MType */;
9472 long var34 /* : Int */;
9473 short int var35 /* : Bool */;
9474 short int var37 /* : Bool */;
9475 long var38 /* : Int */;
9476 long var39 /* : Int */;
9477 long var41 /* : Int */;
9478 val* var42 /* : nullable Object */;
9479 val* var43 /* : MType */;
9480 long var44 /* : Int */;
9481 long var45 /* : Int */;
9482 long var47 /* : Int */;
9483 long var48 /* : Int */;
9484 long var49 /* : Int */;
9485 long var51 /* : Int */;
9486 val* var52 /* : nullable Object */;
9487 val* var53 /* : RuntimeVariable */;
9488 var_m = p0;
9489 var_args = p1;
9490 var = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MMethodDef__msignature]))(var_m) /* msignature on <var_m:MMethodDef>*/;
9491 var1 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
9492 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_model__MClassDef__bound_mtype]))(var1) /* bound_mtype on <var1:MClassDef>*/;
9493 var3 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
9494 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MClassDef__bound_mtype]))(var3) /* bound_mtype on <var3:MClassDef>*/;
9495 var5 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
9496 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MClassDef__mmodule]))(var5) /* mmodule on <var5:MClassDef>*/;
9497 var7 = 1;
9498 if (var == NULL) {
9499 fprintf(stderr, "Runtime error: %s", "Reciever is null");
9500 fprintf(stderr, " (%s:%d)\n", "src/separate_compiler.nit", 921);
9501 exit(1);
9502 } else {
9503 var8 = ((val* (*)(val*, val*, val*, val*, short int))(var->class->vft[COLOR_model__MType__resolve_for]))(var, var2, var4, var6, var7) /* resolve_for on <var:nullable MSignature>*/;
9504 }
9505 var_msignature = var8;
9506 var9 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
9507 var_recv = var9;
9508 var10 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
9509 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__MType__ctype]))(var10) /* ctype on <var10:MType>*/;
9510 var12 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
9511 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_model__MClassDef__mclass]))(var12) /* mclass on <var12:MClassDef>*/;
9512 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_model__MClass__mclass_type]))(var13) /* mclass_type on <var13:MClass>*/;
9513 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_abstract_compiler__MType__ctype]))(var14) /* ctype on <var14:MClassType>*/;
9514 var16 = ((short int (*)(val*, val*))(var11->class->vft[COLOR_kernel__Object___33d_61d]))(var11, var15) /* != on <var11:String>*/;
9515 if (var16){
9516 var17 = ((val* (*)(val*))(var_args->class->vft[COLOR_abstract_collection__Collection__first]))(var_args) /* first on <var_args:Array[RuntimeVariable]>*/;
9517 var18 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MPropDef__mclassdef]))(var_m) /* mclassdef on <var_m:MMethodDef>*/;
9518 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_model__MClassDef__mclass]))(var18) /* mclass on <var18:MClassDef>*/;
9519 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_model__MClass__mclass_type]))(var19) /* mclass_type on <var19:MClass>*/;
9520 var21 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var17, var20) /* autobox on <self:SeparateCompilerVisitor>*/;
9521 ((void (*)(val*, val*))(var_args->class->vft[COLOR_abstract_collection__Sequence__first_61d]))(var_args, var21) /* first= on <var_args:Array[RuntimeVariable]>*/;
9522 } else {
9523 }
9524 var22 = NEW_range__Range(&type_range__Rangekernel__Int);
9525 var23 = 0;
9526 var24 = ((long (*)(val*))(var_msignature->class->vft[COLOR_model__MSignature__arity]))(var_msignature) /* arity on <var_msignature:MSignature>*/;
9527 var25 = BOX_kernel__Int(var23); /* autobox from Int to Discrete */
9528 var26 = BOX_kernel__Int(var24); /* autobox from Int to Discrete */
9529 ((void (*)(val*, val*, val*))(var22->class->vft[COLOR_range__Range__without_last]))(var22, var25, var26) /* without_last on <var22:Range[Int]>*/;
9530 CHECK_NEW_range__Range(var22);
9531 var27 = ((val* (*)(val*))(var22->class->vft[COLOR_abstract_collection__Collection__iterator]))(var22) /* iterator on <var22:Range[Int]>*/;
9532 for(;;) {
9533 var28 = ((short int (*)(val*))(var27->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var27) /* is_ok on <var27:Iterator[nullable Object]>*/;
9534 if(!var28) break;
9535 var29 = ((val* (*)(val*))(var27->class->vft[COLOR_abstract_collection__Iterator__item]))(var27) /* item on <var27:Iterator[nullable Object]>*/;
9536 var30 = ((struct instance_kernel__Int*)var29)->value; /* autounbox from nullable Object to Int */;
9537 var_i = var30;
9538 var31 = ((val* (*)(val*))(var_msignature->class->vft[COLOR_model__MSignature__mparameters]))(var_msignature) /* mparameters on <var_msignature:MSignature>*/;
9539 var32 = ((val* (*)(val*, long))(var31->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var31, var_i) /* [] on <var31:Array[MParameter]>*/;
9540 var33 = ((val* (*)(val*))(var32->class->vft[COLOR_model__MParameter__mtype]))(var32) /* mtype on <var32:nullable Object(MParameter)>*/;
9541 var_t = var33;
9542 var34 = ((long (*)(val*))(var_msignature->class->vft[COLOR_model__MSignature__vararg_rank]))(var_msignature) /* vararg_rank on <var_msignature:MSignature>*/;
9543 { /* Inline kernel#Int#== (var_i,var34) */
9544 var37 = var_i == var34;
9545 var35 = var37;
9546 goto RET_LABEL36;
9547 RET_LABEL36:(void)0;
9548 }
9549 if (var35){
9550 var38 = 1;
9551 { /* Inline kernel#Int#+ (var_i,var38) */
9552 var41 = var_i + var38;
9553 var39 = var41;
9554 goto RET_LABEL40;
9555 RET_LABEL40:(void)0;
9556 }
9557 var42 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var39) /* [] on <var_args:Array[RuntimeVariable]>*/;
9558 var43 = ((val* (*)(val*))(var42->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var42) /* mtype on <var42:nullable Object(RuntimeVariable)>*/;
9559 var_t = var43;
9560 } else {
9561 }
9562 var44 = 1;
9563 { /* Inline kernel#Int#+ (var_i,var44) */
9564 var47 = var_i + var44;
9565 var45 = var47;
9566 goto RET_LABEL46;
9567 RET_LABEL46:(void)0;
9568 }
9569 var48 = 1;
9570 { /* Inline kernel#Int#+ (var_i,var48) */
9571 var51 = var_i + var48;
9572 var49 = var51;
9573 goto RET_LABEL50;
9574 RET_LABEL50:(void)0;
9575 }
9576 var52 = ((val* (*)(val*, long))(var_args->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_args, var49) /* [] on <var_args:Array[RuntimeVariable]>*/;
9577 var53 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var52, var_t) /* autobox on <self:SeparateCompilerVisitor>*/;
9578 ((void (*)(val*, long, val*))(var_args->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_args, var45, var53) /* []= on <var_args:Array[RuntimeVariable]>*/;
9579 CONTINUE_label: (void)0;
9580 ((void (*)(val*))(var27->class->vft[COLOR_abstract_collection__Iterator__next]))(var27) /* next on <var27:Iterator[nullable Object]>*/;
9581 }
9582 BREAK_label: (void)0;
9583 RET_LABEL:;
9584 }
9585 /* method separate_compiler#SeparateCompilerVisitor#adapt_signature for (self: Object, MMethodDef, Array[RuntimeVariable]) */
9586 void VIRTUAL_separate_compiler__SeparateCompilerVisitor__adapt_signature(val* self, val* p0, val* p1) {
9587 separate_compiler__SeparateCompilerVisitor__adapt_signature(self, p0, p1);
9588 RET_LABEL:;
9589 }