csrc: regen for 32 bits platforms and Windows
[nit.git] / c_src / nitc__light_ffi_base.sep.1.c
index f183f6a..ed8ea10 100644 (file)
@@ -1,10 +1,13 @@
 #include "nitc__light_ffi_base.sep.0.h"
-/* method light_ffi_base#ToolContext#ffi_language_assignation_phase for (self: ToolContext): Phase */
+/* method light_ffi_base$ToolContext$ffi_language_assignation_phase for (self: ToolContext): Phase */
 val* nitc__light_ffi_base___ToolContext___ffi_language_assignation_phase(val* self) {
 val* var /* : Phase */;
 val* var1 /* : Phase */;
 var1 = self->attrs[COLOR_nitc__light_ffi_base__ToolContext___ffi_language_assignation_phase].val; /* _ffi_language_assignation_phase on <self:ToolContext> */
 if (unlikely(var1 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_language_assignation_phase");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 26);
 fatal_exit(1);
@@ -13,12 +16,15 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#FFILanguageAssignationPhase#languages for (self: FFILanguageAssignationPhase): Array[FFILanguage] */
+/* method light_ffi_base$FFILanguageAssignationPhase$languages for (self: FFILanguageAssignationPhase): Array[FFILanguage] */
 val* nitc___nitc__FFILanguageAssignationPhase___languages(val* self) {
 val* var /* : Array[FFILanguage] */;
 val* var1 /* : Array[FFILanguage] */;
 var1 = self->attrs[COLOR_nitc__light_ffi_base__FFILanguageAssignationPhase___languages].val; /* _languages on <self:FFILanguageAssignationPhase> */
 if (unlikely(var1 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _languages");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 36);
 fatal_exit(1);
@@ -27,7 +33,7 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#FFILanguageAssignationPhase#process_nmodule for (self: FFILanguageAssignationPhase, AModule) */
+/* method light_ffi_base$FFILanguageAssignationPhase$process_nmodule for (self: FFILanguageAssignationPhase, AModule) */
 void nitc___nitc__FFILanguageAssignationPhase___nitc__phase__Phase__process_nmodule(val* self, val* p0) {
 val* var_nmodule /* var nmodule: AModule */;
 val* var /* : ANodes[AExternCodeBlock] */;
@@ -40,11 +46,14 @@ val* var6 /* : nullable Object */;
 val* var_block /* var block: AExternCodeBlock */;
 var_nmodule = p0;
 {
-{ /* Inline parser_nodes#AModule#n_extern_code_blocks (var_nmodule) on <var_nmodule:AModule> */
+{ /* Inline parser_nodes$AModule$n_extern_code_blocks (var_nmodule) on <var_nmodule:AModule> */
 var2 = var_nmodule->attrs[COLOR_nitc__parser_nodes__AModule___n_extern_code_blocks].val; /* _n_extern_code_blocks on <var_nmodule:AModule> */
 if (unlikely(var2 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_extern_code_blocks");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 1059);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 1122);
 fatal_exit(1);
 }
 var = var2;
@@ -69,7 +78,7 @@ var6 = ((val*(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4-
 }
 var_block = var6;
 {
-nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var_block); /* Direct call light_ffi_base#FFILanguageAssignationPhase#verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
+nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var_block); /* Direct call light_ffi_base$FFILanguageAssignationPhase$verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
 }
 {
 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_4); /* next on <var_4:Iterator[AExternCodeBlock]>*/
@@ -81,7 +90,7 @@ BREAK_label: (void)0;
 }
 RET_LABEL:;
 }
-/* method light_ffi_base#FFILanguageAssignationPhase#process_npropdef for (self: FFILanguageAssignationPhase, APropdef) */
+/* method light_ffi_base$FFILanguageAssignationPhase$process_npropdef for (self: FFILanguageAssignationPhase, APropdef) */
 void nitc___nitc__FFILanguageAssignationPhase___nitc__phase__Phase__process_npropdef(val* self, val* p0) {
 val* var_npropdef /* var npropdef: APropdef */;
 short int var /* : Bool */;
@@ -106,7 +115,7 @@ var = var_npropdef->type->type_table[cltype] == idtype;
 }
 if (var){
 {
-{ /* Inline parser_nodes#AMethPropdef#n_extern_code_block (var_npropdef) on <var_npropdef:APropdef(AMethPropdef)> */
+{ /* Inline parser_nodes$AMethPropdef$n_extern_code_block (var_npropdef) on <var_npropdef:APropdef(AMethPropdef)> */
 var3 = var_npropdef->attrs[COLOR_nitc__parser_nodes__AMethPropdef___n_extern_code_block].val; /* _n_extern_code_block on <var_npropdef:APropdef(AMethPropdef)> */
 var1 = var3;
 RET_LABEL2:(void)0;
@@ -119,7 +128,7 @@ var4 = 0; /* is null */
 var4 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_code_block,((val*)NULL)) on <var_code_block:nullable AExternCodeBlock> */
+{ /* Inline kernel$Object$!= (var_code_block,((val*)NULL)) on <var_code_block:nullable AExternCodeBlock> */
 var_other = ((val*)NULL);
 {
 var7 = ((short int(*)(val* self, val* p0))(var_code_block->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_code_block, var_other); /* == on <var_code_block:nullable AExternCodeBlock(AExternCodeBlock)>*/
@@ -133,7 +142,7 @@ var4 = var5;
 }
 if (var4){
 {
-nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var_code_block); /* Direct call light_ffi_base#FFILanguageAssignationPhase#verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
+nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var_code_block); /* Direct call light_ffi_base$FFILanguageAssignationPhase$verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
 }
 } else {
 }
@@ -141,7 +150,7 @@ nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var
 }
 RET_LABEL:;
 }
-/* method light_ffi_base#FFILanguageAssignationPhase#process_nclassdef for (self: FFILanguageAssignationPhase, AClassdef) */
+/* method light_ffi_base$FFILanguageAssignationPhase$process_nclassdef for (self: FFILanguageAssignationPhase, AClassdef) */
 void nitc___nitc__FFILanguageAssignationPhase___nitc__phase__Phase__process_nclassdef(val* self, val* p0) {
 val* var_nclassdef /* var nclassdef: AClassdef */;
 short int var /* : Bool */;
@@ -170,7 +179,7 @@ var1 = var_nclassdef->type->type_table[cltype] == idtype;
 var_ = var1;
 if (var1){
 {
-{ /* Inline parser_nodes#AStdClassdef#n_extern_code_block (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
+{ /* Inline parser_nodes$AStdClassdef$n_extern_code_block (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
 var4 = var_nclassdef->attrs[COLOR_nitc__parser_nodes__AStdClassdef___n_extern_code_block].val; /* _n_extern_code_block on <var_nclassdef:AClassdef(AStdClassdef)> */
 var2 = var4;
 RET_LABEL3:(void)0;
@@ -182,7 +191,7 @@ var5 = 0; /* is null */
 var5 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var2,((val*)NULL)) on <var2:nullable AExternCodeBlock> */
+{ /* Inline kernel$Object$!= (var2,((val*)NULL)) on <var2:nullable AExternCodeBlock> */
 var_other = ((val*)NULL);
 {
 var8 = ((short int(*)(val* self, val* p0))(var2->class->vft[COLOR_core__kernel__Object___61d_61d]))(var2, var_other); /* == on <var2:nullable AExternCodeBlock(AExternCodeBlock)>*/
@@ -200,25 +209,28 @@ var = var_;
 }
 if (var){
 {
-{ /* Inline parser_nodes#AStdClassdef#n_extern_code_block (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
+{ /* Inline parser_nodes$AStdClassdef$n_extern_code_block (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
 var12 = var_nclassdef->attrs[COLOR_nitc__parser_nodes__AStdClassdef___n_extern_code_block].val; /* _n_extern_code_block on <var_nclassdef:AClassdef(AStdClassdef)> */
 var10 = var12;
 RET_LABEL11:(void)0;
 }
 }
 if (unlikely(var10 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Cast failed");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 59);
 fatal_exit(1);
 }
 {
-nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var10); /* Direct call light_ffi_base#FFILanguageAssignationPhase#verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
+nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var10); /* Direct call light_ffi_base$FFILanguageAssignationPhase$verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
 }
 } else {
 }
 RET_LABEL:;
 }
-/* method light_ffi_base#FFILanguageAssignationPhase#verify_foreign_code_on_node for (self: FFILanguageAssignationPhase, AExternCodeBlock) */
+/* method light_ffi_base$FFILanguageAssignationPhase$verify_foreign_code_on_node for (self: FFILanguageAssignationPhase, AExternCodeBlock) */
 void nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(val* self, val* p0) {
 val* var_n /* var n: AExternCodeBlock */;
 short int var_found /* var found: Bool */;
@@ -240,25 +252,36 @@ val* var13 /* : Location */;
 val* var15 /* : Location */;
 static val* varonce;
 val* var16 /* : String */;
-char* var17 /* : NativeString */;
+char* var17 /* : CString */;
 val* var18 /* : String */;
-val* var19 /* : Message */;
-short int var21 /* : Bool */;
-val* var22 /* : ToolContext */;
-val* var24 /* : ToolContext */;
-val* var25 /* : Location */;
-val* var27 /* : Location */;
-static val* varonce28;
-val* var29 /* : String */;
-char* var30 /* : NativeString */;
-val* var31 /* : String */;
-val* var32 /* : Message */;
+val* var19 /* : nullable Int */;
+val* var20 /* : nullable Int */;
+val* var21 /* : nullable Bool */;
+val* var22 /* : nullable Bool */;
+val* var23 /* : Message */;
+short int var25 /* : Bool */;
+val* var26 /* : ToolContext */;
+val* var28 /* : ToolContext */;
+val* var29 /* : Location */;
+val* var31 /* : Location */;
+static val* varonce32;
+val* var33 /* : String */;
+char* var34 /* : CString */;
+val* var35 /* : String */;
+val* var36 /* : nullable Int */;
+val* var37 /* : nullable Int */;
+val* var38 /* : nullable Bool */;
+val* var39 /* : nullable Bool */;
+val* var40 /* : Message */;
 var_n = p0;
 var_found = 0;
 {
-{ /* Inline light_ffi_base#FFILanguageAssignationPhase#languages (self) on <self:FFILanguageAssignationPhase> */
+{ /* Inline light_ffi_base$FFILanguageAssignationPhase$languages (self) on <self:FFILanguageAssignationPhase> */
 var2 = self->attrs[COLOR_nitc__light_ffi_base__FFILanguageAssignationPhase___languages].val; /* _languages on <self:FFILanguageAssignationPhase> */
 if (unlikely(var2 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _languages");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 36);
 fatal_exit(1);
@@ -297,11 +320,14 @@ var8 = var_9;
 }
 if (var8){
 {
-{ /* Inline phase#Phase#toolcontext (self) on <self:FFILanguageAssignationPhase> */
+{ /* Inline phase$Phase$toolcontext (self) on <self:FFILanguageAssignationPhase> */
 var12 = self->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <self:FFILanguageAssignationPhase> */
 if (unlikely(var12 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 200);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 210);
 fatal_exit(1);
 }
 var10 = var12;
@@ -309,11 +335,14 @@ RET_LABEL11:(void)0;
 }
 }
 {
-{ /* Inline parser_nodes#ANode#location (var_n) on <var_n:AExternCodeBlock> */
+{ /* Inline parser_nodes$ANode$location (var_n) on <var_n:AExternCodeBlock> */
 var15 = var_n->attrs[COLOR_nitc__parser_nodes__ANode___location].val; /* _location on <var_n:AExternCodeBlock> */
 if (unlikely(var15 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 24);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 25);
 fatal_exit(1);
 }
 var13 = var15;
@@ -324,19 +353,23 @@ if (likely(varonce!=NULL)) {
 var16 = varonce;
 } else {
 var17 = "FFI Error: two languages identified as possible handlers.";
-var18 = core__flat___NativeString___to_s_full(var17, 57l, 57l);
+var19 = (val*)(57l<<2|1);
+var20 = (val*)(57l<<2|1);
+var21 = (val*)((long)(0)<<2|3);
+var22 = (val*)((long)(0)<<2|3);
+var18 = core__flat___CString___to_s_unsafe(var17, var19, var20, var21, var22);
 var16 = var18;
 varonce = var16;
 }
 {
-var19 = nitc___nitc__ToolContext___error(var10, var13, var16);
+var23 = nitc___nitc__ToolContext___error(var10, var13, var16);
 }
 } else {
 }
 {
-{ /* Inline light_ffi_base#AExternCodeBlock#language= (var_n,var_v) on <var_n:AExternCodeBlock> */
+{ /* Inline light_ffi_base$AExternCodeBlock$language= (var_n,var_v) on <var_n:AExternCodeBlock> */
 var_n->attrs[COLOR_nitc__light_ffi_base__AExternCodeBlock___language].val = var_v; /* _language on <var_n:AExternCodeBlock> */
-RET_LABEL20:(void)0;
+RET_LABEL24:(void)0;
 }
 }
 var_found = 1;
@@ -350,53 +383,66 @@ BREAK_label: (void)0;
 {
 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_4); /* finish on <var_4:IndexedIterator[FFILanguage]>*/
 }
-var21 = !var_found;
-if (var21){
+var25 = !var_found;
+if (var25){
 {
-{ /* Inline phase#Phase#toolcontext (self) on <self:FFILanguageAssignationPhase> */
-var24 = self->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <self:FFILanguageAssignationPhase> */
-if (unlikely(var24 == NULL)) {
+{ /* Inline phase$Phase$toolcontext (self) on <self:FFILanguageAssignationPhase> */
+var28 = self->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <self:FFILanguageAssignationPhase> */
+if (unlikely(var28 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 200);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 210);
 fatal_exit(1);
 }
-var22 = var24;
-RET_LABEL23:(void)0;
+var26 = var28;
+RET_LABEL27:(void)0;
 }
 }
 {
-{ /* Inline parser_nodes#ANode#location (var_n) on <var_n:AExternCodeBlock> */
-var27 = var_n->attrs[COLOR_nitc__parser_nodes__ANode___location].val; /* _location on <var_n:AExternCodeBlock> */
-if (unlikely(var27 == NULL)) {
+{ /* Inline parser_nodes$ANode$location (var_n) on <var_n:AExternCodeBlock> */
+var31 = var_n->attrs[COLOR_nitc__parser_nodes__ANode___location].val; /* _location on <var_n:AExternCodeBlock> */
+if (unlikely(var31 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 24);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 25);
 fatal_exit(1);
 }
-var25 = var27;
-RET_LABEL26:(void)0;
+var29 = var31;
+RET_LABEL30:(void)0;
 }
 }
-if (likely(varonce28!=NULL)) {
-var29 = varonce28;
+if (likely(varonce32!=NULL)) {
+var33 = varonce32;
 } else {
-var30 = "FFI Error: unsupported language.";
-var31 = core__flat___NativeString___to_s_full(var30, 32l, 32l);
-var29 = var31;
-varonce28 = var29;
+var34 = "FFI Error: unsupported language.";
+var36 = (val*)(32l<<2|1);
+var37 = (val*)(32l<<2|1);
+var38 = (val*)((long)(0)<<2|3);
+var39 = (val*)((long)(0)<<2|3);
+var35 = core__flat___CString___to_s_unsafe(var34, var36, var37, var38, var39);
+var33 = var35;
+varonce32 = var33;
 }
 {
-var32 = nitc___nitc__ToolContext___error(var22, var25, var29);
+var40 = nitc___nitc__ToolContext___error(var26, var29, var33);
 }
 } else {
 }
 RET_LABEL:;
 }
-/* method light_ffi_base#MModule#ffi_files for (self: MModule): Array[ExternFile] */
+/* method light_ffi_base$MModule$ffi_files for (self: MModule): Array[ExternFile] */
 val* nitc__light_ffi_base___MModule___ffi_files(val* self) {
 val* var /* : Array[ExternFile] */;
 val* var1 /* : Array[ExternFile] */;
 var1 = self->attrs[COLOR_nitc__light_ffi_base__MModule___ffi_files].val; /* _ffi_files on <self:MModule> */
 if (unlikely(var1 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_files");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 82);
 fatal_exit(1);
@@ -405,7 +451,7 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#AExternCodeBlock#language_name for (self: AExternCodeBlock): nullable String */
+/* method light_ffi_base$AExternCodeBlock$language_name for (self: AExternCodeBlock): nullable String */
 val* nitc__light_ffi_base___AExternCodeBlock___language_name(val* self) {
 val* var /* : nullable String */;
 val* var1 /* : nullable AInLanguage */;
@@ -421,7 +467,7 @@ val* var13 /* : TString */;
 val* var15 /* : TString */;
 val* var16 /* : String */;
 {
-{ /* Inline parser_nodes#AExternCodeBlock#n_in_language (self) on <self:AExternCodeBlock> */
+{ /* Inline parser_nodes$AExternCodeBlock$n_in_language (self) on <self:AExternCodeBlock> */
 var3 = self->attrs[COLOR_nitc__parser_nodes__AExternCodeBlock___n_in_language].val; /* _n_in_language on <self:AExternCodeBlock> */
 var1 = var3;
 RET_LABEL2:(void)0;
@@ -433,10 +479,10 @@ var4 = 1; /* is null */
 var4 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var1,((val*)NULL)) on <var1:nullable AInLanguage> */
+{ /* Inline kernel$Object$== (var1,((val*)NULL)) on <var1:nullable AInLanguage> */
 var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var1,var_other) on <var1:nullable AInLanguage(AInLanguage)> */
+{ /* Inline kernel$Object$is_same_instance (var1,var_other) on <var1:nullable AInLanguage(AInLanguage)> */
 var9 = var1 == var_other;
 var7 = var9;
 goto RET_LABEL8;
@@ -455,27 +501,36 @@ goto RET_LABEL;
 } else {
 }
 {
-{ /* Inline parser_nodes#AExternCodeBlock#n_in_language (self) on <self:AExternCodeBlock> */
+{ /* Inline parser_nodes$AExternCodeBlock$n_in_language (self) on <self:AExternCodeBlock> */
 var12 = self->attrs[COLOR_nitc__parser_nodes__AExternCodeBlock___n_in_language].val; /* _n_in_language on <self:AExternCodeBlock> */
 var10 = var12;
 RET_LABEL11:(void)0;
 }
 }
 if (var10 == NULL) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 90);
 fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#AInLanguage#n_string (var10) on <var10:nullable AInLanguage> */
+{ /* Inline parser_nodes$AInLanguage$n_string (var10) on <var10:nullable AInLanguage> */
 if (unlikely(var10 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 2849);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 2930);
 fatal_exit(1);
 }
 var15 = var10->attrs[COLOR_nitc__parser_nodes__AInLanguage___n_string].val; /* _n_string on <var10:nullable AInLanguage> */
 if (unlikely(var15 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_string");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 2849);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 2930);
 fatal_exit(1);
 }
 var13 = var15;
@@ -490,14 +545,14 @@ goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#AExternCodeBlock#language_name_lowered for (self: AExternCodeBlock): nullable String */
+/* method light_ffi_base$AExternCodeBlock$language_name_lowered for (self: AExternCodeBlock): nullable String */
 val* nitc__light_ffi_base___AExternCodeBlock___language_name_lowered(val* self) {
 val* var /* : nullable String */;
 val* var1 /* : nullable String */;
 short int var2 /* : Bool */;
 short int var3 /* : Bool */;
 val* var4 /* : nullable String */;
-val* var5 /* : String */;
+val* var5 /* : Text */;
 {
 var1 = nitc__light_ffi_base___AExternCodeBlock___language_name(self);
 }
@@ -519,29 +574,35 @@ goto RET_LABEL;
 var4 = nitc__light_ffi_base___AExternCodeBlock___language_name(self);
 }
 if (var4 == NULL) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 96);
 fatal_exit(1);
 } else {
-var5 = ((val*(*)(val* self))(var4->class->vft[COLOR_core__abstract_text__String__to_lower]))(var4); /* to_lower on <var4:nullable String>*/
+var5 = ((val*(*)(val* self))(var4->class->vft[COLOR_core__abstract_text__Text__to_lower]))(var4); /* to_lower on <var4:nullable String>*/
 }
 var = var5;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#AExternCodeBlock#code for (self: AExternCodeBlock): String */
+/* method light_ffi_base$AExternCodeBlock$code for (self: AExternCodeBlock): String */
 val* nitc__light_ffi_base___AExternCodeBlock___code(val* self) {
 val* var /* : String */;
 val* var1 /* : TExternCodeSegment */;
 val* var3 /* : TExternCodeSegment */;
 val* var4 /* : String */;
 {
-{ /* Inline parser_nodes#AExternCodeBlock#n_extern_code_segment (self) on <self:AExternCodeBlock> */
+{ /* Inline parser_nodes$AExternCodeBlock$n_extern_code_segment (self) on <self:AExternCodeBlock> */
 var3 = self->attrs[COLOR_nitc__parser_nodes__AExternCodeBlock___n_extern_code_segment].val; /* _n_extern_code_segment on <self:AExternCodeBlock> */
 if (unlikely(var3 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_extern_code_segment");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 2860);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 2941);
 fatal_exit(1);
 }
 var1 = var3;
@@ -556,7 +617,7 @@ goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#AExternCodeBlock#language for (self: AExternCodeBlock): nullable FFILanguage */
+/* method light_ffi_base$AExternCodeBlock$language for (self: AExternCodeBlock): nullable FFILanguage */
 val* nitc__light_ffi_base___AExternCodeBlock___language(val* self) {
 val* var /* : nullable FFILanguage */;
 val* var1 /* : nullable FFILanguage */;
@@ -565,17 +626,20 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#AExternCodeBlock#language= for (self: AExternCodeBlock, nullable FFILanguage) */
+/* method light_ffi_base$AExternCodeBlock$language= for (self: AExternCodeBlock, nullable FFILanguage) */
 void nitc__light_ffi_base___AExternCodeBlock___language_61d(val* self, val* p0) {
 self->attrs[COLOR_nitc__light_ffi_base__AExternCodeBlock___language].val = p0; /* _language on <self:AExternCodeBlock> */
 RET_LABEL:;
 }
-/* method light_ffi_base#FFILanguage#ffi_language_assignation_phase for (self: FFILanguage): FFILanguageAssignationPhase */
+/* method light_ffi_base$FFILanguage$ffi_language_assignation_phase for (self: FFILanguage): FFILanguageAssignationPhase */
 val* nitc___nitc__FFILanguage___ffi_language_assignation_phase(val* self) {
 val* var /* : FFILanguageAssignationPhase */;
 val* var1 /* : FFILanguageAssignationPhase */;
 var1 = self->attrs[COLOR_nitc__light_ffi_base__FFILanguage___ffi_language_assignation_phase].val; /* _ffi_language_assignation_phase on <self:FFILanguage> */
 if (unlikely(var1 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_language_assignation_phase");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 109);
 fatal_exit(1);
@@ -584,12 +648,12 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#FFILanguage#ffi_language_assignation_phase= for (self: FFILanguage, FFILanguageAssignationPhase) */
+/* method light_ffi_base$FFILanguage$ffi_language_assignation_phase= for (self: FFILanguage, FFILanguageAssignationPhase) */
 void nitc___nitc__FFILanguage___ffi_language_assignation_phase_61d(val* self, val* p0) {
 self->attrs[COLOR_nitc__light_ffi_base__FFILanguage___ffi_language_assignation_phase].val = p0; /* _ffi_language_assignation_phase on <self:FFILanguage> */
 RET_LABEL:;
 }
-/* method light_ffi_base#FFILanguage#init for (self: FFILanguage) */
+/* method light_ffi_base$FFILanguage$init for (self: FFILanguage) */
 void nitc___nitc__FFILanguage___core__kernel__Object__init(val* self) {
 val* var /* : FFILanguageAssignationPhase */;
 val* var2 /* : FFILanguageAssignationPhase */;
@@ -599,9 +663,12 @@ val* var5 /* : Array[FFILanguage] */;
 ((void(*)(val* self))(self->class->vft[COLOR_nitc___nitc__FFILanguage___core__kernel__Object__init]))(self); /* init on <self:FFILanguage>*/
 }
 {
-{ /* Inline light_ffi_base#FFILanguage#ffi_language_assignation_phase (self) on <self:FFILanguage> */
+{ /* Inline light_ffi_base$FFILanguage$ffi_language_assignation_phase (self) on <self:FFILanguage> */
 var2 = self->attrs[COLOR_nitc__light_ffi_base__FFILanguage___ffi_language_assignation_phase].val; /* _ffi_language_assignation_phase on <self:FFILanguage> */
 if (unlikely(var2 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_language_assignation_phase");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 109);
 fatal_exit(1);
@@ -611,9 +678,12 @@ RET_LABEL1:(void)0;
 }
 }
 {
-{ /* Inline light_ffi_base#FFILanguageAssignationPhase#languages (var) on <var:FFILanguageAssignationPhase> */
+{ /* Inline light_ffi_base$FFILanguageAssignationPhase$languages (var) on <var:FFILanguageAssignationPhase> */
 var5 = var->attrs[COLOR_nitc__light_ffi_base__FFILanguageAssignationPhase___languages].val; /* _languages on <var:FFILanguageAssignationPhase> */
 if (unlikely(var5 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _languages");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 36);
 fatal_exit(1);
@@ -623,11 +693,11 @@ RET_LABEL4:(void)0;
 }
 }
 {
-core___core__Array___core__abstract_collection__SimpleCollection__add(var3, self); /* Direct call array#Array#add on <var3:Array[FFILanguage]>*/
+core___core__Array___core__abstract_collection__SimpleCollection__add(var3, self); /* Direct call array$Array$add on <var3:Array[FFILanguage]>*/
 }
 RET_LABEL:;
 }
-/* method light_ffi_base#TString#without_quotes for (self: TString): String */
+/* method light_ffi_base$TString$without_quotes for (self: TString): String */
 val* nitc__light_ffi_base___TString___without_quotes(val* self) {
 val* var /* : String */;
 val* var1 /* : String */;
@@ -655,14 +725,14 @@ var1 = nitc__lexer_work___Token___text(self);
 var2 = ((long(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__Text__length]))(var1); /* length on <var1:String>*/
 }
 {
-{ /* Inline kernel#Int#>= (var2,2l) on <var2:Int> */
+{ /* Inline kernel$Int$>= (var2,2l) on <var2:Int> */
 /* Covariant cast for argument 0 (i) <2l:Int> isa OTHER */
 /* <2l:Int> isa OTHER */
 var5 = 1; /* easy <2l:Int> isa OTHER*/
 if (unlikely(!var5)) {
 var_class_name = type_core__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 729);
+PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 726);
 fatal_exit(1);
 }
 var6 = var2 >= 2l;
@@ -672,6 +742,9 @@ RET_LABEL4:(void)0;
 }
 }
 if (unlikely(!var3)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Assert failed");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 142);
 fatal_exit(1);
@@ -686,14 +759,14 @@ var8 = nitc__lexer_work___Token___text(self);
 var9 = ((long(*)(val* self))(var8->class->vft[COLOR_core__abstract_text__Text__length]))(var8); /* length on <var8:String>*/
 }
 {
-{ /* Inline kernel#Int#- (var9,2l) on <var9:Int> */
+{ /* Inline kernel$Int$- (var9,2l) on <var9:Int> */
 /* Covariant cast for argument 0 (i) <2l:Int> isa OTHER */
 /* <2l:Int> isa OTHER */
 var12 = 1; /* easy <2l:Int> isa OTHER*/
 if (unlikely(!var12)) {
 var_class_name15 = type_core__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name15);
-PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 734);
+PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
 fatal_exit(1);
 }
 var16 = var9 - 2l;
@@ -710,7 +783,7 @@ goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#TExternCodeSegment#without_guard for (self: TExternCodeSegment): String */
+/* method light_ffi_base$TExternCodeSegment$without_guard for (self: TExternCodeSegment): String */
 val* nitc__light_ffi_base___TExternCodeSegment___without_guard(val* self) {
 val* var /* : String */;
 val* var1 /* : String */;
@@ -738,14 +811,14 @@ var1 = nitc__lexer_work___Token___text(self);
 var2 = ((long(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__Text__length]))(var1); /* length on <var1:String>*/
 }
 {
-{ /* Inline kernel#Int#>= (var2,4l) on <var2:Int> */
+{ /* Inline kernel$Int$>= (var2,4l) on <var2:Int> */
 /* Covariant cast for argument 0 (i) <4l:Int> isa OTHER */
 /* <4l:Int> isa OTHER */
 var5 = 1; /* easy <4l:Int> isa OTHER*/
 if (unlikely(!var5)) {
 var_class_name = type_core__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 729);
+PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 726);
 fatal_exit(1);
 }
 var6 = var2 >= 4l;
@@ -755,6 +828,9 @@ RET_LABEL4:(void)0;
 }
 }
 if (unlikely(!var3)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Assert failed");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 151);
 fatal_exit(1);
@@ -769,14 +845,14 @@ var8 = nitc__lexer_work___Token___text(self);
 var9 = ((long(*)(val* self))(var8->class->vft[COLOR_core__abstract_text__Text__length]))(var8); /* length on <var8:String>*/
 }
 {
-{ /* Inline kernel#Int#- (var9,4l) on <var9:Int> */
+{ /* Inline kernel$Int$- (var9,4l) on <var9:Int> */
 /* Covariant cast for argument 0 (i) <4l:Int> isa OTHER */
 /* <4l:Int> isa OTHER */
 var12 = 1; /* easy <4l:Int> isa OTHER*/
 if (unlikely(!var12)) {
 var_class_name15 = type_core__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name15);
-PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 734);
+PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
 fatal_exit(1);
 }
 var16 = var9 - 4l;
@@ -793,7 +869,7 @@ goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method light_ffi_base#CCompilationUnit#write_as_impl for (self: CCompilationUnit, MModule, String) */
+/* method light_ffi_base$CCompilationUnit$write_as_impl for (self: CCompilationUnit, MModule, String) */
 void nitc__light_ffi_base___CCompilationUnit___write_as_impl(val* self, val* p0, val* p1) {
 val* var_mmodule /* var mmodule: MModule */;
 val* var_compdir /* var compdir: String */;
@@ -801,100 +877,156 @@ val* var /* : NativeArray[String] */;
 static val* varonce;
 static val* varonce1;
 val* var2 /* : String */;
-char* var3 /* : NativeString */;
+char* var3 /* : CString */;
 val* var4 /* : String */;
-val* var5 /* : String */;
-val* var6 /* : String */;
-val* var_base_name /* var base_name: String */;
-val* var8 /* : NativeArray[String] */;
-static val* varonce7;
-static val* varonce9;
+val* var5 /* : nullable Int */;
+val* var6 /* : nullable Int */;
+val* var7 /* : nullable Bool */;
+val* var8 /* : nullable Bool */;
+val* var9 /* : String */;
 val* var10 /* : String */;
-char* var11 /* : NativeString */;
-val* var12 /* : String */;
-val* var13 /* : String */;
-val* var_h_file /* var h_file: String */;
-val* var15 /* : NativeArray[String] */;
-static val* varonce14;
-static val* varonce16;
-val* var17 /* : String */;
-char* var18 /* : NativeString */;
-val* var19 /* : String */;
-val* var20 /* : String */;
+val* var_base_name /* var base_name: String */;
+val* var12 /* : NativeArray[String] */;
+static val* varonce11;
+static val* varonce13;
+val* var14 /* : String */;
+char* var15 /* : CString */;
+val* var16 /* : String */;
+val* var17 /* : nullable Int */;
+val* var18 /* : nullable Int */;
+val* var19 /* : nullable Bool */;
+val* var20 /* : nullable Bool */;
 val* var21 /* : String */;
-val* var22 /* : String */;
-val* var_guard /* var guard: String */;
-val* var24 /* : NativeArray[String] */;
-static val* varonce23;
-static val* varonce25;
-val* var26 /* : String */;
-char* var27 /* : NativeString */;
-val* var28 /* : String */;
-val* var29 /* : String */;
-val* var30 /* : Array[String] */;
-val* var_ /* var : Array[String] */;
-static val* varonce31;
+val* var_h_file /* var h_file: String */;
+val* var23 /* : NativeArray[String] */;
+static val* varonce22;
+static val* varonce24;
+val* var25 /* : String */;
+char* var26 /* : CString */;
+val* var27 /* : String */;
+val* var28 /* : nullable Int */;
+val* var29 /* : nullable Int */;
+val* var30 /* : nullable Bool */;
+val* var31 /* : nullable Bool */;
 val* var32 /* : String */;
-char* var33 /* : NativeString */;
+val* var33 /* : Text */;
 val* var34 /* : String */;
+val* var_guard /* var guard: String */;
 val* var36 /* : NativeArray[String] */;
 static val* varonce35;
 static val* varonce37;
 val* var38 /* : String */;
-char* var39 /* : NativeString */;
+char* var39 /* : CString */;
 val* var40 /* : String */;
-val* var41 /* : String */;
-val* var_c_file /* var c_file: String */;
-val* var43 /* : NativeArray[String] */;
-static val* varonce42;
-static val* varonce44;
+val* var41 /* : nullable Int */;
+val* var42 /* : nullable Int */;
+val* var43 /* : nullable Bool */;
+val* var44 /* : nullable Bool */;
 val* var45 /* : String */;
-char* var46 /* : NativeString */;
-val* var47 /* : String */;
+val* var46 /* : Array[String] */;
+val* var_ /* var : Array[String] */;
+static val* varonce47;
 val* var48 /* : String */;
-val* var49 /* : Array[String] */;
-val* var_50 /* var : Array[String] */;
-static val* varonce51;
-val* var52 /* : String */;
-char* var53 /* : NativeString */;
-val* var54 /* : String */;
+char* var49 /* : CString */;
+val* var50 /* : String */;
+val* var51 /* : nullable Int */;
+val* var52 /* : nullable Int */;
+val* var53 /* : nullable Bool */;
+val* var54 /* : nullable Bool */;
+val* var56 /* : NativeArray[String] */;
 static val* varonce55;
-val* var56 /* : String */;
-char* var57 /* : NativeString */;
+static val* varonce57;
 val* var58 /* : String */;
-static val* varonce59;
+char* var59 /* : CString */;
 val* var60 /* : String */;
-char* var61 /* : NativeString */;
-val* var62 /* : String */;
-val* var64 /* : NativeArray[String] */;
-static val* varonce63;
-static val* varonce65;
-val* var66 /* : String */;
-char* var67 /* : NativeString */;
-val* var68 /* : String */;
-static val* varonce69;
-val* var70 /* : String */;
-char* var71 /* : NativeString */;
-val* var72 /* : String */;
-val* var73 /* : String */;
-val* var74 /* : Array[String] */;
-val* var76 /* : Array[String] */;
-val* var78 /* : NativeArray[String] */;
-static val* varonce77;
+val* var61 /* : nullable Int */;
+val* var62 /* : nullable Int */;
+val* var63 /* : nullable Bool */;
+val* var64 /* : nullable Bool */;
+val* var65 /* : String */;
+val* var_c_file /* var c_file: String */;
+val* var67 /* : NativeArray[String] */;
+static val* varonce66;
+static val* varonce68;
+val* var69 /* : String */;
+char* var70 /* : CString */;
+val* var71 /* : String */;
+val* var72 /* : nullable Int */;
+val* var73 /* : nullable Int */;
+val* var74 /* : nullable Bool */;
+val* var75 /* : nullable Bool */;
+val* var76 /* : String */;
+val* var77 /* : Array[String] */;
+val* var_78 /* var : Array[String] */;
 static val* varonce79;
 val* var80 /* : String */;
-char* var81 /* : NativeString */;
+char* var81 /* : CString */;
 val* var82 /* : String */;
-val* var83 /* : String */;
+val* var83 /* : nullable Int */;
+val* var84 /* : nullable Int */;
+val* var85 /* : nullable Bool */;
+val* var86 /* : nullable Bool */;
+static val* varonce87;
+val* var88 /* : String */;
+char* var89 /* : CString */;
+val* var90 /* : String */;
+val* var91 /* : nullable Int */;
+val* var92 /* : nullable Int */;
+val* var93 /* : nullable Bool */;
+val* var94 /* : nullable Bool */;
+static val* varonce95;
+val* var96 /* : String */;
+char* var97 /* : CString */;
+val* var98 /* : String */;
+val* var99 /* : nullable Int */;
+val* var100 /* : nullable Int */;
+val* var101 /* : nullable Bool */;
+val* var102 /* : nullable Bool */;
+val* var104 /* : NativeArray[String] */;
+static val* varonce103;
+static val* varonce105;
+val* var106 /* : String */;
+char* var107 /* : CString */;
+val* var108 /* : String */;
+val* var109 /* : nullable Int */;
+val* var110 /* : nullable Int */;
+val* var111 /* : nullable Bool */;
+val* var112 /* : nullable Bool */;
+static val* varonce113;
+val* var114 /* : String */;
+char* var115 /* : CString */;
+val* var116 /* : String */;
+val* var117 /* : nullable Int */;
+val* var118 /* : nullable Int */;
+val* var119 /* : nullable Bool */;
+val* var120 /* : nullable Bool */;
+val* var121 /* : String */;
+val* var122 /* : Array[String] */;
+val* var124 /* : Array[String] */;
+val* var126 /* : NativeArray[String] */;
+static val* varonce125;
+static val* varonce127;
+val* var128 /* : String */;
+char* var129 /* : CString */;
+val* var130 /* : String */;
+val* var131 /* : nullable Int */;
+val* var132 /* : nullable Int */;
+val* var133 /* : nullable Bool */;
+val* var134 /* : nullable Bool */;
+val* var135 /* : String */;
 var_mmodule = p0;
 var_compdir = p1;
 if (unlikely(varonce==NULL)) {
-var = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
+var = NEW_core__NativeArray((int)2l, &type_core__NativeArray__core__String);
 if (likely(varonce1!=NULL)) {
 var2 = varonce1;
 } else {
 var3 = "._ffi";
-var4 = core__flat___NativeString___to_s_full(var3, 5l, 5l);
+var5 = (val*)(5l<<2|1);
+var6 = (val*)(5l<<2|1);
+var7 = (val*)((long)(0)<<2|3);
+var8 = (val*)((long)(0)<<2|3);
+var4 = core__flat___CString___to_s_unsafe(var3, var5, var6, var7, var8);
 var2 = var4;
 varonce1 = var2;
 }
@@ -904,256 +1036,307 @@ var = varonce;
 varonce = NULL;
 }
 {
-var5 = nitc___nitc__MModule___nitc__model_base__MEntity__c_name(var_mmodule);
+var9 = nitc___nitc__MModule___nitc__model_base__MEntity__c_name(var_mmodule);
 }
-((struct instance_core__NativeArray*)var)->values[0]=var5;
+((struct instance_core__NativeArray*)var)->values[0]=var9;
 {
-var6 = ((val*(*)(val* self))(var->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var); /* native_to_s on <var:NativeArray[String]>*/
+var10 = ((val*(*)(val* self))(var->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var); /* native_to_s on <var:NativeArray[String]>*/
 }
 varonce = var;
-var_base_name = var6;
-if (unlikely(varonce7==NULL)) {
-var8 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
-if (likely(varonce9!=NULL)) {
-var10 = varonce9;
-} else {
-var11 = ".h";
-var12 = core__flat___NativeString___to_s_full(var11, 2l, 2l);
-var10 = var12;
-varonce9 = var10;
-}
-((struct instance_core__NativeArray*)var8)->values[1]=var10;
-} else {
-var8 = varonce7;
-varonce7 = NULL;
-}
-((struct instance_core__NativeArray*)var8)->values[0]=var_base_name;
-{
-var13 = ((val*(*)(val* self))(var8->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var8); /* native_to_s on <var8:NativeArray[String]>*/
-}
-varonce7 = var8;
-var_h_file = var13;
-if (unlikely(varonce14==NULL)) {
-var15 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
-if (likely(varonce16!=NULL)) {
-var17 = varonce16;
+var_base_name = var10;
+if (unlikely(varonce11==NULL)) {
+var12 = NEW_core__NativeArray((int)2l, &type_core__NativeArray__core__String);
+if (likely(varonce13!=NULL)) {
+var14 = varonce13;
+} else {
+var15 = ".h";
+var17 = (val*)(2l<<2|1);
+var18 = (val*)(2l<<2|1);
+var19 = (val*)((long)(0)<<2|3);
+var20 = (val*)((long)(0)<<2|3);
+var16 = core__flat___CString___to_s_unsafe(var15, var17, var18, var19, var20);
+var14 = var16;
+varonce13 = var14;
+}
+((struct instance_core__NativeArray*)var12)->values[1]=var14;
+} else {
+var12 = varonce11;
+varonce11 = NULL;
+}
+((struct instance_core__NativeArray*)var12)->values[0]=var_base_name;
+{
+var21 = ((val*(*)(val* self))(var12->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var12); /* native_to_s on <var12:NativeArray[String]>*/
+}
+varonce11 = var12;
+var_h_file = var21;
+if (unlikely(varonce22==NULL)) {
+var23 = NEW_core__NativeArray((int)2l, &type_core__NativeArray__core__String);
+if (likely(varonce24!=NULL)) {
+var25 = varonce24;
 } else {
-var18 = "_NIT_H";
-var19 = core__flat___NativeString___to_s_full(var18, 6l, 6l);
-var17 = var19;
-varonce16 = var17;
+var26 = "_NIT_H";
+var28 = (val*)(6l<<2|1);
+var29 = (val*)(6l<<2|1);
+var30 = (val*)((long)(0)<<2|3);
+var31 = (val*)((long)(0)<<2|3);
+var27 = core__flat___CString___to_s_unsafe(var26, var28, var29, var30, var31);
+var25 = var27;
+varonce24 = var25;
 }
-((struct instance_core__NativeArray*)var15)->values[1]=var17;
+((struct instance_core__NativeArray*)var23)->values[1]=var25;
 } else {
-var15 = varonce14;
-varonce14 = NULL;
+var23 = varonce22;
+varonce22 = NULL;
 }
 {
-var20 = nitc___nitc__MModule___nitc__model_base__MEntity__c_name(var_mmodule);
+var32 = nitc___nitc__MModule___nitc__model_base__MEntity__c_name(var_mmodule);
 }
 {
-var21 = ((val*(*)(val* self))(var20->class->vft[COLOR_core__abstract_text__String__to_upper]))(var20); /* to_upper on <var20:String>*/
+var33 = ((val*(*)(val* self))(var32->class->vft[COLOR_core__abstract_text__Text__to_upper]))(var32); /* to_upper on <var32:String>*/
 }
-((struct instance_core__NativeArray*)var15)->values[0]=var21;
+((struct instance_core__NativeArray*)var23)->values[0]=var33;
 {
-var22 = ((val*(*)(val* self))(var15->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var15); /* native_to_s on <var15:NativeArray[String]>*/
+var34 = ((val*(*)(val* self))(var23->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var23); /* native_to_s on <var23:NativeArray[String]>*/
 }
-varonce14 = var15;
-var_guard = var22;
-if (unlikely(varonce23==NULL)) {
-var24 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
-if (likely(varonce25!=NULL)) {
-var26 = varonce25;
+varonce22 = var23;
+var_guard = var34;
+if (unlikely(varonce35==NULL)) {
+var36 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
+if (likely(varonce37!=NULL)) {
+var38 = varonce37;
 } else {
-var27 = "/";
-var28 = core__flat___NativeString___to_s_full(var27, 1l, 1l);
-var26 = var28;
-varonce25 = var26;
+var39 = "/";
+var41 = (val*)(1l<<2|1);
+var42 = (val*)(1l<<2|1);
+var43 = (val*)((long)(0)<<2|3);
+var44 = (val*)((long)(0)<<2|3);
+var40 = core__flat___CString___to_s_unsafe(var39, var41, var42, var43, var44);
+var38 = var40;
+varonce37 = var38;
 }
-((struct instance_core__NativeArray*)var24)->values[1]=var26;
+((struct instance_core__NativeArray*)var36)->values[1]=var38;
 } else {
-var24 = varonce23;
-varonce23 = NULL;
+var36 = varonce35;
+varonce35 = NULL;
 }
-((struct instance_core__NativeArray*)var24)->values[0]=var_compdir;
-((struct instance_core__NativeArray*)var24)->values[2]=var_h_file;
+((struct instance_core__NativeArray*)var36)->values[0]=var_compdir;
+((struct instance_core__NativeArray*)var36)->values[2]=var_h_file;
 {
-var29 = ((val*(*)(val* self))(var24->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var24); /* native_to_s on <var24:NativeArray[String]>*/
+var45 = ((val*(*)(val* self))(var36->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var36); /* native_to_s on <var36:NativeArray[String]>*/
 }
-varonce23 = var24;
-var30 = NEW_core__Array(&type_core__Array__core__String);
+varonce35 = var36;
+var46 = NEW_core__Array(&type_core__Array__core__String);
 {
-core___core__Array___with_capacity(var30, 1l); /* Direct call array#Array#with_capacity on <var30:Array[String]>*/
+core___core__Array___with_capacity(var46, 1l); /* Direct call array$Array$with_capacity on <var46:Array[String]>*/
 }
-var_ = var30;
-if (likely(varonce31!=NULL)) {
-var32 = varonce31;
+var_ = var46;
+if (likely(varonce47!=NULL)) {
+var48 = varonce47;
 } else {
-var33 = "<stdint.h>";
-var34 = core__flat___NativeString___to_s_full(var33, 10l, 10l);
-var32 = var34;
-varonce31 = var32;
+var49 = "<stdint.h>";
+var51 = (val*)(10l<<2|1);
+var52 = (val*)(10l<<2|1);
+var53 = (val*)((long)(0)<<2|3);
+var54 = (val*)((long)(0)<<2|3);
+var50 = core__flat___CString___to_s_unsafe(var49, var51, var52, var53, var54);
+var48 = var50;
+varonce47 = var48;
 }
 {
-core___core__AbstractArray___core__abstract_collection__Sequence__push(var_, var32); /* Direct call array#AbstractArray#push on <var_:Array[String]>*/
+core___core__AbstractArray___core__abstract_collection__Sequence__push(var_, var48); /* Direct call array$AbstractArray$push on <var_:Array[String]>*/
 }
 {
-nitc__light_ffi_base___CCompilationUnit___write_header_to_file(self, var_mmodule, var29, var_, var_guard); /* Direct call light_ffi_base#CCompilationUnit#write_header_to_file on <self:CCompilationUnit>*/
+nitc__light_ffi_base___CCompilationUnit___write_header_to_file(self, var_mmodule, var45, var_, var_guard); /* Direct call light_ffi_base$CCompilationUnit$write_header_to_file on <self:CCompilationUnit>*/
 }
-if (unlikely(varonce35==NULL)) {
-var36 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
-if (likely(varonce37!=NULL)) {
-var38 = varonce37;
+if (unlikely(varonce55==NULL)) {
+var56 = NEW_core__NativeArray((int)2l, &type_core__NativeArray__core__String);
+if (likely(varonce57!=NULL)) {
+var58 = varonce57;
 } else {
-var39 = ".c";
-var40 = core__flat___NativeString___to_s_full(var39, 2l, 2l);
-var38 = var40;
-varonce37 = var38;
+var59 = ".c";
+var61 = (val*)(2l<<2|1);
+var62 = (val*)(2l<<2|1);
+var63 = (val*)((long)(0)<<2|3);
+var64 = (val*)((long)(0)<<2|3);
+var60 = core__flat___CString___to_s_unsafe(var59, var61, var62, var63, var64);
+var58 = var60;
+varonce57 = var58;
 }
-((struct instance_core__NativeArray*)var36)->values[1]=var38;
+((struct instance_core__NativeArray*)var56)->values[1]=var58;
 } else {
-var36 = varonce35;
-varonce35 = NULL;
+var56 = varonce55;
+varonce55 = NULL;
 }
-((struct instance_core__NativeArray*)var36)->values[0]=var_base_name;
+((struct instance_core__NativeArray*)var56)->values[0]=var_base_name;
 {
-var41 = ((val*(*)(val* self))(var36->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var36); /* native_to_s on <var36:NativeArray[String]>*/
+var65 = ((val*(*)(val* self))(var56->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var56); /* native_to_s on <var56:NativeArray[String]>*/
 }
-varonce35 = var36;
-var_c_file = var41;
-if (unlikely(varonce42==NULL)) {
-var43 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
-if (likely(varonce44!=NULL)) {
-var45 = varonce44;
+varonce55 = var56;
+var_c_file = var65;
+if (unlikely(varonce66==NULL)) {
+var67 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
+if (likely(varonce68!=NULL)) {
+var69 = varonce68;
 } else {
-var46 = "/";
-var47 = core__flat___NativeString___to_s_full(var46, 1l, 1l);
-var45 = var47;
-varonce44 = var45;
+var70 = "/";
+var72 = (val*)(1l<<2|1);
+var73 = (val*)(1l<<2|1);
+var74 = (val*)((long)(0)<<2|3);
+var75 = (val*)((long)(0)<<2|3);
+var71 = core__flat___CString___to_s_unsafe(var70, var72, var73, var74, var75);
+var69 = var71;
+varonce68 = var69;
 }
-((struct instance_core__NativeArray*)var43)->values[1]=var45;
+((struct instance_core__NativeArray*)var67)->values[1]=var69;
 } else {
-var43 = varonce42;
-varonce42 = NULL;
+var67 = varonce66;
+varonce66 = NULL;
 }
-((struct instance_core__NativeArray*)var43)->values[0]=var_compdir;
-((struct instance_core__NativeArray*)var43)->values[2]=var_c_file;
+((struct instance_core__NativeArray*)var67)->values[0]=var_compdir;
+((struct instance_core__NativeArray*)var67)->values[2]=var_c_file;
 {
-var48 = ((val*(*)(val* self))(var43->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var43); /* native_to_s on <var43:NativeArray[String]>*/
+var76 = ((val*(*)(val* self))(var67->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var67); /* native_to_s on <var67:NativeArray[String]>*/
 }
-varonce42 = var43;
-var49 = NEW_core__Array(&type_core__Array__core__String);
+varonce66 = var67;
+var77 = NEW_core__Array(&type_core__Array__core__String);
 {
-core___core__Array___with_capacity(var49, 4l); /* Direct call array#Array#with_capacity on <var49:Array[String]>*/
+core___core__Array___with_capacity(var77, 4l); /* Direct call array$Array$with_capacity on <var77:Array[String]>*/
 }
-var_50 = var49;
-if (likely(varonce51!=NULL)) {
-var52 = varonce51;
+var_78 = var77;
+if (likely(varonce79!=NULL)) {
+var80 = varonce79;
 } else {
-var53 = "<stdlib.h>";
-var54 = core__flat___NativeString___to_s_full(var53, 10l, 10l);
-var52 = var54;
-varonce51 = var52;
+var81 = "<stdlib.h>";
+var83 = (val*)(10l<<2|1);
+var84 = (val*)(10l<<2|1);
+var85 = (val*)((long)(0)<<2|3);
+var86 = (val*)((long)(0)<<2|3);
+var82 = core__flat___CString___to_s_unsafe(var81, var83, var84, var85, var86);
+var80 = var82;
+varonce79 = var80;
 }
 {
-core___core__AbstractArray___core__abstract_collection__Sequence__push(var_50, var52); /* Direct call array#AbstractArray#push on <var_50:Array[String]>*/
+core___core__AbstractArray___core__abstract_collection__Sequence__push(var_78, var80); /* Direct call array$AbstractArray$push on <var_78:Array[String]>*/
 }
-if (likely(varonce55!=NULL)) {
-var56 = varonce55;
+if (likely(varonce87!=NULL)) {
+var88 = varonce87;
 } else {
-var57 = "<stdio.h>";
-var58 = core__flat___NativeString___to_s_full(var57, 9l, 9l);
-var56 = var58;
-varonce55 = var56;
+var89 = "<stdio.h>";
+var91 = (val*)(9l<<2|1);
+var92 = (val*)(9l<<2|1);
+var93 = (val*)((long)(0)<<2|3);
+var94 = (val*)((long)(0)<<2|3);
+var90 = core__flat___CString___to_s_unsafe(var89, var91, var92, var93, var94);
+var88 = var90;
+varonce87 = var88;
 }
 {
-core___core__AbstractArray___core__abstract_collection__Sequence__push(var_50, var56); /* Direct call array#AbstractArray#push on <var_50:Array[String]>*/
+core___core__AbstractArray___core__abstract_collection__Sequence__push(var_78, var88); /* Direct call array$AbstractArray$push on <var_78:Array[String]>*/
 }
-if (likely(varonce59!=NULL)) {
-var60 = varonce59;
+if (likely(varonce95!=NULL)) {
+var96 = varonce95;
 } else {
-var61 = "<stdint.h>";
-var62 = core__flat___NativeString___to_s_full(var61, 10l, 10l);
-var60 = var62;
-varonce59 = var60;
+var97 = "<stdint.h>";
+var99 = (val*)(10l<<2|1);
+var100 = (val*)(10l<<2|1);
+var101 = (val*)((long)(0)<<2|3);
+var102 = (val*)((long)(0)<<2|3);
+var98 = core__flat___CString___to_s_unsafe(var97, var99, var100, var101, var102);
+var96 = var98;
+varonce95 = var96;
 }
 {
-core___core__AbstractArray___core__abstract_collection__Sequence__push(var_50, var60); /* Direct call array#AbstractArray#push on <var_50:Array[String]>*/
+core___core__AbstractArray___core__abstract_collection__Sequence__push(var_78, var96); /* Direct call array$AbstractArray$push on <var_78:Array[String]>*/
 }
-if (unlikely(varonce63==NULL)) {
-var64 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
-if (likely(varonce65!=NULL)) {
-var66 = varonce65;
+if (unlikely(varonce103==NULL)) {
+var104 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
+if (likely(varonce105!=NULL)) {
+var106 = varonce105;
 } else {
-var67 = "\"";
-var68 = core__flat___NativeString___to_s_full(var67, 1l, 1l);
-var66 = var68;
-varonce65 = var66;
+var107 = "\"";
+var109 = (val*)(1l<<2|1);
+var110 = (val*)(1l<<2|1);
+var111 = (val*)((long)(0)<<2|3);
+var112 = (val*)((long)(0)<<2|3);
+var108 = core__flat___CString___to_s_unsafe(var107, var109, var110, var111, var112);
+var106 = var108;
+varonce105 = var106;
 }
-((struct instance_core__NativeArray*)var64)->values[0]=var66;
-if (likely(varonce69!=NULL)) {
-var70 = varonce69;
+((struct instance_core__NativeArray*)var104)->values[0]=var106;
+if (likely(varonce113!=NULL)) {
+var114 = varonce113;
 } else {
-var71 = "\"";
-var72 = core__flat___NativeString___to_s_full(var71, 1l, 1l);
-var70 = var72;
-varonce69 = var70;
+var115 = "\"";
+var117 = (val*)(1l<<2|1);
+var118 = (val*)(1l<<2|1);
+var119 = (val*)((long)(0)<<2|3);
+var120 = (val*)((long)(0)<<2|3);
+var116 = core__flat___CString___to_s_unsafe(var115, var117, var118, var119, var120);
+var114 = var116;
+varonce113 = var114;
 }
-((struct instance_core__NativeArray*)var64)->values[2]=var70;
+((struct instance_core__NativeArray*)var104)->values[2]=var114;
 } else {
-var64 = varonce63;
-varonce63 = NULL;
+var104 = varonce103;
+varonce103 = NULL;
 }
-((struct instance_core__NativeArray*)var64)->values[1]=var_h_file;
+((struct instance_core__NativeArray*)var104)->values[1]=var_h_file;
 {
-var73 = ((val*(*)(val* self))(var64->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var64); /* native_to_s on <var64:NativeArray[String]>*/
+var121 = ((val*(*)(val* self))(var104->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var104); /* native_to_s on <var104:NativeArray[String]>*/
 }
-varonce63 = var64;
+varonce103 = var104;
 {
-core___core__AbstractArray___core__abstract_collection__Sequence__push(var_50, var73); /* Direct call array#AbstractArray#push on <var_50:Array[String]>*/
+core___core__AbstractArray___core__abstract_collection__Sequence__push(var_78, var121); /* Direct call array$AbstractArray$push on <var_78:Array[String]>*/
 }
 {
-nitc__light_ffi_base___CCompilationUnit___write_body_to_file(self, var_mmodule, var48, var_50); /* Direct call light_ffi_base#CCompilationUnit#write_body_to_file on <self:CCompilationUnit>*/
+nitc__light_ffi_base___CCompilationUnit___write_body_to_file(self, var_mmodule, var76, var_78); /* Direct call light_ffi_base$CCompilationUnit$write_body_to_file on <self:CCompilationUnit>*/
 }
 {
-{ /* Inline c_tools#CCompilationUnit#files (self) on <self:CCompilationUnit> */
-var76 = self->attrs[COLOR_nitc__c_tools__CCompilationUnit___files].val; /* _files on <self:CCompilationUnit> */
-if (unlikely(var76 == NULL)) {
+{ /* Inline c_tools$CCompilationUnit$files (self) on <self:CCompilationUnit> */
+var124 = self->attrs[COLOR_nitc__c_tools__CCompilationUnit___files].val; /* _files on <self:CCompilationUnit> */
+if (unlikely(var124 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _files");
 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__c_tools, 47);
 fatal_exit(1);
 }
-var74 = var76;
-RET_LABEL75:(void)0;
+var122 = var124;
+RET_LABEL123:(void)0;
 }
 }
-if (unlikely(varonce77==NULL)) {
-var78 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
-if (likely(varonce79!=NULL)) {
-var80 = varonce79;
+if (unlikely(varonce125==NULL)) {
+var126 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
+if (likely(varonce127!=NULL)) {
+var128 = varonce127;
 } else {
-var81 = "/";
-var82 = core__flat___NativeString___to_s_full(var81, 1l, 1l);
-var80 = var82;
-varonce79 = var80;
+var129 = "/";
+var131 = (val*)(1l<<2|1);
+var132 = (val*)(1l<<2|1);
+var133 = (val*)((long)(0)<<2|3);
+var134 = (val*)((long)(0)<<2|3);
+var130 = core__flat___CString___to_s_unsafe(var129, var131, var132, var133, var134);
+var128 = var130;
+varonce127 = var128;
 }
-((struct instance_core__NativeArray*)var78)->values[1]=var80;
+((struct instance_core__NativeArray*)var126)->values[1]=var128;
 } else {
-var78 = varonce77;
-varonce77 = NULL;
+var126 = varonce125;
+varonce125 = NULL;
 }
-((struct instance_core__NativeArray*)var78)->values[0]=var_compdir;
-((struct instance_core__NativeArray*)var78)->values[2]=var_c_file;
+((struct instance_core__NativeArray*)var126)->values[0]=var_compdir;
+((struct instance_core__NativeArray*)var126)->values[2]=var_c_file;
 {
-var83 = ((val*(*)(val* self))(var78->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var78); /* native_to_s on <var78:NativeArray[String]>*/
+var135 = ((val*(*)(val* self))(var126->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var126); /* native_to_s on <var126:NativeArray[String]>*/
 }
-varonce77 = var78;
+varonce125 = var126;
 {
-core___core__Array___core__abstract_collection__SimpleCollection__add(var74, var83); /* Direct call array#Array#add on <var74:Array[String]>*/
+core___core__Array___core__abstract_collection__SimpleCollection__add(var122, var135); /* Direct call array$Array$add on <var122:Array[String]>*/
 }
 RET_LABEL:;
 }
-/* method light_ffi_base#CCompilationUnit#write_header_to_file for (self: CCompilationUnit, MModule, String, Array[String], String) */
+/* method light_ffi_base$CCompilationUnit$write_header_to_file for (self: CCompilationUnit, MModule, String, Array[String], String) */
 void nitc__light_ffi_base___CCompilationUnit___write_header_to_file(val* self, val* p0, val* p1, val* p2, val* p3) {
 val* var_mmodule /* var mmodule: MModule */;
 val* var_file /* var file: String */;
@@ -1165,254 +1348,329 @@ val* var1 /* : NativeArray[String] */;
 static val* varonce;
 static val* varonce2;
 val* var3 /* : String */;
-char* var4 /* : NativeString */;
+char* var4 /* : CString */;
 val* var5 /* : String */;
-static val* varonce6;
-val* var7 /* : String */;
-char* var8 /* : NativeString */;
-val* var9 /* : String */;
-val* var10 /* : String */;
-val* var12 /* : String */;
+val* var6 /* : nullable Int */;
+val* var7 /* : nullable Int */;
+val* var8 /* : nullable Bool */;
+val* var9 /* : nullable Bool */;
+static val* varonce10;
+val* var11 /* : String */;
+char* var12 /* : CString */;
 val* var13 /* : String */;
-val* var_module_info /* var module_info: String */;
-val* var15 /* : NativeArray[String] */;
-static val* varonce14;
-static val* varonce16;
-val* var17 /* : String */;
-char* var18 /* : NativeString */;
-val* var19 /* : String */;
-static val* varonce20;
+val* var14 /* : nullable Int */;
+val* var15 /* : nullable Int */;
+val* var16 /* : nullable Bool */;
+val* var17 /* : nullable Bool */;
+val* var18 /* : String */;
+val* var20 /* : String */;
 val* var21 /* : String */;
-char* var22 /* : NativeString */;
-val* var23 /* : String */;
-val* var24 /* : String */;
-val* var26 /* : NativeArray[String] */;
-static val* varonce25;
-static val* varonce27;
-val* var28 /* : String */;
-char* var29 /* : NativeString */;
-val* var30 /* : String */;
-static val* varonce31;
-val* var32 /* : String */;
-char* var33 /* : NativeString */;
-val* var34 /* : String */;
+val* var_module_info /* var module_info: String */;
+val* var23 /* : NativeArray[String] */;
+static val* varonce22;
+static val* varonce24;
+val* var25 /* : String */;
+char* var26 /* : CString */;
+val* var27 /* : String */;
+val* var28 /* : nullable Int */;
+val* var29 /* : nullable Int */;
+val* var30 /* : nullable Bool */;
+val* var31 /* : nullable Bool */;
+static val* varonce32;
+val* var33 /* : String */;
+char* var34 /* : CString */;
 val* var35 /* : String */;
-val* var_ /* var : Array[String] */;
-val* var36 /* : IndexedIterator[nullable Object] */;
-val* var_37 /* var : IndexedIterator[String] */;
-short int var38 /* : Bool */;
-val* var39 /* : nullable Object */;
-val* var_incl /* var incl: String */;
-val* var41 /* : NativeArray[String] */;
-static val* varonce40;
-static val* varonce42;
-val* var43 /* : String */;
-char* var44 /* : NativeString */;
-val* var45 /* : String */;
-static val* varonce46;
-val* var47 /* : String */;
-char* var48 /* : NativeString */;
-val* var49 /* : String */;
-val* var50 /* : String */;
+val* var36 /* : nullable Int */;
+val* var37 /* : nullable Int */;
+val* var38 /* : nullable Bool */;
+val* var39 /* : nullable Bool */;
+val* var40 /* : String */;
+val* var42 /* : NativeArray[String] */;
+static val* varonce41;
+static val* varonce43;
+val* var44 /* : String */;
+char* var45 /* : CString */;
+val* var46 /* : String */;
+val* var47 /* : nullable Int */;
+val* var48 /* : nullable Int */;
+val* var49 /* : nullable Bool */;
+val* var50 /* : nullable Bool */;
 static val* varonce51;
 val* var52 /* : String */;
-char* var53 /* : NativeString */;
+char* var53 /* : CString */;
 val* var54 /* : String */;
+val* var55 /* : nullable Int */;
+val* var56 /* : nullable Int */;
+val* var57 /* : nullable Bool */;
+val* var58 /* : nullable Bool */;
+val* var59 /* : String */;
+val* var_ /* var : Array[String] */;
+val* var60 /* : IndexedIterator[nullable Object] */;
+val* var_61 /* var : IndexedIterator[String] */;
+short int var62 /* : Bool */;
+val* var63 /* : nullable Object */;
+val* var_incl /* var incl: String */;
+val* var65 /* : NativeArray[String] */;
+static val* varonce64;
+static val* varonce66;
+val* var67 /* : String */;
+char* var68 /* : CString */;
+val* var69 /* : String */;
+val* var70 /* : nullable Int */;
+val* var71 /* : nullable Int */;
+val* var72 /* : nullable Bool */;
+val* var73 /* : nullable Bool */;
+static val* varonce74;
+val* var75 /* : String */;
+char* var76 /* : CString */;
+val* var77 /* : String */;
+val* var78 /* : nullable Int */;
+val* var79 /* : nullable Int */;
+val* var80 /* : nullable Bool */;
+val* var81 /* : nullable Bool */;
+val* var82 /* : String */;
+static val* varonce83;
+val* var84 /* : String */;
+char* var85 /* : CString */;
+val* var86 /* : String */;
+val* var87 /* : nullable Int */;
+val* var88 /* : nullable Int */;
+val* var89 /* : nullable Bool */;
+val* var90 /* : nullable Bool */;
 var_mmodule = p0;
 var_file = p1;
 var_includes = p2;
 var_guard = p3;
 var = NEW_core__FileWriter(&type_core__FileWriter);
 {
-core___core__FileWriter___open(var, var_file); /* Direct call file#FileWriter#open on <var:FileWriter>*/
+core___core__FileWriter___open(var, var_file); /* Direct call file$FileWriter$open on <var:FileWriter>*/
 }
 var_stream = var;
 if (unlikely(varonce==NULL)) {
-var1 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
+var1 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
 if (likely(varonce2!=NULL)) {
 var3 = varonce2;
 } else {
 var4 = "/*\n\tExtern implementation of Nit module ";
-var5 = core__flat___NativeString___to_s_full(var4, 40l, 40l);
+var6 = (val*)(40l<<2|1);
+var7 = (val*)(40l<<2|1);
+var8 = (val*)((long)(0)<<2|3);
+var9 = (val*)((long)(0)<<2|3);
+var5 = core__flat___CString___to_s_unsafe(var4, var6, var7, var8, var9);
 var3 = var5;
 varonce2 = var3;
 }
 ((struct instance_core__NativeArray*)var1)->values[0]=var3;
-if (likely(varonce6!=NULL)) {
-var7 = varonce6;
+if (likely(varonce10!=NULL)) {
+var11 = varonce10;
 } else {
-var8 = "\n*/\n";
-var9 = core__flat___NativeString___to_s_full(var8, 4l, 4l);
-var7 = var9;
-varonce6 = var7;
+var12 = "\n*/\n";
+var14 = (val*)(4l<<2|1);
+var15 = (val*)(4l<<2|1);
+var16 = (val*)((long)(0)<<2|3);
+var17 = (val*)((long)(0)<<2|3);
+var13 = core__flat___CString___to_s_unsafe(var12, var14, var15, var16, var17);
+var11 = var13;
+varonce10 = var11;
 }
-((struct instance_core__NativeArray*)var1)->values[2]=var7;
+((struct instance_core__NativeArray*)var1)->values[2]=var11;
 } else {
 var1 = varonce;
 varonce = NULL;
 }
 {
-{ /* Inline mmodule#MModule#name (var_mmodule) on <var_mmodule:MModule> */
-var12 = var_mmodule->attrs[COLOR_nitc__mmodule__MModule___name].val; /* _name on <var_mmodule:MModule> */
-if (unlikely(var12 == NULL)) {
+{ /* Inline mmodule$MModule$name (var_mmodule) on <var_mmodule:MModule> */
+var20 = var_mmodule->attrs[COLOR_nitc__mmodule__MModule___name].val; /* _name on <var_mmodule:MModule> */
+if (unlikely(var20 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__mmodule, 95);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__mmodule, 100);
 fatal_exit(1);
 }
-var10 = var12;
-RET_LABEL11:(void)0;
+var18 = var20;
+RET_LABEL19:(void)0;
 }
 }
-((struct instance_core__NativeArray*)var1)->values[1]=var10;
+((struct instance_core__NativeArray*)var1)->values[1]=var18;
 {
-var13 = ((val*(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
+var21 = ((val*(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
 }
 varonce = var1;
-var_module_info = var13;
+var_module_info = var21;
 {
-core___core__FileWriter___core__stream__Writer__write(var_stream, var_module_info); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
+core___core__FileWriter___core__stream__Writer__write(var_stream, var_module_info); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
 }
-if (unlikely(varonce14==NULL)) {
-var15 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
-if (likely(varonce16!=NULL)) {
-var17 = varonce16;
+if (unlikely(varonce22==NULL)) {
+var23 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
+if (likely(varonce24!=NULL)) {
+var25 = varonce24;
 } else {
-var18 = "#ifndef ";
-var19 = core__flat___NativeString___to_s_full(var18, 8l, 8l);
-var17 = var19;
-varonce16 = var17;
+var26 = "#ifndef ";
+var28 = (val*)(8l<<2|1);
+var29 = (val*)(8l<<2|1);
+var30 = (val*)((long)(0)<<2|3);
+var31 = (val*)((long)(0)<<2|3);
+var27 = core__flat___CString___to_s_unsafe(var26, var28, var29, var30, var31);
+var25 = var27;
+varonce24 = var25;
 }
-((struct instance_core__NativeArray*)var15)->values[0]=var17;
-if (likely(varonce20!=NULL)) {
-var21 = varonce20;
+((struct instance_core__NativeArray*)var23)->values[0]=var25;
+if (likely(varonce32!=NULL)) {
+var33 = varonce32;
 } else {
-var22 = "\n";
-var23 = core__flat___NativeString___to_s_full(var22, 1l, 1l);
-var21 = var23;
-varonce20 = var21;
+var34 = "\n";
+var36 = (val*)(1l<<2|1);
+var37 = (val*)(1l<<2|1);
+var38 = (val*)((long)(0)<<2|3);
+var39 = (val*)((long)(0)<<2|3);
+var35 = core__flat___CString___to_s_unsafe(var34, var36, var37, var38, var39);
+var33 = var35;
+varonce32 = var33;
 }
-((struct instance_core__NativeArray*)var15)->values[2]=var21;
+((struct instance_core__NativeArray*)var23)->values[2]=var33;
 } else {
-var15 = varonce14;
-varonce14 = NULL;
+var23 = varonce22;
+varonce22 = NULL;
 }
-((struct instance_core__NativeArray*)var15)->values[1]=var_guard;
+((struct instance_core__NativeArray*)var23)->values[1]=var_guard;
 {
-var24 = ((val*(*)(val* self))(var15->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var15); /* native_to_s on <var15:NativeArray[String]>*/
+var40 = ((val*(*)(val* self))(var23->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var23); /* native_to_s on <var23:NativeArray[String]>*/
 }
-varonce14 = var15;
+varonce22 = var23;
 {
-core___core__FileWriter___core__stream__Writer__write(var_stream, var24); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
+core___core__FileWriter___core__stream__Writer__write(var_stream, var40); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
 }
-if (unlikely(varonce25==NULL)) {
-var26 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
-if (likely(varonce27!=NULL)) {
-var28 = varonce27;
+if (unlikely(varonce41==NULL)) {
+var42 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
+if (likely(varonce43!=NULL)) {
+var44 = varonce43;
 } else {
-var29 = "#define ";
-var30 = core__flat___NativeString___to_s_full(var29, 8l, 8l);
-var28 = var30;
-varonce27 = var28;
+var45 = "#define ";
+var47 = (val*)(8l<<2|1);
+var48 = (val*)(8l<<2|1);
+var49 = (val*)((long)(0)<<2|3);
+var50 = (val*)((long)(0)<<2|3);
+var46 = core__flat___CString___to_s_unsafe(var45, var47, var48, var49, var50);
+var44 = var46;
+varonce43 = var44;
 }
-((struct instance_core__NativeArray*)var26)->values[0]=var28;
-if (likely(varonce31!=NULL)) {
-var32 = varonce31;
+((struct instance_core__NativeArray*)var42)->values[0]=var44;
+if (likely(varonce51!=NULL)) {
+var52 = varonce51;
 } else {
-var33 = "\n\n";
-var34 = core__flat___NativeString___to_s_full(var33, 2l, 2l);
-var32 = var34;
-varonce31 = var32;
+var53 = "\n\n";
+var55 = (val*)(2l<<2|1);
+var56 = (val*)(2l<<2|1);
+var57 = (val*)((long)(0)<<2|3);
+var58 = (val*)((long)(0)<<2|3);
+var54 = core__flat___CString___to_s_unsafe(var53, var55, var56, var57, var58);
+var52 = var54;
+varonce51 = var52;
 }
-((struct instance_core__NativeArray*)var26)->values[2]=var32;
+((struct instance_core__NativeArray*)var42)->values[2]=var52;
 } else {
-var26 = varonce25;
-varonce25 = NULL;
+var42 = varonce41;
+varonce41 = NULL;
 }
-((struct instance_core__NativeArray*)var26)->values[1]=var_guard;
+((struct instance_core__NativeArray*)var42)->values[1]=var_guard;
 {
-var35 = ((val*(*)(val* self))(var26->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var26); /* native_to_s on <var26:NativeArray[String]>*/
+var59 = ((val*(*)(val* self))(var42->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var42); /* native_to_s on <var42:NativeArray[String]>*/
 }
-varonce25 = var26;
+varonce41 = var42;
 {
-core___core__FileWriter___core__stream__Writer__write(var_stream, var35); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
+core___core__FileWriter___core__stream__Writer__write(var_stream, var59); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
 }
 var_ = var_includes;
 {
-var36 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
+var60 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
 }
-var_37 = var36;
+var_61 = var60;
 for(;;) {
 {
-var38 = ((short int(*)(val* self))((((long)var_37&3)?class_info[((long)var_37&3)]:var_37->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_37); /* is_ok on <var_37:IndexedIterator[String]>*/
+var62 = ((short int(*)(val* self))((((long)var_61&3)?class_info[((long)var_61&3)]:var_61->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_61); /* is_ok on <var_61:IndexedIterator[String]>*/
 }
-if (var38){
+if (var62){
 } else {
 goto BREAK_label;
 }
 {
-var39 = ((val*(*)(val* self))((((long)var_37&3)?class_info[((long)var_37&3)]:var_37->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_37); /* item on <var_37:IndexedIterator[String]>*/
+var63 = ((val*(*)(val* self))((((long)var_61&3)?class_info[((long)var_61&3)]:var_61->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_61); /* item on <var_61:IndexedIterator[String]>*/
 }
-var_incl = var39;
-if (unlikely(varonce40==NULL)) {
-var41 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
-if (likely(varonce42!=NULL)) {
-var43 = varonce42;
+var_incl = var63;
+if (unlikely(varonce64==NULL)) {
+var65 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
+if (likely(varonce66!=NULL)) {
+var67 = varonce66;
 } else {
-var44 = "#include ";
-var45 = core__flat___NativeString___to_s_full(var44, 9l, 9l);
-var43 = var45;
-varonce42 = var43;
+var68 = "#include ";
+var70 = (val*)(9l<<2|1);
+var71 = (val*)(9l<<2|1);
+var72 = (val*)((long)(0)<<2|3);
+var73 = (val*)((long)(0)<<2|3);
+var69 = core__flat___CString___to_s_unsafe(var68, var70, var71, var72, var73);
+var67 = var69;
+varonce66 = var67;
 }
-((struct instance_core__NativeArray*)var41)->values[0]=var43;
-if (likely(varonce46!=NULL)) {
-var47 = varonce46;
+((struct instance_core__NativeArray*)var65)->values[0]=var67;
+if (likely(varonce74!=NULL)) {
+var75 = varonce74;
 } else {
-var48 = "\n";
-var49 = core__flat___NativeString___to_s_full(var48, 1l, 1l);
-var47 = var49;
-varonce46 = var47;
+var76 = "\n";
+var78 = (val*)(1l<<2|1);
+var79 = (val*)(1l<<2|1);
+var80 = (val*)((long)(0)<<2|3);
+var81 = (val*)((long)(0)<<2|3);
+var77 = core__flat___CString___to_s_unsafe(var76, var78, var79, var80, var81);
+var75 = var77;
+varonce74 = var75;
 }
-((struct instance_core__NativeArray*)var41)->values[2]=var47;
+((struct instance_core__NativeArray*)var65)->values[2]=var75;
 } else {
-var41 = varonce40;
-varonce40 = NULL;
+var65 = varonce64;
+varonce64 = NULL;
 }
-((struct instance_core__NativeArray*)var41)->values[1]=var_incl;
+((struct instance_core__NativeArray*)var65)->values[1]=var_incl;
 {
-var50 = ((val*(*)(val* self))(var41->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var41); /* native_to_s on <var41:NativeArray[String]>*/
+var82 = ((val*(*)(val* self))(var65->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var65); /* native_to_s on <var65:NativeArray[String]>*/
 }
-varonce40 = var41;
+varonce64 = var65;
 {
-core___core__FileWriter___core__stream__Writer__write(var_stream, var50); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
+core___core__FileWriter___core__stream__Writer__write(var_stream, var82); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
 }
 {
-((void(*)(val* self))((((long)var_37&3)?class_info[((long)var_37&3)]:var_37->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_37); /* next on <var_37:IndexedIterator[String]>*/
+((void(*)(val* self))((((long)var_61&3)?class_info[((long)var_61&3)]:var_61->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_61); /* next on <var_61:IndexedIterator[String]>*/
 }
 }
 BREAK_label: (void)0;
 {
-((void(*)(val* self))((((long)var_37&3)?class_info[((long)var_37&3)]:var_37->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_37); /* finish on <var_37:IndexedIterator[String]>*/
+((void(*)(val* self))((((long)var_61&3)?class_info[((long)var_61&3)]:var_61->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_61); /* finish on <var_61:IndexedIterator[String]>*/
 }
 {
-nitc___nitc__CCompilationUnit___compile_header_core(self, var_stream); /* Direct call c_tools#CCompilationUnit#compile_header_core on <self:CCompilationUnit>*/
+nitc___nitc__CCompilationUnit___compile_header_core(self, var_stream); /* Direct call c_tools$CCompilationUnit$compile_header_core on <self:CCompilationUnit>*/
 }
-if (likely(varonce51!=NULL)) {
-var52 = varonce51;
+if (likely(varonce83!=NULL)) {
+var84 = varonce83;
 } else {
-var53 = "#endif\n";
-var54 = core__flat___NativeString___to_s_full(var53, 7l, 7l);
-var52 = var54;
-varonce51 = var52;
+var85 = "#endif\n";
+var87 = (val*)(7l<<2|1);
+var88 = (val*)(7l<<2|1);
+var89 = (val*)((long)(0)<<2|3);
+var90 = (val*)((long)(0)<<2|3);
+var86 = core__flat___CString___to_s_unsafe(var85, var87, var88, var89, var90);
+var84 = var86;
+varonce83 = var84;
 }
 {
-core___core__FileWriter___core__stream__Writer__write(var_stream, var52); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
+core___core__FileWriter___core__stream__Writer__write(var_stream, var84); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
 }
 {
-core___core__FileWriter___core__stream__Stream__close(var_stream); /* Direct call file#FileWriter#close on <var_stream:FileWriter>*/
+core___core__FileWriter___core__stream__Stream__close(var_stream); /* Direct call file$FileWriter$close on <var_stream:FileWriter>*/
 }
 RET_LABEL:;
 }
-/* method light_ffi_base#CCompilationUnit#write_body_to_file for (self: CCompilationUnit, MModule, String, Array[String]) */
+/* method light_ffi_base$CCompilationUnit$write_body_to_file for (self: CCompilationUnit, MModule, String, Array[String]) */
 void nitc__light_ffi_base___CCompilationUnit___write_body_to_file(val* self, val* p0, val* p1, val* p2) {
 val* var_mmodule /* var mmodule: MModule */;
 val* var_file /* var file: String */;
@@ -1423,163 +1681,206 @@ val* var1 /* : NativeArray[String] */;
 static val* varonce;
 static val* varonce2;
 val* var3 /* : String */;
-char* var4 /* : NativeString */;
+char* var4 /* : CString */;
 val* var5 /* : String */;
-static val* varonce6;
-val* var7 /* : String */;
-char* var8 /* : NativeString */;
-val* var9 /* : String */;
-val* var10 /* : String */;
-val* var12 /* : String */;
+val* var6 /* : nullable Int */;
+val* var7 /* : nullable Int */;
+val* var8 /* : nullable Bool */;
+val* var9 /* : nullable Bool */;
+static val* varonce10;
+val* var11 /* : String */;
+char* var12 /* : CString */;
 val* var13 /* : String */;
+val* var14 /* : nullable Int */;
+val* var15 /* : nullable Int */;
+val* var16 /* : nullable Bool */;
+val* var17 /* : nullable Bool */;
+val* var18 /* : String */;
+val* var20 /* : String */;
+val* var21 /* : String */;
 val* var_module_info /* var module_info: String */;
 val* var_ /* var : Array[String] */;
-val* var14 /* : IndexedIterator[nullable Object] */;
-val* var_15 /* var : IndexedIterator[String] */;
-short int var16 /* : Bool */;
-val* var17 /* : nullable Object */;
+val* var22 /* : IndexedIterator[nullable Object] */;
+val* var_23 /* var : IndexedIterator[String] */;
+short int var24 /* : Bool */;
+val* var25 /* : nullable Object */;
 val* var_incl /* var incl: String */;
-val* var19 /* : NativeArray[String] */;
-static val* varonce18;
-static val* varonce20;
-val* var21 /* : String */;
-char* var22 /* : NativeString */;
-val* var23 /* : String */;
-static val* varonce24;
-val* var25 /* : String */;
-char* var26 /* : NativeString */;
-val* var27 /* : String */;
-val* var28 /* : String */;
+val* var27 /* : NativeArray[String] */;
+static val* varonce26;
+static val* varonce28;
+val* var29 /* : String */;
+char* var30 /* : CString */;
+val* var31 /* : String */;
+val* var32 /* : nullable Int */;
+val* var33 /* : nullable Int */;
+val* var34 /* : nullable Bool */;
+val* var35 /* : nullable Bool */;
+static val* varonce36;
+val* var37 /* : String */;
+char* var38 /* : CString */;
+val* var39 /* : String */;
+val* var40 /* : nullable Int */;
+val* var41 /* : nullable Int */;
+val* var42 /* : nullable Bool */;
+val* var43 /* : nullable Bool */;
+val* var44 /* : String */;
 var_mmodule = p0;
 var_file = p1;
 var_includes = p2;
 var = NEW_core__FileWriter(&type_core__FileWriter);
 {
-core___core__FileWriter___open(var, var_file); /* Direct call file#FileWriter#open on <var:FileWriter>*/
+core___core__FileWriter___open(var, var_file); /* Direct call file$FileWriter$open on <var:FileWriter>*/
 }
 var_stream = var;
 if (unlikely(varonce==NULL)) {
-var1 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
+var1 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
 if (likely(varonce2!=NULL)) {
 var3 = varonce2;
 } else {
 var4 = "/*\n\tExtern implementation of Nit module ";
-var5 = core__flat___NativeString___to_s_full(var4, 40l, 40l);
+var6 = (val*)(40l<<2|1);
+var7 = (val*)(40l<<2|1);
+var8 = (val*)((long)(0)<<2|3);
+var9 = (val*)((long)(0)<<2|3);
+var5 = core__flat___CString___to_s_unsafe(var4, var6, var7, var8, var9);
 var3 = var5;
 varonce2 = var3;
 }
 ((struct instance_core__NativeArray*)var1)->values[0]=var3;
-if (likely(varonce6!=NULL)) {
-var7 = varonce6;
+if (likely(varonce10!=NULL)) {
+var11 = varonce10;
 } else {
-var8 = "\n*/\n";
-var9 = core__flat___NativeString___to_s_full(var8, 4l, 4l);
-var7 = var9;
-varonce6 = var7;
+var12 = "\n*/\n";
+var14 = (val*)(4l<<2|1);
+var15 = (val*)(4l<<2|1);
+var16 = (val*)((long)(0)<<2|3);
+var17 = (val*)((long)(0)<<2|3);
+var13 = core__flat___CString___to_s_unsafe(var12, var14, var15, var16, var17);
+var11 = var13;
+varonce10 = var11;
 }
-((struct instance_core__NativeArray*)var1)->values[2]=var7;
+((struct instance_core__NativeArray*)var1)->values[2]=var11;
 } else {
 var1 = varonce;
 varonce = NULL;
 }
 {
-{ /* Inline mmodule#MModule#name (var_mmodule) on <var_mmodule:MModule> */
-var12 = var_mmodule->attrs[COLOR_nitc__mmodule__MModule___name].val; /* _name on <var_mmodule:MModule> */
-if (unlikely(var12 == NULL)) {
+{ /* Inline mmodule$MModule$name (var_mmodule) on <var_mmodule:MModule> */
+var20 = var_mmodule->attrs[COLOR_nitc__mmodule__MModule___name].val; /* _name on <var_mmodule:MModule> */
+if (unlikely(var20 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
-PRINT_ERROR(" (%s:%d)\n", FILE_nitc__mmodule, 95);
+PRINT_ERROR(" (%s:%d)\n", FILE_nitc__mmodule, 100);
 fatal_exit(1);
 }
-var10 = var12;
-RET_LABEL11:(void)0;
+var18 = var20;
+RET_LABEL19:(void)0;
 }
 }
-((struct instance_core__NativeArray*)var1)->values[1]=var10;
+((struct instance_core__NativeArray*)var1)->values[1]=var18;
 {
-var13 = ((val*(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
+var21 = ((val*(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
 }
 varonce = var1;
-var_module_info = var13;
+var_module_info = var21;
 {
-core___core__FileWriter___core__stream__Writer__write(var_stream, var_module_info); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
+core___core__FileWriter___core__stream__Writer__write(var_stream, var_module_info); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
 }
 var_ = var_includes;
 {
-var14 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
+var22 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
 }
-var_15 = var14;
+var_23 = var22;
 for(;;) {
 {
-var16 = ((short int(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_15); /* is_ok on <var_15:IndexedIterator[String]>*/
+var24 = ((short int(*)(val* self))((((long)var_23&3)?class_info[((long)var_23&3)]:var_23->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_23); /* is_ok on <var_23:IndexedIterator[String]>*/
 }
-if (var16){
+if (var24){
 } else {
 goto BREAK_label;
 }
 {
-var17 = ((val*(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_15); /* item on <var_15:IndexedIterator[String]>*/
+var25 = ((val*(*)(val* self))((((long)var_23&3)?class_info[((long)var_23&3)]:var_23->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_23); /* item on <var_23:IndexedIterator[String]>*/
 }
-var_incl = var17;
-if (unlikely(varonce18==NULL)) {
-var19 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
-if (likely(varonce20!=NULL)) {
-var21 = varonce20;
+var_incl = var25;
+if (unlikely(varonce26==NULL)) {
+var27 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
+if (likely(varonce28!=NULL)) {
+var29 = varonce28;
 } else {
-var22 = "#include ";
-var23 = core__flat___NativeString___to_s_full(var22, 9l, 9l);
-var21 = var23;
-varonce20 = var21;
+var30 = "#include ";
+var32 = (val*)(9l<<2|1);
+var33 = (val*)(9l<<2|1);
+var34 = (val*)((long)(0)<<2|3);
+var35 = (val*)((long)(0)<<2|3);
+var31 = core__flat___CString___to_s_unsafe(var30, var32, var33, var34, var35);
+var29 = var31;
+varonce28 = var29;
 }
-((struct instance_core__NativeArray*)var19)->values[0]=var21;
-if (likely(varonce24!=NULL)) {
-var25 = varonce24;
+((struct instance_core__NativeArray*)var27)->values[0]=var29;
+if (likely(varonce36!=NULL)) {
+var37 = varonce36;
 } else {
-var26 = "\n";
-var27 = core__flat___NativeString___to_s_full(var26, 1l, 1l);
-var25 = var27;
-varonce24 = var25;
+var38 = "\n";
+var40 = (val*)(1l<<2|1);
+var41 = (val*)(1l<<2|1);
+var42 = (val*)((long)(0)<<2|3);
+var43 = (val*)((long)(0)<<2|3);
+var39 = core__flat___CString___to_s_unsafe(var38, var40, var41, var42, var43);
+var37 = var39;
+varonce36 = var37;
 }
-((struct instance_core__NativeArray*)var19)->values[2]=var25;
+((struct instance_core__NativeArray*)var27)->values[2]=var37;
 } else {
-var19 = varonce18;
-varonce18 = NULL;
+var27 = varonce26;
+varonce26 = NULL;
 }
-((struct instance_core__NativeArray*)var19)->values[1]=var_incl;
+((struct instance_core__NativeArray*)var27)->values[1]=var_incl;
 {
-var28 = ((val*(*)(val* self))(var19->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var19); /* native_to_s on <var19:NativeArray[String]>*/
+var44 = ((val*(*)(val* self))(var27->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var27); /* native_to_s on <var27:NativeArray[String]>*/
 }
-varonce18 = var19;
+varonce26 = var27;
 {
-core___core__FileWriter___core__stream__Writer__write(var_stream, var28); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
+core___core__FileWriter___core__stream__Writer__write(var_stream, var44); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
 }
 {
-((void(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_15); /* next on <var_15:IndexedIterator[String]>*/
+((void(*)(val* self))((((long)var_23&3)?class_info[((long)var_23&3)]:var_23->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_23); /* next on <var_23:IndexedIterator[String]>*/
 }
 }
 BREAK_label: (void)0;
 {
-((void(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_15); /* finish on <var_15:IndexedIterator[String]>*/
+((void(*)(val* self))((((long)var_23&3)?class_info[((long)var_23&3)]:var_23->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_23); /* finish on <var_23:IndexedIterator[String]>*/
 }
 {
-nitc___nitc__CCompilationUnit___compile_body_core(self, var_stream); /* Direct call c_tools#CCompilationUnit#compile_body_core on <self:CCompilationUnit>*/
+nitc___nitc__CCompilationUnit___compile_body_core(self, var_stream); /* Direct call c_tools$CCompilationUnit$compile_body_core on <self:CCompilationUnit>*/
 }
 {
-core___core__FileWriter___core__stream__Stream__close(var_stream); /* Direct call file#FileWriter#close on <var_stream:FileWriter>*/
+core___core__FileWriter___core__stream__Stream__close(var_stream); /* Direct call file$FileWriter$close on <var_stream:FileWriter>*/
 }
 RET_LABEL:;
 }
-/* method light_ffi_base#ForeignType#ctype for (self: ForeignType): String */
+/* method light_ffi_base$ForeignType$ctype for (self: ForeignType): String */
 val* nitc___nitc__ForeignType___ctype(val* self) {
 val* var /* : String */;
 static val* varonce;
 val* var1 /* : String */;
-char* var2 /* : NativeString */;
+char* var2 /* : CString */;
 val* var3 /* : String */;
+val* var4 /* : nullable Int */;
+val* var5 /* : nullable Int */;
+val* var6 /* : nullable Bool */;
+val* var7 /* : nullable Bool */;
 if (likely(varonce!=NULL)) {
 var1 = varonce;
 } else {
 var2 = "void*";
-var3 = core__flat___NativeString___to_s_full(var2, 5l, 5l);
+var4 = (val*)(5l<<2|1);
+var5 = (val*)(5l<<2|1);
+var6 = (val*)((long)(0)<<2|3);
+var7 = (val*)((long)(0)<<2|3);
+var3 = core__flat___CString___to_s_unsafe(var2, var4, var5, var6, var7);
 var1 = var3;
 varonce = var1;
 }