c_src: update
[nit.git] / c_src / more_collections.sep.1.c
1 #include "more_collections.sep.0.h"
2 /* method more_collections#MultiHashMap#add_one for (self: MultiHashMap[Object, nullable Object], Object, nullable Object) */
3 void more_collections__MultiHashMap__add_one(val* self, val* p0, val* p1) {
4 short int var /* : Bool */;
5 int cltype;
6 int idtype;
7 const struct type* type_struct;
8 const char* var_class_name;
9 short int var1 /* : Bool */;
10 int cltype2;
11 int idtype3;
12 const struct type* type_struct4;
13 short int is_nullable;
14 const char* var_class_name5;
15 val* var_k /* var k: Object */;
16 val* var_v /* var v: nullable Object */;
17 short int var6 /* : Bool */;
18 val* var7 /* : nullable Object */;
19 val* var8 /* : Array[nullable Object] */;
20 long var9 /* : Int */;
21 val* var_ /* var : Array[nullable Object] */;
22 /* Covariant cast for argument 0 (k) <p0:Object> isa MultiHashMap#0 */
23 /* <p0:Object> isa MultiHashMap#0 */
24 type_struct = self->type->resolution_table->types[COLOR_more_collections__MultiHashMap_FT0];
25 cltype = type_struct->color;
26 idtype = type_struct->id;
27 if(cltype >= p0->type->table_size) {
28 var = 0;
29 } else {
30 var = p0->type->type_table[cltype] == idtype;
31 }
32 if (unlikely(!var)) {
33 var_class_name = p0 == NULL ? "null" : p0->type->name;
34 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MultiHashMap#0", var_class_name);
35 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 35);
36 show_backtrace(1);
37 }
38 /* Covariant cast for argument 1 (v) <p1:nullable Object> isa MultiHashMap#1 */
39 /* <p1:nullable Object> isa MultiHashMap#1 */
40 type_struct4 = self->type->resolution_table->types[COLOR_more_collections__MultiHashMap_FT1];
41 cltype2 = type_struct4->color;
42 idtype3 = type_struct4->id;
43 is_nullable = type_struct4->is_nullable;
44 if(p1 == NULL) {
45 var1 = is_nullable;
46 } else {
47 if(cltype2 >= p1->type->table_size) {
48 var1 = 0;
49 } else {
50 var1 = p1->type->type_table[cltype2] == idtype3;
51 }
52 }
53 if (unlikely(!var1)) {
54 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
55 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MultiHashMap#1", var_class_name5);
56 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 35);
57 show_backtrace(1);
58 }
59 var_k = p0;
60 var_v = p1;
61 {
62 var6 = abstract_collection__MapRead__has_key(self, var_k);
63 }
64 if (var6){
65 {
66 var7 = hash_collection__HashMap___91d_93d(self, var_k);
67 }
68 {
69 array__Array__add(var7, var_v); /* Direct call array#Array#add on <var7:nullable Object(Array[nullable Object])>*/
70 }
71 } else {
72 var8 = NEW_array__Array(self->type->resolution_table->types[COLOR_array__Arraymore_collections__MultiHashMap_FT1]);
73 var9 = 1;
74 {
75 array__Array__with_capacity(var8, var9); /* Direct call array#Array#with_capacity on <var8:Array[nullable Object]>*/
76 }
77 var_ = var8;
78 {
79 array__AbstractArray__push(var_, var_v); /* Direct call array#AbstractArray#push on <var_:Array[nullable Object]>*/
80 }
81 {
82 hash_collection__HashMap___91d_93d_61d(self, var_k, var_); /* Direct call hash_collection#HashMap#[]= on <self:MultiHashMap[Object, nullable Object]>*/
83 }
84 }
85 RET_LABEL:;
86 }
87 /* method more_collections#MultiHashMap#add_one for (self: Object, Object, nullable Object) */
88 void VIRTUAL_more_collections__MultiHashMap__add_one(val* self, val* p0, val* p1) {
89 more_collections__MultiHashMap__add_one(self, p0, p1); /* Direct call more_collections#MultiHashMap#add_one on <self:Object(MultiHashMap[Object, nullable Object])>*/
90 RET_LABEL:;
91 }
92 /* method more_collections#MultiHashMap#provide_default_value for (self: MultiHashMap[Object, nullable Object], Object): Array[nullable Object] */
93 val* more_collections__MultiHashMap__provide_default_value(val* self, val* p0) {
94 val* var /* : Array[nullable Object] */;
95 short int var1 /* : Bool */;
96 int cltype;
97 int idtype;
98 const struct type* type_struct;
99 const char* var_class_name;
100 val* var_key /* var key: Object */;
101 val* var2 /* : Array[nullable Object] */;
102 val* var_res /* var res: Array[nullable Object] */;
103 /* Covariant cast for argument 0 (key) <p0:Object> isa MapRead#0 */
104 /* <p0:Object> isa MapRead#0 */
105 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__MapRead_FT0];
106 cltype = type_struct->color;
107 idtype = type_struct->id;
108 if(cltype >= p0->type->table_size) {
109 var1 = 0;
110 } else {
111 var1 = p0->type->type_table[cltype] == idtype;
112 }
113 if (unlikely(!var1)) {
114 var_class_name = p0 == NULL ? "null" : p0->type->name;
115 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MapRead#0", var_class_name);
116 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 46);
117 show_backtrace(1);
118 }
119 var_key = p0;
120 var2 = NEW_array__Array(self->type->resolution_table->types[COLOR_array__Arraymore_collections__MultiHashMap_FT1]);
121 {
122 array__Array__init(var2); /* Direct call array#Array#init on <var2:Array[nullable Object]>*/
123 }
124 var_res = var2;
125 {
126 hash_collection__HashMap___91d_93d_61d(self, var_key, var_res); /* Direct call hash_collection#HashMap#[]= on <self:MultiHashMap[Object, nullable Object]>*/
127 }
128 var = var_res;
129 goto RET_LABEL;
130 RET_LABEL:;
131 return var;
132 }
133 /* method more_collections#MultiHashMap#provide_default_value for (self: Object, Object): nullable Object */
134 val* VIRTUAL_more_collections__MultiHashMap__provide_default_value(val* self, val* p0) {
135 val* var /* : nullable Object */;
136 val* var1 /* : Array[nullable Object] */;
137 var1 = more_collections__MultiHashMap__provide_default_value(self, p0);
138 var = var1;
139 RET_LABEL:;
140 return var;
141 }
142 /* method more_collections#MultiHashMap#init for (self: MultiHashMap[Object, nullable Object]) */
143 void more_collections__MultiHashMap__init(val* self) {
144 {
145 hash_collection__HashMap__init(self); /* Direct call hash_collection#HashMap#init on <self:MultiHashMap[Object, nullable Object]>*/
146 }
147 RET_LABEL:;
148 }
149 /* method more_collections#MultiHashMap#init for (self: Object) */
150 void VIRTUAL_more_collections__MultiHashMap__init(val* self) {
151 more_collections__MultiHashMap__init(self); /* Direct call more_collections#MultiHashMap#init on <self:Object(MultiHashMap[Object, nullable Object])>*/
152 RET_LABEL:;
153 }
154 /* method more_collections#HashMap2#level1 for (self: HashMap2[Object, Object, nullable Object]): HashMap[Object, HashMap[Object, nullable Object]] */
155 val* more_collections__HashMap2__level1(val* self) {
156 val* var /* : HashMap[Object, HashMap[Object, nullable Object]] */;
157 val* var1 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
158 var1 = self->attrs[COLOR_more_collections__HashMap2___level1].val; /* _level1 on <self:HashMap2[Object, Object, nullable Object]> */
159 if (unlikely(var1 == NULL)) {
160 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
161 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 57);
162 show_backtrace(1);
163 }
164 var = var1;
165 RET_LABEL:;
166 return var;
167 }
168 /* method more_collections#HashMap2#level1 for (self: Object): HashMap[Object, HashMap[Object, nullable Object]] */
169 val* VIRTUAL_more_collections__HashMap2__level1(val* self) {
170 val* var /* : HashMap[Object, HashMap[Object, nullable Object]] */;
171 val* var1 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
172 val* var3 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
173 { /* Inline more_collections#HashMap2#level1 (self) on <self:Object(HashMap2[Object, Object, nullable Object])> */
174 var3 = self->attrs[COLOR_more_collections__HashMap2___level1].val; /* _level1 on <self:Object(HashMap2[Object, Object, nullable Object])> */
175 if (unlikely(var3 == NULL)) {
176 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
177 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 57);
178 show_backtrace(1);
179 }
180 var1 = var3;
181 RET_LABEL2:(void)0;
182 }
183 var = var1;
184 RET_LABEL:;
185 return var;
186 }
187 /* method more_collections#HashMap2#[] for (self: HashMap2[Object, Object, nullable Object], Object, Object): nullable Object */
188 val* more_collections__HashMap2___91d_93d(val* self, val* p0, val* p1) {
189 val* var /* : nullable Object */;
190 short int var1 /* : Bool */;
191 int cltype;
192 int idtype;
193 const struct type* type_struct;
194 const char* var_class_name;
195 short int var2 /* : Bool */;
196 int cltype3;
197 int idtype4;
198 const struct type* type_struct5;
199 const char* var_class_name6;
200 val* var_k1 /* var k1: Object */;
201 val* var_k2 /* var k2: Object */;
202 val* var7 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
203 val* var9 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
204 val* var_level1 /* var level1: HashMap[Object, HashMap[Object, nullable Object]] */;
205 short int var10 /* : Bool */;
206 short int var11 /* : Bool */;
207 val* var12 /* : null */;
208 val* var13 /* : nullable Object */;
209 val* var_level2 /* var level2: HashMap[Object, nullable Object] */;
210 short int var14 /* : Bool */;
211 short int var15 /* : Bool */;
212 val* var16 /* : null */;
213 val* var17 /* : nullable Object */;
214 /* Covariant cast for argument 0 (k1) <p0:Object> isa HashMap2#0 */
215 /* <p0:Object> isa HashMap2#0 */
216 type_struct = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT0];
217 cltype = type_struct->color;
218 idtype = type_struct->id;
219 if(cltype >= p0->type->table_size) {
220 var1 = 0;
221 } else {
222 var1 = p0->type->type_table[cltype] == idtype;
223 }
224 if (unlikely(!var1)) {
225 var_class_name = p0 == NULL ? "null" : p0->type->name;
226 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap2#0", var_class_name);
227 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 59);
228 show_backtrace(1);
229 }
230 /* Covariant cast for argument 1 (k2) <p1:Object> isa HashMap2#1 */
231 /* <p1:Object> isa HashMap2#1 */
232 type_struct5 = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT1];
233 cltype3 = type_struct5->color;
234 idtype4 = type_struct5->id;
235 if(cltype3 >= p1->type->table_size) {
236 var2 = 0;
237 } else {
238 var2 = p1->type->type_table[cltype3] == idtype4;
239 }
240 if (unlikely(!var2)) {
241 var_class_name6 = p1 == NULL ? "null" : p1->type->name;
242 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap2#1", var_class_name6);
243 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 59);
244 show_backtrace(1);
245 }
246 var_k1 = p0;
247 var_k2 = p1;
248 {
249 { /* Inline more_collections#HashMap2#level1 (self) on <self:HashMap2[Object, Object, nullable Object]> */
250 var9 = self->attrs[COLOR_more_collections__HashMap2___level1].val; /* _level1 on <self:HashMap2[Object, Object, nullable Object]> */
251 if (unlikely(var9 == NULL)) {
252 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
253 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 57);
254 show_backtrace(1);
255 }
256 var7 = var9;
257 RET_LABEL8:(void)0;
258 }
259 }
260 var_level1 = var7;
261 {
262 var10 = abstract_collection__MapRead__has_key(var_level1, var_k1);
263 }
264 var11 = !var10;
265 if (var11){
266 var12 = NULL;
267 var = var12;
268 goto RET_LABEL;
269 } else {
270 }
271 {
272 var13 = hash_collection__HashMap___91d_93d(var_level1, var_k1);
273 }
274 var_level2 = var13;
275 {
276 var14 = abstract_collection__MapRead__has_key(var_level2, var_k2);
277 }
278 var15 = !var14;
279 if (var15){
280 var16 = NULL;
281 var = var16;
282 goto RET_LABEL;
283 } else {
284 }
285 {
286 var17 = hash_collection__HashMap___91d_93d(var_level2, var_k2);
287 }
288 var = var17;
289 goto RET_LABEL;
290 RET_LABEL:;
291 return var;
292 }
293 /* method more_collections#HashMap2#[] for (self: Object, Object, Object): nullable Object */
294 val* VIRTUAL_more_collections__HashMap2___91d_93d(val* self, val* p0, val* p1) {
295 val* var /* : nullable Object */;
296 val* var1 /* : nullable Object */;
297 var1 = more_collections__HashMap2___91d_93d(self, p0, p1);
298 var = var1;
299 RET_LABEL:;
300 return var;
301 }
302 /* method more_collections#HashMap2#[]= for (self: HashMap2[Object, Object, nullable Object], Object, Object, nullable Object) */
303 void more_collections__HashMap2___91d_93d_61d(val* self, val* p0, val* p1, val* p2) {
304 short int var /* : Bool */;
305 int cltype;
306 int idtype;
307 const struct type* type_struct;
308 const char* var_class_name;
309 short int var1 /* : Bool */;
310 int cltype2;
311 int idtype3;
312 const struct type* type_struct4;
313 const char* var_class_name5;
314 short int var6 /* : Bool */;
315 int cltype7;
316 int idtype8;
317 const struct type* type_struct9;
318 short int is_nullable;
319 const char* var_class_name10;
320 val* var_k1 /* var k1: Object */;
321 val* var_k2 /* var k2: Object */;
322 val* var_v /* var v: nullable Object */;
323 val* var11 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
324 val* var13 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
325 val* var_level1 /* var level1: HashMap[Object, HashMap[Object, nullable Object]] */;
326 short int var14 /* : Bool */;
327 short int var15 /* : Bool */;
328 val* var16 /* : HashMap[Object, nullable Object] */;
329 val* var_level2 /* var level2: HashMap[Object, nullable Object] */;
330 val* var17 /* : nullable Object */;
331 /* Covariant cast for argument 0 (k1) <p0:Object> isa HashMap2#0 */
332 /* <p0:Object> isa HashMap2#0 */
333 type_struct = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT0];
334 cltype = type_struct->color;
335 idtype = type_struct->id;
336 if(cltype >= p0->type->table_size) {
337 var = 0;
338 } else {
339 var = p0->type->type_table[cltype] == idtype;
340 }
341 if (unlikely(!var)) {
342 var_class_name = p0 == NULL ? "null" : p0->type->name;
343 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap2#0", var_class_name);
344 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 70);
345 show_backtrace(1);
346 }
347 /* Covariant cast for argument 1 (k2) <p1:Object> isa HashMap2#1 */
348 /* <p1:Object> isa HashMap2#1 */
349 type_struct4 = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT1];
350 cltype2 = type_struct4->color;
351 idtype3 = type_struct4->id;
352 if(cltype2 >= p1->type->table_size) {
353 var1 = 0;
354 } else {
355 var1 = p1->type->type_table[cltype2] == idtype3;
356 }
357 if (unlikely(!var1)) {
358 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
359 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap2#1", var_class_name5);
360 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 70);
361 show_backtrace(1);
362 }
363 /* Covariant cast for argument 2 (v) <p2:nullable Object> isa HashMap2#2 */
364 /* <p2:nullable Object> isa HashMap2#2 */
365 type_struct9 = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT2];
366 cltype7 = type_struct9->color;
367 idtype8 = type_struct9->id;
368 is_nullable = type_struct9->is_nullable;
369 if(p2 == NULL) {
370 var6 = is_nullable;
371 } else {
372 if(cltype7 >= p2->type->table_size) {
373 var6 = 0;
374 } else {
375 var6 = p2->type->type_table[cltype7] == idtype8;
376 }
377 }
378 if (unlikely(!var6)) {
379 var_class_name10 = p2 == NULL ? "null" : p2->type->name;
380 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap2#2", var_class_name10);
381 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 70);
382 show_backtrace(1);
383 }
384 var_k1 = p0;
385 var_k2 = p1;
386 var_v = p2;
387 {
388 { /* Inline more_collections#HashMap2#level1 (self) on <self:HashMap2[Object, Object, nullable Object]> */
389 var13 = self->attrs[COLOR_more_collections__HashMap2___level1].val; /* _level1 on <self:HashMap2[Object, Object, nullable Object]> */
390 if (unlikely(var13 == NULL)) {
391 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
392 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 57);
393 show_backtrace(1);
394 }
395 var11 = var13;
396 RET_LABEL12:(void)0;
397 }
398 }
399 var_level1 = var11;
400 {
401 var14 = abstract_collection__MapRead__has_key(var_level1, var_k1);
402 }
403 var15 = !var14;
404 if (var15){
405 var16 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMapmore_collections__HashMap2_FT1more_collections__HashMap2_FT2]);
406 {
407 hash_collection__HashMap__init(var16); /* Direct call hash_collection#HashMap#init on <var16:HashMap[Object, nullable Object]>*/
408 }
409 var_level2 = var16;
410 {
411 hash_collection__HashMap___91d_93d_61d(var_level1, var_k1, var_level2); /* Direct call hash_collection#HashMap#[]= on <var_level1:HashMap[Object, HashMap[Object, nullable Object]]>*/
412 }
413 } else {
414 {
415 var17 = hash_collection__HashMap___91d_93d(var_level1, var_k1);
416 }
417 var_level2 = var17;
418 }
419 {
420 hash_collection__HashMap___91d_93d_61d(var_level2, var_k2, var_v); /* Direct call hash_collection#HashMap#[]= on <var_level2:HashMap[Object, nullable Object]>*/
421 }
422 RET_LABEL:;
423 }
424 /* method more_collections#HashMap2#[]= for (self: Object, Object, Object, nullable Object) */
425 void VIRTUAL_more_collections__HashMap2___91d_93d_61d(val* self, val* p0, val* p1, val* p2) {
426 more_collections__HashMap2___91d_93d_61d(self, p0, p1, p2); /* Direct call more_collections#HashMap2#[]= on <self:Object(HashMap2[Object, Object, nullable Object])>*/
427 RET_LABEL:;
428 }
429 /* method more_collections#HashMap2#init for (self: HashMap2[Object, Object, nullable Object]) */
430 void more_collections__HashMap2__init(val* self) {
431 RET_LABEL:;
432 }
433 /* method more_collections#HashMap2#init for (self: Object) */
434 void VIRTUAL_more_collections__HashMap2__init(val* self) {
435 { /* Inline more_collections#HashMap2#init (self) on <self:Object(HashMap2[Object, Object, nullable Object])> */
436 RET_LABEL1:(void)0;
437 }
438 RET_LABEL:;
439 }
440 /* method more_collections#HashMap3#level1 for (self: HashMap3[Object, Object, Object, nullable Object]): HashMap[Object, HashMap2[Object, Object, nullable Object]] */
441 val* more_collections__HashMap3__level1(val* self) {
442 val* var /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
443 val* var1 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
444 var1 = self->attrs[COLOR_more_collections__HashMap3___level1].val; /* _level1 on <self:HashMap3[Object, Object, Object, nullable Object]> */
445 if (unlikely(var1 == NULL)) {
446 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
447 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 87);
448 show_backtrace(1);
449 }
450 var = var1;
451 RET_LABEL:;
452 return var;
453 }
454 /* method more_collections#HashMap3#level1 for (self: Object): HashMap[Object, HashMap2[Object, Object, nullable Object]] */
455 val* VIRTUAL_more_collections__HashMap3__level1(val* self) {
456 val* var /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
457 val* var1 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
458 val* var3 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
459 { /* Inline more_collections#HashMap3#level1 (self) on <self:Object(HashMap3[Object, Object, Object, nullable Object])> */
460 var3 = self->attrs[COLOR_more_collections__HashMap3___level1].val; /* _level1 on <self:Object(HashMap3[Object, Object, Object, nullable Object])> */
461 if (unlikely(var3 == NULL)) {
462 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
463 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 87);
464 show_backtrace(1);
465 }
466 var1 = var3;
467 RET_LABEL2:(void)0;
468 }
469 var = var1;
470 RET_LABEL:;
471 return var;
472 }
473 /* method more_collections#HashMap3#[] for (self: HashMap3[Object, Object, Object, nullable Object], Object, Object, Object): nullable Object */
474 val* more_collections__HashMap3___91d_93d(val* self, val* p0, val* p1, val* p2) {
475 val* var /* : nullable Object */;
476 short int var1 /* : Bool */;
477 int cltype;
478 int idtype;
479 const struct type* type_struct;
480 const char* var_class_name;
481 short int var2 /* : Bool */;
482 int cltype3;
483 int idtype4;
484 const struct type* type_struct5;
485 const char* var_class_name6;
486 short int var7 /* : Bool */;
487 int cltype8;
488 int idtype9;
489 const struct type* type_struct10;
490 const char* var_class_name11;
491 val* var_k1 /* var k1: Object */;
492 val* var_k2 /* var k2: Object */;
493 val* var_k3 /* var k3: Object */;
494 val* var12 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
495 val* var14 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
496 val* var_level1 /* var level1: HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
497 short int var15 /* : Bool */;
498 short int var16 /* : Bool */;
499 val* var17 /* : null */;
500 val* var18 /* : nullable Object */;
501 val* var_level2 /* var level2: HashMap2[Object, Object, nullable Object] */;
502 val* var19 /* : nullable Object */;
503 /* Covariant cast for argument 0 (k1) <p0:Object> isa HashMap3#0 */
504 /* <p0:Object> isa HashMap3#0 */
505 type_struct = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT0];
506 cltype = type_struct->color;
507 idtype = type_struct->id;
508 if(cltype >= p0->type->table_size) {
509 var1 = 0;
510 } else {
511 var1 = p0->type->type_table[cltype] == idtype;
512 }
513 if (unlikely(!var1)) {
514 var_class_name = p0 == NULL ? "null" : p0->type->name;
515 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap3#0", var_class_name);
516 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 89);
517 show_backtrace(1);
518 }
519 /* Covariant cast for argument 1 (k2) <p1:Object> isa HashMap3#1 */
520 /* <p1:Object> isa HashMap3#1 */
521 type_struct5 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT1];
522 cltype3 = type_struct5->color;
523 idtype4 = type_struct5->id;
524 if(cltype3 >= p1->type->table_size) {
525 var2 = 0;
526 } else {
527 var2 = p1->type->type_table[cltype3] == idtype4;
528 }
529 if (unlikely(!var2)) {
530 var_class_name6 = p1 == NULL ? "null" : p1->type->name;
531 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap3#1", var_class_name6);
532 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 89);
533 show_backtrace(1);
534 }
535 /* Covariant cast for argument 2 (k3) <p2:Object> isa HashMap3#2 */
536 /* <p2:Object> isa HashMap3#2 */
537 type_struct10 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT2];
538 cltype8 = type_struct10->color;
539 idtype9 = type_struct10->id;
540 if(cltype8 >= p2->type->table_size) {
541 var7 = 0;
542 } else {
543 var7 = p2->type->type_table[cltype8] == idtype9;
544 }
545 if (unlikely(!var7)) {
546 var_class_name11 = p2 == NULL ? "null" : p2->type->name;
547 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap3#2", var_class_name11);
548 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 89);
549 show_backtrace(1);
550 }
551 var_k1 = p0;
552 var_k2 = p1;
553 var_k3 = p2;
554 {
555 { /* Inline more_collections#HashMap3#level1 (self) on <self:HashMap3[Object, Object, Object, nullable Object]> */
556 var14 = self->attrs[COLOR_more_collections__HashMap3___level1].val; /* _level1 on <self:HashMap3[Object, Object, Object, nullable Object]> */
557 if (unlikely(var14 == NULL)) {
558 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
559 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 87);
560 show_backtrace(1);
561 }
562 var12 = var14;
563 RET_LABEL13:(void)0;
564 }
565 }
566 var_level1 = var12;
567 {
568 var15 = abstract_collection__MapRead__has_key(var_level1, var_k1);
569 }
570 var16 = !var15;
571 if (var16){
572 var17 = NULL;
573 var = var17;
574 goto RET_LABEL;
575 } else {
576 }
577 {
578 var18 = hash_collection__HashMap___91d_93d(var_level1, var_k1);
579 }
580 var_level2 = var18;
581 {
582 var19 = more_collections__HashMap2___91d_93d(var_level2, var_k2, var_k3);
583 }
584 var = var19;
585 goto RET_LABEL;
586 RET_LABEL:;
587 return var;
588 }
589 /* method more_collections#HashMap3#[] for (self: Object, Object, Object, Object): nullable Object */
590 val* VIRTUAL_more_collections__HashMap3___91d_93d(val* self, val* p0, val* p1, val* p2) {
591 val* var /* : nullable Object */;
592 val* var1 /* : nullable Object */;
593 var1 = more_collections__HashMap3___91d_93d(self, p0, p1, p2);
594 var = var1;
595 RET_LABEL:;
596 return var;
597 }
598 /* method more_collections#HashMap3#[]= for (self: HashMap3[Object, Object, Object, nullable Object], Object, Object, Object, nullable Object) */
599 void more_collections__HashMap3___91d_93d_61d(val* self, val* p0, val* p1, val* p2, val* p3) {
600 short int var /* : Bool */;
601 int cltype;
602 int idtype;
603 const struct type* type_struct;
604 const char* var_class_name;
605 short int var1 /* : Bool */;
606 int cltype2;
607 int idtype3;
608 const struct type* type_struct4;
609 const char* var_class_name5;
610 short int var6 /* : Bool */;
611 int cltype7;
612 int idtype8;
613 const struct type* type_struct9;
614 const char* var_class_name10;
615 short int var11 /* : Bool */;
616 int cltype12;
617 int idtype13;
618 const struct type* type_struct14;
619 short int is_nullable;
620 const char* var_class_name15;
621 val* var_k1 /* var k1: Object */;
622 val* var_k2 /* var k2: Object */;
623 val* var_k3 /* var k3: Object */;
624 val* var_v /* var v: nullable Object */;
625 val* var16 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
626 val* var18 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
627 val* var_level1 /* var level1: HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
628 short int var19 /* : Bool */;
629 short int var20 /* : Bool */;
630 val* var21 /* : HashMap2[Object, Object, nullable Object] */;
631 val* var_level2 /* var level2: HashMap2[Object, Object, nullable Object] */;
632 val* var23 /* : nullable Object */;
633 /* Covariant cast for argument 0 (k1) <p0:Object> isa HashMap3#0 */
634 /* <p0:Object> isa HashMap3#0 */
635 type_struct = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT0];
636 cltype = type_struct->color;
637 idtype = type_struct->id;
638 if(cltype >= p0->type->table_size) {
639 var = 0;
640 } else {
641 var = p0->type->type_table[cltype] == idtype;
642 }
643 if (unlikely(!var)) {
644 var_class_name = p0 == NULL ? "null" : p0->type->name;
645 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap3#0", var_class_name);
646 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 99);
647 show_backtrace(1);
648 }
649 /* Covariant cast for argument 1 (k2) <p1:Object> isa HashMap3#1 */
650 /* <p1:Object> isa HashMap3#1 */
651 type_struct4 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT1];
652 cltype2 = type_struct4->color;
653 idtype3 = type_struct4->id;
654 if(cltype2 >= p1->type->table_size) {
655 var1 = 0;
656 } else {
657 var1 = p1->type->type_table[cltype2] == idtype3;
658 }
659 if (unlikely(!var1)) {
660 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
661 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap3#1", var_class_name5);
662 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 99);
663 show_backtrace(1);
664 }
665 /* Covariant cast for argument 2 (k3) <p2:Object> isa HashMap3#2 */
666 /* <p2:Object> isa HashMap3#2 */
667 type_struct9 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT2];
668 cltype7 = type_struct9->color;
669 idtype8 = type_struct9->id;
670 if(cltype7 >= p2->type->table_size) {
671 var6 = 0;
672 } else {
673 var6 = p2->type->type_table[cltype7] == idtype8;
674 }
675 if (unlikely(!var6)) {
676 var_class_name10 = p2 == NULL ? "null" : p2->type->name;
677 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap3#2", var_class_name10);
678 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 99);
679 show_backtrace(1);
680 }
681 /* Covariant cast for argument 3 (v) <p3:nullable Object> isa HashMap3#3 */
682 /* <p3:nullable Object> isa HashMap3#3 */
683 type_struct14 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT3];
684 cltype12 = type_struct14->color;
685 idtype13 = type_struct14->id;
686 is_nullable = type_struct14->is_nullable;
687 if(p3 == NULL) {
688 var11 = is_nullable;
689 } else {
690 if(cltype12 >= p3->type->table_size) {
691 var11 = 0;
692 } else {
693 var11 = p3->type->type_table[cltype12] == idtype13;
694 }
695 }
696 if (unlikely(!var11)) {
697 var_class_name15 = p3 == NULL ? "null" : p3->type->name;
698 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap3#3", var_class_name15);
699 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 99);
700 show_backtrace(1);
701 }
702 var_k1 = p0;
703 var_k2 = p1;
704 var_k3 = p2;
705 var_v = p3;
706 {
707 { /* Inline more_collections#HashMap3#level1 (self) on <self:HashMap3[Object, Object, Object, nullable Object]> */
708 var18 = self->attrs[COLOR_more_collections__HashMap3___level1].val; /* _level1 on <self:HashMap3[Object, Object, Object, nullable Object]> */
709 if (unlikely(var18 == NULL)) {
710 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
711 PRINT_ERROR(" (%s:%d)\n", "lib/more_collections.nit", 87);
712 show_backtrace(1);
713 }
714 var16 = var18;
715 RET_LABEL17:(void)0;
716 }
717 }
718 var_level1 = var16;
719 {
720 var19 = abstract_collection__MapRead__has_key(var_level1, var_k1);
721 }
722 var20 = !var19;
723 if (var20){
724 var21 = NEW_more_collections__HashMap2(self->type->resolution_table->types[COLOR_more_collections__HashMap2more_collections__HashMap3_FT1more_collections__HashMap3_FT2more_collections__HashMap3_FT3]);
725 {
726 { /* Inline more_collections#HashMap2#init (var21) on <var21:HashMap2[Object, Object, nullable Object]> */
727 RET_LABEL22:(void)0;
728 }
729 }
730 var_level2 = var21;
731 {
732 hash_collection__HashMap___91d_93d_61d(var_level1, var_k1, var_level2); /* Direct call hash_collection#HashMap#[]= on <var_level1:HashMap[Object, HashMap2[Object, Object, nullable Object]]>*/
733 }
734 } else {
735 {
736 var23 = hash_collection__HashMap___91d_93d(var_level1, var_k1);
737 }
738 var_level2 = var23;
739 }
740 {
741 more_collections__HashMap2___91d_93d_61d(var_level2, var_k2, var_k3, var_v); /* Direct call more_collections#HashMap2#[]= on <var_level2:HashMap2[Object, Object, nullable Object]>*/
742 }
743 RET_LABEL:;
744 }
745 /* method more_collections#HashMap3#[]= for (self: Object, Object, Object, Object, nullable Object) */
746 void VIRTUAL_more_collections__HashMap3___91d_93d_61d(val* self, val* p0, val* p1, val* p2, val* p3) {
747 more_collections__HashMap3___91d_93d_61d(self, p0, p1, p2, p3); /* Direct call more_collections#HashMap3#[]= on <self:Object(HashMap3[Object, Object, Object, nullable Object])>*/
748 RET_LABEL:;
749 }
750 /* method more_collections#HashMap3#init for (self: HashMap3[Object, Object, Object, nullable Object]) */
751 void more_collections__HashMap3__init(val* self) {
752 RET_LABEL:;
753 }
754 /* method more_collections#HashMap3#init for (self: Object) */
755 void VIRTUAL_more_collections__HashMap3__init(val* self) {
756 { /* Inline more_collections#HashMap3#init (self) on <self:Object(HashMap3[Object, Object, Object, nullable Object])> */
757 RET_LABEL1:(void)0;
758 }
759 RET_LABEL:;
760 }