model_utils: allow intro and redef mclasses filtering
[nit.git] / c_src / compiler_ffi.sep.1.c
1 #include "compiler_ffi.sep.0.h"
2 /* method compiler_ffi#AModule#foreign_callbacks for (self: AModule): ForeignCallbackSet */
3 val* compiler_ffi__AModule__foreign_callbacks(val* self) {
4 val* var /* : ForeignCallbackSet */;
5 val* var1 /* : ForeignCallbackSet */;
6 var1 = self->attrs[COLOR_compiler_ffi__AModule___64dforeign_callbacks].val; /* @foreign_callbacks on <self:AModule> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @foreign_callbacks");
9 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 25);
10 show_backtrace(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method compiler_ffi#AModule#foreign_callbacks for (self: Object): ForeignCallbackSet */
17 val* VIRTUAL_compiler_ffi__AModule__foreign_callbacks(val* self) {
18 val* var /* : ForeignCallbackSet */;
19 val* var1 /* : ForeignCallbackSet */;
20 var1 = compiler_ffi__AModule__foreign_callbacks(self);
21 var = var1;
22 RET_LABEL:;
23 return var;
24 }
25 /* method compiler_ffi#AModule#foreign_callbacks= for (self: AModule, ForeignCallbackSet) */
26 void compiler_ffi__AModule__foreign_callbacks_61d(val* self, val* p0) {
27 self->attrs[COLOR_compiler_ffi__AModule___64dforeign_callbacks].val = p0; /* @foreign_callbacks on <self:AModule> */
28 RET_LABEL:;
29 }
30 /* method compiler_ffi#AModule#foreign_callbacks= for (self: Object, ForeignCallbackSet) */
31 void VIRTUAL_compiler_ffi__AModule__foreign_callbacks_61d(val* self, val* p0) {
32 compiler_ffi__AModule__foreign_callbacks_61d(self, p0);
33 RET_LABEL:;
34 }
35 /* method compiler_ffi#AModule#nitni_ccu for (self: AModule): nullable CCompilationUnit */
36 val* compiler_ffi__AModule__nitni_ccu(val* self) {
37 val* var /* : nullable CCompilationUnit */;
38 val* var1 /* : nullable CCompilationUnit */;
39 var1 = self->attrs[COLOR_compiler_ffi__AModule___64dnitni_ccu].val; /* @nitni_ccu on <self:AModule> */
40 var = var1;
41 RET_LABEL:;
42 return var;
43 }
44 /* method compiler_ffi#AModule#nitni_ccu for (self: Object): nullable CCompilationUnit */
45 val* VIRTUAL_compiler_ffi__AModule__nitni_ccu(val* self) {
46 val* var /* : nullable CCompilationUnit */;
47 val* var1 /* : nullable CCompilationUnit */;
48 var1 = compiler_ffi__AModule__nitni_ccu(self);
49 var = var1;
50 RET_LABEL:;
51 return var;
52 }
53 /* method compiler_ffi#AModule#nitni_ccu= for (self: AModule, nullable CCompilationUnit) */
54 void compiler_ffi__AModule__nitni_ccu_61d(val* self, val* p0) {
55 self->attrs[COLOR_compiler_ffi__AModule___64dnitni_ccu].val = p0; /* @nitni_ccu on <self:AModule> */
56 RET_LABEL:;
57 }
58 /* method compiler_ffi#AModule#nitni_ccu= for (self: Object, nullable CCompilationUnit) */
59 void VIRTUAL_compiler_ffi__AModule__nitni_ccu_61d(val* self, val* p0) {
60 compiler_ffi__AModule__nitni_ccu_61d(self, p0);
61 RET_LABEL:;
62 }
63 /* method compiler_ffi#AModule#uses_legacy_ni for (self: AModule): Bool */
64 short int compiler_ffi__AModule__uses_legacy_ni(val* self) {
65 short int var /* : Bool */;
66 short int var1 /* : Bool */;
67 var1 = self->attrs[COLOR_compiler_ffi__AModule___64duses_legacy_ni].s; /* @uses_legacy_ni on <self:AModule> */
68 var = var1;
69 RET_LABEL:;
70 return var;
71 }
72 /* method compiler_ffi#AModule#uses_legacy_ni for (self: Object): Bool */
73 short int VIRTUAL_compiler_ffi__AModule__uses_legacy_ni(val* self) {
74 short int var /* : Bool */;
75 short int var1 /* : Bool */;
76 var1 = compiler_ffi__AModule__uses_legacy_ni(self);
77 var = var1;
78 RET_LABEL:;
79 return var;
80 }
81 /* method compiler_ffi#AModule#uses_legacy_ni= for (self: AModule, Bool) */
82 void compiler_ffi__AModule__uses_legacy_ni_61d(val* self, short int p0) {
83 self->attrs[COLOR_compiler_ffi__AModule___64duses_legacy_ni].s = p0; /* @uses_legacy_ni on <self:AModule> */
84 RET_LABEL:;
85 }
86 /* method compiler_ffi#AModule#uses_legacy_ni= for (self: Object, Bool) */
87 void VIRTUAL_compiler_ffi__AModule__uses_legacy_ni_61d(val* self, short int p0) {
88 compiler_ffi__AModule__uses_legacy_ni_61d(self, p0);
89 RET_LABEL:;
90 }
91 /* method compiler_ffi#AModule#finalize_ffi for (self: AModule, AbstractCompilerVisitor, ModelBuilder) */
92 void compiler_ffi__AModule__finalize_ffi(val* self, val* p0, val* p1) {
93 val* var_v /* var v: AbstractCompilerVisitor */;
94 val* var_modelbuilder /* var modelbuilder: ModelBuilder */;
95 val* var /* : AbstractCompiler */;
96 val* var1 /* : ModelBuilder */;
97 val* var2 /* : String */;
98 val* var3 /* : AbstractCompiler */;
99 val* var4 /* : MModule */;
100 val* var5 /* : Array[ExternFile] */;
101 val* var6 /* : Iterator[nullable Object] */;
102 short int var7 /* : Bool */;
103 val* var8 /* : nullable Object */;
104 val* var_file /* var file: ExternFile */;
105 val* var9 /* : AbstractCompiler */;
106 val* var10 /* : Array[ExternFile] */;
107 var_v = p0;
108 var_modelbuilder = p1;
109 var = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
110 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var) /* modelbuilder on <var:AbstractCompiler>*/;
111 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_compiler__ModelBuilder__compile_dir]))(var1) /* compile_dir on <var1:ModelBuilder>*/;
112 var3 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
113 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var3) /* mainmodule on <var3:AbstractCompiler>*/;
114 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_common_ffi__AModule__finalize_ffi_wrapper]))(self, var2, var4) /* finalize_ffi_wrapper on <self:AModule>*/;
115 var5 = ((val* (*)(val*))(self->class->vft[COLOR_ffi_base__AModule__ffi_files]))(self) /* ffi_files on <self:AModule>*/;
116 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__iterator]))(var5) /* iterator on <var5:Array[ExternFile]>*/;
117 for(;;) {
118 var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[nullable Object]>*/;
119 if(!var7) break;
120 var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[nullable Object]>*/;
121 var_file = var8;
122 var9 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
123 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_compiler__AbstractCompiler__extern_bodies]))(var9) /* extern_bodies on <var9:AbstractCompiler>*/;
124 ((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var10, var_file) /* add on <var10:Array[ExternFile]>*/;
125 CONTINUE_label: (void)0;
126 ((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
127 }
128 BREAK_label: (void)0;
129 RET_LABEL:;
130 }
131 /* method compiler_ffi#AModule#finalize_ffi for (self: Object, AbstractCompilerVisitor, ModelBuilder) */
132 void VIRTUAL_compiler_ffi__AModule__finalize_ffi(val* self, val* p0, val* p1) {
133 compiler_ffi__AModule__finalize_ffi(self, p0, p1);
134 RET_LABEL:;
135 }
136 /* method compiler_ffi#AModule#ensure_compile_nitni_base for (self: AModule, AbstractCompilerVisitor) */
137 void compiler_ffi__AModule__ensure_compile_nitni_base(val* self, val* p0) {
138 val* var_v /* var v: AbstractCompilerVisitor */;
139 val* var /* : nullable CCompilationUnit */;
140 val* var1 /* : null */;
141 short int var2 /* : Bool */;
142 val* var3 /* : CCompilationUnit */;
143 var_v = p0;
144 var = ((val* (*)(val*))(self->class->vft[COLOR_compiler_ffi__AModule__nitni_ccu]))(self) /* nitni_ccu on <self:AModule>*/;
145 var1 = NULL;
146 if (var == NULL) {
147 var2 = 0; /* is null */
148 } else {
149 var2 = 1; /* arg is null and recv is not */
150 }
151 if (var2){
152 goto RET_LABEL;
153 } else {
154 }
155 var3 = NEW_c_tools__CCompilationUnit(&type_c_tools__CCompilationUnit);
156 ((void (*)(val*))(var3->class->vft[COLOR_c_tools__CCompilationUnit__init]))(var3) /* init on <var3:CCompilationUnit>*/;
157 ((void (*)(val*, val*))(self->class->vft[COLOR_compiler_ffi__AModule__nitni_ccu_61d]))(self, var3) /* nitni_ccu= on <self:AModule>*/;
158 RET_LABEL:;
159 }
160 /* method compiler_ffi#AModule#ensure_compile_nitni_base for (self: Object, AbstractCompilerVisitor) */
161 void VIRTUAL_compiler_ffi__AModule__ensure_compile_nitni_base(val* self, val* p0) {
162 compiler_ffi__AModule__ensure_compile_nitni_base(self, p0);
163 RET_LABEL:;
164 }
165 /* method compiler_ffi#AModule#finalize_nitni for (self: AModule, AbstractCompilerVisitor) */
166 void compiler_ffi__AModule__finalize_nitni(val* self, val* p0) {
167 val* var_v /* var v: AbstractCompilerVisitor */;
168 val* var /* : nullable CCompilationUnit */;
169 val* var1 /* : Template */;
170 static val* varonce;
171 val* var2 /* : String */;
172 char* var3 /* : NativeString */;
173 long var4 /* : Int */;
174 val* var5 /* : String */;
175 val* var6 /* : nullable MModule */;
176 val* var7 /* : String */;
177 static val* varonce8;
178 val* var9 /* : String */;
179 char* var10 /* : NativeString */;
180 long var11 /* : Int */;
181 val* var12 /* : String */;
182 val* var13 /* : Array[Object] */;
183 long var14 /* : Int */;
184 val* var15 /* : NativeArray[Object] */;
185 val* var16 /* : String */;
186 val* var17 /* : nullable CCompilationUnit */;
187 val* var18 /* : AbstractCompiler */;
188 val* var19 /* : ModelBuilder */;
189 val* var20 /* : String */;
190 val* var21 /* : nullable CCompilationUnit */;
191 val* var22 /* : Array[String] */;
192 val* var23 /* : Iterator[nullable Object] */;
193 short int var24 /* : Bool */;
194 val* var25 /* : nullable Object */;
195 val* var_file /* var file: String */;
196 val* var26 /* : AbstractCompiler */;
197 val* var27 /* : Array[ExternFile] */;
198 val* var28 /* : ExternCFile */;
199 val* var29 /* : String */;
200 var_v = p0;
201 ((void (*)(val*, val*))(self->class->vft[COLOR_compiler_ffi__AModule__ensure_compile_nitni_base]))(self, var_v) /* ensure_compile_nitni_base on <self:AModule>*/;
202 var = ((val* (*)(val*))(self->class->vft[COLOR_compiler_ffi__AModule__nitni_ccu]))(self) /* nitni_ccu on <self:AModule>*/;
203 if (var == NULL) {
204 fprintf(stderr, "Runtime error: %s", "Receiver is null");
205 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 47);
206 show_backtrace(1);
207 } else {
208 var1 = ((val* (*)(val*))(var->class->vft[COLOR_c_tools__CCompilationUnit__header_c_types]))(var) /* header_c_types on <var:nullable CCompilationUnit>*/;
209 }
210 if (varonce) {
211 var2 = varonce;
212 } else {
213 var3 = "#include \"";
214 var4 = 10;
215 var5 = string__NativeString__to_s_with_length(var3, var4);
216 var2 = var5;
217 varonce = var2;
218 }
219 var6 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__AModule__mmodule]))(self) /* mmodule on <self:AModule>*/;
220 if (var6 == NULL) {
221 fprintf(stderr, "Runtime error: %s", "Receiver is null");
222 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 47);
223 show_backtrace(1);
224 } else {
225 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_mmodule__MModule__name]))(var6) /* name on <var6:nullable MModule>*/;
226 }
227 if (varonce8) {
228 var9 = varonce8;
229 } else {
230 var10 = "._ffi.h\"\n";
231 var11 = 9;
232 var12 = string__NativeString__to_s_with_length(var10, var11);
233 var9 = var12;
234 varonce8 = var9;
235 }
236 var13 = NEW_array__Array(&type_array__Arraykernel__Object);
237 { /* var13 = array_instance Array[Object] */
238 var14 = 3;
239 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraykernel__Object);
240 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var2;
241 ((struct instance_array__NativeArray*)var15)->values[1] = (val*) var7;
242 ((struct instance_array__NativeArray*)var15)->values[2] = (val*) var9;
243 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[Object]>*/;
244 }
245 var16 = ((val* (*)(val*))(var13->class->vft[COLOR_string__Object__to_s]))(var13) /* to_s on <var13:Array[Object]>*/;
246 ((void (*)(val*, val*))(var1->class->vft[COLOR_template__Template__add]))(var1, var16) /* add on <var1:Template>*/;
247 var17 = ((val* (*)(val*))(self->class->vft[COLOR_compiler_ffi__AModule__nitni_ccu]))(self) /* nitni_ccu on <self:AModule>*/;
248 var18 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
249 var19 = ((val* (*)(val*))(var18->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var18) /* modelbuilder on <var18:AbstractCompiler>*/;
250 var20 = ((val* (*)(val*))(var19->class->vft[COLOR_abstract_compiler__ModelBuilder__compile_dir]))(var19) /* compile_dir on <var19:ModelBuilder>*/;
251 if (var17 == NULL) {
252 fprintf(stderr, "Runtime error: %s", "Receiver is null");
253 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 49);
254 show_backtrace(1);
255 } else {
256 ((void (*)(val*, val*, val*))(var17->class->vft[COLOR_compiler_ffi__CCompilationUnit__write_as_nitni]))(var17, self, var20) /* write_as_nitni on <var17:nullable CCompilationUnit>*/;
257 }
258 var21 = ((val* (*)(val*))(self->class->vft[COLOR_compiler_ffi__AModule__nitni_ccu]))(self) /* nitni_ccu on <self:AModule>*/;
259 if (var21 == NULL) {
260 fprintf(stderr, "Runtime error: %s", "Receiver is null");
261 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 51);
262 show_backtrace(1);
263 } else {
264 var22 = ((val* (*)(val*))(var21->class->vft[COLOR_c_tools__CCompilationUnit__files]))(var21) /* files on <var21:nullable CCompilationUnit>*/;
265 }
266 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_abstract_collection__Collection__iterator]))(var22) /* iterator on <var22:Array[String]>*/;
267 for(;;) {
268 var24 = ((short int (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var23) /* is_ok on <var23:Iterator[nullable Object]>*/;
269 if(!var24) break;
270 var25 = ((val* (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator__item]))(var23) /* item on <var23:Iterator[nullable Object]>*/;
271 var_file = var25;
272 var26 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
273 var27 = ((val* (*)(val*))(var26->class->vft[COLOR_abstract_compiler__AbstractCompiler__extern_bodies]))(var26) /* extern_bodies on <var26:AbstractCompiler>*/;
274 var28 = NEW_c__ExternCFile(&type_c__ExternCFile);
275 var29 = ((val* (*)(val*))(self->class->vft[COLOR_c__AModule__c_compiler_options]))(self) /* c_compiler_options on <self:AModule>*/;
276 ((void (*)(val*, val*, val*))(var28->class->vft[COLOR_c__ExternCFile__init]))(var28, var_file, var29) /* init on <var28:ExternCFile>*/;
277 ((void (*)(val*, val*))(var27->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var27, var28) /* add on <var27:Array[ExternFile]>*/;
278 CONTINUE_label: (void)0;
279 ((void (*)(val*))(var23->class->vft[COLOR_abstract_collection__Iterator__next]))(var23) /* next on <var23:Iterator[nullable Object]>*/;
280 }
281 BREAK_label: (void)0;
282 RET_LABEL:;
283 }
284 /* method compiler_ffi#AModule#finalize_nitni for (self: Object, AbstractCompilerVisitor) */
285 void VIRTUAL_compiler_ffi__AModule__finalize_nitni(val* self, val* p0) {
286 compiler_ffi__AModule__finalize_nitni(self, p0);
287 RET_LABEL:;
288 }
289 /* method compiler_ffi#AModule#compiled_callbacks for (self: AModule): Array[NitniCallback] */
290 val* compiler_ffi__AModule__compiled_callbacks(val* self) {
291 val* var /* : Array[NitniCallback] */;
292 val* var1 /* : Array[NitniCallback] */;
293 var1 = self->attrs[COLOR_compiler_ffi__AModule___64dcompiled_callbacks].val; /* @compiled_callbacks on <self:AModule> */
294 if (var1 == NULL) {
295 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @compiled_callbacks");
296 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 56);
297 show_backtrace(1);
298 }
299 var = var1;
300 RET_LABEL:;
301 return var;
302 }
303 /* method compiler_ffi#AModule#compiled_callbacks for (self: Object): Array[NitniCallback] */
304 val* VIRTUAL_compiler_ffi__AModule__compiled_callbacks(val* self) {
305 val* var /* : Array[NitniCallback] */;
306 val* var1 /* : Array[NitniCallback] */;
307 var1 = compiler_ffi__AModule__compiled_callbacks(self);
308 var = var1;
309 RET_LABEL:;
310 return var;
311 }
312 /* method compiler_ffi#AModule#compiled_callbacks= for (self: AModule, Array[NitniCallback]) */
313 void compiler_ffi__AModule__compiled_callbacks_61d(val* self, val* p0) {
314 self->attrs[COLOR_compiler_ffi__AModule___64dcompiled_callbacks].val = p0; /* @compiled_callbacks on <self:AModule> */
315 RET_LABEL:;
316 }
317 /* method compiler_ffi#AModule#compiled_callbacks= for (self: Object, Array[NitniCallback]) */
318 void VIRTUAL_compiler_ffi__AModule__compiled_callbacks_61d(val* self, val* p0) {
319 compiler_ffi__AModule__compiled_callbacks_61d(self, p0);
320 RET_LABEL:;
321 }
322 /* method compiler_ffi#AModule#check_callback_compilation for (self: AModule, NitniCallback): Bool */
323 short int compiler_ffi__AModule__check_callback_compilation(val* self, val* p0) {
324 short int var /* : Bool */;
325 val* var_cb /* var cb: NitniCallback */;
326 val* var1 /* : Array[NitniCallback] */;
327 short int var2 /* : Bool */;
328 short int var_compiled /* var compiled: Bool */;
329 short int var3 /* : Bool */;
330 val* var4 /* : Array[NitniCallback] */;
331 short int var5 /* : Bool */;
332 var_cb = p0;
333 var1 = ((val* (*)(val*))(self->class->vft[COLOR_compiler_ffi__AModule__compiled_callbacks]))(self) /* compiled_callbacks on <self:AModule>*/;
334 var2 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__Collection__has]))(var1, var_cb) /* has on <var1:Array[NitniCallback]>*/;
335 var_compiled = var2;
336 var3 = !var_compiled;
337 if (var3){
338 var4 = ((val* (*)(val*))(self->class->vft[COLOR_compiler_ffi__AModule__compiled_callbacks]))(self) /* compiled_callbacks on <self:AModule>*/;
339 ((void (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var4, var_cb) /* add on <var4:Array[NitniCallback]>*/;
340 } else {
341 }
342 var5 = !var_compiled;
343 var = var5;
344 goto RET_LABEL;
345 RET_LABEL:;
346 return var;
347 }
348 /* method compiler_ffi#AModule#check_callback_compilation for (self: Object, NitniCallback): Bool */
349 short int VIRTUAL_compiler_ffi__AModule__check_callback_compilation(val* self, val* p0) {
350 short int var /* : Bool */;
351 short int var1 /* : Bool */;
352 var1 = compiler_ffi__AModule__check_callback_compilation(self, p0);
353 var = var1;
354 RET_LABEL:;
355 return var;
356 }
357 /* method compiler_ffi#AExternPropdef#compile_ffi_support_to_c for (self: AExternPropdef, AbstractCompilerVisitor) */
358 void compiler_ffi__AExternPropdef__compile_ffi_support_to_c(val* self, val* p0) {
359 val* var_v /* var v: AbstractCompilerVisitor */;
360 val* var /* : nullable MPropDef */;
361 val* var1 /* : MClassDef */;
362 val* var2 /* : MModule */;
363 val* var_mmodule /* var mmodule: MModule */;
364 val* var3 /* : AbstractCompiler */;
365 val* var4 /* : ModelBuilder */;
366 val* var5 /* : HashMap[MModule, AModule] */;
367 val* var6 /* : AbstractCompiler */;
368 val* var7 /* : MModule */;
369 val* var8 /* : nullable Object */;
370 val* var_amainmodule /* var amainmodule: AModule */;
371 val* var9 /* : AbstractCompiler */;
372 val* var10 /* : ModelBuilder */;
373 val* var11 /* : HashMap[MModule, AModule] */;
374 val* var12 /* : nullable Object */;
375 val* var_amodule /* var amodule: AModule */;
376 val* var13 /* : nullable MPropDef */;
377 val* var14 /* : MClassDef */;
378 val* var15 /* : MClassType */;
379 val* var_mclass_type /* var mclass_type: MClassType */;
380 val* var16 /* : nullable MPropDef */;
381 val* var17 /* : MProperty */;
382 static val* varonce;
383 val* var18 /* : String */;
384 char* var19 /* : NativeString */;
385 long var20 /* : Int */;
386 val* var21 /* : String */;
387 val* var22 /* : SignatureLength */;
388 val* var23 /* : CallContext */;
389 val* var24 /* : String */;
390 val* var_csignature /* var csignature: String */;
391 static val* varonce25;
392 val* var26 /* : String */;
393 char* var27 /* : NativeString */;
394 long var28 /* : Int */;
395 val* var29 /* : String */;
396 val* var30 /* : Array[Object] */;
397 long var31 /* : Int */;
398 val* var32 /* : NativeArray[Object] */;
399 val* var33 /* : String */;
400 val* var34 /* : nullable CCompilationUnit */;
401 val* var_ccu /* var ccu: CCompilationUnit */;
402 val* var35 /* : ForeignCallbackSet */;
403 val* var36 /* : Set[MType] */;
404 val* var37 /* : Iterator[nullable Object] */;
405 short int var38 /* : Bool */;
406 val* var39 /* : nullable Object */;
407 val* var_mtype /* var mtype: MType */;
408 short int var40 /* : Bool */;
409 short int var41 /* : Bool */;
410 short int var42 /* : Bool */;
411 val* var43 /* : ForeignCallbackSet */;
412 val* var44 /* : Set[MExplicitCall] */;
413 val* var45 /* : Iterator[nullable Object] */;
414 short int var46 /* : Bool */;
415 val* var47 /* : nullable Object */;
416 val* var_cb /* var cb: MExplicitCall */;
417 short int var48 /* : Bool */;
418 val* var50 /* : ForeignCallbackSet */;
419 val* var51 /* : Set[MExplicitSuper] */;
420 val* var52 /* : Iterator[nullable Object] */;
421 short int var53 /* : Bool */;
422 val* var54 /* : nullable Object */;
423 val* var_cb55 /* var cb: MExplicitSuper */;
424 short int var56 /* : Bool */;
425 val* var58 /* : ForeignCallbackSet */;
426 val* var59 /* : Set[MExplicitCast] */;
427 val* var60 /* : Iterator[nullable Object] */;
428 short int var61 /* : Bool */;
429 val* var62 /* : nullable Object */;
430 val* var_cb63 /* var cb: MExplicitCast */;
431 short int var64 /* : Bool */;
432 val* var66 /* : ForeignCallbackSet */;
433 val* var67 /* : ForeignCallbackSet */;
434 var_v = p0;
435 var = ((val* (*)(val*))(self->class->vft[COLOR_modelize_property__APropdef__mpropdef]))(self) /* mpropdef on <self:AExternPropdef>*/;
436 if (var == NULL) {
437 fprintf(stderr, "Runtime error: %s", "Receiver is null");
438 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 70);
439 show_backtrace(1);
440 } else {
441 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model__MPropDef__mclassdef]))(var) /* mclassdef on <var:nullable MPropDef(nullable MMethodDef)>*/;
442 }
443 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_model__MClassDef__mmodule]))(var1) /* mmodule on <var1:MClassDef>*/;
444 var_mmodule = var2;
445 var3 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
446 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var3) /* modelbuilder on <var3:AbstractCompiler>*/;
447 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(var4) /* mmodule2nmodule on <var4:ModelBuilder>*/;
448 var6 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
449 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var6) /* mainmodule on <var6:AbstractCompiler>*/;
450 var8 = ((val* (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var5, var7) /* [] on <var5:HashMap[MModule, AModule]>*/;
451 var_amainmodule = var8;
452 var9 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
453 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var9) /* modelbuilder on <var9:AbstractCompiler>*/;
454 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(var10) /* mmodule2nmodule on <var10:ModelBuilder>*/;
455 var12 = ((val* (*)(val*, val*))(var11->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var11, var_mmodule) /* [] on <var11:HashMap[MModule, AModule]>*/;
456 var_amodule = var12;
457 var13 = ((val* (*)(val*))(self->class->vft[COLOR_modelize_property__APropdef__mpropdef]))(self) /* mpropdef on <self:AExternPropdef>*/;
458 if (var13 == NULL) {
459 fprintf(stderr, "Runtime error: %s", "Receiver is null");
460 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 73);
461 show_backtrace(1);
462 } else {
463 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_model__MPropDef__mclassdef]))(var13) /* mclassdef on <var13:nullable MPropDef(nullable MMethodDef)>*/;
464 }
465 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_model__MClassDef__bound_mtype]))(var14) /* bound_mtype on <var14:MClassDef>*/;
466 var_mclass_type = var15;
467 var16 = ((val* (*)(val*))(self->class->vft[COLOR_modelize_property__APropdef__mpropdef]))(self) /* mpropdef on <self:AExternPropdef>*/;
468 if (var16 == NULL) {
469 fprintf(stderr, "Runtime error: %s", "Receiver is null");
470 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 76);
471 show_backtrace(1);
472 } else {
473 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_model__MPropDef__mproperty]))(var16) /* mproperty on <var16:nullable MPropDef(nullable MMethodDef)>*/;
474 }
475 if (varonce) {
476 var18 = varonce;
477 } else {
478 var19 = "___impl";
479 var20 = 7;
480 var21 = string__NativeString__to_s_with_length(var19, var20);
481 var18 = var21;
482 varonce = var18;
483 }
484 var22 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:AExternPropdef>*/;
485 var23 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__internal_call_context]))(self) /* internal_call_context on <self:AExternPropdef>*/;
486 var24 = ((val* (*)(val*, val*, val*, val*, val*, val*))(var17->class->vft[COLOR_nitni_utilities__MMethod__build_csignature]))(var17, var_mclass_type, var_mmodule, var18, var22, var23) /* build_csignature on <var17:MProperty(MMethod)>*/;
487 var_csignature = var24;
488 if (varonce25) {
489 var26 = varonce25;
490 } else {
491 var27 = ";";
492 var28 = 1;
493 var29 = string__NativeString__to_s_with_length(var27, var28);
494 var26 = var29;
495 varonce25 = var26;
496 }
497 var30 = NEW_array__Array(&type_array__Arraykernel__Object);
498 { /* var30 = array_instance Array[Object] */
499 var31 = 2;
500 var32 = NEW_array__NativeArray(var31, &type_array__NativeArraykernel__Object);
501 ((struct instance_array__NativeArray*)var32)->values[0] = (val*) var_csignature;
502 ((struct instance_array__NativeArray*)var32)->values[1] = (val*) var26;
503 ((void (*)(val*, val*, long))(var30->class->vft[COLOR_array__Array__with_native]))(var30, var32, var31) /* with_native on <var30:Array[Object]>*/;
504 }
505 var33 = ((val* (*)(val*))(var30->class->vft[COLOR_string__Object__to_s]))(var30) /* to_s on <var30:Array[Object]>*/;
506 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__declare_once]))(var_v, var33) /* declare_once on <var_v:AbstractCompilerVisitor>*/;
507 ((void (*)(val*, val*))(self->class->vft[COLOR_common_ffi__AExternPropdef__compile_ffi_method]))(self, var_amodule) /* compile_ffi_method on <self:AExternPropdef>*/;
508 ((void (*)(val*, val*))(var_amodule->class->vft[COLOR_compiler_ffi__AModule__ensure_compile_nitni_base]))(var_amodule, var_v) /* ensure_compile_nitni_base on <var_amodule:AModule>*/;
509 var34 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_compiler_ffi__AModule__nitni_ccu]))(var_amodule) /* nitni_ccu on <var_amodule:AModule>*/;
510 if (var34 == NULL) {
511 fprintf(stderr, "Runtime error: %s", "Cast failed");
512 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 84);
513 show_backtrace(1);
514 }
515 var_ccu = var34;
516 var35 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__AExternPropdef__foreign_callbacks]))(self) /* foreign_callbacks on <self:AExternPropdef>*/;
517 var36 = ((val* (*)(val*))(var35->class->vft[COLOR_nitni_callbacks__ForeignCallbackSet__types]))(var35) /* types on <var35:ForeignCallbackSet>*/;
518 var37 = ((val* (*)(val*))(var36->class->vft[COLOR_abstract_collection__Collection__iterator]))(var36) /* iterator on <var36:Set[MType]>*/;
519 for(;;) {
520 var38 = ((short int (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var37) /* is_ok on <var37:Iterator[nullable Object]>*/;
521 if(!var38) break;
522 var39 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__item]))(var37) /* item on <var37:Iterator[nullable Object]>*/;
523 var_mtype = var39;
524 var40 = ((short int (*)(val*))(var_mtype->class->vft[COLOR_nitni_base__MType__is_cprimitive]))(var_mtype) /* is_cprimitive on <var_mtype:MType>*/;
525 var41 = !var40;
526 if (var41){
527 ((void (*)(val*, val*, val*))(var_mtype->class->vft[COLOR_compiler_ffi__MType__compile_extern_type]))(var_mtype, var_v, var_ccu) /* compile_extern_type on <var_mtype:MType>*/;
528 var42 = ((short int (*)(val*, val*))(var_amodule->class->vft[COLOR_compiler_ffi__AModule__check_callback_compilation]))(var_amodule, var_mtype) /* check_callback_compilation on <var_amodule:AModule>*/;
529 if (var42){
530 ((void (*)(val*, val*, val*))(var_mtype->class->vft[COLOR_compiler_ffi__MType__compile_extern_helper_functions]))(var_mtype, var_v, var_ccu) /* compile_extern_helper_functions on <var_mtype:MType>*/;
531 } else {
532 }
533 } else {
534 }
535 CONTINUE_label: (void)0;
536 ((void (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__next]))(var37) /* next on <var37:Iterator[nullable Object]>*/;
537 }
538 BREAK_label: (void)0;
539 var43 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__AExternPropdef__foreign_callbacks]))(self) /* foreign_callbacks on <self:AExternPropdef>*/;
540 var44 = ((val* (*)(val*))(var43->class->vft[COLOR_nitni_callbacks__ForeignCallbackSet__callbacks]))(var43) /* callbacks on <var43:ForeignCallbackSet>*/;
541 var45 = ((val* (*)(val*))(var44->class->vft[COLOR_abstract_collection__Collection__iterator]))(var44) /* iterator on <var44:Set[MExplicitCall]>*/;
542 for(;;) {
543 var46 = ((short int (*)(val*))(var45->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var45) /* is_ok on <var45:Iterator[nullable Object]>*/;
544 if(!var46) break;
545 var47 = ((val* (*)(val*))(var45->class->vft[COLOR_abstract_collection__Iterator__item]))(var45) /* item on <var45:Iterator[nullable Object]>*/;
546 var_cb = var47;
547 var48 = ((short int (*)(val*, val*))(var_amainmodule->class->vft[COLOR_compiler_ffi__AModule__check_callback_compilation]))(var_amainmodule, var_cb) /* check_callback_compilation on <var_amainmodule:AModule>*/;
548 if (var48){
549 ((void (*)(val*, val*, val*))(var_cb->class->vft[COLOR_compiler_ffi__MExplicitCall__compile_extern_callback]))(var_cb, var_v, var_ccu) /* compile_extern_callback on <var_cb:MExplicitCall>*/;
550 } else {
551 }
552 CONTINUE_label49: (void)0;
553 ((void (*)(val*))(var45->class->vft[COLOR_abstract_collection__Iterator__next]))(var45) /* next on <var45:Iterator[nullable Object]>*/;
554 }
555 BREAK_label49: (void)0;
556 var50 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__AExternPropdef__foreign_callbacks]))(self) /* foreign_callbacks on <self:AExternPropdef>*/;
557 var51 = ((val* (*)(val*))(var50->class->vft[COLOR_nitni_callbacks__ForeignCallbackSet__supers]))(var50) /* supers on <var50:ForeignCallbackSet>*/;
558 var52 = ((val* (*)(val*))(var51->class->vft[COLOR_abstract_collection__Collection__iterator]))(var51) /* iterator on <var51:Set[MExplicitSuper]>*/;
559 for(;;) {
560 var53 = ((short int (*)(val*))(var52->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var52) /* is_ok on <var52:Iterator[nullable Object]>*/;
561 if(!var53) break;
562 var54 = ((val* (*)(val*))(var52->class->vft[COLOR_abstract_collection__Iterator__item]))(var52) /* item on <var52:Iterator[nullable Object]>*/;
563 var_cb55 = var54;
564 var56 = ((short int (*)(val*, val*))(var_amainmodule->class->vft[COLOR_compiler_ffi__AModule__check_callback_compilation]))(var_amainmodule, var_cb55) /* check_callback_compilation on <var_amainmodule:AModule>*/;
565 if (var56){
566 ((void (*)(val*, val*, val*))(var_cb55->class->vft[COLOR_compiler_ffi__MExplicitSuper__compile_extern_callback]))(var_cb55, var_v, var_ccu) /* compile_extern_callback on <var_cb55:MExplicitSuper>*/;
567 } else {
568 }
569 CONTINUE_label57: (void)0;
570 ((void (*)(val*))(var52->class->vft[COLOR_abstract_collection__Iterator__next]))(var52) /* next on <var52:Iterator[nullable Object]>*/;
571 }
572 BREAK_label57: (void)0;
573 var58 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__AExternPropdef__foreign_callbacks]))(self) /* foreign_callbacks on <self:AExternPropdef>*/;
574 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_nitni_callbacks__ForeignCallbackSet__casts]))(var58) /* casts on <var58:ForeignCallbackSet>*/;
575 var60 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Collection__iterator]))(var59) /* iterator on <var59:Set[MExplicitCast]>*/;
576 for(;;) {
577 var61 = ((short int (*)(val*))(var60->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var60) /* is_ok on <var60:Iterator[nullable Object]>*/;
578 if(!var61) break;
579 var62 = ((val* (*)(val*))(var60->class->vft[COLOR_abstract_collection__Iterator__item]))(var60) /* item on <var60:Iterator[nullable Object]>*/;
580 var_cb63 = var62;
581 var64 = ((short int (*)(val*, val*))(var_amainmodule->class->vft[COLOR_compiler_ffi__AModule__check_callback_compilation]))(var_amainmodule, var_cb63) /* check_callback_compilation on <var_amainmodule:AModule>*/;
582 if (var64){
583 ((void (*)(val*, val*, val*))(var_cb63->class->vft[COLOR_compiler_ffi__MExplicitCast__compile_extern_callbacks]))(var_cb63, var_v, var_ccu) /* compile_extern_callbacks on <var_cb63:MExplicitCast>*/;
584 } else {
585 }
586 CONTINUE_label65: (void)0;
587 ((void (*)(val*))(var60->class->vft[COLOR_abstract_collection__Iterator__next]))(var60) /* next on <var60:Iterator[nullable Object]>*/;
588 }
589 BREAK_label65: (void)0;
590 var66 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_compiler_ffi__AModule__foreign_callbacks]))(var_amodule) /* foreign_callbacks on <var_amodule:AModule>*/;
591 var67 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__AExternPropdef__foreign_callbacks]))(self) /* foreign_callbacks on <self:AExternPropdef>*/;
592 ((void (*)(val*, val*))(var66->class->vft[COLOR_nitni_callbacks__ForeignCallbackSet__join]))(var66, var67) /* join on <var66:ForeignCallbackSet>*/;
593 RET_LABEL:;
594 }
595 /* method compiler_ffi#AExternPropdef#compile_ffi_support_to_c for (self: Object, AbstractCompilerVisitor) */
596 void VIRTUAL_compiler_ffi__AExternPropdef__compile_ffi_support_to_c(val* self, val* p0) {
597 compiler_ffi__AExternPropdef__compile_ffi_support_to_c(self, p0);
598 RET_LABEL:;
599 }
600 /* method compiler_ffi#AExternMethPropdef#compile_to_c for (self: AExternMethPropdef, AbstractCompilerVisitor, MMethodDef, Array[RuntimeVariable]) */
601 void compiler_ffi__AExternMethPropdef__compile_to_c(val* self, val* p0, val* p1, val* p2) {
602 val* var_v /* var v: AbstractCompilerVisitor */;
603 val* var_mpropdef /* var mpropdef: MMethodDef */;
604 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
605 val* var /* : MClassDef */;
606 val* var1 /* : MModule */;
607 val* var_mmodule /* var mmodule: MModule */;
608 val* var2 /* : AbstractCompiler */;
609 val* var3 /* : ModelBuilder */;
610 val* var4 /* : HashMap[MModule, AModule] */;
611 val* var5 /* : nullable Object */;
612 val* var_amodule /* var amodule: AModule */;
613 val* var6 /* : nullable TString */;
614 val* var_nextern /* var nextern: nullable TString */;
615 val* var7 /* : null */;
616 short int var8 /* : Bool */;
617 short int var9 /* : Bool */;
618 val* var10 /* : nullable MModule */;
619 short int var11 /* : Bool */;
620 val* var12 /* : MClassDef */;
621 val* var13 /* : MClassType */;
622 val* var_mclass_type /* var mclass_type: MClassType */;
623 val* var14 /* : MProperty */;
624 val* var15 /* : MClassDef */;
625 val* var16 /* : MClassType */;
626 static val* varonce;
627 val* var17 /* : String */;
628 char* var18 /* : NativeString */;
629 long var19 /* : Int */;
630 val* var20 /* : String */;
631 val* var21 /* : SignatureLength */;
632 val* var22 /* : String */;
633 val* var_externname /* var externname: String */;
634 val* var23 /* : null */;
635 val* var_recv_var /* var recv_var: nullable RuntimeVariable */;
636 val* var24 /* : nullable MSignature */;
637 val* var25 /* : nullable MType */;
638 val* var_return_mtype /* var return_mtype: nullable MType */;
639 val* var26 /* : null */;
640 short int var27 /* : Bool */;
641 val* var28 /* : MType */;
642 val* var29 /* : RuntimeVariable */;
643 val* var30 /* : Array[String] */;
644 val* var_arguments_for_c /* var arguments_for_c: Array[String] */;
645 val* var31 /* : Range[Int] */;
646 long var32 /* : Int */;
647 long var33 /* : Int */;
648 val* var34 /* : Discrete */;
649 val* var35 /* : Discrete */;
650 val* var36 /* : Iterator[nullable Object] */;
651 short int var37 /* : Bool */;
652 val* var38 /* : nullable Object */;
653 long var_a /* var a: Int */;
654 long var39 /* : Int */;
655 val* var40 /* : nullable Object */;
656 val* var_arg /* var arg: RuntimeVariable */;
657 long var41 /* : Int */;
658 short int var42 /* : Bool */;
659 short int var44 /* : Bool */;
660 val* var45 /* : MClassDef */;
661 val* var46 /* : MClass */;
662 val* var47 /* : MClassType */;
663 val* var_param_mtype /* var param_mtype: MType */;
664 val* var48 /* : nullable MSignature */;
665 val* var49 /* : Array[MParameter] */;
666 long var50 /* : Int */;
667 long var51 /* : Int */;
668 long var53 /* : Int */;
669 val* var54 /* : nullable Object */;
670 val* var55 /* : MType */;
671 val* var56 /* : MType */;
672 short int var57 /* : Bool */;
673 val* var58 /* : String */;
674 static val* varonce59;
675 val* var60 /* : String */;
676 char* var61 /* : NativeString */;
677 long var62 /* : Int */;
678 val* var63 /* : String */;
679 static val* varonce64;
680 val* var65 /* : String */;
681 char* var66 /* : NativeString */;
682 long var67 /* : Int */;
683 val* var68 /* : String */;
684 val* var69 /* : Array[Object] */;
685 long var70 /* : Int */;
686 val* var71 /* : NativeArray[Object] */;
687 val* var72 /* : Object */;
688 val* var73 /* : String */;
689 static val* varonce74;
690 val* var75 /* : String */;
691 char* var76 /* : NativeString */;
692 long var77 /* : Int */;
693 val* var78 /* : String */;
694 static val* varonce79;
695 val* var80 /* : String */;
696 char* var81 /* : NativeString */;
697 long var82 /* : Int */;
698 val* var83 /* : String */;
699 val* var84 /* : Array[Object] */;
700 long var85 /* : Int */;
701 val* var86 /* : NativeArray[Object] */;
702 val* var87 /* : Object */;
703 val* var88 /* : String */;
704 static val* varonce89;
705 val* var90 /* : String */;
706 char* var91 /* : NativeString */;
707 long var92 /* : Int */;
708 val* var93 /* : String */;
709 static val* varonce94;
710 val* var95 /* : String */;
711 char* var96 /* : NativeString */;
712 long var97 /* : Int */;
713 val* var98 /* : String */;
714 val* var99 /* : String */;
715 static val* varonce100;
716 val* var101 /* : String */;
717 char* var102 /* : NativeString */;
718 long var103 /* : Int */;
719 val* var104 /* : String */;
720 val* var105 /* : Array[Object] */;
721 long var106 /* : Int */;
722 val* var107 /* : NativeArray[Object] */;
723 val* var108 /* : Object */;
724 val* var109 /* : String */;
725 static val* varonce110;
726 val* var111 /* : String */;
727 char* var112 /* : NativeString */;
728 long var113 /* : Int */;
729 val* var114 /* : String */;
730 val* var115 /* : Array[Object] */;
731 long var116 /* : Int */;
732 val* var117 /* : NativeArray[Object] */;
733 val* var118 /* : Object */;
734 val* var119 /* : String */;
735 val* var120 /* : null */;
736 short int var121 /* : Bool */;
737 static val* varonce122;
738 val* var123 /* : String */;
739 char* var124 /* : NativeString */;
740 long var125 /* : Int */;
741 val* var126 /* : String */;
742 static val* varonce127;
743 val* var128 /* : String */;
744 char* var129 /* : NativeString */;
745 long var130 /* : Int */;
746 val* var131 /* : String */;
747 val* var132 /* : String */;
748 static val* varonce133;
749 val* var134 /* : String */;
750 char* var135 /* : NativeString */;
751 long var136 /* : Int */;
752 val* var137 /* : String */;
753 val* var138 /* : Array[Object] */;
754 long var139 /* : Int */;
755 val* var140 /* : NativeArray[Object] */;
756 val* var141 /* : String */;
757 val* var142 /* : null */;
758 short int var143 /* : Bool */;
759 short int var144 /* : Bool */;
760 static val* varonce145;
761 val* var146 /* : String */;
762 char* var147 /* : NativeString */;
763 long var148 /* : Int */;
764 val* var149 /* : String */;
765 static val* varonce150;
766 val* var151 /* : String */;
767 char* var152 /* : NativeString */;
768 long var153 /* : Int */;
769 val* var154 /* : String */;
770 static val* varonce155;
771 val* var156 /* : String */;
772 char* var157 /* : NativeString */;
773 long var158 /* : Int */;
774 val* var159 /* : String */;
775 val* var160 /* : String */;
776 static val* varonce161;
777 val* var162 /* : String */;
778 char* var163 /* : NativeString */;
779 long var164 /* : Int */;
780 val* var165 /* : String */;
781 val* var166 /* : Array[Object] */;
782 long var167 /* : Int */;
783 val* var168 /* : NativeArray[Object] */;
784 val* var169 /* : String */;
785 static val* varonce170;
786 val* var171 /* : String */;
787 char* var172 /* : NativeString */;
788 long var173 /* : Int */;
789 val* var174 /* : String */;
790 static val* varonce175;
791 val* var176 /* : String */;
792 char* var177 /* : NativeString */;
793 long var178 /* : Int */;
794 val* var179 /* : String */;
795 static val* varonce180;
796 val* var181 /* : String */;
797 char* var182 /* : NativeString */;
798 long var183 /* : Int */;
799 val* var184 /* : String */;
800 static val* varonce185;
801 val* var186 /* : String */;
802 char* var187 /* : NativeString */;
803 long var188 /* : Int */;
804 val* var189 /* : String */;
805 val* var190 /* : String */;
806 static val* varonce191;
807 val* var192 /* : String */;
808 char* var193 /* : NativeString */;
809 long var194 /* : Int */;
810 val* var195 /* : String */;
811 val* var196 /* : Array[Object] */;
812 long var197 /* : Int */;
813 val* var198 /* : NativeArray[Object] */;
814 val* var199 /* : String */;
815 static val* varonce200;
816 val* var201 /* : String */;
817 char* var202 /* : NativeString */;
818 long var203 /* : Int */;
819 val* var204 /* : String */;
820 val* var205 /* : Array[Object] */;
821 long var206 /* : Int */;
822 val* var207 /* : NativeArray[Object] */;
823 val* var208 /* : String */;
824 var_v = p0;
825 var_mpropdef = p1;
826 var_arguments = p2;
827 var = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MMethodDef>*/;
828 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model__MClassDef__mmodule]))(var) /* mmodule on <var:MClassDef>*/;
829 var_mmodule = var1;
830 var2 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
831 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var2) /* modelbuilder on <var2:AbstractCompiler>*/;
832 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(var3) /* mmodule2nmodule on <var3:ModelBuilder>*/;
833 var5 = ((val* (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var4, var_mmodule) /* [] on <var4:HashMap[MModule, AModule]>*/;
834 var_amodule = var5;
835 var6 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AExternPropdef__n_extern]))(self) /* n_extern on <self:AExternMethPropdef>*/;
836 var_nextern = var6;
837 var7 = NULL;
838 if (var_nextern == NULL) {
839 var8 = 0; /* is null */
840 } else {
841 var8 = 1; /* arg is null and recv is not */
842 }
843 if (var8){
844 var9 = 1;
845 ((void (*)(val*, short int))(var_amodule->class->vft[COLOR_compiler_ffi__AModule__uses_legacy_ni_61d]))(var_amodule, var9) /* uses_legacy_ni= on <var_amodule:AModule>*/;
846 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_compiler_ffi__AExternMethPropdef__compile_to_c]))(self, p0, p1, p2) /* compile_to_c on <self:AExternMethPropdef>*/;
847 goto RET_LABEL;
848 } else {
849 }
850 var10 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_amodule) /* mmodule on <var_amodule:AModule>*/;
851 var11 = 1;
852 if (var10 == NULL) {
853 fprintf(stderr, "Runtime error: %s", "Receiver is null");
854 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 127);
855 show_backtrace(1);
856 } else {
857 ((void (*)(val*, short int))(var10->class->vft[COLOR_common_ffi__MModule__uses_ffi_61d]))(var10, var11) /* uses_ffi= on <var10:nullable MModule>*/;
858 }
859 var12 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MMethodDef>*/;
860 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_model__MClassDef__bound_mtype]))(var12) /* bound_mtype on <var12:MClassDef>*/;
861 var_mclass_type = var13;
862 var14 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mproperty]))(var_mpropdef) /* mproperty on <var_mpropdef:MMethodDef>*/;
863 var15 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MMethodDef>*/;
864 var16 = ((val* (*)(val*))(var15->class->vft[COLOR_model__MClassDef__bound_mtype]))(var15) /* bound_mtype on <var15:MClassDef>*/;
865 if (varonce) {
866 var17 = varonce;
867 } else {
868 var18 = "___impl";
869 var19 = 7;
870 var20 = string__NativeString__to_s_with_length(var18, var19);
871 var17 = var20;
872 varonce = var17;
873 }
874 var21 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:AExternMethPropdef>*/;
875 var22 = ((val* (*)(val*, val*, val*, val*, val*))(var14->class->vft[COLOR_nitni_utilities__MMethod__build_cname]))(var14, var16, var_mmodule, var17, var21) /* build_cname on <var14:MProperty(MMethod)>*/;
876 var_externname = var22;
877 var23 = NULL;
878 var_recv_var = var23;
879 var24 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MMethodDef__msignature]))(var_mpropdef) /* msignature on <var_mpropdef:MMethodDef>*/;
880 if (var24 == NULL) {
881 fprintf(stderr, "Runtime error: %s", "Receiver is null");
882 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 134);
883 show_backtrace(1);
884 } else {
885 var25 = ((val* (*)(val*))(var24->class->vft[COLOR_model__MSignature__return_mtype]))(var24) /* return_mtype on <var24:nullable MSignature>*/;
886 }
887 var_return_mtype = var25;
888 var26 = NULL;
889 if (var_return_mtype == NULL) {
890 var27 = 0; /* is null */
891 } else {
892 var27 = 1; /* arg is null and recv is not */
893 }
894 if (var27){
895 var28 = ((val* (*)(val*, val*, val*))(var_return_mtype->class->vft[COLOR_model__MType__anchor_to]))(var_return_mtype, var_mmodule, var_mclass_type) /* anchor_to on <var_return_mtype:nullable MType(MType)>*/;
896 var_return_mtype = var28;
897 var29 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(var_v, var_return_mtype) /* new_var on <var_v:AbstractCompilerVisitor>*/;
898 var_recv_var = var29;
899 } else {
900 }
901 ((void (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__adapt_signature]))(var_v, var_mpropdef, var_arguments) /* adapt_signature on <var_v:AbstractCompilerVisitor>*/;
902 var30 = NEW_array__Array(&type_array__Arraystring__String);
903 ((void (*)(val*))(var30->class->vft[COLOR_array__Array__init]))(var30) /* init on <var30:Array[String]>*/;
904 var_arguments_for_c = var30;
905 var31 = NEW_range__Range(&type_range__Rangekernel__Int);
906 var32 = 0;
907 var33 = ((long (*)(val*))(var_arguments->class->vft[COLOR_abstract_collection__Collection__length]))(var_arguments) /* length on <var_arguments:Array[RuntimeVariable]>*/;
908 var34 = BOX_kernel__Int(var32); /* autobox from Int to Discrete */
909 var35 = BOX_kernel__Int(var33); /* autobox from Int to Discrete */
910 ((void (*)(val*, val*, val*))(var31->class->vft[COLOR_range__Range__without_last]))(var31, var34, var35) /* without_last on <var31:Range[Int]>*/;
911 var36 = ((val* (*)(val*))(var31->class->vft[COLOR_abstract_collection__Collection__iterator]))(var31) /* iterator on <var31:Range[Int]>*/;
912 for(;;) {
913 var37 = ((short int (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var36) /* is_ok on <var36:Iterator[nullable Object]>*/;
914 if(!var37) break;
915 var38 = ((val* (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__item]))(var36) /* item on <var36:Iterator[nullable Object]>*/;
916 var39 = ((struct instance_kernel__Int*)var38)->value; /* autounbox from nullable Object to Int */;
917 var_a = var39;
918 var40 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var_a) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
919 var_arg = var40;
920 var41 = 0;
921 { /* Inline kernel#Int#== (var_a,var41) */
922 var44 = var_a == var41;
923 var42 = var44;
924 goto RET_LABEL43;
925 RET_LABEL43:(void)0;
926 }
927 if (var42){
928 var45 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MMethodDef>*/;
929 var46 = ((val* (*)(val*))(var45->class->vft[COLOR_model__MClassDef__mclass]))(var45) /* mclass on <var45:MClassDef>*/;
930 var47 = ((val* (*)(val*))(var46->class->vft[COLOR_model__MClass__mclass_type]))(var46) /* mclass_type on <var46:MClass>*/;
931 var_param_mtype = var47;
932 } else {
933 var48 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MMethodDef__msignature]))(var_mpropdef) /* msignature on <var_mpropdef:MMethodDef>*/;
934 if (var48 == NULL) {
935 fprintf(stderr, "Runtime error: %s", "Receiver is null");
936 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 148);
937 show_backtrace(1);
938 } else {
939 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_model__MSignature__mparameters]))(var48) /* mparameters on <var48:nullable MSignature>*/;
940 }
941 var50 = 1;
942 { /* Inline kernel#Int#- (var_a,var50) */
943 var53 = var_a - var50;
944 var51 = var53;
945 goto RET_LABEL52;
946 RET_LABEL52:(void)0;
947 }
948 var54 = ((val* (*)(val*, long))(var49->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var49, var51) /* [] on <var49:Array[MParameter]>*/;
949 var55 = ((val* (*)(val*))(var54->class->vft[COLOR_model__MParameter__mtype]))(var54) /* mtype on <var54:nullable Object(MParameter)>*/;
950 var_param_mtype = var55;
951 }
952 var56 = ((val* (*)(val*, val*, val*))(var_param_mtype->class->vft[COLOR_model__MType__anchor_to]))(var_param_mtype, var_mmodule, var_mclass_type) /* anchor_to on <var_param_mtype:MType>*/;
953 var_param_mtype = var56;
954 var57 = ((short int (*)(val*))(var_param_mtype->class->vft[COLOR_nitni_base__MType__is_cprimitive]))(var_param_mtype) /* is_cprimitive on <var_param_mtype:MType>*/;
955 if (var57){
956 var58 = ((val* (*)(val*))(var_arg->class->vft[COLOR_abstract_compiler__RuntimeVariable__name]))(var_arg) /* name on <var_arg:RuntimeVariable>*/;
957 ((void (*)(val*, val*))(var_arguments_for_c->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_arguments_for_c, var58) /* add on <var_arguments_for_c:Array[String]>*/;
958 } else {
959 if (varonce59) {
960 var60 = varonce59;
961 } else {
962 var61 = "struct nitni_instance* var_for_c_";
963 var62 = 33;
964 var63 = string__NativeString__to_s_with_length(var61, var62);
965 var60 = var63;
966 varonce59 = var60;
967 }
968 if (varonce64) {
969 var65 = varonce64;
970 } else {
971 var66 = ";";
972 var67 = 1;
973 var68 = string__NativeString__to_s_with_length(var66, var67);
974 var65 = var68;
975 varonce64 = var65;
976 }
977 var69 = NEW_array__Array(&type_array__Arraykernel__Object);
978 { /* var69 = array_instance Array[Object] */
979 var70 = 3;
980 var71 = NEW_array__NativeArray(var70, &type_array__NativeArraykernel__Object);
981 ((struct instance_array__NativeArray*)var71)->values[0] = (val*) var60;
982 var72 = BOX_kernel__Int(var_a); /* autobox from Int to Object */
983 ((struct instance_array__NativeArray*)var71)->values[1] = (val*) var72;
984 ((struct instance_array__NativeArray*)var71)->values[2] = (val*) var65;
985 ((void (*)(val*, val*, long))(var69->class->vft[COLOR_array__Array__with_native]))(var69, var71, var70) /* with_native on <var69:Array[Object]>*/;
986 }
987 var73 = ((val* (*)(val*))(var69->class->vft[COLOR_string__Object__to_s]))(var69) /* to_s on <var69:Array[Object]>*/;
988 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var73) /* add on <var_v:AbstractCompilerVisitor>*/;
989 if (varonce74) {
990 var75 = varonce74;
991 } else {
992 var76 = "var_for_c_";
993 var77 = 10;
994 var78 = string__NativeString__to_s_with_length(var76, var77);
995 var75 = var78;
996 varonce74 = var75;
997 }
998 if (varonce79) {
999 var80 = varonce79;
1000 } else {
1001 var81 = " = malloc(sizeof(struct nitni_instance));";
1002 var82 = 41;
1003 var83 = string__NativeString__to_s_with_length(var81, var82);
1004 var80 = var83;
1005 varonce79 = var80;
1006 }
1007 var84 = NEW_array__Array(&type_array__Arraykernel__Object);
1008 { /* var84 = array_instance Array[Object] */
1009 var85 = 3;
1010 var86 = NEW_array__NativeArray(var85, &type_array__NativeArraykernel__Object);
1011 ((struct instance_array__NativeArray*)var86)->values[0] = (val*) var75;
1012 var87 = BOX_kernel__Int(var_a); /* autobox from Int to Object */
1013 ((struct instance_array__NativeArray*)var86)->values[1] = (val*) var87;
1014 ((struct instance_array__NativeArray*)var86)->values[2] = (val*) var80;
1015 ((void (*)(val*, val*, long))(var84->class->vft[COLOR_array__Array__with_native]))(var84, var86, var85) /* with_native on <var84:Array[Object]>*/;
1016 }
1017 var88 = ((val* (*)(val*))(var84->class->vft[COLOR_string__Object__to_s]))(var84) /* to_s on <var84:Array[Object]>*/;
1018 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var88) /* add on <var_v:AbstractCompilerVisitor>*/;
1019 if (varonce89) {
1020 var90 = varonce89;
1021 } else {
1022 var91 = "var_for_c_";
1023 var92 = 10;
1024 var93 = string__NativeString__to_s_with_length(var91, var92);
1025 var90 = var93;
1026 varonce89 = var90;
1027 }
1028 if (varonce94) {
1029 var95 = varonce94;
1030 } else {
1031 var96 = "->value = ";
1032 var97 = 10;
1033 var98 = string__NativeString__to_s_with_length(var96, var97);
1034 var95 = var98;
1035 varonce94 = var95;
1036 }
1037 var99 = ((val* (*)(val*))(var_arg->class->vft[COLOR_abstract_compiler__RuntimeVariable__name]))(var_arg) /* name on <var_arg:RuntimeVariable>*/;
1038 if (varonce100) {
1039 var101 = varonce100;
1040 } else {
1041 var102 = ";";
1042 var103 = 1;
1043 var104 = string__NativeString__to_s_with_length(var102, var103);
1044 var101 = var104;
1045 varonce100 = var101;
1046 }
1047 var105 = NEW_array__Array(&type_array__Arraykernel__Object);
1048 { /* var105 = array_instance Array[Object] */
1049 var106 = 5;
1050 var107 = NEW_array__NativeArray(var106, &type_array__NativeArraykernel__Object);
1051 ((struct instance_array__NativeArray*)var107)->values[0] = (val*) var90;
1052 var108 = BOX_kernel__Int(var_a); /* autobox from Int to Object */
1053 ((struct instance_array__NativeArray*)var107)->values[1] = (val*) var108;
1054 ((struct instance_array__NativeArray*)var107)->values[2] = (val*) var95;
1055 ((struct instance_array__NativeArray*)var107)->values[3] = (val*) var99;
1056 ((struct instance_array__NativeArray*)var107)->values[4] = (val*) var101;
1057 ((void (*)(val*, val*, long))(var105->class->vft[COLOR_array__Array__with_native]))(var105, var107, var106) /* with_native on <var105:Array[Object]>*/;
1058 }
1059 var109 = ((val* (*)(val*))(var105->class->vft[COLOR_string__Object__to_s]))(var105) /* to_s on <var105:Array[Object]>*/;
1060 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var109) /* add on <var_v:AbstractCompilerVisitor>*/;
1061 if (varonce110) {
1062 var111 = varonce110;
1063 } else {
1064 var112 = "var_for_c_";
1065 var113 = 10;
1066 var114 = string__NativeString__to_s_with_length(var112, var113);
1067 var111 = var114;
1068 varonce110 = var111;
1069 }
1070 var115 = NEW_array__Array(&type_array__Arraykernel__Object);
1071 { /* var115 = array_instance Array[Object] */
1072 var116 = 2;
1073 var117 = NEW_array__NativeArray(var116, &type_array__NativeArraykernel__Object);
1074 ((struct instance_array__NativeArray*)var117)->values[0] = (val*) var111;
1075 var118 = BOX_kernel__Int(var_a); /* autobox from Int to Object */
1076 ((struct instance_array__NativeArray*)var117)->values[1] = (val*) var118;
1077 ((void (*)(val*, val*, long))(var115->class->vft[COLOR_array__Array__with_native]))(var115, var117, var116) /* with_native on <var115:Array[Object]>*/;
1078 }
1079 var119 = ((val* (*)(val*))(var115->class->vft[COLOR_string__Object__to_s]))(var115) /* to_s on <var115:Array[Object]>*/;
1080 ((void (*)(val*, val*))(var_arguments_for_c->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_arguments_for_c, var119) /* add on <var_arguments_for_c:Array[String]>*/;
1081 }
1082 CONTINUE_label: (void)0;
1083 ((void (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__next]))(var36) /* next on <var36:Iterator[nullable Object]>*/;
1084 }
1085 BREAK_label: (void)0;
1086 var120 = NULL;
1087 if (var_recv_var == NULL) {
1088 var121 = 1; /* is null */
1089 } else {
1090 var121 = 0; /* arg is null but recv is not */
1091 }
1092 if (var121){
1093 if (varonce122) {
1094 var123 = varonce122;
1095 } else {
1096 var124 = "(";
1097 var125 = 1;
1098 var126 = string__NativeString__to_s_with_length(var124, var125);
1099 var123 = var126;
1100 varonce122 = var123;
1101 }
1102 if (varonce127) {
1103 var128 = varonce127;
1104 } else {
1105 var129 = ", ";
1106 var130 = 2;
1107 var131 = string__NativeString__to_s_with_length(var129, var130);
1108 var128 = var131;
1109 varonce127 = var128;
1110 }
1111 var132 = ((val* (*)(val*, val*))(var_arguments_for_c->class->vft[COLOR_string__Collection__join]))(var_arguments_for_c, var128) /* join on <var_arguments_for_c:Array[String]>*/;
1112 if (varonce133) {
1113 var134 = varonce133;
1114 } else {
1115 var135 = ");";
1116 var136 = 2;
1117 var137 = string__NativeString__to_s_with_length(var135, var136);
1118 var134 = var137;
1119 varonce133 = var134;
1120 }
1121 var138 = NEW_array__Array(&type_array__Arraykernel__Object);
1122 { /* var138 = array_instance Array[Object] */
1123 var139 = 4;
1124 var140 = NEW_array__NativeArray(var139, &type_array__NativeArraykernel__Object);
1125 ((struct instance_array__NativeArray*)var140)->values[0] = (val*) var_externname;
1126 ((struct instance_array__NativeArray*)var140)->values[1] = (val*) var123;
1127 ((struct instance_array__NativeArray*)var140)->values[2] = (val*) var132;
1128 ((struct instance_array__NativeArray*)var140)->values[3] = (val*) var134;
1129 ((void (*)(val*, val*, long))(var138->class->vft[COLOR_array__Array__with_native]))(var138, var140, var139) /* with_native on <var138:Array[Object]>*/;
1130 }
1131 var141 = ((val* (*)(val*))(var138->class->vft[COLOR_string__Object__to_s]))(var138) /* to_s on <var138:Array[Object]>*/;
1132 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var141) /* add on <var_v:AbstractCompilerVisitor>*/;
1133 } else {
1134 var142 = NULL;
1135 if (var_return_mtype == NULL) {
1136 var143 = 0; /* is null */
1137 } else {
1138 var143 = 1; /* arg is null and recv is not */
1139 }
1140 if (!var143) {
1141 fprintf(stderr, "Runtime error: %s", "Assert failed");
1142 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 165);
1143 show_backtrace(1);
1144 }
1145 var144 = ((short int (*)(val*))(var_return_mtype->class->vft[COLOR_nitni_base__MType__is_cprimitive]))(var_return_mtype) /* is_cprimitive on <var_return_mtype:nullable MType(MType)>*/;
1146 if (var144){
1147 if (varonce145) {
1148 var146 = varonce145;
1149 } else {
1150 var147 = " = ";
1151 var148 = 3;
1152 var149 = string__NativeString__to_s_with_length(var147, var148);
1153 var146 = var149;
1154 varonce145 = var146;
1155 }
1156 if (varonce150) {
1157 var151 = varonce150;
1158 } else {
1159 var152 = "(";
1160 var153 = 1;
1161 var154 = string__NativeString__to_s_with_length(var152, var153);
1162 var151 = var154;
1163 varonce150 = var151;
1164 }
1165 if (varonce155) {
1166 var156 = varonce155;
1167 } else {
1168 var157 = ", ";
1169 var158 = 2;
1170 var159 = string__NativeString__to_s_with_length(var157, var158);
1171 var156 = var159;
1172 varonce155 = var156;
1173 }
1174 var160 = ((val* (*)(val*, val*))(var_arguments_for_c->class->vft[COLOR_string__Collection__join]))(var_arguments_for_c, var156) /* join on <var_arguments_for_c:Array[String]>*/;
1175 if (varonce161) {
1176 var162 = varonce161;
1177 } else {
1178 var163 = ");";
1179 var164 = 2;
1180 var165 = string__NativeString__to_s_with_length(var163, var164);
1181 var162 = var165;
1182 varonce161 = var162;
1183 }
1184 var166 = NEW_array__Array(&type_array__Arraykernel__Object);
1185 { /* var166 = array_instance Array[Object] */
1186 var167 = 6;
1187 var168 = NEW_array__NativeArray(var167, &type_array__NativeArraykernel__Object);
1188 ((struct instance_array__NativeArray*)var168)->values[0] = (val*) var_recv_var;
1189 ((struct instance_array__NativeArray*)var168)->values[1] = (val*) var146;
1190 ((struct instance_array__NativeArray*)var168)->values[2] = (val*) var_externname;
1191 ((struct instance_array__NativeArray*)var168)->values[3] = (val*) var151;
1192 ((struct instance_array__NativeArray*)var168)->values[4] = (val*) var160;
1193 ((struct instance_array__NativeArray*)var168)->values[5] = (val*) var162;
1194 ((void (*)(val*, val*, long))(var166->class->vft[COLOR_array__Array__with_native]))(var166, var168, var167) /* with_native on <var166:Array[Object]>*/;
1195 }
1196 var169 = ((val* (*)(val*))(var166->class->vft[COLOR_string__Object__to_s]))(var166) /* to_s on <var166:Array[Object]>*/;
1197 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var169) /* add on <var_v:AbstractCompilerVisitor>*/;
1198 } else {
1199 if (varonce170) {
1200 var171 = varonce170;
1201 } else {
1202 var172 = "struct nitni_instance* ret_var;";
1203 var173 = 31;
1204 var174 = string__NativeString__to_s_with_length(var172, var173);
1205 var171 = var174;
1206 varonce170 = var171;
1207 }
1208 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var171) /* add on <var_v:AbstractCompilerVisitor>*/;
1209 if (varonce175) {
1210 var176 = varonce175;
1211 } else {
1212 var177 = "ret_var = ";
1213 var178 = 10;
1214 var179 = string__NativeString__to_s_with_length(var177, var178);
1215 var176 = var179;
1216 varonce175 = var176;
1217 }
1218 if (varonce180) {
1219 var181 = varonce180;
1220 } else {
1221 var182 = "(";
1222 var183 = 1;
1223 var184 = string__NativeString__to_s_with_length(var182, var183);
1224 var181 = var184;
1225 varonce180 = var181;
1226 }
1227 if (varonce185) {
1228 var186 = varonce185;
1229 } else {
1230 var187 = ", ";
1231 var188 = 2;
1232 var189 = string__NativeString__to_s_with_length(var187, var188);
1233 var186 = var189;
1234 varonce185 = var186;
1235 }
1236 var190 = ((val* (*)(val*, val*))(var_arguments_for_c->class->vft[COLOR_string__Collection__join]))(var_arguments_for_c, var186) /* join on <var_arguments_for_c:Array[String]>*/;
1237 if (varonce191) {
1238 var192 = varonce191;
1239 } else {
1240 var193 = ");";
1241 var194 = 2;
1242 var195 = string__NativeString__to_s_with_length(var193, var194);
1243 var192 = var195;
1244 varonce191 = var192;
1245 }
1246 var196 = NEW_array__Array(&type_array__Arraykernel__Object);
1247 { /* var196 = array_instance Array[Object] */
1248 var197 = 5;
1249 var198 = NEW_array__NativeArray(var197, &type_array__NativeArraykernel__Object);
1250 ((struct instance_array__NativeArray*)var198)->values[0] = (val*) var176;
1251 ((struct instance_array__NativeArray*)var198)->values[1] = (val*) var_externname;
1252 ((struct instance_array__NativeArray*)var198)->values[2] = (val*) var181;
1253 ((struct instance_array__NativeArray*)var198)->values[3] = (val*) var190;
1254 ((struct instance_array__NativeArray*)var198)->values[4] = (val*) var192;
1255 ((void (*)(val*, val*, long))(var196->class->vft[COLOR_array__Array__with_native]))(var196, var198, var197) /* with_native on <var196:Array[Object]>*/;
1256 }
1257 var199 = ((val* (*)(val*))(var196->class->vft[COLOR_string__Object__to_s]))(var196) /* to_s on <var196:Array[Object]>*/;
1258 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var199) /* add on <var_v:AbstractCompilerVisitor>*/;
1259 if (varonce200) {
1260 var201 = varonce200;
1261 } else {
1262 var202 = " = ret_var->value;";
1263 var203 = 18;
1264 var204 = string__NativeString__to_s_with_length(var202, var203);
1265 var201 = var204;
1266 varonce200 = var201;
1267 }
1268 var205 = NEW_array__Array(&type_array__Arraykernel__Object);
1269 { /* var205 = array_instance Array[Object] */
1270 var206 = 2;
1271 var207 = NEW_array__NativeArray(var206, &type_array__NativeArraykernel__Object);
1272 ((struct instance_array__NativeArray*)var207)->values[0] = (val*) var_recv_var;
1273 ((struct instance_array__NativeArray*)var207)->values[1] = (val*) var201;
1274 ((void (*)(val*, val*, long))(var205->class->vft[COLOR_array__Array__with_native]))(var205, var207, var206) /* with_native on <var205:Array[Object]>*/;
1275 }
1276 var208 = ((val* (*)(val*))(var205->class->vft[COLOR_string__Object__to_s]))(var205) /* to_s on <var205:Array[Object]>*/;
1277 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var208) /* add on <var_v:AbstractCompilerVisitor>*/;
1278 }
1279 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(var_v, var_recv_var) /* ret on <var_v:AbstractCompilerVisitor>*/;
1280 }
1281 ((void (*)(val*, val*))(self->class->vft[COLOR_compiler_ffi__AExternPropdef__compile_ffi_support_to_c]))(self, var_v) /* compile_ffi_support_to_c on <self:AExternMethPropdef>*/;
1282 RET_LABEL:;
1283 }
1284 /* method compiler_ffi#AExternMethPropdef#compile_to_c for (self: Object, AbstractCompilerVisitor, MMethodDef, Array[RuntimeVariable]) */
1285 void VIRTUAL_compiler_ffi__AExternMethPropdef__compile_to_c(val* self, val* p0, val* p1, val* p2) {
1286 compiler_ffi__AExternMethPropdef__compile_to_c(self, p0, p1, p2);
1287 RET_LABEL:;
1288 }
1289 /* method compiler_ffi#AExternInitPropdef#compile_to_c for (self: AExternInitPropdef, AbstractCompilerVisitor, MMethodDef, Array[RuntimeVariable]) */
1290 void compiler_ffi__AExternInitPropdef__compile_to_c(val* self, val* p0, val* p1, val* p2) {
1291 val* var_v /* var v: AbstractCompilerVisitor */;
1292 val* var_mpropdef /* var mpropdef: MMethodDef */;
1293 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
1294 val* var /* : MClassDef */;
1295 val* var1 /* : MModule */;
1296 val* var_mmodule /* var mmodule: MModule */;
1297 val* var2 /* : AbstractCompiler */;
1298 val* var3 /* : ModelBuilder */;
1299 val* var4 /* : HashMap[MModule, AModule] */;
1300 val* var5 /* : nullable Object */;
1301 val* var_amodule /* var amodule: AModule */;
1302 val* var6 /* : nullable TString */;
1303 val* var_nextern /* var nextern: nullable TString */;
1304 val* var7 /* : null */;
1305 short int var8 /* : Bool */;
1306 short int var9 /* : Bool */;
1307 val* var10 /* : nullable MModule */;
1308 short int var11 /* : Bool */;
1309 val* var12 /* : MClassDef */;
1310 val* var13 /* : MClassType */;
1311 val* var_mclass_type /* var mclass_type: MClassType */;
1312 val* var14 /* : MProperty */;
1313 val* var15 /* : MClassDef */;
1314 val* var16 /* : MClassType */;
1315 static val* varonce;
1316 val* var17 /* : String */;
1317 char* var18 /* : NativeString */;
1318 long var19 /* : Int */;
1319 val* var20 /* : String */;
1320 val* var21 /* : SignatureLength */;
1321 val* var22 /* : String */;
1322 val* var_externname /* var externname: String */;
1323 val* var23 /* : nullable Object */;
1324 val* var24 /* : MType */;
1325 val* var_return_mtype /* var return_mtype: MType */;
1326 val* var25 /* : RuntimeVariable */;
1327 val* var_recv_var /* var recv_var: RuntimeVariable */;
1328 val* var26 /* : nullable Object */;
1329 val* var27 /* : Array[String] */;
1330 val* var_arguments_for_c /* var arguments_for_c: Array[String] */;
1331 val* var28 /* : Range[Int] */;
1332 long var29 /* : Int */;
1333 long var30 /* : Int */;
1334 val* var31 /* : Discrete */;
1335 val* var32 /* : Discrete */;
1336 val* var33 /* : Iterator[nullable Object] */;
1337 short int var34 /* : Bool */;
1338 val* var35 /* : nullable Object */;
1339 long var_a /* var a: Int */;
1340 long var36 /* : Int */;
1341 val* var37 /* : nullable Object */;
1342 val* var_arg /* var arg: RuntimeVariable */;
1343 val* var38 /* : nullable MSignature */;
1344 val* var39 /* : Array[MParameter] */;
1345 val* var40 /* : nullable Object */;
1346 val* var41 /* : MType */;
1347 val* var_param_mtype /* var param_mtype: MType */;
1348 val* var42 /* : MType */;
1349 short int var43 /* : Bool */;
1350 val* var44 /* : String */;
1351 static val* varonce45;
1352 val* var46 /* : String */;
1353 char* var47 /* : NativeString */;
1354 long var48 /* : Int */;
1355 val* var49 /* : String */;
1356 static val* varonce50;
1357 val* var51 /* : String */;
1358 char* var52 /* : NativeString */;
1359 long var53 /* : Int */;
1360 val* var54 /* : String */;
1361 val* var55 /* : Array[Object] */;
1362 long var56 /* : Int */;
1363 val* var57 /* : NativeArray[Object] */;
1364 val* var58 /* : Object */;
1365 val* var59 /* : String */;
1366 static val* varonce60;
1367 val* var61 /* : String */;
1368 char* var62 /* : NativeString */;
1369 long var63 /* : Int */;
1370 val* var64 /* : String */;
1371 static val* varonce65;
1372 val* var66 /* : String */;
1373 char* var67 /* : NativeString */;
1374 long var68 /* : Int */;
1375 val* var69 /* : String */;
1376 val* var70 /* : Array[Object] */;
1377 long var71 /* : Int */;
1378 val* var72 /* : NativeArray[Object] */;
1379 val* var73 /* : Object */;
1380 val* var74 /* : String */;
1381 static val* varonce75;
1382 val* var76 /* : String */;
1383 char* var77 /* : NativeString */;
1384 long var78 /* : Int */;
1385 val* var79 /* : String */;
1386 static val* varonce80;
1387 val* var81 /* : String */;
1388 char* var82 /* : NativeString */;
1389 long var83 /* : Int */;
1390 val* var84 /* : String */;
1391 val* var85 /* : String */;
1392 static val* varonce86;
1393 val* var87 /* : String */;
1394 char* var88 /* : NativeString */;
1395 long var89 /* : Int */;
1396 val* var90 /* : String */;
1397 val* var91 /* : Array[Object] */;
1398 long var92 /* : Int */;
1399 val* var93 /* : NativeArray[Object] */;
1400 val* var94 /* : Object */;
1401 val* var95 /* : String */;
1402 static val* varonce96;
1403 val* var97 /* : String */;
1404 char* var98 /* : NativeString */;
1405 long var99 /* : Int */;
1406 val* var100 /* : String */;
1407 val* var101 /* : Array[Object] */;
1408 long var102 /* : Int */;
1409 val* var103 /* : NativeArray[Object] */;
1410 val* var104 /* : Object */;
1411 val* var105 /* : String */;
1412 short int var106 /* : Bool */;
1413 static val* varonce107;
1414 val* var108 /* : String */;
1415 char* var109 /* : NativeString */;
1416 long var110 /* : Int */;
1417 val* var111 /* : String */;
1418 static val* varonce112;
1419 val* var113 /* : String */;
1420 char* var114 /* : NativeString */;
1421 long var115 /* : Int */;
1422 val* var116 /* : String */;
1423 static val* varonce117;
1424 val* var118 /* : String */;
1425 char* var119 /* : NativeString */;
1426 long var120 /* : Int */;
1427 val* var121 /* : String */;
1428 val* var122 /* : String */;
1429 static val* varonce123;
1430 val* var124 /* : String */;
1431 char* var125 /* : NativeString */;
1432 long var126 /* : Int */;
1433 val* var127 /* : String */;
1434 val* var128 /* : Array[Object] */;
1435 long var129 /* : Int */;
1436 val* var130 /* : NativeArray[Object] */;
1437 val* var131 /* : String */;
1438 static val* varonce132;
1439 val* var133 /* : String */;
1440 char* var134 /* : NativeString */;
1441 long var135 /* : Int */;
1442 val* var136 /* : String */;
1443 static val* varonce137;
1444 val* var138 /* : String */;
1445 char* var139 /* : NativeString */;
1446 long var140 /* : Int */;
1447 val* var141 /* : String */;
1448 static val* varonce142;
1449 val* var143 /* : String */;
1450 char* var144 /* : NativeString */;
1451 long var145 /* : Int */;
1452 val* var146 /* : String */;
1453 static val* varonce147;
1454 val* var148 /* : String */;
1455 char* var149 /* : NativeString */;
1456 long var150 /* : Int */;
1457 val* var151 /* : String */;
1458 val* var152 /* : String */;
1459 static val* varonce153;
1460 val* var154 /* : String */;
1461 char* var155 /* : NativeString */;
1462 long var156 /* : Int */;
1463 val* var157 /* : String */;
1464 val* var158 /* : Array[Object] */;
1465 long var159 /* : Int */;
1466 val* var160 /* : NativeArray[Object] */;
1467 val* var161 /* : String */;
1468 static val* varonce162;
1469 val* var163 /* : String */;
1470 char* var164 /* : NativeString */;
1471 long var165 /* : Int */;
1472 val* var166 /* : String */;
1473 val* var167 /* : Array[Object] */;
1474 long var168 /* : Int */;
1475 val* var169 /* : NativeArray[Object] */;
1476 val* var170 /* : String */;
1477 var_v = p0;
1478 var_mpropdef = p1;
1479 var_arguments = p2;
1480 var = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MMethodDef>*/;
1481 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model__MClassDef__mmodule]))(var) /* mmodule on <var:MClassDef>*/;
1482 var_mmodule = var1;
1483 var2 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
1484 var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var2) /* modelbuilder on <var2:AbstractCompiler>*/;
1485 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(var3) /* mmodule2nmodule on <var3:ModelBuilder>*/;
1486 var5 = ((val* (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var4, var_mmodule) /* [] on <var4:HashMap[MModule, AModule]>*/;
1487 var_amodule = var5;
1488 var6 = ((val* (*)(val*))(self->class->vft[COLOR_parser_nodes__AExternPropdef__n_extern]))(self) /* n_extern on <self:AExternInitPropdef>*/;
1489 var_nextern = var6;
1490 var7 = NULL;
1491 if (var_nextern == NULL) {
1492 var8 = 0; /* is null */
1493 } else {
1494 var8 = 1; /* arg is null and recv is not */
1495 }
1496 if (var8){
1497 var9 = 1;
1498 ((void (*)(val*, short int))(var_amodule->class->vft[COLOR_compiler_ffi__AModule__uses_legacy_ni_61d]))(var_amodule, var9) /* uses_legacy_ni= on <var_amodule:AModule>*/;
1499 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_compiler_ffi__AExternInitPropdef__compile_to_c]))(self, p0, p1, p2) /* compile_to_c on <self:AExternInitPropdef>*/;
1500 goto RET_LABEL;
1501 } else {
1502 }
1503 var10 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_amodule) /* mmodule on <var_amodule:AModule>*/;
1504 var11 = 1;
1505 if (var10 == NULL) {
1506 fprintf(stderr, "Runtime error: %s", "Receiver is null");
1507 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 194);
1508 show_backtrace(1);
1509 } else {
1510 ((void (*)(val*, short int))(var10->class->vft[COLOR_common_ffi__MModule__uses_ffi_61d]))(var10, var11) /* uses_ffi= on <var10:nullable MModule>*/;
1511 }
1512 var12 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MMethodDef>*/;
1513 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_model__MClassDef__bound_mtype]))(var12) /* bound_mtype on <var12:MClassDef>*/;
1514 var_mclass_type = var13;
1515 var14 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mproperty]))(var_mpropdef) /* mproperty on <var_mpropdef:MMethodDef>*/;
1516 var15 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MMethodDef>*/;
1517 var16 = ((val* (*)(val*))(var15->class->vft[COLOR_model__MClassDef__bound_mtype]))(var15) /* bound_mtype on <var15:MClassDef>*/;
1518 if (varonce) {
1519 var17 = varonce;
1520 } else {
1521 var18 = "___impl";
1522 var19 = 7;
1523 var20 = string__NativeString__to_s_with_length(var18, var19);
1524 var17 = var20;
1525 varonce = var17;
1526 }
1527 var21 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:AExternInitPropdef>*/;
1528 var22 = ((val* (*)(val*, val*, val*, val*, val*))(var14->class->vft[COLOR_nitni_utilities__MMethod__build_cname]))(var14, var16, var_mmodule, var17, var21) /* build_cname on <var14:MProperty(MMethod)>*/;
1529 var_externname = var22;
1530 var23 = ((val* (*)(val*))(var_arguments->class->vft[COLOR_abstract_collection__Collection__first]))(var_arguments) /* first on <var_arguments:Array[RuntimeVariable]>*/;
1531 var24 = ((val* (*)(val*))(var23->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var23) /* mtype on <var23:nullable Object(RuntimeVariable)>*/;
1532 var_return_mtype = var24;
1533 var25 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(var_v, var_return_mtype) /* new_var on <var_v:AbstractCompilerVisitor>*/;
1534 var_recv_var = var25;
1535 ((void (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__adapt_signature]))(var_v, var_mpropdef, var_arguments) /* adapt_signature on <var_v:AbstractCompilerVisitor>*/;
1536 var26 = ((val* (*)(val*))(var_arguments->class->vft[COLOR_abstract_collection__Sequence__shift]))(var_arguments) /* shift on <var_arguments:Array[RuntimeVariable]>*/;
1537 var26;
1538 var27 = NEW_array__Array(&type_array__Arraystring__String);
1539 ((void (*)(val*))(var27->class->vft[COLOR_array__Array__init]))(var27) /* init on <var27:Array[String]>*/;
1540 var_arguments_for_c = var27;
1541 var28 = NEW_range__Range(&type_range__Rangekernel__Int);
1542 var29 = 0;
1543 var30 = ((long (*)(val*))(var_arguments->class->vft[COLOR_abstract_collection__Collection__length]))(var_arguments) /* length on <var_arguments:Array[RuntimeVariable]>*/;
1544 var31 = BOX_kernel__Int(var29); /* autobox from Int to Discrete */
1545 var32 = BOX_kernel__Int(var30); /* autobox from Int to Discrete */
1546 ((void (*)(val*, val*, val*))(var28->class->vft[COLOR_range__Range__without_last]))(var28, var31, var32) /* without_last on <var28:Range[Int]>*/;
1547 var33 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Collection__iterator]))(var28) /* iterator on <var28:Range[Int]>*/;
1548 for(;;) {
1549 var34 = ((short int (*)(val*))(var33->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var33) /* is_ok on <var33:Iterator[nullable Object]>*/;
1550 if(!var34) break;
1551 var35 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_collection__Iterator__item]))(var33) /* item on <var33:Iterator[nullable Object]>*/;
1552 var36 = ((struct instance_kernel__Int*)var35)->value; /* autounbox from nullable Object to Int */;
1553 var_a = var36;
1554 var37 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var_a) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
1555 var_arg = var37;
1556 var38 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MMethodDef__msignature]))(var_mpropdef) /* msignature on <var_mpropdef:MMethodDef>*/;
1557 if (var38 == NULL) {
1558 fprintf(stderr, "Runtime error: %s", "Receiver is null");
1559 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 210);
1560 show_backtrace(1);
1561 } else {
1562 var39 = ((val* (*)(val*))(var38->class->vft[COLOR_model__MSignature__mparameters]))(var38) /* mparameters on <var38:nullable MSignature>*/;
1563 }
1564 var40 = ((val* (*)(val*, long))(var39->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var39, var_a) /* [] on <var39:Array[MParameter]>*/;
1565 var41 = ((val* (*)(val*))(var40->class->vft[COLOR_model__MParameter__mtype]))(var40) /* mtype on <var40:nullable Object(MParameter)>*/;
1566 var_param_mtype = var41;
1567 var42 = ((val* (*)(val*, val*, val*))(var_param_mtype->class->vft[COLOR_model__MType__anchor_to]))(var_param_mtype, var_mmodule, var_mclass_type) /* anchor_to on <var_param_mtype:MType>*/;
1568 var_param_mtype = var42;
1569 var43 = ((short int (*)(val*))(var_param_mtype->class->vft[COLOR_nitni_base__MType__is_cprimitive]))(var_param_mtype) /* is_cprimitive on <var_param_mtype:MType>*/;
1570 if (var43){
1571 var44 = ((val* (*)(val*))(var_arg->class->vft[COLOR_abstract_compiler__RuntimeVariable__name]))(var_arg) /* name on <var_arg:RuntimeVariable>*/;
1572 ((void (*)(val*, val*))(var_arguments_for_c->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_arguments_for_c, var44) /* add on <var_arguments_for_c:Array[String]>*/;
1573 } else {
1574 if (varonce45) {
1575 var46 = varonce45;
1576 } else {
1577 var47 = "struct nitni_instance* var_for_c_";
1578 var48 = 33;
1579 var49 = string__NativeString__to_s_with_length(var47, var48);
1580 var46 = var49;
1581 varonce45 = var46;
1582 }
1583 if (varonce50) {
1584 var51 = varonce50;
1585 } else {
1586 var52 = ";";
1587 var53 = 1;
1588 var54 = string__NativeString__to_s_with_length(var52, var53);
1589 var51 = var54;
1590 varonce50 = var51;
1591 }
1592 var55 = NEW_array__Array(&type_array__Arraykernel__Object);
1593 { /* var55 = array_instance Array[Object] */
1594 var56 = 3;
1595 var57 = NEW_array__NativeArray(var56, &type_array__NativeArraykernel__Object);
1596 ((struct instance_array__NativeArray*)var57)->values[0] = (val*) var46;
1597 var58 = BOX_kernel__Int(var_a); /* autobox from Int to Object */
1598 ((struct instance_array__NativeArray*)var57)->values[1] = (val*) var58;
1599 ((struct instance_array__NativeArray*)var57)->values[2] = (val*) var51;
1600 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_array__Array__with_native]))(var55, var57, var56) /* with_native on <var55:Array[Object]>*/;
1601 }
1602 var59 = ((val* (*)(val*))(var55->class->vft[COLOR_string__Object__to_s]))(var55) /* to_s on <var55:Array[Object]>*/;
1603 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var59) /* add on <var_v:AbstractCompilerVisitor>*/;
1604 if (varonce60) {
1605 var61 = varonce60;
1606 } else {
1607 var62 = "var_for_c_";
1608 var63 = 10;
1609 var64 = string__NativeString__to_s_with_length(var62, var63);
1610 var61 = var64;
1611 varonce60 = var61;
1612 }
1613 if (varonce65) {
1614 var66 = varonce65;
1615 } else {
1616 var67 = " = malloc(sizeof(struct nitni_instance));";
1617 var68 = 41;
1618 var69 = string__NativeString__to_s_with_length(var67, var68);
1619 var66 = var69;
1620 varonce65 = var66;
1621 }
1622 var70 = NEW_array__Array(&type_array__Arraykernel__Object);
1623 { /* var70 = array_instance Array[Object] */
1624 var71 = 3;
1625 var72 = NEW_array__NativeArray(var71, &type_array__NativeArraykernel__Object);
1626 ((struct instance_array__NativeArray*)var72)->values[0] = (val*) var61;
1627 var73 = BOX_kernel__Int(var_a); /* autobox from Int to Object */
1628 ((struct instance_array__NativeArray*)var72)->values[1] = (val*) var73;
1629 ((struct instance_array__NativeArray*)var72)->values[2] = (val*) var66;
1630 ((void (*)(val*, val*, long))(var70->class->vft[COLOR_array__Array__with_native]))(var70, var72, var71) /* with_native on <var70:Array[Object]>*/;
1631 }
1632 var74 = ((val* (*)(val*))(var70->class->vft[COLOR_string__Object__to_s]))(var70) /* to_s on <var70:Array[Object]>*/;
1633 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var74) /* add on <var_v:AbstractCompilerVisitor>*/;
1634 if (varonce75) {
1635 var76 = varonce75;
1636 } else {
1637 var77 = "var_for_c_";
1638 var78 = 10;
1639 var79 = string__NativeString__to_s_with_length(var77, var78);
1640 var76 = var79;
1641 varonce75 = var76;
1642 }
1643 if (varonce80) {
1644 var81 = varonce80;
1645 } else {
1646 var82 = "->value = ";
1647 var83 = 10;
1648 var84 = string__NativeString__to_s_with_length(var82, var83);
1649 var81 = var84;
1650 varonce80 = var81;
1651 }
1652 var85 = ((val* (*)(val*))(var_arg->class->vft[COLOR_abstract_compiler__RuntimeVariable__name]))(var_arg) /* name on <var_arg:RuntimeVariable>*/;
1653 if (varonce86) {
1654 var87 = varonce86;
1655 } else {
1656 var88 = ";";
1657 var89 = 1;
1658 var90 = string__NativeString__to_s_with_length(var88, var89);
1659 var87 = var90;
1660 varonce86 = var87;
1661 }
1662 var91 = NEW_array__Array(&type_array__Arraykernel__Object);
1663 { /* var91 = array_instance Array[Object] */
1664 var92 = 5;
1665 var93 = NEW_array__NativeArray(var92, &type_array__NativeArraykernel__Object);
1666 ((struct instance_array__NativeArray*)var93)->values[0] = (val*) var76;
1667 var94 = BOX_kernel__Int(var_a); /* autobox from Int to Object */
1668 ((struct instance_array__NativeArray*)var93)->values[1] = (val*) var94;
1669 ((struct instance_array__NativeArray*)var93)->values[2] = (val*) var81;
1670 ((struct instance_array__NativeArray*)var93)->values[3] = (val*) var85;
1671 ((struct instance_array__NativeArray*)var93)->values[4] = (val*) var87;
1672 ((void (*)(val*, val*, long))(var91->class->vft[COLOR_array__Array__with_native]))(var91, var93, var92) /* with_native on <var91:Array[Object]>*/;
1673 }
1674 var95 = ((val* (*)(val*))(var91->class->vft[COLOR_string__Object__to_s]))(var91) /* to_s on <var91:Array[Object]>*/;
1675 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var95) /* add on <var_v:AbstractCompilerVisitor>*/;
1676 if (varonce96) {
1677 var97 = varonce96;
1678 } else {
1679 var98 = "var_for_c_";
1680 var99 = 10;
1681 var100 = string__NativeString__to_s_with_length(var98, var99);
1682 var97 = var100;
1683 varonce96 = var97;
1684 }
1685 var101 = NEW_array__Array(&type_array__Arraykernel__Object);
1686 { /* var101 = array_instance Array[Object] */
1687 var102 = 2;
1688 var103 = NEW_array__NativeArray(var102, &type_array__NativeArraykernel__Object);
1689 ((struct instance_array__NativeArray*)var103)->values[0] = (val*) var97;
1690 var104 = BOX_kernel__Int(var_a); /* autobox from Int to Object */
1691 ((struct instance_array__NativeArray*)var103)->values[1] = (val*) var104;
1692 ((void (*)(val*, val*, long))(var101->class->vft[COLOR_array__Array__with_native]))(var101, var103, var102) /* with_native on <var101:Array[Object]>*/;
1693 }
1694 var105 = ((val* (*)(val*))(var101->class->vft[COLOR_string__Object__to_s]))(var101) /* to_s on <var101:Array[Object]>*/;
1695 ((void (*)(val*, val*))(var_arguments_for_c->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_arguments_for_c, var105) /* add on <var_arguments_for_c:Array[String]>*/;
1696 }
1697 CONTINUE_label: (void)0;
1698 ((void (*)(val*))(var33->class->vft[COLOR_abstract_collection__Iterator__next]))(var33) /* next on <var33:Iterator[nullable Object]>*/;
1699 }
1700 BREAK_label: (void)0;
1701 var106 = ((short int (*)(val*))(var_return_mtype->class->vft[COLOR_nitni_base__MType__is_cprimitive]))(var_return_mtype) /* is_cprimitive on <var_return_mtype:MType>*/;
1702 if (var106){
1703 if (varonce107) {
1704 var108 = varonce107;
1705 } else {
1706 var109 = " = ";
1707 var110 = 3;
1708 var111 = string__NativeString__to_s_with_length(var109, var110);
1709 var108 = var111;
1710 varonce107 = var108;
1711 }
1712 if (varonce112) {
1713 var113 = varonce112;
1714 } else {
1715 var114 = "(";
1716 var115 = 1;
1717 var116 = string__NativeString__to_s_with_length(var114, var115);
1718 var113 = var116;
1719 varonce112 = var113;
1720 }
1721 if (varonce117) {
1722 var118 = varonce117;
1723 } else {
1724 var119 = ", ";
1725 var120 = 2;
1726 var121 = string__NativeString__to_s_with_length(var119, var120);
1727 var118 = var121;
1728 varonce117 = var118;
1729 }
1730 var122 = ((val* (*)(val*, val*))(var_arguments_for_c->class->vft[COLOR_string__Collection__join]))(var_arguments_for_c, var118) /* join on <var_arguments_for_c:Array[String]>*/;
1731 if (varonce123) {
1732 var124 = varonce123;
1733 } else {
1734 var125 = ");";
1735 var126 = 2;
1736 var127 = string__NativeString__to_s_with_length(var125, var126);
1737 var124 = var127;
1738 varonce123 = var124;
1739 }
1740 var128 = NEW_array__Array(&type_array__Arraykernel__Object);
1741 { /* var128 = array_instance Array[Object] */
1742 var129 = 6;
1743 var130 = NEW_array__NativeArray(var129, &type_array__NativeArraykernel__Object);
1744 ((struct instance_array__NativeArray*)var130)->values[0] = (val*) var_recv_var;
1745 ((struct instance_array__NativeArray*)var130)->values[1] = (val*) var108;
1746 ((struct instance_array__NativeArray*)var130)->values[2] = (val*) var_externname;
1747 ((struct instance_array__NativeArray*)var130)->values[3] = (val*) var113;
1748 ((struct instance_array__NativeArray*)var130)->values[4] = (val*) var122;
1749 ((struct instance_array__NativeArray*)var130)->values[5] = (val*) var124;
1750 ((void (*)(val*, val*, long))(var128->class->vft[COLOR_array__Array__with_native]))(var128, var130, var129) /* with_native on <var128:Array[Object]>*/;
1751 }
1752 var131 = ((val* (*)(val*))(var128->class->vft[COLOR_string__Object__to_s]))(var128) /* to_s on <var128:Array[Object]>*/;
1753 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var131) /* add on <var_v:AbstractCompilerVisitor>*/;
1754 } else {
1755 if (varonce132) {
1756 var133 = varonce132;
1757 } else {
1758 var134 = "struct nitni_instance* ret_var;";
1759 var135 = 31;
1760 var136 = string__NativeString__to_s_with_length(var134, var135);
1761 var133 = var136;
1762 varonce132 = var133;
1763 }
1764 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var133) /* add on <var_v:AbstractCompilerVisitor>*/;
1765 if (varonce137) {
1766 var138 = varonce137;
1767 } else {
1768 var139 = "ret_var = ";
1769 var140 = 10;
1770 var141 = string__NativeString__to_s_with_length(var139, var140);
1771 var138 = var141;
1772 varonce137 = var138;
1773 }
1774 if (varonce142) {
1775 var143 = varonce142;
1776 } else {
1777 var144 = "(";
1778 var145 = 1;
1779 var146 = string__NativeString__to_s_with_length(var144, var145);
1780 var143 = var146;
1781 varonce142 = var143;
1782 }
1783 if (varonce147) {
1784 var148 = varonce147;
1785 } else {
1786 var149 = ", ";
1787 var150 = 2;
1788 var151 = string__NativeString__to_s_with_length(var149, var150);
1789 var148 = var151;
1790 varonce147 = var148;
1791 }
1792 var152 = ((val* (*)(val*, val*))(var_arguments_for_c->class->vft[COLOR_string__Collection__join]))(var_arguments_for_c, var148) /* join on <var_arguments_for_c:Array[String]>*/;
1793 if (varonce153) {
1794 var154 = varonce153;
1795 } else {
1796 var155 = ");";
1797 var156 = 2;
1798 var157 = string__NativeString__to_s_with_length(var155, var156);
1799 var154 = var157;
1800 varonce153 = var154;
1801 }
1802 var158 = NEW_array__Array(&type_array__Arraykernel__Object);
1803 { /* var158 = array_instance Array[Object] */
1804 var159 = 5;
1805 var160 = NEW_array__NativeArray(var159, &type_array__NativeArraykernel__Object);
1806 ((struct instance_array__NativeArray*)var160)->values[0] = (val*) var138;
1807 ((struct instance_array__NativeArray*)var160)->values[1] = (val*) var_externname;
1808 ((struct instance_array__NativeArray*)var160)->values[2] = (val*) var143;
1809 ((struct instance_array__NativeArray*)var160)->values[3] = (val*) var152;
1810 ((struct instance_array__NativeArray*)var160)->values[4] = (val*) var154;
1811 ((void (*)(val*, val*, long))(var158->class->vft[COLOR_array__Array__with_native]))(var158, var160, var159) /* with_native on <var158:Array[Object]>*/;
1812 }
1813 var161 = ((val* (*)(val*))(var158->class->vft[COLOR_string__Object__to_s]))(var158) /* to_s on <var158:Array[Object]>*/;
1814 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var161) /* add on <var_v:AbstractCompilerVisitor>*/;
1815 if (varonce162) {
1816 var163 = varonce162;
1817 } else {
1818 var164 = " = ret_var->value;";
1819 var165 = 18;
1820 var166 = string__NativeString__to_s_with_length(var164, var165);
1821 var163 = var166;
1822 varonce162 = var163;
1823 }
1824 var167 = NEW_array__Array(&type_array__Arraykernel__Object);
1825 { /* var167 = array_instance Array[Object] */
1826 var168 = 2;
1827 var169 = NEW_array__NativeArray(var168, &type_array__NativeArraykernel__Object);
1828 ((struct instance_array__NativeArray*)var169)->values[0] = (val*) var_recv_var;
1829 ((struct instance_array__NativeArray*)var169)->values[1] = (val*) var163;
1830 ((void (*)(val*, val*, long))(var167->class->vft[COLOR_array__Array__with_native]))(var167, var169, var168) /* with_native on <var167:Array[Object]>*/;
1831 }
1832 var170 = ((val* (*)(val*))(var167->class->vft[COLOR_string__Object__to_s]))(var167) /* to_s on <var167:Array[Object]>*/;
1833 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var170) /* add on <var_v:AbstractCompilerVisitor>*/;
1834 }
1835 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(var_v, var_recv_var) /* ret on <var_v:AbstractCompilerVisitor>*/;
1836 ((void (*)(val*, val*))(self->class->vft[COLOR_compiler_ffi__AExternPropdef__compile_ffi_support_to_c]))(self, var_v) /* compile_ffi_support_to_c on <self:AExternInitPropdef>*/;
1837 RET_LABEL:;
1838 }
1839 /* method compiler_ffi#AExternInitPropdef#compile_to_c for (self: Object, AbstractCompilerVisitor, MMethodDef, Array[RuntimeVariable]) */
1840 void VIRTUAL_compiler_ffi__AExternInitPropdef__compile_to_c(val* self, val* p0, val* p1, val* p2) {
1841 compiler_ffi__AExternInitPropdef__compile_to_c(self, p0, p1, p2);
1842 RET_LABEL:;
1843 }
1844 /* method compiler_ffi#CCompilationUnit#write_as_nitni for (self: CCompilationUnit, AModule, String) */
1845 void compiler_ffi__CCompilationUnit__write_as_nitni(val* self, val* p0, val* p1) {
1846 val* var_amodule /* var amodule: AModule */;
1847 val* var_compdir /* var compdir: String */;
1848 val* var /* : Array[Object] */;
1849 long var1 /* : Int */;
1850 val* var_ /* var : Array[Object] */;
1851 static val* varonce;
1852 val* var2 /* : String */;
1853 char* var3 /* : NativeString */;
1854 long var4 /* : Int */;
1855 val* var5 /* : String */;
1856 val* var6 /* : nullable MModule */;
1857 val* var7 /* : String */;
1858 static val* varonce8;
1859 val* var9 /* : String */;
1860 char* var10 /* : NativeString */;
1861 long var11 /* : Int */;
1862 val* var12 /* : String */;
1863 val* var13 /* : String */;
1864 val* var_base_name /* var base_name: String */;
1865 val* var14 /* : Array[Object] */;
1866 long var15 /* : Int */;
1867 val* var_16 /* var : Array[Object] */;
1868 static val* varonce17;
1869 val* var18 /* : String */;
1870 char* var19 /* : NativeString */;
1871 long var20 /* : Int */;
1872 val* var21 /* : String */;
1873 static val* varonce22;
1874 val* var23 /* : String */;
1875 char* var24 /* : NativeString */;
1876 long var25 /* : Int */;
1877 val* var26 /* : String */;
1878 val* var27 /* : String */;
1879 val* var_h_file /* var h_file: String */;
1880 static val* varonce28;
1881 val* var29 /* : String */;
1882 char* var30 /* : NativeString */;
1883 long var31 /* : Int */;
1884 val* var32 /* : String */;
1885 val* var33 /* : Array[Object] */;
1886 long var34 /* : Int */;
1887 val* var35 /* : NativeArray[Object] */;
1888 val* var36 /* : String */;
1889 val* var37 /* : Array[String] */;
1890 val* var38 /* : String */;
1891 val* var39 /* : String */;
1892 val* var40 /* : String */;
1893 static val* varonce41;
1894 val* var42 /* : String */;
1895 char* var43 /* : NativeString */;
1896 long var44 /* : Int */;
1897 val* var45 /* : String */;
1898 val* var46 /* : Array[Object] */;
1899 long var47 /* : Int */;
1900 val* var48 /* : NativeArray[Object] */;
1901 val* var49 /* : String */;
1902 val* var50 /* : Array[Object] */;
1903 long var51 /* : Int */;
1904 val* var_52 /* var : Array[Object] */;
1905 static val* varonce53;
1906 val* var54 /* : String */;
1907 char* var55 /* : NativeString */;
1908 long var56 /* : Int */;
1909 val* var57 /* : String */;
1910 static val* varonce58;
1911 val* var59 /* : String */;
1912 char* var60 /* : NativeString */;
1913 long var61 /* : Int */;
1914 val* var62 /* : String */;
1915 val* var63 /* : String */;
1916 val* var_c_file /* var c_file: String */;
1917 static val* varonce64;
1918 val* var65 /* : String */;
1919 char* var66 /* : NativeString */;
1920 long var67 /* : Int */;
1921 val* var68 /* : String */;
1922 val* var69 /* : Array[Object] */;
1923 long var70 /* : Int */;
1924 val* var71 /* : NativeArray[Object] */;
1925 val* var72 /* : String */;
1926 val* var73 /* : Array[Object] */;
1927 long var74 /* : Int */;
1928 val* var_75 /* var : Array[Object] */;
1929 static val* varonce76;
1930 val* var77 /* : String */;
1931 char* var78 /* : NativeString */;
1932 long var79 /* : Int */;
1933 val* var80 /* : String */;
1934 static val* varonce81;
1935 val* var82 /* : String */;
1936 char* var83 /* : NativeString */;
1937 long var84 /* : Int */;
1938 val* var85 /* : String */;
1939 val* var86 /* : String */;
1940 val* var87 /* : Array[String] */;
1941 long var88 /* : Int */;
1942 val* var89 /* : NativeArray[String] */;
1943 val* var90 /* : Array[String] */;
1944 static val* varonce91;
1945 val* var92 /* : String */;
1946 char* var93 /* : NativeString */;
1947 long var94 /* : Int */;
1948 val* var95 /* : String */;
1949 val* var96 /* : Array[Object] */;
1950 long var97 /* : Int */;
1951 val* var98 /* : NativeArray[Object] */;
1952 val* var99 /* : String */;
1953 var_amodule = p0;
1954 var_compdir = p1;
1955 var = NEW_array__Array(&type_array__Arraykernel__Object);
1956 var1 = 3;
1957 ((void (*)(val*, long))(var->class->vft[COLOR_array__Array__with_capacity]))(var, var1) /* with_capacity on <var:Array[Object]>*/;
1958 var_ = var;
1959 if (varonce) {
1960 var2 = varonce;
1961 } else {
1962 var3 = "";
1963 var4 = 0;
1964 var5 = string__NativeString__to_s_with_length(var3, var4);
1965 var2 = var5;
1966 varonce = var2;
1967 }
1968 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var2) /* add on <var_:Array[Object]>*/;
1969 var6 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_amodule) /* mmodule on <var_amodule:AModule>*/;
1970 if (var6 == NULL) {
1971 fprintf(stderr, "Runtime error: %s", "Receiver is null");
1972 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 239);
1973 show_backtrace(1);
1974 } else {
1975 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_mmodule__MModule__name]))(var6) /* name on <var6:nullable MModule>*/;
1976 }
1977 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var7) /* add on <var_:Array[Object]>*/;
1978 if (varonce8) {
1979 var9 = varonce8;
1980 } else {
1981 var10 = "._nitni";
1982 var11 = 7;
1983 var12 = string__NativeString__to_s_with_length(var10, var11);
1984 var9 = var12;
1985 varonce8 = var9;
1986 }
1987 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var9) /* add on <var_:Array[Object]>*/;
1988 var13 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
1989 var_base_name = var13;
1990 var14 = NEW_array__Array(&type_array__Arraykernel__Object);
1991 var15 = 3;
1992 ((void (*)(val*, long))(var14->class->vft[COLOR_array__Array__with_capacity]))(var14, var15) /* with_capacity on <var14:Array[Object]>*/;
1993 var_16 = var14;
1994 if (varonce17) {
1995 var18 = varonce17;
1996 } else {
1997 var19 = "";
1998 var20 = 0;
1999 var21 = string__NativeString__to_s_with_length(var19, var20);
2000 var18 = var21;
2001 varonce17 = var18;
2002 }
2003 ((void (*)(val*, val*))(var_16->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_16, var18) /* add on <var_16:Array[Object]>*/;
2004 ((void (*)(val*, val*))(var_16->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_16, var_base_name) /* add on <var_16:Array[Object]>*/;
2005 if (varonce22) {
2006 var23 = varonce22;
2007 } else {
2008 var24 = ".h";
2009 var25 = 2;
2010 var26 = string__NativeString__to_s_with_length(var24, var25);
2011 var23 = var26;
2012 varonce22 = var23;
2013 }
2014 ((void (*)(val*, val*))(var_16->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_16, var23) /* add on <var_16:Array[Object]>*/;
2015 var27 = ((val* (*)(val*))(var_16->class->vft[COLOR_string__Object__to_s]))(var_16) /* to_s on <var_16:Array[Object]>*/;
2016 var_h_file = var27;
2017 if (varonce28) {
2018 var29 = varonce28;
2019 } else {
2020 var30 = "/";
2021 var31 = 1;
2022 var32 = string__NativeString__to_s_with_length(var30, var31);
2023 var29 = var32;
2024 varonce28 = var29;
2025 }
2026 var33 = NEW_array__Array(&type_array__Arraykernel__Object);
2027 { /* var33 = array_instance Array[Object] */
2028 var34 = 3;
2029 var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
2030 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var_compdir;
2031 ((struct instance_array__NativeArray*)var35)->values[1] = (val*) var29;
2032 ((struct instance_array__NativeArray*)var35)->values[2] = (val*) var_h_file;
2033 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
2034 }
2035 var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
2036 var37 = NEW_array__Array(&type_array__Arraystring__String);
2037 ((void (*)(val*))(var37->class->vft[COLOR_array__Array__init]))(var37) /* init on <var37:Array[String]>*/;
2038 var38 = ((val* (*)(val*))(var_amodule->class->vft[COLOR_nitni_base__AModule__cname]))(var_amodule) /* cname on <var_amodule:AModule>*/;
2039 var39 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:String>*/;
2040 var40 = ((val* (*)(val*))(var39->class->vft[COLOR_string__AbstractString__to_upper]))(var39) /* to_upper on <var39:String>*/;
2041 if (varonce41) {
2042 var42 = varonce41;
2043 } else {
2044 var43 = "_NITG_NITNI_H";
2045 var44 = 13;
2046 var45 = string__NativeString__to_s_with_length(var43, var44);
2047 var42 = var45;
2048 varonce41 = var42;
2049 }
2050 var46 = NEW_array__Array(&type_array__Arraykernel__Object);
2051 { /* var46 = array_instance Array[Object] */
2052 var47 = 2;
2053 var48 = NEW_array__NativeArray(var47, &type_array__NativeArraykernel__Object);
2054 ((struct instance_array__NativeArray*)var48)->values[0] = (val*) var40;
2055 ((struct instance_array__NativeArray*)var48)->values[1] = (val*) var42;
2056 ((void (*)(val*, val*, long))(var46->class->vft[COLOR_array__Array__with_native]))(var46, var48, var47) /* with_native on <var46:Array[Object]>*/;
2057 }
2058 var49 = ((val* (*)(val*))(var46->class->vft[COLOR_string__Object__to_s]))(var46) /* to_s on <var46:Array[Object]>*/;
2059 ((void (*)(val*, val*, val*, val*, val*))(self->class->vft[COLOR_ffi_base__CCompilationUnit__write_header_to_file]))(self, var_amodule, var36, var37, var49) /* write_header_to_file on <self:CCompilationUnit>*/;
2060 var50 = NEW_array__Array(&type_array__Arraykernel__Object);
2061 var51 = 3;
2062 ((void (*)(val*, long))(var50->class->vft[COLOR_array__Array__with_capacity]))(var50, var51) /* with_capacity on <var50:Array[Object]>*/;
2063 var_52 = var50;
2064 if (varonce53) {
2065 var54 = varonce53;
2066 } else {
2067 var55 = "";
2068 var56 = 0;
2069 var57 = string__NativeString__to_s_with_length(var55, var56);
2070 var54 = var57;
2071 varonce53 = var54;
2072 }
2073 ((void (*)(val*, val*))(var_52->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_52, var54) /* add on <var_52:Array[Object]>*/;
2074 ((void (*)(val*, val*))(var_52->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_52, var_base_name) /* add on <var_52:Array[Object]>*/;
2075 if (varonce58) {
2076 var59 = varonce58;
2077 } else {
2078 var60 = ".c";
2079 var61 = 2;
2080 var62 = string__NativeString__to_s_with_length(var60, var61);
2081 var59 = var62;
2082 varonce58 = var59;
2083 }
2084 ((void (*)(val*, val*))(var_52->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_52, var59) /* add on <var_52:Array[Object]>*/;
2085 var63 = ((val* (*)(val*))(var_52->class->vft[COLOR_string__Object__to_s]))(var_52) /* to_s on <var_52:Array[Object]>*/;
2086 var_c_file = var63;
2087 if (varonce64) {
2088 var65 = varonce64;
2089 } else {
2090 var66 = "/";
2091 var67 = 1;
2092 var68 = string__NativeString__to_s_with_length(var66, var67);
2093 var65 = var68;
2094 varonce64 = var65;
2095 }
2096 var69 = NEW_array__Array(&type_array__Arraykernel__Object);
2097 { /* var69 = array_instance Array[Object] */
2098 var70 = 3;
2099 var71 = NEW_array__NativeArray(var70, &type_array__NativeArraykernel__Object);
2100 ((struct instance_array__NativeArray*)var71)->values[0] = (val*) var_compdir;
2101 ((struct instance_array__NativeArray*)var71)->values[1] = (val*) var65;
2102 ((struct instance_array__NativeArray*)var71)->values[2] = (val*) var_c_file;
2103 ((void (*)(val*, val*, long))(var69->class->vft[COLOR_array__Array__with_native]))(var69, var71, var70) /* with_native on <var69:Array[Object]>*/;
2104 }
2105 var72 = ((val* (*)(val*))(var69->class->vft[COLOR_string__Object__to_s]))(var69) /* to_s on <var69:Array[Object]>*/;
2106 var73 = NEW_array__Array(&type_array__Arraykernel__Object);
2107 var74 = 3;
2108 ((void (*)(val*, long))(var73->class->vft[COLOR_array__Array__with_capacity]))(var73, var74) /* with_capacity on <var73:Array[Object]>*/;
2109 var_75 = var73;
2110 if (varonce76) {
2111 var77 = varonce76;
2112 } else {
2113 var78 = "\"";
2114 var79 = 1;
2115 var80 = string__NativeString__to_s_with_length(var78, var79);
2116 var77 = var80;
2117 varonce76 = var77;
2118 }
2119 ((void (*)(val*, val*))(var_75->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_75, var77) /* add on <var_75:Array[Object]>*/;
2120 ((void (*)(val*, val*))(var_75->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_75, var_h_file) /* add on <var_75:Array[Object]>*/;
2121 if (varonce81) {
2122 var82 = varonce81;
2123 } else {
2124 var83 = "\"";
2125 var84 = 1;
2126 var85 = string__NativeString__to_s_with_length(var83, var84);
2127 var82 = var85;
2128 varonce81 = var82;
2129 }
2130 ((void (*)(val*, val*))(var_75->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_75, var82) /* add on <var_75:Array[Object]>*/;
2131 var86 = ((val* (*)(val*))(var_75->class->vft[COLOR_string__Object__to_s]))(var_75) /* to_s on <var_75:Array[Object]>*/;
2132 var87 = NEW_array__Array(&type_array__Arraystring__String);
2133 { /* var87 = array_instance Array[String] */
2134 var88 = 1;
2135 var89 = NEW_array__NativeArray(var88, &type_array__NativeArraystring__String);
2136 ((struct instance_array__NativeArray*)var89)->values[0] = (val*) var86;
2137 ((void (*)(val*, val*, long))(var87->class->vft[COLOR_array__Array__with_native]))(var87, var89, var88) /* with_native on <var87:Array[String]>*/;
2138 }
2139 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_ffi_base__CCompilationUnit__write_body_to_file]))(self, var_amodule, var72, var87) /* write_body_to_file on <self:CCompilationUnit>*/;
2140 var90 = ((val* (*)(val*))(self->class->vft[COLOR_c_tools__CCompilationUnit__files]))(self) /* files on <self:CCompilationUnit>*/;
2141 if (varonce91) {
2142 var92 = varonce91;
2143 } else {
2144 var93 = "/";
2145 var94 = 1;
2146 var95 = string__NativeString__to_s_with_length(var93, var94);
2147 var92 = var95;
2148 varonce91 = var92;
2149 }
2150 var96 = NEW_array__Array(&type_array__Arraykernel__Object);
2151 { /* var96 = array_instance Array[Object] */
2152 var97 = 3;
2153 var98 = NEW_array__NativeArray(var97, &type_array__NativeArraykernel__Object);
2154 ((struct instance_array__NativeArray*)var98)->values[0] = (val*) var_compdir;
2155 ((struct instance_array__NativeArray*)var98)->values[1] = (val*) var92;
2156 ((struct instance_array__NativeArray*)var98)->values[2] = (val*) var_c_file;
2157 ((void (*)(val*, val*, long))(var96->class->vft[COLOR_array__Array__with_native]))(var96, var98, var97) /* with_native on <var96:Array[Object]>*/;
2158 }
2159 var99 = ((val* (*)(val*))(var96->class->vft[COLOR_string__Object__to_s]))(var96) /* to_s on <var96:Array[Object]>*/;
2160 ((void (*)(val*, val*))(var90->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var90, var99) /* add on <var90:Array[String]>*/;
2161 RET_LABEL:;
2162 }
2163 /* method compiler_ffi#CCompilationUnit#write_as_nitni for (self: Object, AModule, String) */
2164 void VIRTUAL_compiler_ffi__CCompilationUnit__write_as_nitni(val* self, val* p0, val* p1) {
2165 compiler_ffi__CCompilationUnit__write_as_nitni(self, p0, p1);
2166 RET_LABEL:;
2167 }
2168 /* method compiler_ffi#AbstractCompilerVisitor#var_from_c for (self: AbstractCompilerVisitor, String, MType): RuntimeVariable */
2169 val* compiler_ffi__AbstractCompilerVisitor__var_from_c(val* self, val* p0, val* p1) {
2170 val* var /* : RuntimeVariable */;
2171 val* var_name /* var name: String */;
2172 val* var_mtype /* var mtype: MType */;
2173 short int var1 /* : Bool */;
2174 val* var2 /* : RuntimeVariable */;
2175 val* var3 /* : RuntimeVariable */;
2176 val* var4 /* : Array[Object] */;
2177 long var5 /* : Int */;
2178 val* var_ /* var : Array[Object] */;
2179 static val* varonce;
2180 val* var6 /* : String */;
2181 char* var7 /* : NativeString */;
2182 long var8 /* : Int */;
2183 val* var9 /* : String */;
2184 static val* varonce10;
2185 val* var11 /* : String */;
2186 char* var12 /* : NativeString */;
2187 long var13 /* : Int */;
2188 val* var14 /* : String */;
2189 val* var15 /* : String */;
2190 var_name = p0;
2191 var_mtype = p1;
2192 var1 = ((short int (*)(val*))(var_mtype->class->vft[COLOR_nitni_base__MType__is_cprimitive]))(var_mtype) /* is_cprimitive on <var_mtype:MType>*/;
2193 if (var1){
2194 var2 = NEW_abstract_compiler__RuntimeVariable(&type_abstract_compiler__RuntimeVariable);
2195 ((void (*)(val*, val*, val*, val*))(var2->class->vft[COLOR_abstract_compiler__RuntimeVariable__init]))(var2, var_name, var_mtype, var_mtype) /* init on <var2:RuntimeVariable>*/;
2196 var = var2;
2197 goto RET_LABEL;
2198 } else {
2199 var3 = NEW_abstract_compiler__RuntimeVariable(&type_abstract_compiler__RuntimeVariable);
2200 var4 = NEW_array__Array(&type_array__Arraykernel__Object);
2201 var5 = 3;
2202 ((void (*)(val*, long))(var4->class->vft[COLOR_array__Array__with_capacity]))(var4, var5) /* with_capacity on <var4:Array[Object]>*/;
2203 var_ = var4;
2204 if (varonce) {
2205 var6 = varonce;
2206 } else {
2207 var7 = "";
2208 var8 = 0;
2209 var9 = string__NativeString__to_s_with_length(var7, var8);
2210 var6 = var9;
2211 varonce = var6;
2212 }
2213 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var6) /* add on <var_:Array[Object]>*/;
2214 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var_name) /* add on <var_:Array[Object]>*/;
2215 if (varonce10) {
2216 var11 = varonce10;
2217 } else {
2218 var12 = "->value";
2219 var13 = 7;
2220 var14 = string__NativeString__to_s_with_length(var12, var13);
2221 var11 = var14;
2222 varonce10 = var11;
2223 }
2224 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var11) /* add on <var_:Array[Object]>*/;
2225 var15 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
2226 ((void (*)(val*, val*, val*, val*))(var3->class->vft[COLOR_abstract_compiler__RuntimeVariable__init]))(var3, var15, var_mtype, var_mtype) /* init on <var3:RuntimeVariable>*/;
2227 var = var3;
2228 goto RET_LABEL;
2229 }
2230 RET_LABEL:;
2231 return var;
2232 }
2233 /* method compiler_ffi#AbstractCompilerVisitor#var_from_c for (self: Object, String, MType): RuntimeVariable */
2234 val* VIRTUAL_compiler_ffi__AbstractCompilerVisitor__var_from_c(val* self, val* p0, val* p1) {
2235 val* var /* : RuntimeVariable */;
2236 val* var1 /* : RuntimeVariable */;
2237 var1 = compiler_ffi__AbstractCompilerVisitor__var_from_c(self, p0, p1);
2238 var = var1;
2239 RET_LABEL:;
2240 return var;
2241 }
2242 /* method compiler_ffi#AbstractCompilerVisitor#ret_to_c for (self: AbstractCompilerVisitor, RuntimeVariable, MType) */
2243 void compiler_ffi__AbstractCompilerVisitor__ret_to_c(val* self, val* p0, val* p1) {
2244 val* var_src /* var src: RuntimeVariable */;
2245 val* var_mtype /* var mtype: MType */;
2246 short int var /* : Bool */;
2247 static val* varonce;
2248 val* var1 /* : String */;
2249 char* var2 /* : NativeString */;
2250 long var3 /* : Int */;
2251 val* var4 /* : String */;
2252 static val* varonce5;
2253 val* var6 /* : String */;
2254 char* var7 /* : NativeString */;
2255 long var8 /* : Int */;
2256 val* var9 /* : String */;
2257 val* var10 /* : Array[Object] */;
2258 long var11 /* : Int */;
2259 val* var12 /* : NativeArray[Object] */;
2260 val* var13 /* : String */;
2261 static val* varonce14;
2262 val* var15 /* : String */;
2263 char* var16 /* : NativeString */;
2264 long var17 /* : Int */;
2265 val* var18 /* : String */;
2266 static val* varonce19;
2267 val* var20 /* : String */;
2268 char* var21 /* : NativeString */;
2269 long var22 /* : Int */;
2270 val* var23 /* : String */;
2271 static val* varonce24;
2272 val* var25 /* : String */;
2273 char* var26 /* : NativeString */;
2274 long var27 /* : Int */;
2275 val* var28 /* : String */;
2276 static val* varonce29;
2277 val* var30 /* : String */;
2278 char* var31 /* : NativeString */;
2279 long var32 /* : Int */;
2280 val* var33 /* : String */;
2281 val* var34 /* : Array[Object] */;
2282 long var35 /* : Int */;
2283 val* var36 /* : NativeArray[Object] */;
2284 val* var37 /* : String */;
2285 static val* varonce38;
2286 val* var39 /* : String */;
2287 char* var40 /* : NativeString */;
2288 long var41 /* : Int */;
2289 val* var42 /* : String */;
2290 var_src = p0;
2291 var_mtype = p1;
2292 var = ((short int (*)(val*))(var_mtype->class->vft[COLOR_nitni_base__MType__is_cprimitive]))(var_mtype) /* is_cprimitive on <var_mtype:MType>*/;
2293 if (var){
2294 if (varonce) {
2295 var1 = varonce;
2296 } else {
2297 var2 = "return ";
2298 var3 = 7;
2299 var4 = string__NativeString__to_s_with_length(var2, var3);
2300 var1 = var4;
2301 varonce = var1;
2302 }
2303 if (varonce5) {
2304 var6 = varonce5;
2305 } else {
2306 var7 = ";";
2307 var8 = 1;
2308 var9 = string__NativeString__to_s_with_length(var7, var8);
2309 var6 = var9;
2310 varonce5 = var6;
2311 }
2312 var10 = NEW_array__Array(&type_array__Arraykernel__Object);
2313 { /* var10 = array_instance Array[Object] */
2314 var11 = 3;
2315 var12 = NEW_array__NativeArray(var11, &type_array__NativeArraykernel__Object);
2316 ((struct instance_array__NativeArray*)var12)->values[0] = (val*) var1;
2317 ((struct instance_array__NativeArray*)var12)->values[1] = (val*) var_src;
2318 ((struct instance_array__NativeArray*)var12)->values[2] = (val*) var6;
2319 ((void (*)(val*, val*, long))(var10->class->vft[COLOR_array__Array__with_native]))(var10, var12, var11) /* with_native on <var10:Array[Object]>*/;
2320 }
2321 var13 = ((val* (*)(val*))(var10->class->vft[COLOR_string__Object__to_s]))(var10) /* to_s on <var10:Array[Object]>*/;
2322 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var13) /* add on <self:AbstractCompilerVisitor>*/;
2323 } else {
2324 if (varonce14) {
2325 var15 = varonce14;
2326 } else {
2327 var16 = "struct nitni_instance* ret_for_c;";
2328 var17 = 33;
2329 var18 = string__NativeString__to_s_with_length(var16, var17);
2330 var15 = var18;
2331 varonce14 = var15;
2332 }
2333 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var15) /* add on <self:AbstractCompilerVisitor>*/;
2334 if (varonce19) {
2335 var20 = varonce19;
2336 } else {
2337 var21 = "ret_for_c = malloc(sizeof(struct nitni_instance));";
2338 var22 = 50;
2339 var23 = string__NativeString__to_s_with_length(var21, var22);
2340 var20 = var23;
2341 varonce19 = var20;
2342 }
2343 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var20) /* add on <self:AbstractCompilerVisitor>*/;
2344 if (varonce24) {
2345 var25 = varonce24;
2346 } else {
2347 var26 = "ret_for_c->value = ";
2348 var27 = 19;
2349 var28 = string__NativeString__to_s_with_length(var26, var27);
2350 var25 = var28;
2351 varonce24 = var25;
2352 }
2353 if (varonce29) {
2354 var30 = varonce29;
2355 } else {
2356 var31 = ";";
2357 var32 = 1;
2358 var33 = string__NativeString__to_s_with_length(var31, var32);
2359 var30 = var33;
2360 varonce29 = var30;
2361 }
2362 var34 = NEW_array__Array(&type_array__Arraykernel__Object);
2363 { /* var34 = array_instance Array[Object] */
2364 var35 = 3;
2365 var36 = NEW_array__NativeArray(var35, &type_array__NativeArraykernel__Object);
2366 ((struct instance_array__NativeArray*)var36)->values[0] = (val*) var25;
2367 ((struct instance_array__NativeArray*)var36)->values[1] = (val*) var_src;
2368 ((struct instance_array__NativeArray*)var36)->values[2] = (val*) var30;
2369 ((void (*)(val*, val*, long))(var34->class->vft[COLOR_array__Array__with_native]))(var34, var36, var35) /* with_native on <var34:Array[Object]>*/;
2370 }
2371 var37 = ((val* (*)(val*))(var34->class->vft[COLOR_string__Object__to_s]))(var34) /* to_s on <var34:Array[Object]>*/;
2372 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var37) /* add on <self:AbstractCompilerVisitor>*/;
2373 if (varonce38) {
2374 var39 = varonce38;
2375 } else {
2376 var40 = "return ret_for_c;";
2377 var41 = 17;
2378 var42 = string__NativeString__to_s_with_length(var40, var41);
2379 var39 = var42;
2380 varonce38 = var39;
2381 }
2382 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var39) /* add on <self:AbstractCompilerVisitor>*/;
2383 }
2384 RET_LABEL:;
2385 }
2386 /* method compiler_ffi#AbstractCompilerVisitor#ret_to_c for (self: Object, RuntimeVariable, MType) */
2387 void VIRTUAL_compiler_ffi__AbstractCompilerVisitor__ret_to_c(val* self, val* p0, val* p1) {
2388 compiler_ffi__AbstractCompilerVisitor__ret_to_c(self, p0, p1);
2389 RET_LABEL:;
2390 }
2391 /* method compiler_ffi#MType#compile_extern_type for (self: MType, AbstractCompilerVisitor, CCompilationUnit) */
2392 void compiler_ffi__MType__compile_extern_type(val* self, val* p0, val* p1) {
2393 val* var_v /* var v: AbstractCompilerVisitor */;
2394 val* var_ccu /* var ccu: CCompilationUnit */;
2395 short int var /* : Bool */;
2396 short int var1 /* : Bool */;
2397 val* var2 /* : Template */;
2398 static val* varonce;
2399 val* var3 /* : String */;
2400 char* var4 /* : NativeString */;
2401 long var5 /* : Int */;
2402 val* var6 /* : String */;
2403 val* var7 /* : String */;
2404 static val* varonce8;
2405 val* var9 /* : String */;
2406 char* var10 /* : NativeString */;
2407 long var11 /* : Int */;
2408 val* var12 /* : String */;
2409 val* var13 /* : Array[Object] */;
2410 long var14 /* : Int */;
2411 val* var15 /* : NativeArray[Object] */;
2412 val* var16 /* : String */;
2413 val* var17 /* : Template */;
2414 static val* varonce18;
2415 val* var19 /* : String */;
2416 char* var20 /* : NativeString */;
2417 long var21 /* : Int */;
2418 val* var22 /* : String */;
2419 val* var23 /* : String */;
2420 static val* varonce24;
2421 val* var25 /* : String */;
2422 char* var26 /* : NativeString */;
2423 long var27 /* : Int */;
2424 val* var28 /* : String */;
2425 val* var29 /* : Array[Object] */;
2426 long var30 /* : Int */;
2427 val* var31 /* : NativeArray[Object] */;
2428 val* var32 /* : String */;
2429 val* var33 /* : Template */;
2430 static val* varonce34;
2431 val* var35 /* : String */;
2432 char* var36 /* : NativeString */;
2433 long var37 /* : Int */;
2434 val* var38 /* : String */;
2435 val* var39 /* : String */;
2436 static val* varonce40;
2437 val* var41 /* : String */;
2438 char* var42 /* : NativeString */;
2439 long var43 /* : Int */;
2440 val* var44 /* : String */;
2441 val* var45 /* : Array[Object] */;
2442 long var46 /* : Int */;
2443 val* var47 /* : NativeArray[Object] */;
2444 val* var48 /* : String */;
2445 val* var49 /* : Template */;
2446 static val* varonce50;
2447 val* var51 /* : String */;
2448 char* var52 /* : NativeString */;
2449 long var53 /* : Int */;
2450 val* var54 /* : String */;
2451 var_v = p0;
2452 var_ccu = p1;
2453 var = ((short int (*)(val*))(self->class->vft[COLOR_nitni_base__MType__is_cprimitive]))(self) /* is_cprimitive on <self:MType>*/;
2454 var1 = !var;
2455 if (!var1) {
2456 fprintf(stderr, "Runtime error: %s", "Assert failed");
2457 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 280);
2458 show_backtrace(1);
2459 }
2460 var2 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_c_types]))(var_ccu) /* header_c_types on <var_ccu:CCompilationUnit>*/;
2461 if (varonce) {
2462 var3 = varonce;
2463 } else {
2464 var4 = "#ifndef NIT_TYPE_";
2465 var5 = 17;
2466 var6 = string__NativeString__to_s_with_length(var4, var5);
2467 var3 = var6;
2468 varonce = var3;
2469 }
2470 var7 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_base__MType__cname]))(self) /* cname on <self:MType>*/;
2471 if (varonce8) {
2472 var9 = varonce8;
2473 } else {
2474 var10 = "\n";
2475 var11 = 1;
2476 var12 = string__NativeString__to_s_with_length(var10, var11);
2477 var9 = var12;
2478 varonce8 = var9;
2479 }
2480 var13 = NEW_array__Array(&type_array__Arraykernel__Object);
2481 { /* var13 = array_instance Array[Object] */
2482 var14 = 3;
2483 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraykernel__Object);
2484 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var3;
2485 ((struct instance_array__NativeArray*)var15)->values[1] = (val*) var7;
2486 ((struct instance_array__NativeArray*)var15)->values[2] = (val*) var9;
2487 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[Object]>*/;
2488 }
2489 var16 = ((val* (*)(val*))(var13->class->vft[COLOR_string__Object__to_s]))(var13) /* to_s on <var13:Array[Object]>*/;
2490 ((void (*)(val*, val*))(var2->class->vft[COLOR_template__Template__add]))(var2, var16) /* add on <var2:Template>*/;
2491 var17 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_c_types]))(var_ccu) /* header_c_types on <var_ccu:CCompilationUnit>*/;
2492 if (varonce18) {
2493 var19 = varonce18;
2494 } else {
2495 var20 = "#define NIT_TYPE_";
2496 var21 = 17;
2497 var22 = string__NativeString__to_s_with_length(var20, var21);
2498 var19 = var22;
2499 varonce18 = var19;
2500 }
2501 var23 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_base__MType__cname]))(self) /* cname on <self:MType>*/;
2502 if (varonce24) {
2503 var25 = varonce24;
2504 } else {
2505 var26 = " 1\n";
2506 var27 = 3;
2507 var28 = string__NativeString__to_s_with_length(var26, var27);
2508 var25 = var28;
2509 varonce24 = var25;
2510 }
2511 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
2512 { /* var29 = array_instance Array[Object] */
2513 var30 = 3;
2514 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
2515 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var19;
2516 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var23;
2517 ((struct instance_array__NativeArray*)var31)->values[2] = (val*) var25;
2518 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
2519 }
2520 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
2521 ((void (*)(val*, val*))(var17->class->vft[COLOR_template__Template__add]))(var17, var32) /* add on <var17:Template>*/;
2522 var33 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_c_types]))(var_ccu) /* header_c_types on <var_ccu:CCompilationUnit>*/;
2523 if (varonce34) {
2524 var35 = varonce34;
2525 } else {
2526 var36 = "typedef struct nitni_instance *";
2527 var37 = 31;
2528 var38 = string__NativeString__to_s_with_length(var36, var37);
2529 var35 = var38;
2530 varonce34 = var35;
2531 }
2532 var39 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_base__MType__cname]))(self) /* cname on <self:MType>*/;
2533 if (varonce40) {
2534 var41 = varonce40;
2535 } else {
2536 var42 = ";\n";
2537 var43 = 2;
2538 var44 = string__NativeString__to_s_with_length(var42, var43);
2539 var41 = var44;
2540 varonce40 = var41;
2541 }
2542 var45 = NEW_array__Array(&type_array__Arraykernel__Object);
2543 { /* var45 = array_instance Array[Object] */
2544 var46 = 3;
2545 var47 = NEW_array__NativeArray(var46, &type_array__NativeArraykernel__Object);
2546 ((struct instance_array__NativeArray*)var47)->values[0] = (val*) var35;
2547 ((struct instance_array__NativeArray*)var47)->values[1] = (val*) var39;
2548 ((struct instance_array__NativeArray*)var47)->values[2] = (val*) var41;
2549 ((void (*)(val*, val*, long))(var45->class->vft[COLOR_array__Array__with_native]))(var45, var47, var46) /* with_native on <var45:Array[Object]>*/;
2550 }
2551 var48 = ((val* (*)(val*))(var45->class->vft[COLOR_string__Object__to_s]))(var45) /* to_s on <var45:Array[Object]>*/;
2552 ((void (*)(val*, val*))(var33->class->vft[COLOR_template__Template__add]))(var33, var48) /* add on <var33:Template>*/;
2553 var49 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_c_types]))(var_ccu) /* header_c_types on <var_ccu:CCompilationUnit>*/;
2554 if (varonce50) {
2555 var51 = varonce50;
2556 } else {
2557 var52 = "#endif\n";
2558 var53 = 7;
2559 var54 = string__NativeString__to_s_with_length(var52, var53);
2560 var51 = var54;
2561 varonce50 = var51;
2562 }
2563 ((void (*)(val*, val*))(var49->class->vft[COLOR_template__Template__add]))(var49, var51) /* add on <var49:Template>*/;
2564 RET_LABEL:;
2565 }
2566 /* method compiler_ffi#MType#compile_extern_type for (self: Object, AbstractCompilerVisitor, CCompilationUnit) */
2567 void VIRTUAL_compiler_ffi__MType__compile_extern_type(val* self, val* p0, val* p1) {
2568 compiler_ffi__MType__compile_extern_type(self, p0, p1);
2569 RET_LABEL:;
2570 }
2571 /* method compiler_ffi#MType#compile_extern_helper_functions for (self: MType, AbstractCompilerVisitor, CCompilationUnit) */
2572 void compiler_ffi__MType__compile_extern_helper_functions(val* self, val* p0, val* p1) {
2573 val* var_v /* var v: AbstractCompilerVisitor */;
2574 val* var_ccu /* var ccu: CCompilationUnit */;
2575 val* var /* : AbstractCompiler */;
2576 val* var1 /* : AbstractCompilerVisitor */;
2577 val* var_nitni_visitor /* var nitni_visitor: AbstractCompilerVisitor */;
2578 val* var2 /* : Template */;
2579 static val* varonce;
2580 val* var3 /* : String */;
2581 char* var4 /* : NativeString */;
2582 long var5 /* : Int */;
2583 val* var6 /* : String */;
2584 val* var7 /* : String */;
2585 static val* varonce8;
2586 val* var9 /* : String */;
2587 char* var10 /* : NativeString */;
2588 long var11 /* : Int */;
2589 val* var12 /* : String */;
2590 val* var13 /* : Array[Object] */;
2591 long var14 /* : Int */;
2592 val* var15 /* : NativeArray[Object] */;
2593 val* var16 /* : String */;
2594 val* var17 /* : AbstractCompiler */;
2595 val* var18 /* : AbstractCompilerVisitor */;
2596 val* var19 /* : Template */;
2597 static val* varonce20;
2598 val* var21 /* : String */;
2599 char* var22 /* : NativeString */;
2600 long var23 /* : Int */;
2601 val* var24 /* : String */;
2602 val* var25 /* : String */;
2603 static val* varonce26;
2604 val* var27 /* : String */;
2605 char* var28 /* : NativeString */;
2606 long var29 /* : Int */;
2607 val* var30 /* : String */;
2608 val* var31 /* : Array[Object] */;
2609 long var32 /* : Int */;
2610 val* var33 /* : NativeArray[Object] */;
2611 val* var34 /* : String */;
2612 var_v = p0;
2613 var_ccu = p1;
2614 var = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
2615 var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(var) /* new_visitor on <var:AbstractCompiler>*/;
2616 var_nitni_visitor = var1;
2617 var2 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
2618 if (varonce) {
2619 var3 = varonce;
2620 } else {
2621 var4 = "#define ";
2622 var5 = 8;
2623 var6 = string__NativeString__to_s_with_length(var4, var5);
2624 var3 = var6;
2625 varonce = var3;
2626 }
2627 var7 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_base__MType__mangled_cname]))(self) /* mangled_cname on <self:MType>*/;
2628 if (varonce8) {
2629 var9 = varonce8;
2630 } else {
2631 var10 = "_incr_ref(from) while(0){}\n";
2632 var11 = 27;
2633 var12 = string__NativeString__to_s_with_length(var10, var11);
2634 var9 = var12;
2635 varonce8 = var9;
2636 }
2637 var13 = NEW_array__Array(&type_array__Arraykernel__Object);
2638 { /* var13 = array_instance Array[Object] */
2639 var14 = 3;
2640 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraykernel__Object);
2641 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var3;
2642 ((struct instance_array__NativeArray*)var15)->values[1] = (val*) var7;
2643 ((struct instance_array__NativeArray*)var15)->values[2] = (val*) var9;
2644 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[Object]>*/;
2645 }
2646 var16 = ((val* (*)(val*))(var13->class->vft[COLOR_string__Object__to_s]))(var13) /* to_s on <var13:Array[Object]>*/;
2647 ((void (*)(val*, val*))(var2->class->vft[COLOR_template__Template__add]))(var2, var16) /* add on <var2:Template>*/;
2648 var17 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
2649 var18 = ((val* (*)(val*))(var17->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(var17) /* new_visitor on <var17:AbstractCompiler>*/;
2650 var_nitni_visitor = var18;
2651 var19 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
2652 if (varonce20) {
2653 var21 = varonce20;
2654 } else {
2655 var22 = "#define ";
2656 var23 = 8;
2657 var24 = string__NativeString__to_s_with_length(var22, var23);
2658 var21 = var24;
2659 varonce20 = var21;
2660 }
2661 var25 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_base__MType__mangled_cname]))(self) /* mangled_cname on <self:MType>*/;
2662 if (varonce26) {
2663 var27 = varonce26;
2664 } else {
2665 var28 = "_decr_ref(from) while(0){}\n";
2666 var29 = 27;
2667 var30 = string__NativeString__to_s_with_length(var28, var29);
2668 var27 = var30;
2669 varonce26 = var27;
2670 }
2671 var31 = NEW_array__Array(&type_array__Arraykernel__Object);
2672 { /* var31 = array_instance Array[Object] */
2673 var32 = 3;
2674 var33 = NEW_array__NativeArray(var32, &type_array__NativeArraykernel__Object);
2675 ((struct instance_array__NativeArray*)var33)->values[0] = (val*) var21;
2676 ((struct instance_array__NativeArray*)var33)->values[1] = (val*) var25;
2677 ((struct instance_array__NativeArray*)var33)->values[2] = (val*) var27;
2678 ((void (*)(val*, val*, long))(var31->class->vft[COLOR_array__Array__with_native]))(var31, var33, var32) /* with_native on <var31:Array[Object]>*/;
2679 }
2680 var34 = ((val* (*)(val*))(var31->class->vft[COLOR_string__Object__to_s]))(var31) /* to_s on <var31:Array[Object]>*/;
2681 ((void (*)(val*, val*))(var19->class->vft[COLOR_template__Template__add]))(var19, var34) /* add on <var19:Template>*/;
2682 RET_LABEL:;
2683 }
2684 /* method compiler_ffi#MType#compile_extern_helper_functions for (self: Object, AbstractCompilerVisitor, CCompilationUnit) */
2685 void VIRTUAL_compiler_ffi__MType__compile_extern_helper_functions(val* self, val* p0, val* p1) {
2686 compiler_ffi__MType__compile_extern_helper_functions(self, p0, p1);
2687 RET_LABEL:;
2688 }
2689 /* method compiler_ffi#MNullableType#compile_extern_helper_functions for (self: MNullableType, AbstractCompilerVisitor, CCompilationUnit) */
2690 void compiler_ffi__MNullableType__compile_extern_helper_functions(val* self, val* p0, val* p1) {
2691 val* var_v /* var v: AbstractCompilerVisitor */;
2692 val* var_ccu /* var ccu: CCompilationUnit */;
2693 val* var /* : Array[Object] */;
2694 long var1 /* : Int */;
2695 val* var_ /* var : Array[Object] */;
2696 static val* varonce;
2697 val* var2 /* : String */;
2698 char* var3 /* : NativeString */;
2699 long var4 /* : Int */;
2700 val* var5 /* : String */;
2701 val* var6 /* : String */;
2702 static val* varonce7;
2703 val* var8 /* : String */;
2704 char* var9 /* : NativeString */;
2705 long var10 /* : Int */;
2706 val* var11 /* : String */;
2707 val* var12 /* : AbstractCompiler */;
2708 val* var13 /* : MModule */;
2709 val* var14 /* : String */;
2710 static val* varonce15;
2711 val* var16 /* : String */;
2712 char* var17 /* : NativeString */;
2713 long var18 /* : Int */;
2714 val* var19 /* : String */;
2715 val* var20 /* : MType */;
2716 val* var21 /* : String */;
2717 static val* varonce22;
2718 val* var23 /* : String */;
2719 char* var24 /* : NativeString */;
2720 long var25 /* : Int */;
2721 val* var26 /* : String */;
2722 val* var27 /* : String */;
2723 val* var_full_friendly_csignature /* var full_friendly_csignature: String */;
2724 val* var28 /* : Template */;
2725 static val* varonce29;
2726 val* var30 /* : String */;
2727 char* var31 /* : NativeString */;
2728 long var32 /* : Int */;
2729 val* var33 /* : String */;
2730 static val* varonce34;
2731 val* var35 /* : String */;
2732 char* var36 /* : NativeString */;
2733 long var37 /* : Int */;
2734 val* var38 /* : String */;
2735 val* var39 /* : Array[Object] */;
2736 long var40 /* : Int */;
2737 val* var41 /* : NativeArray[Object] */;
2738 val* var42 /* : String */;
2739 val* var43 /* : Array[Object] */;
2740 long var44 /* : Int */;
2741 val* var_45 /* var : Array[Object] */;
2742 static val* varonce46;
2743 val* var47 /* : String */;
2744 char* var48 /* : NativeString */;
2745 long var49 /* : Int */;
2746 val* var50 /* : String */;
2747 val* var51 /* : MType */;
2748 val* var52 /* : String */;
2749 static val* varonce53;
2750 val* var54 /* : String */;
2751 char* var55 /* : NativeString */;
2752 long var56 /* : Int */;
2753 val* var57 /* : String */;
2754 val* var58 /* : String */;
2755 val* var_base_cname /* var base_cname: String */;
2756 val* var59 /* : Template */;
2757 static val* varonce60;
2758 val* var61 /* : String */;
2759 char* var62 /* : NativeString */;
2760 long var63 /* : Int */;
2761 val* var64 /* : String */;
2762 static val* varonce65;
2763 val* var66 /* : String */;
2764 char* var67 /* : NativeString */;
2765 long var68 /* : Int */;
2766 val* var69 /* : String */;
2767 val* var70 /* : AbstractCompiler */;
2768 val* var71 /* : MModule */;
2769 val* var72 /* : String */;
2770 static val* varonce73;
2771 val* var74 /* : String */;
2772 char* var75 /* : NativeString */;
2773 long var76 /* : Int */;
2774 val* var77 /* : String */;
2775 static val* varonce78;
2776 val* var79 /* : String */;
2777 char* var80 /* : NativeString */;
2778 long var81 /* : Int */;
2779 val* var82 /* : String */;
2780 val* var83 /* : Array[Object] */;
2781 long var84 /* : Int */;
2782 val* var85 /* : NativeArray[Object] */;
2783 val* var86 /* : String */;
2784 val* var87 /* : AbstractCompiler */;
2785 val* var88 /* : AbstractCompilerVisitor */;
2786 val* var_nitni_visitor /* var nitni_visitor: AbstractCompilerVisitor */;
2787 val* var89 /* : nullable Frame */;
2788 val* var90 /* : Array[Object] */;
2789 long var91 /* : Int */;
2790 val* var_92 /* var : Array[Object] */;
2791 static val* varonce93;
2792 val* var94 /* : String */;
2793 char* var95 /* : NativeString */;
2794 long var96 /* : Int */;
2795 val* var97 /* : String */;
2796 val* var98 /* : String */;
2797 static val* varonce99;
2798 val* var100 /* : String */;
2799 char* var101 /* : NativeString */;
2800 long var102 /* : Int */;
2801 val* var103 /* : String */;
2802 val* var104 /* : AbstractCompiler */;
2803 val* var105 /* : MModule */;
2804 val* var106 /* : String */;
2805 static val* varonce107;
2806 val* var108 /* : String */;
2807 char* var109 /* : NativeString */;
2808 long var110 /* : Int */;
2809 val* var111 /* : String */;
2810 val* var112 /* : MType */;
2811 val* var113 /* : String */;
2812 static val* varonce114;
2813 val* var115 /* : String */;
2814 char* var116 /* : NativeString */;
2815 long var117 /* : Int */;
2816 val* var118 /* : String */;
2817 val* var119 /* : String */;
2818 val* var_full_internal_csignature /* var full_internal_csignature: String */;
2819 static val* varonce120;
2820 val* var121 /* : String */;
2821 char* var122 /* : NativeString */;
2822 long var123 /* : Int */;
2823 val* var124 /* : String */;
2824 val* var125 /* : MType */;
2825 val* var126 /* : String */;
2826 val* var127 /* : Array[Object] */;
2827 long var128 /* : Int */;
2828 val* var129 /* : NativeArray[Object] */;
2829 val* var130 /* : String */;
2830 static val* varonce131;
2831 val* var132 /* : String */;
2832 char* var133 /* : NativeString */;
2833 long var134 /* : Int */;
2834 val* var135 /* : String */;
2835 val* var136 /* : MType */;
2836 val* var137 /* : String */;
2837 val* var138 /* : Array[Object] */;
2838 long var139 /* : Int */;
2839 val* var140 /* : NativeArray[Object] */;
2840 val* var141 /* : String */;
2841 static val* varonce142;
2842 val* var143 /* : String */;
2843 char* var144 /* : NativeString */;
2844 long var145 /* : Int */;
2845 val* var146 /* : String */;
2846 val* var147 /* : Array[Object] */;
2847 long var148 /* : Int */;
2848 val* var149 /* : NativeArray[Object] */;
2849 val* var150 /* : String */;
2850 static val* varonce151;
2851 val* var152 /* : String */;
2852 char* var153 /* : NativeString */;
2853 long var154 /* : Int */;
2854 val* var155 /* : String */;
2855 static val* varonce156;
2856 val* var157 /* : String */;
2857 char* var158 /* : NativeString */;
2858 long var159 /* : Int */;
2859 val* var160 /* : String */;
2860 static val* varonce161;
2861 val* var162 /* : String */;
2862 char* var163 /* : NativeString */;
2863 long var164 /* : Int */;
2864 val* var165 /* : String */;
2865 static val* varonce166;
2866 val* var167 /* : String */;
2867 char* var168 /* : NativeString */;
2868 long var169 /* : Int */;
2869 val* var170 /* : String */;
2870 static val* varonce171;
2871 val* var172 /* : String */;
2872 char* var173 /* : NativeString */;
2873 long var174 /* : Int */;
2874 val* var175 /* : String */;
2875 static val* varonce176;
2876 val* var177 /* : String */;
2877 char* var178 /* : NativeString */;
2878 long var179 /* : Int */;
2879 val* var180 /* : String */;
2880 var_v = p0;
2881 var_ccu = p1;
2882 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_compiler_ffi__MNullableType__compile_extern_helper_functions]))(self, p0, p1) /* compile_extern_helper_functions on <self:MNullableType>*/;
2883 var = NEW_array__Array(&type_array__Arraykernel__Object);
2884 var1 = 7;
2885 ((void (*)(val*, long))(var->class->vft[COLOR_array__Array__with_capacity]))(var, var1) /* with_capacity on <var:Array[Object]>*/;
2886 var_ = var;
2887 if (varonce) {
2888 var2 = varonce;
2889 } else {
2890 var3 = "";
2891 var4 = 0;
2892 var5 = string__NativeString__to_s_with_length(var3, var4);
2893 var2 = var5;
2894 varonce = var2;
2895 }
2896 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var2) /* add on <var_:Array[Object]>*/;
2897 var6 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_base__MType__cname]))(self) /* cname on <self:MNullableType>*/;
2898 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var6) /* add on <var_:Array[Object]>*/;
2899 if (varonce7) {
2900 var8 = varonce7;
2901 } else {
2902 var9 = " ";
2903 var10 = 1;
2904 var11 = string__NativeString__to_s_with_length(var9, var10);
2905 var8 = var11;
2906 varonce7 = var8;
2907 }
2908 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var8) /* add on <var_:Array[Object]>*/;
2909 var12 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
2910 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var12) /* mainmodule on <var12:AbstractCompiler>*/;
2911 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_mmodule__MModule__name]))(var13) /* name on <var13:MModule>*/;
2912 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var14) /* add on <var_:Array[Object]>*/;
2913 if (varonce15) {
2914 var16 = varonce15;
2915 } else {
2916 var17 = "___null_";
2917 var18 = 8;
2918 var19 = string__NativeString__to_s_with_length(var17, var18);
2919 var16 = var19;
2920 varonce15 = var16;
2921 }
2922 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var16) /* add on <var_:Array[Object]>*/;
2923 var20 = ((val* (*)(val*))(self->class->vft[COLOR_model__MNullableType__mtype]))(self) /* mtype on <self:MNullableType>*/;
2924 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var20) /* mangled_cname on <var20:MType>*/;
2925 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var21) /* add on <var_:Array[Object]>*/;
2926 if (varonce22) {
2927 var23 = varonce22;
2928 } else {
2929 var24 = "()";
2930 var25 = 2;
2931 var26 = string__NativeString__to_s_with_length(var24, var25);
2932 var23 = var26;
2933 varonce22 = var23;
2934 }
2935 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var23) /* add on <var_:Array[Object]>*/;
2936 var27 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
2937 var_full_friendly_csignature = var27;
2938 var28 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
2939 if (varonce29) {
2940 var30 = varonce29;
2941 } else {
2942 var31 = "extern ";
2943 var32 = 7;
2944 var33 = string__NativeString__to_s_with_length(var31, var32);
2945 var30 = var33;
2946 varonce29 = var30;
2947 }
2948 if (varonce34) {
2949 var35 = varonce34;
2950 } else {
2951 var36 = ";\n";
2952 var37 = 2;
2953 var38 = string__NativeString__to_s_with_length(var36, var37);
2954 var35 = var38;
2955 varonce34 = var35;
2956 }
2957 var39 = NEW_array__Array(&type_array__Arraykernel__Object);
2958 { /* var39 = array_instance Array[Object] */
2959 var40 = 3;
2960 var41 = NEW_array__NativeArray(var40, &type_array__NativeArraykernel__Object);
2961 ((struct instance_array__NativeArray*)var41)->values[0] = (val*) var30;
2962 ((struct instance_array__NativeArray*)var41)->values[1] = (val*) var_full_friendly_csignature;
2963 ((struct instance_array__NativeArray*)var41)->values[2] = (val*) var35;
2964 ((void (*)(val*, val*, long))(var39->class->vft[COLOR_array__Array__with_native]))(var39, var41, var40) /* with_native on <var39:Array[Object]>*/;
2965 }
2966 var42 = ((val* (*)(val*))(var39->class->vft[COLOR_string__Object__to_s]))(var39) /* to_s on <var39:Array[Object]>*/;
2967 ((void (*)(val*, val*))(var28->class->vft[COLOR_template__Template__add]))(var28, var42) /* add on <var28:Template>*/;
2968 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
2969 var44 = 3;
2970 ((void (*)(val*, long))(var43->class->vft[COLOR_array__Array__with_capacity]))(var43, var44) /* with_capacity on <var43:Array[Object]>*/;
2971 var_45 = var43;
2972 if (varonce46) {
2973 var47 = varonce46;
2974 } else {
2975 var48 = "null_";
2976 var49 = 5;
2977 var50 = string__NativeString__to_s_with_length(var48, var49);
2978 var47 = var50;
2979 varonce46 = var47;
2980 }
2981 ((void (*)(val*, val*))(var_45->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_45, var47) /* add on <var_45:Array[Object]>*/;
2982 var51 = ((val* (*)(val*))(self->class->vft[COLOR_model__MNullableType__mtype]))(self) /* mtype on <self:MNullableType>*/;
2983 var52 = ((val* (*)(val*))(var51->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var51) /* mangled_cname on <var51:MType>*/;
2984 ((void (*)(val*, val*))(var_45->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_45, var52) /* add on <var_45:Array[Object]>*/;
2985 if (varonce53) {
2986 var54 = varonce53;
2987 } else {
2988 var55 = "";
2989 var56 = 0;
2990 var57 = string__NativeString__to_s_with_length(var55, var56);
2991 var54 = var57;
2992 varonce53 = var54;
2993 }
2994 ((void (*)(val*, val*))(var_45->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_45, var54) /* add on <var_45:Array[Object]>*/;
2995 var58 = ((val* (*)(val*))(var_45->class->vft[COLOR_string__Object__to_s]))(var_45) /* to_s on <var_45:Array[Object]>*/;
2996 var_base_cname = var58;
2997 var59 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
2998 if (varonce60) {
2999 var61 = varonce60;
3000 } else {
3001 var62 = "#define ";
3002 var63 = 8;
3003 var64 = string__NativeString__to_s_with_length(var62, var63);
3004 var61 = var64;
3005 varonce60 = var61;
3006 }
3007 if (varonce65) {
3008 var66 = varonce65;
3009 } else {
3010 var67 = " ";
3011 var68 = 1;
3012 var69 = string__NativeString__to_s_with_length(var67, var68);
3013 var66 = var69;
3014 varonce65 = var66;
3015 }
3016 var70 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3017 var71 = ((val* (*)(val*))(var70->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var70) /* mainmodule on <var70:AbstractCompiler>*/;
3018 var72 = ((val* (*)(val*))(var71->class->vft[COLOR_mmodule__MModule__name]))(var71) /* name on <var71:MModule>*/;
3019 if (varonce73) {
3020 var74 = varonce73;
3021 } else {
3022 var75 = "___";
3023 var76 = 3;
3024 var77 = string__NativeString__to_s_with_length(var75, var76);
3025 var74 = var77;
3026 varonce73 = var74;
3027 }
3028 if (varonce78) {
3029 var79 = varonce78;
3030 } else {
3031 var80 = "\n";
3032 var81 = 1;
3033 var82 = string__NativeString__to_s_with_length(var80, var81);
3034 var79 = var82;
3035 varonce78 = var79;
3036 }
3037 var83 = NEW_array__Array(&type_array__Arraykernel__Object);
3038 { /* var83 = array_instance Array[Object] */
3039 var84 = 7;
3040 var85 = NEW_array__NativeArray(var84, &type_array__NativeArraykernel__Object);
3041 ((struct instance_array__NativeArray*)var85)->values[0] = (val*) var61;
3042 ((struct instance_array__NativeArray*)var85)->values[1] = (val*) var_base_cname;
3043 ((struct instance_array__NativeArray*)var85)->values[2] = (val*) var66;
3044 ((struct instance_array__NativeArray*)var85)->values[3] = (val*) var72;
3045 ((struct instance_array__NativeArray*)var85)->values[4] = (val*) var74;
3046 ((struct instance_array__NativeArray*)var85)->values[5] = (val*) var_base_cname;
3047 ((struct instance_array__NativeArray*)var85)->values[6] = (val*) var79;
3048 ((void (*)(val*, val*, long))(var83->class->vft[COLOR_array__Array__with_native]))(var83, var85, var84) /* with_native on <var83:Array[Object]>*/;
3049 }
3050 var86 = ((val* (*)(val*))(var83->class->vft[COLOR_string__Object__to_s]))(var83) /* to_s on <var83:Array[Object]>*/;
3051 ((void (*)(val*, val*))(var59->class->vft[COLOR_template__Template__add]))(var59, var86) /* add on <var59:Template>*/;
3052 var87 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3053 var88 = ((val* (*)(val*))(var87->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(var87) /* new_visitor on <var87:AbstractCompiler>*/;
3054 var_nitni_visitor = var88;
3055 var89 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(var_v) /* frame on <var_v:AbstractCompilerVisitor>*/;
3056 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame_61d]))(var_nitni_visitor, var89) /* frame= on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3057 var90 = NEW_array__Array(&type_array__Arraykernel__Object);
3058 var91 = 7;
3059 ((void (*)(val*, long))(var90->class->vft[COLOR_array__Array__with_capacity]))(var90, var91) /* with_capacity on <var90:Array[Object]>*/;
3060 var_92 = var90;
3061 if (varonce93) {
3062 var94 = varonce93;
3063 } else {
3064 var95 = "";
3065 var96 = 0;
3066 var97 = string__NativeString__to_s_with_length(var95, var96);
3067 var94 = var97;
3068 varonce93 = var94;
3069 }
3070 ((void (*)(val*, val*))(var_92->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_92, var94) /* add on <var_92:Array[Object]>*/;
3071 var98 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_base__MType__cname_blind]))(self) /* cname_blind on <self:MNullableType>*/;
3072 ((void (*)(val*, val*))(var_92->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_92, var98) /* add on <var_92:Array[Object]>*/;
3073 if (varonce99) {
3074 var100 = varonce99;
3075 } else {
3076 var101 = " ";
3077 var102 = 1;
3078 var103 = string__NativeString__to_s_with_length(var101, var102);
3079 var100 = var103;
3080 varonce99 = var100;
3081 }
3082 ((void (*)(val*, val*))(var_92->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_92, var100) /* add on <var_92:Array[Object]>*/;
3083 var104 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3084 var105 = ((val* (*)(val*))(var104->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var104) /* mainmodule on <var104:AbstractCompiler>*/;
3085 var106 = ((val* (*)(val*))(var105->class->vft[COLOR_mmodule__MModule__name]))(var105) /* name on <var105:MModule>*/;
3086 ((void (*)(val*, val*))(var_92->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_92, var106) /* add on <var_92:Array[Object]>*/;
3087 if (varonce107) {
3088 var108 = varonce107;
3089 } else {
3090 var109 = "___null_";
3091 var110 = 8;
3092 var111 = string__NativeString__to_s_with_length(var109, var110);
3093 var108 = var111;
3094 varonce107 = var108;
3095 }
3096 ((void (*)(val*, val*))(var_92->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_92, var108) /* add on <var_92:Array[Object]>*/;
3097 var112 = ((val* (*)(val*))(self->class->vft[COLOR_model__MNullableType__mtype]))(self) /* mtype on <self:MNullableType>*/;
3098 var113 = ((val* (*)(val*))(var112->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var112) /* mangled_cname on <var112:MType>*/;
3099 ((void (*)(val*, val*))(var_92->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_92, var113) /* add on <var_92:Array[Object]>*/;
3100 if (varonce114) {
3101 var115 = varonce114;
3102 } else {
3103 var116 = "()";
3104 var117 = 2;
3105 var118 = string__NativeString__to_s_with_length(var116, var117);
3106 var115 = var118;
3107 varonce114 = var115;
3108 }
3109 ((void (*)(val*, val*))(var_92->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_92, var115) /* add on <var_92:Array[Object]>*/;
3110 var119 = ((val* (*)(val*))(var_92->class->vft[COLOR_string__Object__to_s]))(var_92) /* to_s on <var_92:Array[Object]>*/;
3111 var_full_internal_csignature = var119;
3112 if (varonce120) {
3113 var121 = varonce120;
3114 } else {
3115 var122 = "#ifndef NIT_NULL_null_";
3116 var123 = 22;
3117 var124 = string__NativeString__to_s_with_length(var122, var123);
3118 var121 = var124;
3119 varonce120 = var121;
3120 }
3121 var125 = ((val* (*)(val*))(self->class->vft[COLOR_model__MNullableType__mtype]))(self) /* mtype on <self:MNullableType>*/;
3122 var126 = ((val* (*)(val*))(var125->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var125) /* mangled_cname on <var125:MType>*/;
3123 var127 = NEW_array__Array(&type_array__Arraykernel__Object);
3124 { /* var127 = array_instance Array[Object] */
3125 var128 = 2;
3126 var129 = NEW_array__NativeArray(var128, &type_array__NativeArraykernel__Object);
3127 ((struct instance_array__NativeArray*)var129)->values[0] = (val*) var121;
3128 ((struct instance_array__NativeArray*)var129)->values[1] = (val*) var126;
3129 ((void (*)(val*, val*, long))(var127->class->vft[COLOR_array__Array__with_native]))(var127, var129, var128) /* with_native on <var127:Array[Object]>*/;
3130 }
3131 var130 = ((val* (*)(val*))(var127->class->vft[COLOR_string__Object__to_s]))(var127) /* to_s on <var127:Array[Object]>*/;
3132 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var130) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3133 if (varonce131) {
3134 var132 = varonce131;
3135 } else {
3136 var133 = "#define NIT_NULL_null_";
3137 var134 = 22;
3138 var135 = string__NativeString__to_s_with_length(var133, var134);
3139 var132 = var135;
3140 varonce131 = var132;
3141 }
3142 var136 = ((val* (*)(val*))(self->class->vft[COLOR_model__MNullableType__mtype]))(self) /* mtype on <self:MNullableType>*/;
3143 var137 = ((val* (*)(val*))(var136->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var136) /* mangled_cname on <var136:MType>*/;
3144 var138 = NEW_array__Array(&type_array__Arraykernel__Object);
3145 { /* var138 = array_instance Array[Object] */
3146 var139 = 2;
3147 var140 = NEW_array__NativeArray(var139, &type_array__NativeArraykernel__Object);
3148 ((struct instance_array__NativeArray*)var140)->values[0] = (val*) var132;
3149 ((struct instance_array__NativeArray*)var140)->values[1] = (val*) var137;
3150 ((void (*)(val*, val*, long))(var138->class->vft[COLOR_array__Array__with_native]))(var138, var140, var139) /* with_native on <var138:Array[Object]>*/;
3151 }
3152 var141 = ((val* (*)(val*))(var138->class->vft[COLOR_string__Object__to_s]))(var138) /* to_s on <var138:Array[Object]>*/;
3153 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var141) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3154 if (varonce142) {
3155 var143 = varonce142;
3156 } else {
3157 var144 = " {";
3158 var145 = 2;
3159 var146 = string__NativeString__to_s_with_length(var144, var145);
3160 var143 = var146;
3161 varonce142 = var143;
3162 }
3163 var147 = NEW_array__Array(&type_array__Arraykernel__Object);
3164 { /* var147 = array_instance Array[Object] */
3165 var148 = 2;
3166 var149 = NEW_array__NativeArray(var148, &type_array__NativeArraykernel__Object);
3167 ((struct instance_array__NativeArray*)var149)->values[0] = (val*) var_full_internal_csignature;
3168 ((struct instance_array__NativeArray*)var149)->values[1] = (val*) var143;
3169 ((void (*)(val*, val*, long))(var147->class->vft[COLOR_array__Array__with_native]))(var147, var149, var148) /* with_native on <var147:Array[Object]>*/;
3170 }
3171 var150 = ((val* (*)(val*))(var147->class->vft[COLOR_string__Object__to_s]))(var147) /* to_s on <var147:Array[Object]>*/;
3172 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var150) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3173 if (varonce151) {
3174 var152 = varonce151;
3175 } else {
3176 var153 = "struct nitni_instance* ret_for_c;";
3177 var154 = 33;
3178 var155 = string__NativeString__to_s_with_length(var153, var154);
3179 var152 = var155;
3180 varonce151 = var152;
3181 }
3182 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var152) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3183 if (varonce156) {
3184 var157 = varonce156;
3185 } else {
3186 var158 = "ret_for_c = malloc(sizeof(struct nitni_instance));";
3187 var159 = 50;
3188 var160 = string__NativeString__to_s_with_length(var158, var159);
3189 var157 = var160;
3190 varonce156 = var157;
3191 }
3192 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var157) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3193 if (varonce161) {
3194 var162 = varonce161;
3195 } else {
3196 var163 = "ret_for_c->value = NULL;";
3197 var164 = 24;
3198 var165 = string__NativeString__to_s_with_length(var163, var164);
3199 var162 = var165;
3200 varonce161 = var162;
3201 }
3202 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var162) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3203 if (varonce166) {
3204 var167 = varonce166;
3205 } else {
3206 var168 = "return ret_for_c;";
3207 var169 = 17;
3208 var170 = string__NativeString__to_s_with_length(var168, var169);
3209 var167 = var170;
3210 varonce166 = var167;
3211 }
3212 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var167) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3213 if (varonce171) {
3214 var172 = varonce171;
3215 } else {
3216 var173 = "}";
3217 var174 = 1;
3218 var175 = string__NativeString__to_s_with_length(var173, var174);
3219 var172 = var175;
3220 varonce171 = var172;
3221 }
3222 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var172) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3223 if (varonce176) {
3224 var177 = varonce176;
3225 } else {
3226 var178 = "#endif";
3227 var179 = 6;
3228 var180 = string__NativeString__to_s_with_length(var178, var179);
3229 var177 = var180;
3230 varonce176 = var177;
3231 }
3232 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var177) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3233 RET_LABEL:;
3234 }
3235 /* method compiler_ffi#MNullableType#compile_extern_helper_functions for (self: Object, AbstractCompilerVisitor, CCompilationUnit) */
3236 void VIRTUAL_compiler_ffi__MNullableType__compile_extern_helper_functions(val* self, val* p0, val* p1) {
3237 compiler_ffi__MNullableType__compile_extern_helper_functions(self, p0, p1);
3238 RET_LABEL:;
3239 }
3240 /* method compiler_ffi#MExplicitCall#compile_extern_callback for (self: MExplicitCall, AbstractCompilerVisitor, CCompilationUnit) */
3241 void compiler_ffi__MExplicitCall__compile_extern_callback(val* self, val* p0, val* p1) {
3242 val* var_v /* var v: AbstractCompilerVisitor */;
3243 val* var_ccu /* var ccu: CCompilationUnit */;
3244 val* var /* : MProperty */;
3245 val* var_mproperty /* var mproperty: MProperty */;
3246 short int var1 /* : Bool */;
3247 int cltype;
3248 int idtype;
3249 val* var2 /* : MClassType */;
3250 val* var3 /* : AbstractCompiler */;
3251 val* var4 /* : MModule */;
3252 val* var5 /* : null */;
3253 val* var6 /* : SignatureLength */;
3254 val* var7 /* : CallContext */;
3255 val* var8 /* : String */;
3256 val* var_full_friendly_csignature /* var full_friendly_csignature: String */;
3257 val* var9 /* : Template */;
3258 static val* varonce;
3259 val* var10 /* : String */;
3260 char* var11 /* : NativeString */;
3261 long var12 /* : Int */;
3262 val* var13 /* : String */;
3263 static val* varonce14;
3264 val* var15 /* : String */;
3265 char* var16 /* : NativeString */;
3266 long var17 /* : Int */;
3267 val* var18 /* : String */;
3268 val* var19 /* : Array[Object] */;
3269 long var20 /* : Int */;
3270 val* var21 /* : NativeArray[Object] */;
3271 val* var22 /* : String */;
3272 val* var23 /* : AbstractCompiler */;
3273 val* var24 /* : AbstractCompilerVisitor */;
3274 val* var_nitni_visitor /* var nitni_visitor: AbstractCompilerVisitor */;
3275 val* var25 /* : nullable Frame */;
3276 val* var26 /* : AbstractCompiler */;
3277 val* var27 /* : MModule */;
3278 val* var28 /* : MClassType */;
3279 val* var29 /* : MPropDef */;
3280 val* var30 /* : nullable MSignature */;
3281 val* var_msignature /* var msignature: nullable MSignature */;
3282 val* var31 /* : MClassType */;
3283 val* var32 /* : AbstractCompiler */;
3284 val* var33 /* : MModule */;
3285 val* var34 /* : null */;
3286 val* var35 /* : SignatureLength */;
3287 val* var36 /* : CallContext */;
3288 val* var37 /* : String */;
3289 val* var_csignature_blind /* var csignature_blind: String */;
3290 static val* varonce38;
3291 val* var39 /* : String */;
3292 char* var40 /* : NativeString */;
3293 long var41 /* : Int */;
3294 val* var42 /* : String */;
3295 val* var43 /* : String */;
3296 static val* varonce44;
3297 val* var45 /* : String */;
3298 char* var46 /* : NativeString */;
3299 long var47 /* : Int */;
3300 val* var48 /* : String */;
3301 val* var49 /* : Array[Object] */;
3302 long var50 /* : Int */;
3303 val* var51 /* : NativeArray[Object] */;
3304 val* var52 /* : String */;
3305 static val* varonce53;
3306 val* var54 /* : String */;
3307 char* var55 /* : NativeString */;
3308 long var56 /* : Int */;
3309 val* var57 /* : String */;
3310 val* var58 /* : Array[Object] */;
3311 long var59 /* : Int */;
3312 val* var60 /* : NativeArray[Object] */;
3313 val* var61 /* : String */;
3314 val* var62 /* : Array[RuntimeVariable] */;
3315 val* var_vars /* var vars: Array[RuntimeVariable] */;
3316 val* var63 /* : MClassType */;
3317 val* var_mtype /* var mtype: MType */;
3318 val* var64 /* : null */;
3319 val* var_recv_var /* var recv_var: nullable Object */;
3320 short int var65 /* : Bool */;
3321 val* var66 /* : MClassType */;
3322 val* var67 /* : MClass */;
3323 val* var68 /* : MClassKind */;
3324 val* var69 /* : MClassKind */;
3325 short int var70 /* : Bool */;
3326 val* var71 /* : RuntimeVariable */;
3327 val* var72 /* : MClassType */;
3328 val* var_recv_mtype /* var recv_mtype: MClassType */;
3329 val* var73 /* : RuntimeVariable */;
3330 val* var74 /* : String */;
3331 static val* varonce75;
3332 val* var76 /* : String */;
3333 char* var77 /* : NativeString */;
3334 long var78 /* : Int */;
3335 val* var79 /* : String */;
3336 static val* varonce80;
3337 val* var81 /* : String */;
3338 char* var82 /* : NativeString */;
3339 long var83 /* : Int */;
3340 val* var84 /* : String */;
3341 val* var85 /* : Array[Object] */;
3342 long var86 /* : Int */;
3343 val* var87 /* : NativeArray[Object] */;
3344 val* var88 /* : String */;
3345 static val* varonce89;
3346 val* var90 /* : String */;
3347 char* var91 /* : NativeString */;
3348 long var92 /* : Int */;
3349 val* var93 /* : String */;
3350 static val* varonce94;
3351 val* var95 /* : String */;
3352 char* var96 /* : NativeString */;
3353 long var97 /* : Int */;
3354 val* var98 /* : String */;
3355 val* var99 /* : Array[Object] */;
3356 long var100 /* : Int */;
3357 val* var101 /* : NativeArray[Object] */;
3358 val* var102 /* : String */;
3359 val* var103 /* : AbstractCompiler */;
3360 val* var104 /* : MModule */;
3361 val* var105 /* : MClassType */;
3362 val* var106 /* : MType */;
3363 static val* varonce107;
3364 val* var108 /* : String */;
3365 char* var109 /* : NativeString */;
3366 long var110 /* : Int */;
3367 val* var111 /* : String */;
3368 val* var112 /* : RuntimeVariable */;
3369 val* var113 /* : Array[MParameter] */;
3370 val* var114 /* : Iterator[nullable Object] */;
3371 short int var115 /* : Bool */;
3372 val* var116 /* : nullable Object */;
3373 val* var_p /* var p: MParameter */;
3374 val* var117 /* : MType */;
3375 val* var118 /* : AbstractCompiler */;
3376 val* var119 /* : MModule */;
3377 val* var120 /* : MClassType */;
3378 val* var121 /* : MType */;
3379 val* var_arg_mtype /* var arg_mtype: MType */;
3380 val* var122 /* : String */;
3381 val* var123 /* : RuntimeVariable */;
3382 val* var_arg /* var arg: RuntimeVariable */;
3383 val* var124 /* : nullable RuntimeVariable */;
3384 val* var_ret_var /* var ret_var: nullable RuntimeVariable */;
3385 val* var125 /* : nullable MType */;
3386 val* var_return_mtype /* var return_mtype: nullable MType */;
3387 short int var126 /* : Bool */;
3388 val* var127 /* : MClassType */;
3389 val* var128 /* : MClass */;
3390 val* var129 /* : MClassKind */;
3391 val* var130 /* : MClassKind */;
3392 short int var131 /* : Bool */;
3393 val* var132 /* : MClassType */;
3394 val* var133 /* : null */;
3395 short int var134 /* : Bool */;
3396 val* var135 /* : null */;
3397 short int var136 /* : Bool */;
3398 val* var137 /* : AbstractCompiler */;
3399 val* var138 /* : MModule */;
3400 val* var139 /* : MClassType */;
3401 val* var140 /* : MType */;
3402 val* var141 /* : RuntimeVariable */;
3403 static val* varonce142;
3404 val* var143 /* : String */;
3405 char* var144 /* : NativeString */;
3406 long var145 /* : Int */;
3407 val* var146 /* : String */;
3408 var_v = p0;
3409 var_ccu = p1;
3410 var = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__mproperty]))(self) /* mproperty on <self:MExplicitCall>*/;
3411 var_mproperty = var;
3412 /* <var_mproperty:MProperty> isa MMethod */
3413 cltype = type_model__MMethod.color;
3414 idtype = type_model__MMethod.id;
3415 if(cltype >= var_mproperty->type->table_size) {
3416 var1 = 0;
3417 } else {
3418 var1 = var_mproperty->type->type_table[cltype] == idtype;
3419 }
3420 if (!var1) {
3421 fprintf(stderr, "Runtime error: %s", "Assert failed");
3422 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 336);
3423 show_backtrace(1);
3424 }
3425 var2 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3426 var3 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3427 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var3) /* mainmodule on <var3:AbstractCompiler>*/;
3428 var5 = NULL;
3429 var6 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:MExplicitCall>*/;
3430 var7 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__internal_call_context]))(self) /* internal_call_context on <self:MExplicitCall>*/;
3431 var8 = ((val* (*)(val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_csignature]))(var_mproperty, var2, var4, var5, var6, var7) /* build_csignature on <var_mproperty:MProperty(MMethod)>*/;
3432 var_full_friendly_csignature = var8;
3433 var9 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
3434 if (varonce) {
3435 var10 = varonce;
3436 } else {
3437 var11 = "extern ";
3438 var12 = 7;
3439 var13 = string__NativeString__to_s_with_length(var11, var12);
3440 var10 = var13;
3441 varonce = var10;
3442 }
3443 if (varonce14) {
3444 var15 = varonce14;
3445 } else {
3446 var16 = ";\n";
3447 var17 = 2;
3448 var18 = string__NativeString__to_s_with_length(var16, var17);
3449 var15 = var18;
3450 varonce14 = var15;
3451 }
3452 var19 = NEW_array__Array(&type_array__Arraykernel__Object);
3453 { /* var19 = array_instance Array[Object] */
3454 var20 = 3;
3455 var21 = NEW_array__NativeArray(var20, &type_array__NativeArraykernel__Object);
3456 ((struct instance_array__NativeArray*)var21)->values[0] = (val*) var10;
3457 ((struct instance_array__NativeArray*)var21)->values[1] = (val*) var_full_friendly_csignature;
3458 ((struct instance_array__NativeArray*)var21)->values[2] = (val*) var15;
3459 ((void (*)(val*, val*, long))(var19->class->vft[COLOR_array__Array__with_native]))(var19, var21, var20) /* with_native on <var19:Array[Object]>*/;
3460 }
3461 var22 = ((val* (*)(val*))(var19->class->vft[COLOR_string__Object__to_s]))(var19) /* to_s on <var19:Array[Object]>*/;
3462 ((void (*)(val*, val*))(var9->class->vft[COLOR_template__Template__add]))(var9, var22) /* add on <var9:Template>*/;
3463 var23 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3464 var24 = ((val* (*)(val*))(var23->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(var23) /* new_visitor on <var23:AbstractCompiler>*/;
3465 var_nitni_visitor = var24;
3466 var25 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(var_v) /* frame on <var_v:AbstractCompilerVisitor>*/;
3467 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame_61d]))(var_nitni_visitor, var25) /* frame= on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3468 var26 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3469 var27 = ((val* (*)(val*))(var26->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var26) /* mainmodule on <var26:AbstractCompiler>*/;
3470 var28 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3471 var29 = ((val* (*)(val*, val*, val*))(var_mproperty->class->vft[COLOR_model__MProperty__lookup_first_definition]))(var_mproperty, var27, var28) /* lookup_first_definition on <var_mproperty:MProperty(MMethod)>*/;
3472 var30 = ((val* (*)(val*))(var29->class->vft[COLOR_model__MMethodDef__msignature]))(var29) /* msignature on <var29:MPropDef(MMethodDef)>*/;
3473 var_msignature = var30;
3474 var31 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3475 var32 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3476 var33 = ((val* (*)(val*))(var32->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var32) /* mainmodule on <var32:AbstractCompiler>*/;
3477 var34 = NULL;
3478 var35 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:MExplicitCall>*/;
3479 var36 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__internal_call_context]))(self) /* internal_call_context on <self:MExplicitCall>*/;
3480 var37 = ((val* (*)(val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_csignature]))(var_mproperty, var31, var33, var34, var35, var36) /* build_csignature on <var_mproperty:MProperty(MMethod)>*/;
3481 var_csignature_blind = var37;
3482 if (varonce38) {
3483 var39 = varonce38;
3484 } else {
3485 var40 = "/* nitni callback for ";
3486 var41 = 22;
3487 var42 = string__NativeString__to_s_with_length(var40, var41);
3488 var39 = var42;
3489 varonce38 = var39;
3490 }
3491 var43 = ((val* (*)(val*))(var_mproperty->class->vft[COLOR_model__MProperty__full_name]))(var_mproperty) /* full_name on <var_mproperty:MProperty(MMethod)>*/;
3492 if (varonce44) {
3493 var45 = varonce44;
3494 } else {
3495 var46 = " */";
3496 var47 = 3;
3497 var48 = string__NativeString__to_s_with_length(var46, var47);
3498 var45 = var48;
3499 varonce44 = var45;
3500 }
3501 var49 = NEW_array__Array(&type_array__Arraykernel__Object);
3502 { /* var49 = array_instance Array[Object] */
3503 var50 = 3;
3504 var51 = NEW_array__NativeArray(var50, &type_array__NativeArraykernel__Object);
3505 ((struct instance_array__NativeArray*)var51)->values[0] = (val*) var39;
3506 ((struct instance_array__NativeArray*)var51)->values[1] = (val*) var43;
3507 ((struct instance_array__NativeArray*)var51)->values[2] = (val*) var45;
3508 ((void (*)(val*, val*, long))(var49->class->vft[COLOR_array__Array__with_native]))(var49, var51, var50) /* with_native on <var49:Array[Object]>*/;
3509 }
3510 var52 = ((val* (*)(val*))(var49->class->vft[COLOR_string__Object__to_s]))(var49) /* to_s on <var49:Array[Object]>*/;
3511 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_nitni_visitor, var52) /* add_decl on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3512 if (varonce53) {
3513 var54 = varonce53;
3514 } else {
3515 var55 = " {";
3516 var56 = 2;
3517 var57 = string__NativeString__to_s_with_length(var55, var56);
3518 var54 = var57;
3519 varonce53 = var54;
3520 }
3521 var58 = NEW_array__Array(&type_array__Arraykernel__Object);
3522 { /* var58 = array_instance Array[Object] */
3523 var59 = 2;
3524 var60 = NEW_array__NativeArray(var59, &type_array__NativeArraykernel__Object);
3525 ((struct instance_array__NativeArray*)var60)->values[0] = (val*) var_csignature_blind;
3526 ((struct instance_array__NativeArray*)var60)->values[1] = (val*) var54;
3527 ((void (*)(val*, val*, long))(var58->class->vft[COLOR_array__Array__with_native]))(var58, var60, var59) /* with_native on <var58:Array[Object]>*/;
3528 }
3529 var61 = ((val* (*)(val*))(var58->class->vft[COLOR_string__Object__to_s]))(var58) /* to_s on <var58:Array[Object]>*/;
3530 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_nitni_visitor, var61) /* add_decl on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3531 var62 = NEW_array__Array(&type_array__Arrayabstract_compiler__RuntimeVariable);
3532 ((void (*)(val*))(var62->class->vft[COLOR_array__Array__init]))(var62) /* init on <var62:Array[RuntimeVariable]>*/;
3533 var_vars = var62;
3534 var63 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3535 var_mtype = var63;
3536 var64 = NULL;
3537 var_recv_var = var64;
3538 var65 = ((short int (*)(val*))(var_mproperty->class->vft[COLOR_model__MMethod__is_init]))(var_mproperty) /* is_init on <var_mproperty:MProperty(MMethod)>*/;
3539 if (var65){
3540 var66 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3541 var67 = ((val* (*)(val*))(var66->class->vft[COLOR_model__MClassType__mclass]))(var66) /* mclass on <var66:MClassType>*/;
3542 var68 = ((val* (*)(val*))(var67->class->vft[COLOR_model__MClass__kind]))(var67) /* kind on <var67:MClass>*/;
3543 var69 = ((val* (*)(val*))(self->class->vft[COLOR_model__Object__extern_kind]))(self) /* extern_kind on <self:MExplicitCall>*/;
3544 var70 = ((short int (*)(val*, val*))(var68->class->vft[COLOR_kernel__Object___61d_61d]))(var68, var69) /* == on <var68:MClassKind>*/;
3545 if (var70){
3546 var71 = ((val* (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(var_nitni_visitor, var_mtype) /* new_var on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3547 var_recv_var = var71;
3548 } else {
3549 var72 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3550 var_recv_mtype = var72;
3551 var73 = ((val* (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init_instance]))(var_nitni_visitor, var_recv_mtype) /* init_instance on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3552 var_recv_var = var73;
3553 var74 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MType>*/;
3554 if (varonce75) {
3555 var76 = varonce75;
3556 } else {
3557 var77 = " recv /* var self: ";
3558 var78 = 19;
3559 var79 = string__NativeString__to_s_with_length(var77, var78);
3560 var76 = var79;
3561 varonce75 = var76;
3562 }
3563 if (varonce80) {
3564 var81 = varonce80;
3565 } else {
3566 var82 = " */;";
3567 var83 = 4;
3568 var84 = string__NativeString__to_s_with_length(var82, var83);
3569 var81 = var84;
3570 varonce80 = var81;
3571 }
3572 var85 = NEW_array__Array(&type_array__Arraykernel__Object);
3573 { /* var85 = array_instance Array[Object] */
3574 var86 = 4;
3575 var87 = NEW_array__NativeArray(var86, &type_array__NativeArraykernel__Object);
3576 ((struct instance_array__NativeArray*)var87)->values[0] = (val*) var74;
3577 ((struct instance_array__NativeArray*)var87)->values[1] = (val*) var76;
3578 ((struct instance_array__NativeArray*)var87)->values[2] = (val*) var_mtype;
3579 ((struct instance_array__NativeArray*)var87)->values[3] = (val*) var81;
3580 ((void (*)(val*, val*, long))(var85->class->vft[COLOR_array__Array__with_native]))(var85, var87, var86) /* with_native on <var85:Array[Object]>*/;
3581 }
3582 var88 = ((val* (*)(val*))(var85->class->vft[COLOR_string__Object__to_s]))(var85) /* to_s on <var85:Array[Object]>*/;
3583 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var88) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3584 if (varonce89) {
3585 var90 = varonce89;
3586 } else {
3587 var91 = "recv = ";
3588 var92 = 7;
3589 var93 = string__NativeString__to_s_with_length(var91, var92);
3590 var90 = var93;
3591 varonce89 = var90;
3592 }
3593 if (varonce94) {
3594 var95 = varonce94;
3595 } else {
3596 var96 = ";";
3597 var97 = 1;
3598 var98 = string__NativeString__to_s_with_length(var96, var97);
3599 var95 = var98;
3600 varonce94 = var95;
3601 }
3602 var99 = NEW_array__Array(&type_array__Arraykernel__Object);
3603 { /* var99 = array_instance Array[Object] */
3604 var100 = 3;
3605 var101 = NEW_array__NativeArray(var100, &type_array__NativeArraykernel__Object);
3606 ((struct instance_array__NativeArray*)var101)->values[0] = (val*) var90;
3607 ((struct instance_array__NativeArray*)var101)->values[1] = (val*) var_recv_var;
3608 ((struct instance_array__NativeArray*)var101)->values[2] = (val*) var95;
3609 ((void (*)(val*, val*, long))(var99->class->vft[COLOR_array__Array__with_native]))(var99, var101, var100) /* with_native on <var99:Array[Object]>*/;
3610 }
3611 var102 = ((val* (*)(val*))(var99->class->vft[COLOR_string__Object__to_s]))(var99) /* to_s on <var99:Array[Object]>*/;
3612 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var102) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3613 }
3614 } else {
3615 var103 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3616 var104 = ((val* (*)(val*))(var103->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var103) /* mainmodule on <var103:AbstractCompiler>*/;
3617 var105 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3618 var106 = ((val* (*)(val*, val*, val*))(var_mtype->class->vft[COLOR_model__MType__anchor_to]))(var_mtype, var104, var105) /* anchor_to on <var_mtype:MType>*/;
3619 var_mtype = var106;
3620 if (varonce107) {
3621 var108 = varonce107;
3622 } else {
3623 var109 = "recv";
3624 var110 = 4;
3625 var111 = string__NativeString__to_s_with_length(var109, var110);
3626 var108 = var111;
3627 varonce107 = var108;
3628 }
3629 var112 = ((val* (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_compiler_ffi__AbstractCompilerVisitor__var_from_c]))(var_nitni_visitor, var108, var_mtype) /* var_from_c on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3630 var_recv_var = var112;
3631 }
3632 ((void (*)(val*, val*))(var_vars->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_vars, var_recv_var) /* add on <var_vars:Array[RuntimeVariable]>*/;
3633 if (var_msignature == NULL) {
3634 fprintf(stderr, "Runtime error: %s", "Receiver is null");
3635 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 370);
3636 show_backtrace(1);
3637 } else {
3638 var113 = ((val* (*)(val*))(var_msignature->class->vft[COLOR_model__MSignature__mparameters]))(var_msignature) /* mparameters on <var_msignature:nullable MSignature>*/;
3639 }
3640 var114 = ((val* (*)(val*))(var113->class->vft[COLOR_abstract_collection__Collection__iterator]))(var113) /* iterator on <var113:Array[MParameter]>*/;
3641 for(;;) {
3642 var115 = ((short int (*)(val*))(var114->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var114) /* is_ok on <var114:Iterator[nullable Object]>*/;
3643 if(!var115) break;
3644 var116 = ((val* (*)(val*))(var114->class->vft[COLOR_abstract_collection__Iterator__item]))(var114) /* item on <var114:Iterator[nullable Object]>*/;
3645 var_p = var116;
3646 var117 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MParameter__mtype]))(var_p) /* mtype on <var_p:MParameter>*/;
3647 var118 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3648 var119 = ((val* (*)(val*))(var118->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var118) /* mainmodule on <var118:AbstractCompiler>*/;
3649 var120 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3650 var121 = ((val* (*)(val*, val*, val*))(var117->class->vft[COLOR_model__MType__anchor_to]))(var117, var119, var120) /* anchor_to on <var117:MType>*/;
3651 var_arg_mtype = var121;
3652 var122 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MParameter__name]))(var_p) /* name on <var_p:MParameter>*/;
3653 var123 = ((val* (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_compiler_ffi__AbstractCompilerVisitor__var_from_c]))(var_nitni_visitor, var122, var_arg_mtype) /* var_from_c on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3654 var_arg = var123;
3655 ((void (*)(val*, val*))(var_vars->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_vars, var_arg) /* add on <var_vars:Array[RuntimeVariable]>*/;
3656 CONTINUE_label: (void)0;
3657 ((void (*)(val*))(var114->class->vft[COLOR_abstract_collection__Iterator__next]))(var114) /* next on <var114:Iterator[nullable Object]>*/;
3658 }
3659 BREAK_label: (void)0;
3660 var124 = ((val* (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__send]))(var_nitni_visitor, var_mproperty, var_vars) /* send on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3661 var_ret_var = var124;
3662 if (var_msignature == NULL) {
3663 fprintf(stderr, "Runtime error: %s", "Receiver is null");
3664 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 378);
3665 show_backtrace(1);
3666 } else {
3667 var125 = ((val* (*)(val*))(var_msignature->class->vft[COLOR_model__MSignature__return_mtype]))(var_msignature) /* return_mtype on <var_msignature:nullable MSignature>*/;
3668 }
3669 var_return_mtype = var125;
3670 var126 = ((short int (*)(val*))(var_mproperty->class->vft[COLOR_model__MMethod__is_init]))(var_mproperty) /* is_init on <var_mproperty:MProperty(MMethod)>*/;
3671 if (var126){
3672 var127 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3673 var128 = ((val* (*)(val*))(var127->class->vft[COLOR_model__MClassType__mclass]))(var127) /* mclass on <var127:MClassType>*/;
3674 var129 = ((val* (*)(val*))(var128->class->vft[COLOR_model__MClass__kind]))(var128) /* kind on <var128:MClass>*/;
3675 var130 = ((val* (*)(val*))(self->class->vft[COLOR_model__Object__extern_kind]))(self) /* extern_kind on <self:MExplicitCall>*/;
3676 var131 = ((short int (*)(val*, val*))(var129->class->vft[COLOR_kernel__Object___33d_61d]))(var129, var130) /* != on <var129:MClassKind>*/;
3677 if (var131){
3678 var_ret_var = var_recv_var;
3679 } else {
3680 }
3681 var132 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3682 var_return_mtype = var132;
3683 } else {
3684 }
3685 var133 = NULL;
3686 if (var_return_mtype == NULL) {
3687 var134 = 0; /* is null */
3688 } else {
3689 var134 = 1; /* arg is null and recv is not */
3690 }
3691 if (var134){
3692 var135 = NULL;
3693 if (var_ret_var == NULL) {
3694 var136 = 0; /* is null */
3695 } else {
3696 var136 = 1; /* arg is null and recv is not */
3697 }
3698 if (!var136) {
3699 fprintf(stderr, "Runtime error: %s", "Assert failed");
3700 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 384);
3701 show_backtrace(1);
3702 }
3703 var137 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3704 var138 = ((val* (*)(val*))(var137->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var137) /* mainmodule on <var137:AbstractCompiler>*/;
3705 var139 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCall__recv_mtype]))(self) /* recv_mtype on <self:MExplicitCall>*/;
3706 var140 = ((val* (*)(val*, val*, val*))(var_return_mtype->class->vft[COLOR_model__MType__anchor_to]))(var_return_mtype, var138, var139) /* anchor_to on <var_return_mtype:nullable MType(MType)>*/;
3707 var_return_mtype = var140;
3708 var141 = ((val* (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(var_nitni_visitor, var_ret_var, var_return_mtype) /* autobox on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3709 var_ret_var = var141;
3710 ((void (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_compiler_ffi__AbstractCompilerVisitor__ret_to_c]))(var_nitni_visitor, var_ret_var, var_return_mtype) /* ret_to_c on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3711 } else {
3712 }
3713 if (varonce142) {
3714 var143 = varonce142;
3715 } else {
3716 var144 = "}";
3717 var145 = 1;
3718 var146 = string__NativeString__to_s_with_length(var144, var145);
3719 var143 = var146;
3720 varonce142 = var143;
3721 }
3722 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var143) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
3723 RET_LABEL:;
3724 }
3725 /* method compiler_ffi#MExplicitCall#compile_extern_callback for (self: Object, AbstractCompilerVisitor, CCompilationUnit) */
3726 void VIRTUAL_compiler_ffi__MExplicitCall__compile_extern_callback(val* self, val* p0, val* p1) {
3727 compiler_ffi__MExplicitCall__compile_extern_callback(self, p0, p1);
3728 RET_LABEL:;
3729 }
3730 /* method compiler_ffi#MExplicitSuper#compile_extern_callback for (self: MExplicitSuper, AbstractCompilerVisitor, CCompilationUnit) */
3731 void compiler_ffi__MExplicitSuper__compile_extern_callback(val* self, val* p0, val* p1) {
3732 val* var_v /* var v: AbstractCompilerVisitor */;
3733 val* var_ccu /* var ccu: CCompilationUnit */;
3734 val* var /* : MPropDef */;
3735 val* var1 /* : MProperty */;
3736 val* var_mproperty /* var mproperty: MProperty */;
3737 short int var2 /* : Bool */;
3738 int cltype;
3739 int idtype;
3740 val* var3 /* : MPropDef */;
3741 val* var4 /* : MClassDef */;
3742 val* var5 /* : MClass */;
3743 val* var6 /* : MClassType */;
3744 val* var_mclass_type /* var mclass_type: MClassType */;
3745 val* var7 /* : MPropDef */;
3746 val* var8 /* : MClassDef */;
3747 val* var9 /* : MModule */;
3748 val* var_mmodule /* var mmodule: MModule */;
3749 val* var10 /* : AbstractCompiler */;
3750 val* var11 /* : MModule */;
3751 static val* varonce;
3752 val* var12 /* : String */;
3753 char* var13 /* : NativeString */;
3754 long var14 /* : Int */;
3755 val* var15 /* : String */;
3756 val* var16 /* : SignatureLength */;
3757 val* var17 /* : CallContext */;
3758 val* var18 /* : String */;
3759 val* var_internal_csignature /* var internal_csignature: String */;
3760 val* var19 /* : Template */;
3761 static val* varonce20;
3762 val* var21 /* : String */;
3763 char* var22 /* : NativeString */;
3764 long var23 /* : Int */;
3765 val* var24 /* : String */;
3766 static val* varonce25;
3767 val* var26 /* : String */;
3768 char* var27 /* : NativeString */;
3769 long var28 /* : Int */;
3770 val* var29 /* : String */;
3771 val* var30 /* : Array[Object] */;
3772 long var31 /* : Int */;
3773 val* var32 /* : NativeArray[Object] */;
3774 val* var33 /* : String */;
3775 val* var34 /* : AbstractCompiler */;
3776 val* var35 /* : MModule */;
3777 static val* varonce36;
3778 val* var37 /* : String */;
3779 char* var38 /* : NativeString */;
3780 long var39 /* : Int */;
3781 val* var40 /* : String */;
3782 val* var41 /* : SignatureLength */;
3783 val* var42 /* : String */;
3784 val* var_friendly_cname /* var friendly_cname: String */;
3785 val* var43 /* : AbstractCompiler */;
3786 val* var44 /* : MModule */;
3787 static val* varonce45;
3788 val* var46 /* : String */;
3789 char* var47 /* : NativeString */;
3790 long var48 /* : Int */;
3791 val* var49 /* : String */;
3792 val* var50 /* : SignatureLength */;
3793 val* var51 /* : String */;
3794 val* var_internal_cname /* var internal_cname: String */;
3795 val* var52 /* : Template */;
3796 static val* varonce53;
3797 val* var54 /* : String */;
3798 char* var55 /* : NativeString */;
3799 long var56 /* : Int */;
3800 val* var57 /* : String */;
3801 static val* varonce58;
3802 val* var59 /* : String */;
3803 char* var60 /* : NativeString */;
3804 long var61 /* : Int */;
3805 val* var62 /* : String */;
3806 static val* varonce63;
3807 val* var64 /* : String */;
3808 char* var65 /* : NativeString */;
3809 long var66 /* : Int */;
3810 val* var67 /* : String */;
3811 val* var68 /* : Array[Object] */;
3812 long var69 /* : Int */;
3813 val* var70 /* : NativeArray[Object] */;
3814 val* var71 /* : String */;
3815 val* var72 /* : AbstractCompiler */;
3816 val* var73 /* : AbstractCompilerVisitor */;
3817 val* var_nitni_visitor /* var nitni_visitor: AbstractCompilerVisitor */;
3818 val* var74 /* : nullable Frame */;
3819 val* var75 /* : AbstractCompiler */;
3820 val* var76 /* : MModule */;
3821 val* var77 /* : MPropDef */;
3822 val* var78 /* : nullable MSignature */;
3823 val* var_msignature /* var msignature: nullable MSignature */;
3824 val* var79 /* : AbstractCompiler */;
3825 val* var80 /* : MModule */;
3826 static val* varonce81;
3827 val* var82 /* : String */;
3828 char* var83 /* : NativeString */;
3829 long var84 /* : Int */;
3830 val* var85 /* : String */;
3831 val* var86 /* : SignatureLength */;
3832 val* var87 /* : CallContext */;
3833 val* var88 /* : String */;
3834 val* var_csignature_blind /* var csignature_blind: String */;
3835 static val* varonce89;
3836 val* var90 /* : String */;
3837 char* var91 /* : NativeString */;
3838 long var92 /* : Int */;
3839 val* var93 /* : String */;
3840 val* var94 /* : String */;
3841 static val* varonce95;
3842 val* var96 /* : String */;
3843 char* var97 /* : NativeString */;
3844 long var98 /* : Int */;
3845 val* var99 /* : String */;
3846 val* var100 /* : Array[Object] */;
3847 long var101 /* : Int */;
3848 val* var102 /* : NativeArray[Object] */;
3849 val* var103 /* : String */;
3850 static val* varonce104;
3851 val* var105 /* : String */;
3852 char* var106 /* : NativeString */;
3853 long var107 /* : Int */;
3854 val* var108 /* : String */;
3855 val* var109 /* : Array[Object] */;
3856 long var110 /* : Int */;
3857 val* var111 /* : NativeArray[Object] */;
3858 val* var112 /* : String */;
3859 val* var113 /* : Array[RuntimeVariable] */;
3860 val* var_vars /* var vars: Array[RuntimeVariable] */;
3861 static val* varonce114;
3862 val* var115 /* : String */;
3863 char* var116 /* : NativeString */;
3864 long var117 /* : Int */;
3865 val* var118 /* : String */;
3866 val* var119 /* : RuntimeVariable */;
3867 val* var_recv_var /* var recv_var: RuntimeVariable */;
3868 val* var120 /* : Array[MParameter] */;
3869 val* var121 /* : Iterator[nullable Object] */;
3870 short int var122 /* : Bool */;
3871 val* var123 /* : nullable Object */;
3872 val* var_p /* var p: MParameter */;
3873 val* var124 /* : MType */;
3874 val* var125 /* : MType */;
3875 val* var_arg_mtype /* var arg_mtype: MType */;
3876 val* var126 /* : String */;
3877 val* var127 /* : RuntimeVariable */;
3878 val* var_arg /* var arg: RuntimeVariable */;
3879 val* var128 /* : MPropDef */;
3880 short int var129 /* : Bool */;
3881 int cltype130;
3882 int idtype131;
3883 const char* var_class_name;
3884 val* var132 /* : nullable RuntimeVariable */;
3885 val* var_ret_var /* var ret_var: nullable RuntimeVariable */;
3886 val* var133 /* : nullable MType */;
3887 val* var_return_mtype /* var return_mtype: nullable MType */;
3888 val* var134 /* : null */;
3889 short int var135 /* : Bool */;
3890 val* var136 /* : null */;
3891 short int var137 /* : Bool */;
3892 val* var138 /* : MType */;
3893 static val* varonce139;
3894 val* var140 /* : String */;
3895 char* var141 /* : NativeString */;
3896 long var142 /* : Int */;
3897 val* var143 /* : String */;
3898 var_v = p0;
3899 var_ccu = p1;
3900 var = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitSuper__from]))(self) /* from on <self:MExplicitSuper>*/;
3901 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model__MPropDef__mproperty]))(var) /* mproperty on <var:MPropDef>*/;
3902 var_mproperty = var1;
3903 /* <var_mproperty:MProperty> isa MMethod */
3904 cltype = type_model__MMethod.color;
3905 idtype = type_model__MMethod.id;
3906 if(cltype >= var_mproperty->type->table_size) {
3907 var2 = 0;
3908 } else {
3909 var2 = var_mproperty->type->type_table[cltype] == idtype;
3910 }
3911 if (!var2) {
3912 fprintf(stderr, "Runtime error: %s", "Assert failed");
3913 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 397);
3914 show_backtrace(1);
3915 }
3916 var3 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitSuper__from]))(self) /* from on <self:MExplicitSuper>*/;
3917 var4 = ((val* (*)(val*))(var3->class->vft[COLOR_model__MPropDef__mclassdef]))(var3) /* mclassdef on <var3:MPropDef>*/;
3918 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_model__MClassDef__mclass]))(var4) /* mclass on <var4:MClassDef>*/;
3919 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_model__MClass__mclass_type]))(var5) /* mclass_type on <var5:MClass>*/;
3920 var_mclass_type = var6;
3921 var7 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitSuper__from]))(self) /* from on <self:MExplicitSuper>*/;
3922 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_model__MPropDef__mclassdef]))(var7) /* mclassdef on <var7:MPropDef>*/;
3923 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_model__MClassDef__mmodule]))(var8) /* mmodule on <var8:MClassDef>*/;
3924 var_mmodule = var9;
3925 var10 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3926 var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var10) /* mainmodule on <var10:AbstractCompiler>*/;
3927 if (varonce) {
3928 var12 = varonce;
3929 } else {
3930 var13 = "___super";
3931 var14 = 8;
3932 var15 = string__NativeString__to_s_with_length(var13, var14);
3933 var12 = var15;
3934 varonce = var12;
3935 }
3936 var16 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:MExplicitSuper>*/;
3937 var17 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__internal_call_context]))(self) /* internal_call_context on <self:MExplicitSuper>*/;
3938 var18 = ((val* (*)(val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_csignature]))(var_mproperty, var_mclass_type, var11, var12, var16, var17) /* build_csignature on <var_mproperty:MProperty(MMethod)>*/;
3939 var_internal_csignature = var18;
3940 var19 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
3941 if (varonce20) {
3942 var21 = varonce20;
3943 } else {
3944 var22 = "extern ";
3945 var23 = 7;
3946 var24 = string__NativeString__to_s_with_length(var22, var23);
3947 var21 = var24;
3948 varonce20 = var21;
3949 }
3950 if (varonce25) {
3951 var26 = varonce25;
3952 } else {
3953 var27 = ";\n";
3954 var28 = 2;
3955 var29 = string__NativeString__to_s_with_length(var27, var28);
3956 var26 = var29;
3957 varonce25 = var26;
3958 }
3959 var30 = NEW_array__Array(&type_array__Arraykernel__Object);
3960 { /* var30 = array_instance Array[Object] */
3961 var31 = 3;
3962 var32 = NEW_array__NativeArray(var31, &type_array__NativeArraykernel__Object);
3963 ((struct instance_array__NativeArray*)var32)->values[0] = (val*) var21;
3964 ((struct instance_array__NativeArray*)var32)->values[1] = (val*) var_internal_csignature;
3965 ((struct instance_array__NativeArray*)var32)->values[2] = (val*) var26;
3966 ((void (*)(val*, val*, long))(var30->class->vft[COLOR_array__Array__with_native]))(var30, var32, var31) /* with_native on <var30:Array[Object]>*/;
3967 }
3968 var33 = ((val* (*)(val*))(var30->class->vft[COLOR_string__Object__to_s]))(var30) /* to_s on <var30:Array[Object]>*/;
3969 ((void (*)(val*, val*))(var19->class->vft[COLOR_template__Template__add]))(var19, var33) /* add on <var19:Template>*/;
3970 var34 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3971 var35 = ((val* (*)(val*))(var34->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var34) /* mainmodule on <var34:AbstractCompiler>*/;
3972 if (varonce36) {
3973 var37 = varonce36;
3974 } else {
3975 var38 = "___super";
3976 var39 = 8;
3977 var40 = string__NativeString__to_s_with_length(var38, var39);
3978 var37 = var40;
3979 varonce36 = var37;
3980 }
3981 var41 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__short_signature]))(self) /* short_signature on <self:MExplicitSuper>*/;
3982 var42 = ((val* (*)(val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_cname]))(var_mproperty, var_mclass_type, var35, var37, var41) /* build_cname on <var_mproperty:MProperty(MMethod)>*/;
3983 var_friendly_cname = var42;
3984 var43 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
3985 var44 = ((val* (*)(val*))(var43->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var43) /* mainmodule on <var43:AbstractCompiler>*/;
3986 if (varonce45) {
3987 var46 = varonce45;
3988 } else {
3989 var47 = "___super";
3990 var48 = 8;
3991 var49 = string__NativeString__to_s_with_length(var47, var48);
3992 var46 = var49;
3993 varonce45 = var46;
3994 }
3995 var50 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:MExplicitSuper>*/;
3996 var51 = ((val* (*)(val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_cname]))(var_mproperty, var_mclass_type, var44, var46, var50) /* build_cname on <var_mproperty:MProperty(MMethod)>*/;
3997 var_internal_cname = var51;
3998 var52 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
3999 if (varonce53) {
4000 var54 = varonce53;
4001 } else {
4002 var55 = "#define ";
4003 var56 = 8;
4004 var57 = string__NativeString__to_s_with_length(var55, var56);
4005 var54 = var57;
4006 varonce53 = var54;
4007 }
4008 if (varonce58) {
4009 var59 = varonce58;
4010 } else {
4011 var60 = " ";
4012 var61 = 1;
4013 var62 = string__NativeString__to_s_with_length(var60, var61);
4014 var59 = var62;
4015 varonce58 = var59;
4016 }
4017 if (varonce63) {
4018 var64 = varonce63;
4019 } else {
4020 var65 = "\n";
4021 var66 = 1;
4022 var67 = string__NativeString__to_s_with_length(var65, var66);
4023 var64 = var67;
4024 varonce63 = var64;
4025 }
4026 var68 = NEW_array__Array(&type_array__Arraykernel__Object);
4027 { /* var68 = array_instance Array[Object] */
4028 var69 = 5;
4029 var70 = NEW_array__NativeArray(var69, &type_array__NativeArraykernel__Object);
4030 ((struct instance_array__NativeArray*)var70)->values[0] = (val*) var54;
4031 ((struct instance_array__NativeArray*)var70)->values[1] = (val*) var_friendly_cname;
4032 ((struct instance_array__NativeArray*)var70)->values[2] = (val*) var59;
4033 ((struct instance_array__NativeArray*)var70)->values[3] = (val*) var_internal_cname;
4034 ((struct instance_array__NativeArray*)var70)->values[4] = (val*) var64;
4035 ((void (*)(val*, val*, long))(var68->class->vft[COLOR_array__Array__with_native]))(var68, var70, var69) /* with_native on <var68:Array[Object]>*/;
4036 }
4037 var71 = ((val* (*)(val*))(var68->class->vft[COLOR_string__Object__to_s]))(var68) /* to_s on <var68:Array[Object]>*/;
4038 ((void (*)(val*, val*))(var52->class->vft[COLOR_template__Template__add]))(var52, var71) /* add on <var52:Template>*/;
4039 var72 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
4040 var73 = ((val* (*)(val*))(var72->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(var72) /* new_visitor on <var72:AbstractCompiler>*/;
4041 var_nitni_visitor = var73;
4042 var74 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(var_v) /* frame on <var_v:AbstractCompilerVisitor>*/;
4043 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame_61d]))(var_nitni_visitor, var74) /* frame= on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4044 var75 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
4045 var76 = ((val* (*)(val*))(var75->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var75) /* mainmodule on <var75:AbstractCompiler>*/;
4046 var77 = ((val* (*)(val*, val*, val*))(var_mproperty->class->vft[COLOR_model__MProperty__lookup_first_definition]))(var_mproperty, var76, var_mclass_type) /* lookup_first_definition on <var_mproperty:MProperty(MMethod)>*/;
4047 var78 = ((val* (*)(val*))(var77->class->vft[COLOR_model__MMethodDef__msignature]))(var77) /* msignature on <var77:MPropDef(MMethodDef)>*/;
4048 var_msignature = var78;
4049 var79 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
4050 var80 = ((val* (*)(val*))(var79->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var79) /* mainmodule on <var79:AbstractCompiler>*/;
4051 if (varonce81) {
4052 var82 = varonce81;
4053 } else {
4054 var83 = "___super";
4055 var84 = 8;
4056 var85 = string__NativeString__to_s_with_length(var83, var84);
4057 var82 = var85;
4058 varonce81 = var82;
4059 }
4060 var86 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__long_signature]))(self) /* long_signature on <self:MExplicitSuper>*/;
4061 var87 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_utilities__Object__internal_call_context]))(self) /* internal_call_context on <self:MExplicitSuper>*/;
4062 var88 = ((val* (*)(val*, val*, val*, val*, val*, val*))(var_mproperty->class->vft[COLOR_nitni_utilities__MMethod__build_csignature]))(var_mproperty, var_mclass_type, var80, var82, var86, var87) /* build_csignature on <var_mproperty:MProperty(MMethod)>*/;
4063 var_csignature_blind = var88;
4064 if (varonce89) {
4065 var90 = varonce89;
4066 } else {
4067 var91 = "/* nitni callback to super for ";
4068 var92 = 31;
4069 var93 = string__NativeString__to_s_with_length(var91, var92);
4070 var90 = var93;
4071 varonce89 = var90;
4072 }
4073 var94 = ((val* (*)(val*))(var_mproperty->class->vft[COLOR_model__MProperty__full_name]))(var_mproperty) /* full_name on <var_mproperty:MProperty(MMethod)>*/;
4074 if (varonce95) {
4075 var96 = varonce95;
4076 } else {
4077 var97 = " */";
4078 var98 = 3;
4079 var99 = string__NativeString__to_s_with_length(var97, var98);
4080 var96 = var99;
4081 varonce95 = var96;
4082 }
4083 var100 = NEW_array__Array(&type_array__Arraykernel__Object);
4084 { /* var100 = array_instance Array[Object] */
4085 var101 = 3;
4086 var102 = NEW_array__NativeArray(var101, &type_array__NativeArraykernel__Object);
4087 ((struct instance_array__NativeArray*)var102)->values[0] = (val*) var90;
4088 ((struct instance_array__NativeArray*)var102)->values[1] = (val*) var94;
4089 ((struct instance_array__NativeArray*)var102)->values[2] = (val*) var96;
4090 ((void (*)(val*, val*, long))(var100->class->vft[COLOR_array__Array__with_native]))(var100, var102, var101) /* with_native on <var100:Array[Object]>*/;
4091 }
4092 var103 = ((val* (*)(val*))(var100->class->vft[COLOR_string__Object__to_s]))(var100) /* to_s on <var100:Array[Object]>*/;
4093 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_nitni_visitor, var103) /* add_decl on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4094 if (varonce104) {
4095 var105 = varonce104;
4096 } else {
4097 var106 = " {";
4098 var107 = 2;
4099 var108 = string__NativeString__to_s_with_length(var106, var107);
4100 var105 = var108;
4101 varonce104 = var105;
4102 }
4103 var109 = NEW_array__Array(&type_array__Arraykernel__Object);
4104 { /* var109 = array_instance Array[Object] */
4105 var110 = 2;
4106 var111 = NEW_array__NativeArray(var110, &type_array__NativeArraykernel__Object);
4107 ((struct instance_array__NativeArray*)var111)->values[0] = (val*) var_csignature_blind;
4108 ((struct instance_array__NativeArray*)var111)->values[1] = (val*) var105;
4109 ((void (*)(val*, val*, long))(var109->class->vft[COLOR_array__Array__with_native]))(var109, var111, var110) /* with_native on <var109:Array[Object]>*/;
4110 }
4111 var112 = ((val* (*)(val*))(var109->class->vft[COLOR_string__Object__to_s]))(var109) /* to_s on <var109:Array[Object]>*/;
4112 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_nitni_visitor, var112) /* add_decl on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4113 var113 = NEW_array__Array(&type_array__Arrayabstract_compiler__RuntimeVariable);
4114 ((void (*)(val*))(var113->class->vft[COLOR_array__Array__init]))(var113) /* init on <var113:Array[RuntimeVariable]>*/;
4115 var_vars = var113;
4116 if (varonce114) {
4117 var115 = varonce114;
4118 } else {
4119 var116 = "recv";
4120 var117 = 4;
4121 var118 = string__NativeString__to_s_with_length(var116, var117);
4122 var115 = var118;
4123 varonce114 = var115;
4124 }
4125 var119 = ((val* (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_compiler_ffi__AbstractCompilerVisitor__var_from_c]))(var_nitni_visitor, var115, var_mclass_type) /* var_from_c on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4126 var_recv_var = var119;
4127 ((void (*)(val*, val*))(var_vars->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_vars, var_recv_var) /* add on <var_vars:Array[RuntimeVariable]>*/;
4128 if (var_msignature == NULL) {
4129 fprintf(stderr, "Runtime error: %s", "Receiver is null");
4130 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 425);
4131 show_backtrace(1);
4132 } else {
4133 var120 = ((val* (*)(val*))(var_msignature->class->vft[COLOR_model__MSignature__mparameters]))(var_msignature) /* mparameters on <var_msignature:nullable MSignature>*/;
4134 }
4135 var121 = ((val* (*)(val*))(var120->class->vft[COLOR_abstract_collection__Collection__iterator]))(var120) /* iterator on <var120:Array[MParameter]>*/;
4136 for(;;) {
4137 var122 = ((short int (*)(val*))(var121->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var121) /* is_ok on <var121:Iterator[nullable Object]>*/;
4138 if(!var122) break;
4139 var123 = ((val* (*)(val*))(var121->class->vft[COLOR_abstract_collection__Iterator__item]))(var121) /* item on <var121:Iterator[nullable Object]>*/;
4140 var_p = var123;
4141 var124 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MParameter__mtype]))(var_p) /* mtype on <var_p:MParameter>*/;
4142 var125 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(var_v, var124) /* anchor on <var_v:AbstractCompilerVisitor>*/;
4143 var_arg_mtype = var125;
4144 var126 = ((val* (*)(val*))(var_p->class->vft[COLOR_model__MParameter__name]))(var_p) /* name on <var_p:MParameter>*/;
4145 var127 = ((val* (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_compiler_ffi__AbstractCompilerVisitor__var_from_c]))(var_nitni_visitor, var126, var_arg_mtype) /* var_from_c on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4146 var_arg = var127;
4147 ((void (*)(val*, val*))(var_vars->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_vars, var_arg) /* add on <var_vars:Array[RuntimeVariable]>*/;
4148 CONTINUE_label: (void)0;
4149 ((void (*)(val*))(var121->class->vft[COLOR_abstract_collection__Iterator__next]))(var121) /* next on <var121:Iterator[nullable Object]>*/;
4150 }
4151 BREAK_label: (void)0;
4152 var128 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitSuper__from]))(self) /* from on <self:MExplicitSuper>*/;
4153 /* <var128:MPropDef> isa MMethodDef */
4154 cltype130 = type_model__MMethodDef.color;
4155 idtype131 = type_model__MMethodDef.id;
4156 if(cltype130 >= var128->type->table_size) {
4157 var129 = 0;
4158 } else {
4159 var129 = var128->type->type_table[cltype130] == idtype131;
4160 }
4161 if (!var129) {
4162 var_class_name = var128 == NULL ? "null" : var128->type->name;
4163 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MMethodDef", var_class_name);
4164 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 431);
4165 show_backtrace(1);
4166 }
4167 var132 = ((val* (*)(val*, val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__supercall]))(var_nitni_visitor, var128, var_mclass_type, var_vars) /* supercall on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4168 var_ret_var = var132;
4169 if (var_msignature == NULL) {
4170 fprintf(stderr, "Runtime error: %s", "Receiver is null");
4171 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 433);
4172 show_backtrace(1);
4173 } else {
4174 var133 = ((val* (*)(val*))(var_msignature->class->vft[COLOR_model__MSignature__return_mtype]))(var_msignature) /* return_mtype on <var_msignature:nullable MSignature>*/;
4175 }
4176 var_return_mtype = var133;
4177 var134 = NULL;
4178 if (var_return_mtype == NULL) {
4179 var135 = 0; /* is null */
4180 } else {
4181 var135 = 1; /* arg is null and recv is not */
4182 }
4183 if (var135){
4184 var136 = NULL;
4185 if (var_ret_var == NULL) {
4186 var137 = 0; /* is null */
4187 } else {
4188 var137 = 1; /* arg is null and recv is not */
4189 }
4190 if (!var137) {
4191 fprintf(stderr, "Runtime error: %s", "Assert failed");
4192 fprintf(stderr, " (%s:%d)\n", "src/compiler_ffi.nit", 435);
4193 show_backtrace(1);
4194 }
4195 var138 = ((val* (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(var_v, var_return_mtype) /* anchor on <var_v:AbstractCompilerVisitor>*/;
4196 var_return_mtype = var138;
4197 ((void (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_compiler_ffi__AbstractCompilerVisitor__ret_to_c]))(var_nitni_visitor, var_ret_var, var_return_mtype) /* ret_to_c on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4198 } else {
4199 }
4200 if (varonce139) {
4201 var140 = varonce139;
4202 } else {
4203 var141 = "}";
4204 var142 = 1;
4205 var143 = string__NativeString__to_s_with_length(var141, var142);
4206 var140 = var143;
4207 varonce139 = var140;
4208 }
4209 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var140) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4210 RET_LABEL:;
4211 }
4212 /* method compiler_ffi#MExplicitSuper#compile_extern_callback for (self: Object, AbstractCompilerVisitor, CCompilationUnit) */
4213 void VIRTUAL_compiler_ffi__MExplicitSuper__compile_extern_callback(val* self, val* p0, val* p1) {
4214 compiler_ffi__MExplicitSuper__compile_extern_callback(self, p0, p1);
4215 RET_LABEL:;
4216 }
4217 /* method compiler_ffi#MExplicitCast#compile_extern_callbacks for (self: MExplicitCast, AbstractCompilerVisitor, CCompilationUnit) */
4218 void compiler_ffi__MExplicitCast__compile_extern_callbacks(val* self, val* p0, val* p1) {
4219 val* var_v /* var v: AbstractCompilerVisitor */;
4220 val* var_ccu /* var ccu: CCompilationUnit */;
4221 val* var /* : MType */;
4222 val* var_from /* var from: MType */;
4223 val* var1 /* : MType */;
4224 val* var_to /* var to: MType */;
4225 val* var2 /* : Array[Object] */;
4226 long var3 /* : Int */;
4227 val* var_ /* var : Array[Object] */;
4228 static val* varonce;
4229 val* var4 /* : String */;
4230 char* var5 /* : NativeString */;
4231 long var6 /* : Int */;
4232 val* var7 /* : String */;
4233 val* var8 /* : AbstractCompiler */;
4234 val* var9 /* : MModule */;
4235 val* var10 /* : String */;
4236 static val* varonce11;
4237 val* var12 /* : String */;
4238 char* var13 /* : NativeString */;
4239 long var14 /* : Int */;
4240 val* var15 /* : String */;
4241 val* var16 /* : String */;
4242 static val* varonce17;
4243 val* var18 /* : String */;
4244 char* var19 /* : NativeString */;
4245 long var20 /* : Int */;
4246 val* var21 /* : String */;
4247 val* var22 /* : String */;
4248 static val* varonce23;
4249 val* var24 /* : String */;
4250 char* var25 /* : NativeString */;
4251 long var26 /* : Int */;
4252 val* var27 /* : String */;
4253 val* var28 /* : String */;
4254 static val* varonce29;
4255 val* var30 /* : String */;
4256 char* var31 /* : NativeString */;
4257 long var32 /* : Int */;
4258 val* var33 /* : String */;
4259 val* var34 /* : String */;
4260 val* var_full_friendly_csignature /* var full_friendly_csignature: String */;
4261 val* var35 /* : Template */;
4262 static val* varonce36;
4263 val* var37 /* : String */;
4264 char* var38 /* : NativeString */;
4265 long var39 /* : Int */;
4266 val* var40 /* : String */;
4267 static val* varonce41;
4268 val* var42 /* : String */;
4269 char* var43 /* : NativeString */;
4270 long var44 /* : Int */;
4271 val* var45 /* : String */;
4272 val* var46 /* : Array[Object] */;
4273 long var47 /* : Int */;
4274 val* var48 /* : NativeArray[Object] */;
4275 val* var49 /* : String */;
4276 val* var50 /* : Template */;
4277 static val* varonce51;
4278 val* var52 /* : String */;
4279 char* var53 /* : NativeString */;
4280 long var54 /* : Int */;
4281 val* var55 /* : String */;
4282 val* var56 /* : String */;
4283 static val* varonce57;
4284 val* var58 /* : String */;
4285 char* var59 /* : NativeString */;
4286 long var60 /* : Int */;
4287 val* var61 /* : String */;
4288 val* var62 /* : AbstractCompiler */;
4289 val* var63 /* : MModule */;
4290 val* var64 /* : String */;
4291 static val* varonce65;
4292 val* var66 /* : String */;
4293 char* var67 /* : NativeString */;
4294 long var68 /* : Int */;
4295 val* var69 /* : String */;
4296 val* var70 /* : String */;
4297 static val* varonce71;
4298 val* var72 /* : String */;
4299 char* var73 /* : NativeString */;
4300 long var74 /* : Int */;
4301 val* var75 /* : String */;
4302 val* var76 /* : Array[Object] */;
4303 long var77 /* : Int */;
4304 val* var78 /* : NativeArray[Object] */;
4305 val* var79 /* : String */;
4306 val* var80 /* : AbstractCompiler */;
4307 val* var81 /* : AbstractCompilerVisitor */;
4308 val* var_nitni_visitor /* var nitni_visitor: AbstractCompilerVisitor */;
4309 val* var82 /* : nullable Frame */;
4310 val* var83 /* : Array[Object] */;
4311 long var84 /* : Int */;
4312 val* var_85 /* var : Array[Object] */;
4313 static val* varonce86;
4314 val* var87 /* : String */;
4315 char* var88 /* : NativeString */;
4316 long var89 /* : Int */;
4317 val* var90 /* : String */;
4318 val* var91 /* : AbstractCompiler */;
4319 val* var92 /* : MModule */;
4320 val* var93 /* : String */;
4321 static val* varonce94;
4322 val* var95 /* : String */;
4323 char* var96 /* : NativeString */;
4324 long var97 /* : Int */;
4325 val* var98 /* : String */;
4326 val* var99 /* : String */;
4327 static val* varonce100;
4328 val* var101 /* : String */;
4329 char* var102 /* : NativeString */;
4330 long var103 /* : Int */;
4331 val* var104 /* : String */;
4332 val* var105 /* : String */;
4333 static val* varonce106;
4334 val* var107 /* : String */;
4335 char* var108 /* : NativeString */;
4336 long var109 /* : Int */;
4337 val* var110 /* : String */;
4338 val* var111 /* : String */;
4339 static val* varonce112;
4340 val* var113 /* : String */;
4341 char* var114 /* : NativeString */;
4342 long var115 /* : Int */;
4343 val* var116 /* : String */;
4344 val* var117 /* : String */;
4345 val* var_full_internal_csignature /* var full_internal_csignature: String */;
4346 static val* varonce118;
4347 val* var119 /* : String */;
4348 char* var120 /* : NativeString */;
4349 long var121 /* : Int */;
4350 val* var122 /* : String */;
4351 static val* varonce123;
4352 val* var124 /* : String */;
4353 char* var125 /* : NativeString */;
4354 long var126 /* : Int */;
4355 val* var127 /* : String */;
4356 static val* varonce128;
4357 val* var129 /* : String */;
4358 char* var130 /* : NativeString */;
4359 long var131 /* : Int */;
4360 val* var132 /* : String */;
4361 val* var133 /* : Array[Object] */;
4362 long var134 /* : Int */;
4363 val* var135 /* : NativeArray[Object] */;
4364 val* var136 /* : String */;
4365 static val* varonce137;
4366 val* var138 /* : String */;
4367 char* var139 /* : NativeString */;
4368 long var140 /* : Int */;
4369 val* var141 /* : String */;
4370 val* var142 /* : Array[Object] */;
4371 long var143 /* : Int */;
4372 val* var144 /* : NativeArray[Object] */;
4373 val* var145 /* : String */;
4374 val* var146 /* : RuntimeVariable */;
4375 static val* varonce147;
4376 val* var148 /* : String */;
4377 char* var149 /* : NativeString */;
4378 long var150 /* : Int */;
4379 val* var151 /* : String */;
4380 val* var_from_var /* var from_var: RuntimeVariable */;
4381 static val* varonce152;
4382 val* var153 /* : String */;
4383 char* var154 /* : NativeString */;
4384 long var155 /* : Int */;
4385 val* var156 /* : String */;
4386 val* var157 /* : RuntimeVariable */;
4387 val* var_recv_var /* var recv_var: RuntimeVariable */;
4388 static val* varonce158;
4389 val* var159 /* : String */;
4390 char* var160 /* : NativeString */;
4391 long var161 /* : Int */;
4392 val* var162 /* : String */;
4393 static val* varonce163;
4394 val* var164 /* : String */;
4395 char* var165 /* : NativeString */;
4396 long var166 /* : Int */;
4397 val* var167 /* : String */;
4398 val* var168 /* : Array[Object] */;
4399 long var169 /* : Int */;
4400 val* var170 /* : NativeArray[Object] */;
4401 val* var171 /* : String */;
4402 static val* varonce172;
4403 val* var173 /* : String */;
4404 char* var174 /* : NativeString */;
4405 long var175 /* : Int */;
4406 val* var176 /* : String */;
4407 val* var177 /* : MType */;
4408 short int var178 /* : Bool */;
4409 val* var179 /* : Template */;
4410 static val* varonce180;
4411 val* var181 /* : String */;
4412 char* var182 /* : NativeString */;
4413 long var183 /* : Int */;
4414 val* var184 /* : String */;
4415 val* var185 /* : String */;
4416 static val* varonce186;
4417 val* var187 /* : String */;
4418 char* var188 /* : NativeString */;
4419 long var189 /* : Int */;
4420 val* var190 /* : String */;
4421 val* var191 /* : String */;
4422 static val* varonce192;
4423 val* var193 /* : String */;
4424 char* var194 /* : NativeString */;
4425 long var195 /* : Int */;
4426 val* var196 /* : String */;
4427 val* var197 /* : String */;
4428 static val* varonce198;
4429 val* var199 /* : String */;
4430 char* var200 /* : NativeString */;
4431 long var201 /* : Int */;
4432 val* var202 /* : String */;
4433 val* var203 /* : Array[Object] */;
4434 long var204 /* : Int */;
4435 val* var205 /* : NativeArray[Object] */;
4436 val* var206 /* : String */;
4437 val* var207 /* : Array[Object] */;
4438 long var208 /* : Int */;
4439 val* var_209 /* var : Array[Object] */;
4440 static val* varonce210;
4441 val* var211 /* : String */;
4442 char* var212 /* : NativeString */;
4443 long var213 /* : Int */;
4444 val* var214 /* : String */;
4445 val* var215 /* : String */;
4446 static val* varonce216;
4447 val* var217 /* : String */;
4448 char* var218 /* : NativeString */;
4449 long var219 /* : Int */;
4450 val* var220 /* : String */;
4451 val* var221 /* : AbstractCompiler */;
4452 val* var222 /* : MModule */;
4453 val* var223 /* : String */;
4454 static val* varonce224;
4455 val* var225 /* : String */;
4456 char* var226 /* : NativeString */;
4457 long var227 /* : Int */;
4458 val* var228 /* : String */;
4459 val* var229 /* : String */;
4460 static val* varonce230;
4461 val* var231 /* : String */;
4462 char* var232 /* : NativeString */;
4463 long var233 /* : Int */;
4464 val* var234 /* : String */;
4465 val* var235 /* : String */;
4466 static val* varonce236;
4467 val* var237 /* : String */;
4468 char* var238 /* : NativeString */;
4469 long var239 /* : Int */;
4470 val* var240 /* : String */;
4471 val* var241 /* : String */;
4472 static val* varonce242;
4473 val* var243 /* : String */;
4474 char* var244 /* : NativeString */;
4475 long var245 /* : Int */;
4476 val* var246 /* : String */;
4477 val* var247 /* : String */;
4478 val* var248 /* : Template */;
4479 static val* varonce249;
4480 val* var250 /* : String */;
4481 char* var251 /* : NativeString */;
4482 long var252 /* : Int */;
4483 val* var253 /* : String */;
4484 static val* varonce254;
4485 val* var255 /* : String */;
4486 char* var256 /* : NativeString */;
4487 long var257 /* : Int */;
4488 val* var258 /* : String */;
4489 val* var259 /* : Array[Object] */;
4490 long var260 /* : Int */;
4491 val* var261 /* : NativeArray[Object] */;
4492 val* var262 /* : String */;
4493 val* var263 /* : Template */;
4494 static val* varonce264;
4495 val* var265 /* : String */;
4496 char* var266 /* : NativeString */;
4497 long var267 /* : Int */;
4498 val* var268 /* : String */;
4499 val* var269 /* : String */;
4500 static val* varonce270;
4501 val* var271 /* : String */;
4502 char* var272 /* : NativeString */;
4503 long var273 /* : Int */;
4504 val* var274 /* : String */;
4505 val* var275 /* : AbstractCompiler */;
4506 val* var276 /* : MModule */;
4507 val* var277 /* : String */;
4508 static val* varonce278;
4509 val* var279 /* : String */;
4510 char* var280 /* : NativeString */;
4511 long var281 /* : Int */;
4512 val* var282 /* : String */;
4513 val* var283 /* : String */;
4514 static val* varonce284;
4515 val* var285 /* : String */;
4516 char* var286 /* : NativeString */;
4517 long var287 /* : Int */;
4518 val* var288 /* : String */;
4519 val* var289 /* : Array[Object] */;
4520 long var290 /* : Int */;
4521 val* var291 /* : NativeArray[Object] */;
4522 val* var292 /* : String */;
4523 val* var293 /* : AbstractCompiler */;
4524 val* var294 /* : AbstractCompilerVisitor */;
4525 val* var295 /* : nullable Frame */;
4526 val* var296 /* : Array[Object] */;
4527 long var297 /* : Int */;
4528 val* var_298 /* var : Array[Object] */;
4529 static val* varonce299;
4530 val* var300 /* : String */;
4531 char* var301 /* : NativeString */;
4532 long var302 /* : Int */;
4533 val* var303 /* : String */;
4534 val* var304 /* : String */;
4535 static val* varonce305;
4536 val* var306 /* : String */;
4537 char* var307 /* : NativeString */;
4538 long var308 /* : Int */;
4539 val* var309 /* : String */;
4540 val* var310 /* : AbstractCompiler */;
4541 val* var311 /* : MModule */;
4542 val* var312 /* : String */;
4543 static val* varonce313;
4544 val* var314 /* : String */;
4545 char* var315 /* : NativeString */;
4546 long var316 /* : Int */;
4547 val* var317 /* : String */;
4548 val* var318 /* : String */;
4549 static val* varonce319;
4550 val* var320 /* : String */;
4551 char* var321 /* : NativeString */;
4552 long var322 /* : Int */;
4553 val* var323 /* : String */;
4554 val* var324 /* : String */;
4555 static val* varonce325;
4556 val* var326 /* : String */;
4557 char* var327 /* : NativeString */;
4558 long var328 /* : Int */;
4559 val* var329 /* : String */;
4560 val* var330 /* : String */;
4561 static val* varonce331;
4562 val* var332 /* : String */;
4563 char* var333 /* : NativeString */;
4564 long var334 /* : Int */;
4565 val* var335 /* : String */;
4566 val* var336 /* : String */;
4567 static val* varonce337;
4568 val* var338 /* : String */;
4569 char* var339 /* : NativeString */;
4570 long var340 /* : Int */;
4571 val* var341 /* : String */;
4572 static val* varonce342;
4573 val* var343 /* : String */;
4574 char* var344 /* : NativeString */;
4575 long var345 /* : Int */;
4576 val* var346 /* : String */;
4577 static val* varonce347;
4578 val* var348 /* : String */;
4579 char* var349 /* : NativeString */;
4580 long var350 /* : Int */;
4581 val* var351 /* : String */;
4582 val* var352 /* : Array[Object] */;
4583 long var353 /* : Int */;
4584 val* var354 /* : NativeArray[Object] */;
4585 val* var355 /* : String */;
4586 static val* varonce356;
4587 val* var357 /* : String */;
4588 char* var358 /* : NativeString */;
4589 long var359 /* : Int */;
4590 val* var360 /* : String */;
4591 val* var361 /* : Array[Object] */;
4592 long var362 /* : Int */;
4593 val* var363 /* : NativeArray[Object] */;
4594 val* var364 /* : String */;
4595 static val* varonce365;
4596 val* var366 /* : String */;
4597 char* var367 /* : NativeString */;
4598 long var368 /* : Int */;
4599 val* var369 /* : String */;
4600 val* var370 /* : RuntimeVariable */;
4601 static val* varonce371;
4602 val* var372 /* : String */;
4603 char* var373 /* : NativeString */;
4604 long var374 /* : Int */;
4605 val* var375 /* : String */;
4606 val* var376 /* : RuntimeVariable */;
4607 val* var_check /* var check: RuntimeVariable */;
4608 static val* varonce377;
4609 val* var378 /* : String */;
4610 char* var379 /* : NativeString */;
4611 long var380 /* : Int */;
4612 val* var381 /* : String */;
4613 static val* varonce382;
4614 val* var383 /* : String */;
4615 char* var384 /* : NativeString */;
4616 long var385 /* : Int */;
4617 val* var386 /* : String */;
4618 val* var387 /* : Array[Object] */;
4619 long var388 /* : Int */;
4620 val* var389 /* : NativeArray[Object] */;
4621 val* var390 /* : String */;
4622 static val* varonce391;
4623 val* var392 /* : String */;
4624 char* var393 /* : NativeString */;
4625 long var394 /* : Int */;
4626 val* var395 /* : String */;
4627 static val* varonce396;
4628 val* var397 /* : String */;
4629 char* var398 /* : NativeString */;
4630 long var399 /* : Int */;
4631 val* var400 /* : String */;
4632 val* var401 /* : RuntimeVariable */;
4633 static val* varonce402;
4634 val* var403 /* : String */;
4635 char* var404 /* : NativeString */;
4636 long var405 /* : Int */;
4637 val* var406 /* : String */;
4638 val* var407 /* : MType */;
4639 short int var408 /* : Bool */;
4640 val* var409 /* : Template */;
4641 static val* varonce410;
4642 val* var411 /* : String */;
4643 char* var412 /* : NativeString */;
4644 long var413 /* : Int */;
4645 val* var414 /* : String */;
4646 val* var415 /* : String */;
4647 static val* varonce416;
4648 val* var417 /* : String */;
4649 char* var418 /* : NativeString */;
4650 long var419 /* : Int */;
4651 val* var420 /* : String */;
4652 val* var421 /* : String */;
4653 static val* varonce422;
4654 val* var423 /* : String */;
4655 char* var424 /* : NativeString */;
4656 long var425 /* : Int */;
4657 val* var426 /* : String */;
4658 val* var427 /* : String */;
4659 static val* varonce428;
4660 val* var429 /* : String */;
4661 char* var430 /* : NativeString */;
4662 long var431 /* : Int */;
4663 val* var432 /* : String */;
4664 val* var433 /* : Array[Object] */;
4665 long var434 /* : Int */;
4666 val* var435 /* : NativeArray[Object] */;
4667 val* var436 /* : String */;
4668 val* var437 /* : MType */;
4669 short int var438 /* : Bool */;
4670 val* var439 /* : Template */;
4671 static val* varonce440;
4672 val* var441 /* : String */;
4673 char* var442 /* : NativeString */;
4674 long var443 /* : Int */;
4675 val* var444 /* : String */;
4676 val* var445 /* : String */;
4677 static val* varonce446;
4678 val* var447 /* : String */;
4679 char* var448 /* : NativeString */;
4680 long var449 /* : Int */;
4681 val* var450 /* : String */;
4682 val* var451 /* : String */;
4683 static val* varonce452;
4684 val* var453 /* : String */;
4685 char* var454 /* : NativeString */;
4686 long var455 /* : Int */;
4687 val* var456 /* : String */;
4688 val* var457 /* : String */;
4689 static val* varonce458;
4690 val* var459 /* : String */;
4691 char* var460 /* : NativeString */;
4692 long var461 /* : Int */;
4693 val* var462 /* : String */;
4694 val* var463 /* : Array[Object] */;
4695 long var464 /* : Int */;
4696 val* var465 /* : NativeArray[Object] */;
4697 val* var466 /* : String */;
4698 var_v = p0;
4699 var_ccu = p1;
4700 var = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCast__from]))(self) /* from on <self:MExplicitCast>*/;
4701 var_from = var;
4702 var1 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCast__to]))(self) /* to on <self:MExplicitCast>*/;
4703 var_to = var1;
4704 var2 = NEW_array__Array(&type_array__Arraykernel__Object);
4705 var3 = 9;
4706 ((void (*)(val*, long))(var2->class->vft[COLOR_array__Array__with_capacity]))(var2, var3) /* with_capacity on <var2:Array[Object]>*/;
4707 var_ = var2;
4708 if (varonce) {
4709 var4 = varonce;
4710 } else {
4711 var5 = "int ";
4712 var6 = 4;
4713 var7 = string__NativeString__to_s_with_length(var5, var6);
4714 var4 = var7;
4715 varonce = var4;
4716 }
4717 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var4) /* add on <var_:Array[Object]>*/;
4718 var8 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
4719 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var8) /* mainmodule on <var8:AbstractCompiler>*/;
4720 var10 = ((val* (*)(val*))(var9->class->vft[COLOR_mmodule__MModule__name]))(var9) /* name on <var9:MModule>*/;
4721 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var10) /* add on <var_:Array[Object]>*/;
4722 if (varonce11) {
4723 var12 = varonce11;
4724 } else {
4725 var13 = "___";
4726 var14 = 3;
4727 var15 = string__NativeString__to_s_with_length(var13, var14);
4728 var12 = var15;
4729 varonce11 = var12;
4730 }
4731 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var12) /* add on <var_:Array[Object]>*/;
4732 var16 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_from) /* mangled_cname on <var_from:MType>*/;
4733 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var16) /* add on <var_:Array[Object]>*/;
4734 if (varonce17) {
4735 var18 = varonce17;
4736 } else {
4737 var19 = "_is_a_";
4738 var20 = 6;
4739 var21 = string__NativeString__to_s_with_length(var19, var20);
4740 var18 = var21;
4741 varonce17 = var18;
4742 }
4743 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var18) /* add on <var_:Array[Object]>*/;
4744 var22 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_to) /* mangled_cname on <var_to:MType>*/;
4745 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var22) /* add on <var_:Array[Object]>*/;
4746 if (varonce23) {
4747 var24 = varonce23;
4748 } else {
4749 var25 = "(";
4750 var26 = 1;
4751 var27 = string__NativeString__to_s_with_length(var25, var26);
4752 var24 = var27;
4753 varonce23 = var24;
4754 }
4755 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var24) /* add on <var_:Array[Object]>*/;
4756 var28 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__cname_blind]))(var_from) /* cname_blind on <var_from:MType>*/;
4757 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var28) /* add on <var_:Array[Object]>*/;
4758 if (varonce29) {
4759 var30 = varonce29;
4760 } else {
4761 var31 = ")";
4762 var32 = 1;
4763 var33 = string__NativeString__to_s_with_length(var31, var32);
4764 var30 = var33;
4765 varonce29 = var30;
4766 }
4767 ((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var30) /* add on <var_:Array[Object]>*/;
4768 var34 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
4769 var_full_friendly_csignature = var34;
4770 var35 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
4771 if (varonce36) {
4772 var37 = varonce36;
4773 } else {
4774 var38 = "extern ";
4775 var39 = 7;
4776 var40 = string__NativeString__to_s_with_length(var38, var39);
4777 var37 = var40;
4778 varonce36 = var37;
4779 }
4780 if (varonce41) {
4781 var42 = varonce41;
4782 } else {
4783 var43 = ";\n";
4784 var44 = 2;
4785 var45 = string__NativeString__to_s_with_length(var43, var44);
4786 var42 = var45;
4787 varonce41 = var42;
4788 }
4789 var46 = NEW_array__Array(&type_array__Arraykernel__Object);
4790 { /* var46 = array_instance Array[Object] */
4791 var47 = 3;
4792 var48 = NEW_array__NativeArray(var47, &type_array__NativeArraykernel__Object);
4793 ((struct instance_array__NativeArray*)var48)->values[0] = (val*) var37;
4794 ((struct instance_array__NativeArray*)var48)->values[1] = (val*) var_full_friendly_csignature;
4795 ((struct instance_array__NativeArray*)var48)->values[2] = (val*) var42;
4796 ((void (*)(val*, val*, long))(var46->class->vft[COLOR_array__Array__with_native]))(var46, var48, var47) /* with_native on <var46:Array[Object]>*/;
4797 }
4798 var49 = ((val* (*)(val*))(var46->class->vft[COLOR_string__Object__to_s]))(var46) /* to_s on <var46:Array[Object]>*/;
4799 ((void (*)(val*, val*))(var35->class->vft[COLOR_template__Template__add]))(var35, var49) /* add on <var35:Template>*/;
4800 var50 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
4801 if (varonce51) {
4802 var52 = varonce51;
4803 } else {
4804 var53 = "#define ";
4805 var54 = 8;
4806 var55 = string__NativeString__to_s_with_length(var53, var54);
4807 var52 = var55;
4808 varonce51 = var52;
4809 }
4810 var56 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCast__check_cname]))(self) /* check_cname on <self:MExplicitCast>*/;
4811 if (varonce57) {
4812 var58 = varonce57;
4813 } else {
4814 var59 = " ";
4815 var60 = 1;
4816 var61 = string__NativeString__to_s_with_length(var59, var60);
4817 var58 = var61;
4818 varonce57 = var58;
4819 }
4820 var62 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
4821 var63 = ((val* (*)(val*))(var62->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var62) /* mainmodule on <var62:AbstractCompiler>*/;
4822 var64 = ((val* (*)(val*))(var63->class->vft[COLOR_mmodule__MModule__name]))(var63) /* name on <var63:MModule>*/;
4823 if (varonce65) {
4824 var66 = varonce65;
4825 } else {
4826 var67 = "___";
4827 var68 = 3;
4828 var69 = string__NativeString__to_s_with_length(var67, var68);
4829 var66 = var69;
4830 varonce65 = var66;
4831 }
4832 var70 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCast__check_cname]))(self) /* check_cname on <self:MExplicitCast>*/;
4833 if (varonce71) {
4834 var72 = varonce71;
4835 } else {
4836 var73 = "\n";
4837 var74 = 1;
4838 var75 = string__NativeString__to_s_with_length(var73, var74);
4839 var72 = var75;
4840 varonce71 = var72;
4841 }
4842 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
4843 { /* var76 = array_instance Array[Object] */
4844 var77 = 7;
4845 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
4846 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var52;
4847 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var56;
4848 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var58;
4849 ((struct instance_array__NativeArray*)var78)->values[3] = (val*) var64;
4850 ((struct instance_array__NativeArray*)var78)->values[4] = (val*) var66;
4851 ((struct instance_array__NativeArray*)var78)->values[5] = (val*) var70;
4852 ((struct instance_array__NativeArray*)var78)->values[6] = (val*) var72;
4853 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
4854 }
4855 var79 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
4856 ((void (*)(val*, val*))(var50->class->vft[COLOR_template__Template__add]))(var50, var79) /* add on <var50:Template>*/;
4857 var80 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
4858 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(var80) /* new_visitor on <var80:AbstractCompiler>*/;
4859 var_nitni_visitor = var81;
4860 var82 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(var_v) /* frame on <var_v:AbstractCompilerVisitor>*/;
4861 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame_61d]))(var_nitni_visitor, var82) /* frame= on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4862 var83 = NEW_array__Array(&type_array__Arraykernel__Object);
4863 var84 = 9;
4864 ((void (*)(val*, long))(var83->class->vft[COLOR_array__Array__with_capacity]))(var83, var84) /* with_capacity on <var83:Array[Object]>*/;
4865 var_85 = var83;
4866 if (varonce86) {
4867 var87 = varonce86;
4868 } else {
4869 var88 = "int ";
4870 var89 = 4;
4871 var90 = string__NativeString__to_s_with_length(var88, var89);
4872 var87 = var90;
4873 varonce86 = var87;
4874 }
4875 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var87) /* add on <var_85:Array[Object]>*/;
4876 var91 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
4877 var92 = ((val* (*)(val*))(var91->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var91) /* mainmodule on <var91:AbstractCompiler>*/;
4878 var93 = ((val* (*)(val*))(var92->class->vft[COLOR_mmodule__MModule__name]))(var92) /* name on <var92:MModule>*/;
4879 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var93) /* add on <var_85:Array[Object]>*/;
4880 if (varonce94) {
4881 var95 = varonce94;
4882 } else {
4883 var96 = "___";
4884 var97 = 3;
4885 var98 = string__NativeString__to_s_with_length(var96, var97);
4886 var95 = var98;
4887 varonce94 = var95;
4888 }
4889 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var95) /* add on <var_85:Array[Object]>*/;
4890 var99 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_from) /* mangled_cname on <var_from:MType>*/;
4891 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var99) /* add on <var_85:Array[Object]>*/;
4892 if (varonce100) {
4893 var101 = varonce100;
4894 } else {
4895 var102 = "_is_a_";
4896 var103 = 6;
4897 var104 = string__NativeString__to_s_with_length(var102, var103);
4898 var101 = var104;
4899 varonce100 = var101;
4900 }
4901 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var101) /* add on <var_85:Array[Object]>*/;
4902 var105 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_to) /* mangled_cname on <var_to:MType>*/;
4903 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var105) /* add on <var_85:Array[Object]>*/;
4904 if (varonce106) {
4905 var107 = varonce106;
4906 } else {
4907 var108 = "(";
4908 var109 = 1;
4909 var110 = string__NativeString__to_s_with_length(var108, var109);
4910 var107 = var110;
4911 varonce106 = var107;
4912 }
4913 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var107) /* add on <var_85:Array[Object]>*/;
4914 var111 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__cname_blind]))(var_from) /* cname_blind on <var_from:MType>*/;
4915 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var111) /* add on <var_85:Array[Object]>*/;
4916 if (varonce112) {
4917 var113 = varonce112;
4918 } else {
4919 var114 = " from)";
4920 var115 = 6;
4921 var116 = string__NativeString__to_s_with_length(var114, var115);
4922 var113 = var116;
4923 varonce112 = var113;
4924 }
4925 ((void (*)(val*, val*))(var_85->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_85, var113) /* add on <var_85:Array[Object]>*/;
4926 var117 = ((val* (*)(val*))(var_85->class->vft[COLOR_string__Object__to_s]))(var_85) /* to_s on <var_85:Array[Object]>*/;
4927 var_full_internal_csignature = var117;
4928 if (varonce118) {
4929 var119 = varonce118;
4930 } else {
4931 var120 = "/* nitni check for ";
4932 var121 = 19;
4933 var122 = string__NativeString__to_s_with_length(var120, var121);
4934 var119 = var122;
4935 varonce118 = var119;
4936 }
4937 if (varonce123) {
4938 var124 = varonce123;
4939 } else {
4940 var125 = " to ";
4941 var126 = 4;
4942 var127 = string__NativeString__to_s_with_length(var125, var126);
4943 var124 = var127;
4944 varonce123 = var124;
4945 }
4946 if (varonce128) {
4947 var129 = varonce128;
4948 } else {
4949 var130 = " */";
4950 var131 = 3;
4951 var132 = string__NativeString__to_s_with_length(var130, var131);
4952 var129 = var132;
4953 varonce128 = var129;
4954 }
4955 var133 = NEW_array__Array(&type_array__Arraykernel__Object);
4956 { /* var133 = array_instance Array[Object] */
4957 var134 = 5;
4958 var135 = NEW_array__NativeArray(var134, &type_array__NativeArraykernel__Object);
4959 ((struct instance_array__NativeArray*)var135)->values[0] = (val*) var119;
4960 ((struct instance_array__NativeArray*)var135)->values[1] = (val*) var_from;
4961 ((struct instance_array__NativeArray*)var135)->values[2] = (val*) var124;
4962 ((struct instance_array__NativeArray*)var135)->values[3] = (val*) var_to;
4963 ((struct instance_array__NativeArray*)var135)->values[4] = (val*) var129;
4964 ((void (*)(val*, val*, long))(var133->class->vft[COLOR_array__Array__with_native]))(var133, var135, var134) /* with_native on <var133:Array[Object]>*/;
4965 }
4966 var136 = ((val* (*)(val*))(var133->class->vft[COLOR_string__Object__to_s]))(var133) /* to_s on <var133:Array[Object]>*/;
4967 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_nitni_visitor, var136) /* add_decl on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4968 if (varonce137) {
4969 var138 = varonce137;
4970 } else {
4971 var139 = " {";
4972 var140 = 2;
4973 var141 = string__NativeString__to_s_with_length(var139, var140);
4974 var138 = var141;
4975 varonce137 = var138;
4976 }
4977 var142 = NEW_array__Array(&type_array__Arraykernel__Object);
4978 { /* var142 = array_instance Array[Object] */
4979 var143 = 2;
4980 var144 = NEW_array__NativeArray(var143, &type_array__NativeArraykernel__Object);
4981 ((struct instance_array__NativeArray*)var144)->values[0] = (val*) var_full_internal_csignature;
4982 ((struct instance_array__NativeArray*)var144)->values[1] = (val*) var138;
4983 ((void (*)(val*, val*, long))(var142->class->vft[COLOR_array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
4984 }
4985 var145 = ((val* (*)(val*))(var142->class->vft[COLOR_string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
4986 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_nitni_visitor, var145) /* add_decl on <var_nitni_visitor:AbstractCompilerVisitor>*/;
4987 var146 = NEW_abstract_compiler__RuntimeVariable(&type_abstract_compiler__RuntimeVariable);
4988 if (varonce147) {
4989 var148 = varonce147;
4990 } else {
4991 var149 = "from->value";
4992 var150 = 11;
4993 var151 = string__NativeString__to_s_with_length(var149, var150);
4994 var148 = var151;
4995 varonce147 = var148;
4996 }
4997 ((void (*)(val*, val*, val*, val*))(var146->class->vft[COLOR_abstract_compiler__RuntimeVariable__init]))(var146, var148, var_from, var_from) /* init on <var146:RuntimeVariable>*/;
4998 var_from_var = var146;
4999 if (varonce152) {
5000 var153 = varonce152;
5001 } else {
5002 var154 = "FFI isa";
5003 var155 = 7;
5004 var156 = string__NativeString__to_s_with_length(var154, var155);
5005 var153 = var156;
5006 varonce152 = var153;
5007 }
5008 var157 = ((val* (*)(val*, val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__type_test]))(var_nitni_visitor, var_from_var, var_to, var153) /* type_test on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5009 var_recv_var = var157;
5010 if (varonce158) {
5011 var159 = varonce158;
5012 } else {
5013 var160 = "return ";
5014 var161 = 7;
5015 var162 = string__NativeString__to_s_with_length(var160, var161);
5016 var159 = var162;
5017 varonce158 = var159;
5018 }
5019 if (varonce163) {
5020 var164 = varonce163;
5021 } else {
5022 var165 = ";";
5023 var166 = 1;
5024 var167 = string__NativeString__to_s_with_length(var165, var166);
5025 var164 = var167;
5026 varonce163 = var164;
5027 }
5028 var168 = NEW_array__Array(&type_array__Arraykernel__Object);
5029 { /* var168 = array_instance Array[Object] */
5030 var169 = 3;
5031 var170 = NEW_array__NativeArray(var169, &type_array__NativeArraykernel__Object);
5032 ((struct instance_array__NativeArray*)var170)->values[0] = (val*) var159;
5033 ((struct instance_array__NativeArray*)var170)->values[1] = (val*) var_recv_var;
5034 ((struct instance_array__NativeArray*)var170)->values[2] = (val*) var164;
5035 ((void (*)(val*, val*, long))(var168->class->vft[COLOR_array__Array__with_native]))(var168, var170, var169) /* with_native on <var168:Array[Object]>*/;
5036 }
5037 var171 = ((val* (*)(val*))(var168->class->vft[COLOR_string__Object__to_s]))(var168) /* to_s on <var168:Array[Object]>*/;
5038 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var171) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5039 if (varonce172) {
5040 var173 = varonce172;
5041 } else {
5042 var174 = "}";
5043 var175 = 1;
5044 var176 = string__NativeString__to_s_with_length(var174, var175);
5045 var173 = var176;
5046 varonce172 = var173;
5047 }
5048 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var173) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5049 var177 = ((val* (*)(val*))(var_to->class->vft[COLOR_model__MType__as_nullable]))(var_to) /* as_nullable on <var_to:MType>*/;
5050 var178 = ((short int (*)(val*, val*))(var_from->class->vft[COLOR_kernel__Object___61d_61d]))(var_from, var177) /* == on <var_from:MType>*/;
5051 if (var178){
5052 var179 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
5053 if (varonce180) {
5054 var181 = varonce180;
5055 } else {
5056 var182 = "#define ";
5057 var183 = 8;
5058 var184 = string__NativeString__to_s_with_length(var182, var183);
5059 var181 = var184;
5060 varonce180 = var181;
5061 }
5062 var185 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_from) /* mangled_cname on <var_from:MType>*/;
5063 if (varonce186) {
5064 var187 = varonce186;
5065 } else {
5066 var188 = "_is_null !";
5067 var189 = 10;
5068 var190 = string__NativeString__to_s_with_length(var188, var189);
5069 var187 = var190;
5070 varonce186 = var187;
5071 }
5072 var191 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_from) /* mangled_cname on <var_from:MType>*/;
5073 if (varonce192) {
5074 var193 = varonce192;
5075 } else {
5076 var194 = "_is_a_";
5077 var195 = 6;
5078 var196 = string__NativeString__to_s_with_length(var194, var195);
5079 var193 = var196;
5080 varonce192 = var193;
5081 }
5082 var197 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_to) /* mangled_cname on <var_to:MType>*/;
5083 if (varonce198) {
5084 var199 = varonce198;
5085 } else {
5086 var200 = "\n";
5087 var201 = 1;
5088 var202 = string__NativeString__to_s_with_length(var200, var201);
5089 var199 = var202;
5090 varonce198 = var199;
5091 }
5092 var203 = NEW_array__Array(&type_array__Arraykernel__Object);
5093 { /* var203 = array_instance Array[Object] */
5094 var204 = 7;
5095 var205 = NEW_array__NativeArray(var204, &type_array__NativeArraykernel__Object);
5096 ((struct instance_array__NativeArray*)var205)->values[0] = (val*) var181;
5097 ((struct instance_array__NativeArray*)var205)->values[1] = (val*) var185;
5098 ((struct instance_array__NativeArray*)var205)->values[2] = (val*) var187;
5099 ((struct instance_array__NativeArray*)var205)->values[3] = (val*) var191;
5100 ((struct instance_array__NativeArray*)var205)->values[4] = (val*) var193;
5101 ((struct instance_array__NativeArray*)var205)->values[5] = (val*) var197;
5102 ((struct instance_array__NativeArray*)var205)->values[6] = (val*) var199;
5103 ((void (*)(val*, val*, long))(var203->class->vft[COLOR_array__Array__with_native]))(var203, var205, var204) /* with_native on <var203:Array[Object]>*/;
5104 }
5105 var206 = ((val* (*)(val*))(var203->class->vft[COLOR_string__Object__to_s]))(var203) /* to_s on <var203:Array[Object]>*/;
5106 ((void (*)(val*, val*))(var179->class->vft[COLOR_template__Template__add]))(var179, var206) /* add on <var179:Template>*/;
5107 } else {
5108 }
5109 var207 = NEW_array__Array(&type_array__Arraykernel__Object);
5110 var208 = 11;
5111 ((void (*)(val*, long))(var207->class->vft[COLOR_array__Array__with_capacity]))(var207, var208) /* with_capacity on <var207:Array[Object]>*/;
5112 var_209 = var207;
5113 if (varonce210) {
5114 var211 = varonce210;
5115 } else {
5116 var212 = "";
5117 var213 = 0;
5118 var214 = string__NativeString__to_s_with_length(var212, var213);
5119 var211 = var214;
5120 varonce210 = var211;
5121 }
5122 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var211) /* add on <var_209:Array[Object]>*/;
5123 var215 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__cname_blind]))(var_to) /* cname_blind on <var_to:MType>*/;
5124 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var215) /* add on <var_209:Array[Object]>*/;
5125 if (varonce216) {
5126 var217 = varonce216;
5127 } else {
5128 var218 = " ";
5129 var219 = 1;
5130 var220 = string__NativeString__to_s_with_length(var218, var219);
5131 var217 = var220;
5132 varonce216 = var217;
5133 }
5134 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var217) /* add on <var_209:Array[Object]>*/;
5135 var221 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
5136 var222 = ((val* (*)(val*))(var221->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var221) /* mainmodule on <var221:AbstractCompiler>*/;
5137 var223 = ((val* (*)(val*))(var222->class->vft[COLOR_mmodule__MModule__name]))(var222) /* name on <var222:MModule>*/;
5138 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var223) /* add on <var_209:Array[Object]>*/;
5139 if (varonce224) {
5140 var225 = varonce224;
5141 } else {
5142 var226 = "___";
5143 var227 = 3;
5144 var228 = string__NativeString__to_s_with_length(var226, var227);
5145 var225 = var228;
5146 varonce224 = var225;
5147 }
5148 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var225) /* add on <var_209:Array[Object]>*/;
5149 var229 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_from) /* mangled_cname on <var_from:MType>*/;
5150 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var229) /* add on <var_209:Array[Object]>*/;
5151 if (varonce230) {
5152 var231 = varonce230;
5153 } else {
5154 var232 = "_as_";
5155 var233 = 4;
5156 var234 = string__NativeString__to_s_with_length(var232, var233);
5157 var231 = var234;
5158 varonce230 = var231;
5159 }
5160 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var231) /* add on <var_209:Array[Object]>*/;
5161 var235 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_to) /* mangled_cname on <var_to:MType>*/;
5162 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var235) /* add on <var_209:Array[Object]>*/;
5163 if (varonce236) {
5164 var237 = varonce236;
5165 } else {
5166 var238 = "(";
5167 var239 = 1;
5168 var240 = string__NativeString__to_s_with_length(var238, var239);
5169 var237 = var240;
5170 varonce236 = var237;
5171 }
5172 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var237) /* add on <var_209:Array[Object]>*/;
5173 var241 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__cname_blind]))(var_from) /* cname_blind on <var_from:MType>*/;
5174 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var241) /* add on <var_209:Array[Object]>*/;
5175 if (varonce242) {
5176 var243 = varonce242;
5177 } else {
5178 var244 = ")";
5179 var245 = 1;
5180 var246 = string__NativeString__to_s_with_length(var244, var245);
5181 var243 = var246;
5182 varonce242 = var243;
5183 }
5184 ((void (*)(val*, val*))(var_209->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_209, var243) /* add on <var_209:Array[Object]>*/;
5185 var247 = ((val* (*)(val*))(var_209->class->vft[COLOR_string__Object__to_s]))(var_209) /* to_s on <var_209:Array[Object]>*/;
5186 var_full_friendly_csignature = var247;
5187 var248 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
5188 if (varonce249) {
5189 var250 = varonce249;
5190 } else {
5191 var251 = "extern ";
5192 var252 = 7;
5193 var253 = string__NativeString__to_s_with_length(var251, var252);
5194 var250 = var253;
5195 varonce249 = var250;
5196 }
5197 if (varonce254) {
5198 var255 = varonce254;
5199 } else {
5200 var256 = ";\n";
5201 var257 = 2;
5202 var258 = string__NativeString__to_s_with_length(var256, var257);
5203 var255 = var258;
5204 varonce254 = var255;
5205 }
5206 var259 = NEW_array__Array(&type_array__Arraykernel__Object);
5207 { /* var259 = array_instance Array[Object] */
5208 var260 = 3;
5209 var261 = NEW_array__NativeArray(var260, &type_array__NativeArraykernel__Object);
5210 ((struct instance_array__NativeArray*)var261)->values[0] = (val*) var250;
5211 ((struct instance_array__NativeArray*)var261)->values[1] = (val*) var_full_friendly_csignature;
5212 ((struct instance_array__NativeArray*)var261)->values[2] = (val*) var255;
5213 ((void (*)(val*, val*, long))(var259->class->vft[COLOR_array__Array__with_native]))(var259, var261, var260) /* with_native on <var259:Array[Object]>*/;
5214 }
5215 var262 = ((val* (*)(val*))(var259->class->vft[COLOR_string__Object__to_s]))(var259) /* to_s on <var259:Array[Object]>*/;
5216 ((void (*)(val*, val*))(var248->class->vft[COLOR_template__Template__add]))(var248, var262) /* add on <var248:Template>*/;
5217 var263 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
5218 if (varonce264) {
5219 var265 = varonce264;
5220 } else {
5221 var266 = "#define ";
5222 var267 = 8;
5223 var268 = string__NativeString__to_s_with_length(var266, var267);
5224 var265 = var268;
5225 varonce264 = var265;
5226 }
5227 var269 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCast__cast_cname]))(self) /* cast_cname on <self:MExplicitCast>*/;
5228 if (varonce270) {
5229 var271 = varonce270;
5230 } else {
5231 var272 = " ";
5232 var273 = 1;
5233 var274 = string__NativeString__to_s_with_length(var272, var273);
5234 var271 = var274;
5235 varonce270 = var271;
5236 }
5237 var275 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
5238 var276 = ((val* (*)(val*))(var275->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var275) /* mainmodule on <var275:AbstractCompiler>*/;
5239 var277 = ((val* (*)(val*))(var276->class->vft[COLOR_mmodule__MModule__name]))(var276) /* name on <var276:MModule>*/;
5240 if (varonce278) {
5241 var279 = varonce278;
5242 } else {
5243 var280 = "___";
5244 var281 = 3;
5245 var282 = string__NativeString__to_s_with_length(var280, var281);
5246 var279 = var282;
5247 varonce278 = var279;
5248 }
5249 var283 = ((val* (*)(val*))(self->class->vft[COLOR_nitni_callbacks__MExplicitCast__cast_cname]))(self) /* cast_cname on <self:MExplicitCast>*/;
5250 if (varonce284) {
5251 var285 = varonce284;
5252 } else {
5253 var286 = "\n";
5254 var287 = 1;
5255 var288 = string__NativeString__to_s_with_length(var286, var287);
5256 var285 = var288;
5257 varonce284 = var285;
5258 }
5259 var289 = NEW_array__Array(&type_array__Arraykernel__Object);
5260 { /* var289 = array_instance Array[Object] */
5261 var290 = 7;
5262 var291 = NEW_array__NativeArray(var290, &type_array__NativeArraykernel__Object);
5263 ((struct instance_array__NativeArray*)var291)->values[0] = (val*) var265;
5264 ((struct instance_array__NativeArray*)var291)->values[1] = (val*) var269;
5265 ((struct instance_array__NativeArray*)var291)->values[2] = (val*) var271;
5266 ((struct instance_array__NativeArray*)var291)->values[3] = (val*) var277;
5267 ((struct instance_array__NativeArray*)var291)->values[4] = (val*) var279;
5268 ((struct instance_array__NativeArray*)var291)->values[5] = (val*) var283;
5269 ((struct instance_array__NativeArray*)var291)->values[6] = (val*) var285;
5270 ((void (*)(val*, val*, long))(var289->class->vft[COLOR_array__Array__with_native]))(var289, var291, var290) /* with_native on <var289:Array[Object]>*/;
5271 }
5272 var292 = ((val* (*)(val*))(var289->class->vft[COLOR_string__Object__to_s]))(var289) /* to_s on <var289:Array[Object]>*/;
5273 ((void (*)(val*, val*))(var263->class->vft[COLOR_template__Template__add]))(var263, var292) /* add on <var263:Template>*/;
5274 var293 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
5275 var294 = ((val* (*)(val*))(var293->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(var293) /* new_visitor on <var293:AbstractCompiler>*/;
5276 var_nitni_visitor = var294;
5277 var295 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(var_v) /* frame on <var_v:AbstractCompilerVisitor>*/;
5278 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame_61d]))(var_nitni_visitor, var295) /* frame= on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5279 var296 = NEW_array__Array(&type_array__Arraykernel__Object);
5280 var297 = 11;
5281 ((void (*)(val*, long))(var296->class->vft[COLOR_array__Array__with_capacity]))(var296, var297) /* with_capacity on <var296:Array[Object]>*/;
5282 var_298 = var296;
5283 if (varonce299) {
5284 var300 = varonce299;
5285 } else {
5286 var301 = "";
5287 var302 = 0;
5288 var303 = string__NativeString__to_s_with_length(var301, var302);
5289 var300 = var303;
5290 varonce299 = var300;
5291 }
5292 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var300) /* add on <var_298:Array[Object]>*/;
5293 var304 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__cname_blind]))(var_to) /* cname_blind on <var_to:MType>*/;
5294 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var304) /* add on <var_298:Array[Object]>*/;
5295 if (varonce305) {
5296 var306 = varonce305;
5297 } else {
5298 var307 = " ";
5299 var308 = 1;
5300 var309 = string__NativeString__to_s_with_length(var307, var308);
5301 var306 = var309;
5302 varonce305 = var306;
5303 }
5304 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var306) /* add on <var_298:Array[Object]>*/;
5305 var310 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
5306 var311 = ((val* (*)(val*))(var310->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(var310) /* mainmodule on <var310:AbstractCompiler>*/;
5307 var312 = ((val* (*)(val*))(var311->class->vft[COLOR_mmodule__MModule__name]))(var311) /* name on <var311:MModule>*/;
5308 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var312) /* add on <var_298:Array[Object]>*/;
5309 if (varonce313) {
5310 var314 = varonce313;
5311 } else {
5312 var315 = "___";
5313 var316 = 3;
5314 var317 = string__NativeString__to_s_with_length(var315, var316);
5315 var314 = var317;
5316 varonce313 = var314;
5317 }
5318 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var314) /* add on <var_298:Array[Object]>*/;
5319 var318 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_from) /* mangled_cname on <var_from:MType>*/;
5320 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var318) /* add on <var_298:Array[Object]>*/;
5321 if (varonce319) {
5322 var320 = varonce319;
5323 } else {
5324 var321 = "_as_";
5325 var322 = 4;
5326 var323 = string__NativeString__to_s_with_length(var321, var322);
5327 var320 = var323;
5328 varonce319 = var320;
5329 }
5330 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var320) /* add on <var_298:Array[Object]>*/;
5331 var324 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_to) /* mangled_cname on <var_to:MType>*/;
5332 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var324) /* add on <var_298:Array[Object]>*/;
5333 if (varonce325) {
5334 var326 = varonce325;
5335 } else {
5336 var327 = "(";
5337 var328 = 1;
5338 var329 = string__NativeString__to_s_with_length(var327, var328);
5339 var326 = var329;
5340 varonce325 = var326;
5341 }
5342 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var326) /* add on <var_298:Array[Object]>*/;
5343 var330 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__cname_blind]))(var_from) /* cname_blind on <var_from:MType>*/;
5344 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var330) /* add on <var_298:Array[Object]>*/;
5345 if (varonce331) {
5346 var332 = varonce331;
5347 } else {
5348 var333 = " from)";
5349 var334 = 6;
5350 var335 = string__NativeString__to_s_with_length(var333, var334);
5351 var332 = var335;
5352 varonce331 = var332;
5353 }
5354 ((void (*)(val*, val*))(var_298->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_298, var332) /* add on <var_298:Array[Object]>*/;
5355 var336 = ((val* (*)(val*))(var_298->class->vft[COLOR_string__Object__to_s]))(var_298) /* to_s on <var_298:Array[Object]>*/;
5356 var_full_internal_csignature = var336;
5357 if (varonce337) {
5358 var338 = varonce337;
5359 } else {
5360 var339 = "/* nitni cast for ";
5361 var340 = 18;
5362 var341 = string__NativeString__to_s_with_length(var339, var340);
5363 var338 = var341;
5364 varonce337 = var338;
5365 }
5366 if (varonce342) {
5367 var343 = varonce342;
5368 } else {
5369 var344 = " to ";
5370 var345 = 4;
5371 var346 = string__NativeString__to_s_with_length(var344, var345);
5372 var343 = var346;
5373 varonce342 = var343;
5374 }
5375 if (varonce347) {
5376 var348 = varonce347;
5377 } else {
5378 var349 = " */";
5379 var350 = 3;
5380 var351 = string__NativeString__to_s_with_length(var349, var350);
5381 var348 = var351;
5382 varonce347 = var348;
5383 }
5384 var352 = NEW_array__Array(&type_array__Arraykernel__Object);
5385 { /* var352 = array_instance Array[Object] */
5386 var353 = 5;
5387 var354 = NEW_array__NativeArray(var353, &type_array__NativeArraykernel__Object);
5388 ((struct instance_array__NativeArray*)var354)->values[0] = (val*) var338;
5389 ((struct instance_array__NativeArray*)var354)->values[1] = (val*) var_from;
5390 ((struct instance_array__NativeArray*)var354)->values[2] = (val*) var343;
5391 ((struct instance_array__NativeArray*)var354)->values[3] = (val*) var_to;
5392 ((struct instance_array__NativeArray*)var354)->values[4] = (val*) var348;
5393 ((void (*)(val*, val*, long))(var352->class->vft[COLOR_array__Array__with_native]))(var352, var354, var353) /* with_native on <var352:Array[Object]>*/;
5394 }
5395 var355 = ((val* (*)(val*))(var352->class->vft[COLOR_string__Object__to_s]))(var352) /* to_s on <var352:Array[Object]>*/;
5396 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_nitni_visitor, var355) /* add_decl on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5397 if (varonce356) {
5398 var357 = varonce356;
5399 } else {
5400 var358 = " {";
5401 var359 = 2;
5402 var360 = string__NativeString__to_s_with_length(var358, var359);
5403 var357 = var360;
5404 varonce356 = var357;
5405 }
5406 var361 = NEW_array__Array(&type_array__Arraykernel__Object);
5407 { /* var361 = array_instance Array[Object] */
5408 var362 = 2;
5409 var363 = NEW_array__NativeArray(var362, &type_array__NativeArraykernel__Object);
5410 ((struct instance_array__NativeArray*)var363)->values[0] = (val*) var_full_internal_csignature;
5411 ((struct instance_array__NativeArray*)var363)->values[1] = (val*) var357;
5412 ((void (*)(val*, val*, long))(var361->class->vft[COLOR_array__Array__with_native]))(var361, var363, var362) /* with_native on <var361:Array[Object]>*/;
5413 }
5414 var364 = ((val* (*)(val*))(var361->class->vft[COLOR_string__Object__to_s]))(var361) /* to_s on <var361:Array[Object]>*/;
5415 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_nitni_visitor, var364) /* add_decl on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5416 if (varonce365) {
5417 var366 = varonce365;
5418 } else {
5419 var367 = "from";
5420 var368 = 4;
5421 var369 = string__NativeString__to_s_with_length(var367, var368);
5422 var366 = var369;
5423 varonce365 = var366;
5424 }
5425 var370 = ((val* (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_compiler_ffi__AbstractCompilerVisitor__var_from_c]))(var_nitni_visitor, var366, var_from) /* var_from_c on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5426 var_from_var = var370;
5427 if (varonce371) {
5428 var372 = varonce371;
5429 } else {
5430 var373 = "FFI cast";
5431 var374 = 8;
5432 var375 = string__NativeString__to_s_with_length(var373, var374);
5433 var372 = var375;
5434 varonce371 = var372;
5435 }
5436 var376 = ((val* (*)(val*, val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__type_test]))(var_nitni_visitor, var_from_var, var_to, var372) /* type_test on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5437 var_check = var376;
5438 if (varonce377) {
5439 var378 = varonce377;
5440 } else {
5441 var379 = "if (!";
5442 var380 = 5;
5443 var381 = string__NativeString__to_s_with_length(var379, var380);
5444 var378 = var381;
5445 varonce377 = var378;
5446 }
5447 if (varonce382) {
5448 var383 = varonce382;
5449 } else {
5450 var384 = ") {";
5451 var385 = 3;
5452 var386 = string__NativeString__to_s_with_length(var384, var385);
5453 var383 = var386;
5454 varonce382 = var383;
5455 }
5456 var387 = NEW_array__Array(&type_array__Arraykernel__Object);
5457 { /* var387 = array_instance Array[Object] */
5458 var388 = 3;
5459 var389 = NEW_array__NativeArray(var388, &type_array__NativeArraykernel__Object);
5460 ((struct instance_array__NativeArray*)var389)->values[0] = (val*) var378;
5461 ((struct instance_array__NativeArray*)var389)->values[1] = (val*) var_check;
5462 ((struct instance_array__NativeArray*)var389)->values[2] = (val*) var383;
5463 ((void (*)(val*, val*, long))(var387->class->vft[COLOR_array__Array__with_native]))(var387, var389, var388) /* with_native on <var387:Array[Object]>*/;
5464 }
5465 var390 = ((val* (*)(val*))(var387->class->vft[COLOR_string__Object__to_s]))(var387) /* to_s on <var387:Array[Object]>*/;
5466 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var390) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5467 if (varonce391) {
5468 var392 = varonce391;
5469 } else {
5470 var393 = "FFI cast failed";
5471 var394 = 15;
5472 var395 = string__NativeString__to_s_with_length(var393, var394);
5473 var392 = var395;
5474 varonce391 = var392;
5475 }
5476 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(var_nitni_visitor, var392) /* add_abort on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5477 if (varonce396) {
5478 var397 = varonce396;
5479 } else {
5480 var398 = "}";
5481 var399 = 1;
5482 var400 = string__NativeString__to_s_with_length(var398, var399);
5483 var397 = var400;
5484 varonce396 = var397;
5485 }
5486 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var397) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5487 var401 = ((val* (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(var_nitni_visitor, var_from_var, var_to) /* autobox on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5488 var_recv_var = var401;
5489 ((void (*)(val*, val*, val*))(var_nitni_visitor->class->vft[COLOR_compiler_ffi__AbstractCompilerVisitor__ret_to_c]))(var_nitni_visitor, var_recv_var, var_to) /* ret_to_c on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5490 if (varonce402) {
5491 var403 = varonce402;
5492 } else {
5493 var404 = "}";
5494 var405 = 1;
5495 var406 = string__NativeString__to_s_with_length(var404, var405);
5496 var403 = var406;
5497 varonce402 = var403;
5498 }
5499 ((void (*)(val*, val*))(var_nitni_visitor->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_nitni_visitor, var403) /* add on <var_nitni_visitor:AbstractCompilerVisitor>*/;
5500 var407 = ((val* (*)(val*))(var_from->class->vft[COLOR_model__MType__as_nullable]))(var_from) /* as_nullable on <var_from:MType>*/;
5501 var408 = ((short int (*)(val*, val*))(var407->class->vft[COLOR_kernel__Object___61d_61d]))(var407, var_to) /* == on <var407:MType>*/;
5502 if (var408){
5503 var409 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
5504 if (varonce410) {
5505 var411 = varonce410;
5506 } else {
5507 var412 = "#define ";
5508 var413 = 8;
5509 var414 = string__NativeString__to_s_with_length(var412, var413);
5510 var411 = var414;
5511 varonce410 = var411;
5512 }
5513 var415 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_from) /* mangled_cname on <var_from:MType>*/;
5514 if (varonce416) {
5515 var417 = varonce416;
5516 } else {
5517 var418 = "_as_nullable ";
5518 var419 = 13;
5519 var420 = string__NativeString__to_s_with_length(var418, var419);
5520 var417 = var420;
5521 varonce416 = var417;
5522 }
5523 var421 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_from) /* mangled_cname on <var_from:MType>*/;
5524 if (varonce422) {
5525 var423 = varonce422;
5526 } else {
5527 var424 = "_as_";
5528 var425 = 4;
5529 var426 = string__NativeString__to_s_with_length(var424, var425);
5530 var423 = var426;
5531 varonce422 = var423;
5532 }
5533 var427 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_to) /* mangled_cname on <var_to:MType>*/;
5534 if (varonce428) {
5535 var429 = varonce428;
5536 } else {
5537 var430 = "\n";
5538 var431 = 1;
5539 var432 = string__NativeString__to_s_with_length(var430, var431);
5540 var429 = var432;
5541 varonce428 = var429;
5542 }
5543 var433 = NEW_array__Array(&type_array__Arraykernel__Object);
5544 { /* var433 = array_instance Array[Object] */
5545 var434 = 7;
5546 var435 = NEW_array__NativeArray(var434, &type_array__NativeArraykernel__Object);
5547 ((struct instance_array__NativeArray*)var435)->values[0] = (val*) var411;
5548 ((struct instance_array__NativeArray*)var435)->values[1] = (val*) var415;
5549 ((struct instance_array__NativeArray*)var435)->values[2] = (val*) var417;
5550 ((struct instance_array__NativeArray*)var435)->values[3] = (val*) var421;
5551 ((struct instance_array__NativeArray*)var435)->values[4] = (val*) var423;
5552 ((struct instance_array__NativeArray*)var435)->values[5] = (val*) var427;
5553 ((struct instance_array__NativeArray*)var435)->values[6] = (val*) var429;
5554 ((void (*)(val*, val*, long))(var433->class->vft[COLOR_array__Array__with_native]))(var433, var435, var434) /* with_native on <var433:Array[Object]>*/;
5555 }
5556 var436 = ((val* (*)(val*))(var433->class->vft[COLOR_string__Object__to_s]))(var433) /* to_s on <var433:Array[Object]>*/;
5557 ((void (*)(val*, val*))(var409->class->vft[COLOR_template__Template__add]))(var409, var436) /* add on <var409:Template>*/;
5558 } else {
5559 }
5560 var437 = ((val* (*)(val*))(var_to->class->vft[COLOR_model__MType__as_nullable]))(var_to) /* as_nullable on <var_to:MType>*/;
5561 var438 = ((short int (*)(val*, val*))(var_from->class->vft[COLOR_kernel__Object___61d_61d]))(var_from, var437) /* == on <var_from:MType>*/;
5562 if (var438){
5563 var439 = ((val* (*)(val*))(var_ccu->class->vft[COLOR_c_tools__CCompilationUnit__header_decl]))(var_ccu) /* header_decl on <var_ccu:CCompilationUnit>*/;
5564 if (varonce440) {
5565 var441 = varonce440;
5566 } else {
5567 var442 = "#define ";
5568 var443 = 8;
5569 var444 = string__NativeString__to_s_with_length(var442, var443);
5570 var441 = var444;
5571 varonce440 = var441;
5572 }
5573 var445 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_to) /* mangled_cname on <var_to:MType>*/;
5574 if (varonce446) {
5575 var447 = varonce446;
5576 } else {
5577 var448 = "_as_not_nullable ";
5578 var449 = 17;
5579 var450 = string__NativeString__to_s_with_length(var448, var449);
5580 var447 = var450;
5581 varonce446 = var447;
5582 }
5583 var451 = ((val* (*)(val*))(var_from->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_from) /* mangled_cname on <var_from:MType>*/;
5584 if (varonce452) {
5585 var453 = varonce452;
5586 } else {
5587 var454 = "_as_";
5588 var455 = 4;
5589 var456 = string__NativeString__to_s_with_length(var454, var455);
5590 var453 = var456;
5591 varonce452 = var453;
5592 }
5593 var457 = ((val* (*)(val*))(var_to->class->vft[COLOR_nitni_base__MType__mangled_cname]))(var_to) /* mangled_cname on <var_to:MType>*/;
5594 if (varonce458) {
5595 var459 = varonce458;
5596 } else {
5597 var460 = "\n";
5598 var461 = 1;
5599 var462 = string__NativeString__to_s_with_length(var460, var461);
5600 var459 = var462;
5601 varonce458 = var459;
5602 }
5603 var463 = NEW_array__Array(&type_array__Arraykernel__Object);
5604 { /* var463 = array_instance Array[Object] */
5605 var464 = 7;
5606 var465 = NEW_array__NativeArray(var464, &type_array__NativeArraykernel__Object);
5607 ((struct instance_array__NativeArray*)var465)->values[0] = (val*) var441;
5608 ((struct instance_array__NativeArray*)var465)->values[1] = (val*) var445;
5609 ((struct instance_array__NativeArray*)var465)->values[2] = (val*) var447;
5610 ((struct instance_array__NativeArray*)var465)->values[3] = (val*) var451;
5611 ((struct instance_array__NativeArray*)var465)->values[4] = (val*) var453;
5612 ((struct instance_array__NativeArray*)var465)->values[5] = (val*) var457;
5613 ((struct instance_array__NativeArray*)var465)->values[6] = (val*) var459;
5614 ((void (*)(val*, val*, long))(var463->class->vft[COLOR_array__Array__with_native]))(var463, var465, var464) /* with_native on <var463:Array[Object]>*/;
5615 }
5616 var466 = ((val* (*)(val*))(var463->class->vft[COLOR_string__Object__to_s]))(var463) /* to_s on <var463:Array[Object]>*/;
5617 ((void (*)(val*, val*))(var439->class->vft[COLOR_template__Template__add]))(var439, var466) /* add on <var439:Template>*/;
5618 } else {
5619 }
5620 RET_LABEL:;
5621 }
5622 /* method compiler_ffi#MExplicitCast#compile_extern_callbacks for (self: Object, AbstractCompilerVisitor, CCompilationUnit) */
5623 void VIRTUAL_compiler_ffi__MExplicitCast__compile_extern_callbacks(val* self, val* p0, val* p1) {
5624 compiler_ffi__MExplicitCast__compile_extern_callbacks(self, p0, p1);
5625 RET_LABEL:;
5626 }