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