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