c_src: update
[nit.git] / c_src / file.sep.1.c
index 300b48b..98d4ab2 100644 (file)
 #include "file.sep.0.h"
-/* method file#Object#printn for (self: Object, Array[Object]) */
-void file__Object__printn(val* self, val* p0) {
-val* var_objects /* var objects: Array[Object] */;
-val* var /* : OFStream */;
-val* var1 /* : String */;
-var_objects = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_file__Object__stdout]))(self) /* stdout on <self:Object>*/;
-var1 = ((val* (*)(val*))(var_objects->class->vft[COLOR_string__Object__to_s]))(var_objects) /* to_s on <var_objects:Array[Object]>*/;
-((void (*)(val*, val*))(var->class->vft[COLOR_stream__OStream__write]))(var, var1) /* write on <var:OFStream>*/;
-RET_LABEL:;
-}
-/* method file#Object#printn for (self: Object, Array[Object]) */
-void VIRTUAL_file__Object__printn(val* self, val* p0) {
-file__Object__printn(self, p0);
-RET_LABEL:;
-}
-/* method file#Object#print for (self: Object, Object) */
-void file__Object__print(val* self, val* p0) {
-val* var_object /* var object: Object */;
-val* var /* : OFStream */;
-val* var1 /* : String */;
-val* var2 /* : OFStream */;
-static val* varonce;
-val* var3 /* : String */;
-char* var4 /* : NativeString */;
-long var5 /* : Int */;
-val* var6 /* : String */;
-var_object = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_file__Object__stdout]))(self) /* stdout on <self:Object>*/;
-var1 = ((val* (*)(val*))(var_object->class->vft[COLOR_string__Object__to_s]))(var_object) /* to_s on <var_object:Object>*/;
-((void (*)(val*, val*))(var->class->vft[COLOR_stream__OStream__write]))(var, var1) /* write on <var:OFStream>*/;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_file__Object__stdout]))(self) /* stdout on <self:Object>*/;
-if (varonce) {
-var3 = varonce;
-} else {
-var4 = "\n";
-var5 = 1;
-var6 = string__NativeString__to_s_with_length(var4, var5);
-var3 = var6;
-varonce = var3;
-}
-((void (*)(val*, val*))(var2->class->vft[COLOR_stream__OStream__write]))(var2, var3) /* write on <var2:OFStream>*/;
-RET_LABEL:;
-}
-/* method file#Object#print for (self: Object, Object) */
-void VIRTUAL_file__Object__print(val* self, val* p0) {
-file__Object__print(self, p0);
-RET_LABEL:;
-}
-/* method file#Object#getc for (self: Object): Char */
-char file__Object__getc(val* self) {
-char var /* : Char */;
-val* var1 /* : Stdin */;
-long var2 /* : Int */;
-char var3 /* : Char */;
-char var5 /* : Char */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_file__Object__stdin]))(self) /* stdin on <self:Object>*/;
-var2 = ((long (*)(val*))(var1->class->vft[COLOR_stream__IStream__read_char]))(var1) /* read_char on <var1:Stdin>*/;
-{ /* Inline kernel#Int#ascii (var2) */
-var5 = var2;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
-}
-var = var3;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#Object#getc for (self: Object): Char */
-char VIRTUAL_file__Object__getc(val* self) {
-char var /* : Char */;
-char var1 /* : Char */;
-var1 = file__Object__getc(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#Object#gets for (self: Object): String */
-val* file__Object__gets(val* self) {
-val* var /* : String */;
-val* var1 /* : Stdin */;
-val* var2 /* : String */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_file__Object__stdin]))(self) /* stdin on <self:Object>*/;
-var2 = ((val* (*)(val*))(var1->class->vft[COLOR_stream__IStream__read_line]))(var1) /* read_line on <var1:Stdin>*/;
-var = var2;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#Object#gets for (self: Object): String */
-val* VIRTUAL_file__Object__gets(val* self) {
-val* var /* : String */;
-val* var1 /* : String */;
-var1 = file__Object__gets(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#Object#getcwd for (self: Object): String */
-val* file__Object__getcwd(val* self) {
-val* var /* : String */;
-char* var1 /* : NativeString */;
-val* var2 /* : String */;
-var1 = ((char* (*)(val*))(self->class->vft[COLOR_file__Object__file_getcwd]))(self) /* file_getcwd on <self:Object>*/;
-var2 = string__NativeString__to_s(var1);
-var = var2;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#Object#getcwd for (self: Object): String */
-val* VIRTUAL_file__Object__getcwd(val* self) {
-val* var /* : String */;
-val* var1 /* : String */;
-var1 = file__Object__getcwd(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#Object#file_getcwd for (self: Object): NativeString */
-char* file__Object__file_getcwd(val* self) {
-char* var /* : NativeString */;
-char* var1 /* : NativeString */;
-var1 = string_NativeString_NativeString_file_getcwd_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#Object#file_getcwd for (self: Object): NativeString */
-char* VIRTUAL_file__Object__file_getcwd(val* self) {
-char* var /* : NativeString */;
-char* var1 /* : NativeString */;
-var1 = file__Object__file_getcwd(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#FStream#path for (self: FStream): nullable String */
-val* file__FStream__path(val* self) {
-val* var /* : nullable String */;
-val* var1 /* : nullable String */;
-var1 = self->attrs[COLOR_file__FStream___path].val; /* _path on <self:FStream> */
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#FStream#path for (self: Object): nullable String */
-val* VIRTUAL_file__FStream__path(val* self) {
-val* var /* : nullable String */;
-val* var1 /* : nullable String */;
-var1 = file__FStream__path(self);
-var = var1;
+/* method file#FStream#path= for (self: FStream, nullable String) */
+void file__FStream__path_61d(val* self, val* p0) {
+self->attrs[COLOR_file__FStream___path].val = p0; /* _path on <self:FStream> */
 RET_LABEL:;
-return var;
-}
-/* method file#FStream#file_stat for (self: FStream): FileStat */
-void* file__FStream__file_stat(val* self) {
-void* var /* : FileStat */;
-val* var1 /* : nullable NativeFile */;
-void* var2 /* : FileStat */;
-var1 = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:FStream> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 74);
-show_backtrace(1);
-} else {
-var2 = ((void* (*)(val*))(var1->class->vft[COLOR_file__NativeFile__file_stat]))(var1) /* file_stat on <var1:nullable NativeFile>*/;
 }
-var = var2;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+/* method file#FStream#path= for (self: Object, nullable String) */
+void VIRTUAL_file__FStream__path_61d(val* self, val* p0) {
+{ /* Inline file#FStream#path= (self,p0) on <self:Object(FStream)> */
+self->attrs[COLOR_file__FStream___path].val = p0; /* _path on <self:Object(FStream)> */
+RET_LABEL1:(void)0;
 }
-/* method file#FStream#file_stat for (self: Object): FileStat */
-void* VIRTUAL_file__FStream__file_stat(val* self) {
-void* var /* : FileStat */;
-void* var1 /* : FileStat */;
-var1 = file__FStream__file_stat(self);
-var = var1;
 RET_LABEL:;
-return var;
 }
 /* method file#FStream#init for (self: FStream) */
 void file__FStream__init(val* self) {
@@ -189,162 +18,174 @@ RET_LABEL:;
 }
 /* method file#FStream#init for (self: Object) */
 void VIRTUAL_file__FStream__init(val* self) {
-file__FStream__init(self);
-RET_LABEL:;
-}
-/* method file#IFStream#reopen for (self: IFStream) */
-void file__IFStream__reopen(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-void* var2 /* : NativeFile */;
-val* var3 /* : nullable String */;
-char* var4 /* : NativeString */;
-void* var5 /* : NativeFile */;
-val* var6 /* : nullable NativeFile */;
-short int var7 /* : Bool */;
-long var8 /* : Int */;
-val* var9 /* : nullable Buffer */;
-var = ((short int (*)(val*))(self->class->vft[COLOR_stream__IStream__eof]))(self) /* eof on <self:IFStream>*/;
-var1 = !var;
-if (var1){
-((void (*)(val*))(self->class->vft[COLOR_stream__IOS__close]))(self) /* close on <self:IFStream>*/;
-} else {
-}
-var2 = NULL/*special!*/;
-var3 = self->attrs[COLOR_file__FStream___path].val; /* _path on <self:IFStream> */
-if (var3 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 88);
-show_backtrace(1);
-} else {
-var4 = ((char* (*)(val*))(var3->class->vft[COLOR_string__String__to_cstring]))(var3) /* to_cstring on <var3:nullable String>*/;
-}
-var5 = file__NativeFile__io_open_read(var2, var4);
-var6 = BOX_file__NativeFile(var5); /* autobox from NativeFile to nullable NativeFile */
-self->attrs[COLOR_file__FStream___file].val = var6; /* _file on <self:IFStream> */
-var7 = 0;
-self->attrs[COLOR_file__IFStream___end_reached].s = var7; /* _end_reached on <self:IFStream> */
-var8 = 0;
-self->attrs[COLOR_stream__BufferedIStream___buffer_pos].l = var8; /* _buffer_pos on <self:IFStream> */
-var9 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
-if (var9 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 91);
-show_backtrace(1);
-} else {
-((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__RemovableCollection__clear]))(var9) /* clear on <var9:nullable Buffer>*/;
-}
-RET_LABEL:;
+{ /* Inline file#FStream#init (self) on <self:Object(FStream)> */
+RET_LABEL1:(void)0;
 }
-/* method file#IFStream#reopen for (self: Object) */
-void VIRTUAL_file__IFStream__reopen(val* self) {
-file__IFStream__reopen(self);
 RET_LABEL:;
 }
 /* method file#IFStream#close for (self: IFStream) */
 void file__IFStream__close(val* self) {
 val* var /* : nullable NativeFile */;
 long var1 /* : Int */;
+long var3 /* : Int */;
+void* var4 /* : NativeFile */;
 long var_i /* var i: Int */;
-short int var2 /* : Bool */;
+short int var5 /* : Bool */;
 var = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:IFStream> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 96);
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 63);
 show_backtrace(1);
 } else {
-var1 = ((long (*)(val*))(var->class->vft[COLOR_file__NativeFile__io_close]))(var) /* io_close on <var:nullable NativeFile>*/;
+{ /* Inline file#NativeFile#io_close (var) on <var:nullable NativeFile> */
+var4 = ((struct instance_kernel__Pointer*)var)->value; /* autounbox from nullable NativeFile to NativeFile */;
+var3 = file_NativeFile_NativeFile_io_close_0(var4);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
 }
 var_i = var1;
-var2 = 1;
-self->attrs[COLOR_file__IFStream___end_reached].s = var2; /* _end_reached on <self:IFStream> */
+var5 = 1;
+{
+{ /* Inline file#IFStream#end_reached= (self,var5) on <self:IFStream> */
+self->attrs[COLOR_file__IFStream___end_reached].s = var5; /* _end_reached on <self:IFStream> */
+RET_LABEL6:(void)0;
+}
+}
 RET_LABEL:;
 }
 /* method file#IFStream#close for (self: Object) */
 void VIRTUAL_file__IFStream__close(val* self) {
-file__IFStream__close(self);
+file__IFStream__close(self); /* Direct call file#IFStream#close on <self:Object(IFStream)>*/
 RET_LABEL:;
 }
 /* method file#IFStream#fill_buffer for (self: IFStream) */
 void file__IFStream__fill_buffer(val* self) {
 val* var /* : nullable NativeFile */;
-val* var1 /* : nullable Buffer */;
+val* var1 /* : nullable FlatBuffer */;
 char* var2 /* : NativeString */;
-val* var3 /* : nullable Buffer */;
-long var4 /* : Int */;
-long var5 /* : Int */;
-long var_nb /* var nb: Int */;
+char* var4 /* : NativeString */;
+val* var5 /* : nullable FlatBuffer */;
 long var6 /* : Int */;
-short int var7 /* : Bool */;
-short int var9 /* : Bool */;
+long var8 /* : Int */;
+long var9 /* : Int */;
+long var11 /* : Int */;
+void* var12 /* : NativeFile */;
+long var_nb /* var nb: Int */;
+long var13 /* : Int */;
+short int var14 /* : Bool */;
+short int var16 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-short int var10 /* : Bool */;
-short int var11 /* : Bool */;
-long var12 /* : Int */;
-val* var13 /* : nullable Buffer */;
-long var14 /* : Int */;
+short int var17 /* : Bool */;
+short int var18 /* : Bool */;
+long var20 /* : Int */;
+val* var21 /* : nullable FlatBuffer */;
+long var23 /* : Int */;
 var = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:IFStream> */
 var1 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 102);
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 69);
+show_backtrace(1);
+} else {
+{ /* Inline string#FlatText#items (var1) on <var1:nullable FlatBuffer> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/string.nit", 551);
 show_backtrace(1);
 }
-var2 = var1->attrs[COLOR_string__AbstractString___items].str; /* _items on <var1:nullable Buffer> */
-var3 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
-if (var3 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 102);
+var4 = var1->attrs[COLOR_string__FlatText___items].str; /* _items on <var1:nullable FlatBuffer> */
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+var5 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
+if (var5 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 69);
+show_backtrace(1);
+} else {
+{ /* Inline string#FlatBuffer#capacity (var5) on <var5:nullable FlatBuffer> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/string.nit", 1165);
 show_backtrace(1);
 }
-var4 = var3->attrs[COLOR_string__Buffer___capacity].l; /* _capacity on <var3:nullable Buffer> */
+var8 = var5->attrs[COLOR_string__FlatBuffer___capacity].l; /* _capacity on <var5:nullable FlatBuffer> */
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 102);
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 69);
 show_backtrace(1);
 } else {
-var5 = ((long (*)(val*, char*, long))(var->class->vft[COLOR_file__NativeFile__io_read]))(var, var2, var4) /* io_read on <var:nullable NativeFile>*/;
-}
-var_nb = var5;
-var6 = 0;
-{ /* Inline kernel#Int#<= (var_nb,var6) */
-/* Covariant cast for argument 0 (i) <var6:Int> isa OTHER */
-/* <var6:Int> isa OTHER */
-var9 = 1; /* easy <var6:Int> isa OTHER*/
-if (!var9) {
+{ /* Inline file#NativeFile#io_read (var,var2,var6) on <var:nullable NativeFile> */
+var12 = ((struct instance_kernel__Pointer*)var)->value; /* autounbox from nullable NativeFile to NativeFile */;
+var11 = file_NativeFile_NativeFile_io_read_2(var12, var2, var6);
+var9 = var11;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
+}
+}
+var_nb = var9;
+var13 = 0;
+{
+{ /* Inline kernel#Int#<= (var_nb,var13) on <var_nb:Int> */
+/* Covariant cast for argument 0 (i) <var13:Int> isa OTHER */
+/* <var13:Int> isa OTHER */
+var16 = 1; /* easy <var13:Int> isa OTHER*/
+if (unlikely(!var16)) {
 var_class_name = type_kernel__Int.name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 264);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 324);
 show_backtrace(1);
 }
-var10 = var_nb <= var6;
-var7 = var10;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+var17 = var_nb <= var13;
+var14 = var17;
+goto RET_LABEL15;
+RET_LABEL15:(void)0;
+}
+}
+if (var14){
+var18 = 1;
+{
+{ /* Inline file#IFStream#end_reached= (self,var18) on <self:IFStream> */
+self->attrs[COLOR_file__IFStream___end_reached].s = var18; /* _end_reached on <self:IFStream> */
+RET_LABEL19:(void)0;
 }
-if (var7){
-var11 = 1;
-self->attrs[COLOR_file__IFStream___end_reached].s = var11; /* _end_reached on <self:IFStream> */
-var12 = 0;
-var_nb = var12;
+}
+var20 = 0;
+var_nb = var20;
 } else {
 }
-var13 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
-if (var13 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 107);
+var21 = self->attrs[COLOR_stream__BufferedIStream___buffer].val; /* _buffer on <self:IFStream> */
+if (var21 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 74);
+show_backtrace(1);
+} else {
+{ /* Inline string#FlatText#length= (var21,var_nb) on <var21:nullable FlatBuffer> */
+if (unlikely(var21 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/string.nit", 556);
 show_backtrace(1);
 }
-var13->attrs[COLOR_array__AbstractArrayRead___length].l = var_nb; /* _length on <var13:nullable Buffer> */
-var14 = 0;
-self->attrs[COLOR_stream__BufferedIStream___buffer_pos].l = var14; /* _buffer_pos on <self:IFStream> */
+var21->attrs[COLOR_string__FlatText___length].l = var_nb; /* _length on <var21:nullable FlatBuffer> */
+RET_LABEL22:(void)0;
+}
+}
+var23 = 0;
+self->attrs[COLOR_stream__BufferedIStream___buffer_pos].l = var23; /* _buffer_pos on <self:IFStream> */
 RET_LABEL:;
 }
 /* method file#IFStream#fill_buffer for (self: Object) */
 void VIRTUAL_file__IFStream__fill_buffer(val* self) {
-file__IFStream__fill_buffer(self);
+file__IFStream__fill_buffer(self); /* Direct call file#IFStream#fill_buffer on <self:Object(IFStream)>*/
 RET_LABEL:;
 }
 /* method file#IFStream#end_reached for (self: IFStream): Bool */
@@ -360,146 +201,336 @@ return var;
 short int VIRTUAL_file__IFStream__end_reached(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = file__IFStream__end_reached(self);
+short int var3 /* : Bool */;
+{ /* Inline file#IFStream#end_reached (self) on <self:Object(IFStream)> */
+var3 = self->attrs[COLOR_file__IFStream___end_reached].s; /* _end_reached on <self:Object(IFStream)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
+/* method file#IFStream#end_reached= for (self: IFStream, Bool) */
+void file__IFStream__end_reached_61d(val* self, short int p0) {
+self->attrs[COLOR_file__IFStream___end_reached].s = p0; /* _end_reached on <self:IFStream> */
+RET_LABEL:;
+}
+/* method file#IFStream#end_reached= for (self: Object, Bool) */
+void VIRTUAL_file__IFStream__end_reached_61d(val* self, short int p0) {
+{ /* Inline file#IFStream#end_reached= (self,p0) on <self:Object(IFStream)> */
+self->attrs[COLOR_file__IFStream___end_reached].s = p0; /* _end_reached on <self:Object(IFStream)> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
 /* method file#IFStream#open for (self: IFStream, String) */
 void file__IFStream__open(val* self, val* p0) {
 val* var_path /* var path: String */;
 long var /* : Int */;
-void* var1 /* : NativeFile */;
-val* var2 /* : nullable String */;
-char* var3 /* : NativeString */;
 void* var4 /* : NativeFile */;
-val* var5 /* : nullable NativeFile */;
-val* var6 /* : nullable NativeFile */;
-val* var7 /* : null */;
-short int var8 /* : Bool */;
+char* var5 /* : NativeString */;
+void* var6 /* : NativeFile */;
+void* var8 /* : NativeFile */;
+val* var9 /* : nullable NativeFile */;
+val* var10 /* : nullable NativeFile */;
+short int var11 /* : Bool */;
+short int var13 /* : Bool */;
+void* var14 /* : Pointer */;
+short int var15 /* : Bool */;
+static val* varonce;
+val* var16 /* : String */;
+char* var17 /* : NativeString */;
+long var18 /* : Int */;
+val* var19 /* : FlatString */;
+static val* varonce20;
+val* var21 /* : String */;
+char* var22 /* : NativeString */;
+long var23 /* : Int */;
+val* var24 /* : FlatString */;
+val* var25 /* : Sys */;
+val* var27 /* : Sys */;
+long var28 /* : Int */;
+long var30 /* : Int */;
+val* var31 /* : String */;
+static val* varonce32;
+val* var33 /* : String */;
+char* var34 /* : NativeString */;
+long var35 /* : Int */;
+val* var36 /* : FlatString */;
+val* var37 /* : Array[Object] */;
+long var38 /* : Int */;
+val* var39 /* : NativeArray[Object] */;
+val* var40 /* : String */;
+{
+{ /* Inline file#FStream#init (self) on <self:IFStream> */
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline stream#BufferedIStream#init (self) on <self:IFStream> */
+RET_LABEL2:(void)0;
+}
+}
 var_path = p0;
-((void (*)(val*))(self->class->vft[COLOR_file__FStream__init]))(self) /* init on <self:IFStream>*/;
-((void (*)(val*))(self->class->vft[COLOR_stream__BufferedIStream__init]))(self) /* init on <self:IFStream>*/;
+{
+{ /* Inline file#FStream#path= (self,var_path) on <self:IFStream> */
 self->attrs[COLOR_file__FStream___path].val = var_path; /* _path on <self:IFStream> */
+RET_LABEL3:(void)0;
+}
+}
 var = 10;
-((void (*)(val*, long))(self->class->vft[COLOR_stream__BufferedIStream__prepare_buffer]))(self, var) /* prepare_buffer on <self:IFStream>*/;
-var1 = NULL/*special!*/;
-var2 = self->attrs[COLOR_file__FStream___path].val; /* _path on <self:IFStream> */
-if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 119);
+{
+stream__BufferedIStream__prepare_buffer(self, var); /* Direct call stream#BufferedIStream#prepare_buffer on <self:IFStream>*/
+}
+var4 = NULL/*special!*/;
+{
+var5 = string__FlatString__to_cstring(var_path);
+}
+{
+{ /* Inline file#NativeFile#io_open_read (var4,var5) on <var4:NativeFile> */
+var8 = file_NativeFileCapable_NativeFileCapable_io_open_read_1(var5);
+var6 = var8;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
+}
+}
+var9 = BOX_file__NativeFile(var6); /* autobox from NativeFile to nullable NativeFile */
+self->attrs[COLOR_file__FStream___file].val = var9; /* _file on <self:IFStream> */
+var10 = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:IFStream> */
+if (var10 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 87);
 show_backtrace(1);
 } else {
-var3 = ((char* (*)(val*))(var2->class->vft[COLOR_string__String__to_cstring]))(var2) /* to_cstring on <var2:nullable String>*/;
-}
-var4 = file__NativeFile__io_open_read(var1, var3);
-var5 = BOX_file__NativeFile(var4); /* autobox from NativeFile to nullable NativeFile */
-self->attrs[COLOR_file__FStream___file].val = var5; /* _file on <self:IFStream> */
-var6 = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:IFStream> */
-var7 = NULL;
-if (var6 == NULL) {
-var8 = 0; /* is null */
+{ /* Inline kernel#Pointer#address_is_null (var10) on <var10:nullable NativeFile> */
+var14 = ((struct instance_kernel__Pointer*)var10)->value; /* autounbox from nullable NativeFile to Pointer */;
+var13 = address_is_null(var14);
+var11 = var13;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
+}
+}
+var15 = !var11;
+if (unlikely(!var15)) {
+if (varonce) {
+var16 = varonce;
+} else {
+var17 = "Error: Opening file at \'";
+var18 = 24;
+var19 = string__NativeString__to_s_with_length(var17, var18);
+var16 = var19;
+varonce = var16;
+}
+if (varonce20) {
+var21 = varonce20;
 } else {
-var8 = 1; /* arg is null and recv is not */
+var22 = "\' failed with \'";
+var23 = 15;
+var24 = string__NativeString__to_s_with_length(var22, var23);
+var21 = var24;
+varonce20 = var21;
+}
+{
+{ /* Inline kernel#Object#sys (self) on <self:IFStream> */
+var27 = glob_sys;
+var25 = var27;
+goto RET_LABEL26;
+RET_LABEL26:(void)0;
+}
+}
+{
+{ /* Inline kernel#Sys#errno (var25) on <var25:Sys> */
+struct nitni_instance* var_for_c_0;
+var_for_c_0 = nit_alloc(sizeof(struct nitni_instance));
+var_for_c_0->value = var25;
+var30 = kernel___Sys_errno___impl(var_for_c_0);
+var28 = var30;
+goto RET_LABEL29;
+RET_LABEL29:(void)0;
+}
 }
-if (!var8) {
-fprintf(stderr, "Runtime error: %s", "Assert \'cant_open_file\' failed");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 120);
+{
+var31 = string__Int__strerror(var28);
+}
+if (varonce32) {
+var33 = varonce32;
+} else {
+var34 = "\'";
+var35 = 1;
+var36 = string__NativeString__to_s_with_length(var34, var35);
+var33 = var36;
+varonce32 = var33;
+}
+var37 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var37 = array_instance Array[Object] */
+var38 = 5;
+var39 = NEW_array__NativeArray(var38, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var39)->values[0] = (val*) var16;
+((struct instance_array__NativeArray*)var39)->values[1] = (val*) var_path;
+((struct instance_array__NativeArray*)var39)->values[2] = (val*) var21;
+((struct instance_array__NativeArray*)var39)->values[3] = (val*) var31;
+((struct instance_array__NativeArray*)var39)->values[4] = (val*) var33;
+{
+((void (*)(val*, val*, long))(var37->class->vft[COLOR_array__Array__with_native]))(var37, var39, var38) /* with_native on <var37:Array[Object]>*/;
+}
+}
+{
+var40 = ((val* (*)(val*))(var37->class->vft[COLOR_string__Object__to_s]))(var37) /* to_s on <var37:Array[Object]>*/;
+}
+{
+file__Object__print(self, var40); /* Direct call file#Object#print on <self:IFStream>*/
+}
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 87);
 show_backtrace(1);
 }
 RET_LABEL:;
 }
 /* method file#IFStream#open for (self: Object, String) */
 void VIRTUAL_file__IFStream__open(val* self, val* p0) {
-file__IFStream__open(self, p0);
+file__IFStream__open(self, p0); /* Direct call file#IFStream#open on <self:Object(IFStream)>*/
 RET_LABEL:;
 }
 /* method file#IFStream#init for (self: IFStream) */
 void file__IFStream__init(val* self) {
-((void (*)(val*))(self->class->vft[COLOR_file__FStream__init]))(self) /* init on <self:IFStream>*/;
-((void (*)(val*))(self->class->vft[COLOR_stream__BufferedIStream__init]))(self) /* init on <self:IFStream>*/;
-RET_LABEL:;
+{
+{ /* Inline file#FStream#init (self) on <self:IFStream> */
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline stream#BufferedIStream#init (self) on <self:IFStream> */
+RET_LABEL2:(void)0;
 }
-/* method file#IFStream#init for (self: Object) */
-void VIRTUAL_file__IFStream__init(val* self) {
-file__IFStream__init(self);
-RET_LABEL:;
 }
-/* method file#IFStream#without_file for (self: IFStream) */
-void file__IFStream__without_file(val* self) {
-((void (*)(val*))(self->class->vft[COLOR_file__FStream__init]))(self) /* init on <self:IFStream>*/;
-((void (*)(val*))(self->class->vft[COLOR_stream__BufferedIStream__init]))(self) /* init on <self:IFStream>*/;
 RET_LABEL:;
 }
-/* method file#IFStream#without_file for (self: Object) */
-void VIRTUAL_file__IFStream__without_file(val* self) {
-file__IFStream__without_file(self);
+/* method file#IFStream#init for (self: Object) */
+void VIRTUAL_file__IFStream__init(val* self) {
+file__IFStream__init(self); /* Direct call file#IFStream#init on <self:Object(IFStream)>*/
 RET_LABEL:;
 }
-/* method file#OFStream#write for (self: OFStream, String) */
+/* method file#OFStream#write for (self: OFStream, Text) */
 void file__OFStream__write(val* self, val* p0) {
-val* var_s /* var s: String */;
+val* var_s /* var s: Text */;
 short int var /* : Bool */;
-char* var1 /* : NativeString */;
-long var2 /* : Int */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+char* var2 /* : NativeString */;
+long var3 /* : Int */;
+long var5 /* : Int */;
+val* var6 /* : Iterator[Text] */;
+val* var7 /* : Iterator[nullable Object] */;
+short int var8 /* : Bool */;
+val* var9 /* : nullable Object */;
+val* var_i /* var i: Text */;
+char* var10 /* : NativeString */;
+long var11 /* : Int */;
+long var13 /* : Int */;
 var_s = p0;
 var = self->attrs[COLOR_file__OFStream___writable].s; /* _writable on <self:OFStream> */
-if (!var) {
-fprintf(stderr, "Runtime error: %s", "Assert failed");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 134);
+if (unlikely(!var)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 103);
 show_backtrace(1);
 }
-var1 = ((char* (*)(val*))(var_s->class->vft[COLOR_string__String__to_cstring]))(var_s) /* to_cstring on <var_s:String>*/;
-var2 = ((long (*)(val*))(var_s->class->vft[COLOR_abstract_collection__Collection__length]))(var_s) /* length on <var_s:String>*/;
-((void (*)(val*, char*, long))(self->class->vft[COLOR_file__OFStream__write_native]))(self, var1, var2) /* write_native on <self:OFStream>*/;
-RET_LABEL:;
+/* <var_s:Text> isa FlatText */
+cltype = type_string__FlatText.color;
+idtype = type_string__FlatText.id;
+if(cltype >= var_s->type->table_size) {
+var1 = 0;
+} else {
+var1 = var_s->type->type_table[cltype] == idtype;
 }
-/* method file#OFStream#write for (self: Object, String) */
-void VIRTUAL_file__OFStream__write(val* self, val* p0) {
-file__OFStream__write(self, p0);
-RET_LABEL:;
+if (var1){
+{
+var2 = ((char* (*)(val*))(var_s->class->vft[COLOR_string__Text__to_cstring]))(var_s) /* to_cstring on <var_s:Text(FlatText)>*/;
 }
-/* method file#OFStream#is_writable for (self: OFStream): Bool */
-short int file__OFStream__is_writable(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = self->attrs[COLOR_file__OFStream___writable].s; /* _writable on <self:OFStream> */
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+{ /* Inline string#FlatText#length (var_s) on <var_s:Text(FlatText)> */
+var5 = var_s->attrs[COLOR_string__FlatText___length].l; /* _length on <var_s:Text(FlatText)> */
+var3 = var5;
+RET_LABEL4:(void)0;
 }
-/* method file#OFStream#is_writable for (self: Object): Bool */
-short int VIRTUAL_file__OFStream__is_writable(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = file__OFStream__is_writable(self);
-var = var1;
-RET_LABEL:;
-return var;
 }
-/* method file#OFStream#close for (self: OFStream) */
-void file__OFStream__close(val* self) {
+{
+file__OFStream__write_native(self, var2, var3); /* Direct call file#OFStream#write_native on <self:OFStream>*/
+}
+} else {
+{
+var6 = ((val* (*)(val*))(var_s->class->vft[COLOR_string__Text__substrings]))(var_s) /* substrings on <var_s:Text>*/;
+}
+{
+var7 = abstract_collection__Iterator__iterator(var6);
+}
+for(;;) {
+{
+var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
+}
+if(!var8) break;
+{
+var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
+}
+var_i = var9;
+{
+var10 = ((char* (*)(val*))(var_i->class->vft[COLOR_string__Text__to_cstring]))(var_i) /* to_cstring on <var_i:Text>*/;
+}
+{
+{ /* Inline string#FlatText#length (var_i) on <var_i:Text> */
+var13 = var_i->attrs[COLOR_string__FlatText___length].l; /* _length on <var_i:Text> */
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+{
+file__OFStream__write_native(self, var10, var11); /* Direct call file#OFStream#write_native on <self:OFStream>*/
+}
+CONTINUE_label: (void)0;
+{
+((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
+}
+}
+BREAK_label: (void)0;
+}
+RET_LABEL:;
+}
+/* method file#OFStream#write for (self: Object, Text) */
+void VIRTUAL_file__OFStream__write(val* self, val* p0) {
+file__OFStream__write(self, p0); /* Direct call file#OFStream#write on <self:Object(OFStream)>*/
+RET_LABEL:;
+}
+/* method file#OFStream#close for (self: OFStream) */
+void file__OFStream__close(val* self) {
 val* var /* : nullable NativeFile */;
 long var1 /* : Int */;
+long var3 /* : Int */;
+void* var4 /* : NativeFile */;
 long var_i /* var i: Int */;
-short int var2 /* : Bool */;
+short int var5 /* : Bool */;
 var = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:OFStream> */
 if (var == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 142);
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 115);
 show_backtrace(1);
 } else {
-var1 = ((long (*)(val*))(var->class->vft[COLOR_file__NativeFile__io_close]))(var) /* io_close on <var:nullable NativeFile>*/;
+{ /* Inline file#NativeFile#io_close (var) on <var:nullable NativeFile> */
+var4 = ((struct instance_kernel__Pointer*)var)->value; /* autounbox from nullable NativeFile to NativeFile */;
+var3 = file_NativeFile_NativeFile_io_close_0(var4);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
 }
 var_i = var1;
-var2 = 0;
-self->attrs[COLOR_file__OFStream___writable].s = var2; /* _writable on <self:OFStream> */
+var5 = 0;
+self->attrs[COLOR_file__OFStream___writable].s = var5; /* _writable on <self:OFStream> */
 RET_LABEL:;
 }
 /* method file#OFStream#close for (self: Object) */
 void VIRTUAL_file__OFStream__close(val* self) {
-file__OFStream__close(self);
+file__OFStream__close(self); /* Direct call file#OFStream#close on <self:Object(OFStream)>*/
 RET_LABEL:;
 }
 /* method file#OFStream#write_native for (self: OFStream, NativeString, Int) */
@@ -509,287 +540,446 @@ long var_len /* var len: Int */;
 short int var /* : Bool */;
 val* var1 /* : nullable NativeFile */;
 long var2 /* : Int */;
+long var4 /* : Int */;
+void* var5 /* : NativeFile */;
 long var_err /* var err: Int */;
-short int var3 /* : Bool */;
-short int var5 /* : Bool */;
 short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+short int var10 /* : Bool */;
 static val* varonce;
-val* var7 /* : String */;
-char* var8 /* : NativeString */;
-long var9 /* : Int */;
-val* var10 /* : String */;
-static val* varonce11;
-val* var12 /* : String */;
-char* var13 /* : NativeString */;
-long var14 /* : Int */;
-val* var15 /* : String */;
-static val* varonce16;
-val* var17 /* : String */;
-char* var18 /* : NativeString */;
-long var19 /* : Int */;
-val* var20 /* : String */;
-val* var21 /* : Array[Object] */;
-long var22 /* : Int */;
-val* var23 /* : NativeArray[Object] */;
-val* var24 /* : Object */;
-val* var25 /* : Object */;
+val* var11 /* : String */;
+char* var12 /* : NativeString */;
+long var13 /* : Int */;
+val* var14 /* : FlatString */;
+static val* varonce15;
+val* var16 /* : String */;
+char* var17 /* : NativeString */;
+long var18 /* : Int */;
+val* var19 /* : FlatString */;
+static val* varonce20;
+val* var21 /* : String */;
+char* var22 /* : NativeString */;
+long var23 /* : Int */;
+val* var24 /* : FlatString */;
+val* var25 /* : Array[Object] */;
+long var26 /* : Int */;
+val* var27 /* : NativeArray[Object] */;
+val* var28 /* : Object */;
+val* var29 /* : Object */;
 var_native = p0;
 var_len = p1;
 var = self->attrs[COLOR_file__OFStream___writable].s; /* _writable on <self:OFStream> */
-if (!var) {
-fprintf(stderr, "Runtime error: %s", "Assert failed");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 152);
+if (unlikely(!var)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 125);
 show_backtrace(1);
 }
 var1 = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:OFStream> */
 if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 153);
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 126);
 show_backtrace(1);
 } else {
-var2 = ((long (*)(val*, char*, long))(var1->class->vft[COLOR_file__NativeFile__io_write]))(var1, var_native, var_len) /* io_write on <var1:nullable NativeFile>*/;
+{ /* Inline file#NativeFile#io_write (var1,var_native,var_len) on <var1:nullable NativeFile> */
+var5 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from nullable NativeFile to NativeFile */;
+var4 = file_NativeFile_NativeFile_io_write_2(var5, var_native, var_len);
+var2 = var4;
+goto RET_LABEL3;
+RET_LABEL3:(void)0;
+}
 }
 var_err = var2;
-{ /* Inline kernel#Int#!= (var_err,var_len) */
-var5 = var_err == var_len;
-var6 = !var5;
-var3 = var6;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
+{
+{ /* Inline kernel#Int#!= (var_err,var_len) on <var_err:Int> */
+var9 = var_err == var_len;
+var10 = !var9;
+var7 = var10;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+var6 = var7;
 }
-if (var3){
+if (var6){
 if (varonce) {
-var7 = varonce;
+var11 = varonce;
 } else {
-var8 = "Problem in writing : ";
-var9 = 21;
-var10 = string__NativeString__to_s_with_length(var8, var9);
-var7 = var10;
-varonce = var7;
+var12 = "Problem in writing : ";
+var13 = 21;
+var14 = string__NativeString__to_s_with_length(var12, var13);
+var11 = var14;
+varonce = var11;
 }
-if (varonce11) {
-var12 = varonce11;
+if (varonce15) {
+var16 = varonce15;
 } else {
-var13 = " ";
-var14 = 1;
-var15 = string__NativeString__to_s_with_length(var13, var14);
-var12 = var15;
-varonce11 = var12;
-}
-if (varonce16) {
-var17 = varonce16;
+var17 = " ";
+var18 = 1;
+var19 = string__NativeString__to_s_with_length(var17, var18);
+var16 = var19;
+varonce15 = var16;
+}
+if (varonce20) {
+var21 = varonce20;
 } else {
-var18 = "\n";
-var19 = 1;
-var20 = string__NativeString__to_s_with_length(var18, var19);
-var17 = var20;
-varonce16 = var17;
-}
-var21 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var21 = array_instance Array[Object] */
-var22 = 5;
-var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var23)->values[0] = (val*) var7;
-var24 = BOX_kernel__Int(var_err); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var23)->values[1] = (val*) var24;
-((struct instance_array__NativeArray*)var23)->values[2] = (val*) var12;
-var25 = BOX_kernel__Int(var_len); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var23)->values[3] = (val*) var25;
-((struct instance_array__NativeArray*)var23)->values[4] = (val*) var17;
-((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
-}
-((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__printn]))(self, var21) /* printn on <self:OFStream>*/;
+var22 = "\n";
+var23 = 1;
+var24 = string__NativeString__to_s_with_length(var22, var23);
+var21 = var24;
+varonce20 = var21;
+}
+var25 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var25 = array_instance Array[Object] */
+var26 = 5;
+var27 = NEW_array__NativeArray(var26, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var27)->values[0] = (val*) var11;
+var28 = BOX_kernel__Int(var_err); /* autobox from Int to Object */
+((struct instance_array__NativeArray*)var27)->values[1] = (val*) var28;
+((struct instance_array__NativeArray*)var27)->values[2] = (val*) var16;
+var29 = BOX_kernel__Int(var_len); /* autobox from Int to Object */
+((struct instance_array__NativeArray*)var27)->values[3] = (val*) var29;
+((struct instance_array__NativeArray*)var27)->values[4] = (val*) var21;
+{
+((void (*)(val*, val*, long))(var25->class->vft[COLOR_array__Array__with_native]))(var25, var27, var26) /* with_native on <var25:Array[Object]>*/;
+}
+}
+{
+file__Object__printn(self, var25); /* Direct call file#Object#printn on <self:OFStream>*/
+}
 } else {
 }
 RET_LABEL:;
 }
 /* method file#OFStream#write_native for (self: Object, NativeString, Int) */
 void VIRTUAL_file__OFStream__write_native(val* self, char* p0, long p1) {
-file__OFStream__write_native(self, p0, p1);
+file__OFStream__write_native(self, p0, p1); /* Direct call file#OFStream#write_native on <self:Object(OFStream)>*/
 RET_LABEL:;
 }
 /* method file#OFStream#open for (self: OFStream, String) */
 void file__OFStream__open(val* self, val* p0) {
 val* var_path /* var path: String */;
 void* var /* : NativeFile */;
-char* var1 /* : NativeString */;
-void* var2 /* : NativeFile */;
-val* var3 /* : nullable NativeFile */;
-val* var4 /* : nullable NativeFile */;
-val* var5 /* : null */;
-short int var6 /* : Bool */;
-short int var7 /* : Bool */;
+char* var2 /* : NativeString */;
+void* var3 /* : NativeFile */;
+void* var5 /* : NativeFile */;
+val* var6 /* : nullable NativeFile */;
+val* var7 /* : nullable NativeFile */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
+void* var11 /* : Pointer */;
+short int var12 /* : Bool */;
+static val* varonce;
+val* var13 /* : String */;
+char* var14 /* : NativeString */;
+long var15 /* : Int */;
+val* var16 /* : FlatString */;
+static val* varonce17;
+val* var18 /* : String */;
+char* var19 /* : NativeString */;
+long var20 /* : Int */;
+val* var21 /* : FlatString */;
+val* var22 /* : Sys */;
+val* var24 /* : Sys */;
+long var25 /* : Int */;
+long var27 /* : Int */;
+val* var28 /* : String */;
+static val* varonce29;
+val* var30 /* : String */;
+char* var31 /* : NativeString */;
+long var32 /* : Int */;
+val* var33 /* : FlatString */;
+val* var34 /* : Array[Object] */;
+long var35 /* : Int */;
+val* var36 /* : NativeArray[Object] */;
+val* var37 /* : String */;
+short int var39 /* : Bool */;
+{
+{ /* Inline file#FStream#init (self) on <self:OFStream> */
+RET_LABEL1:(void)0;
+}
+}
 var_path = p0;
-((void (*)(val*))(self->class->vft[COLOR_file__FStream__init]))(self) /* init on <self:OFStream>*/;
 var = NULL/*special!*/;
-var1 = ((char* (*)(val*))(var_path->class->vft[COLOR_string__String__to_cstring]))(var_path) /* to_cstring on <var_path:String>*/;
-var2 = file__NativeFile__io_open_write(var, var1);
-var3 = BOX_file__NativeFile(var2); /* autobox from NativeFile to nullable NativeFile */
-self->attrs[COLOR_file__FStream___file].val = var3; /* _file on <self:OFStream> */
-var4 = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:OFStream> */
-var5 = NULL;
-if (var4 == NULL) {
-var6 = 0; /* is null */
+{
+var2 = string__FlatString__to_cstring(var_path);
+}
+{
+{ /* Inline file#NativeFile#io_open_write (var,var2) on <var:NativeFile> */
+var5 = file_NativeFileCapable_NativeFileCapable_io_open_write_1(var2);
+var3 = var5;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
+}
+}
+var6 = BOX_file__NativeFile(var3); /* autobox from NativeFile to nullable NativeFile */
+self->attrs[COLOR_file__FStream___file].val = var6; /* _file on <self:OFStream> */
+var7 = self->attrs[COLOR_file__FStream___file].val; /* _file on <self:OFStream> */
+if (var7 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 137);
+show_backtrace(1);
+} else {
+{ /* Inline kernel#Pointer#address_is_null (var7) on <var7:nullable NativeFile> */
+var11 = ((struct instance_kernel__Pointer*)var7)->value; /* autounbox from nullable NativeFile to Pointer */;
+var10 = address_is_null(var11);
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
+}
+}
+var12 = !var8;
+if (unlikely(!var12)) {
+if (varonce) {
+var13 = varonce;
+} else {
+var14 = "Error: Opening file at \'";
+var15 = 24;
+var16 = string__NativeString__to_s_with_length(var14, var15);
+var13 = var16;
+varonce = var13;
+}
+if (varonce17) {
+var18 = varonce17;
 } else {
-var6 = 1; /* arg is null and recv is not */
+var19 = "\' failed with \'";
+var20 = 15;
+var21 = string__NativeString__to_s_with_length(var19, var20);
+var18 = var21;
+varonce17 = var18;
+}
+{
+{ /* Inline kernel#Object#sys (self) on <self:OFStream> */
+var24 = glob_sys;
+var22 = var24;
+goto RET_LABEL23;
+RET_LABEL23:(void)0;
+}
+}
+{
+{ /* Inline kernel#Sys#errno (var22) on <var22:Sys> */
+struct nitni_instance* var_for_c_0;
+var_for_c_0 = nit_alloc(sizeof(struct nitni_instance));
+var_for_c_0->value = var22;
+var27 = kernel___Sys_errno___impl(var_for_c_0);
+var25 = var27;
+goto RET_LABEL26;
+RET_LABEL26:(void)0;
+}
 }
-if (!var6) {
-fprintf(stderr, "Runtime error: %s", "Assert \'cant_open_file\' failed");
-fprintf(stderr, " (%s:%d)\n", "lib/standard/file.nit", 164);
+{
+var28 = string__Int__strerror(var25);
+}
+if (varonce29) {
+var30 = varonce29;
+} else {
+var31 = "\'";
+var32 = 1;
+var33 = string__NativeString__to_s_with_length(var31, var32);
+var30 = var33;
+varonce29 = var30;
+}
+var34 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var34 = array_instance Array[Object] */
+var35 = 5;
+var36 = NEW_array__NativeArray(var35, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var36)->values[0] = (val*) var13;
+((struct instance_array__NativeArray*)var36)->values[1] = (val*) var_path;
+((struct instance_array__NativeArray*)var36)->values[2] = (val*) var18;
+((struct instance_array__NativeArray*)var36)->values[3] = (val*) var28;
+((struct instance_array__NativeArray*)var36)->values[4] = (val*) var30;
+{
+((void (*)(val*, val*, long))(var34->class->vft[COLOR_array__Array__with_native]))(var34, var36, var35) /* with_native on <var34:Array[Object]>*/;
+}
+}
+{
+var37 = ((val* (*)(val*))(var34->class->vft[COLOR_string__Object__to_s]))(var34) /* to_s on <var34:Array[Object]>*/;
+}
+{
+file__Object__print(self, var37); /* Direct call file#Object#print on <self:OFStream>*/
+}
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 137);
 show_backtrace(1);
 }
+{
+{ /* Inline file#FStream#path= (self,var_path) on <self:OFStream> */
 self->attrs[COLOR_file__FStream___path].val = var_path; /* _path on <self:OFStream> */
-var7 = 1;
-self->attrs[COLOR_file__OFStream___writable].s = var7; /* _writable on <self:OFStream> */
+RET_LABEL38:(void)0;
+}
+}
+var39 = 1;
+self->attrs[COLOR_file__OFStream___writable].s = var39; /* _writable on <self:OFStream> */
 RET_LABEL:;
 }
 /* method file#OFStream#open for (self: Object, String) */
 void VIRTUAL_file__OFStream__open(val* self, val* p0) {
-file__OFStream__open(self, p0);
+file__OFStream__open(self, p0); /* Direct call file#OFStream#open on <self:Object(OFStream)>*/
 RET_LABEL:;
 }
 /* method file#OFStream#init for (self: OFStream) */
 void file__OFStream__init(val* self) {
-((void (*)(val*))(self->class->vft[COLOR_file__FStream__init]))(self) /* init on <self:OFStream>*/;
-RET_LABEL:;
+{
+{ /* Inline file#FStream#init (self) on <self:OFStream> */
+RET_LABEL1:(void)0;
 }
-/* method file#OFStream#init for (self: Object) */
-void VIRTUAL_file__OFStream__init(val* self) {
-file__OFStream__init(self);
-RET_LABEL:;
 }
-/* method file#OFStream#without_file for (self: OFStream) */
-void file__OFStream__without_file(val* self) {
-((void (*)(val*))(self->class->vft[COLOR_file__FStream__init]))(self) /* init on <self:OFStream>*/;
 RET_LABEL:;
 }
-/* method file#OFStream#without_file for (self: Object) */
-void VIRTUAL_file__OFStream__without_file(val* self) {
-file__OFStream__without_file(self);
+/* method file#OFStream#init for (self: Object) */
+void VIRTUAL_file__OFStream__init(val* self) {
+file__OFStream__init(self); /* Direct call file#OFStream#init on <self:Object(OFStream)>*/
 RET_LABEL:;
 }
 /* method file#Stdin#init for (self: Stdin) */
 void file__Stdin__init(val* self) {
 void* var /* : NativeFile */;
 void* var1 /* : NativeFile */;
-val* var2 /* : nullable NativeFile */;
+void* var3 /* : NativeFile */;
+val* var4 /* : nullable NativeFile */;
 static val* varonce;
-val* var3 /* : String */;
-char* var4 /* : NativeString */;
-long var5 /* : Int */;
-val* var6 /* : String */;
+val* var5 /* : String */;
+char* var6 /* : NativeString */;
 long var7 /* : Int */;
-((void (*)(val*))(self->class->vft[COLOR_file__IFStream__init]))(self) /* init on <self:Stdin>*/;
+val* var8 /* : FlatString */;
+long var10 /* : Int */;
+{
+file__IFStream__init(self); /* Direct call file#IFStream#init on <self:Stdin>*/
+}
 var = NULL/*special!*/;
-var1 = file__NativeFile__native_stdin(var);
-var2 = BOX_file__NativeFile(var1); /* autobox from NativeFile to nullable NativeFile */
-self->attrs[COLOR_file__FStream___file].val = var2; /* _file on <self:Stdin> */
+{
+{ /* Inline file#NativeFile#native_stdin (var) on <var:NativeFile> */
+var3 = file_NativeFileCapable_NativeFileCapable_native_stdin_0();
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+}
+var4 = BOX_file__NativeFile(var1); /* autobox from NativeFile to nullable NativeFile */
+self->attrs[COLOR_file__FStream___file].val = var4; /* _file on <self:Stdin> */
 if (varonce) {
-var3 = varonce;
+var5 = varonce;
 } else {
-var4 = "/dev/stdin";
-var5 = 10;
-var6 = string__NativeString__to_s_with_length(var4, var5);
-var3 = var6;
-varonce = var3;
+var6 = "/dev/stdin";
+var7 = 10;
+var8 = string__NativeString__to_s_with_length(var6, var7);
+var5 = var8;
+varonce = var5;
 }
-self->attrs[COLOR_file__FStream___path].val = var3; /* _path on <self:Stdin> */
-var7 = 1;
-((void (*)(val*, long))(self->class->vft[COLOR_stream__BufferedIStream__prepare_buffer]))(self, var7) /* prepare_buffer on <self:Stdin>*/;
-RET_LABEL:;
+{
+{ /* Inline file#FStream#path= (self,var5) on <self:Stdin> */
+self->attrs[COLOR_file__FStream___path].val = var5; /* _path on <self:Stdin> */
+RET_LABEL9:(void)0;
 }
-/* method file#Stdin#init for (self: Object) */
-void VIRTUAL_file__Stdin__init(val* self) {
-file__Stdin__init(self);
-RET_LABEL:;
 }
-/* method file#Stdin#poll_in for (self: Stdin): Bool */
-short int file__Stdin__poll_in(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = file_stdin_poll_in(self);
-var = var1;
-goto RET_LABEL;
+var10 = 1;
+{
+stream__BufferedIStream__prepare_buffer(self, var10); /* Direct call stream#BufferedIStream#prepare_buffer on <self:Stdin>*/
+}
 RET_LABEL:;
-return var;
 }
-/* method file#Stdin#poll_in for (self: Object): Bool */
-short int VIRTUAL_file__Stdin__poll_in(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = file__Stdin__poll_in(self);
-var = var1;
+/* method file#Stdin#init for (self: Object) */
+void VIRTUAL_file__Stdin__init(val* self) {
+file__Stdin__init(self); /* Direct call file#Stdin#init on <self:Object(Stdin)>*/
 RET_LABEL:;
-return var;
 }
 /* method file#Stdout#init for (self: Stdout) */
 void file__Stdout__init(val* self) {
 void* var /* : NativeFile */;
 void* var1 /* : NativeFile */;
-val* var2 /* : nullable NativeFile */;
+void* var3 /* : NativeFile */;
+val* var4 /* : nullable NativeFile */;
 static val* varonce;
-val* var3 /* : String */;
-char* var4 /* : NativeString */;
-long var5 /* : Int */;
-val* var6 /* : String */;
-short int var7 /* : Bool */;
-((void (*)(val*))(self->class->vft[COLOR_file__OFStream__init]))(self) /* init on <self:Stdout>*/;
+val* var5 /* : String */;
+char* var6 /* : NativeString */;
+long var7 /* : Int */;
+val* var8 /* : FlatString */;
+short int var10 /* : Bool */;
+{
+file__OFStream__init(self); /* Direct call file#OFStream#init on <self:Stdout>*/
+}
 var = NULL/*special!*/;
-var1 = file__NativeFile__native_stdout(var);
-var2 = BOX_file__NativeFile(var1); /* autobox from NativeFile to nullable NativeFile */
-self->attrs[COLOR_file__FStream___file].val = var2; /* _file on <self:Stdout> */
+{
+{ /* Inline file#NativeFile#native_stdout (var) on <var:NativeFile> */
+var3 = file_NativeFileCapable_NativeFileCapable_native_stdout_0();
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+}
+var4 = BOX_file__NativeFile(var1); /* autobox from NativeFile to nullable NativeFile */
+self->attrs[COLOR_file__FStream___file].val = var4; /* _file on <self:Stdout> */
 if (varonce) {
-var3 = varonce;
+var5 = varonce;
 } else {
-var4 = "/dev/stdout";
-var5 = 11;
-var6 = string__NativeString__to_s_with_length(var4, var5);
-var3 = var6;
-varonce = var3;
+var6 = "/dev/stdout";
+var7 = 11;
+var8 = string__NativeString__to_s_with_length(var6, var7);
+var5 = var8;
+varonce = var5;
+}
+{
+{ /* Inline file#FStream#path= (self,var5) on <self:Stdout> */
+self->attrs[COLOR_file__FStream___path].val = var5; /* _path on <self:Stdout> */
+RET_LABEL9:(void)0;
 }
-self->attrs[COLOR_file__FStream___path].val = var3; /* _path on <self:Stdout> */
-var7 = 1;
-self->attrs[COLOR_file__OFStream___writable].s = var7; /* _writable on <self:Stdout> */
+}
+var10 = 1;
+self->attrs[COLOR_file__OFStream___writable].s = var10; /* _writable on <self:Stdout> */
 RET_LABEL:;
 }
 /* method file#Stdout#init for (self: Object) */
 void VIRTUAL_file__Stdout__init(val* self) {
-file__Stdout__init(self);
+file__Stdout__init(self); /* Direct call file#Stdout#init on <self:Object(Stdout)>*/
 RET_LABEL:;
 }
 /* method file#Stderr#init for (self: Stderr) */
 void file__Stderr__init(val* self) {
 void* var /* : NativeFile */;
 void* var1 /* : NativeFile */;
-val* var2 /* : nullable NativeFile */;
+void* var3 /* : NativeFile */;
+val* var4 /* : nullable NativeFile */;
 static val* varonce;
-val* var3 /* : String */;
-char* var4 /* : NativeString */;
-long var5 /* : Int */;
-val* var6 /* : String */;
-short int var7 /* : Bool */;
-((void (*)(val*))(self->class->vft[COLOR_file__OFStream__init]))(self) /* init on <self:Stderr>*/;
+val* var5 /* : String */;
+char* var6 /* : NativeString */;
+long var7 /* : Int */;
+val* var8 /* : FlatString */;
+short int var10 /* : Bool */;
+{
+file__OFStream__init(self); /* Direct call file#OFStream#init on <self:Stderr>*/
+}
 var = NULL/*special!*/;
-var1 = file__NativeFile__native_stderr(var);
-var2 = BOX_file__NativeFile(var1); /* autobox from NativeFile to nullable NativeFile */
-self->attrs[COLOR_file__FStream___file].val = var2; /* _file on <self:Stderr> */
+{
+{ /* Inline file#NativeFile#native_stderr (var) on <var:NativeFile> */
+var3 = file_NativeFileCapable_NativeFileCapable_native_stderr_0();
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+}
+var4 = BOX_file__NativeFile(var1); /* autobox from NativeFile to nullable NativeFile */
+self->attrs[COLOR_file__FStream___file].val = var4; /* _file on <self:Stderr> */
 if (varonce) {
-var3 = varonce;
+var5 = varonce;
 } else {
-var4 = "/dev/stderr";
-var5 = 11;
-var6 = string__NativeString__to_s_with_length(var4, var5);
-var3 = var6;
-varonce = var3;
+var6 = "/dev/stderr";
+var7 = 11;
+var8 = string__NativeString__to_s_with_length(var6, var7);
+var5 = var8;
+varonce = var5;
+}
+{
+{ /* Inline file#FStream#path= (self,var5) on <self:Stderr> */
+self->attrs[COLOR_file__FStream___path].val = var5; /* _path on <self:Stderr> */
+RET_LABEL9:(void)0;
 }
-self->attrs[COLOR_file__FStream___path].val = var3; /* _path on <self:Stderr> */
-var7 = 1;
-self->attrs[COLOR_file__OFStream___writable].s = var7; /* _writable on <self:Stderr> */
+}
+var10 = 1;
+self->attrs[COLOR_file__OFStream___writable].s = var10; /* _writable on <self:Stderr> */
 RET_LABEL:;
 }
 /* method file#Stderr#init for (self: Object) */
 void VIRTUAL_file__Stderr__init(val* self) {
-file__Stderr__init(self);
+file__Stderr__init(self); /* Direct call file#Stderr#init on <self:Object(Stderr)>*/
 RET_LABEL:;
 }
 /* method file#String#file_exists for (self: String): Bool */
@@ -797,81 +987,28 @@ short int file__String__file_exists(val* self) {
 short int var /* : Bool */;
 char* var1 /* : NativeString */;
 short int var2 /* : Bool */;
-var1 = ((char* (*)(val*))(self->class->vft[COLOR_string__String__to_cstring]))(self) /* to_cstring on <self:String>*/;
-var2 = file__NativeString__file_exists(var1);
-var = var2;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#String#file_exists for (self: Object): Bool */
-short int VIRTUAL_file__String__file_exists(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = file__String__file_exists(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#String#file_stat for (self: String): FileStat */
-void* file__String__file_stat(val* self) {
-void* var /* : FileStat */;
-char* var1 /* : NativeString */;
-void* var2 /* : FileStat */;
-var1 = ((char* (*)(val*))(self->class->vft[COLOR_string__String__to_cstring]))(self) /* to_cstring on <self:String>*/;
-var2 = file__NativeString__file_stat(var1);
-var = var2;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#String#file_stat for (self: Object): FileStat */
-void* VIRTUAL_file__String__file_stat(val* self) {
-void* var /* : FileStat */;
-void* var1 /* : FileStat */;
-var1 = file__String__file_stat(self);
-var = var1;
-RET_LABEL:;
-return var;
+short int var4 /* : Bool */;
+{
+var1 = string__FlatString__to_cstring(self);
 }
-/* method file#String#file_lstat for (self: String): FileStat */
-void* file__String__file_lstat(val* self) {
-void* var /* : FileStat */;
-char* var1 /* : NativeString */;
-void* var2 /* : FileStat */;
-var1 = ((char* (*)(val*))(self->class->vft[COLOR_string__String__to_cstring]))(self) /* to_cstring on <self:String>*/;
-var2 = file__NativeString__file_lstat(var1);
-var = var2;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+{ /* Inline file#NativeString#file_exists (var1) on <var1:NativeString> */
+var4 = string_NativeString_NativeString_file_exists_0(var1);
+var2 = var4;
+goto RET_LABEL3;
+RET_LABEL3:(void)0;
 }
-/* method file#String#file_lstat for (self: Object): FileStat */
-void* VIRTUAL_file__String__file_lstat(val* self) {
-void* var /* : FileStat */;
-void* var1 /* : FileStat */;
-var1 = file__String__file_lstat(self);
-var = var1;
-RET_LABEL:;
-return var;
 }
-/* method file#String#file_delete for (self: String): Bool */
-short int file__String__file_delete(val* self) {
-short int var /* : Bool */;
-char* var1 /* : NativeString */;
-short int var2 /* : Bool */;
-var1 = ((char* (*)(val*))(self->class->vft[COLOR_string__String__to_cstring]))(self) /* to_cstring on <self:String>*/;
-var2 = file__NativeString__file_delete(var1);
 var = var2;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method file#String#file_delete for (self: Object): Bool */
-short int VIRTUAL_file__String__file_delete(val* self) {
+/* method file#String#file_exists for (self: Object): Bool */
+short int VIRTUAL_file__String__file_exists(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = file__String__file_delete(self);
+var1 = file__String__file_exists(self);
 var = var1;
 RET_LABEL:;
 return var;
@@ -890,29 +1027,43 @@ val* var5 /* : String */;
 val* var_buffer /* var buffer: String */;
 var_dest = p0;
 var = NEW_file__IFStream(&type_file__IFStream);
-((void (*)(val*, val*))(var->class->vft[COLOR_file__IFStream__open]))(var, self) /* open on <var:IFStream>*/;
+{
+file__IFStream__open(var, self); /* Direct call file#IFStream#open on <var:IFStream>*/
+}
 var_input = var;
 var1 = NEW_file__OFStream(&type_file__OFStream);
-((void (*)(val*, val*))(var1->class->vft[COLOR_file__OFStream__open]))(var1, var_dest) /* open on <var1:OFStream>*/;
+{
+file__OFStream__open(var1, var_dest); /* Direct call file#OFStream#open on <var1:OFStream>*/
+}
 var_output = var1;
 for(;;) {
-var2 = ((short int (*)(val*))(var_input->class->vft[COLOR_stream__IStream__eof]))(var_input) /* eof on <var_input:IFStream>*/;
+{
+var2 = stream__BufferedIStream__eof(var_input);
+}
 var3 = !var2;
 if (!var3) break;
 var4 = 1024;
-var5 = ((val* (*)(val*, long))(var_input->class->vft[COLOR_stream__IStream__read]))(var_input, var4) /* read on <var_input:IFStream>*/;
+{
+var5 = stream__BufferedIStream__read(var_input, var4);
+}
 var_buffer = var5;
-((void (*)(val*, val*))(var_output->class->vft[COLOR_stream__OStream__write]))(var_output, var_buffer) /* write on <var_output:OFStream>*/;
+{
+file__OFStream__write(var_output, var_buffer); /* Direct call file#OFStream#write on <var_output:OFStream>*/
+}
 CONTINUE_label: (void)0;
 }
 BREAK_label: (void)0;
-((void (*)(val*))(var_input->class->vft[COLOR_stream__IOS__close]))(var_input) /* close on <var_input:IFStream>*/;
-((void (*)(val*))(var_output->class->vft[COLOR_stream__IOS__close]))(var_output) /* close on <var_output:OFStream>*/;
+{
+file__IFStream__close(var_input); /* Direct call file#IFStream#close on <var_input:IFStream>*/
+}
+{
+file__OFStream__close(var_output); /* Direct call file#OFStream#close on <var_output:OFStream>*/
+}
 RET_LABEL:;
 }
 /* method file#String#file_copy_to for (self: Object, String) */
 void VIRTUAL_file__String__file_copy_to(val* self, val* p0) {
-file__String__file_copy_to(self, p0);
+file__String__file_copy_to(self, p0); /* Direct call file#String#file_copy_to on <self:Object(String)>*/
 RET_LABEL:;
 }
 /* method file#String#strip_extension for (self: String, String): String */
@@ -922,24 +1073,57 @@ val* var_ext /* var ext: String */;
 short int var1 /* : Bool */;
 long var2 /* : Int */;
 long var3 /* : Int */;
-long var4 /* : Int */;
 long var5 /* : Int */;
-long var7 /* : Int */;
-val* var8 /* : String */;
+long var6 /* : Int */;
+long var8 /* : Int */;
+long var9 /* : Int */;
+short int var11 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+long var12 /* : Int */;
+val* var13 /* : String */;
 var_ext = p0;
-var1 = ((short int (*)(val*, val*))(self->class->vft[COLOR_string__AbstractString__has_suffix]))(self, var_ext) /* has_suffix on <self:String>*/;
+{
+var1 = string__Text__has_suffix(self, var_ext);
+}
 if (var1){
 var2 = 0;
-var3 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:String>*/;
-var4 = ((long (*)(val*))(var_ext->class->vft[COLOR_abstract_collection__Collection__length]))(var_ext) /* length on <var_ext:String>*/;
-{ /* Inline kernel#Int#- (var3,var4) */
-var7 = var3 - var4;
-var5 = var7;
-goto RET_LABEL6;
-RET_LABEL6:(void)0;
+{
+{ /* Inline string#FlatText#length (self) on <self:String> */
+var5 = self->attrs[COLOR_string__FlatText___length].l; /* _length on <self:String> */
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+{ /* Inline string#FlatText#length (var_ext) on <var_ext:String> */
+var8 = var_ext->attrs[COLOR_string__FlatText___length].l; /* _length on <var_ext:String> */
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+{ /* Inline kernel#Int#- (var3,var6) on <var3:Int> */
+/* Covariant cast for argument 0 (i) <var6:Int> isa OTHER */
+/* <var6:Int> isa OTHER */
+var11 = 1; /* easy <var6:Int> isa OTHER*/
+if (unlikely(!var11)) {
+var_class_name = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
+show_backtrace(1);
+}
+var12 = var3 - var6;
+var9 = var12;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
+}
+}
+{
+var13 = string__FlatString__substring(self, var2, var9);
 }
-var8 = ((val* (*)(val*, long, long))(self->class->vft[COLOR_string__AbstractString__substring]))(self, var2, var5) /* substring on <self:String>*/;
-var = var8;
+var = var13;
 goto RET_LABEL;
 } else {
 }
@@ -961,71 +1145,289 @@ return var;
 val* file__String__basename(val* self, val* p0) {
 val* var /* : String */;
 val* var_ext /* var ext: String */;
-char var1 /* : Char */;
-long var2 /* : Int */;
+long var1 /* : Int */;
 long var3 /* : Int */;
 long var4 /* : Int */;
-long var6 /* : Int */;
-long var7 /* : Int */;
-val* var8 /* : nullable Object */;
-long var_pos /* var pos: Int */;
-val* var_n /* var n: String */;
-long var9 /* : Int */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
+long var5 /* : Int */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
+long var8 /* : Int */;
+long var_l /* var l: Int */;
+short int var9 /* : Bool */;
+long var10 /* : Int */;
+short int var11 /* : Bool */;
 short int var13 /* : Bool */;
-long var14 /* : Int */;
-long var15 /* : Int */;
-long var17 /* : Int */;
-val* var18 /* : String */;
-val* var19 /* : String */;
+int cltype14;
+int idtype15;
+const char* var_class_name16;
+short int var17 /* : Bool */;
+short int var_ /* var : Bool */;
+val* var18 /* : SequenceRead[Char] */;
+val* var20 /* : SequenceRead[Char] */;
+val* var21 /* : nullable Object */;
+char var22 /* : Char */;
+short int var23 /* : Bool */;
+short int var24 /* : Bool */;
+short int var26 /* : Bool */;
+char var27 /* : Char */;
+long var28 /* : Int */;
+long var29 /* : Int */;
+short int var31 /* : Bool */;
+int cltype32;
+int idtype33;
+const char* var_class_name34;
+long var35 /* : Int */;
+long var36 /* : Int */;
+short int var37 /* : Bool */;
+short int var38 /* : Bool */;
+short int var40 /* : Bool */;
+static val* varonce;
+val* var41 /* : String */;
+char* var42 /* : NativeString */;
+long var43 /* : Int */;
+val* var44 /* : FlatString */;
+val* var45 /* : SequenceRead[Char] */;
+val* var47 /* : SequenceRead[Char] */;
+char var48 /* : Char */;
+long var49 /* : Int */;
+val* var50 /* : nullable Object */;
+long var_pos /* var pos: Int */;
+val* var_n /* var n: String */;
+long var51 /* : Int */;
+short int var52 /* : Bool */;
+short int var54 /* : Bool */;
+int cltype55;
+int idtype56;
+const char* var_class_name57;
+short int var58 /* : Bool */;
+long var59 /* : Int */;
+long var60 /* : Int */;
+short int var62 /* : Bool */;
+int cltype63;
+int idtype64;
+const char* var_class_name65;
+long var66 /* : Int */;
+long var67 /* : Int */;
+short int var69 /* : Bool */;
+int cltype70;
+int idtype71;
+const char* var_class_name72;
+long var73 /* : Int */;
+val* var74 /* : String */;
+val* var75 /* : String */;
 var_ext = p0;
-var1 = '/';
-var2 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <self:String> */
-var3 = 1;
-{ /* Inline kernel#Int#- (var2,var3) */
-var6 = var2 - var3;
-var4 = var6;
-goto RET_LABEL5;
-RET_LABEL5:(void)0;
-}
-var8 = BOX_kernel__Char(var1); /* autobox from Char to nullable Object */
-var7 = ((long (*)(val*, val*, long))(self->class->vft[COLOR_array__AbstractArrayRead__last_index_of_from]))(self, var8, var4) /* last_index_of_from on <self:String>*/;
-var_pos = var7;
-var_n = self;
-var9 = 0;
-{ /* Inline kernel#Int#>= (var_pos,var9) */
-/* Covariant cast for argument 0 (i) <var9:Int> isa OTHER */
-/* <var9:Int> isa OTHER */
-var12 = 1; /* easy <var9:Int> isa OTHER*/
-if (!var12) {
+{
+{ /* Inline string#FlatText#length (self) on <self:String> */
+var3 = self->attrs[COLOR_string__FlatText___length].l; /* _length on <self:String> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+var4 = 1;
+{
+{ /* Inline kernel#Int#- (var1,var4) on <var1:Int> */
+/* Covariant cast for argument 0 (i) <var4:Int> isa OTHER */
+/* <var4:Int> isa OTHER */
+var7 = 1; /* easy <var4:Int> isa OTHER*/
+if (unlikely(!var7)) {
 var_class_name = type_kernel__Int.name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 266);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
 show_backtrace(1);
 }
-var13 = var_pos >= var9;
-var10 = var13;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+var8 = var1 - var4;
+var5 = var8;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+}
+var_l = var5;
+for(;;) {
+var10 = 0;
+{
+{ /* Inline kernel#Int#> (var_l,var10) on <var_l:Int> */
+/* Covariant cast for argument 0 (i) <var10:Int> isa OTHER */
+/* <var10:Int> isa OTHER */
+var13 = 1; /* easy <var10:Int> isa OTHER*/
+if (unlikely(!var13)) {
+var_class_name16 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 327);
+show_backtrace(1);
+}
+var17 = var_l > var10;
+var11 = var17;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
+}
+}
+var_ = var11;
+if (var11){
+{
+{ /* Inline string#FlatString#chars (self) on <self:String> */
+var20 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
+if (unlikely(var20 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/string.nit", 746);
+show_backtrace(1);
+}
+var18 = var20;
+RET_LABEL19:(void)0;
+}
+}
+{
+var21 = ((val* (*)(val*, long))(var18->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var18, var_l) /* [] on <var18:SequenceRead[Char]>*/;
+}
+var22 = '/';
+{
+{ /* Inline kernel#Char#== (var21,var22) on <var21:nullable Object(Char)> */
+var26 = (var21 != NULL) && (var21->class == &class_kernel__Char);
+if (var26) {
+var27 = ((struct instance_kernel__Char*)var21)->value; /* autounbox from nullable Object to Char */;
+var26 = (var27 == var22);
+}
+var24 = var26;
+goto RET_LABEL25;
+RET_LABEL25:(void)0;
+}
+var23 = var24;
+}
+var9 = var23;
+} else {
+var9 = var_;
+}
+if (!var9) break;
+var28 = 1;
+{
+{ /* Inline kernel#Int#- (var_l,var28) on <var_l:Int> */
+/* Covariant cast for argument 0 (i) <var28:Int> isa OTHER */
+/* <var28:Int> isa OTHER */
+var31 = 1; /* easy <var28:Int> isa OTHER*/
+if (unlikely(!var31)) {
+var_class_name34 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name34);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
+show_backtrace(1);
+}
+var35 = var_l - var28;
+var29 = var35;
+goto RET_LABEL30;
+RET_LABEL30:(void)0;
+}
+}
+var_l = var29;
+CONTINUE_label: (void)0;
+}
+BREAK_label: (void)0;
+var36 = 0;
+{
+{ /* Inline kernel#Int#== (var_l,var36) on <var_l:Int> */
+var40 = var_l == var36;
+var38 = var40;
+goto RET_LABEL39;
+RET_LABEL39:(void)0;
+}
+var37 = var38;
+}
+if (var37){
+if (varonce) {
+var41 = varonce;
+} else {
+var42 = "/";
+var43 = 1;
+var44 = string__NativeString__to_s_with_length(var42, var43);
+var41 = var44;
+varonce = var41;
+}
+var = var41;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline string#FlatString#chars (self) on <self:String> */
+var47 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
+if (unlikely(var47 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/string.nit", 746);
+show_backtrace(1);
+}
+var45 = var47;
+RET_LABEL46:(void)0;
+}
 }
-if (var10){
-var14 = 1;
-{ /* Inline kernel#Int#+ (var_pos,var14) */
-var17 = var_pos + var14;
-var15 = var17;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
+var48 = '/';
+{
+var50 = BOX_kernel__Char(var48); /* autobox from Char to nullable Object */
+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]>*/;
 }
-var18 = ((val* (*)(val*, long))(self->class->vft[COLOR_string__AbstractString__substring_from]))(self, var15) /* substring_from on <self:String>*/;
-var_n = var18;
+var_pos = var49;
+var_n = self;
+var51 = 0;
+{
+{ /* Inline kernel#Int#>= (var_pos,var51) on <var_pos:Int> */
+/* Covariant cast for argument 0 (i) <var51:Int> isa OTHER */
+/* <var51:Int> isa OTHER */
+var54 = 1; /* easy <var51:Int> isa OTHER*/
+if (unlikely(!var54)) {
+var_class_name57 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name57);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 326);
+show_backtrace(1);
+}
+var58 = var_pos >= var51;
+var52 = var58;
+goto RET_LABEL53;
+RET_LABEL53:(void)0;
+}
+}
+if (var52){
+var59 = 1;
+{
+{ /* Inline kernel#Int#+ (var_pos,var59) on <var_pos:Int> */
+/* Covariant cast for argument 0 (i) <var59:Int> isa OTHER */
+/* <var59:Int> isa OTHER */
+var62 = 1; /* easy <var59:Int> isa OTHER*/
+if (unlikely(!var62)) {
+var_class_name65 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name65);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
+show_backtrace(1);
+}
+var66 = var_pos + var59;
+var60 = var66;
+goto RET_LABEL61;
+RET_LABEL61:(void)0;
+}
+}
+{
+{ /* Inline kernel#Int#- (var_l,var_pos) on <var_l:Int> */
+/* Covariant cast for argument 0 (i) <var_pos:Int> isa OTHER */
+/* <var_pos:Int> isa OTHER */
+var69 = 1; /* easy <var_pos:Int> isa OTHER*/
+if (unlikely(!var69)) {
+var_class_name72 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name72);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
+show_backtrace(1);
+}
+var73 = var_l - var_pos;
+var67 = var73;
+goto RET_LABEL68;
+RET_LABEL68:(void)0;
+}
+}
+{
+var74 = string__FlatString__substring(self, var60, var67);
+}
+var_n = var74;
 } else {
 }
-var19 = ((val* (*)(val*, val*))(var_n->class->vft[COLOR_file__String__strip_extension]))(var_n, var_ext) /* strip_extension on <var_n:String>*/;
-var = var19;
+{
+var75 = file__String__strip_extension(var_n, var_ext);
+}
+var = var75;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1043,165 +1445,248 @@ return var;
 val* file__String__dirname(val* self) {
 val* var /* : String */;
 long var1 /* : Int */;
-long var2 /* : Int */;
 long var3 /* : Int */;
+long var4 /* : Int */;
 long var5 /* : Int */;
-long var_l /* var l: Int */;
-short int var6 /* : Bool */;
-long var7 /* : Int */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
+long var8 /* : Int */;
+long var_l /* var l: Int */;
+short int var9 /* : Bool */;
+long var10 /* : Int */;
 short int var11 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var12 /* : StringCharView */;
-val* var13 /* : nullable Object */;
-char var14 /* : Char */;
-short int var15 /* : Bool */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+const char* var_class_name16;
 short int var17 /* : Bool */;
-char var18 /* : Char */;
-long var19 /* : Int */;
-long var20 /* : Int */;
-long var22 /* : Int */;
-char var23 /* : Char */;
-long var24 /* : Int */;
-val* var25 /* : nullable Object */;
+short int var_ /* var : Bool */;
+val* var18 /* : SequenceRead[Char] */;
+val* var20 /* : SequenceRead[Char] */;
+val* var21 /* : nullable Object */;
+char var22 /* : Char */;
+short int var23 /* : Bool */;
+short int var24 /* : Bool */;
+short int var26 /* : Bool */;
+char var27 /* : Char */;
+long var28 /* : Int */;
+long var29 /* : Int */;
+short int var31 /* : Bool */;
+int cltype32;
+int idtype33;
+const char* var_class_name34;
+long var35 /* : Int */;
+val* var36 /* : SequenceRead[Char] */;
+val* var38 /* : SequenceRead[Char] */;
+char var39 /* : Char */;
+long var40 /* : Int */;
+val* var41 /* : nullable Object */;
 long var_pos /* var pos: Int */;
-long var26 /* : Int */;
-short int var27 /* : Bool */;
-short int var29 /* : Bool */;
-int cltype30;
-int idtype31;
-const char* var_class_name32;
-short int var33 /* : Bool */;
-long var34 /* : Int */;
-val* var35 /* : String */;
-long var36 /* : Int */;
-short int var37 /* : Bool */;
-short int var39 /* : Bool */;
-static val* varonce;
-val* var40 /* : String */;
-char* var41 /* : NativeString */;
 long var42 /* : Int */;
-val* var43 /* : String */;
-static val* varonce44;
-val* var45 /* : String */;
-char* var46 /* : NativeString */;
-long var47 /* : Int */;
-val* var48 /* : String */;
-var1 = self->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <self:String> */
-var2 = 1;
-{ /* Inline kernel#Int#- (var1,var2) */
-var5 = var1 - var2;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
-}
-var_l = var3;
-var7 = 0;
-{ /* Inline kernel#Int#> (var_l,var7) */
-/* Covariant cast for argument 0 (i) <var7:Int> isa OTHER */
-/* <var7:Int> isa OTHER */
-var10 = 1; /* easy <var7:Int> isa OTHER*/
-if (!var10) {
+short int var43 /* : Bool */;
+short int var45 /* : Bool */;
+int cltype46;
+int idtype47;
+const char* var_class_name48;
+short int var49 /* : Bool */;
+long var50 /* : Int */;
+val* var51 /* : String */;
+long var52 /* : Int */;
+short int var53 /* : Bool */;
+short int var54 /* : Bool */;
+short int var56 /* : Bool */;
+static val* varonce;
+val* var57 /* : String */;
+char* var58 /* : NativeString */;
+long var59 /* : Int */;
+val* var60 /* : FlatString */;
+static val* varonce61;
+val* var62 /* : String */;
+char* var63 /* : NativeString */;
+long var64 /* : Int */;
+val* var65 /* : FlatString */;
+{
+{ /* Inline string#FlatText#length (self) on <self:String> */
+var3 = self->attrs[COLOR_string__FlatText___length].l; /* _length on <self:String> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+var4 = 1;
+{
+{ /* Inline kernel#Int#- (var1,var4) on <var1:Int> */
+/* Covariant cast for argument 0 (i) <var4:Int> isa OTHER */
+/* <var4:Int> isa OTHER */
+var7 = 1; /* easy <var4:Int> isa OTHER*/
+if (unlikely(!var7)) {
 var_class_name = type_kernel__Int.name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 267);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
 show_backtrace(1);
 }
-var11 = var_l > var7;
-var8 = var11;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+var8 = var1 - var4;
+var5 = var8;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
 }
-var_ = var8;
-if (var8){
-var12 = ((val* (*)(val*))(self->class->vft[COLOR_string__AbstractString__chars]))(self) /* chars on <self:String>*/;
-var13 = ((val* (*)(val*, long))(var12->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var12, var_l) /* [] on <var12:StringCharView>*/;
-var14 = '/';
-{ /* Inline kernel#Char#== (var13,var14) */
-var17 = (var13 != NULL) && (var13->class == &class_kernel__Char);
-if (var17) {
-var18 = ((struct instance_kernel__Char*)var13)->value; /* autounbox from nullable Object to Char */;
-var17 = (var18 == var14);
-}
-var15 = var17;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
-}
-var6 = var15;
-} else {
-var6 = var_;
 }
-if (var6){
-var19 = 1;
-{ /* Inline kernel#Int#- (var_l,var19) */
-var22 = var_l - var19;
-var20 = var22;
-goto RET_LABEL21;
-RET_LABEL21:(void)0;
+var_l = var5;
+for(;;) {
+var10 = 0;
+{
+{ /* Inline kernel#Int#> (var_l,var10) on <var_l:Int> */
+/* Covariant cast for argument 0 (i) <var10:Int> isa OTHER */
+/* <var10:Int> isa OTHER */
+var13 = 1; /* easy <var10:Int> isa OTHER*/
+if (unlikely(!var13)) {
+var_class_name16 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 327);
+show_backtrace(1);
+}
+var17 = var_l > var10;
+var11 = var17;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
+}
+}
+var_ = var11;
+if (var11){
+{
+{ /* Inline string#FlatString#chars (self) on <self:String> */
+var20 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
+if (unlikely(var20 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/string.nit", 746);
+show_backtrace(1);
+}
+var18 = var20;
+RET_LABEL19:(void)0;
+}
+}
+{
+var21 = ((val* (*)(val*, long))(var18->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var18, var_l) /* [] on <var18:SequenceRead[Char]>*/;
+}
+var22 = '/';
+{
+{ /* Inline kernel#Char#== (var21,var22) on <var21:nullable Object(Char)> */
+var26 = (var21 != NULL) && (var21->class == &class_kernel__Char);
+if (var26) {
+var27 = ((struct instance_kernel__Char*)var21)->value; /* autounbox from nullable Object to Char */;
+var26 = (var27 == var22);
+}
+var24 = var26;
+goto RET_LABEL25;
+RET_LABEL25:(void)0;
+}
+var23 = var24;
 }
-var_l = var20;
+var9 = var23;
 } else {
+var9 = var_;
+}
+if (!var9) break;
+var28 = 1;
+{
+{ /* Inline kernel#Int#- (var_l,var28) on <var_l:Int> */
+/* Covariant cast for argument 0 (i) <var28:Int> isa OTHER */
+/* <var28:Int> isa OTHER */
+var31 = 1; /* easy <var28:Int> isa OTHER*/
+if (unlikely(!var31)) {
+var_class_name34 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name34);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 331);
+show_backtrace(1);
+}
+var35 = var_l - var28;
+var29 = var35;
+goto RET_LABEL30;
+RET_LABEL30:(void)0;
+}
+}
+var_l = var29;
+CONTINUE_label: (void)0;
 }
-var23 = '/';
-var25 = BOX_kernel__Char(var23); /* autobox from Char to nullable Object */
-var24 = ((long (*)(val*, val*, long))(self->class->vft[COLOR_array__AbstractArrayRead__last_index_of_from]))(self, var25, var_l) /* last_index_of_from on <self:String>*/;
-var_pos = var24;
-var26 = 0;
-{ /* Inline kernel#Int#> (var_pos,var26) */
-/* Covariant cast for argument 0 (i) <var26:Int> isa OTHER */
-/* <var26:Int> isa OTHER */
-var29 = 1; /* easy <var26:Int> isa OTHER*/
-if (!var29) {
-var_class_name32 = type_kernel__Int.name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name32);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 267);
+BREAK_label: (void)0;
+{
+{ /* Inline string#FlatString#chars (self) on <self:String> */
+var38 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
+if (unlikely(var38 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/string.nit", 746);
 show_backtrace(1);
 }
-var33 = var_pos > var26;
-var27 = var33;
-goto RET_LABEL28;
-RET_LABEL28:(void)0;
+var36 = var38;
+RET_LABEL37:(void)0;
+}
+}
+var39 = '/';
+{
+var41 = BOX_kernel__Char(var39); /* autobox from Char to nullable Object */
+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]>*/;
+}
+var_pos = var40;
+var42 = 0;
+{
+{ /* Inline kernel#Int#> (var_pos,var42) on <var_pos:Int> */
+/* Covariant cast for argument 0 (i) <var42:Int> isa OTHER */
+/* <var42:Int> isa OTHER */
+var45 = 1; /* easy <var42:Int> isa OTHER*/
+if (unlikely(!var45)) {
+var_class_name48 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name48);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 327);
+show_backtrace(1);
 }
-if (var27){
-var34 = 0;
-var35 = ((val* (*)(val*, long, long))(self->class->vft[COLOR_string__AbstractString__substring]))(self, var34, var_pos) /* substring on <self:String>*/;
-var = var35;
+var49 = var_pos > var42;
+var43 = var49;
+goto RET_LABEL44;
+RET_LABEL44:(void)0;
+}
+}
+if (var43){
+var50 = 0;
+{
+var51 = string__FlatString__substring(self, var50, var_pos);
+}
+var = var51;
 goto RET_LABEL;
 } else {
-var36 = 0;
-{ /* Inline kernel#Int#== (var_pos,var36) */
-var39 = var_pos == var36;
-var37 = var39;
-goto RET_LABEL38;
-RET_LABEL38:(void)0;
+var52 = 0;
+{
+{ /* Inline kernel#Int#== (var_pos,var52) on <var_pos:Int> */
+var56 = var_pos == var52;
+var54 = var56;
+goto RET_LABEL55;
+RET_LABEL55:(void)0;
 }
-if (var37){
+var53 = var54;
+}
+if (var53){
 if (varonce) {
-var40 = varonce;
+var57 = varonce;
 } else {
-var41 = "/";
-var42 = 1;
-var43 = string__NativeString__to_s_with_length(var41, var42);
-var40 = var43;
-varonce = var40;
+var58 = "/";
+var59 = 1;
+var60 = string__NativeString__to_s_with_length(var58, var59);
+var57 = var60;
+varonce = var57;
 }
-var = var40;
+var = var57;
 goto RET_LABEL;
 } else {
-if (varonce44) {
-var45 = varonce44;
+if (varonce61) {
+var62 = varonce61;
 } else {
-var46 = ".";
-var47 = 1;
-var48 = string__NativeString__to_s_with_length(var46, var47);
-var45 = var48;
-varonce44 = var45;
+var63 = ".";
+var64 = 1;
+var65 = string__NativeString__to_s_with_length(var63, var64);
+var62 = var65;
+varonce61 = var62;
 }
-var = var45;
+var = var62;
 goto RET_LABEL;
 }
 }
@@ -1222,14 +1707,26 @@ val* file__String__realpath(val* self) {
 val* var /* : String */;
 char* var1 /* : NativeString */;
 char* var2 /* : NativeString */;
+char* var4 /* : NativeString */;
 char* var_cs /* var cs: NativeString */;
-val* var3 /* : String */;
-val* var_res /* var res: String */;
-var1 = ((char* (*)(val*))(self->class->vft[COLOR_string__String__to_cstring]))(self) /* to_cstring on <self:String>*/;
-var2 = file__NativeString__file_realpath(var1);
+val* var5 /* : FlatString */;
+val* var_res /* var res: FlatString */;
+{
+var1 = string__FlatString__to_cstring(self);
+}
+{
+{ /* Inline file#NativeString#file_realpath (var1) on <var1:NativeString> */
+var4 = file_NativeString_realpath(var1);
+var2 = var4;
+goto RET_LABEL3;
+RET_LABEL3:(void)0;
+}
+}
 var_cs = var2;
-var3 = string__NativeString__to_s_with_copy(var_cs);
-var_res = var3;
+{
+var5 = string__NativeString__to_s_with_copy(var_cs);
+}
+var_res = var5;
 var = var_res;
 goto RET_LABEL;
 RET_LABEL:;
@@ -1251,12 +1748,12 @@ static val* varonce;
 val* var1 /* : String */;
 char* var2 /* : NativeString */;
 long var3 /* : Int */;
-val* var4 /* : String */;
-val* var5 /* : Array[String] */;
+val* var4 /* : FlatString */;
+val* var5 /* : Array[Text] */;
 val* var_a /* var a: Array[String] */;
 val* var6 /* : Array[String] */;
 val* var_a2 /* var a2: Array[String] */;
-val* var7 /* : Iterator[nullable Object] */;
+val* var7 /* : ArrayIterator[nullable Object] */;
 short int var8 /* : Bool */;
 val* var9 /* : nullable Object */;
 val* var_x /* var x: String */;
@@ -1264,50 +1761,78 @@ static val* varonce10;
 val* var11 /* : String */;
 char* var12 /* : NativeString */;
 long var13 /* : Int */;
-val* var14 /* : String */;
+val* var14 /* : FlatString */;
 short int var15 /* : Bool */;
 short int var16 /* : Bool */;
-static val* varonce17;
-val* var18 /* : String */;
-char* var19 /* : NativeString */;
-long var20 /* : Int */;
-val* var21 /* : String */;
-short int var22 /* : Bool */;
-short int var_ /* var : Bool */;
+short int var17 /* : Bool */;
+static val* varonce18;
+val* var19 /* : String */;
+char* var20 /* : NativeString */;
+long var21 /* : Int */;
+val* var22 /* : FlatString */;
 short int var23 /* : Bool */;
 short int var24 /* : Bool */;
+short int var_ /* var : Bool */;
 short int var25 /* : Bool */;
 short int var26 /* : Bool */;
-static val* varonce27;
-val* var28 /* : String */;
-char* var29 /* : NativeString */;
-long var30 /* : Int */;
-val* var31 /* : String */;
-short int var32 /* : Bool */;
-short int var_33 /* var : Bool */;
+short int var27 /* : Bool */;
+short int var28 /* : Bool */;
+static val* varonce29;
+val* var30 /* : String */;
+char* var31 /* : NativeString */;
+long var32 /* : Int */;
+val* var33 /* : FlatString */;
 short int var34 /* : Bool */;
 short int var35 /* : Bool */;
 short int var_36 /* var : Bool */;
-val* var37 /* : nullable Object */;
-static val* varonce38;
-val* var39 /* : String */;
-char* var40 /* : NativeString */;
-long var41 /* : Int */;
+short int var37 /* : Bool */;
+short int var38 /* : Bool */;
+short int var_39 /* var : Bool */;
+val* var40 /* : nullable Object */;
+static val* varonce41;
 val* var42 /* : String */;
-short int var43 /* : Bool */;
-val* var44 /* : nullable Object */;
-short int var45 /* : Bool */;
-static val* varonce46;
-val* var47 /* : String */;
-char* var48 /* : NativeString */;
-long var49 /* : Int */;
-val* var50 /* : String */;
-static val* varonce51;
-val* var52 /* : String */;
-char* var53 /* : NativeString */;
-long var54 /* : Int */;
+char* var43 /* : NativeString */;
+long var44 /* : Int */;
+val* var45 /* : FlatString */;
+short int var46 /* : Bool */;
+short int var47 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var49 /* : Bool */;
+short int var50 /* : Bool */;
+short int var51 /* : Bool */;
+val* var52 /* : nullable Object */;
+short int var53 /* : Bool */;
+static val* varonce54;
 val* var55 /* : String */;
-val* var56 /* : String */;
+char* var56 /* : NativeString */;
+long var57 /* : Int */;
+val* var58 /* : FlatString */;
+short int var59 /* : Bool */;
+long var60 /* : Int */;
+long var61 /* : Int */;
+short int var62 /* : Bool */;
+short int var63 /* : Bool */;
+short int var65 /* : Bool */;
+short int var_66 /* var : Bool */;
+val* var67 /* : nullable Object */;
+static val* varonce68;
+val* var69 /* : String */;
+char* var70 /* : NativeString */;
+long var71 /* : Int */;
+val* var72 /* : FlatString */;
+short int var73 /* : Bool */;
+short int var74 /* : Bool */;
+static val* varonce75;
+val* var76 /* : String */;
+char* var77 /* : NativeString */;
+long var78 /* : Int */;
+val* var79 /* : FlatString */;
+static val* varonce80;
+val* var81 /* : String */;
+char* var82 /* : NativeString */;
+long var83 /* : Int */;
+val* var84 /* : FlatString */;
+val* var85 /* : String */;
 if (varonce) {
 var1 = varonce;
 } else {
@@ -1317,16 +1842,26 @@ var4 = string__NativeString__to_s_with_length(var2, var3);
 var1 = var4;
 varonce = var1;
 }
-var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_string_search__String__split_with]))(self, var1) /* split_with on <self:String>*/;
+{
+var5 = string_search__Text__split_with(self, var1);
+}
 var_a = var5;
 var6 = NEW_array__Array(&type_array__Arraystring__String);
-((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[String]>*/;
+{
+array__Array__init(var6); /* Direct call array#Array#init on <var6:Array[String]>*/
+}
 var_a2 = var6;
-var7 = ((val* (*)(val*))(var_a->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_a) /* iterator on <var_a:Array[String]>*/;
+{
+var7 = array__AbstractArrayRead__iterator(var_a);
+}
 for(;;) {
-var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
+{
+var8 = array__ArrayIterator__is_ok(var7);
+}
 if(!var8) break;
-var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
+{
+var9 = array__ArrayIterator__item(var7);
+}
 var_x = var9;
 if (varonce10) {
 var11 = varonce10;
@@ -1337,105 +1872,192 @@ var14 = string__NativeString__to_s_with_length(var12, var13);
 var11 = var14;
 varonce10 = var11;
 }
-var15 = ((short int (*)(val*, val*))(var_x->class->vft[COLOR_kernel__Object___61d_61d]))(var_x, var11) /* == on <var_x:String>*/;
+{
+var16 = string__FlatString___61d_61d(var_x, var11);
+var15 = var16;
+}
 if (var15){
 goto CONTINUE_label;
 } else {
 }
-if (varonce17) {
-var18 = varonce17;
+if (varonce18) {
+var19 = varonce18;
 } else {
-var19 = "";
-var20 = 0;
-var21 = string__NativeString__to_s_with_length(var19, var20);
-var18 = var21;
-varonce17 = var18;
-}
-var22 = ((short int (*)(val*, val*))(var_x->class->vft[COLOR_kernel__Object___61d_61d]))(var_x, var18) /* == on <var_x:String>*/;
-var_ = var22;
-if (var22){
-var23 = ((short int (*)(val*))(var_a2->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_a2) /* is_empty on <var_a2:Array[String]>*/;
-var24 = !var23;
-var16 = var24;
+var20 = "";
+var21 = 0;
+var22 = string__NativeString__to_s_with_length(var20, var21);
+var19 = var22;
+varonce18 = var19;
+}
+{
+var24 = string__FlatString___61d_61d(var_x, var19);
+var23 = var24;
+}
+var_ = var23;
+if (var23){
+{
+var25 = array__AbstractArrayRead__is_empty(var_a2);
+}
+var26 = !var25;
+var17 = var26;
 } else {
-var16 = var_;
+var17 = var_;
 }
-if (var16){
+if (var17){
 goto CONTINUE_label;
 } else {
 }
-if (varonce27) {
-var28 = varonce27;
+if (varonce29) {
+var30 = varonce29;
 } else {
-var29 = "..";
-var30 = 2;
-var31 = string__NativeString__to_s_with_length(var29, var30);
-var28 = var31;
-varonce27 = var28;
-}
-var32 = ((short int (*)(val*, val*))(var_x->class->vft[COLOR_kernel__Object___61d_61d]))(var_x, var28) /* == on <var_x:String>*/;
-var_33 = var32;
-if (var32){
-var34 = ((short int (*)(val*))(var_a2->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_a2) /* is_empty on <var_a2:Array[String]>*/;
-var35 = !var34;
-var26 = var35;
+var31 = "..";
+var32 = 2;
+var33 = string__NativeString__to_s_with_length(var31, var32);
+var30 = var33;
+varonce29 = var30;
+}
+{
+var35 = string__FlatString___61d_61d(var_x, var30);
+var34 = var35;
+}
+var_36 = var34;
+if (var34){
+{
+var37 = array__AbstractArrayRead__is_empty(var_a2);
+}
+var38 = !var37;
+var28 = var38;
 } else {
-var26 = var_33;
+var28 = var_36;
+}
+var_39 = var28;
+if (var28){
+{
+var40 = abstract_collection__SequenceRead__last(var_a2);
 }
-var_36 = var26;
-if (var26){
-var37 = ((val* (*)(val*))(var_a2->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var_a2) /* last on <var_a2:Array[String]>*/;
-if (varonce38) {
-var39 = varonce38;
+if (varonce41) {
+var42 = varonce41;
 } else {
-var40 = "..";
-var41 = 2;
-var42 = string__NativeString__to_s_with_length(var40, var41);
-var39 = var42;
-varonce38 = var39;
-}
-var43 = ((short int (*)(val*, val*))(var37->class->vft[COLOR_kernel__Object___33d_61d]))(var37, var39) /* != on <var37:nullable Object(String)>*/;
-var25 = var43;
+var43 = "..";
+var44 = 2;
+var45 = string__NativeString__to_s_with_length(var43, var44);
+var42 = var45;
+varonce41 = var42;
+}
+{
+{ /* Inline kernel#Object#!= (var40,var42) on <var40:nullable Object(String)> */
+var_other = var42;
+{
+var50 = ((short int (*)(val*, val*))(var40->class->vft[COLOR_kernel__Object___61d_61d]))(var40, var_other) /* == on <var40:nullable Object(String)>*/;
+var49 = var50;
+}
+var51 = !var49;
+var47 = var51;
+goto RET_LABEL48;
+RET_LABEL48:(void)0;
+}
+var46 = var47;
+}
+var27 = var46;
 } else {
-var25 = var_36;
+var27 = var_39;
 }
-if (var25){
-var44 = ((val* (*)(val*))(var_a2->class->vft[COLOR_abstract_collection__Sequence__pop]))(var_a2) /* pop on <var_a2:Array[String]>*/;
-var44;
+if (var27){
+{
+var52 = array__AbstractArray__pop(var_a2);
+}
+var52;
 goto CONTINUE_label;
 } else {
 }
-((void (*)(val*, val*))(var_a2->class->vft[COLOR_abstract_collection__Sequence__push]))(var_a2, var_x) /* push on <var_a2:Array[String]>*/;
+{
+array__AbstractArray__push(var_a2, var_x); /* Direct call array#AbstractArray#push on <var_a2:Array[String]>*/
+}
 CONTINUE_label: (void)0;
-((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
+{
+array__ArrayIterator__next(var7); /* Direct call array#ArrayIterator#next on <var7:ArrayIterator[nullable Object]>*/
+}
 }
 BREAK_label: (void)0;
-var45 = ((short int (*)(val*))(var_a2->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_a2) /* is_empty on <var_a2:Array[String]>*/;
-if (var45){
-if (varonce46) {
-var47 = varonce46;
+{
+var53 = array__AbstractArrayRead__is_empty(var_a2);
+}
+if (var53){
+if (varonce54) {
+var55 = varonce54;
+} else {
+var56 = ".";
+var57 = 1;
+var58 = string__NativeString__to_s_with_length(var56, var57);
+var55 = var58;
+varonce54 = var55;
+}
+var = var55;
+goto RET_LABEL;
+} else {
+}
+{
+var60 = array__AbstractArrayRead__length(var_a2);
+}
+var61 = 1;
+{
+{ /* Inline kernel#Int#== (var60,var61) on <var60:Int> */
+var65 = var60 == var61;
+var63 = var65;
+goto RET_LABEL64;
+RET_LABEL64:(void)0;
+}
+var62 = var63;
+}
+var_66 = var62;
+if (var62){
+{
+var67 = abstract_collection__SequenceRead__first(var_a2);
+}
+if (varonce68) {
+var69 = varonce68;
+} else {
+var70 = "";
+var71 = 0;
+var72 = string__NativeString__to_s_with_length(var70, var71);
+var69 = var72;
+varonce68 = var69;
+}
+{
+var74 = string__FlatString___61d_61d(var67, var69);
+var73 = var74;
+}
+var59 = var73;
+} else {
+var59 = var_66;
+}
+if (var59){
+if (varonce75) {
+var76 = varonce75;
 } else {
-var48 = ".";
-var49 = 1;
-var50 = string__NativeString__to_s_with_length(var48, var49);
-var47 = var50;
-varonce46 = var47;
+var77 = "/";
+var78 = 1;
+var79 = string__NativeString__to_s_with_length(var77, var78);
+var76 = var79;
+varonce75 = var76;
 }
-var = var47;
+var = var76;
 goto RET_LABEL;
 } else {
 }
-if (varonce51) {
-var52 = varonce51;
+if (varonce80) {
+var81 = varonce80;
 } else {
-var53 = "/";
-var54 = 1;
-var55 = string__NativeString__to_s_with_length(var53, var54);
-var52 = var55;
-varonce51 = var52;
-}
-var56 = ((val* (*)(val*, val*))(var_a2->class->vft[COLOR_string__Collection__join]))(var_a2, var52) /* join on <var_a2:Array[String]>*/;
-var = var56;
+var82 = "/";
+var83 = 1;
+var84 = string__NativeString__to_s_with_length(var82, var83);
+var81 = var84;
+varonce80 = var81;
+}
+{
+var85 = string__Collection__join(var_a2, var81);
+}
+var = var85;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1455,102 +2077,100 @@ val* var /* : String */;
 val* var_path /* var path: String */;
 short int var1 /* : Bool */;
 short int var2 /* : Bool */;
-val* var3 /* : StringCharView */;
-long var4 /* : Int */;
-val* var5 /* : nullable Object */;
-char var6 /* : Char */;
-short int var7 /* : Bool */;
+val* var3 /* : SequenceRead[Char] */;
+val* var5 /* : SequenceRead[Char] */;
+long var6 /* : Int */;
+val* var7 /* : nullable Object */;
+char var8 /* : Char */;
 short int var9 /* : Bool */;
-char var10 /* : Char */;
-val* var11 /* : Array[Object] */;
-long var12 /* : Int */;
-val* var_ /* var : Array[Object] */;
+short int var10 /* : Bool */;
+short int var12 /* : Bool */;
+char var13 /* : Char */;
 static val* varonce;
-val* var13 /* : String */;
-char* var14 /* : NativeString */;
-long var15 /* : Int */;
-val* var16 /* : String */;
-static val* varonce17;
-val* var18 /* : String */;
-char* var19 /* : NativeString */;
-long var20 /* : Int */;
+val* var14 /* : String */;
+char* var15 /* : NativeString */;
+long var16 /* : Int */;
+val* var17 /* : FlatString */;
+val* var18 /* : Array[Object] */;
+long var19 /* : Int */;
+val* var20 /* : NativeArray[Object] */;
 val* var21 /* : String */;
-static val* varonce22;
-val* var23 /* : String */;
-char* var24 /* : NativeString */;
-long var25 /* : Int */;
-val* var26 /* : String */;
-val* var27 /* : String */;
 var_path = p0;
-var1 = ((short int (*)(val*))(var_path->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_path) /* is_empty on <var_path:String>*/;
+{
+var1 = string__Text__is_empty(var_path);
+}
 if (var1){
 var = self;
 goto RET_LABEL;
 } else {
 }
-var2 = ((short int (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__is_empty]))(self) /* is_empty on <self:String>*/;
+{
+var2 = string__Text__is_empty(self);
+}
 if (var2){
 var = var_path;
 goto RET_LABEL;
 } else {
 }
-var3 = ((val* (*)(val*))(var_path->class->vft[COLOR_string__AbstractString__chars]))(var_path) /* chars on <var_path:String>*/;
-var4 = 0;
-var5 = ((val* (*)(val*, long))(var3->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var3, var4) /* [] on <var3:StringCharView>*/;
-var6 = '/';
-{ /* Inline kernel#Char#== (var5,var6) */
-var9 = (var5 != NULL) && (var5->class == &class_kernel__Char);
-if (var9) {
-var10 = ((struct instance_kernel__Char*)var5)->value; /* autounbox from nullable Object to Char */;
-var9 = (var10 == var6);
+{
+{ /* Inline string#FlatString#chars (var_path) on <var_path:String> */
+var5 = var_path->attrs[COLOR_string__FlatString___chars].val; /* _chars on <var_path:String> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/string.nit", 746);
+show_backtrace(1);
 }
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+var6 = 0;
+{
+var7 = ((val* (*)(val*, long))(var3->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var3, var6) /* [] on <var3:SequenceRead[Char]>*/;
+}
+var8 = '/';
+{
+{ /* Inline kernel#Char#== (var7,var8) on <var7:nullable Object(Char)> */
+var12 = (var7 != NULL) && (var7->class == &class_kernel__Char);
+if (var12) {
+var13 = ((struct instance_kernel__Char*)var7)->value; /* autounbox from nullable Object to Char */;
+var12 = (var13 == var8);
+}
+var10 = var12;
+goto RET_LABEL11;
+RET_LABEL11:(void)0;
+}
+var9 = var10;
 }
-if (var7){
+if (var9){
 var = var_path;
 goto RET_LABEL;
 } else {
 }
-var11 = NEW_array__Array(&type_array__Arraykernel__Object);
-var12 = 5;
-((void (*)(val*, long))(var11->class->vft[COLOR_array__Array__with_capacity]))(var11, var12) /* with_capacity on <var11:Array[Object]>*/;
-var_ = var11;
 if (varonce) {
-var13 = varonce;
+var14 = varonce;
 } else {
-var14 = "";
-var15 = 0;
-var16 = string__NativeString__to_s_with_length(var14, var15);
-var13 = var16;
-varonce = var13;
-}
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var13) /* add on <var_:Array[Object]>*/;
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, self) /* add on <var_:Array[Object]>*/;
-if (varonce17) {
-var18 = varonce17;
-} else {
-var19 = "/";
-var20 = 1;
-var21 = string__NativeString__to_s_with_length(var19, var20);
-var18 = var21;
-varonce17 = var18;
-}
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var18) /* add on <var_:Array[Object]>*/;
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var_path) /* add on <var_:Array[Object]>*/;
-if (varonce22) {
-var23 = varonce22;
-} else {
-var24 = "";
-var25 = 0;
-var26 = string__NativeString__to_s_with_length(var24, var25);
-var23 = var26;
-varonce22 = var23;
-}
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var23) /* add on <var_:Array[Object]>*/;
-var27 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
-var = var27;
+var15 = "/";
+var16 = 1;
+var17 = string__NativeString__to_s_with_length(var15, var16);
+var14 = var17;
+varonce = var14;
+}
+var18 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var18 = array_instance Array[Object] */
+var19 = 3;
+var20 = NEW_array__NativeArray(var19, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var20)->values[0] = (val*) self;
+((struct instance_array__NativeArray*)var20)->values[1] = (val*) var14;
+((struct instance_array__NativeArray*)var20)->values[2] = (val*) var_path;
+{
+((void (*)(val*, val*, long))(var18->class->vft[COLOR_array__Array__with_native]))(var18, var20, var19) /* with_native on <var18:Array[Object]>*/;
+}
+}
+{
+var21 = ((val* (*)(val*))(var18->class->vft[COLOR_string__Object__to_s]))(var18) /* to_s on <var18:Array[Object]>*/;
+}
+var = var21;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1570,26 +2190,25 @@ static val* varonce;
 val* var /* : String */;
 char* var1 /* : NativeString */;
 long var2 /* : Int */;
-val* var3 /* : String */;
-val* var4 /* : Array[String] */;
+val* var3 /* : FlatString */;
+val* var4 /* : Array[Text] */;
 val* var_dirs /* var dirs: Array[String] */;
-val* var5 /* : Buffer */;
-val* var_path /* var path: Buffer */;
+val* var5 /* : FlatBuffer */;
+val* var_path /* var path: FlatBuffer */;
 short int var6 /* : Bool */;
 long var7 /* : Int */;
 val* var8 /* : nullable Object */;
 short int var9 /* : Bool */;
 char var10 /* : Char */;
-val* var11 /* : nullable Object */;
-val* var12 /* : Iterator[nullable Object] */;
-short int var13 /* : Bool */;
-val* var14 /* : nullable Object */;
+val* var11 /* : ArrayIterator[nullable Object] */;
+short int var12 /* : Bool */;
+val* var13 /* : nullable Object */;
 val* var_d /* var d: String */;
-short int var15 /* : Bool */;
-char var16 /* : Char */;
-val* var17 /* : nullable Object */;
-val* var18 /* : String */;
-char* var19 /* : NativeString */;
+short int var14 /* : Bool */;
+char var15 /* : Char */;
+val* var16 /* : String */;
+char* var17 /* : NativeString */;
+short int var18 /* : Bool */;
 short int var20 /* : Bool */;
 if (varonce) {
 var = varonce;
@@ -1600,603 +2219,278 @@ var3 = string__NativeString__to_s_with_length(var1, var2);
 var = var3;
 varonce = var;
 }
-var4 = ((val* (*)(val*, val*))(self->class->vft[COLOR_string_search__String__split_with]))(self, var) /* split_with on <self:String>*/;
+{
+var4 = string_search__Text__split_with(self, var);
+}
 var_dirs = var4;
-var5 = NEW_string__Buffer(&type_string__Buffer);
-((void (*)(val*))(var5->class->vft[COLOR_string__Buffer__init]))(var5) /* init on <var5:Buffer>*/;
+var5 = NEW_string__FlatBuffer(&type_string__FlatBuffer);
+{
+string__FlatBuffer__init(var5); /* Direct call string#FlatBuffer#init on <var5:FlatBuffer>*/
+}
 var_path = var5;
-var6 = ((short int (*)(val*))(var_dirs->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_dirs) /* is_empty on <var_dirs:Array[String]>*/;
+{
+var6 = array__AbstractArrayRead__is_empty(var_dirs);
+}
 if (var6){
 goto RET_LABEL;
 } else {
 }
 var7 = 0;
-var8 = ((val* (*)(val*, long))(var_dirs->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_dirs, var7) /* [] on <var_dirs:Array[String]>*/;
-var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var8) /* is_empty on <var8:nullable Object(String)>*/;
+{
+var8 = array__Array___91d_93d(var_dirs, var7);
+}
+{
+var9 = string__Text__is_empty(var8);
+}
 if (var9){
 var10 = '/';
-var11 = BOX_kernel__Char(var10); /* autobox from Char to nullable Object */
-((void (*)(val*, val*))(var_path->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_path, var11) /* add on <var_path:Buffer>*/;
+{
+string__FlatBuffer__add(var_path, var10); /* Direct call string#FlatBuffer#add on <var_path:FlatBuffer>*/
+}
 } else {
 }
-var12 = ((val* (*)(val*))(var_dirs->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_dirs) /* iterator on <var_dirs:Array[String]>*/;
+{
+var11 = array__AbstractArrayRead__iterator(var_dirs);
+}
 for(;;) {
-var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var12) /* is_ok on <var12:Iterator[nullable Object]>*/;
-if(!var13) break;
-var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__item]))(var12) /* item on <var12:Iterator[nullable Object]>*/;
-var_d = var14;
-var15 = ((short int (*)(val*))(var_d->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_d) /* is_empty on <var_d:String>*/;
-if (var15){
+{
+var12 = array__ArrayIterator__is_ok(var11);
+}
+if(!var12) break;
+{
+var13 = array__ArrayIterator__item(var11);
+}
+var_d = var13;
+{
+var14 = string__Text__is_empty(var_d);
+}
+if (var14){
 goto CONTINUE_label;
 } else {
 }
-((void (*)(val*, val*))(var_path->class->vft[COLOR_abstract_collection__Sequence__append]))(var_path, var_d) /* append on <var_path:Buffer>*/;
-var16 = '/';
-var17 = BOX_kernel__Char(var16); /* autobox from Char to nullable Object */
-((void (*)(val*, val*))(var_path->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_path, var17) /* add on <var_path:Buffer>*/;
-var18 = ((val* (*)(val*))(var_path->class->vft[COLOR_string__Object__to_s]))(var_path) /* to_s on <var_path:Buffer>*/;
-var19 = ((char* (*)(val*))(var18->class->vft[COLOR_string__String__to_cstring]))(var18) /* to_cstring on <var18:String>*/;
-var20 = file__NativeString__file_mkdir(var19);
-var20;
+{
+string__FlatBuffer__append(var_path, var_d); /* Direct call string#FlatBuffer#append on <var_path:FlatBuffer>*/
+}
+var15 = '/';
+{
+string__FlatBuffer__add(var_path, var15); /* Direct call string#FlatBuffer#add on <var_path:FlatBuffer>*/
+}
+{
+var16 = string__FlatBuffer__to_s(var_path);
+}
+{
+var17 = string__FlatString__to_cstring(var16);
+}
+{
+{ /* Inline file#NativeString#file_mkdir (var17) on <var17:NativeString> */
+var20 = string_NativeString_NativeString_file_mkdir_0(var17);
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+var18;
 CONTINUE_label: (void)0;
-((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__next]))(var12) /* next on <var12:Iterator[nullable Object]>*/;
+{
+array__ArrayIterator__next(var11); /* Direct call array#ArrayIterator#next on <var11:ArrayIterator[nullable Object]>*/
+}
 }
 BREAK_label: (void)0;
 RET_LABEL:;
 }
 /* method file#String#mkdir for (self: Object) */
 void VIRTUAL_file__String__mkdir(val* self) {
-file__String__mkdir(self);
-RET_LABEL:;
-}
-/* method file#String#chdir for (self: String) */
-void file__String__chdir(val* self) {
-char* var /* : NativeString */;
-var = ((char* (*)(val*))(self->class->vft[COLOR_string__String__to_cstring]))(self) /* to_cstring on <self:String>*/;
-file__NativeString__file_chdir(var);
-RET_LABEL:;
-}
-/* method file#String#chdir for (self: Object) */
-void VIRTUAL_file__String__chdir(val* self) {
-file__String__chdir(self);
+file__String__mkdir(self); /* Direct call file#String#mkdir on <self:Object(String)>*/
 RET_LABEL:;
 }
 /* method file#String#file_extension for (self: String): nullable String */
 val* file__String__file_extension(val* self) {
 val* var /* : nullable String */;
-char var1 /* : Char */;
-long var2 /* : Int */;
-val* var3 /* : nullable Object */;
+val* var1 /* : SequenceRead[Char] */;
+val* var3 /* : SequenceRead[Char] */;
+char var4 /* : Char */;
+long var5 /* : Int */;
+val* var6 /* : nullable Object */;
 long var_last_slash /* var last_slash: Int */;
-long var4 /* : Int */;
-short int var5 /* : Bool */;
-short int var7 /* : Bool */;
+long var7 /* : Int */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-short int var8 /* : Bool */;
-long var9 /* : Int */;
-long var10 /* : Int */;
+short int var11 /* : Bool */;
 long var12 /* : Int */;
 long var13 /* : Int */;
-val* var14 /* : String */;
-val* var15 /* : null */;
-var1 = '.';
-var3 = BOX_kernel__Char(var1); /* autobox from Char to nullable Object */
-var2 = ((long (*)(val*, val*))(self->class->vft[COLOR_array__AbstractArrayRead__last_index_of]))(self, var3) /* last_index_of on <self:String>*/;
-var_last_slash = var2;
-var4 = 0;
-{ /* Inline kernel#Int#>= (var_last_slash,var4) */
-/* Covariant cast for argument 0 (i) <var4:Int> isa OTHER */
-/* <var4:Int> isa OTHER */
-var7 = 1; /* easy <var4:Int> isa OTHER*/
-if (!var7) {
-var_class_name = type_kernel__Int.name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 266);
-show_backtrace(1);
-}
-var8 = var_last_slash >= var4;
-var5 = var8;
-goto RET_LABEL6;
-RET_LABEL6:(void)0;
-}
-if (var5){
-var9 = 1;
-{ /* Inline kernel#Int#+ (var_last_slash,var9) */
-var12 = var_last_slash + var9;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
-}
-var13 = ((long (*)(val*))(self->class->vft[COLOR_abstract_collection__Collection__length]))(self) /* length on <self:String>*/;
-var14 = ((val* (*)(val*, long, long))(self->class->vft[COLOR_string__AbstractString__substring]))(self, var10, var13) /* substring on <self:String>*/;
-var = var14;
-goto RET_LABEL;
-} else {
-var15 = NULL;
-var = var15;
-goto RET_LABEL;
-}
-RET_LABEL:;
-return var;
-}
-/* method file#String#file_extension for (self: Object): nullable String */
-val* VIRTUAL_file__String__file_extension(val* self) {
-val* var /* : nullable String */;
-val* var1 /* : nullable String */;
-var1 = file__String__file_extension(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#String#files for (self: String): Set[String] */
-val* file__String__files(val* self) {
-val* var /* : Set[String] */;
-val* var1 /* : Set[String] */;
-struct nitni_instance* var_for_c_0;
-var_for_c_0 = malloc(sizeof(struct nitni_instance));
-var_for_c_0->value = self;
-struct nitni_instance* ret_var;
-ret_var = file___String_files___impl(var_for_c_0);
-var1 = ret_var->value;
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* nitni callback for standard::hash_collection::HashSet::init */
-struct nitni_instance * file___new_HashSet_of_String(  ) {
-val* var /* : HashSet[String] */;
-var = NEW_hash_collection__HashSet(&type_hash_collection__HashSetstring__String);
-val* recv /* var self: HashSet[String] */;
-recv = var;
-((void (*)(val*))(var->class->vft[COLOR_hash_collection__HashSet__init]))(var) /* init on <var:HashSet[String]>*/;
-struct nitni_instance* ret_for_c;
-ret_for_c = malloc(sizeof(struct nitni_instance));
-ret_for_c->value = var;
-return ret_for_c;
-}
-/* nitni callback for standard::abstract_collection::SimpleCollection::add */
-void file___HashSet_of_String_add( struct nitni_instance * recv, struct nitni_instance * item ) {
-((void (*)(val*, val*))(recv->value->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(recv->value, item->value) /* add on <recv->value:HashSet[String]>*/;
-}
-/* nitni callback for standard::string::Object::to_s */
-struct nitni_instance * file___NativeString_to_s( char* recv ) {
-val* var /* : String */;
-var = string__NativeString__to_s(recv);
-struct nitni_instance* ret_for_c;
-ret_for_c = malloc(sizeof(struct nitni_instance));
-ret_for_c->value = var;
-return ret_for_c;
-}
-/* nitni callback for standard::string::String::to_cstring */
-char* file___String_to_cstring( struct nitni_instance * recv ) {
-char* var /* : NativeString */;
-var = ((char* (*)(val*))(recv->value->class->vft[COLOR_string__String__to_cstring]))(recv->value) /* to_cstring on <recv->value:String>*/;
-return var;
-}
-/* nitni check for HashSet[String] to Set[String] */
-int file___HashSet_of_String_is_a_Set_of_String(struct nitni_instance * from) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-/* <from->value:HashSet[String]> isa Set[String] */
-var = 1; /* easy <from->value:HashSet[String]> isa Set[String]*/
-return var;
-}
-/* nitni cast for HashSet[String] to Set[String] */
-struct nitni_instance * file___HashSet_of_String_as_Set_of_String(struct nitni_instance * from) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-/* <from->value:HashSet[String]> isa Set[String] */
-var = 1; /* easy <from->value:HashSet[String]> isa Set[String]*/
-if (!var) {
-fprintf(stderr, "Runtime error: %s", "FFI cast failed");
-fprintf(stderr, "\n");
+short int var15 /* : Bool */;
+int cltype16;
+int idtype17;
+const char* var_class_name18;
+long var19 /* : Int */;
+long var20 /* : Int */;
+long var22 /* : Int */;
+val* var23 /* : String */;
+val* var24 /* : null */;
+{
+{ /* Inline string#FlatString#chars (self) on <self:String> */
+var3 = self->attrs[COLOR_string__FlatString___chars].val; /* _chars on <self:String> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/string.nit", 746);
 show_backtrace(1);
 }
-struct nitni_instance* ret_for_c;
-ret_for_c = malloc(sizeof(struct nitni_instance));
-ret_for_c->value = from->value;
-return ret_for_c;
-}
-/* method file#String#files for (self: Object): Set[String] */
-val* VIRTUAL_file__String__files(val* self) {
-val* var /* : Set[String] */;
-val* var1 /* : Set[String] */;
-var1 = file__String__files(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_exists for (self: NativeString): Bool */
-short int file__NativeString__file_exists(char* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = string_NativeString_NativeString_file_exists_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_exists for (self: Object): Bool */
-short int VIRTUAL_file__NativeString__file_exists(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-char* var2 /* : NativeString */;
-var2 = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
-var1 = file__NativeString__file_exists(var2);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_stat for (self: NativeString): FileStat */
-void* file__NativeString__file_stat(char* self) {
-void* var /* : FileStat */;
-void* var1 /* : FileStat */;
-var1 = string_NativeString_NativeString_file_stat_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_stat for (self: Object): FileStat */
-void* VIRTUAL_file__NativeString__file_stat(val* self) {
-void* var /* : FileStat */;
-void* var1 /* : FileStat */;
-char* var2 /* : NativeString */;
-var2 = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
-var1 = file__NativeString__file_stat(var2);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_lstat for (self: NativeString): FileStat */
-void* file__NativeString__file_lstat(char* self) {
-void* var /* : FileStat */;
-void* var1 /* : FileStat */;
-var1 = file___NativeString_file_lstat___impl(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_lstat for (self: Object): FileStat */
-void* VIRTUAL_file__NativeString__file_lstat(val* self) {
-void* var /* : FileStat */;
-void* var1 /* : FileStat */;
-char* var2 /* : NativeString */;
-var2 = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
-var1 = file__NativeString__file_lstat(var2);
-var = var1;
-RET_LABEL:;
-return var;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method file#NativeString#file_mkdir for (self: NativeString): Bool */
-short int file__NativeString__file_mkdir(char* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = string_NativeString_NativeString_file_mkdir_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_mkdir for (self: Object): Bool */
-short int VIRTUAL_file__NativeString__file_mkdir(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-char* var2 /* : NativeString */;
-var2 = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
-var1 = file__NativeString__file_mkdir(var2);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_delete for (self: NativeString): Bool */
-short int file__NativeString__file_delete(char* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = string_NativeString_NativeString_file_delete_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_delete for (self: Object): Bool */
-short int VIRTUAL_file__NativeString__file_delete(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-char* var2 /* : NativeString */;
-var2 = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
-var1 = file__NativeString__file_delete(var2);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_chdir for (self: NativeString) */
-void file__NativeString__file_chdir(char* self) {
-string_NativeString_NativeString_file_chdir_0(self);
-RET_LABEL:;
-}
-/* method file#NativeString#file_chdir for (self: Object) */
-void VIRTUAL_file__NativeString__file_chdir(val* self) {
-char* var /* : NativeString */;
-var = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
-file__NativeString__file_chdir(var);
-RET_LABEL:;
-}
-/* method file#NativeString#file_realpath for (self: NativeString): NativeString */
-char* file__NativeString__file_realpath(char* self) {
-char* var /* : NativeString */;
-char* var1 /* : NativeString */;
-var1 = file_NativeString_realpath(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeString#file_realpath for (self: Object): NativeString */
-char* VIRTUAL_file__NativeString__file_realpath(val* self) {
-char* var /* : NativeString */;
-char* var1 /* : NativeString */;
-char* var2 /* : NativeString */;
-var2 = ((struct instance_string__NativeString*)self)->value; /* autounbox from Object to NativeString */;
-var1 = file__NativeString__file_realpath(var2);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#FileStat#mode for (self: FileStat): Int */
-long file__FileStat__mode(void* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-var1 = file_FileStat_FileStat_mode_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#FileStat#mode for (self: Object): Int */
-long VIRTUAL_file__FileStat__mode(val* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__mode(var2);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#FileStat#atime for (self: FileStat): Int */
-long file__FileStat__atime(void* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-var1 = file_FileStat_FileStat_atime_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#FileStat#atime for (self: Object): Int */
-long VIRTUAL_file__FileStat__atime(val* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__atime(var2);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#FileStat#ctime for (self: FileStat): Int */
-long file__FileStat__ctime(void* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-var1 = file_FileStat_FileStat_ctime_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method file#FileStat#ctime for (self: Object): Int */
-long VIRTUAL_file__FileStat__ctime(val* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__ctime(var2);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#FileStat#mtime for (self: FileStat): Int */
-long file__FileStat__mtime(void* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-var1 = file_FileStat_FileStat_mtime_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
 }
-/* method file#FileStat#mtime for (self: Object): Int */
-long VIRTUAL_file__FileStat__mtime(val* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__mtime(var2);
-var = var1;
-RET_LABEL:;
-return var;
+var4 = '.';
+{
+var6 = BOX_kernel__Char(var4); /* autobox from Char to nullable Object */
+var5 = ((long (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__SequenceRead__last_index_of]))(var1, var6) /* last_index_of on <var1:SequenceRead[Char]>*/;
 }
-/* method file#FileStat#size for (self: FileStat): Int */
-long file__FileStat__size(void* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-var1 = file_FileStat_FileStat_size_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var_last_slash = var5;
+var7 = 0;
+{
+{ /* Inline kernel#Int#> (var_last_slash,var7) on <var_last_slash:Int> */
+/* Covariant cast for argument 0 (i) <var7:Int> isa OTHER */
+/* <var7:Int> isa OTHER */
+var10 = 1; /* easy <var7:Int> isa OTHER*/
+if (unlikely(!var10)) {
+var_class_name = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 327);
+show_backtrace(1);
 }
-/* method file#FileStat#size for (self: Object): Int */
-long VIRTUAL_file__FileStat__size(val* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__size(var2);
-var = var1;
-RET_LABEL:;
-return var;
+var11 = var_last_slash > var7;
+var8 = var11;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
 }
-/* method file#FileStat#is_reg for (self: FileStat): Bool */
-short int file__FileStat__is_reg(void* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = file___FileStat_is_reg___impl(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
 }
-/* method file#FileStat#is_reg for (self: Object): Bool */
-short int VIRTUAL_file__FileStat__is_reg(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__is_reg(var2);
-var = var1;
-RET_LABEL:;
-return var;
+if (var8){
+var12 = 1;
+{
+{ /* Inline kernel#Int#+ (var_last_slash,var12) on <var_last_slash:Int> */
+/* Covariant cast for argument 0 (i) <var12:Int> isa OTHER */
+/* <var12:Int> isa OTHER */
+var15 = 1; /* easy <var12:Int> isa OTHER*/
+if (unlikely(!var15)) {
+var_class_name18 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name18);
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/kernel.nit", 328);
+show_backtrace(1);
 }
-/* method file#FileStat#is_dir for (self: FileStat): Bool */
-short int file__FileStat__is_dir(void* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = file___FileStat_is_dir___impl(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var19 = var_last_slash + var12;
+var13 = var19;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
 }
-/* method file#FileStat#is_dir for (self: Object): Bool */
-short int VIRTUAL_file__FileStat__is_dir(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__is_dir(var2);
-var = var1;
-RET_LABEL:;
-return var;
 }
-/* method file#FileStat#is_chr for (self: FileStat): Bool */
-short int file__FileStat__is_chr(void* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = file___FileStat_is_chr___impl(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+{ /* Inline string#FlatText#length (self) on <self:String> */
+var22 = self->attrs[COLOR_string__FlatText___length].l; /* _length on <self:String> */
+var20 = var22;
+RET_LABEL21:(void)0;
 }
-/* method file#FileStat#is_chr for (self: Object): Bool */
-short int VIRTUAL_file__FileStat__is_chr(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__is_chr(var2);
-var = var1;
-RET_LABEL:;
-return var;
 }
-/* method file#FileStat#is_blk for (self: FileStat): Bool */
-short int file__FileStat__is_blk(void* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = file___FileStat_is_blk___impl(self);
-var = var1;
+{
+var23 = string__FlatString__substring(self, var13, var20);
+}
+var = var23;
+goto RET_LABEL;
+} else {
+var24 = NULL;
+var = var24;
 goto RET_LABEL;
+}
 RET_LABEL:;
 return var;
 }
-/* method file#FileStat#is_blk for (self: Object): Bool */
-short int VIRTUAL_file__FileStat__is_blk(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__is_blk(var2);
+/* method file#String#file_extension for (self: Object): nullable String */
+val* VIRTUAL_file__String__file_extension(val* self) {
+val* var /* : nullable String */;
+val* var1 /* : nullable String */;
+var1 = file__String__file_extension(self);
 var = var1;
 RET_LABEL:;
 return var;
 }
-/* method file#FileStat#is_fifo for (self: FileStat): Bool */
-short int file__FileStat__is_fifo(void* self) {
+/* method file#NativeString#file_exists for (self: NativeString): Bool */
+short int file__NativeString__file_exists(char* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = file___FileStat_is_fifo___impl(self);
+var1 = string_NativeString_NativeString_file_exists_0(self);
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method file#FileStat#is_fifo for (self: Object): Bool */
-short int VIRTUAL_file__FileStat__is_fifo(val* self) {
+/* method file#NativeString#file_exists for (self: Object): Bool */
+short int VIRTUAL_file__NativeString__file_exists(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__is_fifo(var2);
+short int var3 /* : Bool */;
+char* var4 /* : NativeString */;
+{ /* Inline file#NativeString#file_exists (self) on <self:Object(NativeString)> */
+var4 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeString */;
+var3 = string_NativeString_NativeString_file_exists_0(var4);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
-/* method file#FileStat#is_lnk for (self: FileStat): Bool */
-short int file__FileStat__is_lnk(void* self) {
+/* method file#NativeString#file_mkdir for (self: NativeString): Bool */
+short int file__NativeString__file_mkdir(char* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = file___FileStat_is_lnk___impl(self);
+var1 = string_NativeString_NativeString_file_mkdir_0(self);
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method file#FileStat#is_lnk for (self: Object): Bool */
-short int VIRTUAL_file__FileStat__is_lnk(val* self) {
+/* method file#NativeString#file_mkdir for (self: Object): Bool */
+short int VIRTUAL_file__NativeString__file_mkdir(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__is_lnk(var2);
+short int var3 /* : Bool */;
+char* var4 /* : NativeString */;
+{ /* Inline file#NativeString#file_mkdir (self) on <self:Object(NativeString)> */
+var4 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeString */;
+var3 = string_NativeString_NativeString_file_mkdir_0(var4);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
-/* method file#FileStat#is_sock for (self: FileStat): Bool */
-short int file__FileStat__is_sock(void* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = file___FileStat_is_sock___impl(self);
+/* method file#NativeString#file_realpath for (self: NativeString): NativeString */
+char* file__NativeString__file_realpath(char* self) {
+char* var /* : NativeString */;
+char* var1 /* : NativeString */;
+var1 = file_NativeString_realpath(self);
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method file#FileStat#is_sock for (self: Object): Bool */
-short int VIRTUAL_file__FileStat__is_sock(val* self) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-void* var2 /* : FileStat */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to FileStat */;
-var1 = file__FileStat__is_sock(var2);
+/* method file#NativeString#file_realpath for (self: Object): NativeString */
+char* VIRTUAL_file__NativeString__file_realpath(val* self) {
+char* var /* : NativeString */;
+char* var1 /* : NativeString */;
+char* var3 /* : NativeString */;
+char* var4 /* : NativeString */;
+{ /* Inline file#NativeString#file_realpath (self) on <self:Object(NativeString)> */
+var4 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeString */;
+var3 = file_NativeString_realpath(var4);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
@@ -2215,9 +2509,15 @@ return var;
 long VIRTUAL_file__NativeFile__io_read(val* self, char* p0, long p1) {
 long var /* : Int */;
 long var1 /* : Int */;
-void* var2 /* : NativeFile */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
-var1 = file__NativeFile__io_read(var2, p0, p1);
+long var3 /* : Int */;
+void* var4 /* : NativeFile */;
+{ /* Inline file#NativeFile#io_read (self,p0,p1) on <self:Object(NativeFile)> */
+var4 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
+var3 = file_NativeFile_NativeFile_io_read_2(var4, p0, p1);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
@@ -2236,9 +2536,15 @@ return var;
 long VIRTUAL_file__NativeFile__io_write(val* self, char* p0, long p1) {
 long var /* : Int */;
 long var1 /* : Int */;
-void* var2 /* : NativeFile */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
-var1 = file__NativeFile__io_write(var2, p0, p1);
+long var3 /* : Int */;
+void* var4 /* : NativeFile */;
+{ /* Inline file#NativeFile#io_write (self,p0,p1) on <self:Object(NativeFile)> */
+var4 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
+var3 = file_NativeFile_NativeFile_io_write_2(var4, p0, p1);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
@@ -2257,30 +2563,15 @@ return var;
 long VIRTUAL_file__NativeFile__io_close(val* self) {
 long var /* : Int */;
 long var1 /* : Int */;
-void* var2 /* : NativeFile */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
-var1 = file__NativeFile__io_close(var2);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method file#NativeFile#file_stat for (self: NativeFile): FileStat */
-void* file__NativeFile__file_stat(void* self) {
-void* var /* : FileStat */;
-void* var1 /* : FileStat */;
-var1 = file_NativeFile_NativeFile_file_stat_0(self);
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+long var3 /* : Int */;
+void* var4 /* : NativeFile */;
+{ /* Inline file#NativeFile#io_close (self) on <self:Object(NativeFile)> */
+var4 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
+var3 = file_NativeFile_NativeFile_io_close_0(var4);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
 }
-/* method file#NativeFile#file_stat for (self: Object): FileStat */
-void* VIRTUAL_file__NativeFile__file_stat(val* self) {
-void* var /* : FileStat */;
-void* var1 /* : FileStat */;
-void* var2 /* : NativeFile */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
-var1 = file__NativeFile__file_stat(var2);
 var = var1;
 RET_LABEL:;
 return var;
@@ -2299,12 +2590,20 @@ return var;
 void* VIRTUAL_file__NativeFile__io_open_read(val* self, char* p0) {
 void* var /* : NativeFile */;
 val* var1 /* : Object */;
-void* var2 /* : NativeFile */;
 void* var3 /* : NativeFile */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
-var1 = file__NativeFile__io_open_read(var2, p0);
-var3 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
-var = var3;
+void* var4 /* : NativeFile */;
+val* var5 /* : Object */;
+void* var6 /* : NativeFile */;
+{ /* Inline file#NativeFile#io_open_read (self,p0) on <self:Object(NativeFile)> */
+var3 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
+var4 = file_NativeFileCapable_NativeFileCapable_io_open_read_1(p0);
+var5 = BOX_file__NativeFile(var4); /* autobox from NativeFile to Object */
+var1 = var5;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var6 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
+var = var6;
 RET_LABEL:;
 return var;
 }
@@ -2322,12 +2621,20 @@ return var;
 void* VIRTUAL_file__NativeFile__io_open_write(val* self, char* p0) {
 void* var /* : NativeFile */;
 val* var1 /* : Object */;
-void* var2 /* : NativeFile */;
 void* var3 /* : NativeFile */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
-var1 = file__NativeFile__io_open_write(var2, p0);
-var3 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
-var = var3;
+void* var4 /* : NativeFile */;
+val* var5 /* : Object */;
+void* var6 /* : NativeFile */;
+{ /* Inline file#NativeFile#io_open_write (self,p0) on <self:Object(NativeFile)> */
+var3 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
+var4 = file_NativeFileCapable_NativeFileCapable_io_open_write_1(p0);
+var5 = BOX_file__NativeFile(var4); /* autobox from NativeFile to Object */
+var1 = var5;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var6 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
+var = var6;
 RET_LABEL:;
 return var;
 }
@@ -2345,12 +2652,20 @@ return var;
 void* VIRTUAL_file__NativeFile__native_stdin(val* self) {
 void* var /* : NativeFile */;
 val* var1 /* : Object */;
-void* var2 /* : NativeFile */;
 void* var3 /* : NativeFile */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
-var1 = file__NativeFile__native_stdin(var2);
-var3 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
-var = var3;
+void* var4 /* : NativeFile */;
+val* var5 /* : Object */;
+void* var6 /* : NativeFile */;
+{ /* Inline file#NativeFile#native_stdin (self) on <self:Object(NativeFile)> */
+var3 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
+var4 = file_NativeFileCapable_NativeFileCapable_native_stdin_0();
+var5 = BOX_file__NativeFile(var4); /* autobox from NativeFile to Object */
+var1 = var5;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var6 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
+var = var6;
 RET_LABEL:;
 return var;
 }
@@ -2368,12 +2683,20 @@ return var;
 void* VIRTUAL_file__NativeFile__native_stdout(val* self) {
 void* var /* : NativeFile */;
 val* var1 /* : Object */;
-void* var2 /* : NativeFile */;
 void* var3 /* : NativeFile */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
-var1 = file__NativeFile__native_stdout(var2);
-var3 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
-var = var3;
+void* var4 /* : NativeFile */;
+val* var5 /* : Object */;
+void* var6 /* : NativeFile */;
+{ /* Inline file#NativeFile#native_stdout (self) on <self:Object(NativeFile)> */
+var3 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
+var4 = file_NativeFileCapable_NativeFileCapable_native_stdout_0();
+var5 = BOX_file__NativeFile(var4); /* autobox from NativeFile to Object */
+var1 = var5;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var6 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
+var = var6;
 RET_LABEL:;
 return var;
 }
@@ -2391,101 +2714,266 @@ return var;
 void* VIRTUAL_file__NativeFile__native_stderr(val* self) {
 void* var /* : NativeFile */;
 val* var1 /* : Object */;
-void* var2 /* : NativeFile */;
 void* var3 /* : NativeFile */;
-var2 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
-var1 = file__NativeFile__native_stderr(var2);
-var3 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
-var = var3;
+void* var4 /* : NativeFile */;
+val* var5 /* : Object */;
+void* var6 /* : NativeFile */;
+{ /* Inline file#NativeFile#native_stderr (self) on <self:Object(NativeFile)> */
+var3 = ((struct instance_kernel__Pointer*)self)->value; /* autounbox from Object to NativeFile */;
+var4 = file_NativeFileCapable_NativeFileCapable_native_stderr_0();
+var5 = BOX_file__NativeFile(var4); /* autobox from NativeFile to Object */
+var1 = var5;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var6 = ((struct instance_kernel__Pointer*)var1)->value; /* autounbox from Object to NativeFile */;
+var = var6;
+RET_LABEL:;
+return var;
+}
+/* method file#Sys#stdout for (self: Sys): OStream */
+val* file__Sys__stdout(val* self) {
+val* var /* : OStream */;
+val* var1 /* : OStream */;
+var1 = self->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <self:Sys> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 530);
+show_backtrace(1);
+}
+var = var1;
 RET_LABEL:;
 return var;
 }
-/* method file#Object#stdin for (self: Object): Stdin */
-val* file__Object__stdin(val* self) {
-val* var /* : Stdin */;
-static val* varonce;
-static int varonce_guard;
-val* var1 /* : Stdin */;
-val* var2 /* : Stdin */;
-if (varonce_guard) {
-var1 = varonce;
-} else {
-var2 = NEW_file__Stdin(&type_file__Stdin);
-((void (*)(val*))(var2->class->vft[COLOR_file__Stdin__init]))(var2) /* init on <var2:Stdin>*/;
-var1 = var2;
-varonce = var1;
-varonce_guard = 1;
+/* method file#Sys#stdout for (self: Object): OStream */
+val* VIRTUAL_file__Sys__stdout(val* self) {
+val* var /* : OStream */;
+val* var1 /* : OStream */;
+val* var3 /* : OStream */;
+{ /* Inline file#Sys#stdout (self) on <self:Object(Sys)> */
+var3 = self->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <self:Object(Sys)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 530);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method file#Sys#stderr for (self: Sys): OStream */
+val* file__Sys__stderr(val* self) {
+val* var /* : OStream */;
+val* var1 /* : OStream */;
+var1 = self->attrs[COLOR_file__Sys___stderr].val; /* _stderr on <self:Sys> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stderr");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 533);
+show_backtrace(1);
 }
 var = var1;
-goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method file#Object#stdin for (self: Object): Stdin */
-val* VIRTUAL_file__Object__stdin(val* self) {
-val* var /* : Stdin */;
-val* var1 /* : Stdin */;
-var1 = file__Object__stdin(self);
+/* method file#Sys#stderr for (self: Object): OStream */
+val* VIRTUAL_file__Sys__stderr(val* self) {
+val* var /* : OStream */;
+val* var1 /* : OStream */;
+val* var3 /* : OStream */;
+{ /* Inline file#Sys#stderr (self) on <self:Object(Sys)> */
+var3 = self->attrs[COLOR_file__Sys___stderr].val; /* _stderr on <self:Object(Sys)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stderr");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 533);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
-/* method file#Object#stdout for (self: Object): OFStream */
-val* file__Object__stdout(val* self) {
-val* var /* : OFStream */;
+/* method file#Object#printn for (self: Object, Array[Object]) */
+void file__Object__printn(val* self, val* p0) {
+val* var_objects /* var objects: Array[Object] */;
+val* var /* : Sys */;
+val* var2 /* : Sys */;
+val* var3 /* : OStream */;
+val* var5 /* : OStream */;
+val* var6 /* : String */;
+var_objects = p0;
+{
+{ /* Inline kernel#Object#sys (self) on <self:Object> */
+var2 = glob_sys;
+var = var2;
+goto RET_LABEL1;
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline file#Sys#stdout (var) on <var:Sys> */
+var5 = var->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <var:Sys> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 530);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+var6 = string__Array__to_s(var_objects);
+}
+{
+file__OFStream__write(var3, var6); /* Direct call file#OFStream#write on <var3:OStream>*/
+}
+RET_LABEL:;
+}
+/* method file#Object#printn for (self: Object, Array[Object]) */
+void VIRTUAL_file__Object__printn(val* self, val* p0) {
+file__Object__printn(self, p0); /* Direct call file#Object#printn on <self:Object>*/
+RET_LABEL:;
+}
+/* method file#Object#print for (self: Object, Object) */
+void file__Object__print(val* self, val* p0) {
+val* var_object /* var object: Object */;
+val* var /* : Sys */;
+val* var2 /* : Sys */;
+val* var3 /* : OStream */;
+val* var5 /* : OStream */;
+val* var6 /* : String */;
+val* var7 /* : Sys */;
+val* var9 /* : Sys */;
+val* var10 /* : OStream */;
+val* var12 /* : OStream */;
 static val* varonce;
-static int varonce_guard;
-val* var1 /* : Stdout */;
-val* var2 /* : Stdout */;
-if (varonce_guard) {
-var1 = varonce;
+val* var13 /* : String */;
+char* var14 /* : NativeString */;
+long var15 /* : Int */;
+val* var16 /* : FlatString */;
+var_object = p0;
+{
+{ /* Inline kernel#Object#sys (self) on <self:Object> */
+var2 = glob_sys;
+var = var2;
+goto RET_LABEL1;
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline file#Sys#stdout (var) on <var:Sys> */
+var5 = var->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <var:Sys> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 530);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+var6 = ((val* (*)(val*))(var_object->class->vft[COLOR_string__Object__to_s]))(var_object) /* to_s on <var_object:Object>*/;
+}
+{
+file__OFStream__write(var3, var6); /* Direct call file#OFStream#write on <var3:OStream>*/
+}
+{
+{ /* Inline kernel#Object#sys (self) on <self:Object> */
+var9 = glob_sys;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+}
+{
+{ /* Inline file#Sys#stdout (var7) on <var7:Sys> */
+var12 = var7->attrs[COLOR_file__Sys___stdout].val; /* _stdout on <var7:Sys> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _stdout");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/file.nit", 530);
+show_backtrace(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
+}
+}
+if (varonce) {
+var13 = varonce;
 } else {
-var2 = NEW_file__Stdout(&type_file__Stdout);
-((void (*)(val*))(var2->class->vft[COLOR_file__Stdout__init]))(var2) /* init on <var2:Stdout>*/;
-var1 = var2;
-varonce = var1;
-varonce_guard = 1;
+var14 = "\n";
+var15 = 1;
+var16 = string__NativeString__to_s_with_length(var14, var15);
+var13 = var16;
+varonce = var13;
 }
-var = var1;
+{
+file__OFStream__write(var10, var13); /* Direct call file#OFStream#write on <var10:OStream>*/
+}
+RET_LABEL:;
+}
+/* method file#Object#print for (self: Object, Object) */
+void VIRTUAL_file__Object__print(val* self, val* p0) {
+file__Object__print(self, p0); /* Direct call file#Object#print on <self:Object>*/
+RET_LABEL:;
+}
+/* method file#Object#getcwd for (self: Object): String */
+val* file__Object__getcwd(val* self) {
+val* var /* : String */;
+char* var1 /* : NativeString */;
+char* var3 /* : NativeString */;
+val* var4 /* : String */;
+{
+{ /* Inline file#Object#file_getcwd (self) on <self:Object> */
+var3 = string_NativeString_NativeString_file_getcwd_0(self);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = string__NativeString__to_s(var1);
+}
+var = var4;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method file#Object#stdout for (self: Object): OFStream */
-val* VIRTUAL_file__Object__stdout(val* self) {
-val* var /* : OFStream */;
-val* var1 /* : OFStream */;
-var1 = file__Object__stdout(self);
+/* method file#Object#getcwd for (self: Object): String */
+val* VIRTUAL_file__Object__getcwd(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = file__Object__getcwd(self);
 var = var1;
 RET_LABEL:;
 return var;
 }
-/* method file#Object#stderr for (self: Object): OFStream */
-val* file__Object__stderr(val* self) {
-val* var /* : OFStream */;
-static val* varonce;
-static int varonce_guard;
-val* var1 /* : Stderr */;
-val* var2 /* : Stderr */;
-if (varonce_guard) {
-var1 = varonce;
-} else {
-var2 = NEW_file__Stderr(&type_file__Stderr);
-((void (*)(val*))(var2->class->vft[COLOR_file__Stderr__init]))(var2) /* init on <var2:Stderr>*/;
-var1 = var2;
-varonce = var1;
-varonce_guard = 1;
-}
+/* method file#Object#file_getcwd for (self: Object): NativeString */
+char* file__Object__file_getcwd(val* self) {
+char* var /* : NativeString */;
+char* var1 /* : NativeString */;
+var1 = string_NativeString_NativeString_file_getcwd_0(self);
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method file#Object#stderr for (self: Object): OFStream */
-val* VIRTUAL_file__Object__stderr(val* self) {
-val* var /* : OFStream */;
-val* var1 /* : OFStream */;
-var1 = file__Object__stderr(self);
+/* method file#Object#file_getcwd for (self: Object): NativeString */
+char* VIRTUAL_file__Object__file_getcwd(val* self) {
+char* var /* : NativeString */;
+char* var1 /* : NativeString */;
+char* var3 /* : NativeString */;
+{ /* Inline file#Object#file_getcwd (self) on <self:Object> */
+var3 = string_NativeString_NativeString_file_getcwd_0(self);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;