c_src: update with new intern methods
[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__OrderedTree__roots(val* self) {
4 val* var /* : Array[Object] */;
5 val* var1 /* : Array[Object] */;
6 var1 = self->attrs[COLOR_ordered_tree__OrderedTree___64droots].val; /* @roots on <self:OrderedTree[Object]> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @roots");
9 fprintf(stderr, " (%s:%d)\n", "lib/ordered_tree.nit", 27);
10 show_backtrace(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method ordered_tree#OrderedTree#roots for (self: Object): Array[Object] */
17 val* VIRTUAL_ordered_tree__OrderedTree__roots(val* self) {
18 val* var /* : Array[Object] */;
19 val* var1 /* : Array[Object] */;
20 var1 = ordered_tree__OrderedTree__roots(self);
21 var = var1;
22 RET_LABEL:;
23 return var;
24 }
25 /* method ordered_tree#OrderedTree#roots= for (self: OrderedTree[Object], Array[Object]) */
26 void ordered_tree__OrderedTree__roots_61d(val* self, val* p0) {
27 short int var /* : Bool */;
28 int cltype;
29 int idtype;
30 const struct type* type_struct;
31 const char* var_class_name;
32 /* Covariant cast for argument 0 (roots) <p0:Array[Object]> isa Array[OrderedTree#0] */
33 /* <p0:Array[Object]> isa Array[OrderedTree#0] */
34 type_struct = self->type->resolution_table->types[COLOR_array__Arrayordered_tree__OrderedTree_FT0];
35 cltype = type_struct->color;
36 idtype = type_struct->id;
37 if(cltype >= p0->type->table_size) {
38 var = 0;
39 } else {
40 var = p0->type->type_table[cltype] == idtype;
41 }
42 if (!var) {
43 var_class_name = p0 == NULL ? "null" : p0->type->name;
44 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Array[OrderedTree#0]", var_class_name);
45 fprintf(stderr, " (%s:%d)\n", "lib/ordered_tree.nit", 27);
46 show_backtrace(1);
47 }
48 self->attrs[COLOR_ordered_tree__OrderedTree___64droots].val = p0; /* @roots on <self:OrderedTree[Object]> */
49 RET_LABEL:;
50 }
51 /* method ordered_tree#OrderedTree#roots= for (self: Object, Array[Object]) */
52 void VIRTUAL_ordered_tree__OrderedTree__roots_61d(val* self, val* p0) {
53 ordered_tree__OrderedTree__roots_61d(self, p0);
54 RET_LABEL:;
55 }
56 /* method ordered_tree#OrderedTree#sub for (self: OrderedTree[Object]): HashMap[Object, Array[Object]] */
57 val* ordered_tree__OrderedTree__sub(val* self) {
58 val* var /* : HashMap[Object, Array[Object]] */;
59 val* var1 /* : HashMap[Object, Array[Object]] */;
60 var1 = self->attrs[COLOR_ordered_tree__OrderedTree___64dsub].val; /* @sub on <self:OrderedTree[Object]> */
61 if (var1 == NULL) {
62 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @sub");
63 fprintf(stderr, " (%s:%d)\n", "lib/ordered_tree.nit", 29);
64 show_backtrace(1);
65 }
66 var = var1;
67 RET_LABEL:;
68 return var;
69 }
70 /* method ordered_tree#OrderedTree#sub for (self: Object): HashMap[Object, Array[Object]] */
71 val* VIRTUAL_ordered_tree__OrderedTree__sub(val* self) {
72 val* var /* : HashMap[Object, Array[Object]] */;
73 val* var1 /* : HashMap[Object, Array[Object]] */;
74 var1 = ordered_tree__OrderedTree__sub(self);
75 var = var1;
76 RET_LABEL:;
77 return var;
78 }
79 /* method ordered_tree#OrderedTree#sub= for (self: OrderedTree[Object], HashMap[Object, Array[Object]]) */
80 void ordered_tree__OrderedTree__sub_61d(val* self, val* p0) {
81 short int var /* : Bool */;
82 int cltype;
83 int idtype;
84 const struct type* type_struct;
85 const char* var_class_name;
86 /* Covariant cast for argument 0 (sub) <p0:HashMap[Object, Array[Object]]> isa HashMap[OrderedTree#0, Array[OrderedTree#0]] */
87 /* <p0:HashMap[Object, Array[Object]]> isa HashMap[OrderedTree#0, Array[OrderedTree#0]] */
88 type_struct = self->type->resolution_table->types[COLOR_hash_collection__HashMapordered_tree__OrderedTree_FT0array__Arrayordered_tree__OrderedTree_FT0];
89 cltype = type_struct->color;
90 idtype = type_struct->id;
91 if(cltype >= p0->type->table_size) {
92 var = 0;
93 } else {
94 var = p0->type->type_table[cltype] == idtype;
95 }
96 if (!var) {
97 var_class_name = p0 == NULL ? "null" : p0->type->name;
98 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap[OrderedTree#0, Array[OrderedTree#0]]", var_class_name);
99 fprintf(stderr, " (%s:%d)\n", "lib/ordered_tree.nit", 29);
100 show_backtrace(1);
101 }
102 self->attrs[COLOR_ordered_tree__OrderedTree___64dsub].val = p0; /* @sub on <self:OrderedTree[Object]> */
103 RET_LABEL:;
104 }
105 /* method ordered_tree#OrderedTree#sub= for (self: Object, HashMap[Object, Array[Object]]) */
106 void VIRTUAL_ordered_tree__OrderedTree__sub_61d(val* self, val* p0) {
107 ordered_tree__OrderedTree__sub_61d(self, p0);
108 RET_LABEL:;
109 }
110 /* method ordered_tree#OrderedTree#add for (self: OrderedTree[Object], nullable Object, Object) */
111 void ordered_tree__OrderedTree__add(val* self, val* p0, val* p1) {
112 short int var /* : Bool */;
113 int cltype;
114 int idtype;
115 const struct type* type_struct;
116 const char* var_class_name;
117 short int var1 /* : Bool */;
118 int cltype2;
119 int idtype3;
120 const struct type* type_struct4;
121 const char* var_class_name5;
122 val* var_p /* var p: nullable Object */;
123 val* var_e /* var e: Object */;
124 val* var6 /* : null */;
125 short int var7 /* : Bool */;
126 val* var8 /* : Array[Object] */;
127 val* var9 /* : HashMap[Object, Array[Object]] */;
128 short int var10 /* : Bool */;
129 val* var11 /* : HashMap[Object, Array[Object]] */;
130 val* var12 /* : nullable Object */;
131 val* var13 /* : HashMap[Object, Array[Object]] */;
132 val* var14 /* : Array[Object] */;
133 long var15 /* : Int */;
134 val* var16 /* : NativeArray[Object] */;
135 /* Covariant cast for argument 0 (p) <p0:nullable Object> isa nullable OrderedTree#0 */
136 /* <p0:nullable Object> isa nullable OrderedTree#0 */
137 type_struct = self->type->resolution_table->types[COLOR_nullable_ordered_tree__OrderedTree_FT0];
138 cltype = type_struct->color;
139 idtype = type_struct->id;
140 if(p0 == NULL) {
141 var = 1;
142 } else {
143 if(cltype >= p0->type->table_size) {
144 var = 0;
145 } else {
146 var = p0->type->type_table[cltype] == idtype;
147 }
148 }
149 if (!var) {
150 var_class_name = p0 == NULL ? "null" : p0->type->name;
151 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable OrderedTree#0", var_class_name);
152 fprintf(stderr, " (%s:%d)\n", "lib/ordered_tree.nit", 31);
153 show_backtrace(1);
154 }
155 /* Covariant cast for argument 1 (e) <p1:Object> isa OrderedTree#0 */
156 /* <p1:Object> isa OrderedTree#0 */
157 type_struct4 = self->type->resolution_table->types[COLOR_ordered_tree__OrderedTree_FT0];
158 cltype2 = type_struct4->color;
159 idtype3 = type_struct4->id;
160 if(cltype2 >= p1->type->table_size) {
161 var1 = 0;
162 } else {
163 var1 = p1->type->type_table[cltype2] == idtype3;
164 }
165 if (!var1) {
166 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
167 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OrderedTree#0", var_class_name5);
168 fprintf(stderr, " (%s:%d)\n", "lib/ordered_tree.nit", 31);
169 show_backtrace(1);
170 }
171 var_p = p0;
172 var_e = p1;
173 var6 = NULL;
174 if (var_p == NULL) {
175 var7 = 1; /* is null */
176 } else {
177 var7 = 0; /* arg is null but recv is not */
178 }
179 if (var7){
180 var8 = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__roots]))(self) /* roots on <self:OrderedTree[Object]>*/;
181 ((void (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var8, var_e) /* add on <var8:Array[Object]>*/;
182 } else {
183 var9 = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__sub]))(self) /* sub on <self:OrderedTree[Object]>*/;
184 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var9, var_p) /* has_key on <var9:HashMap[Object, Array[Object]]>*/;
185 if (var10){
186 var11 = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__sub]))(self) /* sub on <self:OrderedTree[Object]>*/;
187 var12 = ((val* (*)(val*, val*))(var11->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var11, var_p) /* [] on <var11:HashMap[Object, Array[Object]]>*/;
188 ((void (*)(val*, val*))(var12->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var12, var_e) /* add on <var12:nullable Object(Array[Object])>*/;
189 } else {
190 var13 = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__sub]))(self) /* sub on <self:OrderedTree[Object]>*/;
191 var14 = NEW_array__Array(self->type->resolution_table->types[COLOR_array__Arrayordered_tree__OrderedTree_FT0]);
192 { /* var14 = array_instance Array[OrderedTree#0] */
193 var15 = 1;
194 var16 = NEW_array__NativeArray(var15, self->type->resolution_table->types[COLOR_array__NativeArrayordered_tree__OrderedTree_FT0]);
195 ((struct instance_array__NativeArray*)var16)->values[0] = (val*) var_e;
196 ((void (*)(val*, val*, long))(var14->class->vft[COLOR_array__Array__with_native]))(var14, var16, var15) /* with_native on <var14:Array[Object]>*/;
197 }
198 ((void (*)(val*, val*, val*))(var13->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var13, var_p, var14) /* []= on <var13:HashMap[Object, Array[Object]]>*/;
199 }
200 }
201 RET_LABEL:;
202 }
203 /* method ordered_tree#OrderedTree#add for (self: Object, nullable Object, Object) */
204 void VIRTUAL_ordered_tree__OrderedTree__add(val* self, val* p0, val* p1) {
205 ordered_tree__OrderedTree__add(self, p0, p1);
206 RET_LABEL:;
207 }
208 /* method ordered_tree#OrderedTree#pretty for (self: OrderedTree[Object], OStream) */
209 void ordered_tree__OrderedTree__pretty(val* self, val* p0) {
210 val* var_o /* var o: OStream */;
211 val* var /* : Array[Object] */;
212 val* var1 /* : nullable Object */;
213 val* var_last /* var last: Object */;
214 val* var2 /* : Array[Object] */;
215 val* var3 /* : Iterator[nullable Object] */;
216 short int var4 /* : Bool */;
217 val* var5 /* : nullable Object */;
218 val* var_r /* var r: Object */;
219 val* var6 /* : String */;
220 static val* varonce;
221 val* var7 /* : String */;
222 char* var8 /* : NativeString */;
223 long var9 /* : Int */;
224 val* var10 /* : String */;
225 static val* varonce11;
226 val* var12 /* : String */;
227 char* var13 /* : NativeString */;
228 long var14 /* : Int */;
229 val* var15 /* : String */;
230 var_o = p0;
231 var = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__roots]))(self) /* roots on <self:OrderedTree[Object]>*/;
232 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var) /* last on <var:Array[Object]>*/;
233 var_last = var1;
234 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__roots]))(self) /* roots on <self:OrderedTree[Object]>*/;
235 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Array[Object]>*/;
236 for(;;) {
237 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
238 if(!var4) break;
239 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
240 var_r = var5;
241 var6 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__display]))(self, var_r) /* display on <self:OrderedTree[Object]>*/;
242 ((void (*)(val*, val*))(var_o->class->vft[COLOR_stream__OStream__write]))(var_o, var6) /* write on <var_o:OStream>*/;
243 if (varonce) {
244 var7 = varonce;
245 } else {
246 var8 = "\n";
247 var9 = 1;
248 var10 = string__NativeString__to_s_with_length(var8, var9);
249 var7 = var10;
250 varonce = var7;
251 }
252 ((void (*)(val*, val*))(var_o->class->vft[COLOR_stream__OStream__write]))(var_o, var7) /* write on <var_o:OStream>*/;
253 if (varonce11) {
254 var12 = varonce11;
255 } else {
256 var13 = "";
257 var14 = 0;
258 var15 = string__NativeString__to_s_with_length(var13, var14);
259 var12 = var15;
260 varonce11 = var12;
261 }
262 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__sub_pretty]))(self, var_o, var_r, var12) /* sub_pretty on <self:OrderedTree[Object]>*/;
263 CONTINUE_label: (void)0;
264 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
265 }
266 BREAK_label: (void)0;
267 RET_LABEL:;
268 }
269 /* method ordered_tree#OrderedTree#pretty for (self: Object, OStream) */
270 void VIRTUAL_ordered_tree__OrderedTree__pretty(val* self, val* p0) {
271 ordered_tree__OrderedTree__pretty(self, p0);
272 RET_LABEL:;
273 }
274 /* method ordered_tree#OrderedTree#sub_pretty for (self: OrderedTree[Object], OStream, Object, String) */
275 void ordered_tree__OrderedTree__sub_pretty(val* self, val* p0, val* p1, val* p2) {
276 short int var /* : Bool */;
277 int cltype;
278 int idtype;
279 const struct type* type_struct;
280 const char* var_class_name;
281 val* var_o /* var o: OStream */;
282 val* var_e /* var e: Object */;
283 val* var_prefix /* var prefix: String */;
284 val* var1 /* : HashMap[Object, Array[Object]] */;
285 short int var2 /* : Bool */;
286 short int var3 /* : Bool */;
287 val* var4 /* : HashMap[Object, Array[Object]] */;
288 val* var5 /* : nullable Object */;
289 val* var_subs /* var subs: Array[Object] */;
290 val* var6 /* : nullable Object */;
291 val* var_last /* var last: Object */;
292 val* var7 /* : Iterator[nullable Object] */;
293 short int var8 /* : Bool */;
294 val* var9 /* : nullable Object */;
295 val* var_e2 /* var e2: Object */;
296 short int var10 /* : Bool */;
297 static val* varonce;
298 val* var11 /* : String */;
299 char* var12 /* : NativeString */;
300 long var13 /* : Int */;
301 val* var14 /* : String */;
302 val* var15 /* : String */;
303 static val* varonce16;
304 val* var17 /* : String */;
305 char* var18 /* : NativeString */;
306 long var19 /* : Int */;
307 val* var20 /* : String */;
308 val* var21 /* : Array[Object] */;
309 long var22 /* : Int */;
310 val* var23 /* : NativeArray[Object] */;
311 val* var24 /* : String */;
312 static val* varonce25;
313 val* var26 /* : String */;
314 char* var27 /* : NativeString */;
315 long var28 /* : Int */;
316 val* var29 /* : String */;
317 val* var30 /* : String */;
318 static val* varonce31;
319 val* var32 /* : String */;
320 char* var33 /* : NativeString */;
321 long var34 /* : Int */;
322 val* var35 /* : String */;
323 val* var36 /* : String */;
324 static val* varonce37;
325 val* var38 /* : String */;
326 char* var39 /* : NativeString */;
327 long var40 /* : Int */;
328 val* var41 /* : String */;
329 val* var42 /* : Array[Object] */;
330 long var43 /* : Int */;
331 val* var44 /* : NativeArray[Object] */;
332 val* var45 /* : String */;
333 static val* varonce46;
334 val* var47 /* : String */;
335 char* var48 /* : NativeString */;
336 long var49 /* : Int */;
337 val* var50 /* : String */;
338 val* var51 /* : String */;
339 /* Covariant cast for argument 1 (e) <p1:Object> isa OrderedTree#0 */
340 /* <p1:Object> isa OrderedTree#0 */
341 type_struct = self->type->resolution_table->types[COLOR_ordered_tree__OrderedTree_FT0];
342 cltype = type_struct->color;
343 idtype = type_struct->id;
344 if(cltype >= p1->type->table_size) {
345 var = 0;
346 } else {
347 var = p1->type->type_table[cltype] == idtype;
348 }
349 if (!var) {
350 var_class_name = p1 == NULL ? "null" : p1->type->name;
351 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OrderedTree#0", var_class_name);
352 fprintf(stderr, " (%s:%d)\n", "lib/ordered_tree.nit", 62);
353 show_backtrace(1);
354 }
355 var_o = p0;
356 var_e = p1;
357 var_prefix = p2;
358 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__sub]))(self) /* sub on <self:OrderedTree[Object]>*/;
359 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var1, var_e) /* has_key on <var1:HashMap[Object, Array[Object]]>*/;
360 var3 = !var2;
361 if (var3){
362 goto RET_LABEL;
363 } else {
364 }
365 var4 = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__sub]))(self) /* sub on <self:OrderedTree[Object]>*/;
366 var5 = ((val* (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var4, var_e) /* [] on <var4:HashMap[Object, Array[Object]]>*/;
367 var_subs = var5;
368 var6 = ((val* (*)(val*))(var_subs->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_subs) /* last on <var_subs:Array[Object]>*/;
369 var_last = var6;
370 var7 = ((val* (*)(val*))(var_subs->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_subs) /* iterator on <var_subs:Array[Object]>*/;
371 for(;;) {
372 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
373 if(!var8) break;
374 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
375 var_e2 = var9;
376 var10 = ((short int (*)(val*, val*))(var_e2->class->vft[COLOR_kernel__Object___33d_61d]))(var_e2, var_last) /* != on <var_e2:Object>*/;
377 if (var10){
378 if (varonce) {
379 var11 = varonce;
380 } else {
381 var12 = "|--";
382 var13 = 3;
383 var14 = string__NativeString__to_s_with_length(var12, var13);
384 var11 = var14;
385 varonce = var11;
386 }
387 var15 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__display]))(self, var_e2) /* display on <self:OrderedTree[Object]>*/;
388 if (varonce16) {
389 var17 = varonce16;
390 } else {
391 var18 = "\n";
392 var19 = 1;
393 var20 = string__NativeString__to_s_with_length(var18, var19);
394 var17 = var20;
395 varonce16 = var17;
396 }
397 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
398 { /* var21 = array_instance Array[Object] */
399 var22 = 4;
400 var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
401 ((struct instance_array__NativeArray*)var23)->values[0] = (val*) var_prefix;
402 ((struct instance_array__NativeArray*)var23)->values[1] = (val*) var11;
403 ((struct instance_array__NativeArray*)var23)->values[2] = (val*) var15;
404 ((struct instance_array__NativeArray*)var23)->values[3] = (val*) var17;
405 ((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
406 }
407 var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
408 ((void (*)(val*, val*))(var_o->class->vft[COLOR_stream__OStream__write]))(var_o, var24) /* write on <var_o:OStream>*/;
409 if (varonce25) {
410 var26 = varonce25;
411 } else {
412 var27 = "| ";
413 var28 = 3;
414 var29 = string__NativeString__to_s_with_length(var27, var28);
415 var26 = var29;
416 varonce25 = var26;
417 }
418 var30 = ((val* (*)(val*, val*))(var_prefix->class->vft[COLOR_string__String___43d]))(var_prefix, var26) /* + on <var_prefix:String>*/;
419 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__sub_pretty]))(self, var_o, var_e2, var30) /* sub_pretty on <self:OrderedTree[Object]>*/;
420 } else {
421 if (varonce31) {
422 var32 = varonce31;
423 } else {
424 var33 = "`--";
425 var34 = 3;
426 var35 = string__NativeString__to_s_with_length(var33, var34);
427 var32 = var35;
428 varonce31 = var32;
429 }
430 var36 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__display]))(self, var_e2) /* display on <self:OrderedTree[Object]>*/;
431 if (varonce37) {
432 var38 = varonce37;
433 } else {
434 var39 = "\n";
435 var40 = 1;
436 var41 = string__NativeString__to_s_with_length(var39, var40);
437 var38 = var41;
438 varonce37 = var38;
439 }
440 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
441 { /* var42 = array_instance Array[Object] */
442 var43 = 4;
443 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
444 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var_prefix;
445 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var32;
446 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var36;
447 ((struct instance_array__NativeArray*)var44)->values[3] = (val*) var38;
448 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
449 }
450 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
451 ((void (*)(val*, val*))(var_o->class->vft[COLOR_stream__OStream__write]))(var_o, var45) /* write on <var_o:OStream>*/;
452 if (varonce46) {
453 var47 = varonce46;
454 } else {
455 var48 = " ";
456 var49 = 3;
457 var50 = string__NativeString__to_s_with_length(var48, var49);
458 var47 = var50;
459 varonce46 = var47;
460 }
461 var51 = ((val* (*)(val*, val*))(var_prefix->class->vft[COLOR_string__String___43d]))(var_prefix, var47) /* + on <var_prefix:String>*/;
462 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__sub_pretty]))(self, var_o, var_e2, var51) /* sub_pretty on <self:OrderedTree[Object]>*/;
463 }
464 CONTINUE_label: (void)0;
465 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
466 }
467 BREAK_label: (void)0;
468 RET_LABEL:;
469 }
470 /* method ordered_tree#OrderedTree#sub_pretty for (self: Object, OStream, Object, String) */
471 void VIRTUAL_ordered_tree__OrderedTree__sub_pretty(val* self, val* p0, val* p1, val* p2) {
472 ordered_tree__OrderedTree__sub_pretty(self, p0, p1, p2);
473 RET_LABEL:;
474 }
475 /* method ordered_tree#OrderedTree#sort_with for (self: OrderedTree[Object], AbstractSorter[Object]) */
476 void ordered_tree__OrderedTree__sort_with(val* self, val* p0) {
477 short int var /* : Bool */;
478 int cltype;
479 int idtype;
480 const struct type* type_struct;
481 const char* var_class_name;
482 val* var_comparator /* var comparator: AbstractSorter[Object] */;
483 val* var1 /* : Array[Object] */;
484 val* var2 /* : HashMap[Object, Array[Object]] */;
485 val* var3 /* : Collection[nullable Object] */;
486 val* var4 /* : Iterator[nullable Object] */;
487 short int var5 /* : Bool */;
488 val* var6 /* : nullable Object */;
489 val* var_a /* var a: Array[Object] */;
490 /* Covariant cast for argument 0 (comparator) <p0:AbstractSorter[Object]> isa AbstractSorter[OrderedTree#0] */
491 /* <p0:AbstractSorter[Object]> isa AbstractSorter[OrderedTree#0] */
492 type_struct = self->type->resolution_table->types[COLOR_sorter__AbstractSorterordered_tree__OrderedTree_FT0];
493 cltype = type_struct->color;
494 idtype = type_struct->id;
495 if(cltype >= p0->type->table_size) {
496 var = 0;
497 } else {
498 var = p0->type->type_table[cltype] == idtype;
499 }
500 if (!var) {
501 var_class_name = p0 == NULL ? "null" : p0->type->name;
502 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AbstractSorter[OrderedTree#0]", var_class_name);
503 fprintf(stderr, " (%s:%d)\n", "lib/ordered_tree.nit", 78);
504 show_backtrace(1);
505 }
506 var_comparator = p0;
507 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__roots]))(self) /* roots on <self:OrderedTree[Object]>*/;
508 ((void (*)(val*, val*))(var_comparator->class->vft[COLOR_sorter__AbstractSorter__sort]))(var_comparator, var1) /* sort on <var_comparator:AbstractSorter[Object]>*/;
509 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ordered_tree__OrderedTree__sub]))(self) /* sub on <self:OrderedTree[Object]>*/;
510 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__MapRead__values]))(var2) /* values on <var2:HashMap[Object, Array[Object]]>*/;
511 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__iterator]))(var3) /* iterator on <var3:Collection[nullable Object](HashMapValues[Object, Array[Object]])>*/;
512 for(;;) {
513 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var4) /* is_ok on <var4:Iterator[nullable Object]>*/;
514 if(!var5) break;
515 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__item]))(var4) /* item on <var4:Iterator[nullable Object]>*/;
516 var_a = var6;
517 ((void (*)(val*, val*))(var_comparator->class->vft[COLOR_sorter__AbstractSorter__sort]))(var_comparator, var_a) /* sort on <var_comparator:AbstractSorter[Object]>*/;
518 CONTINUE_label: (void)0;
519 ((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__next]))(var4) /* next on <var4:Iterator[nullable Object]>*/;
520 }
521 BREAK_label: (void)0;
522 RET_LABEL:;
523 }
524 /* method ordered_tree#OrderedTree#sort_with for (self: Object, AbstractSorter[Object]) */
525 void VIRTUAL_ordered_tree__OrderedTree__sort_with(val* self, val* p0) {
526 ordered_tree__OrderedTree__sort_with(self, p0);
527 RET_LABEL:;
528 }
529 /* method ordered_tree#OrderedTree#display for (self: OrderedTree[Object], Object): String */
530 val* ordered_tree__OrderedTree__display(val* self, val* p0) {
531 val* var /* : String */;
532 short int var1 /* : Bool */;
533 int cltype;
534 int idtype;
535 const struct type* type_struct;
536 const char* var_class_name;
537 val* var_e /* var e: Object */;
538 val* var2 /* : String */;
539 /* Covariant cast for argument 0 (e) <p0:Object> isa OrderedTree#0 */
540 /* <p0:Object> isa OrderedTree#0 */
541 type_struct = self->type->resolution_table->types[COLOR_ordered_tree__OrderedTree_FT0];
542 cltype = type_struct->color;
543 idtype = type_struct->id;
544 if(cltype >= p0->type->table_size) {
545 var1 = 0;
546 } else {
547 var1 = p0->type->type_table[cltype] == idtype;
548 }
549 if (!var1) {
550 var_class_name = p0 == NULL ? "null" : p0->type->name;
551 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OrderedTree#0", var_class_name);
552 fprintf(stderr, " (%s:%d)\n", "lib/ordered_tree.nit", 88);
553 show_backtrace(1);
554 }
555 var_e = p0;
556 var2 = ((val* (*)(val*))(var_e->class->vft[COLOR_string__Object__to_s]))(var_e) /* to_s on <var_e:Object>*/;
557 var = var2;
558 goto RET_LABEL;
559 RET_LABEL:;
560 return var;
561 }
562 /* method ordered_tree#OrderedTree#display for (self: Object, Object): String */
563 val* VIRTUAL_ordered_tree__OrderedTree__display(val* self, val* p0) {
564 val* var /* : String */;
565 val* var1 /* : String */;
566 var1 = ordered_tree__OrderedTree__display(self, p0);
567 var = var1;
568 RET_LABEL:;
569 return var;
570 }
571 /* method ordered_tree#OrderedTree#init for (self: OrderedTree[Object]) */
572 void ordered_tree__OrderedTree__init(val* self) {
573 RET_LABEL:;
574 }
575 /* method ordered_tree#OrderedTree#init for (self: Object) */
576 void VIRTUAL_ordered_tree__OrderedTree__init(val* self) {
577 ordered_tree__OrderedTree__init(self);
578 RET_LABEL:;
579 }