c_src: regenerate
[nit.git] / c_src / ordered_tree.sep.1.c
1 #include "ordered_tree.sep.0.h"
2 /* method ordered_tree#OrderedTree#roots for (self: OrderedTree[Object]): Array[Object] */
3 val* ordered_tree___ordered_tree__OrderedTree___roots(val* self) {
4 val* var /* : Array[Object] */;
5 val* var1 /* : Array[Object] */;
6 var1 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
7 if (unlikely(var1 == NULL)) {
8 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
9 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
10 fatal_exit(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method ordered_tree#OrderedTree#sub for (self: OrderedTree[Object]): HashMap[Object, Array[Object]] */
17 val* ordered_tree___ordered_tree__OrderedTree___sub(val* self) {
18 val* var /* : HashMap[Object, Array[Object]] */;
19 val* var1 /* : HashMap[Object, Array[Object]] */;
20 var1 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
21 if (unlikely(var1 == NULL)) {
22 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
23 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
24 fatal_exit(1);
25 }
26 var = var1;
27 RET_LABEL:;
28 return var;
29 }
30 /* method ordered_tree#OrderedTree#parents for (self: OrderedTree[Object]): HashMap[Object, nullable Object] */
31 val* ordered_tree___ordered_tree__OrderedTree___parents(val* self) {
32 val* var /* : HashMap[Object, nullable Object] */;
33 val* var1 /* : HashMap[Object, nullable Object] */;
34 var1 = self->attrs[COLOR_ordered_tree__OrderedTree___parents].val; /* _parents on <self:OrderedTree[Object]> */
35 if (unlikely(var1 == NULL)) {
36 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _parents");
37 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 73);
38 fatal_exit(1);
39 }
40 var = var1;
41 RET_LABEL:;
42 return var;
43 }
44 /* method ordered_tree#OrderedTree#length for (self: OrderedTree[Object]): Int */
45 long ordered_tree___ordered_tree__OrderedTree___core__abstract_collection__Collection__length(val* self) {
46 long var /* : Int */;
47 val* var1 /* : HashMap[Object, nullable Object] */;
48 val* var3 /* : HashMap[Object, nullable Object] */;
49 long var4 /* : Int */;
50 {
51 { /* Inline ordered_tree#OrderedTree#parents (self) on <self:OrderedTree[Object]> */
52 var3 = self->attrs[COLOR_ordered_tree__OrderedTree___parents].val; /* _parents on <self:OrderedTree[Object]> */
53 if (unlikely(var3 == NULL)) {
54 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _parents");
55 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 73);
56 fatal_exit(1);
57 }
58 var1 = var3;
59 RET_LABEL2:(void)0;
60 }
61 }
62 {
63 var4 = core___core__HashMap___core__abstract_collection__MapRead__length(var1);
64 }
65 var = var4;
66 goto RET_LABEL;
67 RET_LABEL:;
68 return var;
69 }
70 /* method ordered_tree#OrderedTree#has for (self: OrderedTree[Object], nullable Object): Bool */
71 short int ordered_tree___ordered_tree__OrderedTree___core__abstract_collection__Collection__has(val* self, val* p0) {
72 short int var /* : Bool */;
73 val* var_e /* var e: nullable Object */;
74 val* var1 /* : HashMap[Object, nullable Object] */;
75 val* var3 /* : HashMap[Object, nullable Object] */;
76 short int var4 /* : Bool */;
77 var_e = p0;
78 {
79 { /* Inline ordered_tree#OrderedTree#parents (self) on <self:OrderedTree[Object]> */
80 var3 = self->attrs[COLOR_ordered_tree__OrderedTree___parents].val; /* _parents on <self:OrderedTree[Object]> */
81 if (unlikely(var3 == NULL)) {
82 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _parents");
83 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 73);
84 fatal_exit(1);
85 }
86 var1 = var3;
87 RET_LABEL2:(void)0;
88 }
89 }
90 {
91 var4 = core___core__HashMap___core__abstract_collection__MapRead__has_key(var1, var_e);
92 }
93 var = var4;
94 goto RET_LABEL;
95 RET_LABEL:;
96 return var;
97 }
98 /* method ordered_tree#OrderedTree#add for (self: OrderedTree[Object], nullable Object, Object) */
99 void ordered_tree___ordered_tree__OrderedTree___add(val* self, val* p0, val* p1) {
100 short int var /* : Bool */;
101 int cltype;
102 int idtype;
103 const struct type* type_struct;
104 const char* var_class_name;
105 short int var1 /* : Bool */;
106 int cltype2;
107 int idtype3;
108 const struct type* type_struct4;
109 const char* var_class_name5;
110 val* var_p /* var p: nullable Object */;
111 val* var_e /* var e: Object */;
112 val* var6 /* : HashMap[Object, nullable Object] */;
113 val* var8 /* : HashMap[Object, nullable Object] */;
114 short int var9 /* : Bool */;
115 short int var10 /* : Bool */;
116 val* var11 /* : Array[Object] */;
117 val* var13 /* : Array[Object] */;
118 short int var14 /* : Bool */;
119 short int var15 /* : Bool */;
120 val* var16 /* : HashMap[Object, Array[Object]] */;
121 val* var18 /* : HashMap[Object, Array[Object]] */;
122 short int var19 /* : Bool */;
123 val* var20 /* : HashMap[Object, Array[Object]] */;
124 val* var22 /* : HashMap[Object, Array[Object]] */;
125 val* var23 /* : nullable Object */;
126 val* var24 /* : HashMap[Object, Array[Object]] */;
127 val* var26 /* : HashMap[Object, Array[Object]] */;
128 val* var27 /* : Array[Object] */;
129 val* var_ /* var : Array[Object] */;
130 /* Covariant cast for argument 0 (p) <p0:nullable Object> isa nullable E */
131 /* <p0:nullable Object> isa nullable E */
132 type_struct = self->type->resolution_table->types[COLOR_nullable__ordered_tree__OrderedTree___35dE];
133 cltype = type_struct->color;
134 idtype = type_struct->id;
135 if(p0 == NULL) {
136 var = 1;
137 } else {
138 if(cltype >= (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->table_size) {
139 var = 0;
140 } else {
141 var = (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->type_table[cltype] == idtype;
142 }
143 }
144 if (unlikely(!var)) {
145 var_class_name = p0 == NULL ? "null" : (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->name;
146 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable E", var_class_name);
147 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 94);
148 fatal_exit(1);
149 }
150 /* Covariant cast for argument 1 (e) <p1:Object> isa E */
151 /* <p1:Object> isa E */
152 type_struct4 = self->type->resolution_table->types[COLOR_ordered_tree__OrderedTree___35dE];
153 cltype2 = type_struct4->color;
154 idtype3 = type_struct4->id;
155 if(cltype2 >= (((long)p1&3)?type_info[((long)p1&3)]:p1->type)->table_size) {
156 var1 = 0;
157 } else {
158 var1 = (((long)p1&3)?type_info[((long)p1&3)]:p1->type)->type_table[cltype2] == idtype3;
159 }
160 if (unlikely(!var1)) {
161 var_class_name5 = p1 == NULL ? "null" : (((long)p1&3)?type_info[((long)p1&3)]:p1->type)->name;
162 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name5);
163 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 94);
164 fatal_exit(1);
165 }
166 var_p = p0;
167 var_e = p1;
168 {
169 ordered_tree___ordered_tree__OrderedTree___detach(self, var_e); /* Direct call ordered_tree#OrderedTree#detach on <self:OrderedTree[Object]>*/
170 }
171 {
172 { /* Inline ordered_tree#OrderedTree#parents (self) on <self:OrderedTree[Object]> */
173 var8 = self->attrs[COLOR_ordered_tree__OrderedTree___parents].val; /* _parents on <self:OrderedTree[Object]> */
174 if (unlikely(var8 == NULL)) {
175 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _parents");
176 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 73);
177 fatal_exit(1);
178 }
179 var6 = var8;
180 RET_LABEL7:(void)0;
181 }
182 }
183 {
184 core___core__HashMap___core__abstract_collection__Map___91d_93d_61d(var6, var_e, var_p); /* Direct call hash_collection#HashMap#[]= on <var6:HashMap[Object, nullable Object]>*/
185 }
186 if (var_p == NULL) {
187 var9 = 1; /* is null */
188 } else {
189 var9 = 0; /* arg is null but recv is not */
190 }
191 if (0) {
192 var10 = ((short int(*)(val* self, val* p0))((((long)var_p&3)?class_info[((long)var_p&3)]:var_p->class)->vft[COLOR_core__kernel__Object___61d_61d]))(var_p, ((val*)NULL)); /* == on <var_p:nullable Object>*/
193 var9 = var10;
194 }
195 if (var9){
196 {
197 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
198 var13 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
199 if (unlikely(var13 == NULL)) {
200 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
201 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
202 fatal_exit(1);
203 }
204 var11 = var13;
205 RET_LABEL12:(void)0;
206 }
207 }
208 {
209 core___core__Array___core__abstract_collection__SimpleCollection__add(var11, var_e); /* Direct call array#Array#add on <var11:Array[Object]>*/
210 }
211 } else {
212 {
213 var14 = ordered_tree___ordered_tree__OrderedTree___core__abstract_collection__Collection__has(self, var_p);
214 }
215 var15 = !var14;
216 if (var15){
217 {
218 ordered_tree___ordered_tree__OrderedTree___add(self, ((val*)NULL), var_p); /* Direct call ordered_tree#OrderedTree#add on <self:OrderedTree[Object]>*/
219 }
220 } else {
221 }
222 {
223 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
224 var18 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
225 if (unlikely(var18 == NULL)) {
226 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
227 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
228 fatal_exit(1);
229 }
230 var16 = var18;
231 RET_LABEL17:(void)0;
232 }
233 }
234 {
235 var19 = core___core__HashMap___core__abstract_collection__MapRead__has_key(var16, var_p);
236 }
237 if (var19){
238 {
239 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
240 var22 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
241 if (unlikely(var22 == NULL)) {
242 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
243 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
244 fatal_exit(1);
245 }
246 var20 = var22;
247 RET_LABEL21:(void)0;
248 }
249 }
250 {
251 var23 = core___core__HashMap___core__abstract_collection__MapRead___91d_93d(var20, var_p);
252 }
253 {
254 core___core__Array___core__abstract_collection__SimpleCollection__add(var23, var_e); /* Direct call array#Array#add on <var23:nullable Object(Array[Object])>*/
255 }
256 } else {
257 {
258 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
259 var26 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
260 if (unlikely(var26 == NULL)) {
261 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
262 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
263 fatal_exit(1);
264 }
265 var24 = var26;
266 RET_LABEL25:(void)0;
267 }
268 }
269 var27 = NEW_core__Array(self->type->resolution_table->types[COLOR_core__Array__ordered_tree__OrderedTree___35dE]);
270 {
271 core___core__Array___with_capacity(var27, 1l); /* Direct call array#Array#with_capacity on <var27:Array[Object]>*/
272 }
273 var_ = var27;
274 {
275 core___core__AbstractArray___core__abstract_collection__Sequence__push(var_, var_e); /* Direct call array#AbstractArray#push on <var_:Array[Object]>*/
276 }
277 {
278 core___core__HashMap___core__abstract_collection__Map___91d_93d_61d(var24, var_p, var_); /* Direct call hash_collection#HashMap#[]= on <var24:HashMap[Object, Array[Object]]>*/
279 }
280 }
281 }
282 RET_LABEL:;
283 }
284 /* method ordered_tree#OrderedTree#detach for (self: OrderedTree[Object], Object) */
285 void ordered_tree___ordered_tree__OrderedTree___detach(val* self, val* p0) {
286 short int var /* : Bool */;
287 int cltype;
288 int idtype;
289 const struct type* type_struct;
290 const char* var_class_name;
291 val* var_e /* var e: Object */;
292 val* var1 /* : HashMap[Object, nullable Object] */;
293 val* var3 /* : HashMap[Object, nullable Object] */;
294 val* var4 /* : nullable Object */;
295 val* var_old_parent /* var old_parent: nullable Object */;
296 short int var5 /* : Bool */;
297 short int var6 /* : Bool */;
298 val* var7 /* : HashMap[Object, Array[Object]] */;
299 val* var9 /* : HashMap[Object, Array[Object]] */;
300 val* var10 /* : nullable Object */;
301 val* var_subs /* var subs: Array[Object] */;
302 short int var11 /* : Bool */;
303 val* var12 /* : HashMap[Object, Array[Object]] */;
304 val* var14 /* : HashMap[Object, Array[Object]] */;
305 val* var15 /* : RemovableCollection[nullable Object] */;
306 val* var16 /* : Array[Object] */;
307 val* var18 /* : Array[Object] */;
308 short int var19 /* : Bool */;
309 val* var20 /* : Array[Object] */;
310 val* var22 /* : Array[Object] */;
311 /* Covariant cast for argument 0 (e) <p0:Object> isa E */
312 /* <p0:Object> isa E */
313 type_struct = self->type->resolution_table->types[COLOR_ordered_tree__OrderedTree___35dE];
314 cltype = type_struct->color;
315 idtype = type_struct->id;
316 if(cltype >= (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->table_size) {
317 var = 0;
318 } else {
319 var = (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->type_table[cltype] == idtype;
320 }
321 if (unlikely(!var)) {
322 var_class_name = p0 == NULL ? "null" : (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->name;
323 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
324 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 123);
325 fatal_exit(1);
326 }
327 var_e = p0;
328 {
329 { /* Inline ordered_tree#OrderedTree#parents (self) on <self:OrderedTree[Object]> */
330 var3 = self->attrs[COLOR_ordered_tree__OrderedTree___parents].val; /* _parents on <self:OrderedTree[Object]> */
331 if (unlikely(var3 == NULL)) {
332 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _parents");
333 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 73);
334 fatal_exit(1);
335 }
336 var1 = var3;
337 RET_LABEL2:(void)0;
338 }
339 }
340 {
341 var4 = core___core__HashMap___core__abstract_collection__MapRead__get_or_null(var1, var_e);
342 }
343 var_old_parent = var4;
344 if (var_old_parent == NULL) {
345 var5 = 0; /* is null */
346 } else {
347 var5 = 1; /* arg is null and recv is not */
348 }
349 if (0) {
350 var6 = ((short int(*)(val* self, val* p0))((((long)var_old_parent&3)?class_info[((long)var_old_parent&3)]:var_old_parent->class)->vft[COLOR_core__kernel__Object___33d_61d]))(var_old_parent, ((val*)NULL)); /* != on <var_old_parent:nullable Object>*/
351 var5 = var6;
352 }
353 if (var5){
354 {
355 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
356 var9 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
357 if (unlikely(var9 == NULL)) {
358 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
359 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
360 fatal_exit(1);
361 }
362 var7 = var9;
363 RET_LABEL8:(void)0;
364 }
365 }
366 {
367 var10 = core___core__HashMap___core__abstract_collection__MapRead___91d_93d(var7, var_old_parent);
368 }
369 var_subs = var10;
370 {
371 core___core__AbstractArray___core__abstract_collection__RemovableCollection__remove(var_subs, var_e); /* Direct call array#AbstractArray#remove on <var_subs:Array[Object]>*/
372 }
373 {
374 var11 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var_subs);
375 }
376 if (var11){
377 {
378 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
379 var14 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
380 if (unlikely(var14 == NULL)) {
381 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
382 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
383 fatal_exit(1);
384 }
385 var12 = var14;
386 RET_LABEL13:(void)0;
387 }
388 }
389 {
390 var15 = core___core__HashMap___core__abstract_collection__MapRead__keys(var12);
391 }
392 {
393 ((void(*)(val* self, val* p0))((((long)var15&3)?class_info[((long)var15&3)]:var15->class)->vft[COLOR_core__abstract_collection__RemovableCollection__remove]))(var15, var_old_parent); /* remove on <var15:RemovableCollection[nullable Object](RemovableCollection[Object])>*/
394 }
395 } else {
396 }
397 } else {
398 {
399 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
400 var18 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
401 if (unlikely(var18 == NULL)) {
402 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
403 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
404 fatal_exit(1);
405 }
406 var16 = var18;
407 RET_LABEL17:(void)0;
408 }
409 }
410 {
411 var19 = core___core__AbstractArrayRead___core__abstract_collection__Collection__has(var16, var_e);
412 }
413 if (var19){
414 {
415 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
416 var22 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
417 if (unlikely(var22 == NULL)) {
418 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
419 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
420 fatal_exit(1);
421 }
422 var20 = var22;
423 RET_LABEL21:(void)0;
424 }
425 }
426 {
427 core___core__AbstractArray___core__abstract_collection__RemovableCollection__remove(var20, var_e); /* Direct call array#AbstractArray#remove on <var20:Array[Object]>*/
428 }
429 } else {
430 }
431 }
432 RET_LABEL:;
433 }
434 /* method ordered_tree#OrderedTree#write_to for (self: OrderedTree[Object], Writer) */
435 void ordered_tree___ordered_tree__OrderedTree___core__stream__Writable__write_to(val* self, val* p0) {
436 val* var_stream /* var stream: Writer */;
437 val* var /* : Array[Object] */;
438 val* var2 /* : Array[Object] */;
439 val* var_ /* var : Array[Object] */;
440 val* var3 /* : IndexedIterator[nullable Object] */;
441 val* var_4 /* var : IndexedIterator[Object] */;
442 short int var5 /* : Bool */;
443 val* var6 /* : nullable Object */;
444 val* var_r /* var r: Object */;
445 val* var7 /* : String */;
446 static val* varonce;
447 val* var8 /* : String */;
448 char* var9 /* : NativeString */;
449 val* var10 /* : String */;
450 static val* varonce11;
451 val* var12 /* : String */;
452 char* var13 /* : NativeString */;
453 val* var14 /* : String */;
454 var_stream = p0;
455 {
456 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
457 var2 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
458 if (unlikely(var2 == NULL)) {
459 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
460 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
461 fatal_exit(1);
462 }
463 var = var2;
464 RET_LABEL1:(void)0;
465 }
466 }
467 var_ = var;
468 {
469 var3 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
470 }
471 var_4 = var3;
472 for(;;) {
473 {
474 var5 = ((short int(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_4); /* is_ok on <var_4:IndexedIterator[Object]>*/
475 }
476 if (var5){
477 } else {
478 goto BREAK_label;
479 }
480 {
481 var6 = ((val*(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_4); /* item on <var_4:IndexedIterator[Object]>*/
482 }
483 var_r = var6;
484 {
485 var7 = ordered_tree___ordered_tree__OrderedTree___display(self, var_r);
486 }
487 {
488 core___core__FileWriter___core__stream__Writer__write(var_stream, var7); /* Direct call file#FileWriter#write on <var_stream:Writer>*/
489 }
490 if (likely(varonce!=NULL)) {
491 var8 = varonce;
492 } else {
493 var9 = "\n";
494 var10 = core__flat___NativeString___to_s_full(var9, 1l, 1l);
495 var8 = var10;
496 varonce = var8;
497 }
498 {
499 core___core__FileWriter___core__stream__Writer__write(var_stream, var8); /* Direct call file#FileWriter#write on <var_stream:Writer>*/
500 }
501 if (likely(varonce11!=NULL)) {
502 var12 = varonce11;
503 } else {
504 var13 = "";
505 var14 = core__flat___NativeString___to_s_full(var13, 0l, 0l);
506 var12 = var14;
507 varonce11 = var12;
508 }
509 {
510 ordered_tree___ordered_tree__OrderedTree___sub_write_to(self, var_stream, var_r, var12); /* Direct call ordered_tree#OrderedTree#sub_write_to on <self:OrderedTree[Object]>*/
511 }
512 {
513 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_4); /* next on <var_4:IndexedIterator[Object]>*/
514 }
515 }
516 BREAK_label: (void)0;
517 {
518 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_4); /* finish on <var_4:IndexedIterator[Object]>*/
519 }
520 RET_LABEL:;
521 }
522 /* method ordered_tree#OrderedTree#sub_write_to for (self: OrderedTree[Object], Writer, Object, String) */
523 void ordered_tree___ordered_tree__OrderedTree___sub_write_to(val* self, val* p0, val* p1, val* p2) {
524 short int var /* : Bool */;
525 int cltype;
526 int idtype;
527 const struct type* type_struct;
528 const char* var_class_name;
529 val* var_o /* var o: Writer */;
530 val* var_e /* var e: Object */;
531 val* var_prefix /* var prefix: String */;
532 val* var1 /* : HashMap[Object, Array[Object]] */;
533 val* var3 /* : HashMap[Object, Array[Object]] */;
534 short int var4 /* : Bool */;
535 short int var5 /* : Bool */;
536 val* var6 /* : HashMap[Object, Array[Object]] */;
537 val* var8 /* : HashMap[Object, Array[Object]] */;
538 val* var9 /* : nullable Object */;
539 val* var_subs /* var subs: Array[Object] */;
540 short int var10 /* : Bool */;
541 val* var11 /* : nullable Object */;
542 val* var_last /* var last: Object */;
543 val* var_ /* var : Array[Object] */;
544 val* var12 /* : IndexedIterator[nullable Object] */;
545 val* var_13 /* var : IndexedIterator[Object] */;
546 short int var14 /* : Bool */;
547 val* var15 /* : nullable Object */;
548 val* var_e2 /* var e2: Object */;
549 short int var16 /* : Bool */;
550 val* var17 /* : NativeArray[String] */;
551 static val* varonce;
552 static val* varonce18;
553 val* var19 /* : String */;
554 char* var20 /* : NativeString */;
555 val* var21 /* : String */;
556 static val* varonce22;
557 val* var23 /* : String */;
558 char* var24 /* : NativeString */;
559 val* var25 /* : String */;
560 val* var26 /* : String */;
561 val* var27 /* : String */;
562 static val* varonce28;
563 val* var29 /* : String */;
564 char* var30 /* : NativeString */;
565 val* var31 /* : String */;
566 val* var32 /* : String */;
567 val* var34 /* : NativeArray[String] */;
568 static val* varonce33;
569 static val* varonce35;
570 val* var36 /* : String */;
571 char* var37 /* : NativeString */;
572 val* var38 /* : String */;
573 static val* varonce39;
574 val* var40 /* : String */;
575 char* var41 /* : NativeString */;
576 val* var42 /* : String */;
577 val* var43 /* : String */;
578 val* var44 /* : String */;
579 static val* varonce45;
580 val* var46 /* : String */;
581 char* var47 /* : NativeString */;
582 val* var48 /* : String */;
583 val* var49 /* : String */;
584 /* Covariant cast for argument 1 (e) <p1:Object> isa E */
585 /* <p1:Object> isa E */
586 type_struct = self->type->resolution_table->types[COLOR_ordered_tree__OrderedTree___35dE];
587 cltype = type_struct->color;
588 idtype = type_struct->id;
589 if(cltype >= (((long)p1&3)?type_info[((long)p1&3)]:p1->type)->table_size) {
590 var = 0;
591 } else {
592 var = (((long)p1&3)?type_info[((long)p1&3)]:p1->type)->type_table[cltype] == idtype;
593 }
594 if (unlikely(!var)) {
595 var_class_name = p1 == NULL ? "null" : (((long)p1&3)?type_info[((long)p1&3)]:p1->type)->name;
596 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
597 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 156);
598 fatal_exit(1);
599 }
600 var_o = p0;
601 var_e = p1;
602 var_prefix = p2;
603 {
604 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
605 var3 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
606 if (unlikely(var3 == NULL)) {
607 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
608 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
609 fatal_exit(1);
610 }
611 var1 = var3;
612 RET_LABEL2:(void)0;
613 }
614 }
615 {
616 var4 = core___core__HashMap___core__abstract_collection__MapRead__has_key(var1, var_e);
617 }
618 var5 = !var4;
619 if (var5){
620 goto RET_LABEL;
621 } else {
622 }
623 {
624 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
625 var8 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
626 if (unlikely(var8 == NULL)) {
627 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
628 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
629 fatal_exit(1);
630 }
631 var6 = var8;
632 RET_LABEL7:(void)0;
633 }
634 }
635 {
636 var9 = core___core__HashMap___core__abstract_collection__MapRead___91d_93d(var6, var_e);
637 }
638 var_subs = var9;
639 {
640 var10 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var_subs);
641 }
642 if (var10){
643 goto RET_LABEL;
644 } else {
645 }
646 {
647 var11 = core___core__SequenceRead___last(var_subs);
648 }
649 var_last = var11;
650 var_ = var_subs;
651 {
652 var12 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
653 }
654 var_13 = var12;
655 for(;;) {
656 {
657 var14 = ((short int(*)(val* self))((((long)var_13&3)?class_info[((long)var_13&3)]:var_13->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_13); /* is_ok on <var_13:IndexedIterator[Object]>*/
658 }
659 if (var14){
660 } else {
661 goto BREAK_label;
662 }
663 {
664 var15 = ((val*(*)(val* self))((((long)var_13&3)?class_info[((long)var_13&3)]:var_13->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_13); /* item on <var_13:IndexedIterator[Object]>*/
665 }
666 var_e2 = var15;
667 {
668 var16 = ((short int(*)(val* self, val* p0))((((long)var_e2&3)?class_info[((long)var_e2&3)]:var_e2->class)->vft[COLOR_core__kernel__Object___33d_61d]))(var_e2, var_last); /* != on <var_e2:Object>*/
669 }
670 if (var16){
671 if (unlikely(varonce==NULL)) {
672 var17 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
673 if (likely(varonce18!=NULL)) {
674 var19 = varonce18;
675 } else {
676 var20 = "|--";
677 var21 = core__flat___NativeString___to_s_full(var20, 3l, 3l);
678 var19 = var21;
679 varonce18 = var19;
680 }
681 ((struct instance_core__NativeArray*)var17)->values[1]=var19;
682 if (likely(varonce22!=NULL)) {
683 var23 = varonce22;
684 } else {
685 var24 = "\n";
686 var25 = core__flat___NativeString___to_s_full(var24, 1l, 1l);
687 var23 = var25;
688 varonce22 = var23;
689 }
690 ((struct instance_core__NativeArray*)var17)->values[3]=var23;
691 } else {
692 var17 = varonce;
693 varonce = NULL;
694 }
695 ((struct instance_core__NativeArray*)var17)->values[0]=var_prefix;
696 {
697 var26 = ordered_tree___ordered_tree__OrderedTree___display(self, var_e2);
698 }
699 ((struct instance_core__NativeArray*)var17)->values[2]=var26;
700 {
701 var27 = ((val*(*)(val* self))(var17->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var17); /* native_to_s on <var17:NativeArray[String]>*/
702 }
703 varonce = var17;
704 {
705 core___core__FileWriter___core__stream__Writer__write(var_o, var27); /* Direct call file#FileWriter#write on <var_o:Writer>*/
706 }
707 if (likely(varonce28!=NULL)) {
708 var29 = varonce28;
709 } else {
710 var30 = "| ";
711 var31 = core__flat___NativeString___to_s_full(var30, 3l, 3l);
712 var29 = var31;
713 varonce28 = var29;
714 }
715 {
716 var32 = ((val*(*)(val* self, val* p0))(var_prefix->class->vft[COLOR_core__abstract_text__String___43d]))(var_prefix, var29); /* + on <var_prefix:String>*/
717 }
718 {
719 ordered_tree___ordered_tree__OrderedTree___sub_write_to(self, var_o, var_e2, var32); /* Direct call ordered_tree#OrderedTree#sub_write_to on <self:OrderedTree[Object]>*/
720 }
721 } else {
722 if (unlikely(varonce33==NULL)) {
723 var34 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
724 if (likely(varonce35!=NULL)) {
725 var36 = varonce35;
726 } else {
727 var37 = "`--";
728 var38 = core__flat___NativeString___to_s_full(var37, 3l, 3l);
729 var36 = var38;
730 varonce35 = var36;
731 }
732 ((struct instance_core__NativeArray*)var34)->values[1]=var36;
733 if (likely(varonce39!=NULL)) {
734 var40 = varonce39;
735 } else {
736 var41 = "\n";
737 var42 = core__flat___NativeString___to_s_full(var41, 1l, 1l);
738 var40 = var42;
739 varonce39 = var40;
740 }
741 ((struct instance_core__NativeArray*)var34)->values[3]=var40;
742 } else {
743 var34 = varonce33;
744 varonce33 = NULL;
745 }
746 ((struct instance_core__NativeArray*)var34)->values[0]=var_prefix;
747 {
748 var43 = ordered_tree___ordered_tree__OrderedTree___display(self, var_e2);
749 }
750 ((struct instance_core__NativeArray*)var34)->values[2]=var43;
751 {
752 var44 = ((val*(*)(val* self))(var34->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var34); /* native_to_s on <var34:NativeArray[String]>*/
753 }
754 varonce33 = var34;
755 {
756 core___core__FileWriter___core__stream__Writer__write(var_o, var44); /* Direct call file#FileWriter#write on <var_o:Writer>*/
757 }
758 if (likely(varonce45!=NULL)) {
759 var46 = varonce45;
760 } else {
761 var47 = " ";
762 var48 = core__flat___NativeString___to_s_full(var47, 3l, 3l);
763 var46 = var48;
764 varonce45 = var46;
765 }
766 {
767 var49 = ((val*(*)(val* self, val* p0))(var_prefix->class->vft[COLOR_core__abstract_text__String___43d]))(var_prefix, var46); /* + on <var_prefix:String>*/
768 }
769 {
770 ordered_tree___ordered_tree__OrderedTree___sub_write_to(self, var_o, var_e2, var49); /* Direct call ordered_tree#OrderedTree#sub_write_to on <self:OrderedTree[Object]>*/
771 }
772 }
773 {
774 ((void(*)(val* self))((((long)var_13&3)?class_info[((long)var_13&3)]:var_13->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_13); /* next on <var_13:IndexedIterator[Object]>*/
775 }
776 }
777 BREAK_label: (void)0;
778 {
779 ((void(*)(val* self))((((long)var_13&3)?class_info[((long)var_13&3)]:var_13->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_13); /* finish on <var_13:IndexedIterator[Object]>*/
780 }
781 RET_LABEL:;
782 }
783 /* method ordered_tree#OrderedTree#sort_with for (self: OrderedTree[Object], Comparator) */
784 void ordered_tree___ordered_tree__OrderedTree___sort_with(val* self, val* p0) {
785 val* var_comparator /* var comparator: Comparator */;
786 val* var /* : Array[Object] */;
787 val* var2 /* : Array[Object] */;
788 val* var3 /* : HashMap[Object, Array[Object]] */;
789 val* var5 /* : HashMap[Object, Array[Object]] */;
790 val* var6 /* : RemovableCollection[nullable Object] */;
791 val* var_ /* var : RemovableCollection[Array[Object]] */;
792 val* var7 /* : Iterator[nullable Object] */;
793 val* var_8 /* var : Iterator[Array[Object]] */;
794 short int var9 /* : Bool */;
795 val* var10 /* : nullable Object */;
796 val* var_a /* var a: Array[Object] */;
797 var_comparator = p0;
798 {
799 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
800 var2 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
801 if (unlikely(var2 == NULL)) {
802 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
803 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
804 fatal_exit(1);
805 }
806 var = var2;
807 RET_LABEL1:(void)0;
808 }
809 }
810 {
811 core___core__Comparator___sort(var_comparator, var); /* Direct call sorter#Comparator#sort on <var_comparator:Comparator>*/
812 }
813 {
814 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
815 var5 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
816 if (unlikely(var5 == NULL)) {
817 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
818 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
819 fatal_exit(1);
820 }
821 var3 = var5;
822 RET_LABEL4:(void)0;
823 }
824 }
825 {
826 var6 = core___core__HashMap___core__abstract_collection__MapRead__values(var3);
827 }
828 var_ = var6;
829 {
830 var7 = ((val*(*)(val* self))((((long)var_&3)?class_info[((long)var_&3)]:var_->class)->vft[COLOR_core__abstract_collection__Collection__iterator]))(var_); /* iterator on <var_:RemovableCollection[Array[Object]]>*/
831 }
832 var_8 = var7;
833 for(;;) {
834 {
835 var9 = ((short int(*)(val* self))((((long)var_8&3)?class_info[((long)var_8&3)]:var_8->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_8); /* is_ok on <var_8:Iterator[Array[Object]]>*/
836 }
837 if (var9){
838 } else {
839 goto BREAK_label;
840 }
841 {
842 var10 = ((val*(*)(val* self))((((long)var_8&3)?class_info[((long)var_8&3)]:var_8->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_8); /* item on <var_8:Iterator[Array[Object]]>*/
843 }
844 var_a = var10;
845 {
846 core___core__Comparator___sort(var_comparator, var_a); /* Direct call sorter#Comparator#sort on <var_comparator:Comparator>*/
847 }
848 {
849 ((void(*)(val* self))((((long)var_8&3)?class_info[((long)var_8&3)]:var_8->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_8); /* next on <var_8:Iterator[Array[Object]]>*/
850 }
851 }
852 BREAK_label: (void)0;
853 {
854 ((void(*)(val* self))((((long)var_8&3)?class_info[((long)var_8&3)]:var_8->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_8); /* finish on <var_8:Iterator[Array[Object]]>*/
855 }
856 RET_LABEL:;
857 }
858 /* method ordered_tree#OrderedTree#display for (self: OrderedTree[Object], Object): String */
859 val* ordered_tree___ordered_tree__OrderedTree___display(val* self, val* p0) {
860 val* var /* : String */;
861 short int var1 /* : Bool */;
862 int cltype;
863 int idtype;
864 const struct type* type_struct;
865 const char* var_class_name;
866 val* var_e /* var e: Object */;
867 val* var2 /* : String */;
868 /* Covariant cast for argument 0 (e) <p0:Object> isa E */
869 /* <p0:Object> isa E */
870 type_struct = self->type->resolution_table->types[COLOR_ordered_tree__OrderedTree___35dE];
871 cltype = type_struct->color;
872 idtype = type_struct->id;
873 if(cltype >= (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->table_size) {
874 var1 = 0;
875 } else {
876 var1 = (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->type_table[cltype] == idtype;
877 }
878 if (unlikely(!var1)) {
879 var_class_name = p0 == NULL ? "null" : (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->name;
880 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
881 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 183);
882 fatal_exit(1);
883 }
884 var_e = p0;
885 {
886 var2 = ((val*(*)(val* self))((((long)var_e&3)?class_info[((long)var_e&3)]:var_e->class)->vft[COLOR_core__abstract_text__Object__to_s]))(var_e); /* to_s on <var_e:Object>*/
887 }
888 var = var2;
889 goto RET_LABEL;
890 RET_LABEL:;
891 return var;
892 }
893 /* method ordered_tree#OrderedTree#to_a for (self: OrderedTree[Object]): Array[Object] */
894 val* ordered_tree___ordered_tree__OrderedTree___core__array__Collection__to_a(val* self) {
895 val* var /* : Array[Object] */;
896 val* var1 /* : Array[Object] */;
897 val* var_res /* var res: Array[Object] */;
898 val* var2 /* : Array[Object] */;
899 val* var4 /* : Array[Object] */;
900 val* var_ /* var : Array[Object] */;
901 val* var5 /* : IndexedIterator[nullable Object] */;
902 val* var_6 /* var : IndexedIterator[Object] */;
903 short int var7 /* : Bool */;
904 val* var8 /* : nullable Object */;
905 val* var_r /* var r: Object */;
906 var1 = NEW_core__Array(self->type->resolution_table->types[COLOR_core__Array__ordered_tree__OrderedTree___35dE]);
907 {
908 core___core__Array___core__kernel__Object__init(var1); /* Direct call array#Array#init on <var1:Array[Object]>*/
909 }
910 var_res = var1;
911 {
912 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
913 var4 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
914 if (unlikely(var4 == NULL)) {
915 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
916 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
917 fatal_exit(1);
918 }
919 var2 = var4;
920 RET_LABEL3:(void)0;
921 }
922 }
923 var_ = var2;
924 {
925 var5 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
926 }
927 var_6 = var5;
928 for(;;) {
929 {
930 var7 = ((short int(*)(val* self))((((long)var_6&3)?class_info[((long)var_6&3)]:var_6->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_6); /* is_ok on <var_6:IndexedIterator[Object]>*/
931 }
932 if (var7){
933 } else {
934 goto BREAK_label;
935 }
936 {
937 var8 = ((val*(*)(val* self))((((long)var_6&3)?class_info[((long)var_6&3)]:var_6->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_6); /* item on <var_6:IndexedIterator[Object]>*/
938 }
939 var_r = var8;
940 {
941 ordered_tree___ordered_tree__OrderedTree___sub_to_a(self, var_r, var_res); /* Direct call ordered_tree#OrderedTree#sub_to_a on <self:OrderedTree[Object]>*/
942 }
943 {
944 ((void(*)(val* self))((((long)var_6&3)?class_info[((long)var_6&3)]:var_6->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_6); /* next on <var_6:IndexedIterator[Object]>*/
945 }
946 }
947 BREAK_label: (void)0;
948 {
949 ((void(*)(val* self))((((long)var_6&3)?class_info[((long)var_6&3)]:var_6->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_6); /* finish on <var_6:IndexedIterator[Object]>*/
950 }
951 var = var_res;
952 goto RET_LABEL;
953 RET_LABEL:;
954 return var;
955 }
956 /* method ordered_tree#OrderedTree#sub_to_a for (self: OrderedTree[Object], Object, Array[Object]) */
957 void ordered_tree___ordered_tree__OrderedTree___sub_to_a(val* self, val* p0, val* p1) {
958 short int var /* : Bool */;
959 int cltype;
960 int idtype;
961 const struct type* type_struct;
962 const char* var_class_name;
963 short int var1 /* : Bool */;
964 int cltype2;
965 int idtype3;
966 const struct type* type_struct4;
967 const char* var_class_name5;
968 val* var_e /* var e: Object */;
969 val* var_res /* var res: Array[Object] */;
970 val* var6 /* : HashMap[Object, Array[Object]] */;
971 val* var8 /* : HashMap[Object, Array[Object]] */;
972 short int var9 /* : Bool */;
973 val* var10 /* : HashMap[Object, Array[Object]] */;
974 val* var12 /* : HashMap[Object, Array[Object]] */;
975 val* var13 /* : nullable Object */;
976 val* var_ /* var : Array[Object] */;
977 val* var14 /* : IndexedIterator[nullable Object] */;
978 val* var_15 /* var : IndexedIterator[Object] */;
979 short int var16 /* : Bool */;
980 val* var17 /* : nullable Object */;
981 val* var_e2 /* var e2: Object */;
982 /* Covariant cast for argument 0 (e) <p0:Object> isa E */
983 /* <p0:Object> isa E */
984 type_struct = self->type->resolution_table->types[COLOR_ordered_tree__OrderedTree___35dE];
985 cltype = type_struct->color;
986 idtype = type_struct->id;
987 if(cltype >= (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->table_size) {
988 var = 0;
989 } else {
990 var = (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->type_table[cltype] == idtype;
991 }
992 if (unlikely(!var)) {
993 var_class_name = p0 == NULL ? "null" : (((long)p0&3)?type_info[((long)p0&3)]:p0->type)->name;
994 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "E", var_class_name);
995 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 205);
996 fatal_exit(1);
997 }
998 /* Covariant cast for argument 1 (res) <p1:Array[Object]> isa Array[E] */
999 /* <p1:Array[Object]> isa Array[E] */
1000 type_struct4 = self->type->resolution_table->types[COLOR_core__Array__ordered_tree__OrderedTree___35dE];
1001 cltype2 = type_struct4->color;
1002 idtype3 = type_struct4->id;
1003 if(cltype2 >= p1->type->table_size) {
1004 var1 = 0;
1005 } else {
1006 var1 = p1->type->type_table[cltype2] == idtype3;
1007 }
1008 if (unlikely(!var1)) {
1009 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
1010 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Array[E]", var_class_name5);
1011 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 205);
1012 fatal_exit(1);
1013 }
1014 var_e = p0;
1015 var_res = p1;
1016 {
1017 core___core__Array___core__abstract_collection__SimpleCollection__add(var_res, var_e); /* Direct call array#Array#add on <var_res:Array[Object]>*/
1018 }
1019 {
1020 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
1021 var8 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
1022 if (unlikely(var8 == NULL)) {
1023 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
1024 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
1025 fatal_exit(1);
1026 }
1027 var6 = var8;
1028 RET_LABEL7:(void)0;
1029 }
1030 }
1031 {
1032 var9 = core___core__HashMap___core__abstract_collection__MapRead__has_key(var6, var_e);
1033 }
1034 if (var9){
1035 {
1036 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
1037 var12 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
1038 if (unlikely(var12 == NULL)) {
1039 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
1040 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
1041 fatal_exit(1);
1042 }
1043 var10 = var12;
1044 RET_LABEL11:(void)0;
1045 }
1046 }
1047 {
1048 var13 = core___core__HashMap___core__abstract_collection__MapRead___91d_93d(var10, var_e);
1049 }
1050 var_ = var13;
1051 {
1052 var14 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
1053 }
1054 var_15 = var14;
1055 for(;;) {
1056 {
1057 var16 = ((short int(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_15); /* is_ok on <var_15:IndexedIterator[Object]>*/
1058 }
1059 if (var16){
1060 } else {
1061 goto BREAK_label;
1062 }
1063 {
1064 var17 = ((val*(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_15); /* item on <var_15:IndexedIterator[Object]>*/
1065 }
1066 var_e2 = var17;
1067 {
1068 ordered_tree___ordered_tree__OrderedTree___sub_to_a(self, var_e2, var_res); /* Direct call ordered_tree#OrderedTree#sub_to_a on <self:OrderedTree[Object]>*/
1069 }
1070 {
1071 ((void(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_15); /* next on <var_15:IndexedIterator[Object]>*/
1072 }
1073 }
1074 BREAK_label: (void)0;
1075 {
1076 ((void(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_15); /* finish on <var_15:IndexedIterator[Object]>*/
1077 }
1078 } else {
1079 }
1080 RET_LABEL:;
1081 }
1082 /* method ordered_tree#OrderedTree#is_empty for (self: OrderedTree[Object]): Bool */
1083 short int ordered_tree___ordered_tree__OrderedTree___core__abstract_collection__Collection__is_empty(val* self) {
1084 short int var /* : Bool */;
1085 val* var1 /* : Array[Object] */;
1086 val* var3 /* : Array[Object] */;
1087 short int var4 /* : Bool */;
1088 {
1089 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
1090 var3 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
1091 if (unlikely(var3 == NULL)) {
1092 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
1093 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
1094 fatal_exit(1);
1095 }
1096 var1 = var3;
1097 RET_LABEL2:(void)0;
1098 }
1099 }
1100 {
1101 var4 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var1);
1102 }
1103 var = var4;
1104 goto RET_LABEL;
1105 RET_LABEL:;
1106 return var;
1107 }
1108 /* method ordered_tree#OrderedTree#first for (self: OrderedTree[Object]): Object */
1109 val* ordered_tree___ordered_tree__OrderedTree___core__abstract_collection__Collection__first(val* self) {
1110 val* var /* : Object */;
1111 val* var1 /* : Array[Object] */;
1112 val* var3 /* : Array[Object] */;
1113 val* var4 /* : nullable Object */;
1114 {
1115 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
1116 var3 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
1117 if (unlikely(var3 == NULL)) {
1118 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
1119 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
1120 fatal_exit(1);
1121 }
1122 var1 = var3;
1123 RET_LABEL2:(void)0;
1124 }
1125 }
1126 {
1127 var4 = core___core__SequenceRead___Collection__first(var1);
1128 }
1129 var = var4;
1130 goto RET_LABEL;
1131 RET_LABEL:;
1132 return var;
1133 }
1134 /* method ordered_tree#OrderedTree#iterator for (self: OrderedTree[Object]): Iterator[Object] */
1135 val* ordered_tree___ordered_tree__OrderedTree___core__abstract_collection__Collection__iterator(val* self) {
1136 val* var /* : Iterator[Object] */;
1137 val* var1 /* : OrderedTreeIterator[Object] */;
1138 var1 = NEW_ordered_tree__OrderedTreeIterator(self->type->resolution_table->types[COLOR_ordered_tree__OrderedTreeIterator__ordered_tree__OrderedTree___35dE]);
1139 {
1140 ((void(*)(val* self, val* p0))(var1->class->vft[COLOR_ordered_tree__OrderedTreeIterator__tree_61d]))(var1, self); /* tree= on <var1:OrderedTreeIterator[Object]>*/
1141 }
1142 {
1143 ((void(*)(val* self))(var1->class->vft[COLOR_core__kernel__Object__init]))(var1); /* init on <var1:OrderedTreeIterator[Object]>*/
1144 }
1145 var = var1;
1146 goto RET_LABEL;
1147 RET_LABEL:;
1148 return var;
1149 }
1150 /* method ordered_tree#OrderedTree#== for (self: OrderedTree[Object], nullable Object): Bool */
1151 short int ordered_tree___ordered_tree__OrderedTree___core__kernel__Object___61d_61d(val* self, val* p0) {
1152 short int var /* : Bool */;
1153 val* var_other /* var other: nullable Object */;
1154 short int var1 /* : Bool */;
1155 int cltype;
1156 int idtype;
1157 short int var2 /* : Bool */;
1158 short int var3 /* : Bool */;
1159 val* var4 /* : Array[Object] */;
1160 val* var6 /* : Array[Object] */;
1161 val* var7 /* : Array[Object] */;
1162 val* var9 /* : Array[Object] */;
1163 short int var10 /* : Bool */;
1164 short int var_ /* var : Bool */;
1165 val* var11 /* : HashMap[Object, Array[Object]] */;
1166 val* var13 /* : HashMap[Object, Array[Object]] */;
1167 val* var14 /* : HashMap[Object, Array[Object]] */;
1168 val* var16 /* : HashMap[Object, Array[Object]] */;
1169 short int var17 /* : Bool */;
1170 var_other = p0;
1171 /* <var_other:nullable Object> isa OrderedTree[Object] */
1172 cltype = type_ordered_tree__OrderedTree__core__Object.color;
1173 idtype = type_ordered_tree__OrderedTree__core__Object.id;
1174 if(var_other == NULL) {
1175 var1 = 0;
1176 } else {
1177 if(cltype >= (((long)var_other&3)?type_info[((long)var_other&3)]:var_other->type)->table_size) {
1178 var1 = 0;
1179 } else {
1180 var1 = (((long)var_other&3)?type_info[((long)var_other&3)]:var_other->type)->type_table[cltype] == idtype;
1181 }
1182 }
1183 var2 = !var1;
1184 if (var2){
1185 var = 0;
1186 goto RET_LABEL;
1187 } else {
1188 }
1189 {
1190 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
1191 var6 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
1192 if (unlikely(var6 == NULL)) {
1193 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
1194 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
1195 fatal_exit(1);
1196 }
1197 var4 = var6;
1198 RET_LABEL5:(void)0;
1199 }
1200 }
1201 {
1202 { /* Inline ordered_tree#OrderedTree#roots (var_other) on <var_other:nullable Object(OrderedTree[Object])> */
1203 var9 = var_other->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <var_other:nullable Object(OrderedTree[Object])> */
1204 if (unlikely(var9 == NULL)) {
1205 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
1206 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
1207 fatal_exit(1);
1208 }
1209 var7 = var9;
1210 RET_LABEL8:(void)0;
1211 }
1212 }
1213 {
1214 var10 = core___core__Array___core__kernel__Object___61d_61d(var4, var7);
1215 }
1216 var_ = var10;
1217 if (var10){
1218 {
1219 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
1220 var13 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
1221 if (unlikely(var13 == NULL)) {
1222 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
1223 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
1224 fatal_exit(1);
1225 }
1226 var11 = var13;
1227 RET_LABEL12:(void)0;
1228 }
1229 }
1230 {
1231 { /* Inline ordered_tree#OrderedTree#sub (var_other) on <var_other:nullable Object(OrderedTree[Object])> */
1232 var16 = var_other->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <var_other:nullable Object(OrderedTree[Object])> */
1233 if (unlikely(var16 == NULL)) {
1234 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
1235 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
1236 fatal_exit(1);
1237 }
1238 var14 = var16;
1239 RET_LABEL15:(void)0;
1240 }
1241 }
1242 {
1243 var17 = core___core__MapRead___core__kernel__Object___61d_61d(var11, var14);
1244 }
1245 var3 = var17;
1246 } else {
1247 var3 = var_;
1248 }
1249 var = var3;
1250 goto RET_LABEL;
1251 RET_LABEL:;
1252 return var;
1253 }
1254 /* method ordered_tree#OrderedTree#hash for (self: OrderedTree[Object]): Int */
1255 long ordered_tree___ordered_tree__OrderedTree___core__kernel__Object__hash(val* self) {
1256 long var /* : Int */;
1257 val* var1 /* : Array[Object] */;
1258 val* var3 /* : Array[Object] */;
1259 long var4 /* : Int */;
1260 val* var5 /* : HashMap[Object, Array[Object]] */;
1261 val* var7 /* : HashMap[Object, Array[Object]] */;
1262 long var8 /* : Int */;
1263 long var9 /* : Int */;
1264 short int var11 /* : Bool */;
1265 int cltype;
1266 int idtype;
1267 const char* var_class_name;
1268 long var12 /* : Int */;
1269 {
1270 { /* Inline ordered_tree#OrderedTree#roots (self) on <self:OrderedTree[Object]> */
1271 var3 = self->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <self:OrderedTree[Object]> */
1272 if (unlikely(var3 == NULL)) {
1273 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
1274 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
1275 fatal_exit(1);
1276 }
1277 var1 = var3;
1278 RET_LABEL2:(void)0;
1279 }
1280 }
1281 {
1282 var4 = core___core__SequenceRead___core__kernel__Object__hash(var1);
1283 }
1284 {
1285 { /* Inline ordered_tree#OrderedTree#sub (self) on <self:OrderedTree[Object]> */
1286 var7 = self->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <self:OrderedTree[Object]> */
1287 if (unlikely(var7 == NULL)) {
1288 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
1289 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
1290 fatal_exit(1);
1291 }
1292 var5 = var7;
1293 RET_LABEL6:(void)0;
1294 }
1295 }
1296 {
1297 var8 = core___core__MapRead___core__kernel__Object__hash(var5);
1298 }
1299 {
1300 { /* Inline kernel#Int#+ (var4,var8) on <var4:Int> */
1301 /* Covariant cast for argument 0 (i) <var8:Int> isa OTHER */
1302 /* <var8:Int> isa OTHER */
1303 var11 = 1; /* easy <var8:Int> isa OTHER*/
1304 if (unlikely(!var11)) {
1305 var_class_name = type_core__Int.name;
1306 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1307 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
1308 fatal_exit(1);
1309 }
1310 var12 = var4 + var8;
1311 var9 = var12;
1312 goto RET_LABEL10;
1313 RET_LABEL10:(void)0;
1314 }
1315 }
1316 var = var9;
1317 goto RET_LABEL;
1318 RET_LABEL:;
1319 return var;
1320 }
1321 /* method ordered_tree#OrderedTreeIterator#tree for (self: OrderedTreeIterator[Object]): OrderedTree[Object] */
1322 val* ordered_tree___ordered_tree__OrderedTreeIterator___tree(val* self) {
1323 val* var /* : OrderedTree[Object] */;
1324 val* var1 /* : OrderedTree[Object] */;
1325 var1 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___tree].val; /* _tree on <self:OrderedTreeIterator[Object]> */
1326 if (unlikely(var1 == NULL)) {
1327 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tree");
1328 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 283);
1329 fatal_exit(1);
1330 }
1331 var = var1;
1332 RET_LABEL:;
1333 return var;
1334 }
1335 /* method ordered_tree#OrderedTreeIterator#tree= for (self: OrderedTreeIterator[Object], OrderedTree[Object]) */
1336 void ordered_tree___ordered_tree__OrderedTreeIterator___tree_61d(val* self, val* p0) {
1337 short int var /* : Bool */;
1338 int cltype;
1339 int idtype;
1340 const struct type* type_struct;
1341 const char* var_class_name;
1342 /* Covariant cast for argument 0 (tree) <p0:OrderedTree[Object]> isa OrderedTree[E] */
1343 /* <p0:OrderedTree[Object]> isa OrderedTree[E] */
1344 type_struct = self->type->resolution_table->types[COLOR_ordered_tree__OrderedTree__ordered_tree__OrderedTreeIterator___35dE];
1345 cltype = type_struct->color;
1346 idtype = type_struct->id;
1347 if(cltype >= p0->type->table_size) {
1348 var = 0;
1349 } else {
1350 var = p0->type->type_table[cltype] == idtype;
1351 }
1352 if (unlikely(!var)) {
1353 var_class_name = p0 == NULL ? "null" : p0->type->name;
1354 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OrderedTree[E]", var_class_name);
1355 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 283);
1356 fatal_exit(1);
1357 }
1358 self->attrs[COLOR_ordered_tree__OrderedTreeIterator___tree].val = p0; /* _tree on <self:OrderedTreeIterator[Object]> */
1359 RET_LABEL:;
1360 }
1361 /* method ordered_tree#OrderedTreeIterator#iterators for (self: OrderedTreeIterator[Object]): Array[Iterator[Object]] */
1362 val* ordered_tree___ordered_tree__OrderedTreeIterator___iterators(val* self) {
1363 val* var /* : Array[Iterator[Object]] */;
1364 val* var1 /* : Array[Iterator[Object]] */;
1365 var1 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1366 if (unlikely(var1 == NULL)) {
1367 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1368 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1369 fatal_exit(1);
1370 }
1371 var = var1;
1372 RET_LABEL:;
1373 return var;
1374 }
1375 /* method ordered_tree#OrderedTreeIterator#init for (self: OrderedTreeIterator[Object]) */
1376 void ordered_tree___ordered_tree__OrderedTreeIterator___core__kernel__Object__init(val* self) {
1377 val* var /* : OrderedTree[Object] */;
1378 val* var2 /* : OrderedTree[Object] */;
1379 short int var3 /* : Bool */;
1380 short int var4 /* : Bool */;
1381 val* var5 /* : Array[Iterator[Object]] */;
1382 val* var7 /* : Array[Iterator[Object]] */;
1383 val* var8 /* : OrderedTree[Object] */;
1384 val* var10 /* : OrderedTree[Object] */;
1385 val* var11 /* : Array[Object] */;
1386 val* var13 /* : Array[Object] */;
1387 val* var14 /* : IndexedIterator[nullable Object] */;
1388 {
1389 ((void(*)(val* self))(self->class->vft[COLOR_ordered_tree___ordered_tree__OrderedTreeIterator___core__kernel__Object__init]))(self); /* init on <self:OrderedTreeIterator[Object]>*/
1390 }
1391 {
1392 { /* Inline ordered_tree#OrderedTreeIterator#tree (self) on <self:OrderedTreeIterator[Object]> */
1393 var2 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___tree].val; /* _tree on <self:OrderedTreeIterator[Object]> */
1394 if (unlikely(var2 == NULL)) {
1395 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tree");
1396 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 283);
1397 fatal_exit(1);
1398 }
1399 var = var2;
1400 RET_LABEL1:(void)0;
1401 }
1402 }
1403 {
1404 var3 = ordered_tree___ordered_tree__OrderedTree___core__abstract_collection__Collection__is_empty(var);
1405 }
1406 var4 = !var3;
1407 if (var4){
1408 {
1409 { /* Inline ordered_tree#OrderedTreeIterator#iterators (self) on <self:OrderedTreeIterator[Object]> */
1410 var7 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1411 if (unlikely(var7 == NULL)) {
1412 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1413 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1414 fatal_exit(1);
1415 }
1416 var5 = var7;
1417 RET_LABEL6:(void)0;
1418 }
1419 }
1420 {
1421 { /* Inline ordered_tree#OrderedTreeIterator#tree (self) on <self:OrderedTreeIterator[Object]> */
1422 var10 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___tree].val; /* _tree on <self:OrderedTreeIterator[Object]> */
1423 if (unlikely(var10 == NULL)) {
1424 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tree");
1425 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 283);
1426 fatal_exit(1);
1427 }
1428 var8 = var10;
1429 RET_LABEL9:(void)0;
1430 }
1431 }
1432 {
1433 { /* Inline ordered_tree#OrderedTree#roots (var8) on <var8:OrderedTree[Object]> */
1434 var13 = var8->attrs[COLOR_ordered_tree__OrderedTree___roots].val; /* _roots on <var8:OrderedTree[Object]> */
1435 if (unlikely(var13 == NULL)) {
1436 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
1437 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 66);
1438 fatal_exit(1);
1439 }
1440 var11 = var13;
1441 RET_LABEL12:(void)0;
1442 }
1443 }
1444 {
1445 var14 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var11);
1446 }
1447 {
1448 core___core__Array___core__abstract_collection__SimpleCollection__add(var5, var14); /* Direct call array#Array#add on <var5:Array[Iterator[Object]]>*/
1449 }
1450 } else {
1451 }
1452 RET_LABEL:;
1453 }
1454 /* method ordered_tree#OrderedTreeIterator#is_ok for (self: OrderedTreeIterator[Object]): Bool */
1455 short int ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__is_ok(val* self) {
1456 short int var /* : Bool */;
1457 val* var1 /* : Array[Iterator[Object]] */;
1458 val* var3 /* : Array[Iterator[Object]] */;
1459 short int var4 /* : Bool */;
1460 short int var5 /* : Bool */;
1461 {
1462 { /* Inline ordered_tree#OrderedTreeIterator#iterators (self) on <self:OrderedTreeIterator[Object]> */
1463 var3 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1464 if (unlikely(var3 == NULL)) {
1465 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1466 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1467 fatal_exit(1);
1468 }
1469 var1 = var3;
1470 RET_LABEL2:(void)0;
1471 }
1472 }
1473 {
1474 var4 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var1);
1475 }
1476 var5 = !var4;
1477 var = var5;
1478 goto RET_LABEL;
1479 RET_LABEL:;
1480 return var;
1481 }
1482 /* method ordered_tree#OrderedTreeIterator#item for (self: OrderedTreeIterator[Object]): Object */
1483 val* ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__item(val* self) {
1484 val* var /* : Object */;
1485 short int var1 /* : Bool */;
1486 val* var2 /* : Array[Iterator[Object]] */;
1487 val* var4 /* : Array[Iterator[Object]] */;
1488 val* var5 /* : nullable Object */;
1489 val* var6 /* : nullable Object */;
1490 {
1491 var1 = ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__is_ok(self);
1492 }
1493 if (unlikely(!var1)) {
1494 PRINT_ERROR("Runtime error: %s", "Assert failed");
1495 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 296);
1496 fatal_exit(1);
1497 }
1498 {
1499 { /* Inline ordered_tree#OrderedTreeIterator#iterators (self) on <self:OrderedTreeIterator[Object]> */
1500 var4 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1501 if (unlikely(var4 == NULL)) {
1502 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1503 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1504 fatal_exit(1);
1505 }
1506 var2 = var4;
1507 RET_LABEL3:(void)0;
1508 }
1509 }
1510 {
1511 var5 = core___core__SequenceRead___last(var2);
1512 }
1513 {
1514 var6 = ((val*(*)(val* self))((((long)var5&3)?class_info[((long)var5&3)]:var5->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var5); /* item on <var5:nullable Object(Iterator[Object])>*/
1515 }
1516 var = var6;
1517 goto RET_LABEL;
1518 RET_LABEL:;
1519 return var;
1520 }
1521 /* method ordered_tree#OrderedTreeIterator#next for (self: OrderedTreeIterator[Object]) */
1522 void ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__next(val* self) {
1523 short int var /* : Bool */;
1524 val* var1 /* : OrderedTree[Object] */;
1525 val* var3 /* : OrderedTree[Object] */;
1526 val* var4 /* : HashMap[Object, Array[Object]] */;
1527 val* var6 /* : HashMap[Object, Array[Object]] */;
1528 val* var7 /* : Object */;
1529 short int var8 /* : Bool */;
1530 val* var9 /* : Array[Iterator[Object]] */;
1531 val* var11 /* : Array[Iterator[Object]] */;
1532 val* var12 /* : OrderedTree[Object] */;
1533 val* var14 /* : OrderedTree[Object] */;
1534 val* var15 /* : HashMap[Object, Array[Object]] */;
1535 val* var17 /* : HashMap[Object, Array[Object]] */;
1536 val* var18 /* : Object */;
1537 val* var19 /* : nullable Object */;
1538 val* var20 /* : IndexedIterator[nullable Object] */;
1539 val* var21 /* : Array[Iterator[Object]] */;
1540 val* var23 /* : Array[Iterator[Object]] */;
1541 val* var24 /* : nullable Object */;
1542 short int var25 /* : Bool */;
1543 short int var26 /* : Bool */;
1544 short int var_ /* var : Bool */;
1545 val* var27 /* : Array[Iterator[Object]] */;
1546 val* var29 /* : Array[Iterator[Object]] */;
1547 val* var30 /* : nullable Object */;
1548 short int var31 /* : Bool */;
1549 short int var32 /* : Bool */;
1550 val* var33 /* : Array[Iterator[Object]] */;
1551 val* var35 /* : Array[Iterator[Object]] */;
1552 val* var36 /* : nullable Object */;
1553 short int var37 /* : Bool */;
1554 short int var38 /* : Bool */;
1555 short int var_39 /* var : Bool */;
1556 val* var40 /* : Array[Iterator[Object]] */;
1557 val* var42 /* : Array[Iterator[Object]] */;
1558 val* var43 /* : nullable Object */;
1559 short int var44 /* : Bool */;
1560 val* var45 /* : Array[Iterator[Object]] */;
1561 val* var47 /* : Array[Iterator[Object]] */;
1562 val* var48 /* : nullable Object */;
1563 {
1564 var = ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__is_ok(self);
1565 }
1566 if (unlikely(!var)) {
1567 PRINT_ERROR("Runtime error: %s", "Assert failed");
1568 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 301);
1569 fatal_exit(1);
1570 }
1571 {
1572 { /* Inline ordered_tree#OrderedTreeIterator#tree (self) on <self:OrderedTreeIterator[Object]> */
1573 var3 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___tree].val; /* _tree on <self:OrderedTreeIterator[Object]> */
1574 if (unlikely(var3 == NULL)) {
1575 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tree");
1576 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 283);
1577 fatal_exit(1);
1578 }
1579 var1 = var3;
1580 RET_LABEL2:(void)0;
1581 }
1582 }
1583 {
1584 { /* Inline ordered_tree#OrderedTree#sub (var1) on <var1:OrderedTree[Object]> */
1585 var6 = var1->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <var1:OrderedTree[Object]> */
1586 if (unlikely(var6 == NULL)) {
1587 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
1588 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
1589 fatal_exit(1);
1590 }
1591 var4 = var6;
1592 RET_LABEL5:(void)0;
1593 }
1594 }
1595 {
1596 var7 = ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__item(self);
1597 }
1598 {
1599 var8 = core___core__HashMap___core__abstract_collection__MapRead__has_key(var4, var7);
1600 }
1601 if (var8){
1602 {
1603 { /* Inline ordered_tree#OrderedTreeIterator#iterators (self) on <self:OrderedTreeIterator[Object]> */
1604 var11 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1605 if (unlikely(var11 == NULL)) {
1606 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1607 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1608 fatal_exit(1);
1609 }
1610 var9 = var11;
1611 RET_LABEL10:(void)0;
1612 }
1613 }
1614 {
1615 { /* Inline ordered_tree#OrderedTreeIterator#tree (self) on <self:OrderedTreeIterator[Object]> */
1616 var14 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___tree].val; /* _tree on <self:OrderedTreeIterator[Object]> */
1617 if (unlikely(var14 == NULL)) {
1618 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tree");
1619 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 283);
1620 fatal_exit(1);
1621 }
1622 var12 = var14;
1623 RET_LABEL13:(void)0;
1624 }
1625 }
1626 {
1627 { /* Inline ordered_tree#OrderedTree#sub (var12) on <var12:OrderedTree[Object]> */
1628 var17 = var12->attrs[COLOR_ordered_tree__OrderedTree___sub].val; /* _sub on <var12:OrderedTree[Object]> */
1629 if (unlikely(var17 == NULL)) {
1630 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _sub");
1631 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 69);
1632 fatal_exit(1);
1633 }
1634 var15 = var17;
1635 RET_LABEL16:(void)0;
1636 }
1637 }
1638 {
1639 var18 = ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__item(self);
1640 }
1641 {
1642 var19 = core___core__HashMap___core__abstract_collection__MapRead___91d_93d(var15, var18);
1643 }
1644 {
1645 var20 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var19);
1646 }
1647 {
1648 core___core__Array___core__abstract_collection__SimpleCollection__add(var9, var20); /* Direct call array#Array#add on <var9:Array[Iterator[Object]]>*/
1649 }
1650 } else {
1651 {
1652 { /* Inline ordered_tree#OrderedTreeIterator#iterators (self) on <self:OrderedTreeIterator[Object]> */
1653 var23 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1654 if (unlikely(var23 == NULL)) {
1655 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1656 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1657 fatal_exit(1);
1658 }
1659 var21 = var23;
1660 RET_LABEL22:(void)0;
1661 }
1662 }
1663 {
1664 var24 = core___core__SequenceRead___last(var21);
1665 }
1666 {
1667 ((void(*)(val* self))((((long)var24&3)?class_info[((long)var24&3)]:var24->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var24); /* next on <var24:nullable Object(Iterator[Object])>*/
1668 }
1669 for(;;) {
1670 {
1671 var26 = ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__is_ok(self);
1672 }
1673 var_ = var26;
1674 if (var26){
1675 {
1676 { /* Inline ordered_tree#OrderedTreeIterator#iterators (self) on <self:OrderedTreeIterator[Object]> */
1677 var29 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1678 if (unlikely(var29 == NULL)) {
1679 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1680 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1681 fatal_exit(1);
1682 }
1683 var27 = var29;
1684 RET_LABEL28:(void)0;
1685 }
1686 }
1687 {
1688 var30 = core___core__SequenceRead___last(var27);
1689 }
1690 {
1691 var31 = ((short int(*)(val* self))((((long)var30&3)?class_info[((long)var30&3)]:var30->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var30); /* is_ok on <var30:nullable Object(Iterator[Object])>*/
1692 }
1693 var32 = !var31;
1694 var25 = var32;
1695 } else {
1696 var25 = var_;
1697 }
1698 if (var25){
1699 {
1700 { /* Inline ordered_tree#OrderedTreeIterator#iterators (self) on <self:OrderedTreeIterator[Object]> */
1701 var35 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1702 if (unlikely(var35 == NULL)) {
1703 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1704 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1705 fatal_exit(1);
1706 }
1707 var33 = var35;
1708 RET_LABEL34:(void)0;
1709 }
1710 }
1711 {
1712 var36 = core___core__AbstractArray___core__abstract_collection__Sequence__pop(var33);
1713 }
1714 {
1715 var38 = ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__is_ok(self);
1716 }
1717 var_39 = var38;
1718 if (var38){
1719 {
1720 { /* Inline ordered_tree#OrderedTreeIterator#iterators (self) on <self:OrderedTreeIterator[Object]> */
1721 var42 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1722 if (unlikely(var42 == NULL)) {
1723 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1724 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1725 fatal_exit(1);
1726 }
1727 var40 = var42;
1728 RET_LABEL41:(void)0;
1729 }
1730 }
1731 {
1732 var43 = core___core__SequenceRead___last(var40);
1733 }
1734 {
1735 var44 = ((short int(*)(val* self))((((long)var43&3)?class_info[((long)var43&3)]:var43->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var43); /* is_ok on <var43:nullable Object(Iterator[Object])>*/
1736 }
1737 var37 = var44;
1738 } else {
1739 var37 = var_39;
1740 }
1741 if (var37){
1742 {
1743 { /* Inline ordered_tree#OrderedTreeIterator#iterators (self) on <self:OrderedTreeIterator[Object]> */
1744 var47 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___iterators].val; /* _iterators on <self:OrderedTreeIterator[Object]> */
1745 if (unlikely(var47 == NULL)) {
1746 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _iterators");
1747 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 285);
1748 fatal_exit(1);
1749 }
1750 var45 = var47;
1751 RET_LABEL46:(void)0;
1752 }
1753 }
1754 {
1755 var48 = core___core__SequenceRead___last(var45);
1756 }
1757 {
1758 ((void(*)(val* self))((((long)var48&3)?class_info[((long)var48&3)]:var48->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var48); /* next on <var48:nullable Object(Iterator[Object])>*/
1759 }
1760 } else {
1761 }
1762 } else {
1763 goto BREAK_label;
1764 }
1765 }
1766 BREAK_label: (void)0;
1767 }
1768 RET_LABEL:;
1769 }
1770 /* method ordered_tree#OrderedTreeIterator#iterator for (self: OrderedTreeIterator[Object]): Iterator[Object] */
1771 val* ordered_tree___ordered_tree__OrderedTreeIterator___core__abstract_collection__Iterator__iterator(val* self) {
1772 val* var /* : Iterator[Object] */;
1773 val* var1 /* : OrderedTreeIterator[Object] */;
1774 val* var2 /* : OrderedTree[Object] */;
1775 val* var4 /* : OrderedTree[Object] */;
1776 var1 = NEW_ordered_tree__OrderedTreeIterator(self->type->resolution_table->types[COLOR_ordered_tree__OrderedTreeIterator__ordered_tree__OrderedTreeIterator___35dE]);
1777 {
1778 { /* Inline ordered_tree#OrderedTreeIterator#tree (self) on <self:OrderedTreeIterator[Object]> */
1779 var4 = self->attrs[COLOR_ordered_tree__OrderedTreeIterator___tree].val; /* _tree on <self:OrderedTreeIterator[Object]> */
1780 if (unlikely(var4 == NULL)) {
1781 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tree");
1782 PRINT_ERROR(" (%s:%d)\n", FILE_ordered_tree, 283);
1783 fatal_exit(1);
1784 }
1785 var2 = var4;
1786 RET_LABEL3:(void)0;
1787 }
1788 }
1789 {
1790 ((void(*)(val* self, val* p0))(var1->class->vft[COLOR_ordered_tree__OrderedTreeIterator__tree_61d]))(var1, var2); /* tree= on <var1:OrderedTreeIterator[Object]>*/
1791 }
1792 {
1793 ((void(*)(val* self))(var1->class->vft[COLOR_core__kernel__Object__init]))(var1); /* init on <var1:OrderedTreeIterator[Object]>*/
1794 }
1795 var = var1;
1796 goto RET_LABEL;
1797 RET_LABEL:;
1798 return var;
1799 }