NOTICE: Update author list and years
[nit.git] / c_src / nitc__separate_erasure_compiler.sep.1.c
1 #include "nitc__separate_erasure_compiler.sep.0.h"
2 /* method separate_erasure_compiler#ToolContext#opt_erasure for (self: ToolContext): OptionBool */
3 val* nitc__separate_erasure_compiler___ToolContext___opt_erasure(val* self) {
4 val* var /* : OptionBool */;
5 val* var1 /* : OptionBool */;
6 var1 = self->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_erasure].val; /* _opt_erasure on <self:ToolContext> */
7 if (unlikely(var1 == NULL)) {
8 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_erasure");
9 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 22);
10 fatal_exit(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method separate_erasure_compiler#ToolContext#opt_rta for (self: ToolContext): OptionBool */
17 val* nitc__separate_erasure_compiler___ToolContext___opt_rta(val* self) {
18 val* var /* : OptionBool */;
19 val* var1 /* : OptionBool */;
20 var1 = self->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_rta].val; /* _opt_rta on <self:ToolContext> */
21 if (unlikely(var1 == NULL)) {
22 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_rta");
23 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 24);
24 fatal_exit(1);
25 }
26 var = var1;
27 RET_LABEL:;
28 return var;
29 }
30 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast for (self: ToolContext): OptionBool */
31 val* nitc__separate_erasure_compiler___ToolContext___opt_no_check_erasure_cast(val* self) {
32 val* var /* : OptionBool */;
33 val* var1 /* : OptionBool */;
34 var1 = self->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <self:ToolContext> */
35 if (unlikely(var1 == NULL)) {
36 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
37 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 26);
38 fatal_exit(1);
39 }
40 var = var1;
41 RET_LABEL:;
42 return var;
43 }
44 /* method separate_erasure_compiler#ToolContext#init for (self: ToolContext) */
45 void nitc__separate_erasure_compiler___ToolContext___core__kernel__Object__init(val* self) {
46 val* var /* : OptionContext */;
47 val* var2 /* : OptionContext */;
48 val* var3 /* : OptionBool */;
49 val* var5 /* : OptionBool */;
50 val* var6 /* : OptionBool */;
51 val* var8 /* : OptionBool */;
52 val* var9 /* : OptionBool */;
53 val* var11 /* : OptionBool */;
54 val* var12 /* : Array[Option] */;
55 val* var13 /* : NativeArray[Option] */;
56 {
57 ((void(*)(val* self))(self->class->vft[COLOR_nitc__separate_erasure_compiler___ToolContext___core__kernel__Object__init]))(self); /* init on <self:ToolContext>*/
58 }
59 {
60 { /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
61 var2 = self->attrs[COLOR_nitc__toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
62 if (unlikely(var2 == NULL)) {
63 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
64 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__toolcontext, 342);
65 fatal_exit(1);
66 }
67 var = var2;
68 RET_LABEL1:(void)0;
69 }
70 }
71 {
72 { /* Inline separate_erasure_compiler#ToolContext#opt_erasure (self) on <self:ToolContext> */
73 var5 = self->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_erasure].val; /* _opt_erasure on <self:ToolContext> */
74 if (unlikely(var5 == NULL)) {
75 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_erasure");
76 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 22);
77 fatal_exit(1);
78 }
79 var3 = var5;
80 RET_LABEL4:(void)0;
81 }
82 }
83 {
84 { /* Inline separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast (self) on <self:ToolContext> */
85 var8 = self->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <self:ToolContext> */
86 if (unlikely(var8 == NULL)) {
87 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
88 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 26);
89 fatal_exit(1);
90 }
91 var6 = var8;
92 RET_LABEL7:(void)0;
93 }
94 }
95 {
96 { /* Inline separate_erasure_compiler#ToolContext#opt_rta (self) on <self:ToolContext> */
97 var11 = self->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_rta].val; /* _opt_rta on <self:ToolContext> */
98 if (unlikely(var11 == NULL)) {
99 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_rta");
100 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 24);
101 fatal_exit(1);
102 }
103 var9 = var11;
104 RET_LABEL10:(void)0;
105 }
106 }
107 var12 = NEW_core__Array(&type_core__Array__opts__Option);
108 { /* var12 = array_instance Array[Option] */
109 var13 = NEW_core__NativeArray(3l, &type_core__NativeArray__opts__Option);
110 ((struct instance_core__NativeArray*)var13)->values[0] = (val*) var3;
111 ((struct instance_core__NativeArray*)var13)->values[1] = (val*) var6;
112 ((struct instance_core__NativeArray*)var13)->values[2] = (val*) var9;
113 {
114 ((void(*)(val* self, val* p0, long p1))(var12->class->vft[COLOR_core__array__Array__with_native]))(var12, var13, 3l); /* with_native on <var12:Array[Option]>*/
115 }
116 }
117 {
118 opts___opts__OptionContext___add_option(var, var12); /* Direct call opts#OptionContext#add_option on <var:OptionContext>*/
119 }
120 RET_LABEL:;
121 }
122 /* method separate_erasure_compiler#ToolContext#process_options for (self: ToolContext, Sequence[String]) */
123 void nitc__separate_erasure_compiler___ToolContext___process_options(val* self, val* p0) {
124 val* var_args /* var args: Sequence[String] */;
125 val* var /* : OptionBool */;
126 val* var2 /* : OptionBool */;
127 val* var3 /* : nullable Object */;
128 val* var5 /* : nullable Object */;
129 short int var6 /* : Bool */;
130 val* var7 /* : OptionBool */;
131 val* var9 /* : OptionBool */;
132 short int var11 /* : Bool */;
133 int cltype;
134 int idtype;
135 const struct type* type_struct;
136 const char* var_class_name;
137 val* var12 /* : nullable Object */;
138 val* var13 /* : OptionBool */;
139 val* var15 /* : OptionBool */;
140 val* var16 /* : nullable Object */;
141 val* var18 /* : nullable Object */;
142 short int var19 /* : Bool */;
143 val* var20 /* : OptionBool */;
144 val* var22 /* : OptionBool */;
145 short int var24 /* : Bool */;
146 int cltype25;
147 int idtype26;
148 const struct type* type_struct27;
149 const char* var_class_name28;
150 val* var29 /* : nullable Object */;
151 var_args = p0;
152 {
153 ((void(*)(val* self, val* p0))(self->class->vft[COLOR_nitc__separate_erasure_compiler___ToolContext___process_options]))(self, p0); /* process_options on <self:ToolContext>*/
154 }
155 {
156 { /* Inline abstract_compiler#ToolContext#opt_no_check_all (self) on <self:ToolContext> */
157 var2 = self->attrs[COLOR_nitc__abstract_compiler__ToolContext___opt_no_check_all].val; /* _opt_no_check_all on <self:ToolContext> */
158 if (unlikely(var2 == NULL)) {
159 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_all");
160 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 58);
161 fatal_exit(1);
162 }
163 var = var2;
164 RET_LABEL1:(void)0;
165 }
166 }
167 {
168 { /* Inline opts#Option#value (var) on <var:OptionBool> */
169 var5 = var->attrs[COLOR_opts__Option___value].val; /* _value on <var:OptionBool> */
170 var3 = var5;
171 RET_LABEL4:(void)0;
172 }
173 }
174 var6 = (short int)((long)(var3)>>2);
175 if (var6){
176 {
177 { /* Inline separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast (self) on <self:ToolContext> */
178 var9 = self->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <self:ToolContext> */
179 if (unlikely(var9 == NULL)) {
180 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
181 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 26);
182 fatal_exit(1);
183 }
184 var7 = var9;
185 RET_LABEL8:(void)0;
186 }
187 }
188 {
189 { /* Inline opts#Option#value= (var7,1) on <var7:OptionBool> */
190 /* Covariant cast for argument 0 (value) <1:Bool> isa VALUE */
191 /* <1:Bool> isa VALUE */
192 type_struct = var7->type->resolution_table->types[COLOR_opts__Option__VALUE];
193 cltype = type_struct->color;
194 idtype = type_struct->id;
195 if(cltype >= (&type_core__Bool)->table_size) {
196 var11 = 0;
197 } else {
198 var11 = (&type_core__Bool)->type_table[cltype] == idtype;
199 }
200 if (unlikely(!var11)) {
201 var_class_name = type_core__Bool.name;
202 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name);
203 PRINT_ERROR(" (%s:%d)\n", FILE_opts, 40);
204 fatal_exit(1);
205 }
206 var12 = (val*)((long)(1)<<2|3);
207 var7->attrs[COLOR_opts__Option___value].val = var12; /* _value on <var7:OptionBool> */
208 RET_LABEL10:(void)0;
209 }
210 }
211 } else {
212 }
213 {
214 { /* Inline separate_erasure_compiler#ToolContext#opt_erasure (self) on <self:ToolContext> */
215 var15 = self->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_erasure].val; /* _opt_erasure on <self:ToolContext> */
216 if (unlikely(var15 == NULL)) {
217 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_erasure");
218 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 22);
219 fatal_exit(1);
220 }
221 var13 = var15;
222 RET_LABEL14:(void)0;
223 }
224 }
225 {
226 { /* Inline opts#Option#value (var13) on <var13:OptionBool> */
227 var18 = var13->attrs[COLOR_opts__Option___value].val; /* _value on <var13:OptionBool> */
228 var16 = var18;
229 RET_LABEL17:(void)0;
230 }
231 }
232 var19 = (short int)((long)(var16)>>2);
233 if (var19){
234 {
235 { /* Inline separate_compiler#ToolContext#opt_no_tag_primitives (self) on <self:ToolContext> */
236 var22 = self->attrs[COLOR_nitc__separate_compiler__ToolContext___opt_no_tag_primitives].val; /* _opt_no_tag_primitives on <self:ToolContext> */
237 if (unlikely(var22 == NULL)) {
238 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_tag_primitives");
239 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_compiler, 32);
240 fatal_exit(1);
241 }
242 var20 = var22;
243 RET_LABEL21:(void)0;
244 }
245 }
246 {
247 { /* Inline opts#Option#value= (var20,1) on <var20:OptionBool> */
248 /* Covariant cast for argument 0 (value) <1:Bool> isa VALUE */
249 /* <1:Bool> isa VALUE */
250 type_struct27 = var20->type->resolution_table->types[COLOR_opts__Option__VALUE];
251 cltype25 = type_struct27->color;
252 idtype26 = type_struct27->id;
253 if(cltype25 >= (&type_core__Bool)->table_size) {
254 var24 = 0;
255 } else {
256 var24 = (&type_core__Bool)->type_table[cltype25] == idtype26;
257 }
258 if (unlikely(!var24)) {
259 var_class_name28 = type_core__Bool.name;
260 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name28);
261 PRINT_ERROR(" (%s:%d)\n", FILE_opts, 40);
262 fatal_exit(1);
263 }
264 var29 = (val*)((long)(1)<<2|3);
265 var20->attrs[COLOR_opts__Option___value].val = var29; /* _value on <var20:OptionBool> */
266 RET_LABEL23:(void)0;
267 }
268 }
269 } else {
270 }
271 RET_LABEL:;
272 }
273 /* method separate_erasure_compiler#ErasureCompilerPhase#process_mainmodule for (self: ErasureCompilerPhase, MModule, SequenceRead[MModule]) */
274 void nitc___nitc__ErasureCompilerPhase___nitc__modelbuilder__Phase__process_mainmodule(val* self, val* p0, val* p1) {
275 val* var_mainmodule /* var mainmodule: MModule */;
276 val* var_given_mmodules /* var given_mmodules: SequenceRead[MModule] */;
277 val* var /* : ToolContext */;
278 val* var2 /* : ToolContext */;
279 val* var3 /* : OptionBool */;
280 val* var5 /* : OptionBool */;
281 val* var6 /* : nullable Object */;
282 val* var8 /* : nullable Object */;
283 short int var9 /* : Bool */;
284 short int var10 /* : Bool */;
285 val* var11 /* : ToolContext */;
286 val* var13 /* : ToolContext */;
287 val* var14 /* : ModelBuilder */;
288 val* var_modelbuilder /* var modelbuilder: ModelBuilder */;
289 val* var_analysis /* var analysis: nullable Object */;
290 val* var15 /* : ToolContext */;
291 val* var17 /* : ToolContext */;
292 val* var18 /* : OptionBool */;
293 val* var20 /* : OptionBool */;
294 val* var21 /* : nullable Object */;
295 val* var23 /* : nullable Object */;
296 short int var24 /* : Bool */;
297 val* var25 /* : RapidTypeAnalysis */;
298 var_mainmodule = p0;
299 var_given_mmodules = p1;
300 {
301 { /* Inline phase#Phase#toolcontext (self) on <self:ErasureCompilerPhase> */
302 var2 = self->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <self:ErasureCompilerPhase> */
303 if (unlikely(var2 == NULL)) {
304 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
305 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 200);
306 fatal_exit(1);
307 }
308 var = var2;
309 RET_LABEL1:(void)0;
310 }
311 }
312 {
313 { /* Inline separate_erasure_compiler#ToolContext#opt_erasure (var) on <var:ToolContext> */
314 var5 = var->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_erasure].val; /* _opt_erasure on <var:ToolContext> */
315 if (unlikely(var5 == NULL)) {
316 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_erasure");
317 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 22);
318 fatal_exit(1);
319 }
320 var3 = var5;
321 RET_LABEL4:(void)0;
322 }
323 }
324 {
325 { /* Inline opts#Option#value (var3) on <var3:OptionBool> */
326 var8 = var3->attrs[COLOR_opts__Option___value].val; /* _value on <var3:OptionBool> */
327 var6 = var8;
328 RET_LABEL7:(void)0;
329 }
330 }
331 var9 = (short int)((long)(var6)>>2);
332 var10 = !var9;
333 if (var10){
334 goto RET_LABEL;
335 } else {
336 }
337 {
338 { /* Inline phase#Phase#toolcontext (self) on <self:ErasureCompilerPhase> */
339 var13 = self->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <self:ErasureCompilerPhase> */
340 if (unlikely(var13 == NULL)) {
341 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
342 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 200);
343 fatal_exit(1);
344 }
345 var11 = var13;
346 RET_LABEL12:(void)0;
347 }
348 }
349 {
350 var14 = nitc__modelbuilder_base___ToolContext___modelbuilder(var11);
351 }
352 var_modelbuilder = var14;
353 var_analysis = ((val*)NULL);
354 {
355 { /* Inline phase#Phase#toolcontext (self) on <self:ErasureCompilerPhase> */
356 var17 = self->attrs[COLOR_nitc__phase__Phase___toolcontext].val; /* _toolcontext on <self:ErasureCompilerPhase> */
357 if (unlikely(var17 == NULL)) {
358 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
359 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__phase, 200);
360 fatal_exit(1);
361 }
362 var15 = var17;
363 RET_LABEL16:(void)0;
364 }
365 }
366 {
367 { /* Inline separate_erasure_compiler#ToolContext#opt_rta (var15) on <var15:ToolContext> */
368 var20 = var15->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_rta].val; /* _opt_rta on <var15:ToolContext> */
369 if (unlikely(var20 == NULL)) {
370 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_rta");
371 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 24);
372 fatal_exit(1);
373 }
374 var18 = var20;
375 RET_LABEL19:(void)0;
376 }
377 }
378 {
379 { /* Inline opts#Option#value (var18) on <var18:OptionBool> */
380 var23 = var18->attrs[COLOR_opts__Option___value].val; /* _value on <var18:OptionBool> */
381 var21 = var23;
382 RET_LABEL22:(void)0;
383 }
384 }
385 var24 = (short int)((long)(var21)>>2);
386 if (var24){
387 {
388 var25 = nitc__rapid_type_analysis___ModelBuilder___do_rapid_type_analysis(var_modelbuilder, var_mainmodule);
389 }
390 var_analysis = var25;
391 } else {
392 }
393 {
394 nitc__separate_erasure_compiler___ModelBuilder___run_separate_erasure_compiler(var_modelbuilder, var_mainmodule, var_analysis); /* Direct call separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler on <var_modelbuilder:ModelBuilder>*/
395 }
396 RET_LABEL:;
397 }
398 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: ModelBuilder, MModule, nullable RapidTypeAnalysis) */
399 void nitc__separate_erasure_compiler___ModelBuilder___run_separate_erasure_compiler(val* self, val* p0, val* p1) {
400 val* var_mainmodule /* var mainmodule: MModule */;
401 val* var_runtime_type_analysis /* var runtime_type_analysis: nullable RapidTypeAnalysis */;
402 val* var /* : Sys */;
403 long var1 /* : Int */;
404 long var3 /* : Int */;
405 long var_time0 /* var time0: Int */;
406 val* var4 /* : ToolContext */;
407 val* var6 /* : ToolContext */;
408 static val* varonce;
409 val* var7 /* : String */;
410 char* var8 /* : NativeString */;
411 val* var9 /* : String */;
412 val* var10 /* : SeparateErasureCompiler */;
413 val* var_compiler /* var compiler: SeparateErasureCompiler */;
414 val* var11 /* : Sys */;
415 long var12 /* : Int */;
416 long var14 /* : Int */;
417 long var_time1 /* var time1: Int */;
418 val* var15 /* : ToolContext */;
419 val* var17 /* : ToolContext */;
420 val* var19 /* : NativeArray[String] */;
421 static val* varonce18;
422 static val* varonce20;
423 val* var21 /* : String */;
424 char* var22 /* : NativeString */;
425 val* var23 /* : String */;
426 static val* varonce24;
427 val* var25 /* : String */;
428 char* var26 /* : NativeString */;
429 val* var27 /* : String */;
430 long var28 /* : Int */;
431 short int var30 /* : Bool */;
432 int cltype;
433 int idtype;
434 const char* var_class_name;
435 long var31 /* : Int */;
436 val* var32 /* : String */;
437 val* var33 /* : String */;
438 var_mainmodule = p0;
439 var_runtime_type_analysis = p1;
440 var = glob_sys;
441 {
442 { /* Inline time#Sys#get_time (var) on <var:Sys> */
443 struct nitni_instance* var_for_c_0;
444 var_for_c_0 = nit_alloc(sizeof(struct nitni_instance));
445 var_for_c_0->value = var;
446 var3 = time___Sys_get_time___impl(var_for_c_0);
447 var1 = var3;
448 goto RET_LABEL2;
449 RET_LABEL2:(void)0;
450 }
451 }
452 var_time0 = var1;
453 {
454 { /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
455 var6 = self->attrs[COLOR_nitc__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
456 if (unlikely(var6 == NULL)) {
457 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
458 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__modelbuilder_base, 47);
459 fatal_exit(1);
460 }
461 var4 = var6;
462 RET_LABEL5:(void)0;
463 }
464 }
465 if (likely(varonce!=NULL)) {
466 var7 = varonce;
467 } else {
468 var8 = "*** GENERATING C ***";
469 var9 = core__flat___NativeString___to_s_full(var8, 20l, 20l);
470 var7 = var9;
471 varonce = var7;
472 }
473 {
474 nitc___nitc__ToolContext___info(var4, var7, 1l); /* Direct call toolcontext#ToolContext#info on <var4:ToolContext>*/
475 }
476 var10 = NEW_nitc__SeparateErasureCompiler(&type_nitc__SeparateErasureCompiler);
477 {
478 ((void(*)(val* self, val* p0))(var10->class->vft[COLOR_nitc__abstract_compiler__AbstractCompiler__mainmodule_61d]))(var10, var_mainmodule); /* mainmodule= on <var10:SeparateErasureCompiler>*/
479 }
480 {
481 ((void(*)(val* self, val* p0))(var10->class->vft[COLOR_nitc__abstract_compiler__AbstractCompiler__modelbuilder_61d]))(var10, self); /* modelbuilder= on <var10:SeparateErasureCompiler>*/
482 }
483 {
484 ((void(*)(val* self, val* p0))(var10->class->vft[COLOR_nitc__separate_compiler__SeparateCompiler__runtime_type_analysis_61d]))(var10, var_runtime_type_analysis); /* runtime_type_analysis= on <var10:SeparateErasureCompiler>*/
485 }
486 {
487 ((void(*)(val* self))(var10->class->vft[COLOR_core__kernel__Object__init]))(var10); /* init on <var10:SeparateErasureCompiler>*/
488 }
489 var_compiler = var10;
490 {
491 nitc___nitc__SeparateCompiler___nitc__abstract_compiler__AbstractCompiler__do_compilation(var_compiler); /* Direct call separate_compiler#SeparateCompiler#do_compilation on <var_compiler:SeparateErasureCompiler>*/
492 }
493 {
494 nitc___nitc__SeparateCompiler___nitc__abstract_compiler__AbstractCompiler__display_stats(var_compiler); /* Direct call separate_compiler#SeparateCompiler#display_stats on <var_compiler:SeparateErasureCompiler>*/
495 }
496 var11 = glob_sys;
497 {
498 { /* Inline time#Sys#get_time (var11) on <var11:Sys> */
499 struct nitni_instance* var_for_c_0;
500 var_for_c_0 = nit_alloc(sizeof(struct nitni_instance));
501 var_for_c_0->value = var11;
502 var14 = time___Sys_get_time___impl(var_for_c_0);
503 var12 = var14;
504 goto RET_LABEL13;
505 RET_LABEL13:(void)0;
506 }
507 }
508 var_time1 = var12;
509 {
510 { /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
511 var17 = self->attrs[COLOR_nitc__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
512 if (unlikely(var17 == NULL)) {
513 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
514 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__modelbuilder_base, 47);
515 fatal_exit(1);
516 }
517 var15 = var17;
518 RET_LABEL16:(void)0;
519 }
520 }
521 if (unlikely(varonce18==NULL)) {
522 var19 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
523 if (likely(varonce20!=NULL)) {
524 var21 = varonce20;
525 } else {
526 var22 = "*** END GENERATING C: ";
527 var23 = core__flat___NativeString___to_s_full(var22, 22l, 22l);
528 var21 = var23;
529 varonce20 = var21;
530 }
531 ((struct instance_core__NativeArray*)var19)->values[0]=var21;
532 if (likely(varonce24!=NULL)) {
533 var25 = varonce24;
534 } else {
535 var26 = " ***";
536 var27 = core__flat___NativeString___to_s_full(var26, 4l, 4l);
537 var25 = var27;
538 varonce24 = var25;
539 }
540 ((struct instance_core__NativeArray*)var19)->values[2]=var25;
541 } else {
542 var19 = varonce18;
543 varonce18 = NULL;
544 }
545 {
546 { /* Inline kernel#Int#- (var_time1,var_time0) on <var_time1:Int> */
547 /* Covariant cast for argument 0 (i) <var_time0:Int> isa OTHER */
548 /* <var_time0:Int> isa OTHER */
549 var30 = 1; /* easy <var_time0:Int> isa OTHER*/
550 if (unlikely(!var30)) {
551 var_class_name = type_core__Int.name;
552 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
553 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 734);
554 fatal_exit(1);
555 }
556 var31 = var_time1 - var_time0;
557 var28 = var31;
558 goto RET_LABEL29;
559 RET_LABEL29:(void)0;
560 }
561 }
562 var32 = core__flat___Int___core__abstract_text__Object__to_s(var28);
563 ((struct instance_core__NativeArray*)var19)->values[1]=var32;
564 {
565 var33 = ((val*(*)(val* self))(var19->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var19); /* native_to_s on <var19:NativeArray[String]>*/
566 }
567 varonce18 = var19;
568 {
569 nitc___nitc__ToolContext___info(var15, var33, 2l); /* Direct call toolcontext#ToolContext#info on <var15:ToolContext>*/
570 }
571 {
572 nitc__abstract_compiler___ModelBuilder___write_and_make(self, var_compiler); /* Direct call abstract_compiler#ModelBuilder#write_and_make on <self:ModelBuilder>*/
573 }
574 RET_LABEL:;
575 }
576 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids for (self: SeparateErasureCompiler): Map[MClass, Int] */
577 val* nitc___nitc__SeparateErasureCompiler___class_ids(val* self) {
578 val* var /* : Map[MClass, Int] */;
579 val* var1 /* : Map[MClass, Int] */;
580 var1 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:SeparateErasureCompiler> */
581 if (unlikely(var1 == NULL)) {
582 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
583 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 84);
584 fatal_exit(1);
585 }
586 var = var1;
587 RET_LABEL:;
588 return var;
589 }
590 /* method separate_erasure_compiler#SeparateErasureCompiler#class_ids= for (self: SeparateErasureCompiler, Map[MClass, Int]) */
591 void nitc___nitc__SeparateErasureCompiler___class_ids_61d(val* self, val* p0) {
592 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_ids].val = p0; /* _class_ids on <self:SeparateErasureCompiler> */
593 RET_LABEL:;
594 }
595 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors for (self: SeparateErasureCompiler): Map[MClass, Int] */
596 val* nitc___nitc__SeparateErasureCompiler___class_colors(val* self) {
597 val* var /* : Map[MClass, Int] */;
598 val* var1 /* : Map[MClass, Int] */;
599 var1 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
600 if (unlikely(var1 == NULL)) {
601 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
602 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 85);
603 fatal_exit(1);
604 }
605 var = var1;
606 RET_LABEL:;
607 return var;
608 }
609 /* method separate_erasure_compiler#SeparateErasureCompiler#class_colors= for (self: SeparateErasureCompiler, Map[MClass, Int]) */
610 void nitc___nitc__SeparateErasureCompiler___class_colors_61d(val* self, val* p0) {
611 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_colors].val = p0; /* _class_colors on <self:SeparateErasureCompiler> */
612 RET_LABEL:;
613 }
614 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors for (self: SeparateErasureCompiler): Map[MVirtualTypeProp, Int] */
615 val* nitc___nitc__SeparateErasureCompiler___vt_colors(val* self) {
616 val* var /* : Map[MVirtualTypeProp, Int] */;
617 val* var1 /* : Map[MVirtualTypeProp, Int] */;
618 var1 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
619 if (unlikely(var1 == NULL)) {
620 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
621 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 86);
622 fatal_exit(1);
623 }
624 var = var1;
625 RET_LABEL:;
626 return var;
627 }
628 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_colors= for (self: SeparateErasureCompiler, Map[MVirtualTypeProp, Int]) */
629 void nitc___nitc__SeparateErasureCompiler___vt_colors_61d(val* self, val* p0) {
630 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val = p0; /* _vt_colors on <self:SeparateErasureCompiler> */
631 RET_LABEL:;
632 }
633 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: SeparateErasureCompiler) */
634 void nitc___nitc__SeparateErasureCompiler___core__kernel__Object__init(val* self) {
635 val* var /* : MModule */;
636 val* var2 /* : MModule */;
637 val* var3 /* : POSet[MClass] */;
638 val* var_poset /* var poset: POSet[MClass] */;
639 val* var4 /* : HashSet[MClass] */;
640 val* var_mclasses /* var mclasses: HashSet[MClass] */;
641 val* var5 /* : POSetColorer[MClass] */;
642 val* var_colorer /* var colorer: POSetColorer[MClass] */;
643 val* var7 /* : Map[Object, Int] */;
644 val* var9 /* : Map[Object, Int] */;
645 val* var11 /* : Map[MClass, Array[nullable MClass]] */;
646 val* var13 /* : HashMap[MClass, Set[MVirtualTypeProp]] */;
647 val* var_vts /* var vts: HashMap[MClass, Set[MVirtualTypeProp]] */;
648 val* var_ /* var : HashSet[MClass] */;
649 val* var14 /* : Iterator[nullable Object] */;
650 val* var_15 /* var : Iterator[MClass] */;
651 short int var16 /* : Bool */;
652 val* var17 /* : nullable Object */;
653 val* var_mclass /* var mclass: MClass */;
654 val* var18 /* : HashSet[MVirtualTypeProp] */;
655 val* var19 /* : MModule */;
656 val* var21 /* : MModule */;
657 val* var22 /* : Set[MProperty] */;
658 val* var_23 /* var : Set[MProperty] */;
659 val* var24 /* : Iterator[nullable Object] */;
660 val* var_25 /* var : Iterator[MProperty] */;
661 short int var26 /* : Bool */;
662 val* var28 /* : nullable Object */;
663 val* var_mprop /* var mprop: MProperty */;
664 short int var29 /* : Bool */;
665 int cltype;
666 int idtype;
667 val* var30 /* : nullable Object */;
668 val* var31 /* : POSetBucketsColorer[MClass, MVirtualTypeProp] */;
669 val* var32 /* : Map[Object, Set[Object]] */;
670 val* var_vt_colorer /* var vt_colorer: POSetBucketsColorer[MClass, MVirtualTypeProp] */;
671 val* var33 /* : Map[Object, Int] */;
672 val* var35 /* : Map[MClass, Array[nullable MPropDef]] */;
673 {
674 ((void(*)(val* self))(self->class->vft[COLOR_nitc___nitc__SeparateErasureCompiler___core__kernel__Object__init]))(self); /* init on <self:SeparateErasureCompiler>*/
675 }
676 {
677 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
678 var2 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
679 if (unlikely(var2 == NULL)) {
680 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
681 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
682 fatal_exit(1);
683 }
684 var = var2;
685 RET_LABEL1:(void)0;
686 }
687 }
688 {
689 var3 = nitc__model___MModule___flatten_mclass_hierarchy(var);
690 }
691 var_poset = var3;
692 var4 = NEW_core__HashSet(&type_core__HashSet__nitc__MClass);
693 {
694 core___core__HashSet___from(var4, var_poset); /* Direct call hash_collection#HashSet#from on <var4:HashSet[MClass]>*/
695 }
696 var_mclasses = var4;
697 var5 = NEW_nitc__POSetColorer(&type_nitc__POSetColorer__nitc__MClass);
698 {
699 { /* Inline kernel#Object#init (var5) on <var5:POSetColorer[MClass]> */
700 RET_LABEL6:(void)0;
701 }
702 }
703 var_colorer = var5;
704 {
705 nitc___nitc__POSetColorer___colorize(var_colorer, var_poset); /* Direct call coloring#POSetColorer#colorize on <var_colorer:POSetColorer[MClass]>*/
706 }
707 {
708 var7 = nitc___nitc__POSetColorer___ids(var_colorer);
709 }
710 {
711 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids= (self,var7) on <self:SeparateErasureCompiler> */
712 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_ids].val = var7; /* _class_ids on <self:SeparateErasureCompiler> */
713 RET_LABEL8:(void)0;
714 }
715 }
716 {
717 var9 = nitc___nitc__POSetColorer___colors(var_colorer);
718 }
719 {
720 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors= (self,var9) on <self:SeparateErasureCompiler> */
721 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_colors].val = var9; /* _class_colors on <self:SeparateErasureCompiler> */
722 RET_LABEL10:(void)0;
723 }
724 }
725 {
726 var11 = nitc___nitc__SeparateErasureCompiler___build_class_typing_tables(self, var_mclasses);
727 }
728 {
729 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables= (self,var11) on <self:SeparateErasureCompiler> */
730 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_tables].val = var11; /* _class_tables on <self:SeparateErasureCompiler> */
731 RET_LABEL12:(void)0;
732 }
733 }
734 var13 = NEW_core__HashMap(&type_core__HashMap__nitc__MClass__core__Set__nitc__MVirtualTypeProp);
735 {
736 core___core__HashMap___core__kernel__Object__init(var13); /* Direct call hash_collection#HashMap#init on <var13:HashMap[MClass, Set[MVirtualTypeProp]]>*/
737 }
738 var_vts = var13;
739 var_ = var_mclasses;
740 {
741 var14 = core___core__HashSet___core__abstract_collection__Collection__iterator(var_);
742 }
743 var_15 = var14;
744 for(;;) {
745 {
746 var16 = ((short int(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_15); /* is_ok on <var_15:Iterator[MClass]>*/
747 }
748 if (var16){
749 } else {
750 goto BREAK_label;
751 }
752 {
753 var17 = ((val*(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_15); /* item on <var_15:Iterator[MClass]>*/
754 }
755 var_mclass = var17;
756 var18 = NEW_core__HashSet(&type_core__HashSet__nitc__MVirtualTypeProp);
757 {
758 core___core__HashSet___core__kernel__Object__init(var18); /* Direct call hash_collection#HashSet#init on <var18:HashSet[MVirtualTypeProp]>*/
759 }
760 {
761 core___core__HashMap___core__abstract_collection__Map___91d_93d_61d(var_vts, var_mclass, var18); /* Direct call hash_collection#HashMap#[]= on <var_vts:HashMap[MClass, Set[MVirtualTypeProp]]>*/
762 }
763 {
764 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
765 var21 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
766 if (unlikely(var21 == NULL)) {
767 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
768 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
769 fatal_exit(1);
770 }
771 var19 = var21;
772 RET_LABEL20:(void)0;
773 }
774 }
775 {
776 var22 = nitc__abstract_compiler___MModule___properties(var19, var_mclass);
777 }
778 var_23 = var22;
779 {
780 var24 = ((val*(*)(val* self))((((long)var_23&3)?class_info[((long)var_23&3)]:var_23->class)->vft[COLOR_core__abstract_collection__Collection__iterator]))(var_23); /* iterator on <var_23:Set[MProperty]>*/
781 }
782 var_25 = var24;
783 for(;;) {
784 {
785 var26 = ((short int(*)(val* self))((((long)var_25&3)?class_info[((long)var_25&3)]:var_25->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_25); /* is_ok on <var_25:Iterator[MProperty]>*/
786 }
787 if (var26){
788 } else {
789 goto BREAK_label27;
790 }
791 {
792 var28 = ((val*(*)(val* self))((((long)var_25&3)?class_info[((long)var_25&3)]:var_25->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_25); /* item on <var_25:Iterator[MProperty]>*/
793 }
794 var_mprop = var28;
795 /* <var_mprop:MProperty> isa MVirtualTypeProp */
796 cltype = type_nitc__MVirtualTypeProp.color;
797 idtype = type_nitc__MVirtualTypeProp.id;
798 if(cltype >= var_mprop->type->table_size) {
799 var29 = 0;
800 } else {
801 var29 = var_mprop->type->type_table[cltype] == idtype;
802 }
803 if (var29){
804 {
805 var30 = core___core__HashMap___core__abstract_collection__MapRead___91d_93d(var_vts, var_mclass);
806 }
807 {
808 ((void(*)(val* self, val* p0))((((long)var30&3)?class_info[((long)var30&3)]:var30->class)->vft[COLOR_core__abstract_collection__SimpleCollection__add]))(var30, var_mprop); /* add on <var30:nullable Object(Set[MVirtualTypeProp])>*/
809 }
810 } else {
811 }
812 {
813 ((void(*)(val* self))((((long)var_25&3)?class_info[((long)var_25&3)]:var_25->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_25); /* next on <var_25:Iterator[MProperty]>*/
814 }
815 }
816 BREAK_label27: (void)0;
817 {
818 ((void(*)(val* self))((((long)var_25&3)?class_info[((long)var_25&3)]:var_25->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_25); /* finish on <var_25:Iterator[MProperty]>*/
819 }
820 {
821 ((void(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_15); /* next on <var_15:Iterator[MClass]>*/
822 }
823 }
824 BREAK_label: (void)0;
825 {
826 ((void(*)(val* self))((((long)var_15&3)?class_info[((long)var_15&3)]:var_15->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_15); /* finish on <var_15:Iterator[MClass]>*/
827 }
828 var31 = NEW_nitc__POSetBucketsColorer(&type_nitc__POSetBucketsColorer__nitc__MClass__nitc__MVirtualTypeProp);
829 {
830 var32 = nitc___nitc__POSetColorer___conflicts(var_colorer);
831 }
832 {
833 ((void(*)(val* self, val* p0))(var31->class->vft[COLOR_nitc__coloring__POSetBucketsColorer__poset_61d]))(var31, var_poset); /* poset= on <var31:POSetBucketsColorer[MClass, MVirtualTypeProp]>*/
834 }
835 {
836 ((void(*)(val* self, val* p0))(var31->class->vft[COLOR_nitc__coloring__POSetBucketsColorer__conflicts_61d]))(var31, var32); /* conflicts= on <var31:POSetBucketsColorer[MClass, MVirtualTypeProp]>*/
837 }
838 {
839 ((void(*)(val* self))(var31->class->vft[COLOR_core__kernel__Object__init]))(var31); /* init on <var31:POSetBucketsColorer[MClass, MVirtualTypeProp]>*/
840 }
841 var_vt_colorer = var31;
842 {
843 var33 = nitc___nitc__POSetBucketsColorer___colorize(var_vt_colorer, var_vts);
844 }
845 {
846 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors= (self,var33) on <self:SeparateErasureCompiler> */
847 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val = var33; /* _vt_colors on <self:SeparateErasureCompiler> */
848 RET_LABEL34:(void)0;
849 }
850 }
851 {
852 var35 = nitc___nitc__SeparateErasureCompiler___build_vt_tables(self, var_mclasses);
853 }
854 {
855 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables= (self,var35) on <self:SeparateErasureCompiler> */
856 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val = var35; /* _vt_tables on <self:SeparateErasureCompiler> */
857 RET_LABEL36:(void)0;
858 }
859 }
860 RET_LABEL:;
861 }
862 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MPropDef]] */
863 val* nitc___nitc__SeparateErasureCompiler___build_vt_tables(val* self, val* p0) {
864 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
865 val* var_mclasses /* var mclasses: Set[MClass] */;
866 val* var1 /* : HashMap[MClass, Array[nullable MPropDef]] */;
867 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
868 val* var_ /* var : Set[MClass] */;
869 val* var2 /* : Iterator[nullable Object] */;
870 val* var_3 /* var : Iterator[MClass] */;
871 short int var4 /* : Bool */;
872 val* var5 /* : nullable Object */;
873 val* var_mclass /* var mclass: MClass */;
874 val* var6 /* : Array[nullable MPropDef] */;
875 val* var_table /* var table: Array[nullable MPropDef] */;
876 val* var7 /* : Array[MClass] */;
877 val* var_parents /* var parents: Array[MClass] */;
878 val* var8 /* : MModule */;
879 val* var10 /* : MModule */;
880 val* var11 /* : POSet[MClass] */;
881 short int var12 /* : Bool */;
882 val* var13 /* : MModule */;
883 val* var15 /* : MModule */;
884 val* var16 /* : POSetElement[MClass] */;
885 val* var17 /* : Collection[nullable Object] */;
886 val* var18 /* : Array[nullable Object] */;
887 val* var19 /* : MModule */;
888 val* var21 /* : MModule */;
889 val* var_22 /* var : Array[MClass] */;
890 val* var23 /* : IndexedIterator[nullable Object] */;
891 val* var_24 /* var : IndexedIterator[MClass] */;
892 short int var25 /* : Bool */;
893 val* var27 /* : nullable Object */;
894 val* var_parent /* var parent: MClass */;
895 short int var28 /* : Bool */;
896 val* var_other /* var other: nullable Object */;
897 short int var30 /* : Bool */;
898 short int var32 /* : Bool */;
899 val* var34 /* : MModule */;
900 val* var36 /* : MModule */;
901 val* var37 /* : Set[MProperty] */;
902 val* var_38 /* var : Set[MProperty] */;
903 val* var39 /* : Iterator[nullable Object] */;
904 val* var_40 /* var : Iterator[MProperty] */;
905 short int var41 /* : Bool */;
906 val* var43 /* : nullable Object */;
907 val* var_mproperty /* var mproperty: MProperty */;
908 short int var44 /* : Bool */;
909 int cltype;
910 int idtype;
911 short int var45 /* : Bool */;
912 val* var47 /* : Map[MVirtualTypeProp, Int] */;
913 val* var49 /* : Map[MVirtualTypeProp, Int] */;
914 val* var50 /* : nullable Object */;
915 long var51 /* : Int */;
916 long var_color /* var color: Int */;
917 long var52 /* : Int */;
918 long var54 /* : Int */;
919 short int var55 /* : Bool */;
920 short int var57 /* : Bool */;
921 int cltype58;
922 int idtype59;
923 const char* var_class_name;
924 short int var60 /* : Bool */;
925 long var61 /* : Int */;
926 long var63 /* : Int */;
927 long var_i /* var i: Int */;
928 long var_64 /* var : Int */;
929 short int var65 /* : Bool */;
930 short int var67 /* : Bool */;
931 int cltype68;
932 int idtype69;
933 const char* var_class_name70;
934 short int var71 /* : Bool */;
935 long var73 /* : Int */;
936 val* var74 /* : Array[MPropDef] */;
937 val* var76 /* : Array[MPropDef] */;
938 val* var_77 /* var : Array[MVirtualTypeDef] */;
939 val* var78 /* : IndexedIterator[nullable Object] */;
940 val* var_79 /* var : IndexedIterator[MVirtualTypeDef] */;
941 short int var80 /* : Bool */;
942 val* var82 /* : nullable Object */;
943 val* var_mpropdef /* var mpropdef: MVirtualTypeDef */;
944 val* var83 /* : MClassDef */;
945 val* var85 /* : MClassDef */;
946 val* var86 /* : MClass */;
947 val* var88 /* : MClass */;
948 short int var89 /* : Bool */;
949 short int var91 /* : Bool */;
950 short int var93 /* : Bool */;
951 val* var94 /* : MModule */;
952 val* var96 /* : MModule */;
953 val* var97 /* : Set[MProperty] */;
954 val* var_98 /* var : Set[MProperty] */;
955 val* var99 /* : Iterator[nullable Object] */;
956 val* var_100 /* var : Iterator[MProperty] */;
957 short int var101 /* : Bool */;
958 val* var103 /* : nullable Object */;
959 val* var_mproperty104 /* var mproperty: MProperty */;
960 short int var105 /* : Bool */;
961 int cltype106;
962 int idtype107;
963 short int var108 /* : Bool */;
964 val* var110 /* : Map[MVirtualTypeProp, Int] */;
965 val* var112 /* : Map[MVirtualTypeProp, Int] */;
966 val* var113 /* : nullable Object */;
967 long var114 /* : Int */;
968 long var_color115 /* var color: Int */;
969 long var116 /* : Int */;
970 long var118 /* : Int */;
971 short int var119 /* : Bool */;
972 short int var121 /* : Bool */;
973 int cltype122;
974 int idtype123;
975 const char* var_class_name124;
976 short int var125 /* : Bool */;
977 long var126 /* : Int */;
978 long var128 /* : Int */;
979 long var_i129 /* var i: Int */;
980 long var_130 /* var : Int */;
981 short int var131 /* : Bool */;
982 short int var133 /* : Bool */;
983 int cltype134;
984 int idtype135;
985 const char* var_class_name136;
986 short int var137 /* : Bool */;
987 long var139 /* : Int */;
988 val* var140 /* : Array[MPropDef] */;
989 val* var142 /* : Array[MPropDef] */;
990 val* var_143 /* var : Array[MVirtualTypeDef] */;
991 val* var144 /* : IndexedIterator[nullable Object] */;
992 val* var_145 /* var : IndexedIterator[MVirtualTypeDef] */;
993 short int var146 /* : Bool */;
994 val* var148 /* : nullable Object */;
995 val* var_mpropdef149 /* var mpropdef: MVirtualTypeDef */;
996 val* var150 /* : MClassDef */;
997 val* var152 /* : MClassDef */;
998 val* var153 /* : MClass */;
999 val* var155 /* : MClass */;
1000 short int var156 /* : Bool */;
1001 short int var158 /* : Bool */;
1002 short int var160 /* : Bool */;
1003 var_mclasses = p0;
1004 var1 = NEW_core__HashMap(&type_core__HashMap__nitc__MClass__core__Array__nullable__nitc__MPropDef);
1005 {
1006 core___core__HashMap___core__kernel__Object__init(var1); /* Direct call hash_collection#HashMap#init on <var1:HashMap[MClass, Array[nullable MPropDef]]>*/
1007 }
1008 var_tables = var1;
1009 var_ = var_mclasses;
1010 {
1011 var2 = ((val*(*)(val* self))((((long)var_&3)?class_info[((long)var_&3)]:var_->class)->vft[COLOR_core__abstract_collection__Collection__iterator]))(var_); /* iterator on <var_:Set[MClass]>*/
1012 }
1013 var_3 = var2;
1014 for(;;) {
1015 {
1016 var4 = ((short int(*)(val* self))((((long)var_3&3)?class_info[((long)var_3&3)]:var_3->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_3); /* is_ok on <var_3:Iterator[MClass]>*/
1017 }
1018 if (var4){
1019 } else {
1020 goto BREAK_label;
1021 }
1022 {
1023 var5 = ((val*(*)(val* self))((((long)var_3&3)?class_info[((long)var_3&3)]:var_3->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_3); /* item on <var_3:Iterator[MClass]>*/
1024 }
1025 var_mclass = var5;
1026 var6 = NEW_core__Array(&type_core__Array__nullable__nitc__MPropDef);
1027 {
1028 core___core__Array___core__kernel__Object__init(var6); /* Direct call array#Array#init on <var6:Array[nullable MPropDef]>*/
1029 }
1030 var_table = var6;
1031 var7 = NEW_core__Array(&type_core__Array__nitc__MClass);
1032 {
1033 core___core__Array___core__kernel__Object__init(var7); /* Direct call array#Array#init on <var7:Array[MClass]>*/
1034 }
1035 var_parents = var7;
1036 {
1037 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1038 var10 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1039 if (unlikely(var10 == NULL)) {
1040 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1041 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
1042 fatal_exit(1);
1043 }
1044 var8 = var10;
1045 RET_LABEL9:(void)0;
1046 }
1047 }
1048 {
1049 var11 = nitc__model___MModule___flatten_mclass_hierarchy(var8);
1050 }
1051 {
1052 var12 = poset___poset__POSet___core__abstract_collection__Collection__has(var11, var_mclass);
1053 }
1054 if (var12){
1055 {
1056 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1057 var15 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1058 if (unlikely(var15 == NULL)) {
1059 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1060 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
1061 fatal_exit(1);
1062 }
1063 var13 = var15;
1064 RET_LABEL14:(void)0;
1065 }
1066 }
1067 {
1068 var16 = nitc___nitc__MClass___in_hierarchy(var_mclass, var13);
1069 }
1070 {
1071 var17 = poset___poset__POSetElement___greaters(var16);
1072 }
1073 {
1074 var18 = ((val*(*)(val* self))((((long)var17&3)?class_info[((long)var17&3)]:var17->class)->vft[COLOR_core__array__Collection__to_a]))(var17); /* to_a on <var17:Collection[nullable Object](Collection[MClass])>*/
1075 }
1076 var_parents = var18;
1077 {
1078 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1079 var21 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1080 if (unlikely(var21 == NULL)) {
1081 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1082 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
1083 fatal_exit(1);
1084 }
1085 var19 = var21;
1086 RET_LABEL20:(void)0;
1087 }
1088 }
1089 {
1090 nitc__model___MModule___linearize_mclasses(var19, var_parents); /* Direct call model#MModule#linearize_mclasses on <var19:MModule>*/
1091 }
1092 } else {
1093 }
1094 var_22 = var_parents;
1095 {
1096 var23 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_22);
1097 }
1098 var_24 = var23;
1099 for(;;) {
1100 {
1101 var25 = ((short int(*)(val* self))((((long)var_24&3)?class_info[((long)var_24&3)]:var_24->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_24); /* is_ok on <var_24:IndexedIterator[MClass]>*/
1102 }
1103 if (var25){
1104 } else {
1105 goto BREAK_label26;
1106 }
1107 {
1108 var27 = ((val*(*)(val* self))((((long)var_24&3)?class_info[((long)var_24&3)]:var_24->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_24); /* item on <var_24:IndexedIterator[MClass]>*/
1109 }
1110 var_parent = var27;
1111 {
1112 { /* Inline kernel#Object#== (var_parent,var_mclass) on <var_parent:MClass> */
1113 var_other = var_mclass;
1114 {
1115 { /* Inline kernel#Object#is_same_instance (var_parent,var_other) on <var_parent:MClass> */
1116 var32 = var_parent == var_other;
1117 var30 = var32;
1118 goto RET_LABEL31;
1119 RET_LABEL31:(void)0;
1120 }
1121 }
1122 var28 = var30;
1123 goto RET_LABEL29;
1124 RET_LABEL29:(void)0;
1125 }
1126 }
1127 if (var28){
1128 goto BREAK_label33;
1129 } else {
1130 }
1131 {
1132 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1133 var36 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1134 if (unlikely(var36 == NULL)) {
1135 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1136 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
1137 fatal_exit(1);
1138 }
1139 var34 = var36;
1140 RET_LABEL35:(void)0;
1141 }
1142 }
1143 {
1144 var37 = nitc__abstract_compiler___MModule___properties(var34, var_parent);
1145 }
1146 var_38 = var37;
1147 {
1148 var39 = ((val*(*)(val* self))((((long)var_38&3)?class_info[((long)var_38&3)]:var_38->class)->vft[COLOR_core__abstract_collection__Collection__iterator]))(var_38); /* iterator on <var_38:Set[MProperty]>*/
1149 }
1150 var_40 = var39;
1151 for(;;) {
1152 {
1153 var41 = ((short int(*)(val* self))((((long)var_40&3)?class_info[((long)var_40&3)]:var_40->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_40); /* is_ok on <var_40:Iterator[MProperty]>*/
1154 }
1155 if (var41){
1156 } else {
1157 goto BREAK_label42;
1158 }
1159 {
1160 var43 = ((val*(*)(val* self))((((long)var_40&3)?class_info[((long)var_40&3)]:var_40->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_40); /* item on <var_40:Iterator[MProperty]>*/
1161 }
1162 var_mproperty = var43;
1163 /* <var_mproperty:MProperty> isa MVirtualTypeProp */
1164 cltype = type_nitc__MVirtualTypeProp.color;
1165 idtype = type_nitc__MVirtualTypeProp.id;
1166 if(cltype >= var_mproperty->type->table_size) {
1167 var44 = 0;
1168 } else {
1169 var44 = var_mproperty->type->type_table[cltype] == idtype;
1170 }
1171 var45 = !var44;
1172 if (var45){
1173 goto BREAK_label46;
1174 } else {
1175 }
1176 {
1177 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:SeparateErasureCompiler> */
1178 var49 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
1179 if (unlikely(var49 == NULL)) {
1180 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
1181 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 86);
1182 fatal_exit(1);
1183 }
1184 var47 = var49;
1185 RET_LABEL48:(void)0;
1186 }
1187 }
1188 {
1189 var50 = ((val*(*)(val* self, val* p0))((((long)var47&3)?class_info[((long)var47&3)]:var47->class)->vft[COLOR_core__abstract_collection__MapRead___91d_93d]))(var47, var_mproperty); /* [] on <var47:Map[MVirtualTypeProp, Int]>*/
1190 }
1191 var51 = (long)(var50)>>2;
1192 var_color = var51;
1193 {
1194 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
1195 var54 = var_table->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
1196 var52 = var54;
1197 RET_LABEL53:(void)0;
1198 }
1199 }
1200 {
1201 { /* Inline kernel#Int#<= (var52,var_color) on <var52:Int> */
1202 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
1203 /* <var_color:Int> isa OTHER */
1204 var57 = 1; /* easy <var_color:Int> isa OTHER*/
1205 if (unlikely(!var57)) {
1206 var_class_name = type_core__Int.name;
1207 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1208 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 727);
1209 fatal_exit(1);
1210 }
1211 var60 = var52 <= var_color;
1212 var55 = var60;
1213 goto RET_LABEL56;
1214 RET_LABEL56:(void)0;
1215 }
1216 }
1217 if (var55){
1218 {
1219 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
1220 var63 = var_table->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
1221 var61 = var63;
1222 RET_LABEL62:(void)0;
1223 }
1224 }
1225 var_i = var61;
1226 var_64 = var_color;
1227 for(;;) {
1228 {
1229 { /* Inline kernel#Int#< (var_i,var_64) on <var_i:Int> */
1230 /* Covariant cast for argument 0 (i) <var_64:Int> isa OTHER */
1231 /* <var_64:Int> isa OTHER */
1232 var67 = 1; /* easy <var_64:Int> isa OTHER*/
1233 if (unlikely(!var67)) {
1234 var_class_name70 = type_core__Int.name;
1235 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name70);
1236 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 728);
1237 fatal_exit(1);
1238 }
1239 var71 = var_i < var_64;
1240 var65 = var71;
1241 goto RET_LABEL66;
1242 RET_LABEL66:(void)0;
1243 }
1244 }
1245 if (var65){
1246 } else {
1247 goto BREAK_label72;
1248 }
1249 {
1250 core___core__Array___core__abstract_collection__Sequence___91d_93d_61d(var_table, var_i, ((val*)NULL)); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1251 }
1252 {
1253 var73 = core___core__Int___Discrete__successor(var_i, 1l);
1254 }
1255 var_i = var73;
1256 }
1257 BREAK_label72: (void)0;
1258 } else {
1259 }
1260 {
1261 { /* Inline model#MProperty#mpropdefs (var_mproperty) on <var_mproperty:MProperty(MVirtualTypeProp)> */
1262 var76 = var_mproperty->attrs[COLOR_nitc__model__MProperty___mpropdefs].val; /* _mpropdefs on <var_mproperty:MProperty(MVirtualTypeProp)> */
1263 if (unlikely(var76 == NULL)) {
1264 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
1265 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1981);
1266 fatal_exit(1);
1267 }
1268 var74 = var76;
1269 RET_LABEL75:(void)0;
1270 }
1271 }
1272 var_77 = var74;
1273 {
1274 var78 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_77);
1275 }
1276 var_79 = var78;
1277 for(;;) {
1278 {
1279 var80 = ((short int(*)(val* self))((((long)var_79&3)?class_info[((long)var_79&3)]:var_79->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_79); /* is_ok on <var_79:IndexedIterator[MVirtualTypeDef]>*/
1280 }
1281 if (var80){
1282 } else {
1283 goto BREAK_label81;
1284 }
1285 {
1286 var82 = ((val*(*)(val* self))((((long)var_79&3)?class_info[((long)var_79&3)]:var_79->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_79); /* item on <var_79:IndexedIterator[MVirtualTypeDef]>*/
1287 }
1288 var_mpropdef = var82;
1289 {
1290 { /* Inline model#MPropDef#mclassdef (var_mpropdef) on <var_mpropdef:MVirtualTypeDef> */
1291 var85 = var_mpropdef->attrs[COLOR_nitc__model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef:MVirtualTypeDef> */
1292 if (unlikely(var85 == NULL)) {
1293 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1294 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 2227);
1295 fatal_exit(1);
1296 }
1297 var83 = var85;
1298 RET_LABEL84:(void)0;
1299 }
1300 }
1301 {
1302 { /* Inline model#MClassDef#mclass (var83) on <var83:MClassDef> */
1303 var88 = var83->attrs[COLOR_nitc__model__MClassDef___mclass].val; /* _mclass on <var83:MClassDef> */
1304 if (unlikely(var88 == NULL)) {
1305 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
1306 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 576);
1307 fatal_exit(1);
1308 }
1309 var86 = var88;
1310 RET_LABEL87:(void)0;
1311 }
1312 }
1313 {
1314 { /* Inline kernel#Object#== (var86,var_parent) on <var86:MClass> */
1315 var_other = var_parent;
1316 {
1317 { /* Inline kernel#Object#is_same_instance (var86,var_other) on <var86:MClass> */
1318 var93 = var86 == var_other;
1319 var91 = var93;
1320 goto RET_LABEL92;
1321 RET_LABEL92:(void)0;
1322 }
1323 }
1324 var89 = var91;
1325 goto RET_LABEL90;
1326 RET_LABEL90:(void)0;
1327 }
1328 }
1329 if (var89){
1330 {
1331 core___core__Array___core__abstract_collection__Sequence___91d_93d_61d(var_table, var_color, var_mpropdef); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1332 }
1333 } else {
1334 }
1335 {
1336 ((void(*)(val* self))((((long)var_79&3)?class_info[((long)var_79&3)]:var_79->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_79); /* next on <var_79:IndexedIterator[MVirtualTypeDef]>*/
1337 }
1338 }
1339 BREAK_label81: (void)0;
1340 {
1341 ((void(*)(val* self))((((long)var_79&3)?class_info[((long)var_79&3)]:var_79->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_79); /* finish on <var_79:IndexedIterator[MVirtualTypeDef]>*/
1342 }
1343 BREAK_label46: (void)0;
1344 {
1345 ((void(*)(val* self))((((long)var_40&3)?class_info[((long)var_40&3)]:var_40->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_40); /* next on <var_40:Iterator[MProperty]>*/
1346 }
1347 }
1348 BREAK_label42: (void)0;
1349 {
1350 ((void(*)(val* self))((((long)var_40&3)?class_info[((long)var_40&3)]:var_40->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_40); /* finish on <var_40:Iterator[MProperty]>*/
1351 }
1352 BREAK_label33: (void)0;
1353 {
1354 ((void(*)(val* self))((((long)var_24&3)?class_info[((long)var_24&3)]:var_24->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_24); /* next on <var_24:IndexedIterator[MClass]>*/
1355 }
1356 }
1357 BREAK_label26: (void)0;
1358 {
1359 ((void(*)(val* self))((((long)var_24&3)?class_info[((long)var_24&3)]:var_24->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_24); /* finish on <var_24:IndexedIterator[MClass]>*/
1360 }
1361 {
1362 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1363 var96 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1364 if (unlikely(var96 == NULL)) {
1365 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1366 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
1367 fatal_exit(1);
1368 }
1369 var94 = var96;
1370 RET_LABEL95:(void)0;
1371 }
1372 }
1373 {
1374 var97 = nitc__abstract_compiler___MModule___properties(var94, var_mclass);
1375 }
1376 var_98 = var97;
1377 {
1378 var99 = ((val*(*)(val* self))((((long)var_98&3)?class_info[((long)var_98&3)]:var_98->class)->vft[COLOR_core__abstract_collection__Collection__iterator]))(var_98); /* iterator on <var_98:Set[MProperty]>*/
1379 }
1380 var_100 = var99;
1381 for(;;) {
1382 {
1383 var101 = ((short int(*)(val* self))((((long)var_100&3)?class_info[((long)var_100&3)]:var_100->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_100); /* is_ok on <var_100:Iterator[MProperty]>*/
1384 }
1385 if (var101){
1386 } else {
1387 goto BREAK_label102;
1388 }
1389 {
1390 var103 = ((val*(*)(val* self))((((long)var_100&3)?class_info[((long)var_100&3)]:var_100->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_100); /* item on <var_100:Iterator[MProperty]>*/
1391 }
1392 var_mproperty104 = var103;
1393 /* <var_mproperty104:MProperty> isa MVirtualTypeProp */
1394 cltype106 = type_nitc__MVirtualTypeProp.color;
1395 idtype107 = type_nitc__MVirtualTypeProp.id;
1396 if(cltype106 >= var_mproperty104->type->table_size) {
1397 var105 = 0;
1398 } else {
1399 var105 = var_mproperty104->type->type_table[cltype106] == idtype107;
1400 }
1401 var108 = !var105;
1402 if (var108){
1403 goto BREAK_label109;
1404 } else {
1405 }
1406 {
1407 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:SeparateErasureCompiler> */
1408 var112 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
1409 if (unlikely(var112 == NULL)) {
1410 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
1411 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 86);
1412 fatal_exit(1);
1413 }
1414 var110 = var112;
1415 RET_LABEL111:(void)0;
1416 }
1417 }
1418 {
1419 var113 = ((val*(*)(val* self, val* p0))((((long)var110&3)?class_info[((long)var110&3)]:var110->class)->vft[COLOR_core__abstract_collection__MapRead___91d_93d]))(var110, var_mproperty104); /* [] on <var110:Map[MVirtualTypeProp, Int]>*/
1420 }
1421 var114 = (long)(var113)>>2;
1422 var_color115 = var114;
1423 {
1424 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
1425 var118 = var_table->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
1426 var116 = var118;
1427 RET_LABEL117:(void)0;
1428 }
1429 }
1430 {
1431 { /* Inline kernel#Int#<= (var116,var_color115) on <var116:Int> */
1432 /* Covariant cast for argument 0 (i) <var_color115:Int> isa OTHER */
1433 /* <var_color115:Int> isa OTHER */
1434 var121 = 1; /* easy <var_color115:Int> isa OTHER*/
1435 if (unlikely(!var121)) {
1436 var_class_name124 = type_core__Int.name;
1437 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name124);
1438 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 727);
1439 fatal_exit(1);
1440 }
1441 var125 = var116 <= var_color115;
1442 var119 = var125;
1443 goto RET_LABEL120;
1444 RET_LABEL120:(void)0;
1445 }
1446 }
1447 if (var119){
1448 {
1449 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MPropDef]> */
1450 var128 = var_table->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MPropDef]> */
1451 var126 = var128;
1452 RET_LABEL127:(void)0;
1453 }
1454 }
1455 var_i129 = var126;
1456 var_130 = var_color115;
1457 for(;;) {
1458 {
1459 { /* Inline kernel#Int#< (var_i129,var_130) on <var_i129:Int> */
1460 /* Covariant cast for argument 0 (i) <var_130:Int> isa OTHER */
1461 /* <var_130:Int> isa OTHER */
1462 var133 = 1; /* easy <var_130:Int> isa OTHER*/
1463 if (unlikely(!var133)) {
1464 var_class_name136 = type_core__Int.name;
1465 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name136);
1466 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 728);
1467 fatal_exit(1);
1468 }
1469 var137 = var_i129 < var_130;
1470 var131 = var137;
1471 goto RET_LABEL132;
1472 RET_LABEL132:(void)0;
1473 }
1474 }
1475 if (var131){
1476 } else {
1477 goto BREAK_label138;
1478 }
1479 {
1480 core___core__Array___core__abstract_collection__Sequence___91d_93d_61d(var_table, var_i129, ((val*)NULL)); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1481 }
1482 {
1483 var139 = core___core__Int___Discrete__successor(var_i129, 1l);
1484 }
1485 var_i129 = var139;
1486 }
1487 BREAK_label138: (void)0;
1488 } else {
1489 }
1490 {
1491 { /* Inline model#MProperty#mpropdefs (var_mproperty104) on <var_mproperty104:MProperty(MVirtualTypeProp)> */
1492 var142 = var_mproperty104->attrs[COLOR_nitc__model__MProperty___mpropdefs].val; /* _mpropdefs on <var_mproperty104:MProperty(MVirtualTypeProp)> */
1493 if (unlikely(var142 == NULL)) {
1494 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mpropdefs");
1495 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1981);
1496 fatal_exit(1);
1497 }
1498 var140 = var142;
1499 RET_LABEL141:(void)0;
1500 }
1501 }
1502 var_143 = var140;
1503 {
1504 var144 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_143);
1505 }
1506 var_145 = var144;
1507 for(;;) {
1508 {
1509 var146 = ((short int(*)(val* self))((((long)var_145&3)?class_info[((long)var_145&3)]:var_145->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_145); /* is_ok on <var_145:IndexedIterator[MVirtualTypeDef]>*/
1510 }
1511 if (var146){
1512 } else {
1513 goto BREAK_label147;
1514 }
1515 {
1516 var148 = ((val*(*)(val* self))((((long)var_145&3)?class_info[((long)var_145&3)]:var_145->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_145); /* item on <var_145:IndexedIterator[MVirtualTypeDef]>*/
1517 }
1518 var_mpropdef149 = var148;
1519 {
1520 { /* Inline model#MPropDef#mclassdef (var_mpropdef149) on <var_mpropdef149:MVirtualTypeDef> */
1521 var152 = var_mpropdef149->attrs[COLOR_nitc__model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef149:MVirtualTypeDef> */
1522 if (unlikely(var152 == NULL)) {
1523 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
1524 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 2227);
1525 fatal_exit(1);
1526 }
1527 var150 = var152;
1528 RET_LABEL151:(void)0;
1529 }
1530 }
1531 {
1532 { /* Inline model#MClassDef#mclass (var150) on <var150:MClassDef> */
1533 var155 = var150->attrs[COLOR_nitc__model__MClassDef___mclass].val; /* _mclass on <var150:MClassDef> */
1534 if (unlikely(var155 == NULL)) {
1535 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
1536 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 576);
1537 fatal_exit(1);
1538 }
1539 var153 = var155;
1540 RET_LABEL154:(void)0;
1541 }
1542 }
1543 {
1544 { /* Inline kernel#Object#== (var153,var_mclass) on <var153:MClass> */
1545 var_other = var_mclass;
1546 {
1547 { /* Inline kernel#Object#is_same_instance (var153,var_other) on <var153:MClass> */
1548 var160 = var153 == var_other;
1549 var158 = var160;
1550 goto RET_LABEL159;
1551 RET_LABEL159:(void)0;
1552 }
1553 }
1554 var156 = var158;
1555 goto RET_LABEL157;
1556 RET_LABEL157:(void)0;
1557 }
1558 }
1559 if (var156){
1560 {
1561 core___core__Array___core__abstract_collection__Sequence___91d_93d_61d(var_table, var_color115, var_mpropdef149); /* Direct call array#Array#[]= on <var_table:Array[nullable MPropDef]>*/
1562 }
1563 } else {
1564 }
1565 {
1566 ((void(*)(val* self))((((long)var_145&3)?class_info[((long)var_145&3)]:var_145->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_145); /* next on <var_145:IndexedIterator[MVirtualTypeDef]>*/
1567 }
1568 }
1569 BREAK_label147: (void)0;
1570 {
1571 ((void(*)(val* self))((((long)var_145&3)?class_info[((long)var_145&3)]:var_145->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_145); /* finish on <var_145:IndexedIterator[MVirtualTypeDef]>*/
1572 }
1573 BREAK_label109: (void)0;
1574 {
1575 ((void(*)(val* self))((((long)var_100&3)?class_info[((long)var_100&3)]:var_100->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_100); /* next on <var_100:Iterator[MProperty]>*/
1576 }
1577 }
1578 BREAK_label102: (void)0;
1579 {
1580 ((void(*)(val* self))((((long)var_100&3)?class_info[((long)var_100&3)]:var_100->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_100); /* finish on <var_100:Iterator[MProperty]>*/
1581 }
1582 {
1583 core___core__HashMap___core__abstract_collection__Map___91d_93d_61d(var_tables, var_mclass, var_table); /* Direct call hash_collection#HashMap#[]= on <var_tables:HashMap[MClass, Array[nullable MPropDef]]>*/
1584 }
1585 {
1586 ((void(*)(val* self))((((long)var_3&3)?class_info[((long)var_3&3)]:var_3->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_3); /* next on <var_3:Iterator[MClass]>*/
1587 }
1588 }
1589 BREAK_label: (void)0;
1590 {
1591 ((void(*)(val* self))((((long)var_3&3)?class_info[((long)var_3&3)]:var_3->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_3); /* finish on <var_3:Iterator[MClass]>*/
1592 }
1593 var = var_tables;
1594 goto RET_LABEL;
1595 RET_LABEL:;
1596 return var;
1597 }
1598 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MClass]] */
1599 val* nitc___nitc__SeparateErasureCompiler___build_class_typing_tables(val* self, val* p0) {
1600 val* var /* : Map[MClass, Array[nullable MClass]] */;
1601 val* var_mclasses /* var mclasses: Set[MClass] */;
1602 val* var1 /* : HashMap[MClass, Array[nullable MClass]] */;
1603 val* var_tables /* var tables: HashMap[MClass, Array[nullable MClass]] */;
1604 val* var_ /* var : Set[MClass] */;
1605 val* var2 /* : Iterator[nullable Object] */;
1606 val* var_3 /* var : Iterator[MClass] */;
1607 short int var4 /* : Bool */;
1608 val* var5 /* : nullable Object */;
1609 val* var_mclass /* var mclass: MClass */;
1610 val* var6 /* : Array[nullable MClass] */;
1611 val* var_table /* var table: Array[nullable MClass] */;
1612 val* var7 /* : Array[MClass] */;
1613 val* var_supers /* var supers: Array[MClass] */;
1614 val* var8 /* : MModule */;
1615 val* var10 /* : MModule */;
1616 val* var11 /* : POSet[MClass] */;
1617 short int var12 /* : Bool */;
1618 val* var13 /* : MModule */;
1619 val* var15 /* : MModule */;
1620 val* var16 /* : POSetElement[MClass] */;
1621 val* var17 /* : Collection[nullable Object] */;
1622 val* var18 /* : Array[nullable Object] */;
1623 val* var_19 /* var : Array[MClass] */;
1624 val* var20 /* : IndexedIterator[nullable Object] */;
1625 val* var_21 /* var : IndexedIterator[MClass] */;
1626 short int var22 /* : Bool */;
1627 val* var24 /* : nullable Object */;
1628 val* var_sup /* var sup: MClass */;
1629 val* var25 /* : Map[MClass, Int] */;
1630 val* var27 /* : Map[MClass, Int] */;
1631 val* var28 /* : nullable Object */;
1632 long var29 /* : Int */;
1633 long var_color /* var color: Int */;
1634 long var30 /* : Int */;
1635 long var32 /* : Int */;
1636 short int var33 /* : Bool */;
1637 short int var35 /* : Bool */;
1638 int cltype;
1639 int idtype;
1640 const char* var_class_name;
1641 short int var36 /* : Bool */;
1642 long var37 /* : Int */;
1643 long var39 /* : Int */;
1644 long var_i /* var i: Int */;
1645 long var_40 /* var : Int */;
1646 short int var41 /* : Bool */;
1647 short int var43 /* : Bool */;
1648 int cltype44;
1649 int idtype45;
1650 const char* var_class_name46;
1651 short int var47 /* : Bool */;
1652 long var49 /* : Int */;
1653 var_mclasses = p0;
1654 var1 = NEW_core__HashMap(&type_core__HashMap__nitc__MClass__core__Array__nullable__nitc__MClass);
1655 {
1656 core___core__HashMap___core__kernel__Object__init(var1); /* Direct call hash_collection#HashMap#init on <var1:HashMap[MClass, Array[nullable MClass]]>*/
1657 }
1658 var_tables = var1;
1659 var_ = var_mclasses;
1660 {
1661 var2 = ((val*(*)(val* self))((((long)var_&3)?class_info[((long)var_&3)]:var_->class)->vft[COLOR_core__abstract_collection__Collection__iterator]))(var_); /* iterator on <var_:Set[MClass]>*/
1662 }
1663 var_3 = var2;
1664 for(;;) {
1665 {
1666 var4 = ((short int(*)(val* self))((((long)var_3&3)?class_info[((long)var_3&3)]:var_3->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_3); /* is_ok on <var_3:Iterator[MClass]>*/
1667 }
1668 if (var4){
1669 } else {
1670 goto BREAK_label;
1671 }
1672 {
1673 var5 = ((val*(*)(val* self))((((long)var_3&3)?class_info[((long)var_3&3)]:var_3->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_3); /* item on <var_3:Iterator[MClass]>*/
1674 }
1675 var_mclass = var5;
1676 var6 = NEW_core__Array(&type_core__Array__nullable__nitc__MClass);
1677 {
1678 core___core__Array___core__kernel__Object__init(var6); /* Direct call array#Array#init on <var6:Array[nullable MClass]>*/
1679 }
1680 var_table = var6;
1681 var7 = NEW_core__Array(&type_core__Array__nitc__MClass);
1682 {
1683 core___core__Array___core__kernel__Object__init(var7); /* Direct call array#Array#init on <var7:Array[MClass]>*/
1684 }
1685 var_supers = var7;
1686 {
1687 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1688 var10 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1689 if (unlikely(var10 == NULL)) {
1690 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1691 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
1692 fatal_exit(1);
1693 }
1694 var8 = var10;
1695 RET_LABEL9:(void)0;
1696 }
1697 }
1698 {
1699 var11 = nitc__model___MModule___flatten_mclass_hierarchy(var8);
1700 }
1701 {
1702 var12 = poset___poset__POSet___core__abstract_collection__Collection__has(var11, var_mclass);
1703 }
1704 if (var12){
1705 {
1706 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
1707 var15 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
1708 if (unlikely(var15 == NULL)) {
1709 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
1710 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
1711 fatal_exit(1);
1712 }
1713 var13 = var15;
1714 RET_LABEL14:(void)0;
1715 }
1716 }
1717 {
1718 var16 = nitc___nitc__MClass___in_hierarchy(var_mclass, var13);
1719 }
1720 {
1721 var17 = poset___poset__POSetElement___greaters(var16);
1722 }
1723 {
1724 var18 = ((val*(*)(val* self))((((long)var17&3)?class_info[((long)var17&3)]:var17->class)->vft[COLOR_core__array__Collection__to_a]))(var17); /* to_a on <var17:Collection[nullable Object](Collection[MClass])>*/
1725 }
1726 var_supers = var18;
1727 } else {
1728 }
1729 var_19 = var_supers;
1730 {
1731 var20 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_19);
1732 }
1733 var_21 = var20;
1734 for(;;) {
1735 {
1736 var22 = ((short int(*)(val* self))((((long)var_21&3)?class_info[((long)var_21&3)]:var_21->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_21); /* is_ok on <var_21:IndexedIterator[MClass]>*/
1737 }
1738 if (var22){
1739 } else {
1740 goto BREAK_label23;
1741 }
1742 {
1743 var24 = ((val*(*)(val* self))((((long)var_21&3)?class_info[((long)var_21&3)]:var_21->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_21); /* item on <var_21:IndexedIterator[MClass]>*/
1744 }
1745 var_sup = var24;
1746 {
1747 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors (self) on <self:SeparateErasureCompiler> */
1748 var27 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
1749 if (unlikely(var27 == NULL)) {
1750 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
1751 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 85);
1752 fatal_exit(1);
1753 }
1754 var25 = var27;
1755 RET_LABEL26:(void)0;
1756 }
1757 }
1758 {
1759 var28 = ((val*(*)(val* self, val* p0))((((long)var25&3)?class_info[((long)var25&3)]:var25->class)->vft[COLOR_core__abstract_collection__MapRead___91d_93d]))(var25, var_sup); /* [] on <var25:Map[MClass, Int]>*/
1760 }
1761 var29 = (long)(var28)>>2;
1762 var_color = var29;
1763 {
1764 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MClass]> */
1765 var32 = var_table->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MClass]> */
1766 var30 = var32;
1767 RET_LABEL31:(void)0;
1768 }
1769 }
1770 {
1771 { /* Inline kernel#Int#<= (var30,var_color) on <var30:Int> */
1772 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
1773 /* <var_color:Int> isa OTHER */
1774 var35 = 1; /* easy <var_color:Int> isa OTHER*/
1775 if (unlikely(!var35)) {
1776 var_class_name = type_core__Int.name;
1777 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1778 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 727);
1779 fatal_exit(1);
1780 }
1781 var36 = var30 <= var_color;
1782 var33 = var36;
1783 goto RET_LABEL34;
1784 RET_LABEL34:(void)0;
1785 }
1786 }
1787 if (var33){
1788 {
1789 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MClass]> */
1790 var39 = var_table->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MClass]> */
1791 var37 = var39;
1792 RET_LABEL38:(void)0;
1793 }
1794 }
1795 var_i = var37;
1796 var_40 = var_color;
1797 for(;;) {
1798 {
1799 { /* Inline kernel#Int#< (var_i,var_40) on <var_i:Int> */
1800 /* Covariant cast for argument 0 (i) <var_40:Int> isa OTHER */
1801 /* <var_40:Int> isa OTHER */
1802 var43 = 1; /* easy <var_40:Int> isa OTHER*/
1803 if (unlikely(!var43)) {
1804 var_class_name46 = type_core__Int.name;
1805 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name46);
1806 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 728);
1807 fatal_exit(1);
1808 }
1809 var47 = var_i < var_40;
1810 var41 = var47;
1811 goto RET_LABEL42;
1812 RET_LABEL42:(void)0;
1813 }
1814 }
1815 if (var41){
1816 } else {
1817 goto BREAK_label48;
1818 }
1819 {
1820 core___core__Array___core__abstract_collection__Sequence___91d_93d_61d(var_table, var_i, ((val*)NULL)); /* Direct call array#Array#[]= on <var_table:Array[nullable MClass]>*/
1821 }
1822 {
1823 var49 = core___core__Int___Discrete__successor(var_i, 1l);
1824 }
1825 var_i = var49;
1826 }
1827 BREAK_label48: (void)0;
1828 } else {
1829 }
1830 {
1831 core___core__Array___core__abstract_collection__Sequence___91d_93d_61d(var_table, var_color, var_sup); /* Direct call array#Array#[]= on <var_table:Array[nullable MClass]>*/
1832 }
1833 {
1834 ((void(*)(val* self))((((long)var_21&3)?class_info[((long)var_21&3)]:var_21->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_21); /* next on <var_21:IndexedIterator[MClass]>*/
1835 }
1836 }
1837 BREAK_label23: (void)0;
1838 {
1839 ((void(*)(val* self))((((long)var_21&3)?class_info[((long)var_21&3)]:var_21->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_21); /* finish on <var_21:IndexedIterator[MClass]>*/
1840 }
1841 {
1842 core___core__HashMap___core__abstract_collection__Map___91d_93d_61d(var_tables, var_mclass, var_table); /* Direct call hash_collection#HashMap#[]= on <var_tables:HashMap[MClass, Array[nullable MClass]]>*/
1843 }
1844 {
1845 ((void(*)(val* self))((((long)var_3&3)?class_info[((long)var_3&3)]:var_3->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_3); /* next on <var_3:Iterator[MClass]>*/
1846 }
1847 }
1848 BREAK_label: (void)0;
1849 {
1850 ((void(*)(val* self))((((long)var_3&3)?class_info[((long)var_3&3)]:var_3->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_3); /* finish on <var_3:Iterator[MClass]>*/
1851 }
1852 var = var_tables;
1853 goto RET_LABEL;
1854 RET_LABEL:;
1855 return var;
1856 }
1857 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: SeparateErasureCompiler) */
1858 void nitc___nitc__SeparateErasureCompiler___nitc__abstract_compiler__AbstractCompiler__compile_header_structs(val* self) {
1859 val* var /* : CodeWriter */;
1860 val* var2 /* : CodeWriter */;
1861 static val* varonce;
1862 val* var3 /* : String */;
1863 char* var4 /* : NativeString */;
1864 val* var5 /* : String */;
1865 val* var6 /* : CodeWriter */;
1866 val* var8 /* : CodeWriter */;
1867 static val* varonce9;
1868 val* var10 /* : String */;
1869 char* var11 /* : NativeString */;
1870 val* var12 /* : String */;
1871 val* var13 /* : CodeWriter */;
1872 val* var15 /* : CodeWriter */;
1873 static val* varonce16;
1874 val* var17 /* : String */;
1875 char* var18 /* : NativeString */;
1876 val* var19 /* : String */;
1877 val* var20 /* : CodeWriter */;
1878 val* var22 /* : CodeWriter */;
1879 static val* varonce23;
1880 val* var24 /* : String */;
1881 char* var25 /* : NativeString */;
1882 val* var26 /* : String */;
1883 val* var27 /* : CodeWriter */;
1884 val* var29 /* : CodeWriter */;
1885 static val* varonce30;
1886 val* var31 /* : String */;
1887 char* var32 /* : NativeString */;
1888 val* var33 /* : String */;
1889 val* var34 /* : CodeWriter */;
1890 val* var36 /* : CodeWriter */;
1891 static val* varonce37;
1892 val* var38 /* : String */;
1893 char* var39 /* : NativeString */;
1894 val* var40 /* : String */;
1895 {
1896 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
1897 var2 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
1898 if (unlikely(var2 == NULL)) {
1899 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
1900 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
1901 fatal_exit(1);
1902 }
1903 var = var2;
1904 RET_LABEL1:(void)0;
1905 }
1906 }
1907 if (likely(varonce!=NULL)) {
1908 var3 = varonce;
1909 } else {
1910 var4 = "typedef void(*nitmethod_t)(void); /* general C type representing a Nit method. */";
1911 var5 = core__flat___NativeString___to_s_full(var4, 81l, 81l);
1912 var3 = var5;
1913 varonce = var3;
1914 }
1915 {
1916 nitc___nitc__CodeWriter___add_decl(var, var3); /* Direct call abstract_compiler#CodeWriter#add_decl on <var:CodeWriter>*/
1917 }
1918 {
1919 nitc___nitc__SeparateCompiler___compile_header_attribute_structs(self); /* Direct call separate_compiler#SeparateCompiler#compile_header_attribute_structs on <self:SeparateErasureCompiler>*/
1920 }
1921 {
1922 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
1923 var8 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
1924 if (unlikely(var8 == NULL)) {
1925 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
1926 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
1927 fatal_exit(1);
1928 }
1929 var6 = var8;
1930 RET_LABEL7:(void)0;
1931 }
1932 }
1933 if (likely(varonce9!=NULL)) {
1934 var10 = varonce9;
1935 } else {
1936 var11 = "struct class { int id; const char *name; int box_kind; int color; const struct vts_table *vts_table; const struct type_table *type_table; nitmethod_t vft[]; }; /* general C type representing a Nit class. */";
1937 var12 = core__flat___NativeString___to_s_full(var11, 206l, 206l);
1938 var10 = var12;
1939 varonce9 = var10;
1940 }
1941 {
1942 nitc___nitc__CodeWriter___add_decl(var6, var10); /* Direct call abstract_compiler#CodeWriter#add_decl on <var6:CodeWriter>*/
1943 }
1944 {
1945 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
1946 var15 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
1947 if (unlikely(var15 == NULL)) {
1948 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
1949 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
1950 fatal_exit(1);
1951 }
1952 var13 = var15;
1953 RET_LABEL14:(void)0;
1954 }
1955 }
1956 if (likely(varonce16!=NULL)) {
1957 var17 = varonce16;
1958 } else {
1959 var18 = "struct type_table { int size; int table[]; }; /* colorized type table. */";
1960 var19 = core__flat___NativeString___to_s_full(var18, 73l, 73l);
1961 var17 = var19;
1962 varonce16 = var17;
1963 }
1964 {
1965 nitc___nitc__CodeWriter___add_decl(var13, var17); /* Direct call abstract_compiler#CodeWriter#add_decl on <var13:CodeWriter>*/
1966 }
1967 {
1968 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
1969 var22 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
1970 if (unlikely(var22 == NULL)) {
1971 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
1972 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
1973 fatal_exit(1);
1974 }
1975 var20 = var22;
1976 RET_LABEL21:(void)0;
1977 }
1978 }
1979 if (likely(varonce23!=NULL)) {
1980 var24 = varonce23;
1981 } else {
1982 var25 = "struct vts_entry { short int is_nullable; const struct class *class; }; /* link (nullable or not) between the vts and is bound. */";
1983 var26 = core__flat___NativeString___to_s_full(var25, 130l, 130l);
1984 var24 = var26;
1985 varonce23 = var24;
1986 }
1987 {
1988 nitc___nitc__CodeWriter___add_decl(var20, var24); /* Direct call abstract_compiler#CodeWriter#add_decl on <var20:CodeWriter>*/
1989 }
1990 {
1991 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
1992 var29 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
1993 if (unlikely(var29 == NULL)) {
1994 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
1995 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
1996 fatal_exit(1);
1997 }
1998 var27 = var29;
1999 RET_LABEL28:(void)0;
2000 }
2001 }
2002 if (likely(varonce30!=NULL)) {
2003 var31 = varonce30;
2004 } else {
2005 var32 = "struct vts_table { int dummy; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
2006 var33 = core__flat___NativeString___to_s_full(var32, 105l, 105l);
2007 var31 = var33;
2008 varonce30 = var31;
2009 }
2010 {
2011 nitc___nitc__CodeWriter___add_decl(var27, var31); /* Direct call abstract_compiler#CodeWriter#add_decl on <var27:CodeWriter>*/
2012 }
2013 {
2014 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
2015 var36 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
2016 if (unlikely(var36 == NULL)) {
2017 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
2018 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
2019 fatal_exit(1);
2020 }
2021 var34 = var36;
2022 RET_LABEL35:(void)0;
2023 }
2024 }
2025 if (likely(varonce37!=NULL)) {
2026 var38 = varonce37;
2027 } else {
2028 var39 = "typedef struct instance { const struct class *class; nitattribute_t attrs[1]; } val; /* general C type representing a Nit instance. */";
2029 var40 = core__flat___NativeString___to_s_full(var39, 134l, 134l);
2030 var38 = var40;
2031 varonce37 = var38;
2032 }
2033 {
2034 nitc___nitc__CodeWriter___add_decl(var34, var38); /* Direct call abstract_compiler#CodeWriter#add_decl on <var34:CodeWriter>*/
2035 }
2036 RET_LABEL:;
2037 }
2038 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: SeparateErasureCompiler, MClass) */
2039 void nitc___nitc__SeparateErasureCompiler___nitc__separate_compiler__SeparateCompiler__compile_class_to_c(val* self, val* p0) {
2040 val* var_mclass /* var mclass: MClass */;
2041 val* var /* : MClassDef */;
2042 val* var2 /* : MClassDef */;
2043 val* var3 /* : MClassType */;
2044 val* var5 /* : MClassType */;
2045 val* var_mtype /* var mtype: MClassType */;
2046 val* var6 /* : String */;
2047 val* var_c_name /* var c_name: String */;
2048 val* var7 /* : Map[MClass, Array[nullable MClass]] */;
2049 val* var9 /* : Map[MClass, Array[nullable MClass]] */;
2050 val* var10 /* : nullable Object */;
2051 val* var_class_table /* var class_table: Array[nullable MClass] */;
2052 val* var11 /* : SeparateCompilerVisitor */;
2053 val* var_v /* var v: SeparateCompilerVisitor */;
2054 val* var12 /* : nullable RapidTypeAnalysis */;
2055 val* var14 /* : nullable RapidTypeAnalysis */;
2056 val* var_rta /* var rta: nullable RapidTypeAnalysis */;
2057 short int var_is_dead /* var is_dead: Bool */;
2058 short int var15 /* : Bool */;
2059 short int var16 /* : Bool */;
2060 short int var17 /* : Bool */;
2061 short int var18 /* : Bool */;
2062 short int var19 /* : Bool */;
2063 short int var_ /* var : Bool */;
2064 short int var20 /* : Bool */;
2065 short int var21 /* : Bool */;
2066 val* var_other /* var other: nullable Object */;
2067 short int var23 /* : Bool */;
2068 short int var24 /* : Bool */;
2069 short int var_25 /* var : Bool */;
2070 val* var26 /* : HashSet[MClass] */;
2071 val* var28 /* : HashSet[MClass] */;
2072 short int var29 /* : Bool */;
2073 short int var30 /* : Bool */;
2074 short int var_31 /* var : Bool */;
2075 short int var32 /* : Bool */;
2076 short int var33 /* : Bool */;
2077 short int var_34 /* var : Bool */;
2078 val* var35 /* : String */;
2079 val* var37 /* : String */;
2080 static val* varonce;
2081 val* var38 /* : String */;
2082 char* var39 /* : NativeString */;
2083 val* var40 /* : String */;
2084 short int var41 /* : Bool */;
2085 short int var43 /* : Bool */;
2086 short int var44 /* : Bool */;
2087 val* var46 /* : NativeArray[String] */;
2088 static val* varonce45;
2089 static val* varonce47;
2090 val* var48 /* : String */;
2091 char* var49 /* : NativeString */;
2092 val* var50 /* : String */;
2093 static val* varonce51;
2094 val* var52 /* : String */;
2095 char* var53 /* : NativeString */;
2096 val* var54 /* : String */;
2097 val* var55 /* : String */;
2098 val* var57 /* : NativeArray[String] */;
2099 static val* varonce56;
2100 static val* varonce58;
2101 val* var59 /* : String */;
2102 char* var60 /* : NativeString */;
2103 val* var61 /* : String */;
2104 val* var62 /* : String */;
2105 val* var64 /* : NativeArray[String] */;
2106 static val* varonce63;
2107 static val* varonce65;
2108 val* var66 /* : String */;
2109 char* var67 /* : NativeString */;
2110 val* var68 /* : String */;
2111 static val* varonce69;
2112 val* var70 /* : String */;
2113 char* var71 /* : NativeString */;
2114 val* var72 /* : String */;
2115 val* var73 /* : String */;
2116 val* var75 /* : NativeArray[String] */;
2117 static val* varonce74;
2118 static val* varonce76;
2119 val* var77 /* : String */;
2120 char* var78 /* : NativeString */;
2121 val* var79 /* : String */;
2122 static val* varonce80;
2123 val* var81 /* : String */;
2124 char* var82 /* : NativeString */;
2125 val* var83 /* : String */;
2126 val* var84 /* : String */;
2127 val* var86 /* : NativeArray[String] */;
2128 static val* varonce85;
2129 static val* varonce87;
2130 val* var88 /* : String */;
2131 char* var89 /* : NativeString */;
2132 val* var90 /* : String */;
2133 static val* varonce91;
2134 val* var92 /* : String */;
2135 char* var93 /* : NativeString */;
2136 val* var94 /* : String */;
2137 val* var95 /* : String */;
2138 val* var97 /* : NativeArray[String] */;
2139 static val* varonce96;
2140 static val* varonce98;
2141 val* var99 /* : String */;
2142 char* var100 /* : NativeString */;
2143 val* var101 /* : String */;
2144 val* var102 /* : Map[MClass, Int] */;
2145 val* var104 /* : Map[MClass, Int] */;
2146 val* var105 /* : nullable Object */;
2147 val* var106 /* : String */;
2148 long var107 /* : Int */;
2149 val* var108 /* : String */;
2150 val* var110 /* : NativeArray[String] */;
2151 static val* varonce109;
2152 static val* varonce111;
2153 val* var112 /* : String */;
2154 char* var113 /* : NativeString */;
2155 val* var114 /* : String */;
2156 static val* varonce115;
2157 val* var116 /* : String */;
2158 char* var117 /* : NativeString */;
2159 val* var118 /* : String */;
2160 val* var119 /* : String */;
2161 val* var121 /* : String */;
2162 val* var122 /* : String */;
2163 val* var124 /* : NativeArray[String] */;
2164 static val* varonce123;
2165 static val* varonce125;
2166 val* var126 /* : String */;
2167 char* var127 /* : NativeString */;
2168 val* var128 /* : String */;
2169 long var129 /* : Int */;
2170 val* var130 /* : String */;
2171 val* var131 /* : String */;
2172 val* var133 /* : NativeArray[String] */;
2173 static val* varonce132;
2174 static val* varonce134;
2175 val* var135 /* : String */;
2176 char* var136 /* : NativeString */;
2177 val* var137 /* : String */;
2178 val* var138 /* : Map[MClass, Int] */;
2179 val* var140 /* : Map[MClass, Int] */;
2180 val* var141 /* : nullable Object */;
2181 val* var142 /* : String */;
2182 long var143 /* : Int */;
2183 val* var144 /* : String */;
2184 short int var145 /* : Bool */;
2185 short int var146 /* : Bool */;
2186 val* var148 /* : NativeArray[String] */;
2187 static val* varonce147;
2188 static val* varonce149;
2189 val* var150 /* : String */;
2190 char* var151 /* : NativeString */;
2191 val* var152 /* : String */;
2192 val* var153 /* : String */;
2193 val* var155 /* : NativeArray[String] */;
2194 static val* varonce154;
2195 static val* varonce156;
2196 val* var157 /* : String */;
2197 char* var158 /* : NativeString */;
2198 val* var159 /* : String */;
2199 static val* varonce160;
2200 val* var161 /* : String */;
2201 char* var162 /* : NativeString */;
2202 val* var163 /* : String */;
2203 val* var164 /* : String */;
2204 static val* varonce165;
2205 val* var166 /* : String */;
2206 char* var167 /* : NativeString */;
2207 val* var168 /* : String */;
2208 val* var170 /* : NativeArray[String] */;
2209 static val* varonce169;
2210 static val* varonce171;
2211 val* var172 /* : String */;
2212 char* var173 /* : NativeString */;
2213 val* var174 /* : String */;
2214 static val* varonce175;
2215 val* var176 /* : String */;
2216 char* var177 /* : NativeString */;
2217 val* var178 /* : String */;
2218 val* var179 /* : String */;
2219 static val* varonce180;
2220 val* var181 /* : String */;
2221 char* var182 /* : NativeString */;
2222 val* var183 /* : String */;
2223 val* var184 /* : Map[MClass, Array[nullable MPropDef]] */;
2224 val* var186 /* : Map[MClass, Array[nullable MPropDef]] */;
2225 val* var187 /* : nullable Object */;
2226 val* var_vft /* var vft: nullable Array[nullable MPropDef] */;
2227 short int var188 /* : Bool */;
2228 short int var189 /* : Bool */;
2229 short int var191 /* : Bool */;
2230 short int var192 /* : Bool */;
2231 long var_i /* var i: Int */;
2232 long var193 /* : Int */;
2233 long var195 /* : Int */;
2234 long var_196 /* var : Int */;
2235 short int var197 /* : Bool */;
2236 short int var199 /* : Bool */;
2237 int cltype;
2238 int idtype;
2239 const char* var_class_name;
2240 short int var200 /* : Bool */;
2241 val* var201 /* : nullable Object */;
2242 val* var_mpropdef /* var mpropdef: nullable MPropDef */;
2243 short int var202 /* : Bool */;
2244 short int var203 /* : Bool */;
2245 val* var_other205 /* var other: nullable Object */;
2246 short int var206 /* : Bool */;
2247 short int var208 /* : Bool */;
2248 static val* varonce209;
2249 val* var210 /* : String */;
2250 char* var211 /* : NativeString */;
2251 val* var212 /* : String */;
2252 short int var213 /* : Bool */;
2253 int cltype214;
2254 int idtype215;
2255 short int var216 /* : Bool */;
2256 short int var217 /* : Bool */;
2257 short int var218 /* : Bool */;
2258 short int var220 /* : Bool */;
2259 short int var221 /* : Bool */;
2260 short int var_222 /* var : Bool */;
2261 val* var223 /* : HashSet[MMethodDef] */;
2262 val* var225 /* : HashSet[MMethodDef] */;
2263 short int var226 /* : Bool */;
2264 short int var227 /* : Bool */;
2265 val* var229 /* : NativeArray[String] */;
2266 static val* varonce228;
2267 static val* varonce230;
2268 val* var231 /* : String */;
2269 char* var232 /* : NativeString */;
2270 val* var233 /* : String */;
2271 static val* varonce234;
2272 val* var235 /* : String */;
2273 char* var236 /* : NativeString */;
2274 val* var237 /* : String */;
2275 static val* varonce238;
2276 val* var239 /* : String */;
2277 char* var240 /* : NativeString */;
2278 val* var241 /* : String */;
2279 static val* varonce242;
2280 val* var243 /* : String */;
2281 char* var244 /* : NativeString */;
2282 val* var245 /* : String */;
2283 val* var246 /* : MModule */;
2284 val* var248 /* : MModule */;
2285 val* var249 /* : String */;
2286 val* var250 /* : String */;
2287 val* var251 /* : String */;
2288 val* var252 /* : String */;
2289 val* var254 /* : SeparateRuntimeFunction */;
2290 val* var_rf /* var rf: SeparateRuntimeFunction */;
2291 val* var255 /* : String */;
2292 val* var257 /* : NativeArray[String] */;
2293 static val* varonce256;
2294 static val* varonce258;
2295 val* var259 /* : String */;
2296 char* var260 /* : NativeString */;
2297 val* var261 /* : String */;
2298 static val* varonce262;
2299 val* var263 /* : String */;
2300 char* var264 /* : NativeString */;
2301 val* var265 /* : String */;
2302 static val* varonce266;
2303 val* var267 /* : String */;
2304 char* var268 /* : NativeString */;
2305 val* var269 /* : String */;
2306 val* var270 /* : String */;
2307 val* var271 /* : String */;
2308 val* var272 /* : String */;
2309 long var273 /* : Int */;
2310 static val* varonce274;
2311 val* var275 /* : String */;
2312 char* var276 /* : NativeString */;
2313 val* var277 /* : String */;
2314 static val* varonce278;
2315 val* var279 /* : String */;
2316 char* var280 /* : NativeString */;
2317 val* var281 /* : String */;
2318 val* var283 /* : NativeArray[String] */;
2319 static val* varonce282;
2320 static val* varonce284;
2321 val* var285 /* : String */;
2322 char* var286 /* : NativeString */;
2323 val* var287 /* : String */;
2324 static val* varonce288;
2325 val* var289 /* : String */;
2326 char* var290 /* : NativeString */;
2327 val* var291 /* : String */;
2328 val* var292 /* : String */;
2329 val* var294 /* : NativeArray[String] */;
2330 static val* varonce293;
2331 static val* varonce295;
2332 val* var296 /* : String */;
2333 char* var297 /* : NativeString */;
2334 val* var298 /* : String */;
2335 long var299 /* : Int */;
2336 long var301 /* : Int */;
2337 val* var302 /* : String */;
2338 val* var303 /* : String */;
2339 static val* varonce304;
2340 val* var305 /* : String */;
2341 char* var306 /* : NativeString */;
2342 val* var307 /* : String */;
2343 val* var_308 /* var : Array[nullable MClass] */;
2344 val* var309 /* : IndexedIterator[nullable Object] */;
2345 val* var_310 /* var : IndexedIterator[nullable MClass] */;
2346 short int var311 /* : Bool */;
2347 val* var313 /* : nullable Object */;
2348 val* var_msuper /* var msuper: nullable MClass */;
2349 short int var314 /* : Bool */;
2350 short int var315 /* : Bool */;
2351 short int var317 /* : Bool */;
2352 short int var319 /* : Bool */;
2353 static val* varonce320;
2354 val* var321 /* : String */;
2355 char* var322 /* : NativeString */;
2356 val* var323 /* : String */;
2357 val* var325 /* : NativeArray[String] */;
2358 static val* varonce324;
2359 static val* varonce326;
2360 val* var327 /* : String */;
2361 char* var328 /* : NativeString */;
2362 val* var329 /* : String */;
2363 static val* varonce330;
2364 val* var331 /* : String */;
2365 char* var332 /* : NativeString */;
2366 val* var333 /* : String */;
2367 val* var334 /* : Map[MClass, Int] */;
2368 val* var336 /* : Map[MClass, Int] */;
2369 val* var337 /* : nullable Object */;
2370 val* var338 /* : String */;
2371 long var339 /* : Int */;
2372 val* var340 /* : String */;
2373 val* var341 /* : String */;
2374 static val* varonce342;
2375 val* var343 /* : String */;
2376 char* var344 /* : NativeString */;
2377 val* var345 /* : String */;
2378 static val* varonce346;
2379 val* var347 /* : String */;
2380 char* var348 /* : NativeString */;
2381 val* var349 /* : String */;
2382 short int var350 /* : Bool */;
2383 short int var351 /* : Bool */;
2384 short int var_352 /* var : Bool */;
2385 val* var353 /* : MClass */;
2386 val* var355 /* : MClass */;
2387 val* var356 /* : String */;
2388 val* var358 /* : String */;
2389 static val* varonce359;
2390 val* var360 /* : String */;
2391 char* var361 /* : NativeString */;
2392 val* var362 /* : String */;
2393 short int var363 /* : Bool */;
2394 val* var364 /* : CodeWriter */;
2395 val* var366 /* : CodeWriter */;
2396 val* var368 /* : NativeArray[String] */;
2397 static val* varonce367;
2398 static val* varonce369;
2399 val* var370 /* : String */;
2400 char* var371 /* : NativeString */;
2401 val* var372 /* : String */;
2402 static val* varonce373;
2403 val* var374 /* : String */;
2404 char* var375 /* : NativeString */;
2405 val* var376 /* : String */;
2406 val* var377 /* : String */;
2407 val* var378 /* : CodeWriter */;
2408 val* var380 /* : CodeWriter */;
2409 static val* varonce381;
2410 val* var382 /* : String */;
2411 char* var383 /* : NativeString */;
2412 val* var384 /* : String */;
2413 val* var385 /* : CodeWriter */;
2414 val* var387 /* : CodeWriter */;
2415 val* var389 /* : NativeArray[String] */;
2416 static val* varonce388;
2417 static val* varonce390;
2418 val* var391 /* : String */;
2419 char* var392 /* : NativeString */;
2420 val* var393 /* : String */;
2421 val* var394 /* : String */;
2422 val* var395 /* : String */;
2423 val* var396 /* : CodeWriter */;
2424 val* var398 /* : CodeWriter */;
2425 static val* varonce399;
2426 val* var400 /* : String */;
2427 char* var401 /* : NativeString */;
2428 val* var402 /* : String */;
2429 val* var404 /* : NativeArray[String] */;
2430 static val* varonce403;
2431 static val* varonce405;
2432 val* var406 /* : String */;
2433 char* var407 /* : NativeString */;
2434 val* var408 /* : String */;
2435 val* var409 /* : String */;
2436 val* var411 /* : NativeArray[String] */;
2437 static val* varonce410;
2438 static val* varonce412;
2439 val* var413 /* : String */;
2440 char* var414 /* : NativeString */;
2441 val* var415 /* : String */;
2442 static val* varonce416;
2443 val* var417 /* : String */;
2444 char* var418 /* : NativeString */;
2445 val* var419 /* : String */;
2446 static val* varonce420;
2447 val* var421 /* : String */;
2448 char* var422 /* : NativeString */;
2449 val* var423 /* : String */;
2450 val* var424 /* : String */;
2451 val* var425 /* : String */;
2452 val* var427 /* : NativeArray[String] */;
2453 static val* varonce426;
2454 static val* varonce428;
2455 val* var429 /* : String */;
2456 char* var430 /* : NativeString */;
2457 val* var431 /* : String */;
2458 static val* varonce432;
2459 val* var433 /* : String */;
2460 char* var434 /* : NativeString */;
2461 val* var435 /* : String */;
2462 val* var436 /* : String */;
2463 val* var437 /* : String */;
2464 val* var439 /* : NativeArray[String] */;
2465 static val* varonce438;
2466 static val* varonce440;
2467 val* var441 /* : String */;
2468 char* var442 /* : NativeString */;
2469 val* var443 /* : String */;
2470 static val* varonce444;
2471 val* var445 /* : String */;
2472 char* var446 /* : NativeString */;
2473 val* var447 /* : String */;
2474 static val* varonce448;
2475 val* var449 /* : String */;
2476 char* var450 /* : NativeString */;
2477 val* var451 /* : String */;
2478 val* var452 /* : String */;
2479 val* var453 /* : String */;
2480 val* var454 /* : String */;
2481 val* var456 /* : NativeArray[String] */;
2482 static val* varonce455;
2483 static val* varonce457;
2484 val* var458 /* : String */;
2485 char* var459 /* : NativeString */;
2486 val* var460 /* : String */;
2487 static val* varonce461;
2488 val* var462 /* : String */;
2489 char* var463 /* : NativeString */;
2490 val* var464 /* : String */;
2491 static val* varonce465;
2492 val* var466 /* : String */;
2493 char* var467 /* : NativeString */;
2494 val* var468 /* : String */;
2495 val* var469 /* : String */;
2496 val* var471 /* : NativeArray[String] */;
2497 static val* varonce470;
2498 static val* varonce472;
2499 val* var473 /* : String */;
2500 char* var474 /* : NativeString */;
2501 val* var475 /* : String */;
2502 val* var476 /* : String */;
2503 val* var478 /* : NativeArray[String] */;
2504 static val* varonce477;
2505 static val* varonce479;
2506 val* var480 /* : String */;
2507 char* var481 /* : NativeString */;
2508 val* var482 /* : String */;
2509 static val* varonce483;
2510 val* var484 /* : String */;
2511 char* var485 /* : NativeString */;
2512 val* var486 /* : String */;
2513 val* var487 /* : String */;
2514 static val* varonce488;
2515 val* var489 /* : String */;
2516 char* var490 /* : NativeString */;
2517 val* var491 /* : String */;
2518 static val* varonce492;
2519 val* var493 /* : String */;
2520 char* var494 /* : NativeString */;
2521 val* var495 /* : String */;
2522 static val* varonce496;
2523 val* var497 /* : String */;
2524 char* var498 /* : NativeString */;
2525 val* var499 /* : String */;
2526 val* var500 /* : MClass */;
2527 val* var502 /* : MClass */;
2528 val* var503 /* : String */;
2529 val* var505 /* : String */;
2530 static val* varonce506;
2531 val* var507 /* : String */;
2532 char* var508 /* : NativeString */;
2533 val* var509 /* : String */;
2534 short int var510 /* : Bool */;
2535 short int var512 /* : Bool */;
2536 short int var513 /* : Bool */;
2537 val* var514 /* : SeparateCompilerVisitor */;
2538 val* var516 /* : NativeArray[String] */;
2539 static val* varonce515;
2540 static val* varonce517;
2541 val* var518 /* : String */;
2542 char* var519 /* : NativeString */;
2543 val* var520 /* : String */;
2544 val* var521 /* : String */;
2545 val* var523 /* : NativeArray[String] */;
2546 static val* varonce522;
2547 static val* varonce524;
2548 val* var525 /* : String */;
2549 char* var526 /* : NativeString */;
2550 val* var527 /* : String */;
2551 static val* varonce528;
2552 val* var529 /* : String */;
2553 char* var530 /* : NativeString */;
2554 val* var531 /* : String */;
2555 val* var532 /* : String */;
2556 val* var533 /* : String */;
2557 val* var535 /* : NativeArray[String] */;
2558 static val* varonce534;
2559 static val* varonce536;
2560 val* var537 /* : String */;
2561 char* var538 /* : NativeString */;
2562 val* var539 /* : String */;
2563 static val* varonce540;
2564 val* var541 /* : String */;
2565 char* var542 /* : NativeString */;
2566 val* var543 /* : String */;
2567 val* var544 /* : String */;
2568 val* var545 /* : String */;
2569 val* var547 /* : NativeArray[String] */;
2570 static val* varonce546;
2571 static val* varonce548;
2572 val* var549 /* : String */;
2573 char* var550 /* : NativeString */;
2574 val* var551 /* : String */;
2575 static val* varonce552;
2576 val* var553 /* : String */;
2577 char* var554 /* : NativeString */;
2578 val* var555 /* : String */;
2579 val* var556 /* : String */;
2580 val* var557 /* : String */;
2581 val* var559 /* : NativeArray[String] */;
2582 static val* varonce558;
2583 static val* varonce560;
2584 val* var561 /* : String */;
2585 char* var562 /* : NativeString */;
2586 val* var563 /* : String */;
2587 val* var564 /* : String */;
2588 val* var565 /* : String */;
2589 static val* varonce566;
2590 val* var567 /* : String */;
2591 char* var568 /* : NativeString */;
2592 val* var569 /* : String */;
2593 val* var570 /* : RuntimeVariable */;
2594 val* var_res /* var res: RuntimeVariable */;
2595 val* var573 /* : NativeArray[String] */;
2596 static val* varonce572;
2597 static val* varonce574;
2598 val* var575 /* : String */;
2599 char* var576 /* : NativeString */;
2600 val* var577 /* : String */;
2601 static val* varonce578;
2602 val* var579 /* : String */;
2603 char* var580 /* : NativeString */;
2604 val* var581 /* : String */;
2605 val* var582 /* : String */;
2606 val* var583 /* : String */;
2607 val* var584 /* : String */;
2608 val* var586 /* : NativeArray[String] */;
2609 static val* varonce585;
2610 static val* varonce587;
2611 val* var588 /* : String */;
2612 char* var589 /* : NativeString */;
2613 val* var590 /* : String */;
2614 val* var591 /* : String */;
2615 val* var593 /* : NativeArray[String] */;
2616 static val* varonce592;
2617 static val* varonce594;
2618 val* var595 /* : String */;
2619 char* var596 /* : NativeString */;
2620 val* var597 /* : String */;
2621 static val* varonce598;
2622 val* var599 /* : String */;
2623 char* var600 /* : NativeString */;
2624 val* var601 /* : String */;
2625 val* var602 /* : String */;
2626 val* var603 /* : String */;
2627 val* var605 /* : NativeArray[String] */;
2628 static val* varonce604;
2629 static val* varonce606;
2630 val* var607 /* : String */;
2631 char* var608 /* : NativeString */;
2632 val* var609 /* : String */;
2633 static val* varonce610;
2634 val* var611 /* : String */;
2635 char* var612 /* : NativeString */;
2636 val* var613 /* : String */;
2637 static val* varonce614;
2638 val* var615 /* : String */;
2639 char* var616 /* : NativeString */;
2640 val* var617 /* : String */;
2641 val* var618 /* : String */;
2642 val* var619 /* : String */;
2643 val* var620 /* : String */;
2644 val* var622 /* : NativeArray[String] */;
2645 static val* varonce621;
2646 static val* varonce623;
2647 val* var624 /* : String */;
2648 char* var625 /* : NativeString */;
2649 val* var626 /* : String */;
2650 static val* varonce627;
2651 val* var628 /* : String */;
2652 char* var629 /* : NativeString */;
2653 val* var630 /* : String */;
2654 val* var631 /* : String */;
2655 val* var632 /* : String */;
2656 static val* varonce633;
2657 val* var634 /* : String */;
2658 char* var635 /* : NativeString */;
2659 val* var636 /* : String */;
2660 val* var637 /* : String */;
2661 val* var639 /* : String */;
2662 static val* varonce640;
2663 val* var641 /* : String */;
2664 char* var642 /* : NativeString */;
2665 val* var643 /* : String */;
2666 short int var644 /* : Bool */;
2667 val* var645 /* : CodeWriter */;
2668 val* var647 /* : CodeWriter */;
2669 val* var649 /* : NativeArray[String] */;
2670 static val* varonce648;
2671 static val* varonce650;
2672 val* var651 /* : String */;
2673 char* var652 /* : NativeString */;
2674 val* var653 /* : String */;
2675 static val* varonce654;
2676 val* var655 /* : String */;
2677 char* var656 /* : NativeString */;
2678 val* var657 /* : String */;
2679 val* var658 /* : String */;
2680 val* var659 /* : CodeWriter */;
2681 val* var661 /* : CodeWriter */;
2682 static val* varonce662;
2683 val* var663 /* : String */;
2684 char* var664 /* : NativeString */;
2685 val* var665 /* : String */;
2686 val* var666 /* : CodeWriter */;
2687 val* var668 /* : CodeWriter */;
2688 static val* varonce669;
2689 val* var670 /* : String */;
2690 char* var671 /* : NativeString */;
2691 val* var672 /* : String */;
2692 val* var673 /* : CodeWriter */;
2693 val* var675 /* : CodeWriter */;
2694 static val* varonce676;
2695 val* var677 /* : String */;
2696 char* var678 /* : NativeString */;
2697 val* var679 /* : String */;
2698 val* var680 /* : CodeWriter */;
2699 val* var682 /* : CodeWriter */;
2700 static val* varonce683;
2701 val* var684 /* : String */;
2702 char* var685 /* : NativeString */;
2703 val* var686 /* : String */;
2704 val* var688 /* : NativeArray[String] */;
2705 static val* varonce687;
2706 static val* varonce689;
2707 val* var690 /* : String */;
2708 char* var691 /* : NativeString */;
2709 val* var692 /* : String */;
2710 val* var693 /* : String */;
2711 val* var695 /* : NativeArray[String] */;
2712 static val* varonce694;
2713 static val* varonce696;
2714 val* var697 /* : String */;
2715 char* var698 /* : NativeString */;
2716 val* var699 /* : String */;
2717 static val* varonce700;
2718 val* var701 /* : String */;
2719 char* var702 /* : NativeString */;
2720 val* var703 /* : String */;
2721 val* var704 /* : String */;
2722 val* var705 /* : String */;
2723 val* var707 /* : NativeArray[String] */;
2724 static val* varonce706;
2725 static val* varonce708;
2726 val* var709 /* : String */;
2727 char* var710 /* : NativeString */;
2728 val* var711 /* : String */;
2729 static val* varonce712;
2730 val* var713 /* : String */;
2731 char* var714 /* : NativeString */;
2732 val* var715 /* : String */;
2733 val* var716 /* : String */;
2734 val* var717 /* : String */;
2735 val* var719 /* : NativeArray[String] */;
2736 static val* varonce718;
2737 static val* varonce720;
2738 val* var721 /* : String */;
2739 char* var722 /* : NativeString */;
2740 val* var723 /* : String */;
2741 static val* varonce724;
2742 val* var725 /* : String */;
2743 char* var726 /* : NativeString */;
2744 val* var727 /* : String */;
2745 val* var728 /* : String */;
2746 val* var729 /* : String */;
2747 static val* varonce730;
2748 val* var731 /* : String */;
2749 char* var732 /* : NativeString */;
2750 val* var733 /* : String */;
2751 val* var734 /* : String */;
2752 val* var_res735 /* var res: String */;
2753 val* var737 /* : NativeArray[String] */;
2754 static val* varonce736;
2755 static val* varonce738;
2756 val* var739 /* : String */;
2757 char* var740 /* : NativeString */;
2758 val* var741 /* : String */;
2759 static val* varonce742;
2760 val* var743 /* : String */;
2761 char* var744 /* : NativeString */;
2762 val* var745 /* : String */;
2763 static val* varonce746;
2764 val* var747 /* : String */;
2765 char* var748 /* : NativeString */;
2766 val* var749 /* : String */;
2767 val* var750 /* : String */;
2768 val* var751 /* : Array[MType] */;
2769 val* var752 /* : nullable Object */;
2770 val* var_mtype_elt /* var mtype_elt: MType */;
2771 val* var754 /* : NativeArray[String] */;
2772 static val* varonce753;
2773 static val* varonce755;
2774 val* var756 /* : String */;
2775 char* var757 /* : NativeString */;
2776 val* var758 /* : String */;
2777 static val* varonce759;
2778 val* var760 /* : String */;
2779 char* var761 /* : NativeString */;
2780 val* var762 /* : String */;
2781 static val* varonce763;
2782 val* var764 /* : String */;
2783 char* var765 /* : NativeString */;
2784 val* var766 /* : String */;
2785 val* var767 /* : String */;
2786 val* var768 /* : String */;
2787 val* var770 /* : NativeArray[String] */;
2788 static val* varonce769;
2789 static val* varonce771;
2790 val* var772 /* : String */;
2791 char* var773 /* : NativeString */;
2792 val* var774 /* : String */;
2793 val* var775 /* : String */;
2794 val* var777 /* : NativeArray[String] */;
2795 static val* varonce776;
2796 static val* varonce778;
2797 val* var779 /* : String */;
2798 char* var780 /* : NativeString */;
2799 val* var781 /* : String */;
2800 static val* varonce782;
2801 val* var783 /* : String */;
2802 char* var784 /* : NativeString */;
2803 val* var785 /* : String */;
2804 val* var786 /* : String */;
2805 val* var788 /* : NativeArray[String] */;
2806 static val* varonce787;
2807 static val* varonce789;
2808 val* var790 /* : String */;
2809 char* var791 /* : NativeString */;
2810 val* var792 /* : String */;
2811 val* var793 /* : String */;
2812 val* var795 /* : NativeArray[String] */;
2813 static val* varonce794;
2814 static val* varonce796;
2815 val* var797 /* : String */;
2816 char* var798 /* : NativeString */;
2817 val* var799 /* : String */;
2818 static val* varonce800;
2819 val* var801 /* : String */;
2820 char* var802 /* : NativeString */;
2821 val* var803 /* : String */;
2822 val* var804 /* : String */;
2823 static val* varonce805;
2824 val* var806 /* : String */;
2825 char* var807 /* : NativeString */;
2826 val* var808 /* : String */;
2827 short int var809 /* : Bool */;
2828 val* var810 /* : MClass */;
2829 val* var812 /* : MClass */;
2830 val* var813 /* : MClassKind */;
2831 val* var815 /* : MClassKind */;
2832 val* var816 /* : Sys */;
2833 val* var817 /* : MClassKind */;
2834 short int var818 /* : Bool */;
2835 short int var820 /* : Bool */;
2836 short int var822 /* : Bool */;
2837 short int var_823 /* var : Bool */;
2838 val* var824 /* : MClass */;
2839 val* var826 /* : MClass */;
2840 val* var827 /* : String */;
2841 val* var829 /* : String */;
2842 static val* varonce830;
2843 val* var831 /* : String */;
2844 char* var832 /* : NativeString */;
2845 val* var833 /* : String */;
2846 short int var834 /* : Bool */;
2847 short int var836 /* : Bool */;
2848 short int var837 /* : Bool */;
2849 val* var838 /* : MModule */;
2850 val* var840 /* : MModule */;
2851 val* var841 /* : MClassType */;
2852 val* var_pointer_type /* var pointer_type: MClassType */;
2853 val* var843 /* : NativeArray[String] */;
2854 static val* varonce842;
2855 static val* varonce844;
2856 val* var845 /* : String */;
2857 char* var846 /* : NativeString */;
2858 val* var847 /* : String */;
2859 val* var848 /* : String */;
2860 val* var850 /* : NativeArray[String] */;
2861 static val* varonce849;
2862 static val* varonce851;
2863 val* var852 /* : String */;
2864 char* var853 /* : NativeString */;
2865 val* var854 /* : String */;
2866 static val* varonce855;
2867 val* var856 /* : String */;
2868 char* var857 /* : NativeString */;
2869 val* var858 /* : String */;
2870 val* var859 /* : String */;
2871 val* var860 /* : String */;
2872 val* var862 /* : NativeArray[String] */;
2873 static val* varonce861;
2874 static val* varonce863;
2875 val* var864 /* : String */;
2876 char* var865 /* : NativeString */;
2877 val* var866 /* : String */;
2878 static val* varonce867;
2879 val* var868 /* : String */;
2880 char* var869 /* : NativeString */;
2881 val* var870 /* : String */;
2882 val* var871 /* : String */;
2883 val* var872 /* : String */;
2884 val* var874 /* : NativeArray[String] */;
2885 static val* varonce873;
2886 static val* varonce875;
2887 val* var876 /* : String */;
2888 char* var877 /* : NativeString */;
2889 val* var878 /* : String */;
2890 static val* varonce879;
2891 val* var880 /* : String */;
2892 char* var881 /* : NativeString */;
2893 val* var882 /* : String */;
2894 val* var883 /* : String */;
2895 val* var884 /* : String */;
2896 val* var886 /* : NativeArray[String] */;
2897 static val* varonce885;
2898 static val* varonce887;
2899 val* var888 /* : String */;
2900 char* var889 /* : NativeString */;
2901 val* var890 /* : String */;
2902 val* var891 /* : String */;
2903 val* var892 /* : String */;
2904 static val* varonce893;
2905 val* var894 /* : String */;
2906 char* var895 /* : NativeString */;
2907 val* var896 /* : String */;
2908 val* var897 /* : RuntimeVariable */;
2909 val* var_res898 /* var res: RuntimeVariable */;
2910 val* var901 /* : NativeArray[String] */;
2911 static val* varonce900;
2912 static val* varonce902;
2913 val* var903 /* : String */;
2914 char* var904 /* : NativeString */;
2915 val* var905 /* : String */;
2916 static val* varonce906;
2917 val* var907 /* : String */;
2918 char* var908 /* : NativeString */;
2919 val* var909 /* : String */;
2920 val* var910 /* : String */;
2921 val* var911 /* : String */;
2922 val* var912 /* : String */;
2923 val* var914 /* : NativeArray[String] */;
2924 static val* varonce913;
2925 static val* varonce915;
2926 val* var916 /* : String */;
2927 char* var917 /* : NativeString */;
2928 val* var918 /* : String */;
2929 val* var919 /* : String */;
2930 val* var921 /* : NativeArray[String] */;
2931 static val* varonce920;
2932 static val* varonce922;
2933 val* var923 /* : String */;
2934 char* var924 /* : NativeString */;
2935 val* var925 /* : String */;
2936 static val* varonce926;
2937 val* var927 /* : String */;
2938 char* var928 /* : NativeString */;
2939 val* var929 /* : String */;
2940 val* var930 /* : String */;
2941 val* var931 /* : String */;
2942 val* var933 /* : NativeArray[String] */;
2943 static val* varonce932;
2944 static val* varonce934;
2945 val* var935 /* : String */;
2946 char* var936 /* : NativeString */;
2947 val* var937 /* : String */;
2948 static val* varonce938;
2949 val* var939 /* : String */;
2950 char* var940 /* : NativeString */;
2951 val* var941 /* : String */;
2952 static val* varonce942;
2953 val* var943 /* : String */;
2954 char* var944 /* : NativeString */;
2955 val* var945 /* : String */;
2956 val* var946 /* : String */;
2957 val* var947 /* : String */;
2958 val* var948 /* : String */;
2959 val* var950 /* : NativeArray[String] */;
2960 static val* varonce949;
2961 static val* varonce951;
2962 val* var952 /* : String */;
2963 char* var953 /* : NativeString */;
2964 val* var954 /* : String */;
2965 static val* varonce955;
2966 val* var956 /* : String */;
2967 char* var957 /* : NativeString */;
2968 val* var958 /* : String */;
2969 val* var959 /* : String */;
2970 val* var960 /* : String */;
2971 static val* varonce961;
2972 val* var962 /* : String */;
2973 char* var963 /* : NativeString */;
2974 val* var964 /* : String */;
2975 val* var966 /* : NativeArray[String] */;
2976 static val* varonce965;
2977 static val* varonce967;
2978 val* var968 /* : String */;
2979 char* var969 /* : NativeString */;
2980 val* var970 /* : String */;
2981 val* var971 /* : String */;
2982 val* var973 /* : NativeArray[String] */;
2983 static val* varonce972;
2984 static val* varonce974;
2985 val* var975 /* : String */;
2986 char* var976 /* : NativeString */;
2987 val* var977 /* : String */;
2988 static val* varonce978;
2989 val* var979 /* : String */;
2990 char* var980 /* : NativeString */;
2991 val* var981 /* : String */;
2992 val* var982 /* : String */;
2993 val* var983 /* : String */;
2994 val* var985 /* : NativeArray[String] */;
2995 static val* varonce984;
2996 static val* varonce986;
2997 val* var987 /* : String */;
2998 char* var988 /* : NativeString */;
2999 val* var989 /* : String */;
3000 static val* varonce990;
3001 val* var991 /* : String */;
3002 char* var992 /* : NativeString */;
3003 val* var993 /* : String */;
3004 val* var994 /* : String */;
3005 val* var995 /* : String */;
3006 val* var997 /* : NativeArray[String] */;
3007 static val* varonce996;
3008 static val* varonce998;
3009 val* var999 /* : String */;
3010 char* var1000 /* : NativeString */;
3011 val* var1001 /* : String */;
3012 static val* varonce1002;
3013 val* var1003 /* : String */;
3014 char* var1004 /* : NativeString */;
3015 val* var1005 /* : String */;
3016 val* var1006 /* : String */;
3017 val* var1007 /* : String */;
3018 val* var1009 /* : NativeArray[String] */;
3019 static val* varonce1008;
3020 static val* varonce1010;
3021 val* var1011 /* : String */;
3022 char* var1012 /* : NativeString */;
3023 val* var1013 /* : String */;
3024 val* var1014 /* : String */;
3025 val* var1015 /* : String */;
3026 static val* varonce1016;
3027 val* var1017 /* : String */;
3028 char* var1018 /* : NativeString */;
3029 val* var1019 /* : String */;
3030 val* var1020 /* : RuntimeVariable */;
3031 val* var_res1021 /* var res: RuntimeVariable */;
3032 val* var1023 /* : Map[MClass, Array[nullable MProperty]] */;
3033 val* var1025 /* : Map[MClass, Array[nullable MProperty]] */;
3034 val* var1026 /* : nullable Object */;
3035 val* var_attrs /* var attrs: nullable Array[nullable MProperty] */;
3036 short int var1027 /* : Bool */;
3037 short int var1028 /* : Bool */;
3038 val* var1030 /* : NativeArray[String] */;
3039 static val* varonce1029;
3040 static val* varonce1031;
3041 val* var1032 /* : String */;
3042 char* var1033 /* : NativeString */;
3043 val* var1034 /* : String */;
3044 val* var1035 /* : String */;
3045 val* var1036 /* : String */;
3046 val* var1038 /* : NativeArray[String] */;
3047 static val* varonce1037;
3048 static val* varonce1039;
3049 val* var1040 /* : String */;
3050 char* var1041 /* : NativeString */;
3051 val* var1042 /* : String */;
3052 static val* varonce1043;
3053 val* var1044 /* : String */;
3054 char* var1045 /* : NativeString */;
3055 val* var1046 /* : String */;
3056 val* var1047 /* : String */;
3057 long var1048 /* : Int */;
3058 long var1050 /* : Int */;
3059 val* var1051 /* : String */;
3060 val* var1052 /* : String */;
3061 val* var1054 /* : NativeArray[String] */;
3062 static val* varonce1053;
3063 static val* varonce1055;
3064 val* var1056 /* : String */;
3065 char* var1057 /* : NativeString */;
3066 val* var1058 /* : String */;
3067 val* var1059 /* : String */;
3068 val* var1061 /* : NativeArray[String] */;
3069 static val* varonce1060;
3070 static val* varonce1062;
3071 val* var1063 /* : String */;
3072 char* var1064 /* : NativeString */;
3073 val* var1065 /* : String */;
3074 static val* varonce1066;
3075 val* var1067 /* : String */;
3076 char* var1068 /* : NativeString */;
3077 val* var1069 /* : String */;
3078 val* var1070 /* : String */;
3079 val* var1071 /* : String */;
3080 short int var1072 /* : Bool */;
3081 short int var1073 /* : Bool */;
3082 short int var1075 /* : Bool */;
3083 short int var1076 /* : Bool */;
3084 val* var1078 /* : NativeArray[String] */;
3085 static val* varonce1077;
3086 static val* varonce1079;
3087 val* var1080 /* : String */;
3088 char* var1081 /* : NativeString */;
3089 val* var1082 /* : String */;
3090 static val* varonce1083;
3091 val* var1084 /* : String */;
3092 char* var1085 /* : NativeString */;
3093 val* var1086 /* : String */;
3094 val* var1087 /* : String */;
3095 val* var1088 /* : String */;
3096 static val* varonce1089;
3097 val* var1090 /* : String */;
3098 char* var1091 /* : NativeString */;
3099 val* var1092 /* : String */;
3100 var_mclass = p0;
3101 {
3102 { /* Inline model#MClass#intro (var_mclass) on <var_mclass:MClass> */
3103 var2 = var_mclass->attrs[COLOR_nitc__model__MClass___intro].val; /* _intro on <var_mclass:MClass> */
3104 if (unlikely(var2 == NULL)) {
3105 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
3106 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 483);
3107 fatal_exit(1);
3108 }
3109 var = var2;
3110 RET_LABEL1:(void)0;
3111 }
3112 }
3113 {
3114 { /* Inline model#MClassDef#bound_mtype (var) on <var:MClassDef> */
3115 var5 = var->attrs[COLOR_nitc__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var:MClassDef> */
3116 if (unlikely(var5 == NULL)) {
3117 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
3118 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 579);
3119 fatal_exit(1);
3120 }
3121 var3 = var5;
3122 RET_LABEL4:(void)0;
3123 }
3124 }
3125 var_mtype = var3;
3126 {
3127 var6 = nitc___nitc__MClass___nitc__model_base__MEntity__c_name(var_mclass);
3128 }
3129 var_c_name = var6;
3130 {
3131 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables (self) on <self:SeparateErasureCompiler> */
3132 var9 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:SeparateErasureCompiler> */
3133 if (unlikely(var9 == NULL)) {
3134 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
3135 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 427);
3136 fatal_exit(1);
3137 }
3138 var7 = var9;
3139 RET_LABEL8:(void)0;
3140 }
3141 }
3142 {
3143 var10 = ((val*(*)(val* self, val* p0))((((long)var7&3)?class_info[((long)var7&3)]:var7->class)->vft[COLOR_core__abstract_collection__MapRead___91d_93d]))(var7, var_mclass); /* [] on <var7:Map[MClass, Array[nullable MClass]]>*/
3144 }
3145 var_class_table = var10;
3146 {
3147 var11 = nitc___nitc__SeparateErasureCompiler___nitc__abstract_compiler__AbstractCompiler__new_visitor(self);
3148 }
3149 var_v = var11;
3150 {
3151 { /* Inline separate_compiler#SeparateCompiler#runtime_type_analysis (self) on <self:SeparateErasureCompiler> */
3152 var14 = self->attrs[COLOR_nitc__separate_compiler__SeparateCompiler___runtime_type_analysis].val; /* _runtime_type_analysis on <self:SeparateErasureCompiler> */
3153 var12 = var14;
3154 RET_LABEL13:(void)0;
3155 }
3156 }
3157 var_rta = var12;
3158 var_is_dead = 0;
3159 var19 = !var_is_dead;
3160 var_ = var19;
3161 if (var19){
3162 if (var_rta == NULL) {
3163 var20 = 0; /* is null */
3164 } else {
3165 var20 = 1; /* arg is null and recv is not */
3166 }
3167 if (0) {
3168 { /* Inline kernel#Object#!= (var_rta,((val*)NULL)) on <var_rta:nullable RapidTypeAnalysis> */
3169 var_other = ((val*)NULL);
3170 {
3171 var23 = ((short int(*)(val* self, val* p0))(var_rta->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_rta, var_other); /* == on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/
3172 }
3173 var24 = !var23;
3174 var21 = var24;
3175 goto RET_LABEL22;
3176 RET_LABEL22:(void)0;
3177 }
3178 var20 = var21;
3179 }
3180 var18 = var20;
3181 } else {
3182 var18 = var_;
3183 }
3184 var_25 = var18;
3185 if (var18){
3186 {
3187 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_classes (var_rta) on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
3188 var28 = var_rta->attrs[COLOR_nitc__rapid_type_analysis__RapidTypeAnalysis___live_classes].val; /* _live_classes on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
3189 if (unlikely(var28 == NULL)) {
3190 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_classes");
3191 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__rapid_type_analysis, 69);
3192 fatal_exit(1);
3193 }
3194 var26 = var28;
3195 RET_LABEL27:(void)0;
3196 }
3197 }
3198 {
3199 var29 = core___core__HashSet___core__abstract_collection__Collection__has(var26, var_mclass);
3200 }
3201 var30 = !var29;
3202 var17 = var30;
3203 } else {
3204 var17 = var_25;
3205 }
3206 var_31 = var17;
3207 if (var17){
3208 {
3209 var32 = nitc__abstract_compiler___MClassType___MType__is_c_primitive(var_mtype);
3210 }
3211 var33 = !var32;
3212 var16 = var33;
3213 } else {
3214 var16 = var_31;
3215 }
3216 var_34 = var16;
3217 if (var16){
3218 {
3219 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
3220 var37 = var_mclass->attrs[COLOR_nitc__model__MClass___name].val; /* _name on <var_mclass:MClass> */
3221 if (unlikely(var37 == NULL)) {
3222 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
3223 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 385);
3224 fatal_exit(1);
3225 }
3226 var35 = var37;
3227 RET_LABEL36:(void)0;
3228 }
3229 }
3230 if (likely(varonce!=NULL)) {
3231 var38 = varonce;
3232 } else {
3233 var39 = "NativeArray";
3234 var40 = core__flat___NativeString___to_s_full(var39, 11l, 11l);
3235 var38 = var40;
3236 varonce = var38;
3237 }
3238 {
3239 { /* Inline kernel#Object#!= (var35,var38) on <var35:String> */
3240 var_other = var38;
3241 {
3242 var43 = ((short int(*)(val* self, val* p0))(var35->class->vft[COLOR_core__kernel__Object___61d_61d]))(var35, var_other); /* == on <var35:String>*/
3243 }
3244 var44 = !var43;
3245 var41 = var44;
3246 goto RET_LABEL42;
3247 RET_LABEL42:(void)0;
3248 }
3249 }
3250 var15 = var41;
3251 } else {
3252 var15 = var_34;
3253 }
3254 if (var15){
3255 var_is_dead = 1;
3256 } else {
3257 }
3258 if (unlikely(varonce45==NULL)) {
3259 var46 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
3260 if (likely(varonce47!=NULL)) {
3261 var48 = varonce47;
3262 } else {
3263 var49 = "/* runtime class ";
3264 var50 = core__flat___NativeString___to_s_full(var49, 17l, 17l);
3265 var48 = var50;
3266 varonce47 = var48;
3267 }
3268 ((struct instance_core__NativeArray*)var46)->values[0]=var48;
3269 if (likely(varonce51!=NULL)) {
3270 var52 = varonce51;
3271 } else {
3272 var53 = " */";
3273 var54 = core__flat___NativeString___to_s_full(var53, 3l, 3l);
3274 var52 = var54;
3275 varonce51 = var52;
3276 }
3277 ((struct instance_core__NativeArray*)var46)->values[2]=var52;
3278 } else {
3279 var46 = varonce45;
3280 varonce45 = NULL;
3281 }
3282 ((struct instance_core__NativeArray*)var46)->values[1]=var_c_name;
3283 {
3284 var55 = ((val*(*)(val* self))(var46->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var46); /* native_to_s on <var46:NativeArray[String]>*/
3285 }
3286 varonce45 = var46;
3287 {
3288 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var55); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3289 }
3290 if (unlikely(varonce56==NULL)) {
3291 var57 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
3292 if (likely(varonce58!=NULL)) {
3293 var59 = varonce58;
3294 } else {
3295 var60 = "class_";
3296 var61 = core__flat___NativeString___to_s_full(var60, 6l, 6l);
3297 var59 = var61;
3298 varonce58 = var59;
3299 }
3300 ((struct instance_core__NativeArray*)var57)->values[0]=var59;
3301 } else {
3302 var57 = varonce56;
3303 varonce56 = NULL;
3304 }
3305 ((struct instance_core__NativeArray*)var57)->values[1]=var_c_name;
3306 {
3307 var62 = ((val*(*)(val* self))(var57->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var57); /* native_to_s on <var57:NativeArray[String]>*/
3308 }
3309 varonce56 = var57;
3310 if (unlikely(varonce63==NULL)) {
3311 var64 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
3312 if (likely(varonce65!=NULL)) {
3313 var66 = varonce65;
3314 } else {
3315 var67 = "extern const struct class class_";
3316 var68 = core__flat___NativeString___to_s_full(var67, 32l, 32l);
3317 var66 = var68;
3318 varonce65 = var66;
3319 }
3320 ((struct instance_core__NativeArray*)var64)->values[0]=var66;
3321 if (likely(varonce69!=NULL)) {
3322 var70 = varonce69;
3323 } else {
3324 var71 = ";";
3325 var72 = core__flat___NativeString___to_s_full(var71, 1l, 1l);
3326 var70 = var72;
3327 varonce69 = var70;
3328 }
3329 ((struct instance_core__NativeArray*)var64)->values[2]=var70;
3330 } else {
3331 var64 = varonce63;
3332 varonce63 = NULL;
3333 }
3334 ((struct instance_core__NativeArray*)var64)->values[1]=var_c_name;
3335 {
3336 var73 = ((val*(*)(val* self))(var64->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var64); /* native_to_s on <var64:NativeArray[String]>*/
3337 }
3338 varonce63 = var64;
3339 {
3340 nitc___nitc__AbstractCompiler___provide_declaration(self, var62, var73); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
3341 }
3342 if (unlikely(varonce74==NULL)) {
3343 var75 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
3344 if (likely(varonce76!=NULL)) {
3345 var77 = varonce76;
3346 } else {
3347 var78 = "extern const struct type_table type_table_";
3348 var79 = core__flat___NativeString___to_s_full(var78, 42l, 42l);
3349 var77 = var79;
3350 varonce76 = var77;
3351 }
3352 ((struct instance_core__NativeArray*)var75)->values[0]=var77;
3353 if (likely(varonce80!=NULL)) {
3354 var81 = varonce80;
3355 } else {
3356 var82 = ";";
3357 var83 = core__flat___NativeString___to_s_full(var82, 1l, 1l);
3358 var81 = var83;
3359 varonce80 = var81;
3360 }
3361 ((struct instance_core__NativeArray*)var75)->values[2]=var81;
3362 } else {
3363 var75 = varonce74;
3364 varonce74 = NULL;
3365 }
3366 ((struct instance_core__NativeArray*)var75)->values[1]=var_c_name;
3367 {
3368 var84 = ((val*(*)(val* self))(var75->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var75); /* native_to_s on <var75:NativeArray[String]>*/
3369 }
3370 varonce74 = var75;
3371 {
3372 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var84); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3373 }
3374 if (unlikely(varonce85==NULL)) {
3375 var86 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
3376 if (likely(varonce87!=NULL)) {
3377 var88 = varonce87;
3378 } else {
3379 var89 = "const struct class class_";
3380 var90 = core__flat___NativeString___to_s_full(var89, 25l, 25l);
3381 var88 = var90;
3382 varonce87 = var88;
3383 }
3384 ((struct instance_core__NativeArray*)var86)->values[0]=var88;
3385 if (likely(varonce91!=NULL)) {
3386 var92 = varonce91;
3387 } else {
3388 var93 = " = {";
3389 var94 = core__flat___NativeString___to_s_full(var93, 4l, 4l);
3390 var92 = var94;
3391 varonce91 = var92;
3392 }
3393 ((struct instance_core__NativeArray*)var86)->values[2]=var92;
3394 } else {
3395 var86 = varonce85;
3396 varonce85 = NULL;
3397 }
3398 ((struct instance_core__NativeArray*)var86)->values[1]=var_c_name;
3399 {
3400 var95 = ((val*(*)(val* self))(var86->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var86); /* native_to_s on <var86:NativeArray[String]>*/
3401 }
3402 varonce85 = var86;
3403 {
3404 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var95); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3405 }
3406 if (unlikely(varonce96==NULL)) {
3407 var97 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
3408 if (likely(varonce98!=NULL)) {
3409 var99 = varonce98;
3410 } else {
3411 var100 = ",";
3412 var101 = core__flat___NativeString___to_s_full(var100, 1l, 1l);
3413 var99 = var101;
3414 varonce98 = var99;
3415 }
3416 ((struct instance_core__NativeArray*)var97)->values[1]=var99;
3417 } else {
3418 var97 = varonce96;
3419 varonce96 = NULL;
3420 }
3421 {
3422 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids (self) on <self:SeparateErasureCompiler> */
3423 var104 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:SeparateErasureCompiler> */
3424 if (unlikely(var104 == NULL)) {
3425 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
3426 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 84);
3427 fatal_exit(1);
3428 }
3429 var102 = var104;
3430 RET_LABEL103:(void)0;
3431 }
3432 }
3433 {
3434 var105 = ((val*(*)(val* self, val* p0))((((long)var102&3)?class_info[((long)var102&3)]:var102->class)->vft[COLOR_core__abstract_collection__MapRead___91d_93d]))(var102, var_mclass); /* [] on <var102:Map[MClass, Int]>*/
3435 }
3436 var107 = (long)(var105)>>2;
3437 var106 = core__flat___Int___core__abstract_text__Object__to_s(var107);
3438 ((struct instance_core__NativeArray*)var97)->values[0]=var106;
3439 {
3440 var108 = ((val*(*)(val* self))(var97->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var97); /* native_to_s on <var97:NativeArray[String]>*/
3441 }
3442 varonce96 = var97;
3443 {
3444 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var108); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3445 }
3446 if (unlikely(varonce109==NULL)) {
3447 var110 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
3448 if (likely(varonce111!=NULL)) {
3449 var112 = varonce111;
3450 } else {
3451 var113 = "\"";
3452 var114 = core__flat___NativeString___to_s_full(var113, 1l, 1l);
3453 var112 = var114;
3454 varonce111 = var112;
3455 }
3456 ((struct instance_core__NativeArray*)var110)->values[0]=var112;
3457 if (likely(varonce115!=NULL)) {
3458 var116 = varonce115;
3459 } else {
3460 var117 = "\", /* class_name_string */";
3461 var118 = core__flat___NativeString___to_s_full(var117, 26l, 26l);
3462 var116 = var118;
3463 varonce115 = var116;
3464 }
3465 ((struct instance_core__NativeArray*)var110)->values[2]=var116;
3466 } else {
3467 var110 = varonce109;
3468 varonce109 = NULL;
3469 }
3470 {
3471 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
3472 var121 = var_mclass->attrs[COLOR_nitc__model__MClass___name].val; /* _name on <var_mclass:MClass> */
3473 if (unlikely(var121 == NULL)) {
3474 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
3475 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 385);
3476 fatal_exit(1);
3477 }
3478 var119 = var121;
3479 RET_LABEL120:(void)0;
3480 }
3481 }
3482 ((struct instance_core__NativeArray*)var110)->values[1]=var119;
3483 {
3484 var122 = ((val*(*)(val* self))(var110->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var110); /* native_to_s on <var110:NativeArray[String]>*/
3485 }
3486 varonce109 = var110;
3487 {
3488 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var122); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3489 }
3490 if (unlikely(varonce123==NULL)) {
3491 var124 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
3492 if (likely(varonce125!=NULL)) {
3493 var126 = varonce125;
3494 } else {
3495 var127 = ", /* box_kind */";
3496 var128 = core__flat___NativeString___to_s_full(var127, 16l, 16l);
3497 var126 = var128;
3498 varonce125 = var126;
3499 }
3500 ((struct instance_core__NativeArray*)var124)->values[1]=var126;
3501 } else {
3502 var124 = varonce123;
3503 varonce123 = NULL;
3504 }
3505 {
3506 var129 = nitc___nitc__SeparateCompiler___box_kind_of(self, var_mclass);
3507 }
3508 var130 = core__flat___Int___core__abstract_text__Object__to_s(var129);
3509 ((struct instance_core__NativeArray*)var124)->values[0]=var130;
3510 {
3511 var131 = ((val*(*)(val* self))(var124->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var124); /* native_to_s on <var124:NativeArray[String]>*/
3512 }
3513 varonce123 = var124;
3514 {
3515 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var131); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3516 }
3517 if (unlikely(varonce132==NULL)) {
3518 var133 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
3519 if (likely(varonce134!=NULL)) {
3520 var135 = varonce134;
3521 } else {
3522 var136 = ",";
3523 var137 = core__flat___NativeString___to_s_full(var136, 1l, 1l);
3524 var135 = var137;
3525 varonce134 = var135;
3526 }
3527 ((struct instance_core__NativeArray*)var133)->values[1]=var135;
3528 } else {
3529 var133 = varonce132;
3530 varonce132 = NULL;
3531 }
3532 {
3533 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_colors (self) on <self:SeparateErasureCompiler> */
3534 var140 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_colors].val; /* _class_colors on <self:SeparateErasureCompiler> */
3535 if (unlikely(var140 == NULL)) {
3536 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_colors");
3537 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 85);
3538 fatal_exit(1);
3539 }
3540 var138 = var140;
3541 RET_LABEL139:(void)0;
3542 }
3543 }
3544 {
3545 var141 = ((val*(*)(val* self, val* p0))((((long)var138&3)?class_info[((long)var138&3)]:var138->class)->vft[COLOR_core__abstract_collection__MapRead___91d_93d]))(var138, var_mclass); /* [] on <var138:Map[MClass, Int]>*/
3546 }
3547 var143 = (long)(var141)>>2;
3548 var142 = core__flat___Int___core__abstract_text__Object__to_s(var143);
3549 ((struct instance_core__NativeArray*)var133)->values[0]=var142;
3550 {
3551 var144 = ((val*(*)(val* self))(var133->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var133); /* native_to_s on <var133:NativeArray[String]>*/
3552 }
3553 varonce132 = var133;
3554 {
3555 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var144); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3556 }
3557 var145 = !var_is_dead;
3558 if (var145){
3559 {
3560 var146 = nitc___nitc__SeparateErasureCompiler___build_class_vts_table(self, var_mclass);
3561 }
3562 if (var146){
3563 if (unlikely(varonce147==NULL)) {
3564 var148 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
3565 if (likely(varonce149!=NULL)) {
3566 var150 = varonce149;
3567 } else {
3568 var151 = "vts_table_";
3569 var152 = core__flat___NativeString___to_s_full(var151, 10l, 10l);
3570 var150 = var152;
3571 varonce149 = var150;
3572 }
3573 ((struct instance_core__NativeArray*)var148)->values[0]=var150;
3574 } else {
3575 var148 = varonce147;
3576 varonce147 = NULL;
3577 }
3578 ((struct instance_core__NativeArray*)var148)->values[1]=var_c_name;
3579 {
3580 var153 = ((val*(*)(val* self))(var148->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var148); /* native_to_s on <var148:NativeArray[String]>*/
3581 }
3582 varonce147 = var148;
3583 {
3584 nitc___nitc__AbstractCompilerVisitor___require_declaration(var_v, var153); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
3585 }
3586 if (unlikely(varonce154==NULL)) {
3587 var155 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
3588 if (likely(varonce156!=NULL)) {
3589 var157 = varonce156;
3590 } else {
3591 var158 = "&vts_table_";
3592 var159 = core__flat___NativeString___to_s_full(var158, 11l, 11l);
3593 var157 = var159;
3594 varonce156 = var157;
3595 }
3596 ((struct instance_core__NativeArray*)var155)->values[0]=var157;
3597 if (likely(varonce160!=NULL)) {
3598 var161 = varonce160;
3599 } else {
3600 var162 = ",";
3601 var163 = core__flat___NativeString___to_s_full(var162, 1l, 1l);
3602 var161 = var163;
3603 varonce160 = var161;
3604 }
3605 ((struct instance_core__NativeArray*)var155)->values[2]=var161;
3606 } else {
3607 var155 = varonce154;
3608 varonce154 = NULL;
3609 }
3610 ((struct instance_core__NativeArray*)var155)->values[1]=var_c_name;
3611 {
3612 var164 = ((val*(*)(val* self))(var155->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var155); /* native_to_s on <var155:NativeArray[String]>*/
3613 }
3614 varonce154 = var155;
3615 {
3616 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var164); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3617 }
3618 } else {
3619 if (likely(varonce165!=NULL)) {
3620 var166 = varonce165;
3621 } else {
3622 var167 = "NULL,";
3623 var168 = core__flat___NativeString___to_s_full(var167, 5l, 5l);
3624 var166 = var168;
3625 varonce165 = var166;
3626 }
3627 {
3628 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var166); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3629 }
3630 }
3631 if (unlikely(varonce169==NULL)) {
3632 var170 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
3633 if (likely(varonce171!=NULL)) {
3634 var172 = varonce171;
3635 } else {
3636 var173 = "&type_table_";
3637 var174 = core__flat___NativeString___to_s_full(var173, 12l, 12l);
3638 var172 = var174;
3639 varonce171 = var172;
3640 }
3641 ((struct instance_core__NativeArray*)var170)->values[0]=var172;
3642 if (likely(varonce175!=NULL)) {
3643 var176 = varonce175;
3644 } else {
3645 var177 = ",";
3646 var178 = core__flat___NativeString___to_s_full(var177, 1l, 1l);
3647 var176 = var178;
3648 varonce175 = var176;
3649 }
3650 ((struct instance_core__NativeArray*)var170)->values[2]=var176;
3651 } else {
3652 var170 = varonce169;
3653 varonce169 = NULL;
3654 }
3655 ((struct instance_core__NativeArray*)var170)->values[1]=var_c_name;
3656 {
3657 var179 = ((val*(*)(val* self))(var170->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var170); /* native_to_s on <var170:NativeArray[String]>*/
3658 }
3659 varonce169 = var170;
3660 {
3661 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var179); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3662 }
3663 if (likely(varonce180!=NULL)) {
3664 var181 = varonce180;
3665 } else {
3666 var182 = "{";
3667 var183 = core__flat___NativeString___to_s_full(var182, 1l, 1l);
3668 var181 = var183;
3669 varonce180 = var181;
3670 }
3671 {
3672 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var181); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3673 }
3674 {
3675 { /* Inline separate_compiler#SeparateCompiler#method_tables (self) on <self:SeparateErasureCompiler> */
3676 var186 = self->attrs[COLOR_nitc__separate_compiler__SeparateCompiler___method_tables].val; /* _method_tables on <self:SeparateErasureCompiler> */
3677 if (unlikely(var186 == NULL)) {
3678 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_tables");
3679 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_compiler, 1067);
3680 fatal_exit(1);
3681 }
3682 var184 = var186;
3683 RET_LABEL185:(void)0;
3684 }
3685 }
3686 {
3687 var187 = ((val*(*)(val* self, val* p0))((((long)var184&3)?class_info[((long)var184&3)]:var184->class)->vft[COLOR_core__abstract_collection__MapRead__get_or_null]))(var184, var_mclass); /* get_or_null on <var184:Map[MClass, Array[nullable MPropDef]]>*/
3688 }
3689 var_vft = var187;
3690 if (var_vft == NULL) {
3691 var188 = 0; /* is null */
3692 } else {
3693 var188 = 1; /* arg is null and recv is not */
3694 }
3695 if (0) {
3696 { /* Inline kernel#Object#!= (var_vft,((val*)NULL)) on <var_vft:nullable Array[nullable MPropDef]> */
3697 var_other = ((val*)NULL);
3698 {
3699 var191 = ((short int(*)(val* self, val* p0))(var_vft->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_vft, var_other); /* == on <var_vft:nullable Array[nullable MPropDef](Array[nullable MPropDef])>*/
3700 }
3701 var192 = !var191;
3702 var189 = var192;
3703 goto RET_LABEL190;
3704 RET_LABEL190:(void)0;
3705 }
3706 var188 = var189;
3707 }
3708 if (var188){
3709 var_i = 0l;
3710 {
3711 { /* Inline array#AbstractArrayRead#length (var_vft) on <var_vft:nullable Array[nullable MPropDef](Array[nullable MPropDef])> */
3712 var195 = var_vft->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_vft:nullable Array[nullable MPropDef](Array[nullable MPropDef])> */
3713 var193 = var195;
3714 RET_LABEL194:(void)0;
3715 }
3716 }
3717 var_196 = var193;
3718 for(;;) {
3719 {
3720 { /* Inline kernel#Int#< (var_i,var_196) on <var_i:Int> */
3721 /* Covariant cast for argument 0 (i) <var_196:Int> isa OTHER */
3722 /* <var_196:Int> isa OTHER */
3723 var199 = 1; /* easy <var_196:Int> isa OTHER*/
3724 if (unlikely(!var199)) {
3725 var_class_name = type_core__Int.name;
3726 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
3727 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 728);
3728 fatal_exit(1);
3729 }
3730 var200 = var_i < var_196;
3731 var197 = var200;
3732 goto RET_LABEL198;
3733 RET_LABEL198:(void)0;
3734 }
3735 }
3736 if (var197){
3737 } else {
3738 goto BREAK_label;
3739 }
3740 {
3741 var201 = core___core__Array___core__abstract_collection__SequenceRead___91d_93d(var_vft, var_i);
3742 }
3743 var_mpropdef = var201;
3744 if (var_mpropdef == NULL) {
3745 var202 = 1; /* is null */
3746 } else {
3747 var202 = 0; /* arg is null but recv is not */
3748 }
3749 if (0) {
3750 { /* Inline kernel#Object#== (var_mpropdef,((val*)NULL)) on <var_mpropdef:nullable MPropDef> */
3751 var_other205 = ((val*)NULL);
3752 {
3753 { /* Inline kernel#Object#is_same_instance (var_mpropdef,var_other205) on <var_mpropdef:nullable MPropDef(MPropDef)> */
3754 var208 = var_mpropdef == var_other205;
3755 var206 = var208;
3756 goto RET_LABEL207;
3757 RET_LABEL207:(void)0;
3758 }
3759 }
3760 var203 = var206;
3761 goto RET_LABEL204;
3762 RET_LABEL204:(void)0;
3763 }
3764 var202 = var203;
3765 }
3766 if (var202){
3767 if (likely(varonce209!=NULL)) {
3768 var210 = varonce209;
3769 } else {
3770 var211 = "NULL, /* empty */";
3771 var212 = core__flat___NativeString___to_s_full(var211, 17l, 17l);
3772 var210 = var212;
3773 varonce209 = var210;
3774 }
3775 {
3776 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var210); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3777 }
3778 } else {
3779 /* <var_mpropdef:nullable MPropDef(MPropDef)> isa MMethodDef */
3780 cltype214 = type_nitc__MMethodDef.color;
3781 idtype215 = type_nitc__MMethodDef.id;
3782 if(cltype214 >= var_mpropdef->type->table_size) {
3783 var213 = 0;
3784 } else {
3785 var213 = var_mpropdef->type->type_table[cltype214] == idtype215;
3786 }
3787 if (unlikely(!var213)) {
3788 PRINT_ERROR("Runtime error: %s", "Assert failed");
3789 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 237);
3790 fatal_exit(1);
3791 }
3792 if (var_rta == NULL) {
3793 var217 = 0; /* is null */
3794 } else {
3795 var217 = 1; /* arg is null and recv is not */
3796 }
3797 if (0) {
3798 { /* Inline kernel#Object#!= (var_rta,((val*)NULL)) on <var_rta:nullable RapidTypeAnalysis> */
3799 var_other = ((val*)NULL);
3800 {
3801 var220 = ((short int(*)(val* self, val* p0))(var_rta->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_rta, var_other); /* == on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)>*/
3802 }
3803 var221 = !var220;
3804 var218 = var221;
3805 goto RET_LABEL219;
3806 RET_LABEL219:(void)0;
3807 }
3808 var217 = var218;
3809 }
3810 var_222 = var217;
3811 if (var217){
3812 {
3813 { /* Inline rapid_type_analysis#RapidTypeAnalysis#live_methoddefs (var_rta) on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
3814 var225 = var_rta->attrs[COLOR_nitc__rapid_type_analysis__RapidTypeAnalysis___live_methoddefs].val; /* _live_methoddefs on <var_rta:nullable RapidTypeAnalysis(RapidTypeAnalysis)> */
3815 if (unlikely(var225 == NULL)) {
3816 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _live_methoddefs");
3817 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__rapid_type_analysis, 79);
3818 fatal_exit(1);
3819 }
3820 var223 = var225;
3821 RET_LABEL224:(void)0;
3822 }
3823 }
3824 {
3825 var226 = core___core__HashSet___core__abstract_collection__Collection__has(var223, var_mpropdef);
3826 }
3827 var227 = !var226;
3828 var216 = var227;
3829 } else {
3830 var216 = var_222;
3831 }
3832 if (var216){
3833 if (unlikely(varonce228==NULL)) {
3834 var229 = NEW_core__NativeArray(7l, &type_core__NativeArray__core__String);
3835 if (likely(varonce230!=NULL)) {
3836 var231 = varonce230;
3837 } else {
3838 var232 = "NULL, /* DEAD ";
3839 var233 = core__flat___NativeString___to_s_full(var232, 14l, 14l);
3840 var231 = var233;
3841 varonce230 = var231;
3842 }
3843 ((struct instance_core__NativeArray*)var229)->values[0]=var231;
3844 if (likely(varonce234!=NULL)) {
3845 var235 = varonce234;
3846 } else {
3847 var236 = ":";
3848 var237 = core__flat___NativeString___to_s_full(var236, 1l, 1l);
3849 var235 = var237;
3850 varonce234 = var235;
3851 }
3852 ((struct instance_core__NativeArray*)var229)->values[2]=var235;
3853 if (likely(varonce238!=NULL)) {
3854 var239 = varonce238;
3855 } else {
3856 var240 = ":";
3857 var241 = core__flat___NativeString___to_s_full(var240, 1l, 1l);
3858 var239 = var241;
3859 varonce238 = var239;
3860 }
3861 ((struct instance_core__NativeArray*)var229)->values[4]=var239;
3862 if (likely(varonce242!=NULL)) {
3863 var243 = varonce242;
3864 } else {
3865 var244 = " */";
3866 var245 = core__flat___NativeString___to_s_full(var244, 3l, 3l);
3867 var243 = var245;
3868 varonce242 = var243;
3869 }
3870 ((struct instance_core__NativeArray*)var229)->values[6]=var243;
3871 } else {
3872 var229 = varonce228;
3873 varonce228 = NULL;
3874 }
3875 {
3876 { /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
3877 var248 = var_mclass->attrs[COLOR_nitc__model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
3878 if (unlikely(var248 == NULL)) {
3879 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
3880 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 380);
3881 fatal_exit(1);
3882 }
3883 var246 = var248;
3884 RET_LABEL247:(void)0;
3885 }
3886 }
3887 {
3888 var249 = ((val*(*)(val* self))(var246->class->vft[COLOR_core__abstract_text__Object__to_s]))(var246); /* to_s on <var246:MModule>*/
3889 }
3890 ((struct instance_core__NativeArray*)var229)->values[1]=var249;
3891 {
3892 var250 = ((val*(*)(val* self))(var_mclass->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mclass); /* to_s on <var_mclass:MClass>*/
3893 }
3894 ((struct instance_core__NativeArray*)var229)->values[3]=var250;
3895 {
3896 var251 = ((val*(*)(val* self))(var_mpropdef->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mpropdef); /* to_s on <var_mpropdef:nullable MPropDef(MMethodDef)>*/
3897 }
3898 ((struct instance_core__NativeArray*)var229)->values[5]=var251;
3899 {
3900 var252 = ((val*(*)(val* self))(var229->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var229); /* native_to_s on <var229:NativeArray[String]>*/
3901 }
3902 varonce228 = var229;
3903 {
3904 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var252); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3905 }
3906 goto BREAK_label253;
3907 } else {
3908 }
3909 {
3910 var254 = nitc__separate_compiler___MMethodDef___virtual_runtime_function(var_mpropdef);
3911 }
3912 var_rf = var254;
3913 {
3914 var255 = nitc___nitc__AbstractRuntimeFunction___c_name(var_rf);
3915 }
3916 {
3917 nitc___nitc__AbstractCompilerVisitor___require_declaration(var_v, var255); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
3918 }
3919 if (unlikely(varonce256==NULL)) {
3920 var257 = NEW_core__NativeArray(5l, &type_core__NativeArray__core__String);
3921 if (likely(varonce258!=NULL)) {
3922 var259 = varonce258;
3923 } else {
3924 var260 = "(nitmethod_t)";
3925 var261 = core__flat___NativeString___to_s_full(var260, 13l, 13l);
3926 var259 = var261;
3927 varonce258 = var259;
3928 }
3929 ((struct instance_core__NativeArray*)var257)->values[0]=var259;
3930 if (likely(varonce262!=NULL)) {
3931 var263 = varonce262;
3932 } else {
3933 var264 = ", /* pointer to ";
3934 var265 = core__flat___NativeString___to_s_full(var264, 16l, 16l);
3935 var263 = var265;
3936 varonce262 = var263;
3937 }
3938 ((struct instance_core__NativeArray*)var257)->values[2]=var263;
3939 if (likely(varonce266!=NULL)) {
3940 var267 = varonce266;
3941 } else {
3942 var268 = " */";
3943 var269 = core__flat___NativeString___to_s_full(var268, 3l, 3l);
3944 var267 = var269;
3945 varonce266 = var267;
3946 }
3947 ((struct instance_core__NativeArray*)var257)->values[4]=var267;
3948 } else {
3949 var257 = varonce256;
3950 varonce256 = NULL;
3951 }
3952 {
3953 var270 = nitc___nitc__AbstractRuntimeFunction___c_name(var_rf);
3954 }
3955 ((struct instance_core__NativeArray*)var257)->values[1]=var270;
3956 {
3957 var271 = nitc___nitc__MPropDef___nitc__model_base__MEntity__full_name(var_mpropdef);
3958 }
3959 ((struct instance_core__NativeArray*)var257)->values[3]=var271;
3960 {
3961 var272 = ((val*(*)(val* self))(var257->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var257); /* native_to_s on <var257:NativeArray[String]>*/
3962 }
3963 varonce256 = var257;
3964 {
3965 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var272); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3966 }
3967 }
3968 BREAK_label253: (void)0;
3969 {
3970 var273 = core___core__Int___Discrete__successor(var_i, 1l);
3971 }
3972 var_i = var273;
3973 }
3974 BREAK_label: (void)0;
3975 } else {
3976 }
3977 if (likely(varonce274!=NULL)) {
3978 var275 = varonce274;
3979 } else {
3980 var276 = "}";
3981 var277 = core__flat___NativeString___to_s_full(var276, 1l, 1l);
3982 var275 = var277;
3983 varonce274 = var275;
3984 }
3985 {
3986 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var275); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
3987 }
3988 } else {
3989 }
3990 if (likely(varonce278!=NULL)) {
3991 var279 = varonce278;
3992 } else {
3993 var280 = "};";
3994 var281 = core__flat___NativeString___to_s_full(var280, 2l, 2l);
3995 var279 = var281;
3996 varonce278 = var279;
3997 }
3998 {
3999 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var279); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4000 }
4001 if (unlikely(varonce282==NULL)) {
4002 var283 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
4003 if (likely(varonce284!=NULL)) {
4004 var285 = varonce284;
4005 } else {
4006 var286 = "const struct type_table type_table_";
4007 var287 = core__flat___NativeString___to_s_full(var286, 35l, 35l);
4008 var285 = var287;
4009 varonce284 = var285;
4010 }
4011 ((struct instance_core__NativeArray*)var283)->values[0]=var285;
4012 if (likely(varonce288!=NULL)) {
4013 var289 = varonce288;
4014 } else {
4015 var290 = " = {";
4016 var291 = core__flat___NativeString___to_s_full(var290, 4l, 4l);
4017 var289 = var291;
4018 varonce288 = var289;
4019 }
4020 ((struct instance_core__NativeArray*)var283)->values[2]=var289;
4021 } else {
4022 var283 = varonce282;
4023 varonce282 = NULL;
4024 }
4025 ((struct instance_core__NativeArray*)var283)->values[1]=var_c_name;
4026 {
4027 var292 = ((val*(*)(val* self))(var283->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var283); /* native_to_s on <var283:NativeArray[String]>*/
4028 }
4029 varonce282 = var283;
4030 {
4031 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var292); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4032 }
4033 if (unlikely(varonce293==NULL)) {
4034 var294 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
4035 if (likely(varonce295!=NULL)) {
4036 var296 = varonce295;
4037 } else {
4038 var297 = ",";
4039 var298 = core__flat___NativeString___to_s_full(var297, 1l, 1l);
4040 var296 = var298;
4041 varonce295 = var296;
4042 }
4043 ((struct instance_core__NativeArray*)var294)->values[1]=var296;
4044 } else {
4045 var294 = varonce293;
4046 varonce293 = NULL;
4047 }
4048 {
4049 { /* Inline array#AbstractArrayRead#length (var_class_table) on <var_class_table:Array[nullable MClass]> */
4050 var301 = var_class_table->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_class_table:Array[nullable MClass]> */
4051 var299 = var301;
4052 RET_LABEL300:(void)0;
4053 }
4054 }
4055 var302 = core__flat___Int___core__abstract_text__Object__to_s(var299);
4056 ((struct instance_core__NativeArray*)var294)->values[0]=var302;
4057 {
4058 var303 = ((val*(*)(val* self))(var294->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var294); /* native_to_s on <var294:NativeArray[String]>*/
4059 }
4060 varonce293 = var294;
4061 {
4062 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var303); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4063 }
4064 if (likely(varonce304!=NULL)) {
4065 var305 = varonce304;
4066 } else {
4067 var306 = "{";
4068 var307 = core__flat___NativeString___to_s_full(var306, 1l, 1l);
4069 var305 = var307;
4070 varonce304 = var305;
4071 }
4072 {
4073 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var305); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4074 }
4075 var_308 = var_class_table;
4076 {
4077 var309 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_308);
4078 }
4079 var_310 = var309;
4080 for(;;) {
4081 {
4082 var311 = ((short int(*)(val* self))((((long)var_310&3)?class_info[((long)var_310&3)]:var_310->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_310); /* is_ok on <var_310:IndexedIterator[nullable MClass]>*/
4083 }
4084 if (var311){
4085 } else {
4086 goto BREAK_label312;
4087 }
4088 {
4089 var313 = ((val*(*)(val* self))((((long)var_310&3)?class_info[((long)var_310&3)]:var_310->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_310); /* item on <var_310:IndexedIterator[nullable MClass]>*/
4090 }
4091 var_msuper = var313;
4092 if (var_msuper == NULL) {
4093 var314 = 1; /* is null */
4094 } else {
4095 var314 = 0; /* arg is null but recv is not */
4096 }
4097 if (0) {
4098 { /* Inline kernel#Object#== (var_msuper,((val*)NULL)) on <var_msuper:nullable MClass> */
4099 var_other205 = ((val*)NULL);
4100 {
4101 { /* Inline kernel#Object#is_same_instance (var_msuper,var_other205) on <var_msuper:nullable MClass(MClass)> */
4102 var319 = var_msuper == var_other205;
4103 var317 = var319;
4104 goto RET_LABEL318;
4105 RET_LABEL318:(void)0;
4106 }
4107 }
4108 var315 = var317;
4109 goto RET_LABEL316;
4110 RET_LABEL316:(void)0;
4111 }
4112 var314 = var315;
4113 }
4114 if (var314){
4115 if (likely(varonce320!=NULL)) {
4116 var321 = varonce320;
4117 } else {
4118 var322 = "-1, /* empty */";
4119 var323 = core__flat___NativeString___to_s_full(var322, 15l, 15l);
4120 var321 = var323;
4121 varonce320 = var321;
4122 }
4123 {
4124 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var321); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4125 }
4126 } else {
4127 if (unlikely(varonce324==NULL)) {
4128 var325 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
4129 if (likely(varonce326!=NULL)) {
4130 var327 = varonce326;
4131 } else {
4132 var328 = ", /* ";
4133 var329 = core__flat___NativeString___to_s_full(var328, 5l, 5l);
4134 var327 = var329;
4135 varonce326 = var327;
4136 }
4137 ((struct instance_core__NativeArray*)var325)->values[1]=var327;
4138 if (likely(varonce330!=NULL)) {
4139 var331 = varonce330;
4140 } else {
4141 var332 = " */";
4142 var333 = core__flat___NativeString___to_s_full(var332, 3l, 3l);
4143 var331 = var333;
4144 varonce330 = var331;
4145 }
4146 ((struct instance_core__NativeArray*)var325)->values[3]=var331;
4147 } else {
4148 var325 = varonce324;
4149 varonce324 = NULL;
4150 }
4151 {
4152 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_ids (self) on <self:SeparateErasureCompiler> */
4153 var336 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_ids].val; /* _class_ids on <self:SeparateErasureCompiler> */
4154 if (unlikely(var336 == NULL)) {
4155 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_ids");
4156 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 84);
4157 fatal_exit(1);
4158 }
4159 var334 = var336;
4160 RET_LABEL335:(void)0;
4161 }
4162 }
4163 {
4164 var337 = ((val*(*)(val* self, val* p0))((((long)var334&3)?class_info[((long)var334&3)]:var334->class)->vft[COLOR_core__abstract_collection__MapRead___91d_93d]))(var334, var_msuper); /* [] on <var334:Map[MClass, Int]>*/
4165 }
4166 var339 = (long)(var337)>>2;
4167 var338 = core__flat___Int___core__abstract_text__Object__to_s(var339);
4168 ((struct instance_core__NativeArray*)var325)->values[0]=var338;
4169 {
4170 var340 = ((val*(*)(val* self))(var_msuper->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_msuper); /* to_s on <var_msuper:nullable MClass(MClass)>*/
4171 }
4172 ((struct instance_core__NativeArray*)var325)->values[2]=var340;
4173 {
4174 var341 = ((val*(*)(val* self))(var325->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var325); /* native_to_s on <var325:NativeArray[String]>*/
4175 }
4176 varonce324 = var325;
4177 {
4178 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var341); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4179 }
4180 }
4181 {
4182 ((void(*)(val* self))((((long)var_310&3)?class_info[((long)var_310&3)]:var_310->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_310); /* next on <var_310:IndexedIterator[nullable MClass]>*/
4183 }
4184 }
4185 BREAK_label312: (void)0;
4186 {
4187 ((void(*)(val* self))((((long)var_310&3)?class_info[((long)var_310&3)]:var_310->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_310); /* finish on <var_310:IndexedIterator[nullable MClass]>*/
4188 }
4189 if (likely(varonce342!=NULL)) {
4190 var343 = varonce342;
4191 } else {
4192 var344 = "}";
4193 var345 = core__flat___NativeString___to_s_full(var344, 1l, 1l);
4194 var343 = var345;
4195 varonce342 = var343;
4196 }
4197 {
4198 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var343); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4199 }
4200 if (likely(varonce346!=NULL)) {
4201 var347 = varonce346;
4202 } else {
4203 var348 = "};";
4204 var349 = core__flat___NativeString___to_s_full(var348, 2l, 2l);
4205 var347 = var349;
4206 varonce346 = var347;
4207 }
4208 {
4209 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var347); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4210 }
4211 {
4212 var351 = nitc__abstract_compiler___MClassType___MType__is_c_primitive(var_mtype);
4213 }
4214 var_352 = var351;
4215 if (var351){
4216 var350 = var_352;
4217 } else {
4218 {
4219 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
4220 var355 = var_mtype->attrs[COLOR_nitc__model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
4221 if (unlikely(var355 == NULL)) {
4222 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
4223 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1163);
4224 fatal_exit(1);
4225 }
4226 var353 = var355;
4227 RET_LABEL354:(void)0;
4228 }
4229 }
4230 {
4231 { /* Inline model#MClass#name (var353) on <var353:MClass> */
4232 var358 = var353->attrs[COLOR_nitc__model__MClass___name].val; /* _name on <var353:MClass> */
4233 if (unlikely(var358 == NULL)) {
4234 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
4235 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 385);
4236 fatal_exit(1);
4237 }
4238 var356 = var358;
4239 RET_LABEL357:(void)0;
4240 }
4241 }
4242 if (likely(varonce359!=NULL)) {
4243 var360 = varonce359;
4244 } else {
4245 var361 = "Pointer";
4246 var362 = core__flat___NativeString___to_s_full(var361, 7l, 7l);
4247 var360 = var362;
4248 varonce359 = var360;
4249 }
4250 {
4251 var363 = ((short int(*)(val* self, val* p0))(var356->class->vft[COLOR_core__kernel__Object___61d_61d]))(var356, var360); /* == on <var356:String>*/
4252 }
4253 var350 = var363;
4254 }
4255 if (var350){
4256 {
4257 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
4258 var366 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
4259 if (unlikely(var366 == NULL)) {
4260 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
4261 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
4262 fatal_exit(1);
4263 }
4264 var364 = var366;
4265 RET_LABEL365:(void)0;
4266 }
4267 }
4268 if (unlikely(varonce367==NULL)) {
4269 var368 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
4270 if (likely(varonce369!=NULL)) {
4271 var370 = varonce369;
4272 } else {
4273 var371 = "struct instance_";
4274 var372 = core__flat___NativeString___to_s_full(var371, 16l, 16l);
4275 var370 = var372;
4276 varonce369 = var370;
4277 }
4278 ((struct instance_core__NativeArray*)var368)->values[0]=var370;
4279 if (likely(varonce373!=NULL)) {
4280 var374 = varonce373;
4281 } else {
4282 var375 = " {";
4283 var376 = core__flat___NativeString___to_s_full(var375, 2l, 2l);
4284 var374 = var376;
4285 varonce373 = var374;
4286 }
4287 ((struct instance_core__NativeArray*)var368)->values[2]=var374;
4288 } else {
4289 var368 = varonce367;
4290 varonce367 = NULL;
4291 }
4292 ((struct instance_core__NativeArray*)var368)->values[1]=var_c_name;
4293 {
4294 var377 = ((val*(*)(val* self))(var368->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var368); /* native_to_s on <var368:NativeArray[String]>*/
4295 }
4296 varonce367 = var368;
4297 {
4298 nitc___nitc__CodeWriter___add_decl(var364, var377); /* Direct call abstract_compiler#CodeWriter#add_decl on <var364:CodeWriter>*/
4299 }
4300 {
4301 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
4302 var380 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
4303 if (unlikely(var380 == NULL)) {
4304 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
4305 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
4306 fatal_exit(1);
4307 }
4308 var378 = var380;
4309 RET_LABEL379:(void)0;
4310 }
4311 }
4312 if (likely(varonce381!=NULL)) {
4313 var382 = varonce381;
4314 } else {
4315 var383 = "const struct class *class;";
4316 var384 = core__flat___NativeString___to_s_full(var383, 26l, 26l);
4317 var382 = var384;
4318 varonce381 = var382;
4319 }
4320 {
4321 nitc___nitc__CodeWriter___add_decl(var378, var382); /* Direct call abstract_compiler#CodeWriter#add_decl on <var378:CodeWriter>*/
4322 }
4323 {
4324 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
4325 var387 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
4326 if (unlikely(var387 == NULL)) {
4327 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
4328 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
4329 fatal_exit(1);
4330 }
4331 var385 = var387;
4332 RET_LABEL386:(void)0;
4333 }
4334 }
4335 if (unlikely(varonce388==NULL)) {
4336 var389 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
4337 if (likely(varonce390!=NULL)) {
4338 var391 = varonce390;
4339 } else {
4340 var392 = " value;";
4341 var393 = core__flat___NativeString___to_s_full(var392, 7l, 7l);
4342 var391 = var393;
4343 varonce390 = var391;
4344 }
4345 ((struct instance_core__NativeArray*)var389)->values[1]=var391;
4346 } else {
4347 var389 = varonce388;
4348 varonce388 = NULL;
4349 }
4350 {
4351 var394 = nitc__abstract_compiler___MClassType___MType__ctype(var_mtype);
4352 }
4353 ((struct instance_core__NativeArray*)var389)->values[0]=var394;
4354 {
4355 var395 = ((val*(*)(val* self))(var389->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var389); /* native_to_s on <var389:NativeArray[String]>*/
4356 }
4357 varonce388 = var389;
4358 {
4359 nitc___nitc__CodeWriter___add_decl(var385, var395); /* Direct call abstract_compiler#CodeWriter#add_decl on <var385:CodeWriter>*/
4360 }
4361 {
4362 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
4363 var398 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
4364 if (unlikely(var398 == NULL)) {
4365 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
4366 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
4367 fatal_exit(1);
4368 }
4369 var396 = var398;
4370 RET_LABEL397:(void)0;
4371 }
4372 }
4373 if (likely(varonce399!=NULL)) {
4374 var400 = varonce399;
4375 } else {
4376 var401 = "};";
4377 var402 = core__flat___NativeString___to_s_full(var401, 2l, 2l);
4378 var400 = var402;
4379 varonce399 = var400;
4380 }
4381 {
4382 nitc___nitc__CodeWriter___add_decl(var396, var400); /* Direct call abstract_compiler#CodeWriter#add_decl on <var396:CodeWriter>*/
4383 }
4384 if (unlikely(varonce403==NULL)) {
4385 var404 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
4386 if (likely(varonce405!=NULL)) {
4387 var406 = varonce405;
4388 } else {
4389 var407 = "BOX_";
4390 var408 = core__flat___NativeString___to_s_full(var407, 4l, 4l);
4391 var406 = var408;
4392 varonce405 = var406;
4393 }
4394 ((struct instance_core__NativeArray*)var404)->values[0]=var406;
4395 } else {
4396 var404 = varonce403;
4397 varonce403 = NULL;
4398 }
4399 ((struct instance_core__NativeArray*)var404)->values[1]=var_c_name;
4400 {
4401 var409 = ((val*(*)(val* self))(var404->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var404); /* native_to_s on <var404:NativeArray[String]>*/
4402 }
4403 varonce403 = var404;
4404 if (unlikely(varonce410==NULL)) {
4405 var411 = NEW_core__NativeArray(5l, &type_core__NativeArray__core__String);
4406 if (likely(varonce412!=NULL)) {
4407 var413 = varonce412;
4408 } else {
4409 var414 = "val* BOX_";
4410 var415 = core__flat___NativeString___to_s_full(var414, 9l, 9l);
4411 var413 = var415;
4412 varonce412 = var413;
4413 }
4414 ((struct instance_core__NativeArray*)var411)->values[0]=var413;
4415 if (likely(varonce416!=NULL)) {
4416 var417 = varonce416;
4417 } else {
4418 var418 = "(";
4419 var419 = core__flat___NativeString___to_s_full(var418, 1l, 1l);
4420 var417 = var419;
4421 varonce416 = var417;
4422 }
4423 ((struct instance_core__NativeArray*)var411)->values[2]=var417;
4424 if (likely(varonce420!=NULL)) {
4425 var421 = varonce420;
4426 } else {
4427 var422 = ");";
4428 var423 = core__flat___NativeString___to_s_full(var422, 2l, 2l);
4429 var421 = var423;
4430 varonce420 = var421;
4431 }
4432 ((struct instance_core__NativeArray*)var411)->values[4]=var421;
4433 } else {
4434 var411 = varonce410;
4435 varonce410 = NULL;
4436 }
4437 ((struct instance_core__NativeArray*)var411)->values[1]=var_c_name;
4438 {
4439 var424 = nitc__abstract_compiler___MClassType___MType__ctype_extern(var_mtype);
4440 }
4441 ((struct instance_core__NativeArray*)var411)->values[3]=var424;
4442 {
4443 var425 = ((val*(*)(val* self))(var411->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var411); /* native_to_s on <var411:NativeArray[String]>*/
4444 }
4445 varonce410 = var411;
4446 {
4447 nitc___nitc__AbstractCompiler___provide_declaration(self, var409, var425); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
4448 }
4449 if (unlikely(varonce426==NULL)) {
4450 var427 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
4451 if (likely(varonce428!=NULL)) {
4452 var429 = varonce428;
4453 } else {
4454 var430 = "/* allocate ";
4455 var431 = core__flat___NativeString___to_s_full(var430, 12l, 12l);
4456 var429 = var431;
4457 varonce428 = var429;
4458 }
4459 ((struct instance_core__NativeArray*)var427)->values[0]=var429;
4460 if (likely(varonce432!=NULL)) {
4461 var433 = varonce432;
4462 } else {
4463 var434 = " */";
4464 var435 = core__flat___NativeString___to_s_full(var434, 3l, 3l);
4465 var433 = var435;
4466 varonce432 = var433;
4467 }
4468 ((struct instance_core__NativeArray*)var427)->values[2]=var433;
4469 } else {
4470 var427 = varonce426;
4471 varonce426 = NULL;
4472 }
4473 {
4474 var436 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mtype); /* to_s on <var_mtype:MClassType>*/
4475 }
4476 ((struct instance_core__NativeArray*)var427)->values[1]=var436;
4477 {
4478 var437 = ((val*(*)(val* self))(var427->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var427); /* native_to_s on <var427:NativeArray[String]>*/
4479 }
4480 varonce426 = var427;
4481 {
4482 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var437); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4483 }
4484 if (unlikely(varonce438==NULL)) {
4485 var439 = NEW_core__NativeArray(5l, &type_core__NativeArray__core__String);
4486 if (likely(varonce440!=NULL)) {
4487 var441 = varonce440;
4488 } else {
4489 var442 = "val* BOX_";
4490 var443 = core__flat___NativeString___to_s_full(var442, 9l, 9l);
4491 var441 = var443;
4492 varonce440 = var441;
4493 }
4494 ((struct instance_core__NativeArray*)var439)->values[0]=var441;
4495 if (likely(varonce444!=NULL)) {
4496 var445 = varonce444;
4497 } else {
4498 var446 = "(";
4499 var447 = core__flat___NativeString___to_s_full(var446, 1l, 1l);
4500 var445 = var447;
4501 varonce444 = var445;
4502 }
4503 ((struct instance_core__NativeArray*)var439)->values[2]=var445;
4504 if (likely(varonce448!=NULL)) {
4505 var449 = varonce448;
4506 } else {
4507 var450 = " value) {";
4508 var451 = core__flat___NativeString___to_s_full(var450, 9l, 9l);
4509 var449 = var451;
4510 varonce448 = var449;
4511 }
4512 ((struct instance_core__NativeArray*)var439)->values[4]=var449;
4513 } else {
4514 var439 = varonce438;
4515 varonce438 = NULL;
4516 }
4517 {
4518 var452 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_nitc__model_base__MEntity__c_name]))(var_mtype); /* c_name on <var_mtype:MClassType>*/
4519 }
4520 ((struct instance_core__NativeArray*)var439)->values[1]=var452;
4521 {
4522 var453 = nitc__abstract_compiler___MClassType___MType__ctype_extern(var_mtype);
4523 }
4524 ((struct instance_core__NativeArray*)var439)->values[3]=var453;
4525 {
4526 var454 = ((val*(*)(val* self))(var439->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var439); /* native_to_s on <var439:NativeArray[String]>*/
4527 }
4528 varonce438 = var439;
4529 {
4530 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var454); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4531 }
4532 if (unlikely(varonce455==NULL)) {
4533 var456 = NEW_core__NativeArray(5l, &type_core__NativeArray__core__String);
4534 if (likely(varonce457!=NULL)) {
4535 var458 = varonce457;
4536 } else {
4537 var459 = "struct instance_";
4538 var460 = core__flat___NativeString___to_s_full(var459, 16l, 16l);
4539 var458 = var460;
4540 varonce457 = var458;
4541 }
4542 ((struct instance_core__NativeArray*)var456)->values[0]=var458;
4543 if (likely(varonce461!=NULL)) {
4544 var462 = varonce461;
4545 } else {
4546 var463 = "*res = nit_alloc(sizeof(struct instance_";
4547 var464 = core__flat___NativeString___to_s_full(var463, 40l, 40l);
4548 var462 = var464;
4549 varonce461 = var462;
4550 }
4551 ((struct instance_core__NativeArray*)var456)->values[2]=var462;
4552 if (likely(varonce465!=NULL)) {
4553 var466 = varonce465;
4554 } else {
4555 var467 = "));";
4556 var468 = core__flat___NativeString___to_s_full(var467, 3l, 3l);
4557 var466 = var468;
4558 varonce465 = var466;
4559 }
4560 ((struct instance_core__NativeArray*)var456)->values[4]=var466;
4561 } else {
4562 var456 = varonce455;
4563 varonce455 = NULL;
4564 }
4565 ((struct instance_core__NativeArray*)var456)->values[1]=var_c_name;
4566 ((struct instance_core__NativeArray*)var456)->values[3]=var_c_name;
4567 {
4568 var469 = ((val*(*)(val* self))(var456->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var456); /* native_to_s on <var456:NativeArray[String]>*/
4569 }
4570 varonce455 = var456;
4571 {
4572 nitc___nitc__AbstractCompilerVisitor___add(var_v, var469); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
4573 }
4574 if (unlikely(varonce470==NULL)) {
4575 var471 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
4576 if (likely(varonce472!=NULL)) {
4577 var473 = varonce472;
4578 } else {
4579 var474 = "class_";
4580 var475 = core__flat___NativeString___to_s_full(var474, 6l, 6l);
4581 var473 = var475;
4582 varonce472 = var473;
4583 }
4584 ((struct instance_core__NativeArray*)var471)->values[0]=var473;
4585 } else {
4586 var471 = varonce470;
4587 varonce470 = NULL;
4588 }
4589 ((struct instance_core__NativeArray*)var471)->values[1]=var_c_name;
4590 {
4591 var476 = ((val*(*)(val* self))(var471->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var471); /* native_to_s on <var471:NativeArray[String]>*/
4592 }
4593 varonce470 = var471;
4594 {
4595 nitc___nitc__AbstractCompilerVisitor___require_declaration(var_v, var476); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
4596 }
4597 if (unlikely(varonce477==NULL)) {
4598 var478 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
4599 if (likely(varonce479!=NULL)) {
4600 var480 = varonce479;
4601 } else {
4602 var481 = "res->class = &class_";
4603 var482 = core__flat___NativeString___to_s_full(var481, 20l, 20l);
4604 var480 = var482;
4605 varonce479 = var480;
4606 }
4607 ((struct instance_core__NativeArray*)var478)->values[0]=var480;
4608 if (likely(varonce483!=NULL)) {
4609 var484 = varonce483;
4610 } else {
4611 var485 = ";";
4612 var486 = core__flat___NativeString___to_s_full(var485, 1l, 1l);
4613 var484 = var486;
4614 varonce483 = var484;
4615 }
4616 ((struct instance_core__NativeArray*)var478)->values[2]=var484;
4617 } else {
4618 var478 = varonce477;
4619 varonce477 = NULL;
4620 }
4621 ((struct instance_core__NativeArray*)var478)->values[1]=var_c_name;
4622 {
4623 var487 = ((val*(*)(val* self))(var478->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var478); /* native_to_s on <var478:NativeArray[String]>*/
4624 }
4625 varonce477 = var478;
4626 {
4627 nitc___nitc__AbstractCompilerVisitor___add(var_v, var487); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
4628 }
4629 if (likely(varonce488!=NULL)) {
4630 var489 = varonce488;
4631 } else {
4632 var490 = "res->value = value;";
4633 var491 = core__flat___NativeString___to_s_full(var490, 19l, 19l);
4634 var489 = var491;
4635 varonce488 = var489;
4636 }
4637 {
4638 nitc___nitc__AbstractCompilerVisitor___add(var_v, var489); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
4639 }
4640 if (likely(varonce492!=NULL)) {
4641 var493 = varonce492;
4642 } else {
4643 var494 = "return (val*)res;";
4644 var495 = core__flat___NativeString___to_s_full(var494, 17l, 17l);
4645 var493 = var495;
4646 varonce492 = var493;
4647 }
4648 {
4649 nitc___nitc__AbstractCompilerVisitor___add(var_v, var493); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
4650 }
4651 if (likely(varonce496!=NULL)) {
4652 var497 = varonce496;
4653 } else {
4654 var498 = "}";
4655 var499 = core__flat___NativeString___to_s_full(var498, 1l, 1l);
4656 var497 = var499;
4657 varonce496 = var497;
4658 }
4659 {
4660 nitc___nitc__AbstractCompilerVisitor___add(var_v, var497); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
4661 }
4662 {
4663 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
4664 var502 = var_mtype->attrs[COLOR_nitc__model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
4665 if (unlikely(var502 == NULL)) {
4666 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
4667 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1163);
4668 fatal_exit(1);
4669 }
4670 var500 = var502;
4671 RET_LABEL501:(void)0;
4672 }
4673 }
4674 {
4675 { /* Inline model#MClass#name (var500) on <var500:MClass> */
4676 var505 = var500->attrs[COLOR_nitc__model__MClass___name].val; /* _name on <var500:MClass> */
4677 if (unlikely(var505 == NULL)) {
4678 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
4679 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 385);
4680 fatal_exit(1);
4681 }
4682 var503 = var505;
4683 RET_LABEL504:(void)0;
4684 }
4685 }
4686 if (likely(varonce506!=NULL)) {
4687 var507 = varonce506;
4688 } else {
4689 var508 = "Pointer";
4690 var509 = core__flat___NativeString___to_s_full(var508, 7l, 7l);
4691 var507 = var509;
4692 varonce506 = var507;
4693 }
4694 {
4695 { /* Inline kernel#Object#!= (var503,var507) on <var503:String> */
4696 var_other = var507;
4697 {
4698 var512 = ((short int(*)(val* self, val* p0))(var503->class->vft[COLOR_core__kernel__Object___61d_61d]))(var503, var_other); /* == on <var503:String>*/
4699 }
4700 var513 = !var512;
4701 var510 = var513;
4702 goto RET_LABEL511;
4703 RET_LABEL511:(void)0;
4704 }
4705 }
4706 if (var510){
4707 goto RET_LABEL;
4708 } else {
4709 }
4710 {
4711 var514 = nitc___nitc__SeparateErasureCompiler___nitc__abstract_compiler__AbstractCompiler__new_visitor(self);
4712 }
4713 var_v = var514;
4714 if (unlikely(varonce515==NULL)) {
4715 var516 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
4716 if (likely(varonce517!=NULL)) {
4717 var518 = varonce517;
4718 } else {
4719 var519 = "NEW_";
4720 var520 = core__flat___NativeString___to_s_full(var519, 4l, 4l);
4721 var518 = var520;
4722 varonce517 = var518;
4723 }
4724 ((struct instance_core__NativeArray*)var516)->values[0]=var518;
4725 } else {
4726 var516 = varonce515;
4727 varonce515 = NULL;
4728 }
4729 ((struct instance_core__NativeArray*)var516)->values[1]=var_c_name;
4730 {
4731 var521 = ((val*(*)(val* self))(var516->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var516); /* native_to_s on <var516:NativeArray[String]>*/
4732 }
4733 varonce515 = var516;
4734 if (unlikely(varonce522==NULL)) {
4735 var523 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
4736 if (likely(varonce524!=NULL)) {
4737 var525 = varonce524;
4738 } else {
4739 var526 = " NEW_";
4740 var527 = core__flat___NativeString___to_s_full(var526, 5l, 5l);
4741 var525 = var527;
4742 varonce524 = var525;
4743 }
4744 ((struct instance_core__NativeArray*)var523)->values[1]=var525;
4745 if (likely(varonce528!=NULL)) {
4746 var529 = varonce528;
4747 } else {
4748 var530 = "();";
4749 var531 = core__flat___NativeString___to_s_full(var530, 3l, 3l);
4750 var529 = var531;
4751 varonce528 = var529;
4752 }
4753 ((struct instance_core__NativeArray*)var523)->values[3]=var529;
4754 } else {
4755 var523 = varonce522;
4756 varonce522 = NULL;
4757 }
4758 {
4759 var532 = nitc__abstract_compiler___MClassType___MType__ctype(var_mtype);
4760 }
4761 ((struct instance_core__NativeArray*)var523)->values[0]=var532;
4762 ((struct instance_core__NativeArray*)var523)->values[2]=var_c_name;
4763 {
4764 var533 = ((val*(*)(val* self))(var523->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var523); /* native_to_s on <var523:NativeArray[String]>*/
4765 }
4766 varonce522 = var523;
4767 {
4768 nitc___nitc__AbstractCompiler___provide_declaration(self, var521, var533); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
4769 }
4770 if (unlikely(varonce534==NULL)) {
4771 var535 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
4772 if (likely(varonce536!=NULL)) {
4773 var537 = varonce536;
4774 } else {
4775 var538 = "/* allocate ";
4776 var539 = core__flat___NativeString___to_s_full(var538, 12l, 12l);
4777 var537 = var539;
4778 varonce536 = var537;
4779 }
4780 ((struct instance_core__NativeArray*)var535)->values[0]=var537;
4781 if (likely(varonce540!=NULL)) {
4782 var541 = varonce540;
4783 } else {
4784 var542 = " */";
4785 var543 = core__flat___NativeString___to_s_full(var542, 3l, 3l);
4786 var541 = var543;
4787 varonce540 = var541;
4788 }
4789 ((struct instance_core__NativeArray*)var535)->values[2]=var541;
4790 } else {
4791 var535 = varonce534;
4792 varonce534 = NULL;
4793 }
4794 {
4795 var544 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mtype); /* to_s on <var_mtype:MClassType>*/
4796 }
4797 ((struct instance_core__NativeArray*)var535)->values[1]=var544;
4798 {
4799 var545 = ((val*(*)(val* self))(var535->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var535); /* native_to_s on <var535:NativeArray[String]>*/
4800 }
4801 varonce534 = var535;
4802 {
4803 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var545); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4804 }
4805 if (unlikely(varonce546==NULL)) {
4806 var547 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
4807 if (likely(varonce548!=NULL)) {
4808 var549 = varonce548;
4809 } else {
4810 var550 = " NEW_";
4811 var551 = core__flat___NativeString___to_s_full(var550, 5l, 5l);
4812 var549 = var551;
4813 varonce548 = var549;
4814 }
4815 ((struct instance_core__NativeArray*)var547)->values[1]=var549;
4816 if (likely(varonce552!=NULL)) {
4817 var553 = varonce552;
4818 } else {
4819 var554 = "() {";
4820 var555 = core__flat___NativeString___to_s_full(var554, 4l, 4l);
4821 var553 = var555;
4822 varonce552 = var553;
4823 }
4824 ((struct instance_core__NativeArray*)var547)->values[3]=var553;
4825 } else {
4826 var547 = varonce546;
4827 varonce546 = NULL;
4828 }
4829 {
4830 var556 = nitc__abstract_compiler___MClassType___MType__ctype(var_mtype);
4831 }
4832 ((struct instance_core__NativeArray*)var547)->values[0]=var556;
4833 ((struct instance_core__NativeArray*)var547)->values[2]=var_c_name;
4834 {
4835 var557 = ((val*(*)(val* self))(var547->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var547); /* native_to_s on <var547:NativeArray[String]>*/
4836 }
4837 varonce546 = var547;
4838 {
4839 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var557); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
4840 }
4841 if (var_is_dead){
4842 if (unlikely(varonce558==NULL)) {
4843 var559 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
4844 if (likely(varonce560!=NULL)) {
4845 var561 = varonce560;
4846 } else {
4847 var562 = " is DEAD";
4848 var563 = core__flat___NativeString___to_s_full(var562, 8l, 8l);
4849 var561 = var563;
4850 varonce560 = var561;
4851 }
4852 ((struct instance_core__NativeArray*)var559)->values[1]=var561;
4853 } else {
4854 var559 = varonce558;
4855 varonce558 = NULL;
4856 }
4857 {
4858 var564 = ((val*(*)(val* self))(var_mclass->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mclass); /* to_s on <var_mclass:MClass>*/
4859 }
4860 ((struct instance_core__NativeArray*)var559)->values[0]=var564;
4861 {
4862 var565 = ((val*(*)(val* self))(var559->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var559); /* native_to_s on <var559:NativeArray[String]>*/
4863 }
4864 varonce558 = var559;
4865 {
4866 nitc___nitc__AbstractCompilerVisitor___add_abort(var_v, var565); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <var_v:SeparateCompilerVisitor>*/
4867 }
4868 } else {
4869 if (likely(varonce566!=NULL)) {
4870 var567 = varonce566;
4871 } else {
4872 var568 = "self";
4873 var569 = core__flat___NativeString___to_s_full(var568, 4l, 4l);
4874 var567 = var569;
4875 varonce566 = var567;
4876 }
4877 {
4878 var570 = nitc___nitc__AbstractCompilerVisitor___new_named_var(var_v, var_mtype, var567);
4879 }
4880 var_res = var570;
4881 {
4882 { /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res,1) on <var_res:RuntimeVariable> */
4883 var_res->attrs[COLOR_nitc__abstract_compiler__RuntimeVariable___is_exact].s = 1; /* _is_exact on <var_res:RuntimeVariable> */
4884 RET_LABEL571:(void)0;
4885 }
4886 }
4887 if (unlikely(varonce572==NULL)) {
4888 var573 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
4889 if (likely(varonce574!=NULL)) {
4890 var575 = varonce574;
4891 } else {
4892 var576 = " = nit_alloc(sizeof(struct instance_";
4893 var577 = core__flat___NativeString___to_s_full(var576, 36l, 36l);
4894 var575 = var577;
4895 varonce574 = var575;
4896 }
4897 ((struct instance_core__NativeArray*)var573)->values[1]=var575;
4898 if (likely(varonce578!=NULL)) {
4899 var579 = varonce578;
4900 } else {
4901 var580 = "));";
4902 var581 = core__flat___NativeString___to_s_full(var580, 3l, 3l);
4903 var579 = var581;
4904 varonce578 = var579;
4905 }
4906 ((struct instance_core__NativeArray*)var573)->values[3]=var579;
4907 } else {
4908 var573 = varonce572;
4909 varonce572 = NULL;
4910 }
4911 {
4912 var582 = ((val*(*)(val* self))(var_res->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res); /* to_s on <var_res:RuntimeVariable>*/
4913 }
4914 ((struct instance_core__NativeArray*)var573)->values[0]=var582;
4915 {
4916 var583 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_nitc__model_base__MEntity__c_name]))(var_mtype); /* c_name on <var_mtype:MClassType>*/
4917 }
4918 ((struct instance_core__NativeArray*)var573)->values[2]=var583;
4919 {
4920 var584 = ((val*(*)(val* self))(var573->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var573); /* native_to_s on <var573:NativeArray[String]>*/
4921 }
4922 varonce572 = var573;
4923 {
4924 nitc___nitc__AbstractCompilerVisitor___add(var_v, var584); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
4925 }
4926 if (unlikely(varonce585==NULL)) {
4927 var586 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
4928 if (likely(varonce587!=NULL)) {
4929 var588 = varonce587;
4930 } else {
4931 var589 = "class_";
4932 var590 = core__flat___NativeString___to_s_full(var589, 6l, 6l);
4933 var588 = var590;
4934 varonce587 = var588;
4935 }
4936 ((struct instance_core__NativeArray*)var586)->values[0]=var588;
4937 } else {
4938 var586 = varonce585;
4939 varonce585 = NULL;
4940 }
4941 ((struct instance_core__NativeArray*)var586)->values[1]=var_c_name;
4942 {
4943 var591 = ((val*(*)(val* self))(var586->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var586); /* native_to_s on <var586:NativeArray[String]>*/
4944 }
4945 varonce585 = var586;
4946 {
4947 nitc___nitc__AbstractCompilerVisitor___require_declaration(var_v, var591); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
4948 }
4949 if (unlikely(varonce592==NULL)) {
4950 var593 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
4951 if (likely(varonce594!=NULL)) {
4952 var595 = varonce594;
4953 } else {
4954 var596 = "->class = &class_";
4955 var597 = core__flat___NativeString___to_s_full(var596, 17l, 17l);
4956 var595 = var597;
4957 varonce594 = var595;
4958 }
4959 ((struct instance_core__NativeArray*)var593)->values[1]=var595;
4960 if (likely(varonce598!=NULL)) {
4961 var599 = varonce598;
4962 } else {
4963 var600 = ";";
4964 var601 = core__flat___NativeString___to_s_full(var600, 1l, 1l);
4965 var599 = var601;
4966 varonce598 = var599;
4967 }
4968 ((struct instance_core__NativeArray*)var593)->values[3]=var599;
4969 } else {
4970 var593 = varonce592;
4971 varonce592 = NULL;
4972 }
4973 {
4974 var602 = ((val*(*)(val* self))(var_res->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res); /* to_s on <var_res:RuntimeVariable>*/
4975 }
4976 ((struct instance_core__NativeArray*)var593)->values[0]=var602;
4977 ((struct instance_core__NativeArray*)var593)->values[2]=var_c_name;
4978 {
4979 var603 = ((val*(*)(val* self))(var593->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var593); /* native_to_s on <var593:NativeArray[String]>*/
4980 }
4981 varonce592 = var593;
4982 {
4983 nitc___nitc__AbstractCompilerVisitor___add(var_v, var603); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
4984 }
4985 if (unlikely(varonce604==NULL)) {
4986 var605 = NEW_core__NativeArray(5l, &type_core__NativeArray__core__String);
4987 if (likely(varonce606!=NULL)) {
4988 var607 = varonce606;
4989 } else {
4990 var608 = "((struct instance_";
4991 var609 = core__flat___NativeString___to_s_full(var608, 18l, 18l);
4992 var607 = var609;
4993 varonce606 = var607;
4994 }
4995 ((struct instance_core__NativeArray*)var605)->values[0]=var607;
4996 if (likely(varonce610!=NULL)) {
4997 var611 = varonce610;
4998 } else {
4999 var612 = "*)";
5000 var613 = core__flat___NativeString___to_s_full(var612, 2l, 2l);
5001 var611 = var613;
5002 varonce610 = var611;
5003 }
5004 ((struct instance_core__NativeArray*)var605)->values[2]=var611;
5005 if (likely(varonce614!=NULL)) {
5006 var615 = varonce614;
5007 } else {
5008 var616 = ")->value = NULL;";
5009 var617 = core__flat___NativeString___to_s_full(var616, 16l, 16l);
5010 var615 = var617;
5011 varonce614 = var615;
5012 }
5013 ((struct instance_core__NativeArray*)var605)->values[4]=var615;
5014 } else {
5015 var605 = varonce604;
5016 varonce604 = NULL;
5017 }
5018 {
5019 var618 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_nitc__model_base__MEntity__c_name]))(var_mtype); /* c_name on <var_mtype:MClassType>*/
5020 }
5021 ((struct instance_core__NativeArray*)var605)->values[1]=var618;
5022 {
5023 var619 = ((val*(*)(val* self))(var_res->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res); /* to_s on <var_res:RuntimeVariable>*/
5024 }
5025 ((struct instance_core__NativeArray*)var605)->values[3]=var619;
5026 {
5027 var620 = ((val*(*)(val* self))(var605->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var605); /* native_to_s on <var605:NativeArray[String]>*/
5028 }
5029 varonce604 = var605;
5030 {
5031 nitc___nitc__AbstractCompilerVisitor___add(var_v, var620); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5032 }
5033 if (unlikely(varonce621==NULL)) {
5034 var622 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
5035 if (likely(varonce623!=NULL)) {
5036 var624 = varonce623;
5037 } else {
5038 var625 = "return ";
5039 var626 = core__flat___NativeString___to_s_full(var625, 7l, 7l);
5040 var624 = var626;
5041 varonce623 = var624;
5042 }
5043 ((struct instance_core__NativeArray*)var622)->values[0]=var624;
5044 if (likely(varonce627!=NULL)) {
5045 var628 = varonce627;
5046 } else {
5047 var629 = ";";
5048 var630 = core__flat___NativeString___to_s_full(var629, 1l, 1l);
5049 var628 = var630;
5050 varonce627 = var628;
5051 }
5052 ((struct instance_core__NativeArray*)var622)->values[2]=var628;
5053 } else {
5054 var622 = varonce621;
5055 varonce621 = NULL;
5056 }
5057 {
5058 var631 = ((val*(*)(val* self))(var_res->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res); /* to_s on <var_res:RuntimeVariable>*/
5059 }
5060 ((struct instance_core__NativeArray*)var622)->values[1]=var631;
5061 {
5062 var632 = ((val*(*)(val* self))(var622->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var622); /* native_to_s on <var622:NativeArray[String]>*/
5063 }
5064 varonce621 = var622;
5065 {
5066 nitc___nitc__AbstractCompilerVisitor___add(var_v, var632); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5067 }
5068 }
5069 if (likely(varonce633!=NULL)) {
5070 var634 = varonce633;
5071 } else {
5072 var635 = "}";
5073 var636 = core__flat___NativeString___to_s_full(var635, 1l, 1l);
5074 var634 = var636;
5075 varonce633 = var634;
5076 }
5077 {
5078 nitc___nitc__AbstractCompilerVisitor___add(var_v, var634); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5079 }
5080 goto RET_LABEL;
5081 } else {
5082 {
5083 { /* Inline model#MClass#name (var_mclass) on <var_mclass:MClass> */
5084 var639 = var_mclass->attrs[COLOR_nitc__model__MClass___name].val; /* _name on <var_mclass:MClass> */
5085 if (unlikely(var639 == NULL)) {
5086 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
5087 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 385);
5088 fatal_exit(1);
5089 }
5090 var637 = var639;
5091 RET_LABEL638:(void)0;
5092 }
5093 }
5094 if (likely(varonce640!=NULL)) {
5095 var641 = varonce640;
5096 } else {
5097 var642 = "NativeArray";
5098 var643 = core__flat___NativeString___to_s_full(var642, 11l, 11l);
5099 var641 = var643;
5100 varonce640 = var641;
5101 }
5102 {
5103 var644 = ((short int(*)(val* self, val* p0))(var637->class->vft[COLOR_core__kernel__Object___61d_61d]))(var637, var641); /* == on <var637:String>*/
5104 }
5105 if (var644){
5106 {
5107 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5108 var647 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5109 if (unlikely(var647 == NULL)) {
5110 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5111 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
5112 fatal_exit(1);
5113 }
5114 var645 = var647;
5115 RET_LABEL646:(void)0;
5116 }
5117 }
5118 if (unlikely(varonce648==NULL)) {
5119 var649 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
5120 if (likely(varonce650!=NULL)) {
5121 var651 = varonce650;
5122 } else {
5123 var652 = "struct instance_";
5124 var653 = core__flat___NativeString___to_s_full(var652, 16l, 16l);
5125 var651 = var653;
5126 varonce650 = var651;
5127 }
5128 ((struct instance_core__NativeArray*)var649)->values[0]=var651;
5129 if (likely(varonce654!=NULL)) {
5130 var655 = varonce654;
5131 } else {
5132 var656 = " {";
5133 var657 = core__flat___NativeString___to_s_full(var656, 2l, 2l);
5134 var655 = var657;
5135 varonce654 = var655;
5136 }
5137 ((struct instance_core__NativeArray*)var649)->values[2]=var655;
5138 } else {
5139 var649 = varonce648;
5140 varonce648 = NULL;
5141 }
5142 ((struct instance_core__NativeArray*)var649)->values[1]=var_c_name;
5143 {
5144 var658 = ((val*(*)(val* self))(var649->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var649); /* native_to_s on <var649:NativeArray[String]>*/
5145 }
5146 varonce648 = var649;
5147 {
5148 nitc___nitc__CodeWriter___add_decl(var645, var658); /* Direct call abstract_compiler#CodeWriter#add_decl on <var645:CodeWriter>*/
5149 }
5150 {
5151 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5152 var661 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5153 if (unlikely(var661 == NULL)) {
5154 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5155 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
5156 fatal_exit(1);
5157 }
5158 var659 = var661;
5159 RET_LABEL660:(void)0;
5160 }
5161 }
5162 if (likely(varonce662!=NULL)) {
5163 var663 = varonce662;
5164 } else {
5165 var664 = "const struct class *class;";
5166 var665 = core__flat___NativeString___to_s_full(var664, 26l, 26l);
5167 var663 = var665;
5168 varonce662 = var663;
5169 }
5170 {
5171 nitc___nitc__CodeWriter___add_decl(var659, var663); /* Direct call abstract_compiler#CodeWriter#add_decl on <var659:CodeWriter>*/
5172 }
5173 {
5174 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5175 var668 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5176 if (unlikely(var668 == NULL)) {
5177 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5178 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
5179 fatal_exit(1);
5180 }
5181 var666 = var668;
5182 RET_LABEL667:(void)0;
5183 }
5184 }
5185 if (likely(varonce669!=NULL)) {
5186 var670 = varonce669;
5187 } else {
5188 var671 = "int length;";
5189 var672 = core__flat___NativeString___to_s_full(var671, 11l, 11l);
5190 var670 = var672;
5191 varonce669 = var670;
5192 }
5193 {
5194 nitc___nitc__CodeWriter___add_decl(var666, var670); /* Direct call abstract_compiler#CodeWriter#add_decl on <var666:CodeWriter>*/
5195 }
5196 {
5197 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5198 var675 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5199 if (unlikely(var675 == NULL)) {
5200 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5201 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
5202 fatal_exit(1);
5203 }
5204 var673 = var675;
5205 RET_LABEL674:(void)0;
5206 }
5207 }
5208 if (likely(varonce676!=NULL)) {
5209 var677 = varonce676;
5210 } else {
5211 var678 = "val* values[];";
5212 var679 = core__flat___NativeString___to_s_full(var678, 14l, 14l);
5213 var677 = var679;
5214 varonce676 = var677;
5215 }
5216 {
5217 nitc___nitc__CodeWriter___add_decl(var673, var677); /* Direct call abstract_compiler#CodeWriter#add_decl on <var673:CodeWriter>*/
5218 }
5219 {
5220 { /* Inline abstract_compiler#AbstractCompiler#header (self) on <self:SeparateErasureCompiler> */
5221 var682 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___header].val; /* _header on <self:SeparateErasureCompiler> */
5222 if (unlikely(var682 == NULL)) {
5223 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _header");
5224 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 585);
5225 fatal_exit(1);
5226 }
5227 var680 = var682;
5228 RET_LABEL681:(void)0;
5229 }
5230 }
5231 if (likely(varonce683!=NULL)) {
5232 var684 = varonce683;
5233 } else {
5234 var685 = "};";
5235 var686 = core__flat___NativeString___to_s_full(var685, 2l, 2l);
5236 var684 = var686;
5237 varonce683 = var684;
5238 }
5239 {
5240 nitc___nitc__CodeWriter___add_decl(var680, var684); /* Direct call abstract_compiler#CodeWriter#add_decl on <var680:CodeWriter>*/
5241 }
5242 if (unlikely(varonce687==NULL)) {
5243 var688 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
5244 if (likely(varonce689!=NULL)) {
5245 var690 = varonce689;
5246 } else {
5247 var691 = "NEW_";
5248 var692 = core__flat___NativeString___to_s_full(var691, 4l, 4l);
5249 var690 = var692;
5250 varonce689 = var690;
5251 }
5252 ((struct instance_core__NativeArray*)var688)->values[0]=var690;
5253 } else {
5254 var688 = varonce687;
5255 varonce687 = NULL;
5256 }
5257 ((struct instance_core__NativeArray*)var688)->values[1]=var_c_name;
5258 {
5259 var693 = ((val*(*)(val* self))(var688->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var688); /* native_to_s on <var688:NativeArray[String]>*/
5260 }
5261 varonce687 = var688;
5262 if (unlikely(varonce694==NULL)) {
5263 var695 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
5264 if (likely(varonce696!=NULL)) {
5265 var697 = varonce696;
5266 } else {
5267 var698 = " NEW_";
5268 var699 = core__flat___NativeString___to_s_full(var698, 5l, 5l);
5269 var697 = var699;
5270 varonce696 = var697;
5271 }
5272 ((struct instance_core__NativeArray*)var695)->values[1]=var697;
5273 if (likely(varonce700!=NULL)) {
5274 var701 = varonce700;
5275 } else {
5276 var702 = "(int length);";
5277 var703 = core__flat___NativeString___to_s_full(var702, 13l, 13l);
5278 var701 = var703;
5279 varonce700 = var701;
5280 }
5281 ((struct instance_core__NativeArray*)var695)->values[3]=var701;
5282 } else {
5283 var695 = varonce694;
5284 varonce694 = NULL;
5285 }
5286 {
5287 var704 = nitc__abstract_compiler___MClassType___MType__ctype(var_mtype);
5288 }
5289 ((struct instance_core__NativeArray*)var695)->values[0]=var704;
5290 ((struct instance_core__NativeArray*)var695)->values[2]=var_c_name;
5291 {
5292 var705 = ((val*(*)(val* self))(var695->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var695); /* native_to_s on <var695:NativeArray[String]>*/
5293 }
5294 varonce694 = var695;
5295 {
5296 nitc___nitc__AbstractCompiler___provide_declaration(self, var693, var705); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
5297 }
5298 if (unlikely(varonce706==NULL)) {
5299 var707 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
5300 if (likely(varonce708!=NULL)) {
5301 var709 = varonce708;
5302 } else {
5303 var710 = "/* allocate ";
5304 var711 = core__flat___NativeString___to_s_full(var710, 12l, 12l);
5305 var709 = var711;
5306 varonce708 = var709;
5307 }
5308 ((struct instance_core__NativeArray*)var707)->values[0]=var709;
5309 if (likely(varonce712!=NULL)) {
5310 var713 = varonce712;
5311 } else {
5312 var714 = " */";
5313 var715 = core__flat___NativeString___to_s_full(var714, 3l, 3l);
5314 var713 = var715;
5315 varonce712 = var713;
5316 }
5317 ((struct instance_core__NativeArray*)var707)->values[2]=var713;
5318 } else {
5319 var707 = varonce706;
5320 varonce706 = NULL;
5321 }
5322 {
5323 var716 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mtype); /* to_s on <var_mtype:MClassType>*/
5324 }
5325 ((struct instance_core__NativeArray*)var707)->values[1]=var716;
5326 {
5327 var717 = ((val*(*)(val* self))(var707->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var707); /* native_to_s on <var707:NativeArray[String]>*/
5328 }
5329 varonce706 = var707;
5330 {
5331 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var717); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5332 }
5333 if (unlikely(varonce718==NULL)) {
5334 var719 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
5335 if (likely(varonce720!=NULL)) {
5336 var721 = varonce720;
5337 } else {
5338 var722 = " NEW_";
5339 var723 = core__flat___NativeString___to_s_full(var722, 5l, 5l);
5340 var721 = var723;
5341 varonce720 = var721;
5342 }
5343 ((struct instance_core__NativeArray*)var719)->values[1]=var721;
5344 if (likely(varonce724!=NULL)) {
5345 var725 = varonce724;
5346 } else {
5347 var726 = "(int length) {";
5348 var727 = core__flat___NativeString___to_s_full(var726, 14l, 14l);
5349 var725 = var727;
5350 varonce724 = var725;
5351 }
5352 ((struct instance_core__NativeArray*)var719)->values[3]=var725;
5353 } else {
5354 var719 = varonce718;
5355 varonce718 = NULL;
5356 }
5357 {
5358 var728 = nitc__abstract_compiler___MClassType___MType__ctype(var_mtype);
5359 }
5360 ((struct instance_core__NativeArray*)var719)->values[0]=var728;
5361 ((struct instance_core__NativeArray*)var719)->values[2]=var_c_name;
5362 {
5363 var729 = ((val*(*)(val* self))(var719->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var719); /* native_to_s on <var719:NativeArray[String]>*/
5364 }
5365 varonce718 = var719;
5366 {
5367 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var729); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5368 }
5369 if (likely(varonce730!=NULL)) {
5370 var731 = varonce730;
5371 } else {
5372 var732 = "self";
5373 var733 = core__flat___NativeString___to_s_full(var732, 4l, 4l);
5374 var731 = var733;
5375 varonce730 = var731;
5376 }
5377 {
5378 var734 = nitc___nitc__AbstractCompilerVisitor___get_name(var_v, var731);
5379 }
5380 var_res735 = var734;
5381 if (unlikely(varonce736==NULL)) {
5382 var737 = NEW_core__NativeArray(5l, &type_core__NativeArray__core__String);
5383 if (likely(varonce738!=NULL)) {
5384 var739 = varonce738;
5385 } else {
5386 var740 = "struct instance_";
5387 var741 = core__flat___NativeString___to_s_full(var740, 16l, 16l);
5388 var739 = var741;
5389 varonce738 = var739;
5390 }
5391 ((struct instance_core__NativeArray*)var737)->values[0]=var739;
5392 if (likely(varonce742!=NULL)) {
5393 var743 = varonce742;
5394 } else {
5395 var744 = " *";
5396 var745 = core__flat___NativeString___to_s_full(var744, 2l, 2l);
5397 var743 = var745;
5398 varonce742 = var743;
5399 }
5400 ((struct instance_core__NativeArray*)var737)->values[2]=var743;
5401 if (likely(varonce746!=NULL)) {
5402 var747 = varonce746;
5403 } else {
5404 var748 = ";";
5405 var749 = core__flat___NativeString___to_s_full(var748, 1l, 1l);
5406 var747 = var749;
5407 varonce746 = var747;
5408 }
5409 ((struct instance_core__NativeArray*)var737)->values[4]=var747;
5410 } else {
5411 var737 = varonce736;
5412 varonce736 = NULL;
5413 }
5414 ((struct instance_core__NativeArray*)var737)->values[1]=var_c_name;
5415 ((struct instance_core__NativeArray*)var737)->values[3]=var_res735;
5416 {
5417 var750 = ((val*(*)(val* self))(var737->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var737); /* native_to_s on <var737:NativeArray[String]>*/
5418 }
5419 varonce736 = var737;
5420 {
5421 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var750); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5422 }
5423 {
5424 var751 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_nitc__model__MClassType__arguments]))(var_mtype); /* arguments on <var_mtype:MClassType>*/
5425 }
5426 {
5427 var752 = core___core__SequenceRead___Collection__first(var751);
5428 }
5429 var_mtype_elt = var752;
5430 if (unlikely(varonce753==NULL)) {
5431 var754 = NEW_core__NativeArray(6l, &type_core__NativeArray__core__String);
5432 if (likely(varonce755!=NULL)) {
5433 var756 = varonce755;
5434 } else {
5435 var757 = " = nit_alloc(sizeof(struct instance_";
5436 var758 = core__flat___NativeString___to_s_full(var757, 36l, 36l);
5437 var756 = var758;
5438 varonce755 = var756;
5439 }
5440 ((struct instance_core__NativeArray*)var754)->values[1]=var756;
5441 if (likely(varonce759!=NULL)) {
5442 var760 = varonce759;
5443 } else {
5444 var761 = ") + length*sizeof(";
5445 var762 = core__flat___NativeString___to_s_full(var761, 18l, 18l);
5446 var760 = var762;
5447 varonce759 = var760;
5448 }
5449 ((struct instance_core__NativeArray*)var754)->values[3]=var760;
5450 if (likely(varonce763!=NULL)) {
5451 var764 = varonce763;
5452 } else {
5453 var765 = "));";
5454 var766 = core__flat___NativeString___to_s_full(var765, 3l, 3l);
5455 var764 = var766;
5456 varonce763 = var764;
5457 }
5458 ((struct instance_core__NativeArray*)var754)->values[5]=var764;
5459 } else {
5460 var754 = varonce753;
5461 varonce753 = NULL;
5462 }
5463 ((struct instance_core__NativeArray*)var754)->values[0]=var_res735;
5464 ((struct instance_core__NativeArray*)var754)->values[2]=var_c_name;
5465 {
5466 var767 = ((val*(*)(val* self))(var_mtype_elt->class->vft[COLOR_nitc__abstract_compiler__MType__ctype]))(var_mtype_elt); /* ctype on <var_mtype_elt:MType>*/
5467 }
5468 ((struct instance_core__NativeArray*)var754)->values[4]=var767;
5469 {
5470 var768 = ((val*(*)(val* self))(var754->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var754); /* native_to_s on <var754:NativeArray[String]>*/
5471 }
5472 varonce753 = var754;
5473 {
5474 nitc___nitc__AbstractCompilerVisitor___add(var_v, var768); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5475 }
5476 if (unlikely(varonce769==NULL)) {
5477 var770 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
5478 if (likely(varonce771!=NULL)) {
5479 var772 = varonce771;
5480 } else {
5481 var773 = "class_";
5482 var774 = core__flat___NativeString___to_s_full(var773, 6l, 6l);
5483 var772 = var774;
5484 varonce771 = var772;
5485 }
5486 ((struct instance_core__NativeArray*)var770)->values[0]=var772;
5487 } else {
5488 var770 = varonce769;
5489 varonce769 = NULL;
5490 }
5491 ((struct instance_core__NativeArray*)var770)->values[1]=var_c_name;
5492 {
5493 var775 = ((val*(*)(val* self))(var770->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var770); /* native_to_s on <var770:NativeArray[String]>*/
5494 }
5495 varonce769 = var770;
5496 {
5497 nitc___nitc__AbstractCompilerVisitor___require_declaration(var_v, var775); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
5498 }
5499 if (unlikely(varonce776==NULL)) {
5500 var777 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
5501 if (likely(varonce778!=NULL)) {
5502 var779 = varonce778;
5503 } else {
5504 var780 = "->class = &class_";
5505 var781 = core__flat___NativeString___to_s_full(var780, 17l, 17l);
5506 var779 = var781;
5507 varonce778 = var779;
5508 }
5509 ((struct instance_core__NativeArray*)var777)->values[1]=var779;
5510 if (likely(varonce782!=NULL)) {
5511 var783 = varonce782;
5512 } else {
5513 var784 = ";";
5514 var785 = core__flat___NativeString___to_s_full(var784, 1l, 1l);
5515 var783 = var785;
5516 varonce782 = var783;
5517 }
5518 ((struct instance_core__NativeArray*)var777)->values[3]=var783;
5519 } else {
5520 var777 = varonce776;
5521 varonce776 = NULL;
5522 }
5523 ((struct instance_core__NativeArray*)var777)->values[0]=var_res735;
5524 ((struct instance_core__NativeArray*)var777)->values[2]=var_c_name;
5525 {
5526 var786 = ((val*(*)(val* self))(var777->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var777); /* native_to_s on <var777:NativeArray[String]>*/
5527 }
5528 varonce776 = var777;
5529 {
5530 nitc___nitc__AbstractCompilerVisitor___add(var_v, var786); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5531 }
5532 if (unlikely(varonce787==NULL)) {
5533 var788 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
5534 if (likely(varonce789!=NULL)) {
5535 var790 = varonce789;
5536 } else {
5537 var791 = "->length = length;";
5538 var792 = core__flat___NativeString___to_s_full(var791, 18l, 18l);
5539 var790 = var792;
5540 varonce789 = var790;
5541 }
5542 ((struct instance_core__NativeArray*)var788)->values[1]=var790;
5543 } else {
5544 var788 = varonce787;
5545 varonce787 = NULL;
5546 }
5547 ((struct instance_core__NativeArray*)var788)->values[0]=var_res735;
5548 {
5549 var793 = ((val*(*)(val* self))(var788->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var788); /* native_to_s on <var788:NativeArray[String]>*/
5550 }
5551 varonce787 = var788;
5552 {
5553 nitc___nitc__AbstractCompilerVisitor___add(var_v, var793); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5554 }
5555 if (unlikely(varonce794==NULL)) {
5556 var795 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
5557 if (likely(varonce796!=NULL)) {
5558 var797 = varonce796;
5559 } else {
5560 var798 = "return (val*)";
5561 var799 = core__flat___NativeString___to_s_full(var798, 13l, 13l);
5562 var797 = var799;
5563 varonce796 = var797;
5564 }
5565 ((struct instance_core__NativeArray*)var795)->values[0]=var797;
5566 if (likely(varonce800!=NULL)) {
5567 var801 = varonce800;
5568 } else {
5569 var802 = ";";
5570 var803 = core__flat___NativeString___to_s_full(var802, 1l, 1l);
5571 var801 = var803;
5572 varonce800 = var801;
5573 }
5574 ((struct instance_core__NativeArray*)var795)->values[2]=var801;
5575 } else {
5576 var795 = varonce794;
5577 varonce794 = NULL;
5578 }
5579 ((struct instance_core__NativeArray*)var795)->values[1]=var_res735;
5580 {
5581 var804 = ((val*(*)(val* self))(var795->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var795); /* native_to_s on <var795:NativeArray[String]>*/
5582 }
5583 varonce794 = var795;
5584 {
5585 nitc___nitc__AbstractCompilerVisitor___add(var_v, var804); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5586 }
5587 if (likely(varonce805!=NULL)) {
5588 var806 = varonce805;
5589 } else {
5590 var807 = "}";
5591 var808 = core__flat___NativeString___to_s_full(var807, 1l, 1l);
5592 var806 = var808;
5593 varonce805 = var806;
5594 }
5595 {
5596 nitc___nitc__AbstractCompilerVisitor___add(var_v, var806); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5597 }
5598 goto RET_LABEL;
5599 } else {
5600 {
5601 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
5602 var812 = var_mtype->attrs[COLOR_nitc__model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
5603 if (unlikely(var812 == NULL)) {
5604 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
5605 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1163);
5606 fatal_exit(1);
5607 }
5608 var810 = var812;
5609 RET_LABEL811:(void)0;
5610 }
5611 }
5612 {
5613 { /* Inline model#MClass#kind (var810) on <var810:MClass> */
5614 var815 = var810->attrs[COLOR_nitc__model__MClass___kind].val; /* _kind on <var810:MClass> */
5615 if (unlikely(var815 == NULL)) {
5616 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
5617 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 459);
5618 fatal_exit(1);
5619 }
5620 var813 = var815;
5621 RET_LABEL814:(void)0;
5622 }
5623 }
5624 var816 = glob_sys;
5625 {
5626 var817 = nitc__model___core__Sys___extern_kind(var816);
5627 }
5628 {
5629 { /* Inline kernel#Object#== (var813,var817) on <var813:MClassKind> */
5630 var_other205 = var817;
5631 {
5632 { /* Inline kernel#Object#is_same_instance (var813,var_other205) on <var813:MClassKind> */
5633 var822 = var813 == var_other205;
5634 var820 = var822;
5635 goto RET_LABEL821;
5636 RET_LABEL821:(void)0;
5637 }
5638 }
5639 var818 = var820;
5640 goto RET_LABEL819;
5641 RET_LABEL819:(void)0;
5642 }
5643 }
5644 var_823 = var818;
5645 if (var818){
5646 {
5647 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
5648 var826 = var_mtype->attrs[COLOR_nitc__model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
5649 if (unlikely(var826 == NULL)) {
5650 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
5651 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1163);
5652 fatal_exit(1);
5653 }
5654 var824 = var826;
5655 RET_LABEL825:(void)0;
5656 }
5657 }
5658 {
5659 { /* Inline model#MClass#name (var824) on <var824:MClass> */
5660 var829 = var824->attrs[COLOR_nitc__model__MClass___name].val; /* _name on <var824:MClass> */
5661 if (unlikely(var829 == NULL)) {
5662 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
5663 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 385);
5664 fatal_exit(1);
5665 }
5666 var827 = var829;
5667 RET_LABEL828:(void)0;
5668 }
5669 }
5670 if (likely(varonce830!=NULL)) {
5671 var831 = varonce830;
5672 } else {
5673 var832 = "NativeString";
5674 var833 = core__flat___NativeString___to_s_full(var832, 12l, 12l);
5675 var831 = var833;
5676 varonce830 = var831;
5677 }
5678 {
5679 { /* Inline kernel#Object#!= (var827,var831) on <var827:String> */
5680 var_other = var831;
5681 {
5682 var836 = ((short int(*)(val* self, val* p0))(var827->class->vft[COLOR_core__kernel__Object___61d_61d]))(var827, var_other); /* == on <var827:String>*/
5683 }
5684 var837 = !var836;
5685 var834 = var837;
5686 goto RET_LABEL835;
5687 RET_LABEL835:(void)0;
5688 }
5689 }
5690 var809 = var834;
5691 } else {
5692 var809 = var_823;
5693 }
5694 if (var809){
5695 {
5696 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
5697 var840 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
5698 if (unlikely(var840 == NULL)) {
5699 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
5700 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
5701 fatal_exit(1);
5702 }
5703 var838 = var840;
5704 RET_LABEL839:(void)0;
5705 }
5706 }
5707 {
5708 var841 = nitc__model___MModule___pointer_type(var838);
5709 }
5710 var_pointer_type = var841;
5711 if (unlikely(varonce842==NULL)) {
5712 var843 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
5713 if (likely(varonce844!=NULL)) {
5714 var845 = varonce844;
5715 } else {
5716 var846 = "NEW_";
5717 var847 = core__flat___NativeString___to_s_full(var846, 4l, 4l);
5718 var845 = var847;
5719 varonce844 = var845;
5720 }
5721 ((struct instance_core__NativeArray*)var843)->values[0]=var845;
5722 } else {
5723 var843 = varonce842;
5724 varonce842 = NULL;
5725 }
5726 ((struct instance_core__NativeArray*)var843)->values[1]=var_c_name;
5727 {
5728 var848 = ((val*(*)(val* self))(var843->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var843); /* native_to_s on <var843:NativeArray[String]>*/
5729 }
5730 varonce842 = var843;
5731 if (unlikely(varonce849==NULL)) {
5732 var850 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
5733 if (likely(varonce851!=NULL)) {
5734 var852 = varonce851;
5735 } else {
5736 var853 = " NEW_";
5737 var854 = core__flat___NativeString___to_s_full(var853, 5l, 5l);
5738 var852 = var854;
5739 varonce851 = var852;
5740 }
5741 ((struct instance_core__NativeArray*)var850)->values[1]=var852;
5742 if (likely(varonce855!=NULL)) {
5743 var856 = varonce855;
5744 } else {
5745 var857 = "();";
5746 var858 = core__flat___NativeString___to_s_full(var857, 3l, 3l);
5747 var856 = var858;
5748 varonce855 = var856;
5749 }
5750 ((struct instance_core__NativeArray*)var850)->values[3]=var856;
5751 } else {
5752 var850 = varonce849;
5753 varonce849 = NULL;
5754 }
5755 {
5756 var859 = nitc__abstract_compiler___MClassType___MType__ctype(var_mtype);
5757 }
5758 ((struct instance_core__NativeArray*)var850)->values[0]=var859;
5759 ((struct instance_core__NativeArray*)var850)->values[2]=var_c_name;
5760 {
5761 var860 = ((val*(*)(val* self))(var850->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var850); /* native_to_s on <var850:NativeArray[String]>*/
5762 }
5763 varonce849 = var850;
5764 {
5765 nitc___nitc__AbstractCompiler___provide_declaration(self, var848, var860); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
5766 }
5767 if (unlikely(varonce861==NULL)) {
5768 var862 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
5769 if (likely(varonce863!=NULL)) {
5770 var864 = varonce863;
5771 } else {
5772 var865 = "/* allocate ";
5773 var866 = core__flat___NativeString___to_s_full(var865, 12l, 12l);
5774 var864 = var866;
5775 varonce863 = var864;
5776 }
5777 ((struct instance_core__NativeArray*)var862)->values[0]=var864;
5778 if (likely(varonce867!=NULL)) {
5779 var868 = varonce867;
5780 } else {
5781 var869 = " */";
5782 var870 = core__flat___NativeString___to_s_full(var869, 3l, 3l);
5783 var868 = var870;
5784 varonce867 = var868;
5785 }
5786 ((struct instance_core__NativeArray*)var862)->values[2]=var868;
5787 } else {
5788 var862 = varonce861;
5789 varonce861 = NULL;
5790 }
5791 {
5792 var871 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mtype); /* to_s on <var_mtype:MClassType>*/
5793 }
5794 ((struct instance_core__NativeArray*)var862)->values[1]=var871;
5795 {
5796 var872 = ((val*(*)(val* self))(var862->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var862); /* native_to_s on <var862:NativeArray[String]>*/
5797 }
5798 varonce861 = var862;
5799 {
5800 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var872); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5801 }
5802 if (unlikely(varonce873==NULL)) {
5803 var874 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
5804 if (likely(varonce875!=NULL)) {
5805 var876 = varonce875;
5806 } else {
5807 var877 = " NEW_";
5808 var878 = core__flat___NativeString___to_s_full(var877, 5l, 5l);
5809 var876 = var878;
5810 varonce875 = var876;
5811 }
5812 ((struct instance_core__NativeArray*)var874)->values[1]=var876;
5813 if (likely(varonce879!=NULL)) {
5814 var880 = varonce879;
5815 } else {
5816 var881 = "() {";
5817 var882 = core__flat___NativeString___to_s_full(var881, 4l, 4l);
5818 var880 = var882;
5819 varonce879 = var880;
5820 }
5821 ((struct instance_core__NativeArray*)var874)->values[3]=var880;
5822 } else {
5823 var874 = varonce873;
5824 varonce873 = NULL;
5825 }
5826 {
5827 var883 = nitc__abstract_compiler___MClassType___MType__ctype(var_mtype);
5828 }
5829 ((struct instance_core__NativeArray*)var874)->values[0]=var883;
5830 ((struct instance_core__NativeArray*)var874)->values[2]=var_c_name;
5831 {
5832 var884 = ((val*(*)(val* self))(var874->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var874); /* native_to_s on <var874:NativeArray[String]>*/
5833 }
5834 varonce873 = var874;
5835 {
5836 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var884); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
5837 }
5838 if (var_is_dead){
5839 if (unlikely(varonce885==NULL)) {
5840 var886 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
5841 if (likely(varonce887!=NULL)) {
5842 var888 = varonce887;
5843 } else {
5844 var889 = " is DEAD";
5845 var890 = core__flat___NativeString___to_s_full(var889, 8l, 8l);
5846 var888 = var890;
5847 varonce887 = var888;
5848 }
5849 ((struct instance_core__NativeArray*)var886)->values[1]=var888;
5850 } else {
5851 var886 = varonce885;
5852 varonce885 = NULL;
5853 }
5854 {
5855 var891 = ((val*(*)(val* self))(var_mclass->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mclass); /* to_s on <var_mclass:MClass>*/
5856 }
5857 ((struct instance_core__NativeArray*)var886)->values[0]=var891;
5858 {
5859 var892 = ((val*(*)(val* self))(var886->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var886); /* native_to_s on <var886:NativeArray[String]>*/
5860 }
5861 varonce885 = var886;
5862 {
5863 nitc___nitc__AbstractCompilerVisitor___add_abort(var_v, var892); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <var_v:SeparateCompilerVisitor>*/
5864 }
5865 } else {
5866 if (likely(varonce893!=NULL)) {
5867 var894 = varonce893;
5868 } else {
5869 var895 = "self";
5870 var896 = core__flat___NativeString___to_s_full(var895, 4l, 4l);
5871 var894 = var896;
5872 varonce893 = var894;
5873 }
5874 {
5875 var897 = nitc___nitc__AbstractCompilerVisitor___new_named_var(var_v, var_mtype, var894);
5876 }
5877 var_res898 = var897;
5878 {
5879 { /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res898,1) on <var_res898:RuntimeVariable> */
5880 var_res898->attrs[COLOR_nitc__abstract_compiler__RuntimeVariable___is_exact].s = 1; /* _is_exact on <var_res898:RuntimeVariable> */
5881 RET_LABEL899:(void)0;
5882 }
5883 }
5884 if (unlikely(varonce900==NULL)) {
5885 var901 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
5886 if (likely(varonce902!=NULL)) {
5887 var903 = varonce902;
5888 } else {
5889 var904 = " = nit_alloc(sizeof(struct instance_";
5890 var905 = core__flat___NativeString___to_s_full(var904, 36l, 36l);
5891 var903 = var905;
5892 varonce902 = var903;
5893 }
5894 ((struct instance_core__NativeArray*)var901)->values[1]=var903;
5895 if (likely(varonce906!=NULL)) {
5896 var907 = varonce906;
5897 } else {
5898 var908 = "));";
5899 var909 = core__flat___NativeString___to_s_full(var908, 3l, 3l);
5900 var907 = var909;
5901 varonce906 = var907;
5902 }
5903 ((struct instance_core__NativeArray*)var901)->values[3]=var907;
5904 } else {
5905 var901 = varonce900;
5906 varonce900 = NULL;
5907 }
5908 {
5909 var910 = ((val*(*)(val* self))(var_res898->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res898); /* to_s on <var_res898:RuntimeVariable>*/
5910 }
5911 ((struct instance_core__NativeArray*)var901)->values[0]=var910;
5912 {
5913 var911 = ((val*(*)(val* self))(var_pointer_type->class->vft[COLOR_nitc__model_base__MEntity__c_name]))(var_pointer_type); /* c_name on <var_pointer_type:MClassType>*/
5914 }
5915 ((struct instance_core__NativeArray*)var901)->values[2]=var911;
5916 {
5917 var912 = ((val*(*)(val* self))(var901->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var901); /* native_to_s on <var901:NativeArray[String]>*/
5918 }
5919 varonce900 = var901;
5920 {
5921 nitc___nitc__AbstractCompilerVisitor___add(var_v, var912); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5922 }
5923 if (unlikely(varonce913==NULL)) {
5924 var914 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
5925 if (likely(varonce915!=NULL)) {
5926 var916 = varonce915;
5927 } else {
5928 var917 = "class_";
5929 var918 = core__flat___NativeString___to_s_full(var917, 6l, 6l);
5930 var916 = var918;
5931 varonce915 = var916;
5932 }
5933 ((struct instance_core__NativeArray*)var914)->values[0]=var916;
5934 } else {
5935 var914 = varonce913;
5936 varonce913 = NULL;
5937 }
5938 ((struct instance_core__NativeArray*)var914)->values[1]=var_c_name;
5939 {
5940 var919 = ((val*(*)(val* self))(var914->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var914); /* native_to_s on <var914:NativeArray[String]>*/
5941 }
5942 varonce913 = var914;
5943 {
5944 nitc___nitc__AbstractCompilerVisitor___require_declaration(var_v, var919); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
5945 }
5946 if (unlikely(varonce920==NULL)) {
5947 var921 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
5948 if (likely(varonce922!=NULL)) {
5949 var923 = varonce922;
5950 } else {
5951 var924 = "->class = &class_";
5952 var925 = core__flat___NativeString___to_s_full(var924, 17l, 17l);
5953 var923 = var925;
5954 varonce922 = var923;
5955 }
5956 ((struct instance_core__NativeArray*)var921)->values[1]=var923;
5957 if (likely(varonce926!=NULL)) {
5958 var927 = varonce926;
5959 } else {
5960 var928 = ";";
5961 var929 = core__flat___NativeString___to_s_full(var928, 1l, 1l);
5962 var927 = var929;
5963 varonce926 = var927;
5964 }
5965 ((struct instance_core__NativeArray*)var921)->values[3]=var927;
5966 } else {
5967 var921 = varonce920;
5968 varonce920 = NULL;
5969 }
5970 {
5971 var930 = ((val*(*)(val* self))(var_res898->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res898); /* to_s on <var_res898:RuntimeVariable>*/
5972 }
5973 ((struct instance_core__NativeArray*)var921)->values[0]=var930;
5974 ((struct instance_core__NativeArray*)var921)->values[2]=var_c_name;
5975 {
5976 var931 = ((val*(*)(val* self))(var921->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var921); /* native_to_s on <var921:NativeArray[String]>*/
5977 }
5978 varonce920 = var921;
5979 {
5980 nitc___nitc__AbstractCompilerVisitor___add(var_v, var931); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
5981 }
5982 if (unlikely(varonce932==NULL)) {
5983 var933 = NEW_core__NativeArray(5l, &type_core__NativeArray__core__String);
5984 if (likely(varonce934!=NULL)) {
5985 var935 = varonce934;
5986 } else {
5987 var936 = "((struct instance_";
5988 var937 = core__flat___NativeString___to_s_full(var936, 18l, 18l);
5989 var935 = var937;
5990 varonce934 = var935;
5991 }
5992 ((struct instance_core__NativeArray*)var933)->values[0]=var935;
5993 if (likely(varonce938!=NULL)) {
5994 var939 = varonce938;
5995 } else {
5996 var940 = "*)";
5997 var941 = core__flat___NativeString___to_s_full(var940, 2l, 2l);
5998 var939 = var941;
5999 varonce938 = var939;
6000 }
6001 ((struct instance_core__NativeArray*)var933)->values[2]=var939;
6002 if (likely(varonce942!=NULL)) {
6003 var943 = varonce942;
6004 } else {
6005 var944 = ")->value = NULL;";
6006 var945 = core__flat___NativeString___to_s_full(var944, 16l, 16l);
6007 var943 = var945;
6008 varonce942 = var943;
6009 }
6010 ((struct instance_core__NativeArray*)var933)->values[4]=var943;
6011 } else {
6012 var933 = varonce932;
6013 varonce932 = NULL;
6014 }
6015 {
6016 var946 = ((val*(*)(val* self))(var_pointer_type->class->vft[COLOR_nitc__model_base__MEntity__c_name]))(var_pointer_type); /* c_name on <var_pointer_type:MClassType>*/
6017 }
6018 ((struct instance_core__NativeArray*)var933)->values[1]=var946;
6019 {
6020 var947 = ((val*(*)(val* self))(var_res898->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res898); /* to_s on <var_res898:RuntimeVariable>*/
6021 }
6022 ((struct instance_core__NativeArray*)var933)->values[3]=var947;
6023 {
6024 var948 = ((val*(*)(val* self))(var933->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var933); /* native_to_s on <var933:NativeArray[String]>*/
6025 }
6026 varonce932 = var933;
6027 {
6028 nitc___nitc__AbstractCompilerVisitor___add(var_v, var948); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6029 }
6030 if (unlikely(varonce949==NULL)) {
6031 var950 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
6032 if (likely(varonce951!=NULL)) {
6033 var952 = varonce951;
6034 } else {
6035 var953 = "return ";
6036 var954 = core__flat___NativeString___to_s_full(var953, 7l, 7l);
6037 var952 = var954;
6038 varonce951 = var952;
6039 }
6040 ((struct instance_core__NativeArray*)var950)->values[0]=var952;
6041 if (likely(varonce955!=NULL)) {
6042 var956 = varonce955;
6043 } else {
6044 var957 = ";";
6045 var958 = core__flat___NativeString___to_s_full(var957, 1l, 1l);
6046 var956 = var958;
6047 varonce955 = var956;
6048 }
6049 ((struct instance_core__NativeArray*)var950)->values[2]=var956;
6050 } else {
6051 var950 = varonce949;
6052 varonce949 = NULL;
6053 }
6054 {
6055 var959 = ((val*(*)(val* self))(var_res898->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res898); /* to_s on <var_res898:RuntimeVariable>*/
6056 }
6057 ((struct instance_core__NativeArray*)var950)->values[1]=var959;
6058 {
6059 var960 = ((val*(*)(val* self))(var950->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var950); /* native_to_s on <var950:NativeArray[String]>*/
6060 }
6061 varonce949 = var950;
6062 {
6063 nitc___nitc__AbstractCompilerVisitor___add(var_v, var960); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6064 }
6065 }
6066 if (likely(varonce961!=NULL)) {
6067 var962 = varonce961;
6068 } else {
6069 var963 = "}";
6070 var964 = core__flat___NativeString___to_s_full(var963, 1l, 1l);
6071 var962 = var964;
6072 varonce961 = var962;
6073 }
6074 {
6075 nitc___nitc__AbstractCompilerVisitor___add(var_v, var962); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6076 }
6077 goto RET_LABEL;
6078 } else {
6079 }
6080 }
6081 }
6082 if (unlikely(varonce965==NULL)) {
6083 var966 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
6084 if (likely(varonce967!=NULL)) {
6085 var968 = varonce967;
6086 } else {
6087 var969 = "NEW_";
6088 var970 = core__flat___NativeString___to_s_full(var969, 4l, 4l);
6089 var968 = var970;
6090 varonce967 = var968;
6091 }
6092 ((struct instance_core__NativeArray*)var966)->values[0]=var968;
6093 } else {
6094 var966 = varonce965;
6095 varonce965 = NULL;
6096 }
6097 ((struct instance_core__NativeArray*)var966)->values[1]=var_c_name;
6098 {
6099 var971 = ((val*(*)(val* self))(var966->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var966); /* native_to_s on <var966:NativeArray[String]>*/
6100 }
6101 varonce965 = var966;
6102 if (unlikely(varonce972==NULL)) {
6103 var973 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
6104 if (likely(varonce974!=NULL)) {
6105 var975 = varonce974;
6106 } else {
6107 var976 = " NEW_";
6108 var977 = core__flat___NativeString___to_s_full(var976, 5l, 5l);
6109 var975 = var977;
6110 varonce974 = var975;
6111 }
6112 ((struct instance_core__NativeArray*)var973)->values[1]=var975;
6113 if (likely(varonce978!=NULL)) {
6114 var979 = varonce978;
6115 } else {
6116 var980 = "(void);";
6117 var981 = core__flat___NativeString___to_s_full(var980, 7l, 7l);
6118 var979 = var981;
6119 varonce978 = var979;
6120 }
6121 ((struct instance_core__NativeArray*)var973)->values[3]=var979;
6122 } else {
6123 var973 = varonce972;
6124 varonce972 = NULL;
6125 }
6126 {
6127 var982 = nitc__abstract_compiler___MClassType___MType__ctype(var_mtype);
6128 }
6129 ((struct instance_core__NativeArray*)var973)->values[0]=var982;
6130 ((struct instance_core__NativeArray*)var973)->values[2]=var_c_name;
6131 {
6132 var983 = ((val*(*)(val* self))(var973->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var973); /* native_to_s on <var973:NativeArray[String]>*/
6133 }
6134 varonce972 = var973;
6135 {
6136 nitc___nitc__AbstractCompiler___provide_declaration(self, var971, var983); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
6137 }
6138 if (unlikely(varonce984==NULL)) {
6139 var985 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
6140 if (likely(varonce986!=NULL)) {
6141 var987 = varonce986;
6142 } else {
6143 var988 = "/* allocate ";
6144 var989 = core__flat___NativeString___to_s_full(var988, 12l, 12l);
6145 var987 = var989;
6146 varonce986 = var987;
6147 }
6148 ((struct instance_core__NativeArray*)var985)->values[0]=var987;
6149 if (likely(varonce990!=NULL)) {
6150 var991 = varonce990;
6151 } else {
6152 var992 = " */";
6153 var993 = core__flat___NativeString___to_s_full(var992, 3l, 3l);
6154 var991 = var993;
6155 varonce990 = var991;
6156 }
6157 ((struct instance_core__NativeArray*)var985)->values[2]=var991;
6158 } else {
6159 var985 = varonce984;
6160 varonce984 = NULL;
6161 }
6162 {
6163 var994 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mtype); /* to_s on <var_mtype:MClassType>*/
6164 }
6165 ((struct instance_core__NativeArray*)var985)->values[1]=var994;
6166 {
6167 var995 = ((val*(*)(val* self))(var985->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var985); /* native_to_s on <var985:NativeArray[String]>*/
6168 }
6169 varonce984 = var985;
6170 {
6171 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var995); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6172 }
6173 if (unlikely(varonce996==NULL)) {
6174 var997 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
6175 if (likely(varonce998!=NULL)) {
6176 var999 = varonce998;
6177 } else {
6178 var1000 = " NEW_";
6179 var1001 = core__flat___NativeString___to_s_full(var1000, 5l, 5l);
6180 var999 = var1001;
6181 varonce998 = var999;
6182 }
6183 ((struct instance_core__NativeArray*)var997)->values[1]=var999;
6184 if (likely(varonce1002!=NULL)) {
6185 var1003 = varonce1002;
6186 } else {
6187 var1004 = "(void) {";
6188 var1005 = core__flat___NativeString___to_s_full(var1004, 8l, 8l);
6189 var1003 = var1005;
6190 varonce1002 = var1003;
6191 }
6192 ((struct instance_core__NativeArray*)var997)->values[3]=var1003;
6193 } else {
6194 var997 = varonce996;
6195 varonce996 = NULL;
6196 }
6197 {
6198 var1006 = nitc__abstract_compiler___MClassType___MType__ctype(var_mtype);
6199 }
6200 ((struct instance_core__NativeArray*)var997)->values[0]=var1006;
6201 ((struct instance_core__NativeArray*)var997)->values[2]=var_c_name;
6202 {
6203 var1007 = ((val*(*)(val* self))(var997->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var997); /* native_to_s on <var997:NativeArray[String]>*/
6204 }
6205 varonce996 = var997;
6206 {
6207 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var1007); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6208 }
6209 if (var_is_dead){
6210 if (unlikely(varonce1008==NULL)) {
6211 var1009 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
6212 if (likely(varonce1010!=NULL)) {
6213 var1011 = varonce1010;
6214 } else {
6215 var1012 = " is DEAD";
6216 var1013 = core__flat___NativeString___to_s_full(var1012, 8l, 8l);
6217 var1011 = var1013;
6218 varonce1010 = var1011;
6219 }
6220 ((struct instance_core__NativeArray*)var1009)->values[1]=var1011;
6221 } else {
6222 var1009 = varonce1008;
6223 varonce1008 = NULL;
6224 }
6225 {
6226 var1014 = ((val*(*)(val* self))(var_mclass->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mclass); /* to_s on <var_mclass:MClass>*/
6227 }
6228 ((struct instance_core__NativeArray*)var1009)->values[0]=var1014;
6229 {
6230 var1015 = ((val*(*)(val* self))(var1009->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1009); /* native_to_s on <var1009:NativeArray[String]>*/
6231 }
6232 varonce1008 = var1009;
6233 {
6234 nitc___nitc__AbstractCompilerVisitor___add_abort(var_v, var1015); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <var_v:SeparateCompilerVisitor>*/
6235 }
6236 } else {
6237 if (likely(varonce1016!=NULL)) {
6238 var1017 = varonce1016;
6239 } else {
6240 var1018 = "self";
6241 var1019 = core__flat___NativeString___to_s_full(var1018, 4l, 4l);
6242 var1017 = var1019;
6243 varonce1016 = var1017;
6244 }
6245 {
6246 var1020 = nitc___nitc__AbstractCompilerVisitor___new_named_var(var_v, var_mtype, var1017);
6247 }
6248 var_res1021 = var1020;
6249 {
6250 { /* Inline abstract_compiler#RuntimeVariable#is_exact= (var_res1021,1) on <var_res1021:RuntimeVariable> */
6251 var_res1021->attrs[COLOR_nitc__abstract_compiler__RuntimeVariable___is_exact].s = 1; /* _is_exact on <var_res1021:RuntimeVariable> */
6252 RET_LABEL1022:(void)0;
6253 }
6254 }
6255 {
6256 { /* Inline separate_compiler#SeparateCompiler#attr_tables (self) on <self:SeparateErasureCompiler> */
6257 var1025 = self->attrs[COLOR_nitc__separate_compiler__SeparateCompiler___attr_tables].val; /* _attr_tables on <self:SeparateErasureCompiler> */
6258 if (unlikely(var1025 == NULL)) {
6259 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_tables");
6260 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_compiler, 1068);
6261 fatal_exit(1);
6262 }
6263 var1023 = var1025;
6264 RET_LABEL1024:(void)0;
6265 }
6266 }
6267 {
6268 var1026 = ((val*(*)(val* self, val* p0))((((long)var1023&3)?class_info[((long)var1023&3)]:var1023->class)->vft[COLOR_core__abstract_collection__MapRead__get_or_null]))(var1023, var_mclass); /* get_or_null on <var1023:Map[MClass, Array[nullable MProperty]]>*/
6269 }
6270 var_attrs = var1026;
6271 if (var_attrs == NULL) {
6272 var1027 = 1; /* is null */
6273 } else {
6274 var1027 = 0; /* arg is null but recv is not */
6275 }
6276 if (0) {
6277 var1028 = core___core__Array___core__kernel__Object___61d_61d(var_attrs, ((val*)NULL));
6278 var1027 = var1028;
6279 }
6280 if (var1027){
6281 if (unlikely(varonce1029==NULL)) {
6282 var1030 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
6283 if (likely(varonce1031!=NULL)) {
6284 var1032 = varonce1031;
6285 } else {
6286 var1033 = " = nit_alloc(sizeof(struct instance));";
6287 var1034 = core__flat___NativeString___to_s_full(var1033, 38l, 38l);
6288 var1032 = var1034;
6289 varonce1031 = var1032;
6290 }
6291 ((struct instance_core__NativeArray*)var1030)->values[1]=var1032;
6292 } else {
6293 var1030 = varonce1029;
6294 varonce1029 = NULL;
6295 }
6296 {
6297 var1035 = ((val*(*)(val* self))(var_res1021->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res1021); /* to_s on <var_res1021:RuntimeVariable>*/
6298 }
6299 ((struct instance_core__NativeArray*)var1030)->values[0]=var1035;
6300 {
6301 var1036 = ((val*(*)(val* self))(var1030->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1030); /* native_to_s on <var1030:NativeArray[String]>*/
6302 }
6303 varonce1029 = var1030;
6304 {
6305 nitc___nitc__AbstractCompilerVisitor___add(var_v, var1036); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6306 }
6307 } else {
6308 if (unlikely(varonce1037==NULL)) {
6309 var1038 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
6310 if (likely(varonce1039!=NULL)) {
6311 var1040 = varonce1039;
6312 } else {
6313 var1041 = " = nit_alloc(sizeof(struct instance) + ";
6314 var1042 = core__flat___NativeString___to_s_full(var1041, 39l, 39l);
6315 var1040 = var1042;
6316 varonce1039 = var1040;
6317 }
6318 ((struct instance_core__NativeArray*)var1038)->values[1]=var1040;
6319 if (likely(varonce1043!=NULL)) {
6320 var1044 = varonce1043;
6321 } else {
6322 var1045 = "*sizeof(nitattribute_t));";
6323 var1046 = core__flat___NativeString___to_s_full(var1045, 25l, 25l);
6324 var1044 = var1046;
6325 varonce1043 = var1044;
6326 }
6327 ((struct instance_core__NativeArray*)var1038)->values[3]=var1044;
6328 } else {
6329 var1038 = varonce1037;
6330 varonce1037 = NULL;
6331 }
6332 {
6333 var1047 = ((val*(*)(val* self))(var_res1021->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res1021); /* to_s on <var_res1021:RuntimeVariable>*/
6334 }
6335 ((struct instance_core__NativeArray*)var1038)->values[0]=var1047;
6336 {
6337 { /* Inline array#AbstractArrayRead#length (var_attrs) on <var_attrs:nullable Array[nullable MProperty](Array[nullable MProperty])> */
6338 var1050 = var_attrs->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_attrs:nullable Array[nullable MProperty](Array[nullable MProperty])> */
6339 var1048 = var1050;
6340 RET_LABEL1049:(void)0;
6341 }
6342 }
6343 var1051 = core__flat___Int___core__abstract_text__Object__to_s(var1048);
6344 ((struct instance_core__NativeArray*)var1038)->values[2]=var1051;
6345 {
6346 var1052 = ((val*(*)(val* self))(var1038->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1038); /* native_to_s on <var1038:NativeArray[String]>*/
6347 }
6348 varonce1037 = var1038;
6349 {
6350 nitc___nitc__AbstractCompilerVisitor___add(var_v, var1052); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6351 }
6352 }
6353 if (unlikely(varonce1053==NULL)) {
6354 var1054 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
6355 if (likely(varonce1055!=NULL)) {
6356 var1056 = varonce1055;
6357 } else {
6358 var1057 = "class_";
6359 var1058 = core__flat___NativeString___to_s_full(var1057, 6l, 6l);
6360 var1056 = var1058;
6361 varonce1055 = var1056;
6362 }
6363 ((struct instance_core__NativeArray*)var1054)->values[0]=var1056;
6364 } else {
6365 var1054 = varonce1053;
6366 varonce1053 = NULL;
6367 }
6368 ((struct instance_core__NativeArray*)var1054)->values[1]=var_c_name;
6369 {
6370 var1059 = ((val*(*)(val* self))(var1054->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1054); /* native_to_s on <var1054:NativeArray[String]>*/
6371 }
6372 varonce1053 = var1054;
6373 {
6374 nitc___nitc__AbstractCompilerVisitor___require_declaration(var_v, var1059); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
6375 }
6376 if (unlikely(varonce1060==NULL)) {
6377 var1061 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
6378 if (likely(varonce1062!=NULL)) {
6379 var1063 = varonce1062;
6380 } else {
6381 var1064 = "->class = &class_";
6382 var1065 = core__flat___NativeString___to_s_full(var1064, 17l, 17l);
6383 var1063 = var1065;
6384 varonce1062 = var1063;
6385 }
6386 ((struct instance_core__NativeArray*)var1061)->values[1]=var1063;
6387 if (likely(varonce1066!=NULL)) {
6388 var1067 = varonce1066;
6389 } else {
6390 var1068 = ";";
6391 var1069 = core__flat___NativeString___to_s_full(var1068, 1l, 1l);
6392 var1067 = var1069;
6393 varonce1066 = var1067;
6394 }
6395 ((struct instance_core__NativeArray*)var1061)->values[3]=var1067;
6396 } else {
6397 var1061 = varonce1060;
6398 varonce1060 = NULL;
6399 }
6400 {
6401 var1070 = ((val*(*)(val* self))(var_res1021->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res1021); /* to_s on <var_res1021:RuntimeVariable>*/
6402 }
6403 ((struct instance_core__NativeArray*)var1061)->values[0]=var1070;
6404 ((struct instance_core__NativeArray*)var1061)->values[2]=var_c_name;
6405 {
6406 var1071 = ((val*(*)(val* self))(var1061->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1061); /* native_to_s on <var1061:NativeArray[String]>*/
6407 }
6408 varonce1060 = var1061;
6409 {
6410 nitc___nitc__AbstractCompilerVisitor___add(var_v, var1071); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6411 }
6412 if (var_attrs == NULL) {
6413 var1072 = 0; /* is null */
6414 } else {
6415 var1072 = 1; /* arg is null and recv is not */
6416 }
6417 if (0) {
6418 { /* Inline kernel#Object#!= (var_attrs,((val*)NULL)) on <var_attrs:nullable Array[nullable MProperty]> */
6419 var_other = ((val*)NULL);
6420 {
6421 var1075 = ((short int(*)(val* self, val* p0))(var_attrs->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_attrs, var_other); /* == on <var_attrs:nullable Array[nullable MProperty](Array[nullable MProperty])>*/
6422 }
6423 var1076 = !var1075;
6424 var1073 = var1076;
6425 goto RET_LABEL1074;
6426 RET_LABEL1074:(void)0;
6427 }
6428 var1072 = var1073;
6429 }
6430 if (var1072){
6431 {
6432 nitc___nitc__AbstractCompiler___generate_init_attr(self, var_v, var_res1021, var_mtype); /* Direct call abstract_compiler#AbstractCompiler#generate_init_attr on <self:SeparateErasureCompiler>*/
6433 }
6434 {
6435 nitc___nitc__AbstractCompilerVisitor___set_finalizer(var_v, var_res1021); /* Direct call abstract_compiler#AbstractCompilerVisitor#set_finalizer on <var_v:SeparateCompilerVisitor>*/
6436 }
6437 } else {
6438 }
6439 if (unlikely(varonce1077==NULL)) {
6440 var1078 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
6441 if (likely(varonce1079!=NULL)) {
6442 var1080 = varonce1079;
6443 } else {
6444 var1081 = "return ";
6445 var1082 = core__flat___NativeString___to_s_full(var1081, 7l, 7l);
6446 var1080 = var1082;
6447 varonce1079 = var1080;
6448 }
6449 ((struct instance_core__NativeArray*)var1078)->values[0]=var1080;
6450 if (likely(varonce1083!=NULL)) {
6451 var1084 = varonce1083;
6452 } else {
6453 var1085 = ";";
6454 var1086 = core__flat___NativeString___to_s_full(var1085, 1l, 1l);
6455 var1084 = var1086;
6456 varonce1083 = var1084;
6457 }
6458 ((struct instance_core__NativeArray*)var1078)->values[2]=var1084;
6459 } else {
6460 var1078 = varonce1077;
6461 varonce1077 = NULL;
6462 }
6463 {
6464 var1087 = ((val*(*)(val* self))(var_res1021->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res1021); /* to_s on <var_res1021:RuntimeVariable>*/
6465 }
6466 ((struct instance_core__NativeArray*)var1078)->values[1]=var1087;
6467 {
6468 var1088 = ((val*(*)(val* self))(var1078->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1078); /* native_to_s on <var1078:NativeArray[String]>*/
6469 }
6470 varonce1077 = var1078;
6471 {
6472 nitc___nitc__AbstractCompilerVisitor___add(var_v, var1088); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6473 }
6474 }
6475 if (likely(varonce1089!=NULL)) {
6476 var1090 = varonce1089;
6477 } else {
6478 var1091 = "}";
6479 var1092 = core__flat___NativeString___to_s_full(var1091, 1l, 1l);
6480 var1090 = var1092;
6481 varonce1089 = var1090;
6482 }
6483 {
6484 nitc___nitc__AbstractCompilerVisitor___add(var_v, var1090); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <var_v:SeparateCompilerVisitor>*/
6485 }
6486 RET_LABEL:;
6487 }
6488 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: SeparateErasureCompiler, MClass): Bool */
6489 short int nitc___nitc__SeparateErasureCompiler___build_class_vts_table(val* self, val* p0) {
6490 short int var /* : Bool */;
6491 val* var_mclass /* var mclass: MClass */;
6492 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
6493 val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
6494 val* var4 /* : nullable Object */;
6495 short int var5 /* : Bool */;
6496 val* var6 /* : NativeArray[String] */;
6497 static val* varonce;
6498 static val* varonce7;
6499 val* var8 /* : String */;
6500 char* var9 /* : NativeString */;
6501 val* var10 /* : String */;
6502 val* var11 /* : String */;
6503 val* var12 /* : String */;
6504 val* var14 /* : NativeArray[String] */;
6505 static val* varonce13;
6506 static val* varonce15;
6507 val* var16 /* : String */;
6508 char* var17 /* : NativeString */;
6509 val* var18 /* : String */;
6510 static val* varonce19;
6511 val* var20 /* : String */;
6512 char* var21 /* : NativeString */;
6513 val* var22 /* : String */;
6514 val* var23 /* : String */;
6515 val* var24 /* : String */;
6516 val* var25 /* : SeparateCompilerVisitor */;
6517 val* var_v /* var v: SeparateCompilerVisitor */;
6518 val* var27 /* : NativeArray[String] */;
6519 static val* varonce26;
6520 static val* varonce28;
6521 val* var29 /* : String */;
6522 char* var30 /* : NativeString */;
6523 val* var31 /* : String */;
6524 static val* varonce32;
6525 val* var33 /* : String */;
6526 char* var34 /* : NativeString */;
6527 val* var35 /* : String */;
6528 val* var36 /* : String */;
6529 val* var37 /* : String */;
6530 static val* varonce38;
6531 val* var39 /* : String */;
6532 char* var40 /* : NativeString */;
6533 val* var41 /* : String */;
6534 static val* varonce42;
6535 val* var43 /* : String */;
6536 char* var44 /* : NativeString */;
6537 val* var45 /* : String */;
6538 val* var46 /* : Map[MClass, Array[nullable MPropDef]] */;
6539 val* var48 /* : Map[MClass, Array[nullable MPropDef]] */;
6540 val* var49 /* : nullable Object */;
6541 val* var_ /* var : Array[nullable MPropDef] */;
6542 val* var50 /* : IndexedIterator[nullable Object] */;
6543 val* var_51 /* var : IndexedIterator[nullable MPropDef] */;
6544 short int var52 /* : Bool */;
6545 val* var53 /* : nullable Object */;
6546 val* var_vt /* var vt: nullable MPropDef */;
6547 short int var54 /* : Bool */;
6548 short int var55 /* : Bool */;
6549 val* var_other /* var other: nullable Object */;
6550 short int var57 /* : Bool */;
6551 short int var59 /* : Bool */;
6552 static val* varonce60;
6553 val* var61 /* : String */;
6554 char* var62 /* : NativeString */;
6555 val* var63 /* : String */;
6556 long var_is_null /* var is_null: Int */;
6557 val* var64 /* : MClassDef */;
6558 val* var66 /* : MClassDef */;
6559 val* var67 /* : MClassType */;
6560 val* var69 /* : MClassType */;
6561 short int var70 /* : Bool */;
6562 int cltype;
6563 int idtype;
6564 const char* var_class_name;
6565 val* var71 /* : nullable MType */;
6566 val* var73 /* : nullable MType */;
6567 val* var74 /* : MType */;
6568 val* var_bound /* var bound: MType */;
6569 short int var75 /* : Bool */;
6570 int cltype76;
6571 int idtype77;
6572 val* var78 /* : MClassDef */;
6573 val* var80 /* : MClassDef */;
6574 val* var81 /* : MClassType */;
6575 val* var83 /* : MClassType */;
6576 val* var84 /* : MType */;
6577 val* var86 /* : MType */;
6578 val* var87 /* : MType */;
6579 short int var89 /* : Bool */;
6580 int cltype90;
6581 int idtype91;
6582 const char* var_class_name92;
6583 val* var93 /* : MClass */;
6584 val* var95 /* : MClass */;
6585 val* var_vtclass /* var vtclass: MClass */;
6586 val* var97 /* : NativeArray[String] */;
6587 static val* varonce96;
6588 static val* varonce98;
6589 val* var99 /* : String */;
6590 char* var100 /* : NativeString */;
6591 val* var101 /* : String */;
6592 val* var102 /* : String */;
6593 val* var103 /* : String */;
6594 val* var105 /* : NativeArray[String] */;
6595 static val* varonce104;
6596 static val* varonce106;
6597 val* var107 /* : String */;
6598 char* var108 /* : NativeString */;
6599 val* var109 /* : String */;
6600 static val* varonce110;
6601 val* var111 /* : String */;
6602 char* var112 /* : NativeString */;
6603 val* var113 /* : String */;
6604 static val* varonce114;
6605 val* var115 /* : String */;
6606 char* var116 /* : NativeString */;
6607 val* var117 /* : String */;
6608 static val* varonce118;
6609 val* var119 /* : String */;
6610 char* var120 /* : NativeString */;
6611 val* var121 /* : String */;
6612 val* var122 /* : String */;
6613 val* var123 /* : String */;
6614 val* var124 /* : String */;
6615 val* var125 /* : String */;
6616 static val* varonce126;
6617 val* var127 /* : String */;
6618 char* var128 /* : NativeString */;
6619 val* var129 /* : String */;
6620 static val* varonce130;
6621 val* var131 /* : String */;
6622 char* var132 /* : NativeString */;
6623 val* var133 /* : String */;
6624 var_mclass = p0;
6625 {
6626 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
6627 var3 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
6628 if (unlikely(var3 == NULL)) {
6629 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
6630 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 428);
6631 fatal_exit(1);
6632 }
6633 var1 = var3;
6634 RET_LABEL2:(void)0;
6635 }
6636 }
6637 {
6638 var4 = ((val*(*)(val* self, val* p0))((((long)var1&3)?class_info[((long)var1&3)]:var1->class)->vft[COLOR_core__abstract_collection__MapRead___91d_93d]))(var1, var_mclass); /* [] on <var1:Map[MClass, Array[nullable MPropDef]]>*/
6639 }
6640 {
6641 var5 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var4);
6642 }
6643 if (var5){
6644 var = 0;
6645 goto RET_LABEL;
6646 } else {
6647 }
6648 if (unlikely(varonce==NULL)) {
6649 var6 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
6650 if (likely(varonce7!=NULL)) {
6651 var8 = varonce7;
6652 } else {
6653 var9 = "vts_table_";
6654 var10 = core__flat___NativeString___to_s_full(var9, 10l, 10l);
6655 var8 = var10;
6656 varonce7 = var8;
6657 }
6658 ((struct instance_core__NativeArray*)var6)->values[0]=var8;
6659 } else {
6660 var6 = varonce;
6661 varonce = NULL;
6662 }
6663 {
6664 var11 = nitc___nitc__MClass___nitc__model_base__MEntity__c_name(var_mclass);
6665 }
6666 ((struct instance_core__NativeArray*)var6)->values[1]=var11;
6667 {
6668 var12 = ((val*(*)(val* self))(var6->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var6); /* native_to_s on <var6:NativeArray[String]>*/
6669 }
6670 varonce = var6;
6671 if (unlikely(varonce13==NULL)) {
6672 var14 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
6673 if (likely(varonce15!=NULL)) {
6674 var16 = varonce15;
6675 } else {
6676 var17 = "extern const struct vts_table vts_table_";
6677 var18 = core__flat___NativeString___to_s_full(var17, 40l, 40l);
6678 var16 = var18;
6679 varonce15 = var16;
6680 }
6681 ((struct instance_core__NativeArray*)var14)->values[0]=var16;
6682 if (likely(varonce19!=NULL)) {
6683 var20 = varonce19;
6684 } else {
6685 var21 = ";";
6686 var22 = core__flat___NativeString___to_s_full(var21, 1l, 1l);
6687 var20 = var22;
6688 varonce19 = var20;
6689 }
6690 ((struct instance_core__NativeArray*)var14)->values[2]=var20;
6691 } else {
6692 var14 = varonce13;
6693 varonce13 = NULL;
6694 }
6695 {
6696 var23 = nitc___nitc__MClass___nitc__model_base__MEntity__c_name(var_mclass);
6697 }
6698 ((struct instance_core__NativeArray*)var14)->values[1]=var23;
6699 {
6700 var24 = ((val*(*)(val* self))(var14->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var14); /* native_to_s on <var14:NativeArray[String]>*/
6701 }
6702 varonce13 = var14;
6703 {
6704 nitc___nitc__AbstractCompiler___provide_declaration(self, var12, var24); /* Direct call abstract_compiler#AbstractCompiler#provide_declaration on <self:SeparateErasureCompiler>*/
6705 }
6706 {
6707 var25 = nitc___nitc__SeparateErasureCompiler___nitc__abstract_compiler__AbstractCompiler__new_visitor(self);
6708 }
6709 var_v = var25;
6710 if (unlikely(varonce26==NULL)) {
6711 var27 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
6712 if (likely(varonce28!=NULL)) {
6713 var29 = varonce28;
6714 } else {
6715 var30 = "const struct vts_table vts_table_";
6716 var31 = core__flat___NativeString___to_s_full(var30, 33l, 33l);
6717 var29 = var31;
6718 varonce28 = var29;
6719 }
6720 ((struct instance_core__NativeArray*)var27)->values[0]=var29;
6721 if (likely(varonce32!=NULL)) {
6722 var33 = varonce32;
6723 } else {
6724 var34 = " = {";
6725 var35 = core__flat___NativeString___to_s_full(var34, 4l, 4l);
6726 var33 = var35;
6727 varonce32 = var33;
6728 }
6729 ((struct instance_core__NativeArray*)var27)->values[2]=var33;
6730 } else {
6731 var27 = varonce26;
6732 varonce26 = NULL;
6733 }
6734 {
6735 var36 = nitc___nitc__MClass___nitc__model_base__MEntity__c_name(var_mclass);
6736 }
6737 ((struct instance_core__NativeArray*)var27)->values[1]=var36;
6738 {
6739 var37 = ((val*(*)(val* self))(var27->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var27); /* native_to_s on <var27:NativeArray[String]>*/
6740 }
6741 varonce26 = var27;
6742 {
6743 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var37); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6744 }
6745 if (likely(varonce38!=NULL)) {
6746 var39 = varonce38;
6747 } else {
6748 var40 = "0, /* dummy */";
6749 var41 = core__flat___NativeString___to_s_full(var40, 14l, 14l);
6750 var39 = var41;
6751 varonce38 = var39;
6752 }
6753 {
6754 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var39); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6755 }
6756 if (likely(varonce42!=NULL)) {
6757 var43 = varonce42;
6758 } else {
6759 var44 = "{";
6760 var45 = core__flat___NativeString___to_s_full(var44, 1l, 1l);
6761 var43 = var45;
6762 varonce42 = var43;
6763 }
6764 {
6765 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var43); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6766 }
6767 {
6768 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
6769 var48 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
6770 if (unlikely(var48 == NULL)) {
6771 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
6772 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 428);
6773 fatal_exit(1);
6774 }
6775 var46 = var48;
6776 RET_LABEL47:(void)0;
6777 }
6778 }
6779 {
6780 var49 = ((val*(*)(val* self, val* p0))((((long)var46&3)?class_info[((long)var46&3)]:var46->class)->vft[COLOR_core__abstract_collection__MapRead___91d_93d]))(var46, var_mclass); /* [] on <var46:Map[MClass, Array[nullable MPropDef]]>*/
6781 }
6782 var_ = var49;
6783 {
6784 var50 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
6785 }
6786 var_51 = var50;
6787 for(;;) {
6788 {
6789 var52 = ((short int(*)(val* self))((((long)var_51&3)?class_info[((long)var_51&3)]:var_51->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_51); /* is_ok on <var_51:IndexedIterator[nullable MPropDef]>*/
6790 }
6791 if (var52){
6792 } else {
6793 goto BREAK_label;
6794 }
6795 {
6796 var53 = ((val*(*)(val* self))((((long)var_51&3)?class_info[((long)var_51&3)]:var_51->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_51); /* item on <var_51:IndexedIterator[nullable MPropDef]>*/
6797 }
6798 var_vt = var53;
6799 if (var_vt == NULL) {
6800 var54 = 1; /* is null */
6801 } else {
6802 var54 = 0; /* arg is null but recv is not */
6803 }
6804 if (0) {
6805 { /* Inline kernel#Object#== (var_vt,((val*)NULL)) on <var_vt:nullable MPropDef> */
6806 var_other = ((val*)NULL);
6807 {
6808 { /* Inline kernel#Object#is_same_instance (var_vt,var_other) on <var_vt:nullable MPropDef(MPropDef)> */
6809 var59 = var_vt == var_other;
6810 var57 = var59;
6811 goto RET_LABEL58;
6812 RET_LABEL58:(void)0;
6813 }
6814 }
6815 var55 = var57;
6816 goto RET_LABEL56;
6817 RET_LABEL56:(void)0;
6818 }
6819 var54 = var55;
6820 }
6821 if (var54){
6822 if (likely(varonce60!=NULL)) {
6823 var61 = varonce60;
6824 } else {
6825 var62 = "{-1, NULL}, /* empty */";
6826 var63 = core__flat___NativeString___to_s_full(var62, 23l, 23l);
6827 var61 = var63;
6828 varonce60 = var61;
6829 }
6830 {
6831 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var61); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
6832 }
6833 } else {
6834 var_is_null = 0l;
6835 {
6836 { /* Inline model#MClass#intro (var_mclass) on <var_mclass:MClass> */
6837 var66 = var_mclass->attrs[COLOR_nitc__model__MClass___intro].val; /* _intro on <var_mclass:MClass> */
6838 if (unlikely(var66 == NULL)) {
6839 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
6840 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 483);
6841 fatal_exit(1);
6842 }
6843 var64 = var66;
6844 RET_LABEL65:(void)0;
6845 }
6846 }
6847 {
6848 { /* Inline model#MClassDef#bound_mtype (var64) on <var64:MClassDef> */
6849 var69 = var64->attrs[COLOR_nitc__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var64:MClassDef> */
6850 if (unlikely(var69 == NULL)) {
6851 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
6852 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 579);
6853 fatal_exit(1);
6854 }
6855 var67 = var69;
6856 RET_LABEL68:(void)0;
6857 }
6858 }
6859 /* <var_vt:nullable MPropDef(MPropDef)> isa MVirtualTypeDef */
6860 cltype = type_nitc__MVirtualTypeDef.color;
6861 idtype = type_nitc__MVirtualTypeDef.id;
6862 if(cltype >= var_vt->type->table_size) {
6863 var70 = 0;
6864 } else {
6865 var70 = var_vt->type->type_table[cltype] == idtype;
6866 }
6867 if (unlikely(!var70)) {
6868 var_class_name = var_vt == NULL ? "null" : var_vt->type->name;
6869 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MVirtualTypeDef", var_class_name);
6870 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 389);
6871 fatal_exit(1);
6872 }
6873 {
6874 { /* Inline model#MVirtualTypeDef#bound (var_vt) on <var_vt:MPropDef(MVirtualTypeDef)> */
6875 var73 = var_vt->attrs[COLOR_nitc__model__MVirtualTypeDef___bound].val; /* _bound on <var_vt:MPropDef(MVirtualTypeDef)> */
6876 var71 = var73;
6877 RET_LABEL72:(void)0;
6878 }
6879 }
6880 {
6881 var74 = nitc___nitc__SeparateErasureCompiler___retrieve_vt_bound(self, var67, var71);
6882 }
6883 var_bound = var74;
6884 for(;;) {
6885 /* <var_bound:MType> isa MNullableType */
6886 cltype76 = type_nitc__MNullableType.color;
6887 idtype77 = type_nitc__MNullableType.id;
6888 if(cltype76 >= var_bound->type->table_size) {
6889 var75 = 0;
6890 } else {
6891 var75 = var_bound->type->type_table[cltype76] == idtype77;
6892 }
6893 if (var75){
6894 {
6895 { /* Inline model#MClass#intro (var_mclass) on <var_mclass:MClass> */
6896 var80 = var_mclass->attrs[COLOR_nitc__model__MClass___intro].val; /* _intro on <var_mclass:MClass> */
6897 if (unlikely(var80 == NULL)) {
6898 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
6899 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 483);
6900 fatal_exit(1);
6901 }
6902 var78 = var80;
6903 RET_LABEL79:(void)0;
6904 }
6905 }
6906 {
6907 { /* Inline model#MClassDef#bound_mtype (var78) on <var78:MClassDef> */
6908 var83 = var78->attrs[COLOR_nitc__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var78:MClassDef> */
6909 if (unlikely(var83 == NULL)) {
6910 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
6911 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 579);
6912 fatal_exit(1);
6913 }
6914 var81 = var83;
6915 RET_LABEL82:(void)0;
6916 }
6917 }
6918 {
6919 { /* Inline model#MProxyType#mtype (var_bound) on <var_bound:MType(MNullableType)> */
6920 var86 = var_bound->attrs[COLOR_nitc__model__MProxyType___mtype].val; /* _mtype on <var_bound:MType(MNullableType)> */
6921 if (unlikely(var86 == NULL)) {
6922 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
6923 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1625);
6924 fatal_exit(1);
6925 }
6926 var84 = var86;
6927 RET_LABEL85:(void)0;
6928 }
6929 }
6930 {
6931 var87 = nitc___nitc__SeparateErasureCompiler___retrieve_vt_bound(self, var81, var84);
6932 }
6933 var_bound = var87;
6934 var_is_null = 1l;
6935 } else {
6936 goto BREAK_label88;
6937 }
6938 }
6939 BREAK_label88: (void)0;
6940 /* <var_bound:MType> isa MClassType */
6941 cltype90 = type_nitc__MClassType.color;
6942 idtype91 = type_nitc__MClassType.id;
6943 if(cltype90 >= var_bound->type->table_size) {
6944 var89 = 0;
6945 } else {
6946 var89 = var_bound->type->type_table[cltype90] == idtype91;
6947 }
6948 if (unlikely(!var89)) {
6949 var_class_name92 = var_bound == NULL ? "null" : var_bound->type->name;
6950 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name92);
6951 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 394);
6952 fatal_exit(1);
6953 }
6954 {
6955 { /* Inline model#MClassType#mclass (var_bound) on <var_bound:MType(MClassType)> */
6956 var95 = var_bound->attrs[COLOR_nitc__model__MClassType___mclass].val; /* _mclass on <var_bound:MType(MClassType)> */
6957 if (unlikely(var95 == NULL)) {
6958 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
6959 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1163);
6960 fatal_exit(1);
6961 }
6962 var93 = var95;
6963 RET_LABEL94:(void)0;
6964 }
6965 }
6966 var_vtclass = var93;
6967 if (unlikely(varonce96==NULL)) {
6968 var97 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
6969 if (likely(varonce98!=NULL)) {
6970 var99 = varonce98;
6971 } else {
6972 var100 = "class_";
6973 var101 = core__flat___NativeString___to_s_full(var100, 6l, 6l);
6974 var99 = var101;
6975 varonce98 = var99;
6976 }
6977 ((struct instance_core__NativeArray*)var97)->values[0]=var99;
6978 } else {
6979 var97 = varonce96;
6980 varonce96 = NULL;
6981 }
6982 {
6983 var102 = nitc___nitc__MClass___nitc__model_base__MEntity__c_name(var_vtclass);
6984 }
6985 ((struct instance_core__NativeArray*)var97)->values[1]=var102;
6986 {
6987 var103 = ((val*(*)(val* self))(var97->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var97); /* native_to_s on <var97:NativeArray[String]>*/
6988 }
6989 varonce96 = var97;
6990 {
6991 nitc___nitc__AbstractCompilerVisitor___require_declaration(var_v, var103); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <var_v:SeparateCompilerVisitor>*/
6992 }
6993 if (unlikely(varonce104==NULL)) {
6994 var105 = NEW_core__NativeArray(7l, &type_core__NativeArray__core__String);
6995 if (likely(varonce106!=NULL)) {
6996 var107 = varonce106;
6997 } else {
6998 var108 = "{";
6999 var109 = core__flat___NativeString___to_s_full(var108, 1l, 1l);
7000 var107 = var109;
7001 varonce106 = var107;
7002 }
7003 ((struct instance_core__NativeArray*)var105)->values[0]=var107;
7004 if (likely(varonce110!=NULL)) {
7005 var111 = varonce110;
7006 } else {
7007 var112 = ", &class_";
7008 var113 = core__flat___NativeString___to_s_full(var112, 9l, 9l);
7009 var111 = var113;
7010 varonce110 = var111;
7011 }
7012 ((struct instance_core__NativeArray*)var105)->values[2]=var111;
7013 if (likely(varonce114!=NULL)) {
7014 var115 = varonce114;
7015 } else {
7016 var116 = "}, /* ";
7017 var117 = core__flat___NativeString___to_s_full(var116, 6l, 6l);
7018 var115 = var117;
7019 varonce114 = var115;
7020 }
7021 ((struct instance_core__NativeArray*)var105)->values[4]=var115;
7022 if (likely(varonce118!=NULL)) {
7023 var119 = varonce118;
7024 } else {
7025 var120 = " */";
7026 var121 = core__flat___NativeString___to_s_full(var120, 3l, 3l);
7027 var119 = var121;
7028 varonce118 = var119;
7029 }
7030 ((struct instance_core__NativeArray*)var105)->values[6]=var119;
7031 } else {
7032 var105 = varonce104;
7033 varonce104 = NULL;
7034 }
7035 var122 = core__flat___Int___core__abstract_text__Object__to_s(var_is_null);
7036 ((struct instance_core__NativeArray*)var105)->values[1]=var122;
7037 {
7038 var123 = nitc___nitc__MClass___nitc__model_base__MEntity__c_name(var_vtclass);
7039 }
7040 ((struct instance_core__NativeArray*)var105)->values[3]=var123;
7041 {
7042 var124 = ((val*(*)(val* self))(var_vt->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_vt); /* to_s on <var_vt:nullable MPropDef(MPropDef)>*/
7043 }
7044 ((struct instance_core__NativeArray*)var105)->values[5]=var124;
7045 {
7046 var125 = ((val*(*)(val* self))(var105->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var105); /* native_to_s on <var105:NativeArray[String]>*/
7047 }
7048 varonce104 = var105;
7049 {
7050 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var125); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
7051 }
7052 }
7053 {
7054 ((void(*)(val* self))((((long)var_51&3)?class_info[((long)var_51&3)]:var_51->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_51); /* next on <var_51:IndexedIterator[nullable MPropDef]>*/
7055 }
7056 }
7057 BREAK_label: (void)0;
7058 {
7059 ((void(*)(val* self))((((long)var_51&3)?class_info[((long)var_51&3)]:var_51->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_51); /* finish on <var_51:IndexedIterator[nullable MPropDef]>*/
7060 }
7061 if (likely(varonce126!=NULL)) {
7062 var127 = varonce126;
7063 } else {
7064 var128 = "},";
7065 var129 = core__flat___NativeString___to_s_full(var128, 2l, 2l);
7066 var127 = var129;
7067 varonce126 = var127;
7068 }
7069 {
7070 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var127); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
7071 }
7072 if (likely(varonce130!=NULL)) {
7073 var131 = varonce130;
7074 } else {
7075 var132 = "};";
7076 var133 = core__flat___NativeString___to_s_full(var132, 2l, 2l);
7077 var131 = var133;
7078 varonce130 = var131;
7079 }
7080 {
7081 nitc___nitc__AbstractCompilerVisitor___add_decl(var_v, var131); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_decl on <var_v:SeparateCompilerVisitor>*/
7082 }
7083 var = 1;
7084 goto RET_LABEL;
7085 RET_LABEL:;
7086 return var;
7087 }
7088 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: SeparateErasureCompiler, MClassType, nullable MType): MType */
7089 val* nitc___nitc__SeparateErasureCompiler___retrieve_vt_bound(val* self, val* p0, val* p1) {
7090 val* var /* : MType */;
7091 val* var_anchor /* var anchor: MClassType */;
7092 val* var_mtype /* var mtype: nullable MType */;
7093 short int var1 /* : Bool */;
7094 short int var2 /* : Bool */;
7095 val* var_other /* var other: nullable Object */;
7096 short int var4 /* : Bool */;
7097 short int var6 /* : Bool */;
7098 val* var7 /* : Sys */;
7099 static val* varonce;
7100 val* var8 /* : String */;
7101 char* var9 /* : NativeString */;
7102 val* var10 /* : String */;
7103 short int var11 /* : Bool */;
7104 int cltype;
7105 int idtype;
7106 val* var12 /* : MModule */;
7107 val* var14 /* : MModule */;
7108 val* var15 /* : MType */;
7109 short int var16 /* : Bool */;
7110 int cltype17;
7111 int idtype18;
7112 val* var19 /* : MModule */;
7113 val* var21 /* : MModule */;
7114 val* var22 /* : MType */;
7115 var_anchor = p0;
7116 var_mtype = p1;
7117 if (var_mtype == NULL) {
7118 var1 = 1; /* is null */
7119 } else {
7120 var1 = 0; /* arg is null but recv is not */
7121 }
7122 if (0) {
7123 { /* Inline kernel#Object#== (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
7124 var_other = ((val*)NULL);
7125 {
7126 { /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
7127 var6 = var_mtype == var_other;
7128 var4 = var6;
7129 goto RET_LABEL5;
7130 RET_LABEL5:(void)0;
7131 }
7132 }
7133 var2 = var4;
7134 goto RET_LABEL3;
7135 RET_LABEL3:(void)0;
7136 }
7137 var1 = var2;
7138 }
7139 if (var1){
7140 var7 = glob_sys;
7141 if (likely(varonce!=NULL)) {
7142 var8 = varonce;
7143 } else {
7144 var9 = "NOT YET IMPLEMENTED: retrieve_vt_bound on null";
7145 var10 = core__flat___NativeString___to_s_full(var9, 46l, 46l);
7146 var8 = var10;
7147 varonce = var8;
7148 }
7149 {
7150 core__file___Sys___print(var7, var8); /* Direct call file#Sys#print on <var7:Sys>*/
7151 }
7152 PRINT_ERROR("Runtime error: %s", "Aborted");
7153 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 407);
7154 fatal_exit(1);
7155 } else {
7156 }
7157 /* <var_mtype:nullable MType(MType)> isa MVirtualType */
7158 cltype = type_nitc__MVirtualType.color;
7159 idtype = type_nitc__MVirtualType.id;
7160 if(cltype >= var_mtype->type->table_size) {
7161 var11 = 0;
7162 } else {
7163 var11 = var_mtype->type->type_table[cltype] == idtype;
7164 }
7165 if (var11){
7166 {
7167 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
7168 var14 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
7169 if (unlikely(var14 == NULL)) {
7170 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
7171 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
7172 fatal_exit(1);
7173 }
7174 var12 = var14;
7175 RET_LABEL13:(void)0;
7176 }
7177 }
7178 {
7179 var15 = nitc___nitc__MType___anchor_to(var_mtype, var12, var_anchor);
7180 }
7181 var = var15;
7182 goto RET_LABEL;
7183 } else {
7184 /* <var_mtype:nullable MType(MType)> isa MParameterType */
7185 cltype17 = type_nitc__MParameterType.color;
7186 idtype18 = type_nitc__MParameterType.id;
7187 if(cltype17 >= var_mtype->type->table_size) {
7188 var16 = 0;
7189 } else {
7190 var16 = var_mtype->type->type_table[cltype17] == idtype18;
7191 }
7192 if (var16){
7193 {
7194 { /* Inline abstract_compiler#AbstractCompiler#mainmodule (self) on <self:SeparateErasureCompiler> */
7195 var21 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <self:SeparateErasureCompiler> */
7196 if (unlikely(var21 == NULL)) {
7197 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
7198 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 531);
7199 fatal_exit(1);
7200 }
7201 var19 = var21;
7202 RET_LABEL20:(void)0;
7203 }
7204 }
7205 {
7206 var22 = nitc___nitc__MType___anchor_to(var_mtype, var19, var_anchor);
7207 }
7208 var = var22;
7209 goto RET_LABEL;
7210 } else {
7211 var = var_mtype;
7212 goto RET_LABEL;
7213 }
7214 }
7215 RET_LABEL:;
7216 return var;
7217 }
7218 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_types for (self: SeparateErasureCompiler) */
7219 void nitc___nitc__SeparateErasureCompiler___nitc__separate_compiler__SeparateCompiler__compile_types(val* self) {
7220 val* var /* : Map[MVirtualTypeProp, Int] */;
7221 val* var2 /* : Map[MVirtualTypeProp, Int] */;
7222 {
7223 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_colors (self) on <self:SeparateErasureCompiler> */
7224 var2 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_colors].val; /* _vt_colors on <self:SeparateErasureCompiler> */
7225 if (unlikely(var2 == NULL)) {
7226 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_colors");
7227 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 86);
7228 fatal_exit(1);
7229 }
7230 var = var2;
7231 RET_LABEL1:(void)0;
7232 }
7233 }
7234 {
7235 nitc___nitc__SeparateCompiler___compile_color_consts(self, var); /* Direct call separate_compiler#SeparateCompiler#compile_color_consts on <self:SeparateErasureCompiler>*/
7236 }
7237 RET_LABEL:;
7238 }
7239 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: SeparateErasureCompiler): SeparateCompilerVisitor */
7240 val* nitc___nitc__SeparateErasureCompiler___nitc__abstract_compiler__AbstractCompiler__new_visitor(val* self) {
7241 val* var /* : SeparateCompilerVisitor */;
7242 val* var1 /* : SeparateErasureCompilerVisitor */;
7243 short int var2 /* : Bool */;
7244 int cltype;
7245 int idtype;
7246 const struct type* type_struct;
7247 const char* var_class_name;
7248 var1 = NEW_nitc__SeparateErasureCompilerVisitor(&type_nitc__SeparateErasureCompilerVisitor);
7249 {
7250 ((void(*)(val* self, val* p0))(var1->class->vft[COLOR_nitc__abstract_compiler__AbstractCompilerVisitor__compiler_61d]))(var1, self); /* compiler= on <var1:SeparateErasureCompilerVisitor>*/
7251 }
7252 {
7253 ((void(*)(val* self))(var1->class->vft[COLOR_core__kernel__Object__init]))(var1); /* init on <var1:SeparateErasureCompilerVisitor>*/
7254 }
7255 /* <var1:SeparateErasureCompilerVisitor> isa VISITOR */
7256 type_struct = self->type->resolution_table->types[COLOR_nitc__abstract_compiler__AbstractCompiler__VISITOR];
7257 cltype = type_struct->color;
7258 idtype = type_struct->id;
7259 if(cltype >= var1->type->table_size) {
7260 var2 = 0;
7261 } else {
7262 var2 = var1->type->type_table[cltype] == idtype;
7263 }
7264 if (unlikely(!var2)) {
7265 var_class_name = var1 == NULL ? "null" : var1->type->name;
7266 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
7267 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 423);
7268 fatal_exit(1);
7269 }
7270 var = var1;
7271 goto RET_LABEL;
7272 RET_LABEL:;
7273 return var;
7274 }
7275 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MClass]] */
7276 val* nitc___nitc__SeparateErasureCompiler___class_tables(val* self) {
7277 val* var /* : Map[MClass, Array[nullable MClass]] */;
7278 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
7279 var1 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:SeparateErasureCompiler> */
7280 if (unlikely(var1 == NULL)) {
7281 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
7282 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 427);
7283 fatal_exit(1);
7284 }
7285 var = var1;
7286 RET_LABEL:;
7287 return var;
7288 }
7289 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MClass]]) */
7290 void nitc___nitc__SeparateErasureCompiler___class_tables_61d(val* self, val* p0) {
7291 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_tables].val = p0; /* _class_tables on <self:SeparateErasureCompiler> */
7292 RET_LABEL:;
7293 }
7294 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MPropDef]] */
7295 val* nitc___nitc__SeparateErasureCompiler___vt_tables(val* self) {
7296 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
7297 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
7298 var1 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
7299 if (unlikely(var1 == NULL)) {
7300 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
7301 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 428);
7302 fatal_exit(1);
7303 }
7304 var = var1;
7305 RET_LABEL:;
7306 return var;
7307 }
7308 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MPropDef]]) */
7309 void nitc___nitc__SeparateErasureCompiler___vt_tables_61d(val* self, val* p0) {
7310 self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val = p0; /* _vt_tables on <self:SeparateErasureCompiler> */
7311 RET_LABEL:;
7312 }
7313 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: SeparateErasureCompiler) */
7314 void nitc___nitc__SeparateErasureCompiler___nitc__separate_compiler__SeparateCompiler__display_sizes(val* self) {
7315 val* var /* : Sys */;
7316 static val* varonce;
7317 val* var1 /* : String */;
7318 char* var2 /* : NativeString */;
7319 val* var3 /* : String */;
7320 val* var4 /* : Sys */;
7321 static val* varonce5;
7322 val* var6 /* : String */;
7323 char* var7 /* : NativeString */;
7324 val* var8 /* : String */;
7325 long var_total /* var total: Int */;
7326 long var_holes /* var holes: Int */;
7327 val* var9 /* : Map[MClass, Array[nullable MClass]] */;
7328 val* var11 /* : Map[MClass, Array[nullable MClass]] */;
7329 val* var_ /* var : Map[MClass, Array[nullable MClass]] */;
7330 val* var12 /* : MapIterator[nullable Object, nullable Object] */;
7331 val* var_13 /* var : MapIterator[MClass, Array[nullable MClass]] */;
7332 short int var14 /* : Bool */;
7333 val* var15 /* : nullable Object */;
7334 val* var_t /* var t: MClass */;
7335 val* var16 /* : nullable Object */;
7336 val* var_table /* var table: Array[nullable MClass] */;
7337 long var17 /* : Int */;
7338 long var19 /* : Int */;
7339 long var20 /* : Int */;
7340 short int var22 /* : Bool */;
7341 int cltype;
7342 int idtype;
7343 const char* var_class_name;
7344 long var23 /* : Int */;
7345 val* var_24 /* var : Array[nullable MClass] */;
7346 val* var25 /* : IndexedIterator[nullable Object] */;
7347 val* var_26 /* var : IndexedIterator[nullable MClass] */;
7348 short int var27 /* : Bool */;
7349 val* var29 /* : nullable Object */;
7350 val* var_e /* var e: nullable MClass */;
7351 short int var30 /* : Bool */;
7352 short int var31 /* : Bool */;
7353 val* var_other /* var other: nullable Object */;
7354 short int var33 /* : Bool */;
7355 short int var35 /* : Bool */;
7356 long var36 /* : Int */;
7357 short int var38 /* : Bool */;
7358 int cltype39;
7359 int idtype40;
7360 const char* var_class_name41;
7361 long var42 /* : Int */;
7362 val* var44 /* : Sys */;
7363 val* var46 /* : NativeArray[String] */;
7364 static val* varonce45;
7365 static val* varonce47;
7366 val* var48 /* : String */;
7367 char* var49 /* : NativeString */;
7368 val* var50 /* : String */;
7369 static val* varonce51;
7370 val* var52 /* : String */;
7371 char* var53 /* : NativeString */;
7372 val* var54 /* : String */;
7373 val* var55 /* : String */;
7374 val* var56 /* : String */;
7375 val* var57 /* : String */;
7376 val* var58 /* : Sys */;
7377 static val* varonce59;
7378 val* var60 /* : String */;
7379 char* var61 /* : NativeString */;
7380 val* var62 /* : String */;
7381 val* var63 /* : Sys */;
7382 static val* varonce64;
7383 val* var65 /* : String */;
7384 char* var66 /* : NativeString */;
7385 val* var67 /* : String */;
7386 val* var68 /* : Map[MClass, Array[nullable MPropDef]] */;
7387 val* var70 /* : Map[MClass, Array[nullable MPropDef]] */;
7388 val* var_71 /* var : Map[MClass, Array[nullable MPropDef]] */;
7389 val* var72 /* : MapIterator[nullable Object, nullable Object] */;
7390 val* var_73 /* var : MapIterator[MClass, Array[nullable MPropDef]] */;
7391 short int var74 /* : Bool */;
7392 val* var76 /* : nullable Object */;
7393 val* var_t77 /* var t: MClass */;
7394 val* var78 /* : nullable Object */;
7395 val* var_table79 /* var table: Array[nullable MPropDef] */;
7396 long var80 /* : Int */;
7397 long var82 /* : Int */;
7398 long var83 /* : Int */;
7399 short int var85 /* : Bool */;
7400 int cltype86;
7401 int idtype87;
7402 const char* var_class_name88;
7403 long var89 /* : Int */;
7404 val* var_90 /* var : Array[nullable MPropDef] */;
7405 val* var91 /* : IndexedIterator[nullable Object] */;
7406 val* var_92 /* var : IndexedIterator[nullable MPropDef] */;
7407 short int var93 /* : Bool */;
7408 val* var95 /* : nullable Object */;
7409 val* var_e96 /* var e: nullable MPropDef */;
7410 short int var97 /* : Bool */;
7411 short int var98 /* : Bool */;
7412 short int var100 /* : Bool */;
7413 short int var102 /* : Bool */;
7414 long var103 /* : Int */;
7415 short int var105 /* : Bool */;
7416 int cltype106;
7417 int idtype107;
7418 const char* var_class_name108;
7419 long var109 /* : Int */;
7420 val* var111 /* : Sys */;
7421 val* var113 /* : NativeArray[String] */;
7422 static val* varonce112;
7423 static val* varonce114;
7424 val* var115 /* : String */;
7425 char* var116 /* : NativeString */;
7426 val* var117 /* : String */;
7427 static val* varonce118;
7428 val* var119 /* : String */;
7429 char* var120 /* : NativeString */;
7430 val* var121 /* : String */;
7431 val* var122 /* : String */;
7432 val* var123 /* : String */;
7433 val* var124 /* : String */;
7434 val* var125 /* : Sys */;
7435 static val* varonce126;
7436 val* var127 /* : String */;
7437 char* var128 /* : NativeString */;
7438 val* var129 /* : String */;
7439 val* var130 /* : Sys */;
7440 static val* varonce131;
7441 val* var132 /* : String */;
7442 char* var133 /* : NativeString */;
7443 val* var134 /* : String */;
7444 val* var135 /* : Map[MClass, Array[nullable MPropDef]] */;
7445 val* var137 /* : Map[MClass, Array[nullable MPropDef]] */;
7446 val* var_138 /* var : Map[MClass, Array[nullable MPropDef]] */;
7447 val* var139 /* : MapIterator[nullable Object, nullable Object] */;
7448 val* var_140 /* var : MapIterator[MClass, Array[nullable MPropDef]] */;
7449 short int var141 /* : Bool */;
7450 val* var143 /* : nullable Object */;
7451 val* var_t144 /* var t: MClass */;
7452 val* var145 /* : nullable Object */;
7453 val* var_table146 /* var table: Array[nullable MPropDef] */;
7454 long var147 /* : Int */;
7455 long var149 /* : Int */;
7456 long var150 /* : Int */;
7457 short int var152 /* : Bool */;
7458 int cltype153;
7459 int idtype154;
7460 const char* var_class_name155;
7461 long var156 /* : Int */;
7462 val* var_157 /* var : Array[nullable MPropDef] */;
7463 val* var158 /* : IndexedIterator[nullable Object] */;
7464 val* var_159 /* var : IndexedIterator[nullable MPropDef] */;
7465 short int var160 /* : Bool */;
7466 val* var162 /* : nullable Object */;
7467 val* var_e163 /* var e: nullable MPropDef */;
7468 short int var164 /* : Bool */;
7469 short int var165 /* : Bool */;
7470 short int var167 /* : Bool */;
7471 short int var169 /* : Bool */;
7472 long var170 /* : Int */;
7473 short int var172 /* : Bool */;
7474 int cltype173;
7475 int idtype174;
7476 const char* var_class_name175;
7477 long var176 /* : Int */;
7478 val* var178 /* : Sys */;
7479 val* var180 /* : NativeArray[String] */;
7480 static val* varonce179;
7481 static val* varonce181;
7482 val* var182 /* : String */;
7483 char* var183 /* : NativeString */;
7484 val* var184 /* : String */;
7485 static val* varonce185;
7486 val* var186 /* : String */;
7487 char* var187 /* : NativeString */;
7488 val* var188 /* : String */;
7489 val* var189 /* : String */;
7490 val* var190 /* : String */;
7491 val* var191 /* : String */;
7492 val* var192 /* : Sys */;
7493 static val* varonce193;
7494 val* var194 /* : String */;
7495 char* var195 /* : NativeString */;
7496 val* var196 /* : String */;
7497 val* var197 /* : Sys */;
7498 static val* varonce198;
7499 val* var199 /* : String */;
7500 char* var200 /* : NativeString */;
7501 val* var201 /* : String */;
7502 val* var202 /* : Map[MClass, Array[nullable MProperty]] */;
7503 val* var204 /* : Map[MClass, Array[nullable MProperty]] */;
7504 val* var_205 /* var : Map[MClass, Array[nullable MProperty]] */;
7505 val* var206 /* : MapIterator[nullable Object, nullable Object] */;
7506 val* var_207 /* var : MapIterator[MClass, Array[nullable MProperty]] */;
7507 short int var208 /* : Bool */;
7508 val* var210 /* : nullable Object */;
7509 val* var_t211 /* var t: MClass */;
7510 val* var212 /* : nullable Object */;
7511 val* var_table213 /* var table: Array[nullable MProperty] */;
7512 long var214 /* : Int */;
7513 long var216 /* : Int */;
7514 long var217 /* : Int */;
7515 short int var219 /* : Bool */;
7516 int cltype220;
7517 int idtype221;
7518 const char* var_class_name222;
7519 long var223 /* : Int */;
7520 val* var_224 /* var : Array[nullable MProperty] */;
7521 val* var225 /* : IndexedIterator[nullable Object] */;
7522 val* var_226 /* var : IndexedIterator[nullable MProperty] */;
7523 short int var227 /* : Bool */;
7524 val* var229 /* : nullable Object */;
7525 val* var_e230 /* var e: nullable MProperty */;
7526 short int var231 /* : Bool */;
7527 short int var232 /* : Bool */;
7528 short int var234 /* : Bool */;
7529 short int var236 /* : Bool */;
7530 long var237 /* : Int */;
7531 short int var239 /* : Bool */;
7532 int cltype240;
7533 int idtype241;
7534 const char* var_class_name242;
7535 long var243 /* : Int */;
7536 val* var245 /* : Sys */;
7537 val* var247 /* : NativeArray[String] */;
7538 static val* varonce246;
7539 static val* varonce248;
7540 val* var249 /* : String */;
7541 char* var250 /* : NativeString */;
7542 val* var251 /* : String */;
7543 static val* varonce252;
7544 val* var253 /* : String */;
7545 char* var254 /* : NativeString */;
7546 val* var255 /* : String */;
7547 val* var256 /* : String */;
7548 val* var257 /* : String */;
7549 val* var258 /* : String */;
7550 var = glob_sys;
7551 if (likely(varonce!=NULL)) {
7552 var1 = varonce;
7553 } else {
7554 var2 = "# size of subtyping tables";
7555 var3 = core__flat___NativeString___to_s_full(var2, 26l, 26l);
7556 var1 = var3;
7557 varonce = var1;
7558 }
7559 {
7560 core__file___Sys___print(var, var1); /* Direct call file#Sys#print on <var:Sys>*/
7561 }
7562 var4 = glob_sys;
7563 if (likely(varonce5!=NULL)) {
7564 var6 = varonce5;
7565 } else {
7566 var7 = "\ttotal \tholes";
7567 var8 = core__flat___NativeString___to_s_full(var7, 13l, 13l);
7568 var6 = var8;
7569 varonce5 = var6;
7570 }
7571 {
7572 core__file___Sys___print(var4, var6); /* Direct call file#Sys#print on <var4:Sys>*/
7573 }
7574 var_total = 0l;
7575 var_holes = 0l;
7576 {
7577 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#class_tables (self) on <self:SeparateErasureCompiler> */
7578 var11 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___class_tables].val; /* _class_tables on <self:SeparateErasureCompiler> */
7579 if (unlikely(var11 == NULL)) {
7580 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _class_tables");
7581 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 427);
7582 fatal_exit(1);
7583 }
7584 var9 = var11;
7585 RET_LABEL10:(void)0;
7586 }
7587 }
7588 var_ = var9;
7589 {
7590 var12 = ((val*(*)(val* self))((((long)var_&3)?class_info[((long)var_&3)]:var_->class)->vft[COLOR_core__abstract_collection__MapRead__iterator]))(var_); /* iterator on <var_:Map[MClass, Array[nullable MClass]]>*/
7591 }
7592 var_13 = var12;
7593 for(;;) {
7594 {
7595 var14 = ((short int(*)(val* self))((((long)var_13&3)?class_info[((long)var_13&3)]:var_13->class)->vft[COLOR_core__abstract_collection__MapIterator__is_ok]))(var_13); /* is_ok on <var_13:MapIterator[MClass, Array[nullable MClass]]>*/
7596 }
7597 if (var14){
7598 } else {
7599 goto BREAK_label;
7600 }
7601 {
7602 var15 = ((val*(*)(val* self))((((long)var_13&3)?class_info[((long)var_13&3)]:var_13->class)->vft[COLOR_core__abstract_collection__MapIterator__key]))(var_13); /* key on <var_13:MapIterator[MClass, Array[nullable MClass]]>*/
7603 }
7604 var_t = var15;
7605 {
7606 var16 = ((val*(*)(val* self))((((long)var_13&3)?class_info[((long)var_13&3)]:var_13->class)->vft[COLOR_core__abstract_collection__MapIterator__item]))(var_13); /* item on <var_13:MapIterator[MClass, Array[nullable MClass]]>*/
7607 }
7608 var_table = var16;
7609 {
7610 { /* Inline array#AbstractArrayRead#length (var_table) on <var_table:Array[nullable MClass]> */
7611 var19 = var_table->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table:Array[nullable MClass]> */
7612 var17 = var19;
7613 RET_LABEL18:(void)0;
7614 }
7615 }
7616 {
7617 { /* Inline kernel#Int#+ (var_total,var17) on <var_total:Int> */
7618 /* Covariant cast for argument 0 (i) <var17:Int> isa OTHER */
7619 /* <var17:Int> isa OTHER */
7620 var22 = 1; /* easy <var17:Int> isa OTHER*/
7621 if (unlikely(!var22)) {
7622 var_class_name = type_core__Int.name;
7623 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
7624 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
7625 fatal_exit(1);
7626 }
7627 var23 = var_total + var17;
7628 var20 = var23;
7629 goto RET_LABEL21;
7630 RET_LABEL21:(void)0;
7631 }
7632 }
7633 var_total = var20;
7634 var_24 = var_table;
7635 {
7636 var25 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_24);
7637 }
7638 var_26 = var25;
7639 for(;;) {
7640 {
7641 var27 = ((short int(*)(val* self))((((long)var_26&3)?class_info[((long)var_26&3)]:var_26->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_26); /* is_ok on <var_26:IndexedIterator[nullable MClass]>*/
7642 }
7643 if (var27){
7644 } else {
7645 goto BREAK_label28;
7646 }
7647 {
7648 var29 = ((val*(*)(val* self))((((long)var_26&3)?class_info[((long)var_26&3)]:var_26->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_26); /* item on <var_26:IndexedIterator[nullable MClass]>*/
7649 }
7650 var_e = var29;
7651 if (var_e == NULL) {
7652 var30 = 1; /* is null */
7653 } else {
7654 var30 = 0; /* arg is null but recv is not */
7655 }
7656 if (0) {
7657 { /* Inline kernel#Object#== (var_e,((val*)NULL)) on <var_e:nullable MClass> */
7658 var_other = ((val*)NULL);
7659 {
7660 { /* Inline kernel#Object#is_same_instance (var_e,var_other) on <var_e:nullable MClass(MClass)> */
7661 var35 = var_e == var_other;
7662 var33 = var35;
7663 goto RET_LABEL34;
7664 RET_LABEL34:(void)0;
7665 }
7666 }
7667 var31 = var33;
7668 goto RET_LABEL32;
7669 RET_LABEL32:(void)0;
7670 }
7671 var30 = var31;
7672 }
7673 if (var30){
7674 {
7675 { /* Inline kernel#Int#+ (var_holes,1l) on <var_holes:Int> */
7676 /* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
7677 /* <1l:Int> isa OTHER */
7678 var38 = 1; /* easy <1l:Int> isa OTHER*/
7679 if (unlikely(!var38)) {
7680 var_class_name41 = type_core__Int.name;
7681 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name41);
7682 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
7683 fatal_exit(1);
7684 }
7685 var42 = var_holes + 1l;
7686 var36 = var42;
7687 goto RET_LABEL37;
7688 RET_LABEL37:(void)0;
7689 }
7690 }
7691 var_holes = var36;
7692 } else {
7693 }
7694 {
7695 ((void(*)(val* self))((((long)var_26&3)?class_info[((long)var_26&3)]:var_26->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_26); /* next on <var_26:IndexedIterator[nullable MClass]>*/
7696 }
7697 }
7698 BREAK_label28: (void)0;
7699 {
7700 ((void(*)(val* self))((((long)var_26&3)?class_info[((long)var_26&3)]:var_26->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_26); /* finish on <var_26:IndexedIterator[nullable MClass]>*/
7701 }
7702 {
7703 ((void(*)(val* self))((((long)var_13&3)?class_info[((long)var_13&3)]:var_13->class)->vft[COLOR_core__abstract_collection__MapIterator__next]))(var_13); /* next on <var_13:MapIterator[MClass, Array[nullable MClass]]>*/
7704 }
7705 }
7706 BREAK_label: (void)0;
7707 {
7708 { /* Inline abstract_collection#MapIterator#finish (var_13) on <var_13:MapIterator[MClass, Array[nullable MClass]]> */
7709 RET_LABEL43:(void)0;
7710 }
7711 }
7712 var44 = glob_sys;
7713 if (unlikely(varonce45==NULL)) {
7714 var46 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
7715 if (likely(varonce47!=NULL)) {
7716 var48 = varonce47;
7717 } else {
7718 var49 = "\t";
7719 var50 = core__flat___NativeString___to_s_full(var49, 1l, 1l);
7720 var48 = var50;
7721 varonce47 = var48;
7722 }
7723 ((struct instance_core__NativeArray*)var46)->values[0]=var48;
7724 if (likely(varonce51!=NULL)) {
7725 var52 = varonce51;
7726 } else {
7727 var53 = "\t";
7728 var54 = core__flat___NativeString___to_s_full(var53, 1l, 1l);
7729 var52 = var54;
7730 varonce51 = var52;
7731 }
7732 ((struct instance_core__NativeArray*)var46)->values[2]=var52;
7733 } else {
7734 var46 = varonce45;
7735 varonce45 = NULL;
7736 }
7737 var55 = core__flat___Int___core__abstract_text__Object__to_s(var_total);
7738 ((struct instance_core__NativeArray*)var46)->values[1]=var55;
7739 var56 = core__flat___Int___core__abstract_text__Object__to_s(var_holes);
7740 ((struct instance_core__NativeArray*)var46)->values[3]=var56;
7741 {
7742 var57 = ((val*(*)(val* self))(var46->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var46); /* native_to_s on <var46:NativeArray[String]>*/
7743 }
7744 varonce45 = var46;
7745 {
7746 core__file___Sys___print(var44, var57); /* Direct call file#Sys#print on <var44:Sys>*/
7747 }
7748 var58 = glob_sys;
7749 if (likely(varonce59!=NULL)) {
7750 var60 = varonce59;
7751 } else {
7752 var61 = "# size of resolution tables";
7753 var62 = core__flat___NativeString___to_s_full(var61, 27l, 27l);
7754 var60 = var62;
7755 varonce59 = var60;
7756 }
7757 {
7758 core__file___Sys___print(var58, var60); /* Direct call file#Sys#print on <var58:Sys>*/
7759 }
7760 var63 = glob_sys;
7761 if (likely(varonce64!=NULL)) {
7762 var65 = varonce64;
7763 } else {
7764 var66 = "\ttotal \tholes";
7765 var67 = core__flat___NativeString___to_s_full(var66, 13l, 13l);
7766 var65 = var67;
7767 varonce64 = var65;
7768 }
7769 {
7770 core__file___Sys___print(var63, var65); /* Direct call file#Sys#print on <var63:Sys>*/
7771 }
7772 var_total = 0l;
7773 var_holes = 0l;
7774 {
7775 { /* Inline separate_erasure_compiler#SeparateErasureCompiler#vt_tables (self) on <self:SeparateErasureCompiler> */
7776 var70 = self->attrs[COLOR_nitc__separate_erasure_compiler__SeparateErasureCompiler___vt_tables].val; /* _vt_tables on <self:SeparateErasureCompiler> */
7777 if (unlikely(var70 == NULL)) {
7778 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _vt_tables");
7779 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 428);
7780 fatal_exit(1);
7781 }
7782 var68 = var70;
7783 RET_LABEL69:(void)0;
7784 }
7785 }
7786 var_71 = var68;
7787 {
7788 var72 = ((val*(*)(val* self))((((long)var_71&3)?class_info[((long)var_71&3)]:var_71->class)->vft[COLOR_core__abstract_collection__MapRead__iterator]))(var_71); /* iterator on <var_71:Map[MClass, Array[nullable MPropDef]]>*/
7789 }
7790 var_73 = var72;
7791 for(;;) {
7792 {
7793 var74 = ((short int(*)(val* self))((((long)var_73&3)?class_info[((long)var_73&3)]:var_73->class)->vft[COLOR_core__abstract_collection__MapIterator__is_ok]))(var_73); /* is_ok on <var_73:MapIterator[MClass, Array[nullable MPropDef]]>*/
7794 }
7795 if (var74){
7796 } else {
7797 goto BREAK_label75;
7798 }
7799 {
7800 var76 = ((val*(*)(val* self))((((long)var_73&3)?class_info[((long)var_73&3)]:var_73->class)->vft[COLOR_core__abstract_collection__MapIterator__key]))(var_73); /* key on <var_73:MapIterator[MClass, Array[nullable MPropDef]]>*/
7801 }
7802 var_t77 = var76;
7803 {
7804 var78 = ((val*(*)(val* self))((((long)var_73&3)?class_info[((long)var_73&3)]:var_73->class)->vft[COLOR_core__abstract_collection__MapIterator__item]))(var_73); /* item on <var_73:MapIterator[MClass, Array[nullable MPropDef]]>*/
7805 }
7806 var_table79 = var78;
7807 {
7808 { /* Inline array#AbstractArrayRead#length (var_table79) on <var_table79:Array[nullable MPropDef]> */
7809 var82 = var_table79->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table79:Array[nullable MPropDef]> */
7810 var80 = var82;
7811 RET_LABEL81:(void)0;
7812 }
7813 }
7814 {
7815 { /* Inline kernel#Int#+ (var_total,var80) on <var_total:Int> */
7816 /* Covariant cast for argument 0 (i) <var80:Int> isa OTHER */
7817 /* <var80:Int> isa OTHER */
7818 var85 = 1; /* easy <var80:Int> isa OTHER*/
7819 if (unlikely(!var85)) {
7820 var_class_name88 = type_core__Int.name;
7821 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name88);
7822 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
7823 fatal_exit(1);
7824 }
7825 var89 = var_total + var80;
7826 var83 = var89;
7827 goto RET_LABEL84;
7828 RET_LABEL84:(void)0;
7829 }
7830 }
7831 var_total = var83;
7832 var_90 = var_table79;
7833 {
7834 var91 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_90);
7835 }
7836 var_92 = var91;
7837 for(;;) {
7838 {
7839 var93 = ((short int(*)(val* self))((((long)var_92&3)?class_info[((long)var_92&3)]:var_92->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_92); /* is_ok on <var_92:IndexedIterator[nullable MPropDef]>*/
7840 }
7841 if (var93){
7842 } else {
7843 goto BREAK_label94;
7844 }
7845 {
7846 var95 = ((val*(*)(val* self))((((long)var_92&3)?class_info[((long)var_92&3)]:var_92->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_92); /* item on <var_92:IndexedIterator[nullable MPropDef]>*/
7847 }
7848 var_e96 = var95;
7849 if (var_e96 == NULL) {
7850 var97 = 1; /* is null */
7851 } else {
7852 var97 = 0; /* arg is null but recv is not */
7853 }
7854 if (0) {
7855 { /* Inline kernel#Object#== (var_e96,((val*)NULL)) on <var_e96:nullable MPropDef> */
7856 var_other = ((val*)NULL);
7857 {
7858 { /* Inline kernel#Object#is_same_instance (var_e96,var_other) on <var_e96:nullable MPropDef(MPropDef)> */
7859 var102 = var_e96 == var_other;
7860 var100 = var102;
7861 goto RET_LABEL101;
7862 RET_LABEL101:(void)0;
7863 }
7864 }
7865 var98 = var100;
7866 goto RET_LABEL99;
7867 RET_LABEL99:(void)0;
7868 }
7869 var97 = var98;
7870 }
7871 if (var97){
7872 {
7873 { /* Inline kernel#Int#+ (var_holes,1l) on <var_holes:Int> */
7874 /* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
7875 /* <1l:Int> isa OTHER */
7876 var105 = 1; /* easy <1l:Int> isa OTHER*/
7877 if (unlikely(!var105)) {
7878 var_class_name108 = type_core__Int.name;
7879 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name108);
7880 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
7881 fatal_exit(1);
7882 }
7883 var109 = var_holes + 1l;
7884 var103 = var109;
7885 goto RET_LABEL104;
7886 RET_LABEL104:(void)0;
7887 }
7888 }
7889 var_holes = var103;
7890 } else {
7891 }
7892 {
7893 ((void(*)(val* self))((((long)var_92&3)?class_info[((long)var_92&3)]:var_92->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_92); /* next on <var_92:IndexedIterator[nullable MPropDef]>*/
7894 }
7895 }
7896 BREAK_label94: (void)0;
7897 {
7898 ((void(*)(val* self))((((long)var_92&3)?class_info[((long)var_92&3)]:var_92->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_92); /* finish on <var_92:IndexedIterator[nullable MPropDef]>*/
7899 }
7900 {
7901 ((void(*)(val* self))((((long)var_73&3)?class_info[((long)var_73&3)]:var_73->class)->vft[COLOR_core__abstract_collection__MapIterator__next]))(var_73); /* next on <var_73:MapIterator[MClass, Array[nullable MPropDef]]>*/
7902 }
7903 }
7904 BREAK_label75: (void)0;
7905 {
7906 { /* Inline abstract_collection#MapIterator#finish (var_73) on <var_73:MapIterator[MClass, Array[nullable MPropDef]]> */
7907 RET_LABEL110:(void)0;
7908 }
7909 }
7910 var111 = glob_sys;
7911 if (unlikely(varonce112==NULL)) {
7912 var113 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
7913 if (likely(varonce114!=NULL)) {
7914 var115 = varonce114;
7915 } else {
7916 var116 = "\t";
7917 var117 = core__flat___NativeString___to_s_full(var116, 1l, 1l);
7918 var115 = var117;
7919 varonce114 = var115;
7920 }
7921 ((struct instance_core__NativeArray*)var113)->values[0]=var115;
7922 if (likely(varonce118!=NULL)) {
7923 var119 = varonce118;
7924 } else {
7925 var120 = "\t";
7926 var121 = core__flat___NativeString___to_s_full(var120, 1l, 1l);
7927 var119 = var121;
7928 varonce118 = var119;
7929 }
7930 ((struct instance_core__NativeArray*)var113)->values[2]=var119;
7931 } else {
7932 var113 = varonce112;
7933 varonce112 = NULL;
7934 }
7935 var122 = core__flat___Int___core__abstract_text__Object__to_s(var_total);
7936 ((struct instance_core__NativeArray*)var113)->values[1]=var122;
7937 var123 = core__flat___Int___core__abstract_text__Object__to_s(var_holes);
7938 ((struct instance_core__NativeArray*)var113)->values[3]=var123;
7939 {
7940 var124 = ((val*(*)(val* self))(var113->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var113); /* native_to_s on <var113:NativeArray[String]>*/
7941 }
7942 varonce112 = var113;
7943 {
7944 core__file___Sys___print(var111, var124); /* Direct call file#Sys#print on <var111:Sys>*/
7945 }
7946 var125 = glob_sys;
7947 if (likely(varonce126!=NULL)) {
7948 var127 = varonce126;
7949 } else {
7950 var128 = "# size of methods tables";
7951 var129 = core__flat___NativeString___to_s_full(var128, 24l, 24l);
7952 var127 = var129;
7953 varonce126 = var127;
7954 }
7955 {
7956 core__file___Sys___print(var125, var127); /* Direct call file#Sys#print on <var125:Sys>*/
7957 }
7958 var130 = glob_sys;
7959 if (likely(varonce131!=NULL)) {
7960 var132 = varonce131;
7961 } else {
7962 var133 = "\ttotal \tholes";
7963 var134 = core__flat___NativeString___to_s_full(var133, 13l, 13l);
7964 var132 = var134;
7965 varonce131 = var132;
7966 }
7967 {
7968 core__file___Sys___print(var130, var132); /* Direct call file#Sys#print on <var130:Sys>*/
7969 }
7970 var_total = 0l;
7971 var_holes = 0l;
7972 {
7973 { /* Inline separate_compiler#SeparateCompiler#method_tables (self) on <self:SeparateErasureCompiler> */
7974 var137 = self->attrs[COLOR_nitc__separate_compiler__SeparateCompiler___method_tables].val; /* _method_tables on <self:SeparateErasureCompiler> */
7975 if (unlikely(var137 == NULL)) {
7976 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _method_tables");
7977 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_compiler, 1067);
7978 fatal_exit(1);
7979 }
7980 var135 = var137;
7981 RET_LABEL136:(void)0;
7982 }
7983 }
7984 var_138 = var135;
7985 {
7986 var139 = ((val*(*)(val* self))((((long)var_138&3)?class_info[((long)var_138&3)]:var_138->class)->vft[COLOR_core__abstract_collection__MapRead__iterator]))(var_138); /* iterator on <var_138:Map[MClass, Array[nullable MPropDef]]>*/
7987 }
7988 var_140 = var139;
7989 for(;;) {
7990 {
7991 var141 = ((short int(*)(val* self))((((long)var_140&3)?class_info[((long)var_140&3)]:var_140->class)->vft[COLOR_core__abstract_collection__MapIterator__is_ok]))(var_140); /* is_ok on <var_140:MapIterator[MClass, Array[nullable MPropDef]]>*/
7992 }
7993 if (var141){
7994 } else {
7995 goto BREAK_label142;
7996 }
7997 {
7998 var143 = ((val*(*)(val* self))((((long)var_140&3)?class_info[((long)var_140&3)]:var_140->class)->vft[COLOR_core__abstract_collection__MapIterator__key]))(var_140); /* key on <var_140:MapIterator[MClass, Array[nullable MPropDef]]>*/
7999 }
8000 var_t144 = var143;
8001 {
8002 var145 = ((val*(*)(val* self))((((long)var_140&3)?class_info[((long)var_140&3)]:var_140->class)->vft[COLOR_core__abstract_collection__MapIterator__item]))(var_140); /* item on <var_140:MapIterator[MClass, Array[nullable MPropDef]]>*/
8003 }
8004 var_table146 = var145;
8005 {
8006 { /* Inline array#AbstractArrayRead#length (var_table146) on <var_table146:Array[nullable MPropDef]> */
8007 var149 = var_table146->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table146:Array[nullable MPropDef]> */
8008 var147 = var149;
8009 RET_LABEL148:(void)0;
8010 }
8011 }
8012 {
8013 { /* Inline kernel#Int#+ (var_total,var147) on <var_total:Int> */
8014 /* Covariant cast for argument 0 (i) <var147:Int> isa OTHER */
8015 /* <var147:Int> isa OTHER */
8016 var152 = 1; /* easy <var147:Int> isa OTHER*/
8017 if (unlikely(!var152)) {
8018 var_class_name155 = type_core__Int.name;
8019 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name155);
8020 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
8021 fatal_exit(1);
8022 }
8023 var156 = var_total + var147;
8024 var150 = var156;
8025 goto RET_LABEL151;
8026 RET_LABEL151:(void)0;
8027 }
8028 }
8029 var_total = var150;
8030 var_157 = var_table146;
8031 {
8032 var158 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_157);
8033 }
8034 var_159 = var158;
8035 for(;;) {
8036 {
8037 var160 = ((short int(*)(val* self))((((long)var_159&3)?class_info[((long)var_159&3)]:var_159->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_159); /* is_ok on <var_159:IndexedIterator[nullable MPropDef]>*/
8038 }
8039 if (var160){
8040 } else {
8041 goto BREAK_label161;
8042 }
8043 {
8044 var162 = ((val*(*)(val* self))((((long)var_159&3)?class_info[((long)var_159&3)]:var_159->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_159); /* item on <var_159:IndexedIterator[nullable MPropDef]>*/
8045 }
8046 var_e163 = var162;
8047 if (var_e163 == NULL) {
8048 var164 = 1; /* is null */
8049 } else {
8050 var164 = 0; /* arg is null but recv is not */
8051 }
8052 if (0) {
8053 { /* Inline kernel#Object#== (var_e163,((val*)NULL)) on <var_e163:nullable MPropDef> */
8054 var_other = ((val*)NULL);
8055 {
8056 { /* Inline kernel#Object#is_same_instance (var_e163,var_other) on <var_e163:nullable MPropDef(MPropDef)> */
8057 var169 = var_e163 == var_other;
8058 var167 = var169;
8059 goto RET_LABEL168;
8060 RET_LABEL168:(void)0;
8061 }
8062 }
8063 var165 = var167;
8064 goto RET_LABEL166;
8065 RET_LABEL166:(void)0;
8066 }
8067 var164 = var165;
8068 }
8069 if (var164){
8070 {
8071 { /* Inline kernel#Int#+ (var_holes,1l) on <var_holes:Int> */
8072 /* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
8073 /* <1l:Int> isa OTHER */
8074 var172 = 1; /* easy <1l:Int> isa OTHER*/
8075 if (unlikely(!var172)) {
8076 var_class_name175 = type_core__Int.name;
8077 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name175);
8078 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
8079 fatal_exit(1);
8080 }
8081 var176 = var_holes + 1l;
8082 var170 = var176;
8083 goto RET_LABEL171;
8084 RET_LABEL171:(void)0;
8085 }
8086 }
8087 var_holes = var170;
8088 } else {
8089 }
8090 {
8091 ((void(*)(val* self))((((long)var_159&3)?class_info[((long)var_159&3)]:var_159->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_159); /* next on <var_159:IndexedIterator[nullable MPropDef]>*/
8092 }
8093 }
8094 BREAK_label161: (void)0;
8095 {
8096 ((void(*)(val* self))((((long)var_159&3)?class_info[((long)var_159&3)]:var_159->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_159); /* finish on <var_159:IndexedIterator[nullable MPropDef]>*/
8097 }
8098 {
8099 ((void(*)(val* self))((((long)var_140&3)?class_info[((long)var_140&3)]:var_140->class)->vft[COLOR_core__abstract_collection__MapIterator__next]))(var_140); /* next on <var_140:MapIterator[MClass, Array[nullable MPropDef]]>*/
8100 }
8101 }
8102 BREAK_label142: (void)0;
8103 {
8104 { /* Inline abstract_collection#MapIterator#finish (var_140) on <var_140:MapIterator[MClass, Array[nullable MPropDef]]> */
8105 RET_LABEL177:(void)0;
8106 }
8107 }
8108 var178 = glob_sys;
8109 if (unlikely(varonce179==NULL)) {
8110 var180 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
8111 if (likely(varonce181!=NULL)) {
8112 var182 = varonce181;
8113 } else {
8114 var183 = "\t";
8115 var184 = core__flat___NativeString___to_s_full(var183, 1l, 1l);
8116 var182 = var184;
8117 varonce181 = var182;
8118 }
8119 ((struct instance_core__NativeArray*)var180)->values[0]=var182;
8120 if (likely(varonce185!=NULL)) {
8121 var186 = varonce185;
8122 } else {
8123 var187 = "\t";
8124 var188 = core__flat___NativeString___to_s_full(var187, 1l, 1l);
8125 var186 = var188;
8126 varonce185 = var186;
8127 }
8128 ((struct instance_core__NativeArray*)var180)->values[2]=var186;
8129 } else {
8130 var180 = varonce179;
8131 varonce179 = NULL;
8132 }
8133 var189 = core__flat___Int___core__abstract_text__Object__to_s(var_total);
8134 ((struct instance_core__NativeArray*)var180)->values[1]=var189;
8135 var190 = core__flat___Int___core__abstract_text__Object__to_s(var_holes);
8136 ((struct instance_core__NativeArray*)var180)->values[3]=var190;
8137 {
8138 var191 = ((val*(*)(val* self))(var180->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var180); /* native_to_s on <var180:NativeArray[String]>*/
8139 }
8140 varonce179 = var180;
8141 {
8142 core__file___Sys___print(var178, var191); /* Direct call file#Sys#print on <var178:Sys>*/
8143 }
8144 var192 = glob_sys;
8145 if (likely(varonce193!=NULL)) {
8146 var194 = varonce193;
8147 } else {
8148 var195 = "# size of attributes tables";
8149 var196 = core__flat___NativeString___to_s_full(var195, 27l, 27l);
8150 var194 = var196;
8151 varonce193 = var194;
8152 }
8153 {
8154 core__file___Sys___print(var192, var194); /* Direct call file#Sys#print on <var192:Sys>*/
8155 }
8156 var197 = glob_sys;
8157 if (likely(varonce198!=NULL)) {
8158 var199 = varonce198;
8159 } else {
8160 var200 = "\ttotal \tholes";
8161 var201 = core__flat___NativeString___to_s_full(var200, 13l, 13l);
8162 var199 = var201;
8163 varonce198 = var199;
8164 }
8165 {
8166 core__file___Sys___print(var197, var199); /* Direct call file#Sys#print on <var197:Sys>*/
8167 }
8168 var_total = 0l;
8169 var_holes = 0l;
8170 {
8171 { /* Inline separate_compiler#SeparateCompiler#attr_tables (self) on <self:SeparateErasureCompiler> */
8172 var204 = self->attrs[COLOR_nitc__separate_compiler__SeparateCompiler___attr_tables].val; /* _attr_tables on <self:SeparateErasureCompiler> */
8173 if (unlikely(var204 == NULL)) {
8174 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _attr_tables");
8175 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_compiler, 1068);
8176 fatal_exit(1);
8177 }
8178 var202 = var204;
8179 RET_LABEL203:(void)0;
8180 }
8181 }
8182 var_205 = var202;
8183 {
8184 var206 = ((val*(*)(val* self))((((long)var_205&3)?class_info[((long)var_205&3)]:var_205->class)->vft[COLOR_core__abstract_collection__MapRead__iterator]))(var_205); /* iterator on <var_205:Map[MClass, Array[nullable MProperty]]>*/
8185 }
8186 var_207 = var206;
8187 for(;;) {
8188 {
8189 var208 = ((short int(*)(val* self))((((long)var_207&3)?class_info[((long)var_207&3)]:var_207->class)->vft[COLOR_core__abstract_collection__MapIterator__is_ok]))(var_207); /* is_ok on <var_207:MapIterator[MClass, Array[nullable MProperty]]>*/
8190 }
8191 if (var208){
8192 } else {
8193 goto BREAK_label209;
8194 }
8195 {
8196 var210 = ((val*(*)(val* self))((((long)var_207&3)?class_info[((long)var_207&3)]:var_207->class)->vft[COLOR_core__abstract_collection__MapIterator__key]))(var_207); /* key on <var_207:MapIterator[MClass, Array[nullable MProperty]]>*/
8197 }
8198 var_t211 = var210;
8199 {
8200 var212 = ((val*(*)(val* self))((((long)var_207&3)?class_info[((long)var_207&3)]:var_207->class)->vft[COLOR_core__abstract_collection__MapIterator__item]))(var_207); /* item on <var_207:MapIterator[MClass, Array[nullable MProperty]]>*/
8201 }
8202 var_table213 = var212;
8203 {
8204 { /* Inline array#AbstractArrayRead#length (var_table213) on <var_table213:Array[nullable MProperty]> */
8205 var216 = var_table213->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_table213:Array[nullable MProperty]> */
8206 var214 = var216;
8207 RET_LABEL215:(void)0;
8208 }
8209 }
8210 {
8211 { /* Inline kernel#Int#+ (var_total,var214) on <var_total:Int> */
8212 /* Covariant cast for argument 0 (i) <var214:Int> isa OTHER */
8213 /* <var214:Int> isa OTHER */
8214 var219 = 1; /* easy <var214:Int> isa OTHER*/
8215 if (unlikely(!var219)) {
8216 var_class_name222 = type_core__Int.name;
8217 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name222);
8218 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
8219 fatal_exit(1);
8220 }
8221 var223 = var_total + var214;
8222 var217 = var223;
8223 goto RET_LABEL218;
8224 RET_LABEL218:(void)0;
8225 }
8226 }
8227 var_total = var217;
8228 var_224 = var_table213;
8229 {
8230 var225 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_224);
8231 }
8232 var_226 = var225;
8233 for(;;) {
8234 {
8235 var227 = ((short int(*)(val* self))((((long)var_226&3)?class_info[((long)var_226&3)]:var_226->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_226); /* is_ok on <var_226:IndexedIterator[nullable MProperty]>*/
8236 }
8237 if (var227){
8238 } else {
8239 goto BREAK_label228;
8240 }
8241 {
8242 var229 = ((val*(*)(val* self))((((long)var_226&3)?class_info[((long)var_226&3)]:var_226->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_226); /* item on <var_226:IndexedIterator[nullable MProperty]>*/
8243 }
8244 var_e230 = var229;
8245 if (var_e230 == NULL) {
8246 var231 = 1; /* is null */
8247 } else {
8248 var231 = 0; /* arg is null but recv is not */
8249 }
8250 if (0) {
8251 { /* Inline kernel#Object#== (var_e230,((val*)NULL)) on <var_e230:nullable MProperty> */
8252 var_other = ((val*)NULL);
8253 {
8254 { /* Inline kernel#Object#is_same_instance (var_e230,var_other) on <var_e230:nullable MProperty(MProperty)> */
8255 var236 = var_e230 == var_other;
8256 var234 = var236;
8257 goto RET_LABEL235;
8258 RET_LABEL235:(void)0;
8259 }
8260 }
8261 var232 = var234;
8262 goto RET_LABEL233;
8263 RET_LABEL233:(void)0;
8264 }
8265 var231 = var232;
8266 }
8267 if (var231){
8268 {
8269 { /* Inline kernel#Int#+ (var_holes,1l) on <var_holes:Int> */
8270 /* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
8271 /* <1l:Int> isa OTHER */
8272 var239 = 1; /* easy <1l:Int> isa OTHER*/
8273 if (unlikely(!var239)) {
8274 var_class_name242 = type_core__Int.name;
8275 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name242);
8276 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
8277 fatal_exit(1);
8278 }
8279 var243 = var_holes + 1l;
8280 var237 = var243;
8281 goto RET_LABEL238;
8282 RET_LABEL238:(void)0;
8283 }
8284 }
8285 var_holes = var237;
8286 } else {
8287 }
8288 {
8289 ((void(*)(val* self))((((long)var_226&3)?class_info[((long)var_226&3)]:var_226->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_226); /* next on <var_226:IndexedIterator[nullable MProperty]>*/
8290 }
8291 }
8292 BREAK_label228: (void)0;
8293 {
8294 ((void(*)(val* self))((((long)var_226&3)?class_info[((long)var_226&3)]:var_226->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_226); /* finish on <var_226:IndexedIterator[nullable MProperty]>*/
8295 }
8296 {
8297 ((void(*)(val* self))((((long)var_207&3)?class_info[((long)var_207&3)]:var_207->class)->vft[COLOR_core__abstract_collection__MapIterator__next]))(var_207); /* next on <var_207:MapIterator[MClass, Array[nullable MProperty]]>*/
8298 }
8299 }
8300 BREAK_label209: (void)0;
8301 {
8302 { /* Inline abstract_collection#MapIterator#finish (var_207) on <var_207:MapIterator[MClass, Array[nullable MProperty]]> */
8303 RET_LABEL244:(void)0;
8304 }
8305 }
8306 var245 = glob_sys;
8307 if (unlikely(varonce246==NULL)) {
8308 var247 = NEW_core__NativeArray(4l, &type_core__NativeArray__core__String);
8309 if (likely(varonce248!=NULL)) {
8310 var249 = varonce248;
8311 } else {
8312 var250 = "\t";
8313 var251 = core__flat___NativeString___to_s_full(var250, 1l, 1l);
8314 var249 = var251;
8315 varonce248 = var249;
8316 }
8317 ((struct instance_core__NativeArray*)var247)->values[0]=var249;
8318 if (likely(varonce252!=NULL)) {
8319 var253 = varonce252;
8320 } else {
8321 var254 = "\t";
8322 var255 = core__flat___NativeString___to_s_full(var254, 1l, 1l);
8323 var253 = var255;
8324 varonce252 = var253;
8325 }
8326 ((struct instance_core__NativeArray*)var247)->values[2]=var253;
8327 } else {
8328 var247 = varonce246;
8329 varonce246 = NULL;
8330 }
8331 var256 = core__flat___Int___core__abstract_text__Object__to_s(var_total);
8332 ((struct instance_core__NativeArray*)var247)->values[1]=var256;
8333 var257 = core__flat___Int___core__abstract_text__Object__to_s(var_holes);
8334 ((struct instance_core__NativeArray*)var247)->values[3]=var257;
8335 {
8336 var258 = ((val*(*)(val* self))(var247->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var247); /* native_to_s on <var247:NativeArray[String]>*/
8337 }
8338 varonce246 = var247;
8339 {
8340 core__file___Sys___print(var245, var258); /* Direct call file#Sys#print on <var245:Sys>*/
8341 }
8342 RET_LABEL:;
8343 }
8344 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: SeparateErasureCompilerVisitor, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
8345 val* nitc___nitc__SeparateErasureCompilerVisitor___nitc__abstract_compiler__AbstractCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
8346 val* var /* : nullable RuntimeVariable */;
8347 val* var_callsite /* var callsite: CallSite */;
8348 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
8349 val* var1 /* : nullable RuntimeVariable */;
8350 val* var_res /* var res: nullable RuntimeVariable */;
8351 short int var2 /* : Bool */;
8352 short int var3 /* : Bool */;
8353 short int var5 /* : Bool */;
8354 short int var_ /* var : Bool */;
8355 val* var6 /* : AbstractCompiler */;
8356 val* var8 /* : AbstractCompiler */;
8357 short int var9 /* : Bool */;
8358 int cltype;
8359 int idtype;
8360 const char* var_class_name;
8361 val* var10 /* : ModelBuilder */;
8362 val* var12 /* : ModelBuilder */;
8363 val* var13 /* : ToolContext */;
8364 val* var15 /* : ToolContext */;
8365 val* var16 /* : OptionBool */;
8366 val* var18 /* : OptionBool */;
8367 val* var19 /* : nullable Object */;
8368 val* var21 /* : nullable Object */;
8369 short int var22 /* : Bool */;
8370 short int var23 /* : Bool */;
8371 short int var24 /* : Bool */;
8372 short int var25 /* : Bool */;
8373 val* var_other /* var other: nullable Object */;
8374 short int var27 /* : Bool */;
8375 short int var28 /* : Bool */;
8376 val* var29 /* : MSignature */;
8377 val* var31 /* : MSignature */;
8378 val* var32 /* : nullable MType */;
8379 val* var34 /* : nullable MType */;
8380 val* var_mtype /* var mtype: nullable MType */;
8381 short int var35 /* : Bool */;
8382 short int var36 /* : Bool */;
8383 short int var38 /* : Bool */;
8384 short int var39 /* : Bool */;
8385 val* var40 /* : NativeArray[String] */;
8386 static val* varonce;
8387 static val* varonce41;
8388 val* var42 /* : String */;
8389 char* var43 /* : NativeString */;
8390 val* var44 /* : String */;
8391 static val* varonce45;
8392 val* var46 /* : String */;
8393 char* var47 /* : NativeString */;
8394 val* var48 /* : String */;
8395 static val* varonce49;
8396 val* var50 /* : String */;
8397 char* var51 /* : NativeString */;
8398 val* var52 /* : String */;
8399 val* var53 /* : String */;
8400 val* var54 /* : String */;
8401 val* var55 /* : String */;
8402 static val* varonce56;
8403 val* var57 /* : String */;
8404 char* var58 /* : NativeString */;
8405 val* var59 /* : String */;
8406 val* var60 /* : RuntimeVariable */;
8407 val* var_cond /* var cond: RuntimeVariable */;
8408 val* var62 /* : NativeArray[String] */;
8409 static val* varonce61;
8410 static val* varonce63;
8411 val* var64 /* : String */;
8412 char* var65 /* : NativeString */;
8413 val* var66 /* : String */;
8414 static val* varonce67;
8415 val* var68 /* : String */;
8416 char* var69 /* : NativeString */;
8417 val* var70 /* : String */;
8418 val* var71 /* : String */;
8419 val* var72 /* : String */;
8420 static val* varonce73;
8421 val* var74 /* : String */;
8422 char* var75 /* : NativeString */;
8423 val* var76 /* : String */;
8424 static val* varonce77;
8425 val* var78 /* : String */;
8426 char* var79 /* : NativeString */;
8427 val* var80 /* : String */;
8428 var_callsite = p0;
8429 var_arguments = p1;
8430 {
8431 var1 = ((val*(*)(val* self, val* p0, val* p1))(self->class->vft[COLOR_nitc___nitc__SeparateErasureCompilerVisitor___nitc__abstract_compiler__AbstractCompilerVisitor__compile_callsite]))(self, p0, p1); /* compile_callsite on <self:SeparateErasureCompilerVisitor>*/
8432 }
8433 var_res = var1;
8434 {
8435 { /* Inline typing#CallSite#erasure_cast (var_callsite) on <var_callsite:CallSite> */
8436 var5 = var_callsite->attrs[COLOR_nitc__typing__CallSite___erasure_cast].s; /* _erasure_cast on <var_callsite:CallSite> */
8437 var3 = var5;
8438 RET_LABEL4:(void)0;
8439 }
8440 }
8441 var_ = var3;
8442 if (var3){
8443 {
8444 { /* Inline abstract_compiler#AbstractCompilerVisitor#compiler (self) on <self:SeparateErasureCompilerVisitor> */
8445 var8 = self->attrs[COLOR_nitc__abstract_compiler__AbstractCompilerVisitor___compiler].val; /* _compiler on <self:SeparateErasureCompilerVisitor> */
8446 if (unlikely(var8 == NULL)) {
8447 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compiler");
8448 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 1133);
8449 fatal_exit(1);
8450 }
8451 var6 = var8;
8452 RET_LABEL7:(void)0;
8453 }
8454 }
8455 /* <var6:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
8456 cltype = type_nitc__SeparateErasureCompiler.color;
8457 idtype = type_nitc__SeparateErasureCompiler.id;
8458 if(cltype >= var6->type->table_size) {
8459 var9 = 0;
8460 } else {
8461 var9 = var6->type->type_table[cltype] == idtype;
8462 }
8463 if (unlikely(!var9)) {
8464 var_class_name = var6 == NULL ? "null" : var6->type->name;
8465 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name);
8466 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 480);
8467 fatal_exit(1);
8468 }
8469 {
8470 { /* Inline abstract_compiler#AbstractCompiler#modelbuilder (var6) on <var6:SeparateCompiler(SeparateErasureCompiler)> */
8471 var12 = var6->attrs[COLOR_nitc__abstract_compiler__AbstractCompiler___modelbuilder].val; /* _modelbuilder on <var6:SeparateCompiler(SeparateErasureCompiler)> */
8472 if (unlikely(var12 == NULL)) {
8473 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
8474 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__abstract_compiler, 538);
8475 fatal_exit(1);
8476 }
8477 var10 = var12;
8478 RET_LABEL11:(void)0;
8479 }
8480 }
8481 {
8482 { /* Inline modelbuilder_base#ModelBuilder#toolcontext (var10) on <var10:ModelBuilder> */
8483 var15 = var10->attrs[COLOR_nitc__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <var10:ModelBuilder> */
8484 if (unlikely(var15 == NULL)) {
8485 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
8486 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__modelbuilder_base, 47);
8487 fatal_exit(1);
8488 }
8489 var13 = var15;
8490 RET_LABEL14:(void)0;
8491 }
8492 }
8493 {
8494 { /* Inline separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast (var13) on <var13:ToolContext> */
8495 var18 = var13->attrs[COLOR_nitc__separate_erasure_compiler__ToolContext___opt_no_check_erasure_cast].val; /* _opt_no_check_erasure_cast on <var13:ToolContext> */
8496 if (unlikely(var18 == NULL)) {
8497 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_erasure_cast");
8498 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 26);
8499 fatal_exit(1);
8500 }
8501 var16 = var18;
8502 RET_LABEL17:(void)0;
8503 }
8504 }
8505 {
8506 { /* Inline opts#Option#value (var16) on <var16:OptionBool> */
8507 var21 = var16->attrs[COLOR_opts__Option___value].val; /* _value on <var16:OptionBool> */
8508 var19 = var21;
8509 RET_LABEL20:(void)0;
8510 }
8511 }
8512 var22 = (short int)((long)(var19)>>2);
8513 var23 = !var22;
8514 var2 = var23;
8515 } else {
8516 var2 = var_;
8517 }
8518 if (var2){
8519 if (var_res == NULL) {
8520 var24 = 0; /* is null */
8521 } else {
8522 var24 = 1; /* arg is null and recv is not */
8523 }
8524 if (0) {
8525 { /* Inline kernel#Object#!= (var_res,((val*)NULL)) on <var_res:nullable RuntimeVariable> */
8526 var_other = ((val*)NULL);
8527 {
8528 var27 = ((short int(*)(val* self, val* p0))(var_res->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_res, var_other); /* == on <var_res:nullable RuntimeVariable(RuntimeVariable)>*/
8529 }
8530 var28 = !var27;
8531 var25 = var28;
8532 goto RET_LABEL26;
8533 RET_LABEL26:(void)0;
8534 }
8535 var24 = var25;
8536 }
8537 if (unlikely(!var24)) {
8538 PRINT_ERROR("Runtime error: %s", "Assert failed");
8539 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 481);
8540 fatal_exit(1);
8541 }
8542 {
8543 { /* Inline typing#CallSite#msignature (var_callsite) on <var_callsite:CallSite> */
8544 var31 = var_callsite->attrs[COLOR_nitc__typing__CallSite___msignature].val; /* _msignature on <var_callsite:CallSite> */
8545 if (unlikely(var31 == NULL)) {
8546 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
8547 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__typing, 660);
8548 fatal_exit(1);
8549 }
8550 var29 = var31;
8551 RET_LABEL30:(void)0;
8552 }
8553 }
8554 {
8555 { /* Inline model#MSignature#return_mtype (var29) on <var29:MSignature> */
8556 var34 = var29->attrs[COLOR_nitc__model__MSignature___return_mtype].val; /* _return_mtype on <var29:MSignature> */
8557 var32 = var34;
8558 RET_LABEL33:(void)0;
8559 }
8560 }
8561 var_mtype = var32;
8562 if (var_mtype == NULL) {
8563 var35 = 0; /* is null */
8564 } else {
8565 var35 = 1; /* arg is null and recv is not */
8566 }
8567 if (0) {
8568 { /* Inline kernel#Object#!= (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
8569 var_other = ((val*)NULL);
8570 {
8571 var38 = ((short int(*)(val* self, val* p0))(var_mtype->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_mtype, var_other); /* == on <var_mtype:nullable MType(MType)>*/
8572 }
8573 var39 = !var38;
8574 var36 = var39;
8575 goto RET_LABEL37;
8576 RET_LABEL37:(void)0;
8577 }
8578 var35 = var36;
8579 }
8580 if (unlikely(!var35)) {
8581 PRINT_ERROR("Runtime error: %s", "Assert failed");
8582 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__separate_erasure_compiler, 483);
8583 fatal_exit(1);
8584 }
8585 if (unlikely(varonce==NULL)) {
8586 var40 = NEW_core__NativeArray(5l, &type_core__NativeArray__core__String);
8587 if (likely(varonce41!=NULL)) {
8588 var42 = varonce41;
8589 } else {
8590 var43 = "/* Erasure cast for return ";
8591 var44 = core__flat___NativeString___to_s_full(var43, 27l, 27l);
8592 var42 = var44;
8593 varonce41 = var42;
8594 }
8595 ((struct instance_core__NativeArray*)var40)->values[0]=var42;
8596 if (likely(varonce45!=NULL)) {
8597 var46 = varonce45;
8598 } else {
8599 var47 = " isa ";
8600 var48 = core__flat___NativeString___to_s_full(var47, 5l, 5l);
8601 var46 = var48;
8602 varonce45 = var46;
8603 }
8604 ((struct instance_core__NativeArray*)var40)->values[2]=var46;
8605 if (likely(varonce49!=NULL)) {
8606 var50 = varonce49;
8607 } else {
8608 var51 = " */";
8609 var52 = core__flat___NativeString___to_s_full(var51, 3l, 3l);
8610 var50 = var52;
8611 varonce49 = var50;
8612 }
8613 ((struct instance_core__NativeArray*)var40)->values[4]=var50;
8614 } else {
8615 var40 = varonce;
8616 varonce = NULL;
8617 }
8618 {
8619 var53 = ((val*(*)(val* self))(var_res->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_res); /* to_s on <var_res:nullable RuntimeVariable(RuntimeVariable)>*/
8620 }
8621 ((struct instance_core__NativeArray*)var40)->values[1]=var53;
8622 {
8623 var54 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_mtype); /* to_s on <var_mtype:nullable MType(MType)>*/
8624 }
8625 ((struct instance_core__NativeArray*)var40)->values[3]=var54;
8626 {
8627 var55 = ((val*(*)(val* self))(var40->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var40); /* native_to_s on <var40:NativeArray[String]>*/
8628 }
8629 varonce = var40;
8630 {
8631 nitc___nitc__AbstractCompilerVisitor___add(self, var55); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
8632 }
8633 if (likely(varonce56!=NULL)) {
8634 var57 = varonce56;
8635 } else {
8636 var58 = "erasure";
8637 var59 = core__flat___NativeString___to_s_full(var58, 7l, 7l);
8638 var57 = var59;
8639 varonce56 = var57;
8640 }
8641 {
8642 var60 = nitc___nitc__SeparateErasureCompilerVisitor___nitc__abstract_compiler__AbstractCompilerVisitor__type_test(self, var_res, var_mtype, var57);
8643 }
8644 var_cond = var60;
8645 if (unlikely(varonce61==NULL)) {
8646 var62 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
8647 if (likely(varonce63!=NULL)) {
8648 var64 = varonce63;
8649 } else {
8650 var65 = "if (!";
8651 var66 = core__flat___NativeString___to_s_full(var65, 5l, 5l);
8652 var64 = var66;
8653 varonce63 = var64;
8654 }
8655 ((struct instance_core__NativeArray*)var62)->values[0]=var64;
8656 if (likely(varonce67!=NULL)) {
8657 var68 = varonce67;
8658 } else {
8659 var69 = ") {";
8660 var70 = core__flat___NativeString___to_s_full(var69, 3l, 3l);
8661 var68 = var70;
8662 varonce67 = var68;
8663 }
8664 ((struct instance_core__NativeArray*)var62)->values[2]=var68;
8665 } else {
8666 var62 = varonce61;
8667 varonce61 = NULL;
8668 }
8669 {
8670 var71 = ((val*(*)(val* self))(var_cond->class->vft[COLOR_core__abstract_text__Object__to_s]))(var_cond); /* to_s on <var_cond:RuntimeVariable>*/
8671 }
8672 ((struct instance_core__NativeArray*)var62)->values[1]=var71;
8673 {
8674 var72 = ((val*(*)(val* self))(var62->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var62); /* native_to_s on <var62:NativeArray[String]>*/
8675 }
8676 varonce61 = var62;
8677 {
8678 nitc___nitc__AbstractCompilerVisitor___add(self, var72); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
8679 }
8680 if (likely(varonce73!=NULL)) {
8681 var74 = varonce73;
8682 } else {
8683 var75 = "Cast failed";
8684 var76 = core__flat___NativeString___to_s_full(var75, 11l, 11l);
8685 var74 = var76;
8686 varonce73 = var74;
8687 }
8688 {
8689 nitc___nitc__AbstractCompilerVisitor___add_abort(self, var74); /* Direct call abstract_compiler#AbstractCompilerVisitor#add_abort on <self:SeparateErasureCompilerVisitor>*/
8690 }
8691 if (likely(varonce77!=NULL)) {
8692 var78 = varonce77;
8693 } else {
8694 var79 = "}";
8695 var80 = core__flat___NativeString___to_s_full(var79, 1l, 1l);
8696 var78 = var80;
8697 varonce77 = var78;
8698 }
8699 {
8700 nitc___nitc__AbstractCompilerVisitor___add(self, var78); /* Direct call abstract_compiler#AbstractCompilerVisitor#add on <self:SeparateErasureCompilerVisitor>*/
8701 }
8702 } else {
8703 }
8704 var = var_res;
8705 goto RET_LABEL;
8706 RET_LABEL:;
8707 return var;
8708 }
8709 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: SeparateErasureCompilerVisitor, MClassType): RuntimeVariable */
8710 val* nitc___nitc__SeparateErasureCompilerVisitor___nitc__abstract_compiler__AbstractCompilerVisitor__init_instance(val* self, val* p0) {
8711 val* var /* : RuntimeVariable */;
8712 val* var_mtype /* var mtype: MClassType */;
8713 val* var1 /* : NativeArray[String] */;
8714 static val* varonce;
8715 static val* varonce2;
8716 val* var3 /* : String */;
8717 char* var4 /* : NativeString */;
8718 val* var5 /* : String */;
8719 val* var6 /* : MClass */;
8720 val* var8 /* : MClass */;
8721 val* var9 /* : String */;
8722 val* var10 /* : String */;
8723 val* var12 /* : NativeArray[String] */;
8724 static val* varonce11;
8725 static val* varonce13;
8726 val* var14 /* : String */;
8727 char* var15 /* : NativeString */;
8728 val* var16 /* : String */;
8729 static val* varonce17;
8730 val* var18 /* : String */;
8731 char* var19 /* : NativeString */;
8732 val* var20 /* : String */;
8733 val* var21 /* : MClass */;
8734 val* var23 /* : MClass */;
8735 val* var24 /* : String */;
8736 val* var25 /* : String */;
8737 val* var26 /* : RuntimeVariable */;
8738 var_mtype = p0;
8739 if (unlikely(varonce==NULL)) {
8740 var1 = NEW_core__NativeArray(2l, &type_core__NativeArray__core__String);
8741 if (likely(varonce2!=NULL)) {
8742 var3 = varonce2;
8743 } else {
8744 var4 = "NEW_";
8745 var5 = core__flat___NativeString___to_s_full(var4, 4l, 4l);
8746 var3 = var5;
8747 varonce2 = var3;
8748 }
8749 ((struct instance_core__NativeArray*)var1)->values[0]=var3;
8750 } else {
8751 var1 = varonce;
8752 varonce = NULL;
8753 }
8754 {
8755 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
8756 var8 = var_mtype->attrs[COLOR_nitc__model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
8757 if (unlikely(var8 == NULL)) {
8758 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
8759 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1163);
8760 fatal_exit(1);
8761 }
8762 var6 = var8;
8763 RET_LABEL7:(void)0;
8764 }
8765 }
8766 {
8767 var9 = nitc___nitc__MClass___nitc__model_base__MEntity__c_name(var6);
8768 }
8769 ((struct instance_core__NativeArray*)var1)->values[1]=var9;
8770 {
8771 var10 = ((val*(*)(val* self))(var1->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
8772 }
8773 varonce = var1;
8774 {
8775 nitc___nitc__AbstractCompilerVisitor___require_declaration(self, var10); /* Direct call abstract_compiler#AbstractCompilerVisitor#require_declaration on <self:SeparateErasureCompilerVisitor>*/
8776 }
8777 if (unlikely(varonce11==NULL)) {
8778 var12 = NEW_core__NativeArray(3l, &type_core__NativeArray__core__String);
8779 if (likely(varonce13!=NULL)) {
8780 var14 = varonce13;
8781 } else {
8782 var15 = "NEW_";
8783 var16 = core__flat___NativeString___to_s_full(var15, 4l, 4l);
8784 var14 = var16;
8785 varonce13 = var14;
8786 }
8787 ((struct instance_core__NativeArray*)var12)->values[0]=var14;
8788 if (likely(varonce17!=NULL)) {
8789 var18 = varonce17;
8790 } else {
8791 var19 = "()";
8792 var20 = core__flat___NativeString___to_s_full(var19, 2l, 2l);
8793 var18 = var20;
8794 varonce17 = var18;
8795 }
8796 ((struct instance_core__NativeArray*)var12)->values[2]=var18;
8797 } else {
8798 var12 = varonce11;
8799 varonce11 = NULL;
8800 }
8801 {
8802 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MClassType> */
8803 var23 = var_mtype->attrs[COLOR_nitc__model__MClassType___mclass].val; /* _mclass on <var_mtype:MClassType> */
8804 if (unlikely(var23 == NULL)) {
8805 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
8806 PRINT_ERROR(" (%s:%d)\n", FILE_nitc__model, 1163);
8807 fatal_exit(1);
8808 }
8809 var21 = var23;
8810 RET_LABEL22:(void)0;
8811 }
8812 }
8813 {
8814 var24 = nitc___nitc__MClass___nitc__model_base__MEntity__c_name(var21);
8815 }
8816 ((struct instance_core__NativeArray*)var12)->values[1]=var24;
8817 {
8818 var25 = ((val*(*)(val* self))(var12->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var12); /* native_to_s on <var12:NativeArray[String]>*/
8819 }
8820 varonce11 = var12;
8821 {
8822 var26 = nitc___nitc__AbstractCompilerVisitor___new_expr(self, var25, var_mtype);
8823 }
8824 var = var26;
8825 goto RET_LABEL;
8826 RET_LABEL:;
8827 return var;
8828 }