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