update NOTICE
[nit.git] / c_src / file.sep.1.c
1 #include "file.sep.0.h"
2 /* method file#FStream#path= for (self: FStream, nullable String) */
3 void file__FStream__path_61d(val* self, val* p0) {
4 self->attrs[COLOR_file__FStream___path].val = p0; /* _path on <self:FStream> */
5 RET_LABEL:;
6 }
7 /* method file#FStream#path= for (self: Object, nullable String) */
8 void VIRTUAL_file__FStream__path_61d(val* self, val* p0) {
9 { /* Inline file#FStream#path= (self,p0) on <self:Object(FStream)> */
10 self->attrs[COLOR_file__FStream___path].val = p0; /* _path on <self:Object(FStream)> */
11 RET_LABEL1:(void)0;
12 }
13 RET_LABEL:;
14 }
15 /* method file#IFStream#close for (self: IFStream) */
16 void file__IFStream__close(val* self) {
17 val* var /* : nullable NativeFile */;
18 long var1 /* : Int */;
19 long var3 /* : Int for extern */;
20 void* var4 /* : NativeFile for extern */;
21 long var_i /* var i: Int */;
22 val* var5 /* : nullable FlatBuffer */;
23 short int var6 /* : Bool */;
24 var = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:IFStream> */
25 if (var == NULL) {
26 PRINT_ERROR("Runtime error: %s", "Receiver is null");
27 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 67);
28 show_backtrace(1);
29 } else {
30 { /* Inline file#NativeFile#io_close (var) on <var:nullable NativeFile> */
31 var4 = ((struct instance_kernel__Pointer*)var)->value; /* unboxing nullable NativeFile */
32 var3 = file_NativeFile_NativeFile_io_close_0(var4);
33 var1 = var3;
34 goto RET_LABEL2;
35 RET_LABEL2:(void)0;
36 }
37 }
38 var_i = var1;
39 var5 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
40 if (var5 == NULL) {
41 PRINT_ERROR("Runtime error: %s", "Receiver is null");
42 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 68);
43 show_backtrace(1);
44 } else {
45 string__FlatBuffer__clear(var5); /* Direct call string#FlatBuffer#clear on <var5:nullable FlatBuffer>*/
46 }
47 var6 = 1;
48 {
49 { /* Inline file#IFStream#end_reached= (self,var6) on <self:IFStream> */
50 self->attrs[COLOR_file__IFStream___end_reached].s = var6; /* _end_reached on <self:IFStream> */
51 RET_LABEL7:(void)0;
52 }
53 }
54 RET_LABEL:;
55 }
56 /* method file#IFStream#close for (self: Object) */
57 void VIRTUAL_file__IFStream__close(val* self) {
58 file__IFStream__close(self); /* Direct call file#IFStream#close on <self:Object(IFStream)>*/
59 RET_LABEL:;
60 }
61 /* method file#IFStream#fill_buffer for (self: IFStream) */
62 void file__IFStream__fill_buffer(val* self) {
63 val* var /* : nullable NativeFile */;
64 val* var1 /* : nullable FlatBuffer */;
65 char* var2 /* : NativeString */;
66 char* var4 /* : NativeString */;
67 val* var5 /* : nullable FlatBuffer */;
68 long var6 /* : Int */;
69 long var8 /* : Int */;
70 long var9 /* : Int */;
71 long var11 /* : Int for extern */;
72 void* var12 /* : NativeFile for extern */;
73 long var_nb /* var nb: Int */;
74 long var13 /* : Int */;
75 short int var14 /* : Bool */;
76 short int var16 /* : Bool */;
77 int cltype;
78 int idtype;
79 const char* var_class_name;
80 short int var17 /* : Bool */;
81 short int var18 /* : Bool */;
82 long var20 /* : Int */;
83 val* var21 /* : nullable FlatBuffer */;
84 long var23 /* : Int */;
85 var = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:IFStream> */
86 var1 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
87 if (var1 == NULL) {
88 PRINT_ERROR("Runtime error: %s", "Receiver is null");
89 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 74);
90 show_backtrace(1);
91 } else {
92 { /* Inline string#FlatText#items (var1) on <var1:nullable FlatBuffer> */
93 if (unlikely(var1 == NULL)) {
94 PRINT_ERROR("Runtime error: %s", "Receiver is null");
95 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 706);
96 show_backtrace(1);
97 }
98 var4 = var1->attrs[COLOR_string__FlatText___items].str; /* _items on <var1:nullable FlatBuffer> */
99 var2 = var4;
100 RET_LABEL3:(void)0;
101 }
102 }
103 var5 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
104 if (var5 == NULL) {
105 PRINT_ERROR("Runtime error: %s", "Receiver is null");
106 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 74);
107 show_backtrace(1);
108 } else {
109 { /* Inline string#FlatBuffer#capacity (var5) on <var5:nullable FlatBuffer> */
110 if (unlikely(var5 == NULL)) {
111 PRINT_ERROR("Runtime error: %s", "Receiver is null");
112 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 1408);
113 show_backtrace(1);
114 }
115 var8 = var5->attrs[COLOR_string__FlatBuffer___capacity].l; /* _capacity on <var5:nullable FlatBuffer> */
116 var6 = var8;
117 RET_LABEL7:(void)0;
118 }
119 }
120 if (var == NULL) {
121 PRINT_ERROR("Runtime error: %s", "Receiver is null");
122 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 74);
123 show_backtrace(1);
124 } else {
125 { /* Inline file#NativeFile#io_read (var,var2,var6) on <var:nullable NativeFile> */
126 var12 = ((struct instance_kernel__Pointer*)var)->value; /* unboxing nullable NativeFile */
127 var11 = file_NativeFile_NativeFile_io_read_2(var12, var2, var6);
128 var9 = var11;
129 goto RET_LABEL10;
130 RET_LABEL10:(void)0;
131 }
132 }
133 var_nb = var9;
134 var13 = 0;
135 {
136 { /* Inline kernel#Int#<= (var_nb,var13) on <var_nb:Int> */
137 /* Covariant cast for argument 0 (i) <var13:Int> isa OTHER */
138 /* <var13:Int> isa OTHER */
139 var16 = 1; /* easy <var13:Int> isa OTHER*/
140 if (unlikely(!var16)) {
141 var_class_name = type_kernel__Int.name;
142 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
143 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 370);
144 show_backtrace(1);
145 }
146 var17 = var_nb <= var13;
147 var14 = var17;
148 goto RET_LABEL15;
149 RET_LABEL15:(void)0;
150 }
151 }
152 if (var14){
153 var18 = 1;
154 {
155 { /* Inline file#IFStream#end_reached= (self,var18) on <self:IFStream> */
156 self->attrs[COLOR_file__IFStream___end_reached].s = var18; /* _end_reached on <self:IFStream> */
157 RET_LABEL19:(void)0;
158 }
159 }
160 var20 = 0;
161 var_nb = var20;
162 } else {
163 }
164 var21 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
165 if (var21 == NULL) {
166 PRINT_ERROR("Runtime error: %s", "Receiver is null");
167 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 79);
168 show_backtrace(1);
169 } else {
170 { /* Inline string#FlatText#length= (var21,var_nb) on <var21:nullable FlatBuffer> */
171 if (unlikely(var21 == NULL)) {
172 PRINT_ERROR("Runtime error: %s", "Receiver is null");
173 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 715);
174 show_backtrace(1);
175 }
176 var21->attrs[COLOR_string__FlatText___length].l = var_nb; /* _length on <var21:nullable FlatBuffer> */
177 RET_LABEL22:(void)0;
178 }
179 }
180 var23 = 0;
181 self->attrs[COLOR_stream__BufferedIStream___buffer_pos].l = var23; /* _buffer_pos on <self:IFStream> */
182 RET_LABEL:;
183 }
184 /* method file#IFStream#fill_buffer for (self: Object) */
185 void VIRTUAL_file__IFStream__fill_buffer(val* self) {
186 file__IFStream__fill_buffer(self); /* Direct call file#IFStream#fill_buffer on <self:Object(IFStream)>*/
187 RET_LABEL:;
188 }
189 /* method file#IFStream#end_reached for (self: IFStream): Bool */
190 short int file__IFStream__end_reached(val* self) {
191 short int var /* : Bool */;
192 short int var1 /* : Bool */;
193 var1 = self->attrs[COLOR_file__IFStream___end_reached].s; /* _end_reached on <self:IFStream> */
194 var = var1;
195 RET_LABEL:;
196 return var;
197 }
198 /* method file#IFStream#end_reached for (self: Object): Bool */
199 short int VIRTUAL_file__IFStream__end_reached(val* self) {
200 short int var /* : Bool */;
201 short int var1 /* : Bool */;
202 short int var3 /* : Bool */;
203 { /* Inline file#IFStream#end_reached (self) on <self:Object(IFStream)> */
204 var3 = self->attrs[COLOR_file__IFStream___end_reached].s; /* _end_reached on <self:Object(IFStream)> */
205 var1 = var3;
206 RET_LABEL2:(void)0;
207 }
208 var = var1;
209 RET_LABEL:;
210 return var;
211 }
212 /* method file#IFStream#end_reached= for (self: IFStream, Bool) */
213 void file__IFStream__end_reached_61d(val* self, short int p0) {
214 self->attrs[COLOR_file__IFStream___end_reached].s = p0; /* _end_reached on <self:IFStream> */
215 RET_LABEL:;
216 }
217 /* method file#IFStream#end_reached= for (self: Object, Bool) */
218 void VIRTUAL_file__IFStream__end_reached_61d(val* self, short int p0) {
219 { /* Inline file#IFStream#end_reached= (self,p0) on <self:Object(IFStream)> */
220 self->attrs[COLOR_file__IFStream___end_reached].s = p0; /* _end_reached on <self:Object(IFStream)> */
221 RET_LABEL1:(void)0;
222 }
223 RET_LABEL:;
224 }
225 /* method file#IFStream#open for (self: IFStream, String) */
226 void file__IFStream__open(val* self, val* p0) {
227 val* var_path /* var path: String */;
228 long var /* : Int */;
229 val* var2 /* : NativeFile */;
230 char* var3 /* : NativeString */;
231 val* var4 /* : NativeFile */;
232 val* var5 /* : nullable NativeFile */;
233 short int var6 /* : Bool */;
234 short int var8 /* : Bool for extern */;
235 void* var9 /* : Pointer for extern */;
236 short int var10 /* : Bool */;
237 static val* varonce;
238 val* var11 /* : String */;
239 char* var12 /* : NativeString */;
240 long var13 /* : Int */;
241 val* var14 /* : FlatString */;
242 static val* varonce15;
243 val* var16 /* : String */;
244 char* var17 /* : NativeString */;
245 long var18 /* : Int */;
246 val* var19 /* : FlatString */;
247 val* var20 /* : Sys */;
248 val* var22 /* : Sys */;
249 long var23 /* : Int */;
250 long var25 /* : Int */;
251 val* var26 /* : String */;
252 static val* varonce27;
253 val* var28 /* : String */;
254 char* var29 /* : NativeString */;
255 long var30 /* : Int */;
256 val* var31 /* : FlatString */;
257 val* var32 /* : Array[Object] */;
258 long var33 /* : Int */;
259 val* var34 /* : NativeArray[Object] */;
260 val* var35 /* : String */;
261 {
262 ((void (*)(val*))(self->class->vft[COLOR_kernel__Object__init]))(self) /* init on <self:IFStream>*/;
263 }
264 var_path = p0;
265 {
266 { /* Inline file#FStream#path= (self,var_path) on <self:IFStream> */
267 self->attrs[COLOR_file__FStream___path].val = var_path; /* _path on <self:IFStream> */
268 RET_LABEL1:(void)0;
269 }
270 }
271 var = 10;
272 {
273 stream__BufferedIStream__prepare_buffer(self, var); /* Direct call stream#BufferedIStream#prepare_buffer on <self:IFStream>*/
274 }
275 var2 = NEW_file__NativeFile(&type_file__NativeFile);
276 {
277 var3 = string__FlatString__to_cstring(var_path);
278 }
279 {
280 var4 = file__NativeFile__io_open_read(var2, var3);
281 }
282 self->attrs[COLOR_file__FStream___file].val = var4; /* _file on <self:IFStream> */
283 var5 = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:IFStream> */
284 if (var5 == NULL) {
285 PRINT_ERROR("Runtime error: %s", "Receiver is null");
286 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 92);
287 show_backtrace(1);
288 } else {
289 { /* Inline kernel#Pointer#address_is_null (var5) on <var5:nullable NativeFile> */
290 var9 = ((struct instance_kernel__Pointer*)var5)->value; /* unboxing nullable NativeFile */
291 var8 = address_is_null(var9);
292 var6 = var8;
293 goto RET_LABEL7;
294 RET_LABEL7:(void)0;
295 }
296 }
297 var10 = !var6;
298 if (unlikely(!var10)) {
299 if (varonce) {
300 var11 = varonce;
301 } else {
302 var12 = "Error: Opening file at \'";
303 var13 = 24;
304 var14 = string__NativeString__to_s_with_length(var12, var13);
305 var11 = var14;
306 varonce = var11;
307 }
308 if (varonce15) {
309 var16 = varonce15;
310 } else {
311 var17 = "\' failed with \'";
312 var18 = 15;
313 var19 = string__NativeString__to_s_with_length(var17, var18);
314 var16 = var19;
315 varonce15 = var16;
316 }
317 {
318 { /* Inline kernel#Object#sys (self) on <self:IFStream> */
319 var22 = glob_sys;
320 var20 = var22;
321 goto RET_LABEL21;
322 RET_LABEL21:(void)0;
323 }
324 }
325 {
326 { /* Inline kernel#Sys#errno (var20) on <var20:Sys> */
327 struct nitni_instance* var_for_c_0;
328 var_for_c_0 = nit_alloc(sizeof(struct nitni_instance));
329 var_for_c_0->value = var20;
330 var25 = kernel___Sys_errno___impl(var_for_c_0);
331 var23 = var25;
332 goto RET_LABEL24;
333 RET_LABEL24:(void)0;
334 }
335 }
336 {
337 var26 = string__Int__strerror(var23);
338 }
339 if (varonce27) {
340 var28 = varonce27;
341 } else {
342 var29 = "\'";
343 var30 = 1;
344 var31 = string__NativeString__to_s_with_length(var29, var30);
345 var28 = var31;
346 varonce27 = var28;
347 }
348 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
349 { /* var32 = array_instance Array[Object] */
350 var33 = 5;
351 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
352 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var11;
353 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_path;
354 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var16;
355 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var26;
356 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
357 {
358 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
359 }
360 }
361 {
362 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
363 }
364 {
365 file__Object__print(self, var35); /* Direct call file#Object#print on <self:IFStream>*/
366 }
367 PRINT_ERROR("Runtime error: %s", "Assert failed");
368 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 92);
369 show_backtrace(1);
370 }
371 RET_LABEL:;
372 }
373 /* method file#IFStream#open for (self: Object, String) */
374 void VIRTUAL_file__IFStream__open(val* self, val* p0) {
375 file__IFStream__open(self, p0); /* Direct call file#IFStream#open on <self:Object(IFStream)>*/
376 RET_LABEL:;
377 }
378 /* method file#IFStream#init for (self: IFStream) */
379 void file__IFStream__init(val* self) {
380 {
381 ((void (*)(val*))(self->class->vft[COLOR_kernel__Object__init]))(self) /* init on <self:IFStream>*/;
382 }
383 RET_LABEL:;
384 }
385 /* method file#IFStream#init for (self: Object) */
386 void VIRTUAL_file__IFStream__init(val* self) {
387 file__IFStream__init(self); /* Direct call file#IFStream#init on <self:Object(IFStream)>*/
388 RET_LABEL:;
389 }
390 /* method file#OFStream#write for (self: OFStream, Text) */
391 void file__OFStream__write(val* self, val* p0) {
392 val* var_s /* var s: Text */;
393 short int var /* : Bool */;
394 short int var1 /* : Bool */;
395 int cltype;
396 int idtype;
397 char* var2 /* : NativeString */;
398 long var3 /* : Int */;
399 long var5 /* : Int */;
400 val* var6 /* : Iterator[Text] */;
401 val* var_ /* var : Iterator[Text] */;
402 val* var7 /* : Iterator[nullable Object] */;
403 val* var_8 /* var : Iterator[Text] */;
404 short int var9 /* : Bool */;
405 val* var10 /* : nullable Object */;
406 val* var_i /* var i: Text */;
407 char* var11 /* : NativeString */;
408 long var12 /* : Int */;
409 long var14 /* : Int */;
410 var_s = p0;
411 var = self->attrs[COLOR_file__OFStream___is_writable].s; /* _is_writable on <self:OFStream> */
412 if (unlikely(!var)) {
413 PRINT_ERROR("Runtime error: %s", "Assert failed");
414 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 108);
415 show_backtrace(1);
416 }
417 /* <var_s:Text> isa FlatText */
418 cltype = type_string__FlatText.color;
419 idtype = type_string__FlatText.id;
420 if(cltype >= var_s->type->table_size) {
421 var1 = 0;
422 } else {
423 var1 = var_s->type->type_table[cltype] == idtype;
424 }
425 if (var1){
426 {
427 var2 = ((char* (*)(val*))(var_s->class->vft[COLOR_string__Text__to_cstring]))(var_s) /* to_cstring on <var_s:Text(FlatText)>*/;
428 }
429 {
430 { /* Inline string#FlatText#length (var_s) on <var_s:Text(FlatText)> */
431 var5 = var_s->attrs[COLOR_string__FlatText___length].l; /* _length on <var_s:Text(FlatText)> */
432 var3 = var5;
433 RET_LABEL4:(void)0;
434 }
435 }
436 {
437 file__OFStream__write_native(self, var2, var3); /* Direct call file#OFStream#write_native on <self:OFStream>*/
438 }
439 } else {
440 {
441 var6 = ((val* (*)(val*))(var_s->class->vft[COLOR_string__Text__substrings]))(var_s) /* substrings on <var_s:Text>*/;
442 }
443 var_ = var6;
444 {
445 var7 = abstract_collection__Iterator__iterator(var_);
446 }
447 var_8 = var7;
448 for(;;) {
449 {
450 var9 = ((short int (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_8) /* is_ok on <var_8:Iterator[Text]>*/;
451 }
452 if (var9){
453 {
454 var10 = ((val* (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__item]))(var_8) /* item on <var_8:Iterator[Text]>*/;
455 }
456 var_i = var10;
457 {
458 var11 = ((char* (*)(val*))(var_i->class->vft[COLOR_string__Text__to_cstring]))(var_i) /* to_cstring on <var_i:Text>*/;
459 }
460 {
461 { /* Inline string#FlatText#length (var_i) on <var_i:Text> */
462 var14 = var_i->attrs[COLOR_string__FlatText___length].l; /* _length on <var_i:Text> */
463 var12 = var14;
464 RET_LABEL13:(void)0;
465 }
466 }
467 {
468 file__OFStream__write_native(self, var11, var12); /* Direct call file#OFStream#write_native on <self:OFStream>*/
469 }
470 {
471 ((void (*)(val*))(var_8->class->vft[COLOR_abstract_collection__Iterator__next]))(var_8) /* next on <var_8:Iterator[Text]>*/;
472 }
473 } else {
474 goto BREAK_label;
475 }
476 }
477 BREAK_label: (void)0;
478 {
479 { /* Inline abstract_collection#Iterator#finish (var_8) on <var_8:Iterator[Text]> */
480 RET_LABEL15:(void)0;
481 }
482 }
483 }
484 RET_LABEL:;
485 }
486 /* method file#OFStream#write for (self: Object, Text) */
487 void VIRTUAL_file__OFStream__write(val* self, val* p0) {
488 file__OFStream__write(self, p0); /* Direct call file#OFStream#write on <self:Object(OFStream)>*/
489 RET_LABEL:;
490 }
491 /* method file#OFStream#close for (self: OFStream) */
492 void file__OFStream__close(val* self) {
493 val* var /* : nullable NativeFile */;
494 long var1 /* : Int */;
495 long var3 /* : Int for extern */;
496 void* var4 /* : NativeFile for extern */;
497 long var_i /* var i: Int */;
498 short int var5 /* : Bool */;
499 var = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:OFStream> */
500 if (var == NULL) {
501 PRINT_ERROR("Runtime error: %s", "Receiver is null");
502 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 118);
503 show_backtrace(1);
504 } else {
505 { /* Inline file#NativeFile#io_close (var) on <var:nullable NativeFile> */
506 var4 = ((struct instance_kernel__Pointer*)var)->value; /* unboxing nullable NativeFile */
507 var3 = file_NativeFile_NativeFile_io_close_0(var4);
508 var1 = var3;
509 goto RET_LABEL2;
510 RET_LABEL2:(void)0;
511 }
512 }
513 var_i = var1;
514 var5 = 0;
515 self->attrs[COLOR_file__OFStream___is_writable].s = var5; /* _is_writable on <self:OFStream> */
516 RET_LABEL:;
517 }
518 /* method file#OFStream#close for (self: Object) */
519 void VIRTUAL_file__OFStream__close(val* self) {
520 file__OFStream__close(self); /* Direct call file#OFStream#close on <self:Object(OFStream)>*/
521 RET_LABEL:;
522 }
523 /* method file#OFStream#write_native for (self: OFStream, NativeString, Int) */
524 void file__OFStream__write_native(val* self, char* p0, long p1) {
525 char* var_native /* var native: NativeString */;
526 long var_len /* var len: Int */;
527 short int var /* : Bool */;
528 val* var1 /* : nullable NativeFile */;
529 long var2 /* : Int */;
530 long var4 /* : Int for extern */;
531 void* var5 /* : NativeFile for extern */;
532 long var_err /* var err: Int */;
533 short int var6 /* : Bool */;
534 short int var7 /* : Bool */;
535 short int var9 /* : Bool */;
536 short int var10 /* : Bool */;
537 static val* varonce;
538 val* var11 /* : String */;
539 char* var12 /* : NativeString */;
540 long var13 /* : Int */;
541 val* var14 /* : FlatString */;
542 static val* varonce15;
543 val* var16 /* : String */;
544 char* var17 /* : NativeString */;
545 long var18 /* : Int */;
546 val* var19 /* : FlatString */;
547 static val* varonce20;
548 val* var21 /* : String */;
549 char* var22 /* : NativeString */;
550 long var23 /* : Int */;
551 val* var24 /* : FlatString */;
552 val* var25 /* : Array[Object] */;
553 long var26 /* : Int */;
554 val* var27 /* : NativeArray[Object] */;
555 val* var28 /* : Object */;
556 val* var29 /* : Object */;
557 var_native = p0;
558 var_len = p1;
559 var = self->attrs[COLOR_file__OFStream___is_writable].s; /* _is_writable on <self:OFStream> */
560 if (unlikely(!var)) {
561 PRINT_ERROR("Runtime error: %s", "Assert failed");
562 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 127);
563 show_backtrace(1);
564 }
565 var1 = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:OFStream> */
566 if (var1 == NULL) {
567 PRINT_ERROR("Runtime error: %s", "Receiver is null");
568 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 128);
569 show_backtrace(1);
570 } else {
571 { /* Inline file#NativeFile#io_write (var1,var_native,var_len) on <var1:nullable NativeFile> */
572 var5 = ((struct instance_kernel__Pointer*)var1)->value; /* unboxing nullable NativeFile */
573 var4 = file_NativeFile_NativeFile_io_write_2(var5, var_native, var_len);
574 var2 = var4;
575 goto RET_LABEL3;
576 RET_LABEL3:(void)0;
577 }
578 }
579 var_err = var2;
580 {
581 { /* Inline kernel#Int#!= (var_err,var_len) on <var_err:Int> */
582 var9 = var_err == var_len;
583 var10 = !var9;
584 var7 = var10;
585 goto RET_LABEL8;
586 RET_LABEL8:(void)0;
587 }
588 var6 = var7;
589 }
590 if (var6){
591 if (varonce) {
592 var11 = varonce;
593 } else {
594 var12 = "Problem in writing : ";
595 var13 = 21;
596 var14 = string__NativeString__to_s_with_length(var12, var13);
597 var11 = var14;
598 varonce = var11;
599 }
600 if (varonce15) {
601 var16 = varonce15;
602 } else {
603 var17 = " ";
604 var18 = 1;
605 var19 = string__NativeString__to_s_with_length(var17, var18);
606 var16 = var19;
607 varonce15 = var16;
608 }
609 if (varonce20) {
610 var21 = varonce20;
611 } else {
612 var22 = "\n";
613 var23 = 1;
614 var24 = string__NativeString__to_s_with_length(var22, var23);
615 var21 = var24;
616 varonce20 = var21;
617 }
618 var25 = NEW_array__Array(&type_array__Arraykernel__Object);
619 { /* var25 = array_instance Array[Object] */
620 var26 = 5;
621 var27 = NEW_array__NativeArray(var26, &type_array__NativeArraykernel__Object);
622 ((struct instance_array__NativeArray*)var27)->values[0] = (val*) var11;
623 var28 = BOX_kernel__Int(var_err); /* autobox from Int to Object */
624 ((struct instance_array__NativeArray*)var27)->values[1] = (val*) var28;
625 ((struct instance_array__NativeArray*)var27)->values[2] = (val*) var16;
626 var29 = BOX_kernel__Int(var_len); /* autobox from Int to Object */
627 ((struct instance_array__NativeArray*)var27)->values[3] = (val*) var29;
628 ((struct instance_array__NativeArray*)var27)->values[4] = (val*) var21;
629 {
630 ((void (*)(val*, val*, long))(var25->class->vft[COLOR_array__Array__with_native]))(var25, var27, var26) /* with_native on <var25:Array[Object]>*/;
631 }
632 }
633 {
634 file__Object__printn(self, var25); /* Direct call file#Object#printn on <self:OFStream>*/
635 }
636 } else {
637 }
638 RET_LABEL:;
639 }
640 /* method file#OFStream#write_native for (self: Object, NativeString, Int) */
641 void VIRTUAL_file__OFStream__write_native(val* self, char* p0, long p1) {
642 file__OFStream__write_native(self, p0, p1); /* Direct call file#OFStream#write_native on <self:Object(OFStream)>*/
643 RET_LABEL:;
644 }
645 /* method file#OFStream#open for (self: OFStream, String) */
646 void file__OFStream__open(val* self, val* p0) {
647 val* var_path /* var path: String */;
648 val* var /* : NativeFile */;
649 char* var1 /* : NativeString */;
650 val* var2 /* : NativeFile */;
651 val* var3 /* : nullable NativeFile */;
652 short int var4 /* : Bool */;
653 short int var6 /* : Bool for extern */;
654 void* var7 /* : Pointer for extern */;
655 short int var8 /* : Bool */;
656 static val* varonce;
657 val* var9 /* : String */;
658 char* var10 /* : NativeString */;
659 long var11 /* : Int */;
660 val* var12 /* : FlatString */;
661 static val* varonce13;
662 val* var14 /* : String */;
663 char* var15 /* : NativeString */;
664 long var16 /* : Int */;
665 val* var17 /* : FlatString */;
666 val* var18 /* : Sys */;
667 val* var20 /* : Sys */;
668 long var21 /* : Int */;
669 long var23 /* : Int */;
670 val* var24 /* : String */;
671 static val* varonce25;
672 val* var26 /* : String */;
673 char* var27 /* : NativeString */;
674 long var28 /* : Int */;
675 val* var29 /* : FlatString */;
676 val* var30 /* : Array[Object] */;
677 long var31 /* : Int */;
678 val* var32 /* : NativeArray[Object] */;
679 val* var33 /* : String */;
680 short int var35 /* : Bool */;
681 {
682 ((void (*)(val*))(self->class->vft[COLOR_kernel__Object__init]))(self) /* init on <self:OFStream>*/;
683 }
684 var_path = p0;
685 var = NEW_file__NativeFile(&type_file__NativeFile);
686 {
687 var1 = string__FlatString__to_cstring(var_path);
688 }
689 {
690 var2 = file__NativeFile__io_open_write(var, var1);
691 }
692 self->attrs[COLOR_file__FStream___file].val = var2; /* _file on <self:OFStream> */
693 var3 = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:OFStream> */
694 if (var3 == NULL) {
695 PRINT_ERROR("Runtime error: %s", "Receiver is null");
696 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 139);
697 show_backtrace(1);
698 } else {
699 { /* Inline kernel#Pointer#address_is_null (var3) on <var3:nullable NativeFile> */
700 var7 = ((struct instance_kernel__Pointer*)var3)->value; /* unboxing nullable NativeFile */
701 var6 = address_is_null(var7);
702 var4 = var6;
703 goto RET_LABEL5;
704 RET_LABEL5:(void)0;
705 }
706 }
707 var8 = !var4;
708 if (unlikely(!var8)) {
709 if (varonce) {
710 var9 = varonce;
711 } else {
712 var10 = "Error: Opening file at \'";
713 var11 = 24;
714 var12 = string__NativeString__to_s_with_length(var10, var11);
715 var9 = var12;
716 varonce = var9;
717 }
718 if (varonce13) {
719 var14 = varonce13;
720 } else {
721 var15 = "\' failed with \'";
722 var16 = 15;
723 var17 = string__NativeString__to_s_with_length(var15, var16);
724 var14 = var17;
725 varonce13 = var14;
726 }
727 {
728 { /* Inline kernel#Object#sys (self) on <self:OFStream> */
729 var20 = glob_sys;
730 var18 = var20;
731 goto RET_LABEL19;
732 RET_LABEL19:(void)0;
733 }
734 }
735 {
736 { /* Inline kernel#Sys#errno (var18) on <var18:Sys> */
737 struct nitni_instance* var_for_c_0;
738 var_for_c_0 = nit_alloc(sizeof(struct nitni_instance));
739 var_for_c_0->value = var18;
740 var23 = kernel___Sys_errno___impl(var_for_c_0);
741 var21 = var23;
742 goto RET_LABEL22;
743 RET_LABEL22:(void)0;
744 }
745 }
746 {
747 var24 = string__Int__strerror(var21);
748 }
749 if (varonce25) {
750 var26 = varonce25;
751 } else {
752 var27 = "\'";
753 var28 = 1;
754 var29 = string__NativeString__to_s_with_length(var27, var28);
755 var26 = var29;
756 varonce25 = var26;
757 }
758 var30 = NEW_array__Array(&type_array__Arraykernel__Object);
759 { /* var30 = array_instance Array[Object] */
760 var31 = 5;
761 var32 = NEW_array__NativeArray(var31, &type_array__NativeArraykernel__Object);
762 ((struct instance_array__NativeArray*)var32)->values[0] = (val*) var9;
763 ((struct instance_array__NativeArray*)var32)->values[1] = (val*) var_path;
764 ((struct instance_array__NativeArray*)var32)->values[2] = (val*) var14;
765 ((struct instance_array__NativeArray*)var32)->values[3] = (val*) var24;
766 ((struct instance_array__NativeArray*)var32)->values[4] = (val*) var26;
767 {
768 ((void (*)(val*, val*, long))(var30->class->vft[COLOR_array__Array__with_native]))(var30, var32, var31) /* with_native on <var30:Array[Object]>*/;
769 }
770 }
771 {
772 var33 = ((val* (*)(val*))(var30->class->vft[COLOR_string__Object__to_s]))(var30) /* to_s on <var30:Array[Object]>*/;
773 }
774 {
775 file__Object__print(self, var33); /* Direct call file#Object#print on <self:OFStream>*/
776 }
777 PRINT_ERROR("Runtime error: %s", "Assert failed");
778 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 139);
779 show_backtrace(1);
780 }
781 {
782 { /* Inline file#FStream#path= (self,var_path) on <self:OFStream> */
783 self->attrs[COLOR_file__FStream___path].val = var_path; /* _path on <self:OFStream> */
784 RET_LABEL34:(void)0;
785 }
786 }
787 var35 = 1;
788 self->attrs[COLOR_file__OFStream___is_writable].s = var35; /* _is_writable on <self:OFStream> */
789 RET_LABEL:;
790 }
791 /* method file#OFStream#open for (self: Object, String) */
792 void VIRTUAL_file__OFStream__open(val* self, val* p0) {
793 file__OFStream__open(self, p0); /* Direct call file#OFStream#open on <self:Object(OFStream)>*/
794 RET_LABEL:;
795 }
796 /* method file#OFStream#init for (self: OFStream) */
797 void file__OFStream__init(val* self) {
798 {
799 ((void (*)(val*))(self->class->vft[COLOR_kernel__Object__init]))(self) /* init on <self:OFStream>*/;
800 }
801 RET_LABEL:;
802 }
803 /* method file#OFStream#init for (self: Object) */
804 void VIRTUAL_file__OFStream__init(val* self) {
805 file__OFStream__init(self); /* Direct call file#OFStream#init on <self:Object(OFStream)>*/
806 RET_LABEL:;
807 }
808 /* method file#Stdin#init for (self: Stdin) */
809 void file__Stdin__init(val* self) {
810 val* var /* : NativeFile */;
811 val* var1 /* : NativeFile */;
812 static val* varonce;
813 val* var2 /* : String */;
814 char* var3 /* : NativeString */;
815 long var4 /* : Int */;
816 val* var5 /* : FlatString */;
817 long var7 /* : Int */;
818 {
819 file__IFStream__init(self); /* Direct call file#IFStream#init on <self:Stdin>*/
820 }
821 var = NEW_file__NativeFile(&type_file__NativeFile);
822 {
823 var1 = file__NativeFile__native_stdin(var);
824 }
825 self->attrs[COLOR_file__FStream___file].val = var1; /* _file on <self:Stdin> */
826 if (varonce) {
827 var2 = varonce;
828 } else {
829 var3 = "/dev/stdin";
830 var4 = 10;
831 var5 = string__NativeString__to_s_with_length(var3, var4);
832 var2 = var5;
833 varonce = var2;
834 }
835 {
836 { /* Inline file#FStream#path= (self,var2) on <self:Stdin> */
837 self->attrs[COLOR_file__FStream___path].val = var2; /* _path on <self:Stdin> */
838 RET_LABEL6:(void)0;
839 }
840 }
841 var7 = 1;
842 {
843 stream__BufferedIStream__prepare_buffer(self, var7); /* Direct call stream#BufferedIStream#prepare_buffer on <self:Stdin>*/
844 }
845 RET_LABEL:;
846 }
847 /* method file#Stdin#init for (self: Object) */
848 void VIRTUAL_file__Stdin__init(val* self) {
849 file__Stdin__init(self); /* Direct call file#Stdin#init on <self:Object(Stdin)>*/
850 RET_LABEL:;
851 }
852 /* method file#Stdout#init for (self: Stdout) */
853 void file__Stdout__init(val* self) {
854 val* var /* : NativeFile */;
855 val* var1 /* : NativeFile */;
856 static val* varonce;
857 val* var2 /* : String */;
858 char* var3 /* : NativeString */;
859 long var4 /* : Int */;
860 val* var5 /* : FlatString */;
861 short int var7 /* : Bool */;
862 {
863 file__OFStream__init(self); /* Direct call file#OFStream#init on <self:Stdout>*/
864 }
865 var = NEW_file__NativeFile(&type_file__NativeFile);
866 {
867 var1 = file__NativeFile__native_stdout(var);
868 }
869 self->attrs[COLOR_file__FStream___file].val = var1; /* _file on <self:Stdout> */
870 if (varonce) {
871 var2 = varonce;
872 } else {
873 var3 = "/dev/stdout";
874 var4 = 11;
875 var5 = string__NativeString__to_s_with_length(var3, var4);
876 var2 = var5;
877 varonce = var2;
878 }
879 {
880 { /* Inline file#FStream#path= (self,var2) on <self:Stdout> */
881 self->attrs[COLOR_file__FStream___path].val = var2; /* _path on <self:Stdout> */
882 RET_LABEL6:(void)0;
883 }
884 }
885 var7 = 1;
886 self->attrs[COLOR_file__OFStream___is_writable].s = var7; /* _is_writable on <self:Stdout> */
887 RET_LABEL:;
888 }
889 /* method file#Stdout#init for (self: Object) */
890 void VIRTUAL_file__Stdout__init(val* self) {
891 file__Stdout__init(self); /* Direct call file#Stdout#init on <self:Object(Stdout)>*/
892 RET_LABEL:;
893 }
894 /* method file#Stderr#init for (self: Stderr) */
895 void file__Stderr__init(val* self) {
896 val* var /* : NativeFile */;
897 val* var1 /* : NativeFile */;
898 static val* varonce;
899 val* var2 /* : String */;
900 char* var3 /* : NativeString */;
901 long var4 /* : Int */;
902 val* var5 /* : FlatString */;
903 short int var7 /* : Bool */;
904 {
905 file__OFStream__init(self); /* Direct call file#OFStream#init on <self:Stderr>*/
906 }
907 var = NEW_file__NativeFile(&type_file__NativeFile);
908 {
909 var1 = file__NativeFile__native_stderr(var);
910 }
911 self->attrs[COLOR_file__FStream___file].val = var1; /* _file on <self:Stderr> */
912 if (varonce) {
913 var2 = varonce;
914 } else {
915 var3 = "/dev/stderr";
916 var4 = 11;
917 var5 = string__NativeString__to_s_with_length(var3, var4);
918 var2 = var5;
919 varonce = var2;
920 }
921 {
922 { /* Inline file#FStream#path= (self,var2) on <self:Stderr> */
923 self->attrs[COLOR_file__FStream___path].val = var2; /* _path on <self:Stderr> */
924 RET_LABEL6:(void)0;
925 }
926 }
927 var7 = 1;
928 self->attrs[COLOR_file__OFStream___is_writable].s = var7; /* _is_writable on <self:Stderr> */
929 RET_LABEL:;
930 }
931 /* method file#Stderr#init for (self: Object) */
932 void VIRTUAL_file__Stderr__init(val* self) {
933 file__Stderr__init(self); /* Direct call file#Stderr#init on <self:Object(Stderr)>*/
934 RET_LABEL:;
935 }
936 /* method file#String#file_exists for (self: String): Bool */
937 short int file__String__file_exists(val* self) {
938 short int var /* : Bool */;
939 char* var1 /* : NativeString */;
940 short int var2 /* : Bool */;
941 short int var4 /* : Bool for extern */;
942 {
943 var1 = string__FlatString__to_cstring(self);
944 }
945 {
946 { /* Inline file#NativeString#file_exists (var1) on <var1:NativeString> */
947 var4 = string_NativeString_NativeString_file_exists_0(var1);
948 var2 = var4;
949 goto RET_LABEL3;
950 RET_LABEL3:(void)0;
951 }
952 }
953 var = var2;
954 goto RET_LABEL;
955 RET_LABEL:;
956 return var;
957 }
958 /* method file#String#file_exists for (self: Object): Bool */
959 short int VIRTUAL_file__String__file_exists(val* self) {
960 short int var /* : Bool */;
961 short int var1 /* : Bool */;
962 var1 = file__String__file_exists(self);
963 var = var1;
964 RET_LABEL:;
965 return var;
966 }
967 /* method file#String#file_copy_to for (self: String, String) */
968 void file__String__file_copy_to(val* self, val* p0) {
969 val* var_dest /* var dest: String */;
970 val* var /* : IFStream */;
971 val* var_input /* var input: IFStream */;
972 val* var1 /* : OFStream */;
973 val* var_output /* var output: OFStream */;
974 short int var2 /* : Bool */;
975 short int var3 /* : Bool */;
976 long var4 /* : Int */;
977 val* var5 /* : String */;
978 val* var_buffer /* var buffer: String */;
979 var_dest = p0;
980 var = NEW_file__IFStream(&type_file__IFStream);
981 {
982 file__IFStream__open(var, self); /* Direct call file#IFStream#open on <var:IFStream>*/
983 }
984 var_input = var;
985 var1 = NEW_file__OFStream(&type_file__OFStream);
986 {
987 file__OFStream__open(var1, var_dest); /* Direct call file#OFStream#open on <var1:OFStream>*/
988 }
989 var_output = var1;
990 for(;;) {
991 {
992 var2 = stream__BufferedIStream__eof(var_input);
993 }
994 var3 = !var2;
995 if (var3){
996 var4 = 1024;
997 {
998 var5 = stream__BufferedIStream__read(var_input, var4);
999 }
1000 var_buffer = var5;
1001 {
1002 file__OFStream__write(var_output, var_buffer); /* Direct call file#OFStream#write on <var_output:OFStream>*/
1003 }
1004 } else {
1005 goto BREAK_label;
1006 }
1007 }
1008 BREAK_label: (void)0;
1009 {
1010 file__IFStream__close(var_input); /* Direct call file#IFStream#close on <var_input:IFStream>*/
1011 }
1012 {
1013 file__OFStream__close(var_output); /* Direct call file#OFStream#close on <var_output:OFStream>*/
1014 }
1015 RET_LABEL:;
1016 }
1017 /* method file#String#file_copy_to for (self: Object, String) */
1018 void VIRTUAL_file__String__file_copy_to(val* self, val* p0) {
1019 file__String__file_copy_to(self, p0); /* Direct call file#String#file_copy_to on <self:Object(String)>*/
1020 RET_LABEL:;
1021 }
1022 /* method file#String#strip_extension for (self: String, String): String */
1023 val* file__String__strip_extension(val* self, val* p0) {
1024 val* var /* : String */;
1025 val* var_ext /* var ext: String */;
1026 short int var1 /* : Bool */;
1027 long var2 /* : Int */;
1028 long var3 /* : Int */;
1029 long var5 /* : Int */;
1030 long var6 /* : Int */;
1031 long var8 /* : Int */;
1032 long var9 /* : Int */;
1033 short int var11 /* : Bool */;
1034 int cltype;
1035 int idtype;
1036 const char* var_class_name;
1037 long var12 /* : Int */;
1038 val* var13 /* : String */;
1039 var_ext = p0;
1040 {
1041 var1 = string__Text__has_suffix(self, var_ext);
1042 }
1043 if (var1){
1044 var2 = 0;
1045 {
1046 { /* Inline string#FlatText#length (self) on <self:String> */
1047 var5 = self->attrs[COLOR_string__FlatText___length].l; /* _length on <self:String> */
1048 var3 = var5;
1049 RET_LABEL4:(void)0;
1050 }
1051 }
1052 {
1053 { /* Inline string#FlatText#length (var_ext) on <var_ext:String> */
1054 var8 = var_ext->attrs[COLOR_string__FlatText___length].l; /* _length on <var_ext:String> */
1055 var6 = var8;
1056 RET_LABEL7:(void)0;
1057 }
1058 }
1059 {
1060 { /* Inline kernel#Int#- (var3,var6) on <var3:Int> */
1061 /* Covariant cast for argument 0 (i) <var6:Int> isa OTHER */
1062 /* <var6:Int> isa OTHER */
1063 var11 = 1; /* easy <var6:Int> isa OTHER*/
1064 if (unlikely(!var11)) {
1065 var_class_name = type_kernel__Int.name;
1066 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1067 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
1068 show_backtrace(1);
1069 }
1070 var12 = var3 - var6;
1071 var9 = var12;
1072 goto RET_LABEL10;
1073 RET_LABEL10:(void)0;
1074 }
1075 }
1076 {
1077 var13 = string__FlatString__substring(self, var2, var9);
1078 }
1079 var = var13;
1080 goto RET_LABEL;
1081 } else {
1082 }
1083 var = self;
1084 goto RET_LABEL;
1085 RET_LABEL:;
1086 return var;
1087 }
1088 /* method file#String#strip_extension for (self: Object, String): String */
1089 val* VIRTUAL_file__String__strip_extension(val* self, val* p0) {
1090 val* var /* : String */;
1091 val* var1 /* : String */;
1092 var1 = file__String__strip_extension(self, p0);
1093 var = var1;
1094 RET_LABEL:;
1095 return var;
1096 }
1097 /* method file#String#basename for (self: String, String): String */
1098 val* file__String__basename(val* self, val* p0) {
1099 val* var /* : String */;
1100 val* var_ext /* var ext: String */;
1101 long var1 /* : Int */;
1102 long var3 /* : Int */;
1103 long var4 /* : Int */;
1104 long var5 /* : Int */;
1105 short int var7 /* : Bool */;
1106 int cltype;
1107 int idtype;
1108 const char* var_class_name;
1109 long var8 /* : Int */;
1110 long var_l /* var l: Int */;
1111 short int var9 /* : Bool */;
1112 long var10 /* : Int */;
1113 short int var11 /* : Bool */;
1114 short int var13 /* : Bool */;
1115 int cltype14;
1116 int idtype15;
1117 const char* var_class_name16;
1118 short int var17 /* : Bool */;
1119 short int var_ /* var : Bool */;
1120 val* var18 /* : SequenceRead[Char] */;
1121 val* var20 /* : SequenceRead[Char] */;
1122 val* var21 /* : nullable Object */;
1123 char var22 /* : Char */;
1124 short int var23 /* : Bool */;
1125 short int var24 /* : Bool */;
1126 short int var26 /* : Bool */;
1127 char var27 /* : Char */;
1128 long var28 /* : Int */;
1129 long var29 /* : Int */;
1130 short int var31 /* : Bool */;
1131 int cltype32;
1132 int idtype33;
1133 const char* var_class_name34;
1134 long var35 /* : Int */;
1135 long var36 /* : Int */;
1136 short int var37 /* : Bool */;
1137 short int var38 /* : Bool */;
1138 short int var40 /* : Bool */;
1139 static val* varonce;
1140 val* var41 /* : String */;
1141 char* var42 /* : NativeString */;
1142 long var43 /* : Int */;
1143 val* var44 /* : FlatString */;
1144 val* var45 /* : SequenceRead[Char] */;
1145 val* var47 /* : SequenceRead[Char] */;
1146 char var48 /* : Char */;
1147 long var49 /* : Int */;
1148 val* var50 /* : nullable Object */;
1149 long var_pos /* var pos: Int */;
1150 val* var_n /* var n: String */;
1151 long var51 /* : Int */;
1152 short int var52 /* : Bool */;
1153 short int var54 /* : Bool */;
1154 int cltype55;
1155 int idtype56;
1156 const char* var_class_name57;
1157 short int var58 /* : Bool */;
1158 long var59 /* : Int */;
1159 long var60 /* : Int */;
1160 short int var62 /* : Bool */;
1161 int cltype63;
1162 int idtype64;
1163 const char* var_class_name65;
1164 long var66 /* : Int */;
1165 long var67 /* : Int */;
1166 short int var69 /* : Bool */;
1167 int cltype70;
1168 int idtype71;
1169 const char* var_class_name72;
1170 long var73 /* : Int */;
1171 val* var74 /* : String */;
1172 val* var75 /* : String */;
1173 var_ext = p0;
1174 {
1175 { /* Inline string#FlatText#length (self) on <self:String> */
1176 var3 = self->attrs[COLOR_string__FlatText___length].l; /* _length on <self:String> */
1177 var1 = var3;
1178 RET_LABEL2:(void)0;
1179 }
1180 }
1181 var4 = 1;
1182 {
1183 { /* Inline kernel#Int#- (var1,var4) on <var1:Int> */
1184 /* Covariant cast for argument 0 (i) <var4:Int> isa OTHER */
1185 /* <var4:Int> isa OTHER */
1186 var7 = 1; /* easy <var4:Int> isa OTHER*/
1187 if (unlikely(!var7)) {
1188 var_class_name = type_kernel__Int.name;
1189 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1190 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
1191 show_backtrace(1);
1192 }
1193 var8 = var1 - var4;
1194 var5 = var8;
1195 goto RET_LABEL6;
1196 RET_LABEL6:(void)0;
1197 }
1198 }
1199 var_l = var5;
1200 for(;;) {
1201 var10 = 0;
1202 {
1203 { /* Inline kernel#Int#> (var_l,var10) on <var_l:Int> */
1204 /* Covariant cast for argument 0 (i) <var10:Int> isa OTHER */
1205 /* <var10:Int> isa OTHER */
1206 var13 = 1; /* easy <var10:Int> isa OTHER*/
1207 if (unlikely(!var13)) {
1208 var_class_name16 = type_kernel__Int.name;
1209 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name16);
1210 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
1211 show_backtrace(1);
1212 }
1213 var17 = var_l > var10;
1214 var11 = var17;
1215 goto RET_LABEL12;
1216 RET_LABEL12:(void)0;
1217 }
1218 }
1219 var_ = var11;
1220 if (var11){
1221 {
1222 { /* Inline string#FlatString#chars (self) on <self:String> */
1223 var20 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
1224 if (unlikely(var20 == NULL)) {
1225 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
1226 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 939);
1227 show_backtrace(1);
1228 }
1229 var18 = var20;
1230 RET_LABEL19:(void)0;
1231 }
1232 }
1233 {
1234 var21 = ((val* (*)(val*, long))(var18->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var18, var_l) /* [] on <var18:SequenceRead[Char]>*/;
1235 }
1236 var22 = '/';
1237 {
1238 { /* Inline kernel#Char#== (var21,var22) on <var21:nullable Object(Char)> */
1239 var26 = (var21 != NULL) && (var21->class == &class_kernel__Char);
1240 if (var26) {
1241 var27 = ((struct instance_kernel__Char*)var21)->value; /* autounbox from nullable Object to Char */;
1242 var26 = (var27 == var22);
1243 }
1244 var24 = var26;
1245 goto RET_LABEL25;
1246 RET_LABEL25:(void)0;
1247 }
1248 var23 = var24;
1249 }
1250 var9 = var23;
1251 } else {
1252 var9 = var_;
1253 }
1254 if (var9){
1255 var28 = 1;
1256 {
1257 { /* Inline kernel#Int#- (var_l,var28) on <var_l:Int> */
1258 /* Covariant cast for argument 0 (i) <var28:Int> isa OTHER */
1259 /* <var28:Int> isa OTHER */
1260 var31 = 1; /* easy <var28:Int> isa OTHER*/
1261 if (unlikely(!var31)) {
1262 var_class_name34 = type_kernel__Int.name;
1263 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name34);
1264 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
1265 show_backtrace(1);
1266 }
1267 var35 = var_l - var28;
1268 var29 = var35;
1269 goto RET_LABEL30;
1270 RET_LABEL30:(void)0;
1271 }
1272 }
1273 var_l = var29;
1274 } else {
1275 goto BREAK_label;
1276 }
1277 }
1278 BREAK_label: (void)0;
1279 var36 = 0;
1280 {
1281 { /* Inline kernel#Int#== (var_l,var36) on <var_l:Int> */
1282 var40 = var_l == var36;
1283 var38 = var40;
1284 goto RET_LABEL39;
1285 RET_LABEL39:(void)0;
1286 }
1287 var37 = var38;
1288 }
1289 if (var37){
1290 if (varonce) {
1291 var41 = varonce;
1292 } else {
1293 var42 = "/";
1294 var43 = 1;
1295 var44 = string__NativeString__to_s_with_length(var42, var43);
1296 var41 = var44;
1297 varonce = var41;
1298 }
1299 var = var41;
1300 goto RET_LABEL;
1301 } else {
1302 }
1303 {
1304 { /* Inline string#FlatString#chars (self) on <self:String> */
1305 var47 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
1306 if (unlikely(var47 == NULL)) {
1307 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
1308 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 939);
1309 show_backtrace(1);
1310 }
1311 var45 = var47;
1312 RET_LABEL46:(void)0;
1313 }
1314 }
1315 var48 = '/';
1316 {
1317 var50 = BOX_kernel__Char(var48); /* autobox from Char to nullable Object */
1318 var49 = ((long (*)(val*, val*, long))(var45->class->vft[COLOR_abstract_collection__SequenceRead__last_index_of_from]))(var45, var50, var_l) /* last_index_of_from on <var45:SequenceRead[Char]>*/;
1319 }
1320 var_pos = var49;
1321 var_n = self;
1322 var51 = 0;
1323 {
1324 { /* Inline kernel#Int#>= (var_pos,var51) on <var_pos:Int> */
1325 /* Covariant cast for argument 0 (i) <var51:Int> isa OTHER */
1326 /* <var51:Int> isa OTHER */
1327 var54 = 1; /* easy <var51:Int> isa OTHER*/
1328 if (unlikely(!var54)) {
1329 var_class_name57 = type_kernel__Int.name;
1330 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name57);
1331 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 372);
1332 show_backtrace(1);
1333 }
1334 var58 = var_pos >= var51;
1335 var52 = var58;
1336 goto RET_LABEL53;
1337 RET_LABEL53:(void)0;
1338 }
1339 }
1340 if (var52){
1341 var59 = 1;
1342 {
1343 { /* Inline kernel#Int#+ (var_pos,var59) on <var_pos:Int> */
1344 /* Covariant cast for argument 0 (i) <var59:Int> isa OTHER */
1345 /* <var59:Int> isa OTHER */
1346 var62 = 1; /* easy <var59:Int> isa OTHER*/
1347 if (unlikely(!var62)) {
1348 var_class_name65 = type_kernel__Int.name;
1349 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name65);
1350 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
1351 show_backtrace(1);
1352 }
1353 var66 = var_pos + var59;
1354 var60 = var66;
1355 goto RET_LABEL61;
1356 RET_LABEL61:(void)0;
1357 }
1358 }
1359 {
1360 { /* Inline kernel#Int#- (var_l,var_pos) on <var_l:Int> */
1361 /* Covariant cast for argument 0 (i) <var_pos:Int> isa OTHER */
1362 /* <var_pos:Int> isa OTHER */
1363 var69 = 1; /* easy <var_pos:Int> isa OTHER*/
1364 if (unlikely(!var69)) {
1365 var_class_name72 = type_kernel__Int.name;
1366 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name72);
1367 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
1368 show_backtrace(1);
1369 }
1370 var73 = var_l - var_pos;
1371 var67 = var73;
1372 goto RET_LABEL68;
1373 RET_LABEL68:(void)0;
1374 }
1375 }
1376 {
1377 var74 = string__FlatString__substring(self, var60, var67);
1378 }
1379 var_n = var74;
1380 } else {
1381 }
1382 {
1383 var75 = file__String__strip_extension(var_n, var_ext);
1384 }
1385 var = var75;
1386 goto RET_LABEL;
1387 RET_LABEL:;
1388 return var;
1389 }
1390 /* method file#String#basename for (self: Object, String): String */
1391 val* VIRTUAL_file__String__basename(val* self, val* p0) {
1392 val* var /* : String */;
1393 val* var1 /* : String */;
1394 var1 = file__String__basename(self, p0);
1395 var = var1;
1396 RET_LABEL:;
1397 return var;
1398 }
1399 /* method file#String#dirname for (self: String): String */
1400 val* file__String__dirname(val* self) {
1401 val* var /* : String */;
1402 long var1 /* : Int */;
1403 long var3 /* : Int */;
1404 long var4 /* : Int */;
1405 long var5 /* : Int */;
1406 short int var7 /* : Bool */;
1407 int cltype;
1408 int idtype;
1409 const char* var_class_name;
1410 long var8 /* : Int */;
1411 long var_l /* var l: Int */;
1412 short int var9 /* : Bool */;
1413 long var10 /* : Int */;
1414 short int var11 /* : Bool */;
1415 short int var13 /* : Bool */;
1416 int cltype14;
1417 int idtype15;
1418 const char* var_class_name16;
1419 short int var17 /* : Bool */;
1420 short int var_ /* var : Bool */;
1421 val* var18 /* : SequenceRead[Char] */;
1422 val* var20 /* : SequenceRead[Char] */;
1423 val* var21 /* : nullable Object */;
1424 char var22 /* : Char */;
1425 short int var23 /* : Bool */;
1426 short int var24 /* : Bool */;
1427 short int var26 /* : Bool */;
1428 char var27 /* : Char */;
1429 long var28 /* : Int */;
1430 long var29 /* : Int */;
1431 short int var31 /* : Bool */;
1432 int cltype32;
1433 int idtype33;
1434 const char* var_class_name34;
1435 long var35 /* : Int */;
1436 val* var36 /* : SequenceRead[Char] */;
1437 val* var38 /* : SequenceRead[Char] */;
1438 char var39 /* : Char */;
1439 long var40 /* : Int */;
1440 val* var41 /* : nullable Object */;
1441 long var_pos /* var pos: Int */;
1442 long var42 /* : Int */;
1443 short int var43 /* : Bool */;
1444 short int var45 /* : Bool */;
1445 int cltype46;
1446 int idtype47;
1447 const char* var_class_name48;
1448 short int var49 /* : Bool */;
1449 long var50 /* : Int */;
1450 val* var51 /* : String */;
1451 long var52 /* : Int */;
1452 short int var53 /* : Bool */;
1453 short int var54 /* : Bool */;
1454 short int var56 /* : Bool */;
1455 static val* varonce;
1456 val* var57 /* : String */;
1457 char* var58 /* : NativeString */;
1458 long var59 /* : Int */;
1459 val* var60 /* : FlatString */;
1460 static val* varonce61;
1461 val* var62 /* : String */;
1462 char* var63 /* : NativeString */;
1463 long var64 /* : Int */;
1464 val* var65 /* : FlatString */;
1465 {
1466 { /* Inline string#FlatText#length (self) on <self:String> */
1467 var3 = self->attrs[COLOR_string__FlatText___length].l; /* _length on <self:String> */
1468 var1 = var3;
1469 RET_LABEL2:(void)0;
1470 }
1471 }
1472 var4 = 1;
1473 {
1474 { /* Inline kernel#Int#- (var1,var4) on <var1:Int> */
1475 /* Covariant cast for argument 0 (i) <var4:Int> isa OTHER */
1476 /* <var4:Int> isa OTHER */
1477 var7 = 1; /* easy <var4:Int> isa OTHER*/
1478 if (unlikely(!var7)) {
1479 var_class_name = type_kernel__Int.name;
1480 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1481 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
1482 show_backtrace(1);
1483 }
1484 var8 = var1 - var4;
1485 var5 = var8;
1486 goto RET_LABEL6;
1487 RET_LABEL6:(void)0;
1488 }
1489 }
1490 var_l = var5;
1491 for(;;) {
1492 var10 = 0;
1493 {
1494 { /* Inline kernel#Int#> (var_l,var10) on <var_l:Int> */
1495 /* Covariant cast for argument 0 (i) <var10:Int> isa OTHER */
1496 /* <var10:Int> isa OTHER */
1497 var13 = 1; /* easy <var10:Int> isa OTHER*/
1498 if (unlikely(!var13)) {
1499 var_class_name16 = type_kernel__Int.name;
1500 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name16);
1501 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
1502 show_backtrace(1);
1503 }
1504 var17 = var_l > var10;
1505 var11 = var17;
1506 goto RET_LABEL12;
1507 RET_LABEL12:(void)0;
1508 }
1509 }
1510 var_ = var11;
1511 if (var11){
1512 {
1513 { /* Inline string#FlatString#chars (self) on <self:String> */
1514 var20 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
1515 if (unlikely(var20 == NULL)) {
1516 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
1517 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 939);
1518 show_backtrace(1);
1519 }
1520 var18 = var20;
1521 RET_LABEL19:(void)0;
1522 }
1523 }
1524 {
1525 var21 = ((val* (*)(val*, long))(var18->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var18, var_l) /* [] on <var18:SequenceRead[Char]>*/;
1526 }
1527 var22 = '/';
1528 {
1529 { /* Inline kernel#Char#== (var21,var22) on <var21:nullable Object(Char)> */
1530 var26 = (var21 != NULL) && (var21->class == &class_kernel__Char);
1531 if (var26) {
1532 var27 = ((struct instance_kernel__Char*)var21)->value; /* autounbox from nullable Object to Char */;
1533 var26 = (var27 == var22);
1534 }
1535 var24 = var26;
1536 goto RET_LABEL25;
1537 RET_LABEL25:(void)0;
1538 }
1539 var23 = var24;
1540 }
1541 var9 = var23;
1542 } else {
1543 var9 = var_;
1544 }
1545 if (var9){
1546 var28 = 1;
1547 {
1548 { /* Inline kernel#Int#- (var_l,var28) on <var_l:Int> */
1549 /* Covariant cast for argument 0 (i) <var28:Int> isa OTHER */
1550 /* <var28:Int> isa OTHER */
1551 var31 = 1; /* easy <var28:Int> isa OTHER*/
1552 if (unlikely(!var31)) {
1553 var_class_name34 = type_kernel__Int.name;
1554 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name34);
1555 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
1556 show_backtrace(1);
1557 }
1558 var35 = var_l - var28;
1559 var29 = var35;
1560 goto RET_LABEL30;
1561 RET_LABEL30:(void)0;
1562 }
1563 }
1564 var_l = var29;
1565 } else {
1566 goto BREAK_label;
1567 }
1568 }
1569 BREAK_label: (void)0;
1570 {
1571 { /* Inline string#FlatString#chars (self) on <self:String> */
1572 var38 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
1573 if (unlikely(var38 == NULL)) {
1574 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
1575 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 939);
1576 show_backtrace(1);
1577 }
1578 var36 = var38;
1579 RET_LABEL37:(void)0;
1580 }
1581 }
1582 var39 = '/';
1583 {
1584 var41 = BOX_kernel__Char(var39); /* autobox from Char to nullable Object */
1585 var40 = ((long (*)(val*, val*, long))(var36->class->vft[COLOR_abstract_collection__SequenceRead__last_index_of_from]))(var36, var41, var_l) /* last_index_of_from on <var36:SequenceRead[Char]>*/;
1586 }
1587 var_pos = var40;
1588 var42 = 0;
1589 {
1590 { /* Inline kernel#Int#> (var_pos,var42) on <var_pos:Int> */
1591 /* Covariant cast for argument 0 (i) <var42:Int> isa OTHER */
1592 /* <var42:Int> isa OTHER */
1593 var45 = 1; /* easy <var42:Int> isa OTHER*/
1594 if (unlikely(!var45)) {
1595 var_class_name48 = type_kernel__Int.name;
1596 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name48);
1597 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
1598 show_backtrace(1);
1599 }
1600 var49 = var_pos > var42;
1601 var43 = var49;
1602 goto RET_LABEL44;
1603 RET_LABEL44:(void)0;
1604 }
1605 }
1606 if (var43){
1607 var50 = 0;
1608 {
1609 var51 = string__FlatString__substring(self, var50, var_pos);
1610 }
1611 var = var51;
1612 goto RET_LABEL;
1613 } else {
1614 var52 = 0;
1615 {
1616 { /* Inline kernel#Int#== (var_pos,var52) on <var_pos:Int> */
1617 var56 = var_pos == var52;
1618 var54 = var56;
1619 goto RET_LABEL55;
1620 RET_LABEL55:(void)0;
1621 }
1622 var53 = var54;
1623 }
1624 if (var53){
1625 if (varonce) {
1626 var57 = varonce;
1627 } else {
1628 var58 = "/";
1629 var59 = 1;
1630 var60 = string__NativeString__to_s_with_length(var58, var59);
1631 var57 = var60;
1632 varonce = var57;
1633 }
1634 var = var57;
1635 goto RET_LABEL;
1636 } else {
1637 if (varonce61) {
1638 var62 = varonce61;
1639 } else {
1640 var63 = ".";
1641 var64 = 1;
1642 var65 = string__NativeString__to_s_with_length(var63, var64);
1643 var62 = var65;
1644 varonce61 = var62;
1645 }
1646 var = var62;
1647 goto RET_LABEL;
1648 }
1649 }
1650 RET_LABEL:;
1651 return var;
1652 }
1653 /* method file#String#dirname for (self: Object): String */
1654 val* VIRTUAL_file__String__dirname(val* self) {
1655 val* var /* : String */;
1656 val* var1 /* : String */;
1657 var1 = file__String__dirname(self);
1658 var = var1;
1659 RET_LABEL:;
1660 return var;
1661 }
1662 /* method file#String#realpath for (self: String): String */
1663 val* file__String__realpath(val* self) {
1664 val* var /* : String */;
1665 char* var1 /* : NativeString */;
1666 char* var2 /* : NativeString */;
1667 void* var4 /* : NativeString for extern */;
1668 char* var_cs /* var cs: NativeString */;
1669 val* var5 /* : FlatString */;
1670 val* var_res /* var res: FlatString */;
1671 {
1672 var1 = string__FlatString__to_cstring(self);
1673 }
1674 {
1675 { /* Inline file#NativeString#file_realpath (var1) on <var1:NativeString> */
1676 var4 = file_NativeString_realpath(var1);
1677 var2 = var4;
1678 goto RET_LABEL3;
1679 RET_LABEL3:(void)0;
1680 }
1681 }
1682 var_cs = var2;
1683 {
1684 var5 = string__NativeString__to_s_with_copy(var_cs);
1685 }
1686 var_res = var5;
1687 var = var_res;
1688 goto RET_LABEL;
1689 RET_LABEL:;
1690 return var;
1691 }
1692 /* method file#String#realpath for (self: Object): String */
1693 val* VIRTUAL_file__String__realpath(val* self) {
1694 val* var /* : String */;
1695 val* var1 /* : String */;
1696 var1 = file__String__realpath(self);
1697 var = var1;
1698 RET_LABEL:;
1699 return var;
1700 }
1701 /* method file#String#simplify_path for (self: String): String */
1702 val* file__String__simplify_path(val* self) {
1703 val* var /* : String */;
1704 static val* varonce;
1705 val* var1 /* : String */;
1706 char* var2 /* : NativeString */;
1707 long var3 /* : Int */;
1708 val* var4 /* : FlatString */;
1709 val* var5 /* : Array[Text] */;
1710 val* var_a /* var a: Array[String] */;
1711 val* var6 /* : Array[String] */;
1712 val* var_a2 /* var a2: Array[String] */;
1713 val* var_ /* var : Array[String] */;
1714 val* var7 /* : ArrayIterator[nullable Object] */;
1715 val* var_8 /* var : ArrayIterator[String] */;
1716 short int var9 /* : Bool */;
1717 val* var10 /* : nullable Object */;
1718 val* var_x /* var x: String */;
1719 static val* varonce11;
1720 val* var12 /* : String */;
1721 char* var13 /* : NativeString */;
1722 long var14 /* : Int */;
1723 val* var15 /* : FlatString */;
1724 short int var16 /* : Bool */;
1725 short int var17 /* : Bool */;
1726 short int var18 /* : Bool */;
1727 static val* varonce19;
1728 val* var20 /* : String */;
1729 char* var21 /* : NativeString */;
1730 long var22 /* : Int */;
1731 val* var23 /* : FlatString */;
1732 short int var24 /* : Bool */;
1733 short int var25 /* : Bool */;
1734 short int var_26 /* var : Bool */;
1735 short int var27 /* : Bool */;
1736 short int var28 /* : Bool */;
1737 short int var29 /* : Bool */;
1738 short int var30 /* : Bool */;
1739 static val* varonce31;
1740 val* var32 /* : String */;
1741 char* var33 /* : NativeString */;
1742 long var34 /* : Int */;
1743 val* var35 /* : FlatString */;
1744 short int var36 /* : Bool */;
1745 short int var37 /* : Bool */;
1746 short int var_38 /* var : Bool */;
1747 short int var39 /* : Bool */;
1748 short int var40 /* : Bool */;
1749 short int var_41 /* var : Bool */;
1750 val* var42 /* : nullable Object */;
1751 static val* varonce43;
1752 val* var44 /* : String */;
1753 char* var45 /* : NativeString */;
1754 long var46 /* : Int */;
1755 val* var47 /* : FlatString */;
1756 short int var48 /* : Bool */;
1757 short int var49 /* : Bool */;
1758 val* var_other /* var other: nullable Object */;
1759 short int var51 /* : Bool */;
1760 short int var52 /* : Bool */;
1761 short int var53 /* : Bool */;
1762 val* var54 /* : nullable Object */;
1763 short int var57 /* : Bool */;
1764 static val* varonce58;
1765 val* var59 /* : String */;
1766 char* var60 /* : NativeString */;
1767 long var61 /* : Int */;
1768 val* var62 /* : FlatString */;
1769 short int var63 /* : Bool */;
1770 long var64 /* : Int */;
1771 long var66 /* : Int */;
1772 long var67 /* : Int */;
1773 short int var68 /* : Bool */;
1774 short int var69 /* : Bool */;
1775 short int var71 /* : Bool */;
1776 short int var_72 /* var : Bool */;
1777 val* var73 /* : nullable Object */;
1778 static val* varonce74;
1779 val* var75 /* : String */;
1780 char* var76 /* : NativeString */;
1781 long var77 /* : Int */;
1782 val* var78 /* : FlatString */;
1783 short int var79 /* : Bool */;
1784 short int var80 /* : Bool */;
1785 static val* varonce81;
1786 val* var82 /* : String */;
1787 char* var83 /* : NativeString */;
1788 long var84 /* : Int */;
1789 val* var85 /* : FlatString */;
1790 static val* varonce86;
1791 val* var87 /* : String */;
1792 char* var88 /* : NativeString */;
1793 long var89 /* : Int */;
1794 val* var90 /* : FlatString */;
1795 val* var91 /* : String */;
1796 if (varonce) {
1797 var1 = varonce;
1798 } else {
1799 var2 = "/";
1800 var3 = 1;
1801 var4 = string__NativeString__to_s_with_length(var2, var3);
1802 var1 = var4;
1803 varonce = var1;
1804 }
1805 {
1806 var5 = string_search__Text__split_with(self, var1);
1807 }
1808 var_a = var5;
1809 var6 = NEW_array__Array(&type_array__Arraystring__String);
1810 {
1811 ((void (*)(val*))(var6->class->vft[COLOR_kernel__Object__init]))(var6) /* init on <var6:Array[String]>*/;
1812 }
1813 var_a2 = var6;
1814 var_ = var_a;
1815 {
1816 var7 = array__AbstractArrayRead__iterator(var_);
1817 }
1818 var_8 = var7;
1819 for(;;) {
1820 {
1821 var9 = array__ArrayIterator__is_ok(var_8);
1822 }
1823 if (var9){
1824 {
1825 var10 = array__ArrayIterator__item(var_8);
1826 }
1827 var_x = var10;
1828 if (varonce11) {
1829 var12 = varonce11;
1830 } else {
1831 var13 = ".";
1832 var14 = 1;
1833 var15 = string__NativeString__to_s_with_length(var13, var14);
1834 var12 = var15;
1835 varonce11 = var12;
1836 }
1837 {
1838 var17 = string__FlatString___61d_61d(var_x, var12);
1839 var16 = var17;
1840 }
1841 if (var16){
1842 goto BREAK_label;
1843 } else {
1844 }
1845 if (varonce19) {
1846 var20 = varonce19;
1847 } else {
1848 var21 = "";
1849 var22 = 0;
1850 var23 = string__NativeString__to_s_with_length(var21, var22);
1851 var20 = var23;
1852 varonce19 = var20;
1853 }
1854 {
1855 var25 = string__FlatString___61d_61d(var_x, var20);
1856 var24 = var25;
1857 }
1858 var_26 = var24;
1859 if (var24){
1860 {
1861 var27 = array__AbstractArrayRead__is_empty(var_a2);
1862 }
1863 var28 = !var27;
1864 var18 = var28;
1865 } else {
1866 var18 = var_26;
1867 }
1868 if (var18){
1869 goto BREAK_label;
1870 } else {
1871 }
1872 if (varonce31) {
1873 var32 = varonce31;
1874 } else {
1875 var33 = "..";
1876 var34 = 2;
1877 var35 = string__NativeString__to_s_with_length(var33, var34);
1878 var32 = var35;
1879 varonce31 = var32;
1880 }
1881 {
1882 var37 = string__FlatString___61d_61d(var_x, var32);
1883 var36 = var37;
1884 }
1885 var_38 = var36;
1886 if (var36){
1887 {
1888 var39 = array__AbstractArrayRead__is_empty(var_a2);
1889 }
1890 var40 = !var39;
1891 var30 = var40;
1892 } else {
1893 var30 = var_38;
1894 }
1895 var_41 = var30;
1896 if (var30){
1897 {
1898 var42 = abstract_collection__SequenceRead__last(var_a2);
1899 }
1900 if (varonce43) {
1901 var44 = varonce43;
1902 } else {
1903 var45 = "..";
1904 var46 = 2;
1905 var47 = string__NativeString__to_s_with_length(var45, var46);
1906 var44 = var47;
1907 varonce43 = var44;
1908 }
1909 {
1910 { /* Inline kernel#Object#!= (var42,var44) on <var42:nullable Object(String)> */
1911 var_other = var44;
1912 {
1913 var52 = ((short int (*)(val*, val*))(var42->class->vft[COLOR_kernel__Object___61d_61d]))(var42, var_other) /* == on <var42:nullable Object(String)>*/;
1914 var51 = var52;
1915 }
1916 var53 = !var51;
1917 var49 = var53;
1918 goto RET_LABEL50;
1919 RET_LABEL50:(void)0;
1920 }
1921 var48 = var49;
1922 }
1923 var29 = var48;
1924 } else {
1925 var29 = var_41;
1926 }
1927 if (var29){
1928 {
1929 var54 = array__AbstractArray__pop(var_a2);
1930 }
1931 goto BREAK_label;
1932 } else {
1933 }
1934 {
1935 array__AbstractArray__push(var_a2, var_x); /* Direct call array#AbstractArray#push on <var_a2:Array[String]>*/
1936 }
1937 BREAK_label: (void)0;
1938 {
1939 array__ArrayIterator__next(var_8); /* Direct call array#ArrayIterator#next on <var_8:ArrayIterator[String]>*/
1940 }
1941 } else {
1942 goto BREAK_label55;
1943 }
1944 }
1945 BREAK_label55: (void)0;
1946 {
1947 { /* Inline abstract_collection#Iterator#finish (var_8) on <var_8:ArrayIterator[String]> */
1948 RET_LABEL56:(void)0;
1949 }
1950 }
1951 {
1952 var57 = array__AbstractArrayRead__is_empty(var_a2);
1953 }
1954 if (var57){
1955 if (varonce58) {
1956 var59 = varonce58;
1957 } else {
1958 var60 = ".";
1959 var61 = 1;
1960 var62 = string__NativeString__to_s_with_length(var60, var61);
1961 var59 = var62;
1962 varonce58 = var59;
1963 }
1964 var = var59;
1965 goto RET_LABEL;
1966 } else {
1967 }
1968 {
1969 { /* Inline array#AbstractArrayRead#length (var_a2) on <var_a2:Array[String]> */
1970 var66 = var_a2->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_a2:Array[String]> */
1971 var64 = var66;
1972 RET_LABEL65:(void)0;
1973 }
1974 }
1975 var67 = 1;
1976 {
1977 { /* Inline kernel#Int#== (var64,var67) on <var64:Int> */
1978 var71 = var64 == var67;
1979 var69 = var71;
1980 goto RET_LABEL70;
1981 RET_LABEL70:(void)0;
1982 }
1983 var68 = var69;
1984 }
1985 var_72 = var68;
1986 if (var68){
1987 {
1988 var73 = abstract_collection__SequenceRead__first(var_a2);
1989 }
1990 if (varonce74) {
1991 var75 = varonce74;
1992 } else {
1993 var76 = "";
1994 var77 = 0;
1995 var78 = string__NativeString__to_s_with_length(var76, var77);
1996 var75 = var78;
1997 varonce74 = var75;
1998 }
1999 {
2000 var80 = string__FlatString___61d_61d(var73, var75);
2001 var79 = var80;
2002 }
2003 var63 = var79;
2004 } else {
2005 var63 = var_72;
2006 }
2007 if (var63){
2008 if (varonce81) {
2009 var82 = varonce81;
2010 } else {
2011 var83 = "/";
2012 var84 = 1;
2013 var85 = string__NativeString__to_s_with_length(var83, var84);
2014 var82 = var85;
2015 varonce81 = var82;
2016 }
2017 var = var82;
2018 goto RET_LABEL;
2019 } else {
2020 }
2021 if (varonce86) {
2022 var87 = varonce86;
2023 } else {
2024 var88 = "/";
2025 var89 = 1;
2026 var90 = string__NativeString__to_s_with_length(var88, var89);
2027 var87 = var90;
2028 varonce86 = var87;
2029 }
2030 {
2031 var91 = string__Collection__join(var_a2, var87);
2032 }
2033 var = var91;
2034 goto RET_LABEL;
2035 RET_LABEL:;
2036 return var;
2037 }
2038 /* method file#String#simplify_path for (self: Object): String */
2039 val* VIRTUAL_file__String__simplify_path(val* self) {
2040 val* var /* : String */;
2041 val* var1 /* : String */;
2042 var1 = file__String__simplify_path(self);
2043 var = var1;
2044 RET_LABEL:;
2045 return var;
2046 }
2047 /* method file#String#join_path for (self: String, String): String */
2048 val* file__String__join_path(val* self, val* p0) {
2049 val* var /* : String */;
2050 val* var_path /* var path: String */;
2051 short int var1 /* : Bool */;
2052 short int var2 /* : Bool */;
2053 val* var3 /* : SequenceRead[Char] */;
2054 val* var5 /* : SequenceRead[Char] */;
2055 long var6 /* : Int */;
2056 val* var7 /* : nullable Object */;
2057 char var8 /* : Char */;
2058 short int var9 /* : Bool */;
2059 short int var10 /* : Bool */;
2060 short int var12 /* : Bool */;
2061 char var13 /* : Char */;
2062 char var14 /* : Char */;
2063 char var15 /* : Char */;
2064 short int var16 /* : Bool */;
2065 short int var17 /* : Bool */;
2066 short int var19 /* : Bool */;
2067 val* var20 /* : Array[Object] */;
2068 long var21 /* : Int */;
2069 val* var22 /* : NativeArray[Object] */;
2070 val* var23 /* : String */;
2071 static val* varonce;
2072 val* var24 /* : String */;
2073 char* var25 /* : NativeString */;
2074 long var26 /* : Int */;
2075 val* var27 /* : FlatString */;
2076 val* var28 /* : Array[Object] */;
2077 long var29 /* : Int */;
2078 val* var30 /* : NativeArray[Object] */;
2079 val* var31 /* : String */;
2080 var_path = p0;
2081 {
2082 var1 = string__Text__is_empty(var_path);
2083 }
2084 if (var1){
2085 var = self;
2086 goto RET_LABEL;
2087 } else {
2088 }
2089 {
2090 var2 = string__Text__is_empty(self);
2091 }
2092 if (var2){
2093 var = var_path;
2094 goto RET_LABEL;
2095 } else {
2096 }
2097 {
2098 { /* Inline string#FlatString#chars (var_path) on <var_path:String> */
2099 var5 = var_path->attrs[COLOR_string__FlatString___chars].val; /* _chars on <var_path:String> */
2100 if (unlikely(var5 == NULL)) {
2101 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
2102 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 939);
2103 show_backtrace(1);
2104 }
2105 var3 = var5;
2106 RET_LABEL4:(void)0;
2107 }
2108 }
2109 var6 = 0;
2110 {
2111 var7 = ((val* (*)(val*, long))(var3->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var3, var6) /* [] on <var3:SequenceRead[Char]>*/;
2112 }
2113 var8 = '/';
2114 {
2115 { /* Inline kernel#Char#== (var7,var8) on <var7:nullable Object(Char)> */
2116 var12 = (var7 != NULL) && (var7->class == &class_kernel__Char);
2117 if (var12) {
2118 var13 = ((struct instance_kernel__Char*)var7)->value; /* autounbox from nullable Object to Char */;
2119 var12 = (var13 == var8);
2120 }
2121 var10 = var12;
2122 goto RET_LABEL11;
2123 RET_LABEL11:(void)0;
2124 }
2125 var9 = var10;
2126 }
2127 if (var9){
2128 var = var_path;
2129 goto RET_LABEL;
2130 } else {
2131 }
2132 {
2133 var14 = string__Text__last(self);
2134 }
2135 var15 = '/';
2136 {
2137 { /* Inline kernel#Char#== (var14,var15) on <var14:Char> */
2138 var19 = var14 == var15;
2139 var17 = var19;
2140 goto RET_LABEL18;
2141 RET_LABEL18:(void)0;
2142 }
2143 var16 = var17;
2144 }
2145 if (var16){
2146 var20 = NEW_array__Array(&type_array__Arraykernel__Object);
2147 { /* var20 = array_instance Array[Object] */
2148 var21 = 2;
2149 var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
2150 ((struct instance_array__NativeArray*)var22)->values[0] = (val*) self;
2151 ((struct instance_array__NativeArray*)var22)->values[1] = (val*) var_path;
2152 {
2153 ((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
2154 }
2155 }
2156 {
2157 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
2158 }
2159 var = var23;
2160 goto RET_LABEL;
2161 } else {
2162 }
2163 if (varonce) {
2164 var24 = varonce;
2165 } else {
2166 var25 = "/";
2167 var26 = 1;
2168 var27 = string__NativeString__to_s_with_length(var25, var26);
2169 var24 = var27;
2170 varonce = var24;
2171 }
2172 var28 = NEW_array__Array(&type_array__Arraykernel__Object);
2173 { /* var28 = array_instance Array[Object] */
2174 var29 = 3;
2175 var30 = NEW_array__NativeArray(var29, &type_array__NativeArraykernel__Object);
2176 ((struct instance_array__NativeArray*)var30)->values[0] = (val*) self;
2177 ((struct instance_array__NativeArray*)var30)->values[1] = (val*) var24;
2178 ((struct instance_array__NativeArray*)var30)->values[2] = (val*) var_path;
2179 {
2180 ((void (*)(val*, val*, long))(var28->class->vft[COLOR_array__Array__with_native]))(var28, var30, var29) /* with_native on <var28:Array[Object]>*/;
2181 }
2182 }
2183 {
2184 var31 = ((val* (*)(val*))(var28->class->vft[COLOR_string__Object__to_s]))(var28) /* to_s on <var28:Array[Object]>*/;
2185 }
2186 var = var31;
2187 goto RET_LABEL;
2188 RET_LABEL:;
2189 return var;
2190 }
2191 /* method file#String#join_path for (self: Object, String): String */
2192 val* VIRTUAL_file__String__join_path(val* self, val* p0) {
2193 val* var /* : String */;
2194 val* var1 /* : String */;
2195 var1 = file__String__join_path(self, p0);
2196 var = var1;
2197 RET_LABEL:;
2198 return var;
2199 }
2200 /* method file#String#/ for (self: String, String): String */
2201 val* file__String___47d(val* self, val* p0) {
2202 val* var /* : String */;
2203 val* var_path /* var path: String */;
2204 val* var1 /* : String */;
2205 var_path = p0;
2206 {
2207 var1 = file__String__join_path(self, var_path);
2208 }
2209 var = var1;
2210 goto RET_LABEL;
2211 RET_LABEL:;
2212 return var;
2213 }
2214 /* method file#String#/ for (self: Object, String): String */
2215 val* VIRTUAL_file__String___47d(val* self, val* p0) {
2216 val* var /* : String */;
2217 val* var1 /* : String */;
2218 var1 = file__String___47d(self, p0);
2219 var = var1;
2220 RET_LABEL:;
2221 return var;
2222 }
2223 /* method file#String#relpath for (self: String, String): String */
2224 val* file__String__relpath(val* self, val* p0) {
2225 val* var /* : String */;
2226 val* var_dest /* var dest: String */;
2227 val* var1 /* : String */;
2228 val* var_cwd /* var cwd: String */;
2229 val* var2 /* : String */;
2230 val* var3 /* : String */;
2231 static val* varonce;
2232 val* var4 /* : String */;
2233 char* var5 /* : NativeString */;
2234 long var6 /* : Int */;
2235 val* var7 /* : FlatString */;
2236 val* var8 /* : Array[Text] */;
2237 val* var_from /* var from: Array[String] */;
2238 val* var9 /* : nullable Object */;
2239 short int var10 /* : Bool */;
2240 val* var11 /* : nullable Object */;
2241 val* var12 /* : String */;
2242 val* var13 /* : String */;
2243 static val* varonce14;
2244 val* var15 /* : String */;
2245 char* var16 /* : NativeString */;
2246 long var17 /* : Int */;
2247 val* var18 /* : FlatString */;
2248 val* var19 /* : Array[Text] */;
2249 val* var_to /* var to: Array[String] */;
2250 val* var20 /* : nullable Object */;
2251 short int var21 /* : Bool */;
2252 val* var22 /* : nullable Object */;
2253 short int var23 /* : Bool */;
2254 short int var24 /* : Bool */;
2255 short int var25 /* : Bool */;
2256 short int var26 /* : Bool */;
2257 short int var_ /* var : Bool */;
2258 short int var27 /* : Bool */;
2259 short int var28 /* : Bool */;
2260 short int var_29 /* var : Bool */;
2261 val* var30 /* : nullable Object */;
2262 val* var31 /* : nullable Object */;
2263 short int var32 /* : Bool */;
2264 short int var33 /* : Bool */;
2265 val* var34 /* : nullable Object */;
2266 val* var35 /* : nullable Object */;
2267 long var36 /* : Int */;
2268 long var38 /* : Int */;
2269 long var_from_len /* var from_len: Int */;
2270 long var39 /* : Int */;
2271 short int var40 /* : Bool */;
2272 short int var41 /* : Bool */;
2273 short int var43 /* : Bool */;
2274 static val* varonce44;
2275 val* var45 /* : String */;
2276 char* var46 /* : NativeString */;
2277 long var47 /* : Int */;
2278 val* var48 /* : FlatString */;
2279 val* var49 /* : String */;
2280 static val* varonce50;
2281 val* var51 /* : String */;
2282 char* var52 /* : NativeString */;
2283 long var53 /* : Int */;
2284 val* var54 /* : FlatString */;
2285 long var55 /* : Int */;
2286 long var56 /* : Int */;
2287 short int var58 /* : Bool */;
2288 int cltype;
2289 int idtype;
2290 const char* var_class_name;
2291 long var59 /* : Int */;
2292 val* var60 /* : String */;
2293 static val* varonce61;
2294 val* var62 /* : String */;
2295 char* var63 /* : NativeString */;
2296 long var64 /* : Int */;
2297 val* var65 /* : FlatString */;
2298 val* var66 /* : String */;
2299 val* var_up /* var up: String */;
2300 short int var67 /* : Bool */;
2301 static val* varonce68;
2302 val* var69 /* : String */;
2303 char* var70 /* : NativeString */;
2304 long var71 /* : Int */;
2305 val* var72 /* : FlatString */;
2306 val* var73 /* : String */;
2307 static val* varonce74;
2308 val* var75 /* : String */;
2309 char* var76 /* : NativeString */;
2310 long var77 /* : Int */;
2311 val* var78 /* : FlatString */;
2312 val* var79 /* : String */;
2313 val* var80 /* : String */;
2314 val* var_res /* var res: String */;
2315 var_dest = p0;
2316 {
2317 var1 = file__Object__getcwd(self);
2318 }
2319 var_cwd = var1;
2320 {
2321 var2 = file__String___47d(var_cwd, self);
2322 }
2323 {
2324 var3 = file__String__simplify_path(var2);
2325 }
2326 if (varonce) {
2327 var4 = varonce;
2328 } else {
2329 var5 = "/";
2330 var6 = 1;
2331 var7 = string__NativeString__to_s_with_length(var5, var6);
2332 var4 = var7;
2333 varonce = var4;
2334 }
2335 {
2336 var8 = string_search__Text__split(var3, var4);
2337 }
2338 var_from = var8;
2339 {
2340 var9 = abstract_collection__SequenceRead__last(var_from);
2341 }
2342 {
2343 var10 = string__Text__is_empty(var9);
2344 }
2345 if (var10){
2346 {
2347 var11 = array__AbstractArray__pop(var_from);
2348 }
2349 } else {
2350 }
2351 {
2352 var12 = file__String___47d(var_cwd, var_dest);
2353 }
2354 {
2355 var13 = file__String__simplify_path(var12);
2356 }
2357 if (varonce14) {
2358 var15 = varonce14;
2359 } else {
2360 var16 = "/";
2361 var17 = 1;
2362 var18 = string__NativeString__to_s_with_length(var16, var17);
2363 var15 = var18;
2364 varonce14 = var15;
2365 }
2366 {
2367 var19 = string_search__Text__split(var13, var15);
2368 }
2369 var_to = var19;
2370 {
2371 var20 = abstract_collection__SequenceRead__last(var_to);
2372 }
2373 {
2374 var21 = string__Text__is_empty(var20);
2375 }
2376 if (var21){
2377 {
2378 var22 = array__AbstractArray__pop(var_to);
2379 }
2380 } else {
2381 }
2382 for(;;) {
2383 {
2384 var25 = array__AbstractArrayRead__is_empty(var_from);
2385 }
2386 var26 = !var25;
2387 var_ = var26;
2388 if (var26){
2389 {
2390 var27 = array__AbstractArrayRead__is_empty(var_to);
2391 }
2392 var28 = !var27;
2393 var24 = var28;
2394 } else {
2395 var24 = var_;
2396 }
2397 var_29 = var24;
2398 if (var24){
2399 {
2400 var30 = abstract_collection__SequenceRead__first(var_from);
2401 }
2402 {
2403 var31 = abstract_collection__SequenceRead__first(var_to);
2404 }
2405 {
2406 var33 = string__FlatString___61d_61d(var30, var31);
2407 var32 = var33;
2408 }
2409 var23 = var32;
2410 } else {
2411 var23 = var_29;
2412 }
2413 if (var23){
2414 {
2415 var34 = array__AbstractArray__shift(var_from);
2416 }
2417 {
2418 var35 = array__AbstractArray__shift(var_to);
2419 }
2420 } else {
2421 goto BREAK_label;
2422 }
2423 }
2424 BREAK_label: (void)0;
2425 {
2426 { /* Inline array#AbstractArrayRead#length (var_from) on <var_from:Array[String]> */
2427 var38 = var_from->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_from:Array[String]> */
2428 var36 = var38;
2429 RET_LABEL37:(void)0;
2430 }
2431 }
2432 var_from_len = var36;
2433 var39 = 0;
2434 {
2435 { /* Inline kernel#Int#== (var_from_len,var39) on <var_from_len:Int> */
2436 var43 = var_from_len == var39;
2437 var41 = var43;
2438 goto RET_LABEL42;
2439 RET_LABEL42:(void)0;
2440 }
2441 var40 = var41;
2442 }
2443 if (var40){
2444 if (varonce44) {
2445 var45 = varonce44;
2446 } else {
2447 var46 = "/";
2448 var47 = 1;
2449 var48 = string__NativeString__to_s_with_length(var46, var47);
2450 var45 = var48;
2451 varonce44 = var45;
2452 }
2453 {
2454 var49 = string__Collection__join(var_to, var45);
2455 }
2456 var = var49;
2457 goto RET_LABEL;
2458 } else {
2459 }
2460 if (varonce50) {
2461 var51 = varonce50;
2462 } else {
2463 var52 = "../";
2464 var53 = 3;
2465 var54 = string__NativeString__to_s_with_length(var52, var53);
2466 var51 = var54;
2467 varonce50 = var51;
2468 }
2469 var55 = 1;
2470 {
2471 { /* Inline kernel#Int#- (var_from_len,var55) on <var_from_len:Int> */
2472 /* Covariant cast for argument 0 (i) <var55:Int> isa OTHER */
2473 /* <var55:Int> isa OTHER */
2474 var58 = 1; /* easy <var55:Int> isa OTHER*/
2475 if (unlikely(!var58)) {
2476 var_class_name = type_kernel__Int.name;
2477 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
2478 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
2479 show_backtrace(1);
2480 }
2481 var59 = var_from_len - var55;
2482 var56 = var59;
2483 goto RET_LABEL57;
2484 RET_LABEL57:(void)0;
2485 }
2486 }
2487 {
2488 var60 = string__FlatString___42d(var51, var56);
2489 }
2490 if (varonce61) {
2491 var62 = varonce61;
2492 } else {
2493 var63 = "..";
2494 var64 = 2;
2495 var65 = string__NativeString__to_s_with_length(var63, var64);
2496 var62 = var65;
2497 varonce61 = var62;
2498 }
2499 {
2500 var66 = string__FlatString___43d(var60, var62);
2501 }
2502 var_up = var66;
2503 {
2504 var67 = array__AbstractArrayRead__is_empty(var_to);
2505 }
2506 if (var67){
2507 var = var_up;
2508 goto RET_LABEL;
2509 } else {
2510 }
2511 if (varonce68) {
2512 var69 = varonce68;
2513 } else {
2514 var70 = "/";
2515 var71 = 1;
2516 var72 = string__NativeString__to_s_with_length(var70, var71);
2517 var69 = var72;
2518 varonce68 = var69;
2519 }
2520 {
2521 var73 = string__FlatString___43d(var_up, var69);
2522 }
2523 if (varonce74) {
2524 var75 = varonce74;
2525 } else {
2526 var76 = "/";
2527 var77 = 1;
2528 var78 = string__NativeString__to_s_with_length(var76, var77);
2529 var75 = var78;
2530 varonce74 = var75;
2531 }
2532 {
2533 var79 = string__Collection__join(var_to, var75);
2534 }
2535 {
2536 var80 = string__FlatString___43d(var73, var79);
2537 }
2538 var_res = var80;
2539 var = var_res;
2540 goto RET_LABEL;
2541 RET_LABEL:;
2542 return var;
2543 }
2544 /* method file#String#relpath for (self: Object, String): String */
2545 val* VIRTUAL_file__String__relpath(val* self, val* p0) {
2546 val* var /* : String */;
2547 val* var1 /* : String */;
2548 var1 = file__String__relpath(self, p0);
2549 var = var1;
2550 RET_LABEL:;
2551 return var;
2552 }
2553 /* method file#String#mkdir for (self: String) */
2554 void file__String__mkdir(val* self) {
2555 static val* varonce;
2556 val* var /* : String */;
2557 char* var1 /* : NativeString */;
2558 long var2 /* : Int */;
2559 val* var3 /* : FlatString */;
2560 val* var4 /* : Array[Text] */;
2561 val* var_dirs /* var dirs: Array[String] */;
2562 val* var5 /* : FlatBuffer */;
2563 val* var_path /* var path: FlatBuffer */;
2564 short int var6 /* : Bool */;
2565 long var7 /* : Int */;
2566 val* var8 /* : nullable Object */;
2567 short int var9 /* : Bool */;
2568 char var10 /* : Char */;
2569 val* var_ /* var : Array[String] */;
2570 val* var11 /* : ArrayIterator[nullable Object] */;
2571 val* var_12 /* var : ArrayIterator[String] */;
2572 short int var13 /* : Bool */;
2573 val* var14 /* : nullable Object */;
2574 val* var_d /* var d: String */;
2575 short int var15 /* : Bool */;
2576 char var16 /* : Char */;
2577 val* var17 /* : String */;
2578 char* var18 /* : NativeString */;
2579 short int var19 /* : Bool */;
2580 short int var21 /* : Bool for extern */;
2581 if (varonce) {
2582 var = varonce;
2583 } else {
2584 var1 = "/";
2585 var2 = 1;
2586 var3 = string__NativeString__to_s_with_length(var1, var2);
2587 var = var3;
2588 varonce = var;
2589 }
2590 {
2591 var4 = string_search__Text__split_with(self, var);
2592 }
2593 var_dirs = var4;
2594 var5 = NEW_string__FlatBuffer(&type_string__FlatBuffer);
2595 {
2596 ((void (*)(val*))(var5->class->vft[COLOR_kernel__Object__init]))(var5) /* init on <var5:FlatBuffer>*/;
2597 }
2598 var_path = var5;
2599 {
2600 var6 = array__AbstractArrayRead__is_empty(var_dirs);
2601 }
2602 if (var6){
2603 goto RET_LABEL;
2604 } else {
2605 }
2606 var7 = 0;
2607 {
2608 var8 = array__Array___91d_93d(var_dirs, var7);
2609 }
2610 {
2611 var9 = string__Text__is_empty(var8);
2612 }
2613 if (var9){
2614 var10 = '/';
2615 {
2616 string__FlatBuffer__add(var_path, var10); /* Direct call string#FlatBuffer#add on <var_path:FlatBuffer>*/
2617 }
2618 } else {
2619 }
2620 var_ = var_dirs;
2621 {
2622 var11 = array__AbstractArrayRead__iterator(var_);
2623 }
2624 var_12 = var11;
2625 for(;;) {
2626 {
2627 var13 = array__ArrayIterator__is_ok(var_12);
2628 }
2629 if (var13){
2630 {
2631 var14 = array__ArrayIterator__item(var_12);
2632 }
2633 var_d = var14;
2634 {
2635 var15 = string__Text__is_empty(var_d);
2636 }
2637 if (var15){
2638 goto BREAK_label;
2639 } else {
2640 }
2641 {
2642 string__FlatBuffer__append(var_path, var_d); /* Direct call string#FlatBuffer#append on <var_path:FlatBuffer>*/
2643 }
2644 var16 = '/';
2645 {
2646 string__FlatBuffer__add(var_path, var16); /* Direct call string#FlatBuffer#add on <var_path:FlatBuffer>*/
2647 }
2648 {
2649 var17 = string__FlatBuffer__to_s(var_path);
2650 }
2651 {
2652 var18 = string__FlatString__to_cstring(var17);
2653 }
2654 {
2655 { /* Inline file#NativeString#file_mkdir (var18) on <var18:NativeString> */
2656 var21 = string_NativeString_NativeString_file_mkdir_0(var18);
2657 var19 = var21;
2658 goto RET_LABEL20;
2659 RET_LABEL20:(void)0;
2660 }
2661 }
2662 BREAK_label: (void)0;
2663 {
2664 array__ArrayIterator__next(var_12); /* Direct call array#ArrayIterator#next on <var_12:ArrayIterator[String]>*/
2665 }
2666 } else {
2667 goto BREAK_label22;
2668 }
2669 }
2670 BREAK_label22: (void)0;
2671 {
2672 { /* Inline abstract_collection#Iterator#finish (var_12) on <var_12:ArrayIterator[String]> */
2673 RET_LABEL23:(void)0;
2674 }
2675 }
2676 RET_LABEL:;
2677 }
2678 /* method file#String#mkdir for (self: Object) */
2679 void VIRTUAL_file__String__mkdir(val* self) {
2680 file__String__mkdir(self); /* Direct call file#String#mkdir on <self:Object(String)>*/
2681 RET_LABEL:;
2682 }
2683 /* method file#String#file_extension for (self: String): nullable String */
2684 val* file__String__file_extension(val* self) {
2685 val* var /* : nullable String */;
2686 val* var1 /* : SequenceRead[Char] */;
2687 val* var3 /* : SequenceRead[Char] */;
2688 char var4 /* : Char */;
2689 long var5 /* : Int */;
2690 val* var6 /* : nullable Object */;
2691 long var_last_slash /* var last_slash: Int */;
2692 long var7 /* : Int */;
2693 short int var8 /* : Bool */;
2694 short int var10 /* : Bool */;
2695 int cltype;
2696 int idtype;
2697 const char* var_class_name;
2698 short int var11 /* : Bool */;
2699 long var12 /* : Int */;
2700 long var13 /* : Int */;
2701 short int var15 /* : Bool */;
2702 int cltype16;
2703 int idtype17;
2704 const char* var_class_name18;
2705 long var19 /* : Int */;
2706 long var20 /* : Int */;
2707 long var22 /* : Int */;
2708 val* var23 /* : String */;
2709 val* var24 /* : null */;
2710 {
2711 { /* Inline string#FlatString#chars (self) on <self:String> */
2712 var3 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
2713 if (unlikely(var3 == NULL)) {
2714 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
2715 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 939);
2716 show_backtrace(1);
2717 }
2718 var1 = var3;
2719 RET_LABEL2:(void)0;
2720 }
2721 }
2722 var4 = '.';
2723 {
2724 var6 = BOX_kernel__Char(var4); /* autobox from Char to nullable Object */
2725 var5 = ((long (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__SequenceRead__last_index_of]))(var1, var6) /* last_index_of on <var1:SequenceRead[Char]>*/;
2726 }
2727 var_last_slash = var5;
2728 var7 = 0;
2729 {
2730 { /* Inline kernel#Int#> (var_last_slash,var7) on <var_last_slash:Int> */
2731 /* Covariant cast for argument 0 (i) <var7:Int> isa OTHER */
2732 /* <var7:Int> isa OTHER */
2733 var10 = 1; /* easy <var7:Int> isa OTHER*/
2734 if (unlikely(!var10)) {
2735 var_class_name = type_kernel__Int.name;
2736 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
2737 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
2738 show_backtrace(1);
2739 }
2740 var11 = var_last_slash > var7;
2741 var8 = var11;
2742 goto RET_LABEL9;
2743 RET_LABEL9:(void)0;
2744 }
2745 }
2746 if (var8){
2747 var12 = 1;
2748 {
2749 { /* Inline kernel#Int#+ (var_last_slash,var12) on <var_last_slash:Int> */
2750 /* Covariant cast for argument 0 (i) <var12:Int> isa OTHER */
2751 /* <var12:Int> isa OTHER */
2752 var15 = 1; /* easy <var12:Int> isa OTHER*/
2753 if (unlikely(!var15)) {
2754 var_class_name18 = type_kernel__Int.name;
2755 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name18);
2756 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 374);
2757 show_backtrace(1);
2758 }
2759 var19 = var_last_slash + var12;
2760 var13 = var19;
2761 goto RET_LABEL14;
2762 RET_LABEL14:(void)0;
2763 }
2764 }
2765 {
2766 { /* Inline string#FlatText#length (self) on <self:String> */
2767 var22 = self->attrs[COLOR_string__FlatText___length].l; /* _length on <self:String> */
2768 var20 = var22;
2769 RET_LABEL21:(void)0;
2770 }
2771 }
2772 {
2773 var23 = string__FlatString__substring(self, var13, var20);
2774 }
2775 var = var23;
2776 goto RET_LABEL;
2777 } else {
2778 var24 = NULL;
2779 var = var24;
2780 goto RET_LABEL;
2781 }
2782 RET_LABEL:;
2783 return var;
2784 }
2785 /* method file#String#file_extension for (self: Object): nullable String */
2786 val* VIRTUAL_file__String__file_extension(val* self) {
2787 val* var /* : nullable String */;
2788 val* var1 /* : nullable String */;
2789 var1 = file__String__file_extension(self);
2790 var = var1;
2791 RET_LABEL:;
2792 return var;
2793 }
2794 /* method file#NativeString#file_exists for (self: NativeString): Bool */
2795 short int file__NativeString__file_exists(char* self) {
2796 short int var /* : Bool */;
2797 short int var1 /* : Bool for extern */;
2798 var1 = string_NativeString_NativeString_file_exists_0(self);
2799 var = var1;
2800 goto RET_LABEL;
2801 RET_LABEL:;
2802 return var;
2803 }
2804 /* method file#NativeString#file_exists for (self: Object): Bool */
2805 short int VIRTUAL_file__NativeString__file_exists(val* self) {
2806 short int var /* : Bool */;
2807 short int var1 /* : Bool */;
2808 short int var3 /* : Bool for extern */;
2809 char* var4 /* : NativeString */;
2810 { /* Inline file#NativeString#file_exists (self) on <self:Object(NativeString)> */
2811 var4 = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
2812 var3 = string_NativeString_NativeString_file_exists_0(var4);
2813 var1 = var3;
2814 goto RET_LABEL2;
2815 RET_LABEL2:(void)0;
2816 }
2817 var = var1;
2818 RET_LABEL:;
2819 return var;
2820 }
2821 /* method file#NativeString#file_mkdir for (self: NativeString): Bool */
2822 short int file__NativeString__file_mkdir(char* self) {
2823 short int var /* : Bool */;
2824 short int var1 /* : Bool for extern */;
2825 var1 = string_NativeString_NativeString_file_mkdir_0(self);
2826 var = var1;
2827 goto RET_LABEL;
2828 RET_LABEL:;
2829 return var;
2830 }
2831 /* method file#NativeString#file_mkdir for (self: Object): Bool */
2832 short int VIRTUAL_file__NativeString__file_mkdir(val* self) {
2833 short int var /* : Bool */;
2834 short int var1 /* : Bool */;
2835 short int var3 /* : Bool for extern */;
2836 char* var4 /* : NativeString */;
2837 { /* Inline file#NativeString#file_mkdir (self) on <self:Object(NativeString)> */
2838 var4 = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
2839 var3 = string_NativeString_NativeString_file_mkdir_0(var4);
2840 var1 = var3;
2841 goto RET_LABEL2;
2842 RET_LABEL2:(void)0;
2843 }
2844 var = var1;
2845 RET_LABEL:;
2846 return var;
2847 }
2848 /* method file#NativeString#file_realpath for (self: NativeString): NativeString */
2849 char* file__NativeString__file_realpath(char* self) {
2850 char* var /* : NativeString */;
2851 void* var1 /* : NativeString for extern */;
2852 var1 = file_NativeString_realpath(self);
2853 var = var1;
2854 goto RET_LABEL;
2855 RET_LABEL:;
2856 return var;
2857 }
2858 /* method file#NativeString#file_realpath for (self: Object): NativeString */
2859 char* VIRTUAL_file__NativeString__file_realpath(val* self) {
2860 char* var /* : NativeString */;
2861 char* var1 /* : NativeString */;
2862 void* var3 /* : NativeString for extern */;
2863 char* var4 /* : NativeString */;
2864 { /* Inline file#NativeString#file_realpath (self) on <self:Object(NativeString)> */
2865 var4 = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
2866 var3 = file_NativeString_realpath(var4);
2867 var1 = var3;
2868 goto RET_LABEL2;
2869 RET_LABEL2:(void)0;
2870 }
2871 var = var1;
2872 RET_LABEL:;
2873 return var;
2874 }
2875 /* method file#NativeFile#io_read for (self: NativeFile, NativeString, Int): Int */
2876 long file__NativeFile__io_read(val* self, char* p0, long p1) {
2877 long var /* : Int */;
2878 long var1 /* : Int for extern */;
2879 void* var2 /* : NativeFile for extern */;
2880 var2 = ((struct instance_kernel__Pointer*)self)->value; /* unboxing NativeFile */
2881 var1 = file_NativeFile_NativeFile_io_read_2(var2, p0, p1);
2882 var = var1;
2883 goto RET_LABEL;
2884 RET_LABEL:;
2885 return var;
2886 }
2887 /* method file#NativeFile#io_read for (self: Object, NativeString, Int): Int */
2888 long VIRTUAL_file__NativeFile__io_read(val* self, char* p0, long p1) {
2889 long var /* : Int */;
2890 long var1 /* : Int */;
2891 long var3 /* : Int for extern */;
2892 void* var4 /* : NativeFile for extern */;
2893 { /* Inline file#NativeFile#io_read (self,p0,p1) on <self:Object(NativeFile)> */
2894 var4 = ((struct instance_kernel__Pointer*)self)->value; /* unboxing Object */
2895 var3 = file_NativeFile_NativeFile_io_read_2(var4, p0, p1);
2896 var1 = var3;
2897 goto RET_LABEL2;
2898 RET_LABEL2:(void)0;
2899 }
2900 var = var1;
2901 RET_LABEL:;
2902 return var;
2903 }
2904 /* method file#NativeFile#io_write for (self: NativeFile, NativeString, Int): Int */
2905 long file__NativeFile__io_write(val* self, char* p0, long p1) {
2906 long var /* : Int */;
2907 long var1 /* : Int for extern */;
2908 void* var2 /* : NativeFile for extern */;
2909 var2 = ((struct instance_kernel__Pointer*)self)->value; /* unboxing NativeFile */
2910 var1 = file_NativeFile_NativeFile_io_write_2(var2, p0, p1);
2911 var = var1;
2912 goto RET_LABEL;
2913 RET_LABEL:;
2914 return var;
2915 }
2916 /* method file#NativeFile#io_write for (self: Object, NativeString, Int): Int */
2917 long VIRTUAL_file__NativeFile__io_write(val* self, char* p0, long p1) {
2918 long var /* : Int */;
2919 long var1 /* : Int */;
2920 long var3 /* : Int for extern */;
2921 void* var4 /* : NativeFile for extern */;
2922 { /* Inline file#NativeFile#io_write (self,p0,p1) on <self:Object(NativeFile)> */
2923 var4 = ((struct instance_kernel__Pointer*)self)->value; /* unboxing Object */
2924 var3 = file_NativeFile_NativeFile_io_write_2(var4, p0, p1);
2925 var1 = var3;
2926 goto RET_LABEL2;
2927 RET_LABEL2:(void)0;
2928 }
2929 var = var1;
2930 RET_LABEL:;
2931 return var;
2932 }
2933 /* method file#NativeFile#io_close for (self: NativeFile): Int */
2934 long file__NativeFile__io_close(val* self) {
2935 long var /* : Int */;
2936 long var1 /* : Int for extern */;
2937 void* var2 /* : NativeFile for extern */;
2938 var2 = ((struct instance_kernel__Pointer*)self)->value; /* unboxing NativeFile */
2939 var1 = file_NativeFile_NativeFile_io_close_0(var2);
2940 var = var1;
2941 goto RET_LABEL;
2942 RET_LABEL:;
2943 return var;
2944 }
2945 /* method file#NativeFile#io_close for (self: Object): Int */
2946 long VIRTUAL_file__NativeFile__io_close(val* self) {
2947 long var /* : Int */;
2948 long var1 /* : Int */;
2949 long var3 /* : Int for extern */;
2950 void* var4 /* : NativeFile for extern */;
2951 { /* Inline file#NativeFile#io_close (self) on <self:Object(NativeFile)> */
2952 var4 = ((struct instance_kernel__Pointer*)self)->value; /* unboxing Object */
2953 var3 = file_NativeFile_NativeFile_io_close_0(var4);
2954 var1 = var3;
2955 goto RET_LABEL2;
2956 RET_LABEL2:(void)0;
2957 }
2958 var = var1;
2959 RET_LABEL:;
2960 return var;
2961 }
2962 /* method file#NativeFile#io_open_read for (self: NativeFile, NativeString): NativeFile */
2963 val* file__NativeFile__io_open_read(val* self, char* p0) {
2964 val* var /* : NativeFile */;
2965 void* var1 /* : NativeFile for extern */;
2966 val* var2 /* : NativeFile */;
2967 var1 = file_NativeFileCapable_NativeFileCapable_io_open_read_1(p0);
2968 var2 = BOX_kernel__Pointer(var1); /* boxing NativeFile */
2969 var2->type = &type_file__NativeFile;
2970 var2->class = &class_file__NativeFile;
2971 var = var2;
2972 goto RET_LABEL;
2973 RET_LABEL:;
2974 return var;
2975 }
2976 /* method file#NativeFile#io_open_read for (self: Object, NativeString): NativeFile */
2977 val* VIRTUAL_file__NativeFile__io_open_read(val* self, char* p0) {
2978 val* var /* : NativeFile */;
2979 val* var1 /* : NativeFile */;
2980 var1 = file__NativeFile__io_open_read(self, p0);
2981 var = var1;
2982 RET_LABEL:;
2983 return var;
2984 }
2985 /* method file#NativeFile#io_open_write for (self: NativeFile, NativeString): NativeFile */
2986 val* file__NativeFile__io_open_write(val* self, char* p0) {
2987 val* var /* : NativeFile */;
2988 void* var1 /* : NativeFile for extern */;
2989 val* var2 /* : NativeFile */;
2990 var1 = file_NativeFileCapable_NativeFileCapable_io_open_write_1(p0);
2991 var2 = BOX_kernel__Pointer(var1); /* boxing NativeFile */
2992 var2->type = &type_file__NativeFile;
2993 var2->class = &class_file__NativeFile;
2994 var = var2;
2995 goto RET_LABEL;
2996 RET_LABEL:;
2997 return var;
2998 }
2999 /* method file#NativeFile#io_open_write for (self: Object, NativeString): NativeFile */
3000 val* VIRTUAL_file__NativeFile__io_open_write(val* self, char* p0) {
3001 val* var /* : NativeFile */;
3002 val* var1 /* : NativeFile */;
3003 var1 = file__NativeFile__io_open_write(self, p0);
3004 var = var1;
3005 RET_LABEL:;
3006 return var;
3007 }
3008 /* method file#NativeFile#native_stdin for (self: NativeFile): NativeFile */
3009 val* file__NativeFile__native_stdin(val* self) {
3010 val* var /* : NativeFile */;
3011 void* var1 /* : NativeFile for extern */;
3012 val* var2 /* : NativeFile */;
3013 var1 = file_NativeFileCapable_NativeFileCapable_native_stdin_0();
3014 var2 = BOX_kernel__Pointer(var1); /* boxing NativeFile */
3015 var2->type = &type_file__NativeFile;
3016 var2->class = &class_file__NativeFile;
3017 var = var2;
3018 goto RET_LABEL;
3019 RET_LABEL:;
3020 return var;
3021 }
3022 /* method file#NativeFile#native_stdin for (self: Object): NativeFile */
3023 val* VIRTUAL_file__NativeFile__native_stdin(val* self) {
3024 val* var /* : NativeFile */;
3025 val* var1 /* : NativeFile */;
3026 var1 = file__NativeFile__native_stdin(self);
3027 var = var1;
3028 RET_LABEL:;
3029 return var;
3030 }
3031 /* method file#NativeFile#native_stdout for (self: NativeFile): NativeFile */
3032 val* file__NativeFile__native_stdout(val* self) {
3033 val* var /* : NativeFile */;
3034 void* var1 /* : NativeFile for extern */;
3035 val* var2 /* : NativeFile */;
3036 var1 = file_NativeFileCapable_NativeFileCapable_native_stdout_0();
3037 var2 = BOX_kernel__Pointer(var1); /* boxing NativeFile */
3038 var2->type = &type_file__NativeFile;
3039 var2->class = &class_file__NativeFile;
3040 var = var2;
3041 goto RET_LABEL;
3042 RET_LABEL:;
3043 return var;
3044 }
3045 /* method file#NativeFile#native_stdout for (self: Object): NativeFile */
3046 val* VIRTUAL_file__NativeFile__native_stdout(val* self) {
3047 val* var /* : NativeFile */;
3048 val* var1 /* : NativeFile */;
3049 var1 = file__NativeFile__native_stdout(self);
3050 var = var1;
3051 RET_LABEL:;
3052 return var;
3053 }
3054 /* method file#NativeFile#native_stderr for (self: NativeFile): NativeFile */
3055 val* file__NativeFile__native_stderr(val* self) {
3056 val* var /* : NativeFile */;
3057 void* var1 /* : NativeFile for extern */;
3058 val* var2 /* : NativeFile */;
3059 var1 = file_NativeFileCapable_NativeFileCapable_native_stderr_0();
3060 var2 = BOX_kernel__Pointer(var1); /* boxing NativeFile */
3061 var2->type = &type_file__NativeFile;
3062 var2->class = &class_file__NativeFile;
3063 var = var2;
3064 goto RET_LABEL;
3065 RET_LABEL:;
3066 return var;
3067 }
3068 /* method file#NativeFile#native_stderr for (self: Object): NativeFile */
3069 val* VIRTUAL_file__NativeFile__native_stderr(val* self) {
3070 val* var /* : NativeFile */;
3071 val* var1 /* : NativeFile */;
3072 var1 = file__NativeFile__native_stderr(self);
3073 var = var1;
3074 RET_LABEL:;
3075 return var;
3076 }
3077 /* method file#Sys#stdout for (self: Sys): OStream */
3078 val* file__Sys__stdout(val* self) {
3079 val* var /* : OStream */;
3080 val* var1 /* : OStream */;
3081 var1 = self->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <self:Sys> */
3082 if (unlikely(var1 == NULL)) {
3083 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
3084 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 634);
3085 show_backtrace(1);
3086 }
3087 var = var1;
3088 RET_LABEL:;
3089 return var;
3090 }
3091 /* method file#Sys#stdout for (self: Object): OStream */
3092 val* VIRTUAL_file__Sys__stdout(val* self) {
3093 val* var /* : OStream */;
3094 val* var1 /* : OStream */;
3095 val* var3 /* : OStream */;
3096 { /* Inline file#Sys#stdout (self) on <self:Object(Sys)> */
3097 var3 = self->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <self:Object(Sys)> */
3098 if (unlikely(var3 == NULL)) {
3099 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
3100 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 634);
3101 show_backtrace(1);
3102 }
3103 var1 = var3;
3104 RET_LABEL2:(void)0;
3105 }
3106 var = var1;
3107 RET_LABEL:;
3108 return var;
3109 }
3110 /* method file#Sys#stderr for (self: Sys): OStream */
3111 val* file__Sys__stderr(val* self) {
3112 val* var /* : OStream */;
3113 val* var1 /* : OStream */;
3114 var1 = self->attrs[COLOR_file__Sys___stderr].val; /* _stderr on <self:Sys> */
3115 if (unlikely(var1 == NULL)) {
3116 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stderr");
3117 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 637);
3118 show_backtrace(1);
3119 }
3120 var = var1;
3121 RET_LABEL:;
3122 return var;
3123 }
3124 /* method file#Sys#stderr for (self: Object): OStream */
3125 val* VIRTUAL_file__Sys__stderr(val* self) {
3126 val* var /* : OStream */;
3127 val* var1 /* : OStream */;
3128 val* var3 /* : OStream */;
3129 { /* Inline file#Sys#stderr (self) on <self:Object(Sys)> */
3130 var3 = self->attrs[COLOR_file__Sys___stderr].val; /* _stderr on <self:Object(Sys)> */
3131 if (unlikely(var3 == NULL)) {
3132 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stderr");
3133 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 637);
3134 show_backtrace(1);
3135 }
3136 var1 = var3;
3137 RET_LABEL2:(void)0;
3138 }
3139 var = var1;
3140 RET_LABEL:;
3141 return var;
3142 }
3143 /* method file#Object#printn for (self: Object, Array[Object]) */
3144 void file__Object__printn(val* self, val* p0) {
3145 val* var_objects /* var objects: Array[Object] */;
3146 val* var /* : Sys */;
3147 val* var2 /* : Sys */;
3148 val* var3 /* : OStream */;
3149 val* var5 /* : OStream */;
3150 val* var6 /* : String */;
3151 var_objects = p0;
3152 {
3153 { /* Inline kernel#Object#sys (self) on <self:Object> */
3154 var2 = glob_sys;
3155 var = var2;
3156 goto RET_LABEL1;
3157 RET_LABEL1:(void)0;
3158 }
3159 }
3160 {
3161 { /* Inline file#Sys#stdout (var) on <var:Sys> */
3162 var5 = var->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <var:Sys> */
3163 if (unlikely(var5 == NULL)) {
3164 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
3165 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 634);
3166 show_backtrace(1);
3167 }
3168 var3 = var5;
3169 RET_LABEL4:(void)0;
3170 }
3171 }
3172 {
3173 var6 = string__Array__to_s(var_objects);
3174 }
3175 {
3176 file__OFStream__write(var3, var6); /* Direct call file#OFStream#write on <var3:OStream>*/
3177 }
3178 RET_LABEL:;
3179 }
3180 /* method file#Object#printn for (self: Object, Array[Object]) */
3181 void VIRTUAL_file__Object__printn(val* self, val* p0) {
3182 file__Object__printn(self, p0); /* Direct call file#Object#printn on <self:Object>*/
3183 RET_LABEL:;
3184 }
3185 /* method file#Object#print for (self: Object, Object) */
3186 void file__Object__print(val* self, val* p0) {
3187 val* var_object /* var object: Object */;
3188 val* var /* : Sys */;
3189 val* var2 /* : Sys */;
3190 val* var3 /* : OStream */;
3191 val* var5 /* : OStream */;
3192 val* var6 /* : String */;
3193 val* var7 /* : Sys */;
3194 val* var9 /* : Sys */;
3195 val* var10 /* : OStream */;
3196 val* var12 /* : OStream */;
3197 static val* varonce;
3198 val* var13 /* : String */;
3199 char* var14 /* : NativeString */;
3200 long var15 /* : Int */;
3201 val* var16 /* : FlatString */;
3202 var_object = p0;
3203 {
3204 { /* Inline kernel#Object#sys (self) on <self:Object> */
3205 var2 = glob_sys;
3206 var = var2;
3207 goto RET_LABEL1;
3208 RET_LABEL1:(void)0;
3209 }
3210 }
3211 {
3212 { /* Inline file#Sys#stdout (var) on <var:Sys> */
3213 var5 = var->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <var:Sys> */
3214 if (unlikely(var5 == NULL)) {
3215 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
3216 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 634);
3217 show_backtrace(1);
3218 }
3219 var3 = var5;
3220 RET_LABEL4:(void)0;
3221 }
3222 }
3223 {
3224 var6 = ((val* (*)(val*))(var_object->class->vft[COLOR_string__Object__to_s]))(var_object) /* to_s on <var_object:Object>*/;
3225 }
3226 {
3227 file__OFStream__write(var3, var6); /* Direct call file#OFStream#write on <var3:OStream>*/
3228 }
3229 {
3230 { /* Inline kernel#Object#sys (self) on <self:Object> */
3231 var9 = glob_sys;
3232 var7 = var9;
3233 goto RET_LABEL8;
3234 RET_LABEL8:(void)0;
3235 }
3236 }
3237 {
3238 { /* Inline file#Sys#stdout (var7) on <var7:Sys> */
3239 var12 = var7->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <var7:Sys> */
3240 if (unlikely(var12 == NULL)) {
3241 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
3242 PRINT_ERROR(" (%s:%d)\n", "../lib/standard/file.nit", 634);
3243 show_backtrace(1);
3244 }
3245 var10 = var12;
3246 RET_LABEL11:(void)0;
3247 }
3248 }
3249 if (varonce) {
3250 var13 = varonce;
3251 } else {
3252 var14 = "\n";
3253 var15 = 1;
3254 var16 = string__NativeString__to_s_with_length(var14, var15);
3255 var13 = var16;
3256 varonce = var13;
3257 }
3258 {
3259 file__OFStream__write(var10, var13); /* Direct call file#OFStream#write on <var10:OStream>*/
3260 }
3261 RET_LABEL:;
3262 }
3263 /* method file#Object#print for (self: Object, Object) */
3264 void VIRTUAL_file__Object__print(val* self, val* p0) {
3265 file__Object__print(self, p0); /* Direct call file#Object#print on <self:Object>*/
3266 RET_LABEL:;
3267 }
3268 /* method file#Object#getcwd for (self: Object): String */
3269 val* file__Object__getcwd(val* self) {
3270 val* var /* : String */;
3271 char* var1 /* : NativeString */;
3272 void* var3 /* : NativeString for extern */;
3273 val* var4 /* : String */;
3274 {
3275 { /* Inline file#Object#file_getcwd (self) on <self:Object> */
3276 var3 = string_NativeString_NativeString_file_getcwd_0(self);
3277 var1 = var3;
3278 goto RET_LABEL2;
3279 RET_LABEL2:(void)0;
3280 }
3281 }
3282 {
3283 var4 = string__NativeString__to_s(var1);
3284 }
3285 var = var4;
3286 goto RET_LABEL;
3287 RET_LABEL:;
3288 return var;
3289 }
3290 /* method file#Object#getcwd for (self: Object): String */
3291 val* VIRTUAL_file__Object__getcwd(val* self) {
3292 val* var /* : String */;
3293 val* var1 /* : String */;
3294 var1 = file__Object__getcwd(self);
3295 var = var1;
3296 RET_LABEL:;
3297 return var;
3298 }
3299 /* method file#Object#file_getcwd for (self: Object): NativeString */
3300 char* file__Object__file_getcwd(val* self) {
3301 char* var /* : NativeString */;
3302 void* var1 /* : NativeString for extern */;
3303 var1 = string_NativeString_NativeString_file_getcwd_0(self);
3304 var = var1;
3305 goto RET_LABEL;
3306 RET_LABEL:;
3307 return var;
3308 }
3309 /* method file#Object#file_getcwd for (self: Object): NativeString */
3310 char* VIRTUAL_file__Object__file_getcwd(val* self) {
3311 char* var /* : NativeString */;
3312 char* var1 /* : NativeString */;
3313 void* var3 /* : NativeString for extern */;
3314 { /* Inline file#Object#file_getcwd (self) on <self:Object> */
3315 var3 = string_NativeString_NativeString_file_getcwd_0(self);
3316 var1 = var3;
3317 goto RET_LABEL2;
3318 RET_LABEL2:(void)0;
3319 }
3320 var = var1;
3321 RET_LABEL:;
3322 return var;
3323 }