README: document nit_env.sh
[nit.git] / c_src / nit__light_ffi_base.sep.1.c
1 #include "nit__light_ffi_base.sep.0.h"
2 /* method light_ffi_base#ToolContext#ffi_language_assignation_phase for (self: ToolContext): Phase */
3 val* nit__light_ffi_base___ToolContext___ffi_language_assignation_phase(val* self) {
4 val* var /* : Phase */;
5 val* var1 /* : Phase */;
6 var1 = self->attrs[COLOR_nit__light_ffi_base__ToolContext___ffi_language_assignation_phase].val; /* _ffi_language_assignation_phase on <self:ToolContext> */
7 if (unlikely(var1 == NULL)) {
8 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_language_assignation_phase");
9 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 26);
10 fatal_exit(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method light_ffi_base#FFILanguageAssignationPhase#languages for (self: FFILanguageAssignationPhase): Array[FFILanguage] */
17 val* nit___nit__FFILanguageAssignationPhase___languages(val* self) {
18 val* var /* : Array[FFILanguage] */;
19 val* var1 /* : Array[FFILanguage] */;
20 var1 = self->attrs[COLOR_nit__light_ffi_base__FFILanguageAssignationPhase___languages].val; /* _languages on <self:FFILanguageAssignationPhase> */
21 if (unlikely(var1 == NULL)) {
22 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _languages");
23 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 36);
24 fatal_exit(1);
25 }
26 var = var1;
27 RET_LABEL:;
28 return var;
29 }
30 /* method light_ffi_base#FFILanguageAssignationPhase#process_nmodule for (self: FFILanguageAssignationPhase, AModule) */
31 void nit___nit__FFILanguageAssignationPhase___nit__phase__Phase__process_nmodule(val* self, val* p0) {
32 val* var_nmodule /* var nmodule: AModule */;
33 val* var /* : ANodes[AExternCodeBlock] */;
34 val* var2 /* : ANodes[AExternCodeBlock] */;
35 val* var_ /* var : ANodes[AExternCodeBlock] */;
36 val* var3 /* : Iterator[ANode] */;
37 val* var_4 /* var : Iterator[AExternCodeBlock] */;
38 short int var5 /* : Bool */;
39 val* var6 /* : nullable Object */;
40 val* var_block /* var block: AExternCodeBlock */;
41 var_nmodule = p0;
42 {
43 { /* Inline parser_nodes#AModule#n_extern_code_blocks (var_nmodule) on <var_nmodule:AModule> */
44 var2 = var_nmodule->attrs[COLOR_nit__parser_nodes__AModule___n_extern_code_blocks].val; /* _n_extern_code_blocks on <var_nmodule:AModule> */
45 if (unlikely(var2 == NULL)) {
46 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_extern_code_blocks");
47 PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1093);
48 fatal_exit(1);
49 }
50 var = var2;
51 RET_LABEL1:(void)0;
52 }
53 }
54 var_ = var;
55 {
56 var3 = nit___nit__ANodes___standard__abstract_collection__Collection__iterator(var_);
57 }
58 var_4 = var3;
59 for(;;) {
60 {
61 var5 = ((short int(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_standard__abstract_collection__Iterator__is_ok]))(var_4); /* is_ok on <var_4:Iterator[AExternCodeBlock]>*/
62 }
63 if (var5){
64 {
65 var6 = ((val*(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_standard__abstract_collection__Iterator__item]))(var_4); /* item on <var_4:Iterator[AExternCodeBlock]>*/
66 }
67 var_block = var6;
68 {
69 nit___nit__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var_block); /* Direct call light_ffi_base#FFILanguageAssignationPhase#verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
70 }
71 {
72 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_standard__abstract_collection__Iterator__next]))(var_4); /* next on <var_4:Iterator[AExternCodeBlock]>*/
73 }
74 } else {
75 goto BREAK_label;
76 }
77 }
78 BREAK_label: (void)0;
79 {
80 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_standard__abstract_collection__Iterator__finish]))(var_4); /* finish on <var_4:Iterator[AExternCodeBlock]>*/
81 }
82 RET_LABEL:;
83 }
84 /* method light_ffi_base#FFILanguageAssignationPhase#process_npropdef for (self: FFILanguageAssignationPhase, APropdef) */
85 void nit___nit__FFILanguageAssignationPhase___nit__phase__Phase__process_npropdef(val* self, val* p0) {
86 val* var_npropdef /* var npropdef: APropdef */;
87 short int var /* : Bool */;
88 int cltype;
89 int idtype;
90 val* var1 /* : nullable AExternCodeBlock */;
91 val* var3 /* : nullable AExternCodeBlock */;
92 val* var_code_block /* var code_block: nullable AExternCodeBlock */;
93 short int var4 /* : Bool */;
94 short int var5 /* : Bool */;
95 val* var_other /* var other: nullable Object */;
96 short int var7 /* : Bool */;
97 short int var8 /* : Bool */;
98 var_npropdef = p0;
99 /* <var_npropdef:APropdef> isa AMethPropdef */
100 cltype = type_nit__AMethPropdef.color;
101 idtype = type_nit__AMethPropdef.id;
102 if(cltype >= var_npropdef->type->table_size) {
103 var = 0;
104 } else {
105 var = var_npropdef->type->type_table[cltype] == idtype;
106 }
107 if (var){
108 {
109 { /* Inline parser_nodes#AMethPropdef#n_extern_code_block (var_npropdef) on <var_npropdef:APropdef(AMethPropdef)> */
110 var3 = var_npropdef->attrs[COLOR_nit__parser_nodes__AMethPropdef___n_extern_code_block].val; /* _n_extern_code_block on <var_npropdef:APropdef(AMethPropdef)> */
111 var1 = var3;
112 RET_LABEL2:(void)0;
113 }
114 }
115 var_code_block = var1;
116 if (var_code_block == NULL) {
117 var4 = 0; /* is null */
118 } else {
119 var4 = 1; /* arg is null and recv is not */
120 }
121 if (0) {
122 { /* Inline kernel#Object#!= (var_code_block,((val*)NULL)) on <var_code_block:nullable AExternCodeBlock> */
123 var_other = ((val*)NULL);
124 {
125 var7 = ((short int(*)(val* self, val* p0))(var_code_block->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_code_block, var_other); /* == on <var_code_block:nullable AExternCodeBlock(AExternCodeBlock)>*/
126 }
127 var8 = !var7;
128 var5 = var8;
129 goto RET_LABEL6;
130 RET_LABEL6:(void)0;
131 }
132 var4 = var5;
133 }
134 if (var4){
135 {
136 nit___nit__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var_code_block); /* Direct call light_ffi_base#FFILanguageAssignationPhase#verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
137 }
138 } else {
139 }
140 } else {
141 }
142 RET_LABEL:;
143 }
144 /* method light_ffi_base#FFILanguageAssignationPhase#process_nclassdef for (self: FFILanguageAssignationPhase, AClassdef) */
145 void nit___nit__FFILanguageAssignationPhase___nit__phase__Phase__process_nclassdef(val* self, val* p0) {
146 val* var_nclassdef /* var nclassdef: AClassdef */;
147 short int var /* : Bool */;
148 short int var1 /* : Bool */;
149 int cltype;
150 int idtype;
151 short int var_ /* var : Bool */;
152 val* var2 /* : nullable AExternCodeBlock */;
153 val* var4 /* : nullable AExternCodeBlock */;
154 short int var5 /* : Bool */;
155 short int var6 /* : Bool */;
156 val* var_other /* var other: nullable Object */;
157 short int var8 /* : Bool */;
158 short int var9 /* : Bool */;
159 val* var10 /* : nullable AExternCodeBlock */;
160 val* var12 /* : nullable AExternCodeBlock */;
161 var_nclassdef = p0;
162 /* <var_nclassdef:AClassdef> isa AStdClassdef */
163 cltype = type_nit__AStdClassdef.color;
164 idtype = type_nit__AStdClassdef.id;
165 if(cltype >= var_nclassdef->type->table_size) {
166 var1 = 0;
167 } else {
168 var1 = var_nclassdef->type->type_table[cltype] == idtype;
169 }
170 var_ = var1;
171 if (var1){
172 {
173 { /* Inline parser_nodes#AStdClassdef#n_extern_code_block (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
174 var4 = var_nclassdef->attrs[COLOR_nit__parser_nodes__AStdClassdef___n_extern_code_block].val; /* _n_extern_code_block on <var_nclassdef:AClassdef(AStdClassdef)> */
175 var2 = var4;
176 RET_LABEL3:(void)0;
177 }
178 }
179 if (var2 == NULL) {
180 var5 = 0; /* is null */
181 } else {
182 var5 = 1; /* arg is null and recv is not */
183 }
184 if (0) {
185 { /* Inline kernel#Object#!= (var2,((val*)NULL)) on <var2:nullable AExternCodeBlock> */
186 var_other = ((val*)NULL);
187 {
188 var8 = ((short int(*)(val* self, val* p0))(var2->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var2, var_other); /* == on <var2:nullable AExternCodeBlock(AExternCodeBlock)>*/
189 }
190 var9 = !var8;
191 var6 = var9;
192 goto RET_LABEL7;
193 RET_LABEL7:(void)0;
194 }
195 var5 = var6;
196 }
197 var = var5;
198 } else {
199 var = var_;
200 }
201 if (var){
202 {
203 { /* Inline parser_nodes#AStdClassdef#n_extern_code_block (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
204 var12 = var_nclassdef->attrs[COLOR_nit__parser_nodes__AStdClassdef___n_extern_code_block].val; /* _n_extern_code_block on <var_nclassdef:AClassdef(AStdClassdef)> */
205 var10 = var12;
206 RET_LABEL11:(void)0;
207 }
208 }
209 if (unlikely(var10 == NULL)) {
210 PRINT_ERROR("Runtime error: %s", "Cast failed");
211 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 59);
212 fatal_exit(1);
213 }
214 {
215 nit___nit__FFILanguageAssignationPhase___verify_foreign_code_on_node(self, var10); /* Direct call light_ffi_base#FFILanguageAssignationPhase#verify_foreign_code_on_node on <self:FFILanguageAssignationPhase>*/
216 }
217 } else {
218 }
219 RET_LABEL:;
220 }
221 /* method light_ffi_base#FFILanguageAssignationPhase#verify_foreign_code_on_node for (self: FFILanguageAssignationPhase, AExternCodeBlock) */
222 void nit___nit__FFILanguageAssignationPhase___verify_foreign_code_on_node(val* self, val* p0) {
223 val* var_n /* var n: AExternCodeBlock */;
224 short int var_found /* var found: Bool */;
225 val* var /* : Array[FFILanguage] */;
226 val* var2 /* : Array[FFILanguage] */;
227 val* var_ /* var : Array[FFILanguage] */;
228 val* var3 /* : ArrayIterator[nullable Object] */;
229 val* var_4 /* var : ArrayIterator[FFILanguage] */;
230 short int var5 /* : Bool */;
231 val* var6 /* : nullable Object */;
232 val* var_v /* var v: FFILanguage */;
233 short int var7 /* : Bool */;
234 short int var_identified /* var identified: Bool */;
235 short int var8 /* : Bool */;
236 short int var_9 /* var : Bool */;
237 val* var10 /* : ToolContext */;
238 val* var12 /* : ToolContext */;
239 val* var13 /* : Location */;
240 val* var15 /* : Location */;
241 static val* varonce;
242 val* var16 /* : String */;
243 char* var17 /* : NativeString */;
244 val* var18 /* : FlatString */;
245 val* var19 /* : Message */;
246 short int var21 /* : Bool */;
247 val* var22 /* : ToolContext */;
248 val* var24 /* : ToolContext */;
249 val* var25 /* : Location */;
250 val* var27 /* : Location */;
251 static val* varonce28;
252 val* var29 /* : String */;
253 char* var30 /* : NativeString */;
254 val* var31 /* : FlatString */;
255 val* var32 /* : Message */;
256 var_n = p0;
257 var_found = 0;
258 {
259 { /* Inline light_ffi_base#FFILanguageAssignationPhase#languages (self) on <self:FFILanguageAssignationPhase> */
260 var2 = self->attrs[COLOR_nit__light_ffi_base__FFILanguageAssignationPhase___languages].val; /* _languages on <self:FFILanguageAssignationPhase> */
261 if (unlikely(var2 == NULL)) {
262 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _languages");
263 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 36);
264 fatal_exit(1);
265 }
266 var = var2;
267 RET_LABEL1:(void)0;
268 }
269 }
270 var_ = var;
271 {
272 var3 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_);
273 }
274 var_4 = var3;
275 for(;;) {
276 {
277 var5 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_4);
278 }
279 if (var5){
280 {
281 var6 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_4);
282 }
283 var_v = var6;
284 {
285 var7 = nit___nit__CLanguage___nit__light_ffi_base__FFILanguage__identify_language(var_v, var_n);
286 }
287 var_identified = var7;
288 if (var_identified){
289 var_9 = var_found;
290 if (var_found){
291 var8 = var_identified;
292 } else {
293 var8 = var_9;
294 }
295 if (var8){
296 {
297 { /* Inline phase#Phase#toolcontext (self) on <self:FFILanguageAssignationPhase> */
298 var12 = self->attrs[COLOR_nit__phase__Phase___toolcontext].val; /* _toolcontext on <self:FFILanguageAssignationPhase> */
299 if (unlikely(var12 == NULL)) {
300 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
301 PRINT_ERROR(" (%s:%d)\n", FILE_nit__phase, 200);
302 fatal_exit(1);
303 }
304 var10 = var12;
305 RET_LABEL11:(void)0;
306 }
307 }
308 {
309 { /* Inline parser_nodes#ANode#location (var_n) on <var_n:AExternCodeBlock> */
310 var15 = var_n->attrs[COLOR_nit__parser_nodes__ANode___location].val; /* _location on <var_n:AExternCodeBlock> */
311 if (unlikely(var15 == NULL)) {
312 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
313 PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 24);
314 fatal_exit(1);
315 }
316 var13 = var15;
317 RET_LABEL14:(void)0;
318 }
319 }
320 if (likely(varonce!=NULL)) {
321 var16 = varonce;
322 } else {
323 var17 = "FFI Error: two languages identified as possible handlers.";
324 var18 = standard___standard__NativeString___to_s_with_length(var17, 57l);
325 var16 = var18;
326 varonce = var16;
327 }
328 {
329 var19 = nit___nit__ToolContext___error(var10, var13, var16);
330 }
331 } else {
332 }
333 {
334 { /* Inline light_ffi_base#AExternCodeBlock#language= (var_n,var_v) on <var_n:AExternCodeBlock> */
335 var_n->attrs[COLOR_nit__light_ffi_base__AExternCodeBlock___language].val = var_v; /* _language on <var_n:AExternCodeBlock> */
336 RET_LABEL20:(void)0;
337 }
338 }
339 var_found = 1;
340 } else {
341 }
342 {
343 standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_4); /* Direct call array#ArrayIterator#next on <var_4:ArrayIterator[FFILanguage]>*/
344 }
345 } else {
346 goto BREAK_label;
347 }
348 }
349 BREAK_label: (void)0;
350 {
351 standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_4); /* Direct call array#ArrayIterator#finish on <var_4:ArrayIterator[FFILanguage]>*/
352 }
353 var21 = !var_found;
354 if (var21){
355 {
356 { /* Inline phase#Phase#toolcontext (self) on <self:FFILanguageAssignationPhase> */
357 var24 = self->attrs[COLOR_nit__phase__Phase___toolcontext].val; /* _toolcontext on <self:FFILanguageAssignationPhase> */
358 if (unlikely(var24 == NULL)) {
359 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
360 PRINT_ERROR(" (%s:%d)\n", FILE_nit__phase, 200);
361 fatal_exit(1);
362 }
363 var22 = var24;
364 RET_LABEL23:(void)0;
365 }
366 }
367 {
368 { /* Inline parser_nodes#ANode#location (var_n) on <var_n:AExternCodeBlock> */
369 var27 = var_n->attrs[COLOR_nit__parser_nodes__ANode___location].val; /* _location on <var_n:AExternCodeBlock> */
370 if (unlikely(var27 == NULL)) {
371 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
372 PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 24);
373 fatal_exit(1);
374 }
375 var25 = var27;
376 RET_LABEL26:(void)0;
377 }
378 }
379 if (likely(varonce28!=NULL)) {
380 var29 = varonce28;
381 } else {
382 var30 = "FFI Error: unsupported language.";
383 var31 = standard___standard__NativeString___to_s_with_length(var30, 32l);
384 var29 = var31;
385 varonce28 = var29;
386 }
387 {
388 var32 = nit___nit__ToolContext___error(var22, var25, var29);
389 }
390 } else {
391 }
392 RET_LABEL:;
393 }
394 /* method light_ffi_base#MModule#ffi_files for (self: MModule): Array[ExternFile] */
395 val* nit__light_ffi_base___MModule___ffi_files(val* self) {
396 val* var /* : Array[ExternFile] */;
397 val* var1 /* : Array[ExternFile] */;
398 var1 = self->attrs[COLOR_nit__light_ffi_base__MModule___ffi_files].val; /* _ffi_files on <self:MModule> */
399 if (unlikely(var1 == NULL)) {
400 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_files");
401 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 82);
402 fatal_exit(1);
403 }
404 var = var1;
405 RET_LABEL:;
406 return var;
407 }
408 /* method light_ffi_base#AExternCodeBlock#language_name for (self: AExternCodeBlock): nullable String */
409 val* nit__light_ffi_base___AExternCodeBlock___language_name(val* self) {
410 val* var /* : nullable String */;
411 val* var1 /* : nullable AInLanguage */;
412 val* var3 /* : nullable AInLanguage */;
413 short int var4 /* : Bool */;
414 short int var5 /* : Bool */;
415 val* var_other /* var other: nullable Object */;
416 short int var7 /* : Bool */;
417 short int var9 /* : Bool */;
418 val* var10 /* : nullable AInLanguage */;
419 val* var12 /* : nullable AInLanguage */;
420 val* var13 /* : TString */;
421 val* var15 /* : TString */;
422 val* var16 /* : String */;
423 {
424 { /* Inline parser_nodes#AExternCodeBlock#n_in_language (self) on <self:AExternCodeBlock> */
425 var3 = self->attrs[COLOR_nit__parser_nodes__AExternCodeBlock___n_in_language].val; /* _n_in_language on <self:AExternCodeBlock> */
426 var1 = var3;
427 RET_LABEL2:(void)0;
428 }
429 }
430 if (var1 == NULL) {
431 var4 = 1; /* is null */
432 } else {
433 var4 = 0; /* arg is null but recv is not */
434 }
435 if (0) {
436 { /* Inline kernel#Object#== (var1,((val*)NULL)) on <var1:nullable AInLanguage> */
437 var_other = ((val*)NULL);
438 {
439 { /* Inline kernel#Object#is_same_instance (var1,var_other) on <var1:nullable AInLanguage(AInLanguage)> */
440 var9 = var1 == var_other;
441 var7 = var9;
442 goto RET_LABEL8;
443 RET_LABEL8:(void)0;
444 }
445 }
446 var5 = var7;
447 goto RET_LABEL6;
448 RET_LABEL6:(void)0;
449 }
450 var4 = var5;
451 }
452 if (var4){
453 var = ((val*)NULL);
454 goto RET_LABEL;
455 } else {
456 }
457 {
458 { /* Inline parser_nodes#AExternCodeBlock#n_in_language (self) on <self:AExternCodeBlock> */
459 var12 = self->attrs[COLOR_nit__parser_nodes__AExternCodeBlock___n_in_language].val; /* _n_in_language on <self:AExternCodeBlock> */
460 var10 = var12;
461 RET_LABEL11:(void)0;
462 }
463 }
464 if (var10 == NULL) {
465 PRINT_ERROR("Runtime error: %s", "Receiver is null");
466 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 90);
467 fatal_exit(1);
468 } else {
469 { /* Inline parser_nodes#AInLanguage#n_string (var10) on <var10:nullable AInLanguage> */
470 if (unlikely(var10 == NULL)) {
471 PRINT_ERROR("Runtime error: %s", "Receiver is null");
472 PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2911);
473 fatal_exit(1);
474 }
475 var15 = var10->attrs[COLOR_nit__parser_nodes__AInLanguage___n_string].val; /* _n_string on <var10:nullable AInLanguage> */
476 if (unlikely(var15 == NULL)) {
477 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_string");
478 PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2911);
479 fatal_exit(1);
480 }
481 var13 = var15;
482 RET_LABEL14:(void)0;
483 }
484 }
485 {
486 var16 = nit__light_ffi_base___TString___without_quotes(var13);
487 }
488 var = var16;
489 goto RET_LABEL;
490 RET_LABEL:;
491 return var;
492 }
493 /* method light_ffi_base#AExternCodeBlock#language_name_lowered for (self: AExternCodeBlock): nullable String */
494 val* nit__light_ffi_base___AExternCodeBlock___language_name_lowered(val* self) {
495 val* var /* : nullable String */;
496 val* var1 /* : nullable String */;
497 short int var2 /* : Bool */;
498 short int var3 /* : Bool */;
499 val* var4 /* : nullable String */;
500 val* var5 /* : String */;
501 {
502 var1 = nit__light_ffi_base___AExternCodeBlock___language_name(self);
503 }
504 if (var1 == NULL) {
505 var2 = 1; /* is null */
506 } else {
507 var2 = 0; /* arg is null but recv is not */
508 }
509 if (0) {
510 var3 = ((short int(*)(val* self, val* p0))(var1->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var1, ((val*)NULL)); /* == on <var1:nullable String>*/
511 var2 = var3;
512 }
513 if (var2){
514 var = ((val*)NULL);
515 goto RET_LABEL;
516 } else {
517 }
518 {
519 var4 = nit__light_ffi_base___AExternCodeBlock___language_name(self);
520 }
521 if (var4 == NULL) {
522 PRINT_ERROR("Runtime error: %s", "Receiver is null");
523 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 96);
524 fatal_exit(1);
525 } else {
526 var5 = ((val*(*)(val* self))(var4->class->vft[COLOR_standard__string__String__to_lower]))(var4); /* to_lower on <var4:nullable String>*/
527 }
528 var = var5;
529 goto RET_LABEL;
530 RET_LABEL:;
531 return var;
532 }
533 /* method light_ffi_base#AExternCodeBlock#code for (self: AExternCodeBlock): String */
534 val* nit__light_ffi_base___AExternCodeBlock___code(val* self) {
535 val* var /* : String */;
536 val* var1 /* : TExternCodeSegment */;
537 val* var3 /* : TExternCodeSegment */;
538 val* var4 /* : String */;
539 {
540 { /* Inline parser_nodes#AExternCodeBlock#n_extern_code_segment (self) on <self:AExternCodeBlock> */
541 var3 = self->attrs[COLOR_nit__parser_nodes__AExternCodeBlock___n_extern_code_segment].val; /* _n_extern_code_segment on <self:AExternCodeBlock> */
542 if (unlikely(var3 == NULL)) {
543 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_extern_code_segment");
544 PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2922);
545 fatal_exit(1);
546 }
547 var1 = var3;
548 RET_LABEL2:(void)0;
549 }
550 }
551 {
552 var4 = nit__light_ffi_base___TExternCodeSegment___without_guard(var1);
553 }
554 var = var4;
555 goto RET_LABEL;
556 RET_LABEL:;
557 return var;
558 }
559 /* method light_ffi_base#AExternCodeBlock#language for (self: AExternCodeBlock): nullable FFILanguage */
560 val* nit__light_ffi_base___AExternCodeBlock___language(val* self) {
561 val* var /* : nullable FFILanguage */;
562 val* var1 /* : nullable FFILanguage */;
563 var1 = self->attrs[COLOR_nit__light_ffi_base__AExternCodeBlock___language].val; /* _language on <self:AExternCodeBlock> */
564 var = var1;
565 RET_LABEL:;
566 return var;
567 }
568 /* method light_ffi_base#AExternCodeBlock#language= for (self: AExternCodeBlock, nullable FFILanguage) */
569 void nit__light_ffi_base___AExternCodeBlock___language_61d(val* self, val* p0) {
570 self->attrs[COLOR_nit__light_ffi_base__AExternCodeBlock___language].val = p0; /* _language on <self:AExternCodeBlock> */
571 RET_LABEL:;
572 }
573 /* method light_ffi_base#FFILanguage#ffi_language_assignation_phase for (self: FFILanguage): FFILanguageAssignationPhase */
574 val* nit___nit__FFILanguage___ffi_language_assignation_phase(val* self) {
575 val* var /* : FFILanguageAssignationPhase */;
576 val* var1 /* : FFILanguageAssignationPhase */;
577 var1 = self->attrs[COLOR_nit__light_ffi_base__FFILanguage___ffi_language_assignation_phase].val; /* _ffi_language_assignation_phase on <self:FFILanguage> */
578 if (unlikely(var1 == NULL)) {
579 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_language_assignation_phase");
580 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 109);
581 fatal_exit(1);
582 }
583 var = var1;
584 RET_LABEL:;
585 return var;
586 }
587 /* method light_ffi_base#FFILanguage#ffi_language_assignation_phase= for (self: FFILanguage, FFILanguageAssignationPhase) */
588 void nit___nit__FFILanguage___ffi_language_assignation_phase_61d(val* self, val* p0) {
589 self->attrs[COLOR_nit__light_ffi_base__FFILanguage___ffi_language_assignation_phase].val = p0; /* _ffi_language_assignation_phase on <self:FFILanguage> */
590 RET_LABEL:;
591 }
592 /* method light_ffi_base#FFILanguage#init for (self: FFILanguage) */
593 void nit___nit__FFILanguage___standard__kernel__Object__init(val* self) {
594 val* var /* : FFILanguageAssignationPhase */;
595 val* var2 /* : FFILanguageAssignationPhase */;
596 val* var3 /* : Array[FFILanguage] */;
597 val* var5 /* : Array[FFILanguage] */;
598 {
599 { /* Inline light_ffi_base#FFILanguage#ffi_language_assignation_phase (self) on <self:FFILanguage> */
600 var2 = self->attrs[COLOR_nit__light_ffi_base__FFILanguage___ffi_language_assignation_phase].val; /* _ffi_language_assignation_phase on <self:FFILanguage> */
601 if (unlikely(var2 == NULL)) {
602 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ffi_language_assignation_phase");
603 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 109);
604 fatal_exit(1);
605 }
606 var = var2;
607 RET_LABEL1:(void)0;
608 }
609 }
610 {
611 { /* Inline light_ffi_base#FFILanguageAssignationPhase#languages (var) on <var:FFILanguageAssignationPhase> */
612 var5 = var->attrs[COLOR_nit__light_ffi_base__FFILanguageAssignationPhase___languages].val; /* _languages on <var:FFILanguageAssignationPhase> */
613 if (unlikely(var5 == NULL)) {
614 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _languages");
615 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 36);
616 fatal_exit(1);
617 }
618 var3 = var5;
619 RET_LABEL4:(void)0;
620 }
621 }
622 {
623 standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var3, self); /* Direct call array#Array#add on <var3:Array[FFILanguage]>*/
624 }
625 RET_LABEL:;
626 }
627 /* method light_ffi_base#TString#without_quotes for (self: TString): String */
628 val* nit__light_ffi_base___TString___without_quotes(val* self) {
629 val* var /* : String */;
630 val* var1 /* : String */;
631 long var2 /* : Int */;
632 short int var3 /* : Bool */;
633 short int var5 /* : Bool */;
634 int cltype;
635 int idtype;
636 const char* var_class_name;
637 short int var6 /* : Bool */;
638 val* var7 /* : String */;
639 val* var8 /* : String */;
640 long var9 /* : Int */;
641 long var10 /* : Int */;
642 short int var12 /* : Bool */;
643 int cltype13;
644 int idtype14;
645 const char* var_class_name15;
646 long var16 /* : Int */;
647 val* var17 /* : Text */;
648 {
649 var1 = nit__lexer_work___Token___text(self);
650 }
651 {
652 var2 = ((long(*)(val* self))(var1->class->vft[COLOR_standard__string__Text__length]))(var1); /* length on <var1:String>*/
653 }
654 {
655 { /* Inline kernel#Int#>= (var2,2l) on <var2:Int> */
656 /* Covariant cast for argument 0 (i) <2l:Int> isa OTHER */
657 /* <2l:Int> isa OTHER */
658 var5 = 1; /* easy <2l:Int> isa OTHER*/
659 if (unlikely(!var5)) {
660 var_class_name = type_standard__Int.name;
661 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
662 PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 535);
663 fatal_exit(1);
664 }
665 var6 = var2 >= 2l;
666 var3 = var6;
667 goto RET_LABEL4;
668 RET_LABEL4:(void)0;
669 }
670 }
671 if (unlikely(!var3)) {
672 PRINT_ERROR("Runtime error: %s", "Assert failed");
673 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 142);
674 fatal_exit(1);
675 }
676 {
677 var7 = nit__lexer_work___Token___text(self);
678 }
679 {
680 var8 = nit__lexer_work___Token___text(self);
681 }
682 {
683 var9 = ((long(*)(val* self))(var8->class->vft[COLOR_standard__string__Text__length]))(var8); /* length on <var8:String>*/
684 }
685 {
686 { /* Inline kernel#Int#- (var9,2l) on <var9:Int> */
687 /* Covariant cast for argument 0 (i) <2l:Int> isa OTHER */
688 /* <2l:Int> isa OTHER */
689 var12 = 1; /* easy <2l:Int> isa OTHER*/
690 if (unlikely(!var12)) {
691 var_class_name15 = type_standard__Int.name;
692 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name15);
693 PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 540);
694 fatal_exit(1);
695 }
696 var16 = var9 - 2l;
697 var10 = var16;
698 goto RET_LABEL11;
699 RET_LABEL11:(void)0;
700 }
701 }
702 {
703 var17 = ((val*(*)(val* self, long p0, long p1))(var7->class->vft[COLOR_standard__string__Text__substring]))(var7, 1l, var10); /* substring on <var7:String>*/
704 }
705 var = var17;
706 goto RET_LABEL;
707 RET_LABEL:;
708 return var;
709 }
710 /* method light_ffi_base#TExternCodeSegment#without_guard for (self: TExternCodeSegment): String */
711 val* nit__light_ffi_base___TExternCodeSegment___without_guard(val* self) {
712 val* var /* : String */;
713 val* var1 /* : String */;
714 long var2 /* : Int */;
715 short int var3 /* : Bool */;
716 short int var5 /* : Bool */;
717 int cltype;
718 int idtype;
719 const char* var_class_name;
720 short int var6 /* : Bool */;
721 val* var7 /* : String */;
722 val* var8 /* : String */;
723 long var9 /* : Int */;
724 long var10 /* : Int */;
725 short int var12 /* : Bool */;
726 int cltype13;
727 int idtype14;
728 const char* var_class_name15;
729 long var16 /* : Int */;
730 val* var17 /* : Text */;
731 {
732 var1 = nit__lexer_work___Token___text(self);
733 }
734 {
735 var2 = ((long(*)(val* self))(var1->class->vft[COLOR_standard__string__Text__length]))(var1); /* length on <var1:String>*/
736 }
737 {
738 { /* Inline kernel#Int#>= (var2,4l) on <var2:Int> */
739 /* Covariant cast for argument 0 (i) <4l:Int> isa OTHER */
740 /* <4l:Int> isa OTHER */
741 var5 = 1; /* easy <4l:Int> isa OTHER*/
742 if (unlikely(!var5)) {
743 var_class_name = type_standard__Int.name;
744 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
745 PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 535);
746 fatal_exit(1);
747 }
748 var6 = var2 >= 4l;
749 var3 = var6;
750 goto RET_LABEL4;
751 RET_LABEL4:(void)0;
752 }
753 }
754 if (unlikely(!var3)) {
755 PRINT_ERROR("Runtime error: %s", "Assert failed");
756 PRINT_ERROR(" (%s:%d)\n", FILE_nit__light_ffi_base, 151);
757 fatal_exit(1);
758 }
759 {
760 var7 = nit__lexer_work___Token___text(self);
761 }
762 {
763 var8 = nit__lexer_work___Token___text(self);
764 }
765 {
766 var9 = ((long(*)(val* self))(var8->class->vft[COLOR_standard__string__Text__length]))(var8); /* length on <var8:String>*/
767 }
768 {
769 { /* Inline kernel#Int#- (var9,4l) on <var9:Int> */
770 /* Covariant cast for argument 0 (i) <4l:Int> isa OTHER */
771 /* <4l:Int> isa OTHER */
772 var12 = 1; /* easy <4l:Int> isa OTHER*/
773 if (unlikely(!var12)) {
774 var_class_name15 = type_standard__Int.name;
775 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name15);
776 PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 540);
777 fatal_exit(1);
778 }
779 var16 = var9 - 4l;
780 var10 = var16;
781 goto RET_LABEL11;
782 RET_LABEL11:(void)0;
783 }
784 }
785 {
786 var17 = ((val*(*)(val* self, long p0, long p1))(var7->class->vft[COLOR_standard__string__Text__substring]))(var7, 2l, var10); /* substring on <var7:String>*/
787 }
788 var = var17;
789 goto RET_LABEL;
790 RET_LABEL:;
791 return var;
792 }
793 /* method light_ffi_base#CCompilationUnit#write_as_impl for (self: CCompilationUnit, MModule, String) */
794 void nit__light_ffi_base___CCompilationUnit___write_as_impl(val* self, val* p0, val* p1) {
795 val* var_mmodule /* var mmodule: MModule */;
796 val* var_compdir /* var compdir: String */;
797 val* var /* : NativeArray[String] */;
798 static val* varonce;
799 static val* varonce1;
800 val* var2 /* : String */;
801 char* var3 /* : NativeString */;
802 val* var4 /* : FlatString */;
803 val* var5 /* : String */;
804 val* var6 /* : String */;
805 val* var_base_name /* var base_name: String */;
806 val* var8 /* : NativeArray[String] */;
807 static val* varonce7;
808 static val* varonce9;
809 val* var10 /* : String */;
810 char* var11 /* : NativeString */;
811 val* var12 /* : FlatString */;
812 val* var13 /* : String */;
813 val* var_h_file /* var h_file: String */;
814 val* var15 /* : NativeArray[String] */;
815 static val* varonce14;
816 static val* varonce16;
817 val* var17 /* : String */;
818 char* var18 /* : NativeString */;
819 val* var19 /* : FlatString */;
820 val* var20 /* : String */;
821 val* var21 /* : String */;
822 val* var22 /* : String */;
823 val* var_guard /* var guard: String */;
824 val* var24 /* : NativeArray[String] */;
825 static val* varonce23;
826 static val* varonce25;
827 val* var26 /* : String */;
828 char* var27 /* : NativeString */;
829 val* var28 /* : FlatString */;
830 val* var29 /* : String */;
831 val* var30 /* : Array[String] */;
832 val* var_ /* var : Array[String] */;
833 static val* varonce31;
834 val* var32 /* : String */;
835 char* var33 /* : NativeString */;
836 val* var34 /* : FlatString */;
837 val* var36 /* : NativeArray[String] */;
838 static val* varonce35;
839 static val* varonce37;
840 val* var38 /* : String */;
841 char* var39 /* : NativeString */;
842 val* var40 /* : FlatString */;
843 val* var41 /* : String */;
844 val* var_c_file /* var c_file: String */;
845 val* var43 /* : NativeArray[String] */;
846 static val* varonce42;
847 static val* varonce44;
848 val* var45 /* : String */;
849 char* var46 /* : NativeString */;
850 val* var47 /* : FlatString */;
851 val* var48 /* : String */;
852 val* var49 /* : Array[String] */;
853 val* var_50 /* var : Array[String] */;
854 static val* varonce51;
855 val* var52 /* : String */;
856 char* var53 /* : NativeString */;
857 val* var54 /* : FlatString */;
858 static val* varonce55;
859 val* var56 /* : String */;
860 char* var57 /* : NativeString */;
861 val* var58 /* : FlatString */;
862 static val* varonce59;
863 val* var60 /* : String */;
864 char* var61 /* : NativeString */;
865 val* var62 /* : FlatString */;
866 val* var64 /* : NativeArray[String] */;
867 static val* varonce63;
868 static val* varonce65;
869 val* var66 /* : String */;
870 char* var67 /* : NativeString */;
871 val* var68 /* : FlatString */;
872 static val* varonce69;
873 val* var70 /* : String */;
874 char* var71 /* : NativeString */;
875 val* var72 /* : FlatString */;
876 val* var73 /* : String */;
877 val* var74 /* : Array[String] */;
878 val* var76 /* : Array[String] */;
879 val* var78 /* : NativeArray[String] */;
880 static val* varonce77;
881 static val* varonce79;
882 val* var80 /* : String */;
883 char* var81 /* : NativeString */;
884 val* var82 /* : FlatString */;
885 val* var83 /* : String */;
886 var_mmodule = p0;
887 var_compdir = p1;
888 if (unlikely(varonce==NULL)) {
889 var = NEW_standard__NativeArray(2l, &type_standard__NativeArray__standard__String);
890 if (likely(varonce1!=NULL)) {
891 var2 = varonce1;
892 } else {
893 var3 = "._ffi";
894 var4 = standard___standard__NativeString___to_s_with_length(var3, 5l);
895 var2 = var4;
896 varonce1 = var2;
897 }
898 ((struct instance_standard__NativeArray*)var)->values[1]=var2;
899 } else {
900 var = varonce;
901 varonce = NULL;
902 }
903 {
904 var5 = nit___nit__MModule___nit__model_base__MEntity__c_name(var_mmodule);
905 }
906 ((struct instance_standard__NativeArray*)var)->values[0]=var5;
907 {
908 var6 = ((val*(*)(val* self))(var->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var); /* native_to_s on <var:NativeArray[String]>*/
909 }
910 varonce = var;
911 var_base_name = var6;
912 if (unlikely(varonce7==NULL)) {
913 var8 = NEW_standard__NativeArray(2l, &type_standard__NativeArray__standard__String);
914 if (likely(varonce9!=NULL)) {
915 var10 = varonce9;
916 } else {
917 var11 = ".h";
918 var12 = standard___standard__NativeString___to_s_with_length(var11, 2l);
919 var10 = var12;
920 varonce9 = var10;
921 }
922 ((struct instance_standard__NativeArray*)var8)->values[1]=var10;
923 } else {
924 var8 = varonce7;
925 varonce7 = NULL;
926 }
927 ((struct instance_standard__NativeArray*)var8)->values[0]=var_base_name;
928 {
929 var13 = ((val*(*)(val* self))(var8->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var8); /* native_to_s on <var8:NativeArray[String]>*/
930 }
931 varonce7 = var8;
932 var_h_file = var13;
933 if (unlikely(varonce14==NULL)) {
934 var15 = NEW_standard__NativeArray(2l, &type_standard__NativeArray__standard__String);
935 if (likely(varonce16!=NULL)) {
936 var17 = varonce16;
937 } else {
938 var18 = "_NIT_H";
939 var19 = standard___standard__NativeString___to_s_with_length(var18, 6l);
940 var17 = var19;
941 varonce16 = var17;
942 }
943 ((struct instance_standard__NativeArray*)var15)->values[1]=var17;
944 } else {
945 var15 = varonce14;
946 varonce14 = NULL;
947 }
948 {
949 var20 = nit___nit__MModule___nit__model_base__MEntity__c_name(var_mmodule);
950 }
951 {
952 var21 = ((val*(*)(val* self))(var20->class->vft[COLOR_standard__string__String__to_upper]))(var20); /* to_upper on <var20:String>*/
953 }
954 ((struct instance_standard__NativeArray*)var15)->values[0]=var21;
955 {
956 var22 = ((val*(*)(val* self))(var15->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var15); /* native_to_s on <var15:NativeArray[String]>*/
957 }
958 varonce14 = var15;
959 var_guard = var22;
960 if (unlikely(varonce23==NULL)) {
961 var24 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
962 if (likely(varonce25!=NULL)) {
963 var26 = varonce25;
964 } else {
965 var27 = "/";
966 var28 = standard___standard__NativeString___to_s_with_length(var27, 1l);
967 var26 = var28;
968 varonce25 = var26;
969 }
970 ((struct instance_standard__NativeArray*)var24)->values[1]=var26;
971 } else {
972 var24 = varonce23;
973 varonce23 = NULL;
974 }
975 ((struct instance_standard__NativeArray*)var24)->values[0]=var_compdir;
976 ((struct instance_standard__NativeArray*)var24)->values[2]=var_h_file;
977 {
978 var29 = ((val*(*)(val* self))(var24->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var24); /* native_to_s on <var24:NativeArray[String]>*/
979 }
980 varonce23 = var24;
981 var30 = NEW_standard__Array(&type_standard__Array__standard__String);
982 {
983 standard___standard__Array___with_capacity(var30, 1l); /* Direct call array#Array#with_capacity on <var30:Array[String]>*/
984 }
985 var_ = var30;
986 if (likely(varonce31!=NULL)) {
987 var32 = varonce31;
988 } else {
989 var33 = "<stdint.h>";
990 var34 = standard___standard__NativeString___to_s_with_length(var33, 10l);
991 var32 = var34;
992 varonce31 = var32;
993 }
994 {
995 standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_, var32); /* Direct call array#AbstractArray#push on <var_:Array[String]>*/
996 }
997 {
998 nit__light_ffi_base___CCompilationUnit___write_header_to_file(self, var_mmodule, var29, var_, var_guard); /* Direct call light_ffi_base#CCompilationUnit#write_header_to_file on <self:CCompilationUnit>*/
999 }
1000 if (unlikely(varonce35==NULL)) {
1001 var36 = NEW_standard__NativeArray(2l, &type_standard__NativeArray__standard__String);
1002 if (likely(varonce37!=NULL)) {
1003 var38 = varonce37;
1004 } else {
1005 var39 = ".c";
1006 var40 = standard___standard__NativeString___to_s_with_length(var39, 2l);
1007 var38 = var40;
1008 varonce37 = var38;
1009 }
1010 ((struct instance_standard__NativeArray*)var36)->values[1]=var38;
1011 } else {
1012 var36 = varonce35;
1013 varonce35 = NULL;
1014 }
1015 ((struct instance_standard__NativeArray*)var36)->values[0]=var_base_name;
1016 {
1017 var41 = ((val*(*)(val* self))(var36->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var36); /* native_to_s on <var36:NativeArray[String]>*/
1018 }
1019 varonce35 = var36;
1020 var_c_file = var41;
1021 if (unlikely(varonce42==NULL)) {
1022 var43 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
1023 if (likely(varonce44!=NULL)) {
1024 var45 = varonce44;
1025 } else {
1026 var46 = "/";
1027 var47 = standard___standard__NativeString___to_s_with_length(var46, 1l);
1028 var45 = var47;
1029 varonce44 = var45;
1030 }
1031 ((struct instance_standard__NativeArray*)var43)->values[1]=var45;
1032 } else {
1033 var43 = varonce42;
1034 varonce42 = NULL;
1035 }
1036 ((struct instance_standard__NativeArray*)var43)->values[0]=var_compdir;
1037 ((struct instance_standard__NativeArray*)var43)->values[2]=var_c_file;
1038 {
1039 var48 = ((val*(*)(val* self))(var43->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var43); /* native_to_s on <var43:NativeArray[String]>*/
1040 }
1041 varonce42 = var43;
1042 var49 = NEW_standard__Array(&type_standard__Array__standard__String);
1043 {
1044 standard___standard__Array___with_capacity(var49, 4l); /* Direct call array#Array#with_capacity on <var49:Array[String]>*/
1045 }
1046 var_50 = var49;
1047 if (likely(varonce51!=NULL)) {
1048 var52 = varonce51;
1049 } else {
1050 var53 = "<stdlib.h>";
1051 var54 = standard___standard__NativeString___to_s_with_length(var53, 10l);
1052 var52 = var54;
1053 varonce51 = var52;
1054 }
1055 {
1056 standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_50, var52); /* Direct call array#AbstractArray#push on <var_50:Array[String]>*/
1057 }
1058 if (likely(varonce55!=NULL)) {
1059 var56 = varonce55;
1060 } else {
1061 var57 = "<stdio.h>";
1062 var58 = standard___standard__NativeString___to_s_with_length(var57, 9l);
1063 var56 = var58;
1064 varonce55 = var56;
1065 }
1066 {
1067 standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_50, var56); /* Direct call array#AbstractArray#push on <var_50:Array[String]>*/
1068 }
1069 if (likely(varonce59!=NULL)) {
1070 var60 = varonce59;
1071 } else {
1072 var61 = "<stdint.h>";
1073 var62 = standard___standard__NativeString___to_s_with_length(var61, 10l);
1074 var60 = var62;
1075 varonce59 = var60;
1076 }
1077 {
1078 standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_50, var60); /* Direct call array#AbstractArray#push on <var_50:Array[String]>*/
1079 }
1080 if (unlikely(varonce63==NULL)) {
1081 var64 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
1082 if (likely(varonce65!=NULL)) {
1083 var66 = varonce65;
1084 } else {
1085 var67 = "\"";
1086 var68 = standard___standard__NativeString___to_s_with_length(var67, 1l);
1087 var66 = var68;
1088 varonce65 = var66;
1089 }
1090 ((struct instance_standard__NativeArray*)var64)->values[0]=var66;
1091 if (likely(varonce69!=NULL)) {
1092 var70 = varonce69;
1093 } else {
1094 var71 = "\"";
1095 var72 = standard___standard__NativeString___to_s_with_length(var71, 1l);
1096 var70 = var72;
1097 varonce69 = var70;
1098 }
1099 ((struct instance_standard__NativeArray*)var64)->values[2]=var70;
1100 } else {
1101 var64 = varonce63;
1102 varonce63 = NULL;
1103 }
1104 ((struct instance_standard__NativeArray*)var64)->values[1]=var_h_file;
1105 {
1106 var73 = ((val*(*)(val* self))(var64->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var64); /* native_to_s on <var64:NativeArray[String]>*/
1107 }
1108 varonce63 = var64;
1109 {
1110 standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_50, var73); /* Direct call array#AbstractArray#push on <var_50:Array[String]>*/
1111 }
1112 {
1113 nit__light_ffi_base___CCompilationUnit___write_body_to_file(self, var_mmodule, var48, var_50); /* Direct call light_ffi_base#CCompilationUnit#write_body_to_file on <self:CCompilationUnit>*/
1114 }
1115 {
1116 { /* Inline c_tools#CCompilationUnit#files (self) on <self:CCompilationUnit> */
1117 var76 = self->attrs[COLOR_nit__c_tools__CCompilationUnit___files].val; /* _files on <self:CCompilationUnit> */
1118 if (unlikely(var76 == NULL)) {
1119 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _files");
1120 PRINT_ERROR(" (%s:%d)\n", FILE_nit__c_tools, 47);
1121 fatal_exit(1);
1122 }
1123 var74 = var76;
1124 RET_LABEL75:(void)0;
1125 }
1126 }
1127 if (unlikely(varonce77==NULL)) {
1128 var78 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
1129 if (likely(varonce79!=NULL)) {
1130 var80 = varonce79;
1131 } else {
1132 var81 = "/";
1133 var82 = standard___standard__NativeString___to_s_with_length(var81, 1l);
1134 var80 = var82;
1135 varonce79 = var80;
1136 }
1137 ((struct instance_standard__NativeArray*)var78)->values[1]=var80;
1138 } else {
1139 var78 = varonce77;
1140 varonce77 = NULL;
1141 }
1142 ((struct instance_standard__NativeArray*)var78)->values[0]=var_compdir;
1143 ((struct instance_standard__NativeArray*)var78)->values[2]=var_c_file;
1144 {
1145 var83 = ((val*(*)(val* self))(var78->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var78); /* native_to_s on <var78:NativeArray[String]>*/
1146 }
1147 varonce77 = var78;
1148 {
1149 standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var74, var83); /* Direct call array#Array#add on <var74:Array[String]>*/
1150 }
1151 RET_LABEL:;
1152 }
1153 /* method light_ffi_base#CCompilationUnit#write_header_to_file for (self: CCompilationUnit, MModule, String, Array[String], String) */
1154 void nit__light_ffi_base___CCompilationUnit___write_header_to_file(val* self, val* p0, val* p1, val* p2, val* p3) {
1155 val* var_mmodule /* var mmodule: MModule */;
1156 val* var_file /* var file: String */;
1157 val* var_includes /* var includes: Array[String] */;
1158 val* var_guard /* var guard: String */;
1159 val* var /* : FileWriter */;
1160 val* var_stream /* var stream: FileWriter */;
1161 val* var1 /* : NativeArray[String] */;
1162 static val* varonce;
1163 static val* varonce2;
1164 val* var3 /* : String */;
1165 char* var4 /* : NativeString */;
1166 val* var5 /* : FlatString */;
1167 static val* varonce6;
1168 val* var7 /* : String */;
1169 char* var8 /* : NativeString */;
1170 val* var9 /* : FlatString */;
1171 val* var10 /* : String */;
1172 val* var12 /* : String */;
1173 val* var13 /* : String */;
1174 val* var_module_info /* var module_info: String */;
1175 val* var15 /* : NativeArray[String] */;
1176 static val* varonce14;
1177 static val* varonce16;
1178 val* var17 /* : String */;
1179 char* var18 /* : NativeString */;
1180 val* var19 /* : FlatString */;
1181 static val* varonce20;
1182 val* var21 /* : String */;
1183 char* var22 /* : NativeString */;
1184 val* var23 /* : FlatString */;
1185 val* var24 /* : String */;
1186 val* var26 /* : NativeArray[String] */;
1187 static val* varonce25;
1188 static val* varonce27;
1189 val* var28 /* : String */;
1190 char* var29 /* : NativeString */;
1191 val* var30 /* : FlatString */;
1192 static val* varonce31;
1193 val* var32 /* : String */;
1194 char* var33 /* : NativeString */;
1195 val* var34 /* : FlatString */;
1196 val* var35 /* : String */;
1197 val* var_ /* var : Array[String] */;
1198 val* var36 /* : ArrayIterator[nullable Object] */;
1199 val* var_37 /* var : ArrayIterator[String] */;
1200 short int var38 /* : Bool */;
1201 val* var39 /* : nullable Object */;
1202 val* var_incl /* var incl: String */;
1203 val* var41 /* : NativeArray[String] */;
1204 static val* varonce40;
1205 static val* varonce42;
1206 val* var43 /* : String */;
1207 char* var44 /* : NativeString */;
1208 val* var45 /* : FlatString */;
1209 static val* varonce46;
1210 val* var47 /* : String */;
1211 char* var48 /* : NativeString */;
1212 val* var49 /* : FlatString */;
1213 val* var50 /* : String */;
1214 static val* varonce51;
1215 val* var52 /* : String */;
1216 char* var53 /* : NativeString */;
1217 val* var54 /* : FlatString */;
1218 var_mmodule = p0;
1219 var_file = p1;
1220 var_includes = p2;
1221 var_guard = p3;
1222 var = NEW_standard__FileWriter(&type_standard__FileWriter);
1223 {
1224 standard___standard__FileWriter___open(var, var_file); /* Direct call file#FileWriter#open on <var:FileWriter>*/
1225 }
1226 var_stream = var;
1227 if (unlikely(varonce==NULL)) {
1228 var1 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
1229 if (likely(varonce2!=NULL)) {
1230 var3 = varonce2;
1231 } else {
1232 var4 = "/*\n\tExtern implementation of Nit module ";
1233 var5 = standard___standard__NativeString___to_s_with_length(var4, 40l);
1234 var3 = var5;
1235 varonce2 = var3;
1236 }
1237 ((struct instance_standard__NativeArray*)var1)->values[0]=var3;
1238 if (likely(varonce6!=NULL)) {
1239 var7 = varonce6;
1240 } else {
1241 var8 = "\n*/\n";
1242 var9 = standard___standard__NativeString___to_s_with_length(var8, 4l);
1243 var7 = var9;
1244 varonce6 = var7;
1245 }
1246 ((struct instance_standard__NativeArray*)var1)->values[2]=var7;
1247 } else {
1248 var1 = varonce;
1249 varonce = NULL;
1250 }
1251 {
1252 { /* Inline mmodule#MModule#name (var_mmodule) on <var_mmodule:MModule> */
1253 var12 = var_mmodule->attrs[COLOR_nit__mmodule__MModule___name].val; /* _name on <var_mmodule:MModule> */
1254 if (unlikely(var12 == NULL)) {
1255 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1256 PRINT_ERROR(" (%s:%d)\n", FILE_nit__mmodule, 87);
1257 fatal_exit(1);
1258 }
1259 var10 = var12;
1260 RET_LABEL11:(void)0;
1261 }
1262 }
1263 ((struct instance_standard__NativeArray*)var1)->values[1]=var10;
1264 {
1265 var13 = ((val*(*)(val* self))(var1->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
1266 }
1267 varonce = var1;
1268 var_module_info = var13;
1269 {
1270 standard___standard__FileWriter___standard__stream__Writer__write(var_stream, var_module_info); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
1271 }
1272 if (unlikely(varonce14==NULL)) {
1273 var15 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
1274 if (likely(varonce16!=NULL)) {
1275 var17 = varonce16;
1276 } else {
1277 var18 = "#ifndef ";
1278 var19 = standard___standard__NativeString___to_s_with_length(var18, 8l);
1279 var17 = var19;
1280 varonce16 = var17;
1281 }
1282 ((struct instance_standard__NativeArray*)var15)->values[0]=var17;
1283 if (likely(varonce20!=NULL)) {
1284 var21 = varonce20;
1285 } else {
1286 var22 = "\n";
1287 var23 = standard___standard__NativeString___to_s_with_length(var22, 1l);
1288 var21 = var23;
1289 varonce20 = var21;
1290 }
1291 ((struct instance_standard__NativeArray*)var15)->values[2]=var21;
1292 } else {
1293 var15 = varonce14;
1294 varonce14 = NULL;
1295 }
1296 ((struct instance_standard__NativeArray*)var15)->values[1]=var_guard;
1297 {
1298 var24 = ((val*(*)(val* self))(var15->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var15); /* native_to_s on <var15:NativeArray[String]>*/
1299 }
1300 varonce14 = var15;
1301 {
1302 standard___standard__FileWriter___standard__stream__Writer__write(var_stream, var24); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
1303 }
1304 if (unlikely(varonce25==NULL)) {
1305 var26 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
1306 if (likely(varonce27!=NULL)) {
1307 var28 = varonce27;
1308 } else {
1309 var29 = "#define ";
1310 var30 = standard___standard__NativeString___to_s_with_length(var29, 8l);
1311 var28 = var30;
1312 varonce27 = var28;
1313 }
1314 ((struct instance_standard__NativeArray*)var26)->values[0]=var28;
1315 if (likely(varonce31!=NULL)) {
1316 var32 = varonce31;
1317 } else {
1318 var33 = "\n\n";
1319 var34 = standard___standard__NativeString___to_s_with_length(var33, 2l);
1320 var32 = var34;
1321 varonce31 = var32;
1322 }
1323 ((struct instance_standard__NativeArray*)var26)->values[2]=var32;
1324 } else {
1325 var26 = varonce25;
1326 varonce25 = NULL;
1327 }
1328 ((struct instance_standard__NativeArray*)var26)->values[1]=var_guard;
1329 {
1330 var35 = ((val*(*)(val* self))(var26->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var26); /* native_to_s on <var26:NativeArray[String]>*/
1331 }
1332 varonce25 = var26;
1333 {
1334 standard___standard__FileWriter___standard__stream__Writer__write(var_stream, var35); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
1335 }
1336 var_ = var_includes;
1337 {
1338 var36 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_);
1339 }
1340 var_37 = var36;
1341 for(;;) {
1342 {
1343 var38 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_37);
1344 }
1345 if (var38){
1346 {
1347 var39 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_37);
1348 }
1349 var_incl = var39;
1350 if (unlikely(varonce40==NULL)) {
1351 var41 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
1352 if (likely(varonce42!=NULL)) {
1353 var43 = varonce42;
1354 } else {
1355 var44 = "#include ";
1356 var45 = standard___standard__NativeString___to_s_with_length(var44, 9l);
1357 var43 = var45;
1358 varonce42 = var43;
1359 }
1360 ((struct instance_standard__NativeArray*)var41)->values[0]=var43;
1361 if (likely(varonce46!=NULL)) {
1362 var47 = varonce46;
1363 } else {
1364 var48 = "\n";
1365 var49 = standard___standard__NativeString___to_s_with_length(var48, 1l);
1366 var47 = var49;
1367 varonce46 = var47;
1368 }
1369 ((struct instance_standard__NativeArray*)var41)->values[2]=var47;
1370 } else {
1371 var41 = varonce40;
1372 varonce40 = NULL;
1373 }
1374 ((struct instance_standard__NativeArray*)var41)->values[1]=var_incl;
1375 {
1376 var50 = ((val*(*)(val* self))(var41->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var41); /* native_to_s on <var41:NativeArray[String]>*/
1377 }
1378 varonce40 = var41;
1379 {
1380 standard___standard__FileWriter___standard__stream__Writer__write(var_stream, var50); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
1381 }
1382 {
1383 standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_37); /* Direct call array#ArrayIterator#next on <var_37:ArrayIterator[String]>*/
1384 }
1385 } else {
1386 goto BREAK_label;
1387 }
1388 }
1389 BREAK_label: (void)0;
1390 {
1391 standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_37); /* Direct call array#ArrayIterator#finish on <var_37:ArrayIterator[String]>*/
1392 }
1393 {
1394 nit___nit__CCompilationUnit___compile_header_core(self, var_stream); /* Direct call c_tools#CCompilationUnit#compile_header_core on <self:CCompilationUnit>*/
1395 }
1396 if (likely(varonce51!=NULL)) {
1397 var52 = varonce51;
1398 } else {
1399 var53 = "#endif\n";
1400 var54 = standard___standard__NativeString___to_s_with_length(var53, 7l);
1401 var52 = var54;
1402 varonce51 = var52;
1403 }
1404 {
1405 standard___standard__FileWriter___standard__stream__Writer__write(var_stream, var52); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
1406 }
1407 {
1408 standard___standard__FileWriter___standard__stream__Stream__close(var_stream); /* Direct call file#FileWriter#close on <var_stream:FileWriter>*/
1409 }
1410 RET_LABEL:;
1411 }
1412 /* method light_ffi_base#CCompilationUnit#write_body_to_file for (self: CCompilationUnit, MModule, String, Array[String]) */
1413 void nit__light_ffi_base___CCompilationUnit___write_body_to_file(val* self, val* p0, val* p1, val* p2) {
1414 val* var_mmodule /* var mmodule: MModule */;
1415 val* var_file /* var file: String */;
1416 val* var_includes /* var includes: Array[String] */;
1417 val* var /* : FileWriter */;
1418 val* var_stream /* var stream: FileWriter */;
1419 val* var1 /* : NativeArray[String] */;
1420 static val* varonce;
1421 static val* varonce2;
1422 val* var3 /* : String */;
1423 char* var4 /* : NativeString */;
1424 val* var5 /* : FlatString */;
1425 static val* varonce6;
1426 val* var7 /* : String */;
1427 char* var8 /* : NativeString */;
1428 val* var9 /* : FlatString */;
1429 val* var10 /* : String */;
1430 val* var12 /* : String */;
1431 val* var13 /* : String */;
1432 val* var_module_info /* var module_info: String */;
1433 val* var_ /* var : Array[String] */;
1434 val* var14 /* : ArrayIterator[nullable Object] */;
1435 val* var_15 /* var : ArrayIterator[String] */;
1436 short int var16 /* : Bool */;
1437 val* var17 /* : nullable Object */;
1438 val* var_incl /* var incl: String */;
1439 val* var19 /* : NativeArray[String] */;
1440 static val* varonce18;
1441 static val* varonce20;
1442 val* var21 /* : String */;
1443 char* var22 /* : NativeString */;
1444 val* var23 /* : FlatString */;
1445 static val* varonce24;
1446 val* var25 /* : String */;
1447 char* var26 /* : NativeString */;
1448 val* var27 /* : FlatString */;
1449 val* var28 /* : String */;
1450 var_mmodule = p0;
1451 var_file = p1;
1452 var_includes = p2;
1453 var = NEW_standard__FileWriter(&type_standard__FileWriter);
1454 {
1455 standard___standard__FileWriter___open(var, var_file); /* Direct call file#FileWriter#open on <var:FileWriter>*/
1456 }
1457 var_stream = var;
1458 if (unlikely(varonce==NULL)) {
1459 var1 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
1460 if (likely(varonce2!=NULL)) {
1461 var3 = varonce2;
1462 } else {
1463 var4 = "/*\n\tExtern implementation of Nit module ";
1464 var5 = standard___standard__NativeString___to_s_with_length(var4, 40l);
1465 var3 = var5;
1466 varonce2 = var3;
1467 }
1468 ((struct instance_standard__NativeArray*)var1)->values[0]=var3;
1469 if (likely(varonce6!=NULL)) {
1470 var7 = varonce6;
1471 } else {
1472 var8 = "\n*/\n";
1473 var9 = standard___standard__NativeString___to_s_with_length(var8, 4l);
1474 var7 = var9;
1475 varonce6 = var7;
1476 }
1477 ((struct instance_standard__NativeArray*)var1)->values[2]=var7;
1478 } else {
1479 var1 = varonce;
1480 varonce = NULL;
1481 }
1482 {
1483 { /* Inline mmodule#MModule#name (var_mmodule) on <var_mmodule:MModule> */
1484 var12 = var_mmodule->attrs[COLOR_nit__mmodule__MModule___name].val; /* _name on <var_mmodule:MModule> */
1485 if (unlikely(var12 == NULL)) {
1486 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1487 PRINT_ERROR(" (%s:%d)\n", FILE_nit__mmodule, 87);
1488 fatal_exit(1);
1489 }
1490 var10 = var12;
1491 RET_LABEL11:(void)0;
1492 }
1493 }
1494 ((struct instance_standard__NativeArray*)var1)->values[1]=var10;
1495 {
1496 var13 = ((val*(*)(val* self))(var1->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
1497 }
1498 varonce = var1;
1499 var_module_info = var13;
1500 {
1501 standard___standard__FileWriter___standard__stream__Writer__write(var_stream, var_module_info); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
1502 }
1503 var_ = var_includes;
1504 {
1505 var14 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_);
1506 }
1507 var_15 = var14;
1508 for(;;) {
1509 {
1510 var16 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_15);
1511 }
1512 if (var16){
1513 {
1514 var17 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_15);
1515 }
1516 var_incl = var17;
1517 if (unlikely(varonce18==NULL)) {
1518 var19 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
1519 if (likely(varonce20!=NULL)) {
1520 var21 = varonce20;
1521 } else {
1522 var22 = "#include ";
1523 var23 = standard___standard__NativeString___to_s_with_length(var22, 9l);
1524 var21 = var23;
1525 varonce20 = var21;
1526 }
1527 ((struct instance_standard__NativeArray*)var19)->values[0]=var21;
1528 if (likely(varonce24!=NULL)) {
1529 var25 = varonce24;
1530 } else {
1531 var26 = "\n";
1532 var27 = standard___standard__NativeString___to_s_with_length(var26, 1l);
1533 var25 = var27;
1534 varonce24 = var25;
1535 }
1536 ((struct instance_standard__NativeArray*)var19)->values[2]=var25;
1537 } else {
1538 var19 = varonce18;
1539 varonce18 = NULL;
1540 }
1541 ((struct instance_standard__NativeArray*)var19)->values[1]=var_incl;
1542 {
1543 var28 = ((val*(*)(val* self))(var19->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var19); /* native_to_s on <var19:NativeArray[String]>*/
1544 }
1545 varonce18 = var19;
1546 {
1547 standard___standard__FileWriter___standard__stream__Writer__write(var_stream, var28); /* Direct call file#FileWriter#write on <var_stream:FileWriter>*/
1548 }
1549 {
1550 standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_15); /* Direct call array#ArrayIterator#next on <var_15:ArrayIterator[String]>*/
1551 }
1552 } else {
1553 goto BREAK_label;
1554 }
1555 }
1556 BREAK_label: (void)0;
1557 {
1558 standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_15); /* Direct call array#ArrayIterator#finish on <var_15:ArrayIterator[String]>*/
1559 }
1560 {
1561 nit___nit__CCompilationUnit___compile_body_core(self, var_stream); /* Direct call c_tools#CCompilationUnit#compile_body_core on <self:CCompilationUnit>*/
1562 }
1563 {
1564 standard___standard__FileWriter___standard__stream__Stream__close(var_stream); /* Direct call file#FileWriter#close on <var_stream:FileWriter>*/
1565 }
1566 RET_LABEL:;
1567 }
1568 /* method light_ffi_base#ForeignType#ctype for (self: ForeignType): String */
1569 val* nit___nit__ForeignType___ctype(val* self) {
1570 val* var /* : String */;
1571 static val* varonce;
1572 val* var1 /* : String */;
1573 char* var2 /* : NativeString */;
1574 val* var3 /* : FlatString */;
1575 if (likely(varonce!=NULL)) {
1576 var1 = varonce;
1577 } else {
1578 var2 = "void*";
1579 var3 = standard___standard__NativeString___to_s_with_length(var2, 5l);
1580 var1 = var3;
1581 varonce = var1;
1582 }
1583 var = var1;
1584 goto RET_LABEL;
1585 RET_LABEL:;
1586 return var;
1587 }