9c61926eb66a68716b93bc9c6e67c150bdf55974
[nit.git] / c_src / layout_builders.sep.1.c
1 #include "layout_builders.sep.0.h"
2 /* method layout_builders#Layout#ids for (self: Layout[Object]): Map[Object, Int] */
3 val* layout_builders__Layout__ids(val* self) {
4 val* var /* : Map[Object, Int] */;
5 val* var1 /* : Map[Object, Int] */;
6 var1 = self->attrs[COLOR_layout_builders__Layout___64dids].val; /* @ids on <self:Layout[Object]> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @ids", "src/layout_builders.nit", 34);
9 exit(1);
10 }
11 var = var1;
12 RET_LABEL:;
13 return var;
14 }
15 /* method layout_builders#Layout#ids for (self: Object): Map[Object, Int] */
16 val* VIRTUAL_layout_builders__Layout__ids(val* self) {
17 val* var /* : Map[Object, Int] */;
18 val* var1 /* : Map[Object, Int] */;
19 var1 = layout_builders__Layout__ids(self);
20 var = var1;
21 RET_LABEL:;
22 return var;
23 }
24 /* method layout_builders#Layout#ids= for (self: Layout[Object], Map[Object, Int]) */
25 void layout_builders__Layout__ids_61d(val* self, val* p0) {
26 short int var /* : Bool */;
27 int cltype;
28 int idtype;
29 const struct type* type_struct;
30 /* Covariant cast for argument 0 (ids) <p0:Map[Object, Int]> isa Map[Layout#0, Int] */
31 /* <p0:Map[Object, Int]> isa Map[Layout#0, Int] */
32 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__Layout_FT0kernel__Int];
33 cltype = type_struct->color;
34 idtype = type_struct->id;
35 if(cltype >= p0->type->table_size) {
36 var = 0;
37 } else {
38 var = p0->type->type_table[cltype] == idtype;
39 }
40 if (!var) {
41 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 34);
42 exit(1);
43 }
44 self->attrs[COLOR_layout_builders__Layout___64dids].val = p0; /* @ids on <self:Layout[Object]> */
45 RET_LABEL:;
46 }
47 /* method layout_builders#Layout#ids= for (self: Object, Map[Object, Int]) */
48 void VIRTUAL_layout_builders__Layout__ids_61d(val* self, val* p0) {
49 layout_builders__Layout__ids_61d(self, p0);
50 RET_LABEL:;
51 }
52 /* method layout_builders#Layout#pos for (self: Layout[Object]): Map[Object, Int] */
53 val* layout_builders__Layout__pos(val* self) {
54 val* var /* : Map[Object, Int] */;
55 val* var1 /* : Map[Object, Int] */;
56 var1 = self->attrs[COLOR_layout_builders__Layout___64dpos].val; /* @pos on <self:Layout[Object]> */
57 if (var1 == NULL) {
58 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @pos", "src/layout_builders.nit", 36);
59 exit(1);
60 }
61 var = var1;
62 RET_LABEL:;
63 return var;
64 }
65 /* method layout_builders#Layout#pos for (self: Object): Map[Object, Int] */
66 val* VIRTUAL_layout_builders__Layout__pos(val* self) {
67 val* var /* : Map[Object, Int] */;
68 val* var1 /* : Map[Object, Int] */;
69 var1 = layout_builders__Layout__pos(self);
70 var = var1;
71 RET_LABEL:;
72 return var;
73 }
74 /* method layout_builders#Layout#pos= for (self: Layout[Object], Map[Object, Int]) */
75 void layout_builders__Layout__pos_61d(val* self, val* p0) {
76 short int var /* : Bool */;
77 int cltype;
78 int idtype;
79 const struct type* type_struct;
80 /* Covariant cast for argument 0 (pos) <p0:Map[Object, Int]> isa Map[Layout#0, Int] */
81 /* <p0:Map[Object, Int]> isa Map[Layout#0, Int] */
82 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__Layout_FT0kernel__Int];
83 cltype = type_struct->color;
84 idtype = type_struct->id;
85 if(cltype >= p0->type->table_size) {
86 var = 0;
87 } else {
88 var = p0->type->type_table[cltype] == idtype;
89 }
90 if (!var) {
91 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 36);
92 exit(1);
93 }
94 self->attrs[COLOR_layout_builders__Layout___64dpos].val = p0; /* @pos on <self:Layout[Object]> */
95 RET_LABEL:;
96 }
97 /* method layout_builders#Layout#pos= for (self: Object, Map[Object, Int]) */
98 void VIRTUAL_layout_builders__Layout__pos_61d(val* self, val* p0) {
99 layout_builders__Layout__pos_61d(self, p0);
100 RET_LABEL:;
101 }
102 /* method layout_builders#Layout#init for (self: Layout[Object]) */
103 void layout_builders__Layout__init(val* self) {
104 RET_LABEL:;
105 }
106 /* method layout_builders#Layout#init for (self: Object) */
107 void VIRTUAL_layout_builders__Layout__init(val* self) {
108 layout_builders__Layout__init(self);
109 RET_LABEL:;
110 }
111 /* method layout_builders#PHLayout#masks for (self: PHLayout[Object, Object]): Map[Object, Int] */
112 val* layout_builders__PHLayout__masks(val* self) {
113 val* var /* : Map[Object, Int] */;
114 val* var1 /* : Map[Object, Int] */;
115 var1 = self->attrs[COLOR_layout_builders__PHLayout___64dmasks].val; /* @masks on <self:PHLayout[Object, Object]> */
116 if (var1 == NULL) {
117 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @masks", "src/layout_builders.nit", 44);
118 exit(1);
119 }
120 var = var1;
121 RET_LABEL:;
122 return var;
123 }
124 /* method layout_builders#PHLayout#masks for (self: Object): Map[Object, Int] */
125 val* VIRTUAL_layout_builders__PHLayout__masks(val* self) {
126 val* var /* : Map[Object, Int] */;
127 val* var1 /* : Map[Object, Int] */;
128 var1 = layout_builders__PHLayout__masks(self);
129 var = var1;
130 RET_LABEL:;
131 return var;
132 }
133 /* method layout_builders#PHLayout#masks= for (self: PHLayout[Object, Object], Map[Object, Int]) */
134 void layout_builders__PHLayout__masks_61d(val* self, val* p0) {
135 short int var /* : Bool */;
136 int cltype;
137 int idtype;
138 const struct type* type_struct;
139 /* Covariant cast for argument 0 (masks) <p0:Map[Object, Int]> isa Map[PHLayout#0, Int] */
140 /* <p0:Map[Object, Int]> isa Map[PHLayout#0, Int] */
141 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PHLayout_FT0kernel__Int];
142 cltype = type_struct->color;
143 idtype = type_struct->id;
144 if(cltype >= p0->type->table_size) {
145 var = 0;
146 } else {
147 var = p0->type->type_table[cltype] == idtype;
148 }
149 if (!var) {
150 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 44);
151 exit(1);
152 }
153 self->attrs[COLOR_layout_builders__PHLayout___64dmasks].val = p0; /* @masks on <self:PHLayout[Object, Object]> */
154 RET_LABEL:;
155 }
156 /* method layout_builders#PHLayout#masks= for (self: Object, Map[Object, Int]) */
157 void VIRTUAL_layout_builders__PHLayout__masks_61d(val* self, val* p0) {
158 layout_builders__PHLayout__masks_61d(self, p0);
159 RET_LABEL:;
160 }
161 /* method layout_builders#PHLayout#hashes for (self: PHLayout[Object, Object]): Map[Object, Map[Object, Int]] */
162 val* layout_builders__PHLayout__hashes(val* self) {
163 val* var /* : Map[Object, Map[Object, Int]] */;
164 val* var1 /* : Map[Object, Map[Object, Int]] */;
165 var1 = self->attrs[COLOR_layout_builders__PHLayout___64dhashes].val; /* @hashes on <self:PHLayout[Object, Object]> */
166 if (var1 == NULL) {
167 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @hashes", "src/layout_builders.nit", 46);
168 exit(1);
169 }
170 var = var1;
171 RET_LABEL:;
172 return var;
173 }
174 /* method layout_builders#PHLayout#hashes for (self: Object): Map[Object, Map[Object, Int]] */
175 val* VIRTUAL_layout_builders__PHLayout__hashes(val* self) {
176 val* var /* : Map[Object, Map[Object, Int]] */;
177 val* var1 /* : Map[Object, Map[Object, Int]] */;
178 var1 = layout_builders__PHLayout__hashes(self);
179 var = var1;
180 RET_LABEL:;
181 return var;
182 }
183 /* method layout_builders#PHLayout#hashes= for (self: PHLayout[Object, Object], Map[Object, Map[Object, Int]]) */
184 void layout_builders__PHLayout__hashes_61d(val* self, val* p0) {
185 short int var /* : Bool */;
186 int cltype;
187 int idtype;
188 const struct type* type_struct;
189 /* Covariant cast for argument 0 (hashes) <p0:Map[Object, Map[Object, Int]]> isa Map[PHLayout#0, Map[PHLayout#1, Int]] */
190 /* <p0:Map[Object, Map[Object, Int]]> isa Map[PHLayout#0, Map[PHLayout#1, Int]] */
191 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PHLayout_FT0abstract_collection__Maplayout_builders__PHLayout_FT1kernel__Int];
192 cltype = type_struct->color;
193 idtype = type_struct->id;
194 if(cltype >= p0->type->table_size) {
195 var = 0;
196 } else {
197 var = p0->type->type_table[cltype] == idtype;
198 }
199 if (!var) {
200 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 46);
201 exit(1);
202 }
203 self->attrs[COLOR_layout_builders__PHLayout___64dhashes].val = p0; /* @hashes on <self:PHLayout[Object, Object]> */
204 RET_LABEL:;
205 }
206 /* method layout_builders#PHLayout#hashes= for (self: Object, Map[Object, Map[Object, Int]]) */
207 void VIRTUAL_layout_builders__PHLayout__hashes_61d(val* self, val* p0) {
208 layout_builders__PHLayout__hashes_61d(self, p0);
209 RET_LABEL:;
210 }
211 /* method layout_builders#PHLayout#init for (self: PHLayout[Object, Object]) */
212 void layout_builders__PHLayout__init(val* self) {
213 ((void (*)(val*))(self->class->vft[COLOR_layout_builders__Layout__init]))(self) /* init on <self:PHLayout[Object, Object]>*/;
214 RET_LABEL:;
215 }
216 /* method layout_builders#PHLayout#init for (self: Object) */
217 void VIRTUAL_layout_builders__PHLayout__init(val* self) {
218 layout_builders__PHLayout__init(self);
219 RET_LABEL:;
220 }
221 /* method layout_builders#TypingLayoutBuilder#build_layout for (self: TypingLayoutBuilder[Object], Set[Object]): Layout[Object] */
222 val* layout_builders__TypingLayoutBuilder__build_layout(val* self, val* p0) {
223 val* var /* : Layout[Object] */;
224 short int var1 /* : Bool */;
225 int cltype;
226 int idtype;
227 const struct type* type_struct;
228 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingLayoutBuilder#0] */
229 /* <p0:Set[Object]> isa Set[TypingLayoutBuilder#0] */
230 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingLayoutBuilder_FT0];
231 cltype = type_struct->color;
232 idtype = type_struct->id;
233 if(cltype >= p0->type->table_size) {
234 var1 = 0;
235 } else {
236 var1 = p0->type->type_table[cltype] == idtype;
237 }
238 if (!var1) {
239 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 54);
240 exit(1);
241 }
242 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 54);
243 exit(1);
244 RET_LABEL:;
245 return var;
246 }
247 /* method layout_builders#TypingLayoutBuilder#build_layout for (self: Object, Set[Object]): Layout[Object] */
248 val* VIRTUAL_layout_builders__TypingLayoutBuilder__build_layout(val* self, val* p0) {
249 val* var /* : Layout[Object] */;
250 val* var1 /* : Layout[Object] */;
251 var1 = layout_builders__TypingLayoutBuilder__build_layout(self, p0);
252 var = var1;
253 RET_LABEL:;
254 return var;
255 }
256 /* method layout_builders#TypingLayoutBuilder#poset for (self: TypingLayoutBuilder[Object]): nullable POSet[Object] */
257 val* layout_builders__TypingLayoutBuilder__poset(val* self) {
258 val* var /* : nullable POSet[Object] */;
259 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 57);
260 exit(1);
261 RET_LABEL:;
262 return var;
263 }
264 /* method layout_builders#TypingLayoutBuilder#poset for (self: Object): nullable POSet[Object] */
265 val* VIRTUAL_layout_builders__TypingLayoutBuilder__poset(val* self) {
266 val* var /* : nullable POSet[Object] */;
267 val* var1 /* : nullable POSet[Object] */;
268 var1 = layout_builders__TypingLayoutBuilder__poset(self);
269 var = var1;
270 RET_LABEL:;
271 return var;
272 }
273 /* method layout_builders#PropertyLayoutBuilder#build_layout for (self: PropertyLayoutBuilder[PropertyLayoutElement], Map[MClass, Set[PropertyLayoutElement]]): Layout[PropertyLayoutElement] */
274 val* layout_builders__PropertyLayoutBuilder__build_layout(val* self, val* p0) {
275 val* var /* : Layout[PropertyLayoutElement] */;
276 short int var1 /* : Bool */;
277 int cltype;
278 int idtype;
279 const struct type* type_struct;
280 /* Covariant cast for argument 0 (elements) <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[PropertyLayoutBuilder#0]] */
281 /* <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[PropertyLayoutBuilder#0]] */
282 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__PropertyLayoutBuilder_FT0];
283 cltype = type_struct->color;
284 idtype = type_struct->id;
285 if(cltype >= p0->type->table_size) {
286 var1 = 0;
287 } else {
288 var1 = p0->type->type_table[cltype] == idtype;
289 }
290 if (!var1) {
291 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 64);
292 exit(1);
293 }
294 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 64);
295 exit(1);
296 RET_LABEL:;
297 return var;
298 }
299 /* method layout_builders#PropertyLayoutBuilder#build_layout for (self: Object, Map[MClass, Set[PropertyLayoutElement]]): Layout[PropertyLayoutElement] */
300 val* VIRTUAL_layout_builders__PropertyLayoutBuilder__build_layout(val* self, val* p0) {
301 val* var /* : Layout[PropertyLayoutElement] */;
302 val* var1 /* : Layout[PropertyLayoutElement] */;
303 var1 = layout_builders__PropertyLayoutBuilder__build_layout(self, p0);
304 var = var1;
305 RET_LABEL:;
306 return var;
307 }
308 /* method layout_builders#ResolutionLayoutBuilder#build_layout for (self: ResolutionLayoutBuilder, Map[MClassType, Set[MType]]): Layout[MType] */
309 val* layout_builders__ResolutionLayoutBuilder__build_layout(val* self, val* p0) {
310 val* var /* : Layout[MType] */;
311 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 84);
312 exit(1);
313 RET_LABEL:;
314 return var;
315 }
316 /* method layout_builders#ResolutionLayoutBuilder#build_layout for (self: Object, Map[MClassType, Set[MType]]): Layout[MType] */
317 val* VIRTUAL_layout_builders__ResolutionLayoutBuilder__build_layout(val* self, val* p0) {
318 val* var /* : Layout[MType] */;
319 val* var1 /* : Layout[MType] */;
320 var1 = layout_builders__ResolutionLayoutBuilder__build_layout(self, p0);
321 var = var1;
322 RET_LABEL:;
323 return var;
324 }
325 /* method layout_builders#POSetBuilder#mmodule for (self: POSetBuilder[Object]): MModule */
326 val* layout_builders__POSetBuilder__mmodule(val* self) {
327 val* var /* : MModule */;
328 val* var1 /* : MModule */;
329 var1 = self->attrs[COLOR_layout_builders__POSetBuilder___64dmmodule].val; /* @mmodule on <self:POSetBuilder[Object]> */
330 if (var1 == NULL) {
331 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 94);
332 exit(1);
333 }
334 var = var1;
335 RET_LABEL:;
336 return var;
337 }
338 /* method layout_builders#POSetBuilder#mmodule for (self: Object): MModule */
339 val* VIRTUAL_layout_builders__POSetBuilder__mmodule(val* self) {
340 val* var /* : MModule */;
341 val* var1 /* : MModule */;
342 var1 = layout_builders__POSetBuilder__mmodule(self);
343 var = var1;
344 RET_LABEL:;
345 return var;
346 }
347 /* method layout_builders#POSetBuilder#mmodule= for (self: POSetBuilder[Object], MModule) */
348 void layout_builders__POSetBuilder__mmodule_61d(val* self, val* p0) {
349 self->attrs[COLOR_layout_builders__POSetBuilder___64dmmodule].val = p0; /* @mmodule on <self:POSetBuilder[Object]> */
350 RET_LABEL:;
351 }
352 /* method layout_builders#POSetBuilder#mmodule= for (self: Object, MModule) */
353 void VIRTUAL_layout_builders__POSetBuilder__mmodule_61d(val* self, val* p0) {
354 layout_builders__POSetBuilder__mmodule_61d(self, p0);
355 RET_LABEL:;
356 }
357 /* method layout_builders#POSetBuilder#init for (self: POSetBuilder[Object], MModule) */
358 void layout_builders__POSetBuilder__init(val* self, val* p0) {
359 val* var_mmodule /* var mmodule: MModule */;
360 var_mmodule = p0;
361 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__POSetBuilder__mmodule_61d]))(self, var_mmodule) /* mmodule= on <self:POSetBuilder[Object]>*/;
362 RET_LABEL:;
363 }
364 /* method layout_builders#POSetBuilder#init for (self: Object, MModule) */
365 void VIRTUAL_layout_builders__POSetBuilder__init(val* self, val* p0) {
366 layout_builders__POSetBuilder__init(self, p0);
367 RET_LABEL:;
368 }
369 /* method layout_builders#POSetBuilder#build_poset for (self: POSetBuilder[Object], Set[Object]): POSet[Object] */
370 val* layout_builders__POSetBuilder__build_poset(val* self, val* p0) {
371 val* var /* : POSet[Object] */;
372 short int var1 /* : Bool */;
373 int cltype;
374 int idtype;
375 const struct type* type_struct;
376 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[POSetBuilder#0] */
377 /* <p0:Set[Object]> isa Set[POSetBuilder#0] */
378 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__POSetBuilder_FT0];
379 cltype = type_struct->color;
380 idtype = type_struct->id;
381 if(cltype >= p0->type->table_size) {
382 var1 = 0;
383 } else {
384 var1 = p0->type->type_table[cltype] == idtype;
385 }
386 if (!var1) {
387 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 96);
388 exit(1);
389 }
390 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 96);
391 exit(1);
392 RET_LABEL:;
393 return var;
394 }
395 /* method layout_builders#POSetBuilder#build_poset for (self: Object, Set[Object]): POSet[Object] */
396 val* VIRTUAL_layout_builders__POSetBuilder__build_poset(val* self, val* p0) {
397 val* var /* : POSet[Object] */;
398 val* var1 /* : POSet[Object] */;
399 var1 = layout_builders__POSetBuilder__build_poset(self, p0);
400 var = var1;
401 RET_LABEL:;
402 return var;
403 }
404 /* method layout_builders#MTypePOSetBuilder#build_poset for (self: MTypePOSetBuilder, Set[MType]): POSet[MType] */
405 val* layout_builders__MTypePOSetBuilder__build_poset(val* self, val* p0) {
406 val* var /* : POSet[MType] */;
407 short int var1 /* : Bool */;
408 int cltype;
409 int idtype;
410 val* var_elements /* var elements: Set[MType] */;
411 val* var2 /* : POSet[MType] */;
412 val* var_poset /* var poset: POSet[MType] */;
413 val* var3 /* : Iterator[nullable Object] */;
414 short int var4 /* : Bool */;
415 val* var5 /* : nullable Object */;
416 val* var_e /* var e: MType */;
417 val* var6 /* : POSetElement[Object] */;
418 val* var7 /* : Iterator[nullable Object] */;
419 short int var8 /* : Bool */;
420 val* var9 /* : nullable Object */;
421 val* var_o /* var o: MType */;
422 short int var10 /* : Bool */;
423 val* var11 /* : MModule */;
424 val* var12 /* : null */;
425 short int var13 /* : Bool */;
426 /* Covariant cast for argument 0 (elements) <p0:Set[MType]> isa Set[POSetBuilder#0] */
427 /* <p0:Set[MType]> isa Set[POSetBuilder#0] */
428 var1 = 1; /* easy <p0:Set[MType]> isa Set[POSetBuilder#0]*/
429 if (!var1) {
430 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 104);
431 exit(1);
432 }
433 var_elements = p0;
434 var2 = NEW_poset__POSet(&type_poset__POSetmodel__MType);
435 ((void (*)(val*))(var2->class->vft[COLOR_poset__POSet__init]))(var2) /* init on <var2:POSet[MType]>*/;
436 CHECK_NEW_poset__POSet(var2);
437 var_poset = var2;
438 var3 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_elements) /* iterator on <var_elements:Set[MType]>*/;
439 for(;;) {
440 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
441 if(!var4) break;
442 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
443 var_e = var5;
444 var6 = ((val* (*)(val*, val*))(var_poset->class->vft[COLOR_poset__POSet__add_node]))(var_poset, var_e) /* add_node on <var_poset:POSet[MType]>*/;
445 var6;
446 var7 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_elements) /* iterator on <var_elements:Set[MType]>*/;
447 for(;;) {
448 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
449 if(!var8) break;
450 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
451 var_o = var9;
452 var10 = ((short int (*)(val*, val*))(var_e->class->vft[COLOR_kernel__Object___61d_61d]))(var_e, var_o) /* == on <var_e:MType>*/;
453 if (var10){
454 goto CONTINUE_label;
455 } else {
456 }
457 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__POSetBuilder__mmodule]))(self) /* mmodule on <self:MTypePOSetBuilder>*/;
458 var12 = NULL;
459 var13 = ((short int (*)(val*, val*, val*, val*))(var_e->class->vft[COLOR_model__MType__is_subtype]))(var_e, var11, var12, var_o) /* is_subtype on <var_e:MType>*/;
460 if (var13){
461 ((void (*)(val*, val*, val*))(var_poset->class->vft[COLOR_poset__POSet__add_edge]))(var_poset, var_e, var_o) /* add_edge on <var_poset:POSet[MType]>*/;
462 } else {
463 }
464 CONTINUE_label: (void)0;
465 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
466 }
467 BREAK_label: (void)0;
468 CONTINUE_label14: (void)0;
469 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
470 }
471 BREAK_label14: (void)0;
472 var = var_poset;
473 goto RET_LABEL;
474 RET_LABEL:;
475 return var;
476 }
477 /* method layout_builders#MTypePOSetBuilder#build_poset for (self: Object, Set[Object]): POSet[Object] */
478 val* VIRTUAL_layout_builders__MTypePOSetBuilder__build_poset(val* self, val* p0) {
479 val* var /* : POSet[Object] */;
480 val* var1 /* : POSet[MType] */;
481 var1 = layout_builders__MTypePOSetBuilder__build_poset(self, p0);
482 var = var1;
483 RET_LABEL:;
484 return var;
485 }
486 /* method layout_builders#MClassPOSetBuilder#build_poset for (self: MClassPOSetBuilder, Set[MClass]): POSet[MClass] */
487 val* layout_builders__MClassPOSetBuilder__build_poset(val* self, val* p0) {
488 val* var /* : POSet[MClass] */;
489 short int var1 /* : Bool */;
490 int cltype;
491 int idtype;
492 val* var_elements /* var elements: Set[MClass] */;
493 val* var2 /* : MModule */;
494 val* var3 /* : POSet[MClass] */;
495 /* Covariant cast for argument 0 (elements) <p0:Set[MClass]> isa Set[POSetBuilder#0] */
496 /* <p0:Set[MClass]> isa Set[POSetBuilder#0] */
497 var1 = 1; /* easy <p0:Set[MClass]> isa Set[POSetBuilder#0]*/
498 if (!var1) {
499 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 123);
500 exit(1);
501 }
502 var_elements = p0;
503 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__POSetBuilder__mmodule]))(self) /* mmodule on <self:MClassPOSetBuilder>*/;
504 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var2) /* flatten_mclass_hierarchy on <var2:MModule>*/;
505 var = var3;
506 goto RET_LABEL;
507 RET_LABEL:;
508 return var;
509 }
510 /* method layout_builders#MClassPOSetBuilder#build_poset for (self: Object, Set[Object]): POSet[Object] */
511 val* VIRTUAL_layout_builders__MClassPOSetBuilder__build_poset(val* self, val* p0) {
512 val* var /* : POSet[Object] */;
513 val* var1 /* : POSet[MClass] */;
514 var1 = layout_builders__MClassPOSetBuilder__build_poset(self, p0);
515 var = var1;
516 RET_LABEL:;
517 return var;
518 }
519 /* method layout_builders#TypingBMizer#mmodule for (self: TypingBMizer[Object]): MModule */
520 val* layout_builders__TypingBMizer__mmodule(val* self) {
521 val* var /* : MModule */;
522 val* var1 /* : MModule */;
523 var1 = self->attrs[COLOR_layout_builders__TypingBMizer___64dmmodule].val; /* @mmodule on <self:TypingBMizer[Object]> */
524 if (var1 == NULL) {
525 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 132);
526 exit(1);
527 }
528 var = var1;
529 RET_LABEL:;
530 return var;
531 }
532 /* method layout_builders#TypingBMizer#mmodule for (self: Object): MModule */
533 val* VIRTUAL_layout_builders__TypingBMizer__mmodule(val* self) {
534 val* var /* : MModule */;
535 val* var1 /* : MModule */;
536 var1 = layout_builders__TypingBMizer__mmodule(self);
537 var = var1;
538 RET_LABEL:;
539 return var;
540 }
541 /* method layout_builders#TypingBMizer#mmodule= for (self: TypingBMizer[Object], MModule) */
542 void layout_builders__TypingBMizer__mmodule_61d(val* self, val* p0) {
543 self->attrs[COLOR_layout_builders__TypingBMizer___64dmmodule].val = p0; /* @mmodule on <self:TypingBMizer[Object]> */
544 RET_LABEL:;
545 }
546 /* method layout_builders#TypingBMizer#mmodule= for (self: Object, MModule) */
547 void VIRTUAL_layout_builders__TypingBMizer__mmodule_61d(val* self, val* p0) {
548 layout_builders__TypingBMizer__mmodule_61d(self, p0);
549 RET_LABEL:;
550 }
551 /* method layout_builders#TypingBMizer#poset_builder for (self: TypingBMizer[Object]): POSetBuilder[Object] */
552 val* layout_builders__TypingBMizer__poset_builder(val* self) {
553 val* var /* : POSetBuilder[Object] */;
554 val* var1 /* : POSetBuilder[Object] */;
555 var1 = self->attrs[COLOR_layout_builders__TypingBMizer___64dposet_builder].val; /* @poset_builder on <self:TypingBMizer[Object]> */
556 if (var1 == NULL) {
557 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @poset_builder", "src/layout_builders.nit", 133);
558 exit(1);
559 }
560 var = var1;
561 RET_LABEL:;
562 return var;
563 }
564 /* method layout_builders#TypingBMizer#poset_builder for (self: Object): POSetBuilder[Object] */
565 val* VIRTUAL_layout_builders__TypingBMizer__poset_builder(val* self) {
566 val* var /* : POSetBuilder[Object] */;
567 val* var1 /* : POSetBuilder[Object] */;
568 var1 = layout_builders__TypingBMizer__poset_builder(self);
569 var = var1;
570 RET_LABEL:;
571 return var;
572 }
573 /* method layout_builders#TypingBMizer#poset_builder= for (self: TypingBMizer[Object], POSetBuilder[Object]) */
574 void layout_builders__TypingBMizer__poset_builder_61d(val* self, val* p0) {
575 short int var /* : Bool */;
576 int cltype;
577 int idtype;
578 const struct type* type_struct;
579 /* Covariant cast for argument 0 (poset_builder) <p0:POSetBuilder[Object]> isa POSetBuilder[TypingBMizer#0] */
580 /* <p0:POSetBuilder[Object]> isa POSetBuilder[TypingBMizer#0] */
581 type_struct = self->type->resolution_table->types[COLOR_layout_builders__POSetBuilderlayout_builders__TypingBMizer_FT0];
582 cltype = type_struct->color;
583 idtype = type_struct->id;
584 if(cltype >= p0->type->table_size) {
585 var = 0;
586 } else {
587 var = p0->type->type_table[cltype] == idtype;
588 }
589 if (!var) {
590 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 133);
591 exit(1);
592 }
593 self->attrs[COLOR_layout_builders__TypingBMizer___64dposet_builder].val = p0; /* @poset_builder on <self:TypingBMizer[Object]> */
594 RET_LABEL:;
595 }
596 /* method layout_builders#TypingBMizer#poset_builder= for (self: Object, POSetBuilder[Object]) */
597 void VIRTUAL_layout_builders__TypingBMizer__poset_builder_61d(val* self, val* p0) {
598 layout_builders__TypingBMizer__poset_builder_61d(self, p0);
599 RET_LABEL:;
600 }
601 /* method layout_builders#TypingBMizer#poset_cache for (self: TypingBMizer[Object]): nullable POSet[Object] */
602 val* layout_builders__TypingBMizer__poset_cache(val* self) {
603 val* var /* : nullable POSet[Object] */;
604 val* var1 /* : nullable POSet[Object] */;
605 var1 = self->attrs[COLOR_layout_builders__TypingBMizer___64dposet_cache].val; /* @poset_cache on <self:TypingBMizer[Object]> */
606 var = var1;
607 RET_LABEL:;
608 return var;
609 }
610 /* method layout_builders#TypingBMizer#poset_cache for (self: Object): nullable POSet[Object] */
611 val* VIRTUAL_layout_builders__TypingBMizer__poset_cache(val* self) {
612 val* var /* : nullable POSet[Object] */;
613 val* var1 /* : nullable POSet[Object] */;
614 var1 = layout_builders__TypingBMizer__poset_cache(self);
615 var = var1;
616 RET_LABEL:;
617 return var;
618 }
619 /* method layout_builders#TypingBMizer#poset_cache= for (self: TypingBMizer[Object], nullable POSet[Object]) */
620 void layout_builders__TypingBMizer__poset_cache_61d(val* self, val* p0) {
621 short int var /* : Bool */;
622 int cltype;
623 int idtype;
624 const struct type* type_struct;
625 /* Covariant cast for argument 0 (poset_cache) <p0:nullable POSet[Object]> isa nullable POSet[TypingBMizer#0] */
626 /* <p0:nullable POSet[Object]> isa nullable POSet[TypingBMizer#0] */
627 type_struct = self->type->resolution_table->types[COLOR_poset__POSetlayout_builders__TypingBMizer_FT0];
628 cltype = type_struct->color;
629 idtype = type_struct->id;
630 if(p0 == NULL) {
631 var = 1;
632 } else {
633 if(cltype >= p0->type->table_size) {
634 var = 0;
635 } else {
636 var = p0->type->type_table[cltype] == idtype;
637 }
638 }
639 if (!var) {
640 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 134);
641 exit(1);
642 }
643 self->attrs[COLOR_layout_builders__TypingBMizer___64dposet_cache].val = p0; /* @poset_cache on <self:TypingBMizer[Object]> */
644 RET_LABEL:;
645 }
646 /* method layout_builders#TypingBMizer#poset_cache= for (self: Object, nullable POSet[Object]) */
647 void VIRTUAL_layout_builders__TypingBMizer__poset_cache_61d(val* self, val* p0) {
648 layout_builders__TypingBMizer__poset_cache_61d(self, p0);
649 RET_LABEL:;
650 }
651 /* method layout_builders#TypingBMizer#init for (self: TypingBMizer[Object], MModule, POSetBuilder[Object]) */
652 void layout_builders__TypingBMizer__init(val* self, val* p0, val* p1) {
653 short int var /* : Bool */;
654 int cltype;
655 int idtype;
656 const struct type* type_struct;
657 val* var_mmodule /* var mmodule: MModule */;
658 val* var_poset_builder /* var poset_builder: POSetBuilder[Object] */;
659 /* Covariant cast for argument 1 (poset_builder) <p1:POSetBuilder[Object]> isa POSetBuilder[TypingBMizer#0] */
660 /* <p1:POSetBuilder[Object]> isa POSetBuilder[TypingBMizer#0] */
661 type_struct = self->type->resolution_table->types[COLOR_layout_builders__POSetBuilderlayout_builders__TypingBMizer_FT0];
662 cltype = type_struct->color;
663 idtype = type_struct->id;
664 if(cltype >= p1->type->table_size) {
665 var = 0;
666 } else {
667 var = p1->type->type_table[cltype] == idtype;
668 }
669 if (!var) {
670 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 136);
671 exit(1);
672 }
673 var_mmodule = p0;
674 var_poset_builder = p1;
675 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__mmodule_61d]))(self, var_mmodule) /* mmodule= on <self:TypingBMizer[Object]>*/;
676 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__poset_builder_61d]))(self, var_poset_builder) /* poset_builder= on <self:TypingBMizer[Object]>*/;
677 RET_LABEL:;
678 }
679 /* method layout_builders#TypingBMizer#init for (self: Object, MModule, POSetBuilder[Object]) */
680 void VIRTUAL_layout_builders__TypingBMizer__init(val* self, val* p0, val* p1) {
681 layout_builders__TypingBMizer__init(self, p0, p1);
682 RET_LABEL:;
683 }
684 /* method layout_builders#TypingBMizer#poset for (self: TypingBMizer[Object]): nullable POSet[Object] */
685 val* layout_builders__TypingBMizer__poset(val* self) {
686 val* var /* : nullable POSet[Object] */;
687 val* var1 /* : nullable POSet[Object] */;
688 var1 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__poset_cache]))(self) /* poset_cache on <self:TypingBMizer[Object]>*/;
689 var = var1;
690 goto RET_LABEL;
691 RET_LABEL:;
692 return var;
693 }
694 /* method layout_builders#TypingBMizer#poset for (self: Object): nullable POSet[Object] */
695 val* VIRTUAL_layout_builders__TypingBMizer__poset(val* self) {
696 val* var /* : nullable POSet[Object] */;
697 val* var1 /* : nullable POSet[Object] */;
698 var1 = layout_builders__TypingBMizer__poset(self);
699 var = var1;
700 RET_LABEL:;
701 return var;
702 }
703 /* method layout_builders#TypingBMizer#build_layout for (self: TypingBMizer[Object], Set[Object]): Layout[Object] */
704 val* layout_builders__TypingBMizer__build_layout(val* self, val* p0) {
705 val* var /* : Layout[Object] */;
706 short int var1 /* : Bool */;
707 int cltype;
708 int idtype;
709 const struct type* type_struct;
710 val* var_elements /* var elements: Set[Object] */;
711 val* var2 /* : Layout[Object] */;
712 val* var_result /* var result: Layout[Object] */;
713 val* var3 /* : HashMap[Object, Int] */;
714 val* var_ids /* var ids: HashMap[Object, Int] */;
715 val* var4 /* : POSetBuilder[Object] */;
716 val* var5 /* : POSet[Object] */;
717 val* var6 /* : nullable POSet[Object] */;
718 val* var7 /* : Array[nullable Object] */;
719 val* var_lin /* var lin: Array[Object] */;
720 val* var8 /* : nullable POSet[Object] */;
721 val* var9 /* : Iterator[nullable Object] */;
722 short int var10 /* : Bool */;
723 val* var11 /* : nullable Object */;
724 val* var_element /* var element: Object */;
725 long var12 /* : Int */;
726 val* var13 /* : nullable Object */;
727 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingBMizer#0] */
728 /* <p0:Set[Object]> isa Set[TypingBMizer#0] */
729 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingBMizer_FT0];
730 cltype = type_struct->color;
731 idtype = type_struct->id;
732 if(cltype >= p0->type->table_size) {
733 var1 = 0;
734 } else {
735 var1 = p0->type->type_table[cltype] == idtype;
736 }
737 if (!var1) {
738 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 143);
739 exit(1);
740 }
741 var_elements = p0;
742 var2 = NEW_layout_builders__Layout(self->type->resolution_table->types[COLOR_layout_builders__Layoutlayout_builders__TypingBMizer_FT0]);
743 ((void (*)(val*))(var2->class->vft[COLOR_layout_builders__Layout__init]))(var2) /* init on <var2:Layout[Object]>*/;
744 CHECK_NEW_layout_builders__Layout(var2);
745 var_result = var2;
746 var3 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingBMizer_FT0kernel__Int]);
747 ((void (*)(val*))(var3->class->vft[COLOR_hash_collection__HashMap__init]))(var3) /* init on <var3:HashMap[Object, Int]>*/;
748 CHECK_NEW_hash_collection__HashMap(var3);
749 var_ids = var3;
750 var4 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__poset_builder]))(self) /* poset_builder on <self:TypingBMizer[Object]>*/;
751 var5 = ((val* (*)(val*, val*))(var4->class->vft[COLOR_layout_builders__POSetBuilder__build_poset]))(var4, var_elements) /* build_poset on <var4:POSetBuilder[Object]>*/;
752 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__poset_cache_61d]))(self, var5) /* poset_cache= on <self:TypingBMizer[Object]>*/;
753 var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingBMizer[Object]>*/;
754 if (var6 == NULL) {
755 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 148);
756 exit(1);
757 } else {
758 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_array__Collection__to_a]))(var6) /* to_a on <var6:nullable POSet[Object]>*/;
759 }
760 var_lin = var7;
761 var8 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingBMizer[Object]>*/;
762 if (var8 == NULL) {
763 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 149);
764 exit(1);
765 } else {
766 ((void (*)(val*, val*))(var8->class->vft[COLOR_sorter__AbstractSorter__sort]))(var8, var_lin) /* sort on <var8:nullable POSet[Object]>*/;
767 }
768 var9 = ((val* (*)(val*))(var_lin->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_lin) /* iterator on <var_lin:Array[Object]>*/;
769 for(;;) {
770 var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
771 if(!var10) break;
772 var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
773 var_element = var11;
774 var12 = ((long (*)(val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__length]))(var_ids) /* length on <var_ids:HashMap[Object, Int]>*/;
775 var13 = BOX_kernel__Int(var12); /* autobox from Int to nullable Object */
776 ((void (*)(val*, val*, val*))(var_ids->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_ids, var_element, var13) /* []= on <var_ids:HashMap[Object, Int]>*/;
777 CONTINUE_label: (void)0;
778 ((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
779 }
780 BREAK_label: (void)0;
781 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids_61d]))(var_result, var_ids) /* ids= on <var_result:Layout[Object]>*/;
782 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__pos_61d]))(var_result, var_ids) /* pos= on <var_result:Layout[Object]>*/;
783 var = var_result;
784 goto RET_LABEL;
785 RET_LABEL:;
786 return var;
787 }
788 /* method layout_builders#TypingBMizer#build_layout for (self: Object, Set[Object]): Layout[Object] */
789 val* VIRTUAL_layout_builders__TypingBMizer__build_layout(val* self, val* p0) {
790 val* var /* : Layout[Object] */;
791 val* var1 /* : Layout[Object] */;
792 var1 = layout_builders__TypingBMizer__build_layout(self, p0);
793 var = var1;
794 RET_LABEL:;
795 return var;
796 }
797 /* method layout_builders#MTypeBMizer#init for (self: MTypeBMizer, MModule) */
798 void layout_builders__MTypeBMizer__init(val* self, val* p0) {
799 val* var_mmodule /* var mmodule: MModule */;
800 val* var /* : MTypePOSetBuilder */;
801 var_mmodule = p0;
802 var = NEW_layout_builders__MTypePOSetBuilder(&type_layout_builders__MTypePOSetBuilder);
803 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MTypePOSetBuilder>*/;
804 CHECK_NEW_layout_builders__MTypePOSetBuilder(var);
805 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__init]))(self, var_mmodule, var) /* init on <self:MTypeBMizer>*/;
806 RET_LABEL:;
807 }
808 /* method layout_builders#MTypeBMizer#init for (self: Object, MModule) */
809 void VIRTUAL_layout_builders__MTypeBMizer__init(val* self, val* p0) {
810 layout_builders__MTypeBMizer__init(self, p0);
811 RET_LABEL:;
812 }
813 /* method layout_builders#MClassBMizer#init for (self: MClassBMizer, MModule) */
814 void layout_builders__MClassBMizer__init(val* self, val* p0) {
815 val* var_mmodule /* var mmodule: MModule */;
816 val* var /* : MClassPOSetBuilder */;
817 var_mmodule = p0;
818 var = NEW_layout_builders__MClassPOSetBuilder(&type_layout_builders__MClassPOSetBuilder);
819 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MClassPOSetBuilder>*/;
820 CHECK_NEW_layout_builders__MClassPOSetBuilder(var);
821 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingBMizer__init]))(self, var_mmodule, var) /* init on <self:MClassBMizer>*/;
822 RET_LABEL:;
823 }
824 /* method layout_builders#MClassBMizer#init for (self: Object, MModule) */
825 void VIRTUAL_layout_builders__MClassBMizer__init(val* self, val* p0) {
826 layout_builders__MClassBMizer__init(self, p0);
827 RET_LABEL:;
828 }
829 /* method layout_builders#ResolutionBMizer#init for (self: ResolutionBMizer) */
830 void layout_builders__ResolutionBMizer__init(val* self) {
831 RET_LABEL:;
832 }
833 /* method layout_builders#ResolutionBMizer#init for (self: Object) */
834 void VIRTUAL_layout_builders__ResolutionBMizer__init(val* self) {
835 layout_builders__ResolutionBMizer__init(self);
836 RET_LABEL:;
837 }
838 /* method layout_builders#ResolutionBMizer#build_layout for (self: ResolutionBMizer, Map[MClassType, Set[MType]]): Layout[MType] */
839 val* layout_builders__ResolutionBMizer__build_layout(val* self, val* p0) {
840 val* var /* : Layout[MType] */;
841 val* var_elements /* var elements: Map[MClassType, Set[MType]] */;
842 val* var1 /* : Layout[MType] */;
843 val* var_result /* var result: Layout[MType] */;
844 val* var2 /* : HashMap[MType, Int] */;
845 val* var_ids /* var ids: HashMap[MType, Int] */;
846 long var3 /* : Int */;
847 long var_color /* var color: Int */;
848 val* var4 /* : MapIterator[Object, nullable Object] */;
849 short int var5 /* : Bool */;
850 val* var6 /* : Object */;
851 val* var_mclasstype /* var mclasstype: MClassType */;
852 val* var7 /* : nullable Object */;
853 val* var_mclasstypes /* var mclasstypes: Set[MType] */;
854 val* var8 /* : Iterator[nullable Object] */;
855 short int var9 /* : Bool */;
856 val* var10 /* : nullable Object */;
857 val* var_element /* var element: MType */;
858 short int var11 /* : Bool */;
859 val* var12 /* : nullable Object */;
860 long var13 /* : Int */;
861 long var14 /* : Int */;
862 long var16 /* : Int */;
863 var_elements = p0;
864 var1 = NEW_layout_builders__Layout(&type_layout_builders__Layoutmodel__MType);
865 ((void (*)(val*))(var1->class->vft[COLOR_layout_builders__Layout__init]))(var1) /* init on <var1:Layout[MType]>*/;
866 CHECK_NEW_layout_builders__Layout(var1);
867 var_result = var1;
868 var2 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypekernel__Int);
869 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[MType, Int]>*/;
870 CHECK_NEW_hash_collection__HashMap(var2);
871 var_ids = var2;
872 var3 = 0;
873 var_color = var3;
874 var4 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_elements) /* iterator on <var_elements:Map[MClassType, Set[MType]]>*/;
875 for(;;) {
876 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var4) /* is_ok on <var4:MapIterator[Object, nullable Object]>*/;
877 if(!var5) break;
878 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__key]))(var4) /* key on <var4:MapIterator[Object, nullable Object]>*/;
879 var_mclasstype = var6;
880 var7 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__item]))(var4) /* item on <var4:MapIterator[Object, nullable Object]>*/;
881 var_mclasstypes = var7;
882 var8 = ((val* (*)(val*))(var_mclasstypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasstypes) /* iterator on <var_mclasstypes:Set[MType]>*/;
883 for(;;) {
884 var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var8) /* is_ok on <var8:Iterator[nullable Object]>*/;
885 if(!var9) break;
886 var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__item]))(var8) /* item on <var8:Iterator[nullable Object]>*/;
887 var_element = var10;
888 var11 = ((short int (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var_ids, var_element) /* has_key on <var_ids:HashMap[MType, Int]>*/;
889 if (var11){
890 goto CONTINUE_label;
891 } else {
892 }
893 var12 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
894 ((void (*)(val*, val*, val*))(var_ids->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_ids, var_element, var12) /* []= on <var_ids:HashMap[MType, Int]>*/;
895 var13 = 1;
896 { /* Inline kernel#Int#+ (var_color,var13) */
897 var16 = var_color + var13;
898 var14 = var16;
899 goto RET_LABEL15;
900 RET_LABEL15:(void)0;
901 }
902 var_color = var14;
903 CONTINUE_label: (void)0;
904 ((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
905 }
906 BREAK_label: (void)0;
907 CONTINUE_label17: (void)0;
908 ((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__next]))(var4) /* next on <var4:MapIterator[Object, nullable Object]>*/;
909 }
910 BREAK_label17: (void)0;
911 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids_61d]))(var_result, var_ids) /* ids= on <var_result:Layout[MType]>*/;
912 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__pos_61d]))(var_result, var_ids) /* pos= on <var_result:Layout[MType]>*/;
913 var = var_result;
914 goto RET_LABEL;
915 RET_LABEL:;
916 return var;
917 }
918 /* method layout_builders#ResolutionBMizer#build_layout for (self: Object, Map[MClassType, Set[MType]]): Layout[MType] */
919 val* VIRTUAL_layout_builders__ResolutionBMizer__build_layout(val* self, val* p0) {
920 val* var /* : Layout[MType] */;
921 val* var1 /* : Layout[MType] */;
922 var1 = layout_builders__ResolutionBMizer__build_layout(self, p0);
923 var = var1;
924 RET_LABEL:;
925 return var;
926 }
927 /* method layout_builders#MPropertyBMizer#mmodule for (self: MPropertyBMizer[PropertyLayoutElement]): MModule */
928 val* layout_builders__MPropertyBMizer__mmodule(val* self) {
929 val* var /* : MModule */;
930 val* var1 /* : MModule */;
931 var1 = self->attrs[COLOR_layout_builders__MPropertyBMizer___64dmmodule].val; /* @mmodule on <self:MPropertyBMizer[PropertyLayoutElement]> */
932 if (var1 == NULL) {
933 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 198);
934 exit(1);
935 }
936 var = var1;
937 RET_LABEL:;
938 return var;
939 }
940 /* method layout_builders#MPropertyBMizer#mmodule for (self: Object): MModule */
941 val* VIRTUAL_layout_builders__MPropertyBMizer__mmodule(val* self) {
942 val* var /* : MModule */;
943 val* var1 /* : MModule */;
944 var1 = layout_builders__MPropertyBMizer__mmodule(self);
945 var = var1;
946 RET_LABEL:;
947 return var;
948 }
949 /* method layout_builders#MPropertyBMizer#mmodule= for (self: MPropertyBMizer[PropertyLayoutElement], MModule) */
950 void layout_builders__MPropertyBMizer__mmodule_61d(val* self, val* p0) {
951 self->attrs[COLOR_layout_builders__MPropertyBMizer___64dmmodule].val = p0; /* @mmodule on <self:MPropertyBMizer[PropertyLayoutElement]> */
952 RET_LABEL:;
953 }
954 /* method layout_builders#MPropertyBMizer#mmodule= for (self: Object, MModule) */
955 void VIRTUAL_layout_builders__MPropertyBMizer__mmodule_61d(val* self, val* p0) {
956 layout_builders__MPropertyBMizer__mmodule_61d(self, p0);
957 RET_LABEL:;
958 }
959 /* method layout_builders#MPropertyBMizer#init for (self: MPropertyBMizer[PropertyLayoutElement], MModule) */
960 void layout_builders__MPropertyBMizer__init(val* self, val* p0) {
961 val* var_mmodule /* var mmodule: MModule */;
962 var_mmodule = p0;
963 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyBMizer__mmodule_61d]))(self, var_mmodule) /* mmodule= on <self:MPropertyBMizer[PropertyLayoutElement]>*/;
964 RET_LABEL:;
965 }
966 /* method layout_builders#MPropertyBMizer#init for (self: Object, MModule) */
967 void VIRTUAL_layout_builders__MPropertyBMizer__init(val* self, val* p0) {
968 layout_builders__MPropertyBMizer__init(self, p0);
969 RET_LABEL:;
970 }
971 /* method layout_builders#MPropertyBMizer#build_layout for (self: MPropertyBMizer[PropertyLayoutElement], Map[MClass, Set[PropertyLayoutElement]]): Layout[PropertyLayoutElement] */
972 val* layout_builders__MPropertyBMizer__build_layout(val* self, val* p0) {
973 val* var /* : Layout[PropertyLayoutElement] */;
974 short int var1 /* : Bool */;
975 int cltype;
976 int idtype;
977 const struct type* type_struct;
978 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
979 val* var2 /* : Layout[PropertyLayoutElement] */;
980 val* var_result /* var result: Layout[PropertyLayoutElement] */;
981 val* var3 /* : HashMap[PropertyLayoutElement, Int] */;
982 val* var_ids /* var ids: HashMap[PropertyLayoutElement, Int] */;
983 val* var4 /* : Array[MClass] */;
984 val* var_lin /* var lin: Array[MClass] */;
985 val* var5 /* : Collection[Object] */;
986 val* var6 /* : MModule */;
987 val* var7 /* : Iterator[nullable Object] */;
988 short int var8 /* : Bool */;
989 val* var9 /* : nullable Object */;
990 val* var_mclass /* var mclass: MClass */;
991 val* var10 /* : nullable Object */;
992 val* var11 /* : Iterator[nullable Object] */;
993 short int var12 /* : Bool */;
994 val* var13 /* : nullable Object */;
995 val* var_mproperty /* var mproperty: PropertyLayoutElement */;
996 short int var14 /* : Bool */;
997 long var15 /* : Int */;
998 val* var16 /* : nullable Object */;
999 /* Covariant cast for argument 0 (elements) <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[PropertyLayoutBuilder#0]] */
1000 /* <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[PropertyLayoutBuilder#0]] */
1001 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__PropertyLayoutBuilder_FT0];
1002 cltype = type_struct->color;
1003 idtype = type_struct->id;
1004 if(cltype >= p0->type->table_size) {
1005 var1 = 0;
1006 } else {
1007 var1 = p0->type->type_table[cltype] == idtype;
1008 }
1009 if (!var1) {
1010 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 202);
1011 exit(1);
1012 }
1013 var_elements = p0;
1014 var2 = NEW_layout_builders__Layout(self->type->resolution_table->types[COLOR_layout_builders__Layoutlayout_builders__MPropertyBMizer_FT0]);
1015 ((void (*)(val*))(var2->class->vft[COLOR_layout_builders__Layout__init]))(var2) /* init on <var2:Layout[PropertyLayoutElement]>*/;
1016 CHECK_NEW_layout_builders__Layout(var2);
1017 var_result = var2;
1018 var3 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__MPropertyBMizer_FT0kernel__Int]);
1019 ((void (*)(val*))(var3->class->vft[COLOR_hash_collection__HashMap__init]))(var3) /* init on <var3:HashMap[PropertyLayoutElement, Int]>*/;
1020 CHECK_NEW_hash_collection__HashMap(var3);
1021 var_ids = var3;
1022 var4 = NEW_array__Array(&type_array__Arraymodel__MClass);
1023 ((void (*)(val*))(var4->class->vft[COLOR_array__Array__init]))(var4) /* init on <var4:Array[MClass]>*/;
1024 CHECK_NEW_array__Array(var4);
1025 var_lin = var4;
1026 var5 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__keys]))(var_elements) /* keys on <var_elements:Map[MClass, Set[PropertyLayoutElement]]>*/;
1027 ((void (*)(val*, val*))(var_lin->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_lin, var5) /* add_all on <var_lin:Array[MClass]>*/;
1028 var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyBMizer__mmodule]))(self) /* mmodule on <self:MPropertyBMizer[PropertyLayoutElement]>*/;
1029 ((void (*)(val*, val*))(var6->class->vft[COLOR_model__MModule__linearize_mclasses]))(var6, var_lin) /* linearize_mclasses on <var6:MModule>*/;
1030 var7 = ((val* (*)(val*))(var_lin->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_lin) /* iterator on <var_lin:Array[MClass]>*/;
1031 for(;;) {
1032 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
1033 if(!var8) break;
1034 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
1035 var_mclass = var9;
1036 var10 = ((val* (*)(val*, val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_elements, var_mclass) /* [] on <var_elements:Map[MClass, Set[PropertyLayoutElement]]>*/;
1037 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_collection__Collection__iterator]))(var10) /* iterator on <var10:nullable Object(Set[PropertyLayoutElement])>*/;
1038 for(;;) {
1039 var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var11) /* is_ok on <var11:Iterator[nullable Object]>*/;
1040 if(!var12) break;
1041 var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__item]))(var11) /* item on <var11:Iterator[nullable Object]>*/;
1042 var_mproperty = var13;
1043 var14 = ((short int (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var_ids, var_mproperty) /* has_key on <var_ids:HashMap[PropertyLayoutElement, Int]>*/;
1044 if (var14){
1045 goto CONTINUE_label;
1046 } else {
1047 }
1048 var15 = ((long (*)(val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__length]))(var_ids) /* length on <var_ids:HashMap[PropertyLayoutElement, Int]>*/;
1049 var16 = BOX_kernel__Int(var15); /* autobox from Int to nullable Object */
1050 ((void (*)(val*, val*, val*))(var_ids->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_ids, var_mproperty, var16) /* []= on <var_ids:HashMap[PropertyLayoutElement, Int]>*/;
1051 CONTINUE_label: (void)0;
1052 ((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__next]))(var11) /* next on <var11:Iterator[nullable Object]>*/;
1053 }
1054 BREAK_label: (void)0;
1055 CONTINUE_label17: (void)0;
1056 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
1057 }
1058 BREAK_label17: (void)0;
1059 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__pos_61d]))(var_result, var_ids) /* pos= on <var_result:Layout[PropertyLayoutElement]>*/;
1060 var = var_result;
1061 goto RET_LABEL;
1062 RET_LABEL:;
1063 return var;
1064 }
1065 /* method layout_builders#MPropertyBMizer#build_layout for (self: Object, Map[MClass, Set[PropertyLayoutElement]]): Layout[PropertyLayoutElement] */
1066 val* VIRTUAL_layout_builders__MPropertyBMizer__build_layout(val* self, val* p0) {
1067 val* var /* : Layout[PropertyLayoutElement] */;
1068 val* var1 /* : Layout[PropertyLayoutElement] */;
1069 var1 = layout_builders__MPropertyBMizer__build_layout(self, p0);
1070 var = var1;
1071 RET_LABEL:;
1072 return var;
1073 }
1074 /* method layout_builders#TypingColorer#core for (self: TypingColorer[Object]): Set[Object] */
1075 val* layout_builders__TypingColorer__core(val* self) {
1076 val* var /* : Set[Object] */;
1077 val* var1 /* : Set[Object] */;
1078 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dcore].val; /* @core on <self:TypingColorer[Object]> */
1079 if (var1 == NULL) {
1080 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @core", "src/layout_builders.nit", 225);
1081 exit(1);
1082 }
1083 var = var1;
1084 RET_LABEL:;
1085 return var;
1086 }
1087 /* method layout_builders#TypingColorer#core for (self: Object): Set[Object] */
1088 val* VIRTUAL_layout_builders__TypingColorer__core(val* self) {
1089 val* var /* : Set[Object] */;
1090 val* var1 /* : Set[Object] */;
1091 var1 = layout_builders__TypingColorer__core(self);
1092 var = var1;
1093 RET_LABEL:;
1094 return var;
1095 }
1096 /* method layout_builders#TypingColorer#core= for (self: TypingColorer[Object], Set[Object]) */
1097 void layout_builders__TypingColorer__core_61d(val* self, val* p0) {
1098 short int var /* : Bool */;
1099 int cltype;
1100 int idtype;
1101 const struct type* type_struct;
1102 /* Covariant cast for argument 0 (core) <p0:Set[Object]> isa Set[TypingColorer#0] */
1103 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
1104 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
1105 cltype = type_struct->color;
1106 idtype = type_struct->id;
1107 if(cltype >= p0->type->table_size) {
1108 var = 0;
1109 } else {
1110 var = p0->type->type_table[cltype] == idtype;
1111 }
1112 if (!var) {
1113 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 225);
1114 exit(1);
1115 }
1116 self->attrs[COLOR_layout_builders__TypingColorer___64dcore].val = p0; /* @core on <self:TypingColorer[Object]> */
1117 RET_LABEL:;
1118 }
1119 /* method layout_builders#TypingColorer#core= for (self: Object, Set[Object]) */
1120 void VIRTUAL_layout_builders__TypingColorer__core_61d(val* self, val* p0) {
1121 layout_builders__TypingColorer__core_61d(self, p0);
1122 RET_LABEL:;
1123 }
1124 /* method layout_builders#TypingColorer#crown for (self: TypingColorer[Object]): Set[Object] */
1125 val* layout_builders__TypingColorer__crown(val* self) {
1126 val* var /* : Set[Object] */;
1127 val* var1 /* : Set[Object] */;
1128 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dcrown].val; /* @crown on <self:TypingColorer[Object]> */
1129 if (var1 == NULL) {
1130 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @crown", "src/layout_builders.nit", 226);
1131 exit(1);
1132 }
1133 var = var1;
1134 RET_LABEL:;
1135 return var;
1136 }
1137 /* method layout_builders#TypingColorer#crown for (self: Object): Set[Object] */
1138 val* VIRTUAL_layout_builders__TypingColorer__crown(val* self) {
1139 val* var /* : Set[Object] */;
1140 val* var1 /* : Set[Object] */;
1141 var1 = layout_builders__TypingColorer__crown(self);
1142 var = var1;
1143 RET_LABEL:;
1144 return var;
1145 }
1146 /* method layout_builders#TypingColorer#crown= for (self: TypingColorer[Object], Set[Object]) */
1147 void layout_builders__TypingColorer__crown_61d(val* self, val* p0) {
1148 short int var /* : Bool */;
1149 int cltype;
1150 int idtype;
1151 const struct type* type_struct;
1152 /* Covariant cast for argument 0 (crown) <p0:Set[Object]> isa Set[TypingColorer#0] */
1153 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
1154 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
1155 cltype = type_struct->color;
1156 idtype = type_struct->id;
1157 if(cltype >= p0->type->table_size) {
1158 var = 0;
1159 } else {
1160 var = p0->type->type_table[cltype] == idtype;
1161 }
1162 if (!var) {
1163 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 226);
1164 exit(1);
1165 }
1166 self->attrs[COLOR_layout_builders__TypingColorer___64dcrown].val = p0; /* @crown on <self:TypingColorer[Object]> */
1167 RET_LABEL:;
1168 }
1169 /* method layout_builders#TypingColorer#crown= for (self: Object, Set[Object]) */
1170 void VIRTUAL_layout_builders__TypingColorer__crown_61d(val* self, val* p0) {
1171 layout_builders__TypingColorer__crown_61d(self, p0);
1172 RET_LABEL:;
1173 }
1174 /* method layout_builders#TypingColorer#border for (self: TypingColorer[Object]): Set[Object] */
1175 val* layout_builders__TypingColorer__border(val* self) {
1176 val* var /* : Set[Object] */;
1177 val* var1 /* : Set[Object] */;
1178 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dborder].val; /* @border on <self:TypingColorer[Object]> */
1179 if (var1 == NULL) {
1180 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @border", "src/layout_builders.nit", 227);
1181 exit(1);
1182 }
1183 var = var1;
1184 RET_LABEL:;
1185 return var;
1186 }
1187 /* method layout_builders#TypingColorer#border for (self: Object): Set[Object] */
1188 val* VIRTUAL_layout_builders__TypingColorer__border(val* self) {
1189 val* var /* : Set[Object] */;
1190 val* var1 /* : Set[Object] */;
1191 var1 = layout_builders__TypingColorer__border(self);
1192 var = var1;
1193 RET_LABEL:;
1194 return var;
1195 }
1196 /* method layout_builders#TypingColorer#border= for (self: TypingColorer[Object], Set[Object]) */
1197 void layout_builders__TypingColorer__border_61d(val* self, val* p0) {
1198 short int var /* : Bool */;
1199 int cltype;
1200 int idtype;
1201 const struct type* type_struct;
1202 /* Covariant cast for argument 0 (border) <p0:Set[Object]> isa Set[TypingColorer#0] */
1203 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
1204 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
1205 cltype = type_struct->color;
1206 idtype = type_struct->id;
1207 if(cltype >= p0->type->table_size) {
1208 var = 0;
1209 } else {
1210 var = p0->type->type_table[cltype] == idtype;
1211 }
1212 if (!var) {
1213 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 227);
1214 exit(1);
1215 }
1216 self->attrs[COLOR_layout_builders__TypingColorer___64dborder].val = p0; /* @border on <self:TypingColorer[Object]> */
1217 RET_LABEL:;
1218 }
1219 /* method layout_builders#TypingColorer#border= for (self: Object, Set[Object]) */
1220 void VIRTUAL_layout_builders__TypingColorer__border_61d(val* self, val* p0) {
1221 layout_builders__TypingColorer__border_61d(self, p0);
1222 RET_LABEL:;
1223 }
1224 /* method layout_builders#TypingColorer#coloration_result for (self: TypingColorer[Object]): Map[Object, Int] */
1225 val* layout_builders__TypingColorer__coloration_result(val* self) {
1226 val* var /* : Map[Object, Int] */;
1227 val* var1 /* : Map[Object, Int] */;
1228 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dcoloration_result].val; /* @coloration_result on <self:TypingColorer[Object]> */
1229 if (var1 == NULL) {
1230 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @coloration_result", "src/layout_builders.nit", 228);
1231 exit(1);
1232 }
1233 var = var1;
1234 RET_LABEL:;
1235 return var;
1236 }
1237 /* method layout_builders#TypingColorer#coloration_result for (self: Object): Map[Object, Int] */
1238 val* VIRTUAL_layout_builders__TypingColorer__coloration_result(val* self) {
1239 val* var /* : Map[Object, Int] */;
1240 val* var1 /* : Map[Object, Int] */;
1241 var1 = layout_builders__TypingColorer__coloration_result(self);
1242 var = var1;
1243 RET_LABEL:;
1244 return var;
1245 }
1246 /* method layout_builders#TypingColorer#coloration_result= for (self: TypingColorer[Object], Map[Object, Int]) */
1247 void layout_builders__TypingColorer__coloration_result_61d(val* self, val* p0) {
1248 short int var /* : Bool */;
1249 int cltype;
1250 int idtype;
1251 const struct type* type_struct;
1252 /* Covariant cast for argument 0 (coloration_result) <p0:Map[Object, Int]> isa Map[TypingColorer#0, Int] */
1253 /* <p0:Map[Object, Int]> isa Map[TypingColorer#0, Int] */
1254 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__TypingColorer_FT0kernel__Int];
1255 cltype = type_struct->color;
1256 idtype = type_struct->id;
1257 if(cltype >= p0->type->table_size) {
1258 var = 0;
1259 } else {
1260 var = p0->type->type_table[cltype] == idtype;
1261 }
1262 if (!var) {
1263 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 228);
1264 exit(1);
1265 }
1266 self->attrs[COLOR_layout_builders__TypingColorer___64dcoloration_result].val = p0; /* @coloration_result on <self:TypingColorer[Object]> */
1267 RET_LABEL:;
1268 }
1269 /* method layout_builders#TypingColorer#coloration_result= for (self: Object, Map[Object, Int]) */
1270 void VIRTUAL_layout_builders__TypingColorer__coloration_result_61d(val* self, val* p0) {
1271 layout_builders__TypingColorer__coloration_result_61d(self, p0);
1272 RET_LABEL:;
1273 }
1274 /* method layout_builders#TypingColorer#mmodule for (self: TypingColorer[Object]): MModule */
1275 val* layout_builders__TypingColorer__mmodule(val* self) {
1276 val* var /* : MModule */;
1277 val* var1 /* : MModule */;
1278 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dmmodule].val; /* @mmodule on <self:TypingColorer[Object]> */
1279 if (var1 == NULL) {
1280 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 230);
1281 exit(1);
1282 }
1283 var = var1;
1284 RET_LABEL:;
1285 return var;
1286 }
1287 /* method layout_builders#TypingColorer#mmodule for (self: Object): MModule */
1288 val* VIRTUAL_layout_builders__TypingColorer__mmodule(val* self) {
1289 val* var /* : MModule */;
1290 val* var1 /* : MModule */;
1291 var1 = layout_builders__TypingColorer__mmodule(self);
1292 var = var1;
1293 RET_LABEL:;
1294 return var;
1295 }
1296 /* method layout_builders#TypingColorer#mmodule= for (self: TypingColorer[Object], MModule) */
1297 void layout_builders__TypingColorer__mmodule_61d(val* self, val* p0) {
1298 self->attrs[COLOR_layout_builders__TypingColorer___64dmmodule].val = p0; /* @mmodule on <self:TypingColorer[Object]> */
1299 RET_LABEL:;
1300 }
1301 /* method layout_builders#TypingColorer#mmodule= for (self: Object, MModule) */
1302 void VIRTUAL_layout_builders__TypingColorer__mmodule_61d(val* self, val* p0) {
1303 layout_builders__TypingColorer__mmodule_61d(self, p0);
1304 RET_LABEL:;
1305 }
1306 /* method layout_builders#TypingColorer#poset_builder for (self: TypingColorer[Object]): POSetBuilder[Object] */
1307 val* layout_builders__TypingColorer__poset_builder(val* self) {
1308 val* var /* : POSetBuilder[Object] */;
1309 val* var1 /* : POSetBuilder[Object] */;
1310 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dposet_builder].val; /* @poset_builder on <self:TypingColorer[Object]> */
1311 if (var1 == NULL) {
1312 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @poset_builder", "src/layout_builders.nit", 231);
1313 exit(1);
1314 }
1315 var = var1;
1316 RET_LABEL:;
1317 return var;
1318 }
1319 /* method layout_builders#TypingColorer#poset_builder for (self: Object): POSetBuilder[Object] */
1320 val* VIRTUAL_layout_builders__TypingColorer__poset_builder(val* self) {
1321 val* var /* : POSetBuilder[Object] */;
1322 val* var1 /* : POSetBuilder[Object] */;
1323 var1 = layout_builders__TypingColorer__poset_builder(self);
1324 var = var1;
1325 RET_LABEL:;
1326 return var;
1327 }
1328 /* method layout_builders#TypingColorer#poset_builder= for (self: TypingColorer[Object], POSetBuilder[Object]) */
1329 void layout_builders__TypingColorer__poset_builder_61d(val* self, val* p0) {
1330 short int var /* : Bool */;
1331 int cltype;
1332 int idtype;
1333 const struct type* type_struct;
1334 /* Covariant cast for argument 0 (poset_builder) <p0:POSetBuilder[Object]> isa POSetBuilder[TypingColorer#0] */
1335 /* <p0:POSetBuilder[Object]> isa POSetBuilder[TypingColorer#0] */
1336 type_struct = self->type->resolution_table->types[COLOR_layout_builders__POSetBuilderlayout_builders__TypingColorer_FT0];
1337 cltype = type_struct->color;
1338 idtype = type_struct->id;
1339 if(cltype >= p0->type->table_size) {
1340 var = 0;
1341 } else {
1342 var = p0->type->type_table[cltype] == idtype;
1343 }
1344 if (!var) {
1345 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 231);
1346 exit(1);
1347 }
1348 self->attrs[COLOR_layout_builders__TypingColorer___64dposet_builder].val = p0; /* @poset_builder on <self:TypingColorer[Object]> */
1349 RET_LABEL:;
1350 }
1351 /* method layout_builders#TypingColorer#poset_builder= for (self: Object, POSetBuilder[Object]) */
1352 void VIRTUAL_layout_builders__TypingColorer__poset_builder_61d(val* self, val* p0) {
1353 layout_builders__TypingColorer__poset_builder_61d(self, p0);
1354 RET_LABEL:;
1355 }
1356 /* method layout_builders#TypingColorer#poset_cache for (self: TypingColorer[Object]): nullable POSet[Object] */
1357 val* layout_builders__TypingColorer__poset_cache(val* self) {
1358 val* var /* : nullable POSet[Object] */;
1359 val* var1 /* : nullable POSet[Object] */;
1360 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dposet_cache].val; /* @poset_cache on <self:TypingColorer[Object]> */
1361 var = var1;
1362 RET_LABEL:;
1363 return var;
1364 }
1365 /* method layout_builders#TypingColorer#poset_cache for (self: Object): nullable POSet[Object] */
1366 val* VIRTUAL_layout_builders__TypingColorer__poset_cache(val* self) {
1367 val* var /* : nullable POSet[Object] */;
1368 val* var1 /* : nullable POSet[Object] */;
1369 var1 = layout_builders__TypingColorer__poset_cache(self);
1370 var = var1;
1371 RET_LABEL:;
1372 return var;
1373 }
1374 /* method layout_builders#TypingColorer#poset_cache= for (self: TypingColorer[Object], nullable POSet[Object]) */
1375 void layout_builders__TypingColorer__poset_cache_61d(val* self, val* p0) {
1376 short int var /* : Bool */;
1377 int cltype;
1378 int idtype;
1379 const struct type* type_struct;
1380 /* Covariant cast for argument 0 (poset_cache) <p0:nullable POSet[Object]> isa nullable POSet[TypingColorer#0] */
1381 /* <p0:nullable POSet[Object]> isa nullable POSet[TypingColorer#0] */
1382 type_struct = self->type->resolution_table->types[COLOR_poset__POSetlayout_builders__TypingColorer_FT0];
1383 cltype = type_struct->color;
1384 idtype = type_struct->id;
1385 if(p0 == NULL) {
1386 var = 1;
1387 } else {
1388 if(cltype >= p0->type->table_size) {
1389 var = 0;
1390 } else {
1391 var = p0->type->type_table[cltype] == idtype;
1392 }
1393 }
1394 if (!var) {
1395 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 232);
1396 exit(1);
1397 }
1398 self->attrs[COLOR_layout_builders__TypingColorer___64dposet_cache].val = p0; /* @poset_cache on <self:TypingColorer[Object]> */
1399 RET_LABEL:;
1400 }
1401 /* method layout_builders#TypingColorer#poset_cache= for (self: Object, nullable POSet[Object]) */
1402 void VIRTUAL_layout_builders__TypingColorer__poset_cache_61d(val* self, val* p0) {
1403 layout_builders__TypingColorer__poset_cache_61d(self, p0);
1404 RET_LABEL:;
1405 }
1406 /* method layout_builders#TypingColorer#init for (self: TypingColorer[Object], MModule, POSetBuilder[Object]) */
1407 void layout_builders__TypingColorer__init(val* self, val* p0, val* p1) {
1408 short int var /* : Bool */;
1409 int cltype;
1410 int idtype;
1411 const struct type* type_struct;
1412 val* var_mmodule /* var mmodule: MModule */;
1413 val* var_poset_builder /* var poset_builder: POSetBuilder[Object] */;
1414 /* Covariant cast for argument 1 (poset_builder) <p1:POSetBuilder[Object]> isa POSetBuilder[TypingColorer#0] */
1415 /* <p1:POSetBuilder[Object]> isa POSetBuilder[TypingColorer#0] */
1416 type_struct = self->type->resolution_table->types[COLOR_layout_builders__POSetBuilderlayout_builders__TypingColorer_FT0];
1417 cltype = type_struct->color;
1418 idtype = type_struct->id;
1419 if(cltype >= p1->type->table_size) {
1420 var = 0;
1421 } else {
1422 var = p1->type->type_table[cltype] == idtype;
1423 }
1424 if (!var) {
1425 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 234);
1426 exit(1);
1427 }
1428 var_mmodule = p0;
1429 var_poset_builder = p1;
1430 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__mmodule_61d]))(self, var_mmodule) /* mmodule= on <self:TypingColorer[Object]>*/;
1431 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__poset_builder_61d]))(self, var_poset_builder) /* poset_builder= on <self:TypingColorer[Object]>*/;
1432 RET_LABEL:;
1433 }
1434 /* method layout_builders#TypingColorer#init for (self: Object, MModule, POSetBuilder[Object]) */
1435 void VIRTUAL_layout_builders__TypingColorer__init(val* self, val* p0, val* p1) {
1436 layout_builders__TypingColorer__init(self, p0, p1);
1437 RET_LABEL:;
1438 }
1439 /* method layout_builders#TypingColorer#poset for (self: TypingColorer[Object]): nullable POSet[Object] */
1440 val* layout_builders__TypingColorer__poset(val* self) {
1441 val* var /* : nullable POSet[Object] */;
1442 val* var1 /* : nullable POSet[Object] */;
1443 var1 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__poset_cache]))(self) /* poset_cache on <self:TypingColorer[Object]>*/;
1444 var = var1;
1445 goto RET_LABEL;
1446 RET_LABEL:;
1447 return var;
1448 }
1449 /* method layout_builders#TypingColorer#poset for (self: Object): nullable POSet[Object] */
1450 val* VIRTUAL_layout_builders__TypingColorer__poset(val* self) {
1451 val* var /* : nullable POSet[Object] */;
1452 val* var1 /* : nullable POSet[Object] */;
1453 var1 = layout_builders__TypingColorer__poset(self);
1454 var = var1;
1455 RET_LABEL:;
1456 return var;
1457 }
1458 /* method layout_builders#TypingColorer#build_layout for (self: TypingColorer[Object], Set[Object]): Layout[Object] */
1459 val* layout_builders__TypingColorer__build_layout(val* self, val* p0) {
1460 val* var /* : Layout[Object] */;
1461 short int var1 /* : Bool */;
1462 int cltype;
1463 int idtype;
1464 const struct type* type_struct;
1465 val* var_elements /* var elements: Set[Object] */;
1466 val* var2 /* : POSetBuilder[Object] */;
1467 val* var3 /* : POSet[Object] */;
1468 val* var4 /* : Layout[Object] */;
1469 val* var_result /* var result: Layout[Object] */;
1470 val* var5 /* : Map[Object, Int] */;
1471 val* var6 /* : Map[Object, Int] */;
1472 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingColorer#0] */
1473 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
1474 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
1475 cltype = type_struct->color;
1476 idtype = type_struct->id;
1477 if(cltype >= p0->type->table_size) {
1478 var1 = 0;
1479 } else {
1480 var1 = p0->type->type_table[cltype] == idtype;
1481 }
1482 if (!var1) {
1483 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 241);
1484 exit(1);
1485 }
1486 var_elements = p0;
1487 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__poset_builder]))(self) /* poset_builder on <self:TypingColorer[Object]>*/;
1488 var3 = ((val* (*)(val*, val*))(var2->class->vft[COLOR_layout_builders__POSetBuilder__build_poset]))(var2, var_elements) /* build_poset on <var2:POSetBuilder[Object]>*/;
1489 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__poset_cache_61d]))(self, var3) /* poset_cache= on <self:TypingColorer[Object]>*/;
1490 var4 = NEW_layout_builders__Layout(self->type->resolution_table->types[COLOR_layout_builders__Layoutlayout_builders__TypingColorer_FT0]);
1491 ((void (*)(val*))(var4->class->vft[COLOR_layout_builders__Layout__init]))(var4) /* init on <var4:Layout[Object]>*/;
1492 CHECK_NEW_layout_builders__Layout(var4);
1493 var_result = var4;
1494 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__compute_ids]))(self, var_elements) /* compute_ids on <self:TypingColorer[Object]>*/;
1495 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids_61d]))(var_result, var5) /* ids= on <var_result:Layout[Object]>*/;
1496 var6 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__colorize]))(self, var_elements) /* colorize on <self:TypingColorer[Object]>*/;
1497 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__pos_61d]))(var_result, var6) /* pos= on <var_result:Layout[Object]>*/;
1498 var = var_result;
1499 goto RET_LABEL;
1500 RET_LABEL:;
1501 return var;
1502 }
1503 /* method layout_builders#TypingColorer#build_layout for (self: Object, Set[Object]): Layout[Object] */
1504 val* VIRTUAL_layout_builders__TypingColorer__build_layout(val* self, val* p0) {
1505 val* var /* : Layout[Object] */;
1506 val* var1 /* : Layout[Object] */;
1507 var1 = layout_builders__TypingColorer__build_layout(self, p0);
1508 var = var1;
1509 RET_LABEL:;
1510 return var;
1511 }
1512 /* method layout_builders#TypingColorer#compute_ids for (self: TypingColorer[Object], Set[Object]): Map[Object, Int] */
1513 val* layout_builders__TypingColorer__compute_ids(val* self, val* p0) {
1514 val* var /* : Map[Object, Int] */;
1515 short int var1 /* : Bool */;
1516 int cltype;
1517 int idtype;
1518 const struct type* type_struct;
1519 val* var_elements /* var elements: Set[Object] */;
1520 val* var2 /* : HashMap[Object, Int] */;
1521 val* var_ids /* var ids: HashMap[Object, Int] */;
1522 val* var3 /* : Array[Object] */;
1523 val* var4 /* : Iterator[nullable Object] */;
1524 short int var5 /* : Bool */;
1525 val* var6 /* : nullable Object */;
1526 val* var_element /* var element: Object */;
1527 long var7 /* : Int */;
1528 val* var8 /* : nullable Object */;
1529 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingColorer#0] */
1530 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
1531 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
1532 cltype = type_struct->color;
1533 idtype = type_struct->id;
1534 if(cltype >= p0->type->table_size) {
1535 var1 = 0;
1536 } else {
1537 var1 = p0->type->type_table[cltype] == idtype;
1538 }
1539 if (!var1) {
1540 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 250);
1541 exit(1);
1542 }
1543 var_elements = p0;
1544 var2 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingColorer_FT0kernel__Int]);
1545 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[Object, Int]>*/;
1546 CHECK_NEW_hash_collection__HashMap(var2);
1547 var_ids = var2;
1548 var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__reverse_linearize]))(self, var_elements) /* reverse_linearize on <self:TypingColorer[Object]>*/;
1549 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__iterator]))(var3) /* iterator on <var3:Array[Object]>*/;
1550 for(;;) {
1551 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var4) /* is_ok on <var4:Iterator[nullable Object]>*/;
1552 if(!var5) break;
1553 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__item]))(var4) /* item on <var4:Iterator[nullable Object]>*/;
1554 var_element = var6;
1555 var7 = ((long (*)(val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__length]))(var_ids) /* length on <var_ids:HashMap[Object, Int]>*/;
1556 var8 = BOX_kernel__Int(var7); /* autobox from Int to nullable Object */
1557 ((void (*)(val*, val*, val*))(var_ids->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_ids, var_element, var8) /* []= on <var_ids:HashMap[Object, Int]>*/;
1558 CONTINUE_label: (void)0;
1559 ((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__next]))(var4) /* next on <var4:Iterator[nullable Object]>*/;
1560 }
1561 BREAK_label: (void)0;
1562 var = var_ids;
1563 goto RET_LABEL;
1564 RET_LABEL:;
1565 return var;
1566 }
1567 /* method layout_builders#TypingColorer#compute_ids for (self: Object, Set[Object]): Map[Object, Int] */
1568 val* VIRTUAL_layout_builders__TypingColorer__compute_ids(val* self, val* p0) {
1569 val* var /* : Map[Object, Int] */;
1570 val* var1 /* : Map[Object, Int] */;
1571 var1 = layout_builders__TypingColorer__compute_ids(self, p0);
1572 var = var1;
1573 RET_LABEL:;
1574 return var;
1575 }
1576 /* method layout_builders#TypingColorer#colorize for (self: TypingColorer[Object], Set[Object]): Map[Object, Int] */
1577 val* layout_builders__TypingColorer__colorize(val* self, val* p0) {
1578 val* var /* : Map[Object, Int] */;
1579 short int var1 /* : Bool */;
1580 int cltype;
1581 int idtype;
1582 const struct type* type_struct;
1583 val* var_elements /* var elements: Set[Object] */;
1584 val* var2 /* : Set[Object] */;
1585 val* var3 /* : Set[Object] */;
1586 val* var4 /* : Set[Object] */;
1587 val* var5 /* : Map[Object, Int] */;
1588 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingColorer#0] */
1589 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
1590 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
1591 cltype = type_struct->color;
1592 idtype = type_struct->id;
1593 if(cltype >= p0->type->table_size) {
1594 var1 = 0;
1595 } else {
1596 var1 = p0->type->type_table[cltype] == idtype;
1597 }
1598 if (!var1) {
1599 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 258);
1600 exit(1);
1601 }
1602 var_elements = p0;
1603 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__tag_elements]))(self, var_elements) /* tag_elements on <self:TypingColorer[Object]>*/;
1604 ((void (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__build_conflicts_graph]))(self) /* build_conflicts_graph on <self:TypingColorer[Object]>*/;
1605 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__core]))(self) /* core on <self:TypingColorer[Object]>*/;
1606 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__colorize_elements]))(self, var2) /* colorize_elements on <self:TypingColorer[Object]>*/;
1607 var3 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__border]))(self) /* border on <self:TypingColorer[Object]>*/;
1608 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__colorize_elements]))(self, var3) /* colorize_elements on <self:TypingColorer[Object]>*/;
1609 var4 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__crown]))(self) /* crown on <self:TypingColorer[Object]>*/;
1610 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__colorize_elements]))(self, var4) /* colorize_elements on <self:TypingColorer[Object]>*/;
1611 var5 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
1612 var = var5;
1613 goto RET_LABEL;
1614 RET_LABEL:;
1615 return var;
1616 }
1617 /* method layout_builders#TypingColorer#colorize for (self: Object, Set[Object]): Map[Object, Int] */
1618 val* VIRTUAL_layout_builders__TypingColorer__colorize(val* self, val* p0) {
1619 val* var /* : Map[Object, Int] */;
1620 val* var1 /* : Map[Object, Int] */;
1621 var1 = layout_builders__TypingColorer__colorize(self, p0);
1622 var = var1;
1623 RET_LABEL:;
1624 return var;
1625 }
1626 /* method layout_builders#TypingColorer#colorize_elements for (self: TypingColorer[Object], Set[Object]) */
1627 void layout_builders__TypingColorer__colorize_elements(val* self, val* p0) {
1628 short int var /* : Bool */;
1629 int cltype;
1630 int idtype;
1631 const struct type* type_struct;
1632 val* var_elements /* var elements: Set[Object] */;
1633 long var1 /* : Int */;
1634 long var_min_color /* var min_color: Int */;
1635 val* var2 /* : Array[Object] */;
1636 val* var_lin /* var lin: Array[Object] */;
1637 val* var3 /* : Iterator[nullable Object] */;
1638 short int var4 /* : Bool */;
1639 val* var5 /* : nullable Object */;
1640 val* var_element /* var element: Object */;
1641 long var_color /* var color: Int */;
1642 short int var6 /* : Bool */;
1643 short int var7 /* : Bool */;
1644 long var8 /* : Int */;
1645 long var9 /* : Int */;
1646 long var11 /* : Int */;
1647 val* var12 /* : Map[Object, Int] */;
1648 val* var13 /* : nullable Object */;
1649 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingColorer#0] */
1650 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
1651 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
1652 cltype = type_struct->color;
1653 idtype = type_struct->id;
1654 if(cltype >= p0->type->table_size) {
1655 var = 0;
1656 } else {
1657 var = p0->type->type_table[cltype] == idtype;
1658 }
1659 if (!var) {
1660 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 267);
1661 exit(1);
1662 }
1663 var_elements = p0;
1664 var1 = 0;
1665 var_min_color = var1;
1666 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__reverse_linearize]))(self, var_elements) /* reverse_linearize on <self:TypingColorer[Object]>*/;
1667 var_lin = var2;
1668 var3 = ((val* (*)(val*))(var_lin->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_lin) /* iterator on <var_lin:Array[Object]>*/;
1669 for(;;) {
1670 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
1671 if(!var4) break;
1672 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
1673 var_element = var5;
1674 var_color = var_min_color;
1675 for(;;) {
1676 var6 = ((short int (*)(val*, val*, val*, long))(self->class->vft[COLOR_layout_builders__TypingColorer__is_color_free]))(self, var_element, var_elements, var_color) /* is_color_free on <self:TypingColorer[Object]>*/;
1677 var7 = !var6;
1678 if (!var7) break;
1679 var8 = 1;
1680 { /* Inline kernel#Int#+ (var_color,var8) */
1681 var11 = var_color + var8;
1682 var9 = var11;
1683 goto RET_LABEL10;
1684 RET_LABEL10:(void)0;
1685 }
1686 var_color = var9;
1687 CONTINUE_label: (void)0;
1688 }
1689 BREAK_label: (void)0;
1690 var12 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
1691 var13 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
1692 ((void (*)(val*, val*, val*))(var12->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var12, var_element, var13) /* []= on <var12:Map[Object, Int]>*/;
1693 var_color = var_min_color;
1694 CONTINUE_label14: (void)0;
1695 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
1696 }
1697 BREAK_label14: (void)0;
1698 RET_LABEL:;
1699 }
1700 /* method layout_builders#TypingColorer#colorize_elements for (self: Object, Set[Object]) */
1701 void VIRTUAL_layout_builders__TypingColorer__colorize_elements(val* self, val* p0) {
1702 layout_builders__TypingColorer__colorize_elements(self, p0);
1703 RET_LABEL:;
1704 }
1705 /* method layout_builders#TypingColorer#is_color_free for (self: TypingColorer[Object], Object, Set[Object], Int): Bool */
1706 short int layout_builders__TypingColorer__is_color_free(val* self, val* p0, val* p1, long p2) {
1707 short int var /* : Bool */;
1708 short int var1 /* : Bool */;
1709 int cltype;
1710 int idtype;
1711 const struct type* type_struct;
1712 short int var2 /* : Bool */;
1713 int cltype3;
1714 int idtype4;
1715 const struct type* type_struct5;
1716 val* var_element /* var element: Object */;
1717 val* var_elements /* var elements: Set[Object] */;
1718 long var_color /* var color: Int */;
1719 val* var6 /* : nullable HashMap[Object, Set[Object]] */;
1720 short int var7 /* : Bool */;
1721 val* var8 /* : nullable HashMap[Object, Set[Object]] */;
1722 val* var9 /* : nullable Object */;
1723 val* var10 /* : Iterator[nullable Object] */;
1724 short int var11 /* : Bool */;
1725 val* var12 /* : nullable Object */;
1726 val* var_st /* var st: Object */;
1727 short int var13 /* : Bool */;
1728 val* var14 /* : Map[Object, Int] */;
1729 short int var15 /* : Bool */;
1730 short int var_ /* var : Bool */;
1731 val* var16 /* : Map[Object, Int] */;
1732 val* var17 /* : nullable Object */;
1733 short int var18 /* : Bool */;
1734 short int var20 /* : Bool */;
1735 long var21 /* : Int */;
1736 short int var22 /* : Bool */;
1737 val* var23 /* : nullable POSet[Object] */;
1738 val* var24 /* : POSetElement[Object] */;
1739 val* var25 /* : Collection[Object] */;
1740 val* var26 /* : Iterator[nullable Object] */;
1741 short int var27 /* : Bool */;
1742 val* var28 /* : nullable Object */;
1743 val* var_st29 /* var st: Object */;
1744 short int var30 /* : Bool */;
1745 short int var32 /* : Bool */;
1746 val* var33 /* : Map[Object, Int] */;
1747 short int var34 /* : Bool */;
1748 short int var_35 /* var : Bool */;
1749 val* var36 /* : Map[Object, Int] */;
1750 val* var37 /* : nullable Object */;
1751 short int var38 /* : Bool */;
1752 short int var40 /* : Bool */;
1753 long var41 /* : Int */;
1754 short int var42 /* : Bool */;
1755 short int var43 /* : Bool */;
1756 /* Covariant cast for argument 0 (element) <p0:Object> isa TypingColorer#0 */
1757 /* <p0:Object> isa TypingColorer#0 */
1758 type_struct = self->type->resolution_table->types[COLOR_layout_builders__TypingColorer_FT0];
1759 cltype = type_struct->color;
1760 idtype = type_struct->id;
1761 if(cltype >= p0->type->table_size) {
1762 var1 = 0;
1763 } else {
1764 var1 = p0->type->type_table[cltype] == idtype;
1765 }
1766 if (!var1) {
1767 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 282);
1768 exit(1);
1769 }
1770 /* Covariant cast for argument 1 (elements) <p1:Set[Object]> isa Set[TypingColorer#0] */
1771 /* <p1:Set[Object]> isa Set[TypingColorer#0] */
1772 type_struct5 = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
1773 cltype3 = type_struct5->color;
1774 idtype4 = type_struct5->id;
1775 if(cltype3 >= p1->type->table_size) {
1776 var2 = 0;
1777 } else {
1778 var2 = p1->type->type_table[cltype3] == idtype4;
1779 }
1780 if (!var2) {
1781 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 282);
1782 exit(1);
1783 }
1784 var_element = p0;
1785 var_elements = p1;
1786 var_color = p2;
1787 var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
1788 if (var6 == NULL) {
1789 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 284);
1790 exit(1);
1791 } else {
1792 var7 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var6, var_element) /* has_key on <var6:nullable HashMap[Object, Set[Object]]>*/;
1793 }
1794 if (var7){
1795 var8 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
1796 if (var8 == NULL) {
1797 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 285);
1798 exit(1);
1799 } else {
1800 var9 = ((val* (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var8, var_element) /* [] on <var8:nullable HashMap[Object, Set[Object]]>*/;
1801 }
1802 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Collection__iterator]))(var9) /* iterator on <var9:nullable Object(Set[Object])>*/;
1803 for(;;) {
1804 var11 = ((short int (*)(val*))(var10->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var10) /* is_ok on <var10:Iterator[nullable Object]>*/;
1805 if(!var11) break;
1806 var12 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_collection__Iterator__item]))(var10) /* item on <var10:Iterator[nullable Object]>*/;
1807 var_st = var12;
1808 var14 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
1809 var15 = ((short int (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var14, var_st) /* has_key on <var14:Map[Object, Int]>*/;
1810 var_ = var15;
1811 if (var15){
1812 var16 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
1813 var17 = ((val* (*)(val*, val*))(var16->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var16, var_st) /* [] on <var16:Map[Object, Int]>*/;
1814 { /* Inline kernel#Int#== (var17,var_color) */
1815 var20 = (var17 != NULL) && (var17->class == &class_kernel__Int);
1816 if (var20) {
1817 var21 = ((struct instance_kernel__Int*)var17)->value; /* autounbox from nullable Object to Int */;
1818 var20 = (var21 == var_color);
1819 }
1820 var18 = var20;
1821 goto RET_LABEL19;
1822 RET_LABEL19:(void)0;
1823 }
1824 var13 = var18;
1825 } else {
1826 var13 = var_;
1827 }
1828 if (var13){
1829 var22 = 0;
1830 var = var22;
1831 goto RET_LABEL;
1832 } else {
1833 }
1834 CONTINUE_label: (void)0;
1835 ((void (*)(val*))(var10->class->vft[COLOR_abstract_collection__Iterator__next]))(var10) /* next on <var10:Iterator[nullable Object]>*/;
1836 }
1837 BREAK_label: (void)0;
1838 } else {
1839 }
1840 var23 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
1841 if (var23 == NULL) {
1842 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 289);
1843 exit(1);
1844 } else {
1845 var24 = ((val* (*)(val*, val*))(var23->class->vft[COLOR_poset__POSet___91d_93d]))(var23, var_element) /* [] on <var23:nullable POSet[Object]>*/;
1846 }
1847 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_poset__POSetElement__greaters]))(var24) /* greaters on <var24:POSetElement[Object]>*/;
1848 var26 = ((val* (*)(val*))(var25->class->vft[COLOR_abstract_collection__Collection__iterator]))(var25) /* iterator on <var25:Collection[Object]>*/;
1849 for(;;) {
1850 var27 = ((short int (*)(val*))(var26->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var26) /* is_ok on <var26:Iterator[nullable Object]>*/;
1851 if(!var27) break;
1852 var28 = ((val* (*)(val*))(var26->class->vft[COLOR_abstract_collection__Iterator__item]))(var26) /* item on <var26:Iterator[nullable Object]>*/;
1853 var_st29 = var28;
1854 var30 = ((short int (*)(val*, val*))(var_st29->class->vft[COLOR_kernel__Object___61d_61d]))(var_st29, var_element) /* == on <var_st29:Object>*/;
1855 if (var30){
1856 goto CONTINUE_label31;
1857 } else {
1858 }
1859 var33 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
1860 var34 = ((short int (*)(val*, val*))(var33->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var33, var_st29) /* has_key on <var33:Map[Object, Int]>*/;
1861 var_35 = var34;
1862 if (var34){
1863 var36 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__coloration_result]))(self) /* coloration_result on <self:TypingColorer[Object]>*/;
1864 var37 = ((val* (*)(val*, val*))(var36->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var36, var_st29) /* [] on <var36:Map[Object, Int]>*/;
1865 { /* Inline kernel#Int#== (var37,var_color) */
1866 var40 = (var37 != NULL) && (var37->class == &class_kernel__Int);
1867 if (var40) {
1868 var41 = ((struct instance_kernel__Int*)var37)->value; /* autounbox from nullable Object to Int */;
1869 var40 = (var41 == var_color);
1870 }
1871 var38 = var40;
1872 goto RET_LABEL39;
1873 RET_LABEL39:(void)0;
1874 }
1875 var32 = var38;
1876 } else {
1877 var32 = var_35;
1878 }
1879 if (var32){
1880 var42 = 0;
1881 var = var42;
1882 goto RET_LABEL;
1883 } else {
1884 }
1885 CONTINUE_label31: (void)0;
1886 ((void (*)(val*))(var26->class->vft[COLOR_abstract_collection__Iterator__next]))(var26) /* next on <var26:Iterator[nullable Object]>*/;
1887 }
1888 BREAK_label31: (void)0;
1889 var43 = 1;
1890 var = var43;
1891 goto RET_LABEL;
1892 RET_LABEL:;
1893 return var;
1894 }
1895 /* method layout_builders#TypingColorer#is_color_free for (self: Object, Object, Set[Object], Int): Bool */
1896 short int VIRTUAL_layout_builders__TypingColorer__is_color_free(val* self, val* p0, val* p1, long p2) {
1897 short int var /* : Bool */;
1898 short int var1 /* : Bool */;
1899 var1 = layout_builders__TypingColorer__is_color_free(self, p0, p1, p2);
1900 var = var1;
1901 RET_LABEL:;
1902 return var;
1903 }
1904 /* method layout_builders#TypingColorer#tag_elements for (self: TypingColorer[Object], Set[Object]) */
1905 void layout_builders__TypingColorer__tag_elements(val* self, val* p0) {
1906 short int var /* : Bool */;
1907 int cltype;
1908 int idtype;
1909 const struct type* type_struct;
1910 val* var_elements /* var elements: Set[Object] */;
1911 val* var1 /* : Iterator[nullable Object] */;
1912 short int var2 /* : Bool */;
1913 val* var3 /* : nullable Object */;
1914 val* var_element /* var element: Object */;
1915 short int var4 /* : Bool */;
1916 short int var_all_subelements_si /* var all_subelements_si: Bool */;
1917 val* var5 /* : nullable POSet[Object] */;
1918 val* var6 /* : POSetElement[Object] */;
1919 val* var7 /* : Collection[Object] */;
1920 val* var8 /* : Iterator[nullable Object] */;
1921 short int var9 /* : Bool */;
1922 val* var10 /* : nullable Object */;
1923 val* var_subelem /* var subelem: Object */;
1924 val* var11 /* : nullable POSet[Object] */;
1925 val* var12 /* : POSetElement[Object] */;
1926 val* var13 /* : Collection[Object] */;
1927 long var14 /* : Int */;
1928 long var15 /* : Int */;
1929 short int var16 /* : Bool */;
1930 short int var18 /* : Bool */;
1931 int cltype19;
1932 int idtype20;
1933 short int var21 /* : Bool */;
1934 short int var22 /* : Bool */;
1935 val* var23 /* : nullable POSet[Object] */;
1936 val* var24 /* : POSetElement[Object] */;
1937 val* var25 /* : Collection[Object] */;
1938 long var26 /* : Int */;
1939 long var27 /* : Int */;
1940 short int var28 /* : Bool */;
1941 short int var30 /* : Bool */;
1942 int cltype31;
1943 int idtype32;
1944 short int var33 /* : Bool */;
1945 val* var34 /* : Set[Object] */;
1946 val* var35 /* : nullable POSet[Object] */;
1947 val* var36 /* : POSetElement[Object] */;
1948 val* var37 /* : Collection[Object] */;
1949 val* var38 /* : Set[Object] */;
1950 short int var39 /* : Bool */;
1951 val* var40 /* : Set[Object] */;
1952 val* var41 /* : nullable POSet[Object] */;
1953 val* var42 /* : POSetElement[Object] */;
1954 val* var43 /* : Collection[Object] */;
1955 val* var44 /* : Set[Object] */;
1956 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingColorer#0] */
1957 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
1958 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
1959 cltype = type_struct->color;
1960 idtype = type_struct->id;
1961 if(cltype >= p0->type->table_size) {
1962 var = 0;
1963 } else {
1964 var = p0->type->type_table[cltype] == idtype;
1965 }
1966 if (!var) {
1967 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 296);
1968 exit(1);
1969 }
1970 var_elements = p0;
1971 var1 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_elements) /* iterator on <var_elements:Set[Object]>*/;
1972 for(;;) {
1973 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
1974 if(!var2) break;
1975 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
1976 var_element = var3;
1977 var4 = 1;
1978 var_all_subelements_si = var4;
1979 var5 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
1980 if (var5 == NULL) {
1981 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 301);
1982 exit(1);
1983 } else {
1984 var6 = ((val* (*)(val*, val*))(var5->class->vft[COLOR_poset__POSet___91d_93d]))(var5, var_element) /* [] on <var5:nullable POSet[Object]>*/;
1985 }
1986 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_poset__POSetElement__smallers]))(var6) /* smallers on <var6:POSetElement[Object]>*/;
1987 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Collection__iterator]))(var7) /* iterator on <var7:Collection[Object]>*/;
1988 for(;;) {
1989 var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var8) /* is_ok on <var8:Iterator[nullable Object]>*/;
1990 if(!var9) break;
1991 var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__item]))(var8) /* item on <var8:Iterator[nullable Object]>*/;
1992 var_subelem = var10;
1993 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
1994 if (var11 == NULL) {
1995 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 302);
1996 exit(1);
1997 } else {
1998 var12 = ((val* (*)(val*, val*))(var11->class->vft[COLOR_poset__POSet___91d_93d]))(var11, var_subelem) /* [] on <var11:nullable POSet[Object]>*/;
1999 }
2000 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_poset__POSetElement__direct_greaters]))(var12) /* direct_greaters on <var12:POSetElement[Object]>*/;
2001 var14 = ((long (*)(val*))(var13->class->vft[COLOR_abstract_collection__Collection__length]))(var13) /* length on <var13:Collection[Object]>*/;
2002 var15 = 1;
2003 { /* Inline kernel#Int#> (var14,var15) */
2004 /* Covariant cast for argument 0 (i) <var15:Int> isa OTHER */
2005 /* <var15:Int> isa OTHER */
2006 var18 = 1; /* easy <var15:Int> isa OTHER*/
2007 if (!var18) {
2008 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
2009 exit(1);
2010 }
2011 var21 = var14 > var15;
2012 var16 = var21;
2013 goto RET_LABEL17;
2014 RET_LABEL17:(void)0;
2015 }
2016 if (var16){
2017 var22 = 0;
2018 var_all_subelements_si = var22;
2019 goto BREAK_label;
2020 } else {
2021 }
2022 CONTINUE_label: (void)0;
2023 ((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
2024 }
2025 BREAK_label: (void)0;
2026 var23 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
2027 if (var23 == NULL) {
2028 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 309);
2029 exit(1);
2030 } else {
2031 var24 = ((val* (*)(val*, val*))(var23->class->vft[COLOR_poset__POSet___91d_93d]))(var23, var_element) /* [] on <var23:nullable POSet[Object]>*/;
2032 }
2033 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_poset__POSetElement__direct_greaters]))(var24) /* direct_greaters on <var24:POSetElement[Object]>*/;
2034 var26 = ((long (*)(val*))(var25->class->vft[COLOR_abstract_collection__Collection__length]))(var25) /* length on <var25:Collection[Object]>*/;
2035 var27 = 1;
2036 { /* Inline kernel#Int#> (var26,var27) */
2037 /* Covariant cast for argument 0 (i) <var27:Int> isa OTHER */
2038 /* <var27:Int> isa OTHER */
2039 var30 = 1; /* easy <var27:Int> isa OTHER*/
2040 if (!var30) {
2041 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
2042 exit(1);
2043 }
2044 var33 = var26 > var27;
2045 var28 = var33;
2046 goto RET_LABEL29;
2047 RET_LABEL29:(void)0;
2048 }
2049 if (var28){
2050 var34 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__core]))(self) /* core on <self:TypingColorer[Object]>*/;
2051 var35 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
2052 if (var35 == NULL) {
2053 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 310);
2054 exit(1);
2055 } else {
2056 var36 = ((val* (*)(val*, val*))(var35->class->vft[COLOR_poset__POSet___91d_93d]))(var35, var_element) /* [] on <var35:nullable POSet[Object]>*/;
2057 }
2058 var37 = ((val* (*)(val*))(var36->class->vft[COLOR_poset__POSetElement__greaters]))(var36) /* greaters on <var36:POSetElement[Object]>*/;
2059 ((void (*)(val*, val*))(var34->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var34, var37) /* add_all on <var34:Set[Object]>*/;
2060 if (var_all_subelements_si){
2061 var38 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__border]))(self) /* border on <self:TypingColorer[Object]>*/;
2062 ((void (*)(val*, val*))(var38->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var38, var_element) /* add on <var38:Set[Object]>*/;
2063 } else {
2064 }
2065 } else {
2066 var39 = !var_all_subelements_si;
2067 if (var39){
2068 var40 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__core]))(self) /* core on <self:TypingColorer[Object]>*/;
2069 var41 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
2070 if (var41 == NULL) {
2071 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 315);
2072 exit(1);
2073 } else {
2074 var42 = ((val* (*)(val*, val*))(var41->class->vft[COLOR_poset__POSet___91d_93d]))(var41, var_element) /* [] on <var41:nullable POSet[Object]>*/;
2075 }
2076 var43 = ((val* (*)(val*))(var42->class->vft[COLOR_poset__POSetElement__greaters]))(var42) /* greaters on <var42:POSetElement[Object]>*/;
2077 ((void (*)(val*, val*))(var40->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var40, var43) /* add_all on <var40:Set[Object]>*/;
2078 } else {
2079 var44 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__crown]))(self) /* crown on <self:TypingColorer[Object]>*/;
2080 ((void (*)(val*, val*))(var44->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var44, var_element) /* add on <var44:Set[Object]>*/;
2081 }
2082 }
2083 CONTINUE_label45: (void)0;
2084 ((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
2085 }
2086 BREAK_label45: (void)0;
2087 RET_LABEL:;
2088 }
2089 /* method layout_builders#TypingColorer#tag_elements for (self: Object, Set[Object]) */
2090 void VIRTUAL_layout_builders__TypingColorer__tag_elements(val* self, val* p0) {
2091 layout_builders__TypingColorer__tag_elements(self, p0);
2092 RET_LABEL:;
2093 }
2094 /* method layout_builders#TypingColorer#build_conflicts_graph for (self: TypingColorer[Object]) */
2095 void layout_builders__TypingColorer__build_conflicts_graph(val* self) {
2096 val* var /* : HashMap[Object, HashSet[Object]] */;
2097 val* var1 /* : Set[Object] */;
2098 val* var2 /* : Array[Object] */;
2099 val* var_core /* var core: Array[Object] */;
2100 val* var3 /* : Iterator[nullable Object] */;
2101 short int var4 /* : Bool */;
2102 val* var5 /* : nullable Object */;
2103 val* var_t /* var t: Object */;
2104 val* var6 /* : Array[Object] */;
2105 val* var7 /* : Iterator[nullable Object] */;
2106 short int var8 /* : Bool */;
2107 val* var9 /* : nullable Object */;
2108 val* var_i /* var i: Object */;
2109 short int var10 /* : Bool */;
2110 val* var11 /* : Array[Object] */;
2111 val* var_lin_i /* var lin_i: Array[Object] */;
2112 val* var12 /* : Array[Object] */;
2113 val* var13 /* : Iterator[nullable Object] */;
2114 short int var14 /* : Bool */;
2115 val* var15 /* : nullable Object */;
2116 val* var_j /* var j: Object */;
2117 short int var16 /* : Bool */;
2118 short int var17 /* : Bool */;
2119 short int var_ /* var : Bool */;
2120 short int var18 /* : Bool */;
2121 val* var20 /* : Array[Object] */;
2122 val* var_lin_j /* var lin_j: Array[Object] */;
2123 val* var21 /* : Array[nullable Object] */;
2124 val* var_d_ij /* var d_ij: Array[Object] */;
2125 val* var22 /* : Array[nullable Object] */;
2126 val* var_d_ji /* var d_ji: Array[Object] */;
2127 val* var23 /* : Iterator[nullable Object] */;
2128 short int var24 /* : Bool */;
2129 val* var25 /* : nullable Object */;
2130 val* var_ed1 /* var ed1: Object */;
2131 val* var26 /* : nullable HashMap[Object, Set[Object]] */;
2132 short int var27 /* : Bool */;
2133 short int var28 /* : Bool */;
2134 val* var29 /* : nullable HashMap[Object, Set[Object]] */;
2135 val* var30 /* : HashSet[Object] */;
2136 val* var31 /* : Iterator[nullable Object] */;
2137 short int var32 /* : Bool */;
2138 val* var33 /* : nullable Object */;
2139 val* var_ed2 /* var ed2: Object */;
2140 val* var34 /* : nullable HashMap[Object, Set[Object]] */;
2141 val* var35 /* : nullable Object */;
2142 val* var38 /* : Iterator[nullable Object] */;
2143 short int var39 /* : Bool */;
2144 val* var40 /* : nullable Object */;
2145 val* var_ed141 /* var ed1: Object */;
2146 val* var42 /* : nullable HashMap[Object, Set[Object]] */;
2147 short int var43 /* : Bool */;
2148 short int var44 /* : Bool */;
2149 val* var45 /* : nullable HashMap[Object, Set[Object]] */;
2150 val* var46 /* : HashSet[Object] */;
2151 val* var47 /* : Iterator[nullable Object] */;
2152 short int var48 /* : Bool */;
2153 val* var49 /* : nullable Object */;
2154 val* var_ed250 /* var ed2: Object */;
2155 val* var51 /* : nullable HashMap[Object, Set[Object]] */;
2156 val* var52 /* : nullable Object */;
2157 var = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingColorer_FT0hash_collection__HashSetlayout_builders__TypingColorer_FT0]);
2158 ((void (*)(val*))(var->class->vft[COLOR_hash_collection__HashMap__init]))(var) /* init on <var:HashMap[Object, HashSet[Object]]>*/;
2159 CHECK_NEW_hash_collection__HashMap(var);
2160 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph_61d]))(self, var) /* conflicts_graph= on <self:TypingColorer[Object]>*/;
2161 var1 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__core]))(self) /* core on <self:TypingColorer[Object]>*/;
2162 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__reverse_linearize]))(self, var1) /* reverse_linearize on <self:TypingColorer[Object]>*/;
2163 var_core = var2;
2164 var3 = ((val* (*)(val*))(var_core->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_core) /* iterator on <var_core:Array[Object]>*/;
2165 for(;;) {
2166 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
2167 if(!var4) break;
2168 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
2169 var_t = var5;
2170 var6 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__linear_extension]))(self, var_t) /* linear_extension on <self:TypingColorer[Object]>*/;
2171 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Collection__iterator]))(var6) /* iterator on <var6:Array[Object]>*/;
2172 for(;;) {
2173 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
2174 if(!var8) break;
2175 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
2176 var_i = var9;
2177 var10 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___61d_61d]))(var_t, var_i) /* == on <var_t:Object>*/;
2178 if (var10){
2179 goto CONTINUE_label;
2180 } else {
2181 }
2182 var11 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__linear_extension]))(self, var_i) /* linear_extension on <self:TypingColorer[Object]>*/;
2183 var_lin_i = var11;
2184 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__linear_extension]))(self, var_t) /* linear_extension on <self:TypingColorer[Object]>*/;
2185 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:Array[Object]>*/;
2186 for(;;) {
2187 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
2188 if(!var14) break;
2189 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
2190 var_j = var15;
2191 var17 = ((short int (*)(val*, val*))(var_i->class->vft[COLOR_kernel__Object___61d_61d]))(var_i, var_j) /* == on <var_i:Object>*/;
2192 var_ = var17;
2193 if (var17){
2194 var16 = var_;
2195 } else {
2196 var18 = ((short int (*)(val*, val*))(var_j->class->vft[COLOR_kernel__Object___61d_61d]))(var_j, var_t) /* == on <var_j:Object>*/;
2197 var16 = var18;
2198 }
2199 if (var16){
2200 goto CONTINUE_label19;
2201 } else {
2202 }
2203 var20 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__linear_extension]))(self, var_j) /* linear_extension on <self:TypingColorer[Object]>*/;
2204 var_lin_j = var20;
2205 var21 = ((val* (*)(val*, val*))(var_lin_i->class->vft[COLOR_abstract_compiler__Array___45d]))(var_lin_i, var_lin_j) /* - on <var_lin_i:Array[Object]>*/;
2206 var_d_ij = var21;
2207 var22 = ((val* (*)(val*, val*))(var_lin_j->class->vft[COLOR_abstract_compiler__Array___45d]))(var_lin_j, var_lin_i) /* - on <var_lin_j:Array[Object]>*/;
2208 var_d_ji = var22;
2209 var23 = ((val* (*)(val*))(var_d_ij->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_d_ij) /* iterator on <var_d_ij:Array[Object]>*/;
2210 for(;;) {
2211 var24 = ((short int (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var23) /* is_ok on <var23:Iterator[nullable Object]>*/;
2212 if(!var24) break;
2213 var25 = ((val* (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator__item]))(var23) /* item on <var23:Iterator[nullable Object]>*/;
2214 var_ed1 = var25;
2215 var26 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
2216 if (var26 == NULL) {
2217 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 340);
2218 exit(1);
2219 } else {
2220 var27 = ((short int (*)(val*, val*))(var26->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var26, var_ed1) /* has_key on <var26:nullable HashMap[Object, Set[Object]]>*/;
2221 }
2222 var28 = !var27;
2223 if (var28){
2224 var29 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
2225 var30 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetlayout_builders__TypingColorer_FT0]);
2226 ((void (*)(val*))(var30->class->vft[COLOR_hash_collection__HashSet__init]))(var30) /* init on <var30:HashSet[Object]>*/;
2227 CHECK_NEW_hash_collection__HashSet(var30);
2228 if (var29 == NULL) {
2229 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 340);
2230 exit(1);
2231 } else {
2232 ((void (*)(val*, val*, val*))(var29->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var29, var_ed1, var30) /* []= on <var29:nullable HashMap[Object, Set[Object]]>*/;
2233 }
2234 } else {
2235 }
2236 var31 = ((val* (*)(val*))(var_d_ji->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_d_ji) /* iterator on <var_d_ji:Array[Object]>*/;
2237 for(;;) {
2238 var32 = ((short int (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var31) /* is_ok on <var31:Iterator[nullable Object]>*/;
2239 if(!var32) break;
2240 var33 = ((val* (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator__item]))(var31) /* item on <var31:Iterator[nullable Object]>*/;
2241 var_ed2 = var33;
2242 var34 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
2243 if (var34 == NULL) {
2244 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 342);
2245 exit(1);
2246 } else {
2247 var35 = ((val* (*)(val*, val*))(var34->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var34, var_ed1) /* [] on <var34:nullable HashMap[Object, Set[Object]]>*/;
2248 }
2249 ((void (*)(val*, val*))(var35->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var35, var_ed2) /* add on <var35:nullable Object(Set[Object])>*/;
2250 CONTINUE_label36: (void)0;
2251 ((void (*)(val*))(var31->class->vft[COLOR_abstract_collection__Iterator__next]))(var31) /* next on <var31:Iterator[nullable Object]>*/;
2252 }
2253 BREAK_label36: (void)0;
2254 CONTINUE_label37: (void)0;
2255 ((void (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator__next]))(var23) /* next on <var23:Iterator[nullable Object]>*/;
2256 }
2257 BREAK_label37: (void)0;
2258 var38 = ((val* (*)(val*))(var_d_ij->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_d_ij) /* iterator on <var_d_ij:Array[Object]>*/;
2259 for(;;) {
2260 var39 = ((short int (*)(val*))(var38->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var38) /* is_ok on <var38:Iterator[nullable Object]>*/;
2261 if(!var39) break;
2262 var40 = ((val* (*)(val*))(var38->class->vft[COLOR_abstract_collection__Iterator__item]))(var38) /* item on <var38:Iterator[nullable Object]>*/;
2263 var_ed141 = var40;
2264 var42 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
2265 if (var42 == NULL) {
2266 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 345);
2267 exit(1);
2268 } else {
2269 var43 = ((short int (*)(val*, val*))(var42->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var42, var_ed141) /* has_key on <var42:nullable HashMap[Object, Set[Object]]>*/;
2270 }
2271 var44 = !var43;
2272 if (var44){
2273 var45 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
2274 var46 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetlayout_builders__TypingColorer_FT0]);
2275 ((void (*)(val*))(var46->class->vft[COLOR_hash_collection__HashSet__init]))(var46) /* init on <var46:HashSet[Object]>*/;
2276 CHECK_NEW_hash_collection__HashSet(var46);
2277 if (var45 == NULL) {
2278 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 345);
2279 exit(1);
2280 } else {
2281 ((void (*)(val*, val*, val*))(var45->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var45, var_ed141, var46) /* []= on <var45:nullable HashMap[Object, Set[Object]]>*/;
2282 }
2283 } else {
2284 }
2285 var47 = ((val* (*)(val*))(var_d_ji->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_d_ji) /* iterator on <var_d_ji:Array[Object]>*/;
2286 for(;;) {
2287 var48 = ((short int (*)(val*))(var47->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var47) /* is_ok on <var47:Iterator[nullable Object]>*/;
2288 if(!var48) break;
2289 var49 = ((val* (*)(val*))(var47->class->vft[COLOR_abstract_collection__Iterator__item]))(var47) /* item on <var47:Iterator[nullable Object]>*/;
2290 var_ed250 = var49;
2291 var51 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(self) /* conflicts_graph on <self:TypingColorer[Object]>*/;
2292 if (var51 == NULL) {
2293 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 347);
2294 exit(1);
2295 } else {
2296 var52 = ((val* (*)(val*, val*))(var51->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var51, var_ed141) /* [] on <var51:nullable HashMap[Object, Set[Object]]>*/;
2297 }
2298 ((void (*)(val*, val*))(var52->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var52, var_ed250) /* add on <var52:nullable Object(Set[Object])>*/;
2299 CONTINUE_label53: (void)0;
2300 ((void (*)(val*))(var47->class->vft[COLOR_abstract_collection__Iterator__next]))(var47) /* next on <var47:Iterator[nullable Object]>*/;
2301 }
2302 BREAK_label53: (void)0;
2303 CONTINUE_label54: (void)0;
2304 ((void (*)(val*))(var38->class->vft[COLOR_abstract_collection__Iterator__next]))(var38) /* next on <var38:Iterator[nullable Object]>*/;
2305 }
2306 BREAK_label54: (void)0;
2307 CONTINUE_label19: (void)0;
2308 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
2309 }
2310 BREAK_label19: (void)0;
2311 CONTINUE_label: (void)0;
2312 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
2313 }
2314 BREAK_label: (void)0;
2315 CONTINUE_label55: (void)0;
2316 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
2317 }
2318 BREAK_label55: (void)0;
2319 RET_LABEL:;
2320 }
2321 /* method layout_builders#TypingColorer#build_conflicts_graph for (self: Object) */
2322 void VIRTUAL_layout_builders__TypingColorer__build_conflicts_graph(val* self) {
2323 layout_builders__TypingColorer__build_conflicts_graph(self);
2324 RET_LABEL:;
2325 }
2326 /* method layout_builders#TypingColorer#conflicts_graph for (self: TypingColorer[Object]): nullable HashMap[Object, Set[Object]] */
2327 val* layout_builders__TypingColorer__conflicts_graph(val* self) {
2328 val* var /* : nullable HashMap[Object, Set[Object]] */;
2329 val* var1 /* : nullable HashMap[Object, Set[Object]] */;
2330 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dconflicts_graph].val; /* @conflicts_graph on <self:TypingColorer[Object]> */
2331 var = var1;
2332 RET_LABEL:;
2333 return var;
2334 }
2335 /* method layout_builders#TypingColorer#conflicts_graph for (self: Object): nullable HashMap[Object, Set[Object]] */
2336 val* VIRTUAL_layout_builders__TypingColorer__conflicts_graph(val* self) {
2337 val* var /* : nullable HashMap[Object, Set[Object]] */;
2338 val* var1 /* : nullable HashMap[Object, Set[Object]] */;
2339 var1 = layout_builders__TypingColorer__conflicts_graph(self);
2340 var = var1;
2341 RET_LABEL:;
2342 return var;
2343 }
2344 /* method layout_builders#TypingColorer#conflicts_graph= for (self: TypingColorer[Object], nullable HashMap[Object, Set[Object]]) */
2345 void layout_builders__TypingColorer__conflicts_graph_61d(val* self, val* p0) {
2346 short int var /* : Bool */;
2347 int cltype;
2348 int idtype;
2349 const struct type* type_struct;
2350 /* Covariant cast for argument 0 (conflicts_graph) <p0:nullable HashMap[Object, Set[Object]]> isa nullable HashMap[TypingColorer#0, Set[TypingColorer#0]] */
2351 /* <p0:nullable HashMap[Object, Set[Object]]> isa nullable HashMap[TypingColorer#0, Set[TypingColorer#0]] */
2352 type_struct = self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingColorer_FT0abstract_collection__Setlayout_builders__TypingColorer_FT0];
2353 cltype = type_struct->color;
2354 idtype = type_struct->id;
2355 if(p0 == NULL) {
2356 var = 1;
2357 } else {
2358 if(cltype >= p0->type->table_size) {
2359 var = 0;
2360 } else {
2361 var = p0->type->type_table[cltype] == idtype;
2362 }
2363 }
2364 if (!var) {
2365 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 354);
2366 exit(1);
2367 }
2368 self->attrs[COLOR_layout_builders__TypingColorer___64dconflicts_graph].val = p0; /* @conflicts_graph on <self:TypingColorer[Object]> */
2369 RET_LABEL:;
2370 }
2371 /* method layout_builders#TypingColorer#conflicts_graph= for (self: Object, nullable HashMap[Object, Set[Object]]) */
2372 void VIRTUAL_layout_builders__TypingColorer__conflicts_graph_61d(val* self, val* p0) {
2373 layout_builders__TypingColorer__conflicts_graph_61d(self, p0);
2374 RET_LABEL:;
2375 }
2376 /* method layout_builders#TypingColorer#linear_extensions_cache for (self: TypingColorer[Object]): Map[Object, Array[Object]] */
2377 val* layout_builders__TypingColorer__linear_extensions_cache(val* self) {
2378 val* var /* : Map[Object, Array[Object]] */;
2379 val* var1 /* : Map[Object, Array[Object]] */;
2380 var1 = self->attrs[COLOR_layout_builders__TypingColorer___64dlinear_extensions_cache].val; /* @linear_extensions_cache on <self:TypingColorer[Object]> */
2381 if (var1 == NULL) {
2382 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @linear_extensions_cache", "src/layout_builders.nit", 356);
2383 exit(1);
2384 }
2385 var = var1;
2386 RET_LABEL:;
2387 return var;
2388 }
2389 /* method layout_builders#TypingColorer#linear_extensions_cache for (self: Object): Map[Object, Array[Object]] */
2390 val* VIRTUAL_layout_builders__TypingColorer__linear_extensions_cache(val* self) {
2391 val* var /* : Map[Object, Array[Object]] */;
2392 val* var1 /* : Map[Object, Array[Object]] */;
2393 var1 = layout_builders__TypingColorer__linear_extensions_cache(self);
2394 var = var1;
2395 RET_LABEL:;
2396 return var;
2397 }
2398 /* method layout_builders#TypingColorer#linear_extensions_cache= for (self: TypingColorer[Object], Map[Object, Array[Object]]) */
2399 void layout_builders__TypingColorer__linear_extensions_cache_61d(val* self, val* p0) {
2400 short int var /* : Bool */;
2401 int cltype;
2402 int idtype;
2403 const struct type* type_struct;
2404 /* Covariant cast for argument 0 (linear_extensions_cache) <p0:Map[Object, Array[Object]]> isa Map[TypingColorer#0, Array[TypingColorer#0]] */
2405 /* <p0:Map[Object, Array[Object]]> isa Map[TypingColorer#0, Array[TypingColorer#0]] */
2406 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__TypingColorer_FT0array__Arraylayout_builders__TypingColorer_FT0];
2407 cltype = type_struct->color;
2408 idtype = type_struct->id;
2409 if(cltype >= p0->type->table_size) {
2410 var = 0;
2411 } else {
2412 var = p0->type->type_table[cltype] == idtype;
2413 }
2414 if (!var) {
2415 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 356);
2416 exit(1);
2417 }
2418 self->attrs[COLOR_layout_builders__TypingColorer___64dlinear_extensions_cache].val = p0; /* @linear_extensions_cache on <self:TypingColorer[Object]> */
2419 RET_LABEL:;
2420 }
2421 /* method layout_builders#TypingColorer#linear_extensions_cache= for (self: Object, Map[Object, Array[Object]]) */
2422 void VIRTUAL_layout_builders__TypingColorer__linear_extensions_cache_61d(val* self, val* p0) {
2423 layout_builders__TypingColorer__linear_extensions_cache_61d(self, p0);
2424 RET_LABEL:;
2425 }
2426 /* method layout_builders#TypingColorer#linear_extension for (self: TypingColorer[Object], Object): Array[Object] */
2427 val* layout_builders__TypingColorer__linear_extension(val* self, val* p0) {
2428 val* var /* : Array[Object] */;
2429 short int var1 /* : Bool */;
2430 int cltype;
2431 int idtype;
2432 const struct type* type_struct;
2433 val* var_element /* var element: Object */;
2434 val* var2 /* : Map[Object, Array[Object]] */;
2435 short int var3 /* : Bool */;
2436 short int var4 /* : Bool */;
2437 val* var5 /* : HashSet[Object] */;
2438 val* var_supers /* var supers: HashSet[Object] */;
2439 val* var6 /* : nullable POSet[Object] */;
2440 val* var7 /* : POSetElement[Object] */;
2441 val* var8 /* : Collection[Object] */;
2442 val* var9 /* : Map[Object, Array[Object]] */;
2443 val* var10 /* : Array[Object] */;
2444 val* var11 /* : Map[Object, Array[Object]] */;
2445 val* var12 /* : nullable Object */;
2446 /* Covariant cast for argument 0 (element) <p0:Object> isa TypingColorer#0 */
2447 /* <p0:Object> isa TypingColorer#0 */
2448 type_struct = self->type->resolution_table->types[COLOR_layout_builders__TypingColorer_FT0];
2449 cltype = type_struct->color;
2450 idtype = type_struct->id;
2451 if(cltype >= p0->type->table_size) {
2452 var1 = 0;
2453 } else {
2454 var1 = p0->type->type_table[cltype] == idtype;
2455 }
2456 if (!var1) {
2457 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 359);
2458 exit(1);
2459 }
2460 var_element = p0;
2461 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__linear_extensions_cache]))(self) /* linear_extensions_cache on <self:TypingColorer[Object]>*/;
2462 var3 = ((short int (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var2, var_element) /* has_key on <var2:Map[Object, Array[Object]]>*/;
2463 var4 = !var3;
2464 if (var4){
2465 var5 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetlayout_builders__TypingColorer_FT0]);
2466 ((void (*)(val*))(var5->class->vft[COLOR_hash_collection__HashSet__init]))(var5) /* init on <var5:HashSet[Object]>*/;
2467 CHECK_NEW_hash_collection__HashSet(var5);
2468 var_supers = var5;
2469 var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
2470 if (var6 == NULL) {
2471 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 363);
2472 exit(1);
2473 } else {
2474 var7 = ((val* (*)(val*, val*))(var6->class->vft[COLOR_poset__POSet___91d_93d]))(var6, var_element) /* [] on <var6:nullable POSet[Object]>*/;
2475 }
2476 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_poset__POSetElement__greaters]))(var7) /* greaters on <var7:POSetElement[Object]>*/;
2477 ((void (*)(val*, val*))(var_supers->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_supers, var8) /* add_all on <var_supers:HashSet[Object]>*/;
2478 var9 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__linear_extensions_cache]))(self) /* linear_extensions_cache on <self:TypingColorer[Object]>*/;
2479 var10 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__linearize]))(self, var_supers) /* linearize on <self:TypingColorer[Object]>*/;
2480 ((void (*)(val*, val*, val*))(var9->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var9, var_element, var10) /* []= on <var9:Map[Object, Array[Object]]>*/;
2481 } else {
2482 }
2483 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingColorer__linear_extensions_cache]))(self) /* linear_extensions_cache on <self:TypingColorer[Object]>*/;
2484 var12 = ((val* (*)(val*, val*))(var11->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var11, var_element) /* [] on <var11:Map[Object, Array[Object]]>*/;
2485 var = var12;
2486 goto RET_LABEL;
2487 RET_LABEL:;
2488 return var;
2489 }
2490 /* method layout_builders#TypingColorer#linear_extension for (self: Object, Object): Array[Object] */
2491 val* VIRTUAL_layout_builders__TypingColorer__linear_extension(val* self, val* p0) {
2492 val* var /* : Array[Object] */;
2493 val* var1 /* : Array[Object] */;
2494 var1 = layout_builders__TypingColorer__linear_extension(self, p0);
2495 var = var1;
2496 RET_LABEL:;
2497 return var;
2498 }
2499 /* method layout_builders#TypingColorer#reverse_linearize for (self: TypingColorer[Object], Set[Object]): Array[Object] */
2500 val* layout_builders__TypingColorer__reverse_linearize(val* self, val* p0) {
2501 val* var /* : Array[Object] */;
2502 short int var1 /* : Bool */;
2503 int cltype;
2504 int idtype;
2505 const struct type* type_struct;
2506 val* var_elements /* var elements: Set[Object] */;
2507 val* var2 /* : Array[Object] */;
2508 val* var_lin /* var lin: Array[Object] */;
2509 val* var3 /* : nullable POSet[Object] */;
2510 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingColorer#0] */
2511 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
2512 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
2513 cltype = type_struct->color;
2514 idtype = type_struct->id;
2515 if(cltype >= p0->type->table_size) {
2516 var1 = 0;
2517 } else {
2518 var1 = p0->type->type_table[cltype] == idtype;
2519 }
2520 if (!var1) {
2521 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 369);
2522 exit(1);
2523 }
2524 var_elements = p0;
2525 var2 = NEW_array__Array(self->type->resolution_table->types[COLOR_array__Arraylayout_builders__TypingColorer_FT0]);
2526 ((void (*)(val*))(var2->class->vft[COLOR_array__Array__init]))(var2) /* init on <var2:Array[Object]>*/;
2527 CHECK_NEW_array__Array(var2);
2528 var_lin = var2;
2529 ((void (*)(val*, val*))(var_lin->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_lin, var_elements) /* add_all on <var_lin:Array[Object]>*/;
2530 var3 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingColorer[Object]>*/;
2531 if (var3 == NULL) {
2532 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 372);
2533 exit(1);
2534 } else {
2535 ((void (*)(val*, val*))(var3->class->vft[COLOR_sorter__AbstractSorter__sort]))(var3, var_lin) /* sort on <var3:nullable POSet[Object]>*/;
2536 }
2537 var = var_lin;
2538 goto RET_LABEL;
2539 RET_LABEL:;
2540 return var;
2541 }
2542 /* method layout_builders#TypingColorer#reverse_linearize for (self: Object, Set[Object]): Array[Object] */
2543 val* VIRTUAL_layout_builders__TypingColorer__reverse_linearize(val* self, val* p0) {
2544 val* var /* : Array[Object] */;
2545 val* var1 /* : Array[Object] */;
2546 var1 = layout_builders__TypingColorer__reverse_linearize(self, p0);
2547 var = var1;
2548 RET_LABEL:;
2549 return var;
2550 }
2551 /* method layout_builders#TypingColorer#linearize for (self: TypingColorer[Object], Set[Object]): Array[Object] */
2552 val* layout_builders__TypingColorer__linearize(val* self, val* p0) {
2553 val* var /* : Array[Object] */;
2554 short int var1 /* : Bool */;
2555 int cltype;
2556 int idtype;
2557 const struct type* type_struct;
2558 val* var_elements /* var elements: Set[Object] */;
2559 val* var2 /* : Array[Object] */;
2560 val* var3 /* : Array[nullable Object] */;
2561 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingColorer#0] */
2562 /* <p0:Set[Object]> isa Set[TypingColorer#0] */
2563 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingColorer_FT0];
2564 cltype = type_struct->color;
2565 idtype = type_struct->id;
2566 if(cltype >= p0->type->table_size) {
2567 var1 = 0;
2568 } else {
2569 var1 = p0->type->type_table[cltype] == idtype;
2570 }
2571 if (!var1) {
2572 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 375);
2573 exit(1);
2574 }
2575 var_elements = p0;
2576 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__reverse_linearize]))(self, var_elements) /* reverse_linearize on <self:TypingColorer[Object]>*/;
2577 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_array__AbstractArrayRead__reversed]))(var2) /* reversed on <var2:Array[Object]>*/;
2578 var = var3;
2579 goto RET_LABEL;
2580 RET_LABEL:;
2581 return var;
2582 }
2583 /* method layout_builders#TypingColorer#linearize for (self: Object, Set[Object]): Array[Object] */
2584 val* VIRTUAL_layout_builders__TypingColorer__linearize(val* self, val* p0) {
2585 val* var /* : Array[Object] */;
2586 val* var1 /* : Array[Object] */;
2587 var1 = layout_builders__TypingColorer__linearize(self, p0);
2588 var = var1;
2589 RET_LABEL:;
2590 return var;
2591 }
2592 /* method layout_builders#MTypeColorer#init for (self: MTypeColorer, MModule) */
2593 void layout_builders__MTypeColorer__init(val* self, val* p0) {
2594 val* var_mmodule /* var mmodule: MModule */;
2595 val* var /* : MTypePOSetBuilder */;
2596 var_mmodule = p0;
2597 var = NEW_layout_builders__MTypePOSetBuilder(&type_layout_builders__MTypePOSetBuilder);
2598 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MTypePOSetBuilder>*/;
2599 CHECK_NEW_layout_builders__MTypePOSetBuilder(var);
2600 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__init]))(self, var_mmodule, var) /* init on <self:MTypeColorer>*/;
2601 RET_LABEL:;
2602 }
2603 /* method layout_builders#MTypeColorer#init for (self: Object, MModule) */
2604 void VIRTUAL_layout_builders__MTypeColorer__init(val* self, val* p0) {
2605 layout_builders__MTypeColorer__init(self, p0);
2606 RET_LABEL:;
2607 }
2608 /* method layout_builders#MClassColorer#init for (self: MClassColorer, MModule) */
2609 void layout_builders__MClassColorer__init(val* self, val* p0) {
2610 val* var_mmodule /* var mmodule: MModule */;
2611 val* var /* : MClassPOSetBuilder */;
2612 var_mmodule = p0;
2613 var = NEW_layout_builders__MClassPOSetBuilder(&type_layout_builders__MClassPOSetBuilder);
2614 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MClassPOSetBuilder>*/;
2615 CHECK_NEW_layout_builders__MClassPOSetBuilder(var);
2616 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingColorer__init]))(self, var_mmodule, var) /* init on <self:MClassColorer>*/;
2617 RET_LABEL:;
2618 }
2619 /* method layout_builders#MClassColorer#init for (self: Object, MModule) */
2620 void VIRTUAL_layout_builders__MClassColorer__init(val* self, val* p0) {
2621 layout_builders__MClassColorer__init(self, p0);
2622 RET_LABEL:;
2623 }
2624 /* method layout_builders#MPropertyColorer#mmodule for (self: MPropertyColorer[PropertyLayoutElement]): MModule */
2625 val* layout_builders__MPropertyColorer__mmodule(val* self) {
2626 val* var /* : MModule */;
2627 val* var1 /* : MModule */;
2628 var1 = self->attrs[COLOR_layout_builders__MPropertyColorer___64dmmodule].val; /* @mmodule on <self:MPropertyColorer[PropertyLayoutElement]> */
2629 if (var1 == NULL) {
2630 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 394);
2631 exit(1);
2632 }
2633 var = var1;
2634 RET_LABEL:;
2635 return var;
2636 }
2637 /* method layout_builders#MPropertyColorer#mmodule for (self: Object): MModule */
2638 val* VIRTUAL_layout_builders__MPropertyColorer__mmodule(val* self) {
2639 val* var /* : MModule */;
2640 val* var1 /* : MModule */;
2641 var1 = layout_builders__MPropertyColorer__mmodule(self);
2642 var = var1;
2643 RET_LABEL:;
2644 return var;
2645 }
2646 /* method layout_builders#MPropertyColorer#mmodule= for (self: MPropertyColorer[PropertyLayoutElement], MModule) */
2647 void layout_builders__MPropertyColorer__mmodule_61d(val* self, val* p0) {
2648 self->attrs[COLOR_layout_builders__MPropertyColorer___64dmmodule].val = p0; /* @mmodule on <self:MPropertyColorer[PropertyLayoutElement]> */
2649 RET_LABEL:;
2650 }
2651 /* method layout_builders#MPropertyColorer#mmodule= for (self: Object, MModule) */
2652 void VIRTUAL_layout_builders__MPropertyColorer__mmodule_61d(val* self, val* p0) {
2653 layout_builders__MPropertyColorer__mmodule_61d(self, p0);
2654 RET_LABEL:;
2655 }
2656 /* method layout_builders#MPropertyColorer#class_colorer for (self: MPropertyColorer[PropertyLayoutElement]): MClassColorer */
2657 val* layout_builders__MPropertyColorer__class_colorer(val* self) {
2658 val* var /* : MClassColorer */;
2659 val* var1 /* : MClassColorer */;
2660 var1 = self->attrs[COLOR_layout_builders__MPropertyColorer___64dclass_colorer].val; /* @class_colorer on <self:MPropertyColorer[PropertyLayoutElement]> */
2661 if (var1 == NULL) {
2662 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @class_colorer", "src/layout_builders.nit", 395);
2663 exit(1);
2664 }
2665 var = var1;
2666 RET_LABEL:;
2667 return var;
2668 }
2669 /* method layout_builders#MPropertyColorer#class_colorer for (self: Object): MClassColorer */
2670 val* VIRTUAL_layout_builders__MPropertyColorer__class_colorer(val* self) {
2671 val* var /* : MClassColorer */;
2672 val* var1 /* : MClassColorer */;
2673 var1 = layout_builders__MPropertyColorer__class_colorer(self);
2674 var = var1;
2675 RET_LABEL:;
2676 return var;
2677 }
2678 /* method layout_builders#MPropertyColorer#class_colorer= for (self: MPropertyColorer[PropertyLayoutElement], MClassColorer) */
2679 void layout_builders__MPropertyColorer__class_colorer_61d(val* self, val* p0) {
2680 self->attrs[COLOR_layout_builders__MPropertyColorer___64dclass_colorer].val = p0; /* @class_colorer on <self:MPropertyColorer[PropertyLayoutElement]> */
2681 RET_LABEL:;
2682 }
2683 /* method layout_builders#MPropertyColorer#class_colorer= for (self: Object, MClassColorer) */
2684 void VIRTUAL_layout_builders__MPropertyColorer__class_colorer_61d(val* self, val* p0) {
2685 layout_builders__MPropertyColorer__class_colorer_61d(self, p0);
2686 RET_LABEL:;
2687 }
2688 /* method layout_builders#MPropertyColorer#coloration_result for (self: MPropertyColorer[PropertyLayoutElement]): Map[PropertyLayoutElement, Int] */
2689 val* layout_builders__MPropertyColorer__coloration_result(val* self) {
2690 val* var /* : Map[PropertyLayoutElement, Int] */;
2691 val* var1 /* : Map[PropertyLayoutElement, Int] */;
2692 var1 = self->attrs[COLOR_layout_builders__MPropertyColorer___64dcoloration_result].val; /* @coloration_result on <self:MPropertyColorer[PropertyLayoutElement]> */
2693 if (var1 == NULL) {
2694 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @coloration_result", "src/layout_builders.nit", 396);
2695 exit(1);
2696 }
2697 var = var1;
2698 RET_LABEL:;
2699 return var;
2700 }
2701 /* method layout_builders#MPropertyColorer#coloration_result for (self: Object): Map[PropertyLayoutElement, Int] */
2702 val* VIRTUAL_layout_builders__MPropertyColorer__coloration_result(val* self) {
2703 val* var /* : Map[PropertyLayoutElement, Int] */;
2704 val* var1 /* : Map[PropertyLayoutElement, Int] */;
2705 var1 = layout_builders__MPropertyColorer__coloration_result(self);
2706 var = var1;
2707 RET_LABEL:;
2708 return var;
2709 }
2710 /* method layout_builders#MPropertyColorer#coloration_result= for (self: MPropertyColorer[PropertyLayoutElement], Map[PropertyLayoutElement, Int]) */
2711 void layout_builders__MPropertyColorer__coloration_result_61d(val* self, val* p0) {
2712 short int var /* : Bool */;
2713 int cltype;
2714 int idtype;
2715 const struct type* type_struct;
2716 /* Covariant cast for argument 0 (coloration_result) <p0:Map[PropertyLayoutElement, Int]> isa Map[MPropertyColorer#0, Int] */
2717 /* <p0:Map[PropertyLayoutElement, Int]> isa Map[MPropertyColorer#0, Int] */
2718 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__MPropertyColorer_FT0kernel__Int];
2719 cltype = type_struct->color;
2720 idtype = type_struct->id;
2721 if(cltype >= p0->type->table_size) {
2722 var = 0;
2723 } else {
2724 var = p0->type->type_table[cltype] == idtype;
2725 }
2726 if (!var) {
2727 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 396);
2728 exit(1);
2729 }
2730 self->attrs[COLOR_layout_builders__MPropertyColorer___64dcoloration_result].val = p0; /* @coloration_result on <self:MPropertyColorer[PropertyLayoutElement]> */
2731 RET_LABEL:;
2732 }
2733 /* method layout_builders#MPropertyColorer#coloration_result= for (self: Object, Map[PropertyLayoutElement, Int]) */
2734 void VIRTUAL_layout_builders__MPropertyColorer__coloration_result_61d(val* self, val* p0) {
2735 layout_builders__MPropertyColorer__coloration_result_61d(self, p0);
2736 RET_LABEL:;
2737 }
2738 /* method layout_builders#MPropertyColorer#init for (self: MPropertyColorer[PropertyLayoutElement], MModule, MClassColorer) */
2739 void layout_builders__MPropertyColorer__init(val* self, val* p0, val* p1) {
2740 val* var_mmodule /* var mmodule: MModule */;
2741 val* var_class_colorer /* var class_colorer: MClassColorer */;
2742 var_mmodule = p0;
2743 var_class_colorer = p1;
2744 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__mmodule_61d]))(self, var_mmodule) /* mmodule= on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2745 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__class_colorer_61d]))(self, var_class_colorer) /* class_colorer= on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2746 RET_LABEL:;
2747 }
2748 /* method layout_builders#MPropertyColorer#init for (self: Object, MModule, MClassColorer) */
2749 void VIRTUAL_layout_builders__MPropertyColorer__init(val* self, val* p0, val* p1) {
2750 layout_builders__MPropertyColorer__init(self, p0, p1);
2751 RET_LABEL:;
2752 }
2753 /* method layout_builders#MPropertyColorer#build_layout for (self: MPropertyColorer[PropertyLayoutElement], Map[MClass, Set[PropertyLayoutElement]]): Layout[PropertyLayoutElement] */
2754 val* layout_builders__MPropertyColorer__build_layout(val* self, val* p0) {
2755 val* var /* : Layout[PropertyLayoutElement] */;
2756 short int var1 /* : Bool */;
2757 int cltype;
2758 int idtype;
2759 const struct type* type_struct;
2760 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
2761 val* var2 /* : Layout[PropertyLayoutElement] */;
2762 val* var_result /* var result: Layout[PropertyLayoutElement] */;
2763 val* var3 /* : Map[PropertyLayoutElement, Int] */;
2764 /* Covariant cast for argument 0 (elements) <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
2765 /* <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
2766 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__MPropertyColorer_FT0];
2767 cltype = type_struct->color;
2768 idtype = type_struct->id;
2769 if(cltype >= p0->type->table_size) {
2770 var1 = 0;
2771 } else {
2772 var1 = p0->type->type_table[cltype] == idtype;
2773 }
2774 if (!var1) {
2775 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 403);
2776 exit(1);
2777 }
2778 var_elements = p0;
2779 var2 = NEW_layout_builders__Layout(self->type->resolution_table->types[COLOR_layout_builders__Layoutlayout_builders__MPropertyColorer_FT0]);
2780 ((void (*)(val*))(var2->class->vft[COLOR_layout_builders__Layout__init]))(var2) /* init on <var2:Layout[PropertyLayoutElement]>*/;
2781 CHECK_NEW_layout_builders__Layout(var2);
2782 var_result = var2;
2783 var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__colorize]))(self, var_elements) /* colorize on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2784 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__pos_61d]))(var_result, var3) /* pos= on <var_result:Layout[PropertyLayoutElement]>*/;
2785 var = var_result;
2786 goto RET_LABEL;
2787 RET_LABEL:;
2788 return var;
2789 }
2790 /* method layout_builders#MPropertyColorer#build_layout for (self: Object, Map[MClass, Set[PropertyLayoutElement]]): Layout[PropertyLayoutElement] */
2791 val* VIRTUAL_layout_builders__MPropertyColorer__build_layout(val* self, val* p0) {
2792 val* var /* : Layout[PropertyLayoutElement] */;
2793 val* var1 /* : Layout[PropertyLayoutElement] */;
2794 var1 = layout_builders__MPropertyColorer__build_layout(self, p0);
2795 var = var1;
2796 RET_LABEL:;
2797 return var;
2798 }
2799 /* method layout_builders#MPropertyColorer#colorize for (self: MPropertyColorer[PropertyLayoutElement], Map[MClass, Set[PropertyLayoutElement]]): Map[PropertyLayoutElement, Int] */
2800 val* layout_builders__MPropertyColorer__colorize(val* self, val* p0) {
2801 val* var /* : Map[PropertyLayoutElement, Int] */;
2802 short int var1 /* : Bool */;
2803 int cltype;
2804 int idtype;
2805 const struct type* type_struct;
2806 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
2807 val* var2 /* : Map[PropertyLayoutElement, Int] */;
2808 /* Covariant cast for argument 0 (elements) <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
2809 /* <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
2810 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__MPropertyColorer_FT0];
2811 cltype = type_struct->color;
2812 idtype = type_struct->id;
2813 if(cltype >= p0->type->table_size) {
2814 var1 = 0;
2815 } else {
2816 var1 = p0->type->type_table[cltype] == idtype;
2817 }
2818 if (!var1) {
2819 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 410);
2820 exit(1);
2821 }
2822 var_elements = p0;
2823 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__colorize_core]))(self, var_elements) /* colorize_core on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2824 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__colorize_crown]))(self, var_elements) /* colorize_crown on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2825 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__coloration_result]))(self) /* coloration_result on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2826 var = var2;
2827 goto RET_LABEL;
2828 RET_LABEL:;
2829 return var;
2830 }
2831 /* method layout_builders#MPropertyColorer#colorize for (self: Object, Map[MClass, Set[PropertyLayoutElement]]): Map[PropertyLayoutElement, Int] */
2832 val* VIRTUAL_layout_builders__MPropertyColorer__colorize(val* self, val* p0) {
2833 val* var /* : Map[PropertyLayoutElement, Int] */;
2834 val* var1 /* : Map[PropertyLayoutElement, Int] */;
2835 var1 = layout_builders__MPropertyColorer__colorize(self, p0);
2836 var = var1;
2837 RET_LABEL:;
2838 return var;
2839 }
2840 /* method layout_builders#MPropertyColorer#colorize_core for (self: MPropertyColorer[PropertyLayoutElement], Map[MClass, Set[PropertyLayoutElement]]) */
2841 void layout_builders__MPropertyColorer__colorize_core(val* self, val* p0) {
2842 short int var /* : Bool */;
2843 int cltype;
2844 int idtype;
2845 const struct type* type_struct;
2846 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
2847 long var1 /* : Int */;
2848 long var_min_color /* var min_color: Int */;
2849 val* var2 /* : MClassColorer */;
2850 val* var3 /* : Set[Object] */;
2851 val* var4 /* : Iterator[nullable Object] */;
2852 short int var5 /* : Bool */;
2853 val* var6 /* : nullable Object */;
2854 val* var_mclass /* var mclass: MClass */;
2855 long var_color /* var color: Int */;
2856 val* var7 /* : MModule */;
2857 val* var8 /* : POSetElement[MClass] */;
2858 val* var9 /* : Collection[Object] */;
2859 long var10 /* : Int */;
2860 val* var11 /* : MClassColorer */;
2861 val* var12 /* : nullable HashMap[Object, Set[Object]] */;
2862 short int var13 /* : Bool */;
2863 val* var14 /* : MClassColorer */;
2864 val* var15 /* : nullable HashMap[Object, Set[Object]] */;
2865 val* var16 /* : nullable Object */;
2866 long var17 /* : Int */;
2867 val* var18 /* : nullable Object */;
2868 /* Covariant cast for argument 0 (elements) <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
2869 /* <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
2870 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__MPropertyColorer_FT0];
2871 cltype = type_struct->color;
2872 idtype = type_struct->id;
2873 if(cltype >= p0->type->table_size) {
2874 var = 0;
2875 } else {
2876 var = p0->type->type_table[cltype] == idtype;
2877 }
2878 if (!var) {
2879 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 416);
2880 exit(1);
2881 }
2882 var_elements = p0;
2883 var1 = 0;
2884 var_min_color = var1;
2885 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__class_colorer]))(self) /* class_colorer on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2886 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_layout_builders__TypingColorer__core]))(var2) /* core on <var2:MClassColorer>*/;
2887 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__iterator]))(var3) /* iterator on <var3:Set[Object](Set[MClass])>*/;
2888 for(;;) {
2889 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var4) /* is_ok on <var4:Iterator[nullable Object]>*/;
2890 if(!var5) break;
2891 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__item]))(var4) /* item on <var4:Iterator[nullable Object]>*/;
2892 var_mclass = var6;
2893 var_color = var_min_color;
2894 var7 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__mmodule]))(self) /* mmodule on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2895 var8 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var7) /* in_hierarchy on <var_mclass:MClass>*/;
2896 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_poset__POSetElement__direct_greaters]))(var8) /* direct_greaters on <var8:POSetElement[MClass]>*/;
2897 var10 = ((long (*)(val*, long, val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__max_color]))(self, var_color, var9, var_elements) /* max_color on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2898 var_color = var10;
2899 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__class_colorer]))(self) /* class_colorer on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2900 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(var11) /* conflicts_graph on <var11:MClassColorer>*/;
2901 if (var12 == NULL) {
2902 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 424);
2903 exit(1);
2904 } else {
2905 var13 = ((short int (*)(val*, val*))(var12->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var12, var_mclass) /* has_key on <var12:nullable HashMap[Object, Set[Object]](nullable HashMap[MClass, Set[MClass]])>*/;
2906 }
2907 if (var13){
2908 var14 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__class_colorer]))(self) /* class_colorer on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2909 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_layout_builders__TypingColorer__conflicts_graph]))(var14) /* conflicts_graph on <var14:MClassColorer>*/;
2910 if (var15 == NULL) {
2911 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 425);
2912 exit(1);
2913 } else {
2914 var16 = ((val* (*)(val*, val*))(var15->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var15, var_mclass) /* [] on <var15:nullable HashMap[Object, Set[Object]](nullable HashMap[MClass, Set[MClass]])>*/;
2915 }
2916 var17 = ((long (*)(val*, long, val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__max_color]))(self, var_color, var16, var_elements) /* max_color on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2917 var_color = var17;
2918 } else {
2919 }
2920 var18 = ((val* (*)(val*, val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_elements, var_mclass) /* [] on <var_elements:Map[MClass, Set[PropertyLayoutElement]]>*/;
2921 ((void (*)(val*, val*, long))(self->class->vft[COLOR_layout_builders__MPropertyColorer__colorize_elements]))(self, var18, var_color) /* colorize_elements on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2922 CONTINUE_label: (void)0;
2923 ((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__next]))(var4) /* next on <var4:Iterator[nullable Object]>*/;
2924 }
2925 BREAK_label: (void)0;
2926 RET_LABEL:;
2927 }
2928 /* method layout_builders#MPropertyColorer#colorize_core for (self: Object, Map[MClass, Set[PropertyLayoutElement]]) */
2929 void VIRTUAL_layout_builders__MPropertyColorer__colorize_core(val* self, val* p0) {
2930 layout_builders__MPropertyColorer__colorize_core(self, p0);
2931 RET_LABEL:;
2932 }
2933 /* method layout_builders#MPropertyColorer#colorize_crown for (self: MPropertyColorer[PropertyLayoutElement], Map[MClass, Set[PropertyLayoutElement]]) */
2934 void layout_builders__MPropertyColorer__colorize_crown(val* self, val* p0) {
2935 short int var /* : Bool */;
2936 int cltype;
2937 int idtype;
2938 const struct type* type_struct;
2939 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
2940 val* var1 /* : MClassColorer */;
2941 val* var2 /* : Set[Object] */;
2942 val* var3 /* : Iterator[nullable Object] */;
2943 short int var4 /* : Bool */;
2944 val* var5 /* : nullable Object */;
2945 val* var_mclass /* var mclass: MClass */;
2946 val* var6 /* : HashSet[MClass] */;
2947 val* var_parents /* var parents: HashSet[MClass] */;
2948 val* var7 /* : MModule */;
2949 val* var8 /* : POSet[MClass] */;
2950 short int var9 /* : Bool */;
2951 val* var10 /* : MModule */;
2952 val* var11 /* : POSetElement[MClass] */;
2953 val* var12 /* : Collection[Object] */;
2954 val* var13 /* : nullable Object */;
2955 long var14 /* : Int */;
2956 long var15 /* : Int */;
2957 /* Covariant cast for argument 0 (elements) <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
2958 /* <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
2959 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__MPropertyColorer_FT0];
2960 cltype = type_struct->color;
2961 idtype = type_struct->id;
2962 if(cltype >= p0->type->table_size) {
2963 var = 0;
2964 } else {
2965 var = p0->type->type_table[cltype] == idtype;
2966 }
2967 if (!var) {
2968 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 431);
2969 exit(1);
2970 }
2971 var_elements = p0;
2972 var1 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__class_colorer]))(self) /* class_colorer on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2973 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_layout_builders__TypingColorer__crown]))(var1) /* crown on <var1:MClassColorer>*/;
2974 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Set[Object](Set[MClass])>*/;
2975 for(;;) {
2976 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
2977 if(!var4) break;
2978 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
2979 var_mclass = var5;
2980 var6 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
2981 ((void (*)(val*))(var6->class->vft[COLOR_hash_collection__HashSet__init]))(var6) /* init on <var6:HashSet[MClass]>*/;
2982 CHECK_NEW_hash_collection__HashSet(var6);
2983 var_parents = var6;
2984 var7 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__mmodule]))(self) /* mmodule on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2985 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var7) /* flatten_mclass_hierarchy on <var7:MModule>*/;
2986 var9 = ((short int (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__Collection__has]))(var8, var_mclass) /* has on <var8:POSet[MClass]>*/;
2987 if (var9){
2988 var10 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__mmodule]))(self) /* mmodule on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2989 var11 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var10) /* in_hierarchy on <var_mclass:MClass>*/;
2990 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_poset__POSetElement__direct_greaters]))(var11) /* direct_greaters on <var11:POSetElement[MClass]>*/;
2991 ((void (*)(val*, val*))(var_parents->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_parents, var12) /* add_all on <var_parents:HashSet[MClass]>*/;
2992 } else {
2993 }
2994 var13 = ((val* (*)(val*, val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_elements, var_mclass) /* [] on <var_elements:Map[MClass, Set[PropertyLayoutElement]]>*/;
2995 var14 = 0;
2996 var15 = ((long (*)(val*, long, val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__max_color]))(self, var14, var_parents, var_elements) /* max_color on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2997 ((void (*)(val*, val*, long))(self->class->vft[COLOR_layout_builders__MPropertyColorer__colorize_elements]))(self, var13, var15) /* colorize_elements on <self:MPropertyColorer[PropertyLayoutElement]>*/;
2998 CONTINUE_label: (void)0;
2999 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
3000 }
3001 BREAK_label: (void)0;
3002 RET_LABEL:;
3003 }
3004 /* method layout_builders#MPropertyColorer#colorize_crown for (self: Object, Map[MClass, Set[PropertyLayoutElement]]) */
3005 void VIRTUAL_layout_builders__MPropertyColorer__colorize_crown(val* self, val* p0) {
3006 layout_builders__MPropertyColorer__colorize_crown(self, p0);
3007 RET_LABEL:;
3008 }
3009 /* method layout_builders#MPropertyColorer#colorize_elements for (self: MPropertyColorer[PropertyLayoutElement], Collection[PropertyLayoutElement], Int) */
3010 void layout_builders__MPropertyColorer__colorize_elements(val* self, val* p0, long p1) {
3011 short int var /* : Bool */;
3012 int cltype;
3013 int idtype;
3014 const struct type* type_struct;
3015 val* var_elements /* var elements: Collection[PropertyLayoutElement] */;
3016 long var_start_color /* var start_color: Int */;
3017 val* var1 /* : Iterator[nullable Object] */;
3018 short int var2 /* : Bool */;
3019 val* var3 /* : nullable Object */;
3020 val* var_element /* var element: PropertyLayoutElement */;
3021 val* var4 /* : Map[PropertyLayoutElement, Int] */;
3022 short int var5 /* : Bool */;
3023 val* var6 /* : Map[PropertyLayoutElement, Int] */;
3024 val* var7 /* : nullable Object */;
3025 long var8 /* : Int */;
3026 long var9 /* : Int */;
3027 long var11 /* : Int */;
3028 /* Covariant cast for argument 0 (elements) <p0:Collection[PropertyLayoutElement]> isa Collection[MPropertyColorer#0] */
3029 /* <p0:Collection[PropertyLayoutElement]> isa Collection[MPropertyColorer#0] */
3030 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectionlayout_builders__MPropertyColorer_FT0];
3031 cltype = type_struct->color;
3032 idtype = type_struct->id;
3033 if(cltype >= p0->type->table_size) {
3034 var = 0;
3035 } else {
3036 var = p0->type->type_table[cltype] == idtype;
3037 }
3038 if (!var) {
3039 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 442);
3040 exit(1);
3041 }
3042 var_elements = p0;
3043 var_start_color = p1;
3044 var1 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_elements) /* iterator on <var_elements:Collection[PropertyLayoutElement]>*/;
3045 for(;;) {
3046 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
3047 if(!var2) break;
3048 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
3049 var_element = var3;
3050 var4 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__coloration_result]))(self) /* coloration_result on <self:MPropertyColorer[PropertyLayoutElement]>*/;
3051 var5 = ((short int (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var4, var_element) /* has_key on <var4:Map[PropertyLayoutElement, Int]>*/;
3052 if (var5){
3053 goto CONTINUE_label;
3054 } else {
3055 }
3056 var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__coloration_result]))(self) /* coloration_result on <self:MPropertyColorer[PropertyLayoutElement]>*/;
3057 var7 = BOX_kernel__Int(var_start_color); /* autobox from Int to nullable Object */
3058 ((void (*)(val*, val*, val*))(var6->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var6, var_element, var7) /* []= on <var6:Map[PropertyLayoutElement, Int]>*/;
3059 var8 = 1;
3060 { /* Inline kernel#Int#+ (var_start_color,var8) */
3061 var11 = var_start_color + var8;
3062 var9 = var11;
3063 goto RET_LABEL10;
3064 RET_LABEL10:(void)0;
3065 }
3066 var_start_color = var9;
3067 CONTINUE_label: (void)0;
3068 ((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
3069 }
3070 BREAK_label: (void)0;
3071 RET_LABEL:;
3072 }
3073 /* method layout_builders#MPropertyColorer#colorize_elements for (self: Object, Collection[PropertyLayoutElement], Int) */
3074 void VIRTUAL_layout_builders__MPropertyColorer__colorize_elements(val* self, val* p0, long p1) {
3075 layout_builders__MPropertyColorer__colorize_elements(self, p0, p1);
3076 RET_LABEL:;
3077 }
3078 /* method layout_builders#MPropertyColorer#max_color for (self: MPropertyColorer[PropertyLayoutElement], Int, Collection[MClass], Map[MClass, Set[PropertyLayoutElement]]): Int */
3079 long layout_builders__MPropertyColorer__max_color(val* self, long p0, val* p1, val* p2) {
3080 long var /* : Int */;
3081 short int var1 /* : Bool */;
3082 int cltype;
3083 int idtype;
3084 const struct type* type_struct;
3085 long var_min_color /* var min_color: Int */;
3086 val* var_mclasses /* var mclasses: Collection[MClass] */;
3087 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
3088 long var_max_color /* var max_color: Int */;
3089 val* var2 /* : Iterator[nullable Object] */;
3090 short int var3 /* : Bool */;
3091 val* var4 /* : nullable Object */;
3092 val* var_mclass /* var mclass: MClass */;
3093 val* var5 /* : nullable Object */;
3094 val* var6 /* : Iterator[nullable Object] */;
3095 short int var7 /* : Bool */;
3096 val* var8 /* : nullable Object */;
3097 val* var_mproperty /* var mproperty: PropertyLayoutElement */;
3098 long var_color /* var color: Int */;
3099 val* var9 /* : Map[PropertyLayoutElement, Int] */;
3100 short int var10 /* : Bool */;
3101 val* var11 /* : Map[PropertyLayoutElement, Int] */;
3102 val* var12 /* : nullable Object */;
3103 long var13 /* : Int */;
3104 short int var14 /* : Bool */;
3105 short int var16 /* : Bool */;
3106 int cltype17;
3107 int idtype18;
3108 short int var19 /* : Bool */;
3109 long var20 /* : Int */;
3110 long var21 /* : Int */;
3111 long var23 /* : Int */;
3112 /* Covariant cast for argument 2 (elements) <p2:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
3113 /* <p2:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[MPropertyColorer#0]] */
3114 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__MPropertyColorer_FT0];
3115 cltype = type_struct->color;
3116 idtype = type_struct->id;
3117 if(cltype >= p2->type->table_size) {
3118 var1 = 0;
3119 } else {
3120 var1 = p2->type->type_table[cltype] == idtype;
3121 }
3122 if (!var1) {
3123 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 451);
3124 exit(1);
3125 }
3126 var_min_color = p0;
3127 var_mclasses = p1;
3128 var_elements = p2;
3129 var_max_color = var_min_color;
3130 var2 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Collection[MClass]>*/;
3131 for(;;) {
3132 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
3133 if(!var3) break;
3134 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
3135 var_mclass = var4;
3136 var5 = ((val* (*)(val*, val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_elements, var_mclass) /* [] on <var_elements:Map[MClass, Set[PropertyLayoutElement]]>*/;
3137 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__iterator]))(var5) /* iterator on <var5:nullable Object(Set[PropertyLayoutElement])>*/;
3138 for(;;) {
3139 var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[nullable Object]>*/;
3140 if(!var7) break;
3141 var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[nullable Object]>*/;
3142 var_mproperty = var8;
3143 var_color = var_min_color;
3144 var9 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__coloration_result]))(self) /* coloration_result on <self:MPropertyColorer[PropertyLayoutElement]>*/;
3145 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var9, var_mproperty) /* has_key on <var9:Map[PropertyLayoutElement, Int]>*/;
3146 if (var10){
3147 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyColorer__coloration_result]))(self) /* coloration_result on <self:MPropertyColorer[PropertyLayoutElement]>*/;
3148 var12 = ((val* (*)(val*, val*))(var11->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var11, var_mproperty) /* [] on <var11:Map[PropertyLayoutElement, Int]>*/;
3149 var13 = ((struct instance_kernel__Int*)var12)->value; /* autounbox from nullable Object to Int */;
3150 var_color = var13;
3151 { /* Inline kernel#Int#>= (var_color,var_max_color) */
3152 /* Covariant cast for argument 0 (i) <var_max_color:Int> isa OTHER */
3153 /* <var_max_color:Int> isa OTHER */
3154 var16 = 1; /* easy <var_max_color:Int> isa OTHER*/
3155 if (!var16) {
3156 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
3157 exit(1);
3158 }
3159 var19 = var_color >= var_max_color;
3160 var14 = var19;
3161 goto RET_LABEL15;
3162 RET_LABEL15:(void)0;
3163 }
3164 if (var14){
3165 var20 = 1;
3166 { /* Inline kernel#Int#+ (var_color,var20) */
3167 var23 = var_color + var20;
3168 var21 = var23;
3169 goto RET_LABEL22;
3170 RET_LABEL22:(void)0;
3171 }
3172 var_max_color = var21;
3173 } else {
3174 }
3175 } else {
3176 }
3177 CONTINUE_label: (void)0;
3178 ((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
3179 }
3180 BREAK_label: (void)0;
3181 CONTINUE_label24: (void)0;
3182 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
3183 }
3184 BREAK_label24: (void)0;
3185 var = var_max_color;
3186 goto RET_LABEL;
3187 RET_LABEL:;
3188 return var;
3189 }
3190 /* method layout_builders#MPropertyColorer#max_color for (self: Object, Int, Collection[MClass], Map[MClass, Set[PropertyLayoutElement]]): Int */
3191 long VIRTUAL_layout_builders__MPropertyColorer__max_color(val* self, long p0, val* p1, val* p2) {
3192 long var /* : Int */;
3193 long var1 /* : Int */;
3194 var1 = layout_builders__MPropertyColorer__max_color(self, p0, p1, p2);
3195 var = var1;
3196 RET_LABEL:;
3197 return var;
3198 }
3199 /* method layout_builders#ResolutionColorer#coloration_result for (self: ResolutionColorer): Map[MType, Int] */
3200 val* layout_builders__ResolutionColorer__coloration_result(val* self) {
3201 val* var /* : Map[MType, Int] */;
3202 val* var1 /* : Map[MType, Int] */;
3203 var1 = self->attrs[COLOR_layout_builders__ResolutionColorer___64dcoloration_result].val; /* @coloration_result on <self:ResolutionColorer> */
3204 if (var1 == NULL) {
3205 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @coloration_result", "src/layout_builders.nit", 471);
3206 exit(1);
3207 }
3208 var = var1;
3209 RET_LABEL:;
3210 return var;
3211 }
3212 /* method layout_builders#ResolutionColorer#coloration_result for (self: Object): Map[MType, Int] */
3213 val* VIRTUAL_layout_builders__ResolutionColorer__coloration_result(val* self) {
3214 val* var /* : Map[MType, Int] */;
3215 val* var1 /* : Map[MType, Int] */;
3216 var1 = layout_builders__ResolutionColorer__coloration_result(self);
3217 var = var1;
3218 RET_LABEL:;
3219 return var;
3220 }
3221 /* method layout_builders#ResolutionColorer#coloration_result= for (self: ResolutionColorer, Map[MType, Int]) */
3222 void layout_builders__ResolutionColorer__coloration_result_61d(val* self, val* p0) {
3223 self->attrs[COLOR_layout_builders__ResolutionColorer___64dcoloration_result].val = p0; /* @coloration_result on <self:ResolutionColorer> */
3224 RET_LABEL:;
3225 }
3226 /* method layout_builders#ResolutionColorer#coloration_result= for (self: Object, Map[MType, Int]) */
3227 void VIRTUAL_layout_builders__ResolutionColorer__coloration_result_61d(val* self, val* p0) {
3228 layout_builders__ResolutionColorer__coloration_result_61d(self, p0);
3229 RET_LABEL:;
3230 }
3231 /* method layout_builders#ResolutionColorer#init for (self: ResolutionColorer) */
3232 void layout_builders__ResolutionColorer__init(val* self) {
3233 RET_LABEL:;
3234 }
3235 /* method layout_builders#ResolutionColorer#init for (self: Object) */
3236 void VIRTUAL_layout_builders__ResolutionColorer__init(val* self) {
3237 layout_builders__ResolutionColorer__init(self);
3238 RET_LABEL:;
3239 }
3240 /* method layout_builders#ResolutionColorer#build_layout for (self: ResolutionColorer, Map[MClassType, Set[MType]]): Layout[MType] */
3241 val* layout_builders__ResolutionColorer__build_layout(val* self, val* p0) {
3242 val* var /* : Layout[MType] */;
3243 val* var_elements /* var elements: Map[MClassType, Set[MType]] */;
3244 val* var1 /* : Layout[MType] */;
3245 val* var_result /* var result: Layout[MType] */;
3246 val* var2 /* : Map[MType, Int] */;
3247 val* var3 /* : Map[MType, Int] */;
3248 var_elements = p0;
3249 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__build_conflicts_graph]))(self, var_elements) /* build_conflicts_graph on <self:ResolutionColorer>*/;
3250 var1 = NEW_layout_builders__Layout(&type_layout_builders__Layoutmodel__MType);
3251 ((void (*)(val*))(var1->class->vft[COLOR_layout_builders__Layout__init]))(var1) /* init on <var1:Layout[MType]>*/;
3252 CHECK_NEW_layout_builders__Layout(var1);
3253 var_result = var1;
3254 var2 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__compute_ids]))(self, var_elements) /* compute_ids on <self:ResolutionColorer>*/;
3255 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids_61d]))(var_result, var2) /* ids= on <var_result:Layout[MType]>*/;
3256 var3 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__colorize_elements]))(self, var_elements) /* colorize_elements on <self:ResolutionColorer>*/;
3257 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__pos_61d]))(var_result, var3) /* pos= on <var_result:Layout[MType]>*/;
3258 var = var_result;
3259 goto RET_LABEL;
3260 RET_LABEL:;
3261 return var;
3262 }
3263 /* method layout_builders#ResolutionColorer#build_layout for (self: Object, Map[MClassType, Set[MType]]): Layout[MType] */
3264 val* VIRTUAL_layout_builders__ResolutionColorer__build_layout(val* self, val* p0) {
3265 val* var /* : Layout[MType] */;
3266 val* var1 /* : Layout[MType] */;
3267 var1 = layout_builders__ResolutionColorer__build_layout(self, p0);
3268 var = var1;
3269 RET_LABEL:;
3270 return var;
3271 }
3272 /* method layout_builders#ResolutionColorer#compute_ids for (self: ResolutionColorer, Map[MClassType, Set[MType]]): Map[MType, Int] */
3273 val* layout_builders__ResolutionColorer__compute_ids(val* self, val* p0) {
3274 val* var /* : Map[MType, Int] */;
3275 val* var_elements /* var elements: Map[MClassType, Set[MType]] */;
3276 val* var1 /* : HashMap[MType, Int] */;
3277 val* var_ids /* var ids: HashMap[MType, Int] */;
3278 long var2 /* : Int */;
3279 long var_color /* var color: Int */;
3280 val* var3 /* : MapIterator[Object, nullable Object] */;
3281 short int var4 /* : Bool */;
3282 val* var5 /* : Object */;
3283 val* var_mclasstype /* var mclasstype: MClassType */;
3284 val* var6 /* : nullable Object */;
3285 val* var_mclasstypes /* var mclasstypes: Set[MType] */;
3286 val* var7 /* : Iterator[nullable Object] */;
3287 short int var8 /* : Bool */;
3288 val* var9 /* : nullable Object */;
3289 val* var_element /* var element: MType */;
3290 short int var10 /* : Bool */;
3291 val* var11 /* : nullable Object */;
3292 long var12 /* : Int */;
3293 long var13 /* : Int */;
3294 long var15 /* : Int */;
3295 var_elements = p0;
3296 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypekernel__Int);
3297 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MType, Int]>*/;
3298 CHECK_NEW_hash_collection__HashMap(var1);
3299 var_ids = var1;
3300 var2 = 0;
3301 var_color = var2;
3302 var3 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_elements) /* iterator on <var_elements:Map[MClassType, Set[MType]]>*/;
3303 for(;;) {
3304 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var3) /* is_ok on <var3:MapIterator[Object, nullable Object]>*/;
3305 if(!var4) break;
3306 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__key]))(var3) /* key on <var3:MapIterator[Object, nullable Object]>*/;
3307 var_mclasstype = var5;
3308 var6 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__item]))(var3) /* item on <var3:MapIterator[Object, nullable Object]>*/;
3309 var_mclasstypes = var6;
3310 var7 = ((val* (*)(val*))(var_mclasstypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasstypes) /* iterator on <var_mclasstypes:Set[MType]>*/;
3311 for(;;) {
3312 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
3313 if(!var8) break;
3314 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
3315 var_element = var9;
3316 var10 = ((short int (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var_ids, var_element) /* has_key on <var_ids:HashMap[MType, Int]>*/;
3317 if (var10){
3318 goto CONTINUE_label;
3319 } else {
3320 }
3321 var11 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
3322 ((void (*)(val*, val*, val*))(var_ids->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_ids, var_element, var11) /* []= on <var_ids:HashMap[MType, Int]>*/;
3323 var12 = 1;
3324 { /* Inline kernel#Int#+ (var_color,var12) */
3325 var15 = var_color + var12;
3326 var13 = var15;
3327 goto RET_LABEL14;
3328 RET_LABEL14:(void)0;
3329 }
3330 var_color = var13;
3331 CONTINUE_label: (void)0;
3332 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
3333 }
3334 BREAK_label: (void)0;
3335 CONTINUE_label16: (void)0;
3336 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__MapIterator__next]))(var3) /* next on <var3:MapIterator[Object, nullable Object]>*/;
3337 }
3338 BREAK_label16: (void)0;
3339 var = var_ids;
3340 goto RET_LABEL;
3341 RET_LABEL:;
3342 return var;
3343 }
3344 /* method layout_builders#ResolutionColorer#compute_ids for (self: Object, Map[MClassType, Set[MType]]): Map[MType, Int] */
3345 val* VIRTUAL_layout_builders__ResolutionColorer__compute_ids(val* self, val* p0) {
3346 val* var /* : Map[MType, Int] */;
3347 val* var1 /* : Map[MType, Int] */;
3348 var1 = layout_builders__ResolutionColorer__compute_ids(self, p0);
3349 var = var1;
3350 RET_LABEL:;
3351 return var;
3352 }
3353 /* method layout_builders#ResolutionColorer#colorize_elements for (self: ResolutionColorer, Map[MClassType, Set[MType]]): Map[MType, Int] */
3354 val* layout_builders__ResolutionColorer__colorize_elements(val* self, val* p0) {
3355 val* var /* : Map[MType, Int] */;
3356 val* var_elements /* var elements: Map[MClassType, Set[MType]] */;
3357 long var1 /* : Int */;
3358 long var_min_color /* var min_color: Int */;
3359 val* var2 /* : MapIterator[Object, nullable Object] */;
3360 short int var3 /* : Bool */;
3361 val* var4 /* : Object */;
3362 val* var_mclasstype /* var mclasstype: MClassType */;
3363 val* var5 /* : nullable Object */;
3364 val* var_mclasstypes /* var mclasstypes: Set[MType] */;
3365 val* var6 /* : Iterator[nullable Object] */;
3366 short int var7 /* : Bool */;
3367 val* var8 /* : nullable Object */;
3368 val* var_element /* var element: MType */;
3369 val* var9 /* : Map[MType, Int] */;
3370 short int var10 /* : Bool */;
3371 long var_color /* var color: Int */;
3372 short int var11 /* : Bool */;
3373 short int var12 /* : Bool */;
3374 long var13 /* : Int */;
3375 long var14 /* : Int */;
3376 long var16 /* : Int */;
3377 val* var18 /* : Map[MType, Int] */;
3378 val* var19 /* : nullable Object */;
3379 val* var21 /* : Map[MType, Int] */;
3380 var_elements = p0;
3381 var1 = 0;
3382 var_min_color = var1;
3383 var2 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_elements) /* iterator on <var_elements:Map[MClassType, Set[MType]]>*/;
3384 for(;;) {
3385 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var2) /* is_ok on <var2:MapIterator[Object, nullable Object]>*/;
3386 if(!var3) break;
3387 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__MapIterator__key]))(var2) /* key on <var2:MapIterator[Object, nullable Object]>*/;
3388 var_mclasstype = var4;
3389 var5 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__MapIterator__item]))(var2) /* item on <var2:MapIterator[Object, nullable Object]>*/;
3390 var_mclasstypes = var5;
3391 var6 = ((val* (*)(val*))(var_mclasstypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasstypes) /* iterator on <var_mclasstypes:Set[MType]>*/;
3392 for(;;) {
3393 var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[nullable Object]>*/;
3394 if(!var7) break;
3395 var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[nullable Object]>*/;
3396 var_element = var8;
3397 var9 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__coloration_result]))(self) /* coloration_result on <self:ResolutionColorer>*/;
3398 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var9, var_element) /* has_key on <var9:Map[MType, Int]>*/;
3399 if (var10){
3400 goto CONTINUE_label;
3401 } else {
3402 }
3403 var_color = var_min_color;
3404 for(;;) {
3405 var11 = ((short int (*)(val*, val*, long))(self->class->vft[COLOR_layout_builders__ResolutionColorer__is_color_free]))(self, var_element, var_color) /* is_color_free on <self:ResolutionColorer>*/;
3406 var12 = !var11;
3407 if (!var12) break;
3408 var13 = 1;
3409 { /* Inline kernel#Int#+ (var_color,var13) */
3410 var16 = var_color + var13;
3411 var14 = var16;
3412 goto RET_LABEL15;
3413 RET_LABEL15:(void)0;
3414 }
3415 var_color = var14;
3416 CONTINUE_label17: (void)0;
3417 }
3418 BREAK_label17: (void)0;
3419 var18 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__coloration_result]))(self) /* coloration_result on <self:ResolutionColorer>*/;
3420 var19 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
3421 ((void (*)(val*, val*, val*))(var18->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var18, var_element, var19) /* []= on <var18:Map[MType, Int]>*/;
3422 var_color = var_min_color;
3423 CONTINUE_label: (void)0;
3424 ((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
3425 }
3426 BREAK_label: (void)0;
3427 CONTINUE_label20: (void)0;
3428 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__MapIterator__next]))(var2) /* next on <var2:MapIterator[Object, nullable Object]>*/;
3429 }
3430 BREAK_label20: (void)0;
3431 var21 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__coloration_result]))(self) /* coloration_result on <self:ResolutionColorer>*/;
3432 var = var21;
3433 goto RET_LABEL;
3434 RET_LABEL:;
3435 return var;
3436 }
3437 /* method layout_builders#ResolutionColorer#colorize_elements for (self: Object, Map[MClassType, Set[MType]]): Map[MType, Int] */
3438 val* VIRTUAL_layout_builders__ResolutionColorer__colorize_elements(val* self, val* p0) {
3439 val* var /* : Map[MType, Int] */;
3440 val* var1 /* : Map[MType, Int] */;
3441 var1 = layout_builders__ResolutionColorer__colorize_elements(self, p0);
3442 var = var1;
3443 RET_LABEL:;
3444 return var;
3445 }
3446 /* method layout_builders#ResolutionColorer#is_color_free for (self: ResolutionColorer, MType, Int): Bool */
3447 short int layout_builders__ResolutionColorer__is_color_free(val* self, val* p0, long p1) {
3448 short int var /* : Bool */;
3449 val* var_element /* var element: MType */;
3450 long var_color /* var color: Int */;
3451 val* var1 /* : Map[MType, Set[MType]] */;
3452 short int var2 /* : Bool */;
3453 val* var3 /* : Map[MType, Set[MType]] */;
3454 val* var4 /* : nullable Object */;
3455 val* var5 /* : Iterator[nullable Object] */;
3456 short int var6 /* : Bool */;
3457 val* var7 /* : nullable Object */;
3458 val* var_st /* var st: MType */;
3459 short int var8 /* : Bool */;
3460 val* var9 /* : Map[MType, Int] */;
3461 short int var10 /* : Bool */;
3462 short int var_ /* var : Bool */;
3463 val* var11 /* : Map[MType, Int] */;
3464 val* var12 /* : nullable Object */;
3465 short int var13 /* : Bool */;
3466 short int var15 /* : Bool */;
3467 long var16 /* : Int */;
3468 short int var17 /* : Bool */;
3469 short int var18 /* : Bool */;
3470 var_element = p0;
3471 var_color = p1;
3472 var1 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
3473 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var1, var_element) /* has_key on <var1:Map[MType, Set[MType]]>*/;
3474 if (var2){
3475 var3 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
3476 var4 = ((val* (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var3, var_element) /* [] on <var3:Map[MType, Set[MType]]>*/;
3477 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Collection__iterator]))(var4) /* iterator on <var4:nullable Object(Set[MType])>*/;
3478 for(;;) {
3479 var6 = ((short int (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var5) /* is_ok on <var5:Iterator[nullable Object]>*/;
3480 if(!var6) break;
3481 var7 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__item]))(var5) /* item on <var5:Iterator[nullable Object]>*/;
3482 var_st = var7;
3483 var9 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__coloration_result]))(self) /* coloration_result on <self:ResolutionColorer>*/;
3484 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var9, var_st) /* has_key on <var9:Map[MType, Int]>*/;
3485 var_ = var10;
3486 if (var10){
3487 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__coloration_result]))(self) /* coloration_result on <self:ResolutionColorer>*/;
3488 var12 = ((val* (*)(val*, val*))(var11->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var11, var_st) /* [] on <var11:Map[MType, Int]>*/;
3489 { /* Inline kernel#Int#== (var12,var_color) */
3490 var15 = (var12 != NULL) && (var12->class == &class_kernel__Int);
3491 if (var15) {
3492 var16 = ((struct instance_kernel__Int*)var12)->value; /* autounbox from nullable Object to Int */;
3493 var15 = (var16 == var_color);
3494 }
3495 var13 = var15;
3496 goto RET_LABEL14;
3497 RET_LABEL14:(void)0;
3498 }
3499 var8 = var13;
3500 } else {
3501 var8 = var_;
3502 }
3503 if (var8){
3504 var17 = 0;
3505 var = var17;
3506 goto RET_LABEL;
3507 } else {
3508 }
3509 CONTINUE_label: (void)0;
3510 ((void (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__next]))(var5) /* next on <var5:Iterator[nullable Object]>*/;
3511 }
3512 BREAK_label: (void)0;
3513 } else {
3514 }
3515 var18 = 1;
3516 var = var18;
3517 goto RET_LABEL;
3518 RET_LABEL:;
3519 return var;
3520 }
3521 /* method layout_builders#ResolutionColorer#is_color_free for (self: Object, MType, Int): Bool */
3522 short int VIRTUAL_layout_builders__ResolutionColorer__is_color_free(val* self, val* p0, long p1) {
3523 short int var /* : Bool */;
3524 short int var1 /* : Bool */;
3525 var1 = layout_builders__ResolutionColorer__is_color_free(self, p0, p1);
3526 var = var1;
3527 RET_LABEL:;
3528 return var;
3529 }
3530 /* method layout_builders#ResolutionColorer#build_conflicts_graph for (self: ResolutionColorer, Map[MClassType, Set[MType]]) */
3531 void layout_builders__ResolutionColorer__build_conflicts_graph(val* self, val* p0) {
3532 val* var_elements /* var elements: Map[MClassType, Set[MType]] */;
3533 val* var /* : MapIterator[Object, nullable Object] */;
3534 short int var1 /* : Bool */;
3535 val* var2 /* : Object */;
3536 val* var_mclasstype /* var mclasstype: MClassType */;
3537 val* var3 /* : nullable Object */;
3538 val* var_mtypes /* var mtypes: Set[MType] */;
3539 val* var4 /* : Iterator[nullable Object] */;
3540 short int var5 /* : Bool */;
3541 val* var6 /* : nullable Object */;
3542 val* var_mtype /* var mtype: MType */;
3543 val* var7 /* : Iterator[nullable Object] */;
3544 short int var8 /* : Bool */;
3545 val* var9 /* : nullable Object */;
3546 val* var_otype /* var otype: MType */;
3547 short int var10 /* : Bool */;
3548 var_elements = p0;
3549 var = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_elements) /* iterator on <var_elements:Map[MClassType, Set[MType]]>*/;
3550 for(;;) {
3551 var1 = ((short int (*)(val*))(var->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var) /* is_ok on <var:MapIterator[Object, nullable Object]>*/;
3552 if(!var1) break;
3553 var2 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_collection__MapIterator__key]))(var) /* key on <var:MapIterator[Object, nullable Object]>*/;
3554 var_mclasstype = var2;
3555 var3 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_collection__MapIterator__item]))(var) /* item on <var:MapIterator[Object, nullable Object]>*/;
3556 var_mtypes = var3;
3557 var4 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:Set[MType]>*/;
3558 for(;;) {
3559 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var4) /* is_ok on <var4:Iterator[nullable Object]>*/;
3560 if(!var5) break;
3561 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__item]))(var4) /* item on <var4:Iterator[nullable Object]>*/;
3562 var_mtype = var6;
3563 var7 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:Set[MType]>*/;
3564 for(;;) {
3565 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
3566 if(!var8) break;
3567 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
3568 var_otype = var9;
3569 var10 = ((short int (*)(val*, val*))(var_otype->class->vft[COLOR_kernel__Object___61d_61d]))(var_otype, var_mtype) /* == on <var_otype:MType>*/;
3570 if (var10){
3571 goto CONTINUE_label;
3572 } else {
3573 }
3574 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__add_conflict]))(self, var_mtype, var_otype) /* add_conflict on <self:ResolutionColorer>*/;
3575 CONTINUE_label: (void)0;
3576 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
3577 }
3578 BREAK_label: (void)0;
3579 CONTINUE_label11: (void)0;
3580 ((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__next]))(var4) /* next on <var4:Iterator[nullable Object]>*/;
3581 }
3582 BREAK_label11: (void)0;
3583 CONTINUE_label12: (void)0;
3584 ((void (*)(val*))(var->class->vft[COLOR_abstract_collection__MapIterator__next]))(var) /* next on <var:MapIterator[Object, nullable Object]>*/;
3585 }
3586 BREAK_label12: (void)0;
3587 RET_LABEL:;
3588 }
3589 /* method layout_builders#ResolutionColorer#build_conflicts_graph for (self: Object, Map[MClassType, Set[MType]]) */
3590 void VIRTUAL_layout_builders__ResolutionColorer__build_conflicts_graph(val* self, val* p0) {
3591 layout_builders__ResolutionColorer__build_conflicts_graph(self, p0);
3592 RET_LABEL:;
3593 }
3594 /* method layout_builders#ResolutionColorer#conflicts_graph for (self: ResolutionColorer): Map[MType, Set[MType]] */
3595 val* layout_builders__ResolutionColorer__conflicts_graph(val* self) {
3596 val* var /* : Map[MType, Set[MType]] */;
3597 val* var1 /* : Map[MType, Set[MType]] */;
3598 var1 = self->attrs[COLOR_layout_builders__ResolutionColorer___64dconflicts_graph].val; /* @conflicts_graph on <self:ResolutionColorer> */
3599 if (var1 == NULL) {
3600 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @conflicts_graph", "src/layout_builders.nit", 536);
3601 exit(1);
3602 }
3603 var = var1;
3604 RET_LABEL:;
3605 return var;
3606 }
3607 /* method layout_builders#ResolutionColorer#conflicts_graph for (self: Object): Map[MType, Set[MType]] */
3608 val* VIRTUAL_layout_builders__ResolutionColorer__conflicts_graph(val* self) {
3609 val* var /* : Map[MType, Set[MType]] */;
3610 val* var1 /* : Map[MType, Set[MType]] */;
3611 var1 = layout_builders__ResolutionColorer__conflicts_graph(self);
3612 var = var1;
3613 RET_LABEL:;
3614 return var;
3615 }
3616 /* method layout_builders#ResolutionColorer#conflicts_graph= for (self: ResolutionColorer, Map[MType, Set[MType]]) */
3617 void layout_builders__ResolutionColorer__conflicts_graph_61d(val* self, val* p0) {
3618 self->attrs[COLOR_layout_builders__ResolutionColorer___64dconflicts_graph].val = p0; /* @conflicts_graph on <self:ResolutionColorer> */
3619 RET_LABEL:;
3620 }
3621 /* method layout_builders#ResolutionColorer#conflicts_graph= for (self: Object, Map[MType, Set[MType]]) */
3622 void VIRTUAL_layout_builders__ResolutionColorer__conflicts_graph_61d(val* self, val* p0) {
3623 layout_builders__ResolutionColorer__conflicts_graph_61d(self, p0);
3624 RET_LABEL:;
3625 }
3626 /* method layout_builders#ResolutionColorer#add_conflict for (self: ResolutionColorer, MType, MType) */
3627 void layout_builders__ResolutionColorer__add_conflict(val* self, val* p0, val* p1) {
3628 val* var_mtype /* var mtype: MType */;
3629 val* var_otype /* var otype: MType */;
3630 short int var /* : Bool */;
3631 val* var1 /* : Map[MType, Set[MType]] */;
3632 short int var2 /* : Bool */;
3633 short int var3 /* : Bool */;
3634 val* var4 /* : Map[MType, Set[MType]] */;
3635 val* var5 /* : HashSet[MType] */;
3636 val* var6 /* : Map[MType, Set[MType]] */;
3637 val* var7 /* : nullable Object */;
3638 val* var8 /* : Map[MType, Set[MType]] */;
3639 short int var9 /* : Bool */;
3640 short int var10 /* : Bool */;
3641 val* var11 /* : Map[MType, Set[MType]] */;
3642 val* var12 /* : HashSet[MType] */;
3643 val* var13 /* : Map[MType, Set[MType]] */;
3644 val* var14 /* : nullable Object */;
3645 var_mtype = p0;
3646 var_otype = p1;
3647 var = ((short int (*)(val*, val*))(var_mtype->class->vft[COLOR_kernel__Object___61d_61d]))(var_mtype, var_otype) /* == on <var_mtype:MType>*/;
3648 if (var){
3649 goto RET_LABEL;
3650 } else {
3651 }
3652 var1 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
3653 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var1, var_mtype) /* has_key on <var1:Map[MType, Set[MType]]>*/;
3654 var3 = !var2;
3655 if (var3){
3656 var4 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
3657 var5 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
3658 ((void (*)(val*))(var5->class->vft[COLOR_hash_collection__HashSet__init]))(var5) /* init on <var5:HashSet[MType]>*/;
3659 CHECK_NEW_hash_collection__HashSet(var5);
3660 ((void (*)(val*, val*, val*))(var4->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var4, var_mtype, var5) /* []= on <var4:Map[MType, Set[MType]]>*/;
3661 } else {
3662 }
3663 var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
3664 var7 = ((val* (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var6, var_mtype) /* [] on <var6:Map[MType, Set[MType]]>*/;
3665 ((void (*)(val*, val*))(var7->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var7, var_otype) /* add on <var7:nullable Object(Set[MType])>*/;
3666 var8 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
3667 var9 = ((short int (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var8, var_otype) /* has_key on <var8:Map[MType, Set[MType]]>*/;
3668 var10 = !var9;
3669 if (var10){
3670 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
3671 var12 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MType);
3672 ((void (*)(val*))(var12->class->vft[COLOR_hash_collection__HashSet__init]))(var12) /* init on <var12:HashSet[MType]>*/;
3673 CHECK_NEW_hash_collection__HashSet(var12);
3674 ((void (*)(val*, val*, val*))(var11->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var11, var_otype, var12) /* []= on <var11:Map[MType, Set[MType]]>*/;
3675 } else {
3676 }
3677 var13 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__ResolutionColorer__conflicts_graph]))(self) /* conflicts_graph on <self:ResolutionColorer>*/;
3678 var14 = ((val* (*)(val*, val*))(var13->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var13, var_otype) /* [] on <var13:Map[MType, Set[MType]]>*/;
3679 ((void (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var14, var_mtype) /* add on <var14:nullable Object(Set[MType])>*/;
3680 RET_LABEL:;
3681 }
3682 /* method layout_builders#ResolutionColorer#add_conflict for (self: Object, MType, MType) */
3683 void VIRTUAL_layout_builders__ResolutionColorer__add_conflict(val* self, val* p0, val* p1) {
3684 layout_builders__ResolutionColorer__add_conflict(self, p0, p1);
3685 RET_LABEL:;
3686 }
3687 /* method layout_builders#PerfectHasher#operator for (self: PerfectHasher[Object, Object]): PHOperator */
3688 val* layout_builders__PerfectHasher__operator(val* self) {
3689 val* var /* : PHOperator */;
3690 val* var1 /* : PHOperator */;
3691 var1 = self->attrs[COLOR_layout_builders__PerfectHasher___64doperator].val; /* @operator on <self:PerfectHasher[Object, Object]> */
3692 if (var1 == NULL) {
3693 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @operator", "src/layout_builders.nit", 552);
3694 exit(1);
3695 }
3696 var = var1;
3697 RET_LABEL:;
3698 return var;
3699 }
3700 /* method layout_builders#PerfectHasher#operator for (self: Object): PHOperator */
3701 val* VIRTUAL_layout_builders__PerfectHasher__operator(val* self) {
3702 val* var /* : PHOperator */;
3703 val* var1 /* : PHOperator */;
3704 var1 = layout_builders__PerfectHasher__operator(self);
3705 var = var1;
3706 RET_LABEL:;
3707 return var;
3708 }
3709 /* method layout_builders#PerfectHasher#operator= for (self: PerfectHasher[Object, Object], PHOperator) */
3710 void layout_builders__PerfectHasher__operator_61d(val* self, val* p0) {
3711 self->attrs[COLOR_layout_builders__PerfectHasher___64doperator].val = p0; /* @operator on <self:PerfectHasher[Object, Object]> */
3712 RET_LABEL:;
3713 }
3714 /* method layout_builders#PerfectHasher#operator= for (self: Object, PHOperator) */
3715 void VIRTUAL_layout_builders__PerfectHasher__operator_61d(val* self, val* p0) {
3716 layout_builders__PerfectHasher__operator_61d(self, p0);
3717 RET_LABEL:;
3718 }
3719 /* method layout_builders#PerfectHasher#init for (self: PerfectHasher[Object, Object]) */
3720 void layout_builders__PerfectHasher__init(val* self) {
3721 RET_LABEL:;
3722 }
3723 /* method layout_builders#PerfectHasher#init for (self: Object) */
3724 void VIRTUAL_layout_builders__PerfectHasher__init(val* self) {
3725 layout_builders__PerfectHasher__init(self);
3726 RET_LABEL:;
3727 }
3728 /* method layout_builders#PerfectHasher#compute_masks for (self: PerfectHasher[Object, Object], Map[Object, Set[Object]], Map[Object, Int]): Map[Object, Int] */
3729 val* layout_builders__PerfectHasher__compute_masks(val* self, val* p0, val* p1) {
3730 val* var /* : Map[Object, Int] */;
3731 short int var1 /* : Bool */;
3732 int cltype;
3733 int idtype;
3734 const struct type* type_struct;
3735 short int var2 /* : Bool */;
3736 int cltype3;
3737 int idtype4;
3738 const struct type* type_struct5;
3739 val* var_conflicts /* var conflicts: Map[Object, Set[Object]] */;
3740 val* var_ids /* var ids: Map[Object, Int] */;
3741 val* var6 /* : HashMap[Object, Int] */;
3742 val* var_masks /* var masks: HashMap[Object, Int] */;
3743 val* var7 /* : MapIterator[Object, nullable Object] */;
3744 short int var8 /* : Bool */;
3745 val* var9 /* : Object */;
3746 val* var_mclasstype /* var mclasstype: Object */;
3747 val* var10 /* : nullable Object */;
3748 val* var_mtypes /* var mtypes: Set[Object] */;
3749 long var11 /* : Int */;
3750 val* var12 /* : nullable Object */;
3751 /* Covariant cast for argument 0 (conflicts) <p0:Map[Object, Set[Object]]> isa Map[PerfectHasher#0, Set[PerfectHasher#1]] */
3752 /* <p0:Map[Object, Set[Object]]> isa Map[PerfectHasher#0, Set[PerfectHasher#1]] */
3753 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT0abstract_collection__Setlayout_builders__PerfectHasher_FT1];
3754 cltype = type_struct->color;
3755 idtype = type_struct->id;
3756 if(cltype >= p0->type->table_size) {
3757 var1 = 0;
3758 } else {
3759 var1 = p0->type->type_table[cltype] == idtype;
3760 }
3761 if (!var1) {
3762 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 556);
3763 exit(1);
3764 }
3765 /* Covariant cast for argument 1 (ids) <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
3766 /* <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
3767 type_struct5 = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT1kernel__Int];
3768 cltype3 = type_struct5->color;
3769 idtype4 = type_struct5->id;
3770 if(cltype3 >= p1->type->table_size) {
3771 var2 = 0;
3772 } else {
3773 var2 = p1->type->type_table[cltype3] == idtype4;
3774 }
3775 if (!var2) {
3776 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 556);
3777 exit(1);
3778 }
3779 var_conflicts = p0;
3780 var_ids = p1;
3781 var6 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__PerfectHasher_FT0kernel__Int]);
3782 ((void (*)(val*))(var6->class->vft[COLOR_hash_collection__HashMap__init]))(var6) /* init on <var6:HashMap[Object, Int]>*/;
3783 CHECK_NEW_hash_collection__HashMap(var6);
3784 var_masks = var6;
3785 var7 = ((val* (*)(val*))(var_conflicts->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_conflicts) /* iterator on <var_conflicts:Map[Object, Set[Object]]>*/;
3786 for(;;) {
3787 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var7) /* is_ok on <var7:MapIterator[Object, nullable Object]>*/;
3788 if(!var8) break;
3789 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapIterator__key]))(var7) /* key on <var7:MapIterator[Object, nullable Object]>*/;
3790 var_mclasstype = var9;
3791 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapIterator__item]))(var7) /* item on <var7:MapIterator[Object, nullable Object]>*/;
3792 var_mtypes = var10;
3793 var11 = ((long (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__compute_mask]))(self, var_mtypes, var_ids) /* compute_mask on <self:PerfectHasher[Object, Object]>*/;
3794 var12 = BOX_kernel__Int(var11); /* autobox from Int to nullable Object */
3795 ((void (*)(val*, val*, val*))(var_masks->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_masks, var_mclasstype, var12) /* []= on <var_masks:HashMap[Object, Int]>*/;
3796 CONTINUE_label: (void)0;
3797 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapIterator__next]))(var7) /* next on <var7:MapIterator[Object, nullable Object]>*/;
3798 }
3799 BREAK_label: (void)0;
3800 var = var_masks;
3801 goto RET_LABEL;
3802 RET_LABEL:;
3803 return var;
3804 }
3805 /* method layout_builders#PerfectHasher#compute_masks for (self: Object, Map[Object, Set[Object]], Map[Object, Int]): Map[Object, Int] */
3806 val* VIRTUAL_layout_builders__PerfectHasher__compute_masks(val* self, val* p0, val* p1) {
3807 val* var /* : Map[Object, Int] */;
3808 val* var1 /* : Map[Object, Int] */;
3809 var1 = layout_builders__PerfectHasher__compute_masks(self, p0, p1);
3810 var = var1;
3811 RET_LABEL:;
3812 return var;
3813 }
3814 /* method layout_builders#PerfectHasher#compute_mask for (self: PerfectHasher[Object, Object], Set[Object], Map[Object, Int]): Int */
3815 long layout_builders__PerfectHasher__compute_mask(val* self, val* p0, val* p1) {
3816 long var /* : Int */;
3817 short int var1 /* : Bool */;
3818 int cltype;
3819 int idtype;
3820 const struct type* type_struct;
3821 short int var2 /* : Bool */;
3822 int cltype3;
3823 int idtype4;
3824 const struct type* type_struct5;
3825 val* var_mtypes /* var mtypes: Set[Object] */;
3826 val* var_ids /* var ids: Map[Object, Int] */;
3827 long var6 /* : Int */;
3828 long var_mask /* var mask: Int */;
3829 val* var7 /* : List[Int] */;
3830 val* var_used /* var used: List[Int] */;
3831 val* var8 /* : Iterator[nullable Object] */;
3832 short int var9 /* : Bool */;
3833 val* var10 /* : nullable Object */;
3834 val* var_mtype /* var mtype: Object */;
3835 val* var11 /* : PHOperator */;
3836 val* var12 /* : nullable Object */;
3837 long var13 /* : Int */;
3838 long var14 /* : Int */;
3839 long var_res /* var res: Int */;
3840 short int var15 /* : Bool */;
3841 val* var16 /* : nullable Object */;
3842 val* var17 /* : nullable Object */;
3843 long var18 /* : Int */;
3844 long var19 /* : Int */;
3845 short int var20 /* : Bool */;
3846 short int var22 /* : Bool */;
3847 long var24 /* : Int */;
3848 long var25 /* : Int */;
3849 long var27 /* : Int */;
3850 /* Covariant cast for argument 0 (mtypes) <p0:Set[Object]> isa Set[PerfectHasher#1] */
3851 /* <p0:Set[Object]> isa Set[PerfectHasher#1] */
3852 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__PerfectHasher_FT1];
3853 cltype = type_struct->color;
3854 idtype = type_struct->id;
3855 if(cltype >= p0->type->table_size) {
3856 var1 = 0;
3857 } else {
3858 var1 = p0->type->type_table[cltype] == idtype;
3859 }
3860 if (!var1) {
3861 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 565);
3862 exit(1);
3863 }
3864 /* Covariant cast for argument 1 (ids) <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
3865 /* <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
3866 type_struct5 = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT1kernel__Int];
3867 cltype3 = type_struct5->color;
3868 idtype4 = type_struct5->id;
3869 if(cltype3 >= p1->type->table_size) {
3870 var2 = 0;
3871 } else {
3872 var2 = p1->type->type_table[cltype3] == idtype4;
3873 }
3874 if (!var2) {
3875 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 565);
3876 exit(1);
3877 }
3878 var_mtypes = p0;
3879 var_ids = p1;
3880 var6 = 0;
3881 var_mask = var6;
3882 for(;;) {
3883 var7 = NEW_list__List(&type_list__Listkernel__Int);
3884 ((void (*)(val*))(var7->class->vft[COLOR_list__List__init]))(var7) /* init on <var7:List[Int]>*/;
3885 CHECK_NEW_list__List(var7);
3886 var_used = var7;
3887 var8 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:Set[Object]>*/;
3888 for(;;) {
3889 var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var8) /* is_ok on <var8:Iterator[nullable Object]>*/;
3890 if(!var9) break;
3891 var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__item]))(var8) /* item on <var8:Iterator[nullable Object]>*/;
3892 var_mtype = var10;
3893 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__operator]))(self) /* operator on <self:PerfectHasher[Object, Object]>*/;
3894 var12 = ((val* (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_ids, var_mtype) /* [] on <var_ids:Map[Object, Int]>*/;
3895 var14 = ((struct instance_kernel__Int*)var12)->value; /* autounbox from nullable Object to Int */;
3896 var13 = ((long (*)(val*, long, long))(var11->class->vft[COLOR_layout_builders__PHOperator__op]))(var11, var_mask, var14) /* op on <var11:PHOperator>*/;
3897 var_res = var13;
3898 var16 = BOX_kernel__Int(var_res); /* autobox from Int to nullable Object */
3899 var15 = ((short int (*)(val*, val*))(var_used->class->vft[COLOR_abstract_collection__Collection__has]))(var_used, var16) /* has on <var_used:List[Int]>*/;
3900 if (var15){
3901 goto BREAK_label;
3902 } else {
3903 var17 = BOX_kernel__Int(var_res); /* autobox from Int to nullable Object */
3904 ((void (*)(val*, val*))(var_used->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_used, var17) /* add on <var_used:List[Int]>*/;
3905 }
3906 CONTINUE_label: (void)0;
3907 ((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
3908 }
3909 BREAK_label: (void)0;
3910 var18 = ((long (*)(val*))(var_used->class->vft[COLOR_abstract_collection__Collection__length]))(var_used) /* length on <var_used:List[Int]>*/;
3911 var19 = ((long (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__length]))(var_mtypes) /* length on <var_mtypes:Set[Object]>*/;
3912 { /* Inline kernel#Int#== (var18,var19) */
3913 var22 = var18 == var19;
3914 var20 = var22;
3915 goto RET_LABEL21;
3916 RET_LABEL21:(void)0;
3917 }
3918 if (var20){
3919 goto BREAK_label23;
3920 } else {
3921 }
3922 var24 = 1;
3923 { /* Inline kernel#Int#+ (var_mask,var24) */
3924 var27 = var_mask + var24;
3925 var25 = var27;
3926 goto RET_LABEL26;
3927 RET_LABEL26:(void)0;
3928 }
3929 var_mask = var25;
3930 CONTINUE_label23: (void)0;
3931 }
3932 BREAK_label23: (void)0;
3933 var = var_mask;
3934 goto RET_LABEL;
3935 RET_LABEL:;
3936 return var;
3937 }
3938 /* method layout_builders#PerfectHasher#compute_mask for (self: Object, Set[Object], Map[Object, Int]): Int */
3939 long VIRTUAL_layout_builders__PerfectHasher__compute_mask(val* self, val* p0, val* p1) {
3940 long var /* : Int */;
3941 long var1 /* : Int */;
3942 var1 = layout_builders__PerfectHasher__compute_mask(self, p0, p1);
3943 var = var1;
3944 RET_LABEL:;
3945 return var;
3946 }
3947 /* method layout_builders#PerfectHasher#compute_hashes for (self: PerfectHasher[Object, Object], Map[Object, Set[Object]], Map[Object, Int], Map[Object, Int]): Map[Object, Map[Object, Int]] */
3948 val* layout_builders__PerfectHasher__compute_hashes(val* self, val* p0, val* p1, val* p2) {
3949 val* var /* : Map[Object, Map[Object, Int]] */;
3950 short int var1 /* : Bool */;
3951 int cltype;
3952 int idtype;
3953 const struct type* type_struct;
3954 short int var2 /* : Bool */;
3955 int cltype3;
3956 int idtype4;
3957 const struct type* type_struct5;
3958 short int var6 /* : Bool */;
3959 int cltype7;
3960 int idtype8;
3961 const struct type* type_struct9;
3962 val* var_elements /* var elements: Map[Object, Set[Object]] */;
3963 val* var_ids /* var ids: Map[Object, Int] */;
3964 val* var_masks /* var masks: Map[Object, Int] */;
3965 val* var10 /* : HashMap[Object, Map[Object, Int]] */;
3966 val* var_hashes /* var hashes: HashMap[Object, Map[Object, Int]] */;
3967 val* var11 /* : MapIterator[Object, nullable Object] */;
3968 short int var12 /* : Bool */;
3969 val* var13 /* : Object */;
3970 val* var_mclasstype /* var mclasstype: Object */;
3971 val* var14 /* : nullable Object */;
3972 val* var_mtypes /* var mtypes: Set[Object] */;
3973 val* var15 /* : nullable Object */;
3974 long var16 /* : Int */;
3975 long var_mask /* var mask: Int */;
3976 val* var17 /* : HashMap[Object, Int] */;
3977 val* var_inhashes /* var inhashes: HashMap[Object, Int] */;
3978 val* var18 /* : Iterator[nullable Object] */;
3979 short int var19 /* : Bool */;
3980 val* var20 /* : nullable Object */;
3981 val* var_mtype /* var mtype: Object */;
3982 val* var21 /* : PHOperator */;
3983 val* var22 /* : nullable Object */;
3984 long var23 /* : Int */;
3985 long var24 /* : Int */;
3986 val* var25 /* : nullable Object */;
3987 /* Covariant cast for argument 0 (elements) <p0:Map[Object, Set[Object]]> isa Map[PerfectHasher#0, Set[PerfectHasher#1]] */
3988 /* <p0:Map[Object, Set[Object]]> isa Map[PerfectHasher#0, Set[PerfectHasher#1]] */
3989 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT0abstract_collection__Setlayout_builders__PerfectHasher_FT1];
3990 cltype = type_struct->color;
3991 idtype = type_struct->id;
3992 if(cltype >= p0->type->table_size) {
3993 var1 = 0;
3994 } else {
3995 var1 = p0->type->type_table[cltype] == idtype;
3996 }
3997 if (!var1) {
3998 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 583);
3999 exit(1);
4000 }
4001 /* Covariant cast for argument 1 (ids) <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
4002 /* <p1:Map[Object, Int]> isa Map[PerfectHasher#1, Int] */
4003 type_struct5 = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT1kernel__Int];
4004 cltype3 = type_struct5->color;
4005 idtype4 = type_struct5->id;
4006 if(cltype3 >= p1->type->table_size) {
4007 var2 = 0;
4008 } else {
4009 var2 = p1->type->type_table[cltype3] == idtype4;
4010 }
4011 if (!var2) {
4012 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 583);
4013 exit(1);
4014 }
4015 /* Covariant cast for argument 2 (masks) <p2:Map[Object, Int]> isa Map[PerfectHasher#0, Int] */
4016 /* <p2:Map[Object, Int]> isa Map[PerfectHasher#0, Int] */
4017 type_struct9 = self->type->resolution_table->types[COLOR_abstract_collection__Maplayout_builders__PerfectHasher_FT0kernel__Int];
4018 cltype7 = type_struct9->color;
4019 idtype8 = type_struct9->id;
4020 if(cltype7 >= p2->type->table_size) {
4021 var6 = 0;
4022 } else {
4023 var6 = p2->type->type_table[cltype7] == idtype8;
4024 }
4025 if (!var6) {
4026 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 583);
4027 exit(1);
4028 }
4029 var_elements = p0;
4030 var_ids = p1;
4031 var_masks = p2;
4032 var10 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__PerfectHasher_FT0abstract_collection__Maplayout_builders__PerfectHasher_FT1kernel__Int]);
4033 ((void (*)(val*))(var10->class->vft[COLOR_hash_collection__HashMap__init]))(var10) /* init on <var10:HashMap[Object, Map[Object, Int]]>*/;
4034 CHECK_NEW_hash_collection__HashMap(var10);
4035 var_hashes = var10;
4036 var11 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_elements) /* iterator on <var_elements:Map[Object, Set[Object]]>*/;
4037 for(;;) {
4038 var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var11) /* is_ok on <var11:MapIterator[Object, nullable Object]>*/;
4039 if(!var12) break;
4040 var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapIterator__key]))(var11) /* key on <var11:MapIterator[Object, nullable Object]>*/;
4041 var_mclasstype = var13;
4042 var14 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapIterator__item]))(var11) /* item on <var11:MapIterator[Object, nullable Object]>*/;
4043 var_mtypes = var14;
4044 var15 = ((val* (*)(val*, val*))(var_masks->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_masks, var_mclasstype) /* [] on <var_masks:Map[Object, Int]>*/;
4045 var16 = ((struct instance_kernel__Int*)var15)->value; /* autounbox from nullable Object to Int */;
4046 var_mask = var16;
4047 var17 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__PerfectHasher_FT1kernel__Int]);
4048 ((void (*)(val*))(var17->class->vft[COLOR_hash_collection__HashMap__init]))(var17) /* init on <var17:HashMap[Object, Int]>*/;
4049 CHECK_NEW_hash_collection__HashMap(var17);
4050 var_inhashes = var17;
4051 var18 = ((val* (*)(val*))(var_mtypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mtypes) /* iterator on <var_mtypes:Set[Object]>*/;
4052 for(;;) {
4053 var19 = ((short int (*)(val*))(var18->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var18) /* is_ok on <var18:Iterator[nullable Object]>*/;
4054 if(!var19) break;
4055 var20 = ((val* (*)(val*))(var18->class->vft[COLOR_abstract_collection__Iterator__item]))(var18) /* item on <var18:Iterator[nullable Object]>*/;
4056 var_mtype = var20;
4057 var21 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__operator]))(self) /* operator on <self:PerfectHasher[Object, Object]>*/;
4058 var22 = ((val* (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_ids, var_mtype) /* [] on <var_ids:Map[Object, Int]>*/;
4059 var24 = ((struct instance_kernel__Int*)var22)->value; /* autounbox from nullable Object to Int */;
4060 var23 = ((long (*)(val*, long, long))(var21->class->vft[COLOR_layout_builders__PHOperator__op]))(var21, var_mask, var24) /* op on <var21:PHOperator>*/;
4061 var25 = BOX_kernel__Int(var23); /* autobox from Int to nullable Object */
4062 ((void (*)(val*, val*, val*))(var_inhashes->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_inhashes, var_mtype, var25) /* []= on <var_inhashes:HashMap[Object, Int]>*/;
4063 CONTINUE_label: (void)0;
4064 ((void (*)(val*))(var18->class->vft[COLOR_abstract_collection__Iterator__next]))(var18) /* next on <var18:Iterator[nullable Object]>*/;
4065 }
4066 BREAK_label: (void)0;
4067 ((void (*)(val*, val*, val*))(var_hashes->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_hashes, var_mclasstype, var_inhashes) /* []= on <var_hashes:HashMap[Object, Map[Object, Int]]>*/;
4068 CONTINUE_label26: (void)0;
4069 ((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapIterator__next]))(var11) /* next on <var11:MapIterator[Object, nullable Object]>*/;
4070 }
4071 BREAK_label26: (void)0;
4072 var = var_hashes;
4073 goto RET_LABEL;
4074 RET_LABEL:;
4075 return var;
4076 }
4077 /* method layout_builders#PerfectHasher#compute_hashes for (self: Object, Map[Object, Set[Object]], Map[Object, Int], Map[Object, Int]): Map[Object, Map[Object, Int]] */
4078 val* VIRTUAL_layout_builders__PerfectHasher__compute_hashes(val* self, val* p0, val* p1, val* p2) {
4079 val* var /* : Map[Object, Map[Object, Int]] */;
4080 val* var1 /* : Map[Object, Map[Object, Int]] */;
4081 var1 = layout_builders__PerfectHasher__compute_hashes(self, p0, p1, p2);
4082 var = var1;
4083 RET_LABEL:;
4084 return var;
4085 }
4086 /* method layout_builders#PHOperator#op for (self: PHOperator, Int, Int): Int */
4087 long layout_builders__PHOperator__op(val* self, long p0, long p1) {
4088 long var /* : Int */;
4089 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Deferred method called", "src/layout_builders.nit", 600);
4090 exit(1);
4091 RET_LABEL:;
4092 return var;
4093 }
4094 /* method layout_builders#PHOperator#op for (self: Object, Int, Int): Int */
4095 long VIRTUAL_layout_builders__PHOperator__op(val* self, long p0, long p1) {
4096 long var /* : Int */;
4097 long var1 /* : Int */;
4098 var1 = layout_builders__PHOperator__op(self, p0, p1);
4099 var = var1;
4100 RET_LABEL:;
4101 return var;
4102 }
4103 /* method layout_builders#PHOperator#init for (self: PHOperator) */
4104 void layout_builders__PHOperator__init(val* self) {
4105 RET_LABEL:;
4106 }
4107 /* method layout_builders#PHOperator#init for (self: Object) */
4108 void VIRTUAL_layout_builders__PHOperator__init(val* self) {
4109 layout_builders__PHOperator__init(self);
4110 RET_LABEL:;
4111 }
4112 /* method layout_builders#PHModOperator#init for (self: PHModOperator) */
4113 void layout_builders__PHModOperator__init(val* self) {
4114 ((void (*)(val*))(self->class->vft[COLOR_layout_builders__PHOperator__init]))(self) /* init on <self:PHModOperator>*/;
4115 RET_LABEL:;
4116 }
4117 /* method layout_builders#PHModOperator#init for (self: Object) */
4118 void VIRTUAL_layout_builders__PHModOperator__init(val* self) {
4119 layout_builders__PHModOperator__init(self);
4120 RET_LABEL:;
4121 }
4122 /* method layout_builders#PHModOperator#op for (self: PHModOperator, Int, Int): Int */
4123 long layout_builders__PHModOperator__op(val* self, long p0, long p1) {
4124 long var /* : Int */;
4125 long var_mask /* var mask: Int */;
4126 long var_id /* var id: Int */;
4127 long var1 /* : Int */;
4128 long var3 /* : Int */;
4129 var_mask = p0;
4130 var_id = p1;
4131 { /* Inline kernel#Int#% (var_mask,var_id) */
4132 var3 = var_mask % var_id;
4133 var1 = var3;
4134 goto RET_LABEL2;
4135 RET_LABEL2:(void)0;
4136 }
4137 var = var1;
4138 goto RET_LABEL;
4139 RET_LABEL:;
4140 return var;
4141 }
4142 /* method layout_builders#PHModOperator#op for (self: Object, Int, Int): Int */
4143 long VIRTUAL_layout_builders__PHModOperator__op(val* self, long p0, long p1) {
4144 long var /* : Int */;
4145 long var1 /* : Int */;
4146 var1 = layout_builders__PHModOperator__op(self, p0, p1);
4147 var = var1;
4148 RET_LABEL:;
4149 return var;
4150 }
4151 /* method layout_builders#PHAndOperator#init for (self: PHAndOperator) */
4152 void layout_builders__PHAndOperator__init(val* self) {
4153 ((void (*)(val*))(self->class->vft[COLOR_layout_builders__PHOperator__init]))(self) /* init on <self:PHAndOperator>*/;
4154 RET_LABEL:;
4155 }
4156 /* method layout_builders#PHAndOperator#init for (self: Object) */
4157 void VIRTUAL_layout_builders__PHAndOperator__init(val* self) {
4158 layout_builders__PHAndOperator__init(self);
4159 RET_LABEL:;
4160 }
4161 /* method layout_builders#PHAndOperator#op for (self: PHAndOperator, Int, Int): Int */
4162 long layout_builders__PHAndOperator__op(val* self, long p0, long p1) {
4163 long var /* : Int */;
4164 long var_mask /* var mask: Int */;
4165 long var_id /* var id: Int */;
4166 long var1 /* : Int */;
4167 var_mask = p0;
4168 var_id = p1;
4169 var1 = math__Int__bin_and(var_mask, var_id);
4170 var = var1;
4171 goto RET_LABEL;
4172 RET_LABEL:;
4173 return var;
4174 }
4175 /* method layout_builders#PHAndOperator#op for (self: Object, Int, Int): Int */
4176 long VIRTUAL_layout_builders__PHAndOperator__op(val* self, long p0, long p1) {
4177 long var /* : Int */;
4178 long var1 /* : Int */;
4179 var1 = layout_builders__PHAndOperator__op(self, p0, p1);
4180 var = var1;
4181 RET_LABEL:;
4182 return var;
4183 }
4184 /* method layout_builders#TypingHasher#mmodule for (self: TypingHasher[Object]): MModule */
4185 val* layout_builders__TypingHasher__mmodule(val* self) {
4186 val* var /* : MModule */;
4187 val* var1 /* : MModule */;
4188 var1 = self->attrs[COLOR_layout_builders__TypingHasher___64dmmodule].val; /* @mmodule on <self:TypingHasher[Object]> */
4189 if (var1 == NULL) {
4190 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 625);
4191 exit(1);
4192 }
4193 var = var1;
4194 RET_LABEL:;
4195 return var;
4196 }
4197 /* method layout_builders#TypingHasher#mmodule for (self: Object): MModule */
4198 val* VIRTUAL_layout_builders__TypingHasher__mmodule(val* self) {
4199 val* var /* : MModule */;
4200 val* var1 /* : MModule */;
4201 var1 = layout_builders__TypingHasher__mmodule(self);
4202 var = var1;
4203 RET_LABEL:;
4204 return var;
4205 }
4206 /* method layout_builders#TypingHasher#mmodule= for (self: TypingHasher[Object], MModule) */
4207 void layout_builders__TypingHasher__mmodule_61d(val* self, val* p0) {
4208 self->attrs[COLOR_layout_builders__TypingHasher___64dmmodule].val = p0; /* @mmodule on <self:TypingHasher[Object]> */
4209 RET_LABEL:;
4210 }
4211 /* method layout_builders#TypingHasher#mmodule= for (self: Object, MModule) */
4212 void VIRTUAL_layout_builders__TypingHasher__mmodule_61d(val* self, val* p0) {
4213 layout_builders__TypingHasher__mmodule_61d(self, p0);
4214 RET_LABEL:;
4215 }
4216 /* method layout_builders#TypingHasher#poset_builder for (self: TypingHasher[Object]): POSetBuilder[Object] */
4217 val* layout_builders__TypingHasher__poset_builder(val* self) {
4218 val* var /* : POSetBuilder[Object] */;
4219 val* var1 /* : POSetBuilder[Object] */;
4220 var1 = self->attrs[COLOR_layout_builders__TypingHasher___64dposet_builder].val; /* @poset_builder on <self:TypingHasher[Object]> */
4221 if (var1 == NULL) {
4222 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @poset_builder", "src/layout_builders.nit", 626);
4223 exit(1);
4224 }
4225 var = var1;
4226 RET_LABEL:;
4227 return var;
4228 }
4229 /* method layout_builders#TypingHasher#poset_builder for (self: Object): POSetBuilder[Object] */
4230 val* VIRTUAL_layout_builders__TypingHasher__poset_builder(val* self) {
4231 val* var /* : POSetBuilder[Object] */;
4232 val* var1 /* : POSetBuilder[Object] */;
4233 var1 = layout_builders__TypingHasher__poset_builder(self);
4234 var = var1;
4235 RET_LABEL:;
4236 return var;
4237 }
4238 /* method layout_builders#TypingHasher#poset_builder= for (self: TypingHasher[Object], POSetBuilder[Object]) */
4239 void layout_builders__TypingHasher__poset_builder_61d(val* self, val* p0) {
4240 short int var /* : Bool */;
4241 int cltype;
4242 int idtype;
4243 const struct type* type_struct;
4244 /* Covariant cast for argument 0 (poset_builder) <p0:POSetBuilder[Object]> isa POSetBuilder[TypingHasher#0] */
4245 /* <p0:POSetBuilder[Object]> isa POSetBuilder[TypingHasher#0] */
4246 type_struct = self->type->resolution_table->types[COLOR_layout_builders__POSetBuilderlayout_builders__TypingHasher_FT0];
4247 cltype = type_struct->color;
4248 idtype = type_struct->id;
4249 if(cltype >= p0->type->table_size) {
4250 var = 0;
4251 } else {
4252 var = p0->type->type_table[cltype] == idtype;
4253 }
4254 if (!var) {
4255 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 626);
4256 exit(1);
4257 }
4258 self->attrs[COLOR_layout_builders__TypingHasher___64dposet_builder].val = p0; /* @poset_builder on <self:TypingHasher[Object]> */
4259 RET_LABEL:;
4260 }
4261 /* method layout_builders#TypingHasher#poset_builder= for (self: Object, POSetBuilder[Object]) */
4262 void VIRTUAL_layout_builders__TypingHasher__poset_builder_61d(val* self, val* p0) {
4263 layout_builders__TypingHasher__poset_builder_61d(self, p0);
4264 RET_LABEL:;
4265 }
4266 /* method layout_builders#TypingHasher#poset_cache for (self: TypingHasher[Object]): nullable POSet[Object] */
4267 val* layout_builders__TypingHasher__poset_cache(val* self) {
4268 val* var /* : nullable POSet[Object] */;
4269 val* var1 /* : nullable POSet[Object] */;
4270 var1 = self->attrs[COLOR_layout_builders__TypingHasher___64dposet_cache].val; /* @poset_cache on <self:TypingHasher[Object]> */
4271 var = var1;
4272 RET_LABEL:;
4273 return var;
4274 }
4275 /* method layout_builders#TypingHasher#poset_cache for (self: Object): nullable POSet[Object] */
4276 val* VIRTUAL_layout_builders__TypingHasher__poset_cache(val* self) {
4277 val* var /* : nullable POSet[Object] */;
4278 val* var1 /* : nullable POSet[Object] */;
4279 var1 = layout_builders__TypingHasher__poset_cache(self);
4280 var = var1;
4281 RET_LABEL:;
4282 return var;
4283 }
4284 /* method layout_builders#TypingHasher#poset_cache= for (self: TypingHasher[Object], nullable POSet[Object]) */
4285 void layout_builders__TypingHasher__poset_cache_61d(val* self, val* p0) {
4286 short int var /* : Bool */;
4287 int cltype;
4288 int idtype;
4289 const struct type* type_struct;
4290 /* Covariant cast for argument 0 (poset_cache) <p0:nullable POSet[Object]> isa nullable POSet[TypingHasher#0] */
4291 /* <p0:nullable POSet[Object]> isa nullable POSet[TypingHasher#0] */
4292 type_struct = self->type->resolution_table->types[COLOR_poset__POSetlayout_builders__TypingHasher_FT0];
4293 cltype = type_struct->color;
4294 idtype = type_struct->id;
4295 if(p0 == NULL) {
4296 var = 1;
4297 } else {
4298 if(cltype >= p0->type->table_size) {
4299 var = 0;
4300 } else {
4301 var = p0->type->type_table[cltype] == idtype;
4302 }
4303 }
4304 if (!var) {
4305 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 627);
4306 exit(1);
4307 }
4308 self->attrs[COLOR_layout_builders__TypingHasher___64dposet_cache].val = p0; /* @poset_cache on <self:TypingHasher[Object]> */
4309 RET_LABEL:;
4310 }
4311 /* method layout_builders#TypingHasher#poset_cache= for (self: Object, nullable POSet[Object]) */
4312 void VIRTUAL_layout_builders__TypingHasher__poset_cache_61d(val* self, val* p0) {
4313 layout_builders__TypingHasher__poset_cache_61d(self, p0);
4314 RET_LABEL:;
4315 }
4316 /* method layout_builders#TypingHasher#init for (self: TypingHasher[Object], MModule, POSetBuilder[Object], PHOperator) */
4317 void layout_builders__TypingHasher__init(val* self, val* p0, val* p1, val* p2) {
4318 short int var /* : Bool */;
4319 int cltype;
4320 int idtype;
4321 const struct type* type_struct;
4322 val* var_mmodule /* var mmodule: MModule */;
4323 val* var_poset_builder /* var poset_builder: POSetBuilder[Object] */;
4324 val* var_operator /* var operator: PHOperator */;
4325 /* Covariant cast for argument 1 (poset_builder) <p1:POSetBuilder[Object]> isa POSetBuilder[TypingHasher#0] */
4326 /* <p1:POSetBuilder[Object]> isa POSetBuilder[TypingHasher#0] */
4327 type_struct = self->type->resolution_table->types[COLOR_layout_builders__POSetBuilderlayout_builders__TypingHasher_FT0];
4328 cltype = type_struct->color;
4329 idtype = type_struct->id;
4330 if(cltype >= p1->type->table_size) {
4331 var = 0;
4332 } else {
4333 var = p1->type->type_table[cltype] == idtype;
4334 }
4335 if (!var) {
4336 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 629);
4337 exit(1);
4338 }
4339 var_mmodule = p0;
4340 var_poset_builder = p1;
4341 var_operator = p2;
4342 ((void (*)(val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__init]))(self) /* init on <self:TypingHasher[Object]>*/;
4343 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__operator_61d]))(self, var_operator) /* operator= on <self:TypingHasher[Object]>*/;
4344 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__mmodule_61d]))(self, var_mmodule) /* mmodule= on <self:TypingHasher[Object]>*/;
4345 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__poset_builder_61d]))(self, var_poset_builder) /* poset_builder= on <self:TypingHasher[Object]>*/;
4346 RET_LABEL:;
4347 }
4348 /* method layout_builders#TypingHasher#init for (self: Object, MModule, POSetBuilder[Object], PHOperator) */
4349 void VIRTUAL_layout_builders__TypingHasher__init(val* self, val* p0, val* p1, val* p2) {
4350 layout_builders__TypingHasher__init(self, p0, p1, p2);
4351 RET_LABEL:;
4352 }
4353 /* method layout_builders#TypingHasher#build_layout for (self: TypingHasher[Object], Set[Object]): PHLayout[Object, Object] */
4354 val* layout_builders__TypingHasher__build_layout(val* self, val* p0) {
4355 val* var /* : PHLayout[Object, Object] */;
4356 short int var1 /* : Bool */;
4357 int cltype;
4358 int idtype;
4359 const struct type* type_struct;
4360 val* var_elements /* var elements: Set[Object] */;
4361 val* var2 /* : POSetBuilder[Object] */;
4362 val* var3 /* : POSet[Object] */;
4363 val* var4 /* : PHLayout[Object, Object] */;
4364 val* var_result /* var result: PHLayout[Object, Object] */;
4365 val* var5 /* : Map[Object, Set[Object]] */;
4366 val* var_conflicts /* var conflicts: Map[Object, Set[Object]] */;
4367 val* var6 /* : Map[Object, Int] */;
4368 val* var7 /* : Map[Object, Int] */;
4369 val* var8 /* : Map[Object, Int] */;
4370 val* var9 /* : Map[Object, Int] */;
4371 val* var10 /* : Map[Object, Int] */;
4372 val* var11 /* : Map[Object, Map[Object, Int]] */;
4373 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingHasher#0] */
4374 /* <p0:Set[Object]> isa Set[TypingHasher#0] */
4375 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingHasher_FT0];
4376 cltype = type_struct->color;
4377 idtype = type_struct->id;
4378 if(cltype >= p0->type->table_size) {
4379 var1 = 0;
4380 } else {
4381 var1 = p0->type->type_table[cltype] == idtype;
4382 }
4383 if (!var1) {
4384 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 635);
4385 exit(1);
4386 }
4387 var_elements = p0;
4388 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingHasher__poset_builder]))(self) /* poset_builder on <self:TypingHasher[Object]>*/;
4389 var3 = ((val* (*)(val*, val*))(var2->class->vft[COLOR_layout_builders__POSetBuilder__build_poset]))(var2, var_elements) /* build_poset on <var2:POSetBuilder[Object]>*/;
4390 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__poset_cache_61d]))(self, var3) /* poset_cache= on <self:TypingHasher[Object]>*/;
4391 var4 = NEW_layout_builders__PHLayout(self->type->resolution_table->types[COLOR_layout_builders__PHLayoutlayout_builders__TypingHasher_FT0layout_builders__TypingHasher_FT0]);
4392 ((void (*)(val*))(var4->class->vft[COLOR_layout_builders__PHLayout__init]))(var4) /* init on <var4:PHLayout[Object, Object]>*/;
4393 CHECK_NEW_layout_builders__PHLayout(var4);
4394 var_result = var4;
4395 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__build_conflicts]))(self, var_elements) /* build_conflicts on <self:TypingHasher[Object]>*/;
4396 var_conflicts = var5;
4397 var6 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingHasher__compute_ids]))(self) /* compute_ids on <self:TypingHasher[Object]>*/;
4398 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids_61d]))(var_result, var6) /* ids= on <var_result:PHLayout[Object, Object]>*/;
4399 var7 = ((val* (*)(val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids]))(var_result) /* ids on <var_result:PHLayout[Object, Object]>*/;
4400 var8 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__compute_masks]))(self, var_conflicts, var7) /* compute_masks on <self:TypingHasher[Object]>*/;
4401 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__PHLayout__masks_61d]))(var_result, var8) /* masks= on <var_result:PHLayout[Object, Object]>*/;
4402 var9 = ((val* (*)(val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids]))(var_result) /* ids on <var_result:PHLayout[Object, Object]>*/;
4403 var10 = ((val* (*)(val*))(var_result->class->vft[COLOR_layout_builders__PHLayout__masks]))(var_result) /* masks on <var_result:PHLayout[Object, Object]>*/;
4404 var11 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__compute_hashes]))(self, var_conflicts, var9, var10) /* compute_hashes on <self:TypingHasher[Object]>*/;
4405 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__PHLayout__hashes_61d]))(var_result, var11) /* hashes= on <var_result:PHLayout[Object, Object]>*/;
4406 var = var_result;
4407 goto RET_LABEL;
4408 RET_LABEL:;
4409 return var;
4410 }
4411 /* method layout_builders#TypingHasher#build_layout for (self: Object, Set[Object]): Layout[Object] */
4412 val* VIRTUAL_layout_builders__TypingHasher__build_layout(val* self, val* p0) {
4413 val* var /* : Layout[Object] */;
4414 val* var1 /* : PHLayout[Object, Object] */;
4415 var1 = layout_builders__TypingHasher__build_layout(self, p0);
4416 var = var1;
4417 RET_LABEL:;
4418 return var;
4419 }
4420 /* method layout_builders#TypingHasher#compute_ids for (self: TypingHasher[Object]): Map[Object, Int] */
4421 val* layout_builders__TypingHasher__compute_ids(val* self) {
4422 val* var /* : Map[Object, Int] */;
4423 val* var1 /* : HashMap[Object, Int] */;
4424 val* var_ids /* var ids: HashMap[Object, Int] */;
4425 val* var2 /* : nullable POSet[Object] */;
4426 val* var3 /* : Array[nullable Object] */;
4427 val* var_lin /* var lin: Array[Object] */;
4428 val* var4 /* : nullable POSet[Object] */;
4429 val* var5 /* : Iterator[nullable Object] */;
4430 short int var6 /* : Bool */;
4431 val* var7 /* : nullable Object */;
4432 val* var_e /* var e: Object */;
4433 long var8 /* : Int */;
4434 long var9 /* : Int */;
4435 long var10 /* : Int */;
4436 long var12 /* : Int */;
4437 val* var13 /* : nullable Object */;
4438 var1 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingHasher_FT0kernel__Int]);
4439 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[Object, Int]>*/;
4440 CHECK_NEW_hash_collection__HashMap(var1);
4441 var_ids = var1;
4442 var2 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingHasher[Object]>*/;
4443 if (var2 == NULL) {
4444 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 648);
4445 exit(1);
4446 } else {
4447 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_array__Collection__to_a]))(var2) /* to_a on <var2:nullable POSet[Object]>*/;
4448 }
4449 var_lin = var3;
4450 var4 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingHasher[Object]>*/;
4451 if (var4 == NULL) {
4452 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 649);
4453 exit(1);
4454 } else {
4455 ((void (*)(val*, val*))(var4->class->vft[COLOR_sorter__AbstractSorter__sort]))(var4, var_lin) /* sort on <var4:nullable POSet[Object]>*/;
4456 }
4457 var5 = ((val* (*)(val*))(var_lin->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_lin) /* iterator on <var_lin:Array[Object]>*/;
4458 for(;;) {
4459 var6 = ((short int (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var5) /* is_ok on <var5:Iterator[nullable Object]>*/;
4460 if(!var6) break;
4461 var7 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__item]))(var5) /* item on <var5:Iterator[nullable Object]>*/;
4462 var_e = var7;
4463 var8 = ((long (*)(val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__length]))(var_ids) /* length on <var_ids:HashMap[Object, Int]>*/;
4464 var9 = 1;
4465 { /* Inline kernel#Int#+ (var8,var9) */
4466 var12 = var8 + var9;
4467 var10 = var12;
4468 goto RET_LABEL11;
4469 RET_LABEL11:(void)0;
4470 }
4471 var13 = BOX_kernel__Int(var10); /* autobox from Int to nullable Object */
4472 ((void (*)(val*, val*, val*))(var_ids->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_ids, var_e, var13) /* []= on <var_ids:HashMap[Object, Int]>*/;
4473 CONTINUE_label: (void)0;
4474 ((void (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__next]))(var5) /* next on <var5:Iterator[nullable Object]>*/;
4475 }
4476 BREAK_label: (void)0;
4477 var = var_ids;
4478 goto RET_LABEL;
4479 RET_LABEL:;
4480 return var;
4481 }
4482 /* method layout_builders#TypingHasher#compute_ids for (self: Object): Map[Object, Int] */
4483 val* VIRTUAL_layout_builders__TypingHasher__compute_ids(val* self) {
4484 val* var /* : Map[Object, Int] */;
4485 val* var1 /* : Map[Object, Int] */;
4486 var1 = layout_builders__TypingHasher__compute_ids(self);
4487 var = var1;
4488 RET_LABEL:;
4489 return var;
4490 }
4491 /* method layout_builders#TypingHasher#build_conflicts for (self: TypingHasher[Object], Set[Object]): Map[Object, Set[Object]] */
4492 val* layout_builders__TypingHasher__build_conflicts(val* self, val* p0) {
4493 val* var /* : Map[Object, Set[Object]] */;
4494 short int var1 /* : Bool */;
4495 int cltype;
4496 int idtype;
4497 const struct type* type_struct;
4498 val* var_elements /* var elements: Set[Object] */;
4499 val* var2 /* : HashMap[Object, Set[Object]] */;
4500 val* var_conflicts /* var conflicts: HashMap[Object, Set[Object]] */;
4501 val* var3 /* : Iterator[nullable Object] */;
4502 short int var4 /* : Bool */;
4503 val* var5 /* : nullable Object */;
4504 val* var_e /* var e: Object */;
4505 val* var6 /* : HashSet[Object] */;
4506 val* var_supers /* var supers: HashSet[Object] */;
4507 val* var7 /* : nullable POSet[Object] */;
4508 val* var8 /* : POSetElement[Object] */;
4509 val* var9 /* : Collection[Object] */;
4510 /* Covariant cast for argument 0 (elements) <p0:Set[Object]> isa Set[TypingHasher#0] */
4511 /* <p0:Set[Object]> isa Set[TypingHasher#0] */
4512 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Setlayout_builders__TypingHasher_FT0];
4513 cltype = type_struct->color;
4514 idtype = type_struct->id;
4515 if(cltype >= p0->type->table_size) {
4516 var1 = 0;
4517 } else {
4518 var1 = p0->type->type_table[cltype] == idtype;
4519 }
4520 if (!var1) {
4521 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 656);
4522 exit(1);
4523 }
4524 var_elements = p0;
4525 var2 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__TypingHasher_FT0abstract_collection__Setlayout_builders__TypingHasher_FT0]);
4526 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[Object, Set[Object]]>*/;
4527 CHECK_NEW_hash_collection__HashMap(var2);
4528 var_conflicts = var2;
4529 var3 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_elements) /* iterator on <var_elements:Set[Object]>*/;
4530 for(;;) {
4531 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
4532 if(!var4) break;
4533 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
4534 var_e = var5;
4535 var6 = NEW_hash_collection__HashSet(self->type->resolution_table->types[COLOR_hash_collection__HashSetlayout_builders__TypingHasher_FT0]);
4536 ((void (*)(val*))(var6->class->vft[COLOR_hash_collection__HashSet__init]))(var6) /* init on <var6:HashSet[Object]>*/;
4537 CHECK_NEW_hash_collection__HashSet(var6);
4538 var_supers = var6;
4539 var7 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__TypingLayoutBuilder__poset]))(self) /* poset on <self:TypingHasher[Object]>*/;
4540 if (var7 == NULL) {
4541 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/layout_builders.nit", 660);
4542 exit(1);
4543 } else {
4544 var8 = ((val* (*)(val*, val*))(var7->class->vft[COLOR_poset__POSet___91d_93d]))(var7, var_e) /* [] on <var7:nullable POSet[Object]>*/;
4545 }
4546 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_poset__POSetElement__greaters]))(var8) /* greaters on <var8:POSetElement[Object]>*/;
4547 ((void (*)(val*, val*))(var_supers->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_supers, var9) /* add_all on <var_supers:HashSet[Object]>*/;
4548 ((void (*)(val*, val*))(var_supers->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_supers, var_e) /* add on <var_supers:HashSet[Object]>*/;
4549 ((void (*)(val*, val*, val*))(var_conflicts->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_conflicts, var_e, var_supers) /* []= on <var_conflicts:HashMap[Object, Set[Object]]>*/;
4550 CONTINUE_label: (void)0;
4551 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
4552 }
4553 BREAK_label: (void)0;
4554 var = var_conflicts;
4555 goto RET_LABEL;
4556 RET_LABEL:;
4557 return var;
4558 }
4559 /* method layout_builders#TypingHasher#build_conflicts for (self: Object, Set[Object]): Map[Object, Set[Object]] */
4560 val* VIRTUAL_layout_builders__TypingHasher__build_conflicts(val* self, val* p0) {
4561 val* var /* : Map[Object, Set[Object]] */;
4562 val* var1 /* : Map[Object, Set[Object]] */;
4563 var1 = layout_builders__TypingHasher__build_conflicts(self, p0);
4564 var = var1;
4565 RET_LABEL:;
4566 return var;
4567 }
4568 /* method layout_builders#MTypeHasher#init for (self: MTypeHasher, PHOperator, MModule) */
4569 void layout_builders__MTypeHasher__init(val* self, val* p0, val* p1) {
4570 val* var_operator /* var operator: PHOperator */;
4571 val* var_mmodule /* var mmodule: MModule */;
4572 val* var /* : MTypePOSetBuilder */;
4573 var_operator = p0;
4574 var_mmodule = p1;
4575 var = NEW_layout_builders__MTypePOSetBuilder(&type_layout_builders__MTypePOSetBuilder);
4576 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MTypePOSetBuilder>*/;
4577 CHECK_NEW_layout_builders__MTypePOSetBuilder(var);
4578 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__init]))(self, var_mmodule, var, var_operator) /* init on <self:MTypeHasher>*/;
4579 RET_LABEL:;
4580 }
4581 /* method layout_builders#MTypeHasher#init for (self: Object, PHOperator, MModule) */
4582 void VIRTUAL_layout_builders__MTypeHasher__init(val* self, val* p0, val* p1) {
4583 layout_builders__MTypeHasher__init(self, p0, p1);
4584 RET_LABEL:;
4585 }
4586 /* method layout_builders#MClassHasher#init for (self: MClassHasher, PHOperator, MModule) */
4587 void layout_builders__MClassHasher__init(val* self, val* p0, val* p1) {
4588 val* var_operator /* var operator: PHOperator */;
4589 val* var_mmodule /* var mmodule: MModule */;
4590 val* var /* : MClassPOSetBuilder */;
4591 var_operator = p0;
4592 var_mmodule = p1;
4593 var = NEW_layout_builders__MClassPOSetBuilder(&type_layout_builders__MClassPOSetBuilder);
4594 ((void (*)(val*, val*))(var->class->vft[COLOR_layout_builders__POSetBuilder__init]))(var, var_mmodule) /* init on <var:MClassPOSetBuilder>*/;
4595 CHECK_NEW_layout_builders__MClassPOSetBuilder(var);
4596 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_layout_builders__TypingHasher__init]))(self, var_mmodule, var, var_operator) /* init on <self:MClassHasher>*/;
4597 RET_LABEL:;
4598 }
4599 /* method layout_builders#MClassHasher#init for (self: Object, PHOperator, MModule) */
4600 void VIRTUAL_layout_builders__MClassHasher__init(val* self, val* p0, val* p1) {
4601 layout_builders__MClassHasher__init(self, p0, p1);
4602 RET_LABEL:;
4603 }
4604 /* method layout_builders#MPropertyHasher#mmodule for (self: MPropertyHasher[PropertyLayoutElement]): MModule */
4605 val* layout_builders__MPropertyHasher__mmodule(val* self) {
4606 val* var /* : MModule */;
4607 val* var1 /* : MModule */;
4608 var1 = self->attrs[COLOR_layout_builders__MPropertyHasher___64dmmodule].val; /* @mmodule on <self:MPropertyHasher[PropertyLayoutElement]> */
4609 if (var1 == NULL) {
4610 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @mmodule", "src/layout_builders.nit", 685);
4611 exit(1);
4612 }
4613 var = var1;
4614 RET_LABEL:;
4615 return var;
4616 }
4617 /* method layout_builders#MPropertyHasher#mmodule for (self: Object): MModule */
4618 val* VIRTUAL_layout_builders__MPropertyHasher__mmodule(val* self) {
4619 val* var /* : MModule */;
4620 val* var1 /* : MModule */;
4621 var1 = layout_builders__MPropertyHasher__mmodule(self);
4622 var = var1;
4623 RET_LABEL:;
4624 return var;
4625 }
4626 /* method layout_builders#MPropertyHasher#mmodule= for (self: MPropertyHasher[PropertyLayoutElement], MModule) */
4627 void layout_builders__MPropertyHasher__mmodule_61d(val* self, val* p0) {
4628 self->attrs[COLOR_layout_builders__MPropertyHasher___64dmmodule].val = p0; /* @mmodule on <self:MPropertyHasher[PropertyLayoutElement]> */
4629 RET_LABEL:;
4630 }
4631 /* method layout_builders#MPropertyHasher#mmodule= for (self: Object, MModule) */
4632 void VIRTUAL_layout_builders__MPropertyHasher__mmodule_61d(val* self, val* p0) {
4633 layout_builders__MPropertyHasher__mmodule_61d(self, p0);
4634 RET_LABEL:;
4635 }
4636 /* method layout_builders#MPropertyHasher#init for (self: MPropertyHasher[PropertyLayoutElement], PHOperator, MModule) */
4637 void layout_builders__MPropertyHasher__init(val* self, val* p0, val* p1) {
4638 val* var_operator /* var operator: PHOperator */;
4639 val* var_mmodule /* var mmodule: MModule */;
4640 var_operator = p0;
4641 var_mmodule = p1;
4642 ((void (*)(val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__init]))(self) /* init on <self:MPropertyHasher[PropertyLayoutElement]>*/;
4643 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__operator_61d]))(self, var_operator) /* operator= on <self:MPropertyHasher[PropertyLayoutElement]>*/;
4644 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyHasher__mmodule_61d]))(self, var_mmodule) /* mmodule= on <self:MPropertyHasher[PropertyLayoutElement]>*/;
4645 RET_LABEL:;
4646 }
4647 /* method layout_builders#MPropertyHasher#init for (self: Object, PHOperator, MModule) */
4648 void VIRTUAL_layout_builders__MPropertyHasher__init(val* self, val* p0, val* p1) {
4649 layout_builders__MPropertyHasher__init(self, p0, p1);
4650 RET_LABEL:;
4651 }
4652 /* method layout_builders#MPropertyHasher#build_poset for (self: MPropertyHasher[PropertyLayoutElement], Set[MClass]): POSet[MClass] */
4653 val* layout_builders__MPropertyHasher__build_poset(val* self, val* p0) {
4654 val* var /* : POSet[MClass] */;
4655 val* var_mclasses /* var mclasses: Set[MClass] */;
4656 val* var1 /* : POSet[MClass] */;
4657 val* var_poset /* var poset: POSet[MClass] */;
4658 val* var2 /* : Iterator[nullable Object] */;
4659 short int var3 /* : Bool */;
4660 val* var4 /* : nullable Object */;
4661 val* var_e /* var e: MClass */;
4662 val* var5 /* : POSetElement[Object] */;
4663 val* var6 /* : Iterator[nullable Object] */;
4664 short int var7 /* : Bool */;
4665 val* var8 /* : nullable Object */;
4666 val* var_o /* var o: MClass */;
4667 short int var9 /* : Bool */;
4668 short int var10 /* : Bool */;
4669 short int var_ /* var : Bool */;
4670 val* var11 /* : MModule */;
4671 val* var12 /* : POSet[MClass] */;
4672 short int var13 /* : Bool */;
4673 short int var14 /* : Bool */;
4674 val* var15 /* : MModule */;
4675 val* var16 /* : POSetElement[MClass] */;
4676 short int var17 /* : Bool */;
4677 var_mclasses = p0;
4678 var1 = NEW_poset__POSet(&type_poset__POSetmodel__MClass);
4679 ((void (*)(val*))(var1->class->vft[COLOR_poset__POSet__init]))(var1) /* init on <var1:POSet[MClass]>*/;
4680 CHECK_NEW_poset__POSet(var1);
4681 var_poset = var1;
4682 var2 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
4683 for(;;) {
4684 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
4685 if(!var3) break;
4686 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
4687 var_e = var4;
4688 var5 = ((val* (*)(val*, val*))(var_poset->class->vft[COLOR_poset__POSet__add_node]))(var_poset, var_e) /* add_node on <var_poset:POSet[MClass]>*/;
4689 var5;
4690 var6 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
4691 for(;;) {
4692 var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[nullable Object]>*/;
4693 if(!var7) break;
4694 var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[nullable Object]>*/;
4695 var_o = var8;
4696 var10 = ((short int (*)(val*, val*))(var_e->class->vft[COLOR_kernel__Object___61d_61d]))(var_e, var_o) /* == on <var_e:MClass>*/;
4697 var_ = var10;
4698 if (var10){
4699 var9 = var_;
4700 } else {
4701 var11 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyHasher__mmodule]))(self) /* mmodule on <self:MPropertyHasher[PropertyLayoutElement]>*/;
4702 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var11) /* flatten_mclass_hierarchy on <var11:MModule>*/;
4703 var13 = ((short int (*)(val*, val*))(var12->class->vft[COLOR_abstract_collection__Collection__has]))(var12, var_e) /* has on <var12:POSet[MClass]>*/;
4704 var14 = !var13;
4705 var9 = var14;
4706 }
4707 if (var9){
4708 goto CONTINUE_label;
4709 } else {
4710 }
4711 var15 = ((val* (*)(val*))(self->class->vft[COLOR_layout_builders__MPropertyHasher__mmodule]))(self) /* mmodule on <self:MPropertyHasher[PropertyLayoutElement]>*/;
4712 var16 = ((val* (*)(val*, val*))(var_e->class->vft[COLOR_model__MClass__in_hierarchy]))(var_e, var15) /* in_hierarchy on <var_e:MClass>*/;
4713 var17 = ((short int (*)(val*, val*))(var16->class->vft[COLOR_poset__POSetElement___60d]))(var16, var_o) /* < on <var16:POSetElement[MClass]>*/;
4714 if (var17){
4715 ((void (*)(val*, val*, val*))(var_poset->class->vft[COLOR_poset__POSet__add_edge]))(var_poset, var_e, var_o) /* add_edge on <var_poset:POSet[MClass]>*/;
4716 } else {
4717 }
4718 CONTINUE_label: (void)0;
4719 ((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
4720 }
4721 BREAK_label: (void)0;
4722 CONTINUE_label18: (void)0;
4723 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
4724 }
4725 BREAK_label18: (void)0;
4726 var = var_poset;
4727 goto RET_LABEL;
4728 RET_LABEL:;
4729 return var;
4730 }
4731 /* method layout_builders#MPropertyHasher#build_poset for (self: Object, Set[MClass]): POSet[MClass] */
4732 val* VIRTUAL_layout_builders__MPropertyHasher__build_poset(val* self, val* p0) {
4733 val* var /* : POSet[MClass] */;
4734 val* var1 /* : POSet[MClass] */;
4735 var1 = layout_builders__MPropertyHasher__build_poset(self, p0);
4736 var = var1;
4737 RET_LABEL:;
4738 return var;
4739 }
4740 /* method layout_builders#MPropertyHasher#build_layout for (self: MPropertyHasher[PropertyLayoutElement], Map[MClass, Set[PropertyLayoutElement]]): Layout[PropertyLayoutElement] */
4741 val* layout_builders__MPropertyHasher__build_layout(val* self, val* p0) {
4742 val* var /* : Layout[PropertyLayoutElement] */;
4743 short int var1 /* : Bool */;
4744 int cltype;
4745 int idtype;
4746 const struct type* type_struct;
4747 val* var_elements /* var elements: Map[MClass, Set[PropertyLayoutElement]] */;
4748 val* var2 /* : PHLayout[MClass, PropertyLayoutElement] */;
4749 val* var_result /* var result: PHLayout[MClass, PropertyLayoutElement] */;
4750 val* var3 /* : HashMap[PropertyLayoutElement, Int] */;
4751 val* var_ids /* var ids: HashMap[PropertyLayoutElement, Int] */;
4752 val* var4 /* : HashSet[MClass] */;
4753 val* var_mclasses /* var mclasses: HashSet[MClass] */;
4754 val* var5 /* : Collection[Object] */;
4755 val* var6 /* : POSet[MClass] */;
4756 val* var_poset /* var poset: POSet[MClass] */;
4757 val* var7 /* : Array[nullable Object] */;
4758 val* var_lin /* var lin: Array[MClass] */;
4759 val* var8 /* : Array[nullable Object] */;
4760 val* var9 /* : Iterator[nullable Object] */;
4761 short int var10 /* : Bool */;
4762 val* var11 /* : nullable Object */;
4763 val* var_mclass /* var mclass: MClass */;
4764 val* var12 /* : nullable Object */;
4765 val* var13 /* : Iterator[nullable Object] */;
4766 short int var14 /* : Bool */;
4767 val* var15 /* : nullable Object */;
4768 val* var_mproperty /* var mproperty: PropertyLayoutElement */;
4769 short int var16 /* : Bool */;
4770 long var17 /* : Int */;
4771 long var18 /* : Int */;
4772 long var19 /* : Int */;
4773 long var21 /* : Int */;
4774 val* var22 /* : nullable Object */;
4775 val* var24 /* : Map[Object, Int] */;
4776 val* var25 /* : Map[Object, Int] */;
4777 val* var26 /* : Map[Object, Map[Object, Int]] */;
4778 /* Covariant cast for argument 0 (elements) <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[PropertyLayoutBuilder#0]] */
4779 /* <p0:Map[MClass, Set[PropertyLayoutElement]]> isa Map[MClass, Set[PropertyLayoutBuilder#0]] */
4780 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Mapmodel__MClassabstract_collection__Setlayout_builders__PropertyLayoutBuilder_FT0];
4781 cltype = type_struct->color;
4782 idtype = type_struct->id;
4783 if(cltype >= p0->type->table_size) {
4784 var1 = 0;
4785 } else {
4786 var1 = p0->type->type_table[cltype] == idtype;
4787 }
4788 if (!var1) {
4789 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/layout_builders.nit", 704);
4790 exit(1);
4791 }
4792 var_elements = p0;
4793 var2 = NEW_layout_builders__PHLayout(self->type->resolution_table->types[COLOR_layout_builders__PHLayoutmodel__MClasslayout_builders__MPropertyHasher_FT0]);
4794 ((void (*)(val*))(var2->class->vft[COLOR_layout_builders__PHLayout__init]))(var2) /* init on <var2:PHLayout[MClass, PropertyLayoutElement]>*/;
4795 CHECK_NEW_layout_builders__PHLayout(var2);
4796 var_result = var2;
4797 var3 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMaplayout_builders__MPropertyHasher_FT0kernel__Int]);
4798 ((void (*)(val*))(var3->class->vft[COLOR_hash_collection__HashMap__init]))(var3) /* init on <var3:HashMap[PropertyLayoutElement, Int]>*/;
4799 CHECK_NEW_hash_collection__HashMap(var3);
4800 var_ids = var3;
4801 var4 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
4802 ((void (*)(val*))(var4->class->vft[COLOR_hash_collection__HashSet__init]))(var4) /* init on <var4:HashSet[MClass]>*/;
4803 CHECK_NEW_hash_collection__HashSet(var4);
4804 var_mclasses = var4;
4805 var5 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__keys]))(var_elements) /* keys on <var_elements:Map[MClass, Set[PropertyLayoutElement]]>*/;
4806 ((void (*)(val*, val*))(var_mclasses->class->vft[COLOR_abstract_collection__SimpleCollection__add_all]))(var_mclasses, var5) /* add_all on <var_mclasses:HashSet[MClass]>*/;
4807 var6 = ((val* (*)(val*, val*))(self->class->vft[COLOR_layout_builders__MPropertyHasher__build_poset]))(self, var_mclasses) /* build_poset on <self:MPropertyHasher[PropertyLayoutElement]>*/;
4808 var_poset = var6;
4809 var7 = ((val* (*)(val*))(var_poset->class->vft[COLOR_array__Collection__to_a]))(var_poset) /* to_a on <var_poset:POSet[MClass]>*/;
4810 var_lin = var7;
4811 ((void (*)(val*, val*))(var_poset->class->vft[COLOR_sorter__AbstractSorter__sort]))(var_poset, var_lin) /* sort on <var_poset:POSet[MClass]>*/;
4812 var8 = ((val* (*)(val*))(var_lin->class->vft[COLOR_array__AbstractArrayRead__reversed]))(var_lin) /* reversed on <var_lin:Array[MClass]>*/;
4813 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Collection__iterator]))(var8) /* iterator on <var8:Array[nullable Object](Array[MClass])>*/;
4814 for(;;) {
4815 var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
4816 if(!var10) break;
4817 var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
4818 var_mclass = var11;
4819 var12 = ((val* (*)(val*, val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_elements, var_mclass) /* [] on <var_elements:Map[MClass, Set[PropertyLayoutElement]]>*/;
4820 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Collection__iterator]))(var12) /* iterator on <var12:nullable Object(Set[PropertyLayoutElement])>*/;
4821 for(;;) {
4822 var14 = ((short int (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var13) /* is_ok on <var13:Iterator[nullable Object]>*/;
4823 if(!var14) break;
4824 var15 = ((val* (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__item]))(var13) /* item on <var13:Iterator[nullable Object]>*/;
4825 var_mproperty = var15;
4826 var16 = ((short int (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var_ids, var_mproperty) /* has_key on <var_ids:HashMap[PropertyLayoutElement, Int]>*/;
4827 if (var16){
4828 goto CONTINUE_label;
4829 } else {
4830 }
4831 var17 = ((long (*)(val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__length]))(var_ids) /* length on <var_ids:HashMap[PropertyLayoutElement, Int]>*/;
4832 var18 = 1;
4833 { /* Inline kernel#Int#+ (var17,var18) */
4834 var21 = var17 + var18;
4835 var19 = var21;
4836 goto RET_LABEL20;
4837 RET_LABEL20:(void)0;
4838 }
4839 var22 = BOX_kernel__Int(var19); /* autobox from Int to nullable Object */
4840 ((void (*)(val*, val*, val*))(var_ids->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_ids, var_mproperty, var22) /* []= on <var_ids:HashMap[PropertyLayoutElement, Int]>*/;
4841 CONTINUE_label: (void)0;
4842 ((void (*)(val*))(var13->class->vft[COLOR_abstract_collection__Iterator__next]))(var13) /* next on <var13:Iterator[nullable Object]>*/;
4843 }
4844 BREAK_label: (void)0;
4845 CONTINUE_label23: (void)0;
4846 ((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
4847 }
4848 BREAK_label23: (void)0;
4849 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids_61d]))(var_result, var_ids) /* ids= on <var_result:PHLayout[MClass, PropertyLayoutElement]>*/;
4850 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__pos_61d]))(var_result, var_ids) /* pos= on <var_result:PHLayout[MClass, PropertyLayoutElement]>*/;
4851 var24 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__compute_masks]))(self, var_elements, var_ids) /* compute_masks on <self:MPropertyHasher[PropertyLayoutElement]>*/;
4852 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__PHLayout__masks_61d]))(var_result, var24) /* masks= on <var_result:PHLayout[MClass, PropertyLayoutElement]>*/;
4853 var25 = ((val* (*)(val*))(var_result->class->vft[COLOR_layout_builders__PHLayout__masks]))(var_result) /* masks on <var_result:PHLayout[MClass, PropertyLayoutElement]>*/;
4854 var26 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__compute_hashes]))(self, var_elements, var_ids, var25) /* compute_hashes on <self:MPropertyHasher[PropertyLayoutElement]>*/;
4855 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__PHLayout__hashes_61d]))(var_result, var26) /* hashes= on <var_result:PHLayout[MClass, PropertyLayoutElement]>*/;
4856 var = var_result;
4857 goto RET_LABEL;
4858 RET_LABEL:;
4859 return var;
4860 }
4861 /* method layout_builders#MPropertyHasher#build_layout for (self: Object, Map[MClass, Set[PropertyLayoutElement]]): Layout[PropertyLayoutElement] */
4862 val* VIRTUAL_layout_builders__MPropertyHasher__build_layout(val* self, val* p0) {
4863 val* var /* : Layout[PropertyLayoutElement] */;
4864 val* var1 /* : Layout[PropertyLayoutElement] */;
4865 var1 = layout_builders__MPropertyHasher__build_layout(self, p0);
4866 var = var1;
4867 RET_LABEL:;
4868 return var;
4869 }
4870 /* method layout_builders#ResolutionHasher#init for (self: ResolutionHasher, PHOperator) */
4871 void layout_builders__ResolutionHasher__init(val* self, val* p0) {
4872 val* var_operator /* var operator: PHOperator */;
4873 var_operator = p0;
4874 ((void (*)(val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__init]))(self) /* init on <self:ResolutionHasher>*/;
4875 ((void (*)(val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__operator_61d]))(self, var_operator) /* operator= on <self:ResolutionHasher>*/;
4876 RET_LABEL:;
4877 }
4878 /* method layout_builders#ResolutionHasher#init for (self: Object, PHOperator) */
4879 void VIRTUAL_layout_builders__ResolutionHasher__init(val* self, val* p0) {
4880 layout_builders__ResolutionHasher__init(self, p0);
4881 RET_LABEL:;
4882 }
4883 /* method layout_builders#ResolutionHasher#build_layout for (self: ResolutionHasher, Map[MClassType, Set[MType]]): Layout[MType] */
4884 val* layout_builders__ResolutionHasher__build_layout(val* self, val* p0) {
4885 val* var /* : Layout[MType] */;
4886 val* var_elements /* var elements: Map[MClassType, Set[MType]] */;
4887 val* var1 /* : PHLayout[MClassType, MType] */;
4888 val* var_result /* var result: PHLayout[MClassType, MType] */;
4889 val* var2 /* : HashMap[MType, Int] */;
4890 val* var_ids /* var ids: HashMap[MType, Int] */;
4891 long var3 /* : Int */;
4892 long var_color /* var color: Int */;
4893 val* var4 /* : MapIterator[Object, nullable Object] */;
4894 short int var5 /* : Bool */;
4895 val* var6 /* : Object */;
4896 val* var_mclasstype /* var mclasstype: MClassType */;
4897 val* var7 /* : nullable Object */;
4898 val* var_mclasstypes /* var mclasstypes: Set[MType] */;
4899 val* var8 /* : Iterator[nullable Object] */;
4900 short int var9 /* : Bool */;
4901 val* var10 /* : nullable Object */;
4902 val* var_element /* var element: MType */;
4903 short int var11 /* : Bool */;
4904 val* var12 /* : nullable Object */;
4905 long var13 /* : Int */;
4906 long var14 /* : Int */;
4907 long var16 /* : Int */;
4908 val* var18 /* : Map[Object, Int] */;
4909 val* var19 /* : Map[Object, Int] */;
4910 val* var20 /* : Map[Object, Map[Object, Int]] */;
4911 var_elements = p0;
4912 var1 = NEW_layout_builders__PHLayout(&type_layout_builders__PHLayoutmodel__MClassTypemodel__MType);
4913 ((void (*)(val*))(var1->class->vft[COLOR_layout_builders__PHLayout__init]))(var1) /* init on <var1:PHLayout[MClassType, MType]>*/;
4914 CHECK_NEW_layout_builders__PHLayout(var1);
4915 var_result = var1;
4916 var2 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MTypekernel__Int);
4917 ((void (*)(val*))(var2->class->vft[COLOR_hash_collection__HashMap__init]))(var2) /* init on <var2:HashMap[MType, Int]>*/;
4918 CHECK_NEW_hash_collection__HashMap(var2);
4919 var_ids = var2;
4920 var3 = 1;
4921 var_color = var3;
4922 var4 = ((val* (*)(val*))(var_elements->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var_elements) /* iterator on <var_elements:Map[MClassType, Set[MType]]>*/;
4923 for(;;) {
4924 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var4) /* is_ok on <var4:MapIterator[Object, nullable Object]>*/;
4925 if(!var5) break;
4926 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__key]))(var4) /* key on <var4:MapIterator[Object, nullable Object]>*/;
4927 var_mclasstype = var6;
4928 var7 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__item]))(var4) /* item on <var4:MapIterator[Object, nullable Object]>*/;
4929 var_mclasstypes = var7;
4930 var8 = ((val* (*)(val*))(var_mclasstypes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasstypes) /* iterator on <var_mclasstypes:Set[MType]>*/;
4931 for(;;) {
4932 var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var8) /* is_ok on <var8:Iterator[nullable Object]>*/;
4933 if(!var9) break;
4934 var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__item]))(var8) /* item on <var8:Iterator[nullable Object]>*/;
4935 var_element = var10;
4936 var11 = ((short int (*)(val*, val*))(var_ids->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var_ids, var_element) /* has_key on <var_ids:HashMap[MType, Int]>*/;
4937 if (var11){
4938 goto CONTINUE_label;
4939 } else {
4940 }
4941 var12 = BOX_kernel__Int(var_color); /* autobox from Int to nullable Object */
4942 ((void (*)(val*, val*, val*))(var_ids->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_ids, var_element, var12) /* []= on <var_ids:HashMap[MType, Int]>*/;
4943 var13 = 1;
4944 { /* Inline kernel#Int#+ (var_color,var13) */
4945 var16 = var_color + var13;
4946 var14 = var16;
4947 goto RET_LABEL15;
4948 RET_LABEL15:(void)0;
4949 }
4950 var_color = var14;
4951 CONTINUE_label: (void)0;
4952 ((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
4953 }
4954 BREAK_label: (void)0;
4955 CONTINUE_label17: (void)0;
4956 ((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__MapIterator__next]))(var4) /* next on <var4:MapIterator[Object, nullable Object]>*/;
4957 }
4958 BREAK_label17: (void)0;
4959 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__ids_61d]))(var_result, var_ids) /* ids= on <var_result:PHLayout[MClassType, MType]>*/;
4960 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__Layout__pos_61d]))(var_result, var_ids) /* pos= on <var_result:PHLayout[MClassType, MType]>*/;
4961 var18 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__compute_masks]))(self, var_elements, var_ids) /* compute_masks on <self:ResolutionHasher>*/;
4962 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__PHLayout__masks_61d]))(var_result, var18) /* masks= on <var_result:PHLayout[MClassType, MType]>*/;
4963 var19 = ((val* (*)(val*))(var_result->class->vft[COLOR_layout_builders__PHLayout__masks]))(var_result) /* masks on <var_result:PHLayout[MClassType, MType]>*/;
4964 var20 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_layout_builders__PerfectHasher__compute_hashes]))(self, var_elements, var_ids, var19) /* compute_hashes on <self:ResolutionHasher>*/;
4965 ((void (*)(val*, val*))(var_result->class->vft[COLOR_layout_builders__PHLayout__hashes_61d]))(var_result, var20) /* hashes= on <var_result:PHLayout[MClassType, MType]>*/;
4966 var = var_result;
4967 goto RET_LABEL;
4968 RET_LABEL:;
4969 return var;
4970 }
4971 /* method layout_builders#ResolutionHasher#build_layout for (self: Object, Map[MClassType, Set[MType]]): Layout[MType] */
4972 val* VIRTUAL_layout_builders__ResolutionHasher__build_layout(val* self, val* p0) {
4973 val* var /* : Layout[MType] */;
4974 val* var1 /* : Layout[MType] */;
4975 var1 = layout_builders__ResolutionHasher__build_layout(self, p0);
4976 var = var1;
4977 RET_LABEL:;
4978 return var;
4979 }