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