update NOTICE
[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 K */
23 /* <p0:Object> isa K */
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`", "K", 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 V */
39 /* <p1:nullable Object> isa V */
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`", "V", 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 K */
104 /* <p0:Object> isa K */
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`", "K", 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 ((void (*)(val*))(var2->class->vft[COLOR_kernel__Object__init]))(var2) /* 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 ((void (*)(val*))(self->class->vft[COLOR_more_collections__MultiHashMap__init]))(self) /* 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 { /* Inline more_collections#MultiHashMap#init (self) on <self:Object(MultiHashMap[Object, nullable Object])> */
152 {
153 ((void (*)(val*))(self->class->vft[COLOR_more_collections__MultiHashMap__init]))(self) /* init on <self:Object(MultiHashMap[Object, nullable Object])>*/;
154 }
155 RET_LABEL1:(void)0;
156 }
157 RET_LABEL:;
158 }
159 /* method more_collections#HashMap2#level1 for (self: HashMap2[Object, Object, nullable Object]): HashMap[Object, HashMap[Object, nullable Object]] */
160 val* more_collections__HashMap2__level1(val* self) {
161 val* var /* : HashMap[Object, HashMap[Object, nullable Object]] */;
162 val* var1 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
163 var1 = self->attrs[COLOR_more_collections__HashMap2___level1].val; /* _level1 on <self:HashMap2[Object, Object, nullable Object]> */
164 if (unlikely(var1 == NULL)) {
165 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
166 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 57);
167 show_backtrace(1);
168 }
169 var = var1;
170 RET_LABEL:;
171 return var;
172 }
173 /* method more_collections#HashMap2#level1 for (self: Object): HashMap[Object, HashMap[Object, nullable Object]] */
174 val* VIRTUAL_more_collections__HashMap2__level1(val* self) {
175 val* var /* : HashMap[Object, HashMap[Object, nullable Object]] */;
176 val* var1 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
177 val* var3 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
178 { /* Inline more_collections#HashMap2#level1 (self) on <self:Object(HashMap2[Object, Object, nullable Object])> */
179 var3 = self->attrs[COLOR_more_collections__HashMap2___level1].val; /* _level1 on <self:Object(HashMap2[Object, Object, nullable Object])> */
180 if (unlikely(var3 == NULL)) {
181 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
182 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 57);
183 show_backtrace(1);
184 }
185 var1 = var3;
186 RET_LABEL2:(void)0;
187 }
188 var = var1;
189 RET_LABEL:;
190 return var;
191 }
192 /* method more_collections#HashMap2#[] for (self: HashMap2[Object, Object, nullable Object], Object, Object): nullable Object */
193 val* more_collections__HashMap2___91d_93d(val* self, val* p0, val* p1) {
194 val* var /* : nullable Object */;
195 short int var1 /* : Bool */;
196 int cltype;
197 int idtype;
198 const struct type* type_struct;
199 const char* var_class_name;
200 short int var2 /* : Bool */;
201 int cltype3;
202 int idtype4;
203 const struct type* type_struct5;
204 const char* var_class_name6;
205 val* var_k1 /* var k1: Object */;
206 val* var_k2 /* var k2: Object */;
207 val* var7 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
208 val* var9 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
209 val* var_level1 /* var level1: HashMap[Object, HashMap[Object, nullable Object]] */;
210 short int var10 /* : Bool */;
211 short int var11 /* : Bool */;
212 val* var12 /* : null */;
213 val* var13 /* : nullable Object */;
214 val* var_level2 /* var level2: HashMap[Object, nullable Object] */;
215 short int var14 /* : Bool */;
216 short int var15 /* : Bool */;
217 val* var16 /* : null */;
218 val* var17 /* : nullable Object */;
219 /* Covariant cast for argument 0 (k1) <p0:Object> isa K1 */
220 /* <p0:Object> isa K1 */
221 type_struct = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT0];
222 cltype = type_struct->color;
223 idtype = type_struct->id;
224 if(cltype >= p0->type->table_size) {
225 var1 = 0;
226 } else {
227 var1 = p0->type->type_table[cltype] == idtype;
228 }
229 if (unlikely(!var1)) {
230 var_class_name = p0 == NULL ? "null" : p0->type->name;
231 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K1", var_class_name);
232 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 59);
233 show_backtrace(1);
234 }
235 /* Covariant cast for argument 1 (k2) <p1:Object> isa K2 */
236 /* <p1:Object> isa K2 */
237 type_struct5 = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT1];
238 cltype3 = type_struct5->color;
239 idtype4 = type_struct5->id;
240 if(cltype3 >= p1->type->table_size) {
241 var2 = 0;
242 } else {
243 var2 = p1->type->type_table[cltype3] == idtype4;
244 }
245 if (unlikely(!var2)) {
246 var_class_name6 = p1 == NULL ? "null" : p1->type->name;
247 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K2", var_class_name6);
248 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 59);
249 show_backtrace(1);
250 }
251 var_k1 = p0;
252 var_k2 = p1;
253 {
254 { /* Inline more_collections#HashMap2#level1 (self) on <self:HashMap2[Object, Object, nullable Object]> */
255 var9 = self->attrs[COLOR_more_collections__HashMap2___level1].val; /* _level1 on <self:HashMap2[Object, Object, nullable Object]> */
256 if (unlikely(var9 == NULL)) {
257 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
258 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 57);
259 show_backtrace(1);
260 }
261 var7 = var9;
262 RET_LABEL8:(void)0;
263 }
264 }
265 var_level1 = var7;
266 {
267 var10 = abstract_collection__MapRead__has_key(var_level1, var_k1);
268 }
269 var11 = !var10;
270 if (var11){
271 var12 = NULL;
272 var = var12;
273 goto RET_LABEL;
274 } else {
275 }
276 {
277 var13 = hash_collection__HashMap___91d_93d(var_level1, var_k1);
278 }
279 var_level2 = var13;
280 {
281 var14 = abstract_collection__MapRead__has_key(var_level2, var_k2);
282 }
283 var15 = !var14;
284 if (var15){
285 var16 = NULL;
286 var = var16;
287 goto RET_LABEL;
288 } else {
289 }
290 {
291 var17 = hash_collection__HashMap___91d_93d(var_level2, var_k2);
292 }
293 var = var17;
294 goto RET_LABEL;
295 RET_LABEL:;
296 return var;
297 }
298 /* method more_collections#HashMap2#[] for (self: Object, Object, Object): nullable Object */
299 val* VIRTUAL_more_collections__HashMap2___91d_93d(val* self, val* p0, val* p1) {
300 val* var /* : nullable Object */;
301 val* var1 /* : nullable Object */;
302 var1 = more_collections__HashMap2___91d_93d(self, p0, p1);
303 var = var1;
304 RET_LABEL:;
305 return var;
306 }
307 /* method more_collections#HashMap2#[]= for (self: HashMap2[Object, Object, nullable Object], Object, Object, nullable Object) */
308 void more_collections__HashMap2___91d_93d_61d(val* self, val* p0, val* p1, val* p2) {
309 short int var /* : Bool */;
310 int cltype;
311 int idtype;
312 const struct type* type_struct;
313 const char* var_class_name;
314 short int var1 /* : Bool */;
315 int cltype2;
316 int idtype3;
317 const struct type* type_struct4;
318 const char* var_class_name5;
319 short int var6 /* : Bool */;
320 int cltype7;
321 int idtype8;
322 const struct type* type_struct9;
323 short int is_nullable;
324 const char* var_class_name10;
325 val* var_k1 /* var k1: Object */;
326 val* var_k2 /* var k2: Object */;
327 val* var_v /* var v: nullable Object */;
328 val* var11 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
329 val* var13 /* : HashMap[Object, HashMap[Object, nullable Object]] */;
330 val* var_level1 /* var level1: HashMap[Object, HashMap[Object, nullable Object]] */;
331 short int var14 /* : Bool */;
332 short int var15 /* : Bool */;
333 val* var16 /* : HashMap[Object, nullable Object] */;
334 val* var_level2 /* var level2: HashMap[Object, nullable Object] */;
335 val* var17 /* : nullable Object */;
336 /* Covariant cast for argument 0 (k1) <p0:Object> isa K1 */
337 /* <p0:Object> isa K1 */
338 type_struct = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT0];
339 cltype = type_struct->color;
340 idtype = type_struct->id;
341 if(cltype >= p0->type->table_size) {
342 var = 0;
343 } else {
344 var = p0->type->type_table[cltype] == idtype;
345 }
346 if (unlikely(!var)) {
347 var_class_name = p0 == NULL ? "null" : p0->type->name;
348 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K1", var_class_name);
349 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 70);
350 show_backtrace(1);
351 }
352 /* Covariant cast for argument 1 (k2) <p1:Object> isa K2 */
353 /* <p1:Object> isa K2 */
354 type_struct4 = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT1];
355 cltype2 = type_struct4->color;
356 idtype3 = type_struct4->id;
357 if(cltype2 >= p1->type->table_size) {
358 var1 = 0;
359 } else {
360 var1 = p1->type->type_table[cltype2] == idtype3;
361 }
362 if (unlikely(!var1)) {
363 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
364 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K2", var_class_name5);
365 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 70);
366 show_backtrace(1);
367 }
368 /* Covariant cast for argument 2 (v) <p2:nullable Object> isa V */
369 /* <p2:nullable Object> isa V */
370 type_struct9 = self->type->resolution_table->types[COLOR_more_collections__HashMap2_FT2];
371 cltype7 = type_struct9->color;
372 idtype8 = type_struct9->id;
373 is_nullable = type_struct9->is_nullable;
374 if(p2 == NULL) {
375 var6 = is_nullable;
376 } else {
377 if(cltype7 >= p2->type->table_size) {
378 var6 = 0;
379 } else {
380 var6 = p2->type->type_table[cltype7] == idtype8;
381 }
382 }
383 if (unlikely(!var6)) {
384 var_class_name10 = p2 == NULL ? "null" : p2->type->name;
385 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "V", var_class_name10);
386 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 70);
387 show_backtrace(1);
388 }
389 var_k1 = p0;
390 var_k2 = p1;
391 var_v = p2;
392 {
393 { /* Inline more_collections#HashMap2#level1 (self) on <self:HashMap2[Object, Object, nullable Object]> */
394 var13 = self->attrs[COLOR_more_collections__HashMap2___level1].val; /* _level1 on <self:HashMap2[Object, Object, nullable Object]> */
395 if (unlikely(var13 == NULL)) {
396 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
397 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 57);
398 show_backtrace(1);
399 }
400 var11 = var13;
401 RET_LABEL12:(void)0;
402 }
403 }
404 var_level1 = var11;
405 {
406 var14 = abstract_collection__MapRead__has_key(var_level1, var_k1);
407 }
408 var15 = !var14;
409 if (var15){
410 var16 = NEW_hash_collection__HashMap(self->type->resolution_table->types[COLOR_hash_collection__HashMapmore_collections__HashMap2_FT1more_collections__HashMap2_FT2]);
411 {
412 ((void (*)(val*))(var16->class->vft[COLOR_kernel__Object__init]))(var16) /* init on <var16:HashMap[Object, nullable Object]>*/;
413 }
414 var_level2 = var16;
415 {
416 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]]>*/
417 }
418 } else {
419 {
420 var17 = hash_collection__HashMap___91d_93d(var_level1, var_k1);
421 }
422 var_level2 = var17;
423 }
424 {
425 hash_collection__HashMap___91d_93d_61d(var_level2, var_k2, var_v); /* Direct call hash_collection#HashMap#[]= on <var_level2:HashMap[Object, nullable Object]>*/
426 }
427 RET_LABEL:;
428 }
429 /* method more_collections#HashMap2#[]= for (self: Object, Object, Object, nullable Object) */
430 void VIRTUAL_more_collections__HashMap2___91d_93d_61d(val* self, val* p0, val* p1, val* p2) {
431 more_collections__HashMap2___91d_93d_61d(self, p0, p1, p2); /* Direct call more_collections#HashMap2#[]= on <self:Object(HashMap2[Object, Object, nullable Object])>*/
432 RET_LABEL:;
433 }
434 /* method more_collections#HashMap3#level1 for (self: HashMap3[Object, Object, Object, nullable Object]): HashMap[Object, HashMap2[Object, Object, nullable Object]] */
435 val* more_collections__HashMap3__level1(val* self) {
436 val* var /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
437 val* var1 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
438 var1 = self->attrs[COLOR_more_collections__HashMap3___level1].val; /* _level1 on <self:HashMap3[Object, Object, Object, nullable Object]> */
439 if (unlikely(var1 == NULL)) {
440 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
441 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 87);
442 show_backtrace(1);
443 }
444 var = var1;
445 RET_LABEL:;
446 return var;
447 }
448 /* method more_collections#HashMap3#level1 for (self: Object): HashMap[Object, HashMap2[Object, Object, nullable Object]] */
449 val* VIRTUAL_more_collections__HashMap3__level1(val* self) {
450 val* var /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
451 val* var1 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
452 val* var3 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
453 { /* Inline more_collections#HashMap3#level1 (self) on <self:Object(HashMap3[Object, Object, Object, nullable Object])> */
454 var3 = self->attrs[COLOR_more_collections__HashMap3___level1].val; /* _level1 on <self:Object(HashMap3[Object, Object, Object, nullable Object])> */
455 if (unlikely(var3 == NULL)) {
456 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
457 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 87);
458 show_backtrace(1);
459 }
460 var1 = var3;
461 RET_LABEL2:(void)0;
462 }
463 var = var1;
464 RET_LABEL:;
465 return var;
466 }
467 /* method more_collections#HashMap3#[] for (self: HashMap3[Object, Object, Object, nullable Object], Object, Object, Object): nullable Object */
468 val* more_collections__HashMap3___91d_93d(val* self, val* p0, val* p1, val* p2) {
469 val* var /* : nullable Object */;
470 short int var1 /* : Bool */;
471 int cltype;
472 int idtype;
473 const struct type* type_struct;
474 const char* var_class_name;
475 short int var2 /* : Bool */;
476 int cltype3;
477 int idtype4;
478 const struct type* type_struct5;
479 const char* var_class_name6;
480 short int var7 /* : Bool */;
481 int cltype8;
482 int idtype9;
483 const struct type* type_struct10;
484 const char* var_class_name11;
485 val* var_k1 /* var k1: Object */;
486 val* var_k2 /* var k2: Object */;
487 val* var_k3 /* var k3: Object */;
488 val* var12 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
489 val* var14 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
490 val* var_level1 /* var level1: HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
491 short int var15 /* : Bool */;
492 short int var16 /* : Bool */;
493 val* var17 /* : null */;
494 val* var18 /* : nullable Object */;
495 val* var_level2 /* var level2: HashMap2[Object, Object, nullable Object] */;
496 val* var19 /* : nullable Object */;
497 /* Covariant cast for argument 0 (k1) <p0:Object> isa K1 */
498 /* <p0:Object> isa K1 */
499 type_struct = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT0];
500 cltype = type_struct->color;
501 idtype = type_struct->id;
502 if(cltype >= p0->type->table_size) {
503 var1 = 0;
504 } else {
505 var1 = p0->type->type_table[cltype] == idtype;
506 }
507 if (unlikely(!var1)) {
508 var_class_name = p0 == NULL ? "null" : p0->type->name;
509 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K1", var_class_name);
510 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 89);
511 show_backtrace(1);
512 }
513 /* Covariant cast for argument 1 (k2) <p1:Object> isa K2 */
514 /* <p1:Object> isa K2 */
515 type_struct5 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT1];
516 cltype3 = type_struct5->color;
517 idtype4 = type_struct5->id;
518 if(cltype3 >= p1->type->table_size) {
519 var2 = 0;
520 } else {
521 var2 = p1->type->type_table[cltype3] == idtype4;
522 }
523 if (unlikely(!var2)) {
524 var_class_name6 = p1 == NULL ? "null" : p1->type->name;
525 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K2", var_class_name6);
526 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 89);
527 show_backtrace(1);
528 }
529 /* Covariant cast for argument 2 (k3) <p2:Object> isa K3 */
530 /* <p2:Object> isa K3 */
531 type_struct10 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT2];
532 cltype8 = type_struct10->color;
533 idtype9 = type_struct10->id;
534 if(cltype8 >= p2->type->table_size) {
535 var7 = 0;
536 } else {
537 var7 = p2->type->type_table[cltype8] == idtype9;
538 }
539 if (unlikely(!var7)) {
540 var_class_name11 = p2 == NULL ? "null" : p2->type->name;
541 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K3", var_class_name11);
542 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 89);
543 show_backtrace(1);
544 }
545 var_k1 = p0;
546 var_k2 = p1;
547 var_k3 = p2;
548 {
549 { /* Inline more_collections#HashMap3#level1 (self) on <self:HashMap3[Object, Object, Object, nullable Object]> */
550 var14 = self->attrs[COLOR_more_collections__HashMap3___level1].val; /* _level1 on <self:HashMap3[Object, Object, Object, nullable Object]> */
551 if (unlikely(var14 == NULL)) {
552 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
553 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 87);
554 show_backtrace(1);
555 }
556 var12 = var14;
557 RET_LABEL13:(void)0;
558 }
559 }
560 var_level1 = var12;
561 {
562 var15 = abstract_collection__MapRead__has_key(var_level1, var_k1);
563 }
564 var16 = !var15;
565 if (var16){
566 var17 = NULL;
567 var = var17;
568 goto RET_LABEL;
569 } else {
570 }
571 {
572 var18 = hash_collection__HashMap___91d_93d(var_level1, var_k1);
573 }
574 var_level2 = var18;
575 {
576 var19 = more_collections__HashMap2___91d_93d(var_level2, var_k2, var_k3);
577 }
578 var = var19;
579 goto RET_LABEL;
580 RET_LABEL:;
581 return var;
582 }
583 /* method more_collections#HashMap3#[] for (self: Object, Object, Object, Object): nullable Object */
584 val* VIRTUAL_more_collections__HashMap3___91d_93d(val* self, val* p0, val* p1, val* p2) {
585 val* var /* : nullable Object */;
586 val* var1 /* : nullable Object */;
587 var1 = more_collections__HashMap3___91d_93d(self, p0, p1, p2);
588 var = var1;
589 RET_LABEL:;
590 return var;
591 }
592 /* method more_collections#HashMap3#[]= for (self: HashMap3[Object, Object, Object, nullable Object], Object, Object, Object, nullable Object) */
593 void more_collections__HashMap3___91d_93d_61d(val* self, val* p0, val* p1, val* p2, val* p3) {
594 short int var /* : Bool */;
595 int cltype;
596 int idtype;
597 const struct type* type_struct;
598 const char* var_class_name;
599 short int var1 /* : Bool */;
600 int cltype2;
601 int idtype3;
602 const struct type* type_struct4;
603 const char* var_class_name5;
604 short int var6 /* : Bool */;
605 int cltype7;
606 int idtype8;
607 const struct type* type_struct9;
608 const char* var_class_name10;
609 short int var11 /* : Bool */;
610 int cltype12;
611 int idtype13;
612 const struct type* type_struct14;
613 short int is_nullable;
614 const char* var_class_name15;
615 val* var_k1 /* var k1: Object */;
616 val* var_k2 /* var k2: Object */;
617 val* var_k3 /* var k3: Object */;
618 val* var_v /* var v: nullable Object */;
619 val* var16 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
620 val* var18 /* : HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
621 val* var_level1 /* var level1: HashMap[Object, HashMap2[Object, Object, nullable Object]] */;
622 short int var19 /* : Bool */;
623 short int var20 /* : Bool */;
624 val* var21 /* : HashMap2[Object, Object, nullable Object] */;
625 val* var_level2 /* var level2: HashMap2[Object, Object, nullable Object] */;
626 val* var22 /* : nullable Object */;
627 /* Covariant cast for argument 0 (k1) <p0:Object> isa K1 */
628 /* <p0:Object> isa K1 */
629 type_struct = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT0];
630 cltype = type_struct->color;
631 idtype = type_struct->id;
632 if(cltype >= p0->type->table_size) {
633 var = 0;
634 } else {
635 var = p0->type->type_table[cltype] == idtype;
636 }
637 if (unlikely(!var)) {
638 var_class_name = p0 == NULL ? "null" : p0->type->name;
639 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K1", var_class_name);
640 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 99);
641 show_backtrace(1);
642 }
643 /* Covariant cast for argument 1 (k2) <p1:Object> isa K2 */
644 /* <p1:Object> isa K2 */
645 type_struct4 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT1];
646 cltype2 = type_struct4->color;
647 idtype3 = type_struct4->id;
648 if(cltype2 >= p1->type->table_size) {
649 var1 = 0;
650 } else {
651 var1 = p1->type->type_table[cltype2] == idtype3;
652 }
653 if (unlikely(!var1)) {
654 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
655 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K2", var_class_name5);
656 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 99);
657 show_backtrace(1);
658 }
659 /* Covariant cast for argument 2 (k3) <p2:Object> isa K3 */
660 /* <p2:Object> isa K3 */
661 type_struct9 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT2];
662 cltype7 = type_struct9->color;
663 idtype8 = type_struct9->id;
664 if(cltype7 >= p2->type->table_size) {
665 var6 = 0;
666 } else {
667 var6 = p2->type->type_table[cltype7] == idtype8;
668 }
669 if (unlikely(!var6)) {
670 var_class_name10 = p2 == NULL ? "null" : p2->type->name;
671 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "K3", var_class_name10);
672 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 99);
673 show_backtrace(1);
674 }
675 /* Covariant cast for argument 3 (v) <p3:nullable Object> isa V */
676 /* <p3:nullable Object> isa V */
677 type_struct14 = self->type->resolution_table->types[COLOR_more_collections__HashMap3_FT3];
678 cltype12 = type_struct14->color;
679 idtype13 = type_struct14->id;
680 is_nullable = type_struct14->is_nullable;
681 if(p3 == NULL) {
682 var11 = is_nullable;
683 } else {
684 if(cltype12 >= p3->type->table_size) {
685 var11 = 0;
686 } else {
687 var11 = p3->type->type_table[cltype12] == idtype13;
688 }
689 }
690 if (unlikely(!var11)) {
691 var_class_name15 = p3 == NULL ? "null" : p3->type->name;
692 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "V", var_class_name15);
693 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 99);
694 show_backtrace(1);
695 }
696 var_k1 = p0;
697 var_k2 = p1;
698 var_k3 = p2;
699 var_v = p3;
700 {
701 { /* Inline more_collections#HashMap3#level1 (self) on <self:HashMap3[Object, Object, Object, nullable Object]> */
702 var18 = self->attrs[COLOR_more_collections__HashMap3___level1].val; /* _level1 on <self:HashMap3[Object, Object, Object, nullable Object]> */
703 if (unlikely(var18 == NULL)) {
704 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _level1");
705 PRINT_ERROR(" (%s:%d)\n", "../lib/more_collections.nit", 87);
706 show_backtrace(1);
707 }
708 var16 = var18;
709 RET_LABEL17:(void)0;
710 }
711 }
712 var_level1 = var16;
713 {
714 var19 = abstract_collection__MapRead__has_key(var_level1, var_k1);
715 }
716 var20 = !var19;
717 if (var20){
718 var21 = NEW_more_collections__HashMap2(self->type->resolution_table->types[COLOR_more_collections__HashMap2more_collections__HashMap3_FT1more_collections__HashMap3_FT2more_collections__HashMap3_FT3]);
719 {
720 ((void (*)(val*))(var21->class->vft[COLOR_kernel__Object__init]))(var21) /* init on <var21:HashMap2[Object, Object, nullable Object]>*/;
721 }
722 var_level2 = var21;
723 {
724 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]]>*/
725 }
726 } else {
727 {
728 var22 = hash_collection__HashMap___91d_93d(var_level1, var_k1);
729 }
730 var_level2 = var22;
731 }
732 {
733 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]>*/
734 }
735 RET_LABEL:;
736 }
737 /* method more_collections#HashMap3#[]= for (self: Object, Object, Object, Object, nullable Object) */
738 void VIRTUAL_more_collections__HashMap3___91d_93d_61d(val* self, val* p0, val* p1, val* p2, val* p3) {
739 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])>*/
740 RET_LABEL:;
741 }