model_utils: add MEntityNameSorter
[nit.git] / c_src / cpp.sep.1.c
1 #include "cpp.sep.0.h"
2 /* method cpp#FFILanguageAssignationPhase#cpp_language for (self: FFILanguageAssignationPhase): FFILanguage */
3 val* cpp__FFILanguageAssignationPhase__cpp_language(val* self) {
4 val* var /* : FFILanguage */;
5 val* var1 /* : FFILanguage */;
6 var1 = self->attrs[COLOR_cpp__FFILanguageAssignationPhase___64dcpp_language].val; /* @cpp_language on <self:FFILanguageAssignationPhase> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @cpp_language");
9 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 24);
10 show_backtrace(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method cpp#FFILanguageAssignationPhase#cpp_language for (self: Object): FFILanguage */
17 val* VIRTUAL_cpp__FFILanguageAssignationPhase__cpp_language(val* self) {
18 val* var /* : FFILanguage */;
19 val* var1 /* : FFILanguage */;
20 var1 = cpp__FFILanguageAssignationPhase__cpp_language(self);
21 var = var1;
22 RET_LABEL:;
23 return var;
24 }
25 /* method cpp#FFILanguageAssignationPhase#cpp_language= for (self: FFILanguageAssignationPhase, FFILanguage) */
26 void cpp__FFILanguageAssignationPhase__cpp_language_61d(val* self, val* p0) {
27 self->attrs[COLOR_cpp__FFILanguageAssignationPhase___64dcpp_language].val = p0; /* @cpp_language on <self:FFILanguageAssignationPhase> */
28 RET_LABEL:;
29 }
30 /* method cpp#FFILanguageAssignationPhase#cpp_language= for (self: Object, FFILanguage) */
31 void VIRTUAL_cpp__FFILanguageAssignationPhase__cpp_language_61d(val* self, val* p0) {
32 cpp__FFILanguageAssignationPhase__cpp_language_61d(self, p0);
33 RET_LABEL:;
34 }
35 /* method cpp#AModule#cpp_file for (self: AModule): nullable CPPCompilationUnit */
36 val* cpp__AModule__cpp_file(val* self) {
37 val* var /* : nullable CPPCompilationUnit */;
38 val* var1 /* : nullable CPPCompilationUnit */;
39 var1 = self->attrs[COLOR_cpp__AModule___64dcpp_file].val; /* @cpp_file on <self:AModule> */
40 var = var1;
41 RET_LABEL:;
42 return var;
43 }
44 /* method cpp#AModule#cpp_file for (self: Object): nullable CPPCompilationUnit */
45 val* VIRTUAL_cpp__AModule__cpp_file(val* self) {
46 val* var /* : nullable CPPCompilationUnit */;
47 val* var1 /* : nullable CPPCompilationUnit */;
48 var1 = cpp__AModule__cpp_file(self);
49 var = var1;
50 RET_LABEL:;
51 return var;
52 }
53 /* method cpp#AModule#cpp_file= for (self: AModule, nullable CPPCompilationUnit) */
54 void cpp__AModule__cpp_file_61d(val* self, val* p0) {
55 self->attrs[COLOR_cpp__AModule___64dcpp_file].val = p0; /* @cpp_file on <self:AModule> */
56 RET_LABEL:;
57 }
58 /* method cpp#AModule#cpp_file= for (self: Object, nullable CPPCompilationUnit) */
59 void VIRTUAL_cpp__AModule__cpp_file_61d(val* self, val* p0) {
60 cpp__AModule__cpp_file_61d(self, p0);
61 RET_LABEL:;
62 }
63 /* method cpp#AModule#cpp_compiler_options for (self: AModule): String */
64 val* cpp__AModule__cpp_compiler_options(val* self) {
65 val* var /* : String */;
66 val* var1 /* : String */;
67 var1 = self->attrs[COLOR_cpp__AModule___64dcpp_compiler_options].val; /* @cpp_compiler_options on <self:AModule> */
68 if (var1 == NULL) {
69 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @cpp_compiler_options");
70 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 29);
71 show_backtrace(1);
72 }
73 var = var1;
74 RET_LABEL:;
75 return var;
76 }
77 /* method cpp#AModule#cpp_compiler_options for (self: Object): String */
78 val* VIRTUAL_cpp__AModule__cpp_compiler_options(val* self) {
79 val* var /* : String */;
80 val* var1 /* : String */;
81 var1 = cpp__AModule__cpp_compiler_options(self);
82 var = var1;
83 RET_LABEL:;
84 return var;
85 }
86 /* method cpp#AModule#cpp_compiler_options= for (self: AModule, String) */
87 void cpp__AModule__cpp_compiler_options_61d(val* self, val* p0) {
88 self->attrs[COLOR_cpp__AModule___64dcpp_compiler_options].val = p0; /* @cpp_compiler_options on <self:AModule> */
89 RET_LABEL:;
90 }
91 /* method cpp#AModule#cpp_compiler_options= for (self: Object, String) */
92 void VIRTUAL_cpp__AModule__cpp_compiler_options_61d(val* self, val* p0) {
93 cpp__AModule__cpp_compiler_options_61d(self, p0);
94 RET_LABEL:;
95 }
96 /* method cpp#CPPLanguage#identify_language for (self: CPPLanguage, AExternCodeBlock): Bool */
97 short int cpp__CPPLanguage__identify_language(val* self, val* p0) {
98 short int var /* : Bool */;
99 val* var_n /* var n: AExternCodeBlock */;
100 short int var1 /* : Bool */;
101 var_n = p0;
102 var1 = ((short int (*)(val*))(var_n->class->vft[COLOR_cpp__AExternCodeBlock__is_cpp]))(var_n) /* is_cpp on <var_n:AExternCodeBlock>*/;
103 var = var1;
104 goto RET_LABEL;
105 RET_LABEL:;
106 return var;
107 }
108 /* method cpp#CPPLanguage#identify_language for (self: Object, AExternCodeBlock): Bool */
109 short int VIRTUAL_cpp__CPPLanguage__identify_language(val* self, val* p0) {
110 short int var /* : Bool */;
111 short int var1 /* : Bool */;
112 var1 = cpp__CPPLanguage__identify_language(self, p0);
113 var = var1;
114 RET_LABEL:;
115 return var;
116 }
117 /* method cpp#CPPLanguage#compile_module_block for (self: CPPLanguage, AExternCodeBlock, CCompilationUnit, AModule) */
118 void cpp__CPPLanguage__compile_module_block(val* self, val* p0, val* p1, val* p2) {
119 val* var_block /* var block: AExternCodeBlock */;
120 val* var_ecc /* var ecc: CCompilationUnit */;
121 val* var_nmodule /* var nmodule: AModule */;
122 val* var /* : nullable CPPCompilationUnit */;
123 val* var1 /* : null */;
124 short int var2 /* : Bool */;
125 val* var3 /* : CPPCompilationUnit */;
126 short int var4 /* : Bool */;
127 val* var5 /* : nullable CPPCompilationUnit */;
128 val* var6 /* : Template */;
129 val* var7 /* : Location */;
130 val* var8 /* : String */;
131 val* var9 /* : nullable CPPCompilationUnit */;
132 val* var10 /* : Template */;
133 val* var11 /* : String */;
134 short int var12 /* : Bool */;
135 val* var13 /* : nullable CPPCompilationUnit */;
136 val* var14 /* : Template */;
137 val* var15 /* : Location */;
138 val* var16 /* : String */;
139 val* var17 /* : nullable CPPCompilationUnit */;
140 val* var18 /* : Template */;
141 val* var19 /* : String */;
142 var_block = p0;
143 var_ecc = p1;
144 var_nmodule = p2;
145 var = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
146 var1 = NULL;
147 if (var == NULL) {
148 var2 = 1; /* is null */
149 } else {
150 var2 = 0; /* arg is null but recv is not */
151 }
152 if (var2){
153 var3 = NEW_cpp__CPPCompilationUnit(&type_cpp__CPPCompilationUnit);
154 ((void (*)(val*))(var3->class->vft[COLOR_cpp__CPPCompilationUnit__init]))(var3) /* init on <var3:CPPCompilationUnit>*/;
155 ((void (*)(val*, val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file_61d]))(var_nmodule, var3) /* cpp_file= on <var_nmodule:AModule>*/;
156 } else {
157 }
158 var4 = ((short int (*)(val*))(var_block->class->vft[COLOR_cpp__AExternCodeBlock__is_cpp_header]))(var_block) /* is_cpp_header on <var_block:AExternCodeBlock>*/;
159 if (var4){
160 var5 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
161 if (var5 == NULL) {
162 fprintf(stderr, "Runtime error: %s", "Receiver is null");
163 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 42);
164 show_backtrace(1);
165 } else {
166 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_c_tools__CCompilationUnit__header_custom]))(var5) /* header_custom on <var5:nullable CPPCompilationUnit>*/;
167 }
168 var7 = ((val* (*)(val*))(var_block->class->vft[COLOR_parser_nodes__ANode__location]))(var_block) /* location on <var_block:AExternCodeBlock>*/;
169 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_c__Location__as_line_pragma]))(var7) /* as_line_pragma on <var7:Location>*/;
170 ((void (*)(val*, val*))(var6->class->vft[COLOR_template__Template__add]))(var6, var8) /* add on <var6:Template>*/;
171 var9 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
172 if (var9 == NULL) {
173 fprintf(stderr, "Runtime error: %s", "Receiver is null");
174 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 43);
175 show_backtrace(1);
176 } else {
177 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_c_tools__CCompilationUnit__header_custom]))(var9) /* header_custom on <var9:nullable CPPCompilationUnit>*/;
178 }
179 var11 = ((val* (*)(val*))(var_block->class->vft[COLOR_ffi_base__AExternCodeBlock__code]))(var_block) /* code on <var_block:AExternCodeBlock>*/;
180 ((void (*)(val*, val*))(var10->class->vft[COLOR_template__Template__add]))(var10, var11) /* add on <var10:Template>*/;
181 } else {
182 var12 = ((short int (*)(val*))(var_block->class->vft[COLOR_cpp__AExternCodeBlock__is_cpp_body]))(var_block) /* is_cpp_body on <var_block:AExternCodeBlock>*/;
183 if (var12){
184 var13 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
185 if (var13 == NULL) {
186 fprintf(stderr, "Runtime error: %s", "Receiver is null");
187 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 45);
188 show_backtrace(1);
189 } else {
190 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_c_tools__CCompilationUnit__body_custom]))(var13) /* body_custom on <var13:nullable CPPCompilationUnit>*/;
191 }
192 var15 = ((val* (*)(val*))(var_block->class->vft[COLOR_parser_nodes__ANode__location]))(var_block) /* location on <var_block:AExternCodeBlock>*/;
193 var16 = ((val* (*)(val*))(var15->class->vft[COLOR_c__Location__as_line_pragma]))(var15) /* as_line_pragma on <var15:Location>*/;
194 ((void (*)(val*, val*))(var14->class->vft[COLOR_template__Template__add]))(var14, var16) /* add on <var14:Template>*/;
195 var17 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
196 if (var17 == NULL) {
197 fprintf(stderr, "Runtime error: %s", "Receiver is null");
198 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 46);
199 show_backtrace(1);
200 } else {
201 var18 = ((val* (*)(val*))(var17->class->vft[COLOR_c_tools__CCompilationUnit__body_custom]))(var17) /* body_custom on <var17:nullable CPPCompilationUnit>*/;
202 }
203 var19 = ((val* (*)(val*))(var_block->class->vft[COLOR_ffi_base__AExternCodeBlock__code]))(var_block) /* code on <var_block:AExternCodeBlock>*/;
204 ((void (*)(val*, val*))(var18->class->vft[COLOR_template__Template__add]))(var18, var19) /* add on <var18:Template>*/;
205 } else {
206 }
207 }
208 RET_LABEL:;
209 }
210 /* method cpp#CPPLanguage#compile_module_block for (self: Object, AExternCodeBlock, CCompilationUnit, AModule) */
211 void VIRTUAL_cpp__CPPLanguage__compile_module_block(val* self, val* p0, val* p1, val* p2) {
212 cpp__CPPLanguage__compile_module_block(self, p0, p1, p2);
213 RET_LABEL:;
214 }
215 /* method cpp#CPPLanguage#compile_extern_method for (self: CPPLanguage, AExternCodeBlock, AExternPropdef, CCompilationUnit, AModule) */
216 void cpp__CPPLanguage__compile_extern_method(val* self, val* p0, val* p1, val* p2, val* p3) {
217 val* var_block /* var block: AExternCodeBlock */;
218 val* var_m /* var m: AExternPropdef */;
219 val* var_ecc /* var ecc: CCompilationUnit */;
220 val* var_nmodule /* var nmodule: AModule */;
221 val* var /* : nullable CPPCompilationUnit */;
222 val* var1 /* : null */;
223 short int var2 /* : Bool */;
224 val* var3 /* : CPPCompilationUnit */;
225 val* var4 /* : nullable MModule */;
226 val* var_mmodule /* var mmodule: MModule */;
227 val* var5 /* : nullable ANode */;
228 short int var6 /* : Bool */;
229 int cltype;
230 int idtype;
231 const char* var_class_name;
232 val* var7 /* : nullable MClass */;
233 val* var8 /* : MClassType */;
234 val* var_mclass_type /* var mclass_type: MClassType */;
235 val* var9 /* : nullable MPropDef */;
236 val* var10 /* : MProperty */;
237 val* var_mproperty /* var mproperty: MMethod */;
238 static val* varonce;
239 val* var11 /* : String */;
240 char* var12 /* : NativeString */;
241 long var13 /* : Int */;
242 val* var14 /* : String */;
243 val* var15 /* : SignatureLength */;
244 val* var16 /* : CallContext */;
245 val* var17 /* : String */;
246 val* var_indirection_sig /* var indirection_sig: String */;
247 val* var18 /* : Template */;
248 static val* varonce19;
249 val* var20 /* : String */;
250 char* var21 /* : NativeString */;
251 long var22 /* : Int */;
252 val* var23 /* : String */;
253 val* var24 /* : Array[Object] */;
254 long var25 /* : Int */;
255 val* var26 /* : NativeArray[Object] */;
256 val* var27 /* : String */;
257 val* var28 /* : ExternCFunction */;
258 val* var_fc /* var fc: CFunction */;
259 val* var29 /* : Template */;
260 static val* varonce30;
261 val* var31 /* : String */;
262 char* var32 /* : NativeString */;
263 long var33 /* : Int */;
264 val* var34 /* : String */;
265 val* var35 /* : SignatureLength */;
266 val* var36 /* : CppCallContext */;
267 val* var37 /* : null */;
268 val* var38 /* : String */;
269 val* var39 /* : Template */;
270 static val* varonce40;
271 val* var41 /* : String */;
272 char* var42 /* : NativeString */;
273 long var43 /* : Int */;
274 val* var44 /* : String */;
275 val* var45 /* : nullable CPPCompilationUnit */;
276 val* var46 /* : Template */;
277 static val* varonce47;
278 val* var48 /* : String */;
279 char* var49 /* : NativeString */;
280 long var50 /* : Int */;
281 val* var51 /* : String */;
282 val* var52 /* : nullable CPPCompilationUnit */;
283 val* var53 /* : Template */;
284 static val* varonce54;
285 val* var55 /* : String */;
286 char* var56 /* : NativeString */;
287 long var57 /* : Int */;
288 val* var58 /* : String */;
289 val* var59 /* : Array[Object] */;
290 long var60 /* : Int */;
291 val* var61 /* : NativeArray[Object] */;
292 val* var62 /* : String */;
293 val* var63 /* : nullable CPPCompilationUnit */;
294 val* var64 /* : Template */;
295 static val* varonce65;
296 val* var66 /* : String */;
297 char* var67 /* : NativeString */;
298 long var68 /* : Int */;
299 val* var69 /* : String */;
300 val* var70 /* : CFunction */;
301 short int var71 /* : Bool */;
302 short int var72 /* : Bool */;
303 static val* varonce73;
304 val* var74 /* : String */;
305 char* var75 /* : NativeString */;
306 long var76 /* : Int */;
307 val* var77 /* : String */;
308 val* var_param_name /* var param_name: String */;
309 val* var78 /* : ToCppCallContext */;
310 val* var79 /* : String */;
311 val* var_type_name /* var type_name: String */;
312 val* var80 /* : MClass */;
313 val* var81 /* : nullable ForeignType */;
314 short int var82 /* : Bool */;
315 int cltype83;
316 int idtype84;
317 val* var85 /* : Template */;
318 static val* varonce86;
319 val* var87 /* : String */;
320 char* var88 /* : NativeString */;
321 long var89 /* : Int */;
322 val* var90 /* : String */;
323 static val* varonce91;
324 val* var92 /* : String */;
325 char* var93 /* : NativeString */;
326 long var94 /* : Int */;
327 val* var95 /* : String */;
328 static val* varonce96;
329 val* var97 /* : String */;
330 char* var98 /* : NativeString */;
331 long var99 /* : Int */;
332 val* var100 /* : String */;
333 static val* varonce101;
334 val* var102 /* : String */;
335 char* var103 /* : NativeString */;
336 long var104 /* : Int */;
337 val* var105 /* : String */;
338 val* var106 /* : Array[Object] */;
339 long var107 /* : Int */;
340 val* var108 /* : NativeArray[Object] */;
341 val* var109 /* : String */;
342 val* var110 /* : Template */;
343 static val* varonce111;
344 val* var112 /* : String */;
345 char* var113 /* : NativeString */;
346 long var114 /* : Int */;
347 val* var115 /* : String */;
348 static val* varonce116;
349 val* var117 /* : String */;
350 char* var118 /* : NativeString */;
351 long var119 /* : Int */;
352 val* var120 /* : String */;
353 static val* varonce121;
354 val* var122 /* : String */;
355 char* var123 /* : NativeString */;
356 long var124 /* : Int */;
357 val* var125 /* : String */;
358 val* var126 /* : Array[Object] */;
359 long var127 /* : Int */;
360 val* var128 /* : NativeArray[Object] */;
361 val* var129 /* : String */;
362 val* var130 /* : nullable MPropDef */;
363 val* var131 /* : nullable MSignature */;
364 val* var132 /* : Array[MParameter] */;
365 val* var133 /* : Iterator[nullable Object] */;
366 short int var134 /* : Bool */;
367 val* var135 /* : nullable Object */;
368 val* var_param /* var param: MParameter */;
369 val* var136 /* : String */;
370 val* var_param_name137 /* var param_name: String */;
371 val* var138 /* : ToCppCallContext */;
372 val* var139 /* : MType */;
373 val* var140 /* : String */;
374 val* var_type_name141 /* var type_name: String */;
375 val* var142 /* : MClass */;
376 val* var143 /* : nullable ForeignType */;
377 short int var144 /* : Bool */;
378 int cltype145;
379 int idtype146;
380 val* var147 /* : Template */;
381 static val* varonce148;
382 val* var149 /* : String */;
383 char* var150 /* : NativeString */;
384 long var151 /* : Int */;
385 val* var152 /* : String */;
386 static val* varonce153;
387 val* var154 /* : String */;
388 char* var155 /* : NativeString */;
389 long var156 /* : Int */;
390 val* var157 /* : String */;
391 static val* varonce158;
392 val* var159 /* : String */;
393 char* var160 /* : NativeString */;
394 long var161 /* : Int */;
395 val* var162 /* : String */;
396 static val* varonce163;
397 val* var164 /* : String */;
398 char* var165 /* : NativeString */;
399 long var166 /* : Int */;
400 val* var167 /* : String */;
401 val* var168 /* : Array[Object] */;
402 long var169 /* : Int */;
403 val* var170 /* : NativeArray[Object] */;
404 val* var171 /* : String */;
405 val* var172 /* : Template */;
406 static val* varonce173;
407 val* var174 /* : String */;
408 char* var175 /* : NativeString */;
409 long var176 /* : Int */;
410 val* var177 /* : String */;
411 static val* varonce178;
412 val* var179 /* : String */;
413 char* var180 /* : NativeString */;
414 long var181 /* : Int */;
415 val* var182 /* : String */;
416 static val* varonce183;
417 val* var184 /* : String */;
418 char* var185 /* : NativeString */;
419 long var186 /* : Int */;
420 val* var187 /* : String */;
421 val* var188 /* : Array[Object] */;
422 long var189 /* : Int */;
423 val* var190 /* : NativeArray[Object] */;
424 val* var191 /* : String */;
425 val* var192 /* : Template */;
426 static val* varonce193;
427 val* var194 /* : String */;
428 char* var195 /* : NativeString */;
429 long var196 /* : Int */;
430 val* var197 /* : String */;
431 val* var198 /* : SignatureLength */;
432 val* var199 /* : CppCallContext */;
433 static val* varonce200;
434 val* var201 /* : String */;
435 char* var202 /* : NativeString */;
436 long var203 /* : Int */;
437 val* var204 /* : String */;
438 val* var205 /* : String */;
439 val* var206 /* : Template */;
440 static val* varonce207;
441 val* var208 /* : String */;
442 char* var209 /* : NativeString */;
443 long var210 /* : Int */;
444 val* var211 /* : String */;
445 val* var212 /* : nullable CPPCompilationUnit */;
446 static val* varonce213;
447 val* var214 /* : String */;
448 char* var215 /* : NativeString */;
449 long var216 /* : Int */;
450 val* var217 /* : String */;
451 val* var218 /* : SignatureLength */;
452 val* var219 /* : CppCallContext */;
453 val* var220 /* : String */;
454 val* var_cpp_signature /* var cpp_signature: String */;
455 val* var221 /* : CFunction */;
456 val* var222 /* : Template */;
457 val* var223 /* : Location */;
458 val* var224 /* : String */;
459 val* var225 /* : Template */;
460 val* var226 /* : String */;
461 val* var227 /* : nullable CPPCompilationUnit */;
462 var_block = p0;
463 var_m = p1;
464 var_ecc = p2;
465 var_nmodule = p3;
466 var = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
467 var1 = NULL;
468 if (var == NULL) {
469 var2 = 1; /* is null */
470 } else {
471 var2 = 0; /* arg is null but recv is not */
472 }
473 if (var2){
474 var3 = NEW_cpp__CPPCompilationUnit(&type_cpp__CPPCompilationUnit);
475 ((void (*)(val*))(var3->class->vft[COLOR_cpp__CPPCompilationUnit__init]))(var3) /* init on <var3:CPPCompilationUnit>*/;
476 ((void (*)(val*, val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file_61d]))(var_nmodule, var3) /* cpp_file= on <var_nmodule:AModule>*/;
477 } else {
478 }
479 var4 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_nmodule) /* mmodule on <var_nmodule:AModule>*/;
480 if (var4 == NULL) {
481 fprintf(stderr, "Runtime error: %s", "Cast failed");
482 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 58);
483 show_backtrace(1);
484 }
485 var_mmodule = var4;
486 var5 = ((val* (*)(val*))(var_m->class->vft[COLOR_parser_nodes__ANode__parent]))(var_m) /* parent on <var_m:AExternPropdef>*/;
487 /* <var5:nullable ANode> isa AClassdef */
488 cltype = type_parser_nodes__AClassdef.color;
489 idtype = type_parser_nodes__AClassdef.id;
490 if(var5 == NULL) {
491 var6 = 0;
492 } else {
493 if(cltype >= var5->type->table_size) {
494 var6 = 0;
495 } else {
496 var6 = var5->type->type_table[cltype] == idtype;
497 }
498 }
499 if (!var6) {
500 var_class_name = var5 == NULL ? "null" : var5->type->name;
501 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "AClassdef", var_class_name);
502 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 59);
503 show_backtrace(1);
504 }
505 var7 = ((val* (*)(val*))(var5->class->vft[COLOR_modelize_class__AClassdef__mclass]))(var5) /* mclass on <var5:nullable ANode(AClassdef)>*/;
506 if (var7 == NULL) {
507 fprintf(stderr, "Runtime error: %s", "Receiver is null");
508 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 59);
509 show_backtrace(1);
510 } else {
511 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_model__MClass__mclass_type]))(var7) /* mclass_type on <var7:nullable MClass>*/;
512 }
513 var_mclass_type = var8;
514 var9 = ((val* (*)(val*))(var_m->class->vft[COLOR_modelize_property__APropdef__mpropdef]))(var_m) /* mpropdef on <var_m:AExternPropdef>*/;
515 if (var9 == NULL) {
516 fprintf(stderr, "Runtime error: %s", "Receiver is null");
517 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 60);
518 show_backtrace(1);
519 } else {
520 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_model__MPropDef__mproperty]))(var9) /* mproperty on <var9:nullable MPropDef(nullable MMethodDef)>*/;
521 }
522 var_mproperty = var10;
523 if (varonce) {
524 var11 = varonce;
525 } else {
526 var12 = "___cpp_impl_mid";
527 var13 = 15;
528 var14 = string__NativeString__to_s_with_length(var12, var13);
529 var11 = var14;
530 varonce = var11;
531 }
532 var15 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:CPPLanguage>*/;
533 var16 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__internal_call_context]))(self) /* internal_call_context on <self:CPPLanguage>*/;
534 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>*/;
535 var_indirection_sig = var17;
536 var18 = ((val* (*)(val*))(var_ecc->class->vft[COLOR_c_tools__CCompilationUnit__body_decl]))(var_ecc) /* body_decl on <var_ecc:CCompilationUnit>*/;
537 if (varonce19) {
538 var20 = varonce19;
539 } else {
540 var21 = ";\n";
541 var22 = 2;
542 var23 = string__NativeString__to_s_with_length(var21, var22);
543 var20 = var23;
544 varonce19 = var20;
545 }
546 var24 = NEW_array__Array(&type_array__Arraykernel__Object);
547 { /* var24 = array_instance Array[Object] */
548 var25 = 2;
549 var26 = NEW_array__NativeArray(var25, &type_array__NativeArraykernel__Object);
550 ((struct instance_array__NativeArray*)var26)->values[0] = (val*) var_indirection_sig;
551 ((struct instance_array__NativeArray*)var26)->values[1] = (val*) var20;
552 ((void (*)(val*, val*, long))(var24->class->vft[COLOR_array__Array__with_native]))(var24, var26, var25) /* with_native on <var24:Array[Object]>*/;
553 }
554 var27 = ((val* (*)(val*))(var24->class->vft[COLOR_string__Object__to_s]))(var24) /* to_s on <var24:Array[Object]>*/;
555 ((void (*)(val*, val*))(var18->class->vft[COLOR_template__Template__add]))(var18, var27) /* add on <var18:Template>*/;
556 var28 = NEW_c__ExternCFunction(&type_c__ExternCFunction);
557 ((void (*)(val*, val*, val*))(var28->class->vft[COLOR_c__ExternCFunction__init]))(var28, var_m, var_mmodule) /* init on <var28:ExternCFunction>*/;
558 var_fc = var28;
559 var29 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
560 if (varonce30) {
561 var31 = varonce30;
562 } else {
563 var32 = "___cpp_impl_mid";
564 var33 = 15;
565 var34 = string__NativeString__to_s_with_length(var32, var33);
566 var31 = var34;
567 varonce30 = var31;
568 }
569 var35 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:CPPLanguage>*/;
570 var36 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__cpp_call_context]))(self) /* cpp_call_context on <self:CPPLanguage>*/;
571 var37 = NULL;
572 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>*/;
573 ((void (*)(val*, val*))(var29->class->vft[COLOR_template__Template__add]))(var29, var38) /* add on <var29:Template>*/;
574 var39 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
575 if (varonce40) {
576 var41 = varonce40;
577 } else {
578 var42 = "\n";
579 var43 = 1;
580 var44 = string__NativeString__to_s_with_length(var42, var43);
581 var41 = var44;
582 varonce40 = var41;
583 }
584 ((void (*)(val*, val*))(var39->class->vft[COLOR_template__Template__add]))(var39, var41) /* add on <var39:Template>*/;
585 ((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>*/;
586 var45 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
587 if (var45 == NULL) {
588 fprintf(stderr, "Runtime error: %s", "Receiver is null");
589 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 79);
590 show_backtrace(1);
591 } else {
592 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var45) /* header_decl on <var45:nullable CPPCompilationUnit>*/;
593 }
594 if (varonce47) {
595 var48 = varonce47;
596 } else {
597 var49 = "extern \"C\" {\n";
598 var50 = 13;
599 var51 = string__NativeString__to_s_with_length(var49, var50);
600 var48 = var51;
601 varonce47 = var48;
602 }
603 ((void (*)(val*, val*))(var46->class->vft[COLOR_template__Template__add]))(var46, var48) /* add on <var46:Template>*/;
604 var52 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
605 if (var52 == NULL) {
606 fprintf(stderr, "Runtime error: %s", "Receiver is null");
607 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 80);
608 show_backtrace(1);
609 } else {
610 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var52) /* header_decl on <var52:nullable CPPCompilationUnit>*/;
611 }
612 if (varonce54) {
613 var55 = varonce54;
614 } else {
615 var56 = ";\n";
616 var57 = 2;
617 var58 = string__NativeString__to_s_with_length(var56, var57);
618 var55 = var58;
619 varonce54 = var55;
620 }
621 var59 = NEW_array__Array(&type_array__Arraykernel__Object);
622 { /* var59 = array_instance Array[Object] */
623 var60 = 2;
624 var61 = NEW_array__NativeArray(var60, &type_array__NativeArraykernel__Object);
625 ((struct instance_array__NativeArray*)var61)->values[0] = (val*) var_indirection_sig;
626 ((struct instance_array__NativeArray*)var61)->values[1] = (val*) var55;
627 ((void (*)(val*, val*, long))(var59->class->vft[COLOR_array__Array__with_native]))(var59, var61, var60) /* with_native on <var59:Array[Object]>*/;
628 }
629 var62 = ((val* (*)(val*))(var59->class->vft[COLOR_string__Object__to_s]))(var59) /* to_s on <var59:Array[Object]>*/;
630 ((void (*)(val*, val*))(var53->class->vft[COLOR_template__Template__add]))(var53, var62) /* add on <var53:Template>*/;
631 var63 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
632 if (var63 == NULL) {
633 fprintf(stderr, "Runtime error: %s", "Receiver is null");
634 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 81);
635 show_backtrace(1);
636 } else {
637 var64 = ((val* (*)(val*))(var63->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var63) /* header_decl on <var63:nullable CPPCompilationUnit>*/;
638 }
639 if (varonce65) {
640 var66 = varonce65;
641 } else {
642 var67 = "}\n";
643 var68 = 2;
644 var69 = string__NativeString__to_s_with_length(var67, var68);
645 var66 = var69;
646 varonce65 = var66;
647 }
648 ((void (*)(val*, val*))(var64->class->vft[COLOR_template__Template__add]))(var64, var66) /* add on <var64:Template>*/;
649 var70 = NEW_c_tools__CFunction(&type_c_tools__CFunction);
650 ((void (*)(val*, val*))(var70->class->vft[COLOR_c_tools__CFunction__init]))(var70, var_indirection_sig) /* init on <var70:CFunction>*/;
651 var_fc = var70;
652 var71 = ((short int (*)(val*))(var_mproperty->class->vft[COLOR_model__MMethod__is_init]))(var_mproperty) /* is_init on <var_mproperty:MMethod>*/;
653 var72 = !var71;
654 if (var72){
655 if (varonce73) {
656 var74 = varonce73;
657 } else {
658 var75 = "recv";
659 var76 = 4;
660 var77 = string__NativeString__to_s_with_length(var75, var76);
661 var74 = var77;
662 varonce73 = var74;
663 }
664 var_param_name = var74;
665 var78 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__to_cpp_call_context]))(self) /* to_cpp_call_context on <self:CPPLanguage>*/;
666 var79 = ((val* (*)(val*, val*))(var78->class->vft[COLOR_nitni_utilities__CallContext__name_mtype]))(var78, var_mclass_type) /* name_mtype on <var78:ToCppCallContext>*/;
667 var_type_name = var79;
668 var80 = ((val* (*)(val*))(var_mclass_type->class->vft[COLOR_model__MClassType__mclass]))(var_mclass_type) /* mclass on <var_mclass_type:MClassType>*/;
669 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_extern_classes__MClass__ftype]))(var80) /* ftype on <var80:MClass>*/;
670 /* <var81:nullable ForeignType> isa ForeignCppType */
671 cltype83 = type_cpp__ForeignCppType.color;
672 idtype84 = type_cpp__ForeignCppType.id;
673 if(var81 == NULL) {
674 var82 = 0;
675 } else {
676 if(cltype83 >= var81->type->table_size) {
677 var82 = 0;
678 } else {
679 var82 = var81->type->type_table[cltype83] == idtype84;
680 }
681 }
682 if (var82){
683 var85 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
684 if (varonce86) {
685 var87 = varonce86;
686 } else {
687 var88 = " ";
688 var89 = 1;
689 var90 = string__NativeString__to_s_with_length(var88, var89);
690 var87 = var90;
691 varonce86 = var87;
692 }
693 if (varonce91) {
694 var92 = varonce91;
695 } else {
696 var93 = "_for_cpp = static_cast<";
697 var94 = 23;
698 var95 = string__NativeString__to_s_with_length(var93, var94);
699 var92 = var95;
700 varonce91 = var92;
701 }
702 if (varonce96) {
703 var97 = varonce96;
704 } else {
705 var98 = ">(";
706 var99 = 2;
707 var100 = string__NativeString__to_s_with_length(var98, var99);
708 var97 = var100;
709 varonce96 = var97;
710 }
711 if (varonce101) {
712 var102 = varonce101;
713 } else {
714 var103 = ");\n";
715 var104 = 3;
716 var105 = string__NativeString__to_s_with_length(var103, var104);
717 var102 = var105;
718 varonce101 = var102;
719 }
720 var106 = NEW_array__Array(&type_array__Arraykernel__Object);
721 { /* var106 = array_instance Array[Object] */
722 var107 = 8;
723 var108 = NEW_array__NativeArray(var107, &type_array__NativeArraykernel__Object);
724 ((struct instance_array__NativeArray*)var108)->values[0] = (val*) var_type_name;
725 ((struct instance_array__NativeArray*)var108)->values[1] = (val*) var87;
726 ((struct instance_array__NativeArray*)var108)->values[2] = (val*) var_param_name;
727 ((struct instance_array__NativeArray*)var108)->values[3] = (val*) var92;
728 ((struct instance_array__NativeArray*)var108)->values[4] = (val*) var_type_name;
729 ((struct instance_array__NativeArray*)var108)->values[5] = (val*) var97;
730 ((struct instance_array__NativeArray*)var108)->values[6] = (val*) var_param_name;
731 ((struct instance_array__NativeArray*)var108)->values[7] = (val*) var102;
732 ((void (*)(val*, val*, long))(var106->class->vft[COLOR_array__Array__with_native]))(var106, var108, var107) /* with_native on <var106:Array[Object]>*/;
733 }
734 var109 = ((val* (*)(val*))(var106->class->vft[COLOR_string__Object__to_s]))(var106) /* to_s on <var106:Array[Object]>*/;
735 ((void (*)(val*, val*))(var85->class->vft[COLOR_template__Template__add]))(var85, var109) /* add on <var85:Template>*/;
736 } else {
737 var110 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
738 if (varonce111) {
739 var112 = varonce111;
740 } else {
741 var113 = " ";
742 var114 = 1;
743 var115 = string__NativeString__to_s_with_length(var113, var114);
744 var112 = var115;
745 varonce111 = var112;
746 }
747 if (varonce116) {
748 var117 = varonce116;
749 } else {
750 var118 = "_for_cpp = ";
751 var119 = 11;
752 var120 = string__NativeString__to_s_with_length(var118, var119);
753 var117 = var120;
754 varonce116 = var117;
755 }
756 if (varonce121) {
757 var122 = varonce121;
758 } else {
759 var123 = ";\n";
760 var124 = 2;
761 var125 = string__NativeString__to_s_with_length(var123, var124);
762 var122 = var125;
763 varonce121 = var122;
764 }
765 var126 = NEW_array__Array(&type_array__Arraykernel__Object);
766 { /* var126 = array_instance Array[Object] */
767 var127 = 6;
768 var128 = NEW_array__NativeArray(var127, &type_array__NativeArraykernel__Object);
769 ((struct instance_array__NativeArray*)var128)->values[0] = (val*) var_type_name;
770 ((struct instance_array__NativeArray*)var128)->values[1] = (val*) var112;
771 ((struct instance_array__NativeArray*)var128)->values[2] = (val*) var_param_name;
772 ((struct instance_array__NativeArray*)var128)->values[3] = (val*) var117;
773 ((struct instance_array__NativeArray*)var128)->values[4] = (val*) var_param_name;
774 ((struct instance_array__NativeArray*)var128)->values[5] = (val*) var122;
775 ((void (*)(val*, val*, long))(var126->class->vft[COLOR_array__Array__with_native]))(var126, var128, var127) /* with_native on <var126:Array[Object]>*/;
776 }
777 var129 = ((val* (*)(val*))(var126->class->vft[COLOR_string__Object__to_s]))(var126) /* to_s on <var126:Array[Object]>*/;
778 ((void (*)(val*, val*))(var110->class->vft[COLOR_template__Template__add]))(var110, var129) /* add on <var110:Template>*/;
779 }
780 } else {
781 }
782 var130 = ((val* (*)(val*))(var_m->class->vft[COLOR_modelize_property__APropdef__mpropdef]))(var_m) /* mpropdef on <var_m:AExternPropdef>*/;
783 if (var130 == NULL) {
784 fprintf(stderr, "Runtime error: %s", "Receiver is null");
785 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 95);
786 show_backtrace(1);
787 } else {
788 var131 = ((val* (*)(val*))(var130->class->vft[COLOR_model__MMethodDef__msignature]))(var130) /* msignature on <var130:nullable MPropDef(nullable MMethodDef)>*/;
789 }
790 if (var131 == NULL) {
791 fprintf(stderr, "Runtime error: %s", "Receiver is null");
792 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 95);
793 show_backtrace(1);
794 } else {
795 var132 = ((val* (*)(val*))(var131->class->vft[COLOR_model__MSignature__mparameters]))(var131) /* mparameters on <var131:nullable MSignature>*/;
796 }
797 var133 = ((val* (*)(val*))(var132->class->vft[COLOR_abstract_collection__Collection__iterator]))(var132) /* iterator on <var132:Array[MParameter]>*/;
798 for(;;) {
799 var134 = ((short int (*)(val*))(var133->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var133) /* is_ok on <var133:Iterator[nullable Object]>*/;
800 if(!var134) break;
801 var135 = ((val* (*)(val*))(var133->class->vft[COLOR_abstract_collection__Iterator__item]))(var133) /* item on <var133:Iterator[nullable Object]>*/;
802 var_param = var135;
803 var136 = ((val* (*)(val*))(var_param->class->vft[COLOR_model__MParameter__name]))(var_param) /* name on <var_param:MParameter>*/;
804 var_param_name137 = var136;
805 var138 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__to_cpp_call_context]))(self) /* to_cpp_call_context on <self:CPPLanguage>*/;
806 var139 = ((val* (*)(val*))(var_param->class->vft[COLOR_model__MParameter__mtype]))(var_param) /* mtype on <var_param:MParameter>*/;
807 var140 = ((val* (*)(val*, val*))(var138->class->vft[COLOR_nitni_utilities__CallContext__name_mtype]))(var138, var139) /* name_mtype on <var138:ToCppCallContext>*/;
808 var_type_name141 = var140;
809 var142 = ((val* (*)(val*))(var_mclass_type->class->vft[COLOR_model__MClassType__mclass]))(var_mclass_type) /* mclass on <var_mclass_type:MClassType>*/;
810 var143 = ((val* (*)(val*))(var142->class->vft[COLOR_extern_classes__MClass__ftype]))(var142) /* ftype on <var142:MClass>*/;
811 /* <var143:nullable ForeignType> isa ForeignCppType */
812 cltype145 = type_cpp__ForeignCppType.color;
813 idtype146 = type_cpp__ForeignCppType.id;
814 if(var143 == NULL) {
815 var144 = 0;
816 } else {
817 if(cltype145 >= var143->type->table_size) {
818 var144 = 0;
819 } else {
820 var144 = var143->type->type_table[cltype145] == idtype146;
821 }
822 }
823 if (var144){
824 var147 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
825 if (varonce148) {
826 var149 = varonce148;
827 } else {
828 var150 = " ";
829 var151 = 1;
830 var152 = string__NativeString__to_s_with_length(var150, var151);
831 var149 = var152;
832 varonce148 = var149;
833 }
834 if (varonce153) {
835 var154 = varonce153;
836 } else {
837 var155 = "_for_cpp = static_cast<";
838 var156 = 23;
839 var157 = string__NativeString__to_s_with_length(var155, var156);
840 var154 = var157;
841 varonce153 = var154;
842 }
843 if (varonce158) {
844 var159 = varonce158;
845 } else {
846 var160 = ">(";
847 var161 = 2;
848 var162 = string__NativeString__to_s_with_length(var160, var161);
849 var159 = var162;
850 varonce158 = var159;
851 }
852 if (varonce163) {
853 var164 = varonce163;
854 } else {
855 var165 = ");\n";
856 var166 = 3;
857 var167 = string__NativeString__to_s_with_length(var165, var166);
858 var164 = var167;
859 varonce163 = var164;
860 }
861 var168 = NEW_array__Array(&type_array__Arraykernel__Object);
862 { /* var168 = array_instance Array[Object] */
863 var169 = 8;
864 var170 = NEW_array__NativeArray(var169, &type_array__NativeArraykernel__Object);
865 ((struct instance_array__NativeArray*)var170)->values[0] = (val*) var_type_name141;
866 ((struct instance_array__NativeArray*)var170)->values[1] = (val*) var149;
867 ((struct instance_array__NativeArray*)var170)->values[2] = (val*) var_param_name137;
868 ((struct instance_array__NativeArray*)var170)->values[3] = (val*) var154;
869 ((struct instance_array__NativeArray*)var170)->values[4] = (val*) var_type_name141;
870 ((struct instance_array__NativeArray*)var170)->values[5] = (val*) var159;
871 ((struct instance_array__NativeArray*)var170)->values[6] = (val*) var_param_name137;
872 ((struct instance_array__NativeArray*)var170)->values[7] = (val*) var164;
873 ((void (*)(val*, val*, long))(var168->class->vft[COLOR_array__Array__with_native]))(var168, var170, var169) /* with_native on <var168:Array[Object]>*/;
874 }
875 var171 = ((val* (*)(val*))(var168->class->vft[COLOR_string__Object__to_s]))(var168) /* to_s on <var168:Array[Object]>*/;
876 ((void (*)(val*, val*))(var147->class->vft[COLOR_template__Template__add]))(var147, var171) /* add on <var147:Template>*/;
877 } else {
878 var172 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
879 if (varonce173) {
880 var174 = varonce173;
881 } else {
882 var175 = " ";
883 var176 = 1;
884 var177 = string__NativeString__to_s_with_length(var175, var176);
885 var174 = var177;
886 varonce173 = var174;
887 }
888 if (varonce178) {
889 var179 = varonce178;
890 } else {
891 var180 = "_for_cpp = ";
892 var181 = 11;
893 var182 = string__NativeString__to_s_with_length(var180, var181);
894 var179 = var182;
895 varonce178 = var179;
896 }
897 if (varonce183) {
898 var184 = varonce183;
899 } else {
900 var185 = ";\n";
901 var186 = 2;
902 var187 = string__NativeString__to_s_with_length(var185, var186);
903 var184 = var187;
904 varonce183 = var184;
905 }
906 var188 = NEW_array__Array(&type_array__Arraykernel__Object);
907 { /* var188 = array_instance Array[Object] */
908 var189 = 6;
909 var190 = NEW_array__NativeArray(var189, &type_array__NativeArraykernel__Object);
910 ((struct instance_array__NativeArray*)var190)->values[0] = (val*) var_type_name141;
911 ((struct instance_array__NativeArray*)var190)->values[1] = (val*) var174;
912 ((struct instance_array__NativeArray*)var190)->values[2] = (val*) var_param_name137;
913 ((struct instance_array__NativeArray*)var190)->values[3] = (val*) var179;
914 ((struct instance_array__NativeArray*)var190)->values[4] = (val*) var_param_name137;
915 ((struct instance_array__NativeArray*)var190)->values[5] = (val*) var184;
916 ((void (*)(val*, val*, long))(var188->class->vft[COLOR_array__Array__with_native]))(var188, var190, var189) /* with_native on <var188:Array[Object]>*/;
917 }
918 var191 = ((val* (*)(val*))(var188->class->vft[COLOR_string__Object__to_s]))(var188) /* to_s on <var188:Array[Object]>*/;
919 ((void (*)(val*, val*))(var172->class->vft[COLOR_template__Template__add]))(var172, var191) /* add on <var172:Template>*/;
920 }
921 CONTINUE_label: (void)0;
922 ((void (*)(val*))(var133->class->vft[COLOR_abstract_collection__Iterator__next]))(var133) /* next on <var133:Iterator[nullable Object]>*/;
923 }
924 BREAK_label: (void)0;
925 var192 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
926 if (varonce193) {
927 var194 = varonce193;
928 } else {
929 var195 = "___cpp_impl";
930 var196 = 11;
931 var197 = string__NativeString__to_s_with_length(var195, var196);
932 var194 = var197;
933 varonce193 = var194;
934 }
935 var198 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:CPPLanguage>*/;
936 var199 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__cpp_call_context]))(self) /* cpp_call_context on <self:CPPLanguage>*/;
937 if (varonce200) {
938 var201 = varonce200;
939 } else {
940 var202 = "_for_cpp";
941 var203 = 8;
942 var204 = string__NativeString__to_s_with_length(var202, var203);
943 var201 = var204;
944 varonce200 = var201;
945 }
946 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>*/;
947 ((void (*)(val*, val*))(var192->class->vft[COLOR_template__Template__add]))(var192, var205) /* add on <var192:Template>*/;
948 var206 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
949 if (varonce207) {
950 var208 = varonce207;
951 } else {
952 var209 = "\n";
953 var210 = 1;
954 var211 = string__NativeString__to_s_with_length(var209, var210);
955 var208 = var211;
956 varonce207 = var208;
957 }
958 ((void (*)(val*, val*))(var206->class->vft[COLOR_template__Template__add]))(var206, var208) /* add on <var206:Template>*/;
959 var212 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
960 if (var212 == NULL) {
961 fprintf(stderr, "Runtime error: %s", "Receiver is null");
962 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 106);
963 show_backtrace(1);
964 } else {
965 ((void (*)(val*, val*))(var212->class->vft[COLOR_c_tools__CCompilationUnit__add_local_function]))(var212, var_fc) /* add_local_function on <var212:nullable CPPCompilationUnit>*/;
966 }
967 if (varonce213) {
968 var214 = varonce213;
969 } else {
970 var215 = "___cpp_impl";
971 var216 = 11;
972 var217 = string__NativeString__to_s_with_length(var215, var216);
973 var214 = var217;
974 varonce213 = var214;
975 }
976 var218 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:CPPLanguage>*/;
977 var219 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__cpp_call_context]))(self) /* cpp_call_context on <self:CPPLanguage>*/;
978 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>*/;
979 var_cpp_signature = var220;
980 var221 = NEW_c_tools__CFunction(&type_c_tools__CFunction);
981 ((void (*)(val*, val*))(var221->class->vft[COLOR_c_tools__CFunction__init]))(var221, var_cpp_signature) /* init on <var221:CFunction>*/;
982 var_fc = var221;
983 var222 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__decls]))(var_fc) /* decls on <var_fc:CFunction>*/;
984 var223 = ((val* (*)(val*))(var_block->class->vft[COLOR_parser_nodes__ANode__location]))(var_block) /* location on <var_block:AExternCodeBlock>*/;
985 var224 = ((val* (*)(val*))(var223->class->vft[COLOR_c__Location__as_line_pragma]))(var223) /* as_line_pragma on <var223:Location>*/;
986 ((void (*)(val*, val*))(var222->class->vft[COLOR_template__Template__add]))(var222, var224) /* add on <var222:Template>*/;
987 var225 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
988 var226 = ((val* (*)(val*))(var_block->class->vft[COLOR_ffi_base__AExternCodeBlock__code]))(var_block) /* code on <var_block:AExternCodeBlock>*/;
989 ((void (*)(val*, val*))(var225->class->vft[COLOR_template__Template__add]))(var225, var226) /* add on <var225:Template>*/;
990 var227 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
991 if (var227 == NULL) {
992 fprintf(stderr, "Runtime error: %s", "Receiver is null");
993 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 113);
994 show_backtrace(1);
995 } else {
996 ((void (*)(val*, val*))(var227->class->vft[COLOR_c_tools__CCompilationUnit__add_local_function]))(var227, var_fc) /* add_local_function on <var227:nullable CPPCompilationUnit>*/;
997 }
998 RET_LABEL:;
999 }
1000 /* method cpp#CPPLanguage#compile_extern_method for (self: Object, AExternCodeBlock, AExternPropdef, CCompilationUnit, AModule) */
1001 void VIRTUAL_cpp__CPPLanguage__compile_extern_method(val* self, val* p0, val* p1, val* p2, val* p3) {
1002 cpp__CPPLanguage__compile_extern_method(self, p0, p1, p2, p3);
1003 RET_LABEL:;
1004 }
1005 /* method cpp#CPPLanguage#compile_extern_class for (self: CPPLanguage, AExternCodeBlock, AClassdef, CCompilationUnit, AModule) */
1006 void cpp__CPPLanguage__compile_extern_class(val* self, val* p0, val* p1, val* p2, val* p3) {
1007 val* var_block /* var block: AExternCodeBlock */;
1008 val* var_m /* var m: AClassdef */;
1009 val* var_ecc /* var ecc: CCompilationUnit */;
1010 val* var_nmodule /* var nmodule: AModule */;
1011 var_block = p0;
1012 var_m = p1;
1013 var_ecc = p2;
1014 var_nmodule = p3;
1015 RET_LABEL:;
1016 }
1017 /* method cpp#CPPLanguage#compile_extern_class for (self: Object, AExternCodeBlock, AClassdef, CCompilationUnit, AModule) */
1018 void VIRTUAL_cpp__CPPLanguage__compile_extern_class(val* self, val* p0, val* p1, val* p2, val* p3) {
1019 cpp__CPPLanguage__compile_extern_class(self, p0, p1, p2, p3);
1020 RET_LABEL:;
1021 }
1022 /* method cpp#CPPLanguage#get_ftype for (self: CPPLanguage, AExternCodeBlock, AClassdef): ForeignType */
1023 val* cpp__CPPLanguage__get_ftype(val* self, val* p0, val* p1) {
1024 val* var /* : ForeignType */;
1025 val* var_block /* var block: AExternCodeBlock */;
1026 val* var_m /* var m: AClassdef */;
1027 val* var1 /* : ForeignCppType */;
1028 val* var2 /* : String */;
1029 var_block = p0;
1030 var_m = p1;
1031 var1 = NEW_cpp__ForeignCppType(&type_cpp__ForeignCppType);
1032 var2 = ((val* (*)(val*))(var_block->class->vft[COLOR_ffi_base__AExternCodeBlock__code]))(var_block) /* code on <var_block:AExternCodeBlock>*/;
1033 ((void (*)(val*, val*))(var1->class->vft[COLOR_cpp__ForeignCppType__init]))(var1, var2) /* init on <var1:ForeignCppType>*/;
1034 var = var1;
1035 goto RET_LABEL;
1036 RET_LABEL:;
1037 return var;
1038 }
1039 /* method cpp#CPPLanguage#get_ftype for (self: Object, AExternCodeBlock, AClassdef): ForeignType */
1040 val* VIRTUAL_cpp__CPPLanguage__get_ftype(val* self, val* p0, val* p1) {
1041 val* var /* : ForeignType */;
1042 val* var1 /* : ForeignType */;
1043 var1 = cpp__CPPLanguage__get_ftype(self, p0, p1);
1044 var = var1;
1045 RET_LABEL:;
1046 return var;
1047 }
1048 /* method cpp#CPPLanguage#compile_to_files for (self: CPPLanguage, AModule, String) */
1049 void cpp__CPPLanguage__compile_to_files(val* self, val* p0, val* p1) {
1050 val* var_nmodule /* var nmodule: AModule */;
1051 val* var_compdir /* var compdir: String */;
1052 val* var /* : nullable CPPCompilationUnit */;
1053 val* var_cpp_file /* var cpp_file: nullable CPPCompilationUnit */;
1054 val* var1 /* : null */;
1055 short int var2 /* : Bool */;
1056 val* var3 /* : Template */;
1057 static val* varonce;
1058 val* var4 /* : String */;
1059 char* var5 /* : NativeString */;
1060 long var6 /* : Int */;
1061 val* var7 /* : String */;
1062 val* var8 /* : Template */;
1063 static val* varonce9;
1064 val* var10 /* : String */;
1065 char* var11 /* : NativeString */;
1066 long var12 /* : Int */;
1067 val* var13 /* : String */;
1068 val* var14 /* : nullable MModule */;
1069 val* var15 /* : String */;
1070 static val* varonce16;
1071 val* var17 /* : String */;
1072 char* var18 /* : NativeString */;
1073 long var19 /* : Int */;
1074 val* var20 /* : String */;
1075 val* var21 /* : Array[Object] */;
1076 long var22 /* : Int */;
1077 val* var23 /* : NativeArray[Object] */;
1078 val* var24 /* : String */;
1079 val* var25 /* : Template */;
1080 static val* varonce26;
1081 val* var27 /* : String */;
1082 char* var28 /* : NativeString */;
1083 long var29 /* : Int */;
1084 val* var30 /* : String */;
1085 val* var31 /* : ExternCppFile */;
1086 val* var_file /* var file: ExternCppFile */;
1087 val* var32 /* : Array[ExternFile] */;
1088 val* var33 /* : String */;
1089 static val* varonce34;
1090 val* var35 /* : String */;
1091 char* var36 /* : NativeString */;
1092 long var37 /* : Int */;
1093 val* var38 /* : String */;
1094 val* var39 /* : Array[Object] */;
1095 long var40 /* : Int */;
1096 val* var41 /* : NativeArray[Object] */;
1097 val* var42 /* : String */;
1098 var_nmodule = p0;
1099 var_compdir = p1;
1100 var = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
1101 var_cpp_file = var;
1102 var1 = NULL;
1103 if (var_cpp_file == NULL) {
1104 var2 = 0; /* is null */
1105 } else {
1106 var2 = 1; /* arg is null and recv is not */
1107 }
1108 if (!var2) {
1109 fprintf(stderr, "Runtime error: %s", "Assert failed");
1110 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 123);
1111 show_backtrace(1);
1112 }
1113 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)>*/;
1114 if (varonce) {
1115 var4 = varonce;
1116 } else {
1117 var5 = "extern \"C\" {\n";
1118 var6 = 13;
1119 var7 = string__NativeString__to_s_with_length(var5, var6);
1120 var4 = var7;
1121 varonce = var4;
1122 }
1123 ((void (*)(val*, val*))(var3->class->vft[COLOR_template__Template__add]))(var3, var4) /* add on <var3:Template>*/;
1124 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)>*/;
1125 if (varonce9) {
1126 var10 = varonce9;
1127 } else {
1128 var11 = "#include \"";
1129 var12 = 10;
1130 var13 = string__NativeString__to_s_with_length(var11, var12);
1131 var10 = var13;
1132 varonce9 = var10;
1133 }
1134 var14 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_nmodule) /* mmodule on <var_nmodule:AModule>*/;
1135 if (var14 == NULL) {
1136 fprintf(stderr, "Runtime error: %s", "Receiver is null");
1137 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 127);
1138 show_backtrace(1);
1139 } else {
1140 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_mmodule__MModule__name]))(var14) /* name on <var14:nullable MModule>*/;
1141 }
1142 if (varonce16) {
1143 var17 = varonce16;
1144 } else {
1145 var18 = "._ffi.h\"\n";
1146 var19 = 9;
1147 var20 = string__NativeString__to_s_with_length(var18, var19);
1148 var17 = var20;
1149 varonce16 = var17;
1150 }
1151 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
1152 { /* var21 = array_instance Array[Object] */
1153 var22 = 3;
1154 var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
1155 ((struct instance_array__NativeArray*)var23)->values[0] = (val*) var10;
1156 ((struct instance_array__NativeArray*)var23)->values[1] = (val*) var15;
1157 ((struct instance_array__NativeArray*)var23)->values[2] = (val*) var17;
1158 ((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
1159 }
1160 var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
1161 ((void (*)(val*, val*))(var8->class->vft[COLOR_template__Template__add]))(var8, var24) /* add on <var8:Template>*/;
1162 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)>*/;
1163 if (varonce26) {
1164 var27 = varonce26;
1165 } else {
1166 var28 = "}\n";
1167 var29 = 2;
1168 var30 = string__NativeString__to_s_with_length(var28, var29);
1169 var27 = var30;
1170 varonce26 = var27;
1171 }
1172 ((void (*)(val*, val*))(var25->class->vft[COLOR_template__Template__add]))(var25, var27) /* add on <var25:Template>*/;
1173 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)>*/;
1174 var_file = var31;
1175 var32 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_ffi_base__AModule__ffi_files]))(var_nmodule) /* ffi_files on <var_nmodule:AModule>*/;
1176 ((void (*)(val*, val*))(var32->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var32, var_file) /* add on <var32:Array[ExternFile]>*/;
1177 var33 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_c__AModule__c_linker_options]))(var_nmodule) /* c_linker_options on <var_nmodule:AModule>*/;
1178 if (varonce34) {
1179 var35 = varonce34;
1180 } else {
1181 var36 = " -lstdc++";
1182 var37 = 9;
1183 var38 = string__NativeString__to_s_with_length(var36, var37);
1184 var35 = var38;
1185 varonce34 = var35;
1186 }
1187 var39 = NEW_array__Array(&type_array__Arraykernel__Object);
1188 { /* var39 = array_instance Array[Object] */
1189 var40 = 2;
1190 var41 = NEW_array__NativeArray(var40, &type_array__NativeArraykernel__Object);
1191 ((struct instance_array__NativeArray*)var41)->values[0] = (val*) var33;
1192 ((struct instance_array__NativeArray*)var41)->values[1] = (val*) var35;
1193 ((void (*)(val*, val*, long))(var39->class->vft[COLOR_array__Array__with_native]))(var39, var41, var40) /* with_native on <var39:Array[Object]>*/;
1194 }
1195 var42 = ((val* (*)(val*))(var39->class->vft[COLOR_string__Object__to_s]))(var39) /* to_s on <var39:Array[Object]>*/;
1196 ((void (*)(val*, val*))(var_nmodule->class->vft[COLOR_c__AModule__c_linker_options_61d]))(var_nmodule, var42) /* c_linker_options= on <var_nmodule:AModule>*/;
1197 RET_LABEL:;
1198 }
1199 /* method cpp#CPPLanguage#compile_to_files for (self: Object, AModule, String) */
1200 void VIRTUAL_cpp__CPPLanguage__compile_to_files(val* self, val* p0, val* p1) {
1201 cpp__CPPLanguage__compile_to_files(self, p0, p1);
1202 RET_LABEL:;
1203 }
1204 /* method cpp#CPPLanguage#compile_callback for (self: CPPLanguage, NitniCallback, AModule, MModule, CCompilationUnit) */
1205 void cpp__CPPLanguage__compile_callback(val* self, val* p0, val* p1, val* p2, val* p3) {
1206 val* var_callback /* var callback: NitniCallback */;
1207 val* var_nmodule /* var nmodule: AModule */;
1208 val* var_mmodule /* var mmodule: MModule */;
1209 val* var_ecc /* var ecc: CCompilationUnit */;
1210 var_callback = p0;
1211 var_nmodule = p1;
1212 var_mmodule = p2;
1213 var_ecc = p3;
1214 ((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>*/;
1215 RET_LABEL:;
1216 }
1217 /* method cpp#CPPLanguage#compile_callback for (self: Object, NitniCallback, AModule, MModule, CCompilationUnit) */
1218 void VIRTUAL_cpp__CPPLanguage__compile_callback(val* self, val* p0, val* p1, val* p2, val* p3) {
1219 cpp__CPPLanguage__compile_callback(self, p0, p1, p2, p3);
1220 RET_LABEL:;
1221 }
1222 /* method cpp#AExternCodeBlock#is_cpp for (self: AExternCodeBlock): Bool */
1223 short int cpp__AExternCodeBlock__is_cpp(val* self) {
1224 short int var /* : Bool */;
1225 short int var1 /* : Bool */;
1226 val* var2 /* : nullable String */;
1227 val* var3 /* : null */;
1228 short int var4 /* : Bool */;
1229 short int var_ /* var : Bool */;
1230 short int var5 /* : Bool */;
1231 val* var6 /* : nullable String */;
1232 static val* varonce;
1233 val* var7 /* : String */;
1234 char* var8 /* : NativeString */;
1235 long var9 /* : Int */;
1236 val* var10 /* : String */;
1237 short int var11 /* : Bool */;
1238 short int var_12 /* var : Bool */;
1239 val* var13 /* : nullable String */;
1240 static val* varonce14;
1241 val* var15 /* : String */;
1242 char* var16 /* : NativeString */;
1243 long var17 /* : Int */;
1244 val* var18 /* : String */;
1245 short int var19 /* : Bool */;
1246 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name]))(self) /* language_name on <self:AExternCodeBlock>*/;
1247 var3 = NULL;
1248 if (var2 == NULL) {
1249 var4 = 0; /* is null */
1250 } else {
1251 var4 = 1; /* arg is null and recv is not */
1252 }
1253 var_ = var4;
1254 if (var4){
1255 var6 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
1256 if (varonce) {
1257 var7 = varonce;
1258 } else {
1259 var8 = "c++";
1260 var9 = 3;
1261 var10 = string__NativeString__to_s_with_length(var8, var9);
1262 var7 = var10;
1263 varonce = var7;
1264 }
1265 if (var6 == NULL) {
1266 var11 = 0; /* <var7:String> cannot be null */
1267 } else {
1268 var11 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_kernel__Object___61d_61d]))(var6, var7) /* == on <var6:nullable String>*/;
1269 }
1270 var_12 = var11;
1271 if (var11){
1272 var5 = var_12;
1273 } else {
1274 var13 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
1275 if (varonce14) {
1276 var15 = varonce14;
1277 } else {
1278 var16 = "c++ ";
1279 var17 = 4;
1280 var18 = string__NativeString__to_s_with_length(var16, var17);
1281 var15 = var18;
1282 varonce14 = var15;
1283 }
1284 if (var13 == NULL) {
1285 fprintf(stderr, "Runtime error: %s", "Receiver is null");
1286 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 147);
1287 show_backtrace(1);
1288 } else {
1289 var19 = ((short int (*)(val*, val*))(var13->class->vft[COLOR_string__AbstractString__has_prefix]))(var13, var15) /* has_prefix on <var13:nullable String>*/;
1290 }
1291 var5 = var19;
1292 }
1293 var1 = var5;
1294 } else {
1295 var1 = var_;
1296 }
1297 var = var1;
1298 goto RET_LABEL;
1299 RET_LABEL:;
1300 return var;
1301 }
1302 /* method cpp#AExternCodeBlock#is_cpp for (self: Object): Bool */
1303 short int VIRTUAL_cpp__AExternCodeBlock__is_cpp(val* self) {
1304 short int var /* : Bool */;
1305 short int var1 /* : Bool */;
1306 var1 = cpp__AExternCodeBlock__is_cpp(self);
1307 var = var1;
1308 RET_LABEL:;
1309 return var;
1310 }
1311 /* method cpp#AExternCodeBlock#is_cpp_body for (self: AExternCodeBlock): Bool */
1312 short int cpp__AExternCodeBlock__is_cpp_body(val* self) {
1313 short int var /* : Bool */;
1314 short int var1 /* : Bool */;
1315 val* var2 /* : nullable String */;
1316 val* var3 /* : null */;
1317 short int var4 /* : Bool */;
1318 short int var_ /* var : Bool */;
1319 short int var5 /* : Bool */;
1320 val* var6 /* : nullable String */;
1321 static val* varonce;
1322 val* var7 /* : String */;
1323 char* var8 /* : NativeString */;
1324 long var9 /* : Int */;
1325 val* var10 /* : String */;
1326 short int var11 /* : Bool */;
1327 short int var_12 /* var : Bool */;
1328 val* var13 /* : nullable String */;
1329 static val* varonce14;
1330 val* var15 /* : String */;
1331 char* var16 /* : NativeString */;
1332 long var17 /* : Int */;
1333 val* var18 /* : String */;
1334 short int var19 /* : Bool */;
1335 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name]))(self) /* language_name on <self:AExternCodeBlock>*/;
1336 var3 = NULL;
1337 if (var2 == NULL) {
1338 var4 = 0; /* is null */
1339 } else {
1340 var4 = 1; /* arg is null and recv is not */
1341 }
1342 var_ = var4;
1343 if (var4){
1344 var6 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
1345 if (varonce) {
1346 var7 = varonce;
1347 } else {
1348 var8 = "c++";
1349 var9 = 3;
1350 var10 = string__NativeString__to_s_with_length(var8, var9);
1351 var7 = var10;
1352 varonce = var7;
1353 }
1354 if (var6 == NULL) {
1355 var11 = 0; /* <var7:String> cannot be null */
1356 } else {
1357 var11 = ((short int (*)(val*, val*))(var6->class->vft[COLOR_kernel__Object___61d_61d]))(var6, var7) /* == on <var6:nullable String>*/;
1358 }
1359 var_12 = var11;
1360 if (var11){
1361 var5 = var_12;
1362 } else {
1363 var13 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
1364 if (varonce14) {
1365 var15 = varonce14;
1366 } else {
1367 var16 = "c++ body";
1368 var17 = 8;
1369 var18 = string__NativeString__to_s_with_length(var16, var17);
1370 var15 = var18;
1371 varonce14 = var15;
1372 }
1373 if (var13 == NULL) {
1374 var19 = 0; /* <var15:String> cannot be null */
1375 } else {
1376 var19 = ((short int (*)(val*, val*))(var13->class->vft[COLOR_kernel__Object___61d_61d]))(var13, var15) /* == on <var13:nullable String>*/;
1377 }
1378 var5 = var19;
1379 }
1380 var1 = var5;
1381 } else {
1382 var1 = var_;
1383 }
1384 var = var1;
1385 goto RET_LABEL;
1386 RET_LABEL:;
1387 return var;
1388 }
1389 /* method cpp#AExternCodeBlock#is_cpp_body for (self: Object): Bool */
1390 short int VIRTUAL_cpp__AExternCodeBlock__is_cpp_body(val* self) {
1391 short int var /* : Bool */;
1392 short int var1 /* : Bool */;
1393 var1 = cpp__AExternCodeBlock__is_cpp_body(self);
1394 var = var1;
1395 RET_LABEL:;
1396 return var;
1397 }
1398 /* method cpp#AExternCodeBlock#is_cpp_header for (self: AExternCodeBlock): Bool */
1399 short int cpp__AExternCodeBlock__is_cpp_header(val* self) {
1400 short int var /* : Bool */;
1401 short int var1 /* : Bool */;
1402 val* var2 /* : nullable String */;
1403 val* var3 /* : null */;
1404 short int var4 /* : Bool */;
1405 short int var_ /* var : Bool */;
1406 val* var5 /* : nullable String */;
1407 static val* varonce;
1408 val* var6 /* : String */;
1409 char* var7 /* : NativeString */;
1410 long var8 /* : Int */;
1411 val* var9 /* : String */;
1412 short int var10 /* : Bool */;
1413 var2 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name]))(self) /* language_name on <self:AExternCodeBlock>*/;
1414 var3 = NULL;
1415 if (var2 == NULL) {
1416 var4 = 0; /* is null */
1417 } else {
1418 var4 = 1; /* arg is null and recv is not */
1419 }
1420 var_ = var4;
1421 if (var4){
1422 var5 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AExternCodeBlock__language_name_lowered]))(self) /* language_name_lowered on <self:AExternCodeBlock>*/;
1423 if (varonce) {
1424 var6 = varonce;
1425 } else {
1426 var7 = "c++ header";
1427 var8 = 10;
1428 var9 = string__NativeString__to_s_with_length(var7, var8);
1429 var6 = var9;
1430 varonce = var6;
1431 }
1432 if (var5 == NULL) {
1433 var10 = 0; /* <var6:String> cannot be null */
1434 } else {
1435 var10 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_kernel__Object___61d_61d]))(var5, var6) /* == on <var5:nullable String>*/;
1436 }
1437 var1 = var10;
1438 } else {
1439 var1 = var_;
1440 }
1441 var = var1;
1442 goto RET_LABEL;
1443 RET_LABEL:;
1444 return var;
1445 }
1446 /* method cpp#AExternCodeBlock#is_cpp_header for (self: Object): Bool */
1447 short int VIRTUAL_cpp__AExternCodeBlock__is_cpp_header(val* self) {
1448 short int var /* : Bool */;
1449 short int var1 /* : Bool */;
1450 var1 = cpp__AExternCodeBlock__is_cpp_header(self);
1451 var = var1;
1452 RET_LABEL:;
1453 return var;
1454 }
1455 /* method cpp#CPPCompilationUnit#write_to_files for (self: CPPCompilationUnit, AModule, String): ExternCppFile */
1456 val* cpp__CPPCompilationUnit__write_to_files(val* self, val* p0, val* p1) {
1457 val* var /* : ExternCppFile */;
1458 val* var_amodule /* var amodule: AModule */;
1459 val* var_compdir /* var compdir: String */;
1460 val* var1 /* : Array[Object] */;
1461 long var2 /* : Int */;
1462 val* var_ /* var : Array[Object] */;
1463 static val* varonce;
1464 val* var3 /* : String */;
1465 char* var4 /* : NativeString */;
1466 long var5 /* : Int */;
1467 val* var6 /* : String */;
1468 val* var7 /* : nullable MModule */;
1469 val* var8 /* : String */;
1470 static val* varonce9;
1471 val* var10 /* : String */;
1472 char* var11 /* : NativeString */;
1473 long var12 /* : Int */;
1474 val* var13 /* : String */;
1475 val* var14 /* : String */;
1476 val* var_base_name /* var base_name: String */;
1477 val* var15 /* : Array[Object] */;
1478 long var16 /* : Int */;
1479 val* var_17 /* var : Array[Object] */;
1480 static val* varonce18;
1481 val* var19 /* : String */;
1482 char* var20 /* : NativeString */;
1483 long var21 /* : Int */;
1484 val* var22 /* : String */;
1485 static val* varonce23;
1486 val* var24 /* : String */;
1487 char* var25 /* : NativeString */;
1488 long var26 /* : Int */;
1489 val* var27 /* : String */;
1490 val* var28 /* : String */;
1491 val* var_h_file /* var h_file: String */;
1492 val* var29 /* : Array[Object] */;
1493 long var30 /* : Int */;
1494 val* var_31 /* var : Array[Object] */;
1495 static val* varonce32;
1496 val* var33 /* : String */;
1497 char* var34 /* : NativeString */;
1498 long var35 /* : Int */;
1499 val* var36 /* : String */;
1500 val* var37 /* : String */;
1501 val* var38 /* : String */;
1502 val* var39 /* : String */;
1503 static val* varonce40;
1504 val* var41 /* : String */;
1505 char* var42 /* : NativeString */;
1506 long var43 /* : Int */;
1507 val* var44 /* : String */;
1508 val* var45 /* : String */;
1509 val* var_guard /* var guard: String */;
1510 static val* varonce46;
1511 val* var47 /* : String */;
1512 char* var48 /* : NativeString */;
1513 long var49 /* : Int */;
1514 val* var50 /* : String */;
1515 val* var51 /* : Array[Object] */;
1516 long var52 /* : Int */;
1517 val* var53 /* : NativeArray[Object] */;
1518 val* var54 /* : String */;
1519 val* var55 /* : Array[String] */;
1520 val* var56 /* : Array[Object] */;
1521 long var57 /* : Int */;
1522 val* var_58 /* var : Array[Object] */;
1523 static val* varonce59;
1524 val* var60 /* : String */;
1525 char* var61 /* : NativeString */;
1526 long var62 /* : Int */;
1527 val* var63 /* : String */;
1528 static val* varonce64;
1529 val* var65 /* : String */;
1530 char* var66 /* : NativeString */;
1531 long var67 /* : Int */;
1532 val* var68 /* : String */;
1533 val* var69 /* : String */;
1534 val* var_c_file /* var c_file: String */;
1535 static val* varonce70;
1536 val* var71 /* : String */;
1537 char* var72 /* : NativeString */;
1538 long var73 /* : Int */;
1539 val* var74 /* : String */;
1540 val* var75 /* : Array[Object] */;
1541 long var76 /* : Int */;
1542 val* var77 /* : NativeArray[Object] */;
1543 val* var78 /* : String */;
1544 static val* varonce79;
1545 val* var80 /* : String */;
1546 char* var81 /* : NativeString */;
1547 long var82 /* : Int */;
1548 val* var83 /* : String */;
1549 static val* varonce84;
1550 val* var85 /* : String */;
1551 char* var86 /* : NativeString */;
1552 long var87 /* : Int */;
1553 val* var88 /* : String */;
1554 val* var89 /* : Array[Object] */;
1555 long var90 /* : Int */;
1556 val* var_91 /* var : Array[Object] */;
1557 static val* varonce92;
1558 val* var93 /* : String */;
1559 char* var94 /* : NativeString */;
1560 long var95 /* : Int */;
1561 val* var96 /* : String */;
1562 static val* varonce97;
1563 val* var98 /* : String */;
1564 char* var99 /* : NativeString */;
1565 long var100 /* : Int */;
1566 val* var101 /* : String */;
1567 val* var102 /* : String */;
1568 val* var103 /* : Array[String] */;
1569 long var104 /* : Int */;
1570 val* var105 /* : NativeArray[String] */;
1571 val* var106 /* : Array[String] */;
1572 static val* varonce107;
1573 val* var108 /* : String */;
1574 char* var109 /* : NativeString */;
1575 long var110 /* : Int */;
1576 val* var111 /* : String */;
1577 val* var112 /* : Array[Object] */;
1578 long var113 /* : Int */;
1579 val* var114 /* : NativeArray[Object] */;
1580 val* var115 /* : String */;
1581 val* var116 /* : ExternCppFile */;
1582 val* var117 /* : Array[Object] */;
1583 long var118 /* : Int */;
1584 val* var_119 /* var : Array[Object] */;
1585 static val* varonce120;
1586 val* var121 /* : String */;
1587 char* var122 /* : NativeString */;
1588 long var123 /* : Int */;
1589 val* var124 /* : String */;
1590 static val* varonce125;
1591 val* var126 /* : String */;
1592 char* var127 /* : NativeString */;
1593 long var128 /* : Int */;
1594 val* var129 /* : String */;
1595 static val* varonce130;
1596 val* var131 /* : String */;
1597 char* var132 /* : NativeString */;
1598 long var133 /* : Int */;
1599 val* var134 /* : String */;
1600 val* var135 /* : String */;
1601 var_amodule = p0;
1602 var_compdir = p1;
1603 var1 = NEW_array__Array(&type_array__Arraykernel__Object);
1604 var2 = 3;
1605 ((void (*)(val*, long))(var1->class->vft[COLOR_array__Array__with_capacity]))(var1, var2) /* with_capacity on <var1:Array[Object]>*/;
1606 var_ = var1;
1607 if (varonce) {
1608 var3 = varonce;
1609 } else {
1610 var4 = "";
1611 var5 = 0;
1612 var6 = string__NativeString__to_s_with_length(var4, var5);
1613 var3 = var6;
1614 varonce = var3;
1615 }
1616 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var3) /* add on <var_:Array[Object]>*/;
1617 var7 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_amodule) /* mmodule on <var_amodule:AModule>*/;
1618 if (var7 == NULL) {
1619 fprintf(stderr, "Runtime error: %s", "Receiver is null");
1620 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 161);
1621 show_backtrace(1);
1622 } else {
1623 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_mmodule__MModule__name]))(var7) /* name on <var7:nullable MModule>*/;
1624 }
1625 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var8) /* add on <var_:Array[Object]>*/;
1626 if (varonce9) {
1627 var10 = varonce9;
1628 } else {
1629 var11 = "._ffi";
1630 var12 = 5;
1631 var13 = string__NativeString__to_s_with_length(var11, var12);
1632 var10 = var13;
1633 varonce9 = var10;
1634 }
1635 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var10) /* add on <var_:Array[Object]>*/;
1636 var14 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
1637 var_base_name = var14;
1638 var15 = NEW_array__Array(&type_array__Arraykernel__Object);
1639 var16 = 3;
1640 ((void (*)(val*, long))(var15->class->vft[COLOR_array__Array__with_capacity]))(var15, var16) /* with_capacity on <var15:Array[Object]>*/;
1641 var_17 = var15;
1642 if (varonce18) {
1643 var19 = varonce18;
1644 } else {
1645 var20 = "";
1646 var21 = 0;
1647 var22 = string__NativeString__to_s_with_length(var20, var21);
1648 var19 = var22;
1649 varonce18 = var19;
1650 }
1651 ((void (*)(val*, val*))(var_17->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_17, var19) /* add on <var_17:Array[Object]>*/;
1652 ((void (*)(val*, val*))(var_17->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_17, var_base_name) /* add on <var_17:Array[Object]>*/;
1653 if (varonce23) {
1654 var24 = varonce23;
1655 } else {
1656 var25 = ".hpp";
1657 var26 = 4;
1658 var27 = string__NativeString__to_s_with_length(var25, var26);
1659 var24 = var27;
1660 varonce23 = var24;
1661 }
1662 ((void (*)(val*, val*))(var_17->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_17, var24) /* add on <var_17:Array[Object]>*/;
1663 var28 = ((val* (*)(val*))(var_17->class->vft[COLOR_string__Object__to_s]))(var_17) /* to_s on <var_17:Array[Object]>*/;
1664 var_h_file = var28;
1665 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
1666 var30 = 3;
1667 ((void (*)(val*, long))(var29->class->vft[COLOR_array__Array__with_capacity]))(var29, var30) /* with_capacity on <var29:Array[Object]>*/;
1668 var_31 = var29;
1669 if (varonce32) {
1670 var33 = varonce32;
1671 } else {
1672 var34 = "";
1673 var35 = 0;
1674 var36 = string__NativeString__to_s_with_length(var34, var35);
1675 var33 = var36;
1676 varonce32 = var33;
1677 }
1678 ((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var33) /* add on <var_31:Array[Object]>*/;
1679 var37 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_nitni_base__AModule__cname]))(var_amodule) /* cname on <var_amodule:AModule>*/;
1680 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_string__Object__to_s]))(var37) /* to_s on <var37:String>*/;
1681 var39 = ((val* (*)(val*))(var38->class->vft[COLOR_string__AbstractString__to_upper]))(var38) /* to_upper on <var38:String>*/;
1682 ((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var39) /* add on <var_31:Array[Object]>*/;
1683 if (varonce40) {
1684 var41 = varonce40;
1685 } else {
1686 var42 = "_NIT_HPP";
1687 var43 = 8;
1688 var44 = string__NativeString__to_s_with_length(var42, var43);
1689 var41 = var44;
1690 varonce40 = var41;
1691 }
1692 ((void (*)(val*, val*))(var_31->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_31, var41) /* add on <var_31:Array[Object]>*/;
1693 var45 = ((val* (*)(val*))(var_31->class->vft[COLOR_string__Object__to_s]))(var_31) /* to_s on <var_31:Array[Object]>*/;
1694 var_guard = var45;
1695 if (varonce46) {
1696 var47 = varonce46;
1697 } else {
1698 var48 = "/";
1699 var49 = 1;
1700 var50 = string__NativeString__to_s_with_length(var48, var49);
1701 var47 = var50;
1702 varonce46 = var47;
1703 }
1704 var51 = NEW_array__Array(&type_array__Arraykernel__Object);
1705 { /* var51 = array_instance Array[Object] */
1706 var52 = 3;
1707 var53 = NEW_array__NativeArray(var52, &type_array__NativeArraykernel__Object);
1708 ((struct instance_array__NativeArray*)var53)->values[0] = (val*) var_compdir;
1709 ((struct instance_array__NativeArray*)var53)->values[1] = (val*) var47;
1710 ((struct instance_array__NativeArray*)var53)->values[2] = (val*) var_h_file;
1711 ((void (*)(val*, val*, long))(var51->class->vft[COLOR_array__Array__with_native]))(var51, var53, var52) /* with_native on <var51:Array[Object]>*/;
1712 }
1713 var54 = ((val* (*)(val*))(var51->class->vft[COLOR_string__Object__to_s]))(var51) /* to_s on <var51:Array[Object]>*/;
1714 var55 = NEW_array__Array(&type_array__Arraystring__String);
1715 ((void (*)(val*))(var55->class->vft[COLOR_array__Array__init]))(var55) /* init on <var55:Array[String]>*/;
1716 ((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>*/;
1717 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
1718 var57 = 3;
1719 ((void (*)(val*, long))(var56->class->vft[COLOR_array__Array__with_capacity]))(var56, var57) /* with_capacity on <var56:Array[Object]>*/;
1720 var_58 = var56;
1721 if (varonce59) {
1722 var60 = varonce59;
1723 } else {
1724 var61 = "";
1725 var62 = 0;
1726 var63 = string__NativeString__to_s_with_length(var61, var62);
1727 var60 = var63;
1728 varonce59 = var60;
1729 }
1730 ((void (*)(val*, val*))(var_58->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_58, var60) /* add on <var_58:Array[Object]>*/;
1731 ((void (*)(val*, val*))(var_58->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_58, var_base_name) /* add on <var_58:Array[Object]>*/;
1732 if (varonce64) {
1733 var65 = varonce64;
1734 } else {
1735 var66 = ".cpp";
1736 var67 = 4;
1737 var68 = string__NativeString__to_s_with_length(var66, var67);
1738 var65 = var68;
1739 varonce64 = var65;
1740 }
1741 ((void (*)(val*, val*))(var_58->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_58, var65) /* add on <var_58:Array[Object]>*/;
1742 var69 = ((val* (*)(val*))(var_58->class->vft[COLOR_string__Object__to_s]))(var_58) /* to_s on <var_58:Array[Object]>*/;
1743 var_c_file = var69;
1744 if (varonce70) {
1745 var71 = varonce70;
1746 } else {
1747 var72 = "/";
1748 var73 = 1;
1749 var74 = string__NativeString__to_s_with_length(var72, var73);
1750 var71 = var74;
1751 varonce70 = var71;
1752 }
1753 var75 = NEW_array__Array(&type_array__Arraykernel__Object);
1754 { /* var75 = array_instance Array[Object] */
1755 var76 = 3;
1756 var77 = NEW_array__NativeArray(var76, &type_array__NativeArraykernel__Object);
1757 ((struct instance_array__NativeArray*)var77)->values[0] = (val*) var_compdir;
1758 ((struct instance_array__NativeArray*)var77)->values[1] = (val*) var71;
1759 ((struct instance_array__NativeArray*)var77)->values[2] = (val*) var_c_file;
1760 ((void (*)(val*, val*, long))(var75->class->vft[COLOR_array__Array__with_native]))(var75, var77, var76) /* with_native on <var75:Array[Object]>*/;
1761 }
1762 var78 = ((val* (*)(val*))(var75->class->vft[COLOR_string__Object__to_s]))(var75) /* to_s on <var75:Array[Object]>*/;
1763 if (varonce79) {
1764 var80 = varonce79;
1765 } else {
1766 var81 = "<string>";
1767 var82 = 8;
1768 var83 = string__NativeString__to_s_with_length(var81, var82);
1769 var80 = var83;
1770 varonce79 = var80;
1771 }
1772 if (varonce84) {
1773 var85 = varonce84;
1774 } else {
1775 var86 = "<iostream>";
1776 var87 = 10;
1777 var88 = string__NativeString__to_s_with_length(var86, var87);
1778 var85 = var88;
1779 varonce84 = var85;
1780 }
1781 var89 = NEW_array__Array(&type_array__Arraykernel__Object);
1782 var90 = 3;
1783 ((void (*)(val*, long))(var89->class->vft[COLOR_array__Array__with_capacity]))(var89, var90) /* with_capacity on <var89:Array[Object]>*/;
1784 var_91 = var89;
1785 if (varonce92) {
1786 var93 = varonce92;
1787 } else {
1788 var94 = "\"";
1789 var95 = 1;
1790 var96 = string__NativeString__to_s_with_length(var94, var95);
1791 var93 = var96;
1792 varonce92 = var93;
1793 }
1794 ((void (*)(val*, val*))(var_91->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_91, var93) /* add on <var_91:Array[Object]>*/;
1795 ((void (*)(val*, val*))(var_91->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_91, var_h_file) /* add on <var_91:Array[Object]>*/;
1796 if (varonce97) {
1797 var98 = varonce97;
1798 } else {
1799 var99 = "\"";
1800 var100 = 1;
1801 var101 = string__NativeString__to_s_with_length(var99, var100);
1802 var98 = var101;
1803 varonce97 = var98;
1804 }
1805 ((void (*)(val*, val*))(var_91->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_91, var98) /* add on <var_91:Array[Object]>*/;
1806 var102 = ((val* (*)(val*))(var_91->class->vft[COLOR_string__Object__to_s]))(var_91) /* to_s on <var_91:Array[Object]>*/;
1807 var103 = NEW_array__Array(&type_array__Arraystring__String);
1808 { /* var103 = array_instance Array[String] */
1809 var104 = 3;
1810 var105 = NEW_array__NativeArray(var104, &type_array__NativeArraystring__String);
1811 ((struct instance_array__NativeArray*)var105)->values[0] = (val*) var80;
1812 ((struct instance_array__NativeArray*)var105)->values[1] = (val*) var85;
1813 ((struct instance_array__NativeArray*)var105)->values[2] = (val*) var102;
1814 ((void (*)(val*, val*, long))(var103->class->vft[COLOR_array__Array__with_native]))(var103, var105, var104) /* with_native on <var103:Array[String]>*/;
1815 }
1816 ((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>*/;
1817 var106 = ((val* (*)(val*))(self->class->vft[COLOR_c_tools__CCompilationUnit__files]))(self) /* files on <self:CPPCompilationUnit>*/;
1818 if (varonce107) {
1819 var108 = varonce107;
1820 } else {
1821 var109 = "/";
1822 var110 = 1;
1823 var111 = string__NativeString__to_s_with_length(var109, var110);
1824 var108 = var111;
1825 varonce107 = var108;
1826 }
1827 var112 = NEW_array__Array(&type_array__Arraykernel__Object);
1828 { /* var112 = array_instance Array[Object] */
1829 var113 = 3;
1830 var114 = NEW_array__NativeArray(var113, &type_array__NativeArraykernel__Object);
1831 ((struct instance_array__NativeArray*)var114)->values[0] = (val*) var_compdir;
1832 ((struct instance_array__NativeArray*)var114)->values[1] = (val*) var108;
1833 ((struct instance_array__NativeArray*)var114)->values[2] = (val*) var_c_file;
1834 ((void (*)(val*, val*, long))(var112->class->vft[COLOR_array__Array__with_native]))(var112, var114, var113) /* with_native on <var112:Array[Object]>*/;
1835 }
1836 var115 = ((val* (*)(val*))(var112->class->vft[COLOR_string__Object__to_s]))(var112) /* to_s on <var112:Array[Object]>*/;
1837 ((void (*)(val*, val*))(var106->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var106, var115) /* add on <var106:Array[String]>*/;
1838 var116 = NEW_cpp__ExternCppFile(&type_cpp__ExternCppFile);
1839 var117 = NEW_array__Array(&type_array__Arraykernel__Object);
1840 var118 = 5;
1841 ((void (*)(val*, long))(var117->class->vft[COLOR_array__Array__with_capacity]))(var117, var118) /* with_capacity on <var117:Array[Object]>*/;
1842 var_119 = var117;
1843 if (varonce120) {
1844 var121 = varonce120;
1845 } else {
1846 var122 = "";
1847 var123 = 0;
1848 var124 = string__NativeString__to_s_with_length(var122, var123);
1849 var121 = var124;
1850 varonce120 = var121;
1851 }
1852 ((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var121) /* add on <var_119:Array[Object]>*/;
1853 ((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var_compdir) /* add on <var_119:Array[Object]>*/;
1854 if (varonce125) {
1855 var126 = varonce125;
1856 } else {
1857 var127 = "/";
1858 var128 = 1;
1859 var129 = string__NativeString__to_s_with_length(var127, var128);
1860 var126 = var129;
1861 varonce125 = var126;
1862 }
1863 ((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var126) /* add on <var_119:Array[Object]>*/;
1864 ((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var_c_file) /* add on <var_119:Array[Object]>*/;
1865 if (varonce130) {
1866 var131 = varonce130;
1867 } else {
1868 var132 = "";
1869 var133 = 0;
1870 var134 = string__NativeString__to_s_with_length(var132, var133);
1871 var131 = var134;
1872 varonce130 = var131;
1873 }
1874 ((void (*)(val*, val*))(var_119->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_119, var131) /* add on <var_119:Array[Object]>*/;
1875 var135 = ((val* (*)(val*))(var_119->class->vft[COLOR_string__Object__to_s]))(var_119) /* to_s on <var_119:Array[Object]>*/;
1876 ((void (*)(val*, val*, val*))(var116->class->vft[COLOR_cpp__ExternCppFile__init]))(var116, var135, var_amodule) /* init on <var116:ExternCppFile>*/;
1877 var = var116;
1878 goto RET_LABEL;
1879 RET_LABEL:;
1880 return var;
1881 }
1882 /* method cpp#CPPCompilationUnit#write_to_files for (self: Object, AModule, String): ExternCppFile */
1883 val* VIRTUAL_cpp__CPPCompilationUnit__write_to_files(val* self, val* p0, val* p1) {
1884 val* var /* : ExternCppFile */;
1885 val* var1 /* : ExternCppFile */;
1886 var1 = cpp__CPPCompilationUnit__write_to_files(self, p0, p1);
1887 var = var1;
1888 RET_LABEL:;
1889 return var;
1890 }
1891 /* method cpp#CPPCompilationUnit#init for (self: CPPCompilationUnit) */
1892 void cpp__CPPCompilationUnit__init(val* self) {
1893 ((void (*)(val*))(self->class->vft[COLOR_c_tools__CCompilationUnit__init]))(self) /* init on <self:CPPCompilationUnit>*/;
1894 RET_LABEL:;
1895 }
1896 /* method cpp#CPPCompilationUnit#init for (self: Object) */
1897 void VIRTUAL_cpp__CPPCompilationUnit__init(val* self) {
1898 cpp__CPPCompilationUnit__init(self);
1899 RET_LABEL:;
1900 }
1901 /* method cpp#ExternCppFile#amodule for (self: ExternCppFile): AModule */
1902 val* cpp__ExternCppFile__amodule(val* self) {
1903 val* var /* : AModule */;
1904 val* var1 /* : AModule */;
1905 var1 = self->attrs[COLOR_cpp__ExternCppFile___64damodule].val; /* @amodule on <self:ExternCppFile> */
1906 if (var1 == NULL) {
1907 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @amodule");
1908 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 180);
1909 show_backtrace(1);
1910 }
1911 var = var1;
1912 RET_LABEL:;
1913 return var;
1914 }
1915 /* method cpp#ExternCppFile#amodule for (self: Object): AModule */
1916 val* VIRTUAL_cpp__ExternCppFile__amodule(val* self) {
1917 val* var /* : AModule */;
1918 val* var1 /* : AModule */;
1919 var1 = cpp__ExternCppFile__amodule(self);
1920 var = var1;
1921 RET_LABEL:;
1922 return var;
1923 }
1924 /* method cpp#ExternCppFile#amodule= for (self: ExternCppFile, AModule) */
1925 void cpp__ExternCppFile__amodule_61d(val* self, val* p0) {
1926 self->attrs[COLOR_cpp__ExternCppFile___64damodule].val = p0; /* @amodule on <self:ExternCppFile> */
1927 RET_LABEL:;
1928 }
1929 /* method cpp#ExternCppFile#amodule= for (self: Object, AModule) */
1930 void VIRTUAL_cpp__ExternCppFile__amodule_61d(val* self, val* p0) {
1931 cpp__ExternCppFile__amodule_61d(self, p0);
1932 RET_LABEL:;
1933 }
1934 /* method cpp#ExternCppFile#init for (self: ExternCppFile, String, AModule) */
1935 void cpp__ExternCppFile__init(val* self, val* p0, val* p1) {
1936 val* var_path /* var path: String */;
1937 val* var_amodule /* var amodule: AModule */;
1938 var_path = p0;
1939 var_amodule = p1;
1940 ((void (*)(val*, val*))(self->class->vft[COLOR_ffi_base__ExternFile__init]))(self, p0) /* init on <self:ExternCppFile>*/;
1941 ((void (*)(val*, val*))(self->class->vft[COLOR_cpp__ExternCppFile__amodule_61d]))(self, var_amodule) /* amodule= on <self:ExternCppFile>*/;
1942 RET_LABEL:;
1943 }
1944 /* method cpp#ExternCppFile#init for (self: Object, String, AModule) */
1945 void VIRTUAL_cpp__ExternCppFile__init(val* self, val* p0, val* p1) {
1946 cpp__ExternCppFile__init(self, p0, p1);
1947 RET_LABEL:;
1948 }
1949 /* method cpp#ExternCppFile#makefile_rule_name for (self: ExternCppFile): String */
1950 val* cpp__ExternCppFile__makefile_rule_name(val* self) {
1951 val* var /* : String */;
1952 val* var1 /* : Array[Object] */;
1953 long var2 /* : Int */;
1954 val* var_ /* var : Array[Object] */;
1955 static val* varonce;
1956 val* var3 /* : String */;
1957 char* var4 /* : NativeString */;
1958 long var5 /* : Int */;
1959 val* var6 /* : String */;
1960 val* var7 /* : String */;
1961 static val* varonce8;
1962 val* var9 /* : String */;
1963 char* var10 /* : NativeString */;
1964 long var11 /* : Int */;
1965 val* var12 /* : String */;
1966 val* var13 /* : String */;
1967 static val* varonce14;
1968 val* var15 /* : String */;
1969 char* var16 /* : NativeString */;
1970 long var17 /* : Int */;
1971 val* var18 /* : String */;
1972 val* var19 /* : String */;
1973 var1 = NEW_array__Array(&type_array__Arraykernel__Object);
1974 var2 = 3;
1975 ((void (*)(val*, long))(var1->class->vft[COLOR_array__Array__with_capacity]))(var1, var2) /* with_capacity on <var1:Array[Object]>*/;
1976 var_ = var1;
1977 if (varonce) {
1978 var3 = varonce;
1979 } else {
1980 var4 = "";
1981 var5 = 0;
1982 var6 = string__NativeString__to_s_with_length(var4, var5);
1983 var3 = var6;
1984 varonce = var3;
1985 }
1986 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var3) /* add on <var_:Array[Object]>*/;
1987 var7 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__ExternFile__filename]))(self) /* filename on <self:ExternCppFile>*/;
1988 if (varonce8) {
1989 var9 = varonce8;
1990 } else {
1991 var10 = "";
1992 var11 = 0;
1993 var12 = string__NativeString__to_s_with_length(var10, var11);
1994 var9 = var12;
1995 varonce8 = var9;
1996 }
1997 var13 = ((val* (*)(val*, val*))(var7->class->vft[COLOR_file__String__basename]))(var7, var9) /* basename on <var7:String>*/;
1998 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var13) /* add on <var_:Array[Object]>*/;
1999 if (varonce14) {
2000 var15 = varonce14;
2001 } else {
2002 var16 = ".o";
2003 var17 = 2;
2004 var18 = string__NativeString__to_s_with_length(var16, var17);
2005 var15 = var18;
2006 varonce14 = var15;
2007 }
2008 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var15) /* add on <var_:Array[Object]>*/;
2009 var19 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
2010 var = var19;
2011 goto RET_LABEL;
2012 RET_LABEL:;
2013 return var;
2014 }
2015 /* method cpp#ExternCppFile#makefile_rule_name for (self: Object): String */
2016 val* VIRTUAL_cpp__ExternCppFile__makefile_rule_name(val* self) {
2017 val* var /* : String */;
2018 val* var1 /* : String */;
2019 var1 = cpp__ExternCppFile__makefile_rule_name(self);
2020 var = var1;
2021 RET_LABEL:;
2022 return var;
2023 }
2024 /* method cpp#ExternCppFile#makefile_rule_content for (self: ExternCppFile): String */
2025 val* cpp__ExternCppFile__makefile_rule_content(val* self) {
2026 val* var /* : String */;
2027 val* var1 /* : Array[Object] */;
2028 long var2 /* : Int */;
2029 val* var_ /* var : Array[Object] */;
2030 static val* varonce;
2031 val* var3 /* : String */;
2032 char* var4 /* : NativeString */;
2033 long var5 /* : Int */;
2034 val* var6 /* : String */;
2035 val* var7 /* : AModule */;
2036 val* var8 /* : String */;
2037 static val* varonce9;
2038 val* var10 /* : String */;
2039 char* var11 /* : NativeString */;
2040 long var12 /* : Int */;
2041 val* var13 /* : String */;
2042 val* var14 /* : String */;
2043 static val* varonce15;
2044 val* var16 /* : String */;
2045 char* var17 /* : NativeString */;
2046 long var18 /* : Int */;
2047 val* var19 /* : String */;
2048 val* var20 /* : String */;
2049 static val* varonce21;
2050 val* var22 /* : String */;
2051 char* var23 /* : NativeString */;
2052 long var24 /* : Int */;
2053 val* var25 /* : String */;
2054 val* var26 /* : String */;
2055 static val* varonce27;
2056 val* var28 /* : String */;
2057 char* var29 /* : NativeString */;
2058 long var30 /* : Int */;
2059 val* var31 /* : String */;
2060 val* var32 /* : String */;
2061 static val* varonce33;
2062 val* var34 /* : String */;
2063 char* var35 /* : NativeString */;
2064 long var36 /* : Int */;
2065 val* var37 /* : String */;
2066 val* var38 /* : String */;
2067 var1 = NEW_array__Array(&type_array__Arraykernel__Object);
2068 var2 = 7;
2069 ((void (*)(val*, long))(var1->class->vft[COLOR_array__Array__with_capacity]))(var1, var2) /* with_capacity on <var1:Array[Object]>*/;
2070 var_ = var1;
2071 if (varonce) {
2072 var3 = varonce;
2073 } else {
2074 var4 = "g++ ";
2075 var5 = 4;
2076 var6 = string__NativeString__to_s_with_length(var4, var5);
2077 var3 = var6;
2078 varonce = var3;
2079 }
2080 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var3) /* add on <var_:Array[Object]>*/;
2081 var7 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__ExternCppFile__amodule]))(self) /* amodule on <self:ExternCppFile>*/;
2082 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_cpp__AModule__cpp_compiler_options]))(var7) /* cpp_compiler_options on <var7:AModule>*/;
2083 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var8) /* add on <var_:Array[Object]>*/;
2084 if (varonce9) {
2085 var10 = varonce9;
2086 } else {
2087 var11 = " -c ";
2088 var12 = 4;
2089 var13 = string__NativeString__to_s_with_length(var11, var12);
2090 var10 = var13;
2091 varonce9 = var10;
2092 }
2093 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var10) /* add on <var_:Array[Object]>*/;
2094 var14 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__ExternFile__filename]))(self) /* filename on <self:ExternCppFile>*/;
2095 if (varonce15) {
2096 var16 = varonce15;
2097 } else {
2098 var17 = "";
2099 var18 = 0;
2100 var19 = string__NativeString__to_s_with_length(var17, var18);
2101 var16 = var19;
2102 varonce15 = var16;
2103 }
2104 var20 = ((val* (*)(val*, val*))(var14->class->vft[COLOR_file__String__basename]))(var14, var16) /* basename on <var14:String>*/;
2105 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var20) /* add on <var_:Array[Object]>*/;
2106 if (varonce21) {
2107 var22 = varonce21;
2108 } else {
2109 var23 = " -o ";
2110 var24 = 4;
2111 var25 = string__NativeString__to_s_with_length(var23, var24);
2112 var22 = var25;
2113 varonce21 = var22;
2114 }
2115 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var22) /* add on <var_:Array[Object]>*/;
2116 var26 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__ExternFile__filename]))(self) /* filename on <self:ExternCppFile>*/;
2117 if (varonce27) {
2118 var28 = varonce27;
2119 } else {
2120 var29 = "";
2121 var30 = 0;
2122 var31 = string__NativeString__to_s_with_length(var29, var30);
2123 var28 = var31;
2124 varonce27 = var28;
2125 }
2126 var32 = ((val* (*)(val*, val*))(var26->class->vft[COLOR_file__String__basename]))(var26, var28) /* basename on <var26:String>*/;
2127 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var32) /* add on <var_:Array[Object]>*/;
2128 if (varonce33) {
2129 var34 = varonce33;
2130 } else {
2131 var35 = ".o";
2132 var36 = 2;
2133 var37 = string__NativeString__to_s_with_length(var35, var36);
2134 var34 = var37;
2135 varonce33 = var34;
2136 }
2137 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var34) /* add on <var_:Array[Object]>*/;
2138 var38 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
2139 var = var38;
2140 goto RET_LABEL;
2141 RET_LABEL:;
2142 return var;
2143 }
2144 /* method cpp#ExternCppFile#makefile_rule_content for (self: Object): String */
2145 val* VIRTUAL_cpp__ExternCppFile__makefile_rule_content(val* self) {
2146 val* var /* : String */;
2147 val* var1 /* : String */;
2148 var1 = cpp__ExternCppFile__makefile_rule_content(self);
2149 var = var1;
2150 RET_LABEL:;
2151 return var;
2152 }
2153 /* method cpp#ForeignCppType#cpp_type for (self: ForeignCppType): String */
2154 val* cpp__ForeignCppType__cpp_type(val* self) {
2155 val* var /* : String */;
2156 val* var1 /* : String */;
2157 var1 = self->attrs[COLOR_cpp__ForeignCppType___64dcpp_type].val; /* @cpp_type on <self:ForeignCppType> */
2158 if (var1 == NULL) {
2159 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @cpp_type");
2160 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 194);
2161 show_backtrace(1);
2162 }
2163 var = var1;
2164 RET_LABEL:;
2165 return var;
2166 }
2167 /* method cpp#ForeignCppType#cpp_type for (self: Object): String */
2168 val* VIRTUAL_cpp__ForeignCppType__cpp_type(val* self) {
2169 val* var /* : String */;
2170 val* var1 /* : String */;
2171 var1 = cpp__ForeignCppType__cpp_type(self);
2172 var = var1;
2173 RET_LABEL:;
2174 return var;
2175 }
2176 /* method cpp#ForeignCppType#cpp_type= for (self: ForeignCppType, String) */
2177 void cpp__ForeignCppType__cpp_type_61d(val* self, val* p0) {
2178 self->attrs[COLOR_cpp__ForeignCppType___64dcpp_type].val = p0; /* @cpp_type on <self:ForeignCppType> */
2179 RET_LABEL:;
2180 }
2181 /* method cpp#ForeignCppType#cpp_type= for (self: Object, String) */
2182 void VIRTUAL_cpp__ForeignCppType__cpp_type_61d(val* self, val* p0) {
2183 cpp__ForeignCppType__cpp_type_61d(self, p0);
2184 RET_LABEL:;
2185 }
2186 /* method cpp#ForeignCppType#init for (self: ForeignCppType, String) */
2187 void cpp__ForeignCppType__init(val* self, val* p0) {
2188 val* var_cpp_type /* var cpp_type: String */;
2189 var_cpp_type = p0;
2190 ((void (*)(val*))(self->class->vft[COLOR_ffi_base__ForeignType__init]))(self) /* init on <self:ForeignCppType>*/;
2191 ((void (*)(val*, val*))(self->class->vft[COLOR_cpp__ForeignCppType__cpp_type_61d]))(self, var_cpp_type) /* cpp_type= on <self:ForeignCppType>*/;
2192 RET_LABEL:;
2193 }
2194 /* method cpp#ForeignCppType#init for (self: Object, String) */
2195 void VIRTUAL_cpp__ForeignCppType__init(val* self, val* p0) {
2196 cpp__ForeignCppType__init(self, p0);
2197 RET_LABEL:;
2198 }
2199 /* method cpp#NitniCallback#compile_callback_to_cpp for (self: NitniCallback, AModule, MModule) */
2200 void cpp__NitniCallback__compile_callback_to_cpp(val* self, val* p0, val* p1) {
2201 val* var_nmodule /* var nmodule: AModule */;
2202 val* var_mmodule /* var mmodule: MModule */;
2203 var_nmodule = p0;
2204 var_mmodule = p1;
2205 RET_LABEL:;
2206 }
2207 /* method cpp#NitniCallback#compile_callback_to_cpp for (self: Object, AModule, MModule) */
2208 void VIRTUAL_cpp__NitniCallback__compile_callback_to_cpp(val* self, val* p0, val* p1) {
2209 cpp__NitniCallback__compile_callback_to_cpp(self, p0, p1);
2210 RET_LABEL:;
2211 }
2212 /* method cpp#Object#cpp_call_context for (self: Object): CppCallContext */
2213 val* cpp__Object__cpp_call_context(val* self) {
2214 val* var /* : CppCallContext */;
2215 static val* varonce;
2216 static int varonce_guard;
2217 val* var1 /* : CppCallContext */;
2218 val* var2 /* : CppCallContext */;
2219 if (varonce_guard) {
2220 var1 = varonce;
2221 } else {
2222 var2 = NEW_cpp__CppCallContext(&type_cpp__CppCallContext);
2223 ((void (*)(val*))(var2->class->vft[COLOR_cpp__CppCallContext__init]))(var2) /* init on <var2:CppCallContext>*/;
2224 var1 = var2;
2225 varonce = var1;
2226 varonce_guard = 1;
2227 }
2228 var = var1;
2229 goto RET_LABEL;
2230 RET_LABEL:;
2231 return var;
2232 }
2233 /* method cpp#Object#cpp_call_context for (self: Object): CppCallContext */
2234 val* VIRTUAL_cpp__Object__cpp_call_context(val* self) {
2235 val* var /* : CppCallContext */;
2236 val* var1 /* : CppCallContext */;
2237 var1 = cpp__Object__cpp_call_context(self);
2238 var = var1;
2239 RET_LABEL:;
2240 return var;
2241 }
2242 /* method cpp#Object#to_cpp_call_context for (self: Object): ToCppCallContext */
2243 val* cpp__Object__to_cpp_call_context(val* self) {
2244 val* var /* : ToCppCallContext */;
2245 static val* varonce;
2246 static int varonce_guard;
2247 val* var1 /* : ToCppCallContext */;
2248 val* var2 /* : ToCppCallContext */;
2249 if (varonce_guard) {
2250 var1 = varonce;
2251 } else {
2252 var2 = NEW_cpp__ToCppCallContext(&type_cpp__ToCppCallContext);
2253 ((void (*)(val*))(var2->class->vft[COLOR_cpp__ToCppCallContext__init]))(var2) /* init on <var2:ToCppCallContext>*/;
2254 var1 = var2;
2255 varonce = var1;
2256 varonce_guard = 1;
2257 }
2258 var = var1;
2259 goto RET_LABEL;
2260 RET_LABEL:;
2261 return var;
2262 }
2263 /* method cpp#Object#to_cpp_call_context for (self: Object): ToCppCallContext */
2264 val* VIRTUAL_cpp__Object__to_cpp_call_context(val* self) {
2265 val* var /* : ToCppCallContext */;
2266 val* var1 /* : ToCppCallContext */;
2267 var1 = cpp__Object__to_cpp_call_context(self);
2268 var = var1;
2269 RET_LABEL:;
2270 return var;
2271 }
2272 /* method cpp#Object#from_cpp_call_context for (self: Object): FromCppCallContext */
2273 val* cpp__Object__from_cpp_call_context(val* self) {
2274 val* var /* : FromCppCallContext */;
2275 static val* varonce;
2276 static int varonce_guard;
2277 val* var1 /* : FromCppCallContext */;
2278 val* var2 /* : FromCppCallContext */;
2279 if (varonce_guard) {
2280 var1 = varonce;
2281 } else {
2282 var2 = NEW_cpp__FromCppCallContext(&type_cpp__FromCppCallContext);
2283 ((void (*)(val*))(var2->class->vft[COLOR_cpp__FromCppCallContext__init]))(var2) /* init on <var2:FromCppCallContext>*/;
2284 var1 = var2;
2285 varonce = var1;
2286 varonce_guard = 1;
2287 }
2288 var = var1;
2289 goto RET_LABEL;
2290 RET_LABEL:;
2291 return var;
2292 }
2293 /* method cpp#Object#from_cpp_call_context for (self: Object): FromCppCallContext */
2294 val* VIRTUAL_cpp__Object__from_cpp_call_context(val* self) {
2295 val* var /* : FromCppCallContext */;
2296 val* var1 /* : FromCppCallContext */;
2297 var1 = cpp__Object__from_cpp_call_context(self);
2298 var = var1;
2299 RET_LABEL:;
2300 return var;
2301 }
2302 /* method cpp#MExplicitCall#compile_callback_to_cpp for (self: MExplicitCall, AModule, MModule) */
2303 void cpp__MExplicitCall__compile_callback_to_cpp(val* self, val* p0, val* p1) {
2304 val* var_nmodule /* var nmodule: AModule */;
2305 val* var_mmodule /* var mmodule: MModule */;
2306 val* var /* : MProperty */;
2307 val* var_mproperty /* var mproperty: MProperty */;
2308 short int var1 /* : Bool */;
2309 int cltype;
2310 int idtype;
2311 val* var2 /* : MClassType */;
2312 val* var3 /* : null */;
2313 val* var4 /* : SignatureLength */;
2314 val* var5 /* : FromCppCallContext */;
2315 val* var6 /* : String */;
2316 val* var_cpp_signature /* var cpp_signature: String */;
2317 val* var7 /* : MClassType */;
2318 val* var8 /* : null */;
2319 val* var9 /* : SignatureLength */;
2320 val* var10 /* : FromCppCallContext */;
2321 val* var11 /* : null */;
2322 val* var12 /* : String */;
2323 val* var_ccall /* var ccall: String */;
2324 val* var13 /* : CFunction */;
2325 val* var_fc /* var fc: CFunction */;
2326 val* var14 /* : Template */;
2327 val* var15 /* : nullable CPPCompilationUnit */;
2328 var_nmodule = p0;
2329 var_mmodule = p1;
2330 var = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__mproperty]))(self) /* mproperty on <self:MExplicitCall>*/;
2331 var_mproperty = var;
2332 /* <var_mproperty:MProperty> isa MMethod */
2333 cltype = type_model__MMethod.color;
2334 idtype = type_model__MMethod.id;
2335 if(cltype >= var_mproperty->type->table_size) {
2336 var1 = 0;
2337 } else {
2338 var1 = var_mproperty->type->type_table[cltype] == idtype;
2339 }
2340 if (!var1) {
2341 fprintf(stderr, "Runtime error: %s", "Assert failed");
2342 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 216);
2343 show_backtrace(1);
2344 }
2345 var2 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
2346 var3 = NULL;
2347 var4 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__short_signature]))(self) /* short_signature on <self:MExplicitCall>*/;
2348 var5 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__from_cpp_call_context]))(self) /* from_cpp_call_context on <self:MExplicitCall>*/;
2349 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)>*/;
2350 var_cpp_signature = var6;
2351 var7 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
2352 var8 = NULL;
2353 var9 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:MExplicitCall>*/;
2354 var10 = ((val* (*)(val*))(self->class->vft[COLOR_cpp__Object__from_cpp_call_context]))(self) /* from_cpp_call_context on <self:MExplicitCall>*/;
2355 var11 = NULL;
2356 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)>*/;
2357 var_ccall = var12;
2358 var13 = NEW_c_tools__CFunction(&type_c_tools__CFunction);
2359 ((void (*)(val*, val*))(var13->class->vft[COLOR_c_tools__CFunction__init]))(var13, var_cpp_signature) /* init on <var13:CFunction>*/;
2360 var_fc = var13;
2361 var14 = ((val* (*)(val*))(var_fc->class->vft[COLOR_c_tools__CFunction__exprs]))(var_fc) /* exprs on <var_fc:CFunction>*/;
2362 ((void (*)(val*, val*))(var14->class->vft[COLOR_template__Template__add]))(var14, var_ccall) /* add on <var14:Template>*/;
2363 var15 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_cpp__AModule__cpp_file]))(var_nmodule) /* cpp_file on <var_nmodule:AModule>*/;
2364 if (var15 == NULL) {
2365 fprintf(stderr, "Runtime error: %s", "Receiver is null");
2366 fprintf(stderr, " (%s:%d)\n", "src/common_ffi/cpp.nit", 222);
2367 show_backtrace(1);
2368 } else {
2369 ((void (*)(val*, val*))(var15->class->vft[COLOR_c_tools__CCompilationUnit__add_local_function]))(var15, var_fc) /* add_local_function on <var15:nullable CPPCompilationUnit>*/;
2370 }
2371 RET_LABEL:;
2372 }
2373 /* method cpp#MExplicitCall#compile_callback_to_cpp for (self: Object, AModule, MModule) */
2374 void VIRTUAL_cpp__MExplicitCall__compile_callback_to_cpp(val* self, val* p0, val* p1) {
2375 cpp__MExplicitCall__compile_callback_to_cpp(self, p0, p1);
2376 RET_LABEL:;
2377 }
2378 /* method cpp#CppCallContext#name_mtype for (self: CppCallContext, MType): String */
2379 val* cpp__CppCallContext__name_mtype(val* self, val* p0) {
2380 val* var /* : String */;
2381 val* var_mtype /* var mtype: MType */;
2382 short int var1 /* : Bool */;
2383 int cltype;
2384 int idtype;
2385 val* var2 /* : MClass */;
2386 val* var3 /* : nullable ForeignType */;
2387 val* var_ftype /* var ftype: nullable ForeignType */;
2388 short int var4 /* : Bool */;
2389 int cltype5;
2390 int idtype6;
2391 val* var7 /* : String */;
2392 val* var8 /* : String */;
2393 var_mtype = p0;
2394 /* <var_mtype:MType> isa MClassType */
2395 cltype = type_model__MClassType.color;
2396 idtype = type_model__MClassType.id;
2397 if(cltype >= var_mtype->type->table_size) {
2398 var1 = 0;
2399 } else {
2400 var1 = var_mtype->type->type_table[cltype] == idtype;
2401 }
2402 if (var1){
2403 var2 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
2404 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_extern_classes__MClass__ftype]))(var2) /* ftype on <var2:MClass>*/;
2405 var_ftype = var3;
2406 /* <var_ftype:nullable ForeignType> isa ForeignCppType */
2407 cltype5 = type_cpp__ForeignCppType.color;
2408 idtype6 = type_cpp__ForeignCppType.id;
2409 if(var_ftype == NULL) {
2410 var4 = 0;
2411 } else {
2412 if(cltype5 >= var_ftype->type->table_size) {
2413 var4 = 0;
2414 } else {
2415 var4 = var_ftype->type->type_table[cltype5] == idtype6;
2416 }
2417 }
2418 if (var4){
2419 var7 = ((val* (*)(val*))(var_ftype->class->vft[COLOR_cpp__ForeignCppType__cpp_type]))(var_ftype) /* cpp_type on <var_ftype:nullable ForeignType(ForeignCppType)>*/;
2420 var = var7;
2421 goto RET_LABEL;
2422 } else {
2423 }
2424 } else {
2425 }
2426 var8 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_nitni_base__MType__cname]))(var_mtype) /* cname on <var_mtype:MType>*/;
2427 var = var8;
2428 goto RET_LABEL;
2429 RET_LABEL:;
2430 return var;
2431 }
2432 /* method cpp#CppCallContext#name_mtype for (self: Object, MType): String */
2433 val* VIRTUAL_cpp__CppCallContext__name_mtype(val* self, val* p0) {
2434 val* var /* : String */;
2435 val* var1 /* : String */;
2436 var1 = cpp__CppCallContext__name_mtype(self, p0);
2437 var = var1;
2438 RET_LABEL:;
2439 return var;
2440 }
2441 /* method cpp#CppCallContext#init for (self: CppCallContext) */
2442 void cpp__CppCallContext__init(val* self) {
2443 ((void (*)(val*))(self->class->vft[COLOR_nitni_utilities__CallContext__init]))(self) /* init on <self:CppCallContext>*/;
2444 RET_LABEL:;
2445 }
2446 /* method cpp#CppCallContext#init for (self: Object) */
2447 void VIRTUAL_cpp__CppCallContext__init(val* self) {
2448 cpp__CppCallContext__init(self);
2449 RET_LABEL:;
2450 }
2451 /* method cpp#ToCppCallContext#cast_to for (self: ToCppCallContext, MType, String): String */
2452 val* cpp__ToCppCallContext__cast_to(val* self, val* p0, val* p1) {
2453 val* var /* : String */;
2454 val* var_mtype /* var mtype: MType */;
2455 val* var_name /* var name: String */;
2456 short int var1 /* : Bool */;
2457 short int var2 /* : Bool */;
2458 int cltype;
2459 int idtype;
2460 short int var_ /* var : Bool */;
2461 val* var3 /* : MClass */;
2462 val* var4 /* : nullable ForeignType */;
2463 short int var5 /* : Bool */;
2464 int cltype6;
2465 int idtype7;
2466 val* var8 /* : Array[Object] */;
2467 long var9 /* : Int */;
2468 val* var_10 /* var : Array[Object] */;
2469 static val* varonce;
2470 val* var11 /* : String */;
2471 char* var12 /* : NativeString */;
2472 long var13 /* : Int */;
2473 val* var14 /* : String */;
2474 static val* varonce15;
2475 val* var16 /* : String */;
2476 char* var17 /* : NativeString */;
2477 long var18 /* : Int */;
2478 val* var19 /* : String */;
2479 val* var20 /* : String */;
2480 var_mtype = p0;
2481 var_name = p1;
2482 /* <var_mtype:MType> isa MClassType */
2483 cltype = type_model__MClassType.color;
2484 idtype = type_model__MClassType.id;
2485 if(cltype >= var_mtype->type->table_size) {
2486 var2 = 0;
2487 } else {
2488 var2 = var_mtype->type->type_table[cltype] == idtype;
2489 }
2490 var_ = var2;
2491 if (var2){
2492 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
2493 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_extern_classes__MClass__ftype]))(var3) /* ftype on <var3:MClass>*/;
2494 /* <var4:nullable ForeignType> isa ForeignCppType */
2495 cltype6 = type_cpp__ForeignCppType.color;
2496 idtype7 = type_cpp__ForeignCppType.id;
2497 if(var4 == NULL) {
2498 var5 = 0;
2499 } else {
2500 if(cltype6 >= var4->type->table_size) {
2501 var5 = 0;
2502 } else {
2503 var5 = var4->type->type_table[cltype6] == idtype7;
2504 }
2505 }
2506 var1 = var5;
2507 } else {
2508 var1 = var_;
2509 }
2510 if (var1){
2511 var8 = NEW_array__Array(&type_array__Arraykernel__Object);
2512 var9 = 3;
2513 ((void (*)(val*, long))(var8->class->vft[COLOR_array__Array__with_capacity]))(var8, var9) /* with_capacity on <var8:Array[Object]>*/;
2514 var_10 = var8;
2515 if (varonce) {
2516 var11 = varonce;
2517 } else {
2518 var12 = "(void*)(";
2519 var13 = 8;
2520 var14 = string__NativeString__to_s_with_length(var12, var13);
2521 var11 = var14;
2522 varonce = var11;
2523 }
2524 ((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var11) /* add on <var_10:Array[Object]>*/;
2525 ((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var_name) /* add on <var_10:Array[Object]>*/;
2526 if (varonce15) {
2527 var16 = varonce15;
2528 } else {
2529 var17 = ")";
2530 var18 = 1;
2531 var19 = string__NativeString__to_s_with_length(var17, var18);
2532 var16 = var19;
2533 varonce15 = var16;
2534 }
2535 ((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var16) /* add on <var_10:Array[Object]>*/;
2536 var20 = ((val* (*)(val*))(var_10->class->vft[COLOR_string__Object__to_s]))(var_10) /* to_s on <var_10:Array[Object]>*/;
2537 var = var20;
2538 goto RET_LABEL;
2539 } else {
2540 var = var_name;
2541 goto RET_LABEL;
2542 }
2543 RET_LABEL:;
2544 return var;
2545 }
2546 /* method cpp#ToCppCallContext#cast_to for (self: Object, MType, String): String */
2547 val* VIRTUAL_cpp__ToCppCallContext__cast_to(val* self, val* p0, val* p1) {
2548 val* var /* : String */;
2549 val* var1 /* : String */;
2550 var1 = cpp__ToCppCallContext__cast_to(self, p0, p1);
2551 var = var1;
2552 RET_LABEL:;
2553 return var;
2554 }
2555 /* method cpp#ToCppCallContext#init for (self: ToCppCallContext) */
2556 void cpp__ToCppCallContext__init(val* self) {
2557 ((void (*)(val*))(self->class->vft[COLOR_cpp__CppCallContext__init]))(self) /* init on <self:ToCppCallContext>*/;
2558 RET_LABEL:;
2559 }
2560 /* method cpp#ToCppCallContext#init for (self: Object) */
2561 void VIRTUAL_cpp__ToCppCallContext__init(val* self) {
2562 cpp__ToCppCallContext__init(self);
2563 RET_LABEL:;
2564 }
2565 /* method cpp#FromCppCallContext#cast_from for (self: FromCppCallContext, MType, String): String */
2566 val* cpp__FromCppCallContext__cast_from(val* self, val* p0, val* p1) {
2567 val* var /* : String */;
2568 val* var_mtype /* var mtype: MType */;
2569 val* var_name /* var name: String */;
2570 short int var1 /* : Bool */;
2571 short int var2 /* : Bool */;
2572 int cltype;
2573 int idtype;
2574 short int var_ /* var : Bool */;
2575 val* var3 /* : MClass */;
2576 val* var4 /* : nullable ForeignType */;
2577 short int var5 /* : Bool */;
2578 int cltype6;
2579 int idtype7;
2580 val* var8 /* : Array[Object] */;
2581 long var9 /* : Int */;
2582 val* var_10 /* var : Array[Object] */;
2583 static val* varonce;
2584 val* var11 /* : String */;
2585 char* var12 /* : NativeString */;
2586 long var13 /* : Int */;
2587 val* var14 /* : String */;
2588 val* var15 /* : String */;
2589 static val* varonce16;
2590 val* var17 /* : String */;
2591 char* var18 /* : NativeString */;
2592 long var19 /* : Int */;
2593 val* var20 /* : String */;
2594 static val* varonce21;
2595 val* var22 /* : String */;
2596 char* var23 /* : NativeString */;
2597 long var24 /* : Int */;
2598 val* var25 /* : String */;
2599 val* var26 /* : String */;
2600 var_mtype = p0;
2601 var_name = p1;
2602 /* <var_mtype:MType> isa MClassType */
2603 cltype = type_model__MClassType.color;
2604 idtype = type_model__MClassType.id;
2605 if(cltype >= var_mtype->type->table_size) {
2606 var2 = 0;
2607 } else {
2608 var2 = var_mtype->type->type_table[cltype] == idtype;
2609 }
2610 var_ = var2;
2611 if (var2){
2612 var3 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
2613 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_extern_classes__MClass__ftype]))(var3) /* ftype on <var3:MClass>*/;
2614 /* <var4:nullable ForeignType> isa ForeignCppType */
2615 cltype6 = type_cpp__ForeignCppType.color;
2616 idtype7 = type_cpp__ForeignCppType.id;
2617 if(var4 == NULL) {
2618 var5 = 0;
2619 } else {
2620 if(cltype6 >= var4->type->table_size) {
2621 var5 = 0;
2622 } else {
2623 var5 = var4->type->type_table[cltype6] == idtype7;
2624 }
2625 }
2626 var1 = var5;
2627 } else {
2628 var1 = var_;
2629 }
2630 if (var1){
2631 var8 = NEW_array__Array(&type_array__Arraykernel__Object);
2632 var9 = 5;
2633 ((void (*)(val*, long))(var8->class->vft[COLOR_array__Array__with_capacity]))(var8, var9) /* with_capacity on <var8:Array[Object]>*/;
2634 var_10 = var8;
2635 if (varonce) {
2636 var11 = varonce;
2637 } else {
2638 var12 = "static_cast<";
2639 var13 = 12;
2640 var14 = string__NativeString__to_s_with_length(var12, var13);
2641 var11 = var14;
2642 varonce = var11;
2643 }
2644 ((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var11) /* add on <var_10:Array[Object]>*/;
2645 var15 = ((val* (*)(val*, val*))(self->class->vft[COLOR_nitni_utilities__CallContext__name_mtype]))(self, var_mtype) /* name_mtype on <self:FromCppCallContext>*/;
2646 ((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var15) /* add on <var_10:Array[Object]>*/;
2647 if (varonce16) {
2648 var17 = varonce16;
2649 } else {
2650 var18 = ">(";
2651 var19 = 2;
2652 var20 = string__NativeString__to_s_with_length(var18, var19);
2653 var17 = var20;
2654 varonce16 = var17;
2655 }
2656 ((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var17) /* add on <var_10:Array[Object]>*/;
2657 ((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var_name) /* add on <var_10:Array[Object]>*/;
2658 if (varonce21) {
2659 var22 = varonce21;
2660 } else {
2661 var23 = ")";
2662 var24 = 1;
2663 var25 = string__NativeString__to_s_with_length(var23, var24);
2664 var22 = var25;
2665 varonce21 = var22;
2666 }
2667 ((void (*)(val*, val*))(var_10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_10, var22) /* add on <var_10:Array[Object]>*/;
2668 var26 = ((val* (*)(val*))(var_10->class->vft[COLOR_string__Object__to_s]))(var_10) /* to_s on <var_10:Array[Object]>*/;
2669 var = var26;
2670 goto RET_LABEL;
2671 } else {
2672 var = var_name;
2673 goto RET_LABEL;
2674 }
2675 RET_LABEL:;
2676 return var;
2677 }
2678 /* method cpp#FromCppCallContext#cast_from for (self: Object, MType, String): String */
2679 val* VIRTUAL_cpp__FromCppCallContext__cast_from(val* self, val* p0, val* p1) {
2680 val* var /* : String */;
2681 val* var1 /* : String */;
2682 var1 = cpp__FromCppCallContext__cast_from(self, p0, p1);
2683 var = var1;
2684 RET_LABEL:;
2685 return var;
2686 }
2687 /* method cpp#FromCppCallContext#init for (self: FromCppCallContext) */
2688 void cpp__FromCppCallContext__init(val* self) {
2689 ((void (*)(val*))(self->class->vft[COLOR_cpp__CppCallContext__init]))(self) /* init on <self:FromCppCallContext>*/;
2690 RET_LABEL:;
2691 }
2692 /* method cpp#FromCppCallContext#init for (self: Object) */
2693 void VIRTUAL_cpp__FromCppCallContext__init(val* self) {
2694 cpp__FromCppCallContext__init(self);
2695 RET_LABEL:;
2696 }