566657ee605b5b9615f1a6ace659208ece104888
[nit.git] / c_src / ropes.sep.1.c
1 #include "ropes.sep.0.h"
2 /* method ropes#TupleLeafNodePos#curr_node for (self: TupleLeafNodePos): LeafNode */
3 val* ropes__TupleLeafNodePos__curr_node(val* self) {
4 val* var /* : LeafNode */;
5 val* var1 /* : LeafNode */;
6 var1 = self->attrs[COLOR_ropes__TupleLeafNodePos___64dcurr_node].val; /* @curr_node on <self:TupleLeafNodePos> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @curr_node", "lib/standard/ropes.nit", 24);
9 exit(1);
10 }
11 var = var1;
12 RET_LABEL:;
13 return var;
14 }
15 /* method ropes#TupleLeafNodePos#curr_node for (self: Object): LeafNode */
16 val* VIRTUAL_ropes__TupleLeafNodePos__curr_node(val* self) {
17 val* var /* : LeafNode */;
18 val* var1 /* : LeafNode */;
19 var1 = ropes__TupleLeafNodePos__curr_node(self);
20 var = var1;
21 RET_LABEL:;
22 return var;
23 }
24 /* method ropes#TupleLeafNodePos#curr_node= for (self: TupleLeafNodePos, LeafNode) */
25 void ropes__TupleLeafNodePos__curr_node_61d(val* self, val* p0) {
26 self->attrs[COLOR_ropes__TupleLeafNodePos___64dcurr_node].val = p0; /* @curr_node on <self:TupleLeafNodePos> */
27 RET_LABEL:;
28 }
29 /* method ropes#TupleLeafNodePos#curr_node= for (self: Object, LeafNode) */
30 void VIRTUAL_ropes__TupleLeafNodePos__curr_node_61d(val* self, val* p0) {
31 ropes__TupleLeafNodePos__curr_node_61d(self, p0);
32 RET_LABEL:;
33 }
34 /* method ropes#TupleLeafNodePos#corrected_pos for (self: TupleLeafNodePos): Int */
35 long ropes__TupleLeafNodePos__corrected_pos(val* self) {
36 long var /* : Int */;
37 long var1 /* : Int */;
38 var1 = self->attrs[COLOR_ropes__TupleLeafNodePos___64dcorrected_pos].l; /* @corrected_pos on <self:TupleLeafNodePos> */
39 var = var1;
40 RET_LABEL:;
41 return var;
42 }
43 /* method ropes#TupleLeafNodePos#corrected_pos for (self: Object): Int */
44 long VIRTUAL_ropes__TupleLeafNodePos__corrected_pos(val* self) {
45 long var /* : Int */;
46 long var1 /* : Int */;
47 var1 = ropes__TupleLeafNodePos__corrected_pos(self);
48 var = var1;
49 RET_LABEL:;
50 return var;
51 }
52 /* method ropes#TupleLeafNodePos#corrected_pos= for (self: TupleLeafNodePos, Int) */
53 void ropes__TupleLeafNodePos__corrected_pos_61d(val* self, long p0) {
54 self->attrs[COLOR_ropes__TupleLeafNodePos___64dcorrected_pos].l = p0; /* @corrected_pos on <self:TupleLeafNodePos> */
55 RET_LABEL:;
56 }
57 /* method ropes#TupleLeafNodePos#corrected_pos= for (self: Object, Int) */
58 void VIRTUAL_ropes__TupleLeafNodePos__corrected_pos_61d(val* self, long p0) {
59 ropes__TupleLeafNodePos__corrected_pos_61d(self, p0);
60 RET_LABEL:;
61 }
62 /* method ropes#TupleLeafNodePos#visit_stack for (self: TupleLeafNodePos): List[TupleVisitNode] */
63 val* ropes__TupleLeafNodePos__visit_stack(val* self) {
64 val* var /* : List[TupleVisitNode] */;
65 val* var1 /* : List[TupleVisitNode] */;
66 var1 = self->attrs[COLOR_ropes__TupleLeafNodePos___64dvisit_stack].val; /* @visit_stack on <self:TupleLeafNodePos> */
67 if (var1 == NULL) {
68 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @visit_stack", "lib/standard/ropes.nit", 26);
69 exit(1);
70 }
71 var = var1;
72 RET_LABEL:;
73 return var;
74 }
75 /* method ropes#TupleLeafNodePos#visit_stack for (self: Object): List[TupleVisitNode] */
76 val* VIRTUAL_ropes__TupleLeafNodePos__visit_stack(val* self) {
77 val* var /* : List[TupleVisitNode] */;
78 val* var1 /* : List[TupleVisitNode] */;
79 var1 = ropes__TupleLeafNodePos__visit_stack(self);
80 var = var1;
81 RET_LABEL:;
82 return var;
83 }
84 /* method ropes#TupleLeafNodePos#visit_stack= for (self: TupleLeafNodePos, List[TupleVisitNode]) */
85 void ropes__TupleLeafNodePos__visit_stack_61d(val* self, val* p0) {
86 self->attrs[COLOR_ropes__TupleLeafNodePos___64dvisit_stack].val = p0; /* @visit_stack on <self:TupleLeafNodePos> */
87 RET_LABEL:;
88 }
89 /* method ropes#TupleLeafNodePos#visit_stack= for (self: Object, List[TupleVisitNode]) */
90 void VIRTUAL_ropes__TupleLeafNodePos__visit_stack_61d(val* self, val* p0) {
91 ropes__TupleLeafNodePos__visit_stack_61d(self, p0);
92 RET_LABEL:;
93 }
94 /* method ropes#TupleLeafNodePos#init for (self: TupleLeafNodePos, LeafNode, Int, List[TupleVisitNode]) */
95 void ropes__TupleLeafNodePos__init(val* self, val* p0, long p1, val* p2) {
96 self->attrs[COLOR_ropes__TupleLeafNodePos___64dcurr_node].val = p0; /* @curr_node on <self:TupleLeafNodePos> */
97 self->attrs[COLOR_ropes__TupleLeafNodePos___64dcorrected_pos].l = p1; /* @corrected_pos on <self:TupleLeafNodePos> */
98 self->attrs[COLOR_ropes__TupleLeafNodePos___64dvisit_stack].val = p2; /* @visit_stack on <self:TupleLeafNodePos> */
99 RET_LABEL:;
100 }
101 /* method ropes#TupleLeafNodePos#init for (self: Object, LeafNode, Int, List[TupleVisitNode]) */
102 void VIRTUAL_ropes__TupleLeafNodePos__init(val* self, val* p0, long p1, val* p2) {
103 ropes__TupleLeafNodePos__init(self, p0, p1, p2);
104 RET_LABEL:;
105 }
106 /* method ropes#Rope#str_representation for (self: Rope): nullable String */
107 val* ropes__Rope__str_representation(val* self) {
108 val* var /* : nullable String */;
109 val* var1 /* : nullable String */;
110 var1 = self->attrs[COLOR_ropes__Rope___64dstr_representation].val; /* @str_representation on <self:Rope> */
111 var = var1;
112 RET_LABEL:;
113 return var;
114 }
115 /* method ropes#Rope#str_representation for (self: Object): nullable String */
116 val* VIRTUAL_ropes__Rope__str_representation(val* self) {
117 val* var /* : nullable String */;
118 val* var1 /* : nullable String */;
119 var1 = ropes__Rope__str_representation(self);
120 var = var1;
121 RET_LABEL:;
122 return var;
123 }
124 /* method ropes#Rope#str_representation= for (self: Rope, nullable String) */
125 void ropes__Rope__str_representation_61d(val* self, val* p0) {
126 self->attrs[COLOR_ropes__Rope___64dstr_representation].val = p0; /* @str_representation on <self:Rope> */
127 RET_LABEL:;
128 }
129 /* method ropes#Rope#str_representation= for (self: Object, nullable String) */
130 void VIRTUAL_ropes__Rope__str_representation_61d(val* self, val* p0) {
131 ropes__Rope__str_representation_61d(self, p0);
132 RET_LABEL:;
133 }
134 /* method ropes#Rope#parent_node for (self: Rope): RopeNode */
135 val* ropes__Rope__parent_node(val* self) {
136 val* var /* : RopeNode */;
137 val* var1 /* : RopeNode */;
138 var1 = self->attrs[COLOR_ropes__Rope___64dparent_node].val; /* @parent_node on <self:Rope> */
139 if (var1 == NULL) {
140 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @parent_node", "lib/standard/ropes.nit", 39);
141 exit(1);
142 }
143 var = var1;
144 RET_LABEL:;
145 return var;
146 }
147 /* method ropes#Rope#parent_node for (self: Object): RopeNode */
148 val* VIRTUAL_ropes__Rope__parent_node(val* self) {
149 val* var /* : RopeNode */;
150 val* var1 /* : RopeNode */;
151 var1 = ropes__Rope__parent_node(self);
152 var = var1;
153 RET_LABEL:;
154 return var;
155 }
156 /* method ropes#Rope#parent_node= for (self: Rope, RopeNode) */
157 void ropes__Rope__parent_node_61d(val* self, val* p0) {
158 self->attrs[COLOR_ropes__Rope___64dparent_node].val = p0; /* @parent_node on <self:Rope> */
159 RET_LABEL:;
160 }
161 /* method ropes#Rope#parent_node= for (self: Object, RopeNode) */
162 void VIRTUAL_ropes__Rope__parent_node_61d(val* self, val* p0) {
163 ropes__Rope__parent_node_61d(self, p0);
164 RET_LABEL:;
165 }
166 /* method ropes#Rope#init for (self: Rope) */
167 void ropes__Rope__init(val* self) {
168 val* var /* : ConcatNode */;
169 var = NEW_ropes__ConcatNode(&type_ropes__ConcatNode);
170 ((void (*)(val*))(var->class->vft[COLOR_ropes__ConcatNode__init]))(var) /* init on <var:ConcatNode>*/;
171 CHECK_NEW_ropes__ConcatNode(var);
172 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__Rope__parent_node_61d]))(self, var) /* parent_node= on <self:Rope>*/;
173 RET_LABEL:;
174 }
175 /* method ropes#Rope#init for (self: Object) */
176 void VIRTUAL_ropes__Rope__init(val* self) {
177 ropes__Rope__init(self);
178 RET_LABEL:;
179 }
180 /* method ropes#Rope#with_string for (self: Rope, AbstractString) */
181 void ropes__Rope__with_string(val* self, val* p0) {
182 val* var_str /* var str: AbstractString */;
183 val* var /* : ConcatNode */;
184 val* var1 /* : RopeNode */;
185 short int var2 /* : Bool */;
186 int cltype;
187 int idtype;
188 val* var3 /* : LeafNode */;
189 val* var4 /* : RopeNode */;
190 short int var5 /* : Bool */;
191 int cltype6;
192 int idtype7;
193 var_str = p0;
194 var = NEW_ropes__ConcatNode(&type_ropes__ConcatNode);
195 ((void (*)(val*))(var->class->vft[COLOR_ropes__ConcatNode__init]))(var) /* init on <var:ConcatNode>*/;
196 CHECK_NEW_ropes__ConcatNode(var);
197 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__Rope__parent_node_61d]))(self, var) /* parent_node= on <self:Rope>*/;
198 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__parent_node]))(self) /* parent_node on <self:Rope>*/;
199 /* <var1:RopeNode> isa ConcatNode */
200 cltype = type_ropes__ConcatNode.color;
201 idtype = type_ropes__ConcatNode.id;
202 if(cltype >= var1->type->table_size) {
203 var2 = 0;
204 } else {
205 var2 = var1->type->type_table[cltype] == idtype;
206 }
207 if (!var2) {
208 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 50);
209 exit(1);
210 }
211 var3 = NEW_ropes__LeafNode(&type_ropes__LeafNode);
212 ((void (*)(val*, val*))(var3->class->vft[COLOR_ropes__LeafNode__init]))(var3, var_str) /* init on <var3:LeafNode>*/;
213 CHECK_NEW_ropes__LeafNode(var3);
214 ((void (*)(val*, val*))(var1->class->vft[COLOR_ropes__ConcatNode__right_child_61d]))(var1, var3) /* right_child= on <var1:RopeNode(ConcatNode)>*/;
215 var4 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__parent_node]))(self) /* parent_node on <self:Rope>*/;
216 /* <var4:RopeNode> isa ConcatNode */
217 cltype6 = type_ropes__ConcatNode.color;
218 idtype7 = type_ropes__ConcatNode.id;
219 if(cltype6 >= var4->type->table_size) {
220 var5 = 0;
221 } else {
222 var5 = var4->type->type_table[cltype6] == idtype7;
223 }
224 if (!var5) {
225 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 51);
226 exit(1);
227 }
228 ((void (*)(val*))(var4->class->vft[COLOR_ropes__ConcatNode__update_data]))(var4) /* update_data on <var4:RopeNode(ConcatNode)>*/;
229 RET_LABEL:;
230 }
231 /* method ropes#Rope#with_string for (self: Object, AbstractString) */
232 void VIRTUAL_ropes__Rope__with_string(val* self, val* p0) {
233 ropes__Rope__with_string(self, p0);
234 RET_LABEL:;
235 }
236 /* method ropes#Rope#chars for (self: Rope): SequenceRead[Char] */
237 val* ropes__Rope__chars(val* self) {
238 val* var /* : SequenceRead[Char] */;
239 val* var1 /* : CharRopeView */;
240 var1 = NEW_ropes__CharRopeView(&type_ropes__CharRopeView);
241 ((void (*)(val*, val*))(var1->class->vft[COLOR_ropes__CharRopeView__init]))(var1, self) /* init on <var1:CharRopeView>*/;
242 CHECK_NEW_ropes__CharRopeView(var1);
243 var = var1;
244 goto RET_LABEL;
245 RET_LABEL:;
246 return var;
247 }
248 /* method ropes#Rope#chars for (self: Object): SequenceRead[Char] */
249 val* VIRTUAL_ropes__Rope__chars(val* self) {
250 val* var /* : SequenceRead[Char] */;
251 val* var1 /* : SequenceRead[Char] */;
252 var1 = ropes__Rope__chars(self);
253 var = var1;
254 RET_LABEL:;
255 return var;
256 }
257 /* method ropes#Rope#length for (self: Rope): Int */
258 long ropes__Rope__length(val* self) {
259 long var /* : Int */;
260 val* var1 /* : RopeNode */;
261 long var2 /* : Int */;
262 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__parent_node]))(self) /* parent_node on <self:Rope>*/;
263 var2 = ((long (*)(val*))(var1->class->vft[COLOR_ropes__RopeNode__length]))(var1) /* length on <var1:RopeNode>*/;
264 var = var2;
265 goto RET_LABEL;
266 RET_LABEL:;
267 return var;
268 }
269 /* method ropes#Rope#length for (self: Object): Int */
270 long VIRTUAL_ropes__Rope__length(val* self) {
271 long var /* : Int */;
272 long var1 /* : Int */;
273 var1 = ropes__Rope__length(self);
274 var = var1;
275 RET_LABEL:;
276 return var;
277 }
278 /* method ropes#Rope#to_s for (self: Rope): String */
279 val* ropes__Rope__to_s(val* self) {
280 val* var /* : String */;
281 val* var1 /* : nullable String */;
282 val* var2 /* : null */;
283 short int var3 /* : Bool */;
284 val* var4 /* : String */;
285 val* var5 /* : nullable String */;
286 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__str_representation]))(self) /* str_representation on <self:Rope>*/;
287 var2 = NULL;
288 if (var1 == NULL) {
289 var3 = 1; /* is null */
290 } else {
291 var3 = 0; /* arg is null but recv is not */
292 }
293 if (var3){
294 var4 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__flatten]))(self) /* flatten on <self:Rope>*/;
295 var4;
296 } else {
297 }
298 var5 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__str_representation]))(self) /* str_representation on <self:Rope>*/;
299 if (var5 == NULL) {
300 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 70);
301 exit(1);
302 }
303 var = var5;
304 goto RET_LABEL;
305 RET_LABEL:;
306 return var;
307 }
308 /* method ropes#Rope#to_s for (self: Object): String */
309 val* VIRTUAL_ropes__Rope__to_s(val* self) {
310 val* var /* : String */;
311 val* var1 /* : String */;
312 var1 = ropes__Rope__to_s(self);
313 var = var1;
314 RET_LABEL:;
315 return var;
316 }
317 /* method ropes#Rope#flatten for (self: Rope): String */
318 val* ropes__Rope__flatten(val* self) {
319 val* var /* : String */;
320 long var1 /* : Int */;
321 long var2 /* : Int */;
322 long var3 /* : Int */;
323 long var5 /* : Int */;
324 char* var6 /* : NativeString */;
325 char* var_native_final_str /* var native_final_str: NativeString */;
326 long var7 /* : Int */;
327 char var8 /* : Char */;
328 long var10 /* : Int */;
329 long var_offset /* var offset: Int */;
330 val* var11 /* : DFSRopeLeafIterator */;
331 val* var_iter /* var iter: DFSRopeLeafIterator */;
332 short int var12 /* : Bool */;
333 val* var13 /* : nullable Object */;
334 val* var14 /* : String */;
335 char* var15 /* : NativeString */;
336 val* var16 /* : nullable Object */;
337 val* var17 /* : String */;
338 long var18 /* : Int */;
339 long var19 /* : Int */;
340 val* var21 /* : nullable Object */;
341 val* var22 /* : String */;
342 long var23 /* : Int */;
343 long var24 /* : Int */;
344 long var26 /* : Int */;
345 long var27 /* : Int */;
346 val* var28 /* : String */;
347 var1 = ((long (*)(val*))(self->class->vft[COLOR_ropes__Rope__length]))(self) /* length on <self:Rope>*/;
348 var2 = 1;
349 { /* Inline kernel#Int#+ (var1,var2) */
350 var5 = var1 + var2;
351 var3 = var5;
352 goto RET_LABEL4;
353 RET_LABEL4:(void)0;
354 }
355 var6 = ((char* (*)(val*, long))(self->class->vft[COLOR_string__StringCapable__calloc_string]))(self, var3) /* calloc_string on <self:Rope>*/;
356 var_native_final_str = var6;
357 var7 = ((long (*)(val*))(self->class->vft[COLOR_ropes__Rope__length]))(self) /* length on <self:Rope>*/;
358 var8 = '\0';
359 { /* Inline string#NativeString#[]= (var_native_final_str,var7,var8) */
360 var_native_final_str[var7]=var8;
361 RET_LABEL9:(void)0;
362 }
363 var10 = 0;
364 var_offset = var10;
365 var11 = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
366 ((void (*)(val*, val*))(var11->class->vft[COLOR_ropes__DFSRopeLeafIterator__init]))(var11, self) /* init on <var11:DFSRopeLeafIterator>*/;
367 CHECK_NEW_ropes__DFSRopeLeafIterator(var11);
368 var_iter = var11;
369 for(;;) {
370 var12 = ((short int (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_iter) /* is_ok on <var_iter:DFSRopeLeafIterator>*/;
371 if (!var12) break;
372 var13 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
373 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_ropes__LeafNode__value]))(var13) /* value on <var13:nullable Object(LeafNode)>*/;
374 var15 = var14->attrs[COLOR_string__AbstractString___items].str; /* _items on <var14:String> */
375 var16 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
376 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_ropes__LeafNode__value]))(var16) /* value on <var16:nullable Object(LeafNode)>*/;
377 var18 = ((long (*)(val*))(var17->class->vft[COLOR_abstract_collection__Collection__length]))(var17) /* length on <var17:String>*/;
378 var19 = 0;
379 { /* Inline string#NativeString#copy_to (var15,var_native_final_str,var18,var19,var_offset) */
380 memcpy(var_native_final_str+var_offset,var15+var19,var18);
381 RET_LABEL20:(void)0;
382 }
383 var21 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
384 var22 = ((val* (*)(val*))(var21->class->vft[COLOR_ropes__LeafNode__value]))(var21) /* value on <var21:nullable Object(LeafNode)>*/;
385 var23 = ((long (*)(val*))(var22->class->vft[COLOR_abstract_collection__Collection__length]))(var22) /* length on <var22:String>*/;
386 { /* Inline kernel#Int#+ (var_offset,var23) */
387 var26 = var_offset + var23;
388 var24 = var26;
389 goto RET_LABEL25;
390 RET_LABEL25:(void)0;
391 }
392 var_offset = var24;
393 ((void (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_iter) /* next on <var_iter:DFSRopeLeafIterator>*/;
394 CONTINUE_label: (void)0;
395 }
396 BREAK_label: (void)0;
397 var27 = ((long (*)(val*))(self->class->vft[COLOR_ropes__Rope__length]))(self) /* length on <self:Rope>*/;
398 var28 = string__NativeString__to_s_with_length(var_native_final_str, var27);
399 var = var28;
400 goto RET_LABEL;
401 RET_LABEL:;
402 return var;
403 }
404 /* method ropes#Rope#flatten for (self: Object): String */
405 val* VIRTUAL_ropes__Rope__flatten(val* self) {
406 val* var /* : String */;
407 val* var1 /* : String */;
408 var1 = ropes__Rope__flatten(self);
409 var = var1;
410 RET_LABEL:;
411 return var;
412 }
413 /* method ropes#Rope#get_node_for_pos for (self: Rope, Int): TupleLeafNodePos */
414 val* ropes__Rope__get_node_for_pos(val* self, long p0) {
415 val* var /* : TupleLeafNodePos */;
416 long var_position /* var position: Int */;
417 short int var1 /* : Bool */;
418 long var2 /* : Int */;
419 short int var3 /* : Bool */;
420 short int var5 /* : Bool */;
421 int cltype;
422 int idtype;
423 short int var6 /* : Bool */;
424 short int var_ /* var : Bool */;
425 long var7 /* : Int */;
426 short int var8 /* : Bool */;
427 short int var10 /* : Bool */;
428 int cltype11;
429 int idtype12;
430 short int var13 /* : Bool */;
431 val* var14 /* : RopeNode */;
432 val* var_curr_node /* var curr_node: nullable RopeNode */;
433 val* var15 /* : List[TupleVisitNode] */;
434 val* var_visit_stack /* var visit_stack: List[TupleVisitNode] */;
435 short int var16 /* : Bool */;
436 int cltype17;
437 int idtype18;
438 val* var19 /* : TupleVisitNode */;
439 val* var_curr_visit_tuple /* var curr_visit_tuple: TupleVisitNode */;
440 short int var20 /* : Bool */;
441 val* var21 /* : nullable RopeNode */;
442 val* var22 /* : null */;
443 short int var23 /* : Bool */;
444 val* var24 /* : nullable RopeNode */;
445 long var25 /* : Int */;
446 short int var26 /* : Bool */;
447 short int var28 /* : Bool */;
448 int cltype29;
449 int idtype30;
450 short int var31 /* : Bool */;
451 short int var32 /* : Bool */;
452 val* var33 /* : nullable RopeNode */;
453 val* var34 /* : nullable RopeNode */;
454 val* var35 /* : null */;
455 short int var36 /* : Bool */;
456 short int var37 /* : Bool */;
457 short int var38 /* : Bool */;
458 val* var39 /* : nullable RopeNode */;
459 val* var40 /* : null */;
460 short int var41 /* : Bool */;
461 val* var42 /* : nullable RopeNode */;
462 long var43 /* : Int */;
463 long var44 /* : Int */;
464 long var46 /* : Int */;
465 val* var47 /* : nullable RopeNode */;
466 static val* varonce;
467 val* var48 /* : String */;
468 char* var49 /* : NativeString */;
469 long var50 /* : Int */;
470 val* var51 /* : String */;
471 short int var52 /* : Bool */;
472 int cltype53;
473 int idtype54;
474 val* var55 /* : TupleLeafNodePos */;
475 var_position = p0;
476 var2 = 0;
477 { /* Inline kernel#Int#>= (var_position,var2) */
478 /* Covariant cast for argument 0 (i) <var2:Int> isa OTHER */
479 /* <var2:Int> isa OTHER */
480 var5 = 1; /* easy <var2:Int> isa OTHER*/
481 if (!var5) {
482 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
483 exit(1);
484 }
485 var6 = var_position >= var2;
486 var3 = var6;
487 goto RET_LABEL4;
488 RET_LABEL4:(void)0;
489 }
490 var_ = var3;
491 if (var3){
492 var7 = ((long (*)(val*))(self->class->vft[COLOR_ropes__Rope__length]))(self) /* length on <self:Rope>*/;
493 { /* Inline kernel#Int#< (var_position,var7) */
494 /* Covariant cast for argument 0 (i) <var7:Int> isa OTHER */
495 /* <var7:Int> isa OTHER */
496 var10 = 1; /* easy <var7:Int> isa OTHER*/
497 if (!var10) {
498 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
499 exit(1);
500 }
501 var13 = var_position < var7;
502 var8 = var13;
503 goto RET_LABEL9;
504 RET_LABEL9:(void)0;
505 }
506 var1 = var8;
507 } else {
508 var1 = var_;
509 }
510 if (!var1) {
511 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "lib/standard/ropes.nit", 96);
512 exit(1);
513 }
514 var14 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__parent_node]))(self) /* parent_node on <self:Rope>*/;
515 var_curr_node = var14;
516 var15 = NEW_list__List(&type_list__Listropes__TupleVisitNode);
517 ((void (*)(val*))(var15->class->vft[COLOR_list__List__init]))(var15) /* init on <var15:List[TupleVisitNode]>*/;
518 CHECK_NEW_list__List(var15);
519 var_visit_stack = var15;
520 for(;;) {
521 /* <var_curr_node:nullable RopeNode> isa ConcatNode */
522 cltype17 = type_ropes__ConcatNode.color;
523 idtype18 = type_ropes__ConcatNode.id;
524 if(var_curr_node == NULL) {
525 var16 = 0;
526 } else {
527 if(cltype17 >= var_curr_node->type->table_size) {
528 var16 = 0;
529 } else {
530 var16 = var_curr_node->type->type_table[cltype17] == idtype18;
531 }
532 }
533 if (var16){
534 var19 = NEW_ropes__TupleVisitNode(&type_ropes__TupleVisitNode);
535 ((void (*)(val*, val*))(var19->class->vft[COLOR_ropes__TupleVisitNode__init]))(var19, var_curr_node) /* init on <var19:TupleVisitNode>*/;
536 CHECK_NEW_ropes__TupleVisitNode(var19);
537 var_curr_visit_tuple = var19;
538 var21 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_curr_node) /* left_child on <var_curr_node:nullable RopeNode(ConcatNode)>*/;
539 var22 = NULL;
540 if (var21 == NULL) {
541 var23 = 0; /* is null */
542 } else {
543 var23 = 1; /* arg is null and recv is not */
544 }
545 if (!var23) {
546 var20 = 0;
547 } else {
548 var24 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_curr_node) /* left_child on <var_curr_node:nullable RopeNode(ConcatNode)>*/;
549 if (var24 == NULL) {
550 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 107);
551 exit(1);
552 } else {
553 var25 = ((long (*)(val*))(var24->class->vft[COLOR_ropes__RopeNode__length]))(var24) /* length on <var24:nullable RopeNode>*/;
554 }
555 { /* Inline kernel#Int#< (var_position,var25) */
556 /* Covariant cast for argument 0 (i) <var25:Int> isa OTHER */
557 /* <var25:Int> isa OTHER */
558 var28 = 1; /* easy <var25:Int> isa OTHER*/
559 if (!var28) {
560 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
561 exit(1);
562 }
563 var31 = var_position < var25;
564 var26 = var31;
565 goto RET_LABEL27;
566 RET_LABEL27:(void)0;
567 }
568 var20 = var26;
569 }
570 if (var20){
571 var32 = 1;
572 ((void (*)(val*, short int))(var_curr_visit_tuple->class->vft[COLOR_ropes__TupleVisitNode__left_visited_61d]))(var_curr_visit_tuple, var32) /* left_visited= on <var_curr_visit_tuple:TupleVisitNode>*/;
573 var33 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_curr_node) /* left_child on <var_curr_node:nullable RopeNode(ConcatNode)>*/;
574 var_curr_node = var33;
575 } else {
576 var34 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__right_child]))(var_curr_node) /* right_child on <var_curr_node:nullable RopeNode(ConcatNode)>*/;
577 var35 = NULL;
578 if (var34 == NULL) {
579 var36 = 0; /* is null */
580 } else {
581 var36 = 1; /* arg is null and recv is not */
582 }
583 if (var36){
584 var37 = 1;
585 ((void (*)(val*, short int))(var_curr_visit_tuple->class->vft[COLOR_ropes__TupleVisitNode__left_visited_61d]))(var_curr_visit_tuple, var37) /* left_visited= on <var_curr_visit_tuple:TupleVisitNode>*/;
586 var38 = 1;
587 ((void (*)(val*, short int))(var_curr_visit_tuple->class->vft[COLOR_ropes__TupleVisitNode__right_visited_61d]))(var_curr_visit_tuple, var38) /* right_visited= on <var_curr_visit_tuple:TupleVisitNode>*/;
588 var39 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_curr_node) /* left_child on <var_curr_node:nullable RopeNode(ConcatNode)>*/;
589 var40 = NULL;
590 if (var39 == NULL) {
591 var41 = 0; /* is null */
592 } else {
593 var41 = 1; /* arg is null and recv is not */
594 }
595 if (var41){
596 var42 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_curr_node) /* left_child on <var_curr_node:nullable RopeNode(ConcatNode)>*/;
597 if (var42 == NULL) {
598 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 113);
599 exit(1);
600 } else {
601 var43 = ((long (*)(val*))(var42->class->vft[COLOR_ropes__RopeNode__length]))(var42) /* length on <var42:nullable RopeNode>*/;
602 }
603 { /* Inline kernel#Int#- (var_position,var43) */
604 var46 = var_position - var43;
605 var44 = var46;
606 goto RET_LABEL45;
607 RET_LABEL45:(void)0;
608 }
609 var_position = var44;
610 } else {
611 }
612 var47 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__right_child]))(var_curr_node) /* right_child on <var_curr_node:nullable RopeNode(ConcatNode)>*/;
613 var_curr_node = var47;
614 } else {
615 if (varonce) {
616 var48 = varonce;
617 } else {
618 var49 = "Fatal Error";
619 var50 = 11;
620 var51 = string__NativeString__to_s_with_length(var49, var50);
621 var48 = var51;
622 varonce = var48;
623 }
624 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var48) /* print on <self:Rope>*/;
625 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "lib/standard/ropes.nit", 117);
626 exit(1);
627 }
628 }
629 ((void (*)(val*, val*))(var_visit_stack->class->vft[COLOR_abstract_collection__Sequence__push]))(var_visit_stack, var_curr_visit_tuple) /* push on <var_visit_stack:List[TupleVisitNode]>*/;
630 } else {
631 /* <var_curr_node:nullable RopeNode> isa LeafNode */
632 cltype53 = type_ropes__LeafNode.color;
633 idtype54 = type_ropes__LeafNode.id;
634 if(var_curr_node == NULL) {
635 var52 = 0;
636 } else {
637 if(cltype53 >= var_curr_node->type->table_size) {
638 var52 = 0;
639 } else {
640 var52 = var_curr_node->type->type_table[cltype53] == idtype54;
641 }
642 }
643 if (var52){
644 var55 = NEW_ropes__TupleLeafNodePos(&type_ropes__TupleLeafNodePos);
645 ((void (*)(val*, val*, long, val*))(var55->class->vft[COLOR_ropes__TupleLeafNodePos__init]))(var55, var_curr_node, var_position, var_visit_stack) /* init on <var55:TupleLeafNodePos>*/;
646 CHECK_NEW_ropes__TupleLeafNodePos(var55);
647 var = var55;
648 goto RET_LABEL;
649 } else {
650 }
651 }
652 CONTINUE_label: (void)0;
653 }
654 BREAK_label: (void)0;
655 RET_LABEL:;
656 return var;
657 }
658 /* method ropes#Rope#get_node_for_pos for (self: Object, Int): TupleLeafNodePos */
659 val* VIRTUAL_ropes__Rope__get_node_for_pos(val* self, long p0) {
660 val* var /* : TupleLeafNodePos */;
661 val* var1 /* : TupleLeafNodePos */;
662 var1 = ropes__Rope__get_node_for_pos(self, p0);
663 var = var1;
664 RET_LABEL:;
665 return var;
666 }
667 /* method ropes#Rope#+ for (self: Rope, Rope): Rope */
668 val* ropes__Rope___43d(val* self, val* p0) {
669 val* var /* : Rope */;
670 val* var_other /* var other: Rope */;
671 val* var1 /* : BufferRope */;
672 val* var_new_rope /* var new_rope: BufferRope */;
673 val* var2 /* : DFSRopeLeafIterator */;
674 val* var_first_iter /* var first_iter: DFSRopeLeafIterator */;
675 short int var3 /* : Bool */;
676 val* var4 /* : nullable Object */;
677 val* var5 /* : String */;
678 val* var6 /* : BufferRope */;
679 val* var7 /* : DFSRopeLeafIterator */;
680 val* var_second_iter /* var second_iter: DFSRopeLeafIterator */;
681 short int var8 /* : Bool */;
682 val* var9 /* : nullable Object */;
683 val* var10 /* : String */;
684 val* var11 /* : BufferRope */;
685 var_other = p0;
686 var1 = NEW_ropes__BufferRope(&type_ropes__BufferRope);
687 ((void (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__init]))(var1) /* init on <var1:BufferRope>*/;
688 CHECK_NEW_ropes__BufferRope(var1);
689 var_new_rope = var1;
690 var2 = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
691 ((void (*)(val*, val*))(var2->class->vft[COLOR_ropes__DFSRopeLeafIterator__init]))(var2, self) /* init on <var2:DFSRopeLeafIterator>*/;
692 CHECK_NEW_ropes__DFSRopeLeafIterator(var2);
693 var_first_iter = var2;
694 for(;;) {
695 var3 = ((short int (*)(val*))(var_first_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_first_iter) /* is_ok on <var_first_iter:DFSRopeLeafIterator>*/;
696 if (!var3) break;
697 var4 = ((val* (*)(val*))(var_first_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_first_iter) /* item on <var_first_iter:DFSRopeLeafIterator>*/;
698 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_ropes__LeafNode__value]))(var4) /* value on <var4:nullable Object(LeafNode)>*/;
699 var6 = ((val* (*)(val*, val*))(var_new_rope->class->vft[COLOR_ropes__BufferRope__append]))(var_new_rope, var5) /* append on <var_new_rope:BufferRope>*/;
700 var6;
701 ((void (*)(val*))(var_first_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_first_iter) /* next on <var_first_iter:DFSRopeLeafIterator>*/;
702 CONTINUE_label: (void)0;
703 }
704 BREAK_label: (void)0;
705 var7 = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
706 ((void (*)(val*, val*))(var7->class->vft[COLOR_ropes__DFSRopeLeafIterator__init]))(var7, var_other) /* init on <var7:DFSRopeLeafIterator>*/;
707 CHECK_NEW_ropes__DFSRopeLeafIterator(var7);
708 var_second_iter = var7;
709 for(;;) {
710 var8 = ((short int (*)(val*))(var_second_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_second_iter) /* is_ok on <var_second_iter:DFSRopeLeafIterator>*/;
711 if (!var8) break;
712 var9 = ((val* (*)(val*))(var_second_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_second_iter) /* item on <var_second_iter:DFSRopeLeafIterator>*/;
713 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_ropes__LeafNode__value]))(var9) /* value on <var9:nullable Object(LeafNode)>*/;
714 var11 = ((val* (*)(val*, val*))(var_new_rope->class->vft[COLOR_ropes__BufferRope__append]))(var_new_rope, var10) /* append on <var_new_rope:BufferRope>*/;
715 var11;
716 ((void (*)(val*))(var_second_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_second_iter) /* next on <var_second_iter:DFSRopeLeafIterator>*/;
717 CONTINUE_label12: (void)0;
718 }
719 BREAK_label12: (void)0;
720 var = var_new_rope;
721 goto RET_LABEL;
722 RET_LABEL:;
723 return var;
724 }
725 /* method ropes#Rope#+ for (self: Object, Rope): Rope */
726 val* VIRTUAL_ropes__Rope___43d(val* self, val* p0) {
727 val* var /* : Rope */;
728 val* var1 /* : Rope */;
729 var1 = ropes__Rope___43d(self, p0);
730 var = var1;
731 RET_LABEL:;
732 return var;
733 }
734 /* method ropes#Rope#multi_concat for (self: Rope, Array[Rope]): Rope */
735 val* ropes__Rope__multi_concat(val* self, val* p0) {
736 val* var /* : Rope */;
737 val* var_ropes /* var ropes: Array[Rope] */;
738 val* var1 /* : BufferRope */;
739 val* var_new_rope /* var new_rope: BufferRope */;
740 val* var2 /* : Iterator[LeafNode] */;
741 val* var_self_iter /* var self_iter: Iterator[LeafNode] */;
742 short int var3 /* : Bool */;
743 val* var4 /* : nullable Object */;
744 val* var5 /* : String */;
745 val* var6 /* : BufferRope */;
746 val* var7 /* : Iterator[nullable Object] */;
747 short int var8 /* : Bool */;
748 val* var9 /* : nullable Object */;
749 val* var_i /* var i: Rope */;
750 val* var10 /* : Iterator[LeafNode] */;
751 val* var_iter /* var iter: Iterator[LeafNode] */;
752 short int var11 /* : Bool */;
753 val* var12 /* : nullable Object */;
754 val* var13 /* : String */;
755 val* var14 /* : BufferRope */;
756 var_ropes = p0;
757 var1 = NEW_ropes__BufferRope(&type_ropes__BufferRope);
758 ((void (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__init]))(var1) /* init on <var1:BufferRope>*/;
759 CHECK_NEW_ropes__BufferRope(var1);
760 var_new_rope = var1;
761 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__iterator]))(self) /* iterator on <self:Rope>*/;
762 var_self_iter = var2;
763 for(;;) {
764 var3 = ((short int (*)(val*))(var_self_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_self_iter) /* is_ok on <var_self_iter:Iterator[LeafNode]>*/;
765 if (!var3) break;
766 var4 = ((val* (*)(val*))(var_self_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_self_iter) /* item on <var_self_iter:Iterator[LeafNode]>*/;
767 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_ropes__LeafNode__value]))(var4) /* value on <var4:nullable Object(LeafNode)>*/;
768 var6 = ((val* (*)(val*, val*))(var_new_rope->class->vft[COLOR_ropes__BufferRope__append]))(var_new_rope, var5) /* append on <var_new_rope:BufferRope>*/;
769 var6;
770 ((void (*)(val*))(var_self_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_self_iter) /* next on <var_self_iter:Iterator[LeafNode]>*/;
771 CONTINUE_label: (void)0;
772 }
773 BREAK_label: (void)0;
774 var7 = ((val* (*)(val*))(var_ropes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_ropes) /* iterator on <var_ropes:Array[Rope]>*/;
775 for(;;) {
776 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
777 if(!var8) break;
778 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
779 var_i = var9;
780 var10 = ((val* (*)(val*))(var_i->class->vft[COLOR_ropes__Rope__iterator]))(var_i) /* iterator on <var_i:Rope>*/;
781 var_iter = var10;
782 for(;;) {
783 var11 = ((short int (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_iter) /* is_ok on <var_iter:Iterator[LeafNode]>*/;
784 if (!var11) break;
785 var12 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:Iterator[LeafNode]>*/;
786 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_ropes__LeafNode__value]))(var12) /* value on <var12:nullable Object(LeafNode)>*/;
787 var14 = ((val* (*)(val*, val*))(var_new_rope->class->vft[COLOR_ropes__BufferRope__append]))(var_new_rope, var13) /* append on <var_new_rope:BufferRope>*/;
788 var14;
789 ((void (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_iter) /* next on <var_iter:Iterator[LeafNode]>*/;
790 CONTINUE_label15: (void)0;
791 }
792 BREAK_label15: (void)0;
793 CONTINUE_label16: (void)0;
794 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
795 }
796 BREAK_label16: (void)0;
797 var = var_new_rope;
798 goto RET_LABEL;
799 RET_LABEL:;
800 return var;
801 }
802 /* method ropes#Rope#multi_concat for (self: Object, Array[Rope]): Rope */
803 val* VIRTUAL_ropes__Rope__multi_concat(val* self, val* p0) {
804 val* var /* : Rope */;
805 val* var1 /* : Rope */;
806 var1 = ropes__Rope__multi_concat(self, p0);
807 var = var1;
808 RET_LABEL:;
809 return var;
810 }
811 /* method ropes#Rope#* for (self: Rope, Int): Rope */
812 val* ropes__Rope___42d(val* self, long p0) {
813 val* var /* : Rope */;
814 long var_repeats /* var repeats: Int */;
815 val* var1 /* : BufferRope */;
816 val* var_new_rope /* var new_rope: BufferRope */;
817 val* var2 /* : String */;
818 val* var_str /* var str: String */;
819 val* var3 /* : Range[Int] */;
820 long var4 /* : Int */;
821 val* var5 /* : Discrete */;
822 val* var6 /* : Discrete */;
823 val* var7 /* : Iterator[nullable Object] */;
824 short int var8 /* : Bool */;
825 val* var9 /* : nullable Object */;
826 long var_i /* var i: Int */;
827 long var10 /* : Int */;
828 val* var11 /* : BufferRope */;
829 var_repeats = p0;
830 var1 = NEW_ropes__BufferRope(&type_ropes__BufferRope);
831 ((void (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__init]))(var1) /* init on <var1:BufferRope>*/;
832 CHECK_NEW_ropes__BufferRope(var1);
833 var_new_rope = var1;
834 var2 = ((val* (*)(val*))(self->class->vft[COLOR_string__Object__to_s]))(self) /* to_s on <self:Rope>*/;
835 var_str = var2;
836 var3 = NEW_range__Range(&type_range__Rangekernel__Int);
837 var4 = 1;
838 var5 = BOX_kernel__Int(var4); /* autobox from Int to Discrete */
839 var6 = BOX_kernel__Int(var_repeats); /* autobox from Int to Discrete */
840 ((void (*)(val*, val*, val*))(var3->class->vft[COLOR_range__Range__init]))(var3, var5, var6) /* init on <var3:Range[Int]>*/;
841 CHECK_NEW_range__Range(var3);
842 var7 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__iterator]))(var3) /* iterator on <var3:Range[Int]>*/;
843 for(;;) {
844 var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
845 if(!var8) break;
846 var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
847 var10 = ((struct instance_kernel__Int*)var9)->value; /* autounbox from nullable Object to Int */;
848 var_i = var10;
849 var11 = ((val* (*)(val*, val*))(var_new_rope->class->vft[COLOR_ropes__BufferRope__append]))(var_new_rope, var_str) /* append on <var_new_rope:BufferRope>*/;
850 var11;
851 CONTINUE_label: (void)0;
852 ((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
853 }
854 BREAK_label: (void)0;
855 var = var_new_rope;
856 goto RET_LABEL;
857 RET_LABEL:;
858 return var;
859 }
860 /* method ropes#Rope#* for (self: Object, Int): Rope */
861 val* VIRTUAL_ropes__Rope___42d(val* self, long p0) {
862 val* var /* : Rope */;
863 val* var1 /* : Rope */;
864 var1 = ropes__Rope___42d(self, p0);
865 var = var1;
866 RET_LABEL:;
867 return var;
868 }
869 /* method ropes#Rope#iterator for (self: Rope): Iterator[LeafNode] */
870 val* ropes__Rope__iterator(val* self) {
871 val* var /* : Iterator[LeafNode] */;
872 val* var1 /* : DFSRopeLeafIterator */;
873 var1 = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
874 ((void (*)(val*, val*))(var1->class->vft[COLOR_ropes__DFSRopeLeafIterator__init]))(var1, self) /* init on <var1:DFSRopeLeafIterator>*/;
875 CHECK_NEW_ropes__DFSRopeLeafIterator(var1);
876 var = var1;
877 goto RET_LABEL;
878 RET_LABEL:;
879 return var;
880 }
881 /* method ropes#Rope#iterator for (self: Object): Iterator[LeafNode] */
882 val* VIRTUAL_ropes__Rope__iterator(val* self) {
883 val* var /* : Iterator[LeafNode] */;
884 val* var1 /* : Iterator[LeafNode] */;
885 var1 = ropes__Rope__iterator(self);
886 var = var1;
887 RET_LABEL:;
888 return var;
889 }
890 /* method ropes#Rope#subrope for (self: Rope, Int, Int): Rope */
891 val* ropes__Rope__subrope(val* self, long p0, long p1) {
892 val* var /* : Rope */;
893 long var_index_from /* var index_from: Int */;
894 long var_count /* var count: Int */;
895 long var1 /* : Int */;
896 short int var2 /* : Bool */;
897 short int var4 /* : Bool */;
898 int cltype;
899 int idtype;
900 short int var5 /* : Bool */;
901 long var6 /* : Int */;
902 short int var7 /* : Bool */;
903 short int var9 /* : Bool */;
904 int cltype10;
905 int idtype11;
906 short int var12 /* : Bool */;
907 long var13 /* : Int */;
908 long var15 /* : Int */;
909 long var16 /* : Int */;
910 short int var17 /* : Bool */;
911 short int var19 /* : Bool */;
912 int cltype20;
913 int idtype21;
914 short int var22 /* : Bool */;
915 long var23 /* : Int */;
916 long var24 /* : Int */;
917 long var25 /* : Int */;
918 long var27 /* : Int */;
919 long var28 /* : Int */;
920 short int var29 /* : Bool */;
921 short int var31 /* : Bool */;
922 int cltype32;
923 int idtype33;
924 short int var34 /* : Bool */;
925 long var35 /* : Int */;
926 long var36 /* : Int */;
927 long var38 /* : Int */;
928 val* var39 /* : BufferRope */;
929 val* var_buffer /* var buffer: BufferRope */;
930 val* var40 /* : DFSRopeLeafIterator */;
931 val* var_iter /* var iter: DFSRopeLeafIterator */;
932 long var41 /* : Int */;
933 long var42 /* : Int */;
934 long var44 /* : Int */;
935 long var_curr_subrope_index /* var curr_subrope_index: Int */;
936 short int var45 /* : Bool */;
937 long var46 /* : Int */;
938 short int var47 /* : Bool */;
939 short int var49 /* : Bool */;
940 long var50 /* : Int */;
941 short int var51 /* : Bool */;
942 short int var53 /* : Bool */;
943 int cltype54;
944 int idtype55;
945 short int var56 /* : Bool */;
946 val* var57 /* : nullable Object */;
947 val* var58 /* : String */;
948 long var59 /* : Int */;
949 short int var60 /* : Bool */;
950 short int var62 /* : Bool */;
951 int cltype63;
952 int idtype64;
953 short int var65 /* : Bool */;
954 val* var66 /* : nullable Object */;
955 val* var67 /* : String */;
956 val* var68 /* : String */;
957 val* var69 /* : BufferRope */;
958 val* var70 /* : nullable Object */;
959 val* var71 /* : String */;
960 long var72 /* : Int */;
961 long var73 /* : Int */;
962 long var75 /* : Int */;
963 long var76 /* : Int */;
964 long var78 /* : Int */;
965 long var79 /* : Int */;
966 val* var80 /* : nullable Object */;
967 val* var81 /* : String */;
968 val* var82 /* : String */;
969 val* var83 /* : BufferRope */;
970 val* var84 /* : nullable Object */;
971 val* var85 /* : String */;
972 long var86 /* : Int */;
973 short int var87 /* : Bool */;
974 short int var89 /* : Bool */;
975 int cltype90;
976 int idtype91;
977 short int var92 /* : Bool */;
978 val* var93 /* : nullable Object */;
979 val* var94 /* : String */;
980 val* var95 /* : BufferRope */;
981 val* var96 /* : nullable Object */;
982 val* var97 /* : String */;
983 long var98 /* : Int */;
984 long var99 /* : Int */;
985 long var101 /* : Int */;
986 val* var102 /* : nullable Object */;
987 val* var103 /* : String */;
988 long var104 /* : Int */;
989 val* var105 /* : String */;
990 val* var106 /* : BufferRope */;
991 var_index_from = p0;
992 var_count = p1;
993 var1 = 0;
994 { /* Inline kernel#Int#>= (var_count,var1) */
995 /* Covariant cast for argument 0 (i) <var1:Int> isa OTHER */
996 /* <var1:Int> isa OTHER */
997 var4 = 1; /* easy <var1:Int> isa OTHER*/
998 if (!var4) {
999 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
1000 exit(1);
1001 }
1002 var5 = var_count >= var1;
1003 var2 = var5;
1004 goto RET_LABEL3;
1005 RET_LABEL3:(void)0;
1006 }
1007 if (!var2) {
1008 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "lib/standard/ropes.nit", 205);
1009 exit(1);
1010 }
1011 var6 = 0;
1012 { /* Inline kernel#Int#< (var_index_from,var6) */
1013 /* Covariant cast for argument 0 (i) <var6:Int> isa OTHER */
1014 /* <var6:Int> isa OTHER */
1015 var9 = 1; /* easy <var6:Int> isa OTHER*/
1016 if (!var9) {
1017 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
1018 exit(1);
1019 }
1020 var12 = var_index_from < var6;
1021 var7 = var12;
1022 goto RET_LABEL8;
1023 RET_LABEL8:(void)0;
1024 }
1025 if (var7){
1026 { /* Inline kernel#Int#+ (var_count,var_index_from) */
1027 var15 = var_count + var_index_from;
1028 var13 = var15;
1029 goto RET_LABEL14;
1030 RET_LABEL14:(void)0;
1031 }
1032 var_count = var13;
1033 var16 = 0;
1034 { /* Inline kernel#Int#< (var_count,var16) */
1035 /* Covariant cast for argument 0 (i) <var16:Int> isa OTHER */
1036 /* <var16:Int> isa OTHER */
1037 var19 = 1; /* easy <var16:Int> isa OTHER*/
1038 if (!var19) {
1039 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
1040 exit(1);
1041 }
1042 var22 = var_count < var16;
1043 var17 = var22;
1044 goto RET_LABEL18;
1045 RET_LABEL18:(void)0;
1046 }
1047 if (var17){
1048 var23 = 0;
1049 var_count = var23;
1050 } else {
1051 }
1052 var24 = 0;
1053 var_index_from = var24;
1054 } else {
1055 }
1056 { /* Inline kernel#Int#- (var_count,var_index_from) */
1057 var27 = var_count - var_index_from;
1058 var25 = var27;
1059 goto RET_LABEL26;
1060 RET_LABEL26:(void)0;
1061 }
1062 var28 = ((long (*)(val*))(self->class->vft[COLOR_ropes__Rope__length]))(self) /* length on <self:Rope>*/;
1063 { /* Inline kernel#Int#>= (var25,var28) */
1064 /* Covariant cast for argument 0 (i) <var28:Int> isa OTHER */
1065 /* <var28:Int> isa OTHER */
1066 var31 = 1; /* easy <var28:Int> isa OTHER*/
1067 if (!var31) {
1068 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
1069 exit(1);
1070 }
1071 var34 = var25 >= var28;
1072 var29 = var34;
1073 goto RET_LABEL30;
1074 RET_LABEL30:(void)0;
1075 }
1076 if (var29){
1077 var35 = ((long (*)(val*))(self->class->vft[COLOR_ropes__Rope__length]))(self) /* length on <self:Rope>*/;
1078 { /* Inline kernel#Int#- (var35,var_index_from) */
1079 var38 = var35 - var_index_from;
1080 var36 = var38;
1081 goto RET_LABEL37;
1082 RET_LABEL37:(void)0;
1083 }
1084 var_count = var36;
1085 } else {
1086 }
1087 var39 = NEW_ropes__BufferRope(&type_ropes__BufferRope);
1088 ((void (*)(val*))(var39->class->vft[COLOR_ropes__BufferRope__init]))(var39) /* init on <var39:BufferRope>*/;
1089 CHECK_NEW_ropes__BufferRope(var39);
1090 var_buffer = var39;
1091 var40 = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
1092 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_ropes__DFSRopeLeafIterator__with_index]))(var40, self, var_index_from) /* with_index on <var40:DFSRopeLeafIterator>*/;
1093 CHECK_NEW_ropes__DFSRopeLeafIterator(var40);
1094 var_iter = var40;
1095 var41 = ((long (*)(val*))(var_iter->class->vft[COLOR_ropes__RopeIterator__pos]))(var_iter) /* pos on <var_iter:DFSRopeLeafIterator>*/;
1096 { /* Inline kernel#Int#- (var_index_from,var41) */
1097 var44 = var_index_from - var41;
1098 var42 = var44;
1099 goto RET_LABEL43;
1100 RET_LABEL43:(void)0;
1101 }
1102 var_curr_subrope_index = var42;
1103 for(;;) {
1104 var45 = ((short int (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_iter) /* is_ok on <var_iter:DFSRopeLeafIterator>*/;
1105 if (!var45) break;
1106 var46 = 0;
1107 { /* Inline kernel#Int#== (var_count,var46) */
1108 var49 = var_count == var46;
1109 var47 = var49;
1110 goto RET_LABEL48;
1111 RET_LABEL48:(void)0;
1112 }
1113 if (var47){
1114 goto BREAK_label;
1115 } else {
1116 }
1117 var50 = 0;
1118 { /* Inline kernel#Int#> (var_curr_subrope_index,var50) */
1119 /* Covariant cast for argument 0 (i) <var50:Int> isa OTHER */
1120 /* <var50:Int> isa OTHER */
1121 var53 = 1; /* easy <var50:Int> isa OTHER*/
1122 if (!var53) {
1123 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
1124 exit(1);
1125 }
1126 var56 = var_curr_subrope_index > var50;
1127 var51 = var56;
1128 goto RET_LABEL52;
1129 RET_LABEL52:(void)0;
1130 }
1131 if (var51){
1132 var57 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1133 var58 = ((val* (*)(val*))(var57->class->vft[COLOR_ropes__LeafNode__value]))(var57) /* value on <var57:nullable Object(LeafNode)>*/;
1134 var59 = ((long (*)(val*))(var58->class->vft[COLOR_abstract_collection__Collection__length]))(var58) /* length on <var58:String>*/;
1135 { /* Inline kernel#Int#>= (var_count,var59) */
1136 /* Covariant cast for argument 0 (i) <var59:Int> isa OTHER */
1137 /* <var59:Int> isa OTHER */
1138 var62 = 1; /* easy <var59:Int> isa OTHER*/
1139 if (!var62) {
1140 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
1141 exit(1);
1142 }
1143 var65 = var_count >= var59;
1144 var60 = var65;
1145 goto RET_LABEL61;
1146 RET_LABEL61:(void)0;
1147 }
1148 if (var60){
1149 var66 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1150 var67 = ((val* (*)(val*))(var66->class->vft[COLOR_ropes__LeafNode__value]))(var66) /* value on <var66:nullable Object(LeafNode)>*/;
1151 var68 = ((val* (*)(val*, long, long))(var67->class->vft[COLOR_string__AbstractString__substring]))(var67, var_curr_subrope_index, var_count) /* substring on <var67:String>*/;
1152 var69 = ((val* (*)(val*, val*))(var_buffer->class->vft[COLOR_ropes__BufferRope__append]))(var_buffer, var68) /* append on <var_buffer:BufferRope>*/;
1153 var69;
1154 var70 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1155 var71 = ((val* (*)(val*))(var70->class->vft[COLOR_ropes__LeafNode__value]))(var70) /* value on <var70:nullable Object(LeafNode)>*/;
1156 var72 = ((long (*)(val*))(var71->class->vft[COLOR_abstract_collection__Collection__length]))(var71) /* length on <var71:String>*/;
1157 { /* Inline kernel#Int#- (var72,var_curr_subrope_index) */
1158 var75 = var72 - var_curr_subrope_index;
1159 var73 = var75;
1160 goto RET_LABEL74;
1161 RET_LABEL74:(void)0;
1162 }
1163 { /* Inline kernel#Int#- (var_count,var73) */
1164 var78 = var_count - var73;
1165 var76 = var78;
1166 goto RET_LABEL77;
1167 RET_LABEL77:(void)0;
1168 }
1169 var_count = var76;
1170 var79 = 0;
1171 var_curr_subrope_index = var79;
1172 } else {
1173 var80 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1174 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_ropes__LeafNode__value]))(var80) /* value on <var80:nullable Object(LeafNode)>*/;
1175 var82 = ((val* (*)(val*, long, long))(var81->class->vft[COLOR_string__AbstractString__substring]))(var81, var_curr_subrope_index, var_count) /* substring on <var81:String>*/;
1176 var83 = ((val* (*)(val*, val*))(var_buffer->class->vft[COLOR_ropes__BufferRope__append]))(var_buffer, var82) /* append on <var_buffer:BufferRope>*/;
1177 var83;
1178 goto BREAK_label;
1179 }
1180 } else {
1181 var84 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1182 var85 = ((val* (*)(val*))(var84->class->vft[COLOR_ropes__LeafNode__value]))(var84) /* value on <var84:nullable Object(LeafNode)>*/;
1183 var86 = ((long (*)(val*))(var85->class->vft[COLOR_abstract_collection__Collection__length]))(var85) /* length on <var85:String>*/;
1184 { /* Inline kernel#Int#>= (var_count,var86) */
1185 /* Covariant cast for argument 0 (i) <var86:Int> isa OTHER */
1186 /* <var86:Int> isa OTHER */
1187 var89 = 1; /* easy <var86:Int> isa OTHER*/
1188 if (!var89) {
1189 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 258);
1190 exit(1);
1191 }
1192 var92 = var_count >= var86;
1193 var87 = var92;
1194 goto RET_LABEL88;
1195 RET_LABEL88:(void)0;
1196 }
1197 if (var87){
1198 var93 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1199 var94 = ((val* (*)(val*))(var93->class->vft[COLOR_ropes__LeafNode__value]))(var93) /* value on <var93:nullable Object(LeafNode)>*/;
1200 var95 = ((val* (*)(val*, val*))(var_buffer->class->vft[COLOR_ropes__BufferRope__append]))(var_buffer, var94) /* append on <var_buffer:BufferRope>*/;
1201 var95;
1202 var96 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1203 var97 = ((val* (*)(val*))(var96->class->vft[COLOR_ropes__LeafNode__value]))(var96) /* value on <var96:nullable Object(LeafNode)>*/;
1204 var98 = ((long (*)(val*))(var97->class->vft[COLOR_abstract_collection__Collection__length]))(var97) /* length on <var97:String>*/;
1205 { /* Inline kernel#Int#- (var_count,var98) */
1206 var101 = var_count - var98;
1207 var99 = var101;
1208 goto RET_LABEL100;
1209 RET_LABEL100:(void)0;
1210 }
1211 var_count = var99;
1212 } else {
1213 var102 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1214 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_ropes__LeafNode__value]))(var102) /* value on <var102:nullable Object(LeafNode)>*/;
1215 var104 = 0;
1216 var105 = ((val* (*)(val*, long, long))(var103->class->vft[COLOR_string__AbstractString__substring]))(var103, var104, var_count) /* substring on <var103:String>*/;
1217 var106 = ((val* (*)(val*, val*))(var_buffer->class->vft[COLOR_ropes__BufferRope__append]))(var_buffer, var105) /* append on <var_buffer:BufferRope>*/;
1218 var106;
1219 goto BREAK_label;
1220 }
1221 }
1222 ((void (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_iter) /* next on <var_iter:DFSRopeLeafIterator>*/;
1223 CONTINUE_label: (void)0;
1224 }
1225 BREAK_label: (void)0;
1226 var = var_buffer;
1227 goto RET_LABEL;
1228 RET_LABEL:;
1229 return var;
1230 }
1231 /* method ropes#Rope#subrope for (self: Object, Int, Int): Rope */
1232 val* VIRTUAL_ropes__Rope__subrope(val* self, long p0, long p1) {
1233 val* var /* : Rope */;
1234 val* var1 /* : Rope */;
1235 var1 = ropes__Rope__subrope(self, p0, p1);
1236 var = var1;
1237 RET_LABEL:;
1238 return var;
1239 }
1240 /* method ropes#Rope#to_upper for (self: Rope): Rope */
1241 val* ropes__Rope__to_upper(val* self) {
1242 val* var /* : Rope */;
1243 val* var1 /* : BufferRope */;
1244 val* var_new_rope /* var new_rope: BufferRope */;
1245 val* var2 /* : DFSRopeLeafIterator */;
1246 val* var_iter /* var iter: DFSRopeLeafIterator */;
1247 short int var3 /* : Bool */;
1248 val* var4 /* : nullable Object */;
1249 val* var5 /* : String */;
1250 val* var6 /* : String */;
1251 val* var7 /* : BufferRope */;
1252 var1 = NEW_ropes__BufferRope(&type_ropes__BufferRope);
1253 ((void (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__init]))(var1) /* init on <var1:BufferRope>*/;
1254 CHECK_NEW_ropes__BufferRope(var1);
1255 var_new_rope = var1;
1256 var2 = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
1257 ((void (*)(val*, val*))(var2->class->vft[COLOR_ropes__DFSRopeLeafIterator__init]))(var2, self) /* init on <var2:DFSRopeLeafIterator>*/;
1258 CHECK_NEW_ropes__DFSRopeLeafIterator(var2);
1259 var_iter = var2;
1260 for(;;) {
1261 var3 = ((short int (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_iter) /* is_ok on <var_iter:DFSRopeLeafIterator>*/;
1262 if (!var3) break;
1263 var4 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1264 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_ropes__LeafNode__value]))(var4) /* value on <var4:nullable Object(LeafNode)>*/;
1265 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_string__AbstractString__to_upper]))(var5) /* to_upper on <var5:String>*/;
1266 var7 = ((val* (*)(val*, val*))(var_new_rope->class->vft[COLOR_ropes__BufferRope__append]))(var_new_rope, var6) /* append on <var_new_rope:BufferRope>*/;
1267 var7;
1268 ((void (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_iter) /* next on <var_iter:DFSRopeLeafIterator>*/;
1269 CONTINUE_label: (void)0;
1270 }
1271 BREAK_label: (void)0;
1272 var = var_new_rope;
1273 goto RET_LABEL;
1274 RET_LABEL:;
1275 return var;
1276 }
1277 /* method ropes#Rope#to_upper for (self: Object): Rope */
1278 val* VIRTUAL_ropes__Rope__to_upper(val* self) {
1279 val* var /* : Rope */;
1280 val* var1 /* : Rope */;
1281 var1 = ropes__Rope__to_upper(self);
1282 var = var1;
1283 RET_LABEL:;
1284 return var;
1285 }
1286 /* method ropes#Rope#to_lower for (self: Rope): Rope */
1287 val* ropes__Rope__to_lower(val* self) {
1288 val* var /* : Rope */;
1289 val* var1 /* : BufferRope */;
1290 val* var_new_rope /* var new_rope: BufferRope */;
1291 val* var2 /* : DFSRopeLeafIterator */;
1292 val* var_iter /* var iter: DFSRopeLeafIterator */;
1293 short int var3 /* : Bool */;
1294 val* var4 /* : nullable Object */;
1295 val* var5 /* : String */;
1296 val* var6 /* : String */;
1297 val* var7 /* : BufferRope */;
1298 var1 = NEW_ropes__BufferRope(&type_ropes__BufferRope);
1299 ((void (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__init]))(var1) /* init on <var1:BufferRope>*/;
1300 CHECK_NEW_ropes__BufferRope(var1);
1301 var_new_rope = var1;
1302 var2 = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
1303 ((void (*)(val*, val*))(var2->class->vft[COLOR_ropes__DFSRopeLeafIterator__init]))(var2, self) /* init on <var2:DFSRopeLeafIterator>*/;
1304 CHECK_NEW_ropes__DFSRopeLeafIterator(var2);
1305 var_iter = var2;
1306 for(;;) {
1307 var3 = ((short int (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_iter) /* is_ok on <var_iter:DFSRopeLeafIterator>*/;
1308 if (!var3) break;
1309 var4 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
1310 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_ropes__LeafNode__value]))(var4) /* value on <var4:nullable Object(LeafNode)>*/;
1311 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_string__AbstractString__to_lower]))(var5) /* to_lower on <var5:String>*/;
1312 var7 = ((val* (*)(val*, val*))(var_new_rope->class->vft[COLOR_ropes__BufferRope__append]))(var_new_rope, var6) /* append on <var_new_rope:BufferRope>*/;
1313 var7;
1314 ((void (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_iter) /* next on <var_iter:DFSRopeLeafIterator>*/;
1315 CONTINUE_label: (void)0;
1316 }
1317 BREAK_label: (void)0;
1318 var = var_new_rope;
1319 goto RET_LABEL;
1320 RET_LABEL:;
1321 return var;
1322 }
1323 /* method ropes#Rope#to_lower for (self: Object): Rope */
1324 val* VIRTUAL_ropes__Rope__to_lower(val* self) {
1325 val* var /* : Rope */;
1326 val* var1 /* : Rope */;
1327 var1 = ropes__Rope__to_lower(self);
1328 var = var1;
1329 RET_LABEL:;
1330 return var;
1331 }
1332 /* method ropes#Rope#== for (self: Rope, nullable Object): Bool */
1333 short int ropes__Rope___61d_61d(val* self, val* p0) {
1334 short int var /* : Bool */;
1335 val* var_other /* var other: nullable Object */;
1336 short int var1 /* : Bool */;
1337 val* var2 /* : null */;
1338 short int var3 /* : Bool */;
1339 short int var_ /* var : Bool */;
1340 short int var4 /* : Bool */;
1341 short int var5 /* : Bool */;
1342 int cltype;
1343 int idtype;
1344 short int var_6 /* var : Bool */;
1345 short int var7 /* : Bool */;
1346 int cltype8;
1347 int idtype9;
1348 short int var10 /* : Bool */;
1349 short int var11 /* : Bool */;
1350 val* var12 /* : RopeCharIterator */;
1351 val* var_self_iter /* var self_iter: RopeCharIterator */;
1352 short int var13 /* : Bool */;
1353 int cltype14;
1354 int idtype15;
1355 long var16 /* : Int */;
1356 long var17 /* : Int */;
1357 short int var18 /* : Bool */;
1358 short int var20 /* : Bool */;
1359 short int var21 /* : Bool */;
1360 short int var22 /* : Bool */;
1361 val* var23 /* : RopeCharIterator */;
1362 val* var_other_iterator /* var other_iterator: RopeCharIterator */;
1363 short int var24 /* : Bool */;
1364 val* var25 /* : nullable Object */;
1365 val* var26 /* : nullable Object */;
1366 short int var27 /* : Bool */;
1367 short int var29 /* : Bool */;
1368 short int var30 /* : Bool */;
1369 short int var31 /* : Bool */;
1370 short int var32 /* : Bool */;
1371 int cltype33;
1372 int idtype34;
1373 long var35 /* : Int */;
1374 long var_pos /* var pos: Int */;
1375 long var36 /* : Int */;
1376 long var37 /* : Int */;
1377 short int var38 /* : Bool */;
1378 short int var40 /* : Bool */;
1379 short int var41 /* : Bool */;
1380 short int var42 /* : Bool */;
1381 short int var43 /* : Bool */;
1382 val* var44 /* : nullable Object */;
1383 val* var45 /* : nullable Object */;
1384 short int var46 /* : Bool */;
1385 short int var48 /* : Bool */;
1386 short int var49 /* : Bool */;
1387 short int var50 /* : Bool */;
1388 long var51 /* : Int */;
1389 long var52 /* : Int */;
1390 long var54 /* : Int */;
1391 short int var56 /* : Bool */;
1392 var_other = p0;
1393 var2 = NULL;
1394 if (var_other == NULL) {
1395 var3 = 1; /* is null */
1396 } else {
1397 var3 = 0; /* arg is null but recv is not */
1398 }
1399 var_ = var3;
1400 if (var3){
1401 var1 = var_;
1402 } else {
1403 /* <var_other:nullable Object(Object)> isa Rope */
1404 cltype = type_ropes__Rope.color;
1405 idtype = type_ropes__Rope.id;
1406 if(cltype >= var_other->type->table_size) {
1407 var5 = 0;
1408 } else {
1409 var5 = var_other->type->type_table[cltype] == idtype;
1410 }
1411 var_6 = var5;
1412 if (var5){
1413 var4 = var_6;
1414 } else {
1415 /* <var_other:nullable Object(Object)> isa AbstractString */
1416 cltype8 = type_string__AbstractString.color;
1417 idtype9 = type_string__AbstractString.id;
1418 if(cltype8 >= var_other->type->table_size) {
1419 var7 = 0;
1420 } else {
1421 var7 = var_other->type->type_table[cltype8] == idtype9;
1422 }
1423 var4 = var7;
1424 }
1425 var10 = !var4;
1426 var1 = var10;
1427 }
1428 if (var1){
1429 var11 = 0;
1430 var = var11;
1431 goto RET_LABEL;
1432 } else {
1433 }
1434 var12 = NEW_ropes__RopeCharIterator(&type_ropes__RopeCharIterator);
1435 ((void (*)(val*, val*))(var12->class->vft[COLOR_ropes__RopeCharIterator__init]))(var12, self) /* init on <var12:RopeCharIterator>*/;
1436 CHECK_NEW_ropes__RopeCharIterator(var12);
1437 var_self_iter = var12;
1438 /* <var_other:nullable Object> isa Rope */
1439 cltype14 = type_ropes__Rope.color;
1440 idtype15 = type_ropes__Rope.id;
1441 if(var_other == NULL) {
1442 var13 = 0;
1443 } else {
1444 if(cltype14 >= var_other->type->table_size) {
1445 var13 = 0;
1446 } else {
1447 var13 = var_other->type->type_table[cltype14] == idtype15;
1448 }
1449 }
1450 if (var13){
1451 var16 = ((long (*)(val*))(self->class->vft[COLOR_ropes__Rope__length]))(self) /* length on <self:Rope>*/;
1452 var17 = ((long (*)(val*))(var_other->class->vft[COLOR_ropes__Rope__length]))(var_other) /* length on <var_other:nullable Object(Rope)>*/;
1453 { /* Inline kernel#Int#!= (var16,var17) */
1454 var20 = var16 == var17;
1455 var21 = !var20;
1456 var18 = var21;
1457 goto RET_LABEL19;
1458 RET_LABEL19:(void)0;
1459 }
1460 if (var18){
1461 var22 = 0;
1462 var = var22;
1463 goto RET_LABEL;
1464 } else {
1465 }
1466 var23 = NEW_ropes__RopeCharIterator(&type_ropes__RopeCharIterator);
1467 ((void (*)(val*, val*))(var23->class->vft[COLOR_ropes__RopeCharIterator__init]))(var23, var_other) /* init on <var23:RopeCharIterator>*/;
1468 CHECK_NEW_ropes__RopeCharIterator(var23);
1469 var_other_iterator = var23;
1470 for(;;) {
1471 var24 = ((short int (*)(val*))(var_self_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_self_iter) /* is_ok on <var_self_iter:RopeCharIterator>*/;
1472 if (!var24) break;
1473 var25 = ((val* (*)(val*))(var_self_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_self_iter) /* item on <var_self_iter:RopeCharIterator>*/;
1474 var26 = ((val* (*)(val*))(var_other_iterator->class->vft[COLOR_abstract_collection__Iterator__item]))(var_other_iterator) /* item on <var_other_iterator:RopeCharIterator>*/;
1475 { /* Inline kernel#Char#!= (var25,var26) */
1476 var29 = var25 == var26 || (((struct instance_kernel__Char*)var25)->value == ((struct instance_kernel__Char*)var26)->value);
1477 var30 = !var29;
1478 var27 = var30;
1479 goto RET_LABEL28;
1480 RET_LABEL28:(void)0;
1481 }
1482 if (var27){
1483 var31 = 0;
1484 var = var31;
1485 goto RET_LABEL;
1486 } else {
1487 }
1488 ((void (*)(val*))(var_self_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_self_iter) /* next on <var_self_iter:RopeCharIterator>*/;
1489 ((void (*)(val*))(var_other_iterator->class->vft[COLOR_abstract_collection__Iterator__next]))(var_other_iterator) /* next on <var_other_iterator:RopeCharIterator>*/;
1490 CONTINUE_label: (void)0;
1491 }
1492 BREAK_label: (void)0;
1493 } else {
1494 /* <var_other:nullable Object> isa AbstractString */
1495 cltype33 = type_string__AbstractString.color;
1496 idtype34 = type_string__AbstractString.id;
1497 if(var_other == NULL) {
1498 var32 = 0;
1499 } else {
1500 if(cltype33 >= var_other->type->table_size) {
1501 var32 = 0;
1502 } else {
1503 var32 = var_other->type->type_table[cltype33] == idtype34;
1504 }
1505 }
1506 if (var32){
1507 var35 = 0;
1508 var_pos = var35;
1509 var36 = ((long (*)(val*))(self->class->vft[COLOR_ropes__Rope__length]))(self) /* length on <self:Rope>*/;
1510 var37 = ((long (*)(val*))(var_other->class->vft[COLOR_abstract_collection__Collection__length]))(var_other) /* length on <var_other:nullable Object(AbstractString)>*/;
1511 { /* Inline kernel#Int#!= (var36,var37) */
1512 var40 = var36 == var37;
1513 var41 = !var40;
1514 var38 = var41;
1515 goto RET_LABEL39;
1516 RET_LABEL39:(void)0;
1517 }
1518 if (var38){
1519 var42 = 0;
1520 var = var42;
1521 goto RET_LABEL;
1522 } else {
1523 }
1524 for(;;) {
1525 var43 = ((short int (*)(val*))(var_self_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_self_iter) /* is_ok on <var_self_iter:RopeCharIterator>*/;
1526 if (!var43) break;
1527 var44 = ((val* (*)(val*))(var_self_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_self_iter) /* item on <var_self_iter:RopeCharIterator>*/;
1528 var45 = ((val* (*)(val*, long))(var_other->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_other, var_pos) /* [] on <var_other:nullable Object(AbstractString)>*/;
1529 { /* Inline kernel#Char#!= (var44,var45) */
1530 var48 = var44 == var45 || (((struct instance_kernel__Char*)var44)->value == ((struct instance_kernel__Char*)var45)->value);
1531 var49 = !var48;
1532 var46 = var49;
1533 goto RET_LABEL47;
1534 RET_LABEL47:(void)0;
1535 }
1536 if (var46){
1537 var50 = 0;
1538 var = var50;
1539 goto RET_LABEL;
1540 } else {
1541 }
1542 var51 = 1;
1543 { /* Inline kernel#Int#+ (var_pos,var51) */
1544 var54 = var_pos + var51;
1545 var52 = var54;
1546 goto RET_LABEL53;
1547 RET_LABEL53:(void)0;
1548 }
1549 var_pos = var52;
1550 ((void (*)(val*))(var_self_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_self_iter) /* next on <var_self_iter:RopeCharIterator>*/;
1551 CONTINUE_label55: (void)0;
1552 }
1553 BREAK_label55: (void)0;
1554 } else {
1555 }
1556 }
1557 var56 = 1;
1558 var = var56;
1559 goto RET_LABEL;
1560 RET_LABEL:;
1561 return var;
1562 }
1563 /* method ropes#Rope#== for (self: Object, nullable Object): Bool */
1564 short int VIRTUAL_ropes__Rope___61d_61d(val* self, val* p0) {
1565 short int var /* : Bool */;
1566 short int var1 /* : Bool */;
1567 var1 = ropes__Rope___61d_61d(self, p0);
1568 var = var1;
1569 RET_LABEL:;
1570 return var;
1571 }
1572 /* method ropes#Rope#< for (self: Rope, Rope): Bool */
1573 short int ropes__Rope___60d(val* self, val* p0) {
1574 short int var /* : Bool */;
1575 short int var1 /* : Bool */;
1576 int cltype;
1577 int idtype;
1578 const struct type* type_struct;
1579 val* var_other /* var other: Rope */;
1580 val* var2 /* : SequenceRead[Char] */;
1581 val* var3 /* : Iterator[nullable Object] */;
1582 val* var_other_iter /* var other_iter: IndexedIterator[Char] */;
1583 val* var4 /* : SequenceRead[Char] */;
1584 val* var5 /* : Iterator[nullable Object] */;
1585 short int var6 /* : Bool */;
1586 val* var7 /* : nullable Object */;
1587 char var_i /* var i: Char */;
1588 char var8 /* : Char */;
1589 short int var9 /* : Bool */;
1590 short int var10 /* : Bool */;
1591 short int var11 /* : Bool */;
1592 val* var12 /* : nullable Object */;
1593 short int var13 /* : Bool */;
1594 short int var15 /* : Bool */;
1595 int cltype16;
1596 int idtype17;
1597 char var18 /* : Char */;
1598 short int var19 /* : Bool */;
1599 short int var20 /* : Bool */;
1600 val* var21 /* : nullable Object */;
1601 short int var22 /* : Bool */;
1602 short int var24 /* : Bool */;
1603 int cltype25;
1604 int idtype26;
1605 char var27 /* : Char */;
1606 short int var28 /* : Bool */;
1607 short int var29 /* : Bool */;
1608 short int var30 /* : Bool */;
1609 short int var31 /* : Bool */;
1610 short int var32 /* : Bool */;
1611 /* Covariant cast for argument 0 (other) <p0:Rope> isa OTHER */
1612 /* <p0:Rope> isa OTHER */
1613 type_struct = self->type->resolution_table->types[COLOR_kernel__Comparable_VTOTHER];
1614 cltype = type_struct->color;
1615 idtype = type_struct->id;
1616 if(cltype >= p0->type->table_size) {
1617 var1 = 0;
1618 } else {
1619 var1 = p0->type->type_table[cltype] == idtype;
1620 }
1621 if (!var1) {
1622 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 301);
1623 exit(1);
1624 }
1625 var_other = p0;
1626 var2 = ((val* (*)(val*))(var_other->class->vft[COLOR_ropes__Rope__chars]))(var_other) /* chars on <var_other:Rope>*/;
1627 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:SequenceRead[Char]>*/;
1628 var_other_iter = var3;
1629 var4 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__chars]))(self) /* chars on <self:Rope>*/;
1630 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Collection__iterator]))(var4) /* iterator on <var4:SequenceRead[Char]>*/;
1631 for(;;) {
1632 var6 = ((short int (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var5) /* is_ok on <var5:Iterator[nullable Object]>*/;
1633 if(!var6) break;
1634 var7 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__item]))(var5) /* item on <var5:Iterator[nullable Object]>*/;
1635 var8 = ((struct instance_kernel__Char*)var7)->value; /* autounbox from nullable Object to Char */;
1636 var_i = var8;
1637 var9 = ((short int (*)(val*))(var_other_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_other_iter) /* is_ok on <var_other_iter:IndexedIterator[Char]>*/;
1638 var10 = !var9;
1639 if (var10){
1640 var11 = 0;
1641 var = var11;
1642 goto RET_LABEL;
1643 } else {
1644 }
1645 var12 = ((val* (*)(val*))(var_other_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_other_iter) /* item on <var_other_iter:IndexedIterator[Char]>*/;
1646 { /* Inline kernel#Char#< (var_i,var12) */
1647 /* Covariant cast for argument 0 (i) <var12:nullable Object(Char)> isa OTHER */
1648 /* <var12:nullable Object(Char)> isa OTHER */
1649 var15 = 1; /* easy <var12:nullable Object(Char)> isa OTHER*/
1650 if (!var15) {
1651 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 455);
1652 exit(1);
1653 }
1654 var18 = ((struct instance_kernel__Char*)var12)->value; /* autounbox from nullable Object to Char */;
1655 var19 = var_i < var18;
1656 var13 = var19;
1657 goto RET_LABEL14;
1658 RET_LABEL14:(void)0;
1659 }
1660 if (var13){
1661 var20 = 1;
1662 var = var20;
1663 goto RET_LABEL;
1664 } else {
1665 }
1666 var21 = ((val* (*)(val*))(var_other_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_other_iter) /* item on <var_other_iter:IndexedIterator[Char]>*/;
1667 { /* Inline kernel#Char#> (var_i,var21) */
1668 /* Covariant cast for argument 0 (i) <var21:nullable Object(Char)> isa OTHER */
1669 /* <var21:nullable Object(Char)> isa OTHER */
1670 var24 = 1; /* easy <var21:nullable Object(Char)> isa OTHER*/
1671 if (!var24) {
1672 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 457);
1673 exit(1);
1674 }
1675 var27 = ((struct instance_kernel__Char*)var21)->value; /* autounbox from nullable Object to Char */;
1676 var28 = var_i > var27;
1677 var22 = var28;
1678 goto RET_LABEL23;
1679 RET_LABEL23:(void)0;
1680 }
1681 if (var22){
1682 var29 = 0;
1683 var = var29;
1684 goto RET_LABEL;
1685 } else {
1686 }
1687 ((void (*)(val*))(var_other_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_other_iter) /* next on <var_other_iter:IndexedIterator[Char]>*/;
1688 CONTINUE_label: (void)0;
1689 ((void (*)(val*))(var5->class->vft[COLOR_abstract_collection__Iterator__next]))(var5) /* next on <var5:Iterator[nullable Object]>*/;
1690 }
1691 BREAK_label: (void)0;
1692 var30 = ((short int (*)(val*))(var_other_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_other_iter) /* is_ok on <var_other_iter:IndexedIterator[Char]>*/;
1693 if (var30){
1694 var31 = 1;
1695 var = var31;
1696 goto RET_LABEL;
1697 } else {
1698 }
1699 var32 = 0;
1700 var = var32;
1701 goto RET_LABEL;
1702 RET_LABEL:;
1703 return var;
1704 }
1705 /* method ropes#Rope#< for (self: Object, Comparable): Bool */
1706 short int VIRTUAL_ropes__Rope___60d(val* self, val* p0) {
1707 short int var /* : Bool */;
1708 short int var1 /* : Bool */;
1709 var1 = ropes__Rope___60d(self, p0);
1710 var = var1;
1711 RET_LABEL:;
1712 return var;
1713 }
1714 /* method ropes#BufferRope#is_dirty for (self: BufferRope): Bool */
1715 short int ropes__BufferRope__is_dirty(val* self) {
1716 short int var /* : Bool */;
1717 short int var1 /* : Bool */;
1718 var1 = self->attrs[COLOR_ropes__BufferRope___64dis_dirty].s; /* @is_dirty on <self:BufferRope> */
1719 var = var1;
1720 RET_LABEL:;
1721 return var;
1722 }
1723 /* method ropes#BufferRope#is_dirty for (self: Object): Bool */
1724 short int VIRTUAL_ropes__BufferRope__is_dirty(val* self) {
1725 short int var /* : Bool */;
1726 short int var1 /* : Bool */;
1727 var1 = ropes__BufferRope__is_dirty(self);
1728 var = var1;
1729 RET_LABEL:;
1730 return var;
1731 }
1732 /* method ropes#BufferRope#is_dirty= for (self: BufferRope, Bool) */
1733 void ropes__BufferRope__is_dirty_61d(val* self, short int p0) {
1734 self->attrs[COLOR_ropes__BufferRope___64dis_dirty].s = p0; /* @is_dirty on <self:BufferRope> */
1735 RET_LABEL:;
1736 }
1737 /* method ropes#BufferRope#is_dirty= for (self: Object, Bool) */
1738 void VIRTUAL_ropes__BufferRope__is_dirty_61d(val* self, short int p0) {
1739 ropes__BufferRope__is_dirty_61d(self, p0);
1740 RET_LABEL:;
1741 }
1742 /* method ropes#BufferRope#init for (self: BufferRope) */
1743 void ropes__BufferRope__init(val* self) {
1744 ((void (*)(val*))(self->class->vft[COLOR_ropes__Rope__init]))(self) /* init on <self:BufferRope>*/;
1745 RET_LABEL:;
1746 }
1747 /* method ropes#BufferRope#init for (self: Object) */
1748 void VIRTUAL_ropes__BufferRope__init(val* self) {
1749 ropes__BufferRope__init(self);
1750 RET_LABEL:;
1751 }
1752 /* method ropes#BufferRope#with_string for (self: BufferRope, AbstractString) */
1753 void ropes__BufferRope__with_string(val* self, val* p0) {
1754 val* var_str /* var str: AbstractString */;
1755 var_str = p0;
1756 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__Rope__with_string]))(self, p0) /* with_string on <self:BufferRope>*/;
1757 RET_LABEL:;
1758 }
1759 /* method ropes#BufferRope#with_string for (self: Object, AbstractString) */
1760 void VIRTUAL_ropes__BufferRope__with_string(val* self, val* p0) {
1761 ropes__BufferRope__with_string(self, p0);
1762 RET_LABEL:;
1763 }
1764 /* method ropes#BufferRope#rotate_right for (self: BufferRope, ConcatNode) */
1765 void ropes__BufferRope__rotate_right(val* self, val* p0) {
1766 val* var_root /* var root: ConcatNode */;
1767 val* var /* : nullable RopeNode */;
1768 val* var1 /* : null */;
1769 short int var2 /* : Bool */;
1770 val* var3 /* : nullable RopeNode */;
1771 short int var4 /* : Bool */;
1772 int cltype;
1773 int idtype;
1774 val* var_pivot /* var pivot: ConcatNode */;
1775 val* var5 /* : nullable RopeNode */;
1776 val* var_root_new_left /* var root_new_left: nullable RopeNode */;
1777 val* var6 /* : nullable ConcatNode */;
1778 val* var_root_parent /* var root_parent: nullable ConcatNode */;
1779 val* var7 /* : null */;
1780 short int var8 /* : Bool */;
1781 val* var9 /* : null */;
1782 val* var10 /* : nullable RopeNode */;
1783 short int var11 /* : Bool */;
1784 var_root = p0;
1785 var = ((val* (*)(val*))(var_root->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_root) /* left_child on <var_root:ConcatNode>*/;
1786 var1 = NULL;
1787 if (var == NULL) {
1788 var2 = 0; /* is null */
1789 } else {
1790 var2 = 1; /* arg is null and recv is not */
1791 }
1792 if (!var2) {
1793 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "lib/standard/ropes.nit", 353);
1794 exit(1);
1795 }
1796 var3 = ((val* (*)(val*))(var_root->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_root) /* left_child on <var_root:ConcatNode>*/;
1797 /* <var3:nullable RopeNode> isa ConcatNode */
1798 cltype = type_ropes__ConcatNode.color;
1799 idtype = type_ropes__ConcatNode.id;
1800 if(var3 == NULL) {
1801 var4 = 0;
1802 } else {
1803 if(cltype >= var3->type->table_size) {
1804 var4 = 0;
1805 } else {
1806 var4 = var3->type->type_table[cltype] == idtype;
1807 }
1808 }
1809 if (!var4) {
1810 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 354);
1811 exit(1);
1812 }
1813 var_pivot = var3;
1814 var5 = ((val* (*)(val*))(var_pivot->class->vft[COLOR_ropes__ConcatNode__right_child]))(var_pivot) /* right_child on <var_pivot:ConcatNode>*/;
1815 var_root_new_left = var5;
1816 var6 = ((val* (*)(val*))(var_root->class->vft[COLOR_ropes__RopeNode__parent]))(var_root) /* parent on <var_root:ConcatNode>*/;
1817 var_root_parent = var6;
1818 ((void (*)(val*, val*))(var_root->class->vft[COLOR_ropes__ConcatNode__left_child_61d]))(var_root, var_root_new_left) /* left_child= on <var_root:ConcatNode>*/;
1819 ((void (*)(val*, val*))(var_pivot->class->vft[COLOR_ropes__ConcatNode__right_child_61d]))(var_pivot, var_root) /* right_child= on <var_pivot:ConcatNode>*/;
1820 var7 = NULL;
1821 if (var_root_parent == NULL) {
1822 var8 = 1; /* is null */
1823 } else {
1824 var8 = 0; /* arg is null but recv is not */
1825 }
1826 if (var8){
1827 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__Rope__parent_node_61d]))(self, var_pivot) /* parent_node= on <self:BufferRope>*/;
1828 var9 = NULL;
1829 ((void (*)(val*, val*))(var_pivot->class->vft[COLOR_ropes__RopeNode__parent_61d]))(var_pivot, var9) /* parent= on <var_pivot:ConcatNode>*/;
1830 goto RET_LABEL;
1831 } else {
1832 }
1833 var10 = ((val* (*)(val*))(var_root_parent->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_root_parent) /* left_child on <var_root_parent:nullable ConcatNode(ConcatNode)>*/;
1834 if (var10 == NULL) {
1835 var11 = 0; /* <var_root:ConcatNode> cannot be null */
1836 } else {
1837 var11 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___61d_61d]))(var10, var_root) /* == on <var10:nullable RopeNode>*/;
1838 }
1839 if (var11){
1840 ((void (*)(val*, val*))(var_root_parent->class->vft[COLOR_ropes__ConcatNode__left_child_61d]))(var_root_parent, var_pivot) /* left_child= on <var_root_parent:nullable ConcatNode(ConcatNode)>*/;
1841 } else {
1842 ((void (*)(val*, val*))(var_root_parent->class->vft[COLOR_ropes__ConcatNode__right_child_61d]))(var_root_parent, var_pivot) /* right_child= on <var_root_parent:nullable ConcatNode(ConcatNode)>*/;
1843 }
1844 ((void (*)(val*))(var_root->class->vft[COLOR_ropes__ConcatNode__update_data]))(var_root) /* update_data on <var_root:ConcatNode>*/;
1845 ((void (*)(val*))(var_pivot->class->vft[COLOR_ropes__ConcatNode__update_data]))(var_pivot) /* update_data on <var_pivot:ConcatNode>*/;
1846 ((void (*)(val*))(var_root_parent->class->vft[COLOR_ropes__ConcatNode__update_data]))(var_root_parent) /* update_data on <var_root_parent:nullable ConcatNode(ConcatNode)>*/;
1847 RET_LABEL:;
1848 }
1849 /* method ropes#BufferRope#rotate_right for (self: Object, ConcatNode) */
1850 void VIRTUAL_ropes__BufferRope__rotate_right(val* self, val* p0) {
1851 ropes__BufferRope__rotate_right(self, p0);
1852 RET_LABEL:;
1853 }
1854 /* method ropes#BufferRope#rotate_left for (self: BufferRope, ConcatNode) */
1855 void ropes__BufferRope__rotate_left(val* self, val* p0) {
1856 val* var_root /* var root: ConcatNode */;
1857 val* var /* : nullable RopeNode */;
1858 val* var1 /* : null */;
1859 short int var2 /* : Bool */;
1860 val* var3 /* : nullable RopeNode */;
1861 short int var4 /* : Bool */;
1862 int cltype;
1863 int idtype;
1864 val* var_pivot /* var pivot: ConcatNode */;
1865 val* var5 /* : nullable RopeNode */;
1866 val* var_root_new_right /* var root_new_right: nullable RopeNode */;
1867 val* var6 /* : nullable ConcatNode */;
1868 val* var_root_parent /* var root_parent: nullable ConcatNode */;
1869 val* var7 /* : null */;
1870 short int var8 /* : Bool */;
1871 val* var9 /* : null */;
1872 val* var10 /* : nullable RopeNode */;
1873 short int var11 /* : Bool */;
1874 var_root = p0;
1875 var = ((val* (*)(val*))(var_root->class->vft[COLOR_ropes__ConcatNode__right_child]))(var_root) /* right_child on <var_root:ConcatNode>*/;
1876 var1 = NULL;
1877 if (var == NULL) {
1878 var2 = 0; /* is null */
1879 } else {
1880 var2 = 1; /* arg is null and recv is not */
1881 }
1882 if (!var2) {
1883 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "lib/standard/ropes.nit", 386);
1884 exit(1);
1885 }
1886 var3 = ((val* (*)(val*))(var_root->class->vft[COLOR_ropes__ConcatNode__right_child]))(var_root) /* right_child on <var_root:ConcatNode>*/;
1887 /* <var3:nullable RopeNode> isa ConcatNode */
1888 cltype = type_ropes__ConcatNode.color;
1889 idtype = type_ropes__ConcatNode.id;
1890 if(var3 == NULL) {
1891 var4 = 0;
1892 } else {
1893 if(cltype >= var3->type->table_size) {
1894 var4 = 0;
1895 } else {
1896 var4 = var3->type->type_table[cltype] == idtype;
1897 }
1898 }
1899 if (!var4) {
1900 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 387);
1901 exit(1);
1902 }
1903 var_pivot = var3;
1904 var5 = ((val* (*)(val*))(var_pivot->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_pivot) /* left_child on <var_pivot:ConcatNode>*/;
1905 var_root_new_right = var5;
1906 var6 = ((val* (*)(val*))(var_root->class->vft[COLOR_ropes__RopeNode__parent]))(var_root) /* parent on <var_root:ConcatNode>*/;
1907 var_root_parent = var6;
1908 ((void (*)(val*, val*))(var_root->class->vft[COLOR_ropes__ConcatNode__right_child_61d]))(var_root, var_root_new_right) /* right_child= on <var_root:ConcatNode>*/;
1909 ((void (*)(val*, val*))(var_pivot->class->vft[COLOR_ropes__ConcatNode__left_child_61d]))(var_pivot, var_root) /* left_child= on <var_pivot:ConcatNode>*/;
1910 var7 = NULL;
1911 if (var_root_parent == NULL) {
1912 var8 = 1; /* is null */
1913 } else {
1914 var8 = 0; /* arg is null but recv is not */
1915 }
1916 if (var8){
1917 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__Rope__parent_node_61d]))(self, var_pivot) /* parent_node= on <self:BufferRope>*/;
1918 var9 = NULL;
1919 ((void (*)(val*, val*))(var_pivot->class->vft[COLOR_ropes__RopeNode__parent_61d]))(var_pivot, var9) /* parent= on <var_pivot:ConcatNode>*/;
1920 goto RET_LABEL;
1921 } else {
1922 }
1923 var10 = ((val* (*)(val*))(var_root_parent->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_root_parent) /* left_child on <var_root_parent:nullable ConcatNode(ConcatNode)>*/;
1924 if (var10 == NULL) {
1925 var11 = 0; /* <var_root:ConcatNode> cannot be null */
1926 } else {
1927 var11 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_kernel__Object___61d_61d]))(var10, var_root) /* == on <var10:nullable RopeNode>*/;
1928 }
1929 if (var11){
1930 ((void (*)(val*, val*))(var_root_parent->class->vft[COLOR_ropes__ConcatNode__left_child_61d]))(var_root_parent, var_pivot) /* left_child= on <var_root_parent:nullable ConcatNode(ConcatNode)>*/;
1931 } else {
1932 ((void (*)(val*, val*))(var_root_parent->class->vft[COLOR_ropes__ConcatNode__right_child_61d]))(var_root_parent, var_pivot) /* right_child= on <var_root_parent:nullable ConcatNode(ConcatNode)>*/;
1933 }
1934 ((void (*)(val*))(var_root->class->vft[COLOR_ropes__ConcatNode__update_data]))(var_root) /* update_data on <var_root:ConcatNode>*/;
1935 ((void (*)(val*))(var_pivot->class->vft[COLOR_ropes__ConcatNode__update_data]))(var_pivot) /* update_data on <var_pivot:ConcatNode>*/;
1936 ((void (*)(val*))(var_root_parent->class->vft[COLOR_ropes__ConcatNode__update_data]))(var_root_parent) /* update_data on <var_root_parent:nullable ConcatNode(ConcatNode)>*/;
1937 RET_LABEL:;
1938 }
1939 /* method ropes#BufferRope#rotate_left for (self: Object, ConcatNode) */
1940 void VIRTUAL_ropes__BufferRope__rotate_left(val* self, val* p0) {
1941 ropes__BufferRope__rotate_left(self, p0);
1942 RET_LABEL:;
1943 }
1944 /* method ropes#BufferRope#balance_from_node for (self: BufferRope, nullable ConcatNode) */
1945 void ropes__BufferRope__balance_from_node(val* self, val* p0) {
1946 val* var_parent_node /* var parent_node: nullable ConcatNode */;
1947 val* var /* : null */;
1948 short int var1 /* : Bool */;
1949 long var2 /* : Int */;
1950 long var_node_balance /* var node_balance: Int */;
1951 short int var3 /* : Bool */;
1952 long var4 /* : Int */;
1953 long var5 /* : Int */;
1954 long var7 /* : Int */;
1955 short int var8 /* : Bool */;
1956 short int var10 /* : Bool */;
1957 int cltype;
1958 int idtype;
1959 short int var11 /* : Bool */;
1960 short int var_ /* var : Bool */;
1961 long var12 /* : Int */;
1962 short int var13 /* : Bool */;
1963 short int var15 /* : Bool */;
1964 int cltype16;
1965 int idtype17;
1966 short int var18 /* : Bool */;
1967 val* var19 /* : nullable ConcatNode */;
1968 var_parent_node = p0;
1969 for(;;) {
1970 var = NULL;
1971 if (var_parent_node == NULL) {
1972 var1 = 0; /* is null */
1973 } else {
1974 var1 = 1; /* arg is null and recv is not */
1975 }
1976 if (!var1) break;
1977 ((void (*)(val*))(var_parent_node->class->vft[COLOR_ropes__ConcatNode__update_data]))(var_parent_node) /* update_data on <var_parent_node:nullable ConcatNode(ConcatNode)>*/;
1978 var2 = ((long (*)(val*))(var_parent_node->class->vft[COLOR_ropes__RopeNode__balance_factor]))(var_parent_node) /* balance_factor on <var_parent_node:nullable ConcatNode(ConcatNode)>*/;
1979 var_node_balance = var2;
1980 var4 = 1;
1981 { /* Inline kernel#Int#unary - (var4) */
1982 var7 = -var4;
1983 var5 = var7;
1984 goto RET_LABEL6;
1985 RET_LABEL6:(void)0;
1986 }
1987 { /* Inline kernel#Int#< (var_node_balance,var5) */
1988 /* Covariant cast for argument 0 (i) <var5:Int> isa OTHER */
1989 /* <var5:Int> isa OTHER */
1990 var10 = 1; /* easy <var5:Int> isa OTHER*/
1991 if (!var10) {
1992 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
1993 exit(1);
1994 }
1995 var11 = var_node_balance < var5;
1996 var8 = var11;
1997 goto RET_LABEL9;
1998 RET_LABEL9:(void)0;
1999 }
2000 var_ = var8;
2001 if (var8){
2002 var3 = var_;
2003 } else {
2004 var12 = 1;
2005 { /* Inline kernel#Int#> (var_node_balance,var12) */
2006 /* Covariant cast for argument 0 (i) <var12:Int> isa OTHER */
2007 /* <var12:Int> isa OTHER */
2008 var15 = 1; /* easy <var12:Int> isa OTHER*/
2009 if (!var15) {
2010 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
2011 exit(1);
2012 }
2013 var18 = var_node_balance > var12;
2014 var13 = var18;
2015 goto RET_LABEL14;
2016 RET_LABEL14:(void)0;
2017 }
2018 var3 = var13;
2019 }
2020 if (var3){
2021 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__balance_node]))(self, var_parent_node) /* balance_node on <self:BufferRope>*/;
2022 } else {
2023 }
2024 var19 = ((val* (*)(val*))(var_parent_node->class->vft[COLOR_ropes__RopeNode__parent]))(var_parent_node) /* parent on <var_parent_node:nullable ConcatNode(ConcatNode)>*/;
2025 var_parent_node = var19;
2026 CONTINUE_label: (void)0;
2027 }
2028 BREAK_label: (void)0;
2029 RET_LABEL:;
2030 }
2031 /* method ropes#BufferRope#balance_from_node for (self: Object, nullable ConcatNode) */
2032 void VIRTUAL_ropes__BufferRope__balance_from_node(val* self, val* p0) {
2033 ropes__BufferRope__balance_from_node(self, p0);
2034 RET_LABEL:;
2035 }
2036 /* method ropes#BufferRope#balance_node for (self: BufferRope, ConcatNode) */
2037 void ropes__BufferRope__balance_node(val* self, val* p0) {
2038 val* var_node /* var node: ConcatNode */;
2039 long var /* : Int */;
2040 long var_balance_factor /* var balance_factor: Int */;
2041 long var1 /* : Int */;
2042 long var2 /* : Int */;
2043 long var4 /* : Int */;
2044 short int var5 /* : Bool */;
2045 short int var7 /* : Bool */;
2046 int cltype;
2047 int idtype;
2048 short int var8 /* : Bool */;
2049 val* var9 /* : nullable RopeNode */;
2050 long var10 /* : Int */;
2051 long var_right_balance /* var right_balance: Int */;
2052 long var11 /* : Int */;
2053 short int var12 /* : Bool */;
2054 short int var14 /* : Bool */;
2055 int cltype15;
2056 int idtype16;
2057 short int var17 /* : Bool */;
2058 val* var18 /* : nullable RopeNode */;
2059 short int var19 /* : Bool */;
2060 int cltype20;
2061 int idtype21;
2062 val* var22 /* : nullable RopeNode */;
2063 long var23 /* : Int */;
2064 long var_left_balance /* var left_balance: Int */;
2065 long var24 /* : Int */;
2066 short int var25 /* : Bool */;
2067 short int var27 /* : Bool */;
2068 int cltype28;
2069 int idtype29;
2070 short int var30 /* : Bool */;
2071 val* var31 /* : nullable RopeNode */;
2072 short int var32 /* : Bool */;
2073 int cltype33;
2074 int idtype34;
2075 var_node = p0;
2076 var = ((long (*)(val*))(var_node->class->vft[COLOR_ropes__RopeNode__balance_factor]))(var_node) /* balance_factor on <var_node:ConcatNode>*/;
2077 var_balance_factor = var;
2078 var1 = 1;
2079 { /* Inline kernel#Int#unary - (var1) */
2080 var4 = -var1;
2081 var2 = var4;
2082 goto RET_LABEL3;
2083 RET_LABEL3:(void)0;
2084 }
2085 { /* Inline kernel#Int#< (var_balance_factor,var2) */
2086 /* Covariant cast for argument 0 (i) <var2:Int> isa OTHER */
2087 /* <var2:Int> isa OTHER */
2088 var7 = 1; /* easy <var2:Int> isa OTHER*/
2089 if (!var7) {
2090 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
2091 exit(1);
2092 }
2093 var8 = var_balance_factor < var2;
2094 var5 = var8;
2095 goto RET_LABEL6;
2096 RET_LABEL6:(void)0;
2097 }
2098 if (var5){
2099 var9 = ((val* (*)(val*))(var_node->class->vft[COLOR_ropes__ConcatNode__right_child]))(var_node) /* right_child on <var_node:ConcatNode>*/;
2100 if (var9 == NULL) {
2101 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 429);
2102 exit(1);
2103 } else {
2104 var10 = ((long (*)(val*))(var9->class->vft[COLOR_ropes__RopeNode__balance_factor]))(var9) /* balance_factor on <var9:nullable RopeNode>*/;
2105 }
2106 var_right_balance = var10;
2107 var11 = 0;
2108 { /* Inline kernel#Int#< (var_right_balance,var11) */
2109 /* Covariant cast for argument 0 (i) <var11:Int> isa OTHER */
2110 /* <var11:Int> isa OTHER */
2111 var14 = 1; /* easy <var11:Int> isa OTHER*/
2112 if (!var14) {
2113 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
2114 exit(1);
2115 }
2116 var17 = var_right_balance < var11;
2117 var12 = var17;
2118 goto RET_LABEL13;
2119 RET_LABEL13:(void)0;
2120 }
2121 if (var12){
2122 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__rotate_left]))(self, var_node) /* rotate_left on <self:BufferRope>*/;
2123 } else {
2124 var18 = ((val* (*)(val*))(var_node->class->vft[COLOR_ropes__ConcatNode__right_child]))(var_node) /* right_child on <var_node:ConcatNode>*/;
2125 /* <var18:nullable RopeNode> isa ConcatNode */
2126 cltype20 = type_ropes__ConcatNode.color;
2127 idtype21 = type_ropes__ConcatNode.id;
2128 if(var18 == NULL) {
2129 var19 = 0;
2130 } else {
2131 if(cltype20 >= var18->type->table_size) {
2132 var19 = 0;
2133 } else {
2134 var19 = var18->type->type_table[cltype20] == idtype21;
2135 }
2136 }
2137 if (!var19) {
2138 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 433);
2139 exit(1);
2140 }
2141 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__rotate_right]))(self, var18) /* rotate_right on <self:BufferRope>*/;
2142 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__rotate_left]))(self, var_node) /* rotate_left on <self:BufferRope>*/;
2143 }
2144 } else {
2145 var22 = ((val* (*)(val*))(var_node->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_node) /* left_child on <var_node:ConcatNode>*/;
2146 if (var22 == NULL) {
2147 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 437);
2148 exit(1);
2149 } else {
2150 var23 = ((long (*)(val*))(var22->class->vft[COLOR_ropes__RopeNode__balance_factor]))(var22) /* balance_factor on <var22:nullable RopeNode>*/;
2151 }
2152 var_left_balance = var23;
2153 var24 = 0;
2154 { /* Inline kernel#Int#> (var_left_balance,var24) */
2155 /* Covariant cast for argument 0 (i) <var24:Int> isa OTHER */
2156 /* <var24:Int> isa OTHER */
2157 var27 = 1; /* easy <var24:Int> isa OTHER*/
2158 if (!var27) {
2159 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
2160 exit(1);
2161 }
2162 var30 = var_left_balance > var24;
2163 var25 = var30;
2164 goto RET_LABEL26;
2165 RET_LABEL26:(void)0;
2166 }
2167 if (var25){
2168 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__rotate_right]))(self, var_node) /* rotate_right on <self:BufferRope>*/;
2169 } else {
2170 var31 = ((val* (*)(val*))(var_node->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_node) /* left_child on <var_node:ConcatNode>*/;
2171 /* <var31:nullable RopeNode> isa ConcatNode */
2172 cltype33 = type_ropes__ConcatNode.color;
2173 idtype34 = type_ropes__ConcatNode.id;
2174 if(var31 == NULL) {
2175 var32 = 0;
2176 } else {
2177 if(cltype33 >= var31->type->table_size) {
2178 var32 = 0;
2179 } else {
2180 var32 = var31->type->type_table[cltype33] == idtype34;
2181 }
2182 }
2183 if (!var32) {
2184 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 441);
2185 exit(1);
2186 }
2187 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__rotate_left]))(self, var31) /* rotate_left on <self:BufferRope>*/;
2188 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__rotate_right]))(self, var_node) /* rotate_right on <self:BufferRope>*/;
2189 }
2190 }
2191 RET_LABEL:;
2192 }
2193 /* method ropes#BufferRope#balance_node for (self: Object, ConcatNode) */
2194 void VIRTUAL_ropes__BufferRope__balance_node(val* self, val* p0) {
2195 ropes__BufferRope__balance_node(self, p0);
2196 RET_LABEL:;
2197 }
2198 /* method ropes#BufferRope#append for (self: BufferRope, Collection[Char]): BufferRope */
2199 val* ropes__BufferRope__append(val* self, val* p0) {
2200 val* var /* : BufferRope */;
2201 val* var_str /* var str: Collection[Char] */;
2202 short int var1 /* : Bool */;
2203 int cltype;
2204 int idtype;
2205 val* var2 /* : RopeNode */;
2206 val* var_last_node /* var last_node: RopeNode */;
2207 short int var3 /* : Bool */;
2208 short int var4 /* : Bool */;
2209 int cltype5;
2210 int idtype6;
2211 short int var_ /* var : Bool */;
2212 val* var7 /* : nullable RopeNode */;
2213 val* var8 /* : null */;
2214 short int var9 /* : Bool */;
2215 val* var10 /* : nullable RopeNode */;
2216 short int var11 /* : Bool */;
2217 int cltype12;
2218 int idtype13;
2219 val* var14 /* : LeafNode */;
2220 val* var15 /* : String */;
2221 short int var16 /* : Bool */;
2222 int cltype17;
2223 int idtype18;
2224 val* var19 /* : nullable ConcatNode */;
2225 val* var_last_node_parent /* var last_node_parent: nullable ConcatNode */;
2226 val* var20 /* : ConcatNode */;
2227 val* var_new_concat /* var new_concat: ConcatNode */;
2228 val* var21 /* : LeafNode */;
2229 val* var22 /* : String */;
2230 static val* varonce;
2231 val* var23 /* : String */;
2232 char* var24 /* : NativeString */;
2233 long var25 /* : Int */;
2234 val* var26 /* : String */;
2235 val* var27 /* : Buffer */;
2236 long var28 /* : Int */;
2237 val* var_buf /* var buf: Buffer */;
2238 val* var29 /* : Iterator[nullable Object] */;
2239 short int var30 /* : Bool */;
2240 val* var31 /* : nullable Object */;
2241 char var_i /* var i: Char */;
2242 char var32 /* : Char */;
2243 val* var33 /* : nullable Object */;
2244 val* var35 /* : BufferRope */;
2245 short int var36 /* : Bool */;
2246 short int var37 /* : Bool */;
2247 short int var38 /* : Bool */;
2248 var_str = p0;
2249 /* <var_str:Collection[Char]> isa AbstractString */
2250 cltype = type_string__AbstractString.color;
2251 idtype = type_string__AbstractString.id;
2252 if(cltype >= var_str->type->table_size) {
2253 var1 = 0;
2254 } else {
2255 var1 = var_str->type->type_table[cltype] == idtype;
2256 }
2257 if (var1){
2258 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__parent_node]))(self) /* parent_node on <self:BufferRope>*/;
2259 var_last_node = var2;
2260 for(;;) {
2261 /* <var_last_node:RopeNode> isa ConcatNode */
2262 cltype5 = type_ropes__ConcatNode.color;
2263 idtype6 = type_ropes__ConcatNode.id;
2264 if(cltype5 >= var_last_node->type->table_size) {
2265 var4 = 0;
2266 } else {
2267 var4 = var_last_node->type->type_table[cltype5] == idtype6;
2268 }
2269 var_ = var4;
2270 if (var4){
2271 var7 = ((val* (*)(val*))(var_last_node->class->vft[COLOR_ropes__ConcatNode__right_child]))(var_last_node) /* right_child on <var_last_node:RopeNode(ConcatNode)>*/;
2272 var8 = NULL;
2273 if (var7 == NULL) {
2274 var9 = 0; /* is null */
2275 } else {
2276 var9 = 1; /* arg is null and recv is not */
2277 }
2278 var3 = var9;
2279 } else {
2280 var3 = var_;
2281 }
2282 if (!var3) break;
2283 var10 = ((val* (*)(val*))(var_last_node->class->vft[COLOR_ropes__ConcatNode__right_child]))(var_last_node) /* right_child on <var_last_node:RopeNode(ConcatNode)>*/;
2284 if (var10 == NULL) {
2285 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 458);
2286 exit(1);
2287 }
2288 var_last_node = var10;
2289 CONTINUE_label: (void)0;
2290 }
2291 BREAK_label: (void)0;
2292 /* <var_last_node:RopeNode> isa ConcatNode */
2293 cltype12 = type_ropes__ConcatNode.color;
2294 idtype13 = type_ropes__ConcatNode.id;
2295 if(cltype12 >= var_last_node->type->table_size) {
2296 var11 = 0;
2297 } else {
2298 var11 = var_last_node->type->type_table[cltype12] == idtype13;
2299 }
2300 if (var11){
2301 var14 = NEW_ropes__LeafNode(&type_ropes__LeafNode);
2302 var15 = ((val* (*)(val*))(var_str->class->vft[COLOR_string__Object__to_s]))(var_str) /* to_s on <var_str:Collection[Char](AbstractString)>*/;
2303 ((void (*)(val*, val*))(var14->class->vft[COLOR_ropes__LeafNode__init]))(var14, var15) /* init on <var14:LeafNode>*/;
2304 CHECK_NEW_ropes__LeafNode(var14);
2305 ((void (*)(val*, val*))(var_last_node->class->vft[COLOR_ropes__ConcatNode__right_child_61d]))(var_last_node, var14) /* right_child= on <var_last_node:RopeNode(ConcatNode)>*/;
2306 } else {
2307 /* <var_last_node:RopeNode> isa LeafNode */
2308 cltype17 = type_ropes__LeafNode.color;
2309 idtype18 = type_ropes__LeafNode.id;
2310 if(cltype17 >= var_last_node->type->table_size) {
2311 var16 = 0;
2312 } else {
2313 var16 = var_last_node->type->type_table[cltype17] == idtype18;
2314 }
2315 if (var16){
2316 var19 = ((val* (*)(val*))(var_last_node->class->vft[COLOR_ropes__RopeNode__parent]))(var_last_node) /* parent on <var_last_node:RopeNode(LeafNode)>*/;
2317 var_last_node_parent = var19;
2318 var20 = NEW_ropes__ConcatNode(&type_ropes__ConcatNode);
2319 ((void (*)(val*))(var20->class->vft[COLOR_ropes__ConcatNode__init]))(var20) /* init on <var20:ConcatNode>*/;
2320 CHECK_NEW_ropes__ConcatNode(var20);
2321 var_new_concat = var20;
2322 if (var_last_node_parent == NULL) {
2323 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 466);
2324 exit(1);
2325 } else {
2326 ((void (*)(val*, val*))(var_last_node_parent->class->vft[COLOR_ropes__ConcatNode__right_child_61d]))(var_last_node_parent, var_new_concat) /* right_child= on <var_last_node_parent:nullable ConcatNode>*/;
2327 }
2328 ((void (*)(val*, val*))(var_new_concat->class->vft[COLOR_ropes__ConcatNode__left_child_61d]))(var_new_concat, var_last_node) /* left_child= on <var_new_concat:ConcatNode>*/;
2329 var21 = NEW_ropes__LeafNode(&type_ropes__LeafNode);
2330 var22 = ((val* (*)(val*))(var_str->class->vft[COLOR_string__Object__to_s]))(var_str) /* to_s on <var_str:Collection[Char](AbstractString)>*/;
2331 ((void (*)(val*, val*))(var21->class->vft[COLOR_ropes__LeafNode__init]))(var21, var22) /* init on <var21:LeafNode>*/;
2332 CHECK_NEW_ropes__LeafNode(var21);
2333 ((void (*)(val*, val*))(var_new_concat->class->vft[COLOR_ropes__ConcatNode__right_child_61d]))(var_new_concat, var21) /* right_child= on <var_new_concat:ConcatNode>*/;
2334 var_last_node = var_new_concat;
2335 } else {
2336 if (varonce) {
2337 var23 = varonce;
2338 } else {
2339 var24 = "Fatal Error, please report to the developers for more insight.";
2340 var25 = 62;
2341 var26 = string__NativeString__to_s_with_length(var24, var25);
2342 var23 = var26;
2343 varonce = var23;
2344 }
2345 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var23) /* print on <self:BufferRope>*/;
2346 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "lib/standard/ropes.nit", 472);
2347 exit(1);
2348 }
2349 }
2350 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__balance_from_node]))(self, var_last_node) /* balance_from_node on <self:BufferRope>*/;
2351 } else {
2352 var27 = NEW_string__Buffer(&type_string__Buffer);
2353 var28 = ((long (*)(val*))(var_str->class->vft[COLOR_abstract_collection__Collection__length]))(var_str) /* length on <var_str:Collection[Char]>*/;
2354 ((void (*)(val*, long))(var27->class->vft[COLOR_string__Buffer__with_capacity]))(var27, var28) /* with_capacity on <var27:Buffer>*/;
2355 CHECK_NEW_string__Buffer(var27);
2356 var_buf = var27;
2357 var29 = ((val* (*)(val*))(var_str->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_str) /* iterator on <var_str:Collection[Char]>*/;
2358 for(;;) {
2359 var30 = ((short int (*)(val*))(var29->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var29) /* is_ok on <var29:Iterator[nullable Object]>*/;
2360 if(!var30) break;
2361 var31 = ((val* (*)(val*))(var29->class->vft[COLOR_abstract_collection__Iterator__item]))(var29) /* item on <var29:Iterator[nullable Object]>*/;
2362 var32 = ((struct instance_kernel__Char*)var31)->value; /* autounbox from nullable Object to Char */;
2363 var_i = var32;
2364 var33 = BOX_kernel__Char(var_i); /* autobox from Char to nullable Object */
2365 ((void (*)(val*, val*))(var_buf->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_buf, var33) /* add on <var_buf:Buffer>*/;
2366 CONTINUE_label34: (void)0;
2367 ((void (*)(val*))(var29->class->vft[COLOR_abstract_collection__Iterator__next]))(var29) /* next on <var29:Iterator[nullable Object]>*/;
2368 }
2369 BREAK_label34: (void)0;
2370 var35 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__append]))(self, var_buf) /* append on <self:BufferRope>*/;
2371 var35;
2372 }
2373 var36 = ((short int (*)(val*))(self->class->vft[COLOR_ropes__BufferRope__is_dirty]))(self) /* is_dirty on <self:BufferRope>*/;
2374 var37 = !var36;
2375 if (var37){
2376 var38 = 1;
2377 ((void (*)(val*, short int))(self->class->vft[COLOR_ropes__BufferRope__is_dirty_61d]))(self, var38) /* is_dirty= on <self:BufferRope>*/;
2378 } else {
2379 }
2380 var = self;
2381 goto RET_LABEL;
2382 RET_LABEL:;
2383 return var;
2384 }
2385 /* method ropes#BufferRope#append for (self: Object, Collection[Char]): BufferRope */
2386 val* VIRTUAL_ropes__BufferRope__append(val* self, val* p0) {
2387 val* var /* : BufferRope */;
2388 val* var1 /* : BufferRope */;
2389 var1 = ropes__BufferRope__append(self, p0);
2390 var = var1;
2391 RET_LABEL:;
2392 return var;
2393 }
2394 /* method ropes#BufferRope#append_multi for (self: BufferRope, Array[Collection[Char]]): BufferRope */
2395 val* ropes__BufferRope__append_multi(val* self, val* p0) {
2396 val* var /* : BufferRope */;
2397 val* var_strs /* var strs: Array[Collection[Char]] */;
2398 val* var1 /* : Iterator[nullable Object] */;
2399 short int var2 /* : Bool */;
2400 val* var3 /* : nullable Object */;
2401 val* var_i /* var i: Collection[Char] */;
2402 val* var4 /* : BufferRope */;
2403 var_strs = p0;
2404 var1 = ((val* (*)(val*))(var_strs->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_strs) /* iterator on <var_strs:Array[Collection[Char]]>*/;
2405 for(;;) {
2406 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
2407 if(!var2) break;
2408 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
2409 var_i = var3;
2410 var4 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__append]))(self, var_i) /* append on <self:BufferRope>*/;
2411 var4;
2412 CONTINUE_label: (void)0;
2413 ((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
2414 }
2415 BREAK_label: (void)0;
2416 var = self;
2417 goto RET_LABEL;
2418 RET_LABEL:;
2419 return var;
2420 }
2421 /* method ropes#BufferRope#append_multi for (self: Object, Array[Collection[Char]]): BufferRope */
2422 val* VIRTUAL_ropes__BufferRope__append_multi(val* self, val* p0) {
2423 val* var /* : BufferRope */;
2424 val* var1 /* : BufferRope */;
2425 var1 = ropes__BufferRope__append_multi(self, p0);
2426 var = var1;
2427 RET_LABEL:;
2428 return var;
2429 }
2430 /* method ropes#BufferRope#prepend for (self: BufferRope, Collection[Char]): BufferRope */
2431 val* ropes__BufferRope__prepend(val* self, val* p0) {
2432 val* var /* : BufferRope */;
2433 val* var_str /* var str: Collection[Char] */;
2434 short int var1 /* : Bool */;
2435 int cltype;
2436 int idtype;
2437 val* var2 /* : RopeNode */;
2438 val* var_curr_node /* var curr_node: RopeNode */;
2439 short int var3 /* : Bool */;
2440 short int var4 /* : Bool */;
2441 int cltype5;
2442 int idtype6;
2443 short int var_ /* var : Bool */;
2444 val* var7 /* : nullable RopeNode */;
2445 val* var8 /* : null */;
2446 short int var9 /* : Bool */;
2447 val* var10 /* : nullable RopeNode */;
2448 short int var11 /* : Bool */;
2449 int cltype12;
2450 int idtype13;
2451 val* var14 /* : LeafNode */;
2452 val* var15 /* : String */;
2453 short int var16 /* : Bool */;
2454 int cltype17;
2455 int idtype18;
2456 val* var19 /* : nullable ConcatNode */;
2457 val* var_parent /* var parent: nullable ConcatNode */;
2458 val* var20 /* : ConcatNode */;
2459 val* var_new_concat /* var new_concat: ConcatNode */;
2460 val* var21 /* : LeafNode */;
2461 val* var22 /* : String */;
2462 val* var_new_leaf /* var new_leaf: LeafNode */;
2463 static val* varonce;
2464 val* var23 /* : String */;
2465 char* var24 /* : NativeString */;
2466 long var25 /* : Int */;
2467 val* var26 /* : String */;
2468 val* var27 /* : Buffer */;
2469 long var28 /* : Int */;
2470 val* var_buf /* var buf: Buffer */;
2471 val* var29 /* : Iterator[nullable Object] */;
2472 short int var30 /* : Bool */;
2473 val* var31 /* : nullable Object */;
2474 char var_i /* var i: Char */;
2475 char var32 /* : Char */;
2476 val* var33 /* : nullable Object */;
2477 val* var35 /* : String */;
2478 val* var36 /* : BufferRope */;
2479 short int var37 /* : Bool */;
2480 short int var38 /* : Bool */;
2481 short int var39 /* : Bool */;
2482 var_str = p0;
2483 /* <var_str:Collection[Char]> isa AbstractString */
2484 cltype = type_string__AbstractString.color;
2485 idtype = type_string__AbstractString.id;
2486 if(cltype >= var_str->type->table_size) {
2487 var1 = 0;
2488 } else {
2489 var1 = var_str->type->type_table[cltype] == idtype;
2490 }
2491 if (var1){
2492 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__parent_node]))(self) /* parent_node on <self:BufferRope>*/;
2493 var_curr_node = var2;
2494 for(;;) {
2495 /* <var_curr_node:RopeNode> isa ConcatNode */
2496 cltype5 = type_ropes__ConcatNode.color;
2497 idtype6 = type_ropes__ConcatNode.id;
2498 if(cltype5 >= var_curr_node->type->table_size) {
2499 var4 = 0;
2500 } else {
2501 var4 = var_curr_node->type->type_table[cltype5] == idtype6;
2502 }
2503 var_ = var4;
2504 if (var4){
2505 var7 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_curr_node) /* left_child on <var_curr_node:RopeNode(ConcatNode)>*/;
2506 var8 = NULL;
2507 if (var7 == NULL) {
2508 var9 = 0; /* is null */
2509 } else {
2510 var9 = 1; /* arg is null and recv is not */
2511 }
2512 var3 = var9;
2513 } else {
2514 var3 = var_;
2515 }
2516 if (!var3) break;
2517 var10 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__left_child]))(var_curr_node) /* left_child on <var_curr_node:RopeNode(ConcatNode)>*/;
2518 if (var10 == NULL) {
2519 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 505);
2520 exit(1);
2521 }
2522 var_curr_node = var10;
2523 CONTINUE_label: (void)0;
2524 }
2525 BREAK_label: (void)0;
2526 /* <var_curr_node:RopeNode> isa ConcatNode */
2527 cltype12 = type_ropes__ConcatNode.color;
2528 idtype13 = type_ropes__ConcatNode.id;
2529 if(cltype12 >= var_curr_node->type->table_size) {
2530 var11 = 0;
2531 } else {
2532 var11 = var_curr_node->type->type_table[cltype12] == idtype13;
2533 }
2534 if (var11){
2535 var14 = NEW_ropes__LeafNode(&type_ropes__LeafNode);
2536 var15 = ((val* (*)(val*))(var_str->class->vft[COLOR_string__Object__to_s]))(var_str) /* to_s on <var_str:Collection[Char](AbstractString)>*/;
2537 ((void (*)(val*, val*))(var14->class->vft[COLOR_ropes__LeafNode__init]))(var14, var15) /* init on <var14:LeafNode>*/;
2538 CHECK_NEW_ropes__LeafNode(var14);
2539 ((void (*)(val*, val*))(var_curr_node->class->vft[COLOR_ropes__ConcatNode__left_child_61d]))(var_curr_node, var14) /* left_child= on <var_curr_node:RopeNode(ConcatNode)>*/;
2540 } else {
2541 /* <var_curr_node:RopeNode> isa LeafNode */
2542 cltype17 = type_ropes__LeafNode.color;
2543 idtype18 = type_ropes__LeafNode.id;
2544 if(cltype17 >= var_curr_node->type->table_size) {
2545 var16 = 0;
2546 } else {
2547 var16 = var_curr_node->type->type_table[cltype17] == idtype18;
2548 }
2549 if (var16){
2550 var19 = ((val* (*)(val*))(var_curr_node->class->vft[COLOR_ropes__RopeNode__parent]))(var_curr_node) /* parent on <var_curr_node:RopeNode(LeafNode)>*/;
2551 var_parent = var19;
2552 var20 = NEW_ropes__ConcatNode(&type_ropes__ConcatNode);
2553 ((void (*)(val*))(var20->class->vft[COLOR_ropes__ConcatNode__init]))(var20) /* init on <var20:ConcatNode>*/;
2554 CHECK_NEW_ropes__ConcatNode(var20);
2555 var_new_concat = var20;
2556 var21 = NEW_ropes__LeafNode(&type_ropes__LeafNode);
2557 var22 = ((val* (*)(val*))(var_str->class->vft[COLOR_string__Object__to_s]))(var_str) /* to_s on <var_str:Collection[Char](AbstractString)>*/;
2558 ((void (*)(val*, val*))(var21->class->vft[COLOR_ropes__LeafNode__init]))(var21, var22) /* init on <var21:LeafNode>*/;
2559 CHECK_NEW_ropes__LeafNode(var21);
2560 var_new_leaf = var21;
2561 ((void (*)(val*, val*))(var_new_concat->class->vft[COLOR_ropes__ConcatNode__left_child_61d]))(var_new_concat, var_new_leaf) /* left_child= on <var_new_concat:ConcatNode>*/;
2562 ((void (*)(val*, val*))(var_new_concat->class->vft[COLOR_ropes__ConcatNode__right_child_61d]))(var_new_concat, var_curr_node) /* right_child= on <var_new_concat:ConcatNode>*/;
2563 if (var_parent == NULL) {
2564 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 516);
2565 exit(1);
2566 } else {
2567 ((void (*)(val*, val*))(var_parent->class->vft[COLOR_ropes__ConcatNode__left_child_61d]))(var_parent, var_new_concat) /* left_child= on <var_parent:nullable ConcatNode>*/;
2568 }
2569 var_curr_node = var_new_concat;
2570 } else {
2571 if (varonce) {
2572 var23 = varonce;
2573 } else {
2574 var24 = "Fatal Error";
2575 var25 = 11;
2576 var26 = string__NativeString__to_s_with_length(var24, var25);
2577 var23 = var26;
2578 varonce = var23;
2579 }
2580 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var23) /* print on <self:BufferRope>*/;
2581 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "lib/standard/ropes.nit", 520);
2582 exit(1);
2583 }
2584 }
2585 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__balance_from_node]))(self, var_curr_node) /* balance_from_node on <self:BufferRope>*/;
2586 } else {
2587 var27 = NEW_string__Buffer(&type_string__Buffer);
2588 var28 = ((long (*)(val*))(var_str->class->vft[COLOR_abstract_collection__Collection__length]))(var_str) /* length on <var_str:Collection[Char]>*/;
2589 ((void (*)(val*, long))(var27->class->vft[COLOR_string__Buffer__with_capacity]))(var27, var28) /* with_capacity on <var27:Buffer>*/;
2590 CHECK_NEW_string__Buffer(var27);
2591 var_buf = var27;
2592 var29 = ((val* (*)(val*))(var_str->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_str) /* iterator on <var_str:Collection[Char]>*/;
2593 for(;;) {
2594 var30 = ((short int (*)(val*))(var29->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var29) /* is_ok on <var29:Iterator[nullable Object]>*/;
2595 if(!var30) break;
2596 var31 = ((val* (*)(val*))(var29->class->vft[COLOR_abstract_collection__Iterator__item]))(var29) /* item on <var29:Iterator[nullable Object]>*/;
2597 var32 = ((struct instance_kernel__Char*)var31)->value; /* autounbox from nullable Object to Char */;
2598 var_i = var32;
2599 var33 = BOX_kernel__Char(var_i); /* autobox from Char to nullable Object */
2600 ((void (*)(val*, val*))(var_buf->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_buf, var33) /* add on <var_buf:Buffer>*/;
2601 CONTINUE_label34: (void)0;
2602 ((void (*)(val*))(var29->class->vft[COLOR_abstract_collection__Iterator__next]))(var29) /* next on <var29:Iterator[nullable Object]>*/;
2603 }
2604 BREAK_label34: (void)0;
2605 var35 = ((val* (*)(val*))(var_buf->class->vft[COLOR_string__Object__to_s]))(var_buf) /* to_s on <var_buf:Buffer>*/;
2606 var36 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__prepend]))(self, var35) /* prepend on <self:BufferRope>*/;
2607 var36;
2608 }
2609 var37 = ((short int (*)(val*))(self->class->vft[COLOR_ropes__BufferRope__is_dirty]))(self) /* is_dirty on <self:BufferRope>*/;
2610 var38 = !var37;
2611 if (var38){
2612 var39 = 1;
2613 ((void (*)(val*, short int))(self->class->vft[COLOR_ropes__BufferRope__is_dirty_61d]))(self, var39) /* is_dirty= on <self:BufferRope>*/;
2614 } else {
2615 }
2616 var = self;
2617 goto RET_LABEL;
2618 RET_LABEL:;
2619 return var;
2620 }
2621 /* method ropes#BufferRope#prepend for (self: Object, Collection[Char]): BufferRope */
2622 val* VIRTUAL_ropes__BufferRope__prepend(val* self, val* p0) {
2623 val* var /* : BufferRope */;
2624 val* var1 /* : BufferRope */;
2625 var1 = ropes__BufferRope__prepend(self, p0);
2626 var = var1;
2627 RET_LABEL:;
2628 return var;
2629 }
2630 /* method ropes#BufferRope#prepend_multi for (self: BufferRope, Array[Collection[Char]]): BufferRope */
2631 val* ropes__BufferRope__prepend_multi(val* self, val* p0) {
2632 val* var /* : BufferRope */;
2633 val* var_strs /* var strs: Array[Collection[Char]] */;
2634 val* var1 /* : Iterator[nullable Object] */;
2635 short int var2 /* : Bool */;
2636 val* var3 /* : nullable Object */;
2637 val* var_i /* var i: Collection[Char] */;
2638 val* var4 /* : BufferRope */;
2639 var_strs = p0;
2640 var1 = ((val* (*)(val*))(var_strs->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_strs) /* iterator on <var_strs:Array[Collection[Char]]>*/;
2641 for(;;) {
2642 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
2643 if(!var2) break;
2644 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
2645 var_i = var3;
2646 var4 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__prepend]))(self, var_i) /* prepend on <self:BufferRope>*/;
2647 var4;
2648 CONTINUE_label: (void)0;
2649 ((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
2650 }
2651 BREAK_label: (void)0;
2652 var = self;
2653 goto RET_LABEL;
2654 RET_LABEL:;
2655 return var;
2656 }
2657 /* method ropes#BufferRope#prepend_multi for (self: Object, Array[Collection[Char]]): BufferRope */
2658 val* VIRTUAL_ropes__BufferRope__prepend_multi(val* self, val* p0) {
2659 val* var /* : BufferRope */;
2660 val* var1 /* : BufferRope */;
2661 var1 = ropes__BufferRope__prepend_multi(self, p0);
2662 var = var1;
2663 RET_LABEL:;
2664 return var;
2665 }
2666 /* method ropes#BufferRope#concat for (self: BufferRope, Rope): Rope */
2667 val* ropes__BufferRope__concat(val* self, val* p0) {
2668 val* var /* : Rope */;
2669 val* var_str /* var str: Rope */;
2670 val* var1 /* : DFSRopeLeafIterator */;
2671 val* var_other_iter /* var other_iter: DFSRopeLeafIterator */;
2672 val* var2 /* : List[String] */;
2673 val* var_modif_list /* var modif_list: List[String] */;
2674 short int var3 /* : Bool */;
2675 val* var4 /* : nullable Object */;
2676 val* var5 /* : String */;
2677 long var6 /* : Int */;
2678 long var7 /* : Int */;
2679 short int var8 /* : Bool */;
2680 short int var10 /* : Bool */;
2681 int cltype;
2682 int idtype;
2683 short int var11 /* : Bool */;
2684 val* var12 /* : nullable Object */;
2685 val* var13 /* : BufferRope */;
2686 short int var15 /* : Bool */;
2687 short int var16 /* : Bool */;
2688 short int var17 /* : Bool */;
2689 var_str = p0;
2690 var1 = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
2691 ((void (*)(val*, val*))(var1->class->vft[COLOR_ropes__DFSRopeLeafIterator__init]))(var1, var_str) /* init on <var1:DFSRopeLeafIterator>*/;
2692 CHECK_NEW_ropes__DFSRopeLeafIterator(var1);
2693 var_other_iter = var1;
2694 var2 = NEW_list__List(&type_list__Liststring__String);
2695 ((void (*)(val*))(var2->class->vft[COLOR_list__List__init]))(var2) /* init on <var2:List[String]>*/;
2696 CHECK_NEW_list__List(var2);
2697 var_modif_list = var2;
2698 for(;;) {
2699 var3 = ((short int (*)(val*))(var_other_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_other_iter) /* is_ok on <var_other_iter:DFSRopeLeafIterator>*/;
2700 if (!var3) break;
2701 var4 = ((val* (*)(val*))(var_other_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_other_iter) /* item on <var_other_iter:DFSRopeLeafIterator>*/;
2702 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_ropes__LeafNode__value]))(var4) /* value on <var4:nullable Object(LeafNode)>*/;
2703 ((void (*)(val*, val*))(var_modif_list->class->vft[COLOR_abstract_collection__Sequence__push]))(var_modif_list, var5) /* push on <var_modif_list:List[String]>*/;
2704 ((void (*)(val*))(var_other_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_other_iter) /* next on <var_other_iter:DFSRopeLeafIterator>*/;
2705 CONTINUE_label: (void)0;
2706 }
2707 BREAK_label: (void)0;
2708 for(;;) {
2709 var6 = ((long (*)(val*))(var_modif_list->class->vft[COLOR_abstract_collection__Collection__length]))(var_modif_list) /* length on <var_modif_list:List[String]>*/;
2710 var7 = 0;
2711 { /* Inline kernel#Int#> (var6,var7) */
2712 /* Covariant cast for argument 0 (i) <var7:Int> isa OTHER */
2713 /* <var7:Int> isa OTHER */
2714 var10 = 1; /* easy <var7:Int> isa OTHER*/
2715 if (!var10) {
2716 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
2717 exit(1);
2718 }
2719 var11 = var6 > var7;
2720 var8 = var11;
2721 goto RET_LABEL9;
2722 RET_LABEL9:(void)0;
2723 }
2724 if (!var8) break;
2725 var12 = ((val* (*)(val*))(var_modif_list->class->vft[COLOR_abstract_collection__Sequence__shift]))(var_modif_list) /* shift on <var_modif_list:List[String]>*/;
2726 var13 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__append]))(self, var12) /* append on <self:BufferRope>*/;
2727 var13;
2728 CONTINUE_label14: (void)0;
2729 }
2730 BREAK_label14: (void)0;
2731 var15 = ((short int (*)(val*))(self->class->vft[COLOR_ropes__BufferRope__is_dirty]))(self) /* is_dirty on <self:BufferRope>*/;
2732 var16 = !var15;
2733 if (var16){
2734 var17 = 1;
2735 ((void (*)(val*, short int))(self->class->vft[COLOR_ropes__BufferRope__is_dirty_61d]))(self, var17) /* is_dirty= on <self:BufferRope>*/;
2736 } else {
2737 }
2738 var = self;
2739 goto RET_LABEL;
2740 RET_LABEL:;
2741 return var;
2742 }
2743 /* method ropes#BufferRope#concat for (self: Object, Rope): Rope */
2744 val* VIRTUAL_ropes__BufferRope__concat(val* self, val* p0) {
2745 val* var /* : Rope */;
2746 val* var1 /* : Rope */;
2747 var1 = ropes__BufferRope__concat(self, p0);
2748 var = var1;
2749 RET_LABEL:;
2750 return var;
2751 }
2752 /* method ropes#BufferRope#freeze for (self: BufferRope): ImmutableRope */
2753 val* ropes__BufferRope__freeze(val* self) {
2754 val* var /* : ImmutableRope */;
2755 val* var1 /* : BufferRope */;
2756 val* var_buffer_rope /* var buffer_rope: BufferRope */;
2757 val* var2 /* : ImmutableRope */;
2758 val* var_new_rope /* var new_rope: ImmutableRope */;
2759 val* var3 /* : DFSRopeLeafIterator */;
2760 val* var_iter /* var iter: DFSRopeLeafIterator */;
2761 short int var4 /* : Bool */;
2762 val* var5 /* : nullable Object */;
2763 val* var6 /* : String */;
2764 val* var7 /* : BufferRope */;
2765 val* var8 /* : RopeNode */;
2766 short int var9 /* : Bool */;
2767 short int var10 /* : Bool */;
2768 val* var11 /* : nullable String */;
2769 var1 = NEW_ropes__BufferRope(&type_ropes__BufferRope);
2770 ((void (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__init]))(var1) /* init on <var1:BufferRope>*/;
2771 CHECK_NEW_ropes__BufferRope(var1);
2772 var_buffer_rope = var1;
2773 var2 = NEW_ropes__ImmutableRope(&type_ropes__ImmutableRope);
2774 ((void (*)(val*))(var2->class->vft[COLOR_ropes__ImmutableRope__init]))(var2) /* init on <var2:ImmutableRope>*/;
2775 CHECK_NEW_ropes__ImmutableRope(var2);
2776 var_new_rope = var2;
2777 var3 = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
2778 ((void (*)(val*, val*))(var3->class->vft[COLOR_ropes__DFSRopeLeafIterator__init]))(var3, self) /* init on <var3:DFSRopeLeafIterator>*/;
2779 CHECK_NEW_ropes__DFSRopeLeafIterator(var3);
2780 var_iter = var3;
2781 for(;;) {
2782 var4 = ((short int (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_iter) /* is_ok on <var_iter:DFSRopeLeafIterator>*/;
2783 if (!var4) break;
2784 var5 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:DFSRopeLeafIterator>*/;
2785 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_ropes__LeafNode__value]))(var5) /* value on <var5:nullable Object(LeafNode)>*/;
2786 var7 = ((val* (*)(val*, val*))(var_buffer_rope->class->vft[COLOR_ropes__BufferRope__append]))(var_buffer_rope, var6) /* append on <var_buffer_rope:BufferRope>*/;
2787 var7;
2788 ((void (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_iter) /* next on <var_iter:DFSRopeLeafIterator>*/;
2789 CONTINUE_label: (void)0;
2790 }
2791 BREAK_label: (void)0;
2792 var8 = ((val* (*)(val*))(var_buffer_rope->class->vft[COLOR_ropes__Rope__parent_node]))(var_buffer_rope) /* parent_node on <var_buffer_rope:BufferRope>*/;
2793 ((void (*)(val*, val*))(var_new_rope->class->vft[COLOR_ropes__Rope__parent_node_61d]))(var_new_rope, var8) /* parent_node= on <var_new_rope:ImmutableRope>*/;
2794 var9 = ((short int (*)(val*))(self->class->vft[COLOR_ropes__BufferRope__is_dirty]))(self) /* is_dirty on <self:BufferRope>*/;
2795 var10 = !var9;
2796 if (var10){
2797 var11 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__str_representation]))(self) /* str_representation on <self:BufferRope>*/;
2798 ((void (*)(val*, val*))(var_new_rope->class->vft[COLOR_ropes__Rope__str_representation_61d]))(var_new_rope, var11) /* str_representation= on <var_new_rope:ImmutableRope>*/;
2799 } else {
2800 }
2801 var = var_new_rope;
2802 goto RET_LABEL;
2803 RET_LABEL:;
2804 return var;
2805 }
2806 /* method ropes#BufferRope#freeze for (self: Object): ImmutableRope */
2807 val* VIRTUAL_ropes__BufferRope__freeze(val* self) {
2808 val* var /* : ImmutableRope */;
2809 val* var1 /* : ImmutableRope */;
2810 var1 = ropes__BufferRope__freeze(self);
2811 var = var1;
2812 RET_LABEL:;
2813 return var;
2814 }
2815 /* method ropes#BufferRope#to_immutable for (self: BufferRope): ImmutableRope */
2816 val* ropes__BufferRope__to_immutable(val* self) {
2817 val* var /* : ImmutableRope */;
2818 val* var1 /* : ImmutableRope */;
2819 val* var_immutable_self /* var immutable_self: ImmutableRope */;
2820 val* var2 /* : RopeNode */;
2821 var1 = NEW_ropes__ImmutableRope(&type_ropes__ImmutableRope);
2822 ((void (*)(val*))(var1->class->vft[COLOR_ropes__ImmutableRope__init]))(var1) /* init on <var1:ImmutableRope>*/;
2823 CHECK_NEW_ropes__ImmutableRope(var1);
2824 var_immutable_self = var1;
2825 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__parent_node]))(self) /* parent_node on <self:BufferRope>*/;
2826 ((void (*)(val*, val*))(var_immutable_self->class->vft[COLOR_ropes__Rope__parent_node_61d]))(var_immutable_self, var2) /* parent_node= on <var_immutable_self:ImmutableRope>*/;
2827 var = var_immutable_self;
2828 goto RET_LABEL;
2829 RET_LABEL:;
2830 return var;
2831 }
2832 /* method ropes#BufferRope#to_immutable for (self: Object): ImmutableRope */
2833 val* VIRTUAL_ropes__BufferRope__to_immutable(val* self) {
2834 val* var /* : ImmutableRope */;
2835 val* var1 /* : ImmutableRope */;
2836 var1 = ropes__BufferRope__to_immutable(self);
2837 var = var1;
2838 RET_LABEL:;
2839 return var;
2840 }
2841 /* method ropes#BufferRope#subrope for (self: BufferRope, Int, Int): BufferRope */
2842 val* ropes__BufferRope__subrope(val* self, long p0, long p1) {
2843 val* var /* : BufferRope */;
2844 long var_index_from /* var index_from: Int */;
2845 long var_count /* var count: Int */;
2846 val* var1 /* : Rope */;
2847 short int var2 /* : Bool */;
2848 int cltype;
2849 int idtype;
2850 var_index_from = p0;
2851 var_count = p1;
2852 var1 = ((val* (*)(val*, long, long))(self->class->vft[COLOR_ropes__BufferRope__subrope]))(self, p0, p1) /* subrope on <self:BufferRope>*/;
2853 /* <var1:Rope> isa BufferRope */
2854 cltype = type_ropes__BufferRope.color;
2855 idtype = type_ropes__BufferRope.id;
2856 if(cltype >= var1->type->table_size) {
2857 var2 = 0;
2858 } else {
2859 var2 = var1->type->type_table[cltype] == idtype;
2860 }
2861 if (!var2) {
2862 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 603);
2863 exit(1);
2864 }
2865 var = var1;
2866 goto RET_LABEL;
2867 RET_LABEL:;
2868 return var;
2869 }
2870 /* method ropes#BufferRope#subrope for (self: Object, Int, Int): Rope */
2871 val* VIRTUAL_ropes__BufferRope__subrope(val* self, long p0, long p1) {
2872 val* var /* : Rope */;
2873 val* var1 /* : BufferRope */;
2874 var1 = ropes__BufferRope__subrope(self, p0, p1);
2875 var = var1;
2876 RET_LABEL:;
2877 return var;
2878 }
2879 /* method ropes#BufferRope#* for (self: BufferRope, Int): BufferRope */
2880 val* ropes__BufferRope___42d(val* self, long p0) {
2881 val* var /* : BufferRope */;
2882 long var_repeats /* var repeats: Int */;
2883 val* var1 /* : Rope */;
2884 short int var2 /* : Bool */;
2885 int cltype;
2886 int idtype;
2887 var_repeats = p0;
2888 var1 = ((val* (*)(val*, long))(self->class->vft[COLOR_ropes__BufferRope___42d]))(self, p0) /* * on <self:BufferRope>*/;
2889 /* <var1:Rope> isa BufferRope */
2890 cltype = type_ropes__BufferRope.color;
2891 idtype = type_ropes__BufferRope.id;
2892 if(cltype >= var1->type->table_size) {
2893 var2 = 0;
2894 } else {
2895 var2 = var1->type->type_table[cltype] == idtype;
2896 }
2897 if (!var2) {
2898 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 608);
2899 exit(1);
2900 }
2901 var = var1;
2902 goto RET_LABEL;
2903 RET_LABEL:;
2904 return var;
2905 }
2906 /* method ropes#BufferRope#* for (self: Object, Int): Rope */
2907 val* VIRTUAL_ropes__BufferRope___42d(val* self, long p0) {
2908 val* var /* : Rope */;
2909 val* var1 /* : BufferRope */;
2910 var1 = ropes__BufferRope___42d(self, p0);
2911 var = var1;
2912 RET_LABEL:;
2913 return var;
2914 }
2915 /* method ropes#BufferRope#+ for (self: BufferRope, Rope): BufferRope */
2916 val* ropes__BufferRope___43d(val* self, val* p0) {
2917 val* var /* : BufferRope */;
2918 val* var_other /* var other: Rope */;
2919 val* var1 /* : Rope */;
2920 short int var2 /* : Bool */;
2921 int cltype;
2922 int idtype;
2923 var_other = p0;
2924 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope___43d]))(self, p0) /* + on <self:BufferRope>*/;
2925 /* <var1:Rope> isa BufferRope */
2926 cltype = type_ropes__BufferRope.color;
2927 idtype = type_ropes__BufferRope.id;
2928 if(cltype >= var1->type->table_size) {
2929 var2 = 0;
2930 } else {
2931 var2 = var1->type->type_table[cltype] == idtype;
2932 }
2933 if (!var2) {
2934 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 613);
2935 exit(1);
2936 }
2937 var = var1;
2938 goto RET_LABEL;
2939 RET_LABEL:;
2940 return var;
2941 }
2942 /* method ropes#BufferRope#+ for (self: Object, Rope): Rope */
2943 val* VIRTUAL_ropes__BufferRope___43d(val* self, val* p0) {
2944 val* var /* : Rope */;
2945 val* var1 /* : BufferRope */;
2946 var1 = ropes__BufferRope___43d(self, p0);
2947 var = var1;
2948 RET_LABEL:;
2949 return var;
2950 }
2951 /* method ropes#BufferRope#multi_concat for (self: BufferRope, Array[Rope]): BufferRope */
2952 val* ropes__BufferRope__multi_concat(val* self, val* p0) {
2953 val* var /* : BufferRope */;
2954 val* var_ropes /* var ropes: Array[Rope] */;
2955 val* var1 /* : Rope */;
2956 short int var2 /* : Bool */;
2957 int cltype;
2958 int idtype;
2959 var_ropes = p0;
2960 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ropes__BufferRope__multi_concat]))(self, p0) /* multi_concat on <self:BufferRope>*/;
2961 /* <var1:Rope> isa BufferRope */
2962 cltype = type_ropes__BufferRope.color;
2963 idtype = type_ropes__BufferRope.id;
2964 if(cltype >= var1->type->table_size) {
2965 var2 = 0;
2966 } else {
2967 var2 = var1->type->type_table[cltype] == idtype;
2968 }
2969 if (!var2) {
2970 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 618);
2971 exit(1);
2972 }
2973 var = var1;
2974 goto RET_LABEL;
2975 RET_LABEL:;
2976 return var;
2977 }
2978 /* method ropes#BufferRope#multi_concat for (self: Object, Array[Rope]): Rope */
2979 val* VIRTUAL_ropes__BufferRope__multi_concat(val* self, val* p0) {
2980 val* var /* : Rope */;
2981 val* var1 /* : BufferRope */;
2982 var1 = ropes__BufferRope__multi_concat(self, p0);
2983 var = var1;
2984 RET_LABEL:;
2985 return var;
2986 }
2987 /* method ropes#BufferRope#to_s for (self: BufferRope): String */
2988 val* ropes__BufferRope__to_s(val* self) {
2989 val* var /* : String */;
2990 short int var1 /* : Bool */;
2991 val* var2 /* : nullable String */;
2992 val* var3 /* : null */;
2993 short int var4 /* : Bool */;
2994 short int var_ /* var : Bool */;
2995 short int var5 /* : Bool */;
2996 val* var6 /* : String */;
2997 short int var7 /* : Bool */;
2998 val* var8 /* : nullable String */;
2999 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__str_representation]))(self) /* str_representation on <self:BufferRope>*/;
3000 var3 = NULL;
3001 if (var2 == NULL) {
3002 var4 = 1; /* is null */
3003 } else {
3004 var4 = 0; /* arg is null but recv is not */
3005 }
3006 var_ = var4;
3007 if (var4){
3008 var1 = var_;
3009 } else {
3010 var5 = ((short int (*)(val*))(self->class->vft[COLOR_ropes__BufferRope__is_dirty]))(self) /* is_dirty on <self:BufferRope>*/;
3011 var1 = var5;
3012 }
3013 if (var1){
3014 var6 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__flatten]))(self) /* flatten on <self:BufferRope>*/;
3015 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__Rope__str_representation_61d]))(self, var6) /* str_representation= on <self:BufferRope>*/;
3016 var7 = 0;
3017 ((void (*)(val*, short int))(self->class->vft[COLOR_ropes__BufferRope__is_dirty_61d]))(self, var7) /* is_dirty= on <self:BufferRope>*/;
3018 } else {
3019 }
3020 var8 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__Rope__str_representation]))(self) /* str_representation on <self:BufferRope>*/;
3021 if (var8 == NULL) {
3022 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 629);
3023 exit(1);
3024 }
3025 var = var8;
3026 goto RET_LABEL;
3027 RET_LABEL:;
3028 return var;
3029 }
3030 /* method ropes#BufferRope#to_s for (self: Object): String */
3031 val* VIRTUAL_ropes__BufferRope__to_s(val* self) {
3032 val* var /* : String */;
3033 val* var1 /* : String */;
3034 var1 = ropes__BufferRope__to_s(self);
3035 var = var1;
3036 RET_LABEL:;
3037 return var;
3038 }
3039 /* method ropes#ImmutableRope#init for (self: ImmutableRope) */
3040 void ropes__ImmutableRope__init(val* self) {
3041 ((void (*)(val*))(self->class->vft[COLOR_ropes__Rope__init]))(self) /* init on <self:ImmutableRope>*/;
3042 RET_LABEL:;
3043 }
3044 /* method ropes#ImmutableRope#init for (self: Object) */
3045 void VIRTUAL_ropes__ImmutableRope__init(val* self) {
3046 ropes__ImmutableRope__init(self);
3047 RET_LABEL:;
3048 }
3049 /* method ropes#ImmutableRope#with_string for (self: ImmutableRope, AbstractString) */
3050 void ropes__ImmutableRope__with_string(val* self, val* p0) {
3051 val* var_str /* var str: AbstractString */;
3052 var_str = p0;
3053 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__Rope__with_string]))(self, p0) /* with_string on <self:ImmutableRope>*/;
3054 RET_LABEL:;
3055 }
3056 /* method ropes#ImmutableRope#with_string for (self: Object, AbstractString) */
3057 void VIRTUAL_ropes__ImmutableRope__with_string(val* self, val* p0) {
3058 ropes__ImmutableRope__with_string(self, p0);
3059 RET_LABEL:;
3060 }
3061 /* method ropes#ImmutableRope#subrope for (self: ImmutableRope, Int, Int): ImmutableRope */
3062 val* ropes__ImmutableRope__subrope(val* self, long p0, long p1) {
3063 val* var /* : ImmutableRope */;
3064 long var_index_from /* var index_from: Int */;
3065 long var_count /* var count: Int */;
3066 val* var1 /* : Rope */;
3067 short int var2 /* : Bool */;
3068 int cltype;
3069 int idtype;
3070 val* var3 /* : ImmutableRope */;
3071 var_index_from = p0;
3072 var_count = p1;
3073 var1 = ((val* (*)(val*, long, long))(self->class->vft[COLOR_ropes__ImmutableRope__subrope]))(self, p0, p1) /* subrope on <self:ImmutableRope>*/;
3074 /* <var1:Rope> isa BufferRope */
3075 cltype = type_ropes__BufferRope.color;
3076 idtype = type_ropes__BufferRope.id;
3077 if(cltype >= var1->type->table_size) {
3078 var2 = 0;
3079 } else {
3080 var2 = var1->type->type_table[cltype] == idtype;
3081 }
3082 if (!var2) {
3083 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 654);
3084 exit(1);
3085 }
3086 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__to_immutable]))(var1) /* to_immutable on <var1:Rope(BufferRope)>*/;
3087 var = var3;
3088 goto RET_LABEL;
3089 RET_LABEL:;
3090 return var;
3091 }
3092 /* method ropes#ImmutableRope#subrope for (self: Object, Int, Int): Rope */
3093 val* VIRTUAL_ropes__ImmutableRope__subrope(val* self, long p0, long p1) {
3094 val* var /* : Rope */;
3095 val* var1 /* : ImmutableRope */;
3096 var1 = ropes__ImmutableRope__subrope(self, p0, p1);
3097 var = var1;
3098 RET_LABEL:;
3099 return var;
3100 }
3101 /* method ropes#ImmutableRope#* for (self: ImmutableRope, Int): ImmutableRope */
3102 val* ropes__ImmutableRope___42d(val* self, long p0) {
3103 val* var /* : ImmutableRope */;
3104 long var_repeats /* var repeats: Int */;
3105 val* var1 /* : Rope */;
3106 short int var2 /* : Bool */;
3107 int cltype;
3108 int idtype;
3109 val* var3 /* : ImmutableRope */;
3110 var_repeats = p0;
3111 var1 = ((val* (*)(val*, long))(self->class->vft[COLOR_ropes__ImmutableRope___42d]))(self, p0) /* * on <self:ImmutableRope>*/;
3112 /* <var1:Rope> isa BufferRope */
3113 cltype = type_ropes__BufferRope.color;
3114 idtype = type_ropes__BufferRope.id;
3115 if(cltype >= var1->type->table_size) {
3116 var2 = 0;
3117 } else {
3118 var2 = var1->type->type_table[cltype] == idtype;
3119 }
3120 if (!var2) {
3121 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 659);
3122 exit(1);
3123 }
3124 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__to_immutable]))(var1) /* to_immutable on <var1:Rope(BufferRope)>*/;
3125 var = var3;
3126 goto RET_LABEL;
3127 RET_LABEL:;
3128 return var;
3129 }
3130 /* method ropes#ImmutableRope#* for (self: Object, Int): Rope */
3131 val* VIRTUAL_ropes__ImmutableRope___42d(val* self, long p0) {
3132 val* var /* : Rope */;
3133 val* var1 /* : ImmutableRope */;
3134 var1 = ropes__ImmutableRope___42d(self, p0);
3135 var = var1;
3136 RET_LABEL:;
3137 return var;
3138 }
3139 /* method ropes#ImmutableRope#+ for (self: ImmutableRope, Rope): ImmutableRope */
3140 val* ropes__ImmutableRope___43d(val* self, val* p0) {
3141 val* var /* : ImmutableRope */;
3142 val* var_other /* var other: Rope */;
3143 val* var1 /* : Rope */;
3144 short int var2 /* : Bool */;
3145 int cltype;
3146 int idtype;
3147 val* var3 /* : ImmutableRope */;
3148 var_other = p0;
3149 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ropes__ImmutableRope___43d]))(self, p0) /* + on <self:ImmutableRope>*/;
3150 /* <var1:Rope> isa BufferRope */
3151 cltype = type_ropes__BufferRope.color;
3152 idtype = type_ropes__BufferRope.id;
3153 if(cltype >= var1->type->table_size) {
3154 var2 = 0;
3155 } else {
3156 var2 = var1->type->type_table[cltype] == idtype;
3157 }
3158 if (!var2) {
3159 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 664);
3160 exit(1);
3161 }
3162 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__to_immutable]))(var1) /* to_immutable on <var1:Rope(BufferRope)>*/;
3163 var = var3;
3164 goto RET_LABEL;
3165 RET_LABEL:;
3166 return var;
3167 }
3168 /* method ropes#ImmutableRope#+ for (self: Object, Rope): Rope */
3169 val* VIRTUAL_ropes__ImmutableRope___43d(val* self, val* p0) {
3170 val* var /* : Rope */;
3171 val* var1 /* : ImmutableRope */;
3172 var1 = ropes__ImmutableRope___43d(self, p0);
3173 var = var1;
3174 RET_LABEL:;
3175 return var;
3176 }
3177 /* method ropes#ImmutableRope#multi_concat for (self: ImmutableRope, Array[Rope]): ImmutableRope */
3178 val* ropes__ImmutableRope__multi_concat(val* self, val* p0) {
3179 val* var /* : ImmutableRope */;
3180 val* var_ropes /* var ropes: Array[Rope] */;
3181 val* var1 /* : Rope */;
3182 short int var2 /* : Bool */;
3183 int cltype;
3184 int idtype;
3185 val* var3 /* : ImmutableRope */;
3186 var_ropes = p0;
3187 var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_ropes__ImmutableRope__multi_concat]))(self, p0) /* multi_concat on <self:ImmutableRope>*/;
3188 /* <var1:Rope> isa BufferRope */
3189 cltype = type_ropes__BufferRope.color;
3190 idtype = type_ropes__BufferRope.id;
3191 if(cltype >= var1->type->table_size) {
3192 var2 = 0;
3193 } else {
3194 var2 = var1->type->type_table[cltype] == idtype;
3195 }
3196 if (!var2) {
3197 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 669);
3198 exit(1);
3199 }
3200 var3 = ((val* (*)(val*))(var1->class->vft[COLOR_ropes__BufferRope__to_immutable]))(var1) /* to_immutable on <var1:Rope(BufferRope)>*/;
3201 var = var3;
3202 goto RET_LABEL;
3203 RET_LABEL:;
3204 return var;
3205 }
3206 /* method ropes#ImmutableRope#multi_concat for (self: Object, Array[Rope]): Rope */
3207 val* VIRTUAL_ropes__ImmutableRope__multi_concat(val* self, val* p0) {
3208 val* var /* : Rope */;
3209 val* var1 /* : ImmutableRope */;
3210 var1 = ropes__ImmutableRope__multi_concat(self, p0);
3211 var = var1;
3212 RET_LABEL:;
3213 return var;
3214 }
3215 /* method ropes#CharRopeView#target for (self: CharRopeView): Rope */
3216 val* ropes__CharRopeView__target(val* self) {
3217 val* var /* : Rope */;
3218 val* var1 /* : Rope */;
3219 var1 = self->attrs[COLOR_ropes__CharRopeView___64dtarget].val; /* @target on <self:CharRopeView> */
3220 if (var1 == NULL) {
3221 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @target", "lib/standard/ropes.nit", 681);
3222 exit(1);
3223 }
3224 var = var1;
3225 RET_LABEL:;
3226 return var;
3227 }
3228 /* method ropes#CharRopeView#target for (self: Object): Rope */
3229 val* VIRTUAL_ropes__CharRopeView__target(val* self) {
3230 val* var /* : Rope */;
3231 val* var1 /* : Rope */;
3232 var1 = ropes__CharRopeView__target(self);
3233 var = var1;
3234 RET_LABEL:;
3235 return var;
3236 }
3237 /* method ropes#CharRopeView#target= for (self: CharRopeView, Rope) */
3238 void ropes__CharRopeView__target_61d(val* self, val* p0) {
3239 self->attrs[COLOR_ropes__CharRopeView___64dtarget].val = p0; /* @target on <self:CharRopeView> */
3240 RET_LABEL:;
3241 }
3242 /* method ropes#CharRopeView#target= for (self: Object, Rope) */
3243 void VIRTUAL_ropes__CharRopeView__target_61d(val* self, val* p0) {
3244 ropes__CharRopeView__target_61d(self, p0);
3245 RET_LABEL:;
3246 }
3247 /* method ropes#CharRopeView#init for (self: CharRopeView, Rope) */
3248 void ropes__CharRopeView__init(val* self, val* p0) {
3249 val* var_tgt /* var tgt: Rope */;
3250 var_tgt = p0;
3251 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__CharRopeView__target_61d]))(self, var_tgt) /* target= on <self:CharRopeView>*/;
3252 RET_LABEL:;
3253 }
3254 /* method ropes#CharRopeView#init for (self: Object, Rope) */
3255 void VIRTUAL_ropes__CharRopeView__init(val* self, val* p0) {
3256 ropes__CharRopeView__init(self, p0);
3257 RET_LABEL:;
3258 }
3259 /* method ropes#CharRopeView#[] for (self: CharRopeView, Int): Char */
3260 char ropes__CharRopeView___91d_93d(val* self, long p0) {
3261 char var /* : Char */;
3262 long var_position /* var position: Int */;
3263 val* var1 /* : Rope */;
3264 val* var2 /* : TupleLeafNodePos */;
3265 val* var_tuple /* var tuple: TupleLeafNodePos */;
3266 val* var3 /* : LeafNode */;
3267 val* var4 /* : String */;
3268 long var5 /* : Int */;
3269 val* var6 /* : nullable Object */;
3270 char var7 /* : Char */;
3271 var_position = p0;
3272 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__CharRopeView__target]))(self) /* target on <self:CharRopeView>*/;
3273 var2 = ((val* (*)(val*, long))(var1->class->vft[COLOR_ropes__Rope__get_node_for_pos]))(var1, var_position) /* get_node_for_pos on <var1:Rope>*/;
3274 var_tuple = var2;
3275 var3 = ((val* (*)(val*))(var_tuple->class->vft[COLOR_ropes__TupleLeafNodePos__curr_node]))(var_tuple) /* curr_node on <var_tuple:TupleLeafNodePos>*/;
3276 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_ropes__LeafNode__value]))(var3) /* value on <var3:LeafNode>*/;
3277 var5 = ((long (*)(val*))(var_tuple->class->vft[COLOR_ropes__TupleLeafNodePos__corrected_pos]))(var_tuple) /* corrected_pos on <var_tuple:TupleLeafNodePos>*/;
3278 var6 = ((val* (*)(val*, long))(var4->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var4, var5) /* [] on <var4:String>*/;
3279 var7 = ((struct instance_kernel__Char*)var6)->value; /* autounbox from nullable Object to Char */;
3280 var = var7;
3281 goto RET_LABEL;
3282 RET_LABEL:;
3283 return var;
3284 }
3285 /* method ropes#CharRopeView#[] for (self: Object, Int): nullable Object */
3286 val* VIRTUAL_ropes__CharRopeView___91d_93d(val* self, long p0) {
3287 val* var /* : nullable Object */;
3288 char var1 /* : Char */;
3289 val* var2 /* : nullable Object */;
3290 var1 = ropes__CharRopeView___91d_93d(self, p0);
3291 var2 = BOX_kernel__Char(var1); /* autobox from Char to nullable Object */
3292 var = var2;
3293 RET_LABEL:;
3294 return var;
3295 }
3296 /* method ropes#CharRopeView#first for (self: CharRopeView): Char */
3297 char ropes__CharRopeView__first(val* self) {
3298 char var /* : Char */;
3299 long var1 /* : Int */;
3300 val* var2 /* : nullable Object */;
3301 char var3 /* : Char */;
3302 var1 = 0;
3303 var2 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var1) /* [] on <self:CharRopeView>*/;
3304 var3 = ((struct instance_kernel__Char*)var2)->value; /* autounbox from nullable Object to Char */;
3305 var = var3;
3306 goto RET_LABEL;
3307 RET_LABEL:;
3308 return var;
3309 }
3310 /* method ropes#CharRopeView#first for (self: Object): nullable Object */
3311 val* VIRTUAL_ropes__CharRopeView__first(val* self) {
3312 val* var /* : nullable Object */;
3313 char var1 /* : Char */;
3314 val* var2 /* : nullable Object */;
3315 var1 = ropes__CharRopeView__first(self);
3316 var2 = BOX_kernel__Char(var1); /* autobox from Char to nullable Object */
3317 var = var2;
3318 RET_LABEL:;
3319 return var;
3320 }
3321 /* method ropes#CharRopeView#index_of for (self: CharRopeView, Char): Int */
3322 long ropes__CharRopeView__index_of(val* self, char p0) {
3323 long var /* : Int */;
3324 short int var1 /* : Bool */;
3325 int cltype;
3326 int idtype;
3327 char var_char /* var char: Char */;
3328 val* var2 /* : RopeCharIterator */;
3329 val* var3 /* : Rope */;
3330 val* var_intern_iter /* var intern_iter: RopeCharIterator */;
3331 short int var4 /* : Bool */;
3332 val* var5 /* : nullable Object */;
3333 short int var6 /* : Bool */;
3334 short int var8 /* : Bool */;
3335 char var9 /* : Char */;
3336 long var10 /* : Int */;
3337 long var11 /* : Int */;
3338 long var12 /* : Int */;
3339 long var14 /* : Int */;
3340 /* Covariant cast for argument 0 (char) <p0:Char> isa SequenceRead#0 */
3341 /* <p0:Char> isa SequenceRead#0 */
3342 var1 = 1; /* easy <p0:Char> isa SequenceRead#0*/
3343 if (!var1) {
3344 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 697);
3345 exit(1);
3346 }
3347 var_char = p0;
3348 var2 = NEW_ropes__RopeCharIterator(&type_ropes__RopeCharIterator);
3349 var3 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__CharRopeView__target]))(self) /* target on <self:CharRopeView>*/;
3350 ((void (*)(val*, val*))(var2->class->vft[COLOR_ropes__RopeCharIterator__init]))(var2, var3) /* init on <var2:RopeCharIterator>*/;
3351 CHECK_NEW_ropes__RopeCharIterator(var2);
3352 var_intern_iter = var2;
3353 for(;;) {
3354 var4 = ((short int (*)(val*))(var_intern_iter->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_intern_iter) /* is_ok on <var_intern_iter:RopeCharIterator>*/;
3355 if (!var4) break;
3356 var5 = ((val* (*)(val*))(var_intern_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_intern_iter) /* item on <var_intern_iter:RopeCharIterator>*/;
3357 { /* Inline kernel#Char#== (var5,var_char) */
3358 var8 = (var5 != NULL) && (var5->class == &class_kernel__Char);
3359 if (var8) {
3360 var9 = ((struct instance_kernel__Char*)var5)->value; /* autounbox from nullable Object to Char */;
3361 var8 = (var9 == var_char);
3362 }
3363 var6 = var8;
3364 goto RET_LABEL7;
3365 RET_LABEL7:(void)0;
3366 }
3367 if (var6){
3368 var10 = ((long (*)(val*))(var_intern_iter->class->vft[COLOR_abstract_collection__IndexedIterator__index]))(var_intern_iter) /* index on <var_intern_iter:RopeCharIterator>*/;
3369 var = var10;
3370 goto RET_LABEL;
3371 } else {
3372 }
3373 ((void (*)(val*))(var_intern_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_intern_iter) /* next on <var_intern_iter:RopeCharIterator>*/;
3374 CONTINUE_label: (void)0;
3375 }
3376 BREAK_label: (void)0;
3377 var11 = 1;
3378 { /* Inline kernel#Int#unary - (var11) */
3379 var14 = -var11;
3380 var12 = var14;
3381 goto RET_LABEL13;
3382 RET_LABEL13:(void)0;
3383 }
3384 var = var12;
3385 goto RET_LABEL;
3386 RET_LABEL:;
3387 return var;
3388 }
3389 /* method ropes#CharRopeView#index_of for (self: Object, nullable Object): Int */
3390 long VIRTUAL_ropes__CharRopeView__index_of(val* self, val* p0) {
3391 long var /* : Int */;
3392 long var1 /* : Int */;
3393 char var2 /* : Char */;
3394 var2 = ((struct instance_kernel__Char*)p0)->value; /* autounbox from nullable Object to Char */;
3395 var1 = ropes__CharRopeView__index_of(self, var2);
3396 var = var1;
3397 RET_LABEL:;
3398 return var;
3399 }
3400 /* method ropes#CharRopeView#iterator for (self: CharRopeView): Iterator[Char] */
3401 val* ropes__CharRopeView__iterator(val* self) {
3402 val* var /* : Iterator[Char] */;
3403 val* var1 /* : RopeCharIterator */;
3404 val* var2 /* : Rope */;
3405 var1 = NEW_ropes__RopeCharIterator(&type_ropes__RopeCharIterator);
3406 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__CharRopeView__target]))(self) /* target on <self:CharRopeView>*/;
3407 ((void (*)(val*, val*))(var1->class->vft[COLOR_ropes__RopeCharIterator__init]))(var1, var2) /* init on <var1:RopeCharIterator>*/;
3408 CHECK_NEW_ropes__RopeCharIterator(var1);
3409 var = var1;
3410 goto RET_LABEL;
3411 RET_LABEL:;
3412 return var;
3413 }
3414 /* method ropes#CharRopeView#iterator for (self: Object): Iterator[nullable Object] */
3415 val* VIRTUAL_ropes__CharRopeView__iterator(val* self) {
3416 val* var /* : Iterator[nullable Object] */;
3417 val* var1 /* : Iterator[Char] */;
3418 var1 = ropes__CharRopeView__iterator(self);
3419 var = var1;
3420 RET_LABEL:;
3421 return var;
3422 }
3423 /* method ropes#CharRopeView#last for (self: CharRopeView): Char */
3424 char ropes__CharRopeView__last(val* self) {
3425 char var /* : Char */;
3426 long var1 /* : Int */;
3427 long var2 /* : Int */;
3428 long var3 /* : Int */;
3429 long var5 /* : Int */;
3430 val* var6 /* : nullable Object */;
3431 char var7 /* : Char */;
3432 var1 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:CharRopeView>*/;
3433 var2 = 1;
3434 { /* Inline kernel#Int#- (var1,var2) */
3435 var5 = var1 - var2;
3436 var3 = var5;
3437 goto RET_LABEL4;
3438 RET_LABEL4:(void)0;
3439 }
3440 var6 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var3) /* [] on <self:CharRopeView>*/;
3441 var7 = ((struct instance_kernel__Char*)var6)->value; /* autounbox from nullable Object to Char */;
3442 var = var7;
3443 goto RET_LABEL;
3444 RET_LABEL:;
3445 return var;
3446 }
3447 /* method ropes#CharRopeView#last for (self: Object): nullable Object */
3448 val* VIRTUAL_ropes__CharRopeView__last(val* self) {
3449 val* var /* : nullable Object */;
3450 char var1 /* : Char */;
3451 val* var2 /* : nullable Object */;
3452 var1 = ropes__CharRopeView__last(self);
3453 var2 = BOX_kernel__Char(var1); /* autobox from Char to nullable Object */
3454 var = var2;
3455 RET_LABEL:;
3456 return var;
3457 }
3458 /* method ropes#CharRopeView#length for (self: CharRopeView): Int */
3459 long ropes__CharRopeView__length(val* self) {
3460 long var /* : Int */;
3461 val* var1 /* : Rope */;
3462 long var2 /* : Int */;
3463 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__CharRopeView__target]))(self) /* target on <self:CharRopeView>*/;
3464 var2 = ((long (*)(val*))(var1->class->vft[COLOR_ropes__Rope__length]))(var1) /* length on <var1:Rope>*/;
3465 var = var2;
3466 goto RET_LABEL;
3467 RET_LABEL:;
3468 return var;
3469 }
3470 /* method ropes#CharRopeView#length for (self: Object): Int */
3471 long VIRTUAL_ropes__CharRopeView__length(val* self) {
3472 long var /* : Int */;
3473 long var1 /* : Int */;
3474 var1 = ropes__CharRopeView__length(self);
3475 var = var1;
3476 RET_LABEL:;
3477 return var;
3478 }
3479 /* method ropes#CharRopeView#count for (self: CharRopeView, Char): Int */
3480 long ropes__CharRopeView__count(val* self, char p0) {
3481 long var /* : Int */;
3482 short int var1 /* : Bool */;
3483 int cltype;
3484 int idtype;
3485 char var_item /* var item: Char */;
3486 long var2 /* : Int */;
3487 long var_count /* var count: Int */;
3488 val* var3 /* : Iterator[nullable Object] */;
3489 val* var_iter /* var iter: Iterator[Char] */;
3490 val* var4 /* : Iterator[nullable Object] */;
3491 short int var5 /* : Bool */;
3492 val* var6 /* : nullable Object */;
3493 char var_i /* var i: Char */;
3494 char var7 /* : Char */;
3495 short int var8 /* : Bool */;
3496 short int var10 /* : Bool */;
3497 long var11 /* : Int */;
3498 long var12 /* : Int */;
3499 long var14 /* : Int */;
3500 /* Covariant cast for argument 0 (item) <p0:Char> isa Collection#0 */
3501 /* <p0:Char> isa Collection#0 */
3502 var1 = 1; /* easy <p0:Char> isa Collection#0*/
3503 if (!var1) {
3504 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 715);
3505 exit(1);
3506 }
3507 var_item = p0;
3508 var2 = 0;
3509 var_count = var2;
3510 var3 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:CharRopeView>*/;
3511 var_iter = var3;
3512 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:CharRopeView>*/;
3513 for(;;) {
3514 var5 = ((short int (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var4) /* is_ok on <var4:Iterator[nullable Object]>*/;
3515 if(!var5) break;
3516 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__item]))(var4) /* item on <var4:Iterator[nullable Object]>*/;
3517 var7 = ((struct instance_kernel__Char*)var6)->value; /* autounbox from nullable Object to Char */;
3518 var_i = var7;
3519 { /* Inline kernel#Char#== (var_i,var_item) */
3520 var10 = var_i == var_item;
3521 var8 = var10;
3522 goto RET_LABEL9;
3523 RET_LABEL9:(void)0;
3524 }
3525 if (var8){
3526 var11 = 1;
3527 { /* Inline kernel#Int#+ (var_count,var11) */
3528 var14 = var_count + var11;
3529 var12 = var14;
3530 goto RET_LABEL13;
3531 RET_LABEL13:(void)0;
3532 }
3533 var_count = var12;
3534 } else {
3535 }
3536 CONTINUE_label: (void)0;
3537 ((void (*)(val*))(var4->class->vft[COLOR_abstract_collection__Iterator__next]))(var4) /* next on <var4:Iterator[nullable Object]>*/;
3538 }
3539 BREAK_label: (void)0;
3540 var = var_count;
3541 goto RET_LABEL;
3542 RET_LABEL:;
3543 return var;
3544 }
3545 /* method ropes#CharRopeView#count for (self: Object, nullable Object): Int */
3546 long VIRTUAL_ropes__CharRopeView__count(val* self, val* p0) {
3547 long var /* : Int */;
3548 long var1 /* : Int */;
3549 char var2 /* : Char */;
3550 var2 = ((struct instance_kernel__Char*)p0)->value; /* autounbox from nullable Object to Char */;
3551 var1 = ropes__CharRopeView__count(self, var2);
3552 var = var1;
3553 RET_LABEL:;
3554 return var;
3555 }
3556 /* method ropes#CharRopeView#has_only for (self: CharRopeView, Char): Bool */
3557 short int ropes__CharRopeView__has_only(val* self, char p0) {
3558 short int var /* : Bool */;
3559 short int var1 /* : Bool */;
3560 int cltype;
3561 int idtype;
3562 char var_item /* var item: Char */;
3563 val* var2 /* : Iterator[nullable Object] */;
3564 short int var3 /* : Bool */;
3565 val* var4 /* : nullable Object */;
3566 char var_i /* var i: Char */;
3567 char var5 /* : Char */;
3568 short int var6 /* : Bool */;
3569 short int var8 /* : Bool */;
3570 short int var9 /* : Bool */;
3571 short int var10 /* : Bool */;
3572 short int var11 /* : Bool */;
3573 /* Covariant cast for argument 0 (item) <p0:Char> isa Collection#0 */
3574 /* <p0:Char> isa Collection#0 */
3575 var1 = 1; /* easy <p0:Char> isa Collection#0*/
3576 if (!var1) {
3577 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 727);
3578 exit(1);
3579 }
3580 var_item = p0;
3581 var2 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:CharRopeView>*/;
3582 for(;;) {
3583 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
3584 if(!var3) break;
3585 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
3586 var5 = ((struct instance_kernel__Char*)var4)->value; /* autounbox from nullable Object to Char */;
3587 var_i = var5;
3588 { /* Inline kernel#Char#!= (var_i,var_item) */
3589 var8 = var_i == var_item;
3590 var9 = !var8;
3591 var6 = var9;
3592 goto RET_LABEL7;
3593 RET_LABEL7:(void)0;
3594 }
3595 if (var6){
3596 var10 = 0;
3597 var = var10;
3598 goto RET_LABEL;
3599 } else {
3600 }
3601 CONTINUE_label: (void)0;
3602 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
3603 }
3604 BREAK_label: (void)0;
3605 var11 = 1;
3606 var = var11;
3607 goto RET_LABEL;
3608 RET_LABEL:;
3609 return var;
3610 }
3611 /* method ropes#CharRopeView#has_only for (self: Object, nullable Object): Bool */
3612 short int VIRTUAL_ropes__CharRopeView__has_only(val* self, val* p0) {
3613 short int var /* : Bool */;
3614 short int var1 /* : Bool */;
3615 char var2 /* : Char */;
3616 var2 = ((struct instance_kernel__Char*)p0)->value; /* autounbox from nullable Object to Char */;
3617 var1 = ropes__CharRopeView__has_only(self, var2);
3618 var = var1;
3619 RET_LABEL:;
3620 return var;
3621 }
3622 /* method ropes#CharRopeView#is_empty for (self: CharRopeView): Bool */
3623 short int ropes__CharRopeView__is_empty(val* self) {
3624 short int var /* : Bool */;
3625 long var1 /* : Int */;
3626 long var2 /* : Int */;
3627 short int var3 /* : Bool */;
3628 short int var5 /* : Bool */;
3629 var1 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:CharRopeView>*/;
3630 var2 = 0;
3631 { /* Inline kernel#Int#== (var1,var2) */
3632 var5 = var1 == var2;
3633 var3 = var5;
3634 goto RET_LABEL4;
3635 RET_LABEL4:(void)0;
3636 }
3637 var = var3;
3638 goto RET_LABEL;
3639 RET_LABEL:;
3640 return var;
3641 }
3642 /* method ropes#CharRopeView#is_empty for (self: Object): Bool */
3643 short int VIRTUAL_ropes__CharRopeView__is_empty(val* self) {
3644 short int var /* : Bool */;
3645 short int var1 /* : Bool */;
3646 var1 = ropes__CharRopeView__is_empty(self);
3647 var = var1;
3648 RET_LABEL:;
3649 return var;
3650 }
3651 /* method ropes#CharRopeView#to_a for (self: CharRopeView): Array[Char] */
3652 val* ropes__CharRopeView__to_a(val* self) {
3653 val* var /* : Array[Char] */;
3654 val* var1 /* : String */;
3655 val* var2 /* : Array[nullable Object] */;
3656 var1 = ((val* (*)(val*))(self->class->vft[COLOR_string__Object__to_s]))(self) /* to_s on <self:CharRopeView>*/;
3657 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_array__Collection__to_a]))(var1) /* to_a on <var1:String>*/;
3658 var = var2;
3659 goto RET_LABEL;
3660 RET_LABEL:;
3661 return var;
3662 }
3663 /* method ropes#CharRopeView#to_a for (self: Object): Array[nullable Object] */
3664 val* VIRTUAL_ropes__CharRopeView__to_a(val* self) {
3665 val* var /* : Array[nullable Object] */;
3666 val* var1 /* : Array[Char] */;
3667 var1 = ropes__CharRopeView__to_a(self);
3668 var = var1;
3669 RET_LABEL:;
3670 return var;
3671 }
3672 /* method ropes#CharRopeView#to_s for (self: CharRopeView): String */
3673 val* ropes__CharRopeView__to_s(val* self) {
3674 val* var /* : String */;
3675 val* var1 /* : Rope */;
3676 val* var2 /* : String */;
3677 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__CharRopeView__target]))(self) /* target on <self:CharRopeView>*/;
3678 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_string__Object__to_s]))(var1) /* to_s on <var1:Rope>*/;
3679 var = var2;
3680 goto RET_LABEL;
3681 RET_LABEL:;
3682 return var;
3683 }
3684 /* method ropes#CharRopeView#to_s for (self: Object): String */
3685 val* VIRTUAL_ropes__CharRopeView__to_s(val* self) {
3686 val* var /* : String */;
3687 val* var1 /* : String */;
3688 var1 = ropes__CharRopeView__to_s(self);
3689 var = var1;
3690 RET_LABEL:;
3691 return var;
3692 }
3693 /* method ropes#CharRopeView#== for (self: CharRopeView, nullable Object): Bool */
3694 short int ropes__CharRopeView___61d_61d(val* self, val* p0) {
3695 short int var /* : Bool */;
3696 val* var_other /* var other: nullable Object */;
3697 short int var1 /* : Bool */;
3698 int cltype;
3699 int idtype;
3700 short int var2 /* : Bool */;
3701 short int var3 /* : Bool */;
3702 long var4 /* : Int */;
3703 short int var5 /* : Bool */;
3704 short int var7 /* : Bool */;
3705 long var8 /* : Int */;
3706 short int var9 /* : Bool */;
3707 short int var10 /* : Bool */;
3708 val* var11 /* : Iterator[nullable Object] */;
3709 val* var_iter /* var iter: IndexedIterator[Char] */;
3710 val* var12 /* : Iterator[nullable Object] */;
3711 short int var13 /* : Bool */;
3712 val* var14 /* : nullable Object */;
3713 char var_i /* var i: Char */;
3714 char var15 /* : Char */;
3715 val* var16 /* : nullable Object */;
3716 short int var17 /* : Bool */;
3717 short int var19 /* : Bool */;
3718 char var20 /* : Char */;
3719 short int var21 /* : Bool */;
3720 short int var22 /* : Bool */;
3721 short int var23 /* : Bool */;
3722 var_other = p0;
3723 /* <var_other:nullable Object> isa SequenceRead[Char] */
3724 cltype = type_abstract_collection__SequenceReadkernel__Char.color;
3725 idtype = type_abstract_collection__SequenceReadkernel__Char.id;
3726 if(var_other == NULL) {
3727 var1 = 0;
3728 } else {
3729 if(cltype >= var_other->type->table_size) {
3730 var1 = 0;
3731 } else {
3732 var1 = var_other->type->type_table[cltype] == idtype;
3733 }
3734 }
3735 var2 = !var1;
3736 if (var2){
3737 var3 = 0;
3738 var = var3;
3739 goto RET_LABEL;
3740 } else {
3741 }
3742 var4 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:CharRopeView>*/;
3743 { /* Inline kernel#Int#!= (var4,var_other) */
3744 var7 = (var_other != NULL) && (var_other->class == &class_kernel__Int);
3745 if (var7) {
3746 var8 = ((struct instance_kernel__Int*)var_other)->value; /* autounbox from nullable Object to Int */;
3747 var7 = (var8 == var4);
3748 }
3749 var9 = !var7;
3750 var5 = var9;
3751 goto RET_LABEL6;
3752 RET_LABEL6:(void)0;
3753 }
3754 if (var5){
3755 var10 = 0;
3756 var = var10;
3757 goto RET_LABEL;
3758 } else {
3759 }
3760 var11 = ((val* (*)(val*))(var_other->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_other) /* iterator on <var_other:nullable Object(SequenceRead[Char])>*/;
3761 var_iter = var11;
3762 var12 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__iterator]))(self) /* iterator on <self:CharRopeView>*/;
3763 for(;;) {
3764 var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var12) /* is_ok on <var12:Iterator[nullable Object]>*/;
3765 if(!var13) break;
3766 var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__item]))(var12) /* item on <var12:Iterator[nullable Object]>*/;
3767 var15 = ((struct instance_kernel__Char*)var14)->value; /* autounbox from nullable Object to Char */;
3768 var_i = var15;
3769 var16 = ((val* (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__item]))(var_iter) /* item on <var_iter:IndexedIterator[Char]>*/;
3770 { /* Inline kernel#Char#!= (var_i,var16) */
3771 var19 = (var16 != NULL) && (var16->class == &class_kernel__Char);
3772 if (var19) {
3773 var20 = ((struct instance_kernel__Char*)var16)->value; /* autounbox from nullable Object to Char */;
3774 var19 = (var20 == var_i);
3775 }
3776 var21 = !var19;
3777 var17 = var21;
3778 goto RET_LABEL18;
3779 RET_LABEL18:(void)0;
3780 }
3781 if (var17){
3782 var22 = 0;
3783 var = var22;
3784 goto RET_LABEL;
3785 } else {
3786 }
3787 ((void (*)(val*))(var_iter->class->vft[COLOR_abstract_collection__Iterator__next]))(var_iter) /* next on <var_iter:IndexedIterator[Char]>*/;
3788 CONTINUE_label: (void)0;
3789 ((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__next]))(var12) /* next on <var12:Iterator[nullable Object]>*/;
3790 }
3791 BREAK_label: (void)0;
3792 var23 = 1;
3793 var = var23;
3794 goto RET_LABEL;
3795 RET_LABEL:;
3796 return var;
3797 }
3798 /* method ropes#CharRopeView#== for (self: Object, nullable Object): Bool */
3799 short int VIRTUAL_ropes__CharRopeView___61d_61d(val* self, val* p0) {
3800 short int var /* : Bool */;
3801 short int var1 /* : Bool */;
3802 var1 = ropes__CharRopeView___61d_61d(self, p0);
3803 var = var1;
3804 RET_LABEL:;
3805 return var;
3806 }
3807 /* method ropes#TupleVisitNode#init for (self: TupleVisitNode, ConcatNode) */
3808 void ropes__TupleVisitNode__init(val* self, val* p0) {
3809 val* var_tgt /* var tgt: ConcatNode */;
3810 var_tgt = p0;
3811 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__TupleVisitNode__node_61d]))(self, var_tgt) /* node= on <self:TupleVisitNode>*/;
3812 RET_LABEL:;
3813 }
3814 /* method ropes#TupleVisitNode#init for (self: Object, ConcatNode) */
3815 void VIRTUAL_ropes__TupleVisitNode__init(val* self, val* p0) {
3816 ropes__TupleVisitNode__init(self, p0);
3817 RET_LABEL:;
3818 }
3819 /* method ropes#TupleVisitNode#node for (self: TupleVisitNode): ConcatNode */
3820 val* ropes__TupleVisitNode__node(val* self) {
3821 val* var /* : ConcatNode */;
3822 val* var1 /* : ConcatNode */;
3823 var1 = self->attrs[COLOR_ropes__TupleVisitNode___64dnode].val; /* @node on <self:TupleVisitNode> */
3824 if (var1 == NULL) {
3825 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @node", "lib/standard/ropes.nit", 775);
3826 exit(1);
3827 }
3828 var = var1;
3829 RET_LABEL:;
3830 return var;
3831 }
3832 /* method ropes#TupleVisitNode#node for (self: Object): ConcatNode */
3833 val* VIRTUAL_ropes__TupleVisitNode__node(val* self) {
3834 val* var /* : ConcatNode */;
3835 val* var1 /* : ConcatNode */;
3836 var1 = ropes__TupleVisitNode__node(self);
3837 var = var1;
3838 RET_LABEL:;
3839 return var;
3840 }
3841 /* method ropes#TupleVisitNode#node= for (self: TupleVisitNode, ConcatNode) */
3842 void ropes__TupleVisitNode__node_61d(val* self, val* p0) {
3843 self->attrs[COLOR_ropes__TupleVisitNode___64dnode].val = p0; /* @node on <self:TupleVisitNode> */
3844 RET_LABEL:;
3845 }
3846 /* method ropes#TupleVisitNode#node= for (self: Object, ConcatNode) */
3847 void VIRTUAL_ropes__TupleVisitNode__node_61d(val* self, val* p0) {
3848 ropes__TupleVisitNode__node_61d(self, p0);
3849 RET_LABEL:;
3850 }
3851 /* method ropes#TupleVisitNode#left_visited for (self: TupleVisitNode): Bool */
3852 short int ropes__TupleVisitNode__left_visited(val* self) {
3853 short int var /* : Bool */;
3854 short int var1 /* : Bool */;
3855 var1 = self->attrs[COLOR_ropes__TupleVisitNode___64dleft_visited].s; /* @left_visited on <self:TupleVisitNode> */
3856 var = var1;
3857 RET_LABEL:;
3858 return var;
3859 }
3860 /* method ropes#TupleVisitNode#left_visited for (self: Object): Bool */
3861 short int VIRTUAL_ropes__TupleVisitNode__left_visited(val* self) {
3862 short int var /* : Bool */;
3863 short int var1 /* : Bool */;
3864 var1 = ropes__TupleVisitNode__left_visited(self);
3865 var = var1;
3866 RET_LABEL:;
3867 return var;
3868 }
3869 /* method ropes#TupleVisitNode#left_visited= for (self: TupleVisitNode, Bool) */
3870 void ropes__TupleVisitNode__left_visited_61d(val* self, short int p0) {
3871 self->attrs[COLOR_ropes__TupleVisitNode___64dleft_visited].s = p0; /* @left_visited on <self:TupleVisitNode> */
3872 RET_LABEL:;
3873 }
3874 /* method ropes#TupleVisitNode#left_visited= for (self: Object, Bool) */
3875 void VIRTUAL_ropes__TupleVisitNode__left_visited_61d(val* self, short int p0) {
3876 ropes__TupleVisitNode__left_visited_61d(self, p0);
3877 RET_LABEL:;
3878 }
3879 /* method ropes#TupleVisitNode#right_visited for (self: TupleVisitNode): Bool */
3880 short int ropes__TupleVisitNode__right_visited(val* self) {
3881 short int var /* : Bool */;
3882 short int var1 /* : Bool */;
3883 var1 = self->attrs[COLOR_ropes__TupleVisitNode___64dright_visited].s; /* @right_visited on <self:TupleVisitNode> */
3884 var = var1;
3885 RET_LABEL:;
3886 return var;
3887 }
3888 /* method ropes#TupleVisitNode#right_visited for (self: Object): Bool */
3889 short int VIRTUAL_ropes__TupleVisitNode__right_visited(val* self) {
3890 short int var /* : Bool */;
3891 short int var1 /* : Bool */;
3892 var1 = ropes__TupleVisitNode__right_visited(self);
3893 var = var1;
3894 RET_LABEL:;
3895 return var;
3896 }
3897 /* method ropes#TupleVisitNode#right_visited= for (self: TupleVisitNode, Bool) */
3898 void ropes__TupleVisitNode__right_visited_61d(val* self, short int p0) {
3899 self->attrs[COLOR_ropes__TupleVisitNode___64dright_visited].s = p0; /* @right_visited on <self:TupleVisitNode> */
3900 RET_LABEL:;
3901 }
3902 /* method ropes#TupleVisitNode#right_visited= for (self: Object, Bool) */
3903 void VIRTUAL_ropes__TupleVisitNode__right_visited_61d(val* self, short int p0) {
3904 ropes__TupleVisitNode__right_visited_61d(self, p0);
3905 RET_LABEL:;
3906 }
3907 /* method ropes#RopeIterator#target for (self: RopeIterator): Rope */
3908 val* ropes__RopeIterator__target(val* self) {
3909 val* var /* : Rope */;
3910 val* var1 /* : Rope */;
3911 var1 = self->attrs[COLOR_ropes__RopeIterator___target].val; /* _target on <self:RopeIterator> */
3912 if (var1 == NULL) {
3913 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _target", "lib/standard/ropes.nit", 789);
3914 exit(1);
3915 }
3916 var = var1;
3917 goto RET_LABEL;
3918 RET_LABEL:;
3919 return var;
3920 }
3921 /* method ropes#RopeIterator#target for (self: Object): Rope */
3922 val* VIRTUAL_ropes__RopeIterator__target(val* self) {
3923 val* var /* : Rope */;
3924 val* var1 /* : Rope */;
3925 var1 = ropes__RopeIterator__target(self);
3926 var = var1;
3927 RET_LABEL:;
3928 return var;
3929 }
3930 /* method ropes#RopeIterator#pos for (self: RopeIterator): Int */
3931 long ropes__RopeIterator__pos(val* self) {
3932 long var /* : Int */;
3933 long var1 /* : Int */;
3934 var1 = self->attrs[COLOR_ropes__RopeIterator___64dpos].l; /* @pos on <self:RopeIterator> */
3935 var = var1;
3936 RET_LABEL:;
3937 return var;
3938 }
3939 /* method ropes#RopeIterator#pos for (self: Object): Int */
3940 long VIRTUAL_ropes__RopeIterator__pos(val* self) {
3941 long var /* : Int */;
3942 long var1 /* : Int */;
3943 var1 = ropes__RopeIterator__pos(self);
3944 var = var1;
3945 RET_LABEL:;
3946 return var;
3947 }
3948 /* method ropes#RopeIterator#pos= for (self: RopeIterator, Int) */
3949 void ropes__RopeIterator__pos_61d(val* self, long p0) {
3950 self->attrs[COLOR_ropes__RopeIterator___64dpos].l = p0; /* @pos on <self:RopeIterator> */
3951 RET_LABEL:;
3952 }
3953 /* method ropes#RopeIterator#pos= for (self: Object, Int) */
3954 void VIRTUAL_ropes__RopeIterator__pos_61d(val* self, long p0) {
3955 ropes__RopeIterator__pos_61d(self, p0);
3956 RET_LABEL:;
3957 }
3958 /* method ropes#RopeIterator#init for (self: RopeIterator, Rope) */
3959 void ropes__RopeIterator__init(val* self, val* p0) {
3960 val* var_tgt /* var tgt: Rope */;
3961 var_tgt = p0;
3962 self->attrs[COLOR_ropes__RopeIterator___target].val = var_tgt; /* _target on <self:RopeIterator> */
3963 RET_LABEL:;
3964 }
3965 /* method ropes#RopeIterator#init for (self: Object, Rope) */
3966 void VIRTUAL_ropes__RopeIterator__init(val* self, val* p0) {
3967 ropes__RopeIterator__init(self, p0);
3968 RET_LABEL:;
3969 }
3970 /* method ropes#RopeIterator#with_index for (self: RopeIterator, Rope, Int) */
3971 void ropes__RopeIterator__with_index(val* self, val* p0, long p1) {
3972 val* var_tgt /* var tgt: Rope */;
3973 long var_index /* var index: Int */;
3974 var_tgt = p0;
3975 var_index = p1;
3976 self->attrs[COLOR_ropes__RopeIterator___target].val = var_tgt; /* _target on <self:RopeIterator> */
3977 RET_LABEL:;
3978 }
3979 /* method ropes#RopeIterator#with_index for (self: Object, Rope, Int) */
3980 void VIRTUAL_ropes__RopeIterator__with_index(val* self, val* p0, long p1) {
3981 ropes__RopeIterator__with_index(self, p0, p1);
3982 RET_LABEL:;
3983 }
3984 /* method ropes#RopeCharIterator#sub_str_iter for (self: RopeCharIterator): DFSRopeLeafIterator */
3985 val* ropes__RopeCharIterator__sub_str_iter(val* self) {
3986 val* var /* : DFSRopeLeafIterator */;
3987 val* var1 /* : DFSRopeLeafIterator */;
3988 var1 = self->attrs[COLOR_ropes__RopeCharIterator___64dsub_str_iter].val; /* @sub_str_iter on <self:RopeCharIterator> */
3989 if (var1 == NULL) {
3990 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @sub_str_iter", "lib/standard/ropes.nit", 810);
3991 exit(1);
3992 }
3993 var = var1;
3994 RET_LABEL:;
3995 return var;
3996 }
3997 /* method ropes#RopeCharIterator#sub_str_iter for (self: Object): DFSRopeLeafIterator */
3998 val* VIRTUAL_ropes__RopeCharIterator__sub_str_iter(val* self) {
3999 val* var /* : DFSRopeLeafIterator */;
4000 val* var1 /* : DFSRopeLeafIterator */;
4001 var1 = ropes__RopeCharIterator__sub_str_iter(self);
4002 var = var1;
4003 RET_LABEL:;
4004 return var;
4005 }
4006 /* method ropes#RopeCharIterator#sub_str_iter= for (self: RopeCharIterator, DFSRopeLeafIterator) */
4007 void ropes__RopeCharIterator__sub_str_iter_61d(val* self, val* p0) {
4008 self->attrs[COLOR_ropes__RopeCharIterator___64dsub_str_iter].val = p0; /* @sub_str_iter on <self:RopeCharIterator> */
4009 RET_LABEL:;
4010 }
4011 /* method ropes#RopeCharIterator#sub_str_iter= for (self: Object, DFSRopeLeafIterator) */
4012 void VIRTUAL_ropes__RopeCharIterator__sub_str_iter_61d(val* self, val* p0) {
4013 ropes__RopeCharIterator__sub_str_iter_61d(self, p0);
4014 RET_LABEL:;
4015 }
4016 /* method ropes#RopeCharIterator#abs_pos for (self: RopeCharIterator): Int */
4017 long ropes__RopeCharIterator__abs_pos(val* self) {
4018 long var /* : Int */;
4019 long var1 /* : Int */;
4020 var1 = self->attrs[COLOR_ropes__RopeCharIterator___64dabs_pos].l; /* @abs_pos on <self:RopeCharIterator> */
4021 var = var1;
4022 RET_LABEL:;
4023 return var;
4024 }
4025 /* method ropes#RopeCharIterator#abs_pos for (self: Object): Int */
4026 long VIRTUAL_ropes__RopeCharIterator__abs_pos(val* self) {
4027 long var /* : Int */;
4028 long var1 /* : Int */;
4029 var1 = ropes__RopeCharIterator__abs_pos(self);
4030 var = var1;
4031 RET_LABEL:;
4032 return var;
4033 }
4034 /* method ropes#RopeCharIterator#abs_pos= for (self: RopeCharIterator, Int) */
4035 void ropes__RopeCharIterator__abs_pos_61d(val* self, long p0) {
4036 self->attrs[COLOR_ropes__RopeCharIterator___64dabs_pos].l = p0; /* @abs_pos on <self:RopeCharIterator> */
4037 RET_LABEL:;
4038 }
4039 /* method ropes#RopeCharIterator#abs_pos= for (self: Object, Int) */
4040 void VIRTUAL_ropes__RopeCharIterator__abs_pos_61d(val* self, long p0) {
4041 ropes__RopeCharIterator__abs_pos_61d(self, p0);
4042 RET_LABEL:;
4043 }
4044 /* method ropes#RopeCharIterator#sub_pos for (self: RopeCharIterator): Int */
4045 long ropes__RopeCharIterator__sub_pos(val* self) {
4046 long var /* : Int */;
4047 long var1 /* : Int */;
4048 var1 = self->attrs[COLOR_ropes__RopeCharIterator___64dsub_pos].l; /* @sub_pos on <self:RopeCharIterator> */
4049 var = var1;
4050 RET_LABEL:;
4051 return var;
4052 }
4053 /* method ropes#RopeCharIterator#sub_pos for (self: Object): Int */
4054 long VIRTUAL_ropes__RopeCharIterator__sub_pos(val* self) {
4055 long var /* : Int */;
4056 long var1 /* : Int */;
4057 var1 = ropes__RopeCharIterator__sub_pos(self);
4058 var = var1;
4059 RET_LABEL:;
4060 return var;
4061 }
4062 /* method ropes#RopeCharIterator#sub_pos= for (self: RopeCharIterator, Int) */
4063 void ropes__RopeCharIterator__sub_pos_61d(val* self, long p0) {
4064 self->attrs[COLOR_ropes__RopeCharIterator___64dsub_pos].l = p0; /* @sub_pos on <self:RopeCharIterator> */
4065 RET_LABEL:;
4066 }
4067 /* method ropes#RopeCharIterator#sub_pos= for (self: Object, Int) */
4068 void VIRTUAL_ropes__RopeCharIterator__sub_pos_61d(val* self, long p0) {
4069 ropes__RopeCharIterator__sub_pos_61d(self, p0);
4070 RET_LABEL:;
4071 }
4072 /* method ropes#RopeCharIterator#curr_substring for (self: RopeCharIterator): nullable String */
4073 val* ropes__RopeCharIterator__curr_substring(val* self) {
4074 val* var /* : nullable String */;
4075 val* var1 /* : nullable String */;
4076 var1 = self->attrs[COLOR_ropes__RopeCharIterator___64dcurr_substring].val; /* @curr_substring on <self:RopeCharIterator> */
4077 var = var1;
4078 RET_LABEL:;
4079 return var;
4080 }
4081 /* method ropes#RopeCharIterator#curr_substring for (self: Object): nullable String */
4082 val* VIRTUAL_ropes__RopeCharIterator__curr_substring(val* self) {
4083 val* var /* : nullable String */;
4084 val* var1 /* : nullable String */;
4085 var1 = ropes__RopeCharIterator__curr_substring(self);
4086 var = var1;
4087 RET_LABEL:;
4088 return var;
4089 }
4090 /* method ropes#RopeCharIterator#curr_substring= for (self: RopeCharIterator, nullable String) */
4091 void ropes__RopeCharIterator__curr_substring_61d(val* self, val* p0) {
4092 self->attrs[COLOR_ropes__RopeCharIterator___64dcurr_substring].val = p0; /* @curr_substring on <self:RopeCharIterator> */
4093 RET_LABEL:;
4094 }
4095 /* method ropes#RopeCharIterator#curr_substring= for (self: Object, nullable String) */
4096 void VIRTUAL_ropes__RopeCharIterator__curr_substring_61d(val* self, val* p0) {
4097 ropes__RopeCharIterator__curr_substring_61d(self, p0);
4098 RET_LABEL:;
4099 }
4100 /* method ropes#RopeCharIterator#init for (self: RopeCharIterator, Rope) */
4101 void ropes__RopeCharIterator__init(val* self, val* p0) {
4102 val* var_tgt /* var tgt: Rope */;
4103 val* var /* : DFSRopeLeafIterator */;
4104 val* var1 /* : DFSRopeLeafIterator */;
4105 short int var2 /* : Bool */;
4106 val* var3 /* : DFSRopeLeafIterator */;
4107 val* var4 /* : nullable Object */;
4108 val* var5 /* : String */;
4109 var_tgt = p0;
4110 var = NEW_ropes__DFSRopeLeafIterator(&type_ropes__DFSRopeLeafIterator);
4111 ((void (*)(val*, val*))(var->class->vft[COLOR_ropes__DFSRopeLeafIterator__init]))(var, var_tgt) /* init on <var:DFSRopeLeafIterator>*/;
4112 CHECK_NEW_ropes__DFSRopeLeafIterator(var);
4113 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_str_iter_61d]))(self, var) /* sub_str_iter= on <self:RopeCharIterator>*/;
4114 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_str_iter]))(self) /* sub_str_iter on <self:RopeCharIterator>*/;
4115 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:DFSRopeLeafIterator>*/;
4116 if (var2){
4117 var3 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_str_iter]))(self) /* sub_str_iter on <self:RopeCharIterator>*/;
4118 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:DFSRopeLeafIterator>*/;
4119 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_ropes__LeafNode__value]))(var4) /* value on <var4:nullable Object(LeafNode)>*/;
4120 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__RopeCharIterator__curr_substring_61d]))(self, var5) /* curr_substring= on <self:RopeCharIterator>*/;
4121 } else {
4122 }
4123 RET_LABEL:;
4124 }
4125 /* method ropes#RopeCharIterator#init for (self: Object, Rope) */
4126 void VIRTUAL_ropes__RopeCharIterator__init(val* self, val* p0) {
4127 ropes__RopeCharIterator__init(self, p0);
4128 RET_LABEL:;
4129 }
4130 /* method ropes#RopeCharIterator#item for (self: RopeCharIterator): Char */
4131 char ropes__RopeCharIterator__item(val* self) {
4132 char var /* : Char */;
4133 val* var1 /* : nullable String */;
4134 long var2 /* : Int */;
4135 val* var3 /* : nullable Object */;
4136 char var4 /* : Char */;
4137 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__curr_substring]))(self) /* curr_substring on <self:RopeCharIterator>*/;
4138 var2 = ((long (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_pos]))(self) /* sub_pos on <self:RopeCharIterator>*/;
4139 if (var1 == NULL) {
4140 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 828);
4141 exit(1);
4142 } else {
4143 var3 = ((val* (*)(val*, long))(var1->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var1, var2) /* [] on <var1:nullable String>*/;
4144 }
4145 var4 = ((struct instance_kernel__Char*)var3)->value; /* autounbox from nullable Object to Char */;
4146 var = var4;
4147 goto RET_LABEL;
4148 RET_LABEL:;
4149 return var;
4150 }
4151 /* method ropes#RopeCharIterator#item for (self: Object): nullable Object */
4152 val* VIRTUAL_ropes__RopeCharIterator__item(val* self) {
4153 val* var /* : nullable Object */;
4154 char var1 /* : Char */;
4155 val* var2 /* : nullable Object */;
4156 var1 = ropes__RopeCharIterator__item(self);
4157 var2 = BOX_kernel__Char(var1); /* autobox from Char to nullable Object */
4158 var = var2;
4159 RET_LABEL:;
4160 return var;
4161 }
4162 /* method ropes#RopeCharIterator#is_ok for (self: RopeCharIterator): Bool */
4163 short int ropes__RopeCharIterator__is_ok(val* self) {
4164 short int var /* : Bool */;
4165 val* var1 /* : DFSRopeLeafIterator */;
4166 short int var2 /* : Bool */;
4167 short int var3 /* : Bool */;
4168 short int var4 /* : Bool */;
4169 short int var5 /* : Bool */;
4170 val* var6 /* : DFSRopeLeafIterator */;
4171 short int var7 /* : Bool */;
4172 short int var8 /* : Bool */;
4173 short int var_ /* var : Bool */;
4174 val* var9 /* : nullable String */;
4175 val* var10 /* : null */;
4176 short int var11 /* : Bool */;
4177 short int var_12 /* var : Bool */;
4178 long var13 /* : Int */;
4179 val* var14 /* : nullable String */;
4180 long var15 /* : Int */;
4181 short int var16 /* : Bool */;
4182 short int var18 /* : Bool */;
4183 int cltype;
4184 int idtype;
4185 short int var19 /* : Bool */;
4186 short int var20 /* : Bool */;
4187 short int var21 /* : Bool */;
4188 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_str_iter]))(self) /* sub_str_iter on <self:RopeCharIterator>*/;
4189 var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:DFSRopeLeafIterator>*/;
4190 if (var2){
4191 var3 = 1;
4192 var = var3;
4193 goto RET_LABEL;
4194 } else {
4195 }
4196 var6 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_str_iter]))(self) /* sub_str_iter on <self:RopeCharIterator>*/;
4197 var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:DFSRopeLeafIterator>*/;
4198 var8 = !var7;
4199 var_ = var8;
4200 if (var8){
4201 var9 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__curr_substring]))(self) /* curr_substring on <self:RopeCharIterator>*/;
4202 var10 = NULL;
4203 if (var9 == NULL) {
4204 var11 = 0; /* is null */
4205 } else {
4206 var11 = 1; /* arg is null and recv is not */
4207 }
4208 var5 = var11;
4209 } else {
4210 var5 = var_;
4211 }
4212 var_12 = var5;
4213 if (var5){
4214 var13 = ((long (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_pos]))(self) /* sub_pos on <self:RopeCharIterator>*/;
4215 var14 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__curr_substring]))(self) /* curr_substring on <self:RopeCharIterator>*/;
4216 if (var14 == NULL) {
4217 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 833);
4218 exit(1);
4219 } else {
4220 var15 = ((long (*)(val*))(var14->class->vft[COLOR_abstract_collection__Collection__length]))(var14) /* length on <var14:nullable String>*/;
4221 }
4222 { /* Inline kernel#Int#< (var13,var15) */
4223 /* Covariant cast for argument 0 (i) <var15:Int> isa OTHER */
4224 /* <var15:Int> isa OTHER */
4225 var18 = 1; /* easy <var15:Int> isa OTHER*/
4226 if (!var18) {
4227 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
4228 exit(1);
4229 }
4230 var19 = var13 < var15;
4231 var16 = var19;
4232 goto RET_LABEL17;
4233 RET_LABEL17:(void)0;
4234 }
4235 var4 = var16;
4236 } else {
4237 var4 = var_12;
4238 }
4239 if (var4){
4240 var20 = 1;
4241 var = var20;
4242 goto RET_LABEL;
4243 } else {
4244 }
4245 var21 = 0;
4246 var = var21;
4247 goto RET_LABEL;
4248 RET_LABEL:;
4249 return var;
4250 }
4251 /* method ropes#RopeCharIterator#is_ok for (self: Object): Bool */
4252 short int VIRTUAL_ropes__RopeCharIterator__is_ok(val* self) {
4253 short int var /* : Bool */;
4254 short int var1 /* : Bool */;
4255 var1 = ropes__RopeCharIterator__is_ok(self);
4256 var = var1;
4257 RET_LABEL:;
4258 return var;
4259 }
4260 /* method ropes#RopeCharIterator#next for (self: RopeCharIterator) */
4261 void ropes__RopeCharIterator__next(val* self) {
4262 short int var /* : Bool */;
4263 long var1 /* : Int */;
4264 val* var2 /* : nullable String */;
4265 long var3 /* : Int */;
4266 long var4 /* : Int */;
4267 long var5 /* : Int */;
4268 long var7 /* : Int */;
4269 short int var8 /* : Bool */;
4270 short int var10 /* : Bool */;
4271 int cltype;
4272 int idtype;
4273 short int var11 /* : Bool */;
4274 val* var_ /* var : RopeCharIterator */;
4275 long var12 /* : Int */;
4276 long var13 /* : Int */;
4277 long var14 /* : Int */;
4278 long var16 /* : Int */;
4279 val* var17 /* : DFSRopeLeafIterator */;
4280 val* var18 /* : DFSRopeLeafIterator */;
4281 short int var19 /* : Bool */;
4282 val* var20 /* : DFSRopeLeafIterator */;
4283 val* var21 /* : nullable Object */;
4284 val* var22 /* : String */;
4285 long var23 /* : Int */;
4286 val* var24 /* : nullable String */;
4287 long var25 /* : Int */;
4288 val* var_26 /* var : RopeCharIterator */;
4289 long var27 /* : Int */;
4290 long var28 /* : Int */;
4291 long var29 /* : Int */;
4292 long var31 /* : Int */;
4293 var = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(self) /* is_ok on <self:RopeCharIterator>*/;
4294 if (!var) {
4295 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "lib/standard/ropes.nit", 839);
4296 exit(1);
4297 }
4298 var1 = ((long (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_pos]))(self) /* sub_pos on <self:RopeCharIterator>*/;
4299 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__curr_substring]))(self) /* curr_substring on <self:RopeCharIterator>*/;
4300 if (var2 == NULL) {
4301 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 840);
4302 exit(1);
4303 } else {
4304 var3 = ((long (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__length]))(var2) /* length on <var2:nullable String>*/;
4305 }
4306 var4 = 1;
4307 { /* Inline kernel#Int#- (var3,var4) */
4308 var7 = var3 - var4;
4309 var5 = var7;
4310 goto RET_LABEL6;
4311 RET_LABEL6:(void)0;
4312 }
4313 { /* Inline kernel#Int#< (var1,var5) */
4314 /* Covariant cast for argument 0 (i) <var5:Int> isa OTHER */
4315 /* <var5:Int> isa OTHER */
4316 var10 = 1; /* easy <var5:Int> isa OTHER*/
4317 if (!var10) {
4318 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 257);
4319 exit(1);
4320 }
4321 var11 = var1 < var5;
4322 var8 = var11;
4323 goto RET_LABEL9;
4324 RET_LABEL9:(void)0;
4325 }
4326 if (var8){
4327 var_ = self;
4328 var12 = ((long (*)(val*))(var_->class->vft[COLOR_ropes__RopeCharIterator__sub_pos]))(var_) /* sub_pos on <var_:RopeCharIterator>*/;
4329 var13 = 1;
4330 { /* Inline kernel#Int#+ (var12,var13) */
4331 var16 = var12 + var13;
4332 var14 = var16;
4333 goto RET_LABEL15;
4334 RET_LABEL15:(void)0;
4335 }
4336 ((void (*)(val*, long))(var_->class->vft[COLOR_ropes__RopeCharIterator__sub_pos_61d]))(var_, var14) /* sub_pos= on <var_:RopeCharIterator>*/;
4337 } else {
4338 var17 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_str_iter]))(self) /* sub_str_iter on <self:RopeCharIterator>*/;
4339 ((void (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__next]))(var17) /* next on <var17:DFSRopeLeafIterator>*/;
4340 var18 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_str_iter]))(self) /* sub_str_iter on <self:RopeCharIterator>*/;
4341 var19 = ((short int (*)(val*))(var18->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var18) /* is_ok on <var18:DFSRopeLeafIterator>*/;
4342 if (var19){
4343 var20 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_str_iter]))(self) /* sub_str_iter on <self:RopeCharIterator>*/;
4344 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:DFSRopeLeafIterator>*/;
4345 var22 = ((val* (*)(val*))(var21->class->vft[COLOR_ropes__LeafNode__value]))(var21) /* value on <var21:nullable Object(LeafNode)>*/;
4346 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__RopeCharIterator__curr_substring_61d]))(self, var22) /* curr_substring= on <self:RopeCharIterator>*/;
4347 var23 = 0;
4348 ((void (*)(val*, long))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_pos_61d]))(self, var23) /* sub_pos= on <self:RopeCharIterator>*/;
4349 } else {
4350 var24 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__curr_substring]))(self) /* curr_substring on <self:RopeCharIterator>*/;
4351 if (var24 == NULL) {
4352 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 848);
4353 exit(1);
4354 } else {
4355 var25 = ((long (*)(val*))(var24->class->vft[COLOR_abstract_collection__Collection__length]))(var24) /* length on <var24:nullable String>*/;
4356 }
4357 ((void (*)(val*, long))(self->class->vft[COLOR_ropes__RopeCharIterator__sub_pos_61d]))(self, var25) /* sub_pos= on <self:RopeCharIterator>*/;
4358 }
4359 }
4360 var_26 = self;
4361 var27 = ((long (*)(val*))(var_26->class->vft[COLOR_ropes__RopeCharIterator__abs_pos]))(var_26) /* abs_pos on <var_26:RopeCharIterator>*/;
4362 var28 = 1;
4363 { /* Inline kernel#Int#+ (var27,var28) */
4364 var31 = var27 + var28;
4365 var29 = var31;
4366 goto RET_LABEL30;
4367 RET_LABEL30:(void)0;
4368 }
4369 ((void (*)(val*, long))(var_26->class->vft[COLOR_ropes__RopeCharIterator__abs_pos_61d]))(var_26, var29) /* abs_pos= on <var_26:RopeCharIterator>*/;
4370 RET_LABEL:;
4371 }
4372 /* method ropes#RopeCharIterator#next for (self: Object) */
4373 void VIRTUAL_ropes__RopeCharIterator__next(val* self) {
4374 ropes__RopeCharIterator__next(self);
4375 RET_LABEL:;
4376 }
4377 /* method ropes#RopeCharIterator#index for (self: RopeCharIterator): Int */
4378 long ropes__RopeCharIterator__index(val* self) {
4379 long var /* : Int */;
4380 long var1 /* : Int */;
4381 var1 = ((long (*)(val*))(self->class->vft[COLOR_ropes__RopeCharIterator__abs_pos]))(self) /* abs_pos on <self:RopeCharIterator>*/;
4382 var = var1;
4383 goto RET_LABEL;
4384 RET_LABEL:;
4385 return var;
4386 }
4387 /* method ropes#RopeCharIterator#index for (self: Object): Int */
4388 long VIRTUAL_ropes__RopeCharIterator__index(val* self) {
4389 long var /* : Int */;
4390 long var1 /* : Int */;
4391 var1 = ropes__RopeCharIterator__index(self);
4392 var = var1;
4393 RET_LABEL:;
4394 return var;
4395 }
4396 /* method ropes#DFSRopeLeafIterator#visit_stack for (self: DFSRopeLeafIterator): List[TupleVisitNode] */
4397 val* ropes__DFSRopeLeafIterator__visit_stack(val* self) {
4398 val* var /* : List[TupleVisitNode] */;
4399 val* var1 /* : List[TupleVisitNode] */;
4400 var1 = self->attrs[COLOR_ropes__DFSRopeLeafIterator___64dvisit_stack].val; /* @visit_stack on <self:DFSRopeLeafIterator> */
4401 if (var1 == NULL) {
4402 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @visit_stack", "lib/standard/ropes.nit", 865);
4403 exit(1);
4404 }
4405 var = var1;
4406 RET_LABEL:;
4407 return var;
4408 }
4409 /* method ropes#DFSRopeLeafIterator#visit_stack for (self: Object): List[TupleVisitNode] */
4410 val* VIRTUAL_ropes__DFSRopeLeafIterator__visit_stack(val* self) {
4411 val* var /* : List[TupleVisitNode] */;
4412 val* var1 /* : List[TupleVisitNode] */;
4413 var1 = ropes__DFSRopeLeafIterator__visit_stack(self);
4414 var = var1;
4415 RET_LABEL:;
4416 return var;
4417 }
4418 /* method ropes#DFSRopeLeafIterator#visit_stack= for (self: DFSRopeLeafIterator, List[TupleVisitNode]) */
4419 void ropes__DFSRopeLeafIterator__visit_stack_61d(val* self, val* p0) {
4420 self->attrs[COLOR_ropes__DFSRopeLeafIterator___64dvisit_stack].val = p0; /* @visit_stack on <self:DFSRopeLeafIterator> */
4421 RET_LABEL:;
4422 }
4423 /* method ropes#DFSRopeLeafIterator#visit_stack= for (self: Object, List[TupleVisitNode]) */
4424 void VIRTUAL_ropes__DFSRopeLeafIterator__visit_stack_61d(val* self, val* p0) {
4425 ropes__DFSRopeLeafIterator__visit_stack_61d(self, p0);
4426 RET_LABEL:;
4427 }
4428 /* method ropes#DFSRopeLeafIterator#curr_leaf for (self: DFSRopeLeafIterator): nullable LeafNode */
4429 val* ropes__DFSRopeLeafIterator__curr_leaf(val* self) {
4430 val* var /* : nullable LeafNode */;
4431 val* var1 /* : nullable LeafNode */;
4432 var1 = self->attrs[COLOR_ropes__DFSRopeLeafIterator___64dcurr_leaf].val; /* @curr_leaf on <self:DFSRopeLeafIterator> */
4433 var = var1;
4434 RET_LABEL:;
4435 return var;
4436 }
4437 /* method ropes#DFSRopeLeafIterator#curr_leaf for (self: Object): nullable LeafNode */
4438 val* VIRTUAL_ropes__DFSRopeLeafIterator__curr_leaf(val* self) {
4439 val* var /* : nullable LeafNode */;
4440 val* var1 /* : nullable LeafNode */;
4441 var1 = ropes__DFSRopeLeafIterator__curr_leaf(self);
4442 var = var1;
4443 RET_LABEL:;
4444 return var;
4445 }
4446 /* method ropes#DFSRopeLeafIterator#curr_leaf= for (self: DFSRopeLeafIterator, nullable LeafNode) */
4447 void ropes__DFSRopeLeafIterator__curr_leaf_61d(val* self, val* p0) {
4448 self->attrs[COLOR_ropes__DFSRopeLeafIterator___64dcurr_leaf].val = p0; /* @curr_leaf on <self:DFSRopeLeafIterator> */
4449 RET_LABEL:;
4450 }
4451 /* method ropes#DFSRopeLeafIterator#curr_leaf= for (self: Object, nullable LeafNode) */
4452 void VIRTUAL_ropes__DFSRopeLeafIterator__curr_leaf_61d(val* self, val* p0) {
4453 ropes__DFSRopeLeafIterator__curr_leaf_61d(self, p0);
4454 RET_LABEL:;
4455 }
4456 /* method ropes#DFSRopeLeafIterator#init for (self: DFSRopeLeafIterator, Rope) */
4457 void ropes__DFSRopeLeafIterator__init(val* self, val* p0) {
4458 val* var_tgt /* var tgt: Rope */;
4459 val* var /* : Rope */;
4460 val* var1 /* : RopeNode */;
4461 val* var_first_node /* var first_node: RopeNode */;
4462 short int var2 /* : Bool */;
4463 int cltype;
4464 int idtype;
4465 val* var3 /* : List[TupleVisitNode] */;
4466 val* var4 /* : TupleVisitNode */;
4467 short int var5 /* : Bool */;
4468 int cltype6;
4469 int idtype7;
4470 var_tgt = p0;
4471 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__RopeIterator__init]))(self, p0) /* init on <self:DFSRopeLeafIterator>*/;
4472 var = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeIterator__target]))(self) /* target on <self:DFSRopeLeafIterator>*/;
4473 var1 = ((val* (*)(val*))(var->class->vft[COLOR_ropes__Rope__parent_node]))(var) /* parent_node on <var:Rope>*/;
4474 var_first_node = var1;
4475 /* <var_first_node:RopeNode> isa ConcatNode */
4476 cltype = type_ropes__ConcatNode.color;
4477 idtype = type_ropes__ConcatNode.id;
4478 if(cltype >= var_first_node->type->table_size) {
4479 var2 = 0;
4480 } else {
4481 var2 = var_first_node->type->type_table[cltype] == idtype;
4482 }
4483 if (var2){
4484 var3 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__visit_stack]))(self) /* visit_stack on <self:DFSRopeLeafIterator>*/;
4485 var4 = NEW_ropes__TupleVisitNode(&type_ropes__TupleVisitNode);
4486 ((void (*)(val*, val*))(var4->class->vft[COLOR_ropes__TupleVisitNode__init]))(var4, var_first_node) /* init on <var4:TupleVisitNode>*/;
4487 CHECK_NEW_ropes__TupleVisitNode(var4);
4488 ((void (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Sequence__push]))(var3, var4) /* push on <var3:List[TupleVisitNode]>*/;
4489 } else {
4490 /* <var_first_node:RopeNode> isa LeafNode */
4491 cltype6 = type_ropes__LeafNode.color;
4492 idtype7 = type_ropes__LeafNode.id;
4493 if(cltype6 >= var_first_node->type->table_size) {
4494 var5 = 0;
4495 } else {
4496 var5 = var_first_node->type->type_table[cltype6] == idtype7;
4497 }
4498 if (var5){
4499 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__curr_leaf_61d]))(self, var_first_node) /* curr_leaf= on <self:DFSRopeLeafIterator>*/;
4500 goto RET_LABEL;
4501 } else {
4502 }
4503 }
4504 ((void (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__next_body]))(self) /* next_body on <self:DFSRopeLeafIterator>*/;
4505 RET_LABEL:;
4506 }
4507 /* method ropes#DFSRopeLeafIterator#init for (self: Object, Rope) */
4508 void VIRTUAL_ropes__DFSRopeLeafIterator__init(val* self, val* p0) {
4509 ropes__DFSRopeLeafIterator__init(self, p0);
4510 RET_LABEL:;
4511 }
4512 /* method ropes#DFSRopeLeafIterator#with_index for (self: DFSRopeLeafIterator, Rope, Int) */
4513 void ropes__DFSRopeLeafIterator__with_index(val* self, val* p0, long p1) {
4514 val* var_tgt /* var tgt: Rope */;
4515 long var_index /* var index: Int */;
4516 val* var /* : Rope */;
4517 val* var1 /* : TupleLeafNodePos */;
4518 val* var_returned_tuple /* var returned_tuple: TupleLeafNodePos */;
4519 val* var2 /* : LeafNode */;
4520 val* var3 /* : List[TupleVisitNode] */;
4521 long var4 /* : Int */;
4522 long var5 /* : Int */;
4523 long var7 /* : Int */;
4524 var_tgt = p0;
4525 var_index = p1;
4526 ((void (*)(val*, val*, long))(self->class->vft[COLOR_ropes__RopeIterator__with_index]))(self, p0, p1) /* with_index on <self:DFSRopeLeafIterator>*/;
4527 var = ((val* (*)(val*))(self->class->vft[COLOR_ropes__RopeIterator__target]))(self) /* target on <self:DFSRopeLeafIterator>*/;
4528 var1 = ((val* (*)(val*, long))(var->class->vft[COLOR_ropes__Rope__get_node_for_pos]))(var, var_index) /* get_node_for_pos on <var:Rope>*/;
4529 var_returned_tuple = var1;
4530 var2 = ((val* (*)(val*))(var_returned_tuple->class->vft[COLOR_ropes__TupleLeafNodePos__curr_node]))(var_returned_tuple) /* curr_node on <var_returned_tuple:TupleLeafNodePos>*/;
4531 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__curr_leaf_61d]))(self, var2) /* curr_leaf= on <self:DFSRopeLeafIterator>*/;
4532 var3 = ((val* (*)(val*))(var_returned_tuple->class->vft[COLOR_ropes__TupleLeafNodePos__visit_stack]))(var_returned_tuple) /* visit_stack on <var_returned_tuple:TupleLeafNodePos>*/;
4533 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__visit_stack_61d]))(self, var3) /* visit_stack= on <self:DFSRopeLeafIterator>*/;
4534 var4 = ((long (*)(val*))(var_returned_tuple->class->vft[COLOR_ropes__TupleLeafNodePos__corrected_pos]))(var_returned_tuple) /* corrected_pos on <var_returned_tuple:TupleLeafNodePos>*/;
4535 { /* Inline kernel#Int#- (var_index,var4) */
4536 var7 = var_index - var4;
4537 var5 = var7;
4538 goto RET_LABEL6;
4539 RET_LABEL6:(void)0;
4540 }
4541 ((void (*)(val*, long))(self->class->vft[COLOR_ropes__RopeIterator__pos_61d]))(self, var5) /* pos= on <self:DFSRopeLeafIterator>*/;
4542 RET_LABEL:;
4543 }
4544 /* method ropes#DFSRopeLeafIterator#with_index for (self: Object, Rope, Int) */
4545 void VIRTUAL_ropes__DFSRopeLeafIterator__with_index(val* self, val* p0, long p1) {
4546 ropes__DFSRopeLeafIterator__with_index(self, p0, p1);
4547 RET_LABEL:;
4548 }
4549 /* method ropes#DFSRopeLeafIterator#is_ok for (self: DFSRopeLeafIterator): Bool */
4550 short int ropes__DFSRopeLeafIterator__is_ok(val* self) {
4551 short int var /* : Bool */;
4552 val* var1 /* : nullable LeafNode */;
4553 val* var2 /* : null */;
4554 short int var3 /* : Bool */;
4555 var1 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__curr_leaf]))(self) /* curr_leaf on <self:DFSRopeLeafIterator>*/;
4556 var2 = NULL;
4557 if (var1 == NULL) {
4558 var3 = 0; /* is null */
4559 } else {
4560 var3 = 1; /* arg is null and recv is not */
4561 }
4562 var = var3;
4563 goto RET_LABEL;
4564 RET_LABEL:;
4565 return var;
4566 }
4567 /* method ropes#DFSRopeLeafIterator#is_ok for (self: Object): Bool */
4568 short int VIRTUAL_ropes__DFSRopeLeafIterator__is_ok(val* self) {
4569 short int var /* : Bool */;
4570 short int var1 /* : Bool */;
4571 var1 = ropes__DFSRopeLeafIterator__is_ok(self);
4572 var = var1;
4573 RET_LABEL:;
4574 return var;
4575 }
4576 /* method ropes#DFSRopeLeafIterator#next for (self: DFSRopeLeafIterator) */
4577 void ropes__DFSRopeLeafIterator__next(val* self) {
4578 short int var /* : Bool */;
4579 val* var_ /* var : DFSRopeLeafIterator */;
4580 long var1 /* : Int */;
4581 val* var2 /* : nullable LeafNode */;
4582 val* var3 /* : String */;
4583 long var4 /* : Int */;
4584 long var5 /* : Int */;
4585 long var7 /* : Int */;
4586 var = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(self) /* is_ok on <self:DFSRopeLeafIterator>*/;
4587 if (!var) {
4588 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "lib/standard/ropes.nit", 902);
4589 exit(1);
4590 }
4591 var_ = self;
4592 var1 = ((long (*)(val*))(var_->class->vft[COLOR_ropes__RopeIterator__pos]))(var_) /* pos on <var_:DFSRopeLeafIterator>*/;
4593 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__curr_leaf]))(self) /* curr_leaf on <self:DFSRopeLeafIterator>*/;
4594 if (var2 == NULL) {
4595 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 903);
4596 exit(1);
4597 } else {
4598 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_ropes__LeafNode__value]))(var2) /* value on <var2:nullable LeafNode>*/;
4599 }
4600 var4 = ((long (*)(val*))(var3->class->vft[COLOR_abstract_collection__Collection__length]))(var3) /* length on <var3:String>*/;
4601 { /* Inline kernel#Int#+ (var1,var4) */
4602 var7 = var1 + var4;
4603 var5 = var7;
4604 goto RET_LABEL6;
4605 RET_LABEL6:(void)0;
4606 }
4607 ((void (*)(val*, long))(var_->class->vft[COLOR_ropes__RopeIterator__pos_61d]))(var_, var5) /* pos= on <var_:DFSRopeLeafIterator>*/;
4608 ((void (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__next_body]))(self) /* next_body on <self:DFSRopeLeafIterator>*/;
4609 RET_LABEL:;
4610 }
4611 /* method ropes#DFSRopeLeafIterator#next for (self: Object) */
4612 void VIRTUAL_ropes__DFSRopeLeafIterator__next(val* self) {
4613 ropes__DFSRopeLeafIterator__next(self);
4614 RET_LABEL:;
4615 }
4616 /* method ropes#DFSRopeLeafIterator#next_body for (self: DFSRopeLeafIterator) */
4617 void ropes__DFSRopeLeafIterator__next_body(val* self) {
4618 val* var /* : List[TupleVisitNode] */;
4619 short int var1 /* : Bool */;
4620 short int var2 /* : Bool */;
4621 val* var3 /* : List[TupleVisitNode] */;
4622 val* var4 /* : nullable Object */;
4623 val* var_curr_concat_tuple /* var curr_concat_tuple: TupleVisitNode */;
4624 short int var5 /* : Bool */;
4625 short int var6 /* : Bool */;
4626 short int var7 /* : Bool */;
4627 val* var8 /* : ConcatNode */;
4628 val* var9 /* : nullable RopeNode */;
4629 val* var_next_node /* var next_node: nullable RopeNode */;
4630 val* var10 /* : null */;
4631 short int var11 /* : Bool */;
4632 short int var12 /* : Bool */;
4633 int cltype;
4634 int idtype;
4635 val* var13 /* : List[TupleVisitNode] */;
4636 val* var14 /* : TupleVisitNode */;
4637 short int var15 /* : Bool */;
4638 int cltype16;
4639 int idtype17;
4640 short int var18 /* : Bool */;
4641 short int var19 /* : Bool */;
4642 short int var20 /* : Bool */;
4643 val* var21 /* : ConcatNode */;
4644 val* var22 /* : nullable RopeNode */;
4645 val* var23 /* : null */;
4646 short int var24 /* : Bool */;
4647 short int var25 /* : Bool */;
4648 int cltype26;
4649 int idtype27;
4650 val* var28 /* : List[TupleVisitNode] */;
4651 val* var29 /* : TupleVisitNode */;
4652 short int var30 /* : Bool */;
4653 int cltype31;
4654 int idtype32;
4655 val* var33 /* : List[TupleVisitNode] */;
4656 val* var34 /* : nullable Object */;
4657 val* var35 /* : null */;
4658 for(;;) {
4659 var = ((val* (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__visit_stack]))(self) /* visit_stack on <self:DFSRopeLeafIterator>*/;
4660 var1 = ((short int (*)(val*))(var->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var) /* is_empty on <var:List[TupleVisitNode]>*/;
4661 var2 = !var1;
4662 if (!var2) break;
4663 var3 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__visit_stack]))(self) /* visit_stack on <self:DFSRopeLeafIterator>*/;
4664 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var3) /* last on <var3:List[TupleVisitNode]>*/;
4665 var_curr_concat_tuple = var4;
4666 var5 = ((short int (*)(val*))(var_curr_concat_tuple->class->vft[COLOR_ropes__TupleVisitNode__left_visited]))(var_curr_concat_tuple) /* left_visited on <var_curr_concat_tuple:TupleVisitNode>*/;
4667 var6 = !var5;
4668 if (var6){
4669 var7 = 1;
4670 ((void (*)(val*, short int))(var_curr_concat_tuple->class->vft[COLOR_ropes__TupleVisitNode__left_visited_61d]))(var_curr_concat_tuple, var7) /* left_visited= on <var_curr_concat_tuple:TupleVisitNode>*/;
4671 var8 = ((val* (*)(val*))(var_curr_concat_tuple->class->vft[COLOR_ropes__TupleVisitNode__node]))(var_curr_concat_tuple) /* node on <var_curr_concat_tuple:TupleVisitNode>*/;
4672 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_ropes__ConcatNode__left_child]))(var8) /* left_child on <var8:ConcatNode>*/;
4673 var_next_node = var9;
4674 var10 = NULL;
4675 if (var_next_node == NULL) {
4676 var11 = 1; /* is null */
4677 } else {
4678 var11 = 0; /* arg is null but recv is not */
4679 }
4680 if (var11){
4681 goto CONTINUE_label;
4682 } else {
4683 }
4684 /* <var_next_node:nullable RopeNode(RopeNode)> isa ConcatNode */
4685 cltype = type_ropes__ConcatNode.color;
4686 idtype = type_ropes__ConcatNode.id;
4687 if(cltype >= var_next_node->type->table_size) {
4688 var12 = 0;
4689 } else {
4690 var12 = var_next_node->type->type_table[cltype] == idtype;
4691 }
4692 if (var12){
4693 var13 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__visit_stack]))(self) /* visit_stack on <self:DFSRopeLeafIterator>*/;
4694 var14 = NEW_ropes__TupleVisitNode(&type_ropes__TupleVisitNode);
4695 ((void (*)(val*, val*))(var14->class->vft[COLOR_ropes__TupleVisitNode__init]))(var14, var_next_node) /* init on <var14:TupleVisitNode>*/;
4696 CHECK_NEW_ropes__TupleVisitNode(var14);
4697 ((void (*)(val*, val*))(var13->class->vft[COLOR_abstract_collection__Sequence__push]))(var13, var14) /* push on <var13:List[TupleVisitNode]>*/;
4698 } else {
4699 /* <var_next_node:nullable RopeNode(RopeNode)> isa LeafNode */
4700 cltype16 = type_ropes__LeafNode.color;
4701 idtype17 = type_ropes__LeafNode.id;
4702 if(cltype16 >= var_next_node->type->table_size) {
4703 var15 = 0;
4704 } else {
4705 var15 = var_next_node->type->type_table[cltype16] == idtype17;
4706 }
4707 if (var15){
4708 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__curr_leaf_61d]))(self, var_next_node) /* curr_leaf= on <self:DFSRopeLeafIterator>*/;
4709 goto RET_LABEL;
4710 } else {
4711 }
4712 }
4713 } else {
4714 var18 = ((short int (*)(val*))(var_curr_concat_tuple->class->vft[COLOR_ropes__TupleVisitNode__right_visited]))(var_curr_concat_tuple) /* right_visited on <var_curr_concat_tuple:TupleVisitNode>*/;
4715 var19 = !var18;
4716 if (var19){
4717 var20 = 1;
4718 ((void (*)(val*, short int))(var_curr_concat_tuple->class->vft[COLOR_ropes__TupleVisitNode__right_visited_61d]))(var_curr_concat_tuple, var20) /* right_visited= on <var_curr_concat_tuple:TupleVisitNode>*/;
4719 var21 = ((val* (*)(val*))(var_curr_concat_tuple->class->vft[COLOR_ropes__TupleVisitNode__node]))(var_curr_concat_tuple) /* node on <var_curr_concat_tuple:TupleVisitNode>*/;
4720 var22 = ((val* (*)(val*))(var21->class->vft[COLOR_ropes__ConcatNode__right_child]))(var21) /* right_child on <var21:ConcatNode>*/;
4721 var_next_node = var22;
4722 var23 = NULL;
4723 if (var_next_node == NULL) {
4724 var24 = 1; /* is null */
4725 } else {
4726 var24 = 0; /* arg is null but recv is not */
4727 }
4728 if (var24){
4729 goto CONTINUE_label;
4730 } else {
4731 }
4732 /* <var_next_node:nullable RopeNode(RopeNode)> isa ConcatNode */
4733 cltype26 = type_ropes__ConcatNode.color;
4734 idtype27 = type_ropes__ConcatNode.id;
4735 if(cltype26 >= var_next_node->type->table_size) {
4736 var25 = 0;
4737 } else {
4738 var25 = var_next_node->type->type_table[cltype26] == idtype27;
4739 }
4740 if (var25){
4741 var28 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__visit_stack]))(self) /* visit_stack on <self:DFSRopeLeafIterator>*/;
4742 var29 = NEW_ropes__TupleVisitNode(&type_ropes__TupleVisitNode);
4743 ((void (*)(val*, val*))(var29->class->vft[COLOR_ropes__TupleVisitNode__init]))(var29, var_next_node) /* init on <var29:TupleVisitNode>*/;
4744 CHECK_NEW_ropes__TupleVisitNode(var29);
4745 ((void (*)(val*, val*))(var28->class->vft[COLOR_abstract_collection__Sequence__push]))(var28, var29) /* push on <var28:List[TupleVisitNode]>*/;
4746 } else {
4747 /* <var_next_node:nullable RopeNode(RopeNode)> isa LeafNode */
4748 cltype31 = type_ropes__LeafNode.color;
4749 idtype32 = type_ropes__LeafNode.id;
4750 if(cltype31 >= var_next_node->type->table_size) {
4751 var30 = 0;
4752 } else {
4753 var30 = var_next_node->type->type_table[cltype31] == idtype32;
4754 }
4755 if (var30){
4756 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__curr_leaf_61d]))(self, var_next_node) /* curr_leaf= on <self:DFSRopeLeafIterator>*/;
4757 goto RET_LABEL;
4758 } else {
4759 }
4760 }
4761 } else {
4762 var33 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__visit_stack]))(self) /* visit_stack on <self:DFSRopeLeafIterator>*/;
4763 var34 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_collection__Sequence__pop]))(var33) /* pop on <var33:List[TupleVisitNode]>*/;
4764 var34;
4765 }
4766 }
4767 CONTINUE_label: (void)0;
4768 }
4769 BREAK_label: (void)0;
4770 var35 = NULL;
4771 ((void (*)(val*, val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__curr_leaf_61d]))(self, var35) /* curr_leaf= on <self:DFSRopeLeafIterator>*/;
4772 RET_LABEL:;
4773 }
4774 /* method ropes#DFSRopeLeafIterator#next_body for (self: Object) */
4775 void VIRTUAL_ropes__DFSRopeLeafIterator__next_body(val* self) {
4776 ropes__DFSRopeLeafIterator__next_body(self);
4777 RET_LABEL:;
4778 }
4779 /* method ropes#DFSRopeLeafIterator#item for (self: DFSRopeLeafIterator): LeafNode */
4780 val* ropes__DFSRopeLeafIterator__item(val* self) {
4781 val* var /* : LeafNode */;
4782 short int var1 /* : Bool */;
4783 val* var2 /* : nullable LeafNode */;
4784 var1 = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(self) /* is_ok on <self:DFSRopeLeafIterator>*/;
4785 if (!var1) {
4786 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "lib/standard/ropes.nit", 951);
4787 exit(1);
4788 }
4789 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__DFSRopeLeafIterator__curr_leaf]))(self) /* curr_leaf on <self:DFSRopeLeafIterator>*/;
4790 if (var2 == NULL) {
4791 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/ropes.nit", 952);
4792 exit(1);
4793 }
4794 var = var2;
4795 goto RET_LABEL;
4796 RET_LABEL:;
4797 return var;
4798 }
4799 /* method ropes#DFSRopeLeafIterator#item for (self: Object): nullable Object */
4800 val* VIRTUAL_ropes__DFSRopeLeafIterator__item(val* self) {
4801 val* var /* : nullable Object */;
4802 val* var1 /* : LeafNode */;
4803 var1 = ropes__DFSRopeLeafIterator__item(self);
4804 var = var1;
4805 RET_LABEL:;
4806 return var;
4807 }
4808 /* method ropes#RopeNode#parent for (self: RopeNode): nullable ConcatNode */
4809 val* ropes__RopeNode__parent(val* self) {
4810 val* var /* : nullable ConcatNode */;
4811 val* var1 /* : nullable ConcatNode */;
4812 var1 = self->attrs[COLOR_ropes__RopeNode___64dparent].val; /* @parent on <self:RopeNode> */
4813 var = var1;
4814 RET_LABEL:;
4815 return var;
4816 }
4817 /* method ropes#RopeNode#parent for (self: Object): nullable ConcatNode */
4818 val* VIRTUAL_ropes__RopeNode__parent(val* self) {
4819 val* var /* : nullable ConcatNode */;
4820 val* var1 /* : nullable ConcatNode */;
4821 var1 = ropes__RopeNode__parent(self);
4822 var = var1;
4823 RET_LABEL:;
4824 return var;
4825 }
4826 /* method ropes#RopeNode#parent= for (self: RopeNode, nullable ConcatNode) */
4827 void ropes__RopeNode__parent_61d(val* self, val* p0) {
4828 self->attrs[COLOR_ropes__RopeNode___64dparent].val = p0; /* @parent on <self:RopeNode> */
4829 RET_LABEL:;
4830 }
4831 /* method ropes#RopeNode#parent= for (self: Object, nullable ConcatNode) */
4832 void VIRTUAL_ropes__RopeNode__parent_61d(val* self, val* p0) {
4833 ropes__RopeNode__parent_61d(self, p0);
4834 RET_LABEL:;
4835 }
4836 /* method ropes#RopeNode#height for (self: RopeNode): Int */
4837 long ropes__RopeNode__height(val* self) {
4838 long var /* : Int */;
4839 long var1 /* : Int */;
4840 var1 = self->attrs[COLOR_ropes__RopeNode___64dheight].l; /* @height on <self:RopeNode> */
4841 var = var1;
4842 RET_LABEL:;
4843 return var;
4844 }
4845 /* method ropes#RopeNode#height for (self: Object): Int */
4846 long VIRTUAL_ropes__RopeNode__height(val* self) {
4847 long var /* : Int */;
4848 long var1 /* : Int */;
4849 var1 = ropes__RopeNode__height(self);
4850 var = var1;
4851 RET_LABEL:;
4852 return var;
4853 }
4854 /* method ropes#RopeNode#height= for (self: RopeNode, Int) */
4855 void ropes__RopeNode__height_61d(val* self, long p0) {
4856 self->attrs[COLOR_ropes__RopeNode___64dheight].l = p0; /* @height on <self:RopeNode> */
4857 RET_LABEL:;
4858 }
4859 /* method ropes#RopeNode#height= for (self: Object, Int) */
4860 void VIRTUAL_ropes__RopeNode__height_61d(val* self, long p0) {
4861 ropes__RopeNode__height_61d(self, p0);
4862 RET_LABEL:;
4863 }
4864 /* method ropes#RopeNode#balance_factor for (self: RopeNode): Int */
4865 long ropes__RopeNode__balance_factor(val* self) {
4866 long var /* : Int */;
4867 long var1 /* : Int */;
4868 var1 = ((long (*)(val*))(self->class->vft[COLOR_ropes__RopeNode__height]))(self) /* height on <self:RopeNode>*/;
4869 var = var1;
4870 goto RET_LABEL;
4871 RET_LABEL:;
4872 return var;
4873 }
4874 /* method ropes#RopeNode#balance_factor for (self: Object): Int */
4875 long VIRTUAL_ropes__RopeNode__balance_factor(val* self) {
4876 long var /* : Int */;
4877 long var1 /* : Int */;
4878 var1 = ropes__RopeNode__balance_factor(self);
4879 var = var1;
4880 RET_LABEL:;
4881 return var;
4882 }
4883 /* method ropes#RopeNode#length for (self: RopeNode): Int */
4884 long ropes__RopeNode__length(val* self) {
4885 long var /* : Int */;
4886 long var1 /* : Int */;
4887 var1 = self->attrs[COLOR_ropes__RopeNode___length].l; /* _length on <self:RopeNode> */
4888 var = var1;
4889 goto RET_LABEL;
4890 RET_LABEL:;
4891 return var;
4892 }
4893 /* method ropes#RopeNode#length for (self: Object): Int */
4894 long VIRTUAL_ropes__RopeNode__length(val* self) {
4895 long var /* : Int */;
4896 long var1 /* : Int */;
4897 var1 = ropes__RopeNode__length(self);
4898 var = var1;
4899 RET_LABEL:;
4900 return var;
4901 }
4902 /* method ropes#RopeNode#length= for (self: RopeNode, Int) */
4903 void ropes__RopeNode__length_61d(val* self, long p0) {
4904 long var_len /* var len: Int */;
4905 var_len = p0;
4906 self->attrs[COLOR_ropes__RopeNode___length].l = var_len; /* _length on <self:RopeNode> */
4907 RET_LABEL:;
4908 }
4909 /* method ropes#RopeNode#length= for (self: Object, Int) */
4910 void VIRTUAL_ropes__RopeNode__length_61d(val* self, long p0) {
4911 ropes__RopeNode__length_61d(self, p0);
4912 RET_LABEL:;
4913 }
4914 /* method ropes#RopeNode#init for (self: RopeNode) */
4915 void ropes__RopeNode__init(val* self) {
4916 RET_LABEL:;
4917 }
4918 /* method ropes#RopeNode#init for (self: Object) */
4919 void VIRTUAL_ropes__RopeNode__init(val* self) {
4920 ropes__RopeNode__init(self);
4921 RET_LABEL:;
4922 }
4923 /* method ropes#ConcatNode#left_child for (self: ConcatNode): nullable RopeNode */
4924 val* ropes__ConcatNode__left_child(val* self) {
4925 val* var /* : nullable RopeNode */;
4926 val* var1 /* : nullable RopeNode */;
4927 val* var2 /* : null */;
4928 short int var3 /* : Bool */;
4929 val* var4 /* : nullable RopeNode */;
4930 val* var5 /* : null */;
4931 var1 = self->attrs[COLOR_ropes__ConcatNode___left_child].val; /* _left_child on <self:ConcatNode> */
4932 var2 = NULL;
4933 if (var1 == NULL) {
4934 var3 = 0; /* is null */
4935 } else {
4936 var3 = 1; /* arg is null and recv is not */
4937 }
4938 if (var3){
4939 var4 = self->attrs[COLOR_ropes__ConcatNode___left_child].val; /* _left_child on <self:ConcatNode> */
4940 var = var4;
4941 goto RET_LABEL;
4942 } else {
4943 var5 = NULL;
4944 var = var5;
4945 goto RET_LABEL;
4946 }
4947 RET_LABEL:;
4948 return var;
4949 }
4950 /* method ropes#ConcatNode#left_child for (self: Object): nullable RopeNode */
4951 val* VIRTUAL_ropes__ConcatNode__left_child(val* self) {
4952 val* var /* : nullable RopeNode */;
4953 val* var1 /* : nullable RopeNode */;
4954 var1 = ropes__ConcatNode__left_child(self);
4955 var = var1;
4956 RET_LABEL:;
4957 return var;
4958 }
4959 /* method ropes#ConcatNode#right_child for (self: ConcatNode): nullable RopeNode */
4960 val* ropes__ConcatNode__right_child(val* self) {
4961 val* var /* : nullable RopeNode */;
4962 val* var1 /* : nullable RopeNode */;
4963 val* var2 /* : null */;
4964 short int var3 /* : Bool */;
4965 val* var4 /* : nullable RopeNode */;
4966 val* var5 /* : null */;
4967 var1 = self->attrs[COLOR_ropes__ConcatNode___right_child].val; /* _right_child on <self:ConcatNode> */
4968 var2 = NULL;
4969 if (var1 == NULL) {
4970 var3 = 0; /* is null */
4971 } else {
4972 var3 = 1; /* arg is null and recv is not */
4973 }
4974 if (var3){
4975 var4 = self->attrs[COLOR_ropes__ConcatNode___right_child].val; /* _right_child on <self:ConcatNode> */
4976 var = var4;
4977 goto RET_LABEL;
4978 } else {
4979 var5 = NULL;
4980 var = var5;
4981 goto RET_LABEL;
4982 }
4983 RET_LABEL:;
4984 return var;
4985 }
4986 /* method ropes#ConcatNode#right_child for (self: Object): nullable RopeNode */
4987 val* VIRTUAL_ropes__ConcatNode__right_child(val* self) {
4988 val* var /* : nullable RopeNode */;
4989 val* var1 /* : nullable RopeNode */;
4990 var1 = ropes__ConcatNode__right_child(self);
4991 var = var1;
4992 RET_LABEL:;
4993 return var;
4994 }
4995 /* method ropes#ConcatNode#left_child= for (self: ConcatNode, nullable RopeNode) */
4996 void ropes__ConcatNode__left_child_61d(val* self, val* p0) {
4997 val* var_new_node /* var new_node: nullable RopeNode */;
4998 var_new_node = p0;
4999 self->attrs[COLOR_ropes__ConcatNode___left_child].val = var_new_node; /* _left_child on <self:ConcatNode> */
5000 if (var_new_node == NULL) {
5001 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1010);
5002 exit(1);
5003 } else {
5004 ((void (*)(val*, val*))(var_new_node->class->vft[COLOR_ropes__RopeNode__parent_61d]))(var_new_node, self) /* parent= on <var_new_node:nullable RopeNode>*/;
5005 }
5006 ((void (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__update_data]))(self) /* update_data on <self:ConcatNode>*/;
5007 RET_LABEL:;
5008 }
5009 /* method ropes#ConcatNode#left_child= for (self: Object, nullable RopeNode) */
5010 void VIRTUAL_ropes__ConcatNode__left_child_61d(val* self, val* p0) {
5011 ropes__ConcatNode__left_child_61d(self, p0);
5012 RET_LABEL:;
5013 }
5014 /* method ropes#ConcatNode#right_child= for (self: ConcatNode, nullable RopeNode) */
5015 void ropes__ConcatNode__right_child_61d(val* self, val* p0) {
5016 val* var_new_node /* var new_node: nullable RopeNode */;
5017 var_new_node = p0;
5018 self->attrs[COLOR_ropes__ConcatNode___right_child].val = var_new_node; /* _right_child on <self:ConcatNode> */
5019 if (var_new_node == NULL) {
5020 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1017);
5021 exit(1);
5022 } else {
5023 ((void (*)(val*, val*))(var_new_node->class->vft[COLOR_ropes__RopeNode__parent_61d]))(var_new_node, self) /* parent= on <var_new_node:nullable RopeNode>*/;
5024 }
5025 ((void (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__update_data]))(self) /* update_data on <self:ConcatNode>*/;
5026 RET_LABEL:;
5027 }
5028 /* method ropes#ConcatNode#right_child= for (self: Object, nullable RopeNode) */
5029 void VIRTUAL_ropes__ConcatNode__right_child_61d(val* self, val* p0) {
5030 ropes__ConcatNode__right_child_61d(self, p0);
5031 RET_LABEL:;
5032 }
5033 /* method ropes#ConcatNode#update_data for (self: ConcatNode) */
5034 void ropes__ConcatNode__update_data(val* self) {
5035 long var /* : Int */;
5036 long var1 /* : Int */;
5037 val* var2 /* : nullable RopeNode */;
5038 val* var3 /* : null */;
5039 short int var4 /* : Bool */;
5040 val* var_ /* var : ConcatNode */;
5041 long var5 /* : Int */;
5042 val* var6 /* : nullable RopeNode */;
5043 long var7 /* : Int */;
5044 long var8 /* : Int */;
5045 long var10 /* : Int */;
5046 val* var11 /* : nullable RopeNode */;
5047 long var12 /* : Int */;
5048 long var13 /* : Int */;
5049 long var14 /* : Int */;
5050 long var16 /* : Int */;
5051 long var17 /* : Int */;
5052 short int var18 /* : Bool */;
5053 short int var20 /* : Bool */;
5054 int cltype;
5055 int idtype;
5056 short int var21 /* : Bool */;
5057 val* var22 /* : nullable RopeNode */;
5058 long var23 /* : Int */;
5059 long var24 /* : Int */;
5060 long var25 /* : Int */;
5061 long var27 /* : Int */;
5062 val* var28 /* : nullable RopeNode */;
5063 val* var29 /* : null */;
5064 short int var30 /* : Bool */;
5065 val* var_31 /* var : ConcatNode */;
5066 long var32 /* : Int */;
5067 val* var33 /* : nullable RopeNode */;
5068 long var34 /* : Int */;
5069 long var35 /* : Int */;
5070 long var37 /* : Int */;
5071 val* var38 /* : nullable RopeNode */;
5072 long var39 /* : Int */;
5073 long var40 /* : Int */;
5074 long var41 /* : Int */;
5075 long var43 /* : Int */;
5076 long var44 /* : Int */;
5077 short int var45 /* : Bool */;
5078 short int var47 /* : Bool */;
5079 int cltype48;
5080 int idtype49;
5081 short int var50 /* : Bool */;
5082 val* var51 /* : nullable RopeNode */;
5083 long var52 /* : Int */;
5084 long var53 /* : Int */;
5085 long var54 /* : Int */;
5086 long var56 /* : Int */;
5087 var = 0;
5088 ((void (*)(val*, long))(self->class->vft[COLOR_ropes__RopeNode__length_61d]))(self, var) /* length= on <self:ConcatNode>*/;
5089 var1 = 1;
5090 ((void (*)(val*, long))(self->class->vft[COLOR_ropes__RopeNode__height_61d]))(self, var1) /* height= on <self:ConcatNode>*/;
5091 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__left_child]))(self) /* left_child on <self:ConcatNode>*/;
5092 var3 = NULL;
5093 if (var2 == NULL) {
5094 var4 = 0; /* is null */
5095 } else {
5096 var4 = 1; /* arg is null and recv is not */
5097 }
5098 if (var4){
5099 var_ = self;
5100 var5 = ((long (*)(val*))(var_->class->vft[COLOR_ropes__RopeNode__length]))(var_) /* length on <var_:ConcatNode>*/;
5101 var6 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__left_child]))(self) /* left_child on <self:ConcatNode>*/;
5102 if (var6 == NULL) {
5103 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1029);
5104 exit(1);
5105 } else {
5106 var7 = ((long (*)(val*))(var6->class->vft[COLOR_ropes__RopeNode__length]))(var6) /* length on <var6:nullable RopeNode>*/;
5107 }
5108 { /* Inline kernel#Int#+ (var5,var7) */
5109 var10 = var5 + var7;
5110 var8 = var10;
5111 goto RET_LABEL9;
5112 RET_LABEL9:(void)0;
5113 }
5114 ((void (*)(val*, long))(var_->class->vft[COLOR_ropes__RopeNode__length_61d]))(var_, var8) /* length= on <var_:ConcatNode>*/;
5115 var11 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__left_child]))(self) /* left_child on <self:ConcatNode>*/;
5116 if (var11 == NULL) {
5117 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1030);
5118 exit(1);
5119 } else {
5120 var12 = ((long (*)(val*))(var11->class->vft[COLOR_ropes__RopeNode__height]))(var11) /* height on <var11:nullable RopeNode>*/;
5121 }
5122 var13 = 1;
5123 { /* Inline kernel#Int#+ (var12,var13) */
5124 var16 = var12 + var13;
5125 var14 = var16;
5126 goto RET_LABEL15;
5127 RET_LABEL15:(void)0;
5128 }
5129 var17 = ((long (*)(val*))(self->class->vft[COLOR_ropes__RopeNode__height]))(self) /* height on <self:ConcatNode>*/;
5130 { /* Inline kernel#Int#> (var14,var17) */
5131 /* Covariant cast for argument 0 (i) <var17:Int> isa OTHER */
5132 /* <var17:Int> isa OTHER */
5133 var20 = 1; /* easy <var17:Int> isa OTHER*/
5134 if (!var20) {
5135 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
5136 exit(1);
5137 }
5138 var21 = var14 > var17;
5139 var18 = var21;
5140 goto RET_LABEL19;
5141 RET_LABEL19:(void)0;
5142 }
5143 if (var18){
5144 var22 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__left_child]))(self) /* left_child on <self:ConcatNode>*/;
5145 if (var22 == NULL) {
5146 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1030);
5147 exit(1);
5148 } else {
5149 var23 = ((long (*)(val*))(var22->class->vft[COLOR_ropes__RopeNode__height]))(var22) /* height on <var22:nullable RopeNode>*/;
5150 }
5151 var24 = 1;
5152 { /* Inline kernel#Int#+ (var23,var24) */
5153 var27 = var23 + var24;
5154 var25 = var27;
5155 goto RET_LABEL26;
5156 RET_LABEL26:(void)0;
5157 }
5158 ((void (*)(val*, long))(self->class->vft[COLOR_ropes__RopeNode__height_61d]))(self, var25) /* height= on <self:ConcatNode>*/;
5159 } else {
5160 }
5161 } else {
5162 }
5163 var28 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__right_child]))(self) /* right_child on <self:ConcatNode>*/;
5164 var29 = NULL;
5165 if (var28 == NULL) {
5166 var30 = 0; /* is null */
5167 } else {
5168 var30 = 1; /* arg is null and recv is not */
5169 }
5170 if (var30){
5171 var_31 = self;
5172 var32 = ((long (*)(val*))(var_31->class->vft[COLOR_ropes__RopeNode__length]))(var_31) /* length on <var_31:ConcatNode>*/;
5173 var33 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__right_child]))(self) /* right_child on <self:ConcatNode>*/;
5174 if (var33 == NULL) {
5175 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1033);
5176 exit(1);
5177 } else {
5178 var34 = ((long (*)(val*))(var33->class->vft[COLOR_ropes__RopeNode__length]))(var33) /* length on <var33:nullable RopeNode>*/;
5179 }
5180 { /* Inline kernel#Int#+ (var32,var34) */
5181 var37 = var32 + var34;
5182 var35 = var37;
5183 goto RET_LABEL36;
5184 RET_LABEL36:(void)0;
5185 }
5186 ((void (*)(val*, long))(var_31->class->vft[COLOR_ropes__RopeNode__length_61d]))(var_31, var35) /* length= on <var_31:ConcatNode>*/;
5187 var38 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__right_child]))(self) /* right_child on <self:ConcatNode>*/;
5188 if (var38 == NULL) {
5189 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1034);
5190 exit(1);
5191 } else {
5192 var39 = ((long (*)(val*))(var38->class->vft[COLOR_ropes__RopeNode__height]))(var38) /* height on <var38:nullable RopeNode>*/;
5193 }
5194 var40 = 1;
5195 { /* Inline kernel#Int#+ (var39,var40) */
5196 var43 = var39 + var40;
5197 var41 = var43;
5198 goto RET_LABEL42;
5199 RET_LABEL42:(void)0;
5200 }
5201 var44 = ((long (*)(val*))(self->class->vft[COLOR_ropes__RopeNode__height]))(self) /* height on <self:ConcatNode>*/;
5202 { /* Inline kernel#Int#> (var41,var44) */
5203 /* Covariant cast for argument 0 (i) <var44:Int> isa OTHER */
5204 /* <var44:Int> isa OTHER */
5205 var47 = 1; /* easy <var44:Int> isa OTHER*/
5206 if (!var47) {
5207 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 259);
5208 exit(1);
5209 }
5210 var50 = var41 > var44;
5211 var45 = var50;
5212 goto RET_LABEL46;
5213 RET_LABEL46:(void)0;
5214 }
5215 if (var45){
5216 var51 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__right_child]))(self) /* right_child on <self:ConcatNode>*/;
5217 if (var51 == NULL) {
5218 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1034);
5219 exit(1);
5220 } else {
5221 var52 = ((long (*)(val*))(var51->class->vft[COLOR_ropes__RopeNode__height]))(var51) /* height on <var51:nullable RopeNode>*/;
5222 }
5223 var53 = 1;
5224 { /* Inline kernel#Int#+ (var52,var53) */
5225 var56 = var52 + var53;
5226 var54 = var56;
5227 goto RET_LABEL55;
5228 RET_LABEL55:(void)0;
5229 }
5230 ((void (*)(val*, long))(self->class->vft[COLOR_ropes__RopeNode__height_61d]))(self, var54) /* height= on <self:ConcatNode>*/;
5231 } else {
5232 }
5233 } else {
5234 }
5235 RET_LABEL:;
5236 }
5237 /* method ropes#ConcatNode#update_data for (self: Object) */
5238 void VIRTUAL_ropes__ConcatNode__update_data(val* self) {
5239 ropes__ConcatNode__update_data(self);
5240 RET_LABEL:;
5241 }
5242 /* method ropes#ConcatNode#balance_factor for (self: ConcatNode): Int */
5243 long ropes__ConcatNode__balance_factor(val* self) {
5244 long var /* : Int */;
5245 long var1 /* : Int */;
5246 long var_left_height /* var left_height: Int */;
5247 long var2 /* : Int */;
5248 long var_right_height /* var right_height: Int */;
5249 val* var3 /* : nullable RopeNode */;
5250 val* var4 /* : null */;
5251 short int var5 /* : Bool */;
5252 val* var6 /* : nullable RopeNode */;
5253 long var7 /* : Int */;
5254 val* var8 /* : nullable RopeNode */;
5255 val* var9 /* : null */;
5256 short int var10 /* : Bool */;
5257 val* var11 /* : nullable RopeNode */;
5258 long var12 /* : Int */;
5259 long var13 /* : Int */;
5260 long var15 /* : Int */;
5261 var1 = 0;
5262 var_left_height = var1;
5263 var2 = 0;
5264 var_right_height = var2;
5265 var3 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__left_child]))(self) /* left_child on <self:ConcatNode>*/;
5266 var4 = NULL;
5267 if (var3 == NULL) {
5268 var5 = 0; /* is null */
5269 } else {
5270 var5 = 1; /* arg is null and recv is not */
5271 }
5272 if (var5){
5273 var6 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__left_child]))(self) /* left_child on <self:ConcatNode>*/;
5274 if (var6 == NULL) {
5275 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1045);
5276 exit(1);
5277 } else {
5278 var7 = ((long (*)(val*))(var6->class->vft[COLOR_ropes__RopeNode__height]))(var6) /* height on <var6:nullable RopeNode>*/;
5279 }
5280 var_left_height = var7;
5281 } else {
5282 }
5283 var8 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__right_child]))(self) /* right_child on <self:ConcatNode>*/;
5284 var9 = NULL;
5285 if (var8 == NULL) {
5286 var10 = 0; /* is null */
5287 } else {
5288 var10 = 1; /* arg is null and recv is not */
5289 }
5290 if (var10){
5291 var11 = ((val* (*)(val*))(self->class->vft[COLOR_ropes__ConcatNode__right_child]))(self) /* right_child on <self:ConcatNode>*/;
5292 if (var11 == NULL) {
5293 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "lib/standard/ropes.nit", 1046);
5294 exit(1);
5295 } else {
5296 var12 = ((long (*)(val*))(var11->class->vft[COLOR_ropes__RopeNode__height]))(var11) /* height on <var11:nullable RopeNode>*/;
5297 }
5298 var_right_height = var12;
5299 } else {
5300 }
5301 { /* Inline kernel#Int#- (var_left_height,var_right_height) */
5302 var15 = var_left_height - var_right_height;
5303 var13 = var15;
5304 goto RET_LABEL14;
5305 RET_LABEL14:(void)0;
5306 }
5307 var = var13;
5308 goto RET_LABEL;
5309 RET_LABEL:;
5310 return var;
5311 }
5312 /* method ropes#ConcatNode#balance_factor for (self: Object): Int */
5313 long VIRTUAL_ropes__ConcatNode__balance_factor(val* self) {
5314 long var /* : Int */;
5315 long var1 /* : Int */;
5316 var1 = ropes__ConcatNode__balance_factor(self);
5317 var = var1;
5318 RET_LABEL:;
5319 return var;
5320 }
5321 /* method ropes#ConcatNode#init for (self: ConcatNode) */
5322 void ropes__ConcatNode__init(val* self) {
5323 ((void (*)(val*))(self->class->vft[COLOR_ropes__RopeNode__init]))(self) /* init on <self:ConcatNode>*/;
5324 RET_LABEL:;
5325 }
5326 /* method ropes#ConcatNode#init for (self: Object) */
5327 void VIRTUAL_ropes__ConcatNode__init(val* self) {
5328 ropes__ConcatNode__init(self);
5329 RET_LABEL:;
5330 }
5331 /* method ropes#LeafNode#init for (self: LeafNode, AbstractString) */
5332 void ropes__LeafNode__init(val* self, val* p0) {
5333 val* var_val /* var val: AbstractString */;
5334 val* var /* : String */;
5335 long var1 /* : Int */;
5336 var_val = p0;
5337 ((void (*)(val*))(self->class->vft[COLOR_ropes__RopeNode__init]))(self) /* init on <self:LeafNode>*/;
5338 var = ((val* (*)(val*))(var_val->class->vft[COLOR_string__Object__to_s]))(var_val) /* to_s on <var_val:AbstractString>*/;
5339 self->attrs[COLOR_ropes__LeafNode___value].val = var; /* _value on <self:LeafNode> */
5340 var1 = ((long (*)(val*))(var_val->class->vft[COLOR_abstract_collection__Collection__length]))(var_val) /* length on <var_val:AbstractString>*/;
5341 ((void (*)(val*, long))(self->class->vft[COLOR_ropes__RopeNode__length_61d]))(self, var1) /* length= on <self:LeafNode>*/;
5342 RET_LABEL:;
5343 }
5344 /* method ropes#LeafNode#init for (self: Object, AbstractString) */
5345 void VIRTUAL_ropes__LeafNode__init(val* self, val* p0) {
5346 ropes__LeafNode__init(self, p0);
5347 RET_LABEL:;
5348 }
5349 /* method ropes#LeafNode#value for (self: LeafNode): String */
5350 val* ropes__LeafNode__value(val* self) {
5351 val* var /* : String */;
5352 val* var1 /* : String */;
5353 var1 = self->attrs[COLOR_ropes__LeafNode___value].val; /* _value on <self:LeafNode> */
5354 if (var1 == NULL) {
5355 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute _value", "lib/standard/ropes.nit", 1064);
5356 exit(1);
5357 }
5358 var = var1;
5359 goto RET_LABEL;
5360 RET_LABEL:;
5361 return var;
5362 }
5363 /* method ropes#LeafNode#value for (self: Object): String */
5364 val* VIRTUAL_ropes__LeafNode__value(val* self) {
5365 val* var /* : String */;
5366 val* var1 /* : String */;
5367 var1 = ropes__LeafNode__value(self);
5368 var = var1;
5369 RET_LABEL:;
5370 return var;
5371 }
5372 /* method ropes#LeafNode#value= for (self: LeafNode, String) */
5373 void ropes__LeafNode__value_61d(val* self, val* p0) {
5374 val* var_val /* var val: String */;
5375 var_val = p0;
5376 self->attrs[COLOR_ropes__LeafNode___value].val = var_val; /* _value on <self:LeafNode> */
5377 RET_LABEL:;
5378 }
5379 /* method ropes#LeafNode#value= for (self: Object, String) */
5380 void VIRTUAL_ropes__LeafNode__value_61d(val* self, val* p0) {
5381 ropes__LeafNode__value_61d(self, p0);
5382 RET_LABEL:;
5383 }
5384 /* method ropes#String#== for (self: String, nullable Object): Bool */
5385 short int ropes__String___61d_61d(val* self, val* p0) {
5386 short int var /* : Bool */;
5387 val* var_other /* var other: nullable Object */;
5388 short int var1 /* : Bool */;
5389 int cltype;
5390 int idtype;
5391 short int var2 /* : Bool */;
5392 short int var3 /* : Bool */;
5393 var_other = p0;
5394 /* <var_other:nullable Object> isa Rope */
5395 cltype = type_ropes__Rope.color;
5396 idtype = type_ropes__Rope.id;
5397 if(var_other == NULL) {
5398 var1 = 0;
5399 } else {
5400 if(cltype >= var_other->type->table_size) {
5401 var1 = 0;
5402 } else {
5403 var1 = var_other->type->type_table[cltype] == idtype;
5404 }
5405 }
5406 if (var1){
5407 var2 = ((short int (*)(val*, val*))(var_other->class->vft[COLOR_kernel__Object___61d_61d]))(var_other, self) /* == on <var_other:nullable Object(Rope)>*/;
5408 var = var2;
5409 goto RET_LABEL;
5410 } else {
5411 var3 = ((short int (*)(val*, val*))(self->class->vft[COLOR_ropes__String___61d_61d]))(self, p0) /* == on <self:String>*/;
5412 var = var3;
5413 goto RET_LABEL;
5414 }
5415 RET_LABEL:;
5416 return var;
5417 }
5418 /* method ropes#String#== for (self: Object, nullable Object): Bool */
5419 short int VIRTUAL_ropes__String___61d_61d(val* self, val* p0) {
5420 short int var /* : Bool */;
5421 short int var1 /* : Bool */;
5422 var1 = ropes__String___61d_61d(self, p0);
5423 var = var1;
5424 RET_LABEL:;
5425 return var;
5426 }
5427 /* method ropes#Buffer#== for (self: Buffer, nullable Object): Bool */
5428 short int ropes__Buffer___61d_61d(val* self, val* p0) {
5429 short int var /* : Bool */;
5430 val* var_other /* var other: nullable Object */;
5431 short int var1 /* : Bool */;
5432 int cltype;
5433 int idtype;
5434 short int var2 /* : Bool */;
5435 short int var3 /* : Bool */;
5436 var_other = p0;
5437 /* <var_other:nullable Object> isa Rope */
5438 cltype = type_ropes__Rope.color;
5439 idtype = type_ropes__Rope.id;
5440 if(var_other == NULL) {
5441 var1 = 0;
5442 } else {
5443 if(cltype >= var_other->type->table_size) {
5444 var1 = 0;
5445 } else {
5446 var1 = var_other->type->type_table[cltype] == idtype;
5447 }
5448 }
5449 if (var1){
5450 var2 = ((short int (*)(val*, val*))(var_other->class->vft[COLOR_kernel__Object___61d_61d]))(var_other, self) /* == on <var_other:nullable Object(Rope)>*/;
5451 var = var2;
5452 goto RET_LABEL;
5453 } else {
5454 var3 = ((short int (*)(val*, val*))(self->class->vft[COLOR_ropes__Buffer___61d_61d]))(self, p0) /* == on <self:Buffer>*/;
5455 var = var3;
5456 goto RET_LABEL;
5457 }
5458 RET_LABEL:;
5459 return var;
5460 }
5461 /* method ropes#Buffer#== for (self: Object, nullable Object): Bool */
5462 short int VIRTUAL_ropes__Buffer___61d_61d(val* self, val* p0) {
5463 short int var /* : Bool */;
5464 short int var1 /* : Bool */;
5465 var1 = ropes__Buffer___61d_61d(self, p0);
5466 var = var1;
5467 RET_LABEL:;
5468 return var;
5469 }