Merge: doc: fixed some typos and other misc. corrections
[nit.git] / c_src / nitc__light_ffi_base.sep.1.c
1 #include "nitc__light_ffi_base.sep.0.h"
2 /* method light_ffi_base$ToolContext$ffi_language_assignation_phase for (self: ToolContext): Phase */
3 val* nitc__light_ffi_base___ToolContext___ffi_language_assignation_phase(val* self) {
4 val* var /* : Phase */;
5 val* var1 /* : Phase */;
6 var1 = self->attrs[COLOR_nitc__light_ffi_base__ToolContext___ffi_language_assignation_phase].val; /* _ffi_language_assignation_phase on <self:ToolContext> */
7 if (unlikely(var1 == NULL)) {
8 if(catchStack.cursor >= 0){
9 longjmp(catchStack.envs[catchStack.cursor], 1);
10 }
11 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_language_assignation_phase");
12 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 26);
13 fatal_exit(1);
14 }
15 var = var1;
16 RET_LABEL:;
17 return var;
18 }
19 /* method light_ffi_base$FFILanguageAssignationPhase$languages for (self: FFILanguageAssignationPhase): Array[FFILanguage] */
20 val* nitc___nitc__FFILanguageAssignationPhase___languages(val* self) {
21 val* var /* : Array[FFILanguage] */;
22 val* var1 /* : Array[FFILanguage] */;
23 var1 = self->attrs[COLOR_nitc__light_ffi_base__FFILanguageAssignationPhase___languages].val; /* _languages on <self:FFILanguageAssignationPhase> */
24 if (unlikely(var1 == NULL)) {
25 if(catchStack.cursor >= 0){
26 longjmp(catchStack.envs[catchStack.cursor], 1);
27 }
28 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _languages");
29 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 36);
30 fatal_exit(1);
31 }
32 var = var1;
33 RET_LABEL:;
34 return var;
35 }
36 /* method light_ffi_base$FFILanguageAssignationPhase$process_nmodule for (self: FFILanguageAssignationPhase, AModule) */
37 void nitc___nitc__FFILanguageAssignationPhase___nitc__phase__Phase__process_nmodule(val* self, val* p0) {
38 val* var_nmodule /* var nmodule: AModule */;
39 val* var /* : ANodes[AExternCodeBlock] */;
40 val* var2 /* : ANodes[AExternCodeBlock] */;
41 val* var_ /* var : ANodes[AExternCodeBlock] */;
42 val* var3 /* : Iterator[ANode] */;
43 val* var_4 /* var : Iterator[AExternCodeBlock] */;
44 short int var5 /* : Bool */;
45 val* var6 /* : nullable Object */;
46 val* var_block /* var block: AExternCodeBlock */;
47 var_nmodule = p0;
48 {
49 { /* Inline parser_nodes$AModule$n_extern_code_blocks (var_nmodule) on <var_nmodule:AModule> */
50 var2 = var_nmodule->attrs[COLOR_nitc__parser_nodes__AModule___n_extern_code_blocks].val; /* _n_extern_code_blocks on <var_nmodule:AModule> */
51 if (unlikely(var2 == NULL)) {
52 if(catchStack.cursor >= 0){
53 longjmp(catchStack.envs[catchStack.cursor], 1);
54 }
55 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_extern_code_blocks");
56 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 1122);
57 fatal_exit(1);
58 }
59 var = var2;
60 RET_LABEL1:(void)0;
61 }
62 }
63 var_ = var;
64 {
65 var3 = nitc___nitc__ANodes___core__abstract_collection__Collection__iterator(var_);
66 }
67 var_4 = var3;
68 for(;;) {
69 {
70 var5 = ((short int(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_4); /* is_ok on <var_4:Iterator[AExternCodeBlock]>*/
71 }
72 if (var5){
73 } else {
74 goto BREAK_label;
75 }
76 {
77 var6 = ((val*(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_4); /* item on <var_4:Iterator[AExternCodeBlock]>*/
78 }
79 var_block = var6;
80 {
81 nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var_block); /* Direct call light_ffi_base$FFILanguageAssignationPhase$verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
82 }
83 {
84 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_4); /* next on <var_4:Iterator[AExternCodeBlock]>*/
85 }
86 }
87 BREAK_label: (void)0;
88 {
89 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_4); /* finish on <var_4:Iterator[AExternCodeBlock]>*/
90 }
91 RET_LABEL:;
92 }
93 /* method light_ffi_base$FFILanguageAssignationPhase$process_npropdef for (self: FFILanguageAssignationPhase, APropdef) */
94 void nitc___nitc__FFILanguageAssignationPhase___nitc__phase__Phase__process_npropdef(val* self, val* p0) {
95 val* var_npropdef /* var npropdef: APropdef */;
96 short int var /* : Bool */;
97 int cltype;
98 int idtype;
99 val* var1 /* : nullable AExternCodeBlock */;
100 val* var3 /* : nullable AExternCodeBlock */;
101 val* var_code_block /* var code_block: nullable AExternCodeBlock */;
102 short int var4 /* : Bool */;
103 short int var5 /* : Bool */;
104 val* var_other /* var other: nullable Object */;
105 short int var7 /* : Bool */;
106 short int var8 /* : Bool */;
107 var_npropdef = p0;
108 /* <var_npropdef:APropdef> isa AMethPropdef */
109 cltype = type_nitc__AMethPropdef.color;
110 idtype = type_nitc__AMethPropdef.id;
111 if(cltype >= var_npropdef->type->table_size) {
112 var = 0;
113 } else {
114 var = var_npropdef->type->type_table[cltype] == idtype;
115 }
116 if (var){
117 {
118 { /* Inline parser_nodes$AMethPropdef$n_extern_code_block (var_npropdef) on <var_npropdef:APropdef(AMethPropdef)> */
119 var3 = var_npropdef->attrs[COLOR_nitc__parser_nodes__AMethPropdef___n_extern_code_block].val; /* _n_extern_code_block on <var_npropdef:APropdef(AMethPropdef)> */
120 var1 = var3;
121 RET_LABEL2:(void)0;
122 }
123 }
124 var_code_block = var1;
125 if (var_code_block == NULL) {
126 var4 = 0; /* is null */
127 } else {
128 var4 = 1; /* arg is null and recv is not */
129 }
130 if (0) {
131 { /* Inline kernel$Object$!= (var_code_block,((val*)NULL)) on <var_code_block:nullable AExternCodeBlock> */
132 var_other = ((val*)NULL);
133 {
134 var7 = ((short int(*)(val* self, val* p0))(var_code_block->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_code_block, var_other); /* == on <var_code_block:nullable AExternCodeBlock(AExternCodeBlock)>*/
135 }
136 var8 = !var7;
137 var5 = var8;
138 goto RET_LABEL6;
139 RET_LABEL6:(void)0;
140 }
141 var4 = var5;
142 }
143 if (var4){
144 {
145 nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var_code_block); /* Direct call light_ffi_base$FFILanguageAssignationPhase$verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
146 }
147 } else {
148 }
149 } else {
150 }
151 RET_LABEL:;
152 }
153 /* method light_ffi_base$FFILanguageAssignationPhase$process_nclassdef for (self: FFILanguageAssignationPhase, AClassdef) */
154 void nitc___nitc__FFILanguageAssignationPhase___nitc__phase__Phase__process_nclassdef(val* self, val* p0) {
155 val* var_nclassdef /* var nclassdef: AClassdef */;
156 short int var /* : Bool */;
157 short int var1 /* : Bool */;
158 int cltype;
159 int idtype;
160 short int var_ /* var : Bool */;
161 val* var2 /* : nullable AExternCodeBlock */;
162 val* var4 /* : nullable AExternCodeBlock */;
163 short int var5 /* : Bool */;
164 short int var6 /* : Bool */;
165 val* var_other /* var other: nullable Object */;
166 short int var8 /* : Bool */;
167 short int var9 /* : Bool */;
168 val* var10 /* : nullable AExternCodeBlock */;
169 val* var12 /* : nullable AExternCodeBlock */;
170 var_nclassdef = p0;
171 /* <var_nclassdef:AClassdef> isa AStdClassdef */
172 cltype = type_nitc__AStdClassdef.color;
173 idtype = type_nitc__AStdClassdef.id;
174 if(cltype >= var_nclassdef->type->table_size) {
175 var1 = 0;
176 } else {
177 var1 = var_nclassdef->type->type_table[cltype] == idtype;
178 }
179 var_ = var1;
180 if (var1){
181 {
182 { /* Inline parser_nodes$AStdClassdef$n_extern_code_block (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
183 var4 = var_nclassdef->attrs[COLOR_nitc__parser_nodes__AStdClassdef___n_extern_code_block].val; /* _n_extern_code_block on <var_nclassdef:AClassdef(AStdClassdef)> */
184 var2 = var4;
185 RET_LABEL3:(void)0;
186 }
187 }
188 if (var2 == NULL) {
189 var5 = 0; /* is null */
190 } else {
191 var5 = 1; /* arg is null and recv is not */
192 }
193 if (0) {
194 { /* Inline kernel$Object$!= (var2,((val*)NULL)) on <var2:nullable AExternCodeBlock> */
195 var_other = ((val*)NULL);
196 {
197 var8 = ((short int(*)(val* self, val* p0))(var2->class->vft[COLOR_core__kernel__Object___61d_61d]))(var2, var_other); /* == on <var2:nullable AExternCodeBlock(AExternCodeBlock)>*/
198 }
199 var9 = !var8;
200 var6 = var9;
201 goto RET_LABEL7;
202 RET_LABEL7:(void)0;
203 }
204 var5 = var6;
205 }
206 var = var5;
207 } else {
208 var = var_;
209 }
210 if (var){
211 {
212 { /* Inline parser_nodes$AStdClassdef$n_extern_code_block (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
213 var12 = var_nclassdef->attrs[COLOR_nitc__parser_nodes__AStdClassdef___n_extern_code_block].val; /* _n_extern_code_block on <var_nclassdef:AClassdef(AStdClassdef)> */
214 var10 = var12;
215 RET_LABEL11:(void)0;
216 }
217 }
218 if (unlikely(var10 == NULL)) {
219 if(catchStack.cursor >= 0){
220 longjmp(catchStack.envs[catchStack.cursor], 1);
221 }
222 PRINT_ERROR("Runtime error: %s", "Cast failed");
223 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 59);
224 fatal_exit(1);
225 }
226 {
227 nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var10); /* Direct call light_ffi_base$FFILanguageAssignationPhase$verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
228 }
229 } else {
230 }
231 RET_LABEL:;
232 }
233 /* method light_ffi_base$FFILanguageAssignationPhase$verify_foreign_code_on_node for (self: FFILanguageAssignationPhase, AExternCodeBlock) */
234 void nitc___nitc__FFILanguageAssignationPhase___verify_foreign_code_on_node(val* self, val* p0) {
235 val* var_n /* var n: AExternCodeBlock */;
236 short int var_found /* var found: Bool */;
237 val* var /* : Array[FFILanguage] */;
238 val* var2 /* : Array[FFILanguage] */;
239 val* var_ /* var : Array[FFILanguage] */;
240 val* var3 /* : IndexedIterator[nullable Object] */;
241 val* var_4 /* var : IndexedIterator[FFILanguage] */;
242 short int var5 /* : Bool */;
243 val* var6 /* : nullable Object */;
244 val* var_v /* var v: FFILanguage */;
245 short int var7 /* : Bool */;
246 short int var_identified /* var identified: Bool */;
247 short int var8 /* : Bool */;
248 short int var_9 /* var : Bool */;
249 val* var10 /* : ToolContext */;
250 val* var12 /* : ToolContext */;
251 val* var13 /* : Location */;
252 val* var15 /* : Location */;
253 static val* varonce;
254 val* var16 /* : String */;
255 char* var17 /* : CString */;
256 val* var18 /* : String */;
257 val* var19 /* : nullable Int */;
258 val* var20 /* : nullable Int */;
259 val* var21 /* : nullable Bool */;
260 val* var22 /* : nullable Bool */;
261 val* var23 /* : Message */;
262 short int var25 /* : Bool */;
263 val* var26 /* : ToolContext */;
264 val* var28 /* : ToolContext */;
265 val* var29 /* : Location */;
266 val* var31 /* : Location */;
267 static val* varonce32;
268 val* var33 /* : String */;
269 char* var34 /* : CString */;
270 val* var35 /* : String */;
271 val* var36 /* : nullable Int */;
272 val* var37 /* : nullable Int */;
273 val* var38 /* : nullable Bool */;
274 val* var39 /* : nullable Bool */;
275 val* var40 /* : Message */;
276 var_n = p0;
277 var_found = 0;
278 {
279 { /* Inline light_ffi_base$FFILanguageAssignationPhase$languages (self) on <self:FFILanguageAssignationPhase> */
280 var2 = self->attrs[COLOR_nitc__light_ffi_base__FFILanguageAssignationPhase___languages].val; /* _languages on <self:FFILanguageAssignationPhase> */
281 if (unlikely(var2 == NULL)) {
282 if(catchStack.cursor >= 0){
283 longjmp(catchStack.envs[catchStack.cursor], 1);
284 }
285 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _languages");
286 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 36);
287 fatal_exit(1);
288 }
289 var = var2;
290 RET_LABEL1:(void)0;
291 }
292 }
293 var_ = var;
294 {
295 var3 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
296 }
297 var_4 = var3;
298 for(;;) {
299 {
300 var5 = ((short int(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_4); /* is_ok on <var_4:IndexedIterator[FFILanguage]>*/
301 }
302 if (var5){
303 } else {
304 goto BREAK_label;
305 }
306 {
307 var6 = ((val*(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_4); /* item on <var_4:IndexedIterator[FFILanguage]>*/
308 }
309 var_v = var6;
310 {
311 var7 = nitc___nitc__CLanguage___nitc__light_ffi_base__FFILanguage__identify_language(var_v, var_n);
312 }
313 var_identified = var7;
314 if (var_identified){
315 var_9 = var_found;
316 if (var_found){
317 var8 = var_identified;
318 } else {
319 var8 = var_9;
320 }
321 if (var8){
322 {
323 { /* Inline phase$Phase$toolcontext (self) on <self:FFILanguageAssignationPhase> */
324 var12 = self->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <self:FFILanguageAssignationPhase> */
325 if (unlikely(var12 == NULL)) {
326 if(catchStack.cursor >= 0){
327 longjmp(catchStack.envs[catchStack.cursor], 1);
328 }
329 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
330 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 210);
331 fatal_exit(1);
332 }
333 var10 = var12;
334 RET_LABEL11:(void)0;
335 }
336 }
337 {
338 { /* Inline parser_nodes$ANode$location (var_n) on <var_n:AExternCodeBlock> */
339 var15 = var_n->attrs[COLOR_nitc__parser_nodes__ANode___location].val; /* _location on <var_n:AExternCodeBlock> */
340 if (unlikely(var15 == NULL)) {
341 if(catchStack.cursor >= 0){
342 longjmp(catchStack.envs[catchStack.cursor], 1);
343 }
344 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
345 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 25);
346 fatal_exit(1);
347 }
348 var13 = var15;
349 RET_LABEL14:(void)0;
350 }
351 }
352 if (likely(varonce!=NULL)) {
353 var16 = varonce;
354 } else {
355 var17 = "FFI Error: two languages identified as possible handlers.";
356 var19 = (val*)(57l<<2|1);
357 var20 = (val*)(57l<<2|1);
358 var21 = (val*)((long)(0)<<2|3);
359 var22 = (val*)((long)(0)<<2|3);
360 var18 = core__flat___CString___to_s_unsafe(var17, var19, var20, var21, var22);
361 var16 = var18;
362 varonce = var16;
363 }
364 {
365 var23 = nitc___nitc__ToolContext___error(var10, var13, var16);
366 }
367 } else {
368 }
369 {
370 { /* Inline light_ffi_base$AExternCodeBlock$language= (var_n,var_v) on <var_n:AExternCodeBlock> */
371 var_n->attrs[COLOR_nitc__light_ffi_base__AExternCodeBlock___language].val = var_v; /* _language on <var_n:AExternCodeBlock> */
372 RET_LABEL24:(void)0;
373 }
374 }
375 var_found = 1;
376 } else {
377 }
378 {
379 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_4); /* next on <var_4:IndexedIterator[FFILanguage]>*/
380 }
381 }
382 BREAK_label: (void)0;
383 {
384 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_4); /* finish on <var_4:IndexedIterator[FFILanguage]>*/
385 }
386 var25 = !var_found;
387 if (var25){
388 {
389 { /* Inline phase$Phase$toolcontext (self) on <self:FFILanguageAssignationPhase> */
390 var28 = self->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <self:FFILanguageAssignationPhase> */
391 if (unlikely(var28 == NULL)) {
392 if(catchStack.cursor >= 0){
393 longjmp(catchStack.envs[catchStack.cursor], 1);
394 }
395 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
396 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 210);
397 fatal_exit(1);
398 }
399 var26 = var28;
400 RET_LABEL27:(void)0;
401 }
402 }
403 {
404 { /* Inline parser_nodes$ANode$location (var_n) on <var_n:AExternCodeBlock> */
405 var31 = var_n->attrs[COLOR_nitc__parser_nodes__ANode___location].val; /* _location on <var_n:AExternCodeBlock> */
406 if (unlikely(var31 == NULL)) {
407 if(catchStack.cursor >= 0){
408 longjmp(catchStack.envs[catchStack.cursor], 1);
409 }
410 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
411 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 25);
412 fatal_exit(1);
413 }
414 var29 = var31;
415 RET_LABEL30:(void)0;
416 }
417 }
418 if (likely(varonce32!=NULL)) {
419 var33 = varonce32;
420 } else {
421 var34 = "FFI Error: unsupported language.";
422 var36 = (val*)(32l<<2|1);
423 var37 = (val*)(32l<<2|1);
424 var38 = (val*)((long)(0)<<2|3);
425 var39 = (val*)((long)(0)<<2|3);
426 var35 = core__flat___CString___to_s_unsafe(var34, var36, var37, var38, var39);
427 var33 = var35;
428 varonce32 = var33;
429 }
430 {
431 var40 = nitc___nitc__ToolContext___error(var26, var29, var33);
432 }
433 } else {
434 }
435 RET_LABEL:;
436 }
437 /* method light_ffi_base$MModule$ffi_files for (self: MModule): Array[ExternFile] */
438 val* nitc__light_ffi_base___MModule___ffi_files(val* self) {
439 val* var /* : Array[ExternFile] */;
440 val* var1 /* : Array[ExternFile] */;
441 var1 = self->attrs[COLOR_nitc__light_ffi_base__MModule___ffi_files].val; /* _ffi_files on <self:MModule> */
442 if (unlikely(var1 == NULL)) {
443 if(catchStack.cursor >= 0){
444 longjmp(catchStack.envs[catchStack.cursor], 1);
445 }
446 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_files");
447 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 82);
448 fatal_exit(1);
449 }
450 var = var1;
451 RET_LABEL:;
452 return var;
453 }
454 /* method light_ffi_base$AExternCodeBlock$language_name for (self: AExternCodeBlock): nullable String */
455 val* nitc__light_ffi_base___AExternCodeBlock___language_name(val* self) {
456 val* var /* : nullable String */;
457 val* var1 /* : nullable AInLanguage */;
458 val* var3 /* : nullable AInLanguage */;
459 short int var4 /* : Bool */;
460 short int var5 /* : Bool */;
461 val* var_other /* var other: nullable Object */;
462 short int var7 /* : Bool */;
463 short int var9 /* : Bool */;
464 val* var10 /* : nullable AInLanguage */;
465 val* var12 /* : nullable AInLanguage */;
466 val* var13 /* : TString */;
467 val* var15 /* : TString */;
468 val* var16 /* : String */;
469 {
470 { /* Inline parser_nodes$AExternCodeBlock$n_in_language (self) on <self:AExternCodeBlock> */
471 var3 = self->attrs[COLOR_nitc__parser_nodes__AExternCodeBlock___n_in_language].val; /* _n_in_language on <self:AExternCodeBlock> */
472 var1 = var3;
473 RET_LABEL2:(void)0;
474 }
475 }
476 if (var1 == NULL) {
477 var4 = 1; /* is null */
478 } else {
479 var4 = 0; /* arg is null but recv is not */
480 }
481 if (0) {
482 { /* Inline kernel$Object$== (var1,((val*)NULL)) on <var1:nullable AInLanguage> */
483 var_other = ((val*)NULL);
484 {
485 { /* Inline kernel$Object$is_same_instance (var1,var_other) on <var1:nullable AInLanguage(AInLanguage)> */
486 var9 = var1 == var_other;
487 var7 = var9;
488 goto RET_LABEL8;
489 RET_LABEL8:(void)0;
490 }
491 }
492 var5 = var7;
493 goto RET_LABEL6;
494 RET_LABEL6:(void)0;
495 }
496 var4 = var5;
497 }
498 if (var4){
499 var = ((val*)NULL);
500 goto RET_LABEL;
501 } else {
502 }
503 {
504 { /* Inline parser_nodes$AExternCodeBlock$n_in_language (self) on <self:AExternCodeBlock> */
505 var12 = self->attrs[COLOR_nitc__parser_nodes__AExternCodeBlock___n_in_language].val; /* _n_in_language on <self:AExternCodeBlock> */
506 var10 = var12;
507 RET_LABEL11:(void)0;
508 }
509 }
510 if (var10 == NULL) {
511 if(catchStack.cursor >= 0){
512 longjmp(catchStack.envs[catchStack.cursor], 1);
513 }
514 PRINT_ERROR("Runtime error: %s", "Receiver is null");
515 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 90);
516 fatal_exit(1);
517 } else {
518 { /* Inline parser_nodes$AInLanguage$n_string (var10) on <var10:nullable AInLanguage> */
519 if (unlikely(var10 == NULL)) {
520 if(catchStack.cursor >= 0){
521 longjmp(catchStack.envs[catchStack.cursor], 1);
522 }
523 PRINT_ERROR("Runtime error: %s", "Receiver is null");
524 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 2930);
525 fatal_exit(1);
526 }
527 var15 = var10->attrs[COLOR_nitc__parser_nodes__AInLanguage___n_string].val; /* _n_string on <var10:nullable AInLanguage> */
528 if (unlikely(var15 == NULL)) {
529 if(catchStack.cursor >= 0){
530 longjmp(catchStack.envs[catchStack.cursor], 1);
531 }
532 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_string");
533 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 2930);
534 fatal_exit(1);
535 }
536 var13 = var15;
537 RET_LABEL14:(void)0;
538 }
539 }
540 {
541 var16 = nitc__light_ffi_base___TString___without_quotes(var13);
542 }
543 var = var16;
544 goto RET_LABEL;
545 RET_LABEL:;
546 return var;
547 }
548 /* method light_ffi_base$AExternCodeBlock$language_name_lowered for (self: AExternCodeBlock): nullable String */
549 val* nitc__light_ffi_base___AExternCodeBlock___language_name_lowered(val* self) {
550 val* var /* : nullable String */;
551 val* var1 /* : nullable String */;
552 short int var2 /* : Bool */;
553 short int var3 /* : Bool */;
554 val* var4 /* : nullable String */;
555 val* var5 /* : Text */;
556 {
557 var1 = nitc__light_ffi_base___AExternCodeBlock___language_name(self);
558 }
559 if (var1 == NULL) {
560 var2 = 1; /* is null */
561 } else {
562 var2 = 0; /* arg is null but recv is not */
563 }
564 if (0) {
565 var3 = ((short int(*)(val* self, val* p0))(var1->class->vft[COLOR_core__kernel__Object___61d_61d]))(var1, ((val*)NULL)); /* == on <var1:nullable String>*/
566 var2 = var3;
567 }
568 if (var2){
569 var = ((val*)NULL);
570 goto RET_LABEL;
571 } else {
572 }
573 {
574 var4 = nitc__light_ffi_base___AExternCodeBlock___language_name(self);
575 }
576 if (var4 == NULL) {
577 if(catchStack.cursor >= 0){
578 longjmp(catchStack.envs[catchStack.cursor], 1);
579 }
580 PRINT_ERROR("Runtime error: %s", "Receiver is null");
581 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 96);
582 fatal_exit(1);
583 } else {
584 var5 = ((val*(*)(val* self))(var4->class->vft[COLOR_core__abstract_text__Text__to_lower]))(var4); /* to_lower on <var4:nullable String>*/
585 }
586 var = var5;
587 goto RET_LABEL;
588 RET_LABEL:;
589 return var;
590 }
591 /* method light_ffi_base$AExternCodeBlock$code for (self: AExternCodeBlock): String */
592 val* nitc__light_ffi_base___AExternCodeBlock___code(val* self) {
593 val* var /* : String */;
594 val* var1 /* : TExternCodeSegment */;
595 val* var3 /* : TExternCodeSegment */;
596 val* var4 /* : String */;
597 {
598 { /* Inline parser_nodes$AExternCodeBlock$n_extern_code_segment (self) on <self:AExternCodeBlock> */
599 var3 = self->attrs[COLOR_nitc__parser_nodes__AExternCodeBlock___n_extern_code_segment].val; /* _n_extern_code_segment on <self:AExternCodeBlock> */
600 if (unlikely(var3 == NULL)) {
601 if(catchStack.cursor >= 0){
602 longjmp(catchStack.envs[catchStack.cursor], 1);
603 }
604 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_extern_code_segment");
605 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 2941);
606 fatal_exit(1);
607 }
608 var1 = var3;
609 RET_LABEL2:(void)0;
610 }
611 }
612 {
613 var4 = nitc__light_ffi_base___TExternCodeSegment___without_guard(var1);
614 }
615 var = var4;
616 goto RET_LABEL;
617 RET_LABEL:;
618 return var;
619 }
620 /* method light_ffi_base$AExternCodeBlock$language for (self: AExternCodeBlock): nullable FFILanguage */
621 val* nitc__light_ffi_base___AExternCodeBlock___language(val* self) {
622 val* var /* : nullable FFILanguage */;
623 val* var1 /* : nullable FFILanguage */;
624 var1 = self->attrs[COLOR_nitc__light_ffi_base__AExternCodeBlock___language].val; /* _language on <self:AExternCodeBlock> */
625 var = var1;
626 RET_LABEL:;
627 return var;
628 }
629 /* method light_ffi_base$AExternCodeBlock$language= for (self: AExternCodeBlock, nullable FFILanguage) */
630 void nitc__light_ffi_base___AExternCodeBlock___language_61d(val* self, val* p0) {
631 self->attrs[COLOR_nitc__light_ffi_base__AExternCodeBlock___language].val = p0; /* _language on <self:AExternCodeBlock> */
632 RET_LABEL:;
633 }
634 /* method light_ffi_base$FFILanguage$ffi_language_assignation_phase for (self: FFILanguage): FFILanguageAssignationPhase */
635 val* nitc___nitc__FFILanguage___ffi_language_assignation_phase(val* self) {
636 val* var /* : FFILanguageAssignationPhase */;
637 val* var1 /* : FFILanguageAssignationPhase */;
638 var1 = self->attrs[COLOR_nitc__light_ffi_base__FFILanguage___ffi_language_assignation_phase].val; /* _ffi_language_assignation_phase on <self:FFILanguage> */
639 if (unlikely(var1 == NULL)) {
640 if(catchStack.cursor >= 0){
641 longjmp(catchStack.envs[catchStack.cursor], 1);
642 }
643 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_language_assignation_phase");
644 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 109);
645 fatal_exit(1);
646 }
647 var = var1;
648 RET_LABEL:;
649 return var;
650 }
651 /* method light_ffi_base$FFILanguage$ffi_language_assignation_phase= for (self: FFILanguage, FFILanguageAssignationPhase) */
652 void nitc___nitc__FFILanguage___ffi_language_assignation_phase_61d(val* self, val* p0) {
653 self->attrs[COLOR_nitc__light_ffi_base__FFILanguage___ffi_language_assignation_phase].val = p0; /* _ffi_language_assignation_phase on <self:FFILanguage> */
654 RET_LABEL:;
655 }
656 /* method light_ffi_base$FFILanguage$init for (self: FFILanguage) */
657 void nitc___nitc__FFILanguage___core__kernel__Object__init(val* self) {
658 val* var /* : FFILanguageAssignationPhase */;
659 val* var2 /* : FFILanguageAssignationPhase */;
660 val* var3 /* : Array[FFILanguage] */;
661 val* var5 /* : Array[FFILanguage] */;
662 {
663 ((void(*)(val* self))(self->class->vft[COLOR_nitc___nitc__FFILanguage___core__kernel__Object__init]))(self); /* init on <self:FFILanguage>*/
664 }
665 {
666 { /* Inline light_ffi_base$FFILanguage$ffi_language_assignation_phase (self) on <self:FFILanguage> */
667 var2 = self->attrs[COLOR_nitc__light_ffi_base__FFILanguage___ffi_language_assignation_phase].val; /* _ffi_language_assignation_phase on <self:FFILanguage> */
668 if (unlikely(var2 == NULL)) {
669 if(catchStack.cursor >= 0){
670 longjmp(catchStack.envs[catchStack.cursor], 1);
671 }
672 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_language_assignation_phase");
673 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 109);
674 fatal_exit(1);
675 }
676 var = var2;
677 RET_LABEL1:(void)0;
678 }
679 }
680 {
681 { /* Inline light_ffi_base$FFILanguageAssignationPhase$languages (var) on <var:FFILanguageAssignationPhase> */
682 var5 = var->attrs[COLOR_nitc__light_ffi_base__FFILanguageAssignationPhase___languages].val; /* _languages on <var:FFILanguageAssignationPhase> */
683 if (unlikely(var5 == NULL)) {
684 if(catchStack.cursor >= 0){
685 longjmp(catchStack.envs[catchStack.cursor], 1);
686 }
687 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _languages");
688 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 36);
689 fatal_exit(1);
690 }
691 var3 = var5;
692 RET_LABEL4:(void)0;
693 }
694 }
695 {
696 core___core__Array___core__abstract_collection__SimpleCollection__add(var3, self); /* Direct call array$Array$add on <var3:Array[FFILanguage]>*/
697 }
698 RET_LABEL:;
699 }
700 /* method light_ffi_base$TString$without_quotes for (self: TString): String */
701 val* nitc__light_ffi_base___TString___without_quotes(val* self) {
702 val* var /* : String */;
703 val* var1 /* : String */;
704 long var2 /* : Int */;
705 short int var3 /* : Bool */;
706 short int var5 /* : Bool */;
707 int cltype;
708 int idtype;
709 const char* var_class_name;
710 short int var6 /* : Bool */;
711 val* var7 /* : String */;
712 val* var8 /* : String */;
713 long var9 /* : Int */;
714 long var10 /* : Int */;
715 short int var12 /* : Bool */;
716 int cltype13;
717 int idtype14;
718 const char* var_class_name15;
719 long var16 /* : Int */;
720 val* var17 /* : Text */;
721 {
722 var1 = nitc__lexer_work___Token___text(self);
723 }
724 {
725 var2 = ((long(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__Text__length]))(var1); /* length on <var1:String>*/
726 }
727 {
728 { /* Inline kernel$Int$>= (var2,2l) on <var2:Int> */
729 /* Covariant cast for argument 0 (i) <2l:Int> isa OTHER */
730 /* <2l:Int> isa OTHER */
731 var5 = 1; /* easy <2l:Int> isa OTHER*/
732 if (unlikely(!var5)) {
733 var_class_name = type_core__Int.name;
734 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
735 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 726);
736 fatal_exit(1);
737 }
738 var6 = var2 >= 2l;
739 var3 = var6;
740 goto RET_LABEL4;
741 RET_LABEL4:(void)0;
742 }
743 }
744 if (unlikely(!var3)) {
745 if(catchStack.cursor >= 0){
746 longjmp(catchStack.envs[catchStack.cursor], 1);
747 }
748 PRINT_ERROR("Runtime error: %s", "Assert failed");
749 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 142);
750 fatal_exit(1);
751 }
752 {
753 var7 = nitc__lexer_work___Token___text(self);
754 }
755 {
756 var8 = nitc__lexer_work___Token___text(self);
757 }
758 {
759 var9 = ((long(*)(val* self))(var8->class->vft[COLOR_core__abstract_text__Text__length]))(var8); /* length on <var8:String>*/
760 }
761 {
762 { /* Inline kernel$Int$- (var9,2l) on <var9:Int> */
763 /* Covariant cast for argument 0 (i) <2l:Int> isa OTHER */
764 /* <2l:Int> isa OTHER */
765 var12 = 1; /* easy <2l:Int> isa OTHER*/
766 if (unlikely(!var12)) {
767 var_class_name15 = type_core__Int.name;
768 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name15);
769 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
770 fatal_exit(1);
771 }
772 var16 = var9 - 2l;
773 var10 = var16;
774 goto RET_LABEL11;
775 RET_LABEL11:(void)0;
776 }
777 }
778 {
779 var17 = ((val*(*)(val* self, long p0, long p1))(var7->class->vft[COLOR_core__abstract_text__Text__substring]))(var7, 1l, var10); /* substring on <var7:String>*/
780 }
781 var = var17;
782 goto RET_LABEL;
783 RET_LABEL:;
784 return var;
785 }
786 /* method light_ffi_base$TExternCodeSegment$without_guard for (self: TExternCodeSegment): String */
787 val* nitc__light_ffi_base___TExternCodeSegment___without_guard(val* self) {
788 val* var /* : String */;
789 val* var1 /* : String */;
790 long var2 /* : Int */;
791 short int var3 /* : Bool */;
792 short int var5 /* : Bool */;
793 int cltype;
794 int idtype;
795 const char* var_class_name;
796 short int var6 /* : Bool */;
797 val* var7 /* : String */;
798 val* var8 /* : String */;
799 long var9 /* : Int */;
800 long var10 /* : Int */;
801 short int var12 /* : Bool */;
802 int cltype13;
803 int idtype14;
804 const char* var_class_name15;
805 long var16 /* : Int */;
806 val* var17 /* : Text */;
807 {
808 var1 = nitc__lexer_work___Token___text(self);
809 }
810 {
811 var2 = ((long(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__Text__length]))(var1); /* length on <var1:String>*/
812 }
813 {
814 { /* Inline kernel$Int$>= (var2,4l) on <var2:Int> */
815 /* Covariant cast for argument 0 (i) <4l:Int> isa OTHER */
816 /* <4l:Int> isa OTHER */
817 var5 = 1; /* easy <4l:Int> isa OTHER*/
818 if (unlikely(!var5)) {
819 var_class_name = type_core__Int.name;
820 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
821 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 726);
822 fatal_exit(1);
823 }
824 var6 = var2 >= 4l;
825 var3 = var6;
826 goto RET_LABEL4;
827 RET_LABEL4:(void)0;
828 }
829 }
830 if (unlikely(!var3)) {
831 if(catchStack.cursor >= 0){
832 longjmp(catchStack.envs[catchStack.cursor], 1);
833 }
834 PRINT_ERROR("Runtime error: %s", "Assert failed");
835 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__light_ffi_base, 151);
836 fatal_exit(1);
837 }
838 {
839 var7 = nitc__lexer_work___Token___text(self);
840 }
841 {
842 var8 = nitc__lexer_work___Token___text(self);
843 }
844 {
845 var9 = ((long(*)(val* self))(var8->class->vft[COLOR_core__abstract_text__Text__length]))(var8); /* length on <var8:String>*/
846 }
847 {
848 { /* Inline kernel$Int$- (var9,4l) on <var9:Int> */
849 /* Covariant cast for argument 0 (i) <4l:Int> isa OTHER */
850 /* <4l:Int> isa OTHER */
851 var12 = 1; /* easy <4l:Int> isa OTHER*/
852 if (unlikely(!var12)) {
853 var_class_name15 = type_core__Int.name;
854 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name15);
855 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
856 fatal_exit(1);
857 }
858 var16 = var9 - 4l;
859 var10 = var16;
860 goto RET_LABEL11;
861 RET_LABEL11:(void)0;
862 }
863 }
864 {
865 var17 = ((val*(*)(val* self, long p0, long p1))(var7->class->vft[COLOR_core__abstract_text__Text__substring]))(var7, 2l, var10); /* substring on <var7:String>*/
866 }
867 var = var17;
868 goto RET_LABEL;
869 RET_LABEL:;
870 return var;
871 }
872 /* method light_ffi_base$CCompilationUnit$write_as_impl for (self: CCompilationUnit, MModule, String) */
873 void nitc__light_ffi_base___CCompilationUnit___write_as_impl(val* self, val* p0, val* p1) {
874 val* var_mmodule /* var mmodule: MModule */;
875 val* var_compdir /* var compdir: String */;
876 val* var /* : NativeArray[String] */;
877 static val* varonce;
878 static val* varonce1;
879 val* var2 /* : String */;
880 char* var3 /* : CString */;
881 val* var4 /* : String */;
882 val* var5 /* : nullable Int */;
883 val* var6 /* : nullable Int */;
884 val* var7 /* : nullable Bool */;
885 val* var8 /* : nullable Bool */;
886 val* var9 /* : String */;
887 val* var10 /* : String */;
888 val* var_base_name /* var base_name: String */;
889 val* var12 /* : NativeArray[String] */;
890 static val* varonce11;
891 static val* varonce13;
892 val* var14 /* : String */;
893 char* var15 /* : CString */;
894 val* var16 /* : String */;
895 val* var17 /* : nullable Int */;
896 val* var18 /* : nullable Int */;
897 val* var19 /* : nullable Bool */;
898 val* var20 /* : nullable Bool */;
899 val* var21 /* : String */;
900 val* var_h_file /* var h_file: String */;
901 val* var23 /* : NativeArray[String] */;
902 static val* varonce22;
903 static val* varonce24;
904 val* var25 /* : String */;
905 char* var26 /* : CString */;
906 val* var27 /* : String */;
907 val* var28 /* : nullable Int */;
908 val* var29 /* : nullable Int */;
909 val* var30 /* : nullable Bool */;
910 val* var31 /* : nullable Bool */;
911 val* var32 /* : String */;
912 val* var33 /* : Text */;
913 val* var34 /* : String */;
914 val* var_guard /* var guard: String */;
915 val* var36 /* : NativeArray[String] */;
916 static val* varonce35;
917 static val* varonce37;
918 val* var38 /* : String */;
919 char* var39 /* : CString */;
920 val* var40 /* : String */;
921 val* var41 /* : nullable Int */;
922 val* var42 /* : nullable Int */;
923 val* var43 /* : nullable Bool */;
924 val* var44 /* : nullable Bool */;
925 val* var45 /* : String */;
926 val* var46 /* : Array[String] */;
927 val* var_ /* var : Array[String] */;
928 static val* varonce47;
929 val* var48 /* : String */;
930 char* var49 /* : CString */;
931 val* var50 /* : String */;
932 val* var51 /* : nullable Int */;
933 val* var52 /* : nullable Int */;
934 val* var53 /* : nullable Bool */;
935 val* var54 /* : nullable Bool */;
936 val* var56 /* : NativeArray[String] */;
937 static val* varonce55;
938 static val* varonce57;
939 val* var58 /* : String */;
940 char* var59 /* : CString */;
941 val* var60 /* : String */;
942 val* var61 /* : nullable Int */;
943 val* var62 /* : nullable Int */;
944 val* var63 /* : nullable Bool */;
945 val* var64 /* : nullable Bool */;
946 val* var65 /* : String */;
947 val* var_c_file /* var c_file: String */;
948 val* var67 /* : NativeArray[String] */;
949 static val* varonce66;
950 static val* varonce68;
951 val* var69 /* : String */;
952 char* var70 /* : CString */;
953 val* var71 /* : String */;
954 val* var72 /* : nullable Int */;
955 val* var73 /* : nullable Int */;
956 val* var74 /* : nullable Bool */;
957 val* var75 /* : nullable Bool */;
958 val* var76 /* : String */;
959 val* var77 /* : Array[String] */;
960 val* var_78 /* var : Array[String] */;
961 static val* varonce79;
962 val* var80 /* : String */;
963 char* var81 /* : CString */;
964 val* var82 /* : String */;
965 val* var83 /* : nullable Int */;
966 val* var84 /* : nullable Int */;
967 val* var85 /* : nullable Bool */;
968 val* var86 /* : nullable Bool */;
969 static val* varonce87;
970 val* var88 /* : String */;
971 char* var89 /* : CString */;
972 val* var90 /* : String */;
973 val* var91 /* : nullable Int */;
974 val* var92 /* : nullable Int */;
975 val* var93 /* : nullable Bool */;
976 val* var94 /* : nullable Bool */;
977 static val* varonce95;
978 val* var96 /* : String */;
979 char* var97 /* : CString */;
980 val* var98 /* : String */;
981 val* var99 /* : nullable Int */;
982 val* var100 /* : nullable Int */;
983 val* var101 /* : nullable Bool */;
984 val* var102 /* : nullable Bool */;
985 val* var104 /* : NativeArray[String] */;
986 static val* varonce103;
987 static val* varonce105;
988 val* var106 /* : String */;
989 char* var107 /* : CString */;
990 val* var108 /* : String */;
991 val* var109 /* : nullable Int */;
992 val* var110 /* : nullable Int */;
993 val* var111 /* : nullable Bool */;
994 val* var112 /* : nullable Bool */;
995 static val* varonce113;
996 val* var114 /* : String */;
997 char* var115 /* : CString */;
998 val* var116 /* : String */;
999 val* var117 /* : nullable Int */;
1000 val* var118 /* : nullable Int */;
1001 val* var119 /* : nullable Bool */;
1002 val* var120 /* : nullable Bool */;
1003 val* var121 /* : String */;
1004 val* var122 /* : Array[String] */;
1005 val* var124 /* : Array[String] */;
1006 val* var126 /* : NativeArray[String] */;
1007 static val* varonce125;
1008 static val* varonce127;
1009 val* var128 /* : String */;
1010 char* var129 /* : CString */;
1011 val* var130 /* : String */;
1012 val* var131 /* : nullable Int */;
1013 val* var132 /* : nullable Int */;
1014 val* var133 /* : nullable Bool */;
1015 val* var134 /* : nullable Bool */;
1016 val* var135 /* : String */;
1017 var_mmodule = p0;
1018 var_compdir = p1;
1019 if (unlikely(varonce==NULL)) {
1020 var = NEW_core__NativeArray((int)2l, &type_core__NativeArray__core__String);
1021 if (likely(varonce1!=NULL)) {
1022 var2 = varonce1;
1023 } else {
1024 var3 = "._ffi";
1025 var5 = (val*)(5l<<2|1);
1026 var6 = (val*)(5l<<2|1);
1027 var7 = (val*)((long)(0)<<2|3);
1028 var8 = (val*)((long)(0)<<2|3);
1029 var4 = core__flat___CString___to_s_unsafe(var3, var5, var6, var7, var8);
1030 var2 = var4;
1031 varonce1 = var2;
1032 }
1033 ((struct instance_core__NativeArray*)var)->values[1]=var2;
1034 } else {
1035 var = varonce;
1036 varonce = NULL;
1037 }
1038 {
1039 var9 = nitc___nitc__MModule___nitc__model_base__MEntity__c_name(var_mmodule);
1040 }
1041 ((struct instance_core__NativeArray*)var)->values[0]=var9;
1042 {
1043 var10 = ((val*(*)(val* self))(var->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var); /* native_to_s on <var:NativeArray[String]>*/
1044 }
1045 varonce = var;
1046 var_base_name = var10;
1047 if (unlikely(varonce11==NULL)) {
1048 var12 = NEW_core__NativeArray((int)2l, &type_core__NativeArray__core__String);
1049 if (likely(varonce13!=NULL)) {
1050 var14 = varonce13;
1051 } else {
1052 var15 = ".h";
1053 var17 = (val*)(2l<<2|1);
1054 var18 = (val*)(2l<<2|1);
1055 var19 = (val*)((long)(0)<<2|3);
1056 var20 = (val*)((long)(0)<<2|3);
1057 var16 = core__flat___CString___to_s_unsafe(var15, var17, var18, var19, var20);
1058 var14 = var16;
1059 varonce13 = var14;
1060 }
1061 ((struct instance_core__NativeArray*)var12)->values[1]=var14;
1062 } else {
1063 var12 = varonce11;
1064 varonce11 = NULL;
1065 }
1066 ((struct instance_core__NativeArray*)var12)->values[0]=var_base_name;
1067 {
1068 var21 = ((val*(*)(val* self))(var12->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var12); /* native_to_s on <var12:NativeArray[String]>*/
1069 }
1070 varonce11 = var12;
1071 var_h_file = var21;
1072 if (unlikely(varonce22==NULL)) {
1073 var23 = NEW_core__NativeArray((int)2l, &type_core__NativeArray__core__String);
1074 if (likely(varonce24!=NULL)) {
1075 var25 = varonce24;
1076 } else {
1077 var26 = "_NIT_H";
1078 var28 = (val*)(6l<<2|1);
1079 var29 = (val*)(6l<<2|1);
1080 var30 = (val*)((long)(0)<<2|3);
1081 var31 = (val*)((long)(0)<<2|3);
1082 var27 = core__flat___CString___to_s_unsafe(var26, var28, var29, var30, var31);
1083 var25 = var27;
1084 varonce24 = var25;
1085 }
1086 ((struct instance_core__NativeArray*)var23)->values[1]=var25;
1087 } else {
1088 var23 = varonce22;
1089 varonce22 = NULL;
1090 }
1091 {
1092 var32 = nitc___nitc__MModule___nitc__model_base__MEntity__c_name(var_mmodule);
1093 }
1094 {
1095 var33 = ((val*(*)(val* self))(var32->class->vft[COLOR_core__abstract_text__Text__to_upper]))(var32); /* to_upper on <var32:String>*/
1096 }
1097 ((struct instance_core__NativeArray*)var23)->values[0]=var33;
1098 {
1099 var34 = ((val*(*)(val* self))(var23->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var23); /* native_to_s on <var23:NativeArray[String]>*/
1100 }
1101 varonce22 = var23;
1102 var_guard = var34;
1103 if (unlikely(varonce35==NULL)) {
1104 var36 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1105 if (likely(varonce37!=NULL)) {
1106 var38 = varonce37;
1107 } else {
1108 var39 = "/";
1109 var41 = (val*)(1l<<2|1);
1110 var42 = (val*)(1l<<2|1);
1111 var43 = (val*)((long)(0)<<2|3);
1112 var44 = (val*)((long)(0)<<2|3);
1113 var40 = core__flat___CString___to_s_unsafe(var39, var41, var42, var43, var44);
1114 var38 = var40;
1115 varonce37 = var38;
1116 }
1117 ((struct instance_core__NativeArray*)var36)->values[1]=var38;
1118 } else {
1119 var36 = varonce35;
1120 varonce35 = NULL;
1121 }
1122 ((struct instance_core__NativeArray*)var36)->values[0]=var_compdir;
1123 ((struct instance_core__NativeArray*)var36)->values[2]=var_h_file;
1124 {
1125 var45 = ((val*(*)(val* self))(var36->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var36); /* native_to_s on <var36:NativeArray[String]>*/
1126 }
1127 varonce35 = var36;
1128 var46 = NEW_core__Array(&type_core__Array__core__String);
1129 {
1130 core___core__Array___with_capacity(var46, 1l); /* Direct call array$Array$with_capacity on <var46:Array[String]>*/
1131 }
1132 var_ = var46;
1133 if (likely(varonce47!=NULL)) {
1134 var48 = varonce47;
1135 } else {
1136 var49 = "<stdint.h>";
1137 var51 = (val*)(10l<<2|1);
1138 var52 = (val*)(10l<<2|1);
1139 var53 = (val*)((long)(0)<<2|3);
1140 var54 = (val*)((long)(0)<<2|3);
1141 var50 = core__flat___CString___to_s_unsafe(var49, var51, var52, var53, var54);
1142 var48 = var50;
1143 varonce47 = var48;
1144 }
1145 {
1146 core___core__AbstractArray___core__abstract_collection__Sequence__push(var_, var48); /* Direct call array$AbstractArray$push on <var_:Array[String]>*/
1147 }
1148 {
1149 nitc__light_ffi_base___CCompilationUnit___write_header_to_file(self, var_mmodule, var45, var_, var_guard); /* Direct call light_ffi_base$CCompilationUnit$write_header_to_file on <self:CCompilationUnit>*/
1150 }
1151 if (unlikely(varonce55==NULL)) {
1152 var56 = NEW_core__NativeArray((int)2l, &type_core__NativeArray__core__String);
1153 if (likely(varonce57!=NULL)) {
1154 var58 = varonce57;
1155 } else {
1156 var59 = ".c";
1157 var61 = (val*)(2l<<2|1);
1158 var62 = (val*)(2l<<2|1);
1159 var63 = (val*)((long)(0)<<2|3);
1160 var64 = (val*)((long)(0)<<2|3);
1161 var60 = core__flat___CString___to_s_unsafe(var59, var61, var62, var63, var64);
1162 var58 = var60;
1163 varonce57 = var58;
1164 }
1165 ((struct instance_core__NativeArray*)var56)->values[1]=var58;
1166 } else {
1167 var56 = varonce55;
1168 varonce55 = NULL;
1169 }
1170 ((struct instance_core__NativeArray*)var56)->values[0]=var_base_name;
1171 {
1172 var65 = ((val*(*)(val* self))(var56->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var56); /* native_to_s on <var56:NativeArray[String]>*/
1173 }
1174 varonce55 = var56;
1175 var_c_file = var65;
1176 if (unlikely(varonce66==NULL)) {
1177 var67 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1178 if (likely(varonce68!=NULL)) {
1179 var69 = varonce68;
1180 } else {
1181 var70 = "/";
1182 var72 = (val*)(1l<<2|1);
1183 var73 = (val*)(1l<<2|1);
1184 var74 = (val*)((long)(0)<<2|3);
1185 var75 = (val*)((long)(0)<<2|3);
1186 var71 = core__flat___CString___to_s_unsafe(var70, var72, var73, var74, var75);
1187 var69 = var71;
1188 varonce68 = var69;
1189 }
1190 ((struct instance_core__NativeArray*)var67)->values[1]=var69;
1191 } else {
1192 var67 = varonce66;
1193 varonce66 = NULL;
1194 }
1195 ((struct instance_core__NativeArray*)var67)->values[0]=var_compdir;
1196 ((struct instance_core__NativeArray*)var67)->values[2]=var_c_file;
1197 {
1198 var76 = ((val*(*)(val* self))(var67->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var67); /* native_to_s on <var67:NativeArray[String]>*/
1199 }
1200 varonce66 = var67;
1201 var77 = NEW_core__Array(&type_core__Array__core__String);
1202 {
1203 core___core__Array___with_capacity(var77, 4l); /* Direct call array$Array$with_capacity on <var77:Array[String]>*/
1204 }
1205 var_78 = var77;
1206 if (likely(varonce79!=NULL)) {
1207 var80 = varonce79;
1208 } else {
1209 var81 = "<stdlib.h>";
1210 var83 = (val*)(10l<<2|1);
1211 var84 = (val*)(10l<<2|1);
1212 var85 = (val*)((long)(0)<<2|3);
1213 var86 = (val*)((long)(0)<<2|3);
1214 var82 = core__flat___CString___to_s_unsafe(var81, var83, var84, var85, var86);
1215 var80 = var82;
1216 varonce79 = var80;
1217 }
1218 {
1219 core___core__AbstractArray___core__abstract_collection__Sequence__push(var_78, var80); /* Direct call array$AbstractArray$push on <var_78:Array[String]>*/
1220 }
1221 if (likely(varonce87!=NULL)) {
1222 var88 = varonce87;
1223 } else {
1224 var89 = "<stdio.h>";
1225 var91 = (val*)(9l<<2|1);
1226 var92 = (val*)(9l<<2|1);
1227 var93 = (val*)((long)(0)<<2|3);
1228 var94 = (val*)((long)(0)<<2|3);
1229 var90 = core__flat___CString___to_s_unsafe(var89, var91, var92, var93, var94);
1230 var88 = var90;
1231 varonce87 = var88;
1232 }
1233 {
1234 core___core__AbstractArray___core__abstract_collection__Sequence__push(var_78, var88); /* Direct call array$AbstractArray$push on <var_78:Array[String]>*/
1235 }
1236 if (likely(varonce95!=NULL)) {
1237 var96 = varonce95;
1238 } else {
1239 var97 = "<stdint.h>";
1240 var99 = (val*)(10l<<2|1);
1241 var100 = (val*)(10l<<2|1);
1242 var101 = (val*)((long)(0)<<2|3);
1243 var102 = (val*)((long)(0)<<2|3);
1244 var98 = core__flat___CString___to_s_unsafe(var97, var99, var100, var101, var102);
1245 var96 = var98;
1246 varonce95 = var96;
1247 }
1248 {
1249 core___core__AbstractArray___core__abstract_collection__Sequence__push(var_78, var96); /* Direct call array$AbstractArray$push on <var_78:Array[String]>*/
1250 }
1251 if (unlikely(varonce103==NULL)) {
1252 var104 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1253 if (likely(varonce105!=NULL)) {
1254 var106 = varonce105;
1255 } else {
1256 var107 = "\"";
1257 var109 = (val*)(1l<<2|1);
1258 var110 = (val*)(1l<<2|1);
1259 var111 = (val*)((long)(0)<<2|3);
1260 var112 = (val*)((long)(0)<<2|3);
1261 var108 = core__flat___CString___to_s_unsafe(var107, var109, var110, var111, var112);
1262 var106 = var108;
1263 varonce105 = var106;
1264 }
1265 ((struct instance_core__NativeArray*)var104)->values[0]=var106;
1266 if (likely(varonce113!=NULL)) {
1267 var114 = varonce113;
1268 } else {
1269 var115 = "\"";
1270 var117 = (val*)(1l<<2|1);
1271 var118 = (val*)(1l<<2|1);
1272 var119 = (val*)((long)(0)<<2|3);
1273 var120 = (val*)((long)(0)<<2|3);
1274 var116 = core__flat___CString___to_s_unsafe(var115, var117, var118, var119, var120);
1275 var114 = var116;
1276 varonce113 = var114;
1277 }
1278 ((struct instance_core__NativeArray*)var104)->values[2]=var114;
1279 } else {
1280 var104 = varonce103;
1281 varonce103 = NULL;
1282 }
1283 ((struct instance_core__NativeArray*)var104)->values[1]=var_h_file;
1284 {
1285 var121 = ((val*(*)(val* self))(var104->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var104); /* native_to_s on <var104:NativeArray[String]>*/
1286 }
1287 varonce103 = var104;
1288 {
1289 core___core__AbstractArray___core__abstract_collection__Sequence__push(var_78, var121); /* Direct call array$AbstractArray$push on <var_78:Array[String]>*/
1290 }
1291 {
1292 nitc__light_ffi_base___CCompilationUnit___write_body_to_file(self, var_mmodule, var76, var_78); /* Direct call light_ffi_base$CCompilationUnit$write_body_to_file on <self:CCompilationUnit>*/
1293 }
1294 {
1295 { /* Inline c_tools$CCompilationUnit$files (self) on <self:CCompilationUnit> */
1296 var124 = self->attrs[COLOR_nitc__c_tools__CCompilationUnit___files].val; /* _files on <self:CCompilationUnit> */
1297 if (unlikely(var124 == NULL)) {
1298 if(catchStack.cursor >= 0){
1299 longjmp(catchStack.envs[catchStack.cursor], 1);
1300 }
1301 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _files");
1302 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__c_tools, 47);
1303 fatal_exit(1);
1304 }
1305 var122 = var124;
1306 RET_LABEL123:(void)0;
1307 }
1308 }
1309 if (unlikely(varonce125==NULL)) {
1310 var126 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1311 if (likely(varonce127!=NULL)) {
1312 var128 = varonce127;
1313 } else {
1314 var129 = "/";
1315 var131 = (val*)(1l<<2|1);
1316 var132 = (val*)(1l<<2|1);
1317 var133 = (val*)((long)(0)<<2|3);
1318 var134 = (val*)((long)(0)<<2|3);
1319 var130 = core__flat___CString___to_s_unsafe(var129, var131, var132, var133, var134);
1320 var128 = var130;
1321 varonce127 = var128;
1322 }
1323 ((struct instance_core__NativeArray*)var126)->values[1]=var128;
1324 } else {
1325 var126 = varonce125;
1326 varonce125 = NULL;
1327 }
1328 ((struct instance_core__NativeArray*)var126)->values[0]=var_compdir;
1329 ((struct instance_core__NativeArray*)var126)->values[2]=var_c_file;
1330 {
1331 var135 = ((val*(*)(val* self))(var126->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var126); /* native_to_s on <var126:NativeArray[String]>*/
1332 }
1333 varonce125 = var126;
1334 {
1335 core___core__Array___core__abstract_collection__SimpleCollection__add(var122, var135); /* Direct call array$Array$add on <var122:Array[String]>*/
1336 }
1337 RET_LABEL:;
1338 }
1339 /* method light_ffi_base$CCompilationUnit$write_header_to_file for (self: CCompilationUnit, MModule, String, Array[String], String) */
1340 void nitc__light_ffi_base___CCompilationUnit___write_header_to_file(val* self, val* p0, val* p1, val* p2, val* p3) {
1341 val* var_mmodule /* var mmodule: MModule */;
1342 val* var_file /* var file: String */;
1343 val* var_includes /* var includes: Array[String] */;
1344 val* var_guard /* var guard: String */;
1345 val* var /* : FileWriter */;
1346 val* var_stream /* var stream: FileWriter */;
1347 val* var1 /* : NativeArray[String] */;
1348 static val* varonce;
1349 static val* varonce2;
1350 val* var3 /* : String */;
1351 char* var4 /* : CString */;
1352 val* var5 /* : String */;
1353 val* var6 /* : nullable Int */;
1354 val* var7 /* : nullable Int */;
1355 val* var8 /* : nullable Bool */;
1356 val* var9 /* : nullable Bool */;
1357 static val* varonce10;
1358 val* var11 /* : String */;
1359 char* var12 /* : CString */;
1360 val* var13 /* : String */;
1361 val* var14 /* : nullable Int */;
1362 val* var15 /* : nullable Int */;
1363 val* var16 /* : nullable Bool */;
1364 val* var17 /* : nullable Bool */;
1365 val* var18 /* : String */;
1366 val* var20 /* : String */;
1367 val* var21 /* : String */;
1368 val* var_module_info /* var module_info: String */;
1369 val* var23 /* : NativeArray[String] */;
1370 static val* varonce22;
1371 static val* varonce24;
1372 val* var25 /* : String */;
1373 char* var26 /* : CString */;
1374 val* var27 /* : String */;
1375 val* var28 /* : nullable Int */;
1376 val* var29 /* : nullable Int */;
1377 val* var30 /* : nullable Bool */;
1378 val* var31 /* : nullable Bool */;
1379 static val* varonce32;
1380 val* var33 /* : String */;
1381 char* var34 /* : CString */;
1382 val* var35 /* : String */;
1383 val* var36 /* : nullable Int */;
1384 val* var37 /* : nullable Int */;
1385 val* var38 /* : nullable Bool */;
1386 val* var39 /* : nullable Bool */;
1387 val* var40 /* : String */;
1388 val* var42 /* : NativeArray[String] */;
1389 static val* varonce41;
1390 static val* varonce43;
1391 val* var44 /* : String */;
1392 char* var45 /* : CString */;
1393 val* var46 /* : String */;
1394 val* var47 /* : nullable Int */;
1395 val* var48 /* : nullable Int */;
1396 val* var49 /* : nullable Bool */;
1397 val* var50 /* : nullable Bool */;
1398 static val* varonce51;
1399 val* var52 /* : String */;
1400 char* var53 /* : CString */;
1401 val* var54 /* : String */;
1402 val* var55 /* : nullable Int */;
1403 val* var56 /* : nullable Int */;
1404 val* var57 /* : nullable Bool */;
1405 val* var58 /* : nullable Bool */;
1406 val* var59 /* : String */;
1407 val* var_ /* var : Array[String] */;
1408 val* var60 /* : IndexedIterator[nullable Object] */;
1409 val* var_61 /* var : IndexedIterator[String] */;
1410 short int var62 /* : Bool */;
1411 val* var63 /* : nullable Object */;
1412 val* var_incl /* var incl: String */;
1413 val* var65 /* : NativeArray[String] */;
1414 static val* varonce64;
1415 static val* varonce66;
1416 val* var67 /* : String */;
1417 char* var68 /* : CString */;
1418 val* var69 /* : String */;
1419 val* var70 /* : nullable Int */;
1420 val* var71 /* : nullable Int */;
1421 val* var72 /* : nullable Bool */;
1422 val* var73 /* : nullable Bool */;
1423 static val* varonce74;
1424 val* var75 /* : String */;
1425 char* var76 /* : CString */;
1426 val* var77 /* : String */;
1427 val* var78 /* : nullable Int */;
1428 val* var79 /* : nullable Int */;
1429 val* var80 /* : nullable Bool */;
1430 val* var81 /* : nullable Bool */;
1431 val* var82 /* : String */;
1432 static val* varonce83;
1433 val* var84 /* : String */;
1434 char* var85 /* : CString */;
1435 val* var86 /* : String */;
1436 val* var87 /* : nullable Int */;
1437 val* var88 /* : nullable Int */;
1438 val* var89 /* : nullable Bool */;
1439 val* var90 /* : nullable Bool */;
1440 var_mmodule = p0;
1441 var_file = p1;
1442 var_includes = p2;
1443 var_guard = p3;
1444 var = NEW_core__FileWriter(&type_core__FileWriter);
1445 {
1446 core___core__FileWriter___open(var, var_file); /* Direct call file$FileWriter$open on <var:FileWriter>*/
1447 }
1448 var_stream = var;
1449 if (unlikely(varonce==NULL)) {
1450 var1 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1451 if (likely(varonce2!=NULL)) {
1452 var3 = varonce2;
1453 } else {
1454 var4 = "/*\n\tExtern implementation of Nit module ";
1455 var6 = (val*)(40l<<2|1);
1456 var7 = (val*)(40l<<2|1);
1457 var8 = (val*)((long)(0)<<2|3);
1458 var9 = (val*)((long)(0)<<2|3);
1459 var5 = core__flat___CString___to_s_unsafe(var4, var6, var7, var8, var9);
1460 var3 = var5;
1461 varonce2 = var3;
1462 }
1463 ((struct instance_core__NativeArray*)var1)->values[0]=var3;
1464 if (likely(varonce10!=NULL)) {
1465 var11 = varonce10;
1466 } else {
1467 var12 = "\n*/\n";
1468 var14 = (val*)(4l<<2|1);
1469 var15 = (val*)(4l<<2|1);
1470 var16 = (val*)((long)(0)<<2|3);
1471 var17 = (val*)((long)(0)<<2|3);
1472 var13 = core__flat___CString___to_s_unsafe(var12, var14, var15, var16, var17);
1473 var11 = var13;
1474 varonce10 = var11;
1475 }
1476 ((struct instance_core__NativeArray*)var1)->values[2]=var11;
1477 } else {
1478 var1 = varonce;
1479 varonce = NULL;
1480 }
1481 {
1482 { /* Inline mmodule$MModule$name (var_mmodule) on <var_mmodule:MModule> */
1483 var20 = var_mmodule->attrs[COLOR_nitc__mmodule__MModule___name].val; /* _name on <var_mmodule:MModule> */
1484 if (unlikely(var20 == NULL)) {
1485 if(catchStack.cursor >= 0){
1486 longjmp(catchStack.envs[catchStack.cursor], 1);
1487 }
1488 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1489 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__mmodule, 100);
1490 fatal_exit(1);
1491 }
1492 var18 = var20;
1493 RET_LABEL19:(void)0;
1494 }
1495 }
1496 ((struct instance_core__NativeArray*)var1)->values[1]=var18;
1497 {
1498 var21 = ((val*(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
1499 }
1500 varonce = var1;
1501 var_module_info = var21;
1502 {
1503 core___core__FileWriter___core__stream__Writer__write(var_stream, var_module_info); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
1504 }
1505 if (unlikely(varonce22==NULL)) {
1506 var23 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1507 if (likely(varonce24!=NULL)) {
1508 var25 = varonce24;
1509 } else {
1510 var26 = "#ifndef ";
1511 var28 = (val*)(8l<<2|1);
1512 var29 = (val*)(8l<<2|1);
1513 var30 = (val*)((long)(0)<<2|3);
1514 var31 = (val*)((long)(0)<<2|3);
1515 var27 = core__flat___CString___to_s_unsafe(var26, var28, var29, var30, var31);
1516 var25 = var27;
1517 varonce24 = var25;
1518 }
1519 ((struct instance_core__NativeArray*)var23)->values[0]=var25;
1520 if (likely(varonce32!=NULL)) {
1521 var33 = varonce32;
1522 } else {
1523 var34 = "\n";
1524 var36 = (val*)(1l<<2|1);
1525 var37 = (val*)(1l<<2|1);
1526 var38 = (val*)((long)(0)<<2|3);
1527 var39 = (val*)((long)(0)<<2|3);
1528 var35 = core__flat___CString___to_s_unsafe(var34, var36, var37, var38, var39);
1529 var33 = var35;
1530 varonce32 = var33;
1531 }
1532 ((struct instance_core__NativeArray*)var23)->values[2]=var33;
1533 } else {
1534 var23 = varonce22;
1535 varonce22 = NULL;
1536 }
1537 ((struct instance_core__NativeArray*)var23)->values[1]=var_guard;
1538 {
1539 var40 = ((val*(*)(val* self))(var23->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var23); /* native_to_s on <var23:NativeArray[String]>*/
1540 }
1541 varonce22 = var23;
1542 {
1543 core___core__FileWriter___core__stream__Writer__write(var_stream, var40); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
1544 }
1545 if (unlikely(varonce41==NULL)) {
1546 var42 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1547 if (likely(varonce43!=NULL)) {
1548 var44 = varonce43;
1549 } else {
1550 var45 = "#define ";
1551 var47 = (val*)(8l<<2|1);
1552 var48 = (val*)(8l<<2|1);
1553 var49 = (val*)((long)(0)<<2|3);
1554 var50 = (val*)((long)(0)<<2|3);
1555 var46 = core__flat___CString___to_s_unsafe(var45, var47, var48, var49, var50);
1556 var44 = var46;
1557 varonce43 = var44;
1558 }
1559 ((struct instance_core__NativeArray*)var42)->values[0]=var44;
1560 if (likely(varonce51!=NULL)) {
1561 var52 = varonce51;
1562 } else {
1563 var53 = "\n\n";
1564 var55 = (val*)(2l<<2|1);
1565 var56 = (val*)(2l<<2|1);
1566 var57 = (val*)((long)(0)<<2|3);
1567 var58 = (val*)((long)(0)<<2|3);
1568 var54 = core__flat___CString___to_s_unsafe(var53, var55, var56, var57, var58);
1569 var52 = var54;
1570 varonce51 = var52;
1571 }
1572 ((struct instance_core__NativeArray*)var42)->values[2]=var52;
1573 } else {
1574 var42 = varonce41;
1575 varonce41 = NULL;
1576 }
1577 ((struct instance_core__NativeArray*)var42)->values[1]=var_guard;
1578 {
1579 var59 = ((val*(*)(val* self))(var42->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var42); /* native_to_s on <var42:NativeArray[String]>*/
1580 }
1581 varonce41 = var42;
1582 {
1583 core___core__FileWriter___core__stream__Writer__write(var_stream, var59); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
1584 }
1585 var_ = var_includes;
1586 {
1587 var60 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
1588 }
1589 var_61 = var60;
1590 for(;;) {
1591 {
1592 var62 = ((short int(*)(val* self))((((long)var_61&3)?class_info[((long)var_61&3)]:var_61->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_61); /* is_ok on <var_61:IndexedIterator[String]>*/
1593 }
1594 if (var62){
1595 } else {
1596 goto BREAK_label;
1597 }
1598 {
1599 var63 = ((val*(*)(val* self))((((long)var_61&3)?class_info[((long)var_61&3)]:var_61->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_61); /* item on <var_61:IndexedIterator[String]>*/
1600 }
1601 var_incl = var63;
1602 if (unlikely(varonce64==NULL)) {
1603 var65 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1604 if (likely(varonce66!=NULL)) {
1605 var67 = varonce66;
1606 } else {
1607 var68 = "#include ";
1608 var70 = (val*)(9l<<2|1);
1609 var71 = (val*)(9l<<2|1);
1610 var72 = (val*)((long)(0)<<2|3);
1611 var73 = (val*)((long)(0)<<2|3);
1612 var69 = core__flat___CString___to_s_unsafe(var68, var70, var71, var72, var73);
1613 var67 = var69;
1614 varonce66 = var67;
1615 }
1616 ((struct instance_core__NativeArray*)var65)->values[0]=var67;
1617 if (likely(varonce74!=NULL)) {
1618 var75 = varonce74;
1619 } else {
1620 var76 = "\n";
1621 var78 = (val*)(1l<<2|1);
1622 var79 = (val*)(1l<<2|1);
1623 var80 = (val*)((long)(0)<<2|3);
1624 var81 = (val*)((long)(0)<<2|3);
1625 var77 = core__flat___CString___to_s_unsafe(var76, var78, var79, var80, var81);
1626 var75 = var77;
1627 varonce74 = var75;
1628 }
1629 ((struct instance_core__NativeArray*)var65)->values[2]=var75;
1630 } else {
1631 var65 = varonce64;
1632 varonce64 = NULL;
1633 }
1634 ((struct instance_core__NativeArray*)var65)->values[1]=var_incl;
1635 {
1636 var82 = ((val*(*)(val* self))(var65->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var65); /* native_to_s on <var65:NativeArray[String]>*/
1637 }
1638 varonce64 = var65;
1639 {
1640 core___core__FileWriter___core__stream__Writer__write(var_stream, var82); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
1641 }
1642 {
1643 ((void(*)(val* self))((((long)var_61&3)?class_info[((long)var_61&3)]:var_61->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_61); /* next on <var_61:IndexedIterator[String]>*/
1644 }
1645 }
1646 BREAK_label: (void)0;
1647 {
1648 ((void(*)(val* self))((((long)var_61&3)?class_info[((long)var_61&3)]:var_61->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_61); /* finish on <var_61:IndexedIterator[String]>*/
1649 }
1650 {
1651 nitc___nitc__CCompilationUnit___compile_header_core(self, var_stream); /* Direct call c_tools$CCompilationUnit$compile_header_core on <self:CCompilationUnit>*/
1652 }
1653 if (likely(varonce83!=NULL)) {
1654 var84 = varonce83;
1655 } else {
1656 var85 = "#endif\n";
1657 var87 = (val*)(7l<<2|1);
1658 var88 = (val*)(7l<<2|1);
1659 var89 = (val*)((long)(0)<<2|3);
1660 var90 = (val*)((long)(0)<<2|3);
1661 var86 = core__flat___CString___to_s_unsafe(var85, var87, var88, var89, var90);
1662 var84 = var86;
1663 varonce83 = var84;
1664 }
1665 {
1666 core___core__FileWriter___core__stream__Writer__write(var_stream, var84); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
1667 }
1668 {
1669 core___core__FileWriter___core__stream__Stream__close(var_stream); /* Direct call file$FileWriter$close on <var_stream:FileWriter>*/
1670 }
1671 RET_LABEL:;
1672 }
1673 /* method light_ffi_base$CCompilationUnit$write_body_to_file for (self: CCompilationUnit, MModule, String, Array[String]) */
1674 void nitc__light_ffi_base___CCompilationUnit___write_body_to_file(val* self, val* p0, val* p1, val* p2) {
1675 val* var_mmodule /* var mmodule: MModule */;
1676 val* var_file /* var file: String */;
1677 val* var_includes /* var includes: Array[String] */;
1678 val* var /* : FileWriter */;
1679 val* var_stream /* var stream: FileWriter */;
1680 val* var1 /* : NativeArray[String] */;
1681 static val* varonce;
1682 static val* varonce2;
1683 val* var3 /* : String */;
1684 char* var4 /* : CString */;
1685 val* var5 /* : String */;
1686 val* var6 /* : nullable Int */;
1687 val* var7 /* : nullable Int */;
1688 val* var8 /* : nullable Bool */;
1689 val* var9 /* : nullable Bool */;
1690 static val* varonce10;
1691 val* var11 /* : String */;
1692 char* var12 /* : CString */;
1693 val* var13 /* : String */;
1694 val* var14 /* : nullable Int */;
1695 val* var15 /* : nullable Int */;
1696 val* var16 /* : nullable Bool */;
1697 val* var17 /* : nullable Bool */;
1698 val* var18 /* : String */;
1699 val* var20 /* : String */;
1700 val* var21 /* : String */;
1701 val* var_module_info /* var module_info: String */;
1702 val* var_ /* var : Array[String] */;
1703 val* var22 /* : IndexedIterator[nullable Object] */;
1704 val* var_23 /* var : IndexedIterator[String] */;
1705 short int var24 /* : Bool */;
1706 val* var25 /* : nullable Object */;
1707 val* var_incl /* var incl: String */;
1708 val* var27 /* : NativeArray[String] */;
1709 static val* varonce26;
1710 static val* varonce28;
1711 val* var29 /* : String */;
1712 char* var30 /* : CString */;
1713 val* var31 /* : String */;
1714 val* var32 /* : nullable Int */;
1715 val* var33 /* : nullable Int */;
1716 val* var34 /* : nullable Bool */;
1717 val* var35 /* : nullable Bool */;
1718 static val* varonce36;
1719 val* var37 /* : String */;
1720 char* var38 /* : CString */;
1721 val* var39 /* : String */;
1722 val* var40 /* : nullable Int */;
1723 val* var41 /* : nullable Int */;
1724 val* var42 /* : nullable Bool */;
1725 val* var43 /* : nullable Bool */;
1726 val* var44 /* : String */;
1727 var_mmodule = p0;
1728 var_file = p1;
1729 var_includes = p2;
1730 var = NEW_core__FileWriter(&type_core__FileWriter);
1731 {
1732 core___core__FileWriter___open(var, var_file); /* Direct call file$FileWriter$open on <var:FileWriter>*/
1733 }
1734 var_stream = var;
1735 if (unlikely(varonce==NULL)) {
1736 var1 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1737 if (likely(varonce2!=NULL)) {
1738 var3 = varonce2;
1739 } else {
1740 var4 = "/*\n\tExtern implementation of Nit module ";
1741 var6 = (val*)(40l<<2|1);
1742 var7 = (val*)(40l<<2|1);
1743 var8 = (val*)((long)(0)<<2|3);
1744 var9 = (val*)((long)(0)<<2|3);
1745 var5 = core__flat___CString___to_s_unsafe(var4, var6, var7, var8, var9);
1746 var3 = var5;
1747 varonce2 = var3;
1748 }
1749 ((struct instance_core__NativeArray*)var1)->values[0]=var3;
1750 if (likely(varonce10!=NULL)) {
1751 var11 = varonce10;
1752 } else {
1753 var12 = "\n*/\n";
1754 var14 = (val*)(4l<<2|1);
1755 var15 = (val*)(4l<<2|1);
1756 var16 = (val*)((long)(0)<<2|3);
1757 var17 = (val*)((long)(0)<<2|3);
1758 var13 = core__flat___CString___to_s_unsafe(var12, var14, var15, var16, var17);
1759 var11 = var13;
1760 varonce10 = var11;
1761 }
1762 ((struct instance_core__NativeArray*)var1)->values[2]=var11;
1763 } else {
1764 var1 = varonce;
1765 varonce = NULL;
1766 }
1767 {
1768 { /* Inline mmodule$MModule$name (var_mmodule) on <var_mmodule:MModule> */
1769 var20 = var_mmodule->attrs[COLOR_nitc__mmodule__MModule___name].val; /* _name on <var_mmodule:MModule> */
1770 if (unlikely(var20 == NULL)) {
1771 if(catchStack.cursor >= 0){
1772 longjmp(catchStack.envs[catchStack.cursor], 1);
1773 }
1774 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1775 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__mmodule, 100);
1776 fatal_exit(1);
1777 }
1778 var18 = var20;
1779 RET_LABEL19:(void)0;
1780 }
1781 }
1782 ((struct instance_core__NativeArray*)var1)->values[1]=var18;
1783 {
1784 var21 = ((val*(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
1785 }
1786 varonce = var1;
1787 var_module_info = var21;
1788 {
1789 core___core__FileWriter___core__stream__Writer__write(var_stream, var_module_info); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
1790 }
1791 var_ = var_includes;
1792 {
1793 var22 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
1794 }
1795 var_23 = var22;
1796 for(;;) {
1797 {
1798 var24 = ((short int(*)(val* self))((((long)var_23&3)?class_info[((long)var_23&3)]:var_23->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_23); /* is_ok on <var_23:IndexedIterator[String]>*/
1799 }
1800 if (var24){
1801 } else {
1802 goto BREAK_label;
1803 }
1804 {
1805 var25 = ((val*(*)(val* self))((((long)var_23&3)?class_info[((long)var_23&3)]:var_23->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_23); /* item on <var_23:IndexedIterator[String]>*/
1806 }
1807 var_incl = var25;
1808 if (unlikely(varonce26==NULL)) {
1809 var27 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1810 if (likely(varonce28!=NULL)) {
1811 var29 = varonce28;
1812 } else {
1813 var30 = "#include ";
1814 var32 = (val*)(9l<<2|1);
1815 var33 = (val*)(9l<<2|1);
1816 var34 = (val*)((long)(0)<<2|3);
1817 var35 = (val*)((long)(0)<<2|3);
1818 var31 = core__flat___CString___to_s_unsafe(var30, var32, var33, var34, var35);
1819 var29 = var31;
1820 varonce28 = var29;
1821 }
1822 ((struct instance_core__NativeArray*)var27)->values[0]=var29;
1823 if (likely(varonce36!=NULL)) {
1824 var37 = varonce36;
1825 } else {
1826 var38 = "\n";
1827 var40 = (val*)(1l<<2|1);
1828 var41 = (val*)(1l<<2|1);
1829 var42 = (val*)((long)(0)<<2|3);
1830 var43 = (val*)((long)(0)<<2|3);
1831 var39 = core__flat___CString___to_s_unsafe(var38, var40, var41, var42, var43);
1832 var37 = var39;
1833 varonce36 = var37;
1834 }
1835 ((struct instance_core__NativeArray*)var27)->values[2]=var37;
1836 } else {
1837 var27 = varonce26;
1838 varonce26 = NULL;
1839 }
1840 ((struct instance_core__NativeArray*)var27)->values[1]=var_incl;
1841 {
1842 var44 = ((val*(*)(val* self))(var27->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var27); /* native_to_s on <var27:NativeArray[String]>*/
1843 }
1844 varonce26 = var27;
1845 {
1846 core___core__FileWriter___core__stream__Writer__write(var_stream, var44); /* Direct call file$FileWriter$write on <var_stream:FileWriter>*/
1847 }
1848 {
1849 ((void(*)(val* self))((((long)var_23&3)?class_info[((long)var_23&3)]:var_23->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_23); /* next on <var_23:IndexedIterator[String]>*/
1850 }
1851 }
1852 BREAK_label: (void)0;
1853 {
1854 ((void(*)(val* self))((((long)var_23&3)?class_info[((long)var_23&3)]:var_23->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_23); /* finish on <var_23:IndexedIterator[String]>*/
1855 }
1856 {
1857 nitc___nitc__CCompilationUnit___compile_body_core(self, var_stream); /* Direct call c_tools$CCompilationUnit$compile_body_core on <self:CCompilationUnit>*/
1858 }
1859 {
1860 core___core__FileWriter___core__stream__Stream__close(var_stream); /* Direct call file$FileWriter$close on <var_stream:FileWriter>*/
1861 }
1862 RET_LABEL:;
1863 }
1864 /* method light_ffi_base$ForeignType$ctype for (self: ForeignType): String */
1865 val* nitc___nitc__ForeignType___ctype(val* self) {
1866 val* var /* : String */;
1867 static val* varonce;
1868 val* var1 /* : String */;
1869 char* var2 /* : CString */;
1870 val* var3 /* : String */;
1871 val* var4 /* : nullable Int */;
1872 val* var5 /* : nullable Int */;
1873 val* var6 /* : nullable Bool */;
1874 val* var7 /* : nullable Bool */;
1875 if (likely(varonce!=NULL)) {
1876 var1 = varonce;
1877 } else {
1878 var2 = "void*";
1879 var4 = (val*)(5l<<2|1);
1880 var5 = (val*)(5l<<2|1);
1881 var6 = (val*)((long)(0)<<2|3);
1882 var7 = (val*)((long)(0)<<2|3);
1883 var3 = core__flat___CString___to_s_unsafe(var2, var4, var5, var6, var7);
1884 var1 = var3;
1885 varonce = var1;
1886 }
1887 var = var1;
1888 goto RET_LABEL;
1889 RET_LABEL:;
1890 return var;
1891 }