c_src: update with new intern methods
[nit.git] / c_src / cpp.sep.1.c
diff --git a/c_src/cpp.sep.1.c b/c_src/cpp.sep.1.c
new file mode 100644 (file)
index 0000000..242e04d
--- /dev/null
@@ -0,0 +1,2696 @@
+#include "cpp.sep.0.h"
+/* method cpp#FFILanguageAssignationPhase#cpp_language for (self: FFILanguageAssignationPhase): FFILanguage */
+val* cpp__FFILanguageAssignationPhase__cpp_language(val* self) {
+val* var /* : FFILanguage */;
+val* var1 /* : FFILanguage */;
+var1 = self->attrs[COLOR_cpp__FFILanguageAssignationPhase___64dcpp_language].val; /* @cpp_language on <self:FFILanguageAssignationPhase> */
+if (var1 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @cpp_language");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 24);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#FFILanguageAssignationPhase#cpp_language for (self: Object): FFILanguage */
+val* VIRTUAL_cpp__FFILanguageAssignationPhase__cpp_language(val* self) {
+val* var /* : FFILanguage */;
+val* var1 /* : FFILanguage */;
+var1 = cpp__FFILanguageAssignationPhase__cpp_language(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#FFILanguageAssignationPhase#cpp_language= for (self: FFILanguageAssignationPhase, FFILanguage) */
+void cpp__FFILanguageAssignationPhase__cpp_language_61d(val* self, val* p0) {
+self->attrs[COLOR_cpp__FFILanguageAssignationPhase___64dcpp_language].val = p0; /* @cpp_language on <self:FFILanguageAssignationPhase> */
+RET_LABEL:;
+}
+/* method cpp#FFILanguageAssignationPhase#cpp_language= for (self: Object, FFILanguage) */
+void VIRTUAL_cpp__FFILanguageAssignationPhase__cpp_language_61d(val* self, val* p0) {
+cpp__FFILanguageAssignationPhase__cpp_language_61d(self, p0);
+RET_LABEL:;
+}
+/* method cpp#AModule#cpp_file for (self: AModule): nullable CPPCompilationUnit */
+val* cpp__AModule__cpp_file(val* self) {
+val* var /* : nullable CPPCompilationUnit */;
+val* var1 /* : nullable CPPCompilationUnit */;
+var1 = self->attrs[COLOR_cpp__AModule___64dcpp_file].val; /* @cpp_file on <self:AModule> */
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#AModule#cpp_file for (self: Object): nullable CPPCompilationUnit */
+val* VIRTUAL_cpp__AModule__cpp_file(val* self) {
+val* var /* : nullable CPPCompilationUnit */;
+val* var1 /* : nullable CPPCompilationUnit */;
+var1 = cpp__AModule__cpp_file(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#AModule#cpp_file= for (self: AModule, nullable CPPCompilationUnit) */
+void cpp__AModule__cpp_file_61d(val* self, val* p0) {
+self->attrs[COLOR_cpp__AModule___64dcpp_file].val = p0; /* @cpp_file on <self:AModule> */
+RET_LABEL:;
+}
+/* method cpp#AModule#cpp_file= for (self: Object, nullable CPPCompilationUnit) */
+void VIRTUAL_cpp__AModule__cpp_file_61d(val* self, val* p0) {
+cpp__AModule__cpp_file_61d(self, p0);
+RET_LABEL:;
+}
+/* method cpp#AModule#cpp_compiler_options for (self: AModule): String */
+val* cpp__AModule__cpp_compiler_options(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = self->attrs[COLOR_cpp__AModule___64dcpp_compiler_options].val; /* @cpp_compiler_options on <self:AModule> */
+if (var1 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @cpp_compiler_options");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 29);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#AModule#cpp_compiler_options for (self: Object): String */
+val* VIRTUAL_cpp__AModule__cpp_compiler_options(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = cpp__AModule__cpp_compiler_options(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#AModule#cpp_compiler_options= for (self: AModule, String) */
+void cpp__AModule__cpp_compiler_options_61d(val* self, val* p0) {
+self->attrs[COLOR_cpp__AModule___64dcpp_compiler_options].val = p0; /* @cpp_compiler_options on <self:AModule> */
+RET_LABEL:;
+}
+/* method cpp#AModule#cpp_compiler_options= for (self: Object, String) */
+void VIRTUAL_cpp__AModule__cpp_compiler_options_61d(val* self, val* p0) {
+cpp__AModule__cpp_compiler_options_61d(self, p0);
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#identify_language for (self: CPPLanguage, AExternCodeBlock): Bool */
+short int cpp__CPPLanguage__identify_language(val* self, val* p0) {
+short int var /* : Bool */;
+val* var_n /* var n: AExternCodeBlock */;
+short int var1 /* : Bool */;
+var_n = p0;
+var1 = ((short int (*)(val*))(var_n->class->vft[COLOR_cpp__AExternCodeBlock__is_cpp]))(var_n) /* is_cpp on <var_n:AExternCodeBlock>*/;
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#CPPLanguage#identify_language for (self: Object, AExternCodeBlock): Bool */
+short int VIRTUAL_cpp__CPPLanguage__identify_language(val* self, val* p0) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+var1 = cpp__CPPLanguage__identify_language(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#CPPLanguage#compile_module_block for (self: CPPLanguage, AExternCodeBlock, CCompilationUnit, AModule) */
+void cpp__CPPLanguage__compile_module_block(val* self, val* p0, val* p1, val* p2) {
+val* var_block /* var block: AExternCodeBlock */;
+val* var_ecc /* var ecc: CCompilationUnit */;
+val* var_nmodule /* var nmodule: AModule */;
+val* var /* : nullable CPPCompilationUnit */;
+val* var1 /* : null */;
+short int var2 /* : Bool */;
+val* var3 /* : CPPCompilationUnit */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable CPPCompilationUnit */;
+val* var6 /* : Template */;
+val* var7 /* : Location */;
+val* var8 /* : String */;
+val* var9 /* : nullable CPPCompilationUnit */;
+val* var10 /* : Template */;
+val* var11 /* : String */;
+short int var12 /* : Bool */;
+val* var13 /* : nullable CPPCompilationUnit */;
+val* var14 /* : Template */;
+val* var15 /* : Location */;
+val* var16 /* : String */;
+val* var17 /* : nullable CPPCompilationUnit */;
+val* var18 /* : Template */;
+val* var19 /* : String */;
+var_block = p0;
+var_ecc = p1;
+var_nmodule = p2;
+var = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+var1 = NULL;
+if (var == NULL) {
+var2 = 1; /* is null */
+} else {
+var2 = 0; /* arg is null but recv is not */
+}
+if (var2){
+var3 = NEW_cpp__CPPCompilationUnit(&type_cpp__CPPCompilationUnit);
+((void (*)(val*))(var3->class->vft[COLOR_cpp__CPPCompilationUnit__init]))(var3) /* init on <var3:CPPCompilationUnit>*/;
+((void (*)(val*, val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file_61d]))(var_nmodule, var3) /* cpp_file= on <var_nmodule:AModule>*/;
+} else {
+}
+var4 = ((short int (*)(val*))(var_block->class->vft[COLOR_cpp__AExternCodeBlock__is_cpp_header]))(var_block) /* is_cpp_header on <var_block:AExternCodeBlock>*/;
+if (var4){
+var5 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var5 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 42);
+show_backtrace(1);
+} else {
+var6 = ((val* (*)(val*))(var5->class->vft[COLOR_c_tools__CCompilationUnit__header_custom]))(var5) /* header_custom on <var5:nullable CPPCompilationUnit>*/;
+}
+var7 = ((val* (*)(val*))(var_block->class->vft[COLOR_parser_nodes__ANode__location]))(var_block) /* location on <var_block:AExternCodeBlock>*/;
+var8 = ((val* (*)(val*))(var7->class->vft[COLOR_c__Location__as_line_pragma]))(var7) /* as_line_pragma on <var7:Location>*/;
+((void (*)(val*, val*))(var6->class->vft[COLOR_template__Template__add]))(var6, var8) /* add on <var6:Template>*/;
+var9 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var9 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 43);
+show_backtrace(1);
+} else {
+var10 = ((val* (*)(val*))(var9->class->vft[COLOR_c_tools__CCompilationUnit__header_custom]))(var9) /* header_custom on <var9:nullable CPPCompilationUnit>*/;
+}
+var11 = ((val* (*)(val*))(var_block->class->vft[COLOR_ffi_base__AExternCodeBlock__code]))(var_block) /* code on <var_block:AExternCodeBlock>*/;
+((void (*)(val*, val*))(var10->class->vft[COLOR_template__Template__add]))(var10, var11) /* add on <var10:Template>*/;
+} else {
+var12 = ((short int (*)(val*))(var_block->class->vft[COLOR_cpp__AExternCodeBlock__is_cpp_body]))(var_block) /* is_cpp_body on <var_block:AExternCodeBlock>*/;
+if (var12){
+var13 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var13 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 45);
+show_backtrace(1);
+} else {
+var14 = ((val* (*)(val*))(var13->class->vft[COLOR_c_tools__CCompilationUnit__body_custom]))(var13) /* body_custom on <var13:nullable CPPCompilationUnit>*/;
+}
+var15 = ((val* (*)(val*))(var_block->class->vft[COLOR_parser_nodes__ANode__location]))(var_block) /* location on <var_block:AExternCodeBlock>*/;
+var16 = ((val* (*)(val*))(var15->class->vft[COLOR_c__Location__as_line_pragma]))(var15) /* as_line_pragma on <var15:Location>*/;
+((void (*)(val*, val*))(var14->class->vft[COLOR_template__Template__add]))(var14, var16) /* add on <var14:Template>*/;
+var17 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var17 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 46);
+show_backtrace(1);
+} else {
+var18 = ((val* (*)(val*))(var17->class->vft[COLOR_c_tools__CCompilationUnit__body_custom]))(var17) /* body_custom on <var17:nullable CPPCompilationUnit>*/;
+}
+var19 = ((val* (*)(val*))(var_block->class->vft[COLOR_ffi_base__AExternCodeBlock__code]))(var_block) /* code on <var_block:AExternCodeBlock>*/;
+((void (*)(val*, val*))(var18->class->vft[COLOR_template__Template__add]))(var18, var19) /* add on <var18:Template>*/;
+} else {
+}
+}
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#compile_module_block for (self: Object, AExternCodeBlock, CCompilationUnit, AModule) */
+void VIRTUAL_cpp__CPPLanguage__compile_module_block(val* self, val* p0, val* p1, val* p2) {
+cpp__CPPLanguage__compile_module_block(self, p0, p1, p2);
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#compile_extern_method for (self: CPPLanguage, AExternCodeBlock, AExternPropdef, CCompilationUnit, AModule) */
+void cpp__CPPLanguage__compile_extern_method(val* self, val* p0, val* p1, val* p2, val* p3) {
+val* var_block /* var block: AExternCodeBlock */;
+val* var_m /* var m: AExternPropdef */;
+val* var_ecc /* var ecc: CCompilationUnit */;
+val* var_nmodule /* var nmodule: AModule */;
+val* var /* : nullable CPPCompilationUnit */;
+val* var1 /* : null */;
+short int var2 /* : Bool */;
+val* var3 /* : CPPCompilationUnit */;
+val* var4 /* : nullable MModule */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var5 /* : nullable ANode */;
+short int var6 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+val* var7 /* : nullable MClass */;
+val* var8 /* : MClassType */;
+val* var_mclass_type /* var mclass_type: MClassType */;
+val* var9 /* : nullable MPropDef */;
+val* var10 /* : MProperty */;
+val* var_mproperty /* var mproperty: MMethod */;
+static val* varonce;
+val* var11 /* : String */;
+char* var12 /* : NativeString */;
+long var13 /* : Int */;
+val* var14 /* : String */;
+val* var15 /* : SignatureLength */;
+val* var16 /* : CallContext */;
+val* var17 /* : String */;
+val* var_indirection_sig /* var indirection_sig: String */;
+val* var18 /* : Template */;
+static val* varonce19;
+val* var20 /* : String */;
+char* var21 /* : NativeString */;
+long var22 /* : Int */;
+val* var23 /* : String */;
+val* var24 /* : Array[Object] */;
+long var25 /* : Int */;
+val* var26 /* : NativeArray[Object] */;
+val* var27 /* : String */;
+val* var28 /* : ExternCFunction */;
+val* var_fc /* var fc: CFunction */;
+val* var29 /* : Template */;
+static val* varonce30;
+val* var31 /* : String */;
+char* var32 /* : NativeString */;
+long var33 /* : Int */;
+val* var34 /* : String */;
+val* var35 /* : SignatureLength */;
+val* var36 /* : CppCallContext */;
+val* var37 /* : null */;
+val* var38 /* : String */;
+val* var39 /* : Template */;
+static val* varonce40;
+val* var41 /* : String */;
+char* var42 /* : NativeString */;
+long var43 /* : Int */;
+val* var44 /* : String */;
+val* var45 /* : nullable CPPCompilationUnit */;
+val* var46 /* : Template */;
+static val* varonce47;
+val* var48 /* : String */;
+char* var49 /* : NativeString */;
+long var50 /* : Int */;
+val* var51 /* : String */;
+val* var52 /* : nullable CPPCompilationUnit */;
+val* var53 /* : Template */;
+static val* varonce54;
+val* var55 /* : String */;
+char* var56 /* : NativeString */;
+long var57 /* : Int */;
+val* var58 /* : String */;
+val* var59 /* : Array[Object] */;
+long var60 /* : Int */;
+val* var61 /* : NativeArray[Object] */;
+val* var62 /* : String */;
+val* var63 /* : nullable CPPCompilationUnit */;
+val* var64 /* : Template */;
+static val* varonce65;
+val* var66 /* : String */;
+char* var67 /* : NativeString */;
+long var68 /* : Int */;
+val* var69 /* : String */;
+val* var70 /* : CFunction */;
+short int var71 /* : Bool */;
+short int var72 /* : Bool */;
+static val* varonce73;
+val* var74 /* : String */;
+char* var75 /* : NativeString */;
+long var76 /* : Int */;
+val* var77 /* : String */;
+val* var_param_name /* var param_name: String */;
+val* var78 /* : ToCppCallContext */;
+val* var79 /* : String */;
+val* var_type_name /* var type_name: String */;
+val* var80 /* : MClass */;
+val* var81 /* : nullable ForeignType */;
+short int var82 /* : Bool */;
+int cltype83;
+int idtype84;
+val* var85 /* : Template */;
+static val* varonce86;
+val* var87 /* : String */;
+char* var88 /* : NativeString */;
+long var89 /* : Int */;
+val* var90 /* : String */;
+static val* varonce91;
+val* var92 /* : String */;
+char* var93 /* : NativeString */;
+long var94 /* : Int */;
+val* var95 /* : String */;
+static val* varonce96;
+val* var97 /* : String */;
+char* var98 /* : NativeString */;
+long var99 /* : Int */;
+val* var100 /* : String */;
+static val* varonce101;
+val* var102 /* : String */;
+char* var103 /* : NativeString */;
+long var104 /* : Int */;
+val* var105 /* : String */;
+val* var106 /* : Array[Object] */;
+long var107 /* : Int */;
+val* var108 /* : NativeArray[Object] */;
+val* var109 /* : String */;
+val* var110 /* : Template */;
+static val* varonce111;
+val* var112 /* : String */;
+char* var113 /* : NativeString */;
+long var114 /* : Int */;
+val* var115 /* : String */;
+static val* varonce116;
+val* var117 /* : String */;
+char* var118 /* : NativeString */;
+long var119 /* : Int */;
+val* var120 /* : String */;
+static val* varonce121;
+val* var122 /* : String */;
+char* var123 /* : NativeString */;
+long var124 /* : Int */;
+val* var125 /* : String */;
+val* var126 /* : Array[Object] */;
+long var127 /* : Int */;
+val* var128 /* : NativeArray[Object] */;
+val* var129 /* : String */;
+val* var130 /* : nullable MPropDef */;
+val* var131 /* : nullable MSignature */;
+val* var132 /* : Array[MParameter] */;
+val* var133 /* : Iterator[nullable Object] */;
+short int var134 /* : Bool */;
+val* var135 /* : nullable Object */;
+val* var_param /* var param: MParameter */;
+val* var136 /* : String */;
+val* var_param_name137 /* var param_name: String */;
+val* var138 /* : ToCppCallContext */;
+val* var139 /* : MType */;
+val* var140 /* : String */;
+val* var_type_name141 /* var type_name: String */;
+val* var142 /* : MClass */;
+val* var143 /* : nullable ForeignType */;
+short int var144 /* : Bool */;
+int cltype145;
+int idtype146;
+val* var147 /* : Template */;
+static val* varonce148;
+val* var149 /* : String */;
+char* var150 /* : NativeString */;
+long var151 /* : Int */;
+val* var152 /* : String */;
+static val* varonce153;
+val* var154 /* : String */;
+char* var155 /* : NativeString */;
+long var156 /* : Int */;
+val* var157 /* : String */;
+static val* varonce158;
+val* var159 /* : String */;
+char* var160 /* : NativeString */;
+long var161 /* : Int */;
+val* var162 /* : String */;
+static val* varonce163;
+val* var164 /* : String */;
+char* var165 /* : NativeString */;
+long var166 /* : Int */;
+val* var167 /* : String */;
+val* var168 /* : Array[Object] */;
+long var169 /* : Int */;
+val* var170 /* : NativeArray[Object] */;
+val* var171 /* : String */;
+val* var172 /* : Template */;
+static val* varonce173;
+val* var174 /* : String */;
+char* var175 /* : NativeString */;
+long var176 /* : Int */;
+val* var177 /* : String */;
+static val* varonce178;
+val* var179 /* : String */;
+char* var180 /* : NativeString */;
+long var181 /* : Int */;
+val* var182 /* : String */;
+static val* varonce183;
+val* var184 /* : String */;
+char* var185 /* : NativeString */;
+long var186 /* : Int */;
+val* var187 /* : String */;
+val* var188 /* : Array[Object] */;
+long var189 /* : Int */;
+val* var190 /* : NativeArray[Object] */;
+val* var191 /* : String */;
+val* var192 /* : Template */;
+static val* varonce193;
+val* var194 /* : String */;
+char* var195 /* : NativeString */;
+long var196 /* : Int */;
+val* var197 /* : String */;
+val* var198 /* : SignatureLength */;
+val* var199 /* : CppCallContext */;
+static val* varonce200;
+val* var201 /* : String */;
+char* var202 /* : NativeString */;
+long var203 /* : Int */;
+val* var204 /* : String */;
+val* var205 /* : String */;
+val* var206 /* : Template */;
+static val* varonce207;
+val* var208 /* : String */;
+char* var209 /* : NativeString */;
+long var210 /* : Int */;
+val* var211 /* : String */;
+val* var212 /* : nullable CPPCompilationUnit */;
+static val* varonce213;
+val* var214 /* : String */;
+char* var215 /* : NativeString */;
+long var216 /* : Int */;
+val* var217 /* : String */;
+val* var218 /* : SignatureLength */;
+val* var219 /* : CppCallContext */;
+val* var220 /* : String */;
+val* var_cpp_signature /* var cpp_signature: String */;
+val* var221 /* : CFunction */;
+val* var222 /* : Template */;
+val* var223 /* : Location */;
+val* var224 /* : String */;
+val* var225 /* : Template */;
+val* var226 /* : String */;
+val* var227 /* : nullable CPPCompilationUnit */;
+var_block = p0;
+var_m = p1;
+var_ecc = p2;
+var_nmodule = p3;
+var = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+var1 = NULL;
+if (var == NULL) {
+var2 = 1; /* is null */
+} else {
+var2 = 0; /* arg is null but recv is not */
+}
+if (var2){
+var3 = NEW_cpp__CPPCompilationUnit(&type_cpp__CPPCompilationUnit);
+((void (*)(val*))(var3->class->vft[COLOR_cpp__CPPCompilationUnit__init]))(var3) /* init on <var3:CPPCompilationUnit>*/;
+((void (*)(val*, val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file_61d]))(var_nmodule, var3) /* cpp_file= on <var_nmodule:AModule>*/;
+} else {
+}
+var4 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_nmodule) /* mmodule on <var_nmodule:AModule>*/;
+if (var4 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Cast failed");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 58);
+show_backtrace(1);
+}
+var_mmodule = var4;
+var5 = ((val* (*)(val*))(var_m->class->vft[COLOR_parser_nodes__ANode__parent]))(var_m) /* parent on <var_m:AExternPropdef>*/;
+/* <var5:nullable ANode> isa AClassdef */
+cltype = type_parser_nodes__AClassdef.color;
+idtype = type_parser_nodes__AClassdef.id;
+if(var5 == NULL) {
+var6 = 0;
+} else {
+if(cltype >= var5->type->table_size) {
+var6 = 0;
+} else {
+var6 = var5->type->type_table[cltype] == idtype;
+}
+}
+if (!var6) {
+var_class_name = var5 == NULL ? "null" : var5->type->name;
+fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AClassdef", var_class_name);
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 59);
+show_backtrace(1);
+}
+var7 = ((val* (*)(val*))(var5->class->vft[COLOR_modelize_class__AClassdef__mclass]))(var5) /* mclass on <var5:nullable ANode(AClassdef)>*/;
+if (var7 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 59);
+show_backtrace(1);
+} else {
+var8 = ((val* (*)(val*))(var7->class->vft[COLOR_model__MClass__mclass_type]))(var7) /* mclass_type on <var7:nullable MClass>*/;
+}
+var_mclass_type = var8;
+var9 = ((val* (*)(val*))(var_m->class->vft[COLOR_modelize_property__APropdef__mpropdef]))(var_m) /* mpropdef on <var_m:AExternPropdef>*/;
+if (var9 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 60);
+show_backtrace(1);
+} else {
+var10 = ((val* (*)(val*))(var9->class->vft[COLOR_model__MPropDef__mproperty]))(var9) /* mproperty on <var9:nullable MPropDef(nullable MMethodDef)>*/;
+}
+var_mproperty = var10;
+if (varonce) {
+var11 = varonce;
+} else {
+var12 = "___cpp_impl_mid";
+var13 = 15;
+var14 = string__NativeString__to_s_with_length(var12, var13);
+var11 = var14;
+varonce = var11;
+}
+var15 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:CPPLanguage>*/;
+var16 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__internal_call_context]))(self) /* internal_call_context on <self:CPPLanguage>*/;
+var17 = ((val* (*)(val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_csignature]))(var_mproperty, var_mclass_type, var_mmodule, var11, var15, var16) /* build_csignature on <var_mproperty:MMethod>*/;
+var_indirection_sig = var17;
+var18 = ((val* (*)(val*))(var_ecc->class->vft[COLOR_c_tools__CCompilationUnit__body_decl]))(var_ecc) /* body_decl on <var_ecc:CCompilationUnit>*/;
+if (varonce19) {
+var20 = varonce19;
+} else {
+var21 = ";\n";
+var22 = 2;
+var23 = string__NativeString__to_s_with_length(var21, var22);
+var20 = var23;
+varonce19 = var20;
+}
+var24 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var24 = array_instance Array[Object] */
+var25 = 2;
+var26 = NEW_array__NativeArray(var25, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var26)->values[0] = (val*) var_indirection_sig;
+((struct instance_array__NativeArray*)var26)->values[1] = (val*) var20;
+((void (*)(val*, val*, long))(var24->class->vft[COLOR_array__Array__with_native]))(var24, var26, var25) /* with_native on <var24:Array[Object]>*/;
+}
+var27 = ((val* (*)(val*))(var24->class->vft[COLOR_string__Object__to_s]))(var24) /* to_s on <var24:Array[Object]>*/;
+((void (*)(val*, val*))(var18->class->vft[COLOR_template__Template__add]))(var18, var27) /* add on <var18:Template>*/;
+var28 = NEW_c__ExternCFunction(&type_c__ExternCFunction);
+((void (*)(val*, val*, val*))(var28->class->vft[COLOR_c__ExternCFunction__init]))(var28, var_m, var_mmodule) /* init on <var28:ExternCFunction>*/;
+var_fc = var28;
+var29 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+if (varonce30) {
+var31 = varonce30;
+} else {
+var32 = "___cpp_impl_mid";
+var33 = 15;
+var34 = string__NativeString__to_s_with_length(var32, var33);
+var31 = var34;
+varonce30 = var31;
+}
+var35 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:CPPLanguage>*/;
+var36 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__cpp_call_context]))(self) /* cpp_call_context on <self:CPPLanguage>*/;
+var37 = NULL;
+var38 = ((val* (*)(val*, val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_ccall]))(var_mproperty, var_mclass_type, var_mmodule, var31, var35, var36, var37) /* build_ccall on <var_mproperty:MMethod>*/;
+((void (*)(val*, val*))(var29->class->vft[COLOR_template__Template__add]))(var29, var38) /* add on <var29:Template>*/;
+var39 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+if (varonce40) {
+var41 = varonce40;
+} else {
+var42 = "\n";
+var43 = 1;
+var44 = string__NativeString__to_s_with_length(var42, var43);
+var41 = var44;
+varonce40 = var41;
+}
+((void (*)(val*, val*))(var39->class->vft[COLOR_template__Template__add]))(var39, var41) /* add on <var39:Template>*/;
+((void (*)(val*, val*))(var_ecc->class->vft[COLOR_c_tools__CCompilationUnit__add_exported_function]))(var_ecc, var_fc) /* add_exported_function on <var_ecc:CCompilationUnit>*/;
+var45 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var45 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 79);
+show_backtrace(1);
+} else {
+var46 = ((val* (*)(val*))(var45->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var45) /* header_decl on <var45:nullable CPPCompilationUnit>*/;
+}
+if (varonce47) {
+var48 = varonce47;
+} else {
+var49 = "extern \"C\" {\n";
+var50 = 13;
+var51 = string__NativeString__to_s_with_length(var49, var50);
+var48 = var51;
+varonce47 = var48;
+}
+((void (*)(val*, val*))(var46->class->vft[COLOR_template__Template__add]))(var46, var48) /* add on <var46:Template>*/;
+var52 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var52 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 80);
+show_backtrace(1);
+} else {
+var53 = ((val* (*)(val*))(var52->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var52) /* header_decl on <var52:nullable CPPCompilationUnit>*/;
+}
+if (varonce54) {
+var55 = varonce54;
+} else {
+var56 = ";\n";
+var57 = 2;
+var58 = string__NativeString__to_s_with_length(var56, var57);
+var55 = var58;
+varonce54 = var55;
+}
+var59 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var59 = array_instance Array[Object] */
+var60 = 2;
+var61 = NEW_array__NativeArray(var60, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var61)->values[0] = (val*) var_indirection_sig;
+((struct instance_array__NativeArray*)var61)->values[1] = (val*) var55;
+((void (*)(val*, val*, long))(var59->class->vft[COLOR_array__Array__with_native]))(var59, var61, var60) /* with_native on <var59:Array[Object]>*/;
+}
+var62 = ((val* (*)(val*))(var59->class->vft[COLOR_string__Object__to_s]))(var59) /* to_s on <var59:Array[Object]>*/;
+((void (*)(val*, val*))(var53->class->vft[COLOR_template__Template__add]))(var53, var62) /* add on <var53:Template>*/;
+var63 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var63 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 81);
+show_backtrace(1);
+} else {
+var64 = ((val* (*)(val*))(var63->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var63) /* header_decl on <var63:nullable CPPCompilationUnit>*/;
+}
+if (varonce65) {
+var66 = varonce65;
+} else {
+var67 = "}\n";
+var68 = 2;
+var69 = string__NativeString__to_s_with_length(var67, var68);
+var66 = var69;
+varonce65 = var66;
+}
+((void (*)(val*, val*))(var64->class->vft[COLOR_template__Template__add]))(var64, var66) /* add on <var64:Template>*/;
+var70 = NEW_c_tools__CFunction(&type_c_tools__CFunction);
+((void (*)(val*, val*))(var70->class->vft[COLOR_c_tools__CFunction__init]))(var70, var_indirection_sig) /* init on <var70:CFunction>*/;
+var_fc = var70;
+var71 = ((short int (*)(val*))(var_mproperty->class->vft[COLOR_model__MMethod__is_init]))(var_mproperty) /* is_init on <var_mproperty:MMethod>*/;
+var72 = !var71;
+if (var72){
+if (varonce73) {
+var74 = varonce73;
+} else {
+var75 = "recv";
+var76 = 4;
+var77 = string__NativeString__to_s_with_length(var75, var76);
+var74 = var77;
+varonce73 = var74;
+}
+var_param_name = var74;
+var78 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__to_cpp_call_context]))(self) /* to_cpp_call_context on <self:CPPLanguage>*/;
+var79 = ((val* (*)(val*, val*))(var78->class->vft[COLOR_nitni_utilities__CallContext__name_mtype]))(var78, var_mclass_type) /* name_mtype on <var78:ToCppCallContext>*/;
+var_type_name = var79;
+var80 = ((val* (*)(val*))(var_mclass_type->class->vft[COLOR_model__MClassType__mclass]))(var_mclass_type) /* mclass on <var_mclass_type:MClassType>*/;
+var81 = ((val* (*)(val*))(var80->class->vft[COLOR_extern_classes__MClass__ftype]))(var80) /* ftype on <var80:MClass>*/;
+/* <var81:nullable ForeignType> isa ForeignCppType */
+cltype83 = type_cpp__ForeignCppType.color;
+idtype84 = type_cpp__ForeignCppType.id;
+if(var81 == NULL) {
+var82 = 0;
+} else {
+if(cltype83 >= var81->type->table_size) {
+var82 = 0;
+} else {
+var82 = var81->type->type_table[cltype83] == idtype84;
+}
+}
+if (var82){
+var85 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+if (varonce86) {
+var87 = varonce86;
+} else {
+var88 = " ";
+var89 = 1;
+var90 = string__NativeString__to_s_with_length(var88, var89);
+var87 = var90;
+varonce86 = var87;
+}
+if (varonce91) {
+var92 = varonce91;
+} else {
+var93 = "_for_cpp = static_cast<";
+var94 = 23;
+var95 = string__NativeString__to_s_with_length(var93, var94);
+var92 = var95;
+varonce91 = var92;
+}
+if (varonce96) {
+var97 = varonce96;
+} else {
+var98 = ">(";
+var99 = 2;
+var100 = string__NativeString__to_s_with_length(var98, var99);
+var97 = var100;
+varonce96 = var97;
+}
+if (varonce101) {
+var102 = varonce101;
+} else {
+var103 = ");\n";
+var104 = 3;
+var105 = string__NativeString__to_s_with_length(var103, var104);
+var102 = var105;
+varonce101 = var102;
+}
+var106 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var106 = array_instance Array[Object] */
+var107 = 8;
+var108 = NEW_array__NativeArray(var107, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var108)->values[0] = (val*) var_type_name;
+((struct instance_array__NativeArray*)var108)->values[1] = (val*) var87;
+((struct instance_array__NativeArray*)var108)->values[2] = (val*) var_param_name;
+((struct instance_array__NativeArray*)var108)->values[3] = (val*) var92;
+((struct instance_array__NativeArray*)var108)->values[4] = (val*) var_type_name;
+((struct instance_array__NativeArray*)var108)->values[5] = (val*) var97;
+((struct instance_array__NativeArray*)var108)->values[6] = (val*) var_param_name;
+((struct instance_array__NativeArray*)var108)->values[7] = (val*) var102;
+((void (*)(val*, val*, long))(var106->class->vft[COLOR_array__Array__with_native]))(var106, var108, var107) /* with_native on <var106:Array[Object]>*/;
+}
+var109 = ((val* (*)(val*))(var106->class->vft[COLOR_string__Object__to_s]))(var106) /* to_s on <var106:Array[Object]>*/;
+((void (*)(val*, val*))(var85->class->vft[COLOR_template__Template__add]))(var85, var109) /* add on <var85:Template>*/;
+} else {
+var110 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+if (varonce111) {
+var112 = varonce111;
+} else {
+var113 = " ";
+var114 = 1;
+var115 = string__NativeString__to_s_with_length(var113, var114);
+var112 = var115;
+varonce111 = var112;
+}
+if (varonce116) {
+var117 = varonce116;
+} else {
+var118 = "_for_cpp = ";
+var119 = 11;
+var120 = string__NativeString__to_s_with_length(var118, var119);
+var117 = var120;
+varonce116 = var117;
+}
+if (varonce121) {
+var122 = varonce121;
+} else {
+var123 = ";\n";
+var124 = 2;
+var125 = string__NativeString__to_s_with_length(var123, var124);
+var122 = var125;
+varonce121 = var122;
+}
+var126 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var126 = array_instance Array[Object] */
+var127 = 6;
+var128 = NEW_array__NativeArray(var127, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var128)->values[0] = (val*) var_type_name;
+((struct instance_array__NativeArray*)var128)->values[1] = (val*) var112;
+((struct instance_array__NativeArray*)var128)->values[2] = (val*) var_param_name;
+((struct instance_array__NativeArray*)var128)->values[3] = (val*) var117;
+((struct instance_array__NativeArray*)var128)->values[4] = (val*) var_param_name;
+((struct instance_array__NativeArray*)var128)->values[5] = (val*) var122;
+((void (*)(val*, val*, long))(var126->class->vft[COLOR_array__Array__with_native]))(var126, var128, var127) /* with_native on <var126:Array[Object]>*/;
+}
+var129 = ((val* (*)(val*))(var126->class->vft[COLOR_string__Object__to_s]))(var126) /* to_s on <var126:Array[Object]>*/;
+((void (*)(val*, val*))(var110->class->vft[COLOR_template__Template__add]))(var110, var129) /* add on <var110:Template>*/;
+}
+} else {
+}
+var130 = ((val* (*)(val*))(var_m->class->vft[COLOR_modelize_property__APropdef__mpropdef]))(var_m) /* mpropdef on <var_m:AExternPropdef>*/;
+if (var130 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 95);
+show_backtrace(1);
+} else {
+var131 = ((val* (*)(val*))(var130->class->vft[COLOR_model__MMethodDef__msignature]))(var130) /* msignature on <var130:nullable MPropDef(nullable MMethodDef)>*/;
+}
+if (var131 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 95);
+show_backtrace(1);
+} else {
+var132 = ((val* (*)(val*))(var131->class->vft[COLOR_model__MSignature__mparameters]))(var131) /* mparameters on <var131:nullable MSignature>*/;
+}
+var133 = ((val* (*)(val*))(var132->class->vft[COLOR_abstract_collection__Collection__iterator]))(var132) /* iterator on <var132:Array[MParameter]>*/;
+for(;;) {
+var134 = ((short int (*)(val*))(var133->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var133) /* is_ok on <var133:Iterator[nullable Object]>*/;
+if(!var134) break;
+var135 = ((val* (*)(val*))(var133->class->vft[COLOR_abstract_collection__Iterator__item]))(var133) /* item on <var133:Iterator[nullable Object]>*/;
+var_param = var135;
+var136 = ((val* (*)(val*))(var_param->class->vft[COLOR_model__MParameter__name]))(var_param) /* name on <var_param:MParameter>*/;
+var_param_name137 = var136;
+var138 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__to_cpp_call_context]))(self) /* to_cpp_call_context on <self:CPPLanguage>*/;
+var139 = ((val* (*)(val*))(var_param->class->vft[COLOR_model__MParameter__mtype]))(var_param) /* mtype on <var_param:MParameter>*/;
+var140 = ((val* (*)(val*, val*))(var138->class->vft[COLOR_nitni_utilities__CallContext__name_mtype]))(var138, var139) /* name_mtype on <var138:ToCppCallContext>*/;
+var_type_name141 = var140;
+var142 = ((val* (*)(val*))(var_mclass_type->class->vft[COLOR_model__MClassType__mclass]))(var_mclass_type) /* mclass on <var_mclass_type:MClassType>*/;
+var143 = ((val* (*)(val*))(var142->class->vft[COLOR_extern_classes__MClass__ftype]))(var142) /* ftype on <var142:MClass>*/;
+/* <var143:nullable ForeignType> isa ForeignCppType */
+cltype145 = type_cpp__ForeignCppType.color;
+idtype146 = type_cpp__ForeignCppType.id;
+if(var143 == NULL) {
+var144 = 0;
+} else {
+if(cltype145 >= var143->type->table_size) {
+var144 = 0;
+} else {
+var144 = var143->type->type_table[cltype145] == idtype146;
+}
+}
+if (var144){
+var147 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+if (varonce148) {
+var149 = varonce148;
+} else {
+var150 = " ";
+var151 = 1;
+var152 = string__NativeString__to_s_with_length(var150, var151);
+var149 = var152;
+varonce148 = var149;
+}
+if (varonce153) {
+var154 = varonce153;
+} else {
+var155 = "_for_cpp = static_cast<";
+var156 = 23;
+var157 = string__NativeString__to_s_with_length(var155, var156);
+var154 = var157;
+varonce153 = var154;
+}
+if (varonce158) {
+var159 = varonce158;
+} else {
+var160 = ">(";
+var161 = 2;
+var162 = string__NativeString__to_s_with_length(var160, var161);
+var159 = var162;
+varonce158 = var159;
+}
+if (varonce163) {
+var164 = varonce163;
+} else {
+var165 = ");\n";
+var166 = 3;
+var167 = string__NativeString__to_s_with_length(var165, var166);
+var164 = var167;
+varonce163 = var164;
+}
+var168 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var168 = array_instance Array[Object] */
+var169 = 8;
+var170 = NEW_array__NativeArray(var169, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var170)->values[0] = (val*) var_type_name141;
+((struct instance_array__NativeArray*)var170)->values[1] = (val*) var149;
+((struct instance_array__NativeArray*)var170)->values[2] = (val*) var_param_name137;
+((struct instance_array__NativeArray*)var170)->values[3] = (val*) var154;
+((struct instance_array__NativeArray*)var170)->values[4] = (val*) var_type_name141;
+((struct instance_array__NativeArray*)var170)->values[5] = (val*) var159;
+((struct instance_array__NativeArray*)var170)->values[6] = (val*) var_param_name137;
+((struct instance_array__NativeArray*)var170)->values[7] = (val*) var164;
+((void (*)(val*, val*, long))(var168->class->vft[COLOR_array__Array__with_native]))(var168, var170, var169) /* with_native on <var168:Array[Object]>*/;
+}
+var171 = ((val* (*)(val*))(var168->class->vft[COLOR_string__Object__to_s]))(var168) /* to_s on <var168:Array[Object]>*/;
+((void (*)(val*, val*))(var147->class->vft[COLOR_template__Template__add]))(var147, var171) /* add on <var147:Template>*/;
+} else {
+var172 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+if (varonce173) {
+var174 = varonce173;
+} else {
+var175 = " ";
+var176 = 1;
+var177 = string__NativeString__to_s_with_length(var175, var176);
+var174 = var177;
+varonce173 = var174;
+}
+if (varonce178) {
+var179 = varonce178;
+} else {
+var180 = "_for_cpp = ";
+var181 = 11;
+var182 = string__NativeString__to_s_with_length(var180, var181);
+var179 = var182;
+varonce178 = var179;
+}
+if (varonce183) {
+var184 = varonce183;
+} else {
+var185 = ";\n";
+var186 = 2;
+var187 = string__NativeString__to_s_with_length(var185, var186);
+var184 = var187;
+varonce183 = var184;
+}
+var188 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var188 = array_instance Array[Object] */
+var189 = 6;
+var190 = NEW_array__NativeArray(var189, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var190)->values[0] = (val*) var_type_name141;
+((struct instance_array__NativeArray*)var190)->values[1] = (val*) var174;
+((struct instance_array__NativeArray*)var190)->values[2] = (val*) var_param_name137;
+((struct instance_array__NativeArray*)var190)->values[3] = (val*) var179;
+((struct instance_array__NativeArray*)var190)->values[4] = (val*) var_param_name137;
+((struct instance_array__NativeArray*)var190)->values[5] = (val*) var184;
+((void (*)(val*, val*, long))(var188->class->vft[COLOR_array__Array__with_native]))(var188, var190, var189) /* with_native on <var188:Array[Object]>*/;
+}
+var191 = ((val* (*)(val*))(var188->class->vft[COLOR_string__Object__to_s]))(var188) /* to_s on <var188:Array[Object]>*/;
+((void (*)(val*, val*))(var172->class->vft[COLOR_template__Template__add]))(var172, var191) /* add on <var172:Template>*/;
+}
+CONTINUE_label: (void)0;
+((void (*)(val*))(var133->class->vft[COLOR_abstract_collection__Iterator__next]))(var133) /* next on <var133:Iterator[nullable Object]>*/;
+}
+BREAK_label: (void)0;
+var192 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+if (varonce193) {
+var194 = varonce193;
+} else {
+var195 = "___cpp_impl";
+var196 = 11;
+var197 = string__NativeString__to_s_with_length(var195, var196);
+var194 = var197;
+varonce193 = var194;
+}
+var198 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:CPPLanguage>*/;
+var199 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__cpp_call_context]))(self) /* cpp_call_context on <self:CPPLanguage>*/;
+if (varonce200) {
+var201 = varonce200;
+} else {
+var202 = "_for_cpp";
+var203 = 8;
+var204 = string__NativeString__to_s_with_length(var202, var203);
+var201 = var204;
+varonce200 = var201;
+}
+var205 = ((val* (*)(val*, val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_ccall]))(var_mproperty, var_mclass_type, var_mmodule, var194, var198, var199, var201) /* build_ccall on <var_mproperty:MMethod>*/;
+((void (*)(val*, val*))(var192->class->vft[COLOR_template__Template__add]))(var192, var205) /* add on <var192:Template>*/;
+var206 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+if (varonce207) {
+var208 = varonce207;
+} else {
+var209 = "\n";
+var210 = 1;
+var211 = string__NativeString__to_s_with_length(var209, var210);
+var208 = var211;
+varonce207 = var208;
+}
+((void (*)(val*, val*))(var206->class->vft[COLOR_template__Template__add]))(var206, var208) /* add on <var206:Template>*/;
+var212 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var212 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 106);
+show_backtrace(1);
+} else {
+((void (*)(val*, val*))(var212->class->vft[COLOR_c_tools__CCompilationUnit__add_local_function]))(var212, var_fc) /* add_local_function on <var212:nullable CPPCompilationUnit>*/;
+}
+if (varonce213) {
+var214 = varonce213;
+} else {
+var215 = "___cpp_impl";
+var216 = 11;
+var217 = string__NativeString__to_s_with_length(var215, var216);
+var214 = var217;
+varonce213 = var214;
+}
+var218 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:CPPLanguage>*/;
+var219 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__cpp_call_context]))(self) /* cpp_call_context on <self:CPPLanguage>*/;
+var220 = ((val* (*)(val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_csignature]))(var_mproperty, var_mclass_type, var_mmodule, var214, var218, var219) /* build_csignature on <var_mproperty:MMethod>*/;
+var_cpp_signature = var220;
+var221 = NEW_c_tools__CFunction(&type_c_tools__CFunction);
+((void (*)(val*, val*))(var221->class->vft[COLOR_c_tools__CFunction__init]))(var221, var_cpp_signature) /* init on <var221:CFunction>*/;
+var_fc = var221;
+var222 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__decls]))(var_fc) /* decls on <var_fc:CFunction>*/;
+var223 = ((val* (*)(val*))(var_block->class->vft[COLOR_parser_nodes__ANode__location]))(var_block) /* location on <var_block:AExternCodeBlock>*/;
+var224 = ((val* (*)(val*))(var223->class->vft[COLOR_c__Location__as_line_pragma]))(var223) /* as_line_pragma on <var223:Location>*/;
+((void (*)(val*, val*))(var222->class->vft[COLOR_template__Template__add]))(var222, var224) /* add on <var222:Template>*/;
+var225 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+var226 = ((val* (*)(val*))(var_block->class->vft[COLOR_ffi_base__AExternCodeBlock__code]))(var_block) /* code on <var_block:AExternCodeBlock>*/;
+((void (*)(val*, val*))(var225->class->vft[COLOR_template__Template__add]))(var225, var226) /* add on <var225:Template>*/;
+var227 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var227 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 113);
+show_backtrace(1);
+} else {
+((void (*)(val*, val*))(var227->class->vft[COLOR_c_tools__CCompilationUnit__add_local_function]))(var227, var_fc) /* add_local_function on <var227:nullable CPPCompilationUnit>*/;
+}
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#compile_extern_method for (self: Object, AExternCodeBlock, AExternPropdef, CCompilationUnit, AModule) */
+void VIRTUAL_cpp__CPPLanguage__compile_extern_method(val* self, val* p0, val* p1, val* p2, val* p3) {
+cpp__CPPLanguage__compile_extern_method(self, p0, p1, p2, p3);
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#compile_extern_class for (self: CPPLanguage, AExternCodeBlock, AClassdef, CCompilationUnit, AModule) */
+void cpp__CPPLanguage__compile_extern_class(val* self, val* p0, val* p1, val* p2, val* p3) {
+val* var_block /* var block: AExternCodeBlock */;
+val* var_m /* var m: AClassdef */;
+val* var_ecc /* var ecc: CCompilationUnit */;
+val* var_nmodule /* var nmodule: AModule */;
+var_block = p0;
+var_m = p1;
+var_ecc = p2;
+var_nmodule = p3;
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#compile_extern_class for (self: Object, AExternCodeBlock, AClassdef, CCompilationUnit, AModule) */
+void VIRTUAL_cpp__CPPLanguage__compile_extern_class(val* self, val* p0, val* p1, val* p2, val* p3) {
+cpp__CPPLanguage__compile_extern_class(self, p0, p1, p2, p3);
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#get_ftype for (self: CPPLanguage, AExternCodeBlock, AClassdef): ForeignType */
+val* cpp__CPPLanguage__get_ftype(val* self, val* p0, val* p1) {
+val* var /* : ForeignType */;
+val* var_block /* var block: AExternCodeBlock */;
+val* var_m /* var m: AClassdef */;
+val* var1 /* : ForeignCppType */;
+val* var2 /* : String */;
+var_block = p0;
+var_m = p1;
+var1 = NEW_cpp__ForeignCppType(&type_cpp__ForeignCppType);
+var2 = ((val* (*)(val*))(var_block->class->vft[COLOR_ffi_base__AExternCodeBlock__code]))(var_block) /* code on <var_block:AExternCodeBlock>*/;
+((void (*)(val*, val*))(var1->class->vft[COLOR_cpp__ForeignCppType__init]))(var1, var2) /* init on <var1:ForeignCppType>*/;
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#CPPLanguage#get_ftype for (self: Object, AExternCodeBlock, AClassdef): ForeignType */
+val* VIRTUAL_cpp__CPPLanguage__get_ftype(val* self, val* p0, val* p1) {
+val* var /* : ForeignType */;
+val* var1 /* : ForeignType */;
+var1 = cpp__CPPLanguage__get_ftype(self, p0, p1);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#CPPLanguage#compile_to_files for (self: CPPLanguage, AModule, String) */
+void cpp__CPPLanguage__compile_to_files(val* self, val* p0, val* p1) {
+val* var_nmodule /* var nmodule: AModule */;
+val* var_compdir /* var compdir: String */;
+val* var /* : nullable CPPCompilationUnit */;
+val* var_cpp_file /* var cpp_file: nullable CPPCompilationUnit */;
+val* var1 /* : null */;
+short int var2 /* : Bool */;
+val* var3 /* : Template */;
+static val* varonce;
+val* var4 /* : String */;
+char* var5 /* : NativeString */;
+long var6 /* : Int */;
+val* var7 /* : String */;
+val* var8 /* : Template */;
+static val* varonce9;
+val* var10 /* : String */;
+char* var11 /* : NativeString */;
+long var12 /* : Int */;
+val* var13 /* : String */;
+val* var14 /* : nullable MModule */;
+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 /* : String */;
+val* var25 /* : Template */;
+static val* varonce26;
+val* var27 /* : String */;
+char* var28 /* : NativeString */;
+long var29 /* : Int */;
+val* var30 /* : String */;
+val* var31 /* : ExternCppFile */;
+val* var_file /* var file: ExternCppFile */;
+val* var32 /* : Array[ExternFile] */;
+val* var33 /* : String */;
+static val* varonce34;
+val* var35 /* : String */;
+char* var36 /* : NativeString */;
+long var37 /* : Int */;
+val* var38 /* : String */;
+val* var39 /* : Array[Object] */;
+long var40 /* : Int */;
+val* var41 /* : NativeArray[Object] */;
+val* var42 /* : String */;
+var_nmodule = p0;
+var_compdir = p1;
+var = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+var_cpp_file = var;
+var1 = NULL;
+if (var_cpp_file == NULL) {
+var2 = 0; /* is null */
+} else {
+var2 = 1; /* arg is null and recv is not */
+}
+if (!var2) {
+fprintf(stderr, "Runtime error: %s", "Assert failed");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 123);
+show_backtrace(1);
+}
+var3 = ((val* (*)(val*))(var_cpp_file->class->vft[COLOR_c_tools__CCompilationUnit__header_custom]))(var_cpp_file) /* header_custom on <var_cpp_file:nullable CPPCompilationUnit(CPPCompilationUnit)>*/;
+if (varonce) {
+var4 = varonce;
+} else {
+var5 = "extern \"C\" {\n";
+var6 = 13;
+var7 = string__NativeString__to_s_with_length(var5, var6);
+var4 = var7;
+varonce = var4;
+}
+((void (*)(val*, val*))(var3->class->vft[COLOR_template__Template__add]))(var3, var4) /* add on <var3:Template>*/;
+var8 = ((val* (*)(val*))(var_cpp_file->class->vft[COLOR_c_tools__CCompilationUnit__header_custom]))(var_cpp_file) /* header_custom on <var_cpp_file:nullable CPPCompilationUnit(CPPCompilationUnit)>*/;
+if (varonce9) {
+var10 = varonce9;
+} else {
+var11 = "#include \"";
+var12 = 10;
+var13 = string__NativeString__to_s_with_length(var11, var12);
+var10 = var13;
+varonce9 = var10;
+}
+var14 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_nmodule) /* mmodule on <var_nmodule:AModule>*/;
+if (var14 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 127);
+show_backtrace(1);
+} else {
+var15 = ((val* (*)(val*))(var14->class->vft[COLOR_mmodule__MModule__name]))(var14) /* name on <var14:nullable MModule>*/;
+}
+if (varonce16) {
+var17 = varonce16;
+} else {
+var18 = "._ffi.h\"\n";
+var19 = 9;
+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 = 3;
+var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var23)->values[0] = (val*) var10;
+((struct instance_array__NativeArray*)var23)->values[1] = (val*) var15;
+((struct instance_array__NativeArray*)var23)->values[2] = (val*) var17;
+((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
+}
+var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
+((void (*)(val*, val*))(var8->class->vft[COLOR_template__Template__add]))(var8, var24) /* add on <var8:Template>*/;
+var25 = ((val* (*)(val*))(var_cpp_file->class->vft[COLOR_c_tools__CCompilationUnit__header_custom]))(var_cpp_file) /* header_custom on <var_cpp_file:nullable CPPCompilationUnit(CPPCompilationUnit)>*/;
+if (varonce26) {
+var27 = varonce26;
+} else {
+var28 = "}\n";
+var29 = 2;
+var30 = string__NativeString__to_s_with_length(var28, var29);
+var27 = var30;
+varonce26 = var27;
+}
+((void (*)(val*, val*))(var25->class->vft[COLOR_template__Template__add]))(var25, var27) /* add on <var25:Template>*/;
+var31 = ((val* (*)(val*, val*, val*))(var_cpp_file->class->vft[COLOR_cpp__CPPCompilationUnit__write_to_files]))(var_cpp_file, var_nmodule, var_compdir) /* write_to_files on <var_cpp_file:nullable CPPCompilationUnit(CPPCompilationUnit)>*/;
+var_file = var31;
+var32 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_ffi_base__AModule__ffi_files]))(var_nmodule) /* ffi_files on <var_nmodule:AModule>*/;
+((void (*)(val*, val*))(var32->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var32, var_file) /* add on <var32:Array[ExternFile]>*/;
+var33 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_c__AModule__c_linker_options]))(var_nmodule) /* c_linker_options on <var_nmodule:AModule>*/;
+if (varonce34) {
+var35 = varonce34;
+} else {
+var36 = " -lstdc++";
+var37 = 9;
+var38 = string__NativeString__to_s_with_length(var36, var37);
+var35 = var38;
+varonce34 = var35;
+}
+var39 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var39 = array_instance Array[Object] */
+var40 = 2;
+var41 = NEW_array__NativeArray(var40, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var41)->values[0] = (val*) var33;
+((struct instance_array__NativeArray*)var41)->values[1] = (val*) var35;
+((void (*)(val*, val*, long))(var39->class->vft[COLOR_array__Array__with_native]))(var39, var41, var40) /* with_native on <var39:Array[Object]>*/;
+}
+var42 = ((val* (*)(val*))(var39->class->vft[COLOR_string__Object__to_s]))(var39) /* to_s on <var39:Array[Object]>*/;
+((void (*)(val*, val*))(var_nmodule->class->vft[COLOR_c__AModule__c_linker_options_61d]))(var_nmodule, var42) /* c_linker_options= on <var_nmodule:AModule>*/;
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#compile_to_files for (self: Object, AModule, String) */
+void VIRTUAL_cpp__CPPLanguage__compile_to_files(val* self, val* p0, val* p1) {
+cpp__CPPLanguage__compile_to_files(self, p0, p1);
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#compile_callback for (self: CPPLanguage, NitniCallback, AModule, MModule, CCompilationUnit) */
+void cpp__CPPLanguage__compile_callback(val* self, val* p0, val* p1, val* p2, val* p3) {
+val* var_callback /* var callback: NitniCallback */;
+val* var_nmodule /* var nmodule: AModule */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var_ecc /* var ecc: CCompilationUnit */;
+var_callback = p0;
+var_nmodule = p1;
+var_mmodule = p2;
+var_ecc = p3;
+((void (*)(val*, val*, val*))(var_callback->class->vft[COLOR_cpp__NitniCallback__compile_callback_to_cpp]))(var_callback, var_nmodule, var_mmodule) /* compile_callback_to_cpp on <var_callback:NitniCallback>*/;
+RET_LABEL:;
+}
+/* method cpp#CPPLanguage#compile_callback for (self: Object, NitniCallback, AModule, MModule, CCompilationUnit) */
+void VIRTUAL_cpp__CPPLanguage__compile_callback(val* self, val* p0, val* p1, val* p2, val* p3) {
+cpp__CPPLanguage__compile_callback(self, p0, p1, p2, p3);
+RET_LABEL:;
+}
+/* method cpp#AExternCodeBlock#is_cpp for (self: AExternCodeBlock): Bool */
+short int cpp__AExternCodeBlock__is_cpp(val* self) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var2 /* : nullable String */;
+val* var3 /* : null */;
+short int var4 /* : Bool */;
+short int var_ /* var : Bool */;
+short int var5 /* : Bool */;
+val* var6 /* : nullable String */;
+static val* varonce;
+val* var7 /* : String */;
+char* var8 /* : NativeString */;
+long var9 /* : Int */;
+val* var10 /* : String */;
+short int var11 /* : Bool */;
+short int var_12 /* var : Bool */;
+val* var13 /* : nullable String */;
+static val* varonce14;
+val* var15 /* : String */;
+char* var16 /* : NativeString */;
+long var17 /* : Int */;
+val* var18 /* : String */;
+short int var19 /* : Bool */;
+var2 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name]))(self) /* language_name on <self:AExternCodeBlock>*/;
+var3 = NULL;
+if (var2 == NULL) {
+var4 = 0; /* is null */
+} else {
+var4 = 1; /* arg is null and recv is not */
+}
+var_ = var4;
+if (var4){
+var6 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
+if (varonce) {
+var7 = varonce;
+} else {
+var8 = "c++";
+var9 = 3;
+var10 = string__NativeString__to_s_with_length(var8, var9);
+var7 = var10;
+varonce = var7;
+}
+if (var6 == NULL) {
+var11 = 0; /* <var7:String> cannot be null */
+} else {
+var11 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_kernel__Object___61d_61d]))(var6, var7) /* == on <var6:nullable String>*/;
+}
+var_12 = var11;
+if (var11){
+var5 = var_12;
+} else {
+var13 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
+if (varonce14) {
+var15 = varonce14;
+} else {
+var16 = "c++ ";
+var17 = 4;
+var18 = string__NativeString__to_s_with_length(var16, var17);
+var15 = var18;
+varonce14 = var15;
+}
+if (var13 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 147);
+show_backtrace(1);
+} else {
+var19 = ((short int (*)(val*, val*))(var13->class->vft[COLOR_string__AbstractString__has_prefix]))(var13, var15) /* has_prefix on <var13:nullable String>*/;
+}
+var5 = var19;
+}
+var1 = var5;
+} else {
+var1 = var_;
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#AExternCodeBlock#is_cpp for (self: Object): Bool */
+short int VIRTUAL_cpp__AExternCodeBlock__is_cpp(val* self) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+var1 = cpp__AExternCodeBlock__is_cpp(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#AExternCodeBlock#is_cpp_body for (self: AExternCodeBlock): Bool */
+short int cpp__AExternCodeBlock__is_cpp_body(val* self) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var2 /* : nullable String */;
+val* var3 /* : null */;
+short int var4 /* : Bool */;
+short int var_ /* var : Bool */;
+short int var5 /* : Bool */;
+val* var6 /* : nullable String */;
+static val* varonce;
+val* var7 /* : String */;
+char* var8 /* : NativeString */;
+long var9 /* : Int */;
+val* var10 /* : String */;
+short int var11 /* : Bool */;
+short int var_12 /* var : Bool */;
+val* var13 /* : nullable String */;
+static val* varonce14;
+val* var15 /* : String */;
+char* var16 /* : NativeString */;
+long var17 /* : Int */;
+val* var18 /* : String */;
+short int var19 /* : Bool */;
+var2 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name]))(self) /* language_name on <self:AExternCodeBlock>*/;
+var3 = NULL;
+if (var2 == NULL) {
+var4 = 0; /* is null */
+} else {
+var4 = 1; /* arg is null and recv is not */
+}
+var_ = var4;
+if (var4){
+var6 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
+if (varonce) {
+var7 = varonce;
+} else {
+var8 = "c++";
+var9 = 3;
+var10 = string__NativeString__to_s_with_length(var8, var9);
+var7 = var10;
+varonce = var7;
+}
+if (var6 == NULL) {
+var11 = 0; /* <var7:String> cannot be null */
+} else {
+var11 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_kernel__Object___61d_61d]))(var6, var7) /* == on <var6:nullable String>*/;
+}
+var_12 = var11;
+if (var11){
+var5 = var_12;
+} else {
+var13 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
+if (varonce14) {
+var15 = varonce14;
+} else {
+var16 = "c++ body";
+var17 = 8;
+var18 = string__NativeString__to_s_with_length(var16, var17);
+var15 = var18;
+varonce14 = var15;
+}
+if (var13 == NULL) {
+var19 = 0; /* <var15:String> cannot be null */
+} else {
+var19 = ((short int (*)(val*, val*))(var13->class->vft[COLOR_kernel__Object___61d_61d]))(var13, var15) /* == on <var13:nullable String>*/;
+}
+var5 = var19;
+}
+var1 = var5;
+} else {
+var1 = var_;
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#AExternCodeBlock#is_cpp_body for (self: Object): Bool */
+short int VIRTUAL_cpp__AExternCodeBlock__is_cpp_body(val* self) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+var1 = cpp__AExternCodeBlock__is_cpp_body(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#AExternCodeBlock#is_cpp_header for (self: AExternCodeBlock): Bool */
+short int cpp__AExternCodeBlock__is_cpp_header(val* self) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var2 /* : nullable String */;
+val* var3 /* : null */;
+short int var4 /* : Bool */;
+short int var_ /* var : Bool */;
+val* var5 /* : nullable String */;
+static val* varonce;
+val* var6 /* : String */;
+char* var7 /* : NativeString */;
+long var8 /* : Int */;
+val* var9 /* : String */;
+short int var10 /* : Bool */;
+var2 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name]))(self) /* language_name on <self:AExternCodeBlock>*/;
+var3 = NULL;
+if (var2 == NULL) {
+var4 = 0; /* is null */
+} else {
+var4 = 1; /* arg is null and recv is not */
+}
+var_ = var4;
+if (var4){
+var5 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
+if (varonce) {
+var6 = varonce;
+} else {
+var7 = "c++ header";
+var8 = 10;
+var9 = string__NativeString__to_s_with_length(var7, var8);
+var6 = var9;
+varonce = var6;
+}
+if (var5 == NULL) {
+var10 = 0; /* <var6:String> cannot be null */
+} else {
+var10 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_kernel__Object___61d_61d]))(var5, var6) /* == on <var5:nullable String>*/;
+}
+var1 = var10;
+} else {
+var1 = var_;
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#AExternCodeBlock#is_cpp_header for (self: Object): Bool */
+short int VIRTUAL_cpp__AExternCodeBlock__is_cpp_header(val* self) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+var1 = cpp__AExternCodeBlock__is_cpp_header(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#CPPCompilationUnit#write_to_files for (self: CPPCompilationUnit, AModule, String): ExternCppFile */
+val* cpp__CPPCompilationUnit__write_to_files(val* self, val* p0, val* p1) {
+val* var /* : ExternCppFile */;
+val* var_amodule /* var amodule: AModule */;
+val* var_compdir /* var compdir: String */;
+val* var1 /* : Array[Object] */;
+long var2 /* : Int */;
+val* var_ /* var : Array[Object] */;
+static val* varonce;
+val* var3 /* : String */;
+char* var4 /* : NativeString */;
+long var5 /* : Int */;
+val* var6 /* : String */;
+val* var7 /* : nullable MModule */;
+val* var8 /* : String */;
+static val* varonce9;
+val* var10 /* : String */;
+char* var11 /* : NativeString */;
+long var12 /* : Int */;
+val* var13 /* : String */;
+val* var14 /* : String */;
+val* var_base_name /* var base_name: String */;
+val* var15 /* : Array[Object] */;
+long var16 /* : Int */;
+val* var_17 /* var : Array[Object] */;
+static val* varonce18;
+val* var19 /* : String */;
+char* var20 /* : NativeString */;
+long var21 /* : Int */;
+val* var22 /* : String */;
+static val* varonce23;
+val* var24 /* : String */;
+char* var25 /* : NativeString */;
+long var26 /* : Int */;
+val* var27 /* : String */;
+val* var28 /* : String */;
+val* var_h_file /* var h_file: String */;
+val* var29 /* : Array[Object] */;
+long var30 /* : Int */;
+val* var_31 /* var : Array[Object] */;
+static val* varonce32;
+val* var33 /* : String */;
+char* var34 /* : NativeString */;
+long var35 /* : Int */;
+val* var36 /* : String */;
+val* var37 /* : String */;
+val* var38 /* : String */;
+val* var39 /* : String */;
+static val* varonce40;
+val* var41 /* : String */;
+char* var42 /* : NativeString */;
+long var43 /* : Int */;
+val* var44 /* : String */;
+val* var45 /* : String */;
+val* var_guard /* var guard: String */;
+static val* varonce46;
+val* var47 /* : String */;
+char* var48 /* : NativeString */;
+long var49 /* : Int */;
+val* var50 /* : String */;
+val* var51 /* : Array[Object] */;
+long var52 /* : Int */;
+val* var53 /* : NativeArray[Object] */;
+val* var54 /* : String */;
+val* var55 /* : Array[String] */;
+val* var56 /* : Array[Object] */;
+long var57 /* : Int */;
+val* var_58 /* var : Array[Object] */;
+static val* varonce59;
+val* var60 /* : String */;
+char* var61 /* : NativeString */;
+long var62 /* : Int */;
+val* var63 /* : String */;
+static val* varonce64;
+val* var65 /* : String */;
+char* var66 /* : NativeString */;
+long var67 /* : Int */;
+val* var68 /* : String */;
+val* var69 /* : String */;
+val* var_c_file /* var c_file: String */;
+static val* varonce70;
+val* var71 /* : String */;
+char* var72 /* : NativeString */;
+long var73 /* : Int */;
+val* var74 /* : String */;
+val* var75 /* : Array[Object] */;
+long var76 /* : Int */;
+val* var77 /* : NativeArray[Object] */;
+val* var78 /* : String */;
+static val* varonce79;
+val* var80 /* : String */;
+char* var81 /* : NativeString */;
+long var82 /* : Int */;
+val* var83 /* : String */;
+static val* varonce84;
+val* var85 /* : String */;
+char* var86 /* : NativeString */;
+long var87 /* : Int */;
+val* var88 /* : String */;
+val* var89 /* : Array[Object] */;
+long var90 /* : Int */;
+val* var_91 /* var : Array[Object] */;
+static val* varonce92;
+val* var93 /* : String */;
+char* var94 /* : NativeString */;
+long var95 /* : Int */;
+val* var96 /* : String */;
+static val* varonce97;
+val* var98 /* : String */;
+char* var99 /* : NativeString */;
+long var100 /* : Int */;
+val* var101 /* : String */;
+val* var102 /* : String */;
+val* var103 /* : Array[String] */;
+long var104 /* : Int */;
+val* var105 /* : NativeArray[String] */;
+val* var106 /* : Array[String] */;
+static val* varonce107;
+val* var108 /* : String */;
+char* var109 /* : NativeString */;
+long var110 /* : Int */;
+val* var111 /* : String */;
+val* var112 /* : Array[Object] */;
+long var113 /* : Int */;
+val* var114 /* : NativeArray[Object] */;
+val* var115 /* : String */;
+val* var116 /* : ExternCppFile */;
+val* var117 /* : Array[Object] */;
+long var118 /* : Int */;
+val* var_119 /* var : Array[Object] */;
+static val* varonce120;
+val* var121 /* : String */;
+char* var122 /* : NativeString */;
+long var123 /* : Int */;
+val* var124 /* : String */;
+static val* varonce125;
+val* var126 /* : String */;
+char* var127 /* : NativeString */;
+long var128 /* : Int */;
+val* var129 /* : String */;
+static val* varonce130;
+val* var131 /* : String */;
+char* var132 /* : NativeString */;
+long var133 /* : Int */;
+val* var134 /* : String */;
+val* var135 /* : String */;
+var_amodule = p0;
+var_compdir = p1;
+var1 = NEW_array__Array(&type_array__Arraykernel__Object);
+var2 = 3;
+((void (*)(val*, long))(var1->class->vft[COLOR_array__Array__with_capacity]))(var1, var2) /* with_capacity on <var1:Array[Object]>*/;
+var_ = var1;
+if (varonce) {
+var3 = varonce;
+} else {
+var4 = "";
+var5 = 0;
+var6 = string__NativeString__to_s_with_length(var4, var5);
+var3 = var6;
+varonce = var3;
+}
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var3) /* add on <var_:Array[Object]>*/;
+var7 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_amodule) /* mmodule on <var_amodule:AModule>*/;
+if (var7 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 161);
+show_backtrace(1);
+} else {
+var8 = ((val* (*)(val*))(var7->class->vft[COLOR_mmodule__MModule__name]))(var7) /* name on <var7:nullable MModule>*/;
+}
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var8) /* add on <var_:Array[Object]>*/;
+if (varonce9) {
+var10 = varonce9;
+} else {
+var11 = "._ffi";
+var12 = 5;
+var13 = string__NativeString__to_s_with_length(var11, var12);
+var10 = var13;
+varonce9 = var10;
+}
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var10) /* add on <var_:Array[Object]>*/;
+var14 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
+var_base_name = var14;
+var15 = NEW_array__Array(&type_array__Arraykernel__Object);
+var16 = 3;
+((void (*)(val*, long))(var15->class->vft[COLOR_array__Array__with_capacity]))(var15, var16) /* with_capacity on <var15:Array[Object]>*/;
+var_17 = var15;
+if (varonce18) {
+var19 = varonce18;
+} else {
+var20 = "";
+var21 = 0;
+var22 = string__NativeString__to_s_with_length(var20, var21);
+var19 = var22;
+varonce18 = var19;
+}
+((void (*)(val*, val*))(var_17->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_17, var19) /* add on <var_17:Array[Object]>*/;
+((void (*)(val*, val*))(var_17->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_17, var_base_name) /* add on <var_17:Array[Object]>*/;
+if (varonce23) {
+var24 = varonce23;
+} else {
+var25 = ".hpp";
+var26 = 4;
+var27 = string__NativeString__to_s_with_length(var25, var26);
+var24 = var27;
+varonce23 = var24;
+}
+((void (*)(val*, val*))(var_17->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_17, var24) /* add on <var_17:Array[Object]>*/;
+var28 = ((val* (*)(val*))(var_17->class->vft[COLOR_string__Object__to_s]))(var_17) /* to_s on <var_17:Array[Object]>*/;
+var_h_file = var28;
+var29 = NEW_array__Array(&type_array__Arraykernel__Object);
+var30 = 3;
+((void (*)(val*, long))(var29->class->vft[COLOR_array__Array__with_capacity]))(var29, var30) /* with_capacity on <var29:Array[Object]>*/;
+var_31 = var29;
+if (varonce32) {
+var33 = varonce32;
+} else {
+var34 = "";
+var35 = 0;
+var36 = string__NativeString__to_s_with_length(var34, var35);
+var33 = var36;
+varonce32 = var33;
+}
+((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var33) /* add on <var_31:Array[Object]>*/;
+var37 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_nitni_base__AModule__cname]))(var_amodule) /* cname on <var_amodule:AModule>*/;
+var38 = ((val* (*)(val*))(var37->class->vft[COLOR_string__Object__to_s]))(var37) /* to_s on <var37:String>*/;
+var39 = ((val* (*)(val*))(var38->class->vft[COLOR_string__AbstractString__to_upper]))(var38) /* to_upper on <var38:String>*/;
+((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var39) /* add on <var_31:Array[Object]>*/;
+if (varonce40) {
+var41 = varonce40;
+} else {
+var42 = "_NIT_HPP";
+var43 = 8;
+var44 = string__NativeString__to_s_with_length(var42, var43);
+var41 = var44;
+varonce40 = var41;
+}
+((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var41) /* add on <var_31:Array[Object]>*/;
+var45 = ((val* (*)(val*))(var_31->class->vft[COLOR_string__Object__to_s]))(var_31) /* to_s on <var_31:Array[Object]>*/;
+var_guard = var45;
+if (varonce46) {
+var47 = varonce46;
+} else {
+var48 = "/";
+var49 = 1;
+var50 = string__NativeString__to_s_with_length(var48, var49);
+var47 = var50;
+varonce46 = var47;
+}
+var51 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var51 = array_instance Array[Object] */
+var52 = 3;
+var53 = NEW_array__NativeArray(var52, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var53)->values[0] = (val*) var_compdir;
+((struct instance_array__NativeArray*)var53)->values[1] = (val*) var47;
+((struct instance_array__NativeArray*)var53)->values[2] = (val*) var_h_file;
+((void (*)(val*, val*, long))(var51->class->vft[COLOR_array__Array__with_native]))(var51, var53, var52) /* with_native on <var51:Array[Object]>*/;
+}
+var54 = ((val* (*)(val*))(var51->class->vft[COLOR_string__Object__to_s]))(var51) /* to_s on <var51:Array[Object]>*/;
+var55 = NEW_array__Array(&type_array__Arraystring__String);
+((void (*)(val*))(var55->class->vft[COLOR_array__Array__init]))(var55) /* init on <var55:Array[String]>*/;
+((void (*)(val*, val*, val*, val*, val*))(self->class->vft[COLOR_ffi_base__CCompilationUnit__write_header_to_file]))(self, var_amodule, var54, var55, var_guard) /* write_header_to_file on <self:CPPCompilationUnit>*/;
+var56 = NEW_array__Array(&type_array__Arraykernel__Object);
+var57 = 3;
+((void (*)(val*, long))(var56->class->vft[COLOR_array__Array__with_capacity]))(var56, var57) /* with_capacity on <var56:Array[Object]>*/;
+var_58 = var56;
+if (varonce59) {
+var60 = varonce59;
+} else {
+var61 = "";
+var62 = 0;
+var63 = string__NativeString__to_s_with_length(var61, var62);
+var60 = var63;
+varonce59 = var60;
+}
+((void (*)(val*, val*))(var_58->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_58, var60) /* add on <var_58:Array[Object]>*/;
+((void (*)(val*, val*))(var_58->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_58, var_base_name) /* add on <var_58:Array[Object]>*/;
+if (varonce64) {
+var65 = varonce64;
+} else {
+var66 = ".cpp";
+var67 = 4;
+var68 = string__NativeString__to_s_with_length(var66, var67);
+var65 = var68;
+varonce64 = var65;
+}
+((void (*)(val*, val*))(var_58->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_58, var65) /* add on <var_58:Array[Object]>*/;
+var69 = ((val* (*)(val*))(var_58->class->vft[COLOR_string__Object__to_s]))(var_58) /* to_s on <var_58:Array[Object]>*/;
+var_c_file = var69;
+if (varonce70) {
+var71 = varonce70;
+} else {
+var72 = "/";
+var73 = 1;
+var74 = string__NativeString__to_s_with_length(var72, var73);
+var71 = var74;
+varonce70 = var71;
+}
+var75 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var75 = array_instance Array[Object] */
+var76 = 3;
+var77 = NEW_array__NativeArray(var76, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var77)->values[0] = (val*) var_compdir;
+((struct instance_array__NativeArray*)var77)->values[1] = (val*) var71;
+((struct instance_array__NativeArray*)var77)->values[2] = (val*) var_c_file;
+((void (*)(val*, val*, long))(var75->class->vft[COLOR_array__Array__with_native]))(var75, var77, var76) /* with_native on <var75:Array[Object]>*/;
+}
+var78 = ((val* (*)(val*))(var75->class->vft[COLOR_string__Object__to_s]))(var75) /* to_s on <var75:Array[Object]>*/;
+if (varonce79) {
+var80 = varonce79;
+} else {
+var81 = "<string>";
+var82 = 8;
+var83 = string__NativeString__to_s_with_length(var81, var82);
+var80 = var83;
+varonce79 = var80;
+}
+if (varonce84) {
+var85 = varonce84;
+} else {
+var86 = "<iostream>";
+var87 = 10;
+var88 = string__NativeString__to_s_with_length(var86, var87);
+var85 = var88;
+varonce84 = var85;
+}
+var89 = NEW_array__Array(&type_array__Arraykernel__Object);
+var90 = 3;
+((void (*)(val*, long))(var89->class->vft[COLOR_array__Array__with_capacity]))(var89, var90) /* with_capacity on <var89:Array[Object]>*/;
+var_91 = var89;
+if (varonce92) {
+var93 = varonce92;
+} else {
+var94 = "\"";
+var95 = 1;
+var96 = string__NativeString__to_s_with_length(var94, var95);
+var93 = var96;
+varonce92 = var93;
+}
+((void (*)(val*, val*))(var_91->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_91, var93) /* add on <var_91:Array[Object]>*/;
+((void (*)(val*, val*))(var_91->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_91, var_h_file) /* add on <var_91:Array[Object]>*/;
+if (varonce97) {
+var98 = varonce97;
+} else {
+var99 = "\"";
+var100 = 1;
+var101 = string__NativeString__to_s_with_length(var99, var100);
+var98 = var101;
+varonce97 = var98;
+}
+((void (*)(val*, val*))(var_91->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_91, var98) /* add on <var_91:Array[Object]>*/;
+var102 = ((val* (*)(val*))(var_91->class->vft[COLOR_string__Object__to_s]))(var_91) /* to_s on <var_91:Array[Object]>*/;
+var103 = NEW_array__Array(&type_array__Arraystring__String);
+{ /* var103 = array_instance Array[String] */
+var104 = 3;
+var105 = NEW_array__NativeArray(var104, &type_array__NativeArraystring__String);
+((struct instance_array__NativeArray*)var105)->values[0] = (val*) var80;
+((struct instance_array__NativeArray*)var105)->values[1] = (val*) var85;
+((struct instance_array__NativeArray*)var105)->values[2] = (val*) var102;
+((void (*)(val*, val*, long))(var103->class->vft[COLOR_array__Array__with_native]))(var103, var105, var104) /* with_native on <var103:Array[String]>*/;
+}
+((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_ffi_base__CCompilationUnit__write_body_to_file]))(self, var_amodule, var78, var103) /* write_body_to_file on <self:CPPCompilationUnit>*/;
+var106 = ((val* (*)(val*))(self->class->vft[COLOR_c_tools__CCompilationUnit__files]))(self) /* files on <self:CPPCompilationUnit>*/;
+if (varonce107) {
+var108 = varonce107;
+} else {
+var109 = "/";
+var110 = 1;
+var111 = string__NativeString__to_s_with_length(var109, var110);
+var108 = var111;
+varonce107 = var108;
+}
+var112 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var112 = array_instance Array[Object] */
+var113 = 3;
+var114 = NEW_array__NativeArray(var113, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var114)->values[0] = (val*) var_compdir;
+((struct instance_array__NativeArray*)var114)->values[1] = (val*) var108;
+((struct instance_array__NativeArray*)var114)->values[2] = (val*) var_c_file;
+((void (*)(val*, val*, long))(var112->class->vft[COLOR_array__Array__with_native]))(var112, var114, var113) /* with_native on <var112:Array[Object]>*/;
+}
+var115 = ((val* (*)(val*))(var112->class->vft[COLOR_string__Object__to_s]))(var112) /* to_s on <var112:Array[Object]>*/;
+((void (*)(val*, val*))(var106->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var106, var115) /* add on <var106:Array[String]>*/;
+var116 = NEW_cpp__ExternCppFile(&type_cpp__ExternCppFile);
+var117 = NEW_array__Array(&type_array__Arraykernel__Object);
+var118 = 5;
+((void (*)(val*, long))(var117->class->vft[COLOR_array__Array__with_capacity]))(var117, var118) /* with_capacity on <var117:Array[Object]>*/;
+var_119 = var117;
+if (varonce120) {
+var121 = varonce120;
+} else {
+var122 = "";
+var123 = 0;
+var124 = string__NativeString__to_s_with_length(var122, var123);
+var121 = var124;
+varonce120 = var121;
+}
+((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var121) /* add on <var_119:Array[Object]>*/;
+((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var_compdir) /* add on <var_119:Array[Object]>*/;
+if (varonce125) {
+var126 = varonce125;
+} else {
+var127 = "/";
+var128 = 1;
+var129 = string__NativeString__to_s_with_length(var127, var128);
+var126 = var129;
+varonce125 = var126;
+}
+((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var126) /* add on <var_119:Array[Object]>*/;
+((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var_c_file) /* add on <var_119:Array[Object]>*/;
+if (varonce130) {
+var131 = varonce130;
+} else {
+var132 = "";
+var133 = 0;
+var134 = string__NativeString__to_s_with_length(var132, var133);
+var131 = var134;
+varonce130 = var131;
+}
+((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var131) /* add on <var_119:Array[Object]>*/;
+var135 = ((val* (*)(val*))(var_119->class->vft[COLOR_string__Object__to_s]))(var_119) /* to_s on <var_119:Array[Object]>*/;
+((void (*)(val*, val*, val*))(var116->class->vft[COLOR_cpp__ExternCppFile__init]))(var116, var135, var_amodule) /* init on <var116:ExternCppFile>*/;
+var = var116;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#CPPCompilationUnit#write_to_files for (self: Object, AModule, String): ExternCppFile */
+val* VIRTUAL_cpp__CPPCompilationUnit__write_to_files(val* self, val* p0, val* p1) {
+val* var /* : ExternCppFile */;
+val* var1 /* : ExternCppFile */;
+var1 = cpp__CPPCompilationUnit__write_to_files(self, p0, p1);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#CPPCompilationUnit#init for (self: CPPCompilationUnit) */
+void cpp__CPPCompilationUnit__init(val* self) {
+((void (*)(val*))(self->class->vft[COLOR_c_tools__CCompilationUnit__init]))(self) /* init on <self:CPPCompilationUnit>*/;
+RET_LABEL:;
+}
+/* method cpp#CPPCompilationUnit#init for (self: Object) */
+void VIRTUAL_cpp__CPPCompilationUnit__init(val* self) {
+cpp__CPPCompilationUnit__init(self);
+RET_LABEL:;
+}
+/* method cpp#ExternCppFile#amodule for (self: ExternCppFile): AModule */
+val* cpp__ExternCppFile__amodule(val* self) {
+val* var /* : AModule */;
+val* var1 /* : AModule */;
+var1 = self->attrs[COLOR_cpp__ExternCppFile___64damodule].val; /* @amodule on <self:ExternCppFile> */
+if (var1 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @amodule");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 180);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#ExternCppFile#amodule for (self: Object): AModule */
+val* VIRTUAL_cpp__ExternCppFile__amodule(val* self) {
+val* var /* : AModule */;
+val* var1 /* : AModule */;
+var1 = cpp__ExternCppFile__amodule(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#ExternCppFile#amodule= for (self: ExternCppFile, AModule) */
+void cpp__ExternCppFile__amodule_61d(val* self, val* p0) {
+self->attrs[COLOR_cpp__ExternCppFile___64damodule].val = p0; /* @amodule on <self:ExternCppFile> */
+RET_LABEL:;
+}
+/* method cpp#ExternCppFile#amodule= for (self: Object, AModule) */
+void VIRTUAL_cpp__ExternCppFile__amodule_61d(val* self, val* p0) {
+cpp__ExternCppFile__amodule_61d(self, p0);
+RET_LABEL:;
+}
+/* method cpp#ExternCppFile#init for (self: ExternCppFile, String, AModule) */
+void cpp__ExternCppFile__init(val* self, val* p0, val* p1) {
+val* var_path /* var path: String */;
+val* var_amodule /* var amodule: AModule */;
+var_path = p0;
+var_amodule = p1;
+((void (*)(val*, val*))(self->class->vft[COLOR_ffi_base__ExternFile__init]))(self, p0) /* init on <self:ExternCppFile>*/;
+((void (*)(val*, val*))(self->class->vft[COLOR_cpp__ExternCppFile__amodule_61d]))(self, var_amodule) /* amodule= on <self:ExternCppFile>*/;
+RET_LABEL:;
+}
+/* method cpp#ExternCppFile#init for (self: Object, String, AModule) */
+void VIRTUAL_cpp__ExternCppFile__init(val* self, val* p0, val* p1) {
+cpp__ExternCppFile__init(self, p0, p1);
+RET_LABEL:;
+}
+/* method cpp#ExternCppFile#makefile_rule_name for (self: ExternCppFile): String */
+val* cpp__ExternCppFile__makefile_rule_name(val* self) {
+val* var /* : String */;
+val* var1 /* : Array[Object] */;
+long var2 /* : Int */;
+val* var_ /* var : Array[Object] */;
+static val* varonce;
+val* var3 /* : String */;
+char* var4 /* : NativeString */;
+long var5 /* : Int */;
+val* var6 /* : String */;
+val* var7 /* : String */;
+static val* varonce8;
+val* var9 /* : String */;
+char* var10 /* : NativeString */;
+long var11 /* : Int */;
+val* var12 /* : String */;
+val* var13 /* : String */;
+static val* varonce14;
+val* var15 /* : String */;
+char* var16 /* : NativeString */;
+long var17 /* : Int */;
+val* var18 /* : String */;
+val* var19 /* : String */;
+var1 = NEW_array__Array(&type_array__Arraykernel__Object);
+var2 = 3;
+((void (*)(val*, long))(var1->class->vft[COLOR_array__Array__with_capacity]))(var1, var2) /* with_capacity on <var1:Array[Object]>*/;
+var_ = var1;
+if (varonce) {
+var3 = varonce;
+} else {
+var4 = "";
+var5 = 0;
+var6 = string__NativeString__to_s_with_length(var4, var5);
+var3 = var6;
+varonce = var3;
+}
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var3) /* add on <var_:Array[Object]>*/;
+var7 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__ExternFile__filename]))(self) /* filename on <self:ExternCppFile>*/;
+if (varonce8) {
+var9 = varonce8;
+} else {
+var10 = "";
+var11 = 0;
+var12 = string__NativeString__to_s_with_length(var10, var11);
+var9 = var12;
+varonce8 = var9;
+}
+var13 = ((val* (*)(val*, val*))(var7->class->vft[COLOR_file__String__basename]))(var7, var9) /* basename on <var7:String>*/;
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var13) /* add on <var_:Array[Object]>*/;
+if (varonce14) {
+var15 = varonce14;
+} else {
+var16 = ".o";
+var17 = 2;
+var18 = string__NativeString__to_s_with_length(var16, var17);
+var15 = var18;
+varonce14 = var15;
+}
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var15) /* add on <var_:Array[Object]>*/;
+var19 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
+var = var19;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#ExternCppFile#makefile_rule_name for (self: Object): String */
+val* VIRTUAL_cpp__ExternCppFile__makefile_rule_name(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = cpp__ExternCppFile__makefile_rule_name(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#ExternCppFile#makefile_rule_content for (self: ExternCppFile): String */
+val* cpp__ExternCppFile__makefile_rule_content(val* self) {
+val* var /* : String */;
+val* var1 /* : Array[Object] */;
+long var2 /* : Int */;
+val* var_ /* var : Array[Object] */;
+static val* varonce;
+val* var3 /* : String */;
+char* var4 /* : NativeString */;
+long var5 /* : Int */;
+val* var6 /* : String */;
+val* var7 /* : AModule */;
+val* var8 /* : String */;
+static val* varonce9;
+val* var10 /* : String */;
+char* var11 /* : NativeString */;
+long var12 /* : Int */;
+val* var13 /* : String */;
+val* var14 /* : String */;
+static val* varonce15;
+val* var16 /* : String */;
+char* var17 /* : NativeString */;
+long var18 /* : Int */;
+val* var19 /* : String */;
+val* var20 /* : String */;
+static val* varonce21;
+val* var22 /* : String */;
+char* var23 /* : NativeString */;
+long var24 /* : Int */;
+val* var25 /* : String */;
+val* var26 /* : String */;
+static val* varonce27;
+val* var28 /* : String */;
+char* var29 /* : NativeString */;
+long var30 /* : Int */;
+val* var31 /* : String */;
+val* var32 /* : String */;
+static val* varonce33;
+val* var34 /* : String */;
+char* var35 /* : NativeString */;
+long var36 /* : Int */;
+val* var37 /* : String */;
+val* var38 /* : String */;
+var1 = NEW_array__Array(&type_array__Arraykernel__Object);
+var2 = 7;
+((void (*)(val*, long))(var1->class->vft[COLOR_array__Array__with_capacity]))(var1, var2) /* with_capacity on <var1:Array[Object]>*/;
+var_ = var1;
+if (varonce) {
+var3 = varonce;
+} else {
+var4 = "g++ ";
+var5 = 4;
+var6 = string__NativeString__to_s_with_length(var4, var5);
+var3 = var6;
+varonce = var3;
+}
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var3) /* add on <var_:Array[Object]>*/;
+var7 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__ExternCppFile__amodule]))(self) /* amodule on <self:ExternCppFile>*/;
+var8 = ((val* (*)(val*))(var7->class->vft[COLOR_cpp__AModule__cpp_compiler_options]))(var7) /* cpp_compiler_options on <var7:AModule>*/;
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var8) /* add on <var_:Array[Object]>*/;
+if (varonce9) {
+var10 = varonce9;
+} else {
+var11 = " -c ";
+var12 = 4;
+var13 = string__NativeString__to_s_with_length(var11, var12);
+var10 = var13;
+varonce9 = var10;
+}
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var10) /* add on <var_:Array[Object]>*/;
+var14 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__ExternFile__filename]))(self) /* filename on <self:ExternCppFile>*/;
+if (varonce15) {
+var16 = varonce15;
+} else {
+var17 = "";
+var18 = 0;
+var19 = string__NativeString__to_s_with_length(var17, var18);
+var16 = var19;
+varonce15 = var16;
+}
+var20 = ((val* (*)(val*, val*))(var14->class->vft[COLOR_file__String__basename]))(var14, var16) /* basename on <var14:String>*/;
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var20) /* add on <var_:Array[Object]>*/;
+if (varonce21) {
+var22 = varonce21;
+} else {
+var23 = " -o ";
+var24 = 4;
+var25 = string__NativeString__to_s_with_length(var23, var24);
+var22 = var25;
+varonce21 = var22;
+}
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var22) /* add on <var_:Array[Object]>*/;
+var26 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__ExternFile__filename]))(self) /* filename on <self:ExternCppFile>*/;
+if (varonce27) {
+var28 = varonce27;
+} else {
+var29 = "";
+var30 = 0;
+var31 = string__NativeString__to_s_with_length(var29, var30);
+var28 = var31;
+varonce27 = var28;
+}
+var32 = ((val* (*)(val*, val*))(var26->class->vft[COLOR_file__String__basename]))(var26, var28) /* basename on <var26:String>*/;
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var32) /* add on <var_:Array[Object]>*/;
+if (varonce33) {
+var34 = varonce33;
+} else {
+var35 = ".o";
+var36 = 2;
+var37 = string__NativeString__to_s_with_length(var35, var36);
+var34 = var37;
+varonce33 = var34;
+}
+((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var34) /* add on <var_:Array[Object]>*/;
+var38 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
+var = var38;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#ExternCppFile#makefile_rule_content for (self: Object): String */
+val* VIRTUAL_cpp__ExternCppFile__makefile_rule_content(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = cpp__ExternCppFile__makefile_rule_content(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#ForeignCppType#cpp_type for (self: ForeignCppType): String */
+val* cpp__ForeignCppType__cpp_type(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = self->attrs[COLOR_cpp__ForeignCppType___64dcpp_type].val; /* @cpp_type on <self:ForeignCppType> */
+if (var1 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @cpp_type");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 194);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#ForeignCppType#cpp_type for (self: Object): String */
+val* VIRTUAL_cpp__ForeignCppType__cpp_type(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = cpp__ForeignCppType__cpp_type(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#ForeignCppType#cpp_type= for (self: ForeignCppType, String) */
+void cpp__ForeignCppType__cpp_type_61d(val* self, val* p0) {
+self->attrs[COLOR_cpp__ForeignCppType___64dcpp_type].val = p0; /* @cpp_type on <self:ForeignCppType> */
+RET_LABEL:;
+}
+/* method cpp#ForeignCppType#cpp_type= for (self: Object, String) */
+void VIRTUAL_cpp__ForeignCppType__cpp_type_61d(val* self, val* p0) {
+cpp__ForeignCppType__cpp_type_61d(self, p0);
+RET_LABEL:;
+}
+/* method cpp#ForeignCppType#init for (self: ForeignCppType, String) */
+void cpp__ForeignCppType__init(val* self, val* p0) {
+val* var_cpp_type /* var cpp_type: String */;
+var_cpp_type = p0;
+((void (*)(val*))(self->class->vft[COLOR_ffi_base__ForeignType__init]))(self) /* init on <self:ForeignCppType>*/;
+((void (*)(val*, val*))(self->class->vft[COLOR_cpp__ForeignCppType__cpp_type_61d]))(self, var_cpp_type) /* cpp_type= on <self:ForeignCppType>*/;
+RET_LABEL:;
+}
+/* method cpp#ForeignCppType#init for (self: Object, String) */
+void VIRTUAL_cpp__ForeignCppType__init(val* self, val* p0) {
+cpp__ForeignCppType__init(self, p0);
+RET_LABEL:;
+}
+/* method cpp#NitniCallback#compile_callback_to_cpp for (self: NitniCallback, AModule, MModule) */
+void cpp__NitniCallback__compile_callback_to_cpp(val* self, val* p0, val* p1) {
+val* var_nmodule /* var nmodule: AModule */;
+val* var_mmodule /* var mmodule: MModule */;
+var_nmodule = p0;
+var_mmodule = p1;
+RET_LABEL:;
+}
+/* method cpp#NitniCallback#compile_callback_to_cpp for (self: Object, AModule, MModule) */
+void VIRTUAL_cpp__NitniCallback__compile_callback_to_cpp(val* self, val* p0, val* p1) {
+cpp__NitniCallback__compile_callback_to_cpp(self, p0, p1);
+RET_LABEL:;
+}
+/* method cpp#Object#cpp_call_context for (self: Object): CppCallContext */
+val* cpp__Object__cpp_call_context(val* self) {
+val* var /* : CppCallContext */;
+static val* varonce;
+static int varonce_guard;
+val* var1 /* : CppCallContext */;
+val* var2 /* : CppCallContext */;
+if (varonce_guard) {
+var1 = varonce;
+} else {
+var2 = NEW_cpp__CppCallContext(&type_cpp__CppCallContext);
+((void (*)(val*))(var2->class->vft[COLOR_cpp__CppCallContext__init]))(var2) /* init on <var2:CppCallContext>*/;
+var1 = var2;
+varonce = var1;
+varonce_guard = 1;
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#Object#cpp_call_context for (self: Object): CppCallContext */
+val* VIRTUAL_cpp__Object__cpp_call_context(val* self) {
+val* var /* : CppCallContext */;
+val* var1 /* : CppCallContext */;
+var1 = cpp__Object__cpp_call_context(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#Object#to_cpp_call_context for (self: Object): ToCppCallContext */
+val* cpp__Object__to_cpp_call_context(val* self) {
+val* var /* : ToCppCallContext */;
+static val* varonce;
+static int varonce_guard;
+val* var1 /* : ToCppCallContext */;
+val* var2 /* : ToCppCallContext */;
+if (varonce_guard) {
+var1 = varonce;
+} else {
+var2 = NEW_cpp__ToCppCallContext(&type_cpp__ToCppCallContext);
+((void (*)(val*))(var2->class->vft[COLOR_cpp__ToCppCallContext__init]))(var2) /* init on <var2:ToCppCallContext>*/;
+var1 = var2;
+varonce = var1;
+varonce_guard = 1;
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#Object#to_cpp_call_context for (self: Object): ToCppCallContext */
+val* VIRTUAL_cpp__Object__to_cpp_call_context(val* self) {
+val* var /* : ToCppCallContext */;
+val* var1 /* : ToCppCallContext */;
+var1 = cpp__Object__to_cpp_call_context(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#Object#from_cpp_call_context for (self: Object): FromCppCallContext */
+val* cpp__Object__from_cpp_call_context(val* self) {
+val* var /* : FromCppCallContext */;
+static val* varonce;
+static int varonce_guard;
+val* var1 /* : FromCppCallContext */;
+val* var2 /* : FromCppCallContext */;
+if (varonce_guard) {
+var1 = varonce;
+} else {
+var2 = NEW_cpp__FromCppCallContext(&type_cpp__FromCppCallContext);
+((void (*)(val*))(var2->class->vft[COLOR_cpp__FromCppCallContext__init]))(var2) /* init on <var2:FromCppCallContext>*/;
+var1 = var2;
+varonce = var1;
+varonce_guard = 1;
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#Object#from_cpp_call_context for (self: Object): FromCppCallContext */
+val* VIRTUAL_cpp__Object__from_cpp_call_context(val* self) {
+val* var /* : FromCppCallContext */;
+val* var1 /* : FromCppCallContext */;
+var1 = cpp__Object__from_cpp_call_context(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#MExplicitCall#compile_callback_to_cpp for (self: MExplicitCall, AModule, MModule) */
+void cpp__MExplicitCall__compile_callback_to_cpp(val* self, val* p0, val* p1) {
+val* var_nmodule /* var nmodule: AModule */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var /* : MProperty */;
+val* var_mproperty /* var mproperty: MProperty */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : MClassType */;
+val* var3 /* : null */;
+val* var4 /* : SignatureLength */;
+val* var5 /* : FromCppCallContext */;
+val* var6 /* : String */;
+val* var_cpp_signature /* var cpp_signature: String */;
+val* var7 /* : MClassType */;
+val* var8 /* : null */;
+val* var9 /* : SignatureLength */;
+val* var10 /* : FromCppCallContext */;
+val* var11 /* : null */;
+val* var12 /* : String */;
+val* var_ccall /* var ccall: String */;
+val* var13 /* : CFunction */;
+val* var_fc /* var fc: CFunction */;
+val* var14 /* : Template */;
+val* var15 /* : nullable CPPCompilationUnit */;
+var_nmodule = p0;
+var_mmodule = p1;
+var = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__mproperty]))(self) /* mproperty on <self:MExplicitCall>*/;
+var_mproperty = var;
+/* <var_mproperty:MProperty> isa MMethod */
+cltype = type_model__MMethod.color;
+idtype = type_model__MMethod.id;
+if(cltype >= var_mproperty->type->table_size) {
+var1 = 0;
+} else {
+var1 = var_mproperty->type->type_table[cltype] == idtype;
+}
+if (!var1) {
+fprintf(stderr, "Runtime error: %s", "Assert failed");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 216);
+show_backtrace(1);
+}
+var2 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
+var3 = NULL;
+var4 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__short_signature]))(self) /* short_signature on <self:MExplicitCall>*/;
+var5 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__from_cpp_call_context]))(self) /* from_cpp_call_context on <self:MExplicitCall>*/;
+var6 = ((val* (*)(val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_csignature]))(var_mproperty, var2, var_mmodule, var3, var4, var5) /* build_csignature on <var_mproperty:MProperty(MMethod)>*/;
+var_cpp_signature = var6;
+var7 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
+var8 = NULL;
+var9 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:MExplicitCall>*/;
+var10 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__from_cpp_call_context]))(self) /* from_cpp_call_context on <self:MExplicitCall>*/;
+var11 = NULL;
+var12 = ((val* (*)(val*, val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_ccall]))(var_mproperty, var7, var_mmodule, var8, var9, var10, var11) /* build_ccall on <var_mproperty:MProperty(MMethod)>*/;
+var_ccall = var12;
+var13 = NEW_c_tools__CFunction(&type_c_tools__CFunction);
+((void (*)(val*, val*))(var13->class->vft[COLOR_c_tools__CFunction__init]))(var13, var_cpp_signature) /* init on <var13:CFunction>*/;
+var_fc = var13;
+var14 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
+((void (*)(val*, val*))(var14->class->vft[COLOR_template__Template__add]))(var14, var_ccall) /* add on <var14:Template>*/;
+var15 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
+if (var15 == NULL) {
+fprintf(stderr, "Runtime error: %s", "Receiver is null");
+fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 222);
+show_backtrace(1);
+} else {
+((void (*)(val*, val*))(var15->class->vft[COLOR_c_tools__CCompilationUnit__add_local_function]))(var15, var_fc) /* add_local_function on <var15:nullable CPPCompilationUnit>*/;
+}
+RET_LABEL:;
+}
+/* method cpp#MExplicitCall#compile_callback_to_cpp for (self: Object, AModule, MModule) */
+void VIRTUAL_cpp__MExplicitCall__compile_callback_to_cpp(val* self, val* p0, val* p1) {
+cpp__MExplicitCall__compile_callback_to_cpp(self, p0, p1);
+RET_LABEL:;
+}
+/* method cpp#CppCallContext#name_mtype for (self: CppCallContext, MType): String */
+val* cpp__CppCallContext__name_mtype(val* self, val* p0) {
+val* var /* : String */;
+val* var_mtype /* var mtype: MType */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : MClass */;
+val* var3 /* : nullable ForeignType */;
+val* var_ftype /* var ftype: nullable ForeignType */;
+short int var4 /* : Bool */;
+int cltype5;
+int idtype6;
+val* var7 /* : String */;
+val* var8 /* : String */;
+var_mtype = p0;
+/* <var_mtype:MType> isa MClassType */
+cltype = type_model__MClassType.color;
+idtype = type_model__MClassType.id;
+if(cltype >= var_mtype->type->table_size) {
+var1 = 0;
+} else {
+var1 = var_mtype->type->type_table[cltype] == idtype;
+}
+if (var1){
+var2 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
+var3 = ((val* (*)(val*))(var2->class->vft[COLOR_extern_classes__MClass__ftype]))(var2) /* ftype on <var2:MClass>*/;
+var_ftype = var3;
+/* <var_ftype:nullable ForeignType> isa ForeignCppType */
+cltype5 = type_cpp__ForeignCppType.color;
+idtype6 = type_cpp__ForeignCppType.id;
+if(var_ftype == NULL) {
+var4 = 0;
+} else {
+if(cltype5 >= var_ftype->type->table_size) {
+var4 = 0;
+} else {
+var4 = var_ftype->type->type_table[cltype5] == idtype6;
+}
+}
+if (var4){
+var7 = ((val* (*)(val*))(var_ftype->class->vft[COLOR_cpp__ForeignCppType__cpp_type]))(var_ftype) /* cpp_type on <var_ftype:nullable ForeignType(ForeignCppType)>*/;
+var = var7;
+goto RET_LABEL;
+} else {
+}
+} else {
+}
+var8 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_nitni_base__MType__cname]))(var_mtype) /* cname on <var_mtype:MType>*/;
+var = var8;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method cpp#CppCallContext#name_mtype for (self: Object, MType): String */
+val* VIRTUAL_cpp__CppCallContext__name_mtype(val* self, val* p0) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = cpp__CppCallContext__name_mtype(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#CppCallContext#init for (self: CppCallContext) */
+void cpp__CppCallContext__init(val* self) {
+((void (*)(val*))(self->class->vft[COLOR_nitni_utilities__CallContext__init]))(self) /* init on <self:CppCallContext>*/;
+RET_LABEL:;
+}
+/* method cpp#CppCallContext#init for (self: Object) */
+void VIRTUAL_cpp__CppCallContext__init(val* self) {
+cpp__CppCallContext__init(self);
+RET_LABEL:;
+}
+/* method cpp#ToCppCallContext#cast_to for (self: ToCppCallContext, MType, String): String */
+val* cpp__ToCppCallContext__cast_to(val* self, val* p0, val* p1) {
+val* var /* : String */;
+val* var_mtype /* var mtype: MType */;
+val* var_name /* var name: String */;
+short int var1 /* : Bool */;
+short int var2 /* : Bool */;
+int cltype;
+int idtype;
+short int var_ /* var : Bool */;
+val* var3 /* : MClass */;
+val* var4 /* : nullable ForeignType */;
+short int var5 /* : Bool */;
+int cltype6;
+int idtype7;
+val* var8 /* : Array[Object] */;
+long var9 /* : Int */;
+val* var_10 /* var : Array[Object] */;
+static val* varonce;
+val* var11 /* : String */;
+char* var12 /* : NativeString */;
+long var13 /* : Int */;
+val* var14 /* : String */;
+static val* varonce15;
+val* var16 /* : String */;
+char* var17 /* : NativeString */;
+long var18 /* : Int */;
+val* var19 /* : String */;
+val* var20 /* : String */;
+var_mtype = p0;
+var_name = p1;
+/* <var_mtype:MType> isa MClassType */
+cltype = type_model__MClassType.color;
+idtype = type_model__MClassType.id;
+if(cltype >= var_mtype->type->table_size) {
+var2 = 0;
+} else {
+var2 = var_mtype->type->type_table[cltype] == idtype;
+}
+var_ = var2;
+if (var2){
+var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
+var4 = ((val* (*)(val*))(var3->class->vft[COLOR_extern_classes__MClass__ftype]))(var3) /* ftype on <var3:MClass>*/;
+/* <var4:nullable ForeignType> isa ForeignCppType */
+cltype6 = type_cpp__ForeignCppType.color;
+idtype7 = type_cpp__ForeignCppType.id;
+if(var4 == NULL) {
+var5 = 0;
+} else {
+if(cltype6 >= var4->type->table_size) {
+var5 = 0;
+} else {
+var5 = var4->type->type_table[cltype6] == idtype7;
+}
+}
+var1 = var5;
+} else {
+var1 = var_;
+}
+if (var1){
+var8 = NEW_array__Array(&type_array__Arraykernel__Object);
+var9 = 3;
+((void (*)(val*, long))(var8->class->vft[COLOR_array__Array__with_capacity]))(var8, var9) /* with_capacity on <var8:Array[Object]>*/;
+var_10 = var8;
+if (varonce) {
+var11 = varonce;
+} else {
+var12 = "(void*)(";
+var13 = 8;
+var14 = string__NativeString__to_s_with_length(var12, var13);
+var11 = var14;
+varonce = var11;
+}
+((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var11) /* add on <var_10:Array[Object]>*/;
+((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var_name) /* add on <var_10:Array[Object]>*/;
+if (varonce15) {
+var16 = varonce15;
+} else {
+var17 = ")";
+var18 = 1;
+var19 = string__NativeString__to_s_with_length(var17, var18);
+var16 = var19;
+varonce15 = var16;
+}
+((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var16) /* add on <var_10:Array[Object]>*/;
+var20 = ((val* (*)(val*))(var_10->class->vft[COLOR_string__Object__to_s]))(var_10) /* to_s on <var_10:Array[Object]>*/;
+var = var20;
+goto RET_LABEL;
+} else {
+var = var_name;
+goto RET_LABEL;
+}
+RET_LABEL:;
+return var;
+}
+/* method cpp#ToCppCallContext#cast_to for (self: Object, MType, String): String */
+val* VIRTUAL_cpp__ToCppCallContext__cast_to(val* self, val* p0, val* p1) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = cpp__ToCppCallContext__cast_to(self, p0, p1);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#ToCppCallContext#init for (self: ToCppCallContext) */
+void cpp__ToCppCallContext__init(val* self) {
+((void (*)(val*))(self->class->vft[COLOR_cpp__CppCallContext__init]))(self) /* init on <self:ToCppCallContext>*/;
+RET_LABEL:;
+}
+/* method cpp#ToCppCallContext#init for (self: Object) */
+void VIRTUAL_cpp__ToCppCallContext__init(val* self) {
+cpp__ToCppCallContext__init(self);
+RET_LABEL:;
+}
+/* method cpp#FromCppCallContext#cast_from for (self: FromCppCallContext, MType, String): String */
+val* cpp__FromCppCallContext__cast_from(val* self, val* p0, val* p1) {
+val* var /* : String */;
+val* var_mtype /* var mtype: MType */;
+val* var_name /* var name: String */;
+short int var1 /* : Bool */;
+short int var2 /* : Bool */;
+int cltype;
+int idtype;
+short int var_ /* var : Bool */;
+val* var3 /* : MClass */;
+val* var4 /* : nullable ForeignType */;
+short int var5 /* : Bool */;
+int cltype6;
+int idtype7;
+val* var8 /* : Array[Object] */;
+long var9 /* : Int */;
+val* var_10 /* var : Array[Object] */;
+static val* varonce;
+val* var11 /* : String */;
+char* var12 /* : NativeString */;
+long var13 /* : Int */;
+val* var14 /* : String */;
+val* var15 /* : String */;
+static val* varonce16;
+val* var17 /* : String */;
+char* var18 /* : NativeString */;
+long var19 /* : Int */;
+val* var20 /* : String */;
+static val* varonce21;
+val* var22 /* : String */;
+char* var23 /* : NativeString */;
+long var24 /* : Int */;
+val* var25 /* : String */;
+val* var26 /* : String */;
+var_mtype = p0;
+var_name = p1;
+/* <var_mtype:MType> isa MClassType */
+cltype = type_model__MClassType.color;
+idtype = type_model__MClassType.id;
+if(cltype >= var_mtype->type->table_size) {
+var2 = 0;
+} else {
+var2 = var_mtype->type->type_table[cltype] == idtype;
+}
+var_ = var2;
+if (var2){
+var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
+var4 = ((val* (*)(val*))(var3->class->vft[COLOR_extern_classes__MClass__ftype]))(var3) /* ftype on <var3:MClass>*/;
+/* <var4:nullable ForeignType> isa ForeignCppType */
+cltype6 = type_cpp__ForeignCppType.color;
+idtype7 = type_cpp__ForeignCppType.id;
+if(var4 == NULL) {
+var5 = 0;
+} else {
+if(cltype6 >= var4->type->table_size) {
+var5 = 0;
+} else {
+var5 = var4->type->type_table[cltype6] == idtype7;
+}
+}
+var1 = var5;
+} else {
+var1 = var_;
+}
+if (var1){
+var8 = NEW_array__Array(&type_array__Arraykernel__Object);
+var9 = 5;
+((void (*)(val*, long))(var8->class->vft[COLOR_array__Array__with_capacity]))(var8, var9) /* with_capacity on <var8:Array[Object]>*/;
+var_10 = var8;
+if (varonce) {
+var11 = varonce;
+} else {
+var12 = "static_cast<";
+var13 = 12;
+var14 = string__NativeString__to_s_with_length(var12, var13);
+var11 = var14;
+varonce = var11;
+}
+((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var11) /* add on <var_10:Array[Object]>*/;
+var15 = ((val* (*)(val*, val*))(self->class->vft[COLOR_nitni_utilities__CallContext__name_mtype]))(self, var_mtype) /* name_mtype on <self:FromCppCallContext>*/;
+((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var15) /* add on <var_10:Array[Object]>*/;
+if (varonce16) {
+var17 = varonce16;
+} else {
+var18 = ">(";
+var19 = 2;
+var20 = string__NativeString__to_s_with_length(var18, var19);
+var17 = var20;
+varonce16 = var17;
+}
+((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var17) /* add on <var_10:Array[Object]>*/;
+((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var_name) /* add on <var_10:Array[Object]>*/;
+if (varonce21) {
+var22 = varonce21;
+} else {
+var23 = ")";
+var24 = 1;
+var25 = string__NativeString__to_s_with_length(var23, var24);
+var22 = var25;
+varonce21 = var22;
+}
+((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var22) /* add on <var_10:Array[Object]>*/;
+var26 = ((val* (*)(val*))(var_10->class->vft[COLOR_string__Object__to_s]))(var_10) /* to_s on <var_10:Array[Object]>*/;
+var = var26;
+goto RET_LABEL;
+} else {
+var = var_name;
+goto RET_LABEL;
+}
+RET_LABEL:;
+return var;
+}
+/* method cpp#FromCppCallContext#cast_from for (self: Object, MType, String): String */
+val* VIRTUAL_cpp__FromCppCallContext__cast_from(val* self, val* p0, val* p1) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = cpp__FromCppCallContext__cast_from(self, p0, p1);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method cpp#FromCppCallContext#init for (self: FromCppCallContext) */
+void cpp__FromCppCallContext__init(val* self) {
+((void (*)(val*))(self->class->vft[COLOR_cpp__CppCallContext__init]))(self) /* init on <self:FromCppCallContext>*/;
+RET_LABEL:;
+}
+/* method cpp#FromCppCallContext#init for (self: Object) */
+void VIRTUAL_cpp__FromCppCallContext__init(val* self) {
+cpp__FromCppCallContext__init(self);
+RET_LABEL:;
+}