README: Update libgc's URL
[nit.git] / c_src / nitc__extern_classes.sep.1.c
1 #include "nitc__extern_classes.sep.0.h"
2 /* method extern_classes#ToolContext#extern_classes_typing_phase_ast for (self: ToolContext): Phase */
3 val* nitc__extern_classes___ToolContext___extern_classes_typing_phase_ast(val* self) {
4 val* var /* : Phase */;
5 val* var1 /* : Phase */;
6 var1 = self->attrs[COLOR_nitc__extern_classes__ToolContext___extern_classes_typing_phase_ast].val; /* _extern_classes_typing_phase_ast on <self:ToolContext> */
7 if (unlikely(var1 == NULL)) {
8 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _extern_classes_typing_phase_ast");
9 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__extern_classes, 24);
10 fatal_exit(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method extern_classes#ExternClassesTypingPhaseAst#process_nclassdef for (self: ExternClassesTypingPhaseAst, AClassdef) */
17 void nitc__extern_classes___nitc__extern_classes__ExternClassesTypingPhaseAst___nitc__phase__Phase__process_nclassdef(val* self, val* p0) {
18 val* var_nclassdef /* var nclassdef: AClassdef */;
19 short int var /* : Bool */;
20 int cltype;
21 int idtype;
22 short int var1 /* : Bool */;
23 val* var2 /* : nullable AExternCodeBlock */;
24 val* var4 /* : nullable AExternCodeBlock */;
25 val* var_code_block /* var code_block: nullable AExternCodeBlock */;
26 short int var5 /* : Bool */;
27 short int var6 /* : Bool */;
28 val* var_other /* var other: nullable Object */;
29 short int var8 /* : Bool */;
30 short int var10 /* : Bool */;
31 val* var11 /* : nullable TKwredef */;
32 val* var13 /* : nullable TKwredef */;
33 short int var14 /* : Bool */;
34 short int var15 /* : Bool */;
35 val* var_other17 /* var other: nullable Object */;
36 short int var18 /* : Bool */;
37 short int var19 /* : Bool */;
38 val* var20 /* : ToolContext */;
39 val* var22 /* : ToolContext */;
40 val* var23 /* : Location */;
41 val* var25 /* : Location */;
42 static val* varonce;
43 val* var26 /* : String */;
44 char* var27 /* : NativeString */;
45 val* var28 /* : String */;
46 val* var29 /* : Message */;
47 val* var30 /* : nullable FFILanguage */;
48 val* var32 /* : nullable FFILanguage */;
49 val* var33 /* : ForeignType */;
50 val* var_ftype /* var ftype: ForeignType */;
51 val* var34 /* : nullable MClassDef */;
52 val* var36 /* : nullable MClassDef */;
53 val* var38 /* : nullable MClassDef */;
54 val* var40 /* : nullable MClassDef */;
55 var_nclassdef = p0;
56 /* <var_nclassdef:AClassdef> isa AStdClassdef */
57 cltype = type_nitc__AStdClassdef.color;
58 idtype = type_nitc__AStdClassdef.id;
59 if(cltype >= var_nclassdef->type->table_size) {
60 var = 0;
61 } else {
62 var = var_nclassdef->type->type_table[cltype] == idtype;
63 }
64 var1 = !var;
65 if (var1){
66 goto RET_LABEL;
67 } else {
68 }
69 {
70 { /* Inline parser_nodes#AStdClassdef#n_extern_code_block (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
71 var4 = var_nclassdef->attrs[COLOR_nitc__parser_nodes__AStdClassdef___n_extern_code_block].val; /* _n_extern_code_block on <var_nclassdef:AClassdef(AStdClassdef)> */
72 var2 = var4;
73 RET_LABEL3:(void)0;
74 }
75 }
76 var_code_block = var2;
77 if (var_code_block == NULL) {
78 var5 = 1; /* is null */
79 } else {
80 var5 = 0; /* arg is null but recv is not */
81 }
82 if (0) {
83 { /* Inline kernel#Object#== (var_code_block,((val*)NULL)) on <var_code_block:nullable AExternCodeBlock> */
84 var_other = ((val*)NULL);
85 {
86 { /* Inline kernel#Object#is_same_instance (var_code_block,var_other) on <var_code_block:nullable AExternCodeBlock(AExternCodeBlock)> */
87 var10 = var_code_block == var_other;
88 var8 = var10;
89 goto RET_LABEL9;
90 RET_LABEL9:(void)0;
91 }
92 }
93 var6 = var8;
94 goto RET_LABEL7;
95 RET_LABEL7:(void)0;
96 }
97 var5 = var6;
98 }
99 if (var5){
100 goto RET_LABEL;
101 } else {
102 }
103 {
104 { /* Inline parser_nodes#ADefinition#n_kwredef (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
105 var13 = var_nclassdef->attrs[COLOR_nitc__parser_nodes__ADefinition___n_kwredef].val; /* _n_kwredef on <var_nclassdef:AClassdef(AStdClassdef)> */
106 var11 = var13;
107 RET_LABEL12:(void)0;
108 }
109 }
110 if (var11 == NULL) {
111 var14 = 0; /* is null */
112 } else {
113 var14 = 1; /* arg is null and recv is not */
114 }
115 if (0) {
116 { /* Inline kernel#Object#!= (var11,((val*)NULL)) on <var11:nullable TKwredef> */
117 var_other17 = ((val*)NULL);
118 {
119 var18 = ((short int(*)(val* self, val* p0))(var11->class->vft[COLOR_core__kernel__Object___61d_61d]))(var11, var_other17); /* == on <var11:nullable TKwredef(TKwredef)>*/
120 }
121 var19 = !var18;
122 var15 = var19;
123 goto RET_LABEL16;
124 RET_LABEL16:(void)0;
125 }
126 var14 = var15;
127 }
128 if (var14){
129 {
130 { /* Inline phase#Phase#toolcontext (self) on <self:ExternClassesTypingPhaseAst> */
131 var22 = self->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <self:ExternClassesTypingPhaseAst> */
132 if (unlikely(var22 == NULL)) {
133 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
134 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 200);
135 fatal_exit(1);
136 }
137 var20 = var22;
138 RET_LABEL21:(void)0;
139 }
140 }
141 {
142 { /* Inline parser_nodes#ANode#location (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
143 var25 = var_nclassdef->attrs[COLOR_nitc__parser_nodes__ANode___location].val; /* _location on <var_nclassdef:AClassdef(AStdClassdef)> */
144 if (unlikely(var25 == NULL)) {
145 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
146 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__parser_nodes, 24);
147 fatal_exit(1);
148 }
149 var23 = var25;
150 RET_LABEL24:(void)0;
151 }
152 }
153 if (likely(varonce!=NULL)) {
154 var26 = varonce;
155 } else {
156 var27 = "FFI Error: only the introduction of a class can declare an extern type.";
157 var28 = core__flat___NativeString___to_s_full(var27, 71l, 71l);
158 var26 = var28;
159 varonce = var26;
160 }
161 {
162 var29 = nitc___nitc__ToolContext___error(var20, var23, var26);
163 }
164 goto RET_LABEL;
165 } else {
166 }
167 {
168 { /* Inline light_ffi_base#AExternCodeBlock#language (var_code_block) on <var_code_block:nullable AExternCodeBlock(AExternCodeBlock)> */
169 var32 = var_code_block->attrs[COLOR_nitc__light_ffi_base__AExternCodeBlock___language].val; /* _language on <var_code_block:nullable AExternCodeBlock(AExternCodeBlock)> */
170 var30 = var32;
171 RET_LABEL31:(void)0;
172 }
173 }
174 if (var30 == NULL) {
175 PRINT_ERROR("Runtime error: %s", "Receiver is null");
176 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__extern_classes, 47);
177 fatal_exit(1);
178 } else {
179 var33 = nitc___nitc__CLanguage___nitc__light_ffi_base__FFILanguage__get_ftype(var30, var_code_block, var_nclassdef);
180 }
181 var_ftype = var33;
182 {
183 { /* Inline modelize_class#AClassdef#mclassdef (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
184 var36 = var_nclassdef->attrs[COLOR_nitc__modelize_class__AClassdef___mclassdef].val; /* _mclassdef on <var_nclassdef:AClassdef(AStdClassdef)> */
185 var34 = var36;
186 RET_LABEL35:(void)0;
187 }
188 }
189 if (var34 == NULL) {
190 PRINT_ERROR("Runtime error: %s", "Receiver is null");
191 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__extern_classes, 48);
192 fatal_exit(1);
193 } else {
194 { /* Inline extern_classes#MClassDef#ftype_cache= (var34,var_ftype) on <var34:nullable MClassDef> */
195 if (unlikely(var34 == NULL)) {
196 PRINT_ERROR("Runtime error: %s", "Receiver is null");
197 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__extern_classes, 54);
198 fatal_exit(1);
199 }
200 var34->attrs[COLOR_nitc__extern_classes__MClassDef___ftype_cache].val = var_ftype; /* _ftype_cache on <var34:nullable MClassDef> */
201 RET_LABEL37:(void)0;
202 }
203 }
204 {
205 { /* Inline modelize_class#AClassdef#mclassdef (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
206 var40 = var_nclassdef->attrs[COLOR_nitc__modelize_class__AClassdef___mclassdef].val; /* _mclassdef on <var_nclassdef:AClassdef(AStdClassdef)> */
207 var38 = var40;
208 RET_LABEL39:(void)0;
209 }
210 }
211 if (var38 == NULL) {
212 PRINT_ERROR("Runtime error: %s", "Receiver is null");
213 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__extern_classes, 49);
214 fatal_exit(1);
215 } else {
216 { /* Inline extern_classes#MClassDef#ftype_computed= (var38,1) on <var38:nullable MClassDef> */
217 if (unlikely(var38 == NULL)) {
218 PRINT_ERROR("Runtime error: %s", "Receiver is null");
219 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__extern_classes, 55);
220 fatal_exit(1);
221 }
222 var38->attrs[COLOR_nitc__extern_classes__MClassDef___ftype_computed].s = 1; /* _ftype_computed on <var38:nullable MClassDef> */
223 RET_LABEL41:(void)0;
224 }
225 }
226 RET_LABEL:;
227 }
228 /* method extern_classes#MClassDef#ftype_cache for (self: MClassDef): nullable ForeignType */
229 val* nitc__extern_classes___MClassDef___ftype_cache(val* self) {
230 val* var /* : nullable ForeignType */;
231 val* var1 /* : nullable ForeignType */;
232 var1 = self->attrs[COLOR_nitc__extern_classes__MClassDef___ftype_cache].val; /* _ftype_cache on <self:MClassDef> */
233 var = var1;
234 RET_LABEL:;
235 return var;
236 }
237 /* method extern_classes#MClassDef#ftype_cache= for (self: MClassDef, nullable ForeignType) */
238 void nitc__extern_classes___MClassDef___ftype_cache_61d(val* self, val* p0) {
239 self->attrs[COLOR_nitc__extern_classes__MClassDef___ftype_cache].val = p0; /* _ftype_cache on <self:MClassDef> */
240 RET_LABEL:;
241 }
242 /* method extern_classes#MClassDef#ftype_computed= for (self: MClassDef, Bool) */
243 void nitc__extern_classes___MClassDef___ftype_computed_61d(val* self, short int p0) {
244 self->attrs[COLOR_nitc__extern_classes__MClassDef___ftype_computed].s = p0; /* _ftype_computed on <self:MClassDef> */
245 RET_LABEL:;
246 }
247 /* method extern_classes#MClassDef#ftype for (self: MClassDef): nullable ForeignType */
248 val* nitc__extern_classes___MClassDef___ftype(val* self) {
249 val* var /* : nullable ForeignType */;
250 val* var1 /* : nullable ForeignType */;
251 val* var3 /* : nullable ForeignType */;
252 {
253 { /* Inline extern_classes#MClassDef#ftype_cache (self) on <self:MClassDef> */
254 var3 = self->attrs[COLOR_nitc__extern_classes__MClassDef___ftype_cache].val; /* _ftype_cache on <self:MClassDef> */
255 var1 = var3;
256 RET_LABEL2:(void)0;
257 }
258 }
259 var = var1;
260 goto RET_LABEL;
261 RET_LABEL:;
262 return var;
263 }
264 /* method extern_classes#ExternClassesTypingPhaseModel#process_nclassdef for (self: ExternClassesTypingPhaseModel, AClassdef) */
265 void nitc__extern_classes___nitc__extern_classes__ExternClassesTypingPhaseModel___nitc__phase__Phase__process_nclassdef(val* self, val* p0) {
266 val* var_nclassdef /* var nclassdef: AClassdef */;
267 short int var /* : Bool */;
268 int cltype;
269 int idtype;
270 short int var1 /* : Bool */;
271 val* var2 /* : nullable MClassDef */;
272 val* var4 /* : nullable MClassDef */;
273 val* var_mclassdef /* var mclassdef: nullable MClassDef */;
274 short int var5 /* : Bool */;
275 short int var6 /* : Bool */;
276 val* var_other /* var other: nullable Object */;
277 short int var8 /* : Bool */;
278 short int var10 /* : Bool */;
279 val* var11 /* : MClass */;
280 val* var13 /* : MClass */;
281 val* var_mclass /* var mclass: MClass */;
282 short int var14 /* : Bool */;
283 short int var15 /* : Bool */;
284 val* var16 /* : MClassKind */;
285 val* var18 /* : MClassKind */;
286 val* var19 /* : Sys */;
287 val* var20 /* : MClassKind */;
288 short int var21 /* : Bool */;
289 val* var_other23 /* var other: nullable Object */;
290 short int var24 /* : Bool */;
291 short int var25 /* : Bool */;
292 val* var26 /* : nullable ForeignType */;
293 var_nclassdef = p0;
294 /* <var_nclassdef:AClassdef> isa AStdClassdef */
295 cltype = type_nitc__AStdClassdef.color;
296 idtype = type_nitc__AStdClassdef.id;
297 if(cltype >= var_nclassdef->type->table_size) {
298 var = 0;
299 } else {
300 var = var_nclassdef->type->type_table[cltype] == idtype;
301 }
302 var1 = !var;
303 if (var1){
304 goto RET_LABEL;
305 } else {
306 }
307 {
308 { /* Inline modelize_class#AClassdef#mclassdef (var_nclassdef) on <var_nclassdef:AClassdef(AStdClassdef)> */
309 var4 = var_nclassdef->attrs[COLOR_nitc__modelize_class__AClassdef___mclassdef].val; /* _mclassdef on <var_nclassdef:AClassdef(AStdClassdef)> */
310 var2 = var4;
311 RET_LABEL3:(void)0;
312 }
313 }
314 var_mclassdef = var2;
315 if (var_mclassdef == NULL) {
316 var5 = 1; /* is null */
317 } else {
318 var5 = 0; /* arg is null but recv is not */
319 }
320 if (0) {
321 { /* Inline kernel#Object#== (var_mclassdef,((val*)NULL)) on <var_mclassdef:nullable MClassDef> */
322 var_other = ((val*)NULL);
323 {
324 { /* Inline kernel#Object#is_same_instance (var_mclassdef,var_other) on <var_mclassdef:nullable MClassDef(MClassDef)> */
325 var10 = var_mclassdef == var_other;
326 var8 = var10;
327 goto RET_LABEL9;
328 RET_LABEL9:(void)0;
329 }
330 }
331 var6 = var8;
332 goto RET_LABEL7;
333 RET_LABEL7:(void)0;
334 }
335 var5 = var6;
336 }
337 if (var5){
338 goto RET_LABEL;
339 } else {
340 }
341 {
342 { /* Inline model#MClassDef#mclass (var_mclassdef) on <var_mclassdef:nullable MClassDef(MClassDef)> */
343 var13 = var_mclassdef->attrs[COLOR_nitc__model__MClassDef___mclass].val; /* _mclass on <var_mclassdef:nullable MClassDef(MClassDef)> */
344 if (unlikely(var13 == NULL)) {
345 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
346 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 576);
347 fatal_exit(1);
348 }
349 var11 = var13;
350 RET_LABEL12:(void)0;
351 }
352 }
353 var_mclass = var11;
354 {
355 var14 = nitc___nitc__MClassDef___is_intro(var_mclassdef);
356 }
357 var15 = !var14;
358 if (var15){
359 goto RET_LABEL;
360 } else {
361 }
362 {
363 { /* Inline model#MClass#kind (var_mclass) on <var_mclass:MClass> */
364 var18 = var_mclass->attrs[COLOR_nitc__model__MClass___kind].val; /* _kind on <var_mclass:MClass> */
365 if (unlikely(var18 == NULL)) {
366 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
367 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 459);
368 fatal_exit(1);
369 }
370 var16 = var18;
371 RET_LABEL17:(void)0;
372 }
373 }
374 var19 = glob_sys;
375 {
376 var20 = nitc__model___core__Sys___extern_kind(var19);
377 }
378 {
379 { /* Inline kernel#Object#!= (var16,var20) on <var16:MClassKind> */
380 var_other23 = var20;
381 {
382 var24 = ((short int(*)(val* self, val* p0))(var16->class->vft[COLOR_core__kernel__Object___61d_61d]))(var16, var_other23); /* == on <var16:MClassKind>*/
383 }
384 var25 = !var24;
385 var21 = var25;
386 goto RET_LABEL22;
387 RET_LABEL22:(void)0;
388 }
389 }
390 if (var21){
391 goto RET_LABEL;
392 } else {
393 }
394 {
395 var26 = nitc__extern_classes___MClass___compute_ftype(var_mclass, self);
396 }
397 RET_LABEL:;
398 }
399 /* method extern_classes#MClass#ftype_cache for (self: MClass): nullable ForeignType */
400 val* nitc__extern_classes___MClass___ftype_cache(val* self) {
401 val* var /* : nullable ForeignType */;
402 val* var1 /* : nullable ForeignType */;
403 var1 = self->attrs[COLOR_nitc__extern_classes__MClass___ftype_cache].val; /* _ftype_cache on <self:MClass> */
404 var = var1;
405 RET_LABEL:;
406 return var;
407 }
408 /* method extern_classes#MClass#ftype_cache= for (self: MClass, nullable ForeignType) */
409 void nitc__extern_classes___MClass___ftype_cache_61d(val* self, val* p0) {
410 self->attrs[COLOR_nitc__extern_classes__MClass___ftype_cache].val = p0; /* _ftype_cache on <self:MClass> */
411 RET_LABEL:;
412 }
413 /* method extern_classes#MClass#ftype_computed for (self: MClass): Bool */
414 short int nitc__extern_classes___MClass___ftype_computed(val* self) {
415 short int var /* : Bool */;
416 short int var1 /* : Bool */;
417 var1 = self->attrs[COLOR_nitc__extern_classes__MClass___ftype_computed].s; /* _ftype_computed on <self:MClass> */
418 var = var1;
419 RET_LABEL:;
420 return var;
421 }
422 /* method extern_classes#MClass#ftype_computed= for (self: MClass, Bool) */
423 void nitc__extern_classes___MClass___ftype_computed_61d(val* self, short int p0) {
424 self->attrs[COLOR_nitc__extern_classes__MClass___ftype_computed].s = p0; /* _ftype_computed on <self:MClass> */
425 RET_LABEL:;
426 }
427 /* method extern_classes#MClass#ctype for (self: MClass): nullable String */
428 val* nitc__extern_classes___MClass___ctype(val* self) {
429 val* var /* : nullable String */;
430 val* var1 /* : nullable ForeignType */;
431 val* var3 /* : nullable ForeignType */;
432 val* var4 /* : String */;
433 {
434 { /* Inline extern_classes#MClass#ftype_cache (self) on <self:MClass> */
435 var3 = self->attrs[COLOR_nitc__extern_classes__MClass___ftype_cache].val; /* _ftype_cache on <self:MClass> */
436 var1 = var3;
437 RET_LABEL2:(void)0;
438 }
439 }
440 if (var1 == NULL) {
441 PRINT_ERROR("Runtime error: %s", "Receiver is null");
442 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__extern_classes, 91);
443 fatal_exit(1);
444 } else {
445 var4 = ((val*(*)(val* self))(var1->class->vft[COLOR_nitc__light_ffi_base__ForeignType__ctype]))(var1); /* ctype on <var1:nullable ForeignType>*/
446 }
447 var = var4;
448 goto RET_LABEL;
449 RET_LABEL:;
450 return var;
451 }
452 /* method extern_classes#MClass#compute_ftype for (self: MClass, ExternClassesTypingPhaseModel): nullable ForeignType */
453 val* nitc__extern_classes___MClass___compute_ftype(val* self, val* p0) {
454 val* var /* : nullable ForeignType */;
455 val* var_v /* var v: ExternClassesTypingPhaseModel */;
456 short int var1 /* : Bool */;
457 short int var3 /* : Bool */;
458 val* var4 /* : nullable ForeignType */;
459 val* var6 /* : nullable ForeignType */;
460 val* var7 /* : MClassKind */;
461 val* var9 /* : MClassKind */;
462 val* var10 /* : Sys */;
463 val* var11 /* : MClassKind */;
464 short int var12 /* : Bool */;
465 val* var_other /* var other: nullable Object */;
466 short int var14 /* : Bool */;
467 short int var15 /* : Bool */;
468 val* var16 /* : String */;
469 val* var18 /* : String */;
470 static val* varonce;
471 val* var19 /* : String */;
472 char* var20 /* : NativeString */;
473 val* var21 /* : String */;
474 short int var22 /* : Bool */;
475 val* var23 /* : ForeignType */;
476 val* var26 /* : nullable ForeignType */;
477 val* var28 /* : nullable ForeignType */;
478 val* var29 /* : MClassDef */;
479 val* var31 /* : MClassDef */;
480 val* var32 /* : nullable ForeignType */;
481 val* var_ftype /* var ftype: nullable ForeignType */;
482 short int var33 /* : Bool */;
483 short int var34 /* : Bool */;
484 val* var_other36 /* var other: nullable Object */;
485 short int var37 /* : Bool */;
486 short int var39 /* : Bool */;
487 val* var_ftype_b /* var ftype_b: nullable ForeignType */;
488 val* var40 /* : MModule */;
489 val* var42 /* : MModule */;
490 val* var43 /* : POSetElement[MClass] */;
491 val* var44 /* : Collection[nullable Object] */;
492 val* var_ /* var : Collection[MClass] */;
493 val* var45 /* : Iterator[nullable Object] */;
494 val* var_46 /* var : Iterator[MClass] */;
495 short int var47 /* : Bool */;
496 val* var48 /* : nullable Object */;
497 val* var_s /* var s: MClass */;
498 val* var49 /* : nullable ForeignType */;
499 val* var_super_ftype /* var super_ftype: nullable ForeignType */;
500 short int var50 /* : Bool */;
501 short int var51 /* : Bool */;
502 short int var53 /* : Bool */;
503 short int var54 /* : Bool */;
504 short int var55 /* : Bool */;
505 short int var56 /* : Bool */;
506 short int var58 /* : Bool */;
507 short int var60 /* : Bool */;
508 short int var62 /* : Bool */;
509 short int var64 /* : Bool */;
510 short int var65 /* : Bool */;
511 val* var66 /* : ToolContext */;
512 val* var68 /* : ToolContext */;
513 val* var70 /* : NativeArray[String] */;
514 static val* varonce69;
515 static val* varonce71;
516 val* var72 /* : String */;
517 char* var73 /* : NativeString */;
518 val* var74 /* : String */;
519 static val* varonce75;
520 val* var76 /* : String */;
521 char* var77 /* : NativeString */;
522 val* var78 /* : String */;
523 val* var79 /* : String */;
524 val* var80 /* : String */;
525 val* var81 /* : Message */;
526 var_v = p0;
527 {
528 { /* Inline extern_classes#MClass#ftype_computed (self) on <self:MClass> */
529 var3 = self->attrs[COLOR_nitc__extern_classes__MClass___ftype_computed].s; /* _ftype_computed on <self:MClass> */
530 var1 = var3;
531 RET_LABEL2:(void)0;
532 }
533 }
534 if (var1){
535 {
536 { /* Inline extern_classes#MClass#ftype_cache (self) on <self:MClass> */
537 var6 = self->attrs[COLOR_nitc__extern_classes__MClass___ftype_cache].val; /* _ftype_cache on <self:MClass> */
538 var4 = var6;
539 RET_LABEL5:(void)0;
540 }
541 }
542 var = var4;
543 goto RET_LABEL;
544 } else {
545 }
546 {
547 { /* Inline model#MClass#kind (self) on <self:MClass> */
548 var9 = self->attrs[COLOR_nitc__model__MClass___kind].val; /* _kind on <self:MClass> */
549 if (unlikely(var9 == NULL)) {
550 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
551 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 459);
552 fatal_exit(1);
553 }
554 var7 = var9;
555 RET_LABEL8:(void)0;
556 }
557 }
558 var10 = glob_sys;
559 {
560 var11 = nitc__model___core__Sys___extern_kind(var10);
561 }
562 {
563 { /* Inline kernel#Object#!= (var7,var11) on <var7:MClassKind> */
564 var_other = var11;
565 {
566 var14 = ((short int(*)(val* self, val* p0))(var7->class->vft[COLOR_core__kernel__Object___61d_61d]))(var7, var_other); /* == on <var7:MClassKind>*/
567 }
568 var15 = !var14;
569 var12 = var15;
570 goto RET_LABEL13;
571 RET_LABEL13:(void)0;
572 }
573 }
574 if (var12){
575 var = ((val*)NULL);
576 goto RET_LABEL;
577 } else {
578 }
579 {
580 { /* Inline model#MClass#name (self) on <self:MClass> */
581 var18 = self->attrs[COLOR_nitc__model__MClass___name].val; /* _name on <self:MClass> */
582 if (unlikely(var18 == NULL)) {
583 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
584 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 385);
585 fatal_exit(1);
586 }
587 var16 = var18;
588 RET_LABEL17:(void)0;
589 }
590 }
591 if (likely(varonce!=NULL)) {
592 var19 = varonce;
593 } else {
594 var20 = "Pointer";
595 var21 = core__flat___NativeString___to_s_full(var20, 7l, 7l);
596 var19 = var21;
597 varonce = var19;
598 }
599 {
600 var22 = ((short int(*)(val* self, val* p0))(var16->class->vft[COLOR_core__kernel__Object___61d_61d]))(var16, var19); /* == on <var16:String>*/
601 }
602 if (var22){
603 var23 = NEW_nitc__ForeignType(&type_nitc__ForeignType);
604 {
605 ((void(*)(val* self))(var23->class->vft[COLOR_core__kernel__Object__init]))(var23); /* init on <var23:ForeignType>*/
606 }
607 {
608 { /* Inline extern_classes#MClass#ftype_cache= (self,var23) on <self:MClass> */
609 self->attrs[COLOR_nitc__extern_classes__MClass___ftype_cache].val = var23; /* _ftype_cache on <self:MClass> */
610 RET_LABEL24:(void)0;
611 }
612 }
613 {
614 { /* Inline extern_classes#MClass#ftype_computed= (self,1) on <self:MClass> */
615 self->attrs[COLOR_nitc__extern_classes__MClass___ftype_computed].s = 1; /* _ftype_computed on <self:MClass> */
616 RET_LABEL25:(void)0;
617 }
618 }
619 {
620 { /* Inline extern_classes#MClass#ftype_cache (self) on <self:MClass> */
621 var28 = self->attrs[COLOR_nitc__extern_classes__MClass___ftype_cache].val; /* _ftype_cache on <self:MClass> */
622 var26 = var28;
623 RET_LABEL27:(void)0;
624 }
625 }
626 var = var26;
627 goto RET_LABEL;
628 } else {
629 }
630 {
631 { /* Inline model#MClass#intro (self) on <self:MClass> */
632 var31 = self->attrs[COLOR_nitc__model__MClass___intro].val; /* _intro on <self:MClass> */
633 if (unlikely(var31 == NULL)) {
634 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
635 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 483);
636 fatal_exit(1);
637 }
638 var29 = var31;
639 RET_LABEL30:(void)0;
640 }
641 }
642 {
643 var32 = nitc__extern_classes___MClassDef___ftype(var29);
644 }
645 var_ftype = var32;
646 if (var_ftype == NULL) {
647 var33 = 1; /* is null */
648 } else {
649 var33 = 0; /* arg is null but recv is not */
650 }
651 if (0) {
652 { /* Inline kernel#Object#== (var_ftype,((val*)NULL)) on <var_ftype:nullable ForeignType> */
653 var_other36 = ((val*)NULL);
654 {
655 { /* Inline kernel#Object#is_same_instance (var_ftype,var_other36) on <var_ftype:nullable ForeignType(ForeignType)> */
656 var39 = var_ftype == var_other36;
657 var37 = var39;
658 goto RET_LABEL38;
659 RET_LABEL38:(void)0;
660 }
661 }
662 var34 = var37;
663 goto RET_LABEL35;
664 RET_LABEL35:(void)0;
665 }
666 var33 = var34;
667 }
668 if (var33){
669 var_ftype_b = ((val*)NULL);
670 {
671 { /* Inline model#MClass#intro_mmodule (self) on <self:MClass> */
672 var42 = self->attrs[COLOR_nitc__model__MClass___intro_mmodule].val; /* _intro_mmodule on <self:MClass> */
673 if (unlikely(var42 == NULL)) {
674 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
675 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 380);
676 fatal_exit(1);
677 }
678 var40 = var42;
679 RET_LABEL41:(void)0;
680 }
681 }
682 {
683 var43 = nitc___nitc__MClass___in_hierarchy(self, var40);
684 }
685 {
686 var44 = poset___poset__POSetElement___direct_greaters(var43);
687 }
688 var_ = var44;
689 {
690 var45 = ((val*(*)(val* self))((((long)var_&3)?class_info[((long)var_&3)]:var_->class)->vft[COLOR_core__abstract_collection__Collection__iterator]))(var_); /* iterator on <var_:Collection[MClass]>*/
691 }
692 var_46 = var45;
693 for(;;) {
694 {
695 var47 = ((short int(*)(val* self))((((long)var_46&3)?class_info[((long)var_46&3)]:var_46->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_46); /* is_ok on <var_46:Iterator[MClass]>*/
696 }
697 if (var47){
698 } else {
699 goto BREAK_label;
700 }
701 {
702 var48 = ((val*(*)(val* self))((((long)var_46&3)?class_info[((long)var_46&3)]:var_46->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_46); /* item on <var_46:Iterator[MClass]>*/
703 }
704 var_s = var48;
705 {
706 var49 = nitc__extern_classes___MClass___compute_ftype(var_s, var_v);
707 }
708 var_super_ftype = var49;
709 if (var_super_ftype == NULL) {
710 var50 = 0; /* is null */
711 } else {
712 var50 = 1; /* arg is null and recv is not */
713 }
714 if (0) {
715 { /* Inline kernel#Object#!= (var_super_ftype,((val*)NULL)) on <var_super_ftype:nullable ForeignType> */
716 var_other = ((val*)NULL);
717 {
718 var53 = ((short int(*)(val* self, val* p0))(var_super_ftype->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_super_ftype, var_other); /* == on <var_super_ftype:nullable ForeignType(ForeignType)>*/
719 }
720 var54 = !var53;
721 var51 = var54;
722 goto RET_LABEL52;
723 RET_LABEL52:(void)0;
724 }
725 var50 = var51;
726 }
727 if (var50){
728 if (var_ftype_b == NULL) {
729 var55 = 1; /* is null */
730 } else {
731 var55 = 0; /* arg is null but recv is not */
732 }
733 if (0) {
734 { /* Inline kernel#Object#== (var_ftype_b,((val*)NULL)) on <var_ftype_b:nullable ForeignType> */
735 var_other36 = ((val*)NULL);
736 {
737 { /* Inline kernel#Object#is_same_instance (var_ftype_b,var_other36) on <var_ftype_b:nullable ForeignType(ForeignType)> */
738 var60 = var_ftype_b == var_other36;
739 var58 = var60;
740 goto RET_LABEL59;
741 RET_LABEL59:(void)0;
742 }
743 }
744 var56 = var58;
745 goto RET_LABEL57;
746 RET_LABEL57:(void)0;
747 }
748 var55 = var56;
749 }
750 if (var55){
751 var_ftype_b = var_super_ftype;
752 goto BREAK_label61;
753 } else {
754 {
755 { /* Inline kernel#Object#!= (var_super_ftype,var_ftype_b) on <var_super_ftype:nullable ForeignType(ForeignType)> */
756 var_other = var_ftype_b;
757 {
758 var64 = ((short int(*)(val* self, val* p0))(var_super_ftype->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_super_ftype, var_other); /* == on <var_super_ftype:nullable ForeignType(ForeignType)>*/
759 }
760 var65 = !var64;
761 var62 = var65;
762 goto RET_LABEL63;
763 RET_LABEL63:(void)0;
764 }
765 }
766 if (var62){
767 {
768 { /* Inline phase#Phase#toolcontext (var_v) on <var_v:ExternClassesTypingPhaseModel> */
769 var68 = var_v->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <var_v:ExternClassesTypingPhaseModel> */
770 if (unlikely(var68 == NULL)) {
771 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
772 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 200);
773 fatal_exit(1);
774 }
775 var66 = var68;
776 RET_LABEL67:(void)0;
777 }
778 }
779 if (unlikely(varonce69==NULL)) {
780 var70 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
781 if (likely(varonce71!=NULL)) {
782 var72 = varonce71;
783 } else {
784 var73 = "FFI Error: extern type conflict in `";
785 var74 = core__flat___NativeString___to_s_full(var73, 36l, 36l);
786 var72 = var74;
787 varonce71 = var72;
788 }
789 ((struct instance_core__NativeArray*)var70)->values[0]=var72;
790 if (likely(varonce75!=NULL)) {
791 var76 = varonce75;
792 } else {
793 var77 = "`.";
794 var78 = core__flat___NativeString___to_s_full(var77, 2l, 2l);
795 var76 = var78;
796 varonce75 = var76;
797 }
798 ((struct instance_core__NativeArray*)var70)->values[2]=var76;
799 } else {
800 var70 = varonce69;
801 varonce69 = NULL;
802 }
803 {
804 var79 = ((val*(*)(val* self))(self->class->vft[COLOR_core__abstract_text__Object__to_s]))(self); /* to_s on <self:MClass>*/
805 }
806 ((struct instance_core__NativeArray*)var70)->values[1]=var79;
807 {
808 var80 = ((val*(*)(val* self))(var70->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var70); /* native_to_s on <var70:NativeArray[String]>*/
809 }
810 varonce69 = var70;
811 {
812 var81 = nitc___nitc__ToolContext___error(var66, ((val*)NULL), var80);
813 }
814 var = ((val*)NULL);
815 goto RET_LABEL;
816 } else {
817 }
818 }
819 } else {
820 }
821 BREAK_label61: (void)0;
822 {
823 ((void(*)(val* self))((((long)var_46&3)?class_info[((long)var_46&3)]:var_46->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_46); /* next on <var_46:Iterator[MClass]>*/
824 }
825 }
826 BREAK_label: (void)0;
827 {
828 ((void(*)(val* self))((((long)var_46&3)?class_info[((long)var_46&3)]:var_46->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_46); /* finish on <var_46:Iterator[MClass]>*/
829 }
830 var_ftype = var_ftype_b;
831 } else {
832 }
833 {
834 { /* Inline extern_classes#MClass#ftype_cache= (self,var_ftype) on <self:MClass> */
835 self->attrs[COLOR_nitc__extern_classes__MClass___ftype_cache].val = var_ftype; /* _ftype_cache on <self:MClass> */
836 RET_LABEL82:(void)0;
837 }
838 }
839 {
840 { /* Inline extern_classes#MClass#ftype_computed= (self,1) on <self:MClass> */
841 self->attrs[COLOR_nitc__extern_classes__MClass___ftype_computed].s = 1; /* _ftype_computed on <self:MClass> */
842 RET_LABEL83:(void)0;
843 }
844 }
845 var = var_ftype;
846 goto RET_LABEL;
847 RET_LABEL:;
848 return var;
849 }