tests: update metrics tests
[nit.git] / c_src / separate_erasure_compiler.sep.1.c
1 #include "separate_erasure_compiler.sep.0.h"
2 /* method separate_erasure_compiler#ToolContext#opt_erasure for (self: ToolContext): OptionBool */
3 val* separate_erasure_compiler__ToolContext__opt_erasure(val* self) {
4 val* var /* : OptionBool */;
5 val* var1 /* : OptionBool */;
6 var1 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___64dopt_erasure].val; /* @opt_erasure on <self:ToolContext> */
7 if (var1 == NULL) {
8 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_erasure");
9 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 22);
10 show_backtrace(1);
11 }
12 var = var1;
13 RET_LABEL:;
14 return var;
15 }
16 /* method separate_erasure_compiler#ToolContext#opt_erasure for (self: Object): OptionBool */
17 val* VIRTUAL_separate_erasure_compiler__ToolContext__opt_erasure(val* self) {
18 val* var /* : OptionBool */;
19 val* var1 /* : OptionBool */;
20 var1 = separate_erasure_compiler__ToolContext__opt_erasure(self);
21 var = var1;
22 RET_LABEL:;
23 return var;
24 }
25 /* method separate_erasure_compiler#ToolContext#opt_erasure= for (self: ToolContext, OptionBool) */
26 void separate_erasure_compiler__ToolContext__opt_erasure_61d(val* self, val* p0) {
27 self->attrs[COLOR_separate_erasure_compiler__ToolContext___64dopt_erasure].val = p0; /* @opt_erasure on <self:ToolContext> */
28 RET_LABEL:;
29 }
30 /* method separate_erasure_compiler#ToolContext#opt_erasure= for (self: Object, OptionBool) */
31 void VIRTUAL_separate_erasure_compiler__ToolContext__opt_erasure_61d(val* self, val* p0) {
32 separate_erasure_compiler__ToolContext__opt_erasure_61d(self, p0);
33 RET_LABEL:;
34 }
35 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast for (self: ToolContext): OptionBool */
36 val* separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast(val* self) {
37 val* var /* : OptionBool */;
38 val* var1 /* : OptionBool */;
39 var1 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___64dopt_no_check_erasure_cast].val; /* @opt_no_check_erasure_cast on <self:ToolContext> */
40 if (var1 == NULL) {
41 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_no_check_erasure_cast");
42 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 24);
43 show_backtrace(1);
44 }
45 var = var1;
46 RET_LABEL:;
47 return var;
48 }
49 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast for (self: Object): OptionBool */
50 val* VIRTUAL_separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast(val* self) {
51 val* var /* : OptionBool */;
52 val* var1 /* : OptionBool */;
53 var1 = separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast(self);
54 var = var1;
55 RET_LABEL:;
56 return var;
57 }
58 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast= for (self: ToolContext, OptionBool) */
59 void separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast_61d(val* self, val* p0) {
60 self->attrs[COLOR_separate_erasure_compiler__ToolContext___64dopt_no_check_erasure_cast].val = p0; /* @opt_no_check_erasure_cast on <self:ToolContext> */
61 RET_LABEL:;
62 }
63 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast= for (self: Object, OptionBool) */
64 void VIRTUAL_separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast_61d(val* self, val* p0) {
65 separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast_61d(self, p0);
66 RET_LABEL:;
67 }
68 /* method separate_erasure_compiler#ToolContext#init for (self: ToolContext) */
69 void separate_erasure_compiler__ToolContext__init(val* self) {
70 val* var /* : OptionContext */;
71 val* var1 /* : OptionBool */;
72 val* var2 /* : OptionBool */;
73 val* var3 /* : Array[Option] */;
74 long var4 /* : Int */;
75 val* var5 /* : NativeArray[Option] */;
76 ((void (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__ToolContext__init]))(self) /* init on <self:ToolContext>*/;
77 var = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
78 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__ToolContext__opt_erasure]))(self) /* opt_erasure on <self:ToolContext>*/;
79 var2 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast]))(self) /* opt_no_check_erasure_cast on <self:ToolContext>*/;
80 var3 = NEW_array__Array(&type_array__Arrayopts__Option);
81 { /* var3 = array_instance Array[Option] */
82 var4 = 2;
83 var5 = NEW_array__NativeArray(var4, &type_array__NativeArrayopts__Option);
84 ((struct instance_array__NativeArray*)var5)->values[0] = (val*) var1;
85 ((struct instance_array__NativeArray*)var5)->values[1] = (val*) var2;
86 ((void (*)(val*, val*, long))(var3->class->vft[COLOR_array__Array__with_native]))(var3, var5, var4) /* with_native on <var3:Array[Option]>*/;
87 }
88 ((void (*)(val*, val*))(var->class->vft[COLOR_opts__OptionContext__add_option]))(var, var3) /* add_option on <var:OptionContext>*/;
89 RET_LABEL:;
90 }
91 /* method separate_erasure_compiler#ToolContext#init for (self: Object) */
92 void VIRTUAL_separate_erasure_compiler__ToolContext__init(val* self) {
93 separate_erasure_compiler__ToolContext__init(self);
94 RET_LABEL:;
95 }
96 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: ModelBuilder, MModule, nullable RapidTypeAnalysis) */
97 void separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
98 val* var_mainmodule /* var mainmodule: MModule */;
99 val* var_runtime_type_analysis /* var runtime_type_analysis: nullable RapidTypeAnalysis */;
100 long var /* : Int */;
101 long var_time0 /* var time0: Int */;
102 val* var1 /* : ToolContext */;
103 static val* varonce;
104 val* var2 /* : String */;
105 char* var3 /* : NativeString */;
106 long var4 /* : Int */;
107 val* var5 /* : String */;
108 long var6 /* : Int */;
109 val* var7 /* : SeparateErasureCompiler */;
110 val* var_compiler /* var compiler: SeparateErasureCompiler */;
111 val* var8 /* : ToolContext */;
112 static val* varonce9;
113 val* var10 /* : String */;
114 char* var11 /* : NativeString */;
115 long var12 /* : Int */;
116 val* var13 /* : String */;
117 long var14 /* : Int */;
118 val* var15 /* : String */;
119 static val* varonce16;
120 val* var17 /* : String */;
121 char* var18 /* : NativeString */;
122 long var19 /* : Int */;
123 val* var20 /* : String */;
124 val* var21 /* : Array[Object] */;
125 long var22 /* : Int */;
126 val* var23 /* : NativeArray[Object] */;
127 val* var24 /* : String */;
128 val* var25 /* : CodeFile */;
129 val* var26 /* : POSetElement[MModule] */;
130 val* var27 /* : Collection[Object] */;
131 val* var28 /* : Iterator[nullable Object] */;
132 short int var29 /* : Bool */;
133 val* var30 /* : nullable Object */;
134 val* var_m /* var m: MModule */;
135 val* var31 /* : Array[MClass] */;
136 val* var32 /* : Iterator[nullable Object] */;
137 short int var33 /* : Bool */;
138 val* var34 /* : nullable Object */;
139 val* var_mclass /* var mclass: MClass */;
140 val* var36 /* : nullable Layout[MVirtualTypeProp] */;
141 val* var37 /* : Map[Object, Int] */;
142 val* var38 /* : String */;
143 static val* varonce39;
144 val* var40 /* : String */;
145 char* var41 /* : NativeString */;
146 long var42 /* : Int */;
147 val* var43 /* : String */;
148 val* var44 /* : Array[Object] */;
149 long var45 /* : Int */;
150 val* var46 /* : NativeArray[Object] */;
151 val* var47 /* : String */;
152 val* var48 /* : CodeFile */;
153 val* var49 /* : POSetElement[MModule] */;
154 val* var50 /* : Collection[Object] */;
155 val* var51 /* : Iterator[nullable Object] */;
156 short int var52 /* : Bool */;
157 val* var53 /* : nullable Object */;
158 val* var_m54 /* var m: MModule */;
159 val* var55 /* : ToolContext */;
160 static val* varonce56;
161 val* var57 /* : String */;
162 char* var58 /* : NativeString */;
163 long var59 /* : Int */;
164 val* var60 /* : String */;
165 val* var61 /* : Array[Object] */;
166 long var62 /* : Int */;
167 val* var63 /* : NativeArray[Object] */;
168 val* var64 /* : String */;
169 long var65 /* : Int */;
170 val* var66 /* : String */;
171 static val* varonce67;
172 val* var68 /* : String */;
173 char* var69 /* : NativeString */;
174 long var70 /* : Int */;
175 val* var71 /* : String */;
176 val* var72 /* : Array[Object] */;
177 long var73 /* : Int */;
178 val* var74 /* : NativeArray[Object] */;
179 val* var75 /* : String */;
180 val* var76 /* : CodeFile */;
181 long var78 /* : Int */;
182 long var_time1 /* var time1: Int */;
183 val* var79 /* : ToolContext */;
184 static val* varonce80;
185 val* var81 /* : String */;
186 char* var82 /* : NativeString */;
187 long var83 /* : Int */;
188 val* var84 /* : String */;
189 long var85 /* : Int */;
190 long var87 /* : Int */;
191 static val* varonce88;
192 val* var89 /* : String */;
193 char* var90 /* : NativeString */;
194 long var91 /* : Int */;
195 val* var92 /* : String */;
196 val* var93 /* : Array[Object] */;
197 long var94 /* : Int */;
198 val* var95 /* : NativeArray[Object] */;
199 val* var96 /* : Object */;
200 val* var97 /* : String */;
201 long var98 /* : Int */;
202 var_mainmodule = p0;
203 var_runtime_type_analysis = p1;
204 var = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
205 var_time0 = var;
206 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
207 if (varonce) {
208 var2 = varonce;
209 } else {
210 var3 = "*** GENERATING C ***";
211 var4 = 20;
212 var5 = string__NativeString__to_s_with_length(var3, var4);
213 var2 = var5;
214 varonce = var2;
215 }
216 var6 = 1;
217 ((void (*)(val*, val*, long))(var1->class->vft[COLOR_toolcontext__ToolContext__info]))(var1, var2, var6) /* info on <var1:ToolContext>*/;
218 var7 = NEW_separate_erasure_compiler__SeparateErasureCompiler(&type_separate_erasure_compiler__SeparateErasureCompiler);
219 ((void (*)(val*, val*, val*, val*))(var7->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__init]))(var7, var_mainmodule, self, var_runtime_type_analysis) /* init on <var7:SeparateErasureCompiler>*/;
220 var_compiler = var7;
221 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_header]))(var_compiler) /* compile_header on <var_compiler:SeparateErasureCompiler>*/;
222 var8 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
223 if (varonce9) {
224 var10 = varonce9;
225 } else {
226 var11 = "Property coloring";
227 var12 = 17;
228 var13 = string__NativeString__to_s_with_length(var11, var12);
229 var10 = var13;
230 varonce9 = var10;
231 }
232 var14 = 2;
233 ((void (*)(val*, val*, long))(var8->class->vft[COLOR_toolcontext__ToolContext__info]))(var8, var10, var14) /* info on <var8:ToolContext>*/;
234 var15 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_mmodule__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
235 if (varonce16) {
236 var17 = varonce16;
237 } else {
238 var18 = ".tables";
239 var19 = 7;
240 var20 = string__NativeString__to_s_with_length(var18, var19);
241 var17 = var20;
242 varonce16 = var17;
243 }
244 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
245 { /* var21 = array_instance Array[Object] */
246 var22 = 2;
247 var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
248 ((struct instance_array__NativeArray*)var23)->values[0] = (val*) var15;
249 ((struct instance_array__NativeArray*)var23)->values[1] = (val*) var17;
250 ((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
251 }
252 var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
253 var25 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var24) /* new_file on <var_compiler:SeparateErasureCompiler>*/;
254 var25;
255 ((void (*)(val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__do_property_coloring]))(var_compiler) /* do_property_coloring on <var_compiler:SeparateErasureCompiler>*/;
256 var26 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_mmodule__MModule__in_importation]))(var_mainmodule) /* in_importation on <var_mainmodule:MModule>*/;
257 var27 = ((val* (*)(val*))(var26->class->vft[COLOR_poset__POSetElement__greaters]))(var26) /* greaters on <var26:POSetElement[MModule]>*/;
258 var28 = ((val* (*)(val*))(var27->class->vft[COLOR_abstract_collection__Collection__iterator]))(var27) /* iterator on <var27:Collection[Object](Collection[MModule])>*/;
259 for(;;) {
260 var29 = ((short int (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var28) /* is_ok on <var28:Iterator[nullable Object]>*/;
261 if(!var29) break;
262 var30 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__item]))(var28) /* item on <var28:Iterator[nullable Object]>*/;
263 var_m = var30;
264 var31 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MModule__intro_mclasses]))(var_m) /* intro_mclasses on <var_m:MModule>*/;
265 var32 = ((val* (*)(val*))(var31->class->vft[COLOR_abstract_collection__Collection__iterator]))(var31) /* iterator on <var31:Array[MClass]>*/;
266 for(;;) {
267 var33 = ((short int (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var32) /* is_ok on <var32:Iterator[nullable Object]>*/;
268 if(!var33) break;
269 var34 = ((val* (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__item]))(var32) /* item on <var32:Iterator[nullable Object]>*/;
270 var_mclass = var34;
271 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_class_to_c]))(var_compiler, var_mclass) /* compile_class_to_c on <var_compiler:SeparateErasureCompiler>*/;
272 CONTINUE_label: (void)0;
273 ((void (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__next]))(var32) /* next on <var32:Iterator[nullable Object]>*/;
274 }
275 BREAK_label: (void)0;
276 CONTINUE_label35: (void)0;
277 ((void (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__next]))(var28) /* next on <var28:Iterator[nullable Object]>*/;
278 }
279 BREAK_label35: (void)0;
280 var36 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(var_compiler) /* vt_layout on <var_compiler:SeparateErasureCompiler>*/;
281 if (var36 == NULL) {
282 fprintf(stderr, "Runtime error: %s", "Reciever is null");
283 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 52);
284 show_backtrace(1);
285 } else {
286 var37 = ((val* (*)(val*))(var36->class->vft[COLOR_layout_builders__Layout__pos]))(var36) /* pos on <var36:nullable Layout[MVirtualTypeProp]>*/;
287 }
288 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_color_consts]))(var_compiler, var37) /* compile_color_consts on <var_compiler:SeparateErasureCompiler>*/;
289 var38 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_mmodule__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
290 if (varonce39) {
291 var40 = varonce39;
292 } else {
293 var41 = ".main";
294 var42 = 5;
295 var43 = string__NativeString__to_s_with_length(var41, var42);
296 var40 = var43;
297 varonce39 = var40;
298 }
299 var44 = NEW_array__Array(&type_array__Arraykernel__Object);
300 { /* var44 = array_instance Array[Object] */
301 var45 = 2;
302 var46 = NEW_array__NativeArray(var45, &type_array__NativeArraykernel__Object);
303 ((struct instance_array__NativeArray*)var46)->values[0] = (val*) var38;
304 ((struct instance_array__NativeArray*)var46)->values[1] = (val*) var40;
305 ((void (*)(val*, val*, long))(var44->class->vft[COLOR_array__Array__with_native]))(var44, var46, var45) /* with_native on <var44:Array[Object]>*/;
306 }
307 var47 = ((val* (*)(val*))(var44->class->vft[COLOR_string__Object__to_s]))(var44) /* to_s on <var44:Array[Object]>*/;
308 var48 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var47) /* new_file on <var_compiler:SeparateErasureCompiler>*/;
309 var48;
310 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_main_function]))(var_compiler) /* compile_main_function on <var_compiler:SeparateErasureCompiler>*/;
311 var49 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_mmodule__MModule__in_importation]))(var_mainmodule) /* in_importation on <var_mainmodule:MModule>*/;
312 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_poset__POSetElement__greaters]))(var49) /* greaters on <var49:POSetElement[MModule]>*/;
313 var51 = ((val* (*)(val*))(var50->class->vft[COLOR_abstract_collection__Collection__iterator]))(var50) /* iterator on <var50:Collection[Object](Collection[MModule])>*/;
314 for(;;) {
315 var52 = ((short int (*)(val*))(var51->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var51) /* is_ok on <var51:Iterator[nullable Object]>*/;
316 if(!var52) break;
317 var53 = ((val* (*)(val*))(var51->class->vft[COLOR_abstract_collection__Iterator__item]))(var51) /* item on <var51:Iterator[nullable Object]>*/;
318 var_m54 = var53;
319 var55 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
320 if (varonce56) {
321 var57 = varonce56;
322 } else {
323 var58 = "Generate C for module ";
324 var59 = 22;
325 var60 = string__NativeString__to_s_with_length(var58, var59);
326 var57 = var60;
327 varonce56 = var57;
328 }
329 var61 = NEW_array__Array(&type_array__Arraykernel__Object);
330 { /* var61 = array_instance Array[Object] */
331 var62 = 2;
332 var63 = NEW_array__NativeArray(var62, &type_array__NativeArraykernel__Object);
333 ((struct instance_array__NativeArray*)var63)->values[0] = (val*) var57;
334 ((struct instance_array__NativeArray*)var63)->values[1] = (val*) var_m54;
335 ((void (*)(val*, val*, long))(var61->class->vft[COLOR_array__Array__with_native]))(var61, var63, var62) /* with_native on <var61:Array[Object]>*/;
336 }
337 var64 = ((val* (*)(val*))(var61->class->vft[COLOR_string__Object__to_s]))(var61) /* to_s on <var61:Array[Object]>*/;
338 var65 = 2;
339 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_toolcontext__ToolContext__info]))(var55, var64, var65) /* info on <var55:ToolContext>*/;
340 var66 = ((val* (*)(val*))(var_m54->class->vft[COLOR_mmodule__MModule__name]))(var_m54) /* name on <var_m54:MModule>*/;
341 if (varonce67) {
342 var68 = varonce67;
343 } else {
344 var69 = ".sep";
345 var70 = 4;
346 var71 = string__NativeString__to_s_with_length(var69, var70);
347 var68 = var71;
348 varonce67 = var68;
349 }
350 var72 = NEW_array__Array(&type_array__Arraykernel__Object);
351 { /* var72 = array_instance Array[Object] */
352 var73 = 2;
353 var74 = NEW_array__NativeArray(var73, &type_array__NativeArraykernel__Object);
354 ((struct instance_array__NativeArray*)var74)->values[0] = (val*) var66;
355 ((struct instance_array__NativeArray*)var74)->values[1] = (val*) var68;
356 ((void (*)(val*, val*, long))(var72->class->vft[COLOR_array__Array__with_native]))(var72, var74, var73) /* with_native on <var72:Array[Object]>*/;
357 }
358 var75 = ((val* (*)(val*))(var72->class->vft[COLOR_string__Object__to_s]))(var72) /* to_s on <var72:Array[Object]>*/;
359 var76 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var75) /* new_file on <var_compiler:SeparateErasureCompiler>*/;
360 var76;
361 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_module_to_c]))(var_compiler, var_m54) /* compile_module_to_c on <var_compiler:SeparateErasureCompiler>*/;
362 CONTINUE_label77: (void)0;
363 ((void (*)(val*))(var51->class->vft[COLOR_abstract_collection__Iterator__next]))(var51) /* next on <var51:Iterator[nullable Object]>*/;
364 }
365 BREAK_label77: (void)0;
366 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__display_stats]))(var_compiler) /* display_stats on <var_compiler:SeparateErasureCompiler>*/;
367 var78 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
368 var_time1 = var78;
369 var79 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
370 if (varonce80) {
371 var81 = varonce80;
372 } else {
373 var82 = "*** END GENERATING C: ";
374 var83 = 22;
375 var84 = string__NativeString__to_s_with_length(var82, var83);
376 var81 = var84;
377 varonce80 = var81;
378 }
379 { /* Inline kernel#Int#- (var_time1,var_time0) */
380 var87 = var_time1 - var_time0;
381 var85 = var87;
382 goto RET_LABEL86;
383 RET_LABEL86:(void)0;
384 }
385 if (varonce88) {
386 var89 = varonce88;
387 } else {
388 var90 = " ***";
389 var91 = 4;
390 var92 = string__NativeString__to_s_with_length(var90, var91);
391 var89 = var92;
392 varonce88 = var89;
393 }
394 var93 = NEW_array__Array(&type_array__Arraykernel__Object);
395 { /* var93 = array_instance Array[Object] */
396 var94 = 3;
397 var95 = NEW_array__NativeArray(var94, &type_array__NativeArraykernel__Object);
398 ((struct instance_array__NativeArray*)var95)->values[0] = (val*) var81;
399 var96 = BOX_kernel__Int(var85); /* autobox from Int to Object */
400 ((struct instance_array__NativeArray*)var95)->values[1] = (val*) var96;
401 ((struct instance_array__NativeArray*)var95)->values[2] = (val*) var89;
402 ((void (*)(val*, val*, long))(var93->class->vft[COLOR_array__Array__with_native]))(var93, var95, var94) /* with_native on <var93:Array[Object]>*/;
403 }
404 var97 = ((val* (*)(val*))(var93->class->vft[COLOR_string__Object__to_s]))(var93) /* to_s on <var93:Array[Object]>*/;
405 var98 = 2;
406 ((void (*)(val*, val*, long))(var79->class->vft[COLOR_toolcontext__ToolContext__info]))(var79, var97, var98) /* info on <var79:ToolContext>*/;
407 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__ModelBuilder__write_and_make]))(self, var_compiler) /* write_and_make on <self:ModelBuilder>*/;
408 RET_LABEL:;
409 }
410 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: Object, MModule, nullable RapidTypeAnalysis) */
411 void VIRTUAL_separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
412 separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(self, p0, p1);
413 RET_LABEL:;
414 }
415 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout for (self: SeparateErasureCompiler): nullable Layout[MClass] */
416 val* separate_erasure_compiler__SeparateErasureCompiler__class_layout(val* self) {
417 val* var /* : nullable Layout[MClass] */;
418 val* var1 /* : nullable Layout[MClass] */;
419 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_layout].val; /* @class_layout on <self:SeparateErasureCompiler> */
420 var = var1;
421 RET_LABEL:;
422 return var;
423 }
424 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout for (self: Object): nullable Layout[MClass] */
425 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_layout(val* self) {
426 val* var /* : nullable Layout[MClass] */;
427 val* var1 /* : nullable Layout[MClass] */;
428 var1 = separate_erasure_compiler__SeparateErasureCompiler__class_layout(self);
429 var = var1;
430 RET_LABEL:;
431 return var;
432 }
433 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout= for (self: SeparateErasureCompiler, nullable Layout[MClass]) */
434 void separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d(val* self, val* p0) {
435 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_layout].val = p0; /* @class_layout on <self:SeparateErasureCompiler> */
436 RET_LABEL:;
437 }
438 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout= for (self: Object, nullable Layout[MClass]) */
439 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d(val* self, val* p0) {
440 separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d(self, p0);
441 RET_LABEL:;
442 }
443 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout for (self: SeparateErasureCompiler): nullable Layout[MVirtualTypeProp] */
444 val* separate_erasure_compiler__SeparateErasureCompiler__vt_layout(val* self) {
445 val* var /* : nullable Layout[MVirtualTypeProp] */;
446 val* var1 /* : nullable Layout[MVirtualTypeProp] */;
447 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_layout].val; /* @vt_layout on <self:SeparateErasureCompiler> */
448 var = var1;
449 RET_LABEL:;
450 return var;
451 }
452 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout for (self: Object): nullable Layout[MVirtualTypeProp] */
453 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_layout(val* self) {
454 val* var /* : nullable Layout[MVirtualTypeProp] */;
455 val* var1 /* : nullable Layout[MVirtualTypeProp] */;
456 var1 = separate_erasure_compiler__SeparateErasureCompiler__vt_layout(self);
457 var = var1;
458 RET_LABEL:;
459 return var;
460 }
461 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout= for (self: SeparateErasureCompiler, nullable Layout[MVirtualTypeProp]) */
462 void separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d(val* self, val* p0) {
463 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_layout].val = p0; /* @vt_layout on <self:SeparateErasureCompiler> */
464 RET_LABEL:;
465 }
466 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout= for (self: Object, nullable Layout[MVirtualTypeProp]) */
467 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d(val* self, val* p0) {
468 separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d(self, p0);
469 RET_LABEL:;
470 }
471 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: SeparateErasureCompiler, MModule, ModelBuilder, nullable RapidTypeAnalysis) */
472 void separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
473 val* var_mainmodule /* var mainmodule: MModule */;
474 val* var_mmbuilder /* var mmbuilder: ModelBuilder */;
475 val* var_runtime_type_analysis /* var runtime_type_analysis: nullable RapidTypeAnalysis */;
476 val* var /* : HashSet[MClass] */;
477 val* var1 /* : Model */;
478 val* var2 /* : Array[MClass] */;
479 val* var_mclasses /* var mclasses: HashSet[MClass] */;
480 val* var3 /* : MClassColorer */;
481 val* var_class_colorer /* var class_colorer: MClassColorer */;
482 val* var4 /* : ModelBuilder */;
483 val* var5 /* : ToolContext */;
484 val* var6 /* : OptionBool */;
485 val* var7 /* : nullable Object */;
486 short int var8 /* : Bool */;
487 val* var9 /* : MClassHasher */;
488 val* var10 /* : PHModOperator */;
489 val* var_layout_builder /* var layout_builder: TypingLayoutBuilder[MClass] */;
490 val* var11 /* : Layout[Object] */;
491 val* var12 /* : ModelBuilder */;
492 val* var13 /* : ToolContext */;
493 val* var14 /* : OptionBool */;
494 val* var15 /* : nullable Object */;
495 short int var16 /* : Bool */;
496 val* var17 /* : MClassHasher */;
497 val* var18 /* : PHAndOperator */;
498 val* var19 /* : Layout[Object] */;
499 val* var20 /* : ModelBuilder */;
500 val* var21 /* : ToolContext */;
501 val* var22 /* : OptionBool */;
502 val* var23 /* : nullable Object */;
503 short int var24 /* : Bool */;
504 val* var25 /* : MClassBMizer */;
505 val* var26 /* : Layout[Object] */;
506 val* var27 /* : Layout[Object] */;
507 val* var28 /* : Map[MClass, Array[nullable MClass]] */;
508 val* var29 /* : HashMap[MClass, Set[MVirtualTypeProp]] */;
509 val* var_vts /* var vts: HashMap[MClass, Set[MVirtualTypeProp]] */;
510 val* var30 /* : Iterator[nullable Object] */;
511 short int var31 /* : Bool */;
512 val* var32 /* : nullable Object */;
513 val* var_mclass /* var mclass: MClass */;
514 val* var33 /* : HashSet[MVirtualTypeProp] */;
515 val* var34 /* : MModule */;
516 val* var35 /* : Set[MProperty] */;
517 val* var36 /* : Iterator[nullable Object] */;
518 short int var37 /* : Bool */;
519 val* var38 /* : nullable Object */;
520 val* var_mprop /* var mprop: MProperty */;
521 short int var39 /* : Bool */;
522 int cltype;
523 int idtype;
524 val* var40 /* : nullable Object */;
525 val* var42 /* : MPropertyColorer[MVirtualTypeProp] */;
526 val* var_vt_coloring /* var vt_coloring: MPropertyColorer[MVirtualTypeProp] */;
527 val* var43 /* : Layout[PropertyLayoutElement] */;
528 val* var_vt_layout /* var vt_layout: Layout[MVirtualTypeProp] */;
529 val* var44 /* : Map[MClass, Array[nullable MPropDef]] */;
530 var_mainmodule = p0;
531 var_mmbuilder = p1;
532 var_runtime_type_analysis = p2;
533 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__init]))(self, p0, p1, p2) /* init on <self:SeparateErasureCompiler>*/;
534 var = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
535 var1 = ((val* (*)(val*))(var_mmbuilder->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(var_mmbuilder) /* model on <var_mmbuilder:ModelBuilder>*/;
536 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_model__Model__mclasses]))(var1) /* mclasses on <var1:Model>*/;
537 ((void (*)(val*, val*))(var->class->vft[COLOR_hash_collection__HashSet__from]))(var, var2) /* from on <var:HashSet[MClass]>*/;
538 var_mclasses = var;
539 var3 = NEW_layout_builders__MClassColorer(&type_layout_builders__MClassColorer);
540 ((void (*)(val*, val*))(var3->class->vft[COLOR_layout_builders__MClassColorer__init]))(var3, var_mainmodule) /* init on <var3:MClassColorer>*/;
541 var_class_colorer = var3;
542 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
543 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var4) /* toolcontext on <var4:ModelBuilder>*/;
544 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var5) /* opt_phmod_typing on <var5:ToolContext>*/;
545 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_opts__Option__value]))(var6) /* value on <var6:OptionBool>*/;
546 var8 = ((struct instance_kernel__Bool*)var7)->value; /* autounbox from nullable Object to Bool */;
547 if (var8){
548 var9 = NEW_layout_builders__MClassHasher(&type_layout_builders__MClassHasher);
549 var10 = NEW_layout_builders__PHModOperator(&type_layout_builders__PHModOperator);
550 ((void (*)(val*))(var10->class->vft[COLOR_layout_builders__PHModOperator__init]))(var10) /* init on <var10:PHModOperator>*/;
551 ((void (*)(val*, val*, val*))(var9->class->vft[COLOR_layout_builders__MClassHasher__init]))(var9, var10, var_mainmodule) /* init on <var9:MClassHasher>*/;
552 var_layout_builder = var9;
553 var11 = ((val* (*)(val*, val*))(var_class_colorer->class->vft[COLOR_layout_builders__TypingLayoutBuilder__build_layout]))(var_class_colorer, var_mclasses) /* build_layout on <var_class_colorer:MClassColorer>*/;
554 var11;
555 } else {
556 var12 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
557 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var12) /* toolcontext on <var12:ModelBuilder>*/;
558 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var13) /* opt_phand_typing on <var13:ToolContext>*/;
559 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_opts__Option__value]))(var14) /* value on <var14:OptionBool>*/;
560 var16 = ((struct instance_kernel__Bool*)var15)->value; /* autounbox from nullable Object to Bool */;
561 if (var16){
562 var17 = NEW_layout_builders__MClassHasher(&type_layout_builders__MClassHasher);
563 var18 = NEW_layout_builders__PHAndOperator(&type_layout_builders__PHAndOperator);
564 ((void (*)(val*))(var18->class->vft[COLOR_layout_builders__PHAndOperator__init]))(var18) /* init on <var18:PHAndOperator>*/;
565 ((void (*)(val*, val*, val*))(var17->class->vft[COLOR_layout_builders__MClassHasher__init]))(var17, var18, var_mainmodule) /* init on <var17:MClassHasher>*/;
566 var_layout_builder = var17;
567 var19 = ((val* (*)(val*, val*))(var_class_colorer->class->vft[COLOR_layout_builders__TypingLayoutBuilder__build_layout]))(var_class_colorer, var_mclasses) /* build_layout on <var_class_colorer:MClassColorer>*/;
568 var19;
569 } else {
570 var20 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
571 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var20) /* toolcontext on <var20:ModelBuilder>*/;
572 var22 = ((val* (*)(val*))(var21->class->vft[COLOR_separate_compiler__ToolContext__opt_bm_typing]))(var21) /* opt_bm_typing on <var21:ToolContext>*/;
573 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_opts__Option__value]))(var22) /* value on <var22:OptionBool>*/;
574 var24 = ((struct instance_kernel__Bool*)var23)->value; /* autounbox from nullable Object to Bool */;
575 if (var24){
576 var25 = NEW_layout_builders__MClassBMizer(&type_layout_builders__MClassBMizer);
577 ((void (*)(val*, val*))(var25->class->vft[COLOR_layout_builders__MClassBMizer__init]))(var25, var_mainmodule) /* init on <var25:MClassBMizer>*/;
578 var_layout_builder = var25;
579 var26 = ((val* (*)(val*, val*))(var_class_colorer->class->vft[COLOR_layout_builders__TypingLayoutBuilder__build_layout]))(var_class_colorer, var_mclasses) /* build_layout on <var_class_colorer:MClassColorer>*/;
580 var26;
581 } else {
582 var_layout_builder = var_class_colorer;
583 }
584 }
585 }
586 var27 = ((val* (*)(val*, val*))(var_layout_builder->class->vft[COLOR_layout_builders__TypingLayoutBuilder__build_layout]))(var_layout_builder, var_mclasses) /* build_layout on <var_layout_builder:TypingLayoutBuilder[MClass]>*/;
587 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d]))(self, var27) /* class_layout= on <self:SeparateErasureCompiler>*/;
588 var28 = ((val* (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables]))(self, var_mclasses) /* build_class_typing_tables on <self:SeparateErasureCompiler>*/;
589 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d]))(self, var28) /* class_tables= on <self:SeparateErasureCompiler>*/;
590 var29 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setmodel__MVirtualTypeProp);
591 ((void (*)(val*))(var29->class->vft[COLOR_hash_collection__HashMap__init]))(var29) /* init on <var29:HashMap[MClass, Set[MVirtualTypeProp]]>*/;
592 var_vts = var29;
593 var30 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:HashSet[MClass]>*/;
594 for(;;) {
595 var31 = ((short int (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var30) /* is_ok on <var30:Iterator[nullable Object]>*/;
596 if(!var31) break;
597 var32 = ((val* (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__item]))(var30) /* item on <var30:Iterator[nullable Object]>*/;
598 var_mclass = var32;
599 var33 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MVirtualTypeProp);
600 ((void (*)(val*))(var33->class->vft[COLOR_hash_collection__HashSet__init]))(var33) /* init on <var33:HashSet[MVirtualTypeProp]>*/;
601 ((void (*)(val*, val*, val*))(var_vts->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_vts, var_mclass, var33) /* []= on <var_vts:HashMap[MClass, Set[MVirtualTypeProp]]>*/;
602 var34 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
603 var35 = ((val* (*)(val*, val*))(var34->class->vft[COLOR_abstract_compiler__MModule__properties]))(var34, var_mclass) /* properties on <var34:MModule>*/;
604 var36 = ((val* (*)(val*))(var35->class->vft[COLOR_abstract_collection__Collection__iterator]))(var35) /* iterator on <var35:Set[MProperty]>*/;
605 for(;;) {
606 var37 = ((short int (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var36) /* is_ok on <var36:Iterator[nullable Object]>*/;
607 if(!var37) break;
608 var38 = ((val* (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__item]))(var36) /* item on <var36:Iterator[nullable Object]>*/;
609 var_mprop = var38;
610 /* <var_mprop:MProperty> isa MVirtualTypeProp */
611 cltype = type_model__MVirtualTypeProp.color;
612 idtype = type_model__MVirtualTypeProp.id;
613 if(cltype >= var_mprop->type->table_size) {
614 var39 = 0;
615 } else {
616 var39 = var_mprop->type->type_table[cltype] == idtype;
617 }
618 if (var39){
619 var40 = ((val* (*)(val*, val*))(var_vts->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_vts, var_mclass) /* [] on <var_vts:HashMap[MClass, Set[MVirtualTypeProp]]>*/;
620 ((void (*)(val*, val*))(var40->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var40, var_mprop) /* add on <var40:nullable Object(Set[MVirtualTypeProp])>*/;
621 } else {
622 }
623 CONTINUE_label: (void)0;
624 ((void (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__next]))(var36) /* next on <var36:Iterator[nullable Object]>*/;
625 }
626 BREAK_label: (void)0;
627 CONTINUE_label41: (void)0;
628 ((void (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__next]))(var30) /* next on <var30:Iterator[nullable Object]>*/;
629 }
630 BREAK_label41: (void)0;
631 var42 = NEW_layout_builders__MPropertyColorer(&type_layout_builders__MPropertyColorermodel__MVirtualTypeProp);
632 ((void (*)(val*, val*, val*))(var42->class->vft[COLOR_layout_builders__MPropertyColorer__init]))(var42, var_mainmodule, var_class_colorer) /* init on <var42:MPropertyColorer[MVirtualTypeProp]>*/;
633 var_vt_coloring = var42;
634 var43 = ((val* (*)(val*, val*))(var_vt_coloring->class->vft[COLOR_layout_builders__PropertyLayoutBuilder__build_layout]))(var_vt_coloring, var_vts) /* build_layout on <var_vt_coloring:MPropertyColorer[MVirtualTypeProp]>*/;
635 var_vt_layout = var43;
636 var44 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables]))(self, var_mclasses, var_vt_layout) /* build_vt_tables on <self:SeparateErasureCompiler>*/;
637 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d]))(self, var44) /* vt_tables= on <self:SeparateErasureCompiler>*/;
638 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d]))(self, var_vt_layout) /* vt_layout= on <self:SeparateErasureCompiler>*/;
639 RET_LABEL:;
640 }
641 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: Object, MModule, ModelBuilder, nullable RapidTypeAnalysis) */
642 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
643 separate_erasure_compiler__SeparateErasureCompiler__init(self, p0, p1, p2);
644 RET_LABEL:;
645 }
646 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: SeparateErasureCompiler, Set[MClass], Layout[MProperty]): Map[MClass, Array[nullable MPropDef]] */
647 val* separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0, val* p1) {
648 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
649 val* var_mclasses /* var mclasses: Set[MClass] */;
650 val* var_layout /* var layout: Layout[MProperty] */;
651 val* var1 /* : HashMap[MClass, Array[nullable MPropDef]] */;
652 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
653 val* var2 /* : Iterator[nullable Object] */;
654 short int var3 /* : Bool */;
655 val* var4 /* : nullable Object */;
656 val* var_mclass /* var mclass: MClass */;
657 val* var5 /* : Array[nullable MPropDef] */;
658 val* var_table /* var table: Array[nullable MPropDef] */;
659 val* var6 /* : Array[MClass] */;
660 val* var_parents /* var parents: Array[MClass] */;
661 val* var7 /* : MModule */;
662 val* var8 /* : POSet[MClass] */;
663 short int var9 /* : Bool */;
664 val* var10 /* : MModule */;
665 val* var11 /* : POSetElement[MClass] */;
666 val* var12 /* : Collection[Object] */;
667 val* var13 /* : Array[nullable Object] */;
668 val* var14 /* : MModule */;
669 val* var15 /* : Iterator[nullable Object] */;
670 short int var16 /* : Bool */;
671 val* var17 /* : nullable Object */;
672 val* var_parent /* var parent: MClass */;
673 short int var18 /* : Bool */;
674 val* var19 /* : MModule */;
675 val* var20 /* : Set[MProperty] */;
676 val* var21 /* : Iterator[nullable Object] */;
677 short int var22 /* : Bool */;
678 val* var23 /* : nullable Object */;
679 val* var_mproperty /* var mproperty: MProperty */;
680 short int var24 /* : Bool */;
681 int cltype;
682 int idtype;
683 short int var25 /* : Bool */;
684 val* var27 /* : Map[Object, Int] */;
685 val* var28 /* : nullable Object */;
686 long var29 /* : Int */;
687 long var_color /* var color: Int */;
688 long var30 /* : Int */;
689 short int var31 /* : Bool */;
690 short int var33 /* : Bool */;
691 int cltype34;
692 int idtype35;
693 const char* var_class_name;
694 short int var36 /* : Bool */;
695 val* var37 /* : Range[Int] */;
696 long var38 /* : Int */;
697 val* var39 /* : Discrete */;
698 val* var40 /* : Discrete */;
699 val* var41 /* : Iterator[nullable Object] */;
700 short int var42 /* : Bool */;
701 val* var43 /* : nullable Object */;
702 long var_i /* var i: Int */;
703 long var44 /* : Int */;
704 val* var45 /* : null */;
705 val* var47 /* : Array[MPropDef] */;
706 val* var48 /* : Iterator[nullable Object] */;
707 short int var49 /* : Bool */;
708 val* var50 /* : nullable Object */;
709 val* var_mpropdef /* var mpropdef: MVirtualTypeDef */;
710 val* var51 /* : MClassDef */;
711 val* var52 /* : MClass */;
712 short int var53 /* : Bool */;
713 val* var55 /* : MModule */;
714 val* var56 /* : Set[MProperty] */;
715 val* var57 /* : Iterator[nullable Object] */;
716 short int var58 /* : Bool */;
717 val* var59 /* : nullable Object */;
718 val* var_mproperty60 /* var mproperty: MProperty */;
719 short int var61 /* : Bool */;
720 int cltype62;
721 int idtype63;
722 short int var64 /* : Bool */;
723 val* var66 /* : Map[Object, Int] */;
724 val* var67 /* : nullable Object */;
725 long var68 /* : Int */;
726 long var_color69 /* var color: Int */;
727 long var70 /* : Int */;
728 short int var71 /* : Bool */;
729 short int var73 /* : Bool */;
730 int cltype74;
731 int idtype75;
732 const char* var_class_name76;
733 short int var77 /* : Bool */;
734 val* var78 /* : Range[Int] */;
735 long var79 /* : Int */;
736 val* var80 /* : Discrete */;
737 val* var81 /* : Discrete */;
738 val* var82 /* : Iterator[nullable Object] */;
739 short int var83 /* : Bool */;
740 val* var84 /* : nullable Object */;
741 long var_i85 /* var i: Int */;
742 long var86 /* : Int */;
743 val* var87 /* : null */;
744 val* var89 /* : Array[MPropDef] */;
745 val* var90 /* : Iterator[nullable Object] */;
746 short int var91 /* : Bool */;
747 val* var92 /* : nullable Object */;
748 val* var_mpropdef93 /* var mpropdef: MVirtualTypeDef */;
749 val* var94 /* : MClassDef */;
750 val* var95 /* : MClass */;
751 short int var96 /* : Bool */;
752 var_mclasses = p0;
753 var_layout = p1;
754 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
755 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MPropDef]]>*/;
756 var_tables = var1;
757 var2 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
758 for(;;) {
759 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
760 if(!var3) break;
761 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
762 var_mclass = var4;
763 var5 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
764 ((void (*)(val*))(var5->class->vft[COLOR_array__Array__init]))(var5) /* init on <var5:Array[nullable MPropDef]>*/;
765 var_table = var5;
766 var6 = NEW_array__Array(&type_array__Arraymodel__MClass);
767 ((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[MClass]>*/;
768 var_parents = var6;
769 var7 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
770 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var7) /* flatten_mclass_hierarchy on <var7:MModule>*/;
771 var9 = ((short int (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__Collection__has]))(var8, var_mclass) /* has on <var8:POSet[MClass]>*/;
772 if (var9){
773 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
774 var11 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var10) /* in_hierarchy on <var_mclass:MClass>*/;
775 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_poset__POSetElement__greaters]))(var11) /* greaters on <var11:POSetElement[MClass]>*/;
776 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_array__Collection__to_a]))(var12) /* to_a on <var12:Collection[Object](Collection[MClass])>*/;
777 var_parents = var13;
778 var14 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
779 ((void (*)(val*, val*))(var14->class->vft[COLOR_model__MModule__linearize_mclasses]))(var14, var_parents) /* linearize_mclasses on <var14:MModule>*/;
780 } else {
781 }
782 var15 = ((val* (*)(val*))(var_parents->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_parents) /* iterator on <var_parents:Array[MClass]>*/;
783 for(;;) {
784 var16 = ((short int (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var15) /* is_ok on <var15:Iterator[nullable Object]>*/;
785 if(!var16) break;
786 var17 = ((val* (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__item]))(var15) /* item on <var15:Iterator[nullable Object]>*/;
787 var_parent = var17;
788 var18 = ((short int (*)(val*, val*))(var_parent->class->vft[COLOR_kernel__Object___61d_61d]))(var_parent, var_mclass) /* == on <var_parent:MClass>*/;
789 if (var18){
790 goto CONTINUE_label;
791 } else {
792 }
793 var19 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
794 var20 = ((val* (*)(val*, val*))(var19->class->vft[COLOR_abstract_compiler__MModule__properties]))(var19, var_parent) /* properties on <var19:MModule>*/;
795 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Collection__iterator]))(var20) /* iterator on <var20:Set[MProperty]>*/;
796 for(;;) {
797 var22 = ((short int (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var21) /* is_ok on <var21:Iterator[nullable Object]>*/;
798 if(!var22) break;
799 var23 = ((val* (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__item]))(var21) /* item on <var21:Iterator[nullable Object]>*/;
800 var_mproperty = var23;
801 /* <var_mproperty:MProperty> isa MVirtualTypeProp */
802 cltype = type_model__MVirtualTypeProp.color;
803 idtype = type_model__MVirtualTypeProp.id;
804 if(cltype >= var_mproperty->type->table_size) {
805 var24 = 0;
806 } else {
807 var24 = var_mproperty->type->type_table[cltype] == idtype;
808 }
809 var25 = !var24;
810 if (var25){
811 goto CONTINUE_label26;
812 } else {
813 }
814 var27 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:Layout[MProperty]>*/;
815 var28 = ((val* (*)(val*, val*))(var27->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var27, var_mproperty) /* [] on <var27:Map[Object, Int](Map[MProperty, Int])>*/;
816 var29 = ((struct instance_kernel__Int*)var28)->value; /* autounbox from nullable Object to Int */;
817 var_color = var29;
818 var30 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
819 { /* Inline kernel#Int#<= (var30,var_color) */
820 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
821 /* <var_color:Int> isa OTHER */
822 var33 = 1; /* easy <var_color:Int> isa OTHER*/
823 if (!var33) {
824 var_class_name = type_kernel__Int.name;
825 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
826 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
827 show_backtrace(1);
828 }
829 var36 = var30 <= var_color;
830 var31 = var36;
831 goto RET_LABEL32;
832 RET_LABEL32:(void)0;
833 }
834 if (var31){
835 var37 = NEW_range__Range(&type_range__Rangekernel__Int);
836 var38 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
837 var39 = BOX_kernel__Int(var38); /* autobox from Int to Discrete */
838 var40 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
839 ((void (*)(val*, val*, val*))(var37->class->vft[COLOR_range__Range__without_last]))(var37, var39, var40) /* without_last on <var37:Range[Int]>*/;
840 var41 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_collection__Collection__iterator]))(var37) /* iterator on <var37:Range[Int]>*/;
841 for(;;) {
842 var42 = ((short int (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var41) /* is_ok on <var41:Iterator[nullable Object]>*/;
843 if(!var42) break;
844 var43 = ((val* (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__item]))(var41) /* item on <var41:Iterator[nullable Object]>*/;
845 var44 = ((struct instance_kernel__Int*)var43)->value; /* autounbox from nullable Object to Int */;
846 var_i = var44;
847 var45 = NULL;
848 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i, var45) /* []= on <var_table:Array[nullable MPropDef]>*/;
849 CONTINUE_label46: (void)0;
850 ((void (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__next]))(var41) /* next on <var41:Iterator[nullable Object]>*/;
851 }
852 BREAK_label46: (void)0;
853 } else {
854 }
855 var47 = ((val* (*)(val*))(var_mproperty->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty) /* mpropdefs on <var_mproperty:MProperty(MVirtualTypeProp)>*/;
856 var48 = ((val* (*)(val*))(var47->class->vft[COLOR_abstract_collection__Collection__iterator]))(var47) /* iterator on <var47:Array[MPropDef](Array[MVirtualTypeDef])>*/;
857 for(;;) {
858 var49 = ((short int (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var48) /* is_ok on <var48:Iterator[nullable Object]>*/;
859 if(!var49) break;
860 var50 = ((val* (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__item]))(var48) /* item on <var48:Iterator[nullable Object]>*/;
861 var_mpropdef = var50;
862 var51 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MVirtualTypeDef>*/;
863 var52 = ((val* (*)(val*))(var51->class->vft[COLOR_model__MClassDef__mclass]))(var51) /* mclass on <var51:MClassDef>*/;
864 var53 = ((short int (*)(val*, val*))(var52->class->vft[COLOR_kernel__Object___61d_61d]))(var52, var_parent) /* == on <var52:MClass>*/;
865 if (var53){
866 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color, var_mpropdef) /* []= on <var_table:Array[nullable MPropDef]>*/;
867 } else {
868 }
869 CONTINUE_label54: (void)0;
870 ((void (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__next]))(var48) /* next on <var48:Iterator[nullable Object]>*/;
871 }
872 BREAK_label54: (void)0;
873 CONTINUE_label26: (void)0;
874 ((void (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__next]))(var21) /* next on <var21:Iterator[nullable Object]>*/;
875 }
876 BREAK_label26: (void)0;
877 CONTINUE_label: (void)0;
878 ((void (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__next]))(var15) /* next on <var15:Iterator[nullable Object]>*/;
879 }
880 BREAK_label: (void)0;
881 var55 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
882 var56 = ((val* (*)(val*, val*))(var55->class->vft[COLOR_abstract_compiler__MModule__properties]))(var55, var_mclass) /* properties on <var55:MModule>*/;
883 var57 = ((val* (*)(val*))(var56->class->vft[COLOR_abstract_collection__Collection__iterator]))(var56) /* iterator on <var56:Set[MProperty]>*/;
884 for(;;) {
885 var58 = ((short int (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var57) /* is_ok on <var57:Iterator[nullable Object]>*/;
886 if(!var58) break;
887 var59 = ((val* (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__item]))(var57) /* item on <var57:Iterator[nullable Object]>*/;
888 var_mproperty60 = var59;
889 /* <var_mproperty60:MProperty> isa MVirtualTypeProp */
890 cltype62 = type_model__MVirtualTypeProp.color;
891 idtype63 = type_model__MVirtualTypeProp.id;
892 if(cltype62 >= var_mproperty60->type->table_size) {
893 var61 = 0;
894 } else {
895 var61 = var_mproperty60->type->type_table[cltype62] == idtype63;
896 }
897 var64 = !var61;
898 if (var64){
899 goto CONTINUE_label65;
900 } else {
901 }
902 var66 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:Layout[MProperty]>*/;
903 var67 = ((val* (*)(val*, val*))(var66->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var66, var_mproperty60) /* [] on <var66:Map[Object, Int](Map[MProperty, Int])>*/;
904 var68 = ((struct instance_kernel__Int*)var67)->value; /* autounbox from nullable Object to Int */;
905 var_color69 = var68;
906 var70 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
907 { /* Inline kernel#Int#<= (var70,var_color69) */
908 /* Covariant cast for argument 0 (i) <var_color69:Int> isa OTHER */
909 /* <var_color69:Int> isa OTHER */
910 var73 = 1; /* easy <var_color69:Int> isa OTHER*/
911 if (!var73) {
912 var_class_name76 = type_kernel__Int.name;
913 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name76);
914 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
915 show_backtrace(1);
916 }
917 var77 = var70 <= var_color69;
918 var71 = var77;
919 goto RET_LABEL72;
920 RET_LABEL72:(void)0;
921 }
922 if (var71){
923 var78 = NEW_range__Range(&type_range__Rangekernel__Int);
924 var79 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
925 var80 = BOX_kernel__Int(var79); /* autobox from Int to Discrete */
926 var81 = BOX_kernel__Int(var_color69); /* autobox from Int to Discrete */
927 ((void (*)(val*, val*, val*))(var78->class->vft[COLOR_range__Range__without_last]))(var78, var80, var81) /* without_last on <var78:Range[Int]>*/;
928 var82 = ((val* (*)(val*))(var78->class->vft[COLOR_abstract_collection__Collection__iterator]))(var78) /* iterator on <var78:Range[Int]>*/;
929 for(;;) {
930 var83 = ((short int (*)(val*))(var82->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var82) /* is_ok on <var82:Iterator[nullable Object]>*/;
931 if(!var83) break;
932 var84 = ((val* (*)(val*))(var82->class->vft[COLOR_abstract_collection__Iterator__item]))(var82) /* item on <var82:Iterator[nullable Object]>*/;
933 var86 = ((struct instance_kernel__Int*)var84)->value; /* autounbox from nullable Object to Int */;
934 var_i85 = var86;
935 var87 = NULL;
936 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i85, var87) /* []= on <var_table:Array[nullable MPropDef]>*/;
937 CONTINUE_label88: (void)0;
938 ((void (*)(val*))(var82->class->vft[COLOR_abstract_collection__Iterator__next]))(var82) /* next on <var82:Iterator[nullable Object]>*/;
939 }
940 BREAK_label88: (void)0;
941 } else {
942 }
943 var89 = ((val* (*)(val*))(var_mproperty60->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty60) /* mpropdefs on <var_mproperty60:MProperty(MVirtualTypeProp)>*/;
944 var90 = ((val* (*)(val*))(var89->class->vft[COLOR_abstract_collection__Collection__iterator]))(var89) /* iterator on <var89:Array[MPropDef](Array[MVirtualTypeDef])>*/;
945 for(;;) {
946 var91 = ((short int (*)(val*))(var90->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var90) /* is_ok on <var90:Iterator[nullable Object]>*/;
947 if(!var91) break;
948 var92 = ((val* (*)(val*))(var90->class->vft[COLOR_abstract_collection__Iterator__item]))(var90) /* item on <var90:Iterator[nullable Object]>*/;
949 var_mpropdef93 = var92;
950 var94 = ((val* (*)(val*))(var_mpropdef93->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef93) /* mclassdef on <var_mpropdef93:MVirtualTypeDef>*/;
951 var95 = ((val* (*)(val*))(var94->class->vft[COLOR_model__MClassDef__mclass]))(var94) /* mclass on <var94:MClassDef>*/;
952 var96 = ((short int (*)(val*, val*))(var95->class->vft[COLOR_kernel__Object___61d_61d]))(var95, var_mclass) /* == on <var95:MClass>*/;
953 if (var96){
954 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color69, var_mpropdef93) /* []= on <var_table:Array[nullable MPropDef]>*/;
955 } else {
956 }
957 CONTINUE_label97: (void)0;
958 ((void (*)(val*))(var90->class->vft[COLOR_abstract_collection__Iterator__next]))(var90) /* next on <var90:Iterator[nullable Object]>*/;
959 }
960 BREAK_label97: (void)0;
961 CONTINUE_label65: (void)0;
962 ((void (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__next]))(var57) /* next on <var57:Iterator[nullable Object]>*/;
963 }
964 BREAK_label65: (void)0;
965 ((void (*)(val*, val*, val*))(var_tables->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_tables, var_mclass, var_table) /* []= on <var_tables:HashMap[MClass, Array[nullable MPropDef]]>*/;
966 CONTINUE_label98: (void)0;
967 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
968 }
969 BREAK_label98: (void)0;
970 var = var_tables;
971 goto RET_LABEL;
972 RET_LABEL:;
973 return var;
974 }
975 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: Object, Set[MClass], Layout[MProperty]): Map[MClass, Array[nullable MPropDef]] */
976 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0, val* p1) {
977 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
978 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
979 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(self, p0, p1);
980 var = var1;
981 RET_LABEL:;
982 return var;
983 }
984 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MClass]] */
985 val* separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
986 val* var /* : Map[MClass, Array[nullable MClass]] */;
987 val* var_mclasses /* var mclasses: Set[MClass] */;
988 val* var1 /* : HashMap[MClass, Array[nullable MClass]] */;
989 val* var_tables /* var tables: HashMap[MClass, Array[nullable MClass]] */;
990 val* var2 /* : nullable Layout[MClass] */;
991 val* var_layout /* var layout: nullable Layout[MClass] */;
992 val* var3 /* : Iterator[nullable Object] */;
993 short int var4 /* : Bool */;
994 val* var5 /* : nullable Object */;
995 val* var_mclass /* var mclass: MClass */;
996 val* var6 /* : Array[nullable MClass] */;
997 val* var_table /* var table: Array[nullable MClass] */;
998 val* var7 /* : Array[MClass] */;
999 val* var_supers /* var supers: Array[MClass] */;
1000 val* var8 /* : MModule */;
1001 val* var9 /* : POSet[MClass] */;
1002 short int var10 /* : Bool */;
1003 val* var11 /* : MModule */;
1004 val* var12 /* : POSetElement[MClass] */;
1005 val* var13 /* : Collection[Object] */;
1006 val* var14 /* : Array[nullable Object] */;
1007 val* var15 /* : Iterator[nullable Object] */;
1008 short int var16 /* : Bool */;
1009 val* var17 /* : nullable Object */;
1010 val* var_sup /* var sup: MClass */;
1011 short int var18 /* : Bool */;
1012 int cltype;
1013 int idtype;
1014 val* var19 /* : Map[Object, Map[Object, Int]] */;
1015 val* var20 /* : nullable Object */;
1016 val* var21 /* : nullable Object */;
1017 long var22 /* : Int */;
1018 long var_color /* var color: Int */;
1019 val* var23 /* : Map[Object, Int] */;
1020 val* var24 /* : nullable Object */;
1021 long var25 /* : Int */;
1022 long var26 /* : Int */;
1023 short int var27 /* : Bool */;
1024 short int var29 /* : Bool */;
1025 int cltype30;
1026 int idtype31;
1027 const char* var_class_name;
1028 short int var32 /* : Bool */;
1029 val* var33 /* : Range[Int] */;
1030 long var34 /* : Int */;
1031 val* var35 /* : Discrete */;
1032 val* var36 /* : Discrete */;
1033 val* var37 /* : Iterator[nullable Object] */;
1034 short int var38 /* : Bool */;
1035 val* var39 /* : nullable Object */;
1036 long var_i /* var i: Int */;
1037 long var40 /* : Int */;
1038 val* var41 /* : null */;
1039 var_mclasses = p0;
1040 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MClass);
1041 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MClass]]>*/;
1042 var_tables = var1;
1043 var2 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
1044 var_layout = var2;
1045 var3 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
1046 for(;;) {
1047 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
1048 if(!var4) break;
1049 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
1050 var_mclass = var5;
1051 var6 = NEW_array__Array(&type_array__Arraynullable_model__MClass);
1052 ((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[nullable MClass]>*/;
1053 var_table = var6;
1054 var7 = NEW_array__Array(&type_array__Arraymodel__MClass);
1055 ((void (*)(val*))(var7->class->vft[COLOR_array__Array__init]))(var7) /* init on <var7:Array[MClass]>*/;
1056 var_supers = var7;
1057 var8 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
1058 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var8) /* flatten_mclass_hierarchy on <var8:MModule>*/;
1059 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__Collection__has]))(var9, var_mclass) /* has on <var9:POSet[MClass]>*/;
1060 if (var10){
1061 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
1062 var12 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var11) /* in_hierarchy on <var_mclass:MClass>*/;
1063 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_poset__POSetElement__greaters]))(var12) /* greaters on <var12:POSetElement[MClass]>*/;
1064 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_array__Collection__to_a]))(var13) /* to_a on <var13:Collection[Object](Collection[MClass])>*/;
1065 var_supers = var14;
1066 } else {
1067 }
1068 var15 = ((val* (*)(val*))(var_supers->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_supers) /* iterator on <var_supers:Array[MClass]>*/;
1069 for(;;) {
1070 var16 = ((short int (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var15) /* is_ok on <var15:Iterator[nullable Object]>*/;
1071 if(!var16) break;
1072 var17 = ((val* (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__item]))(var15) /* item on <var15:Iterator[nullable Object]>*/;
1073 var_sup = var17;
1074 /* <var_layout:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
1075 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
1076 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
1077 if(var_layout == NULL) {
1078 var18 = 0;
1079 } else {
1080 if(cltype >= var_layout->type->table_size) {
1081 var18 = 0;
1082 } else {
1083 var18 = var_layout->type->type_table[cltype] == idtype;
1084 }
1085 }
1086 if (var18){
1087 var19 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__hashes]))(var_layout) /* hashes on <var_layout:nullable Layout[MClass](PHLayout[MClass, MClass])>*/;
1088 var20 = ((val* (*)(val*, val*))(var19->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var19, var_mclass) /* [] on <var19:Map[Object, Map[Object, Int]](Map[MClass, Map[MClass, Int]])>*/;
1089 var21 = ((val* (*)(val*, val*))(var20->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var20, var_sup) /* [] on <var20:nullable Object(Map[MClass, Int])>*/;
1090 var22 = ((struct instance_kernel__Int*)var21)->value; /* autounbox from nullable Object to Int */;
1091 var_color = var22;
1092 } else {
1093 if (var_layout == NULL) {
1094 fprintf(stderr, "Runtime error: %s", "Reciever is null");
1095 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 182);
1096 show_backtrace(1);
1097 } else {
1098 var23 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MClass]>*/;
1099 }
1100 var24 = ((val* (*)(val*, val*))(var23->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var23, var_sup) /* [] on <var23:Map[Object, Int](Map[MClass, Int])>*/;
1101 var25 = ((struct instance_kernel__Int*)var24)->value; /* autounbox from nullable Object to Int */;
1102 var_color = var25;
1103 }
1104 var26 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
1105 { /* Inline kernel#Int#<= (var26,var_color) */
1106 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
1107 /* <var_color:Int> isa OTHER */
1108 var29 = 1; /* easy <var_color:Int> isa OTHER*/
1109 if (!var29) {
1110 var_class_name = type_kernel__Int.name;
1111 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1112 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
1113 show_backtrace(1);
1114 }
1115 var32 = var26 <= var_color;
1116 var27 = var32;
1117 goto RET_LABEL28;
1118 RET_LABEL28:(void)0;
1119 }
1120 if (var27){
1121 var33 = NEW_range__Range(&type_range__Rangekernel__Int);
1122 var34 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
1123 var35 = BOX_kernel__Int(var34); /* autobox from Int to Discrete */
1124 var36 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
1125 ((void (*)(val*, val*, val*))(var33->class->vft[COLOR_range__Range__without_last]))(var33, var35, var36) /* without_last on <var33:Range[Int]>*/;
1126 var37 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_collection__Collection__iterator]))(var33) /* iterator on <var33:Range[Int]>*/;
1127 for(;;) {
1128 var38 = ((short int (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var37) /* is_ok on <var37:Iterator[nullable Object]>*/;
1129 if(!var38) break;
1130 var39 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__item]))(var37) /* item on <var37:Iterator[nullable Object]>*/;
1131 var40 = ((struct instance_kernel__Int*)var39)->value; /* autounbox from nullable Object to Int */;
1132 var_i = var40;
1133 var41 = NULL;
1134 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i, var41) /* []= on <var_table:Array[nullable MClass]>*/;
1135 CONTINUE_label: (void)0;
1136 ((void (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__next]))(var37) /* next on <var37:Iterator[nullable Object]>*/;
1137 }
1138 BREAK_label: (void)0;
1139 } else {
1140 }
1141 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color, var_sup) /* []= on <var_table:Array[nullable MClass]>*/;
1142 CONTINUE_label42: (void)0;
1143 ((void (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__next]))(var15) /* next on <var15:Iterator[nullable Object]>*/;
1144 }
1145 BREAK_label42: (void)0;
1146 ((void (*)(val*, val*, val*))(var_tables->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_tables, var_mclass, var_table) /* []= on <var_tables:HashMap[MClass, Array[nullable MClass]]>*/;
1147 CONTINUE_label43: (void)0;
1148 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
1149 }
1150 BREAK_label43: (void)0;
1151 var = var_tables;
1152 goto RET_LABEL;
1153 RET_LABEL:;
1154 return var;
1155 }
1156 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MClass]] */
1157 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
1158 val* var /* : Map[MClass, Array[nullable MClass]] */;
1159 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
1160 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(self, p0);
1161 var = var1;
1162 RET_LABEL:;
1163 return var;
1164 }
1165 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: SeparateErasureCompiler) */
1166 void separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
1167 val* var /* : CodeWriter */;
1168 static val* varonce;
1169 val* var1 /* : String */;
1170 char* var2 /* : NativeString */;
1171 long var3 /* : Int */;
1172 val* var4 /* : String */;
1173 val* var5 /* : CodeWriter */;
1174 static val* varonce6;
1175 val* var7 /* : String */;
1176 char* var8 /* : NativeString */;
1177 long var9 /* : Int */;
1178 val* var10 /* : String */;
1179 val* var11 /* : CodeWriter */;
1180 static val* varonce12;
1181 val* var13 /* : String */;
1182 char* var14 /* : NativeString */;
1183 long var15 /* : Int */;
1184 val* var16 /* : String */;
1185 val* var17 /* : CodeWriter */;
1186 static val* varonce18;
1187 val* var19 /* : String */;
1188 char* var20 /* : NativeString */;
1189 long var21 /* : Int */;
1190 val* var22 /* : String */;
1191 val* var23 /* : nullable Layout[MVirtualTypeProp] */;
1192 short int var24 /* : Bool */;
1193 int cltype;
1194 int idtype;
1195 val* var25 /* : CodeWriter */;
1196 static val* varonce26;
1197 val* var27 /* : String */;
1198 char* var28 /* : NativeString */;
1199 long var29 /* : Int */;
1200 val* var30 /* : String */;
1201 val* var31 /* : CodeWriter */;
1202 static val* varonce32;
1203 val* var33 /* : String */;
1204 char* var34 /* : NativeString */;
1205 long var35 /* : Int */;
1206 val* var36 /* : String */;
1207 val* var37 /* : ModelBuilder */;
1208 val* var38 /* : ToolContext */;
1209 val* var39 /* : OptionBool */;
1210 val* var40 /* : nullable Object */;
1211 short int var41 /* : Bool */;
1212 val* var42 /* : CodeWriter */;
1213 static val* varonce43;
1214 val* var44 /* : String */;
1215 char* var45 /* : NativeString */;
1216 long var46 /* : Int */;
1217 val* var47 /* : String */;
1218 val* var48 /* : ModelBuilder */;
1219 val* var49 /* : ToolContext */;
1220 val* var50 /* : OptionBool */;
1221 val* var51 /* : nullable Object */;
1222 short int var52 /* : Bool */;
1223 val* var53 /* : CodeWriter */;
1224 static val* varonce54;
1225 val* var55 /* : String */;
1226 char* var56 /* : NativeString */;
1227 long var57 /* : Int */;
1228 val* var58 /* : String */;
1229 val* var59 /* : CodeWriter */;
1230 static val* varonce60;
1231 val* var61 /* : String */;
1232 char* var62 /* : NativeString */;
1233 long var63 /* : Int */;
1234 val* var64 /* : String */;
1235 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1236 if (varonce) {
1237 var1 = varonce;
1238 } else {
1239 var2 = "typedef void(*nitmethod_t)(void); /* general C type representing a Nit method. */";
1240 var3 = 81;
1241 var4 = string__NativeString__to_s_with_length(var2, var3);
1242 var1 = var4;
1243 varonce = var1;
1244 }
1245 ((void (*)(val*, val*))(var->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var, var1) /* add_decl on <var:CodeWriter>*/;
1246 ((void (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_header_attribute_structs]))(self) /* compile_header_attribute_structs on <self:SeparateErasureCompiler>*/;
1247 var5 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1248 if (varonce6) {
1249 var7 = varonce6;
1250 } else {
1251 var8 = "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. */";
1252 var9 = 206;
1253 var10 = string__NativeString__to_s_with_length(var8, var9);
1254 var7 = var10;
1255 varonce6 = var7;
1256 }
1257 ((void (*)(val*, val*))(var5->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var5, var7) /* add_decl on <var5:CodeWriter>*/;
1258 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1259 if (varonce12) {
1260 var13 = varonce12;
1261 } else {
1262 var14 = "struct type_table { int size; int table[]; }; /* colorized type table. */";
1263 var15 = 73;
1264 var16 = string__NativeString__to_s_with_length(var14, var15);
1265 var13 = var16;
1266 varonce12 = var13;
1267 }
1268 ((void (*)(val*, val*))(var11->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var11, var13) /* add_decl on <var11:CodeWriter>*/;
1269 var17 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1270 if (varonce18) {
1271 var19 = varonce18;
1272 } else {
1273 var20 = "struct vts_entry { short int is_nullable; const struct class *class; }; /* link (nullable or not) between the vts and is bound. */";
1274 var21 = 130;
1275 var22 = string__NativeString__to_s_with_length(var20, var21);
1276 var19 = var22;
1277 varonce18 = var19;
1278 }
1279 ((void (*)(val*, val*))(var17->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var17, var19) /* add_decl on <var17:CodeWriter>*/;
1280 var23 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(self) /* vt_layout on <self:SeparateErasureCompiler>*/;
1281 /* <var23:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
1282 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
1283 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
1284 if(var23 == NULL) {
1285 var24 = 0;
1286 } else {
1287 if(cltype >= var23->type->table_size) {
1288 var24 = 0;
1289 } else {
1290 var24 = var23->type->type_table[cltype] == idtype;
1291 }
1292 }
1293 if (var24){
1294 var25 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1295 if (varonce26) {
1296 var27 = varonce26;
1297 } else {
1298 var28 = "struct vts_table { int mask; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
1299 var29 = 104;
1300 var30 = string__NativeString__to_s_with_length(var28, var29);
1301 var27 = var30;
1302 varonce26 = var27;
1303 }
1304 ((void (*)(val*, val*))(var25->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var25, var27) /* add_decl on <var25:CodeWriter>*/;
1305 } else {
1306 var31 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1307 if (varonce32) {
1308 var33 = varonce32;
1309 } else {
1310 var34 = "struct vts_table { int dummy; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
1311 var35 = 105;
1312 var36 = string__NativeString__to_s_with_length(var34, var35);
1313 var33 = var36;
1314 varonce32 = var33;
1315 }
1316 ((void (*)(val*, val*))(var31->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var31, var33) /* add_decl on <var31:CodeWriter>*/;
1317 }
1318 var37 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
1319 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var37) /* toolcontext on <var37:ModelBuilder>*/;
1320 var39 = ((val* (*)(val*))(var38->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var38) /* opt_phmod_typing on <var38:ToolContext>*/;
1321 var40 = ((val* (*)(val*))(var39->class->vft[COLOR_opts__Option__value]))(var39) /* value on <var39:OptionBool>*/;
1322 var41 = ((struct instance_kernel__Bool*)var40)->value; /* autounbox from nullable Object to Bool */;
1323 if (var41){
1324 var42 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1325 if (varonce43) {
1326 var44 = varonce43;
1327 } else {
1328 var45 = "#define HASH(mask, id) ((mask)%(id))";
1329 var46 = 36;
1330 var47 = string__NativeString__to_s_with_length(var45, var46);
1331 var44 = var47;
1332 varonce43 = var44;
1333 }
1334 ((void (*)(val*, val*))(var42->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var42, var44) /* add_decl on <var42:CodeWriter>*/;
1335 } else {
1336 var48 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
1337 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var48) /* toolcontext on <var48:ModelBuilder>*/;
1338 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var49) /* opt_phand_typing on <var49:ToolContext>*/;
1339 var51 = ((val* (*)(val*))(var50->class->vft[COLOR_opts__Option__value]))(var50) /* value on <var50:OptionBool>*/;
1340 var52 = ((struct instance_kernel__Bool*)var51)->value; /* autounbox from nullable Object to Bool */;
1341 if (var52){
1342 var53 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1343 if (varonce54) {
1344 var55 = varonce54;
1345 } else {
1346 var56 = "#define HASH(mask, id) ((mask)&(id))";
1347 var57 = 36;
1348 var58 = string__NativeString__to_s_with_length(var56, var57);
1349 var55 = var58;
1350 varonce54 = var55;
1351 }
1352 ((void (*)(val*, val*))(var53->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var53, var55) /* add_decl on <var53:CodeWriter>*/;
1353 } else {
1354 }
1355 }
1356 var59 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1357 if (varonce60) {
1358 var61 = varonce60;
1359 } else {
1360 var62 = "typedef struct instance { const struct class *class; nitattribute_t attrs[1]; } val; /* general C type representing a Nit instance. */";
1361 var63 = 134;
1362 var64 = string__NativeString__to_s_with_length(var62, var63);
1363 var61 = var64;
1364 varonce60 = var61;
1365 }
1366 ((void (*)(val*, val*))(var59->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var59, var61) /* add_decl on <var59:CodeWriter>*/;
1367 RET_LABEL:;
1368 }
1369 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: Object) */
1370 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
1371 separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(self);
1372 RET_LABEL:;
1373 }
1374 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: SeparateErasureCompiler, MClass) */
1375 void separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
1376 val* var_mclass /* var mclass: MClass */;
1377 val* var /* : MClassDef */;
1378 val* var1 /* : MClassType */;
1379 val* var_mtype /* var mtype: MClassType */;
1380 val* var2 /* : String */;
1381 val* var_c_name /* var c_name: String */;
1382 val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
1383 val* var4 /* : nullable Object */;
1384 val* var_vft /* var vft: Array[nullable MPropDef] */;
1385 val* var5 /* : Map[MClass, Array[nullable MPropDef]] */;
1386 val* var6 /* : nullable Object */;
1387 val* var_attrs /* var attrs: Array[nullable MPropDef] */;
1388 val* var7 /* : Map[MClass, Array[nullable MClass]] */;
1389 val* var8 /* : nullable Object */;
1390 val* var_class_table /* var class_table: Array[nullable MClass] */;
1391 val* var9 /* : AbstractCompilerVisitor */;
1392 val* var_v /* var v: SeparateCompilerVisitor */;
1393 static val* varonce;
1394 val* var10 /* : String */;
1395 char* var11 /* : NativeString */;
1396 long var12 /* : Int */;
1397 val* var13 /* : String */;
1398 static val* varonce14;
1399 val* var15 /* : String */;
1400 char* var16 /* : NativeString */;
1401 long var17 /* : Int */;
1402 val* var18 /* : String */;
1403 val* var19 /* : Array[Object] */;
1404 long var20 /* : Int */;
1405 val* var21 /* : NativeArray[Object] */;
1406 val* var22 /* : String */;
1407 static val* varonce23;
1408 val* var24 /* : String */;
1409 char* var25 /* : NativeString */;
1410 long var26 /* : Int */;
1411 val* var27 /* : String */;
1412 val* var28 /* : Array[Object] */;
1413 long var29 /* : Int */;
1414 val* var30 /* : NativeArray[Object] */;
1415 val* var31 /* : String */;
1416 static val* varonce32;
1417 val* var33 /* : String */;
1418 char* var34 /* : NativeString */;
1419 long var35 /* : Int */;
1420 val* var36 /* : String */;
1421 static val* varonce37;
1422 val* var38 /* : String */;
1423 char* var39 /* : NativeString */;
1424 long var40 /* : Int */;
1425 val* var41 /* : String */;
1426 val* var42 /* : Array[Object] */;
1427 long var43 /* : Int */;
1428 val* var44 /* : NativeArray[Object] */;
1429 val* var45 /* : String */;
1430 static val* varonce46;
1431 val* var47 /* : String */;
1432 char* var48 /* : NativeString */;
1433 long var49 /* : Int */;
1434 val* var50 /* : String */;
1435 static val* varonce51;
1436 val* var52 /* : String */;
1437 char* var53 /* : NativeString */;
1438 long var54 /* : Int */;
1439 val* var55 /* : String */;
1440 val* var56 /* : Array[Object] */;
1441 long var57 /* : Int */;
1442 val* var58 /* : NativeArray[Object] */;
1443 val* var59 /* : String */;
1444 static val* varonce60;
1445 val* var61 /* : String */;
1446 char* var62 /* : NativeString */;
1447 long var63 /* : Int */;
1448 val* var64 /* : String */;
1449 static val* varonce65;
1450 val* var66 /* : String */;
1451 char* var67 /* : NativeString */;
1452 long var68 /* : Int */;
1453 val* var69 /* : String */;
1454 val* var70 /* : Array[Object] */;
1455 long var71 /* : Int */;
1456 val* var72 /* : NativeArray[Object] */;
1457 val* var73 /* : String */;
1458 val* var74 /* : nullable Layout[MClass] */;
1459 val* var75 /* : Map[Object, Int] */;
1460 val* var76 /* : nullable Object */;
1461 static val* varonce77;
1462 val* var78 /* : String */;
1463 char* var79 /* : NativeString */;
1464 long var80 /* : Int */;
1465 val* var81 /* : String */;
1466 val* var82 /* : Array[Object] */;
1467 long var83 /* : Int */;
1468 val* var84 /* : NativeArray[Object] */;
1469 val* var85 /* : String */;
1470 static val* varonce86;
1471 val* var87 /* : String */;
1472 char* var88 /* : NativeString */;
1473 long var89 /* : Int */;
1474 val* var90 /* : String */;
1475 val* var91 /* : String */;
1476 static val* varonce92;
1477 val* var93 /* : String */;
1478 char* var94 /* : NativeString */;
1479 long var95 /* : Int */;
1480 val* var96 /* : String */;
1481 val* var97 /* : Array[Object] */;
1482 long var98 /* : Int */;
1483 val* var99 /* : NativeArray[Object] */;
1484 val* var100 /* : String */;
1485 long var101 /* : Int */;
1486 static val* varonce102;
1487 val* var103 /* : String */;
1488 char* var104 /* : NativeString */;
1489 long var105 /* : Int */;
1490 val* var106 /* : String */;
1491 val* var107 /* : Array[Object] */;
1492 long var108 /* : Int */;
1493 val* var109 /* : NativeArray[Object] */;
1494 val* var110 /* : Object */;
1495 val* var111 /* : String */;
1496 val* var112 /* : nullable Layout[MClass] */;
1497 val* var_layout /* var layout: nullable Layout[MClass] */;
1498 short int var113 /* : Bool */;
1499 int cltype;
1500 int idtype;
1501 val* var114 /* : Map[Object, Int] */;
1502 val* var115 /* : nullable Object */;
1503 static val* varonce116;
1504 val* var117 /* : String */;
1505 char* var118 /* : NativeString */;
1506 long var119 /* : Int */;
1507 val* var120 /* : String */;
1508 val* var121 /* : Array[Object] */;
1509 long var122 /* : Int */;
1510 val* var123 /* : NativeArray[Object] */;
1511 val* var124 /* : String */;
1512 val* var125 /* : Map[Object, Int] */;
1513 val* var126 /* : nullable Object */;
1514 static val* varonce127;
1515 val* var128 /* : String */;
1516 char* var129 /* : NativeString */;
1517 long var130 /* : Int */;
1518 val* var131 /* : String */;
1519 val* var132 /* : Array[Object] */;
1520 long var133 /* : Int */;
1521 val* var134 /* : NativeArray[Object] */;
1522 val* var135 /* : String */;
1523 short int var136 /* : Bool */;
1524 static val* varonce137;
1525 val* var138 /* : String */;
1526 char* var139 /* : NativeString */;
1527 long var140 /* : Int */;
1528 val* var141 /* : String */;
1529 val* var142 /* : Array[Object] */;
1530 long var143 /* : Int */;
1531 val* var144 /* : NativeArray[Object] */;
1532 val* var145 /* : String */;
1533 static val* varonce146;
1534 val* var147 /* : String */;
1535 char* var148 /* : NativeString */;
1536 long var149 /* : Int */;
1537 val* var150 /* : String */;
1538 static val* varonce151;
1539 val* var152 /* : String */;
1540 char* var153 /* : NativeString */;
1541 long var154 /* : Int */;
1542 val* var155 /* : String */;
1543 val* var156 /* : Array[Object] */;
1544 long var157 /* : Int */;
1545 val* var158 /* : NativeArray[Object] */;
1546 val* var159 /* : String */;
1547 static val* varonce160;
1548 val* var161 /* : String */;
1549 char* var162 /* : NativeString */;
1550 long var163 /* : Int */;
1551 val* var164 /* : String */;
1552 static val* varonce165;
1553 val* var166 /* : String */;
1554 char* var167 /* : NativeString */;
1555 long var168 /* : Int */;
1556 val* var169 /* : String */;
1557 static val* varonce170;
1558 val* var171 /* : String */;
1559 char* var172 /* : NativeString */;
1560 long var173 /* : Int */;
1561 val* var174 /* : String */;
1562 val* var175 /* : Array[Object] */;
1563 long var176 /* : Int */;
1564 val* var177 /* : NativeArray[Object] */;
1565 val* var178 /* : String */;
1566 static val* varonce179;
1567 val* var180 /* : String */;
1568 char* var181 /* : NativeString */;
1569 long var182 /* : Int */;
1570 val* var183 /* : String */;
1571 val* var184 /* : Range[Int] */;
1572 long var185 /* : Int */;
1573 long var186 /* : Int */;
1574 val* var187 /* : Discrete */;
1575 val* var188 /* : Discrete */;
1576 val* var189 /* : Iterator[nullable Object] */;
1577 short int var190 /* : Bool */;
1578 val* var191 /* : nullable Object */;
1579 long var_i /* var i: Int */;
1580 long var192 /* : Int */;
1581 val* var193 /* : nullable Object */;
1582 val* var_mpropdef /* var mpropdef: nullable MPropDef */;
1583 val* var194 /* : null */;
1584 short int var195 /* : Bool */;
1585 static val* varonce196;
1586 val* var197 /* : String */;
1587 char* var198 /* : NativeString */;
1588 long var199 /* : Int */;
1589 val* var200 /* : String */;
1590 short int var201 /* : Bool */;
1591 short int var202 /* : Bool */;
1592 short int var_ /* var : Bool */;
1593 val* var203 /* : MClassDef */;
1594 val* var204 /* : MClassType */;
1595 val* var205 /* : String */;
1596 static val* varonce206;
1597 val* var207 /* : String */;
1598 char* var208 /* : NativeString */;
1599 long var209 /* : Int */;
1600 val* var210 /* : String */;
1601 short int var211 /* : Bool */;
1602 static val* varonce212;
1603 val* var213 /* : String */;
1604 char* var214 /* : NativeString */;
1605 long var215 /* : Int */;
1606 val* var216 /* : String */;
1607 val* var217 /* : String */;
1608 val* var218 /* : Array[Object] */;
1609 long var219 /* : Int */;
1610 val* var220 /* : NativeArray[Object] */;
1611 val* var221 /* : String */;
1612 static val* varonce222;
1613 val* var223 /* : String */;
1614 char* var224 /* : NativeString */;
1615 long var225 /* : Int */;
1616 val* var226 /* : String */;
1617 val* var227 /* : String */;
1618 static val* varonce228;
1619 val* var229 /* : String */;
1620 char* var230 /* : NativeString */;
1621 long var231 /* : Int */;
1622 val* var232 /* : String */;
1623 val* var233 /* : MModule */;
1624 static val* varonce234;
1625 val* var235 /* : String */;
1626 char* var236 /* : NativeString */;
1627 long var237 /* : Int */;
1628 val* var238 /* : String */;
1629 static val* varonce239;
1630 val* var240 /* : String */;
1631 char* var241 /* : NativeString */;
1632 long var242 /* : Int */;
1633 val* var243 /* : String */;
1634 static val* varonce244;
1635 val* var245 /* : String */;
1636 char* var246 /* : NativeString */;
1637 long var247 /* : Int */;
1638 val* var248 /* : String */;
1639 val* var249 /* : Array[Object] */;
1640 long var250 /* : Int */;
1641 val* var251 /* : NativeArray[Object] */;
1642 val* var252 /* : String */;
1643 val* var253 /* : String */;
1644 val* var254 /* : Array[Object] */;
1645 long var255 /* : Int */;
1646 val* var256 /* : NativeArray[Object] */;
1647 val* var257 /* : String */;
1648 static val* varonce258;
1649 val* var259 /* : String */;
1650 char* var260 /* : NativeString */;
1651 long var261 /* : Int */;
1652 val* var262 /* : String */;
1653 val* var263 /* : String */;
1654 static val* varonce264;
1655 val* var265 /* : String */;
1656 char* var266 /* : NativeString */;
1657 long var267 /* : Int */;
1658 val* var268 /* : String */;
1659 val* var269 /* : MModule */;
1660 static val* varonce270;
1661 val* var271 /* : String */;
1662 char* var272 /* : NativeString */;
1663 long var273 /* : Int */;
1664 val* var274 /* : String */;
1665 static val* varonce275;
1666 val* var276 /* : String */;
1667 char* var277 /* : NativeString */;
1668 long var278 /* : Int */;
1669 val* var279 /* : String */;
1670 static val* varonce280;
1671 val* var281 /* : String */;
1672 char* var282 /* : NativeString */;
1673 long var283 /* : Int */;
1674 val* var284 /* : String */;
1675 val* var285 /* : Array[Object] */;
1676 long var286 /* : Int */;
1677 val* var287 /* : NativeArray[Object] */;
1678 val* var288 /* : String */;
1679 static val* varonce289;
1680 val* var290 /* : String */;
1681 char* var291 /* : NativeString */;
1682 long var292 /* : Int */;
1683 val* var293 /* : String */;
1684 static val* varonce294;
1685 val* var295 /* : String */;
1686 char* var296 /* : NativeString */;
1687 long var297 /* : Int */;
1688 val* var298 /* : String */;
1689 static val* varonce299;
1690 val* var300 /* : String */;
1691 char* var301 /* : NativeString */;
1692 long var302 /* : Int */;
1693 val* var303 /* : String */;
1694 static val* varonce304;
1695 val* var305 /* : String */;
1696 char* var306 /* : NativeString */;
1697 long var307 /* : Int */;
1698 val* var308 /* : String */;
1699 val* var309 /* : Array[Object] */;
1700 long var310 /* : Int */;
1701 val* var311 /* : NativeArray[Object] */;
1702 val* var312 /* : String */;
1703 long var313 /* : Int */;
1704 static val* varonce314;
1705 val* var315 /* : String */;
1706 char* var316 /* : NativeString */;
1707 long var317 /* : Int */;
1708 val* var318 /* : String */;
1709 val* var319 /* : Array[Object] */;
1710 long var320 /* : Int */;
1711 val* var321 /* : NativeArray[Object] */;
1712 val* var322 /* : Object */;
1713 val* var323 /* : String */;
1714 static val* varonce324;
1715 val* var325 /* : String */;
1716 char* var326 /* : NativeString */;
1717 long var327 /* : Int */;
1718 val* var328 /* : String */;
1719 val* var329 /* : Iterator[nullable Object] */;
1720 short int var330 /* : Bool */;
1721 val* var331 /* : nullable Object */;
1722 val* var_msuper /* var msuper: nullable MClass */;
1723 val* var332 /* : null */;
1724 short int var333 /* : Bool */;
1725 static val* varonce334;
1726 val* var335 /* : String */;
1727 char* var336 /* : NativeString */;
1728 long var337 /* : Int */;
1729 val* var338 /* : String */;
1730 val* var339 /* : nullable Layout[MClass] */;
1731 val* var340 /* : Map[Object, Int] */;
1732 val* var341 /* : nullable Object */;
1733 static val* varonce342;
1734 val* var343 /* : String */;
1735 char* var344 /* : NativeString */;
1736 long var345 /* : Int */;
1737 val* var346 /* : String */;
1738 static val* varonce347;
1739 val* var348 /* : String */;
1740 char* var349 /* : NativeString */;
1741 long var350 /* : Int */;
1742 val* var351 /* : String */;
1743 val* var352 /* : Array[Object] */;
1744 long var353 /* : Int */;
1745 val* var354 /* : NativeArray[Object] */;
1746 val* var355 /* : String */;
1747 static val* varonce357;
1748 val* var358 /* : String */;
1749 char* var359 /* : NativeString */;
1750 long var360 /* : Int */;
1751 val* var361 /* : String */;
1752 static val* varonce362;
1753 val* var363 /* : String */;
1754 char* var364 /* : NativeString */;
1755 long var365 /* : Int */;
1756 val* var366 /* : String */;
1757 val* var367 /* : String */;
1758 static val* varonce368;
1759 val* var369 /* : String */;
1760 char* var370 /* : NativeString */;
1761 long var371 /* : Int */;
1762 val* var372 /* : String */;
1763 short int var373 /* : Bool */;
1764 val* var374 /* : CodeWriter */;
1765 static val* varonce375;
1766 val* var376 /* : String */;
1767 char* var377 /* : NativeString */;
1768 long var378 /* : Int */;
1769 val* var379 /* : String */;
1770 static val* varonce380;
1771 val* var381 /* : String */;
1772 char* var382 /* : NativeString */;
1773 long var383 /* : Int */;
1774 val* var384 /* : String */;
1775 val* var385 /* : Array[Object] */;
1776 long var386 /* : Int */;
1777 val* var387 /* : NativeArray[Object] */;
1778 val* var388 /* : String */;
1779 val* var389 /* : CodeWriter */;
1780 static val* varonce390;
1781 val* var391 /* : String */;
1782 char* var392 /* : NativeString */;
1783 long var393 /* : Int */;
1784 val* var394 /* : String */;
1785 val* var395 /* : CodeWriter */;
1786 val* var396 /* : String */;
1787 static val* varonce397;
1788 val* var398 /* : String */;
1789 char* var399 /* : NativeString */;
1790 long var400 /* : Int */;
1791 val* var401 /* : String */;
1792 val* var402 /* : Array[Object] */;
1793 long var403 /* : Int */;
1794 val* var404 /* : NativeArray[Object] */;
1795 val* var405 /* : String */;
1796 val* var406 /* : CodeWriter */;
1797 static val* varonce407;
1798 val* var408 /* : String */;
1799 char* var409 /* : NativeString */;
1800 long var410 /* : Int */;
1801 val* var411 /* : String */;
1802 val* var412 /* : CodeWriter */;
1803 static val* varonce413;
1804 val* var414 /* : String */;
1805 char* var415 /* : NativeString */;
1806 long var416 /* : Int */;
1807 val* var417 /* : String */;
1808 static val* varonce418;
1809 val* var419 /* : String */;
1810 char* var420 /* : NativeString */;
1811 long var421 /* : Int */;
1812 val* var422 /* : String */;
1813 val* var423 /* : String */;
1814 static val* varonce424;
1815 val* var425 /* : String */;
1816 char* var426 /* : NativeString */;
1817 long var427 /* : Int */;
1818 val* var428 /* : String */;
1819 val* var429 /* : Array[Object] */;
1820 long var430 /* : Int */;
1821 val* var431 /* : NativeArray[Object] */;
1822 val* var432 /* : String */;
1823 static val* varonce433;
1824 val* var434 /* : String */;
1825 char* var435 /* : NativeString */;
1826 long var436 /* : Int */;
1827 val* var437 /* : String */;
1828 static val* varonce438;
1829 val* var439 /* : String */;
1830 char* var440 /* : NativeString */;
1831 long var441 /* : Int */;
1832 val* var442 /* : String */;
1833 val* var443 /* : Array[Object] */;
1834 long var444 /* : Int */;
1835 val* var445 /* : NativeArray[Object] */;
1836 val* var446 /* : String */;
1837 static val* varonce447;
1838 val* var448 /* : String */;
1839 char* var449 /* : NativeString */;
1840 long var450 /* : Int */;
1841 val* var451 /* : String */;
1842 val* var452 /* : String */;
1843 static val* varonce453;
1844 val* var454 /* : String */;
1845 char* var455 /* : NativeString */;
1846 long var456 /* : Int */;
1847 val* var457 /* : String */;
1848 val* var458 /* : String */;
1849 static val* varonce459;
1850 val* var460 /* : String */;
1851 char* var461 /* : NativeString */;
1852 long var462 /* : Int */;
1853 val* var463 /* : String */;
1854 val* var464 /* : Array[Object] */;
1855 long var465 /* : Int */;
1856 val* var466 /* : NativeArray[Object] */;
1857 val* var467 /* : String */;
1858 static val* varonce468;
1859 val* var469 /* : String */;
1860 char* var470 /* : NativeString */;
1861 long var471 /* : Int */;
1862 val* var472 /* : String */;
1863 static val* varonce473;
1864 val* var474 /* : String */;
1865 char* var475 /* : NativeString */;
1866 long var476 /* : Int */;
1867 val* var477 /* : String */;
1868 static val* varonce478;
1869 val* var479 /* : String */;
1870 char* var480 /* : NativeString */;
1871 long var481 /* : Int */;
1872 val* var482 /* : String */;
1873 val* var483 /* : Array[Object] */;
1874 long var484 /* : Int */;
1875 val* var485 /* : NativeArray[Object] */;
1876 val* var486 /* : String */;
1877 static val* varonce487;
1878 val* var488 /* : String */;
1879 char* var489 /* : NativeString */;
1880 long var490 /* : Int */;
1881 val* var491 /* : String */;
1882 val* var492 /* : Array[Object] */;
1883 long var493 /* : Int */;
1884 val* var494 /* : NativeArray[Object] */;
1885 val* var495 /* : String */;
1886 static val* varonce496;
1887 val* var497 /* : String */;
1888 char* var498 /* : NativeString */;
1889 long var499 /* : Int */;
1890 val* var500 /* : String */;
1891 static val* varonce501;
1892 val* var502 /* : String */;
1893 char* var503 /* : NativeString */;
1894 long var504 /* : Int */;
1895 val* var505 /* : String */;
1896 val* var506 /* : Array[Object] */;
1897 long var507 /* : Int */;
1898 val* var508 /* : NativeArray[Object] */;
1899 val* var509 /* : String */;
1900 static val* varonce510;
1901 val* var511 /* : String */;
1902 char* var512 /* : NativeString */;
1903 long var513 /* : Int */;
1904 val* var514 /* : String */;
1905 static val* varonce515;
1906 val* var516 /* : String */;
1907 char* var517 /* : NativeString */;
1908 long var518 /* : Int */;
1909 val* var519 /* : String */;
1910 static val* varonce520;
1911 val* var521 /* : String */;
1912 char* var522 /* : NativeString */;
1913 long var523 /* : Int */;
1914 val* var524 /* : String */;
1915 val* var525 /* : String */;
1916 static val* varonce526;
1917 val* var527 /* : String */;
1918 char* var528 /* : NativeString */;
1919 long var529 /* : Int */;
1920 val* var530 /* : String */;
1921 short int var531 /* : Bool */;
1922 val* var532 /* : CodeWriter */;
1923 static val* varonce533;
1924 val* var534 /* : String */;
1925 char* var535 /* : NativeString */;
1926 long var536 /* : Int */;
1927 val* var537 /* : String */;
1928 static val* varonce538;
1929 val* var539 /* : String */;
1930 char* var540 /* : NativeString */;
1931 long var541 /* : Int */;
1932 val* var542 /* : String */;
1933 val* var543 /* : Array[Object] */;
1934 long var544 /* : Int */;
1935 val* var545 /* : NativeArray[Object] */;
1936 val* var546 /* : String */;
1937 val* var547 /* : CodeWriter */;
1938 static val* varonce548;
1939 val* var549 /* : String */;
1940 char* var550 /* : NativeString */;
1941 long var551 /* : Int */;
1942 val* var552 /* : String */;
1943 val* var553 /* : CodeWriter */;
1944 static val* varonce554;
1945 val* var555 /* : String */;
1946 char* var556 /* : NativeString */;
1947 long var557 /* : Int */;
1948 val* var558 /* : String */;
1949 val* var559 /* : CodeWriter */;
1950 static val* varonce560;
1951 val* var561 /* : String */;
1952 char* var562 /* : NativeString */;
1953 long var563 /* : Int */;
1954 val* var564 /* : String */;
1955 static val* varonce565;
1956 val* var566 /* : String */;
1957 char* var567 /* : NativeString */;
1958 long var568 /* : Int */;
1959 val* var569 /* : String */;
1960 val* var570 /* : Array[Object] */;
1961 long var571 /* : Int */;
1962 val* var572 /* : NativeArray[Object] */;
1963 val* var573 /* : String */;
1964 val* var574 /* : String */;
1965 static val* varonce575;
1966 val* var576 /* : String */;
1967 char* var577 /* : NativeString */;
1968 long var578 /* : Int */;
1969 val* var579 /* : String */;
1970 static val* varonce580;
1971 val* var581 /* : String */;
1972 char* var582 /* : NativeString */;
1973 long var583 /* : Int */;
1974 val* var584 /* : String */;
1975 val* var585 /* : Array[Object] */;
1976 long var586 /* : Int */;
1977 val* var587 /* : NativeArray[Object] */;
1978 val* var588 /* : String */;
1979 static val* varonce589;
1980 val* var590 /* : String */;
1981 char* var591 /* : NativeString */;
1982 long var592 /* : Int */;
1983 val* var593 /* : String */;
1984 static val* varonce594;
1985 val* var595 /* : String */;
1986 char* var596 /* : NativeString */;
1987 long var597 /* : Int */;
1988 val* var598 /* : String */;
1989 val* var599 /* : Array[Object] */;
1990 long var600 /* : Int */;
1991 val* var601 /* : NativeArray[Object] */;
1992 val* var602 /* : String */;
1993 val* var603 /* : String */;
1994 static val* varonce604;
1995 val* var605 /* : String */;
1996 char* var606 /* : NativeString */;
1997 long var607 /* : Int */;
1998 val* var608 /* : String */;
1999 static val* varonce609;
2000 val* var610 /* : String */;
2001 char* var611 /* : NativeString */;
2002 long var612 /* : Int */;
2003 val* var613 /* : String */;
2004 val* var614 /* : Array[Object] */;
2005 long var615 /* : Int */;
2006 val* var616 /* : NativeArray[Object] */;
2007 val* var617 /* : String */;
2008 static val* varonce618;
2009 val* var619 /* : String */;
2010 char* var620 /* : NativeString */;
2011 long var621 /* : Int */;
2012 val* var622 /* : String */;
2013 val* var623 /* : RuntimeVariable */;
2014 val* var_res /* var res: RuntimeVariable */;
2015 short int var624 /* : Bool */;
2016 val* var625 /* : Array[MType] */;
2017 val* var626 /* : nullable Object */;
2018 val* var_mtype_elt /* var mtype_elt: MType */;
2019 static val* varonce627;
2020 val* var628 /* : String */;
2021 char* var629 /* : NativeString */;
2022 long var630 /* : Int */;
2023 val* var631 /* : String */;
2024 static val* varonce632;
2025 val* var633 /* : String */;
2026 char* var634 /* : NativeString */;
2027 long var635 /* : Int */;
2028 val* var636 /* : String */;
2029 val* var637 /* : String */;
2030 static val* varonce638;
2031 val* var639 /* : String */;
2032 char* var640 /* : NativeString */;
2033 long var641 /* : Int */;
2034 val* var642 /* : String */;
2035 val* var643 /* : Array[Object] */;
2036 long var644 /* : Int */;
2037 val* var645 /* : NativeArray[Object] */;
2038 val* var646 /* : String */;
2039 static val* varonce647;
2040 val* var648 /* : String */;
2041 char* var649 /* : NativeString */;
2042 long var650 /* : Int */;
2043 val* var651 /* : String */;
2044 val* var652 /* : Array[Object] */;
2045 long var653 /* : Int */;
2046 val* var654 /* : NativeArray[Object] */;
2047 val* var655 /* : String */;
2048 static val* varonce656;
2049 val* var657 /* : String */;
2050 char* var658 /* : NativeString */;
2051 long var659 /* : Int */;
2052 val* var660 /* : String */;
2053 static val* varonce661;
2054 val* var662 /* : String */;
2055 char* var663 /* : NativeString */;
2056 long var664 /* : Int */;
2057 val* var665 /* : String */;
2058 val* var666 /* : Array[Object] */;
2059 long var667 /* : Int */;
2060 val* var668 /* : NativeArray[Object] */;
2061 val* var669 /* : String */;
2062 static val* varonce670;
2063 val* var671 /* : String */;
2064 char* var672 /* : NativeString */;
2065 long var673 /* : Int */;
2066 val* var674 /* : String */;
2067 static val* varonce675;
2068 val* var676 /* : String */;
2069 char* var677 /* : NativeString */;
2070 long var678 /* : Int */;
2071 val* var679 /* : String */;
2072 val* var680 /* : Array[Object] */;
2073 long var681 /* : Int */;
2074 val* var682 /* : NativeArray[Object] */;
2075 val* var683 /* : String */;
2076 static val* varonce684;
2077 val* var685 /* : String */;
2078 char* var686 /* : NativeString */;
2079 long var687 /* : Int */;
2080 val* var688 /* : String */;
2081 static val* varonce689;
2082 val* var690 /* : String */;
2083 char* var691 /* : NativeString */;
2084 long var692 /* : Int */;
2085 val* var693 /* : String */;
2086 val* var694 /* : Array[Object] */;
2087 long var695 /* : Int */;
2088 val* var696 /* : NativeArray[Object] */;
2089 val* var697 /* : String */;
2090 val* var698 /* : String */;
2091 static val* varonce699;
2092 val* var700 /* : String */;
2093 char* var701 /* : NativeString */;
2094 long var702 /* : Int */;
2095 val* var703 /* : String */;
2096 static val* varonce704;
2097 val* var705 /* : String */;
2098 char* var706 /* : NativeString */;
2099 long var707 /* : Int */;
2100 val* var708 /* : String */;
2101 val* var709 /* : Array[Object] */;
2102 long var710 /* : Int */;
2103 val* var711 /* : NativeArray[Object] */;
2104 val* var712 /* : String */;
2105 static val* varonce713;
2106 val* var714 /* : String */;
2107 char* var715 /* : NativeString */;
2108 long var716 /* : Int */;
2109 val* var717 /* : String */;
2110 static val* varonce718;
2111 val* var719 /* : String */;
2112 char* var720 /* : NativeString */;
2113 long var721 /* : Int */;
2114 val* var722 /* : String */;
2115 val* var723 /* : Array[Object] */;
2116 long var724 /* : Int */;
2117 val* var725 /* : NativeArray[Object] */;
2118 val* var726 /* : String */;
2119 val* var727 /* : String */;
2120 static val* varonce728;
2121 val* var729 /* : String */;
2122 char* var730 /* : NativeString */;
2123 long var731 /* : Int */;
2124 val* var732 /* : String */;
2125 static val* varonce733;
2126 val* var734 /* : String */;
2127 char* var735 /* : NativeString */;
2128 long var736 /* : Int */;
2129 val* var737 /* : String */;
2130 val* var738 /* : Array[Object] */;
2131 long var739 /* : Int */;
2132 val* var740 /* : NativeArray[Object] */;
2133 val* var741 /* : String */;
2134 static val* varonce742;
2135 val* var743 /* : String */;
2136 char* var744 /* : NativeString */;
2137 long var745 /* : Int */;
2138 val* var746 /* : String */;
2139 val* var747 /* : RuntimeVariable */;
2140 val* var_res748 /* var res: RuntimeVariable */;
2141 short int var749 /* : Bool */;
2142 static val* varonce750;
2143 val* var751 /* : String */;
2144 char* var752 /* : NativeString */;
2145 long var753 /* : Int */;
2146 val* var754 /* : String */;
2147 long var755 /* : Int */;
2148 static val* varonce756;
2149 val* var757 /* : String */;
2150 char* var758 /* : NativeString */;
2151 long var759 /* : Int */;
2152 val* var760 /* : String */;
2153 val* var761 /* : Array[Object] */;
2154 long var762 /* : Int */;
2155 val* var763 /* : NativeArray[Object] */;
2156 val* var764 /* : Object */;
2157 val* var765 /* : String */;
2158 static val* varonce766;
2159 val* var767 /* : String */;
2160 char* var768 /* : NativeString */;
2161 long var769 /* : Int */;
2162 val* var770 /* : String */;
2163 val* var771 /* : Array[Object] */;
2164 long var772 /* : Int */;
2165 val* var773 /* : NativeArray[Object] */;
2166 val* var774 /* : String */;
2167 static val* varonce775;
2168 val* var776 /* : String */;
2169 char* var777 /* : NativeString */;
2170 long var778 /* : Int */;
2171 val* var779 /* : String */;
2172 static val* varonce780;
2173 val* var781 /* : String */;
2174 char* var782 /* : NativeString */;
2175 long var783 /* : Int */;
2176 val* var784 /* : String */;
2177 val* var785 /* : Array[Object] */;
2178 long var786 /* : Int */;
2179 val* var787 /* : NativeArray[Object] */;
2180 val* var788 /* : String */;
2181 static val* varonce789;
2182 val* var790 /* : String */;
2183 char* var791 /* : NativeString */;
2184 long var792 /* : Int */;
2185 val* var793 /* : String */;
2186 static val* varonce794;
2187 val* var795 /* : String */;
2188 char* var796 /* : NativeString */;
2189 long var797 /* : Int */;
2190 val* var798 /* : String */;
2191 val* var799 /* : Array[Object] */;
2192 long var800 /* : Int */;
2193 val* var801 /* : NativeArray[Object] */;
2194 val* var802 /* : String */;
2195 static val* varonce803;
2196 val* var804 /* : String */;
2197 char* var805 /* : NativeString */;
2198 long var806 /* : Int */;
2199 val* var807 /* : String */;
2200 var_mclass = p0;
2201 var = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
2202 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model__MClassDef__bound_mtype]))(var) /* bound_mtype on <var:MClassDef>*/;
2203 var_mtype = var1;
2204 var2 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
2205 var_c_name = var2;
2206 var3 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateErasureCompiler>*/;
2207 var4 = ((val* (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var3, var_mclass) /* [] on <var3:Map[MClass, Array[nullable MPropDef]]>*/;
2208 var_vft = var4;
2209 var5 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateErasureCompiler>*/;
2210 var6 = ((val* (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var5, var_mclass) /* [] on <var5:Map[MClass, Array[nullable MPropDef]]>*/;
2211 var_attrs = var6;
2212 var7 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables]))(self) /* class_tables on <self:SeparateErasureCompiler>*/;
2213 var8 = ((val* (*)(val*, val*))(var7->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var7, var_mclass) /* [] on <var7:Map[MClass, Array[nullable MClass]]>*/;
2214 var_class_table = var8;
2215 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateErasureCompiler>*/;
2216 var_v = var9;
2217 if (varonce) {
2218 var10 = varonce;
2219 } else {
2220 var11 = "/* runtime class ";
2221 var12 = 17;
2222 var13 = string__NativeString__to_s_with_length(var11, var12);
2223 var10 = var13;
2224 varonce = var10;
2225 }
2226 if (varonce14) {
2227 var15 = varonce14;
2228 } else {
2229 var16 = " */";
2230 var17 = 3;
2231 var18 = string__NativeString__to_s_with_length(var16, var17);
2232 var15 = var18;
2233 varonce14 = var15;
2234 }
2235 var19 = NEW_array__Array(&type_array__Arraykernel__Object);
2236 { /* var19 = array_instance Array[Object] */
2237 var20 = 3;
2238 var21 = NEW_array__NativeArray(var20, &type_array__NativeArraykernel__Object);
2239 ((struct instance_array__NativeArray*)var21)->values[0] = (val*) var10;
2240 ((struct instance_array__NativeArray*)var21)->values[1] = (val*) var_c_name;
2241 ((struct instance_array__NativeArray*)var21)->values[2] = (val*) var15;
2242 ((void (*)(val*, val*, long))(var19->class->vft[COLOR_array__Array__with_native]))(var19, var21, var20) /* with_native on <var19:Array[Object]>*/;
2243 }
2244 var22 = ((val* (*)(val*))(var19->class->vft[COLOR_string__Object__to_s]))(var19) /* to_s on <var19:Array[Object]>*/;
2245 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var22) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2246 if (varonce23) {
2247 var24 = varonce23;
2248 } else {
2249 var25 = "class_";
2250 var26 = 6;
2251 var27 = string__NativeString__to_s_with_length(var25, var26);
2252 var24 = var27;
2253 varonce23 = var24;
2254 }
2255 var28 = NEW_array__Array(&type_array__Arraykernel__Object);
2256 { /* var28 = array_instance Array[Object] */
2257 var29 = 2;
2258 var30 = NEW_array__NativeArray(var29, &type_array__NativeArraykernel__Object);
2259 ((struct instance_array__NativeArray*)var30)->values[0] = (val*) var24;
2260 ((struct instance_array__NativeArray*)var30)->values[1] = (val*) var_c_name;
2261 ((void (*)(val*, val*, long))(var28->class->vft[COLOR_array__Array__with_native]))(var28, var30, var29) /* with_native on <var28:Array[Object]>*/;
2262 }
2263 var31 = ((val* (*)(val*))(var28->class->vft[COLOR_string__Object__to_s]))(var28) /* to_s on <var28:Array[Object]>*/;
2264 if (varonce32) {
2265 var33 = varonce32;
2266 } else {
2267 var34 = "extern const struct class class_";
2268 var35 = 32;
2269 var36 = string__NativeString__to_s_with_length(var34, var35);
2270 var33 = var36;
2271 varonce32 = var33;
2272 }
2273 if (varonce37) {
2274 var38 = varonce37;
2275 } else {
2276 var39 = ";";
2277 var40 = 1;
2278 var41 = string__NativeString__to_s_with_length(var39, var40);
2279 var38 = var41;
2280 varonce37 = var38;
2281 }
2282 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
2283 { /* var42 = array_instance Array[Object] */
2284 var43 = 3;
2285 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
2286 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var33;
2287 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_c_name;
2288 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var38;
2289 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
2290 }
2291 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
2292 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var31, var45) /* provide_declaration on <self:SeparateErasureCompiler>*/;
2293 if (varonce46) {
2294 var47 = varonce46;
2295 } else {
2296 var48 = "extern const struct type_table type_table_";
2297 var49 = 42;
2298 var50 = string__NativeString__to_s_with_length(var48, var49);
2299 var47 = var50;
2300 varonce46 = var47;
2301 }
2302 if (varonce51) {
2303 var52 = varonce51;
2304 } else {
2305 var53 = ";";
2306 var54 = 1;
2307 var55 = string__NativeString__to_s_with_length(var53, var54);
2308 var52 = var55;
2309 varonce51 = var52;
2310 }
2311 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
2312 { /* var56 = array_instance Array[Object] */
2313 var57 = 3;
2314 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
2315 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var47;
2316 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var_c_name;
2317 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var52;
2318 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
2319 }
2320 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
2321 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var59) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2322 if (varonce60) {
2323 var61 = varonce60;
2324 } else {
2325 var62 = "const struct class class_";
2326 var63 = 25;
2327 var64 = string__NativeString__to_s_with_length(var62, var63);
2328 var61 = var64;
2329 varonce60 = var61;
2330 }
2331 if (varonce65) {
2332 var66 = varonce65;
2333 } else {
2334 var67 = " = {";
2335 var68 = 4;
2336 var69 = string__NativeString__to_s_with_length(var67, var68);
2337 var66 = var69;
2338 varonce65 = var66;
2339 }
2340 var70 = NEW_array__Array(&type_array__Arraykernel__Object);
2341 { /* var70 = array_instance Array[Object] */
2342 var71 = 3;
2343 var72 = NEW_array__NativeArray(var71, &type_array__NativeArraykernel__Object);
2344 ((struct instance_array__NativeArray*)var72)->values[0] = (val*) var61;
2345 ((struct instance_array__NativeArray*)var72)->values[1] = (val*) var_c_name;
2346 ((struct instance_array__NativeArray*)var72)->values[2] = (val*) var66;
2347 ((void (*)(val*, val*, long))(var70->class->vft[COLOR_array__Array__with_native]))(var70, var72, var71) /* with_native on <var70:Array[Object]>*/;
2348 }
2349 var73 = ((val* (*)(val*))(var70->class->vft[COLOR_string__Object__to_s]))(var70) /* to_s on <var70:Array[Object]>*/;
2350 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var73) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2351 var74 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2352 if (var74 == NULL) {
2353 fprintf(stderr, "Runtime error: %s", "Reciever is null");
2354 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 235);
2355 show_backtrace(1);
2356 } else {
2357 var75 = ((val* (*)(val*))(var74->class->vft[COLOR_layout_builders__Layout__ids]))(var74) /* ids on <var74:nullable Layout[MClass]>*/;
2358 }
2359 var76 = ((val* (*)(val*, val*))(var75->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var75, var_mclass) /* [] on <var75:Map[Object, Int](Map[MClass, Int])>*/;
2360 if (varonce77) {
2361 var78 = varonce77;
2362 } else {
2363 var79 = ",";
2364 var80 = 1;
2365 var81 = string__NativeString__to_s_with_length(var79, var80);
2366 var78 = var81;
2367 varonce77 = var78;
2368 }
2369 var82 = NEW_array__Array(&type_array__Arraykernel__Object);
2370 { /* var82 = array_instance Array[Object] */
2371 var83 = 2;
2372 var84 = NEW_array__NativeArray(var83, &type_array__NativeArraykernel__Object);
2373 ((struct instance_array__NativeArray*)var84)->values[0] = (val*) var76;
2374 ((struct instance_array__NativeArray*)var84)->values[1] = (val*) var78;
2375 ((void (*)(val*, val*, long))(var82->class->vft[COLOR_array__Array__with_native]))(var82, var84, var83) /* with_native on <var82:Array[Object]>*/;
2376 }
2377 var85 = ((val* (*)(val*))(var82->class->vft[COLOR_string__Object__to_s]))(var82) /* to_s on <var82:Array[Object]>*/;
2378 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var85) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2379 if (varonce86) {
2380 var87 = varonce86;
2381 } else {
2382 var88 = "\"";
2383 var89 = 1;
2384 var90 = string__NativeString__to_s_with_length(var88, var89);
2385 var87 = var90;
2386 varonce86 = var87;
2387 }
2388 var91 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
2389 if (varonce92) {
2390 var93 = varonce92;
2391 } else {
2392 var94 = "\", /* class_name_string */";
2393 var95 = 26;
2394 var96 = string__NativeString__to_s_with_length(var94, var95);
2395 var93 = var96;
2396 varonce92 = var93;
2397 }
2398 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
2399 { /* var97 = array_instance Array[Object] */
2400 var98 = 3;
2401 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
2402 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var87;
2403 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var91;
2404 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
2405 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
2406 }
2407 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
2408 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var100) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2409 var101 = ((long (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kind_of]))(self, var_mclass) /* box_kind_of on <self:SeparateErasureCompiler>*/;
2410 if (varonce102) {
2411 var103 = varonce102;
2412 } else {
2413 var104 = ", /* box_kind */";
2414 var105 = 16;
2415 var106 = string__NativeString__to_s_with_length(var104, var105);
2416 var103 = var106;
2417 varonce102 = var103;
2418 }
2419 var107 = NEW_array__Array(&type_array__Arraykernel__Object);
2420 { /* var107 = array_instance Array[Object] */
2421 var108 = 2;
2422 var109 = NEW_array__NativeArray(var108, &type_array__NativeArraykernel__Object);
2423 var110 = BOX_kernel__Int(var101); /* autobox from Int to Object */
2424 ((struct instance_array__NativeArray*)var109)->values[0] = (val*) var110;
2425 ((struct instance_array__NativeArray*)var109)->values[1] = (val*) var103;
2426 ((void (*)(val*, val*, long))(var107->class->vft[COLOR_array__Array__with_native]))(var107, var109, var108) /* with_native on <var107:Array[Object]>*/;
2427 }
2428 var111 = ((val* (*)(val*))(var107->class->vft[COLOR_string__Object__to_s]))(var107) /* to_s on <var107:Array[Object]>*/;
2429 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var111) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2430 var112 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2431 var_layout = var112;
2432 /* <var_layout:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
2433 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
2434 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
2435 if(var_layout == NULL) {
2436 var113 = 0;
2437 } else {
2438 if(cltype >= var_layout->type->table_size) {
2439 var113 = 0;
2440 } else {
2441 var113 = var_layout->type->type_table[cltype] == idtype;
2442 }
2443 }
2444 if (var113){
2445 var114 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__masks]))(var_layout) /* masks on <var_layout:nullable Layout[MClass](PHLayout[MClass, MClass])>*/;
2446 var115 = ((val* (*)(val*, val*))(var114->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var114, var_mclass) /* [] on <var114:Map[Object, Int](Map[MClass, Int])>*/;
2447 if (varonce116) {
2448 var117 = varonce116;
2449 } else {
2450 var118 = ",";
2451 var119 = 1;
2452 var120 = string__NativeString__to_s_with_length(var118, var119);
2453 var117 = var120;
2454 varonce116 = var117;
2455 }
2456 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
2457 { /* var121 = array_instance Array[Object] */
2458 var122 = 2;
2459 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
2460 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var115;
2461 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var117;
2462 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
2463 }
2464 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
2465 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var124) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2466 } else {
2467 if (var_layout == NULL) {
2468 fprintf(stderr, "Runtime error: %s", "Reciever is null");
2469 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 242);
2470 show_backtrace(1);
2471 } else {
2472 var125 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MClass]>*/;
2473 }
2474 var126 = ((val* (*)(val*, val*))(var125->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var125, var_mclass) /* [] on <var125:Map[Object, Int](Map[MClass, Int])>*/;
2475 if (varonce127) {
2476 var128 = varonce127;
2477 } else {
2478 var129 = ",";
2479 var130 = 1;
2480 var131 = string__NativeString__to_s_with_length(var129, var130);
2481 var128 = var131;
2482 varonce127 = var128;
2483 }
2484 var132 = NEW_array__Array(&type_array__Arraykernel__Object);
2485 { /* var132 = array_instance Array[Object] */
2486 var133 = 2;
2487 var134 = NEW_array__NativeArray(var133, &type_array__NativeArraykernel__Object);
2488 ((struct instance_array__NativeArray*)var134)->values[0] = (val*) var126;
2489 ((struct instance_array__NativeArray*)var134)->values[1] = (val*) var128;
2490 ((void (*)(val*, val*, long))(var132->class->vft[COLOR_array__Array__with_native]))(var132, var134, var133) /* with_native on <var132:Array[Object]>*/;
2491 }
2492 var135 = ((val* (*)(val*))(var132->class->vft[COLOR_string__Object__to_s]))(var132) /* to_s on <var132:Array[Object]>*/;
2493 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var135) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2494 }
2495 var136 = ((short int (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table]))(self, var_mclass) /* build_class_vts_table on <self:SeparateErasureCompiler>*/;
2496 if (var136){
2497 if (varonce137) {
2498 var138 = varonce137;
2499 } else {
2500 var139 = "vts_table_";
2501 var140 = 10;
2502 var141 = string__NativeString__to_s_with_length(var139, var140);
2503 var138 = var141;
2504 varonce137 = var138;
2505 }
2506 var142 = NEW_array__Array(&type_array__Arraykernel__Object);
2507 { /* var142 = array_instance Array[Object] */
2508 var143 = 2;
2509 var144 = NEW_array__NativeArray(var143, &type_array__NativeArraykernel__Object);
2510 ((struct instance_array__NativeArray*)var144)->values[0] = (val*) var138;
2511 ((struct instance_array__NativeArray*)var144)->values[1] = (val*) var_c_name;
2512 ((void (*)(val*, val*, long))(var142->class->vft[COLOR_array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
2513 }
2514 var145 = ((val* (*)(val*))(var142->class->vft[COLOR_string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
2515 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var145) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2516 if (varonce146) {
2517 var147 = varonce146;
2518 } else {
2519 var148 = "&vts_table_";
2520 var149 = 11;
2521 var150 = string__NativeString__to_s_with_length(var148, var149);
2522 var147 = var150;
2523 varonce146 = var147;
2524 }
2525 if (varonce151) {
2526 var152 = varonce151;
2527 } else {
2528 var153 = ",";
2529 var154 = 1;
2530 var155 = string__NativeString__to_s_with_length(var153, var154);
2531 var152 = var155;
2532 varonce151 = var152;
2533 }
2534 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
2535 { /* var156 = array_instance Array[Object] */
2536 var157 = 3;
2537 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
2538 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var147;
2539 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var_c_name;
2540 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var152;
2541 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
2542 }
2543 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
2544 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var159) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2545 } else {
2546 if (varonce160) {
2547 var161 = varonce160;
2548 } else {
2549 var162 = "NULL,";
2550 var163 = 5;
2551 var164 = string__NativeString__to_s_with_length(var162, var163);
2552 var161 = var164;
2553 varonce160 = var161;
2554 }
2555 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var161) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2556 }
2557 if (varonce165) {
2558 var166 = varonce165;
2559 } else {
2560 var167 = "&type_table_";
2561 var168 = 12;
2562 var169 = string__NativeString__to_s_with_length(var167, var168);
2563 var166 = var169;
2564 varonce165 = var166;
2565 }
2566 if (varonce170) {
2567 var171 = varonce170;
2568 } else {
2569 var172 = ",";
2570 var173 = 1;
2571 var174 = string__NativeString__to_s_with_length(var172, var173);
2572 var171 = var174;
2573 varonce170 = var171;
2574 }
2575 var175 = NEW_array__Array(&type_array__Arraykernel__Object);
2576 { /* var175 = array_instance Array[Object] */
2577 var176 = 3;
2578 var177 = NEW_array__NativeArray(var176, &type_array__NativeArraykernel__Object);
2579 ((struct instance_array__NativeArray*)var177)->values[0] = (val*) var166;
2580 ((struct instance_array__NativeArray*)var177)->values[1] = (val*) var_c_name;
2581 ((struct instance_array__NativeArray*)var177)->values[2] = (val*) var171;
2582 ((void (*)(val*, val*, long))(var175->class->vft[COLOR_array__Array__with_native]))(var175, var177, var176) /* with_native on <var175:Array[Object]>*/;
2583 }
2584 var178 = ((val* (*)(val*))(var175->class->vft[COLOR_string__Object__to_s]))(var175) /* to_s on <var175:Array[Object]>*/;
2585 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var178) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2586 if (varonce179) {
2587 var180 = varonce179;
2588 } else {
2589 var181 = "{";
2590 var182 = 1;
2591 var183 = string__NativeString__to_s_with_length(var181, var182);
2592 var180 = var183;
2593 varonce179 = var180;
2594 }
2595 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var180) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2596 var184 = NEW_range__Range(&type_range__Rangekernel__Int);
2597 var185 = 0;
2598 var186 = ((long (*)(val*))(var_vft->class->vft[COLOR_abstract_collection__Collection__length]))(var_vft) /* length on <var_vft:Array[nullable MPropDef]>*/;
2599 var187 = BOX_kernel__Int(var185); /* autobox from Int to Discrete */
2600 var188 = BOX_kernel__Int(var186); /* autobox from Int to Discrete */
2601 ((void (*)(val*, val*, val*))(var184->class->vft[COLOR_range__Range__without_last]))(var184, var187, var188) /* without_last on <var184:Range[Int]>*/;
2602 var189 = ((val* (*)(val*))(var184->class->vft[COLOR_abstract_collection__Collection__iterator]))(var184) /* iterator on <var184:Range[Int]>*/;
2603 for(;;) {
2604 var190 = ((short int (*)(val*))(var189->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var189) /* is_ok on <var189:Iterator[nullable Object]>*/;
2605 if(!var190) break;
2606 var191 = ((val* (*)(val*))(var189->class->vft[COLOR_abstract_collection__Iterator__item]))(var189) /* item on <var189:Iterator[nullable Object]>*/;
2607 var192 = ((struct instance_kernel__Int*)var191)->value; /* autounbox from nullable Object to Int */;
2608 var_i = var192;
2609 var193 = ((val* (*)(val*, long))(var_vft->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_vft, var_i) /* [] on <var_vft:Array[nullable MPropDef]>*/;
2610 var_mpropdef = var193;
2611 var194 = NULL;
2612 if (var_mpropdef == NULL) {
2613 var195 = 1; /* is null */
2614 } else {
2615 var195 = 0; /* arg is null but recv is not */
2616 }
2617 if (var195){
2618 if (varonce196) {
2619 var197 = varonce196;
2620 } else {
2621 var198 = "NULL, /* empty */";
2622 var199 = 17;
2623 var200 = string__NativeString__to_s_with_length(var198, var199);
2624 var197 = var200;
2625 varonce196 = var197;
2626 }
2627 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var197) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2628 } else {
2629 var202 = 1;
2630 var_ = var202;
2631 if (var202){
2632 var201 = var_;
2633 } else {
2634 var203 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2635 var204 = ((val* (*)(val*))(var203->class->vft[COLOR_model__MClassDef__bound_mtype]))(var203) /* bound_mtype on <var203:MClassDef>*/;
2636 var205 = ((val* (*)(val*))(var204->class->vft[COLOR_abstract_compiler__MType__ctype]))(var204) /* ctype on <var204:MClassType>*/;
2637 if (varonce206) {
2638 var207 = varonce206;
2639 } else {
2640 var208 = "val*";
2641 var209 = 4;
2642 var210 = string__NativeString__to_s_with_length(var208, var209);
2643 var207 = var210;
2644 varonce206 = var207;
2645 }
2646 var211 = ((short int (*)(val*, val*))(var205->class->vft[COLOR_kernel__Object___33d_61d]))(var205, var207) /* != on <var205:String>*/;
2647 var201 = var211;
2648 }
2649 if (var201){
2650 if (varonce212) {
2651 var213 = varonce212;
2652 } else {
2653 var214 = "VIRTUAL_";
2654 var215 = 8;
2655 var216 = string__NativeString__to_s_with_length(var214, var215);
2656 var213 = var216;
2657 varonce212 = var213;
2658 }
2659 var217 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2660 var218 = NEW_array__Array(&type_array__Arraykernel__Object);
2661 { /* var218 = array_instance Array[Object] */
2662 var219 = 2;
2663 var220 = NEW_array__NativeArray(var219, &type_array__NativeArraykernel__Object);
2664 ((struct instance_array__NativeArray*)var220)->values[0] = (val*) var213;
2665 ((struct instance_array__NativeArray*)var220)->values[1] = (val*) var217;
2666 ((void (*)(val*, val*, long))(var218->class->vft[COLOR_array__Array__with_native]))(var218, var220, var219) /* with_native on <var218:Array[Object]>*/;
2667 }
2668 var221 = ((val* (*)(val*))(var218->class->vft[COLOR_string__Object__to_s]))(var218) /* to_s on <var218:Array[Object]>*/;
2669 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var221) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2670 if (varonce222) {
2671 var223 = varonce222;
2672 } else {
2673 var224 = "(nitmethod_t)VIRTUAL_";
2674 var225 = 21;
2675 var226 = string__NativeString__to_s_with_length(var224, var225);
2676 var223 = var226;
2677 varonce222 = var223;
2678 }
2679 var227 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2680 if (varonce228) {
2681 var229 = varonce228;
2682 } else {
2683 var230 = ", /* pointer to ";
2684 var231 = 16;
2685 var232 = string__NativeString__to_s_with_length(var230, var231);
2686 var229 = var232;
2687 varonce228 = var229;
2688 }
2689 var233 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
2690 if (varonce234) {
2691 var235 = varonce234;
2692 } else {
2693 var236 = ":";
2694 var237 = 1;
2695 var238 = string__NativeString__to_s_with_length(var236, var237);
2696 var235 = var238;
2697 varonce234 = var235;
2698 }
2699 if (varonce239) {
2700 var240 = varonce239;
2701 } else {
2702 var241 = ":";
2703 var242 = 1;
2704 var243 = string__NativeString__to_s_with_length(var241, var242);
2705 var240 = var243;
2706 varonce239 = var240;
2707 }
2708 if (varonce244) {
2709 var245 = varonce244;
2710 } else {
2711 var246 = " */";
2712 var247 = 3;
2713 var248 = string__NativeString__to_s_with_length(var246, var247);
2714 var245 = var248;
2715 varonce244 = var245;
2716 }
2717 var249 = NEW_array__Array(&type_array__Arraykernel__Object);
2718 { /* var249 = array_instance Array[Object] */
2719 var250 = 9;
2720 var251 = NEW_array__NativeArray(var250, &type_array__NativeArraykernel__Object);
2721 ((struct instance_array__NativeArray*)var251)->values[0] = (val*) var223;
2722 ((struct instance_array__NativeArray*)var251)->values[1] = (val*) var227;
2723 ((struct instance_array__NativeArray*)var251)->values[2] = (val*) var229;
2724 ((struct instance_array__NativeArray*)var251)->values[3] = (val*) var233;
2725 ((struct instance_array__NativeArray*)var251)->values[4] = (val*) var235;
2726 ((struct instance_array__NativeArray*)var251)->values[5] = (val*) var_mclass;
2727 ((struct instance_array__NativeArray*)var251)->values[6] = (val*) var240;
2728 ((struct instance_array__NativeArray*)var251)->values[7] = (val*) var_mpropdef;
2729 ((struct instance_array__NativeArray*)var251)->values[8] = (val*) var245;
2730 ((void (*)(val*, val*, long))(var249->class->vft[COLOR_array__Array__with_native]))(var249, var251, var250) /* with_native on <var249:Array[Object]>*/;
2731 }
2732 var252 = ((val* (*)(val*))(var249->class->vft[COLOR_string__Object__to_s]))(var249) /* to_s on <var249:Array[Object]>*/;
2733 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var252) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2734 } else {
2735 var253 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2736 var254 = NEW_array__Array(&type_array__Arraykernel__Object);
2737 { /* var254 = array_instance Array[Object] */
2738 var255 = 1;
2739 var256 = NEW_array__NativeArray(var255, &type_array__NativeArraykernel__Object);
2740 ((struct instance_array__NativeArray*)var256)->values[0] = (val*) var253;
2741 ((void (*)(val*, val*, long))(var254->class->vft[COLOR_array__Array__with_native]))(var254, var256, var255) /* with_native on <var254:Array[Object]>*/;
2742 }
2743 var257 = ((val* (*)(val*))(var254->class->vft[COLOR_string__Object__to_s]))(var254) /* to_s on <var254:Array[Object]>*/;
2744 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var257) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2745 if (varonce258) {
2746 var259 = varonce258;
2747 } else {
2748 var260 = "(nitmethod_t)";
2749 var261 = 13;
2750 var262 = string__NativeString__to_s_with_length(var260, var261);
2751 var259 = var262;
2752 varonce258 = var259;
2753 }
2754 var263 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2755 if (varonce264) {
2756 var265 = varonce264;
2757 } else {
2758 var266 = ", /* pointer to ";
2759 var267 = 16;
2760 var268 = string__NativeString__to_s_with_length(var266, var267);
2761 var265 = var268;
2762 varonce264 = var265;
2763 }
2764 var269 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
2765 if (varonce270) {
2766 var271 = varonce270;
2767 } else {
2768 var272 = ":";
2769 var273 = 1;
2770 var274 = string__NativeString__to_s_with_length(var272, var273);
2771 var271 = var274;
2772 varonce270 = var271;
2773 }
2774 if (varonce275) {
2775 var276 = varonce275;
2776 } else {
2777 var277 = ":";
2778 var278 = 1;
2779 var279 = string__NativeString__to_s_with_length(var277, var278);
2780 var276 = var279;
2781 varonce275 = var276;
2782 }
2783 if (varonce280) {
2784 var281 = varonce280;
2785 } else {
2786 var282 = " */";
2787 var283 = 3;
2788 var284 = string__NativeString__to_s_with_length(var282, var283);
2789 var281 = var284;
2790 varonce280 = var281;
2791 }
2792 var285 = NEW_array__Array(&type_array__Arraykernel__Object);
2793 { /* var285 = array_instance Array[Object] */
2794 var286 = 9;
2795 var287 = NEW_array__NativeArray(var286, &type_array__NativeArraykernel__Object);
2796 ((struct instance_array__NativeArray*)var287)->values[0] = (val*) var259;
2797 ((struct instance_array__NativeArray*)var287)->values[1] = (val*) var263;
2798 ((struct instance_array__NativeArray*)var287)->values[2] = (val*) var265;
2799 ((struct instance_array__NativeArray*)var287)->values[3] = (val*) var269;
2800 ((struct instance_array__NativeArray*)var287)->values[4] = (val*) var271;
2801 ((struct instance_array__NativeArray*)var287)->values[5] = (val*) var_mclass;
2802 ((struct instance_array__NativeArray*)var287)->values[6] = (val*) var276;
2803 ((struct instance_array__NativeArray*)var287)->values[7] = (val*) var_mpropdef;
2804 ((struct instance_array__NativeArray*)var287)->values[8] = (val*) var281;
2805 ((void (*)(val*, val*, long))(var285->class->vft[COLOR_array__Array__with_native]))(var285, var287, var286) /* with_native on <var285:Array[Object]>*/;
2806 }
2807 var288 = ((val* (*)(val*))(var285->class->vft[COLOR_string__Object__to_s]))(var285) /* to_s on <var285:Array[Object]>*/;
2808 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var288) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2809 }
2810 }
2811 CONTINUE_label: (void)0;
2812 ((void (*)(val*))(var189->class->vft[COLOR_abstract_collection__Iterator__next]))(var189) /* next on <var189:Iterator[nullable Object]>*/;
2813 }
2814 BREAK_label: (void)0;
2815 if (varonce289) {
2816 var290 = varonce289;
2817 } else {
2818 var291 = "}";
2819 var292 = 1;
2820 var293 = string__NativeString__to_s_with_length(var291, var292);
2821 var290 = var293;
2822 varonce289 = var290;
2823 }
2824 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var290) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2825 if (varonce294) {
2826 var295 = varonce294;
2827 } else {
2828 var296 = "};";
2829 var297 = 2;
2830 var298 = string__NativeString__to_s_with_length(var296, var297);
2831 var295 = var298;
2832 varonce294 = var295;
2833 }
2834 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var295) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2835 if (varonce299) {
2836 var300 = varonce299;
2837 } else {
2838 var301 = "const struct type_table type_table_";
2839 var302 = 35;
2840 var303 = string__NativeString__to_s_with_length(var301, var302);
2841 var300 = var303;
2842 varonce299 = var300;
2843 }
2844 if (varonce304) {
2845 var305 = varonce304;
2846 } else {
2847 var306 = " = {";
2848 var307 = 4;
2849 var308 = string__NativeString__to_s_with_length(var306, var307);
2850 var305 = var308;
2851 varonce304 = var305;
2852 }
2853 var309 = NEW_array__Array(&type_array__Arraykernel__Object);
2854 { /* var309 = array_instance Array[Object] */
2855 var310 = 3;
2856 var311 = NEW_array__NativeArray(var310, &type_array__NativeArraykernel__Object);
2857 ((struct instance_array__NativeArray*)var311)->values[0] = (val*) var300;
2858 ((struct instance_array__NativeArray*)var311)->values[1] = (val*) var_c_name;
2859 ((struct instance_array__NativeArray*)var311)->values[2] = (val*) var305;
2860 ((void (*)(val*, val*, long))(var309->class->vft[COLOR_array__Array__with_native]))(var309, var311, var310) /* with_native on <var309:Array[Object]>*/;
2861 }
2862 var312 = ((val* (*)(val*))(var309->class->vft[COLOR_string__Object__to_s]))(var309) /* to_s on <var309:Array[Object]>*/;
2863 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var312) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2864 var313 = ((long (*)(val*))(var_class_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_class_table) /* length on <var_class_table:Array[nullable MClass]>*/;
2865 if (varonce314) {
2866 var315 = varonce314;
2867 } else {
2868 var316 = ",";
2869 var317 = 1;
2870 var318 = string__NativeString__to_s_with_length(var316, var317);
2871 var315 = var318;
2872 varonce314 = var315;
2873 }
2874 var319 = NEW_array__Array(&type_array__Arraykernel__Object);
2875 { /* var319 = array_instance Array[Object] */
2876 var320 = 2;
2877 var321 = NEW_array__NativeArray(var320, &type_array__NativeArraykernel__Object);
2878 var322 = BOX_kernel__Int(var313); /* autobox from Int to Object */
2879 ((struct instance_array__NativeArray*)var321)->values[0] = (val*) var322;
2880 ((struct instance_array__NativeArray*)var321)->values[1] = (val*) var315;
2881 ((void (*)(val*, val*, long))(var319->class->vft[COLOR_array__Array__with_native]))(var319, var321, var320) /* with_native on <var319:Array[Object]>*/;
2882 }
2883 var323 = ((val* (*)(val*))(var319->class->vft[COLOR_string__Object__to_s]))(var319) /* to_s on <var319:Array[Object]>*/;
2884 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var323) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2885 if (varonce324) {
2886 var325 = varonce324;
2887 } else {
2888 var326 = "{";
2889 var327 = 1;
2890 var328 = string__NativeString__to_s_with_length(var326, var327);
2891 var325 = var328;
2892 varonce324 = var325;
2893 }
2894 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var325) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2895 var329 = ((val* (*)(val*))(var_class_table->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_class_table) /* iterator on <var_class_table:Array[nullable MClass]>*/;
2896 for(;;) {
2897 var330 = ((short int (*)(val*))(var329->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var329) /* is_ok on <var329:Iterator[nullable Object]>*/;
2898 if(!var330) break;
2899 var331 = ((val* (*)(val*))(var329->class->vft[COLOR_abstract_collection__Iterator__item]))(var329) /* item on <var329:Iterator[nullable Object]>*/;
2900 var_msuper = var331;
2901 var332 = NULL;
2902 if (var_msuper == NULL) {
2903 var333 = 1; /* is null */
2904 } else {
2905 var333 = 0; /* arg is null but recv is not */
2906 }
2907 if (var333){
2908 if (varonce334) {
2909 var335 = varonce334;
2910 } else {
2911 var336 = "-1, /* empty */";
2912 var337 = 15;
2913 var338 = string__NativeString__to_s_with_length(var336, var337);
2914 var335 = var338;
2915 varonce334 = var335;
2916 }
2917 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var335) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2918 } else {
2919 var339 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2920 if (var339 == NULL) {
2921 fprintf(stderr, "Runtime error: %s", "Reciever is null");
2922 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 278);
2923 show_backtrace(1);
2924 } else {
2925 var340 = ((val* (*)(val*))(var339->class->vft[COLOR_layout_builders__Layout__ids]))(var339) /* ids on <var339:nullable Layout[MClass]>*/;
2926 }
2927 var341 = ((val* (*)(val*, val*))(var340->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var340, var_msuper) /* [] on <var340:Map[Object, Int](Map[MClass, Int])>*/;
2928 if (varonce342) {
2929 var343 = varonce342;
2930 } else {
2931 var344 = ", /* ";
2932 var345 = 5;
2933 var346 = string__NativeString__to_s_with_length(var344, var345);
2934 var343 = var346;
2935 varonce342 = var343;
2936 }
2937 if (varonce347) {
2938 var348 = varonce347;
2939 } else {
2940 var349 = " */";
2941 var350 = 3;
2942 var351 = string__NativeString__to_s_with_length(var349, var350);
2943 var348 = var351;
2944 varonce347 = var348;
2945 }
2946 var352 = NEW_array__Array(&type_array__Arraykernel__Object);
2947 { /* var352 = array_instance Array[Object] */
2948 var353 = 4;
2949 var354 = NEW_array__NativeArray(var353, &type_array__NativeArraykernel__Object);
2950 ((struct instance_array__NativeArray*)var354)->values[0] = (val*) var341;
2951 ((struct instance_array__NativeArray*)var354)->values[1] = (val*) var343;
2952 ((struct instance_array__NativeArray*)var354)->values[2] = (val*) var_msuper;
2953 ((struct instance_array__NativeArray*)var354)->values[3] = (val*) var348;
2954 ((void (*)(val*, val*, long))(var352->class->vft[COLOR_array__Array__with_native]))(var352, var354, var353) /* with_native on <var352:Array[Object]>*/;
2955 }
2956 var355 = ((val* (*)(val*))(var352->class->vft[COLOR_string__Object__to_s]))(var352) /* to_s on <var352:Array[Object]>*/;
2957 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var355) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2958 }
2959 CONTINUE_label356: (void)0;
2960 ((void (*)(val*))(var329->class->vft[COLOR_abstract_collection__Iterator__next]))(var329) /* next on <var329:Iterator[nullable Object]>*/;
2961 }
2962 BREAK_label356: (void)0;
2963 if (varonce357) {
2964 var358 = varonce357;
2965 } else {
2966 var359 = "}";
2967 var360 = 1;
2968 var361 = string__NativeString__to_s_with_length(var359, var360);
2969 var358 = var361;
2970 varonce357 = var358;
2971 }
2972 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var358) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2973 if (varonce362) {
2974 var363 = varonce362;
2975 } else {
2976 var364 = "};";
2977 var365 = 2;
2978 var366 = string__NativeString__to_s_with_length(var364, var365);
2979 var363 = var366;
2980 varonce362 = var363;
2981 }
2982 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var363) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2983 var367 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
2984 if (varonce368) {
2985 var369 = varonce368;
2986 } else {
2987 var370 = "val*";
2988 var371 = 4;
2989 var372 = string__NativeString__to_s_with_length(var370, var371);
2990 var369 = var372;
2991 varonce368 = var369;
2992 }
2993 var373 = ((short int (*)(val*, val*))(var367->class->vft[COLOR_kernel__Object___33d_61d]))(var367, var369) /* != on <var367:String>*/;
2994 if (var373){
2995 var374 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
2996 if (varonce375) {
2997 var376 = varonce375;
2998 } else {
2999 var377 = "struct instance_";
3000 var378 = 16;
3001 var379 = string__NativeString__to_s_with_length(var377, var378);
3002 var376 = var379;
3003 varonce375 = var376;
3004 }
3005 if (varonce380) {
3006 var381 = varonce380;
3007 } else {
3008 var382 = " {";
3009 var383 = 2;
3010 var384 = string__NativeString__to_s_with_length(var382, var383);
3011 var381 = var384;
3012 varonce380 = var381;
3013 }
3014 var385 = NEW_array__Array(&type_array__Arraykernel__Object);
3015 { /* var385 = array_instance Array[Object] */
3016 var386 = 3;
3017 var387 = NEW_array__NativeArray(var386, &type_array__NativeArraykernel__Object);
3018 ((struct instance_array__NativeArray*)var387)->values[0] = (val*) var376;
3019 ((struct instance_array__NativeArray*)var387)->values[1] = (val*) var_c_name;
3020 ((struct instance_array__NativeArray*)var387)->values[2] = (val*) var381;
3021 ((void (*)(val*, val*, long))(var385->class->vft[COLOR_array__Array__with_native]))(var385, var387, var386) /* with_native on <var385:Array[Object]>*/;
3022 }
3023 var388 = ((val* (*)(val*))(var385->class->vft[COLOR_string__Object__to_s]))(var385) /* to_s on <var385:Array[Object]>*/;
3024 ((void (*)(val*, val*))(var374->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var374, var388) /* add_decl on <var374:CodeWriter>*/;
3025 var389 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3026 if (varonce390) {
3027 var391 = varonce390;
3028 } else {
3029 var392 = "const struct class *class;";
3030 var393 = 26;
3031 var394 = string__NativeString__to_s_with_length(var392, var393);
3032 var391 = var394;
3033 varonce390 = var391;
3034 }
3035 ((void (*)(val*, val*))(var389->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var389, var391) /* add_decl on <var389:CodeWriter>*/;
3036 var395 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3037 var396 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3038 if (varonce397) {
3039 var398 = varonce397;
3040 } else {
3041 var399 = " value;";
3042 var400 = 7;
3043 var401 = string__NativeString__to_s_with_length(var399, var400);
3044 var398 = var401;
3045 varonce397 = var398;
3046 }
3047 var402 = NEW_array__Array(&type_array__Arraykernel__Object);
3048 { /* var402 = array_instance Array[Object] */
3049 var403 = 2;
3050 var404 = NEW_array__NativeArray(var403, &type_array__NativeArraykernel__Object);
3051 ((struct instance_array__NativeArray*)var404)->values[0] = (val*) var396;
3052 ((struct instance_array__NativeArray*)var404)->values[1] = (val*) var398;
3053 ((void (*)(val*, val*, long))(var402->class->vft[COLOR_array__Array__with_native]))(var402, var404, var403) /* with_native on <var402:Array[Object]>*/;
3054 }
3055 var405 = ((val* (*)(val*))(var402->class->vft[COLOR_string__Object__to_s]))(var402) /* to_s on <var402:Array[Object]>*/;
3056 ((void (*)(val*, val*))(var395->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var395, var405) /* add_decl on <var395:CodeWriter>*/;
3057 var406 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3058 if (varonce407) {
3059 var408 = varonce407;
3060 } else {
3061 var409 = "};";
3062 var410 = 2;
3063 var411 = string__NativeString__to_s_with_length(var409, var410);
3064 var408 = var411;
3065 varonce407 = var408;
3066 }
3067 ((void (*)(val*, val*))(var406->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var406, var408) /* add_decl on <var406:CodeWriter>*/;
3068 var412 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3069 if (varonce413) {
3070 var414 = varonce413;
3071 } else {
3072 var415 = "val* BOX_";
3073 var416 = 9;
3074 var417 = string__NativeString__to_s_with_length(var415, var416);
3075 var414 = var417;
3076 varonce413 = var414;
3077 }
3078 if (varonce418) {
3079 var419 = varonce418;
3080 } else {
3081 var420 = "(";
3082 var421 = 1;
3083 var422 = string__NativeString__to_s_with_length(var420, var421);
3084 var419 = var422;
3085 varonce418 = var419;
3086 }
3087 var423 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3088 if (varonce424) {
3089 var425 = varonce424;
3090 } else {
3091 var426 = ");";
3092 var427 = 2;
3093 var428 = string__NativeString__to_s_with_length(var426, var427);
3094 var425 = var428;
3095 varonce424 = var425;
3096 }
3097 var429 = NEW_array__Array(&type_array__Arraykernel__Object);
3098 { /* var429 = array_instance Array[Object] */
3099 var430 = 5;
3100 var431 = NEW_array__NativeArray(var430, &type_array__NativeArraykernel__Object);
3101 ((struct instance_array__NativeArray*)var431)->values[0] = (val*) var414;
3102 ((struct instance_array__NativeArray*)var431)->values[1] = (val*) var_c_name;
3103 ((struct instance_array__NativeArray*)var431)->values[2] = (val*) var419;
3104 ((struct instance_array__NativeArray*)var431)->values[3] = (val*) var423;
3105 ((struct instance_array__NativeArray*)var431)->values[4] = (val*) var425;
3106 ((void (*)(val*, val*, long))(var429->class->vft[COLOR_array__Array__with_native]))(var429, var431, var430) /* with_native on <var429:Array[Object]>*/;
3107 }
3108 var432 = ((val* (*)(val*))(var429->class->vft[COLOR_string__Object__to_s]))(var429) /* to_s on <var429:Array[Object]>*/;
3109 ((void (*)(val*, val*))(var412->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var412, var432) /* add_decl on <var412:CodeWriter>*/;
3110 if (varonce433) {
3111 var434 = varonce433;
3112 } else {
3113 var435 = "/* allocate ";
3114 var436 = 12;
3115 var437 = string__NativeString__to_s_with_length(var435, var436);
3116 var434 = var437;
3117 varonce433 = var434;
3118 }
3119 if (varonce438) {
3120 var439 = varonce438;
3121 } else {
3122 var440 = " */";
3123 var441 = 3;
3124 var442 = string__NativeString__to_s_with_length(var440, var441);
3125 var439 = var442;
3126 varonce438 = var439;
3127 }
3128 var443 = NEW_array__Array(&type_array__Arraykernel__Object);
3129 { /* var443 = array_instance Array[Object] */
3130 var444 = 3;
3131 var445 = NEW_array__NativeArray(var444, &type_array__NativeArraykernel__Object);
3132 ((struct instance_array__NativeArray*)var445)->values[0] = (val*) var434;
3133 ((struct instance_array__NativeArray*)var445)->values[1] = (val*) var_mtype;
3134 ((struct instance_array__NativeArray*)var445)->values[2] = (val*) var439;
3135 ((void (*)(val*, val*, long))(var443->class->vft[COLOR_array__Array__with_native]))(var443, var445, var444) /* with_native on <var443:Array[Object]>*/;
3136 }
3137 var446 = ((val* (*)(val*))(var443->class->vft[COLOR_string__Object__to_s]))(var443) /* to_s on <var443:Array[Object]>*/;
3138 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var446) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3139 if (varonce447) {
3140 var448 = varonce447;
3141 } else {
3142 var449 = "val* BOX_";
3143 var450 = 9;
3144 var451 = string__NativeString__to_s_with_length(var449, var450);
3145 var448 = var451;
3146 varonce447 = var448;
3147 }
3148 var452 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
3149 if (varonce453) {
3150 var454 = varonce453;
3151 } else {
3152 var455 = "(";
3153 var456 = 1;
3154 var457 = string__NativeString__to_s_with_length(var455, var456);
3155 var454 = var457;
3156 varonce453 = var454;
3157 }
3158 var458 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3159 if (varonce459) {
3160 var460 = varonce459;
3161 } else {
3162 var461 = " value) {";
3163 var462 = 9;
3164 var463 = string__NativeString__to_s_with_length(var461, var462);
3165 var460 = var463;
3166 varonce459 = var460;
3167 }
3168 var464 = NEW_array__Array(&type_array__Arraykernel__Object);
3169 { /* var464 = array_instance Array[Object] */
3170 var465 = 5;
3171 var466 = NEW_array__NativeArray(var465, &type_array__NativeArraykernel__Object);
3172 ((struct instance_array__NativeArray*)var466)->values[0] = (val*) var448;
3173 ((struct instance_array__NativeArray*)var466)->values[1] = (val*) var452;
3174 ((struct instance_array__NativeArray*)var466)->values[2] = (val*) var454;
3175 ((struct instance_array__NativeArray*)var466)->values[3] = (val*) var458;
3176 ((struct instance_array__NativeArray*)var466)->values[4] = (val*) var460;
3177 ((void (*)(val*, val*, long))(var464->class->vft[COLOR_array__Array__with_native]))(var464, var466, var465) /* with_native on <var464:Array[Object]>*/;
3178 }
3179 var467 = ((val* (*)(val*))(var464->class->vft[COLOR_string__Object__to_s]))(var464) /* to_s on <var464:Array[Object]>*/;
3180 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var467) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3181 if (varonce468) {
3182 var469 = varonce468;
3183 } else {
3184 var470 = "struct instance_";
3185 var471 = 16;
3186 var472 = string__NativeString__to_s_with_length(var470, var471);
3187 var469 = var472;
3188 varonce468 = var469;
3189 }
3190 if (varonce473) {
3191 var474 = varonce473;
3192 } else {
3193 var475 = "*res = nit_alloc(sizeof(struct instance_";
3194 var476 = 40;
3195 var477 = string__NativeString__to_s_with_length(var475, var476);
3196 var474 = var477;
3197 varonce473 = var474;
3198 }
3199 if (varonce478) {
3200 var479 = varonce478;
3201 } else {
3202 var480 = "));";
3203 var481 = 3;
3204 var482 = string__NativeString__to_s_with_length(var480, var481);
3205 var479 = var482;
3206 varonce478 = var479;
3207 }
3208 var483 = NEW_array__Array(&type_array__Arraykernel__Object);
3209 { /* var483 = array_instance Array[Object] */
3210 var484 = 5;
3211 var485 = NEW_array__NativeArray(var484, &type_array__NativeArraykernel__Object);
3212 ((struct instance_array__NativeArray*)var485)->values[0] = (val*) var469;
3213 ((struct instance_array__NativeArray*)var485)->values[1] = (val*) var_c_name;
3214 ((struct instance_array__NativeArray*)var485)->values[2] = (val*) var474;
3215 ((struct instance_array__NativeArray*)var485)->values[3] = (val*) var_c_name;
3216 ((struct instance_array__NativeArray*)var485)->values[4] = (val*) var479;
3217 ((void (*)(val*, val*, long))(var483->class->vft[COLOR_array__Array__with_native]))(var483, var485, var484) /* with_native on <var483:Array[Object]>*/;
3218 }
3219 var486 = ((val* (*)(val*))(var483->class->vft[COLOR_string__Object__to_s]))(var483) /* to_s on <var483:Array[Object]>*/;
3220 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var486) /* add on <var_v:SeparateCompilerVisitor>*/;
3221 if (varonce487) {
3222 var488 = varonce487;
3223 } else {
3224 var489 = "class_";
3225 var490 = 6;
3226 var491 = string__NativeString__to_s_with_length(var489, var490);
3227 var488 = var491;
3228 varonce487 = var488;
3229 }
3230 var492 = NEW_array__Array(&type_array__Arraykernel__Object);
3231 { /* var492 = array_instance Array[Object] */
3232 var493 = 2;
3233 var494 = NEW_array__NativeArray(var493, &type_array__NativeArraykernel__Object);
3234 ((struct instance_array__NativeArray*)var494)->values[0] = (val*) var488;
3235 ((struct instance_array__NativeArray*)var494)->values[1] = (val*) var_c_name;
3236 ((void (*)(val*, val*, long))(var492->class->vft[COLOR_array__Array__with_native]))(var492, var494, var493) /* with_native on <var492:Array[Object]>*/;
3237 }
3238 var495 = ((val* (*)(val*))(var492->class->vft[COLOR_string__Object__to_s]))(var492) /* to_s on <var492:Array[Object]>*/;
3239 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var495) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3240 if (varonce496) {
3241 var497 = varonce496;
3242 } else {
3243 var498 = "res->class = &class_";
3244 var499 = 20;
3245 var500 = string__NativeString__to_s_with_length(var498, var499);
3246 var497 = var500;
3247 varonce496 = var497;
3248 }
3249 if (varonce501) {
3250 var502 = varonce501;
3251 } else {
3252 var503 = ";";
3253 var504 = 1;
3254 var505 = string__NativeString__to_s_with_length(var503, var504);
3255 var502 = var505;
3256 varonce501 = var502;
3257 }
3258 var506 = NEW_array__Array(&type_array__Arraykernel__Object);
3259 { /* var506 = array_instance Array[Object] */
3260 var507 = 3;
3261 var508 = NEW_array__NativeArray(var507, &type_array__NativeArraykernel__Object);
3262 ((struct instance_array__NativeArray*)var508)->values[0] = (val*) var497;
3263 ((struct instance_array__NativeArray*)var508)->values[1] = (val*) var_c_name;
3264 ((struct instance_array__NativeArray*)var508)->values[2] = (val*) var502;
3265 ((void (*)(val*, val*, long))(var506->class->vft[COLOR_array__Array__with_native]))(var506, var508, var507) /* with_native on <var506:Array[Object]>*/;
3266 }
3267 var509 = ((val* (*)(val*))(var506->class->vft[COLOR_string__Object__to_s]))(var506) /* to_s on <var506:Array[Object]>*/;
3268 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var509) /* add on <var_v:SeparateCompilerVisitor>*/;
3269 if (varonce510) {
3270 var511 = varonce510;
3271 } else {
3272 var512 = "res->value = value;";
3273 var513 = 19;
3274 var514 = string__NativeString__to_s_with_length(var512, var513);
3275 var511 = var514;
3276 varonce510 = var511;
3277 }
3278 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var511) /* add on <var_v:SeparateCompilerVisitor>*/;
3279 if (varonce515) {
3280 var516 = varonce515;
3281 } else {
3282 var517 = "return (val*)res;";
3283 var518 = 17;
3284 var519 = string__NativeString__to_s_with_length(var517, var518);
3285 var516 = var519;
3286 varonce515 = var516;
3287 }
3288 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var516) /* add on <var_v:SeparateCompilerVisitor>*/;
3289 if (varonce520) {
3290 var521 = varonce520;
3291 } else {
3292 var522 = "}";
3293 var523 = 1;
3294 var524 = string__NativeString__to_s_with_length(var522, var523);
3295 var521 = var524;
3296 varonce520 = var521;
3297 }
3298 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var521) /* add on <var_v:SeparateCompilerVisitor>*/;
3299 goto RET_LABEL;
3300 } else {
3301 var525 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
3302 if (varonce526) {
3303 var527 = varonce526;
3304 } else {
3305 var528 = "NativeArray";
3306 var529 = 11;
3307 var530 = string__NativeString__to_s_with_length(var528, var529);
3308 var527 = var530;
3309 varonce526 = var527;
3310 }
3311 var531 = ((short int (*)(val*, val*))(var525->class->vft[COLOR_kernel__Object___61d_61d]))(var525, var527) /* == on <var525:String>*/;
3312 if (var531){
3313 var532 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3314 if (varonce533) {
3315 var534 = varonce533;
3316 } else {
3317 var535 = "struct instance_";
3318 var536 = 16;
3319 var537 = string__NativeString__to_s_with_length(var535, var536);
3320 var534 = var537;
3321 varonce533 = var534;
3322 }
3323 if (varonce538) {
3324 var539 = varonce538;
3325 } else {
3326 var540 = " {";
3327 var541 = 2;
3328 var542 = string__NativeString__to_s_with_length(var540, var541);
3329 var539 = var542;
3330 varonce538 = var539;
3331 }
3332 var543 = NEW_array__Array(&type_array__Arraykernel__Object);
3333 { /* var543 = array_instance Array[Object] */
3334 var544 = 3;
3335 var545 = NEW_array__NativeArray(var544, &type_array__NativeArraykernel__Object);
3336 ((struct instance_array__NativeArray*)var545)->values[0] = (val*) var534;
3337 ((struct instance_array__NativeArray*)var545)->values[1] = (val*) var_c_name;
3338 ((struct instance_array__NativeArray*)var545)->values[2] = (val*) var539;
3339 ((void (*)(val*, val*, long))(var543->class->vft[COLOR_array__Array__with_native]))(var543, var545, var544) /* with_native on <var543:Array[Object]>*/;
3340 }
3341 var546 = ((val* (*)(val*))(var543->class->vft[COLOR_string__Object__to_s]))(var543) /* to_s on <var543:Array[Object]>*/;
3342 ((void (*)(val*, val*))(var532->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var532, var546) /* add_decl on <var532:CodeWriter>*/;
3343 var547 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3344 if (varonce548) {
3345 var549 = varonce548;
3346 } else {
3347 var550 = "const struct class *class;";
3348 var551 = 26;
3349 var552 = string__NativeString__to_s_with_length(var550, var551);
3350 var549 = var552;
3351 varonce548 = var549;
3352 }
3353 ((void (*)(val*, val*))(var547->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var547, var549) /* add_decl on <var547:CodeWriter>*/;
3354 var553 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3355 if (varonce554) {
3356 var555 = varonce554;
3357 } else {
3358 var556 = "val* values[];";
3359 var557 = 14;
3360 var558 = string__NativeString__to_s_with_length(var556, var557);
3361 var555 = var558;
3362 varonce554 = var555;
3363 }
3364 ((void (*)(val*, val*))(var553->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var553, var555) /* add_decl on <var553:CodeWriter>*/;
3365 var559 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3366 if (varonce560) {
3367 var561 = varonce560;
3368 } else {
3369 var562 = "};";
3370 var563 = 2;
3371 var564 = string__NativeString__to_s_with_length(var562, var563);
3372 var561 = var564;
3373 varonce560 = var561;
3374 }
3375 ((void (*)(val*, val*))(var559->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var559, var561) /* add_decl on <var559:CodeWriter>*/;
3376 if (varonce565) {
3377 var566 = varonce565;
3378 } else {
3379 var567 = "NEW_";
3380 var568 = 4;
3381 var569 = string__NativeString__to_s_with_length(var567, var568);
3382 var566 = var569;
3383 varonce565 = var566;
3384 }
3385 var570 = NEW_array__Array(&type_array__Arraykernel__Object);
3386 { /* var570 = array_instance Array[Object] */
3387 var571 = 2;
3388 var572 = NEW_array__NativeArray(var571, &type_array__NativeArraykernel__Object);
3389 ((struct instance_array__NativeArray*)var572)->values[0] = (val*) var566;
3390 ((struct instance_array__NativeArray*)var572)->values[1] = (val*) var_c_name;
3391 ((void (*)(val*, val*, long))(var570->class->vft[COLOR_array__Array__with_native]))(var570, var572, var571) /* with_native on <var570:Array[Object]>*/;
3392 }
3393 var573 = ((val* (*)(val*))(var570->class->vft[COLOR_string__Object__to_s]))(var570) /* to_s on <var570:Array[Object]>*/;
3394 var574 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3395 if (varonce575) {
3396 var576 = varonce575;
3397 } else {
3398 var577 = " NEW_";
3399 var578 = 5;
3400 var579 = string__NativeString__to_s_with_length(var577, var578);
3401 var576 = var579;
3402 varonce575 = var576;
3403 }
3404 if (varonce580) {
3405 var581 = varonce580;
3406 } else {
3407 var582 = "(int length);";
3408 var583 = 13;
3409 var584 = string__NativeString__to_s_with_length(var582, var583);
3410 var581 = var584;
3411 varonce580 = var581;
3412 }
3413 var585 = NEW_array__Array(&type_array__Arraykernel__Object);
3414 { /* var585 = array_instance Array[Object] */
3415 var586 = 4;
3416 var587 = NEW_array__NativeArray(var586, &type_array__NativeArraykernel__Object);
3417 ((struct instance_array__NativeArray*)var587)->values[0] = (val*) var574;
3418 ((struct instance_array__NativeArray*)var587)->values[1] = (val*) var576;
3419 ((struct instance_array__NativeArray*)var587)->values[2] = (val*) var_c_name;
3420 ((struct instance_array__NativeArray*)var587)->values[3] = (val*) var581;
3421 ((void (*)(val*, val*, long))(var585->class->vft[COLOR_array__Array__with_native]))(var585, var587, var586) /* with_native on <var585:Array[Object]>*/;
3422 }
3423 var588 = ((val* (*)(val*))(var585->class->vft[COLOR_string__Object__to_s]))(var585) /* to_s on <var585:Array[Object]>*/;
3424 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var573, var588) /* provide_declaration on <self:SeparateErasureCompiler>*/;
3425 if (varonce589) {
3426 var590 = varonce589;
3427 } else {
3428 var591 = "/* allocate ";
3429 var592 = 12;
3430 var593 = string__NativeString__to_s_with_length(var591, var592);
3431 var590 = var593;
3432 varonce589 = var590;
3433 }
3434 if (varonce594) {
3435 var595 = varonce594;
3436 } else {
3437 var596 = " */";
3438 var597 = 3;
3439 var598 = string__NativeString__to_s_with_length(var596, var597);
3440 var595 = var598;
3441 varonce594 = var595;
3442 }
3443 var599 = NEW_array__Array(&type_array__Arraykernel__Object);
3444 { /* var599 = array_instance Array[Object] */
3445 var600 = 3;
3446 var601 = NEW_array__NativeArray(var600, &type_array__NativeArraykernel__Object);
3447 ((struct instance_array__NativeArray*)var601)->values[0] = (val*) var590;
3448 ((struct instance_array__NativeArray*)var601)->values[1] = (val*) var_mtype;
3449 ((struct instance_array__NativeArray*)var601)->values[2] = (val*) var595;
3450 ((void (*)(val*, val*, long))(var599->class->vft[COLOR_array__Array__with_native]))(var599, var601, var600) /* with_native on <var599:Array[Object]>*/;
3451 }
3452 var602 = ((val* (*)(val*))(var599->class->vft[COLOR_string__Object__to_s]))(var599) /* to_s on <var599:Array[Object]>*/;
3453 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var602) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3454 var603 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3455 if (varonce604) {
3456 var605 = varonce604;
3457 } else {
3458 var606 = " NEW_";
3459 var607 = 5;
3460 var608 = string__NativeString__to_s_with_length(var606, var607);
3461 var605 = var608;
3462 varonce604 = var605;
3463 }
3464 if (varonce609) {
3465 var610 = varonce609;
3466 } else {
3467 var611 = "(int length) {";
3468 var612 = 14;
3469 var613 = string__NativeString__to_s_with_length(var611, var612);
3470 var610 = var613;
3471 varonce609 = var610;
3472 }
3473 var614 = NEW_array__Array(&type_array__Arraykernel__Object);
3474 { /* var614 = array_instance Array[Object] */
3475 var615 = 4;
3476 var616 = NEW_array__NativeArray(var615, &type_array__NativeArraykernel__Object);
3477 ((struct instance_array__NativeArray*)var616)->values[0] = (val*) var603;
3478 ((struct instance_array__NativeArray*)var616)->values[1] = (val*) var605;
3479 ((struct instance_array__NativeArray*)var616)->values[2] = (val*) var_c_name;
3480 ((struct instance_array__NativeArray*)var616)->values[3] = (val*) var610;
3481 ((void (*)(val*, val*, long))(var614->class->vft[COLOR_array__Array__with_native]))(var614, var616, var615) /* with_native on <var614:Array[Object]>*/;
3482 }
3483 var617 = ((val* (*)(val*))(var614->class->vft[COLOR_string__Object__to_s]))(var614) /* to_s on <var614:Array[Object]>*/;
3484 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var617) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3485 if (varonce618) {
3486 var619 = varonce618;
3487 } else {
3488 var620 = "self";
3489 var621 = 4;
3490 var622 = string__NativeString__to_s_with_length(var620, var621);
3491 var619 = var622;
3492 varonce618 = var619;
3493 }
3494 var623 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_named_var]))(var_v, var_mtype, var619) /* new_named_var on <var_v:SeparateCompilerVisitor>*/;
3495 var_res = var623;
3496 var624 = 1;
3497 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var624) /* is_exact= on <var_res:RuntimeVariable>*/;
3498 var625 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
3499 var626 = ((val* (*)(val*))(var625->class->vft[COLOR_abstract_collection__Collection__first]))(var625) /* first on <var625:Array[MType]>*/;
3500 var_mtype_elt = var626;
3501 if (varonce627) {
3502 var628 = varonce627;
3503 } else {
3504 var629 = " = nit_alloc(sizeof(struct instance_";
3505 var630 = 36;
3506 var631 = string__NativeString__to_s_with_length(var629, var630);
3507 var628 = var631;
3508 varonce627 = var628;
3509 }
3510 if (varonce632) {
3511 var633 = varonce632;
3512 } else {
3513 var634 = ") + length*sizeof(";
3514 var635 = 18;
3515 var636 = string__NativeString__to_s_with_length(var634, var635);
3516 var633 = var636;
3517 varonce632 = var633;
3518 }
3519 var637 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
3520 if (varonce638) {
3521 var639 = varonce638;
3522 } else {
3523 var640 = "));";
3524 var641 = 3;
3525 var642 = string__NativeString__to_s_with_length(var640, var641);
3526 var639 = var642;
3527 varonce638 = var639;
3528 }
3529 var643 = NEW_array__Array(&type_array__Arraykernel__Object);
3530 { /* var643 = array_instance Array[Object] */
3531 var644 = 6;
3532 var645 = NEW_array__NativeArray(var644, &type_array__NativeArraykernel__Object);
3533 ((struct instance_array__NativeArray*)var645)->values[0] = (val*) var_res;
3534 ((struct instance_array__NativeArray*)var645)->values[1] = (val*) var628;
3535 ((struct instance_array__NativeArray*)var645)->values[2] = (val*) var_c_name;
3536 ((struct instance_array__NativeArray*)var645)->values[3] = (val*) var633;
3537 ((struct instance_array__NativeArray*)var645)->values[4] = (val*) var637;
3538 ((struct instance_array__NativeArray*)var645)->values[5] = (val*) var639;
3539 ((void (*)(val*, val*, long))(var643->class->vft[COLOR_array__Array__with_native]))(var643, var645, var644) /* with_native on <var643:Array[Object]>*/;
3540 }
3541 var646 = ((val* (*)(val*))(var643->class->vft[COLOR_string__Object__to_s]))(var643) /* to_s on <var643:Array[Object]>*/;
3542 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var646) /* add on <var_v:SeparateCompilerVisitor>*/;
3543 if (varonce647) {
3544 var648 = varonce647;
3545 } else {
3546 var649 = "class_";
3547 var650 = 6;
3548 var651 = string__NativeString__to_s_with_length(var649, var650);
3549 var648 = var651;
3550 varonce647 = var648;
3551 }
3552 var652 = NEW_array__Array(&type_array__Arraykernel__Object);
3553 { /* var652 = array_instance Array[Object] */
3554 var653 = 2;
3555 var654 = NEW_array__NativeArray(var653, &type_array__NativeArraykernel__Object);
3556 ((struct instance_array__NativeArray*)var654)->values[0] = (val*) var648;
3557 ((struct instance_array__NativeArray*)var654)->values[1] = (val*) var_c_name;
3558 ((void (*)(val*, val*, long))(var652->class->vft[COLOR_array__Array__with_native]))(var652, var654, var653) /* with_native on <var652:Array[Object]>*/;
3559 }
3560 var655 = ((val* (*)(val*))(var652->class->vft[COLOR_string__Object__to_s]))(var652) /* to_s on <var652:Array[Object]>*/;
3561 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var655) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3562 if (varonce656) {
3563 var657 = varonce656;
3564 } else {
3565 var658 = "->class = &class_";
3566 var659 = 17;
3567 var660 = string__NativeString__to_s_with_length(var658, var659);
3568 var657 = var660;
3569 varonce656 = var657;
3570 }
3571 if (varonce661) {
3572 var662 = varonce661;
3573 } else {
3574 var663 = ";";
3575 var664 = 1;
3576 var665 = string__NativeString__to_s_with_length(var663, var664);
3577 var662 = var665;
3578 varonce661 = var662;
3579 }
3580 var666 = NEW_array__Array(&type_array__Arraykernel__Object);
3581 { /* var666 = array_instance Array[Object] */
3582 var667 = 4;
3583 var668 = NEW_array__NativeArray(var667, &type_array__NativeArraykernel__Object);
3584 ((struct instance_array__NativeArray*)var668)->values[0] = (val*) var_res;
3585 ((struct instance_array__NativeArray*)var668)->values[1] = (val*) var657;
3586 ((struct instance_array__NativeArray*)var668)->values[2] = (val*) var_c_name;
3587 ((struct instance_array__NativeArray*)var668)->values[3] = (val*) var662;
3588 ((void (*)(val*, val*, long))(var666->class->vft[COLOR_array__Array__with_native]))(var666, var668, var667) /* with_native on <var666:Array[Object]>*/;
3589 }
3590 var669 = ((val* (*)(val*))(var666->class->vft[COLOR_string__Object__to_s]))(var666) /* to_s on <var666:Array[Object]>*/;
3591 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var669) /* add on <var_v:SeparateCompilerVisitor>*/;
3592 if (varonce670) {
3593 var671 = varonce670;
3594 } else {
3595 var672 = "return ";
3596 var673 = 7;
3597 var674 = string__NativeString__to_s_with_length(var672, var673);
3598 var671 = var674;
3599 varonce670 = var671;
3600 }
3601 if (varonce675) {
3602 var676 = varonce675;
3603 } else {
3604 var677 = ";";
3605 var678 = 1;
3606 var679 = string__NativeString__to_s_with_length(var677, var678);
3607 var676 = var679;
3608 varonce675 = var676;
3609 }
3610 var680 = NEW_array__Array(&type_array__Arraykernel__Object);
3611 { /* var680 = array_instance Array[Object] */
3612 var681 = 3;
3613 var682 = NEW_array__NativeArray(var681, &type_array__NativeArraykernel__Object);
3614 ((struct instance_array__NativeArray*)var682)->values[0] = (val*) var671;
3615 ((struct instance_array__NativeArray*)var682)->values[1] = (val*) var_res;
3616 ((struct instance_array__NativeArray*)var682)->values[2] = (val*) var676;
3617 ((void (*)(val*, val*, long))(var680->class->vft[COLOR_array__Array__with_native]))(var680, var682, var681) /* with_native on <var680:Array[Object]>*/;
3618 }
3619 var683 = ((val* (*)(val*))(var680->class->vft[COLOR_string__Object__to_s]))(var680) /* to_s on <var680:Array[Object]>*/;
3620 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var683) /* add on <var_v:SeparateCompilerVisitor>*/;
3621 if (varonce684) {
3622 var685 = varonce684;
3623 } else {
3624 var686 = "}";
3625 var687 = 1;
3626 var688 = string__NativeString__to_s_with_length(var686, var687);
3627 var685 = var688;
3628 varonce684 = var685;
3629 }
3630 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var685) /* add on <var_v:SeparateCompilerVisitor>*/;
3631 goto RET_LABEL;
3632 } else {
3633 }
3634 }
3635 if (varonce689) {
3636 var690 = varonce689;
3637 } else {
3638 var691 = "NEW_";
3639 var692 = 4;
3640 var693 = string__NativeString__to_s_with_length(var691, var692);
3641 var690 = var693;
3642 varonce689 = var690;
3643 }
3644 var694 = NEW_array__Array(&type_array__Arraykernel__Object);
3645 { /* var694 = array_instance Array[Object] */
3646 var695 = 2;
3647 var696 = NEW_array__NativeArray(var695, &type_array__NativeArraykernel__Object);
3648 ((struct instance_array__NativeArray*)var696)->values[0] = (val*) var690;
3649 ((struct instance_array__NativeArray*)var696)->values[1] = (val*) var_c_name;
3650 ((void (*)(val*, val*, long))(var694->class->vft[COLOR_array__Array__with_native]))(var694, var696, var695) /* with_native on <var694:Array[Object]>*/;
3651 }
3652 var697 = ((val* (*)(val*))(var694->class->vft[COLOR_string__Object__to_s]))(var694) /* to_s on <var694:Array[Object]>*/;
3653 var698 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3654 if (varonce699) {
3655 var700 = varonce699;
3656 } else {
3657 var701 = " NEW_";
3658 var702 = 5;
3659 var703 = string__NativeString__to_s_with_length(var701, var702);
3660 var700 = var703;
3661 varonce699 = var700;
3662 }
3663 if (varonce704) {
3664 var705 = varonce704;
3665 } else {
3666 var706 = "(void);";
3667 var707 = 7;
3668 var708 = string__NativeString__to_s_with_length(var706, var707);
3669 var705 = var708;
3670 varonce704 = var705;
3671 }
3672 var709 = NEW_array__Array(&type_array__Arraykernel__Object);
3673 { /* var709 = array_instance Array[Object] */
3674 var710 = 4;
3675 var711 = NEW_array__NativeArray(var710, &type_array__NativeArraykernel__Object);
3676 ((struct instance_array__NativeArray*)var711)->values[0] = (val*) var698;
3677 ((struct instance_array__NativeArray*)var711)->values[1] = (val*) var700;
3678 ((struct instance_array__NativeArray*)var711)->values[2] = (val*) var_c_name;
3679 ((struct instance_array__NativeArray*)var711)->values[3] = (val*) var705;
3680 ((void (*)(val*, val*, long))(var709->class->vft[COLOR_array__Array__with_native]))(var709, var711, var710) /* with_native on <var709:Array[Object]>*/;
3681 }
3682 var712 = ((val* (*)(val*))(var709->class->vft[COLOR_string__Object__to_s]))(var709) /* to_s on <var709:Array[Object]>*/;
3683 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var697, var712) /* provide_declaration on <self:SeparateErasureCompiler>*/;
3684 if (varonce713) {
3685 var714 = varonce713;
3686 } else {
3687 var715 = "/* allocate ";
3688 var716 = 12;
3689 var717 = string__NativeString__to_s_with_length(var715, var716);
3690 var714 = var717;
3691 varonce713 = var714;
3692 }
3693 if (varonce718) {
3694 var719 = varonce718;
3695 } else {
3696 var720 = " */";
3697 var721 = 3;
3698 var722 = string__NativeString__to_s_with_length(var720, var721);
3699 var719 = var722;
3700 varonce718 = var719;
3701 }
3702 var723 = NEW_array__Array(&type_array__Arraykernel__Object);
3703 { /* var723 = array_instance Array[Object] */
3704 var724 = 3;
3705 var725 = NEW_array__NativeArray(var724, &type_array__NativeArraykernel__Object);
3706 ((struct instance_array__NativeArray*)var725)->values[0] = (val*) var714;
3707 ((struct instance_array__NativeArray*)var725)->values[1] = (val*) var_mtype;
3708 ((struct instance_array__NativeArray*)var725)->values[2] = (val*) var719;
3709 ((void (*)(val*, val*, long))(var723->class->vft[COLOR_array__Array__with_native]))(var723, var725, var724) /* with_native on <var723:Array[Object]>*/;
3710 }
3711 var726 = ((val* (*)(val*))(var723->class->vft[COLOR_string__Object__to_s]))(var723) /* to_s on <var723:Array[Object]>*/;
3712 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var726) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3713 var727 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3714 if (varonce728) {
3715 var729 = varonce728;
3716 } else {
3717 var730 = " NEW_";
3718 var731 = 5;
3719 var732 = string__NativeString__to_s_with_length(var730, var731);
3720 var729 = var732;
3721 varonce728 = var729;
3722 }
3723 if (varonce733) {
3724 var734 = varonce733;
3725 } else {
3726 var735 = "(void) {";
3727 var736 = 8;
3728 var737 = string__NativeString__to_s_with_length(var735, var736);
3729 var734 = var737;
3730 varonce733 = var734;
3731 }
3732 var738 = NEW_array__Array(&type_array__Arraykernel__Object);
3733 { /* var738 = array_instance Array[Object] */
3734 var739 = 4;
3735 var740 = NEW_array__NativeArray(var739, &type_array__NativeArraykernel__Object);
3736 ((struct instance_array__NativeArray*)var740)->values[0] = (val*) var727;
3737 ((struct instance_array__NativeArray*)var740)->values[1] = (val*) var729;
3738 ((struct instance_array__NativeArray*)var740)->values[2] = (val*) var_c_name;
3739 ((struct instance_array__NativeArray*)var740)->values[3] = (val*) var734;
3740 ((void (*)(val*, val*, long))(var738->class->vft[COLOR_array__Array__with_native]))(var738, var740, var739) /* with_native on <var738:Array[Object]>*/;
3741 }
3742 var741 = ((val* (*)(val*))(var738->class->vft[COLOR_string__Object__to_s]))(var738) /* to_s on <var738:Array[Object]>*/;
3743 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var741) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3744 if (varonce742) {
3745 var743 = varonce742;
3746 } else {
3747 var744 = "self";
3748 var745 = 4;
3749 var746 = string__NativeString__to_s_with_length(var744, var745);
3750 var743 = var746;
3751 varonce742 = var743;
3752 }
3753 var747 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_named_var]))(var_v, var_mtype, var743) /* new_named_var on <var_v:SeparateCompilerVisitor>*/;
3754 var_res748 = var747;
3755 var749 = 1;
3756 ((void (*)(val*, short int))(var_res748->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res748, var749) /* is_exact= on <var_res748:RuntimeVariable>*/;
3757 if (varonce750) {
3758 var751 = varonce750;
3759 } else {
3760 var752 = " = nit_alloc(sizeof(struct instance) + ";
3761 var753 = 39;
3762 var754 = string__NativeString__to_s_with_length(var752, var753);
3763 var751 = var754;
3764 varonce750 = var751;
3765 }
3766 var755 = ((long (*)(val*))(var_attrs->class->vft[COLOR_abstract_collection__Collection__length]))(var_attrs) /* length on <var_attrs:Array[nullable MPropDef]>*/;
3767 if (varonce756) {
3768 var757 = varonce756;
3769 } else {
3770 var758 = "*sizeof(nitattribute_t));";
3771 var759 = 25;
3772 var760 = string__NativeString__to_s_with_length(var758, var759);
3773 var757 = var760;
3774 varonce756 = var757;
3775 }
3776 var761 = NEW_array__Array(&type_array__Arraykernel__Object);
3777 { /* var761 = array_instance Array[Object] */
3778 var762 = 4;
3779 var763 = NEW_array__NativeArray(var762, &type_array__NativeArraykernel__Object);
3780 ((struct instance_array__NativeArray*)var763)->values[0] = (val*) var_res748;
3781 ((struct instance_array__NativeArray*)var763)->values[1] = (val*) var751;
3782 var764 = BOX_kernel__Int(var755); /* autobox from Int to Object */
3783 ((struct instance_array__NativeArray*)var763)->values[2] = (val*) var764;
3784 ((struct instance_array__NativeArray*)var763)->values[3] = (val*) var757;
3785 ((void (*)(val*, val*, long))(var761->class->vft[COLOR_array__Array__with_native]))(var761, var763, var762) /* with_native on <var761:Array[Object]>*/;
3786 }
3787 var765 = ((val* (*)(val*))(var761->class->vft[COLOR_string__Object__to_s]))(var761) /* to_s on <var761:Array[Object]>*/;
3788 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var765) /* add on <var_v:SeparateCompilerVisitor>*/;
3789 if (varonce766) {
3790 var767 = varonce766;
3791 } else {
3792 var768 = "class_";
3793 var769 = 6;
3794 var770 = string__NativeString__to_s_with_length(var768, var769);
3795 var767 = var770;
3796 varonce766 = var767;
3797 }
3798 var771 = NEW_array__Array(&type_array__Arraykernel__Object);
3799 { /* var771 = array_instance Array[Object] */
3800 var772 = 2;
3801 var773 = NEW_array__NativeArray(var772, &type_array__NativeArraykernel__Object);
3802 ((struct instance_array__NativeArray*)var773)->values[0] = (val*) var767;
3803 ((struct instance_array__NativeArray*)var773)->values[1] = (val*) var_c_name;
3804 ((void (*)(val*, val*, long))(var771->class->vft[COLOR_array__Array__with_native]))(var771, var773, var772) /* with_native on <var771:Array[Object]>*/;
3805 }
3806 var774 = ((val* (*)(val*))(var771->class->vft[COLOR_string__Object__to_s]))(var771) /* to_s on <var771:Array[Object]>*/;
3807 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var774) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3808 if (varonce775) {
3809 var776 = varonce775;
3810 } else {
3811 var777 = "->class = &class_";
3812 var778 = 17;
3813 var779 = string__NativeString__to_s_with_length(var777, var778);
3814 var776 = var779;
3815 varonce775 = var776;
3816 }
3817 if (varonce780) {
3818 var781 = varonce780;
3819 } else {
3820 var782 = ";";
3821 var783 = 1;
3822 var784 = string__NativeString__to_s_with_length(var782, var783);
3823 var781 = var784;
3824 varonce780 = var781;
3825 }
3826 var785 = NEW_array__Array(&type_array__Arraykernel__Object);
3827 { /* var785 = array_instance Array[Object] */
3828 var786 = 4;
3829 var787 = NEW_array__NativeArray(var786, &type_array__NativeArraykernel__Object);
3830 ((struct instance_array__NativeArray*)var787)->values[0] = (val*) var_res748;
3831 ((struct instance_array__NativeArray*)var787)->values[1] = (val*) var776;
3832 ((struct instance_array__NativeArray*)var787)->values[2] = (val*) var_c_name;
3833 ((struct instance_array__NativeArray*)var787)->values[3] = (val*) var781;
3834 ((void (*)(val*, val*, long))(var785->class->vft[COLOR_array__Array__with_native]))(var785, var787, var786) /* with_native on <var785:Array[Object]>*/;
3835 }
3836 var788 = ((val* (*)(val*))(var785->class->vft[COLOR_string__Object__to_s]))(var785) /* to_s on <var785:Array[Object]>*/;
3837 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var788) /* add on <var_v:SeparateCompilerVisitor>*/;
3838 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_init_attr]))(self, var_v, var_res748, var_mtype) /* generate_init_attr on <self:SeparateErasureCompiler>*/;
3839 if (varonce789) {
3840 var790 = varonce789;
3841 } else {
3842 var791 = "return ";
3843 var792 = 7;
3844 var793 = string__NativeString__to_s_with_length(var791, var792);
3845 var790 = var793;
3846 varonce789 = var790;
3847 }
3848 if (varonce794) {
3849 var795 = varonce794;
3850 } else {
3851 var796 = ";";
3852 var797 = 1;
3853 var798 = string__NativeString__to_s_with_length(var796, var797);
3854 var795 = var798;
3855 varonce794 = var795;
3856 }
3857 var799 = NEW_array__Array(&type_array__Arraykernel__Object);
3858 { /* var799 = array_instance Array[Object] */
3859 var800 = 3;
3860 var801 = NEW_array__NativeArray(var800, &type_array__NativeArraykernel__Object);
3861 ((struct instance_array__NativeArray*)var801)->values[0] = (val*) var790;
3862 ((struct instance_array__NativeArray*)var801)->values[1] = (val*) var_res748;
3863 ((struct instance_array__NativeArray*)var801)->values[2] = (val*) var795;
3864 ((void (*)(val*, val*, long))(var799->class->vft[COLOR_array__Array__with_native]))(var799, var801, var800) /* with_native on <var799:Array[Object]>*/;
3865 }
3866 var802 = ((val* (*)(val*))(var799->class->vft[COLOR_string__Object__to_s]))(var799) /* to_s on <var799:Array[Object]>*/;
3867 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var802) /* add on <var_v:SeparateCompilerVisitor>*/;
3868 if (varonce803) {
3869 var804 = varonce803;
3870 } else {
3871 var805 = "}";
3872 var806 = 1;
3873 var807 = string__NativeString__to_s_with_length(var805, var806);
3874 var804 = var807;
3875 varonce803 = var804;
3876 }
3877 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var804) /* add on <var_v:SeparateCompilerVisitor>*/;
3878 RET_LABEL:;
3879 }
3880 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: Object, MClass) */
3881 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
3882 separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(self, p0);
3883 RET_LABEL:;
3884 }
3885 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: SeparateErasureCompiler, MClass): Bool */
3886 short int separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
3887 short int var /* : Bool */;
3888 val* var_mclass /* var mclass: MClass */;
3889 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
3890 val* var2 /* : nullable Object */;
3891 short int var3 /* : Bool */;
3892 short int var4 /* : Bool */;
3893 static val* varonce;
3894 val* var5 /* : String */;
3895 char* var6 /* : NativeString */;
3896 long var7 /* : Int */;
3897 val* var8 /* : String */;
3898 val* var9 /* : String */;
3899 val* var10 /* : Array[Object] */;
3900 long var11 /* : Int */;
3901 val* var12 /* : NativeArray[Object] */;
3902 val* var13 /* : String */;
3903 static val* varonce14;
3904 val* var15 /* : String */;
3905 char* var16 /* : NativeString */;
3906 long var17 /* : Int */;
3907 val* var18 /* : String */;
3908 val* var19 /* : String */;
3909 static val* varonce20;
3910 val* var21 /* : String */;
3911 char* var22 /* : NativeString */;
3912 long var23 /* : Int */;
3913 val* var24 /* : String */;
3914 val* var25 /* : Array[Object] */;
3915 long var26 /* : Int */;
3916 val* var27 /* : NativeArray[Object] */;
3917 val* var28 /* : String */;
3918 val* var29 /* : AbstractCompilerVisitor */;
3919 val* var_v /* var v: SeparateCompilerVisitor */;
3920 static val* varonce30;
3921 val* var31 /* : String */;
3922 char* var32 /* : NativeString */;
3923 long var33 /* : Int */;
3924 val* var34 /* : String */;
3925 val* var35 /* : String */;
3926 static val* varonce36;
3927 val* var37 /* : String */;
3928 char* var38 /* : NativeString */;
3929 long var39 /* : Int */;
3930 val* var40 /* : String */;
3931 val* var41 /* : Array[Object] */;
3932 long var42 /* : Int */;
3933 val* var43 /* : NativeArray[Object] */;
3934 val* var44 /* : String */;
3935 val* var45 /* : nullable Layout[MVirtualTypeProp] */;
3936 short int var46 /* : Bool */;
3937 int cltype;
3938 int idtype;
3939 static val* varonce47;
3940 val* var48 /* : String */;
3941 char* var49 /* : NativeString */;
3942 long var50 /* : Int */;
3943 val* var51 /* : String */;
3944 static val* varonce52;
3945 val* var53 /* : String */;
3946 char* var54 /* : NativeString */;
3947 long var55 /* : Int */;
3948 val* var56 /* : String */;
3949 val* var57 /* : Map[MClass, Array[nullable MPropDef]] */;
3950 val* var58 /* : nullable Object */;
3951 val* var59 /* : Iterator[nullable Object] */;
3952 short int var60 /* : Bool */;
3953 val* var61 /* : nullable Object */;
3954 val* var_vt /* var vt: nullable MPropDef */;
3955 val* var62 /* : null */;
3956 short int var63 /* : Bool */;
3957 static val* varonce64;
3958 val* var65 /* : String */;
3959 char* var66 /* : NativeString */;
3960 long var67 /* : Int */;
3961 val* var68 /* : String */;
3962 long var69 /* : Int */;
3963 long var_is_null /* var is_null: Int */;
3964 val* var70 /* : MClassDef */;
3965 val* var71 /* : MClassType */;
3966 short int var72 /* : Bool */;
3967 int cltype73;
3968 int idtype74;
3969 const char* var_class_name;
3970 val* var75 /* : nullable MType */;
3971 val* var76 /* : MType */;
3972 val* var_bound /* var bound: MType */;
3973 short int var77 /* : Bool */;
3974 int cltype78;
3975 int idtype79;
3976 val* var80 /* : MClassDef */;
3977 val* var81 /* : MClassType */;
3978 val* var82 /* : MType */;
3979 val* var83 /* : MType */;
3980 long var84 /* : Int */;
3981 short int var85 /* : Bool */;
3982 int cltype86;
3983 int idtype87;
3984 const char* var_class_name88;
3985 val* var89 /* : MClass */;
3986 val* var_vtclass /* var vtclass: MClass */;
3987 static val* varonce90;
3988 val* var91 /* : String */;
3989 char* var92 /* : NativeString */;
3990 long var93 /* : Int */;
3991 val* var94 /* : String */;
3992 val* var95 /* : String */;
3993 val* var96 /* : Array[Object] */;
3994 long var97 /* : Int */;
3995 val* var98 /* : NativeArray[Object] */;
3996 val* var99 /* : String */;
3997 static val* varonce100;
3998 val* var101 /* : String */;
3999 char* var102 /* : NativeString */;
4000 long var103 /* : Int */;
4001 val* var104 /* : String */;
4002 static val* varonce105;
4003 val* var106 /* : String */;
4004 char* var107 /* : NativeString */;
4005 long var108 /* : Int */;
4006 val* var109 /* : String */;
4007 val* var110 /* : String */;
4008 static val* varonce111;
4009 val* var112 /* : String */;
4010 char* var113 /* : NativeString */;
4011 long var114 /* : Int */;
4012 val* var115 /* : String */;
4013 static val* varonce116;
4014 val* var117 /* : String */;
4015 char* var118 /* : NativeString */;
4016 long var119 /* : Int */;
4017 val* var120 /* : String */;
4018 val* var121 /* : Array[Object] */;
4019 long var122 /* : Int */;
4020 val* var123 /* : NativeArray[Object] */;
4021 val* var124 /* : Object */;
4022 val* var125 /* : String */;
4023 static val* varonce127;
4024 val* var128 /* : String */;
4025 char* var129 /* : NativeString */;
4026 long var130 /* : Int */;
4027 val* var131 /* : String */;
4028 static val* varonce132;
4029 val* var133 /* : String */;
4030 char* var134 /* : NativeString */;
4031 long var135 /* : Int */;
4032 val* var136 /* : String */;
4033 short int var137 /* : Bool */;
4034 var_mclass = p0;
4035 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4036 var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var1, var_mclass) /* [] on <var1:Map[MClass, Array[nullable MPropDef]]>*/;
4037 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var2) /* is_empty on <var2:nullable Object(Array[nullable MPropDef])>*/;
4038 if (var3){
4039 var4 = 0;
4040 var = var4;
4041 goto RET_LABEL;
4042 } else {
4043 }
4044 if (varonce) {
4045 var5 = varonce;
4046 } else {
4047 var6 = "vts_table_";
4048 var7 = 10;
4049 var8 = string__NativeString__to_s_with_length(var6, var7);
4050 var5 = var8;
4051 varonce = var5;
4052 }
4053 var9 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4054 var10 = NEW_array__Array(&type_array__Arraykernel__Object);
4055 { /* var10 = array_instance Array[Object] */
4056 var11 = 2;
4057 var12 = NEW_array__NativeArray(var11, &type_array__NativeArraykernel__Object);
4058 ((struct instance_array__NativeArray*)var12)->values[0] = (val*) var5;
4059 ((struct instance_array__NativeArray*)var12)->values[1] = (val*) var9;
4060 ((void (*)(val*, val*, long))(var10->class->vft[COLOR_array__Array__with_native]))(var10, var12, var11) /* with_native on <var10:Array[Object]>*/;
4061 }
4062 var13 = ((val* (*)(val*))(var10->class->vft[COLOR_string__Object__to_s]))(var10) /* to_s on <var10:Array[Object]>*/;
4063 if (varonce14) {
4064 var15 = varonce14;
4065 } else {
4066 var16 = "extern const struct vts_table vts_table_";
4067 var17 = 40;
4068 var18 = string__NativeString__to_s_with_length(var16, var17);
4069 var15 = var18;
4070 varonce14 = var15;
4071 }
4072 var19 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4073 if (varonce20) {
4074 var21 = varonce20;
4075 } else {
4076 var22 = ";";
4077 var23 = 1;
4078 var24 = string__NativeString__to_s_with_length(var22, var23);
4079 var21 = var24;
4080 varonce20 = var21;
4081 }
4082 var25 = NEW_array__Array(&type_array__Arraykernel__Object);
4083 { /* var25 = array_instance Array[Object] */
4084 var26 = 3;
4085 var27 = NEW_array__NativeArray(var26, &type_array__NativeArraykernel__Object);
4086 ((struct instance_array__NativeArray*)var27)->values[0] = (val*) var15;
4087 ((struct instance_array__NativeArray*)var27)->values[1] = (val*) var19;
4088 ((struct instance_array__NativeArray*)var27)->values[2] = (val*) var21;
4089 ((void (*)(val*, val*, long))(var25->class->vft[COLOR_array__Array__with_native]))(var25, var27, var26) /* with_native on <var25:Array[Object]>*/;
4090 }
4091 var28 = ((val* (*)(val*))(var25->class->vft[COLOR_string__Object__to_s]))(var25) /* to_s on <var25:Array[Object]>*/;
4092 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var13, var28) /* provide_declaration on <self:SeparateErasureCompiler>*/;
4093 var29 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateErasureCompiler>*/;
4094 var_v = var29;
4095 if (varonce30) {
4096 var31 = varonce30;
4097 } else {
4098 var32 = "const struct vts_table vts_table_";
4099 var33 = 33;
4100 var34 = string__NativeString__to_s_with_length(var32, var33);
4101 var31 = var34;
4102 varonce30 = var31;
4103 }
4104 var35 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4105 if (varonce36) {
4106 var37 = varonce36;
4107 } else {
4108 var38 = " = {";
4109 var39 = 4;
4110 var40 = string__NativeString__to_s_with_length(var38, var39);
4111 var37 = var40;
4112 varonce36 = var37;
4113 }
4114 var41 = NEW_array__Array(&type_array__Arraykernel__Object);
4115 { /* var41 = array_instance Array[Object] */
4116 var42 = 3;
4117 var43 = NEW_array__NativeArray(var42, &type_array__NativeArraykernel__Object);
4118 ((struct instance_array__NativeArray*)var43)->values[0] = (val*) var31;
4119 ((struct instance_array__NativeArray*)var43)->values[1] = (val*) var35;
4120 ((struct instance_array__NativeArray*)var43)->values[2] = (val*) var37;
4121 ((void (*)(val*, val*, long))(var41->class->vft[COLOR_array__Array__with_native]))(var41, var43, var42) /* with_native on <var41:Array[Object]>*/;
4122 }
4123 var44 = ((val* (*)(val*))(var41->class->vft[COLOR_string__Object__to_s]))(var41) /* to_s on <var41:Array[Object]>*/;
4124 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var44) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4125 var45 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(self) /* vt_layout on <self:SeparateErasureCompiler>*/;
4126 /* <var45:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
4127 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
4128 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
4129 if(var45 == NULL) {
4130 var46 = 0;
4131 } else {
4132 if(cltype >= var45->type->table_size) {
4133 var46 = 0;
4134 } else {
4135 var46 = var45->type->type_table[cltype] == idtype;
4136 }
4137 }
4138 if (var46){
4139 } else {
4140 if (varonce47) {
4141 var48 = varonce47;
4142 } else {
4143 var49 = "0, /* dummy */";
4144 var50 = 14;
4145 var51 = string__NativeString__to_s_with_length(var49, var50);
4146 var48 = var51;
4147 varonce47 = var48;
4148 }
4149 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var48) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4150 }
4151 if (varonce52) {
4152 var53 = varonce52;
4153 } else {
4154 var54 = "{";
4155 var55 = 1;
4156 var56 = string__NativeString__to_s_with_length(var54, var55);
4157 var53 = var56;
4158 varonce52 = var53;
4159 }
4160 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var53) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4161 var57 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4162 var58 = ((val* (*)(val*, val*))(var57->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var57, var_mclass) /* [] on <var57:Map[MClass, Array[nullable MPropDef]]>*/;
4163 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__Collection__iterator]))(var58) /* iterator on <var58:nullable Object(Array[nullable MPropDef])>*/;
4164 for(;;) {
4165 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var59) /* is_ok on <var59:Iterator[nullable Object]>*/;
4166 if(!var60) break;
4167 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__item]))(var59) /* item on <var59:Iterator[nullable Object]>*/;
4168 var_vt = var61;
4169 var62 = NULL;
4170 if (var_vt == NULL) {
4171 var63 = 1; /* is null */
4172 } else {
4173 var63 = 0; /* arg is null but recv is not */
4174 }
4175 if (var63){
4176 if (varonce64) {
4177 var65 = varonce64;
4178 } else {
4179 var66 = "{-1, NULL}, /* empty */";
4180 var67 = 23;
4181 var68 = string__NativeString__to_s_with_length(var66, var67);
4182 var65 = var68;
4183 varonce64 = var65;
4184 }
4185 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var65) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4186 } else {
4187 var69 = 0;
4188 var_is_null = var69;
4189 var70 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
4190 var71 = ((val* (*)(val*))(var70->class->vft[COLOR_model__MClassDef__bound_mtype]))(var70) /* bound_mtype on <var70:MClassDef>*/;
4191 /* <var_vt:nullable MPropDef(MPropDef)> isa MVirtualTypeDef */
4192 cltype73 = type_model__MVirtualTypeDef.color;
4193 idtype74 = type_model__MVirtualTypeDef.id;
4194 if(cltype73 >= var_vt->type->table_size) {
4195 var72 = 0;
4196 } else {
4197 var72 = var_vt->type->type_table[cltype73] == idtype74;
4198 }
4199 if (!var72) {
4200 var_class_name = var_vt == NULL ? "null" : var_vt->type->name;
4201 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MVirtualTypeDef", var_class_name);
4202 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 358);
4203 show_backtrace(1);
4204 }
4205 var75 = ((val* (*)(val*))(var_vt->class->vft[COLOR_model__MVirtualTypeDef__bound]))(var_vt) /* bound on <var_vt:MPropDef(MVirtualTypeDef)>*/;
4206 var76 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound]))(self, var71, var75) /* retrieve_vt_bound on <self:SeparateErasureCompiler>*/;
4207 var_bound = var76;
4208 for(;;) {
4209 /* <var_bound:MType> isa MNullableType */
4210 cltype78 = type_model__MNullableType.color;
4211 idtype79 = type_model__MNullableType.id;
4212 if(cltype78 >= var_bound->type->table_size) {
4213 var77 = 0;
4214 } else {
4215 var77 = var_bound->type->type_table[cltype78] == idtype79;
4216 }
4217 if (!var77) break;
4218 var80 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
4219 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_model__MClassDef__bound_mtype]))(var80) /* bound_mtype on <var80:MClassDef>*/;
4220 var82 = ((val* (*)(val*))(var_bound->class->vft[COLOR_model__MNullableType__mtype]))(var_bound) /* mtype on <var_bound:MType(MNullableType)>*/;
4221 var83 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound]))(self, var81, var82) /* retrieve_vt_bound on <self:SeparateErasureCompiler>*/;
4222 var_bound = var83;
4223 var84 = 1;
4224 var_is_null = var84;
4225 CONTINUE_label: (void)0;
4226 }
4227 BREAK_label: (void)0;
4228 /* <var_bound:MType> isa MClassType */
4229 cltype86 = type_model__MClassType.color;
4230 idtype87 = type_model__MClassType.id;
4231 if(cltype86 >= var_bound->type->table_size) {
4232 var85 = 0;
4233 } else {
4234 var85 = var_bound->type->type_table[cltype86] == idtype87;
4235 }
4236 if (!var85) {
4237 var_class_name88 = var_bound == NULL ? "null" : var_bound->type->name;
4238 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name88);
4239 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 363);
4240 show_backtrace(1);
4241 }
4242 var89 = ((val* (*)(val*))(var_bound->class->vft[COLOR_model__MClassType__mclass]))(var_bound) /* mclass on <var_bound:MType(MClassType)>*/;
4243 var_vtclass = var89;
4244 if (varonce90) {
4245 var91 = varonce90;
4246 } else {
4247 var92 = "class_";
4248 var93 = 6;
4249 var94 = string__NativeString__to_s_with_length(var92, var93);
4250 var91 = var94;
4251 varonce90 = var91;
4252 }
4253 var95 = ((val* (*)(val*))(var_vtclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_vtclass) /* c_name on <var_vtclass:MClass>*/;
4254 var96 = NEW_array__Array(&type_array__Arraykernel__Object);
4255 { /* var96 = array_instance Array[Object] */
4256 var97 = 2;
4257 var98 = NEW_array__NativeArray(var97, &type_array__NativeArraykernel__Object);
4258 ((struct instance_array__NativeArray*)var98)->values[0] = (val*) var91;
4259 ((struct instance_array__NativeArray*)var98)->values[1] = (val*) var95;
4260 ((void (*)(val*, val*, long))(var96->class->vft[COLOR_array__Array__with_native]))(var96, var98, var97) /* with_native on <var96:Array[Object]>*/;
4261 }
4262 var99 = ((val* (*)(val*))(var96->class->vft[COLOR_string__Object__to_s]))(var96) /* to_s on <var96:Array[Object]>*/;
4263 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var99) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
4264 if (varonce100) {
4265 var101 = varonce100;
4266 } else {
4267 var102 = "{";
4268 var103 = 1;
4269 var104 = string__NativeString__to_s_with_length(var102, var103);
4270 var101 = var104;
4271 varonce100 = var101;
4272 }
4273 if (varonce105) {
4274 var106 = varonce105;
4275 } else {
4276 var107 = ", &class_";
4277 var108 = 9;
4278 var109 = string__NativeString__to_s_with_length(var107, var108);
4279 var106 = var109;
4280 varonce105 = var106;
4281 }
4282 var110 = ((val* (*)(val*))(var_vtclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_vtclass) /* c_name on <var_vtclass:MClass>*/;
4283 if (varonce111) {
4284 var112 = varonce111;
4285 } else {
4286 var113 = "}, /* ";
4287 var114 = 6;
4288 var115 = string__NativeString__to_s_with_length(var113, var114);
4289 var112 = var115;
4290 varonce111 = var112;
4291 }
4292 if (varonce116) {
4293 var117 = varonce116;
4294 } else {
4295 var118 = " */";
4296 var119 = 3;
4297 var120 = string__NativeString__to_s_with_length(var118, var119);
4298 var117 = var120;
4299 varonce116 = var117;
4300 }
4301 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
4302 { /* var121 = array_instance Array[Object] */
4303 var122 = 7;
4304 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
4305 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var101;
4306 var124 = BOX_kernel__Int(var_is_null); /* autobox from Int to Object */
4307 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var124;
4308 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var106;
4309 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var110;
4310 ((struct instance_array__NativeArray*)var123)->values[4] = (val*) var112;
4311 ((struct instance_array__NativeArray*)var123)->values[5] = (val*) var_vt;
4312 ((struct instance_array__NativeArray*)var123)->values[6] = (val*) var117;
4313 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
4314 }
4315 var125 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
4316 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var125) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4317 }
4318 CONTINUE_label126: (void)0;
4319 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__next]))(var59) /* next on <var59:Iterator[nullable Object]>*/;
4320 }
4321 BREAK_label126: (void)0;
4322 if (varonce127) {
4323 var128 = varonce127;
4324 } else {
4325 var129 = "},";
4326 var130 = 2;
4327 var131 = string__NativeString__to_s_with_length(var129, var130);
4328 var128 = var131;
4329 varonce127 = var128;
4330 }
4331 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var128) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4332 if (varonce132) {
4333 var133 = varonce132;
4334 } else {
4335 var134 = "};";
4336 var135 = 2;
4337 var136 = string__NativeString__to_s_with_length(var134, var135);
4338 var133 = var136;
4339 varonce132 = var133;
4340 }
4341 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var133) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4342 var137 = 1;
4343 var = var137;
4344 goto RET_LABEL;
4345 RET_LABEL:;
4346 return var;
4347 }
4348 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: Object, MClass): Bool */
4349 short int VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
4350 short int var /* : Bool */;
4351 short int var1 /* : Bool */;
4352 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(self, p0);
4353 var = var1;
4354 RET_LABEL:;
4355 return var;
4356 }
4357 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: SeparateErasureCompiler, MClassType, nullable MType): MType */
4358 val* separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
4359 val* var /* : MType */;
4360 val* var_anchor /* var anchor: MClassType */;
4361 val* var_mtype /* var mtype: nullable MType */;
4362 val* var1 /* : null */;
4363 short int var2 /* : Bool */;
4364 static val* varonce;
4365 val* var3 /* : String */;
4366 char* var4 /* : NativeString */;
4367 long var5 /* : Int */;
4368 val* var6 /* : String */;
4369 short int var7 /* : Bool */;
4370 int cltype;
4371 int idtype;
4372 val* var8 /* : MModule */;
4373 val* var9 /* : MType */;
4374 short int var10 /* : Bool */;
4375 int cltype11;
4376 int idtype12;
4377 val* var13 /* : MModule */;
4378 val* var14 /* : MType */;
4379 var_anchor = p0;
4380 var_mtype = p1;
4381 var1 = NULL;
4382 if (var_mtype == NULL) {
4383 var2 = 1; /* is null */
4384 } else {
4385 var2 = 0; /* arg is null but recv is not */
4386 }
4387 if (var2){
4388 if (varonce) {
4389 var3 = varonce;
4390 } else {
4391 var4 = "NOT YET IMPLEMENTED: retrieve_vt_bound on null";
4392 var5 = 46;
4393 var6 = string__NativeString__to_s_with_length(var4, var5);
4394 var3 = var6;
4395 varonce = var3;
4396 }
4397 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var3) /* print on <self:SeparateErasureCompiler>*/;
4398 fprintf(stderr, "Runtime error: %s", "Aborted");
4399 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 376);
4400 show_backtrace(1);
4401 } else {
4402 }
4403 /* <var_mtype:nullable MType(MType)> isa MVirtualType */
4404 cltype = type_model__MVirtualType.color;
4405 idtype = type_model__MVirtualType.id;
4406 if(cltype >= var_mtype->type->table_size) {
4407 var7 = 0;
4408 } else {
4409 var7 = var_mtype->type->type_table[cltype] == idtype;
4410 }
4411 if (var7){
4412 var8 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
4413 var9 = ((val* (*)(val*, val*, val*))(var_mtype->class->vft[COLOR_model__MType__anchor_to]))(var_mtype, var8, var_anchor) /* anchor_to on <var_mtype:nullable MType(MVirtualType)>*/;
4414 var = var9;
4415 goto RET_LABEL;
4416 } else {
4417 /* <var_mtype:nullable MType(MType)> isa MParameterType */
4418 cltype11 = type_model__MParameterType.color;
4419 idtype12 = type_model__MParameterType.id;
4420 if(cltype11 >= var_mtype->type->table_size) {
4421 var10 = 0;
4422 } else {
4423 var10 = var_mtype->type->type_table[cltype11] == idtype12;
4424 }
4425 if (var10){
4426 var13 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
4427 var14 = ((val* (*)(val*, val*, val*))(var_mtype->class->vft[COLOR_model__MType__anchor_to]))(var_mtype, var13, var_anchor) /* anchor_to on <var_mtype:nullable MType(MParameterType)>*/;
4428 var = var14;
4429 goto RET_LABEL;
4430 } else {
4431 var = var_mtype;
4432 goto RET_LABEL;
4433 }
4434 }
4435 RET_LABEL:;
4436 return var;
4437 }
4438 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: Object, MClassType, nullable MType): MType */
4439 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
4440 val* var /* : MType */;
4441 val* var1 /* : MType */;
4442 var1 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, p0, p1);
4443 var = var1;
4444 RET_LABEL:;
4445 return var;
4446 }
4447 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: SeparateErasureCompiler): SeparateCompilerVisitor */
4448 val* separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
4449 val* var /* : SeparateCompilerVisitor */;
4450 val* var1 /* : SeparateErasureCompilerVisitor */;
4451 short int var2 /* : Bool */;
4452 int cltype;
4453 int idtype;
4454 const struct type* type_struct;
4455 const char* var_class_name;
4456 var1 = NEW_separate_erasure_compiler__SeparateErasureCompilerVisitor(&type_separate_erasure_compiler__SeparateErasureCompilerVisitor);
4457 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init]))(var1, self) /* init on <var1:SeparateErasureCompilerVisitor>*/;
4458 /* <var1:SeparateErasureCompilerVisitor> isa VISITOR */
4459 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
4460 cltype = type_struct->color;
4461 idtype = type_struct->id;
4462 if(cltype >= var1->type->table_size) {
4463 var2 = 0;
4464 } else {
4465 var2 = var1->type->type_table[cltype] == idtype;
4466 }
4467 if (!var2) {
4468 var_class_name = var1 == NULL ? "null" : var1->type->name;
4469 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
4470 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 387);
4471 show_backtrace(1);
4472 }
4473 var = var1;
4474 goto RET_LABEL;
4475 RET_LABEL:;
4476 return var;
4477 }
4478 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
4479 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
4480 val* var /* : AbstractCompilerVisitor */;
4481 val* var1 /* : SeparateCompilerVisitor */;
4482 var1 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
4483 var = var1;
4484 RET_LABEL:;
4485 return var;
4486 }
4487 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MClass]] */
4488 val* separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
4489 val* var /* : Map[MClass, Array[nullable MClass]] */;
4490 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
4491 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_tables].val; /* @class_tables on <self:SeparateErasureCompiler> */
4492 if (var1 == NULL) {
4493 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @class_tables");
4494 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 391);
4495 show_backtrace(1);
4496 }
4497 var = var1;
4498 RET_LABEL:;
4499 return var;
4500 }
4501 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: Object): Map[MClass, Array[nullable MClass]] */
4502 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
4503 val* var /* : Map[MClass, Array[nullable MClass]] */;
4504 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
4505 var1 = separate_erasure_compiler__SeparateErasureCompiler__class_tables(self);
4506 var = var1;
4507 RET_LABEL:;
4508 return var;
4509 }
4510 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MClass]]) */
4511 void separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
4512 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_tables].val = p0; /* @class_tables on <self:SeparateErasureCompiler> */
4513 RET_LABEL:;
4514 }
4515 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: Object, Map[MClass, Array[nullable MClass]]) */
4516 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
4517 separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(self, p0);
4518 RET_LABEL:;
4519 }
4520 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MPropDef]] */
4521 val* separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
4522 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
4523 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
4524 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_tables].val; /* @vt_tables on <self:SeparateErasureCompiler> */
4525 if (var1 == NULL) {
4526 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @vt_tables");
4527 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 392);
4528 show_backtrace(1);
4529 }
4530 var = var1;
4531 RET_LABEL:;
4532 return var;
4533 }
4534 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: Object): Map[MClass, Array[nullable MPropDef]] */
4535 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
4536 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
4537 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
4538 var1 = separate_erasure_compiler__SeparateErasureCompiler__vt_tables(self);
4539 var = var1;
4540 RET_LABEL:;
4541 return var;
4542 }
4543 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MPropDef]]) */
4544 void separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
4545 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_tables].val = p0; /* @vt_tables on <self:SeparateErasureCompiler> */
4546 RET_LABEL:;
4547 }
4548 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: Object, Map[MClass, Array[nullable MPropDef]]) */
4549 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
4550 separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(self, p0);
4551 RET_LABEL:;
4552 }
4553 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: SeparateErasureCompiler) */
4554 void separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
4555 static val* varonce;
4556 val* var /* : String */;
4557 char* var1 /* : NativeString */;
4558 long var2 /* : Int */;
4559 val* var3 /* : String */;
4560 static val* varonce4;
4561 val* var5 /* : String */;
4562 char* var6 /* : NativeString */;
4563 long var7 /* : Int */;
4564 val* var8 /* : String */;
4565 long var9 /* : Int */;
4566 long var_total /* var total: Int */;
4567 long var10 /* : Int */;
4568 long var_holes /* var holes: Int */;
4569 val* var11 /* : Map[MClass, Array[nullable MClass]] */;
4570 val* var12 /* : MapIterator[Object, nullable Object] */;
4571 short int var13 /* : Bool */;
4572 val* var14 /* : Object */;
4573 val* var_t /* var t: MClass */;
4574 val* var15 /* : nullable Object */;
4575 val* var_table /* var table: Array[nullable MClass] */;
4576 long var16 /* : Int */;
4577 long var17 /* : Int */;
4578 long var19 /* : Int */;
4579 val* var20 /* : Iterator[nullable Object] */;
4580 short int var21 /* : Bool */;
4581 val* var22 /* : nullable Object */;
4582 val* var_e /* var e: nullable MClass */;
4583 val* var23 /* : null */;
4584 short int var24 /* : Bool */;
4585 long var25 /* : Int */;
4586 long var26 /* : Int */;
4587 long var28 /* : Int */;
4588 static val* varonce30;
4589 val* var31 /* : String */;
4590 char* var32 /* : NativeString */;
4591 long var33 /* : Int */;
4592 val* var34 /* : String */;
4593 static val* varonce35;
4594 val* var36 /* : String */;
4595 char* var37 /* : NativeString */;
4596 long var38 /* : Int */;
4597 val* var39 /* : String */;
4598 val* var40 /* : Array[Object] */;
4599 long var41 /* : Int */;
4600 val* var42 /* : NativeArray[Object] */;
4601 val* var43 /* : Object */;
4602 val* var44 /* : Object */;
4603 val* var45 /* : String */;
4604 static val* varonce46;
4605 val* var47 /* : String */;
4606 char* var48 /* : NativeString */;
4607 long var49 /* : Int */;
4608 val* var50 /* : String */;
4609 static val* varonce51;
4610 val* var52 /* : String */;
4611 char* var53 /* : NativeString */;
4612 long var54 /* : Int */;
4613 val* var55 /* : String */;
4614 long var56 /* : Int */;
4615 long var57 /* : Int */;
4616 val* var58 /* : Map[MClass, Array[nullable MPropDef]] */;
4617 val* var59 /* : MapIterator[Object, nullable Object] */;
4618 short int var60 /* : Bool */;
4619 val* var61 /* : Object */;
4620 val* var_t62 /* var t: MClass */;
4621 val* var63 /* : nullable Object */;
4622 val* var_table64 /* var table: Array[nullable MPropDef] */;
4623 long var65 /* : Int */;
4624 long var66 /* : Int */;
4625 long var68 /* : Int */;
4626 val* var69 /* : Iterator[nullable Object] */;
4627 short int var70 /* : Bool */;
4628 val* var71 /* : nullable Object */;
4629 val* var_e72 /* var e: nullable MPropDef */;
4630 val* var73 /* : null */;
4631 short int var74 /* : Bool */;
4632 long var75 /* : Int */;
4633 long var76 /* : Int */;
4634 long var78 /* : Int */;
4635 static val* varonce81;
4636 val* var82 /* : String */;
4637 char* var83 /* : NativeString */;
4638 long var84 /* : Int */;
4639 val* var85 /* : String */;
4640 static val* varonce86;
4641 val* var87 /* : String */;
4642 char* var88 /* : NativeString */;
4643 long var89 /* : Int */;
4644 val* var90 /* : String */;
4645 val* var91 /* : Array[Object] */;
4646 long var92 /* : Int */;
4647 val* var93 /* : NativeArray[Object] */;
4648 val* var94 /* : Object */;
4649 val* var95 /* : Object */;
4650 val* var96 /* : String */;
4651 static val* varonce97;
4652 val* var98 /* : String */;
4653 char* var99 /* : NativeString */;
4654 long var100 /* : Int */;
4655 val* var101 /* : String */;
4656 static val* varonce102;
4657 val* var103 /* : String */;
4658 char* var104 /* : NativeString */;
4659 long var105 /* : Int */;
4660 val* var106 /* : String */;
4661 long var107 /* : Int */;
4662 long var108 /* : Int */;
4663 val* var109 /* : Map[MClass, Array[nullable MPropDef]] */;
4664 val* var110 /* : MapIterator[Object, nullable Object] */;
4665 short int var111 /* : Bool */;
4666 val* var112 /* : Object */;
4667 val* var_t113 /* var t: MClass */;
4668 val* var114 /* : nullable Object */;
4669 val* var_table115 /* var table: Array[nullable MPropDef] */;
4670 long var116 /* : Int */;
4671 long var117 /* : Int */;
4672 long var119 /* : Int */;
4673 val* var120 /* : Iterator[nullable Object] */;
4674 short int var121 /* : Bool */;
4675 val* var122 /* : nullable Object */;
4676 val* var_e123 /* var e: nullable MPropDef */;
4677 val* var124 /* : null */;
4678 short int var125 /* : Bool */;
4679 long var126 /* : Int */;
4680 long var127 /* : Int */;
4681 long var129 /* : Int */;
4682 static val* varonce132;
4683 val* var133 /* : String */;
4684 char* var134 /* : NativeString */;
4685 long var135 /* : Int */;
4686 val* var136 /* : String */;
4687 static val* varonce137;
4688 val* var138 /* : String */;
4689 char* var139 /* : NativeString */;
4690 long var140 /* : Int */;
4691 val* var141 /* : String */;
4692 val* var142 /* : Array[Object] */;
4693 long var143 /* : Int */;
4694 val* var144 /* : NativeArray[Object] */;
4695 val* var145 /* : Object */;
4696 val* var146 /* : Object */;
4697 val* var147 /* : String */;
4698 static val* varonce148;
4699 val* var149 /* : String */;
4700 char* var150 /* : NativeString */;
4701 long var151 /* : Int */;
4702 val* var152 /* : String */;
4703 static val* varonce153;
4704 val* var154 /* : String */;
4705 char* var155 /* : NativeString */;
4706 long var156 /* : Int */;
4707 val* var157 /* : String */;
4708 long var158 /* : Int */;
4709 long var159 /* : Int */;
4710 val* var160 /* : Map[MClass, Array[nullable MPropDef]] */;
4711 val* var161 /* : MapIterator[Object, nullable Object] */;
4712 short int var162 /* : Bool */;
4713 val* var163 /* : Object */;
4714 val* var_t164 /* var t: MClass */;
4715 val* var165 /* : nullable Object */;
4716 val* var_table166 /* var table: Array[nullable MPropDef] */;
4717 long var167 /* : Int */;
4718 long var168 /* : Int */;
4719 long var170 /* : Int */;
4720 val* var171 /* : Iterator[nullable Object] */;
4721 short int var172 /* : Bool */;
4722 val* var173 /* : nullable Object */;
4723 val* var_e174 /* var e: nullable MPropDef */;
4724 val* var175 /* : null */;
4725 short int var176 /* : Bool */;
4726 long var177 /* : Int */;
4727 long var178 /* : Int */;
4728 long var180 /* : Int */;
4729 static val* varonce183;
4730 val* var184 /* : String */;
4731 char* var185 /* : NativeString */;
4732 long var186 /* : Int */;
4733 val* var187 /* : String */;
4734 static val* varonce188;
4735 val* var189 /* : String */;
4736 char* var190 /* : NativeString */;
4737 long var191 /* : Int */;
4738 val* var192 /* : String */;
4739 val* var193 /* : Array[Object] */;
4740 long var194 /* : Int */;
4741 val* var195 /* : NativeArray[Object] */;
4742 val* var196 /* : Object */;
4743 val* var197 /* : Object */;
4744 val* var198 /* : String */;
4745 if (varonce) {
4746 var = varonce;
4747 } else {
4748 var1 = "# size of subtyping tables";
4749 var2 = 26;
4750 var3 = string__NativeString__to_s_with_length(var1, var2);
4751 var = var3;
4752 varonce = var;
4753 }
4754 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var) /* print on <self:SeparateErasureCompiler>*/;
4755 if (varonce4) {
4756 var5 = varonce4;
4757 } else {
4758 var6 = "\11total \11holes";
4759 var7 = 13;
4760 var8 = string__NativeString__to_s_with_length(var6, var7);
4761 var5 = var8;
4762 varonce4 = var5;
4763 }
4764 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var5) /* print on <self:SeparateErasureCompiler>*/;
4765 var9 = 0;
4766 var_total = var9;
4767 var10 = 0;
4768 var_holes = var10;
4769 var11 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables]))(self) /* class_tables on <self:SeparateErasureCompiler>*/;
4770 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var11) /* iterator on <var11:Map[MClass, Array[nullable MClass]]>*/;
4771 for(;;) {
4772 var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var12) /* is_ok on <var12:MapIterator[Object, nullable Object]>*/;
4773 if(!var13) break;
4774 var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__key]))(var12) /* key on <var12:MapIterator[Object, nullable Object]>*/;
4775 var_t = var14;
4776 var15 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__item]))(var12) /* item on <var12:MapIterator[Object, nullable Object]>*/;
4777 var_table = var15;
4778 var16 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
4779 { /* Inline kernel#Int#+ (var_total,var16) */
4780 var19 = var_total + var16;
4781 var17 = var19;
4782 goto RET_LABEL18;
4783 RET_LABEL18:(void)0;
4784 }
4785 var_total = var17;
4786 var20 = ((val* (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table) /* iterator on <var_table:Array[nullable MClass]>*/;
4787 for(;;) {
4788 var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
4789 if(!var21) break;
4790 var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
4791 var_e = var22;
4792 var23 = NULL;
4793 if (var_e == NULL) {
4794 var24 = 1; /* is null */
4795 } else {
4796 var24 = 0; /* arg is null but recv is not */
4797 }
4798 if (var24){
4799 var25 = 1;
4800 { /* Inline kernel#Int#+ (var_holes,var25) */
4801 var28 = var_holes + var25;
4802 var26 = var28;
4803 goto RET_LABEL27;
4804 RET_LABEL27:(void)0;
4805 }
4806 var_holes = var26;
4807 } else {
4808 }
4809 CONTINUE_label: (void)0;
4810 ((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
4811 }
4812 BREAK_label: (void)0;
4813 CONTINUE_label29: (void)0;
4814 ((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__next]))(var12) /* next on <var12:MapIterator[Object, nullable Object]>*/;
4815 }
4816 BREAK_label29: (void)0;
4817 if (varonce30) {
4818 var31 = varonce30;
4819 } else {
4820 var32 = "\11";
4821 var33 = 1;
4822 var34 = string__NativeString__to_s_with_length(var32, var33);
4823 var31 = var34;
4824 varonce30 = var31;
4825 }
4826 if (varonce35) {
4827 var36 = varonce35;
4828 } else {
4829 var37 = "\11";
4830 var38 = 1;
4831 var39 = string__NativeString__to_s_with_length(var37, var38);
4832 var36 = var39;
4833 varonce35 = var36;
4834 }
4835 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
4836 { /* var40 = array_instance Array[Object] */
4837 var41 = 4;
4838 var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
4839 ((struct instance_array__NativeArray*)var42)->values[0] = (val*) var31;
4840 var43 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
4841 ((struct instance_array__NativeArray*)var42)->values[1] = (val*) var43;
4842 ((struct instance_array__NativeArray*)var42)->values[2] = (val*) var36;
4843 var44 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
4844 ((struct instance_array__NativeArray*)var42)->values[3] = (val*) var44;
4845 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
4846 }
4847 var45 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
4848 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var45) /* print on <self:SeparateErasureCompiler>*/;
4849 if (varonce46) {
4850 var47 = varonce46;
4851 } else {
4852 var48 = "# size of resolution tables";
4853 var49 = 27;
4854 var50 = string__NativeString__to_s_with_length(var48, var49);
4855 var47 = var50;
4856 varonce46 = var47;
4857 }
4858 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var47) /* print on <self:SeparateErasureCompiler>*/;
4859 if (varonce51) {
4860 var52 = varonce51;
4861 } else {
4862 var53 = "\11total \11holes";
4863 var54 = 13;
4864 var55 = string__NativeString__to_s_with_length(var53, var54);
4865 var52 = var55;
4866 varonce51 = var52;
4867 }
4868 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var52) /* print on <self:SeparateErasureCompiler>*/;
4869 var56 = 0;
4870 var_total = var56;
4871 var57 = 0;
4872 var_holes = var57;
4873 var58 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4874 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var58) /* iterator on <var58:Map[MClass, Array[nullable MPropDef]]>*/;
4875 for(;;) {
4876 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var59) /* is_ok on <var59:MapIterator[Object, nullable Object]>*/;
4877 if(!var60) break;
4878 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__key]))(var59) /* key on <var59:MapIterator[Object, nullable Object]>*/;
4879 var_t62 = var61;
4880 var63 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__item]))(var59) /* item on <var59:MapIterator[Object, nullable Object]>*/;
4881 var_table64 = var63;
4882 var65 = ((long (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__length]))(var_table64) /* length on <var_table64:Array[nullable MPropDef]>*/;
4883 { /* Inline kernel#Int#+ (var_total,var65) */
4884 var68 = var_total + var65;
4885 var66 = var68;
4886 goto RET_LABEL67;
4887 RET_LABEL67:(void)0;
4888 }
4889 var_total = var66;
4890 var69 = ((val* (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table64) /* iterator on <var_table64:Array[nullable MPropDef]>*/;
4891 for(;;) {
4892 var70 = ((short int (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var69) /* is_ok on <var69:Iterator[nullable Object]>*/;
4893 if(!var70) break;
4894 var71 = ((val* (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__item]))(var69) /* item on <var69:Iterator[nullable Object]>*/;
4895 var_e72 = var71;
4896 var73 = NULL;
4897 if (var_e72 == NULL) {
4898 var74 = 1; /* is null */
4899 } else {
4900 var74 = 0; /* arg is null but recv is not */
4901 }
4902 if (var74){
4903 var75 = 1;
4904 { /* Inline kernel#Int#+ (var_holes,var75) */
4905 var78 = var_holes + var75;
4906 var76 = var78;
4907 goto RET_LABEL77;
4908 RET_LABEL77:(void)0;
4909 }
4910 var_holes = var76;
4911 } else {
4912 }
4913 CONTINUE_label79: (void)0;
4914 ((void (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__next]))(var69) /* next on <var69:Iterator[nullable Object]>*/;
4915 }
4916 BREAK_label79: (void)0;
4917 CONTINUE_label80: (void)0;
4918 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__next]))(var59) /* next on <var59:MapIterator[Object, nullable Object]>*/;
4919 }
4920 BREAK_label80: (void)0;
4921 if (varonce81) {
4922 var82 = varonce81;
4923 } else {
4924 var83 = "\11";
4925 var84 = 1;
4926 var85 = string__NativeString__to_s_with_length(var83, var84);
4927 var82 = var85;
4928 varonce81 = var82;
4929 }
4930 if (varonce86) {
4931 var87 = varonce86;
4932 } else {
4933 var88 = "\11";
4934 var89 = 1;
4935 var90 = string__NativeString__to_s_with_length(var88, var89);
4936 var87 = var90;
4937 varonce86 = var87;
4938 }
4939 var91 = NEW_array__Array(&type_array__Arraykernel__Object);
4940 { /* var91 = array_instance Array[Object] */
4941 var92 = 4;
4942 var93 = NEW_array__NativeArray(var92, &type_array__NativeArraykernel__Object);
4943 ((struct instance_array__NativeArray*)var93)->values[0] = (val*) var82;
4944 var94 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
4945 ((struct instance_array__NativeArray*)var93)->values[1] = (val*) var94;
4946 ((struct instance_array__NativeArray*)var93)->values[2] = (val*) var87;
4947 var95 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
4948 ((struct instance_array__NativeArray*)var93)->values[3] = (val*) var95;
4949 ((void (*)(val*, val*, long))(var91->class->vft[COLOR_array__Array__with_native]))(var91, var93, var92) /* with_native on <var91:Array[Object]>*/;
4950 }
4951 var96 = ((val* (*)(val*))(var91->class->vft[COLOR_string__Object__to_s]))(var91) /* to_s on <var91:Array[Object]>*/;
4952 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var96) /* print on <self:SeparateErasureCompiler>*/;
4953 if (varonce97) {
4954 var98 = varonce97;
4955 } else {
4956 var99 = "# size of methods tables";
4957 var100 = 24;
4958 var101 = string__NativeString__to_s_with_length(var99, var100);
4959 var98 = var101;
4960 varonce97 = var98;
4961 }
4962 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var98) /* print on <self:SeparateErasureCompiler>*/;
4963 if (varonce102) {
4964 var103 = varonce102;
4965 } else {
4966 var104 = "\11total \11holes";
4967 var105 = 13;
4968 var106 = string__NativeString__to_s_with_length(var104, var105);
4969 var103 = var106;
4970 varonce102 = var103;
4971 }
4972 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var103) /* print on <self:SeparateErasureCompiler>*/;
4973 var107 = 0;
4974 var_total = var107;
4975 var108 = 0;
4976 var_holes = var108;
4977 var109 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateErasureCompiler>*/;
4978 var110 = ((val* (*)(val*))(var109->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var109) /* iterator on <var109:Map[MClass, Array[nullable MPropDef]]>*/;
4979 for(;;) {
4980 var111 = ((short int (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var110) /* is_ok on <var110:MapIterator[Object, nullable Object]>*/;
4981 if(!var111) break;
4982 var112 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__key]))(var110) /* key on <var110:MapIterator[Object, nullable Object]>*/;
4983 var_t113 = var112;
4984 var114 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__item]))(var110) /* item on <var110:MapIterator[Object, nullable Object]>*/;
4985 var_table115 = var114;
4986 var116 = ((long (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__length]))(var_table115) /* length on <var_table115:Array[nullable MPropDef]>*/;
4987 { /* Inline kernel#Int#+ (var_total,var116) */
4988 var119 = var_total + var116;
4989 var117 = var119;
4990 goto RET_LABEL118;
4991 RET_LABEL118:(void)0;
4992 }
4993 var_total = var117;
4994 var120 = ((val* (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table115) /* iterator on <var_table115:Array[nullable MPropDef]>*/;
4995 for(;;) {
4996 var121 = ((short int (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var120) /* is_ok on <var120:Iterator[nullable Object]>*/;
4997 if(!var121) break;
4998 var122 = ((val* (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__item]))(var120) /* item on <var120:Iterator[nullable Object]>*/;
4999 var_e123 = var122;
5000 var124 = NULL;
5001 if (var_e123 == NULL) {
5002 var125 = 1; /* is null */
5003 } else {
5004 var125 = 0; /* arg is null but recv is not */
5005 }
5006 if (var125){
5007 var126 = 1;
5008 { /* Inline kernel#Int#+ (var_holes,var126) */
5009 var129 = var_holes + var126;
5010 var127 = var129;
5011 goto RET_LABEL128;
5012 RET_LABEL128:(void)0;
5013 }
5014 var_holes = var127;
5015 } else {
5016 }
5017 CONTINUE_label130: (void)0;
5018 ((void (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__next]))(var120) /* next on <var120:Iterator[nullable Object]>*/;
5019 }
5020 BREAK_label130: (void)0;
5021 CONTINUE_label131: (void)0;
5022 ((void (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__next]))(var110) /* next on <var110:MapIterator[Object, nullable Object]>*/;
5023 }
5024 BREAK_label131: (void)0;
5025 if (varonce132) {
5026 var133 = varonce132;
5027 } else {
5028 var134 = "\11";
5029 var135 = 1;
5030 var136 = string__NativeString__to_s_with_length(var134, var135);
5031 var133 = var136;
5032 varonce132 = var133;
5033 }
5034 if (varonce137) {
5035 var138 = varonce137;
5036 } else {
5037 var139 = "\11";
5038 var140 = 1;
5039 var141 = string__NativeString__to_s_with_length(var139, var140);
5040 var138 = var141;
5041 varonce137 = var138;
5042 }
5043 var142 = NEW_array__Array(&type_array__Arraykernel__Object);
5044 { /* var142 = array_instance Array[Object] */
5045 var143 = 4;
5046 var144 = NEW_array__NativeArray(var143, &type_array__NativeArraykernel__Object);
5047 ((struct instance_array__NativeArray*)var144)->values[0] = (val*) var133;
5048 var145 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5049 ((struct instance_array__NativeArray*)var144)->values[1] = (val*) var145;
5050 ((struct instance_array__NativeArray*)var144)->values[2] = (val*) var138;
5051 var146 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5052 ((struct instance_array__NativeArray*)var144)->values[3] = (val*) var146;
5053 ((void (*)(val*, val*, long))(var142->class->vft[COLOR_array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
5054 }
5055 var147 = ((val* (*)(val*))(var142->class->vft[COLOR_string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
5056 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var147) /* print on <self:SeparateErasureCompiler>*/;
5057 if (varonce148) {
5058 var149 = varonce148;
5059 } else {
5060 var150 = "# size of attributes tables";
5061 var151 = 27;
5062 var152 = string__NativeString__to_s_with_length(var150, var151);
5063 var149 = var152;
5064 varonce148 = var149;
5065 }
5066 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var149) /* print on <self:SeparateErasureCompiler>*/;
5067 if (varonce153) {
5068 var154 = varonce153;
5069 } else {
5070 var155 = "\11total \11holes";
5071 var156 = 13;
5072 var157 = string__NativeString__to_s_with_length(var155, var156);
5073 var154 = var157;
5074 varonce153 = var154;
5075 }
5076 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var154) /* print on <self:SeparateErasureCompiler>*/;
5077 var158 = 0;
5078 var_total = var158;
5079 var159 = 0;
5080 var_holes = var159;
5081 var160 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateErasureCompiler>*/;
5082 var161 = ((val* (*)(val*))(var160->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var160) /* iterator on <var160:Map[MClass, Array[nullable MPropDef]]>*/;
5083 for(;;) {
5084 var162 = ((short int (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var161) /* is_ok on <var161:MapIterator[Object, nullable Object]>*/;
5085 if(!var162) break;
5086 var163 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__key]))(var161) /* key on <var161:MapIterator[Object, nullable Object]>*/;
5087 var_t164 = var163;
5088 var165 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__item]))(var161) /* item on <var161:MapIterator[Object, nullable Object]>*/;
5089 var_table166 = var165;
5090 var167 = ((long (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__length]))(var_table166) /* length on <var_table166:Array[nullable MPropDef]>*/;
5091 { /* Inline kernel#Int#+ (var_total,var167) */
5092 var170 = var_total + var167;
5093 var168 = var170;
5094 goto RET_LABEL169;
5095 RET_LABEL169:(void)0;
5096 }
5097 var_total = var168;
5098 var171 = ((val* (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table166) /* iterator on <var_table166:Array[nullable MPropDef]>*/;
5099 for(;;) {
5100 var172 = ((short int (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var171) /* is_ok on <var171:Iterator[nullable Object]>*/;
5101 if(!var172) break;
5102 var173 = ((val* (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__item]))(var171) /* item on <var171:Iterator[nullable Object]>*/;
5103 var_e174 = var173;
5104 var175 = NULL;
5105 if (var_e174 == NULL) {
5106 var176 = 1; /* is null */
5107 } else {
5108 var176 = 0; /* arg is null but recv is not */
5109 }
5110 if (var176){
5111 var177 = 1;
5112 { /* Inline kernel#Int#+ (var_holes,var177) */
5113 var180 = var_holes + var177;
5114 var178 = var180;
5115 goto RET_LABEL179;
5116 RET_LABEL179:(void)0;
5117 }
5118 var_holes = var178;
5119 } else {
5120 }
5121 CONTINUE_label181: (void)0;
5122 ((void (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__next]))(var171) /* next on <var171:Iterator[nullable Object]>*/;
5123 }
5124 BREAK_label181: (void)0;
5125 CONTINUE_label182: (void)0;
5126 ((void (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__next]))(var161) /* next on <var161:MapIterator[Object, nullable Object]>*/;
5127 }
5128 BREAK_label182: (void)0;
5129 if (varonce183) {
5130 var184 = varonce183;
5131 } else {
5132 var185 = "\11";
5133 var186 = 1;
5134 var187 = string__NativeString__to_s_with_length(var185, var186);
5135 var184 = var187;
5136 varonce183 = var184;
5137 }
5138 if (varonce188) {
5139 var189 = varonce188;
5140 } else {
5141 var190 = "\11";
5142 var191 = 1;
5143 var192 = string__NativeString__to_s_with_length(var190, var191);
5144 var189 = var192;
5145 varonce188 = var189;
5146 }
5147 var193 = NEW_array__Array(&type_array__Arraykernel__Object);
5148 { /* var193 = array_instance Array[Object] */
5149 var194 = 4;
5150 var195 = NEW_array__NativeArray(var194, &type_array__NativeArraykernel__Object);
5151 ((struct instance_array__NativeArray*)var195)->values[0] = (val*) var184;
5152 var196 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5153 ((struct instance_array__NativeArray*)var195)->values[1] = (val*) var196;
5154 ((struct instance_array__NativeArray*)var195)->values[2] = (val*) var189;
5155 var197 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5156 ((struct instance_array__NativeArray*)var195)->values[3] = (val*) var197;
5157 ((void (*)(val*, val*, long))(var193->class->vft[COLOR_array__Array__with_native]))(var193, var195, var194) /* with_native on <var193:Array[Object]>*/;
5158 }
5159 var198 = ((val* (*)(val*))(var193->class->vft[COLOR_string__Object__to_s]))(var193) /* to_s on <var193:Array[Object]>*/;
5160 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var198) /* print on <self:SeparateErasureCompiler>*/;
5161 RET_LABEL:;
5162 }
5163 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: Object) */
5164 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
5165 separate_erasure_compiler__SeparateErasureCompiler__display_sizes(self);
5166 RET_LABEL:;
5167 }
5168 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: SeparateErasureCompilerVisitor, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
5169 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
5170 val* var /* : nullable RuntimeVariable */;
5171 val* var_callsite /* var callsite: CallSite */;
5172 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
5173 val* var1 /* : nullable RuntimeVariable */;
5174 val* var_res /* var res: nullable RuntimeVariable */;
5175 short int var2 /* : Bool */;
5176 short int var3 /* : Bool */;
5177 short int var_ /* var : Bool */;
5178 val* var4 /* : AbstractCompiler */;
5179 short int var5 /* : Bool */;
5180 int cltype;
5181 int idtype;
5182 const char* var_class_name;
5183 val* var6 /* : ModelBuilder */;
5184 val* var7 /* : ToolContext */;
5185 val* var8 /* : OptionBool */;
5186 val* var9 /* : nullable Object */;
5187 short int var10 /* : Bool */;
5188 short int var11 /* : Bool */;
5189 val* var12 /* : null */;
5190 short int var13 /* : Bool */;
5191 val* var14 /* : MSignature */;
5192 val* var15 /* : nullable MType */;
5193 val* var_mtype /* var mtype: nullable MType */;
5194 val* var16 /* : null */;
5195 short int var17 /* : Bool */;
5196 static val* varonce;
5197 val* var18 /* : String */;
5198 char* var19 /* : NativeString */;
5199 long var20 /* : Int */;
5200 val* var21 /* : String */;
5201 static val* varonce22;
5202 val* var23 /* : String */;
5203 char* var24 /* : NativeString */;
5204 long var25 /* : Int */;
5205 val* var26 /* : String */;
5206 static val* varonce27;
5207 val* var28 /* : String */;
5208 char* var29 /* : NativeString */;
5209 long var30 /* : Int */;
5210 val* var31 /* : String */;
5211 val* var32 /* : Array[Object] */;
5212 long var33 /* : Int */;
5213 val* var34 /* : NativeArray[Object] */;
5214 val* var35 /* : String */;
5215 static val* varonce36;
5216 val* var37 /* : String */;
5217 char* var38 /* : NativeString */;
5218 long var39 /* : Int */;
5219 val* var40 /* : String */;
5220 val* var41 /* : RuntimeVariable */;
5221 val* var_cond /* var cond: RuntimeVariable */;
5222 static val* varonce42;
5223 val* var43 /* : String */;
5224 char* var44 /* : NativeString */;
5225 long var45 /* : Int */;
5226 val* var46 /* : String */;
5227 static val* varonce47;
5228 val* var48 /* : String */;
5229 char* var49 /* : NativeString */;
5230 long var50 /* : Int */;
5231 val* var51 /* : String */;
5232 val* var52 /* : Array[Object] */;
5233 long var53 /* : Int */;
5234 val* var54 /* : NativeArray[Object] */;
5235 val* var55 /* : String */;
5236 static val* varonce56;
5237 val* var57 /* : String */;
5238 char* var58 /* : NativeString */;
5239 long var59 /* : Int */;
5240 val* var60 /* : String */;
5241 static val* varonce61;
5242 val* var62 /* : String */;
5243 char* var63 /* : NativeString */;
5244 long var64 /* : Int */;
5245 val* var65 /* : String */;
5246 var_callsite = p0;
5247 var_arguments = p1;
5248 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite]))(self, p0, p1) /* compile_callsite on <self:SeparateErasureCompilerVisitor>*/;
5249 var_res = var1;
5250 var3 = ((short int (*)(val*))(var_callsite->class->vft[COLOR_typing__CallSite__erasure_cast]))(var_callsite) /* erasure_cast on <var_callsite:CallSite>*/;
5251 var_ = var3;
5252 if (var3){
5253 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
5254 /* <var4:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
5255 cltype = type_separate_erasure_compiler__SeparateErasureCompiler.color;
5256 idtype = type_separate_erasure_compiler__SeparateErasureCompiler.id;
5257 if(cltype >= var4->type->table_size) {
5258 var5 = 0;
5259 } else {
5260 var5 = var4->type->type_table[cltype] == idtype;
5261 }
5262 if (!var5) {
5263 var_class_name = var4 == NULL ? "null" : var4->type->name;
5264 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name);
5265 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 444);
5266 show_backtrace(1);
5267 }
5268 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var4) /* modelbuilder on <var4:SeparateCompiler(SeparateErasureCompiler)>*/;
5269 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var6) /* toolcontext on <var6:ModelBuilder>*/;
5270 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast]))(var7) /* opt_no_check_erasure_cast on <var7:ToolContext>*/;
5271 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_opts__Option__value]))(var8) /* value on <var8:OptionBool>*/;
5272 var10 = ((struct instance_kernel__Bool*)var9)->value; /* autounbox from nullable Object to Bool */;
5273 var11 = !var10;
5274 var2 = var11;
5275 } else {
5276 var2 = var_;
5277 }
5278 if (var2){
5279 var12 = NULL;
5280 if (var_res == NULL) {
5281 var13 = 0; /* is null */
5282 } else {
5283 var13 = 1; /* arg is null and recv is not */
5284 }
5285 if (!var13) {
5286 fprintf(stderr, "Runtime error: %s", "Assert failed");
5287 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 445);
5288 show_backtrace(1);
5289 }
5290 var14 = ((val* (*)(val*))(var_callsite->class->vft[COLOR_typing__CallSite__msignature]))(var_callsite) /* msignature on <var_callsite:CallSite>*/;
5291 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_model__MSignature__return_mtype]))(var14) /* return_mtype on <var14:MSignature>*/;
5292 var_mtype = var15;
5293 var16 = NULL;
5294 if (var_mtype == NULL) {
5295 var17 = 0; /* is null */
5296 } else {
5297 var17 = 1; /* arg is null and recv is not */
5298 }
5299 if (!var17) {
5300 fprintf(stderr, "Runtime error: %s", "Assert failed");
5301 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 447);
5302 show_backtrace(1);
5303 }
5304 if (varonce) {
5305 var18 = varonce;
5306 } else {
5307 var19 = "/* Erasure cast for return ";
5308 var20 = 27;
5309 var21 = string__NativeString__to_s_with_length(var19, var20);
5310 var18 = var21;
5311 varonce = var18;
5312 }
5313 if (varonce22) {
5314 var23 = varonce22;
5315 } else {
5316 var24 = " isa ";
5317 var25 = 5;
5318 var26 = string__NativeString__to_s_with_length(var24, var25);
5319 var23 = var26;
5320 varonce22 = var23;
5321 }
5322 if (varonce27) {
5323 var28 = varonce27;
5324 } else {
5325 var29 = " */";
5326 var30 = 3;
5327 var31 = string__NativeString__to_s_with_length(var29, var30);
5328 var28 = var31;
5329 varonce27 = var28;
5330 }
5331 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
5332 { /* var32 = array_instance Array[Object] */
5333 var33 = 5;
5334 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
5335 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var18;
5336 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_res;
5337 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var23;
5338 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var_mtype;
5339 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
5340 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
5341 }
5342 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
5343 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var35) /* add on <self:SeparateErasureCompilerVisitor>*/;
5344 if (varonce36) {
5345 var37 = varonce36;
5346 } else {
5347 var38 = "erasure";
5348 var39 = 7;
5349 var40 = string__NativeString__to_s_with_length(var38, var39);
5350 var37 = var40;
5351 varonce36 = var37;
5352 }
5353 var41 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__type_test]))(self, var_res, var_mtype, var37) /* type_test on <self:SeparateErasureCompilerVisitor>*/;
5354 var_cond = var41;
5355 if (varonce42) {
5356 var43 = varonce42;
5357 } else {
5358 var44 = "if (!";
5359 var45 = 5;
5360 var46 = string__NativeString__to_s_with_length(var44, var45);
5361 var43 = var46;
5362 varonce42 = var43;
5363 }
5364 if (varonce47) {
5365 var48 = varonce47;
5366 } else {
5367 var49 = ") {";
5368 var50 = 3;
5369 var51 = string__NativeString__to_s_with_length(var49, var50);
5370 var48 = var51;
5371 varonce47 = var48;
5372 }
5373 var52 = NEW_array__Array(&type_array__Arraykernel__Object);
5374 { /* var52 = array_instance Array[Object] */
5375 var53 = 3;
5376 var54 = NEW_array__NativeArray(var53, &type_array__NativeArraykernel__Object);
5377 ((struct instance_array__NativeArray*)var54)->values[0] = (val*) var43;
5378 ((struct instance_array__NativeArray*)var54)->values[1] = (val*) var_cond;
5379 ((struct instance_array__NativeArray*)var54)->values[2] = (val*) var48;
5380 ((void (*)(val*, val*, long))(var52->class->vft[COLOR_array__Array__with_native]))(var52, var54, var53) /* with_native on <var52:Array[Object]>*/;
5381 }
5382 var55 = ((val* (*)(val*))(var52->class->vft[COLOR_string__Object__to_s]))(var52) /* to_s on <var52:Array[Object]>*/;
5383 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var55) /* add on <self:SeparateErasureCompilerVisitor>*/;
5384 if (varonce56) {
5385 var57 = varonce56;
5386 } else {
5387 var58 = "Cast failed";
5388 var59 = 11;
5389 var60 = string__NativeString__to_s_with_length(var58, var59);
5390 var57 = var60;
5391 varonce56 = var57;
5392 }
5393 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var57) /* add_abort on <self:SeparateErasureCompilerVisitor>*/;
5394 if (varonce61) {
5395 var62 = varonce61;
5396 } else {
5397 var63 = "}";
5398 var64 = 1;
5399 var65 = string__NativeString__to_s_with_length(var63, var64);
5400 var62 = var65;
5401 varonce61 = var62;
5402 }
5403 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var62) /* add on <self:SeparateErasureCompilerVisitor>*/;
5404 } else {
5405 }
5406 var = var_res;
5407 goto RET_LABEL;
5408 RET_LABEL:;
5409 return var;
5410 }
5411 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: Object, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
5412 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
5413 val* var /* : nullable RuntimeVariable */;
5414 val* var1 /* : nullable RuntimeVariable */;
5415 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(self, p0, p1);
5416 var = var1;
5417 RET_LABEL:;
5418 return var;
5419 }
5420 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: SeparateErasureCompilerVisitor, MClassType): RuntimeVariable */
5421 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
5422 val* var /* : RuntimeVariable */;
5423 val* var_mtype /* var mtype: MClassType */;
5424 static val* varonce;
5425 val* var1 /* : String */;
5426 char* var2 /* : NativeString */;
5427 long var3 /* : Int */;
5428 val* var4 /* : String */;
5429 val* var5 /* : MClass */;
5430 val* var6 /* : String */;
5431 val* var7 /* : Array[Object] */;
5432 long var8 /* : Int */;
5433 val* var9 /* : NativeArray[Object] */;
5434 val* var10 /* : String */;
5435 static val* varonce11;
5436 val* var12 /* : String */;
5437 char* var13 /* : NativeString */;
5438 long var14 /* : Int */;
5439 val* var15 /* : String */;
5440 val* var16 /* : MClass */;
5441 val* var17 /* : String */;
5442 static val* varonce18;
5443 val* var19 /* : String */;
5444 char* var20 /* : NativeString */;
5445 long var21 /* : Int */;
5446 val* var22 /* : String */;
5447 val* var23 /* : Array[Object] */;
5448 long var24 /* : Int */;
5449 val* var25 /* : NativeArray[Object] */;
5450 val* var26 /* : String */;
5451 val* var27 /* : RuntimeVariable */;
5452 var_mtype = p0;
5453 if (varonce) {
5454 var1 = varonce;
5455 } else {
5456 var2 = "NEW_";
5457 var3 = 4;
5458 var4 = string__NativeString__to_s_with_length(var2, var3);
5459 var1 = var4;
5460 varonce = var1;
5461 }
5462 var5 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
5463 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var5) /* c_name on <var5:MClass>*/;
5464 var7 = NEW_array__Array(&type_array__Arraykernel__Object);
5465 { /* var7 = array_instance Array[Object] */
5466 var8 = 2;
5467 var9 = NEW_array__NativeArray(var8, &type_array__NativeArraykernel__Object);
5468 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var1;
5469 ((struct instance_array__NativeArray*)var9)->values[1] = (val*) var6;
5470 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Object]>*/;
5471 }
5472 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_string__Object__to_s]))(var7) /* to_s on <var7:Array[Object]>*/;
5473 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var10) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
5474 if (varonce11) {
5475 var12 = varonce11;
5476 } else {
5477 var13 = "NEW_";
5478 var14 = 4;
5479 var15 = string__NativeString__to_s_with_length(var13, var14);
5480 var12 = var15;
5481 varonce11 = var12;
5482 }
5483 var16 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
5484 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var16) /* c_name on <var16:MClass>*/;
5485 if (varonce18) {
5486 var19 = varonce18;
5487 } else {
5488 var20 = "()";
5489 var21 = 2;
5490 var22 = string__NativeString__to_s_with_length(var20, var21);
5491 var19 = var22;
5492 varonce18 = var19;
5493 }
5494 var23 = NEW_array__Array(&type_array__Arraykernel__Object);
5495 { /* var23 = array_instance Array[Object] */
5496 var24 = 3;
5497 var25 = NEW_array__NativeArray(var24, &type_array__NativeArraykernel__Object);
5498 ((struct instance_array__NativeArray*)var25)->values[0] = (val*) var12;
5499 ((struct instance_array__NativeArray*)var25)->values[1] = (val*) var17;
5500 ((struct instance_array__NativeArray*)var25)->values[2] = (val*) var19;
5501 ((void (*)(val*, val*, long))(var23->class->vft[COLOR_array__Array__with_native]))(var23, var25, var24) /* with_native on <var23:Array[Object]>*/;
5502 }
5503 var26 = ((val* (*)(val*))(var23->class->vft[COLOR_string__Object__to_s]))(var23) /* to_s on <var23:Array[Object]>*/;
5504 var27 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var26, var_mtype) /* new_expr on <self:SeparateErasureCompilerVisitor>*/;
5505 var = var27;
5506 goto RET_LABEL;
5507 RET_LABEL:;
5508 return var;
5509 }
5510 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
5511 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
5512 val* var /* : RuntimeVariable */;
5513 val* var1 /* : RuntimeVariable */;
5514 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(self, p0);
5515 var = var1;
5516 RET_LABEL:;
5517 return var;
5518 }
5519 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: SeparateErasureCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
5520 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
5521 val* var /* : RuntimeVariable */;
5522 val* var_value /* var value: RuntimeVariable */;
5523 val* var_mtype /* var mtype: MType */;
5524 val* var_tag /* var tag: String */;
5525 static val* varonce;
5526 val* var1 /* : String */;
5527 char* var2 /* : NativeString */;
5528 long var3 /* : Int */;
5529 val* var4 /* : String */;
5530 val* var5 /* : String */;
5531 static val* varonce6;
5532 val* var7 /* : String */;
5533 char* var8 /* : NativeString */;
5534 long var9 /* : Int */;
5535 val* var10 /* : String */;
5536 static val* varonce11;
5537 val* var12 /* : String */;
5538 char* var13 /* : NativeString */;
5539 long var14 /* : Int */;
5540 val* var15 /* : String */;
5541 val* var16 /* : Array[Object] */;
5542 long var17 /* : Int */;
5543 val* var18 /* : NativeArray[Object] */;
5544 val* var19 /* : String */;
5545 val* var20 /* : MClassType */;
5546 val* var21 /* : RuntimeVariable */;
5547 val* var_res /* var res: RuntimeVariable */;
5548 static val* varonce22;
5549 val* var23 /* : String */;
5550 char* var24 /* : NativeString */;
5551 long var25 /* : Int */;
5552 val* var26 /* : String */;
5553 val* var27 /* : String */;
5554 val* var_cltype /* var cltype: String */;
5555 static val* varonce28;
5556 val* var29 /* : String */;
5557 char* var30 /* : NativeString */;
5558 long var31 /* : Int */;
5559 val* var32 /* : String */;
5560 static val* varonce33;
5561 val* var34 /* : String */;
5562 char* var35 /* : NativeString */;
5563 long var36 /* : Int */;
5564 val* var37 /* : String */;
5565 val* var38 /* : Array[Object] */;
5566 long var39 /* : Int */;
5567 val* var40 /* : NativeArray[Object] */;
5568 val* var41 /* : String */;
5569 static val* varonce42;
5570 val* var43 /* : String */;
5571 char* var44 /* : NativeString */;
5572 long var45 /* : Int */;
5573 val* var46 /* : String */;
5574 val* var47 /* : String */;
5575 val* var_idtype /* var idtype: String */;
5576 static val* varonce48;
5577 val* var49 /* : String */;
5578 char* var50 /* : NativeString */;
5579 long var51 /* : Int */;
5580 val* var52 /* : String */;
5581 static val* varonce53;
5582 val* var54 /* : String */;
5583 char* var55 /* : NativeString */;
5584 long var56 /* : Int */;
5585 val* var57 /* : String */;
5586 val* var58 /* : Array[Object] */;
5587 long var59 /* : Int */;
5588 val* var60 /* : NativeArray[Object] */;
5589 val* var61 /* : String */;
5590 short int var62 /* : Bool */;
5591 short int var_maybe_null /* var maybe_null: Bool */;
5592 static val* varonce63;
5593 val* var64 /* : String */;
5594 char* var65 /* : NativeString */;
5595 long var66 /* : Int */;
5596 val* var67 /* : String */;
5597 val* var_accept_null /* var accept_null: String */;
5598 short int var68 /* : Bool */;
5599 int cltype;
5600 int idtype;
5601 val* var69 /* : MType */;
5602 static val* varonce70;
5603 val* var71 /* : String */;
5604 char* var72 /* : NativeString */;
5605 long var73 /* : Int */;
5606 val* var74 /* : String */;
5607 short int var75 /* : Bool */;
5608 int cltype76;
5609 int idtype77;
5610 val* var78 /* : nullable Frame */;
5611 val* var79 /* : MPropDef */;
5612 val* var80 /* : MClassDef */;
5613 val* var81 /* : MClassType */;
5614 val* var82 /* : nullable Frame */;
5615 val* var83 /* : MPropDef */;
5616 val* var84 /* : MClassDef */;
5617 val* var85 /* : MClassType */;
5618 val* var86 /* : nullable Frame */;
5619 val* var87 /* : MPropDef */;
5620 val* var88 /* : MClassDef */;
5621 val* var89 /* : MModule */;
5622 short int var90 /* : Bool */;
5623 val* var91 /* : MType */;
5624 short int var92 /* : Bool */;
5625 int cltype93;
5626 int idtype94;
5627 val* var95 /* : MType */;
5628 static val* varonce96;
5629 val* var97 /* : String */;
5630 char* var98 /* : NativeString */;
5631 long var99 /* : Int */;
5632 val* var100 /* : String */;
5633 val* var101 /* : MType */;
5634 val* var102 /* : nullable Frame */;
5635 val* var103 /* : MPropDef */;
5636 val* var104 /* : MClassDef */;
5637 val* var105 /* : MModule */;
5638 val* var106 /* : nullable Frame */;
5639 val* var107 /* : MPropDef */;
5640 val* var108 /* : MClassDef */;
5641 val* var109 /* : MClassType */;
5642 short int var110 /* : Bool */;
5643 static val* varonce111;
5644 val* var112 /* : String */;
5645 char* var113 /* : NativeString */;
5646 long var114 /* : Int */;
5647 val* var115 /* : String */;
5648 val* var116 /* : String */;
5649 static val* varonce117;
5650 val* var118 /* : String */;
5651 char* var119 /* : NativeString */;
5652 long var120 /* : Int */;
5653 val* var121 /* : String */;
5654 static val* varonce122;
5655 val* var123 /* : String */;
5656 char* var124 /* : NativeString */;
5657 long var125 /* : Int */;
5658 val* var126 /* : String */;
5659 val* var127 /* : Array[Object] */;
5660 long var128 /* : Int */;
5661 val* var129 /* : NativeArray[Object] */;
5662 val* var130 /* : String */;
5663 val* var131 /* : AbstractCompiler */;
5664 val* var132 /* : ModelBuilder */;
5665 val* var133 /* : ToolContext */;
5666 val* var134 /* : OptionBool */;
5667 val* var135 /* : nullable Object */;
5668 short int var136 /* : Bool */;
5669 val* var137 /* : AbstractCompiler */;
5670 val* var138 /* : HashMap[String, Int] */;
5671 val* var_ /* var : HashMap[String, Int] */;
5672 val* var_139 /* var : String */;
5673 val* var140 /* : nullable Object */;
5674 long var141 /* : Int */;
5675 long var142 /* : Int */;
5676 long var144 /* : Int */;
5677 long var145 /* : Int */;
5678 val* var146 /* : nullable Object */;
5679 static val* varonce147;
5680 val* var148 /* : String */;
5681 char* var149 /* : NativeString */;
5682 long var150 /* : Int */;
5683 val* var151 /* : String */;
5684 static val* varonce152;
5685 val* var153 /* : String */;
5686 char* var154 /* : NativeString */;
5687 long var155 /* : Int */;
5688 val* var156 /* : String */;
5689 val* var157 /* : Array[Object] */;
5690 long var158 /* : Int */;
5691 val* var159 /* : NativeArray[Object] */;
5692 val* var160 /* : String */;
5693 val* var161 /* : MType */;
5694 val* var162 /* : String */;
5695 static val* varonce163;
5696 val* var164 /* : String */;
5697 char* var165 /* : NativeString */;
5698 long var166 /* : Int */;
5699 val* var167 /* : String */;
5700 short int var168 /* : Bool */;
5701 val* var169 /* : Array[Object] */;
5702 long var170 /* : Int */;
5703 val* var_171 /* var : Array[Object] */;
5704 static val* varonce172;
5705 val* var173 /* : String */;
5706 char* var174 /* : NativeString */;
5707 long var175 /* : Int */;
5708 val* var176 /* : String */;
5709 static val* varonce177;
5710 val* var178 /* : String */;
5711 char* var179 /* : NativeString */;
5712 long var180 /* : Int */;
5713 val* var181 /* : String */;
5714 val* var182 /* : String */;
5715 val* var_class_ptr /* var class_ptr: nullable Object */;
5716 val* var183 /* : MType */;
5717 short int var184 /* : Bool */;
5718 int cltype185;
5719 int idtype186;
5720 const char* var_class_name;
5721 val* var187 /* : MClass */;
5722 val* var_mclass /* var mclass: MClass */;
5723 static val* varonce188;
5724 val* var189 /* : String */;
5725 char* var190 /* : NativeString */;
5726 long var191 /* : Int */;
5727 val* var192 /* : String */;
5728 val* var193 /* : String */;
5729 val* var194 /* : Array[Object] */;
5730 long var195 /* : Int */;
5731 val* var196 /* : NativeArray[Object] */;
5732 val* var197 /* : String */;
5733 val* var198 /* : Array[Object] */;
5734 long var199 /* : Int */;
5735 val* var_200 /* var : Array[Object] */;
5736 static val* varonce201;
5737 val* var202 /* : String */;
5738 char* var203 /* : NativeString */;
5739 long var204 /* : Int */;
5740 val* var205 /* : String */;
5741 val* var206 /* : String */;
5742 static val* varonce207;
5743 val* var208 /* : String */;
5744 char* var209 /* : NativeString */;
5745 long var210 /* : Int */;
5746 val* var211 /* : String */;
5747 val* var212 /* : String */;
5748 short int var213 /* : Bool */;
5749 int cltype214;
5750 int idtype215;
5751 static val* varonce216;
5752 val* var217 /* : String */;
5753 char* var218 /* : NativeString */;
5754 long var219 /* : Int */;
5755 val* var220 /* : String */;
5756 val* var221 /* : MClass */;
5757 val* var222 /* : String */;
5758 val* var223 /* : Array[Object] */;
5759 long var224 /* : Int */;
5760 val* var225 /* : NativeArray[Object] */;
5761 val* var226 /* : String */;
5762 static val* varonce227;
5763 val* var228 /* : String */;
5764 char* var229 /* : NativeString */;
5765 long var230 /* : Int */;
5766 val* var231 /* : String */;
5767 val* var232 /* : MClass */;
5768 val* var233 /* : String */;
5769 static val* varonce234;
5770 val* var235 /* : String */;
5771 char* var236 /* : NativeString */;
5772 long var237 /* : Int */;
5773 val* var238 /* : String */;
5774 val* var239 /* : Array[Object] */;
5775 long var240 /* : Int */;
5776 val* var241 /* : NativeArray[Object] */;
5777 val* var242 /* : String */;
5778 static val* varonce243;
5779 val* var244 /* : String */;
5780 char* var245 /* : NativeString */;
5781 long var246 /* : Int */;
5782 val* var247 /* : String */;
5783 val* var248 /* : MClass */;
5784 val* var249 /* : String */;
5785 static val* varonce250;
5786 val* var251 /* : String */;
5787 char* var252 /* : NativeString */;
5788 long var253 /* : Int */;
5789 val* var254 /* : String */;
5790 val* var255 /* : Array[Object] */;
5791 long var256 /* : Int */;
5792 val* var257 /* : NativeArray[Object] */;
5793 val* var258 /* : String */;
5794 val* var259 /* : AbstractCompiler */;
5795 val* var260 /* : ModelBuilder */;
5796 val* var261 /* : ToolContext */;
5797 val* var262 /* : OptionBool */;
5798 val* var263 /* : nullable Object */;
5799 short int var264 /* : Bool */;
5800 val* var265 /* : AbstractCompiler */;
5801 val* var266 /* : HashMap[String, Int] */;
5802 val* var_267 /* var : HashMap[String, Int] */;
5803 val* var_268 /* var : String */;
5804 val* var269 /* : nullable Object */;
5805 long var270 /* : Int */;
5806 long var271 /* : Int */;
5807 long var273 /* : Int */;
5808 long var274 /* : Int */;
5809 val* var275 /* : nullable Object */;
5810 static val* varonce276;
5811 val* var277 /* : String */;
5812 char* var278 /* : NativeString */;
5813 long var279 /* : Int */;
5814 val* var280 /* : String */;
5815 static val* varonce281;
5816 val* var282 /* : String */;
5817 char* var283 /* : NativeString */;
5818 long var284 /* : Int */;
5819 val* var285 /* : String */;
5820 val* var286 /* : Array[Object] */;
5821 long var287 /* : Int */;
5822 val* var288 /* : NativeArray[Object] */;
5823 val* var289 /* : String */;
5824 short int var290 /* : Bool */;
5825 int cltype291;
5826 int idtype292;
5827 val* var293 /* : nullable Frame */;
5828 val* var294 /* : Array[RuntimeVariable] */;
5829 val* var295 /* : nullable Object */;
5830 val* var_recv /* var recv: RuntimeVariable */;
5831 val* var296 /* : MType */;
5832 val* var297 /* : String */;
5833 static val* varonce298;
5834 val* var299 /* : String */;
5835 char* var300 /* : NativeString */;
5836 long var301 /* : Int */;
5837 val* var302 /* : String */;
5838 short int var303 /* : Bool */;
5839 static val* varonce304;
5840 val* var305 /* : String */;
5841 char* var306 /* : NativeString */;
5842 long var307 /* : Int */;
5843 val* var308 /* : String */;
5844 val* var309 /* : Array[Object] */;
5845 long var310 /* : Int */;
5846 val* var311 /* : NativeArray[Object] */;
5847 val* var312 /* : String */;
5848 val* var_recv_ptr /* var recv_ptr: nullable Object */;
5849 val* var313 /* : MType */;
5850 short int var314 /* : Bool */;
5851 int cltype315;
5852 int idtype316;
5853 const char* var_class_name317;
5854 val* var318 /* : MClass */;
5855 val* var_mclass319 /* var mclass: MClass */;
5856 static val* varonce320;
5857 val* var321 /* : String */;
5858 char* var322 /* : NativeString */;
5859 long var323 /* : Int */;
5860 val* var324 /* : String */;
5861 val* var325 /* : String */;
5862 val* var326 /* : Array[Object] */;
5863 long var327 /* : Int */;
5864 val* var328 /* : NativeArray[Object] */;
5865 val* var329 /* : String */;
5866 static val* varonce330;
5867 val* var331 /* : String */;
5868 char* var332 /* : NativeString */;
5869 long var333 /* : Int */;
5870 val* var334 /* : String */;
5871 val* var335 /* : String */;
5872 static val* varonce336;
5873 val* var337 /* : String */;
5874 char* var338 /* : NativeString */;
5875 long var339 /* : Int */;
5876 val* var340 /* : String */;
5877 val* var341 /* : Array[Object] */;
5878 long var342 /* : Int */;
5879 val* var343 /* : NativeArray[Object] */;
5880 val* var344 /* : String */;
5881 static val* varonce345;
5882 val* var346 /* : String */;
5883 char* var347 /* : NativeString */;
5884 long var348 /* : Int */;
5885 val* var349 /* : String */;
5886 val* var350 /* : String */;
5887 val* var_entry /* var entry: String */;
5888 static val* varonce351;
5889 val* var352 /* : String */;
5890 char* var353 /* : NativeString */;
5891 long var354 /* : Int */;
5892 val* var355 /* : String */;
5893 static val* varonce356;
5894 val* var357 /* : String */;
5895 char* var358 /* : NativeString */;
5896 long var359 /* : Int */;
5897 val* var360 /* : String */;
5898 val* var361 /* : Array[Object] */;
5899 long var362 /* : Int */;
5900 val* var363 /* : NativeArray[Object] */;
5901 val* var364 /* : String */;
5902 val* var365 /* : MProperty */;
5903 val* var366 /* : String */;
5904 val* var367 /* : AbstractCompiler */;
5905 short int var368 /* : Bool */;
5906 int cltype369;
5907 int idtype370;
5908 const char* var_class_name371;
5909 val* var372 /* : nullable Layout[MVirtualTypeProp] */;
5910 short int var373 /* : Bool */;
5911 int cltype374;
5912 int idtype375;
5913 static val* varonce376;
5914 val* var377 /* : String */;
5915 char* var378 /* : NativeString */;
5916 long var379 /* : Int */;
5917 val* var380 /* : String */;
5918 static val* varonce381;
5919 val* var382 /* : String */;
5920 char* var383 /* : NativeString */;
5921 long var384 /* : Int */;
5922 val* var385 /* : String */;
5923 static val* varonce386;
5924 val* var387 /* : String */;
5925 char* var388 /* : NativeString */;
5926 long var389 /* : Int */;
5927 val* var390 /* : String */;
5928 val* var391 /* : MProperty */;
5929 val* var392 /* : String */;
5930 static val* varonce393;
5931 val* var394 /* : String */;
5932 char* var395 /* : NativeString */;
5933 long var396 /* : Int */;
5934 val* var397 /* : String */;
5935 val* var398 /* : Array[Object] */;
5936 long var399 /* : Int */;
5937 val* var400 /* : NativeArray[Object] */;
5938 val* var401 /* : String */;
5939 static val* varonce402;
5940 val* var403 /* : String */;
5941 char* var404 /* : NativeString */;
5942 long var405 /* : Int */;
5943 val* var406 /* : String */;
5944 static val* varonce407;
5945 val* var408 /* : String */;
5946 char* var409 /* : NativeString */;
5947 long var410 /* : Int */;
5948 val* var411 /* : String */;
5949 val* var412 /* : MProperty */;
5950 val* var413 /* : String */;
5951 static val* varonce414;
5952 val* var415 /* : String */;
5953 char* var416 /* : NativeString */;
5954 long var417 /* : Int */;
5955 val* var418 /* : String */;
5956 val* var419 /* : Array[Object] */;
5957 long var420 /* : Int */;
5958 val* var421 /* : NativeArray[Object] */;
5959 val* var422 /* : String */;
5960 static val* varonce423;
5961 val* var424 /* : String */;
5962 char* var425 /* : NativeString */;
5963 long var426 /* : Int */;
5964 val* var427 /* : String */;
5965 static val* varonce428;
5966 val* var429 /* : String */;
5967 char* var430 /* : NativeString */;
5968 long var431 /* : Int */;
5969 val* var432 /* : String */;
5970 val* var433 /* : Array[Object] */;
5971 long var434 /* : Int */;
5972 val* var435 /* : NativeArray[Object] */;
5973 val* var436 /* : String */;
5974 static val* varonce437;
5975 val* var438 /* : String */;
5976 char* var439 /* : NativeString */;
5977 long var440 /* : Int */;
5978 val* var441 /* : String */;
5979 static val* varonce442;
5980 val* var443 /* : String */;
5981 char* var444 /* : NativeString */;
5982 long var445 /* : Int */;
5983 val* var446 /* : String */;
5984 val* var447 /* : Array[Object] */;
5985 long var448 /* : Int */;
5986 val* var449 /* : NativeArray[Object] */;
5987 val* var450 /* : String */;
5988 short int var451 /* : Bool */;
5989 short int var_452 /* var : Bool */;
5990 static val* varonce453;
5991 val* var454 /* : String */;
5992 char* var455 /* : NativeString */;
5993 long var456 /* : Int */;
5994 val* var457 /* : String */;
5995 short int var458 /* : Bool */;
5996 static val* varonce459;
5997 val* var460 /* : String */;
5998 char* var461 /* : NativeString */;
5999 long var462 /* : Int */;
6000 val* var463 /* : String */;
6001 val* var464 /* : String */;
6002 val* var_is_nullable /* var is_nullable: String */;
6003 static val* varonce465;
6004 val* var466 /* : String */;
6005 char* var467 /* : NativeString */;
6006 long var468 /* : Int */;
6007 val* var469 /* : String */;
6008 static val* varonce470;
6009 val* var471 /* : String */;
6010 char* var472 /* : NativeString */;
6011 long var473 /* : Int */;
6012 val* var474 /* : String */;
6013 val* var475 /* : Array[Object] */;
6014 long var476 /* : Int */;
6015 val* var477 /* : NativeArray[Object] */;
6016 val* var478 /* : String */;
6017 static val* varonce479;
6018 val* var480 /* : String */;
6019 char* var481 /* : NativeString */;
6020 long var482 /* : Int */;
6021 val* var483 /* : String */;
6022 static val* varonce484;
6023 val* var485 /* : String */;
6024 char* var486 /* : NativeString */;
6025 long var487 /* : Int */;
6026 val* var488 /* : String */;
6027 val* var489 /* : Array[Object] */;
6028 long var490 /* : Int */;
6029 val* var491 /* : NativeArray[Object] */;
6030 val* var492 /* : String */;
6031 val* var493 /* : String */;
6032 val* var494 /* : AbstractCompiler */;
6033 val* var495 /* : ModelBuilder */;
6034 val* var496 /* : ToolContext */;
6035 val* var497 /* : OptionBool */;
6036 val* var498 /* : nullable Object */;
6037 short int var499 /* : Bool */;
6038 val* var500 /* : AbstractCompiler */;
6039 val* var501 /* : HashMap[String, Int] */;
6040 val* var_502 /* var : HashMap[String, Int] */;
6041 val* var_503 /* var : String */;
6042 val* var504 /* : nullable Object */;
6043 long var505 /* : Int */;
6044 long var506 /* : Int */;
6045 long var508 /* : Int */;
6046 long var509 /* : Int */;
6047 val* var510 /* : nullable Object */;
6048 static val* varonce511;
6049 val* var512 /* : String */;
6050 char* var513 /* : NativeString */;
6051 long var514 /* : Int */;
6052 val* var515 /* : String */;
6053 static val* varonce516;
6054 val* var517 /* : String */;
6055 char* var518 /* : NativeString */;
6056 long var519 /* : Int */;
6057 val* var520 /* : String */;
6058 val* var521 /* : Array[Object] */;
6059 long var522 /* : Int */;
6060 val* var523 /* : NativeArray[Object] */;
6061 val* var524 /* : String */;
6062 static val* varonce525;
6063 val* var526 /* : String */;
6064 char* var527 /* : NativeString */;
6065 long var528 /* : Int */;
6066 val* var529 /* : String */;
6067 val* var530 /* : String */;
6068 static val* varonce531;
6069 val* var532 /* : String */;
6070 char* var533 /* : NativeString */;
6071 long var534 /* : Int */;
6072 val* var535 /* : String */;
6073 static val* varonce536;
6074 val* var537 /* : String */;
6075 char* var538 /* : NativeString */;
6076 long var539 /* : Int */;
6077 val* var540 /* : String */;
6078 val* var541 /* : Array[Object] */;
6079 long var542 /* : Int */;
6080 val* var543 /* : NativeArray[Object] */;
6081 val* var544 /* : String */;
6082 static val* varonce545;
6083 val* var546 /* : String */;
6084 char* var547 /* : NativeString */;
6085 long var548 /* : Int */;
6086 val* var549 /* : String */;
6087 static val* varonce550;
6088 val* var551 /* : String */;
6089 char* var552 /* : NativeString */;
6090 long var553 /* : Int */;
6091 val* var554 /* : String */;
6092 val* var555 /* : Array[Object] */;
6093 long var556 /* : Int */;
6094 val* var557 /* : NativeArray[Object] */;
6095 val* var558 /* : String */;
6096 static val* varonce559;
6097 val* var560 /* : String */;
6098 char* var561 /* : NativeString */;
6099 long var562 /* : Int */;
6100 val* var563 /* : String */;
6101 static val* varonce564;
6102 val* var565 /* : String */;
6103 char* var566 /* : NativeString */;
6104 long var567 /* : Int */;
6105 val* var568 /* : String */;
6106 val* var569 /* : Array[Object] */;
6107 long var570 /* : Int */;
6108 val* var571 /* : NativeArray[Object] */;
6109 val* var572 /* : String */;
6110 static val* varonce573;
6111 val* var574 /* : String */;
6112 char* var575 /* : NativeString */;
6113 long var576 /* : Int */;
6114 val* var577 /* : String */;
6115 val* var578 /* : AbstractCompiler */;
6116 short int var579 /* : Bool */;
6117 int cltype580;
6118 int idtype581;
6119 const char* var_class_name582;
6120 val* var583 /* : nullable Layout[MClass] */;
6121 short int var584 /* : Bool */;
6122 int cltype585;
6123 int idtype586;
6124 static val* varonce587;
6125 val* var588 /* : String */;
6126 char* var589 /* : NativeString */;
6127 long var590 /* : Int */;
6128 val* var591 /* : String */;
6129 static val* varonce592;
6130 val* var593 /* : String */;
6131 char* var594 /* : NativeString */;
6132 long var595 /* : Int */;
6133 val* var596 /* : String */;
6134 static val* varonce597;
6135 val* var598 /* : String */;
6136 char* var599 /* : NativeString */;
6137 long var600 /* : Int */;
6138 val* var601 /* : String */;
6139 val* var602 /* : Array[Object] */;
6140 long var603 /* : Int */;
6141 val* var604 /* : NativeArray[Object] */;
6142 val* var605 /* : String */;
6143 static val* varonce606;
6144 val* var607 /* : String */;
6145 char* var608 /* : NativeString */;
6146 long var609 /* : Int */;
6147 val* var610 /* : String */;
6148 static val* varonce611;
6149 val* var612 /* : String */;
6150 char* var613 /* : NativeString */;
6151 long var614 /* : Int */;
6152 val* var615 /* : String */;
6153 static val* varonce616;
6154 val* var617 /* : String */;
6155 char* var618 /* : NativeString */;
6156 long var619 /* : Int */;
6157 val* var620 /* : String */;
6158 val* var621 /* : Array[Object] */;
6159 long var622 /* : Int */;
6160 val* var623 /* : NativeArray[Object] */;
6161 val* var624 /* : String */;
6162 static val* varonce625;
6163 val* var626 /* : String */;
6164 char* var627 /* : NativeString */;
6165 long var628 /* : Int */;
6166 val* var629 /* : String */;
6167 val* var630 /* : Array[Object] */;
6168 long var631 /* : Int */;
6169 val* var632 /* : NativeArray[Object] */;
6170 val* var633 /* : String */;
6171 static val* varonce634;
6172 val* var635 /* : String */;
6173 char* var636 /* : NativeString */;
6174 long var637 /* : Int */;
6175 val* var638 /* : String */;
6176 static val* varonce639;
6177 val* var640 /* : String */;
6178 char* var641 /* : NativeString */;
6179 long var642 /* : Int */;
6180 val* var643 /* : String */;
6181 static val* varonce644;
6182 val* var645 /* : String */;
6183 char* var646 /* : NativeString */;
6184 long var647 /* : Int */;
6185 val* var648 /* : String */;
6186 static val* varonce649;
6187 val* var650 /* : String */;
6188 char* var651 /* : NativeString */;
6189 long var652 /* : Int */;
6190 val* var653 /* : String */;
6191 static val* varonce654;
6192 val* var655 /* : String */;
6193 char* var656 /* : NativeString */;
6194 long var657 /* : Int */;
6195 val* var658 /* : String */;
6196 val* var659 /* : Array[Object] */;
6197 long var660 /* : Int */;
6198 val* var661 /* : NativeArray[Object] */;
6199 val* var662 /* : String */;
6200 static val* varonce663;
6201 val* var664 /* : String */;
6202 char* var665 /* : NativeString */;
6203 long var666 /* : Int */;
6204 val* var667 /* : String */;
6205 static val* varonce668;
6206 val* var669 /* : String */;
6207 char* var670 /* : NativeString */;
6208 long var671 /* : Int */;
6209 val* var672 /* : String */;
6210 var_value = p0;
6211 var_mtype = p1;
6212 var_tag = p2;
6213 if (varonce) {
6214 var1 = varonce;
6215 } else {
6216 var2 = "/* type test for ";
6217 var3 = 17;
6218 var4 = string__NativeString__to_s_with_length(var2, var3);
6219 var1 = var4;
6220 varonce = var1;
6221 }
6222 var5 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
6223 if (varonce6) {
6224 var7 = varonce6;
6225 } else {
6226 var8 = " isa ";
6227 var9 = 5;
6228 var10 = string__NativeString__to_s_with_length(var8, var9);
6229 var7 = var10;
6230 varonce6 = var7;
6231 }
6232 if (varonce11) {
6233 var12 = varonce11;
6234 } else {
6235 var13 = " */";
6236 var14 = 3;
6237 var15 = string__NativeString__to_s_with_length(var13, var14);
6238 var12 = var15;
6239 varonce11 = var12;
6240 }
6241 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
6242 { /* var16 = array_instance Array[Object] */
6243 var17 = 5;
6244 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
6245 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var1;
6246 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var5;
6247 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var7;
6248 ((struct instance_array__NativeArray*)var18)->values[3] = (val*) var_mtype;
6249 ((struct instance_array__NativeArray*)var18)->values[4] = (val*) var12;
6250 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
6251 }
6252 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
6253 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var19) /* add on <self:SeparateErasureCompilerVisitor>*/;
6254 var20 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:SeparateErasureCompilerVisitor>*/;
6255 var21 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var20) /* new_var on <self:SeparateErasureCompilerVisitor>*/;
6256 var_res = var21;
6257 if (varonce22) {
6258 var23 = varonce22;
6259 } else {
6260 var24 = "cltype";
6261 var25 = 6;
6262 var26 = string__NativeString__to_s_with_length(var24, var25);
6263 var23 = var26;
6264 varonce22 = var23;
6265 }
6266 var27 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var23) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
6267 var_cltype = var27;
6268 if (varonce28) {
6269 var29 = varonce28;
6270 } else {
6271 var30 = "int ";
6272 var31 = 4;
6273 var32 = string__NativeString__to_s_with_length(var30, var31);
6274 var29 = var32;
6275 varonce28 = var29;
6276 }
6277 if (varonce33) {
6278 var34 = varonce33;
6279 } else {
6280 var35 = ";";
6281 var36 = 1;
6282 var37 = string__NativeString__to_s_with_length(var35, var36);
6283 var34 = var37;
6284 varonce33 = var34;
6285 }
6286 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
6287 { /* var38 = array_instance Array[Object] */
6288 var39 = 3;
6289 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
6290 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var29;
6291 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_cltype;
6292 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var34;
6293 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
6294 }
6295 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
6296 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var41) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
6297 if (varonce42) {
6298 var43 = varonce42;
6299 } else {
6300 var44 = "idtype";
6301 var45 = 6;
6302 var46 = string__NativeString__to_s_with_length(var44, var45);
6303 var43 = var46;
6304 varonce42 = var43;
6305 }
6306 var47 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var43) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
6307 var_idtype = var47;
6308 if (varonce48) {
6309 var49 = varonce48;
6310 } else {
6311 var50 = "int ";
6312 var51 = 4;
6313 var52 = string__NativeString__to_s_with_length(var50, var51);
6314 var49 = var52;
6315 varonce48 = var49;
6316 }
6317 if (varonce53) {
6318 var54 = varonce53;
6319 } else {
6320 var55 = ";";
6321 var56 = 1;
6322 var57 = string__NativeString__to_s_with_length(var55, var56);
6323 var54 = var57;
6324 varonce53 = var54;
6325 }
6326 var58 = NEW_array__Array(&type_array__Arraykernel__Object);
6327 { /* var58 = array_instance Array[Object] */
6328 var59 = 3;
6329 var60 = NEW_array__NativeArray(var59, &type_array__NativeArraykernel__Object);
6330 ((struct instance_array__NativeArray*)var60)->values[0] = (val*) var49;
6331 ((struct instance_array__NativeArray*)var60)->values[1] = (val*) var_idtype;
6332 ((struct instance_array__NativeArray*)var60)->values[2] = (val*) var54;
6333 ((void (*)(val*, val*, long))(var58->class->vft[COLOR_array__Array__with_native]))(var58, var60, var59) /* with_native on <var58:Array[Object]>*/;
6334 }
6335 var61 = ((val* (*)(val*))(var58->class->vft[COLOR_string__Object__to_s]))(var58) /* to_s on <var58:Array[Object]>*/;
6336 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var61) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
6337 var62 = ((short int (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompilerVisitor__maybe_null]))(self, var_value) /* maybe_null on <self:SeparateErasureCompilerVisitor>*/;
6338 var_maybe_null = var62;
6339 if (varonce63) {
6340 var64 = varonce63;
6341 } else {
6342 var65 = "0";
6343 var66 = 1;
6344 var67 = string__NativeString__to_s_with_length(var65, var66);
6345 var64 = var67;
6346 varonce63 = var64;
6347 }
6348 var_accept_null = var64;
6349 /* <var_mtype:MType> isa MNullableType */
6350 cltype = type_model__MNullableType.color;
6351 idtype = type_model__MNullableType.id;
6352 if(cltype >= var_mtype->type->table_size) {
6353 var68 = 0;
6354 } else {
6355 var68 = var_mtype->type->type_table[cltype] == idtype;
6356 }
6357 if (var68){
6358 var69 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
6359 var_mtype = var69;
6360 if (varonce70) {
6361 var71 = varonce70;
6362 } else {
6363 var72 = "1";
6364 var73 = 1;
6365 var74 = string__NativeString__to_s_with_length(var72, var73);
6366 var71 = var74;
6367 varonce70 = var71;
6368 }
6369 var_accept_null = var71;
6370 } else {
6371 }
6372 /* <var_mtype:MType> isa MParameterType */
6373 cltype76 = type_model__MParameterType.color;
6374 idtype77 = type_model__MParameterType.id;
6375 if(cltype76 >= var_mtype->type->table_size) {
6376 var75 = 0;
6377 } else {
6378 var75 = var_mtype->type->type_table[cltype76] == idtype77;
6379 }
6380 if (var75){
6381 var78 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6382 if (var78 == NULL) {
6383 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6384 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 485);
6385 show_backtrace(1);
6386 } else {
6387 var79 = ((val* (*)(val*))(var78->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var78) /* mpropdef on <var78:nullable Frame>*/;
6388 }
6389 var80 = ((val* (*)(val*))(var79->class->vft[COLOR_model__MPropDef__mclassdef]))(var79) /* mclassdef on <var79:MPropDef>*/;
6390 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_model__MClassDef__bound_mtype]))(var80) /* bound_mtype on <var80:MClassDef>*/;
6391 var82 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6392 if (var82 == NULL) {
6393 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6394 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 485);
6395 show_backtrace(1);
6396 } else {
6397 var83 = ((val* (*)(val*))(var82->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var82) /* mpropdef on <var82:nullable Frame>*/;
6398 }
6399 var84 = ((val* (*)(val*))(var83->class->vft[COLOR_model__MPropDef__mclassdef]))(var83) /* mclassdef on <var83:MPropDef>*/;
6400 var85 = ((val* (*)(val*))(var84->class->vft[COLOR_model__MClassDef__bound_mtype]))(var84) /* bound_mtype on <var84:MClassDef>*/;
6401 var86 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6402 if (var86 == NULL) {
6403 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6404 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 485);
6405 show_backtrace(1);
6406 } else {
6407 var87 = ((val* (*)(val*))(var86->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var86) /* mpropdef on <var86:nullable Frame>*/;
6408 }
6409 var88 = ((val* (*)(val*))(var87->class->vft[COLOR_model__MPropDef__mclassdef]))(var87) /* mclassdef on <var87:MPropDef>*/;
6410 var89 = ((val* (*)(val*))(var88->class->vft[COLOR_model__MClassDef__mmodule]))(var88) /* mmodule on <var88:MClassDef>*/;
6411 var90 = 0;
6412 var91 = ((val* (*)(val*, val*, val*, val*, short int))(var_mtype->class->vft[COLOR_model__MType__resolve_for]))(var_mtype, var81, var85, var89, var90) /* resolve_for on <var_mtype:MType(MParameterType)>*/;
6413 var_mtype = var91;
6414 /* <var_mtype:MType> isa MNullableType */
6415 cltype93 = type_model__MNullableType.color;
6416 idtype94 = type_model__MNullableType.id;
6417 if(cltype93 >= var_mtype->type->table_size) {
6418 var92 = 0;
6419 } else {
6420 var92 = var_mtype->type->type_table[cltype93] == idtype94;
6421 }
6422 if (var92){
6423 var95 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
6424 var_mtype = var95;
6425 if (varonce96) {
6426 var97 = varonce96;
6427 } else {
6428 var98 = "1";
6429 var99 = 1;
6430 var100 = string__NativeString__to_s_with_length(var98, var99);
6431 var97 = var100;
6432 varonce96 = var97;
6433 }
6434 var_accept_null = var97;
6435 } else {
6436 }
6437 } else {
6438 }
6439 var101 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
6440 var102 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6441 if (var102 == NULL) {
6442 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6443 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 492);
6444 show_backtrace(1);
6445 } else {
6446 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var102) /* mpropdef on <var102:nullable Frame>*/;
6447 }
6448 var104 = ((val* (*)(val*))(var103->class->vft[COLOR_model__MPropDef__mclassdef]))(var103) /* mclassdef on <var103:MPropDef>*/;
6449 var105 = ((val* (*)(val*))(var104->class->vft[COLOR_model__MClassDef__mmodule]))(var104) /* mmodule on <var104:MClassDef>*/;
6450 var106 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6451 if (var106 == NULL) {
6452 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6453 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 492);
6454 show_backtrace(1);
6455 } else {
6456 var107 = ((val* (*)(val*))(var106->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var106) /* mpropdef on <var106:nullable Frame>*/;
6457 }
6458 var108 = ((val* (*)(val*))(var107->class->vft[COLOR_model__MPropDef__mclassdef]))(var107) /* mclassdef on <var107:MPropDef>*/;
6459 var109 = ((val* (*)(val*))(var108->class->vft[COLOR_model__MClassDef__bound_mtype]))(var108) /* bound_mtype on <var108:MClassDef>*/;
6460 var110 = ((short int (*)(val*, val*, val*, val*))(var101->class->vft[COLOR_model__MType__is_subtype]))(var101, var105, var109, var_mtype) /* is_subtype on <var101:MType>*/;
6461 if (var110){
6462 if (varonce111) {
6463 var112 = varonce111;
6464 } else {
6465 var113 = " = 1; /* easy ";
6466 var114 = 14;
6467 var115 = string__NativeString__to_s_with_length(var113, var114);
6468 var112 = var115;
6469 varonce111 = var112;
6470 }
6471 var116 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
6472 if (varonce117) {
6473 var118 = varonce117;
6474 } else {
6475 var119 = " isa ";
6476 var120 = 5;
6477 var121 = string__NativeString__to_s_with_length(var119, var120);
6478 var118 = var121;
6479 varonce117 = var118;
6480 }
6481 if (varonce122) {
6482 var123 = varonce122;
6483 } else {
6484 var124 = "*/";
6485 var125 = 2;
6486 var126 = string__NativeString__to_s_with_length(var124, var125);
6487 var123 = var126;
6488 varonce122 = var123;
6489 }
6490 var127 = NEW_array__Array(&type_array__Arraykernel__Object);
6491 { /* var127 = array_instance Array[Object] */
6492 var128 = 6;
6493 var129 = NEW_array__NativeArray(var128, &type_array__NativeArraykernel__Object);
6494 ((struct instance_array__NativeArray*)var129)->values[0] = (val*) var_res;
6495 ((struct instance_array__NativeArray*)var129)->values[1] = (val*) var112;
6496 ((struct instance_array__NativeArray*)var129)->values[2] = (val*) var116;
6497 ((struct instance_array__NativeArray*)var129)->values[3] = (val*) var118;
6498 ((struct instance_array__NativeArray*)var129)->values[4] = (val*) var_mtype;
6499 ((struct instance_array__NativeArray*)var129)->values[5] = (val*) var123;
6500 ((void (*)(val*, val*, long))(var127->class->vft[COLOR_array__Array__with_native]))(var127, var129, var128) /* with_native on <var127:Array[Object]>*/;
6501 }
6502 var130 = ((val* (*)(val*))(var127->class->vft[COLOR_string__Object__to_s]))(var127) /* to_s on <var127:Array[Object]>*/;
6503 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var130) /* add on <self:SeparateErasureCompilerVisitor>*/;
6504 var131 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6505 var132 = ((val* (*)(val*))(var131->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var131) /* modelbuilder on <var131:AbstractCompiler(SeparateCompiler)>*/;
6506 var133 = ((val* (*)(val*))(var132->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var132) /* toolcontext on <var132:ModelBuilder>*/;
6507 var134 = ((val* (*)(val*))(var133->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var133) /* opt_typing_test_metrics on <var133:ToolContext>*/;
6508 var135 = ((val* (*)(val*))(var134->class->vft[COLOR_opts__Option__value]))(var134) /* value on <var134:OptionBool>*/;
6509 var136 = ((struct instance_kernel__Bool*)var135)->value; /* autounbox from nullable Object to Bool */;
6510 if (var136){
6511 var137 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6512 var138 = ((val* (*)(val*))(var137->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_skipped]))(var137) /* count_type_test_skipped on <var137:AbstractCompiler(SeparateCompiler)>*/;
6513 var_ = var138;
6514 var_139 = var_tag;
6515 var140 = ((val* (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_, var_139) /* [] on <var_:HashMap[String, Int]>*/;
6516 var141 = 1;
6517 { /* Inline kernel#Int#+ (var140,var141) */
6518 var144 = ((struct instance_kernel__Int*)var140)->value; /* autounbox from nullable Object to Int */;
6519 var145 = var144 + var141;
6520 var142 = var145;
6521 goto RET_LABEL143;
6522 RET_LABEL143:(void)0;
6523 }
6524 var146 = BOX_kernel__Int(var142); /* autobox from Int to nullable Object */
6525 ((void (*)(val*, val*, val*))(var_->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_, var_139, var146) /* []= on <var_:HashMap[String, Int]>*/;
6526 if (varonce147) {
6527 var148 = varonce147;
6528 } else {
6529 var149 = "count_type_test_skipped_";
6530 var150 = 24;
6531 var151 = string__NativeString__to_s_with_length(var149, var150);
6532 var148 = var151;
6533 varonce147 = var148;
6534 }
6535 if (varonce152) {
6536 var153 = varonce152;
6537 } else {
6538 var154 = "++;";
6539 var155 = 3;
6540 var156 = string__NativeString__to_s_with_length(var154, var155);
6541 var153 = var156;
6542 varonce152 = var153;
6543 }
6544 var157 = NEW_array__Array(&type_array__Arraykernel__Object);
6545 { /* var157 = array_instance Array[Object] */
6546 var158 = 3;
6547 var159 = NEW_array__NativeArray(var158, &type_array__NativeArraykernel__Object);
6548 ((struct instance_array__NativeArray*)var159)->values[0] = (val*) var148;
6549 ((struct instance_array__NativeArray*)var159)->values[1] = (val*) var_tag;
6550 ((struct instance_array__NativeArray*)var159)->values[2] = (val*) var153;
6551 ((void (*)(val*, val*, long))(var157->class->vft[COLOR_array__Array__with_native]))(var157, var159, var158) /* with_native on <var157:Array[Object]>*/;
6552 }
6553 var160 = ((val* (*)(val*))(var157->class->vft[COLOR_string__Object__to_s]))(var157) /* to_s on <var157:Array[Object]>*/;
6554 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var160) /* add on <self:SeparateErasureCompilerVisitor>*/;
6555 } else {
6556 }
6557 var = var_res;
6558 goto RET_LABEL;
6559 } else {
6560 }
6561 var161 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
6562 var162 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_compiler__MType__ctype]))(var161) /* ctype on <var161:MType>*/;
6563 if (varonce163) {
6564 var164 = varonce163;
6565 } else {
6566 var165 = "val*";
6567 var166 = 4;
6568 var167 = string__NativeString__to_s_with_length(var165, var166);
6569 var164 = var167;
6570 varonce163 = var164;
6571 }
6572 var168 = ((short int (*)(val*, val*))(var162->class->vft[COLOR_kernel__Object___61d_61d]))(var162, var164) /* == on <var162:String>*/;
6573 if (var168){
6574 var169 = NEW_array__Array(&type_array__Arraykernel__Object);
6575 var170 = 3;
6576 ((void (*)(val*, long))(var169->class->vft[COLOR_array__Array__with_capacity]))(var169, var170) /* with_capacity on <var169:Array[Object]>*/;
6577 var_171 = var169;
6578 if (varonce172) {
6579 var173 = varonce172;
6580 } else {
6581 var174 = "";
6582 var175 = 0;
6583 var176 = string__NativeString__to_s_with_length(var174, var175);
6584 var173 = var176;
6585 varonce172 = var173;
6586 }
6587 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var173) /* add on <var_171:Array[Object]>*/;
6588 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var_value) /* add on <var_171:Array[Object]>*/;
6589 if (varonce177) {
6590 var178 = varonce177;
6591 } else {
6592 var179 = "->class->";
6593 var180 = 9;
6594 var181 = string__NativeString__to_s_with_length(var179, var180);
6595 var178 = var181;
6596 varonce177 = var178;
6597 }
6598 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var178) /* add on <var_171:Array[Object]>*/;
6599 var182 = ((val* (*)(val*))(var_171->class->vft[COLOR_string__Object__to_s]))(var_171) /* to_s on <var_171:Array[Object]>*/;
6600 var_class_ptr = var182;
6601 } else {
6602 var183 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
6603 /* <var183:MType> isa MClassType */
6604 cltype185 = type_model__MClassType.color;
6605 idtype186 = type_model__MClassType.id;
6606 if(cltype185 >= var183->type->table_size) {
6607 var184 = 0;
6608 } else {
6609 var184 = var183->type->type_table[cltype185] == idtype186;
6610 }
6611 if (!var184) {
6612 var_class_name = var183 == NULL ? "null" : var183->type->name;
6613 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
6614 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 506);
6615 show_backtrace(1);
6616 }
6617 var187 = ((val* (*)(val*))(var183->class->vft[COLOR_model__MClassType__mclass]))(var183) /* mclass on <var183:MType(MClassType)>*/;
6618 var_mclass = var187;
6619 if (varonce188) {
6620 var189 = varonce188;
6621 } else {
6622 var190 = "class_";
6623 var191 = 6;
6624 var192 = string__NativeString__to_s_with_length(var190, var191);
6625 var189 = var192;
6626 varonce188 = var189;
6627 }
6628 var193 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
6629 var194 = NEW_array__Array(&type_array__Arraykernel__Object);
6630 { /* var194 = array_instance Array[Object] */
6631 var195 = 2;
6632 var196 = NEW_array__NativeArray(var195, &type_array__NativeArraykernel__Object);
6633 ((struct instance_array__NativeArray*)var196)->values[0] = (val*) var189;
6634 ((struct instance_array__NativeArray*)var196)->values[1] = (val*) var193;
6635 ((void (*)(val*, val*, long))(var194->class->vft[COLOR_array__Array__with_native]))(var194, var196, var195) /* with_native on <var194:Array[Object]>*/;
6636 }
6637 var197 = ((val* (*)(val*))(var194->class->vft[COLOR_string__Object__to_s]))(var194) /* to_s on <var194:Array[Object]>*/;
6638 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var197) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6639 var198 = NEW_array__Array(&type_array__Arraykernel__Object);
6640 var199 = 3;
6641 ((void (*)(val*, long))(var198->class->vft[COLOR_array__Array__with_capacity]))(var198, var199) /* with_capacity on <var198:Array[Object]>*/;
6642 var_200 = var198;
6643 if (varonce201) {
6644 var202 = varonce201;
6645 } else {
6646 var203 = "class_";
6647 var204 = 6;
6648 var205 = string__NativeString__to_s_with_length(var203, var204);
6649 var202 = var205;
6650 varonce201 = var202;
6651 }
6652 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var202) /* add on <var_200:Array[Object]>*/;
6653 var206 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
6654 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var206) /* add on <var_200:Array[Object]>*/;
6655 if (varonce207) {
6656 var208 = varonce207;
6657 } else {
6658 var209 = ".";
6659 var210 = 1;
6660 var211 = string__NativeString__to_s_with_length(var209, var210);
6661 var208 = var211;
6662 varonce207 = var208;
6663 }
6664 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var208) /* add on <var_200:Array[Object]>*/;
6665 var212 = ((val* (*)(val*))(var_200->class->vft[COLOR_string__Object__to_s]))(var_200) /* to_s on <var_200:Array[Object]>*/;
6666 var_class_ptr = var212;
6667 }
6668 /* <var_mtype:MType> isa MClassType */
6669 cltype214 = type_model__MClassType.color;
6670 idtype215 = type_model__MClassType.id;
6671 if(cltype214 >= var_mtype->type->table_size) {
6672 var213 = 0;
6673 } else {
6674 var213 = var_mtype->type->type_table[cltype214] == idtype215;
6675 }
6676 if (var213){
6677 if (varonce216) {
6678 var217 = varonce216;
6679 } else {
6680 var218 = "class_";
6681 var219 = 6;
6682 var220 = string__NativeString__to_s_with_length(var218, var219);
6683 var217 = var220;
6684 varonce216 = var217;
6685 }
6686 var221 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6687 var222 = ((val* (*)(val*))(var221->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var221) /* c_name on <var221:MClass>*/;
6688 var223 = NEW_array__Array(&type_array__Arraykernel__Object);
6689 { /* var223 = array_instance Array[Object] */
6690 var224 = 2;
6691 var225 = NEW_array__NativeArray(var224, &type_array__NativeArraykernel__Object);
6692 ((struct instance_array__NativeArray*)var225)->values[0] = (val*) var217;
6693 ((struct instance_array__NativeArray*)var225)->values[1] = (val*) var222;
6694 ((void (*)(val*, val*, long))(var223->class->vft[COLOR_array__Array__with_native]))(var223, var225, var224) /* with_native on <var223:Array[Object]>*/;
6695 }
6696 var226 = ((val* (*)(val*))(var223->class->vft[COLOR_string__Object__to_s]))(var223) /* to_s on <var223:Array[Object]>*/;
6697 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var226) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6698 if (varonce227) {
6699 var228 = varonce227;
6700 } else {
6701 var229 = " = class_";
6702 var230 = 9;
6703 var231 = string__NativeString__to_s_with_length(var229, var230);
6704 var228 = var231;
6705 varonce227 = var228;
6706 }
6707 var232 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6708 var233 = ((val* (*)(val*))(var232->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var232) /* c_name on <var232:MClass>*/;
6709 if (varonce234) {
6710 var235 = varonce234;
6711 } else {
6712 var236 = ".color;";
6713 var237 = 7;
6714 var238 = string__NativeString__to_s_with_length(var236, var237);
6715 var235 = var238;
6716 varonce234 = var235;
6717 }
6718 var239 = NEW_array__Array(&type_array__Arraykernel__Object);
6719 { /* var239 = array_instance Array[Object] */
6720 var240 = 4;
6721 var241 = NEW_array__NativeArray(var240, &type_array__NativeArraykernel__Object);
6722 ((struct instance_array__NativeArray*)var241)->values[0] = (val*) var_cltype;
6723 ((struct instance_array__NativeArray*)var241)->values[1] = (val*) var228;
6724 ((struct instance_array__NativeArray*)var241)->values[2] = (val*) var233;
6725 ((struct instance_array__NativeArray*)var241)->values[3] = (val*) var235;
6726 ((void (*)(val*, val*, long))(var239->class->vft[COLOR_array__Array__with_native]))(var239, var241, var240) /* with_native on <var239:Array[Object]>*/;
6727 }
6728 var242 = ((val* (*)(val*))(var239->class->vft[COLOR_string__Object__to_s]))(var239) /* to_s on <var239:Array[Object]>*/;
6729 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var242) /* add on <self:SeparateErasureCompilerVisitor>*/;
6730 if (varonce243) {
6731 var244 = varonce243;
6732 } else {
6733 var245 = " = class_";
6734 var246 = 9;
6735 var247 = string__NativeString__to_s_with_length(var245, var246);
6736 var244 = var247;
6737 varonce243 = var244;
6738 }
6739 var248 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6740 var249 = ((val* (*)(val*))(var248->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var248) /* c_name on <var248:MClass>*/;
6741 if (varonce250) {
6742 var251 = varonce250;
6743 } else {
6744 var252 = ".id;";
6745 var253 = 4;
6746 var254 = string__NativeString__to_s_with_length(var252, var253);
6747 var251 = var254;
6748 varonce250 = var251;
6749 }
6750 var255 = NEW_array__Array(&type_array__Arraykernel__Object);
6751 { /* var255 = array_instance Array[Object] */
6752 var256 = 4;
6753 var257 = NEW_array__NativeArray(var256, &type_array__NativeArraykernel__Object);
6754 ((struct instance_array__NativeArray*)var257)->values[0] = (val*) var_idtype;
6755 ((struct instance_array__NativeArray*)var257)->values[1] = (val*) var244;
6756 ((struct instance_array__NativeArray*)var257)->values[2] = (val*) var249;
6757 ((struct instance_array__NativeArray*)var257)->values[3] = (val*) var251;
6758 ((void (*)(val*, val*, long))(var255->class->vft[COLOR_array__Array__with_native]))(var255, var257, var256) /* with_native on <var255:Array[Object]>*/;
6759 }
6760 var258 = ((val* (*)(val*))(var255->class->vft[COLOR_string__Object__to_s]))(var255) /* to_s on <var255:Array[Object]>*/;
6761 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var258) /* add on <self:SeparateErasureCompilerVisitor>*/;
6762 var259 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6763 var260 = ((val* (*)(val*))(var259->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var259) /* modelbuilder on <var259:AbstractCompiler(SeparateCompiler)>*/;
6764 var261 = ((val* (*)(val*))(var260->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var260) /* toolcontext on <var260:ModelBuilder>*/;
6765 var262 = ((val* (*)(val*))(var261->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var261) /* opt_typing_test_metrics on <var261:ToolContext>*/;
6766 var263 = ((val* (*)(val*))(var262->class->vft[COLOR_opts__Option__value]))(var262) /* value on <var262:OptionBool>*/;
6767 var264 = ((struct instance_kernel__Bool*)var263)->value; /* autounbox from nullable Object to Bool */;
6768 if (var264){
6769 var265 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6770 var266 = ((val* (*)(val*))(var265->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_resolved]))(var265) /* count_type_test_resolved on <var265:AbstractCompiler(SeparateCompiler)>*/;
6771 var_267 = var266;
6772 var_268 = var_tag;
6773 var269 = ((val* (*)(val*, val*))(var_267->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_267, var_268) /* [] on <var_267:HashMap[String, Int]>*/;
6774 var270 = 1;
6775 { /* Inline kernel#Int#+ (var269,var270) */
6776 var273 = ((struct instance_kernel__Int*)var269)->value; /* autounbox from nullable Object to Int */;
6777 var274 = var273 + var270;
6778 var271 = var274;
6779 goto RET_LABEL272;
6780 RET_LABEL272:(void)0;
6781 }
6782 var275 = BOX_kernel__Int(var271); /* autobox from Int to nullable Object */
6783 ((void (*)(val*, val*, val*))(var_267->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_267, var_268, var275) /* []= on <var_267:HashMap[String, Int]>*/;
6784 if (varonce276) {
6785 var277 = varonce276;
6786 } else {
6787 var278 = "count_type_test_resolved_";
6788 var279 = 25;
6789 var280 = string__NativeString__to_s_with_length(var278, var279);
6790 var277 = var280;
6791 varonce276 = var277;
6792 }
6793 if (varonce281) {
6794 var282 = varonce281;
6795 } else {
6796 var283 = "++;";
6797 var284 = 3;
6798 var285 = string__NativeString__to_s_with_length(var283, var284);
6799 var282 = var285;
6800 varonce281 = var282;
6801 }
6802 var286 = NEW_array__Array(&type_array__Arraykernel__Object);
6803 { /* var286 = array_instance Array[Object] */
6804 var287 = 3;
6805 var288 = NEW_array__NativeArray(var287, &type_array__NativeArraykernel__Object);
6806 ((struct instance_array__NativeArray*)var288)->values[0] = (val*) var277;
6807 ((struct instance_array__NativeArray*)var288)->values[1] = (val*) var_tag;
6808 ((struct instance_array__NativeArray*)var288)->values[2] = (val*) var282;
6809 ((void (*)(val*, val*, long))(var286->class->vft[COLOR_array__Array__with_native]))(var286, var288, var287) /* with_native on <var286:Array[Object]>*/;
6810 }
6811 var289 = ((val* (*)(val*))(var286->class->vft[COLOR_string__Object__to_s]))(var286) /* to_s on <var286:Array[Object]>*/;
6812 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var289) /* add on <self:SeparateErasureCompilerVisitor>*/;
6813 } else {
6814 }
6815 } else {
6816 /* <var_mtype:MType> isa MVirtualType */
6817 cltype291 = type_model__MVirtualType.color;
6818 idtype292 = type_model__MVirtualType.id;
6819 if(cltype291 >= var_mtype->type->table_size) {
6820 var290 = 0;
6821 } else {
6822 var290 = var_mtype->type->type_table[cltype291] == idtype292;
6823 }
6824 if (var290){
6825 var293 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6826 if (var293 == NULL) {
6827 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6828 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 520);
6829 show_backtrace(1);
6830 } else {
6831 var294 = ((val* (*)(val*))(var293->class->vft[COLOR_abstract_compiler__Frame__arguments]))(var293) /* arguments on <var293:nullable Frame>*/;
6832 }
6833 var295 = ((val* (*)(val*))(var294->class->vft[COLOR_abstract_collection__Collection__first]))(var294) /* first on <var294:Array[RuntimeVariable]>*/;
6834 var_recv = var295;
6835 var296 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6836 var297 = ((val* (*)(val*))(var296->class->vft[COLOR_abstract_compiler__MType__ctype]))(var296) /* ctype on <var296:MType>*/;
6837 if (varonce298) {
6838 var299 = varonce298;
6839 } else {
6840 var300 = "val*";
6841 var301 = 4;
6842 var302 = string__NativeString__to_s_with_length(var300, var301);
6843 var299 = var302;
6844 varonce298 = var299;
6845 }
6846 var303 = ((short int (*)(val*, val*))(var297->class->vft[COLOR_kernel__Object___61d_61d]))(var297, var299) /* == on <var297:String>*/;
6847 if (var303){
6848 if (varonce304) {
6849 var305 = varonce304;
6850 } else {
6851 var306 = "->class->";
6852 var307 = 9;
6853 var308 = string__NativeString__to_s_with_length(var306, var307);
6854 var305 = var308;
6855 varonce304 = var305;
6856 }
6857 var309 = NEW_array__Array(&type_array__Arraykernel__Object);
6858 { /* var309 = array_instance Array[Object] */
6859 var310 = 2;
6860 var311 = NEW_array__NativeArray(var310, &type_array__NativeArraykernel__Object);
6861 ((struct instance_array__NativeArray*)var311)->values[0] = (val*) var_recv;
6862 ((struct instance_array__NativeArray*)var311)->values[1] = (val*) var305;
6863 ((void (*)(val*, val*, long))(var309->class->vft[COLOR_array__Array__with_native]))(var309, var311, var310) /* with_native on <var309:Array[Object]>*/;
6864 }
6865 var312 = ((val* (*)(val*))(var309->class->vft[COLOR_string__Object__to_s]))(var309) /* to_s on <var309:Array[Object]>*/;
6866 var_recv_ptr = var312;
6867 } else {
6868 var313 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6869 /* <var313:MType> isa MClassType */
6870 cltype315 = type_model__MClassType.color;
6871 idtype316 = type_model__MClassType.id;
6872 if(cltype315 >= var313->type->table_size) {
6873 var314 = 0;
6874 } else {
6875 var314 = var313->type->type_table[cltype315] == idtype316;
6876 }
6877 if (!var314) {
6878 var_class_name317 = var313 == NULL ? "null" : var313->type->name;
6879 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name317);
6880 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 525);
6881 show_backtrace(1);
6882 }
6883 var318 = ((val* (*)(val*))(var313->class->vft[COLOR_model__MClassType__mclass]))(var313) /* mclass on <var313:MType(MClassType)>*/;
6884 var_mclass319 = var318;
6885 if (varonce320) {
6886 var321 = varonce320;
6887 } else {
6888 var322 = "class_";
6889 var323 = 6;
6890 var324 = string__NativeString__to_s_with_length(var322, var323);
6891 var321 = var324;
6892 varonce320 = var321;
6893 }
6894 var325 = ((val* (*)(val*))(var_mclass319->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass319) /* c_name on <var_mclass319:MClass>*/;
6895 var326 = NEW_array__Array(&type_array__Arraykernel__Object);
6896 { /* var326 = array_instance Array[Object] */
6897 var327 = 2;
6898 var328 = NEW_array__NativeArray(var327, &type_array__NativeArraykernel__Object);
6899 ((struct instance_array__NativeArray*)var328)->values[0] = (val*) var321;
6900 ((struct instance_array__NativeArray*)var328)->values[1] = (val*) var325;
6901 ((void (*)(val*, val*, long))(var326->class->vft[COLOR_array__Array__with_native]))(var326, var328, var327) /* with_native on <var326:Array[Object]>*/;
6902 }
6903 var329 = ((val* (*)(val*))(var326->class->vft[COLOR_string__Object__to_s]))(var326) /* to_s on <var326:Array[Object]>*/;
6904 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var329) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6905 if (varonce330) {
6906 var331 = varonce330;
6907 } else {
6908 var332 = "class_";
6909 var333 = 6;
6910 var334 = string__NativeString__to_s_with_length(var332, var333);
6911 var331 = var334;
6912 varonce330 = var331;
6913 }
6914 var335 = ((val* (*)(val*))(var_mclass319->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass319) /* c_name on <var_mclass319:MClass>*/;
6915 if (varonce336) {
6916 var337 = varonce336;
6917 } else {
6918 var338 = ".";
6919 var339 = 1;
6920 var340 = string__NativeString__to_s_with_length(var338, var339);
6921 var337 = var340;
6922 varonce336 = var337;
6923 }
6924 var341 = NEW_array__Array(&type_array__Arraykernel__Object);
6925 { /* var341 = array_instance Array[Object] */
6926 var342 = 3;
6927 var343 = NEW_array__NativeArray(var342, &type_array__NativeArraykernel__Object);
6928 ((struct instance_array__NativeArray*)var343)->values[0] = (val*) var331;
6929 ((struct instance_array__NativeArray*)var343)->values[1] = (val*) var335;
6930 ((struct instance_array__NativeArray*)var343)->values[2] = (val*) var337;
6931 ((void (*)(val*, val*, long))(var341->class->vft[COLOR_array__Array__with_native]))(var341, var343, var342) /* with_native on <var341:Array[Object]>*/;
6932 }
6933 var344 = ((val* (*)(val*))(var341->class->vft[COLOR_string__Object__to_s]))(var341) /* to_s on <var341:Array[Object]>*/;
6934 var_recv_ptr = var344;
6935 }
6936 if (varonce345) {
6937 var346 = varonce345;
6938 } else {
6939 var347 = "entry";
6940 var348 = 5;
6941 var349 = string__NativeString__to_s_with_length(var347, var348);
6942 var346 = var349;
6943 varonce345 = var346;
6944 }
6945 var350 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var346) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
6946 var_entry = var350;
6947 if (varonce351) {
6948 var352 = varonce351;
6949 } else {
6950 var353 = "struct vts_entry ";
6951 var354 = 17;
6952 var355 = string__NativeString__to_s_with_length(var353, var354);
6953 var352 = var355;
6954 varonce351 = var352;
6955 }
6956 if (varonce356) {
6957 var357 = varonce356;
6958 } else {
6959 var358 = ";";
6960 var359 = 1;
6961 var360 = string__NativeString__to_s_with_length(var358, var359);
6962 var357 = var360;
6963 varonce356 = var357;
6964 }
6965 var361 = NEW_array__Array(&type_array__Arraykernel__Object);
6966 { /* var361 = array_instance Array[Object] */
6967 var362 = 3;
6968 var363 = NEW_array__NativeArray(var362, &type_array__NativeArraykernel__Object);
6969 ((struct instance_array__NativeArray*)var363)->values[0] = (val*) var352;
6970 ((struct instance_array__NativeArray*)var363)->values[1] = (val*) var_entry;
6971 ((struct instance_array__NativeArray*)var363)->values[2] = (val*) var357;
6972 ((void (*)(val*, val*, long))(var361->class->vft[COLOR_array__Array__with_native]))(var361, var363, var362) /* with_native on <var361:Array[Object]>*/;
6973 }
6974 var364 = ((val* (*)(val*))(var361->class->vft[COLOR_string__Object__to_s]))(var361) /* to_s on <var361:Array[Object]>*/;
6975 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var364) /* add on <self:SeparateErasureCompilerVisitor>*/;
6976 var365 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
6977 var366 = ((val* (*)(val*))(var365->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var365) /* const_color on <var365:MProperty>*/;
6978 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var366) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6979 var367 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6980 /* <var367:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
6981 cltype369 = type_separate_erasure_compiler__SeparateErasureCompiler.color;
6982 idtype370 = type_separate_erasure_compiler__SeparateErasureCompiler.id;
6983 if(cltype369 >= var367->type->table_size) {
6984 var368 = 0;
6985 } else {
6986 var368 = var367->type->type_table[cltype369] == idtype370;
6987 }
6988 if (!var368) {
6989 var_class_name371 = var367 == NULL ? "null" : var367->type->name;
6990 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name371);
6991 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 532);
6992 show_backtrace(1);
6993 }
6994 var372 = ((val* (*)(val*))(var367->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(var367) /* vt_layout on <var367:SeparateCompiler(SeparateErasureCompiler)>*/;
6995 /* <var372:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
6996 cltype374 = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
6997 idtype375 = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
6998 if(var372 == NULL) {
6999 var373 = 0;
7000 } else {
7001 if(cltype374 >= var372->type->table_size) {
7002 var373 = 0;
7003 } else {
7004 var373 = var372->type->type_table[cltype374] == idtype375;
7005 }
7006 }
7007 if (var373){
7008 if (varonce376) {
7009 var377 = varonce376;
7010 } else {
7011 var378 = " = ";
7012 var379 = 3;
7013 var380 = string__NativeString__to_s_with_length(var378, var379);
7014 var377 = var380;
7015 varonce376 = var377;
7016 }
7017 if (varonce381) {
7018 var382 = varonce381;
7019 } else {
7020 var383 = "vts_table->vts[HASH(";
7021 var384 = 20;
7022 var385 = string__NativeString__to_s_with_length(var383, var384);
7023 var382 = var385;
7024 varonce381 = var382;
7025 }
7026 if (varonce386) {
7027 var387 = varonce386;
7028 } else {
7029 var388 = "vts_table->mask, ";
7030 var389 = 17;
7031 var390 = string__NativeString__to_s_with_length(var388, var389);
7032 var387 = var390;
7033 varonce386 = var387;
7034 }
7035 var391 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7036 var392 = ((val* (*)(val*))(var391->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var391) /* const_color on <var391:MProperty>*/;
7037 if (varonce393) {
7038 var394 = varonce393;
7039 } else {
7040 var395 = ")];";
7041 var396 = 3;
7042 var397 = string__NativeString__to_s_with_length(var395, var396);
7043 var394 = var397;
7044 varonce393 = var394;
7045 }
7046 var398 = NEW_array__Array(&type_array__Arraykernel__Object);
7047 { /* var398 = array_instance Array[Object] */
7048 var399 = 8;
7049 var400 = NEW_array__NativeArray(var399, &type_array__NativeArraykernel__Object);
7050 ((struct instance_array__NativeArray*)var400)->values[0] = (val*) var_entry;
7051 ((struct instance_array__NativeArray*)var400)->values[1] = (val*) var377;
7052 ((struct instance_array__NativeArray*)var400)->values[2] = (val*) var_recv_ptr;
7053 ((struct instance_array__NativeArray*)var400)->values[3] = (val*) var382;
7054 ((struct instance_array__NativeArray*)var400)->values[4] = (val*) var_recv_ptr;
7055 ((struct instance_array__NativeArray*)var400)->values[5] = (val*) var387;
7056 ((struct instance_array__NativeArray*)var400)->values[6] = (val*) var392;
7057 ((struct instance_array__NativeArray*)var400)->values[7] = (val*) var394;
7058 ((void (*)(val*, val*, long))(var398->class->vft[COLOR_array__Array__with_native]))(var398, var400, var399) /* with_native on <var398:Array[Object]>*/;
7059 }
7060 var401 = ((val* (*)(val*))(var398->class->vft[COLOR_string__Object__to_s]))(var398) /* to_s on <var398:Array[Object]>*/;
7061 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var401) /* add on <self:SeparateErasureCompilerVisitor>*/;
7062 } else {
7063 if (varonce402) {
7064 var403 = varonce402;
7065 } else {
7066 var404 = " = ";
7067 var405 = 3;
7068 var406 = string__NativeString__to_s_with_length(var404, var405);
7069 var403 = var406;
7070 varonce402 = var403;
7071 }
7072 if (varonce407) {
7073 var408 = varonce407;
7074 } else {
7075 var409 = "vts_table->vts[";
7076 var410 = 15;
7077 var411 = string__NativeString__to_s_with_length(var409, var410);
7078 var408 = var411;
7079 varonce407 = var408;
7080 }
7081 var412 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7082 var413 = ((val* (*)(val*))(var412->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var412) /* const_color on <var412:MProperty>*/;
7083 if (varonce414) {
7084 var415 = varonce414;
7085 } else {
7086 var416 = "];";
7087 var417 = 2;
7088 var418 = string__NativeString__to_s_with_length(var416, var417);
7089 var415 = var418;
7090 varonce414 = var415;
7091 }
7092 var419 = NEW_array__Array(&type_array__Arraykernel__Object);
7093 { /* var419 = array_instance Array[Object] */
7094 var420 = 6;
7095 var421 = NEW_array__NativeArray(var420, &type_array__NativeArraykernel__Object);
7096 ((struct instance_array__NativeArray*)var421)->values[0] = (val*) var_entry;
7097 ((struct instance_array__NativeArray*)var421)->values[1] = (val*) var403;
7098 ((struct instance_array__NativeArray*)var421)->values[2] = (val*) var_recv_ptr;
7099 ((struct instance_array__NativeArray*)var421)->values[3] = (val*) var408;
7100 ((struct instance_array__NativeArray*)var421)->values[4] = (val*) var413;
7101 ((struct instance_array__NativeArray*)var421)->values[5] = (val*) var415;
7102 ((void (*)(val*, val*, long))(var419->class->vft[COLOR_array__Array__with_native]))(var419, var421, var420) /* with_native on <var419:Array[Object]>*/;
7103 }
7104 var422 = ((val* (*)(val*))(var419->class->vft[COLOR_string__Object__to_s]))(var419) /* to_s on <var419:Array[Object]>*/;
7105 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var422) /* add on <self:SeparateErasureCompilerVisitor>*/;
7106 }
7107 if (varonce423) {
7108 var424 = varonce423;
7109 } else {
7110 var425 = " = ";
7111 var426 = 3;
7112 var427 = string__NativeString__to_s_with_length(var425, var426);
7113 var424 = var427;
7114 varonce423 = var424;
7115 }
7116 if (varonce428) {
7117 var429 = varonce428;
7118 } else {
7119 var430 = ".class->color;";
7120 var431 = 14;
7121 var432 = string__NativeString__to_s_with_length(var430, var431);
7122 var429 = var432;
7123 varonce428 = var429;
7124 }
7125 var433 = NEW_array__Array(&type_array__Arraykernel__Object);
7126 { /* var433 = array_instance Array[Object] */
7127 var434 = 4;
7128 var435 = NEW_array__NativeArray(var434, &type_array__NativeArraykernel__Object);
7129 ((struct instance_array__NativeArray*)var435)->values[0] = (val*) var_cltype;
7130 ((struct instance_array__NativeArray*)var435)->values[1] = (val*) var424;
7131 ((struct instance_array__NativeArray*)var435)->values[2] = (val*) var_entry;
7132 ((struct instance_array__NativeArray*)var435)->values[3] = (val*) var429;
7133 ((void (*)(val*, val*, long))(var433->class->vft[COLOR_array__Array__with_native]))(var433, var435, var434) /* with_native on <var433:Array[Object]>*/;
7134 }
7135 var436 = ((val* (*)(val*))(var433->class->vft[COLOR_string__Object__to_s]))(var433) /* to_s on <var433:Array[Object]>*/;
7136 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var436) /* add on <self:SeparateErasureCompilerVisitor>*/;
7137 if (varonce437) {
7138 var438 = varonce437;
7139 } else {
7140 var439 = " = ";
7141 var440 = 3;
7142 var441 = string__NativeString__to_s_with_length(var439, var440);
7143 var438 = var441;
7144 varonce437 = var438;
7145 }
7146 if (varonce442) {
7147 var443 = varonce442;
7148 } else {
7149 var444 = ".class->id;";
7150 var445 = 11;
7151 var446 = string__NativeString__to_s_with_length(var444, var445);
7152 var443 = var446;
7153 varonce442 = var443;
7154 }
7155 var447 = NEW_array__Array(&type_array__Arraykernel__Object);
7156 { /* var447 = array_instance Array[Object] */
7157 var448 = 4;
7158 var449 = NEW_array__NativeArray(var448, &type_array__NativeArraykernel__Object);
7159 ((struct instance_array__NativeArray*)var449)->values[0] = (val*) var_idtype;
7160 ((struct instance_array__NativeArray*)var449)->values[1] = (val*) var438;
7161 ((struct instance_array__NativeArray*)var449)->values[2] = (val*) var_entry;
7162 ((struct instance_array__NativeArray*)var449)->values[3] = (val*) var443;
7163 ((void (*)(val*, val*, long))(var447->class->vft[COLOR_array__Array__with_native]))(var447, var449, var448) /* with_native on <var447:Array[Object]>*/;
7164 }
7165 var450 = ((val* (*)(val*))(var447->class->vft[COLOR_string__Object__to_s]))(var447) /* to_s on <var447:Array[Object]>*/;
7166 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var450) /* add on <self:SeparateErasureCompilerVisitor>*/;
7167 var_452 = var_maybe_null;
7168 if (var_maybe_null){
7169 if (varonce453) {
7170 var454 = varonce453;
7171 } else {
7172 var455 = "0";
7173 var456 = 1;
7174 var457 = string__NativeString__to_s_with_length(var455, var456);
7175 var454 = var457;
7176 varonce453 = var454;
7177 }
7178 var458 = ((short int (*)(val*, val*))(var_accept_null->class->vft[COLOR_kernel__Object___61d_61d]))(var_accept_null, var454) /* == on <var_accept_null:String>*/;
7179 var451 = var458;
7180 } else {
7181 var451 = var_452;
7182 }
7183 if (var451){
7184 if (varonce459) {
7185 var460 = varonce459;
7186 } else {
7187 var461 = "is_nullable";
7188 var462 = 11;
7189 var463 = string__NativeString__to_s_with_length(var461, var462);
7190 var460 = var463;
7191 varonce459 = var460;
7192 }
7193 var464 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var460) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7194 var_is_nullable = var464;
7195 if (varonce465) {
7196 var466 = varonce465;
7197 } else {
7198 var467 = "short int ";
7199 var468 = 10;
7200 var469 = string__NativeString__to_s_with_length(var467, var468);
7201 var466 = var469;
7202 varonce465 = var466;
7203 }
7204 if (varonce470) {
7205 var471 = varonce470;
7206 } else {
7207 var472 = ";";
7208 var473 = 1;
7209 var474 = string__NativeString__to_s_with_length(var472, var473);
7210 var471 = var474;
7211 varonce470 = var471;
7212 }
7213 var475 = NEW_array__Array(&type_array__Arraykernel__Object);
7214 { /* var475 = array_instance Array[Object] */
7215 var476 = 3;
7216 var477 = NEW_array__NativeArray(var476, &type_array__NativeArraykernel__Object);
7217 ((struct instance_array__NativeArray*)var477)->values[0] = (val*) var466;
7218 ((struct instance_array__NativeArray*)var477)->values[1] = (val*) var_is_nullable;
7219 ((struct instance_array__NativeArray*)var477)->values[2] = (val*) var471;
7220 ((void (*)(val*, val*, long))(var475->class->vft[COLOR_array__Array__with_native]))(var475, var477, var476) /* with_native on <var475:Array[Object]>*/;
7221 }
7222 var478 = ((val* (*)(val*))(var475->class->vft[COLOR_string__Object__to_s]))(var475) /* to_s on <var475:Array[Object]>*/;
7223 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var478) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
7224 if (varonce479) {
7225 var480 = varonce479;
7226 } else {
7227 var481 = " = ";
7228 var482 = 3;
7229 var483 = string__NativeString__to_s_with_length(var481, var482);
7230 var480 = var483;
7231 varonce479 = var480;
7232 }
7233 if (varonce484) {
7234 var485 = varonce484;
7235 } else {
7236 var486 = ".is_nullable;";
7237 var487 = 13;
7238 var488 = string__NativeString__to_s_with_length(var486, var487);
7239 var485 = var488;
7240 varonce484 = var485;
7241 }
7242 var489 = NEW_array__Array(&type_array__Arraykernel__Object);
7243 { /* var489 = array_instance Array[Object] */
7244 var490 = 4;
7245 var491 = NEW_array__NativeArray(var490, &type_array__NativeArraykernel__Object);
7246 ((struct instance_array__NativeArray*)var491)->values[0] = (val*) var_is_nullable;
7247 ((struct instance_array__NativeArray*)var491)->values[1] = (val*) var480;
7248 ((struct instance_array__NativeArray*)var491)->values[2] = (val*) var_entry;
7249 ((struct instance_array__NativeArray*)var491)->values[3] = (val*) var485;
7250 ((void (*)(val*, val*, long))(var489->class->vft[COLOR_array__Array__with_native]))(var489, var491, var490) /* with_native on <var489:Array[Object]>*/;
7251 }
7252 var492 = ((val* (*)(val*))(var489->class->vft[COLOR_string__Object__to_s]))(var489) /* to_s on <var489:Array[Object]>*/;
7253 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var492) /* add on <self:SeparateErasureCompilerVisitor>*/;
7254 var493 = ((val* (*)(val*))(var_is_nullable->class->vft[COLOR_string__Object__to_s]))(var_is_nullable) /* to_s on <var_is_nullable:String>*/;
7255 var_accept_null = var493;
7256 } else {
7257 }
7258 var494 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7259 var495 = ((val* (*)(val*))(var494->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var494) /* modelbuilder on <var494:AbstractCompiler(SeparateCompiler)>*/;
7260 var496 = ((val* (*)(val*))(var495->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var495) /* toolcontext on <var495:ModelBuilder>*/;
7261 var497 = ((val* (*)(val*))(var496->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var496) /* opt_typing_test_metrics on <var496:ToolContext>*/;
7262 var498 = ((val* (*)(val*))(var497->class->vft[COLOR_opts__Option__value]))(var497) /* value on <var497:OptionBool>*/;
7263 var499 = ((struct instance_kernel__Bool*)var498)->value; /* autounbox from nullable Object to Bool */;
7264 if (var499){
7265 var500 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7266 var501 = ((val* (*)(val*))(var500->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_unresolved]))(var500) /* count_type_test_unresolved on <var500:AbstractCompiler(SeparateCompiler)>*/;
7267 var_502 = var501;
7268 var_503 = var_tag;
7269 var504 = ((val* (*)(val*, val*))(var_502->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_502, var_503) /* [] on <var_502:HashMap[String, Int]>*/;
7270 var505 = 1;
7271 { /* Inline kernel#Int#+ (var504,var505) */
7272 var508 = ((struct instance_kernel__Int*)var504)->value; /* autounbox from nullable Object to Int */;
7273 var509 = var508 + var505;
7274 var506 = var509;
7275 goto RET_LABEL507;
7276 RET_LABEL507:(void)0;
7277 }
7278 var510 = BOX_kernel__Int(var506); /* autobox from Int to nullable Object */
7279 ((void (*)(val*, val*, val*))(var_502->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_502, var_503, var510) /* []= on <var_502:HashMap[String, Int]>*/;
7280 if (varonce511) {
7281 var512 = varonce511;
7282 } else {
7283 var513 = "count_type_test_unresolved_";
7284 var514 = 27;
7285 var515 = string__NativeString__to_s_with_length(var513, var514);
7286 var512 = var515;
7287 varonce511 = var512;
7288 }
7289 if (varonce516) {
7290 var517 = varonce516;
7291 } else {
7292 var518 = "++;";
7293 var519 = 3;
7294 var520 = string__NativeString__to_s_with_length(var518, var519);
7295 var517 = var520;
7296 varonce516 = var517;
7297 }
7298 var521 = NEW_array__Array(&type_array__Arraykernel__Object);
7299 { /* var521 = array_instance Array[Object] */
7300 var522 = 3;
7301 var523 = NEW_array__NativeArray(var522, &type_array__NativeArraykernel__Object);
7302 ((struct instance_array__NativeArray*)var523)->values[0] = (val*) var512;
7303 ((struct instance_array__NativeArray*)var523)->values[1] = (val*) var_tag;
7304 ((struct instance_array__NativeArray*)var523)->values[2] = (val*) var517;
7305 ((void (*)(val*, val*, long))(var521->class->vft[COLOR_array__Array__with_native]))(var521, var523, var522) /* with_native on <var521:Array[Object]>*/;
7306 }
7307 var524 = ((val* (*)(val*))(var521->class->vft[COLOR_string__Object__to_s]))(var521) /* to_s on <var521:Array[Object]>*/;
7308 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var524) /* add on <self:SeparateErasureCompilerVisitor>*/;
7309 } else {
7310 }
7311 } else {
7312 if (varonce525) {
7313 var526 = varonce525;
7314 } else {
7315 var527 = "type_test(";
7316 var528 = 10;
7317 var529 = string__NativeString__to_s_with_length(var527, var528);
7318 var526 = var529;
7319 varonce525 = var526;
7320 }
7321 var530 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
7322 if (varonce531) {
7323 var532 = varonce531;
7324 } else {
7325 var533 = ", ";
7326 var534 = 2;
7327 var535 = string__NativeString__to_s_with_length(var533, var534);
7328 var532 = var535;
7329 varonce531 = var532;
7330 }
7331 if (varonce536) {
7332 var537 = varonce536;
7333 } else {
7334 var538 = ")";
7335 var539 = 1;
7336 var540 = string__NativeString__to_s_with_length(var538, var539);
7337 var537 = var540;
7338 varonce536 = var537;
7339 }
7340 var541 = NEW_array__Array(&type_array__Arraykernel__Object);
7341 { /* var541 = array_instance Array[Object] */
7342 var542 = 5;
7343 var543 = NEW_array__NativeArray(var542, &type_array__NativeArraykernel__Object);
7344 ((struct instance_array__NativeArray*)var543)->values[0] = (val*) var526;
7345 ((struct instance_array__NativeArray*)var543)->values[1] = (val*) var530;
7346 ((struct instance_array__NativeArray*)var543)->values[2] = (val*) var532;
7347 ((struct instance_array__NativeArray*)var543)->values[3] = (val*) var_mtype;
7348 ((struct instance_array__NativeArray*)var543)->values[4] = (val*) var537;
7349 ((void (*)(val*, val*, long))(var541->class->vft[COLOR_array__Array__with_native]))(var541, var543, var542) /* with_native on <var541:Array[Object]>*/;
7350 }
7351 var544 = ((val* (*)(val*))(var541->class->vft[COLOR_string__Object__to_s]))(var541) /* to_s on <var541:Array[Object]>*/;
7352 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var544) /* debug on <self:SeparateErasureCompilerVisitor>*/;
7353 fprintf(stderr, "Runtime error: %s", "Aborted");
7354 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 551);
7355 show_backtrace(1);
7356 }
7357 }
7358 if (var_maybe_null){
7359 if (varonce545) {
7360 var546 = varonce545;
7361 } else {
7362 var547 = "if(";
7363 var548 = 3;
7364 var549 = string__NativeString__to_s_with_length(var547, var548);
7365 var546 = var549;
7366 varonce545 = var546;
7367 }
7368 if (varonce550) {
7369 var551 = varonce550;
7370 } else {
7371 var552 = " == NULL) {";
7372 var553 = 11;
7373 var554 = string__NativeString__to_s_with_length(var552, var553);
7374 var551 = var554;
7375 varonce550 = var551;
7376 }
7377 var555 = NEW_array__Array(&type_array__Arraykernel__Object);
7378 { /* var555 = array_instance Array[Object] */
7379 var556 = 3;
7380 var557 = NEW_array__NativeArray(var556, &type_array__NativeArraykernel__Object);
7381 ((struct instance_array__NativeArray*)var557)->values[0] = (val*) var546;
7382 ((struct instance_array__NativeArray*)var557)->values[1] = (val*) var_value;
7383 ((struct instance_array__NativeArray*)var557)->values[2] = (val*) var551;
7384 ((void (*)(val*, val*, long))(var555->class->vft[COLOR_array__Array__with_native]))(var555, var557, var556) /* with_native on <var555:Array[Object]>*/;
7385 }
7386 var558 = ((val* (*)(val*))(var555->class->vft[COLOR_string__Object__to_s]))(var555) /* to_s on <var555:Array[Object]>*/;
7387 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var558) /* add on <self:SeparateErasureCompilerVisitor>*/;
7388 if (varonce559) {
7389 var560 = varonce559;
7390 } else {
7391 var561 = " = ";
7392 var562 = 3;
7393 var563 = string__NativeString__to_s_with_length(var561, var562);
7394 var560 = var563;
7395 varonce559 = var560;
7396 }
7397 if (varonce564) {
7398 var565 = varonce564;
7399 } else {
7400 var566 = ";";
7401 var567 = 1;
7402 var568 = string__NativeString__to_s_with_length(var566, var567);
7403 var565 = var568;
7404 varonce564 = var565;
7405 }
7406 var569 = NEW_array__Array(&type_array__Arraykernel__Object);
7407 { /* var569 = array_instance Array[Object] */
7408 var570 = 4;
7409 var571 = NEW_array__NativeArray(var570, &type_array__NativeArraykernel__Object);
7410 ((struct instance_array__NativeArray*)var571)->values[0] = (val*) var_res;
7411 ((struct instance_array__NativeArray*)var571)->values[1] = (val*) var560;
7412 ((struct instance_array__NativeArray*)var571)->values[2] = (val*) var_accept_null;
7413 ((struct instance_array__NativeArray*)var571)->values[3] = (val*) var565;
7414 ((void (*)(val*, val*, long))(var569->class->vft[COLOR_array__Array__with_native]))(var569, var571, var570) /* with_native on <var569:Array[Object]>*/;
7415 }
7416 var572 = ((val* (*)(val*))(var569->class->vft[COLOR_string__Object__to_s]))(var569) /* to_s on <var569:Array[Object]>*/;
7417 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var572) /* add on <self:SeparateErasureCompilerVisitor>*/;
7418 if (varonce573) {
7419 var574 = varonce573;
7420 } else {
7421 var575 = "} else {";
7422 var576 = 8;
7423 var577 = string__NativeString__to_s_with_length(var575, var576);
7424 var574 = var577;
7425 varonce573 = var574;
7426 }
7427 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var574) /* add on <self:SeparateErasureCompilerVisitor>*/;
7428 } else {
7429 }
7430 var578 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7431 /* <var578:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
7432 cltype580 = type_separate_erasure_compiler__SeparateErasureCompiler.color;
7433 idtype581 = type_separate_erasure_compiler__SeparateErasureCompiler.id;
7434 if(cltype580 >= var578->type->table_size) {
7435 var579 = 0;
7436 } else {
7437 var579 = var578->type->type_table[cltype580] == idtype581;
7438 }
7439 if (!var579) {
7440 var_class_name582 = var578 == NULL ? "null" : var578->type->name;
7441 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name582);
7442 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 560);
7443 show_backtrace(1);
7444 }
7445 var583 = ((val* (*)(val*))(var578->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(var578) /* class_layout on <var578:SeparateCompiler(SeparateErasureCompiler)>*/;
7446 /* <var583:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
7447 cltype585 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
7448 idtype586 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
7449 if(var583 == NULL) {
7450 var584 = 0;
7451 } else {
7452 if(cltype585 >= var583->type->table_size) {
7453 var584 = 0;
7454 } else {
7455 var584 = var583->type->type_table[cltype585] == idtype586;
7456 }
7457 }
7458 if (var584){
7459 if (varonce587) {
7460 var588 = varonce587;
7461 } else {
7462 var589 = " = HASH(";
7463 var590 = 8;
7464 var591 = string__NativeString__to_s_with_length(var589, var590);
7465 var588 = var591;
7466 varonce587 = var588;
7467 }
7468 if (varonce592) {
7469 var593 = varonce592;
7470 } else {
7471 var594 = "color, ";
7472 var595 = 7;
7473 var596 = string__NativeString__to_s_with_length(var594, var595);
7474 var593 = var596;
7475 varonce592 = var593;
7476 }
7477 if (varonce597) {
7478 var598 = varonce597;
7479 } else {
7480 var599 = ");";
7481 var600 = 2;
7482 var601 = string__NativeString__to_s_with_length(var599, var600);
7483 var598 = var601;
7484 varonce597 = var598;
7485 }
7486 var602 = NEW_array__Array(&type_array__Arraykernel__Object);
7487 { /* var602 = array_instance Array[Object] */
7488 var603 = 6;
7489 var604 = NEW_array__NativeArray(var603, &type_array__NativeArraykernel__Object);
7490 ((struct instance_array__NativeArray*)var604)->values[0] = (val*) var_cltype;
7491 ((struct instance_array__NativeArray*)var604)->values[1] = (val*) var588;
7492 ((struct instance_array__NativeArray*)var604)->values[2] = (val*) var_class_ptr;
7493 ((struct instance_array__NativeArray*)var604)->values[3] = (val*) var593;
7494 ((struct instance_array__NativeArray*)var604)->values[4] = (val*) var_idtype;
7495 ((struct instance_array__NativeArray*)var604)->values[5] = (val*) var598;
7496 ((void (*)(val*, val*, long))(var602->class->vft[COLOR_array__Array__with_native]))(var602, var604, var603) /* with_native on <var602:Array[Object]>*/;
7497 }
7498 var605 = ((val* (*)(val*))(var602->class->vft[COLOR_string__Object__to_s]))(var602) /* to_s on <var602:Array[Object]>*/;
7499 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var605) /* add on <self:SeparateErasureCompilerVisitor>*/;
7500 } else {
7501 }
7502 if (varonce606) {
7503 var607 = varonce606;
7504 } else {
7505 var608 = "if(";
7506 var609 = 3;
7507 var610 = string__NativeString__to_s_with_length(var608, var609);
7508 var607 = var610;
7509 varonce606 = var607;
7510 }
7511 if (varonce611) {
7512 var612 = varonce611;
7513 } else {
7514 var613 = " >= ";
7515 var614 = 4;
7516 var615 = string__NativeString__to_s_with_length(var613, var614);
7517 var612 = var615;
7518 varonce611 = var612;
7519 }
7520 if (varonce616) {
7521 var617 = varonce616;
7522 } else {
7523 var618 = "type_table->size) {";
7524 var619 = 19;
7525 var620 = string__NativeString__to_s_with_length(var618, var619);
7526 var617 = var620;
7527 varonce616 = var617;
7528 }
7529 var621 = NEW_array__Array(&type_array__Arraykernel__Object);
7530 { /* var621 = array_instance Array[Object] */
7531 var622 = 5;
7532 var623 = NEW_array__NativeArray(var622, &type_array__NativeArraykernel__Object);
7533 ((struct instance_array__NativeArray*)var623)->values[0] = (val*) var607;
7534 ((struct instance_array__NativeArray*)var623)->values[1] = (val*) var_cltype;
7535 ((struct instance_array__NativeArray*)var623)->values[2] = (val*) var612;
7536 ((struct instance_array__NativeArray*)var623)->values[3] = (val*) var_class_ptr;
7537 ((struct instance_array__NativeArray*)var623)->values[4] = (val*) var617;
7538 ((void (*)(val*, val*, long))(var621->class->vft[COLOR_array__Array__with_native]))(var621, var623, var622) /* with_native on <var621:Array[Object]>*/;
7539 }
7540 var624 = ((val* (*)(val*))(var621->class->vft[COLOR_string__Object__to_s]))(var621) /* to_s on <var621:Array[Object]>*/;
7541 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var624) /* add on <self:SeparateErasureCompilerVisitor>*/;
7542 if (varonce625) {
7543 var626 = varonce625;
7544 } else {
7545 var627 = " = 0;";
7546 var628 = 5;
7547 var629 = string__NativeString__to_s_with_length(var627, var628);
7548 var626 = var629;
7549 varonce625 = var626;
7550 }
7551 var630 = NEW_array__Array(&type_array__Arraykernel__Object);
7552 { /* var630 = array_instance Array[Object] */
7553 var631 = 2;
7554 var632 = NEW_array__NativeArray(var631, &type_array__NativeArraykernel__Object);
7555 ((struct instance_array__NativeArray*)var632)->values[0] = (val*) var_res;
7556 ((struct instance_array__NativeArray*)var632)->values[1] = (val*) var626;
7557 ((void (*)(val*, val*, long))(var630->class->vft[COLOR_array__Array__with_native]))(var630, var632, var631) /* with_native on <var630:Array[Object]>*/;
7558 }
7559 var633 = ((val* (*)(val*))(var630->class->vft[COLOR_string__Object__to_s]))(var630) /* to_s on <var630:Array[Object]>*/;
7560 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var633) /* add on <self:SeparateErasureCompilerVisitor>*/;
7561 if (varonce634) {
7562 var635 = varonce634;
7563 } else {
7564 var636 = "} else {";
7565 var637 = 8;
7566 var638 = string__NativeString__to_s_with_length(var636, var637);
7567 var635 = var638;
7568 varonce634 = var635;
7569 }
7570 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var635) /* add on <self:SeparateErasureCompilerVisitor>*/;
7571 if (varonce639) {
7572 var640 = varonce639;
7573 } else {
7574 var641 = " = ";
7575 var642 = 3;
7576 var643 = string__NativeString__to_s_with_length(var641, var642);
7577 var640 = var643;
7578 varonce639 = var640;
7579 }
7580 if (varonce644) {
7581 var645 = varonce644;
7582 } else {
7583 var646 = "type_table->table[";
7584 var647 = 18;
7585 var648 = string__NativeString__to_s_with_length(var646, var647);
7586 var645 = var648;
7587 varonce644 = var645;
7588 }
7589 if (varonce649) {
7590 var650 = varonce649;
7591 } else {
7592 var651 = "] == ";
7593 var652 = 5;
7594 var653 = string__NativeString__to_s_with_length(var651, var652);
7595 var650 = var653;
7596 varonce649 = var650;
7597 }
7598 if (varonce654) {
7599 var655 = varonce654;
7600 } else {
7601 var656 = ";";
7602 var657 = 1;
7603 var658 = string__NativeString__to_s_with_length(var656, var657);
7604 var655 = var658;
7605 varonce654 = var655;
7606 }
7607 var659 = NEW_array__Array(&type_array__Arraykernel__Object);
7608 { /* var659 = array_instance Array[Object] */
7609 var660 = 8;
7610 var661 = NEW_array__NativeArray(var660, &type_array__NativeArraykernel__Object);
7611 ((struct instance_array__NativeArray*)var661)->values[0] = (val*) var_res;
7612 ((struct instance_array__NativeArray*)var661)->values[1] = (val*) var640;
7613 ((struct instance_array__NativeArray*)var661)->values[2] = (val*) var_class_ptr;
7614 ((struct instance_array__NativeArray*)var661)->values[3] = (val*) var645;
7615 ((struct instance_array__NativeArray*)var661)->values[4] = (val*) var_cltype;
7616 ((struct instance_array__NativeArray*)var661)->values[5] = (val*) var650;
7617 ((struct instance_array__NativeArray*)var661)->values[6] = (val*) var_idtype;
7618 ((struct instance_array__NativeArray*)var661)->values[7] = (val*) var655;
7619 ((void (*)(val*, val*, long))(var659->class->vft[COLOR_array__Array__with_native]))(var659, var661, var660) /* with_native on <var659:Array[Object]>*/;
7620 }
7621 var662 = ((val* (*)(val*))(var659->class->vft[COLOR_string__Object__to_s]))(var659) /* to_s on <var659:Array[Object]>*/;
7622 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var662) /* add on <self:SeparateErasureCompilerVisitor>*/;
7623 if (varonce663) {
7624 var664 = varonce663;
7625 } else {
7626 var665 = "}";
7627 var666 = 1;
7628 var667 = string__NativeString__to_s_with_length(var665, var666);
7629 var664 = var667;
7630 varonce663 = var664;
7631 }
7632 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var664) /* add on <self:SeparateErasureCompilerVisitor>*/;
7633 if (var_maybe_null){
7634 if (varonce668) {
7635 var669 = varonce668;
7636 } else {
7637 var670 = "}";
7638 var671 = 1;
7639 var672 = string__NativeString__to_s_with_length(var670, var671);
7640 var669 = var672;
7641 varonce668 = var669;
7642 }
7643 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var669) /* add on <self:SeparateErasureCompilerVisitor>*/;
7644 } else {
7645 }
7646 var = var_res;
7647 goto RET_LABEL;
7648 RET_LABEL:;
7649 return var;
7650 }
7651 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: Object, RuntimeVariable, MType, String): RuntimeVariable */
7652 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
7653 val* var /* : RuntimeVariable */;
7654 val* var1 /* : RuntimeVariable */;
7655 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(self, p0, p1, p2);
7656 var = var1;
7657 RET_LABEL:;
7658 return var;
7659 }
7660 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: SeparateErasureCompilerVisitor, RuntimeVariable): String */
7661 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
7662 val* var /* : String */;
7663 val* var_value /* var value: RuntimeVariable */;
7664 static val* varonce;
7665 val* var1 /* : String */;
7666 char* var2 /* : NativeString */;
7667 long var3 /* : Int */;
7668 val* var4 /* : String */;
7669 val* var5 /* : String */;
7670 val* var_res /* var res: String */;
7671 static val* varonce6;
7672 val* var7 /* : String */;
7673 char* var8 /* : NativeString */;
7674 long var9 /* : Int */;
7675 val* var10 /* : String */;
7676 static val* varonce11;
7677 val* var12 /* : String */;
7678 char* var13 /* : NativeString */;
7679 long var14 /* : Int */;
7680 val* var15 /* : String */;
7681 val* var16 /* : Array[Object] */;
7682 long var17 /* : Int */;
7683 val* var18 /* : NativeArray[Object] */;
7684 val* var19 /* : String */;
7685 val* var20 /* : MType */;
7686 val* var21 /* : String */;
7687 static val* varonce22;
7688 val* var23 /* : String */;
7689 char* var24 /* : NativeString */;
7690 long var25 /* : Int */;
7691 val* var26 /* : String */;
7692 short int var27 /* : Bool */;
7693 static val* varonce28;
7694 val* var29 /* : String */;
7695 char* var30 /* : NativeString */;
7696 long var31 /* : Int */;
7697 val* var32 /* : String */;
7698 static val* varonce33;
7699 val* var34 /* : String */;
7700 char* var35 /* : NativeString */;
7701 long var36 /* : Int */;
7702 val* var37 /* : String */;
7703 static val* varonce38;
7704 val* var39 /* : String */;
7705 char* var40 /* : NativeString */;
7706 long var41 /* : Int */;
7707 val* var42 /* : String */;
7708 val* var43 /* : Array[Object] */;
7709 long var44 /* : Int */;
7710 val* var45 /* : NativeArray[Object] */;
7711 val* var46 /* : String */;
7712 static val* varonce47;
7713 val* var48 /* : String */;
7714 char* var49 /* : NativeString */;
7715 long var50 /* : Int */;
7716 val* var51 /* : String */;
7717 val* var52 /* : MType */;
7718 val* var53 /* : String */;
7719 val* var54 /* : Array[Object] */;
7720 long var55 /* : Int */;
7721 val* var56 /* : NativeArray[Object] */;
7722 val* var57 /* : String */;
7723 static val* varonce58;
7724 val* var59 /* : String */;
7725 char* var60 /* : NativeString */;
7726 long var61 /* : Int */;
7727 val* var62 /* : String */;
7728 val* var63 /* : MType */;
7729 val* var64 /* : String */;
7730 static val* varonce65;
7731 val* var66 /* : String */;
7732 char* var67 /* : NativeString */;
7733 long var68 /* : Int */;
7734 val* var69 /* : String */;
7735 val* var70 /* : Array[Object] */;
7736 long var71 /* : Int */;
7737 val* var72 /* : NativeArray[Object] */;
7738 val* var73 /* : String */;
7739 var_value = p0;
7740 if (varonce) {
7741 var1 = varonce;
7742 } else {
7743 var2 = "var_class_name";
7744 var3 = 14;
7745 var4 = string__NativeString__to_s_with_length(var2, var3);
7746 var1 = var4;
7747 varonce = var1;
7748 }
7749 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var1) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7750 var_res = var5;
7751 if (varonce6) {
7752 var7 = varonce6;
7753 } else {
7754 var8 = "const char* ";
7755 var9 = 12;
7756 var10 = string__NativeString__to_s_with_length(var8, var9);
7757 var7 = var10;
7758 varonce6 = var7;
7759 }
7760 if (varonce11) {
7761 var12 = varonce11;
7762 } else {
7763 var13 = ";";
7764 var14 = 1;
7765 var15 = string__NativeString__to_s_with_length(var13, var14);
7766 var12 = var15;
7767 varonce11 = var12;
7768 }
7769 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
7770 { /* var16 = array_instance Array[Object] */
7771 var17 = 3;
7772 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
7773 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
7774 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_res;
7775 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
7776 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
7777 }
7778 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
7779 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var19) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
7780 var20 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7781 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_compiler__MType__ctype]))(var20) /* ctype on <var20:MType>*/;
7782 if (varonce22) {
7783 var23 = varonce22;
7784 } else {
7785 var24 = "val*";
7786 var25 = 4;
7787 var26 = string__NativeString__to_s_with_length(var24, var25);
7788 var23 = var26;
7789 varonce22 = var23;
7790 }
7791 var27 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var23) /* == on <var21:String>*/;
7792 if (var27){
7793 if (varonce28) {
7794 var29 = varonce28;
7795 } else {
7796 var30 = " = ";
7797 var31 = 3;
7798 var32 = string__NativeString__to_s_with_length(var30, var31);
7799 var29 = var32;
7800 varonce28 = var29;
7801 }
7802 if (varonce33) {
7803 var34 = varonce33;
7804 } else {
7805 var35 = " == NULL ? \"null\" : ";
7806 var36 = 20;
7807 var37 = string__NativeString__to_s_with_length(var35, var36);
7808 var34 = var37;
7809 varonce33 = var34;
7810 }
7811 if (varonce38) {
7812 var39 = varonce38;
7813 } else {
7814 var40 = "->class->name;";
7815 var41 = 14;
7816 var42 = string__NativeString__to_s_with_length(var40, var41);
7817 var39 = var42;
7818 varonce38 = var39;
7819 }
7820 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
7821 { /* var43 = array_instance Array[Object] */
7822 var44 = 6;
7823 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
7824 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_res;
7825 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var29;
7826 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var_value;
7827 ((struct instance_array__NativeArray*)var45)->values[3] = (val*) var34;
7828 ((struct instance_array__NativeArray*)var45)->values[4] = (val*) var_value;
7829 ((struct instance_array__NativeArray*)var45)->values[5] = (val*) var39;
7830 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
7831 }
7832 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
7833 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var46) /* add on <self:SeparateErasureCompilerVisitor>*/;
7834 } else {
7835 if (varonce47) {
7836 var48 = varonce47;
7837 } else {
7838 var49 = "class_";
7839 var50 = 6;
7840 var51 = string__NativeString__to_s_with_length(var49, var50);
7841 var48 = var51;
7842 varonce47 = var48;
7843 }
7844 var52 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7845 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_abstract_compiler__MType__c_name]))(var52) /* c_name on <var52:MType>*/;
7846 var54 = NEW_array__Array(&type_array__Arraykernel__Object);
7847 { /* var54 = array_instance Array[Object] */
7848 var55 = 2;
7849 var56 = NEW_array__NativeArray(var55, &type_array__NativeArraykernel__Object);
7850 ((struct instance_array__NativeArray*)var56)->values[0] = (val*) var48;
7851 ((struct instance_array__NativeArray*)var56)->values[1] = (val*) var53;
7852 ((void (*)(val*, val*, long))(var54->class->vft[COLOR_array__Array__with_native]))(var54, var56, var55) /* with_native on <var54:Array[Object]>*/;
7853 }
7854 var57 = ((val* (*)(val*))(var54->class->vft[COLOR_string__Object__to_s]))(var54) /* to_s on <var54:Array[Object]>*/;
7855 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var57) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
7856 if (varonce58) {
7857 var59 = varonce58;
7858 } else {
7859 var60 = " = class_";
7860 var61 = 9;
7861 var62 = string__NativeString__to_s_with_length(var60, var61);
7862 var59 = var62;
7863 varonce58 = var59;
7864 }
7865 var63 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7866 var64 = ((val* (*)(val*))(var63->class->vft[COLOR_abstract_compiler__MType__c_name]))(var63) /* c_name on <var63:MType>*/;
7867 if (varonce65) {
7868 var66 = varonce65;
7869 } else {
7870 var67 = ".name;";
7871 var68 = 6;
7872 var69 = string__NativeString__to_s_with_length(var67, var68);
7873 var66 = var69;
7874 varonce65 = var66;
7875 }
7876 var70 = NEW_array__Array(&type_array__Arraykernel__Object);
7877 { /* var70 = array_instance Array[Object] */
7878 var71 = 4;
7879 var72 = NEW_array__NativeArray(var71, &type_array__NativeArraykernel__Object);
7880 ((struct instance_array__NativeArray*)var72)->values[0] = (val*) var_res;
7881 ((struct instance_array__NativeArray*)var72)->values[1] = (val*) var59;
7882 ((struct instance_array__NativeArray*)var72)->values[2] = (val*) var64;
7883 ((struct instance_array__NativeArray*)var72)->values[3] = (val*) var66;
7884 ((void (*)(val*, val*, long))(var70->class->vft[COLOR_array__Array__with_native]))(var70, var72, var71) /* with_native on <var70:Array[Object]>*/;
7885 }
7886 var73 = ((val* (*)(val*))(var70->class->vft[COLOR_string__Object__to_s]))(var70) /* to_s on <var70:Array[Object]>*/;
7887 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var73) /* add on <self:SeparateErasureCompilerVisitor>*/;
7888 }
7889 var = var_res;
7890 goto RET_LABEL;
7891 RET_LABEL:;
7892 return var;
7893 }
7894 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: Object, RuntimeVariable): String */
7895 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
7896 val* var /* : String */;
7897 val* var1 /* : String */;
7898 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(self, p0);
7899 var = var1;
7900 RET_LABEL:;
7901 return var;
7902 }
7903 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#array_instance for (self: SeparateErasureCompilerVisitor, Array[RuntimeVariable], MType): RuntimeVariable */
7904 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(val* self, val* p0, val* p1) {
7905 val* var /* : RuntimeVariable */;
7906 val* var_array /* var array: Array[RuntimeVariable] */;
7907 val* var_elttype /* var elttype: MType */;
7908 static val* varonce;
7909 val* var1 /* : String */;
7910 char* var2 /* : NativeString */;
7911 long var3 /* : Int */;
7912 val* var4 /* : String */;
7913 val* var5 /* : MClass */;
7914 val* var_nclass /* var nclass: MClass */;
7915 val* var6 /* : MType */;
7916 static val* varonce7;
7917 val* var8 /* : String */;
7918 char* var9 /* : NativeString */;
7919 long var10 /* : Int */;
7920 val* var11 /* : String */;
7921 val* var12 /* : MClass */;
7922 val* var13 /* : Array[MType] */;
7923 long var14 /* : Int */;
7924 val* var15 /* : NativeArray[MType] */;
7925 val* var16 /* : MClassType */;
7926 val* var_arraytype /* var arraytype: MClassType */;
7927 val* var17 /* : RuntimeVariable */;
7928 val* var_res /* var res: RuntimeVariable */;
7929 static val* varonce18;
7930 val* var19 /* : String */;
7931 char* var20 /* : NativeString */;
7932 long var21 /* : Int */;
7933 val* var22 /* : String */;
7934 static val* varonce23;
7935 val* var24 /* : String */;
7936 char* var25 /* : NativeString */;
7937 long var26 /* : Int */;
7938 val* var27 /* : String */;
7939 static val* varonce28;
7940 val* var29 /* : String */;
7941 char* var30 /* : NativeString */;
7942 long var31 /* : Int */;
7943 val* var32 /* : String */;
7944 val* var33 /* : Array[Object] */;
7945 long var34 /* : Int */;
7946 val* var35 /* : NativeArray[Object] */;
7947 val* var36 /* : String */;
7948 static val* varonce37;
7949 val* var38 /* : String */;
7950 char* var39 /* : NativeString */;
7951 long var40 /* : Int */;
7952 val* var41 /* : String */;
7953 val* var42 /* : MClass */;
7954 val* var43 /* : Array[MType] */;
7955 long var44 /* : Int */;
7956 val* var45 /* : NativeArray[MType] */;
7957 val* var46 /* : MClassType */;
7958 val* var47 /* : RuntimeVariable */;
7959 val* var_nat /* var nat: RuntimeVariable */;
7960 short int var48 /* : Bool */;
7961 static val* varonce49;
7962 val* var50 /* : String */;
7963 char* var51 /* : NativeString */;
7964 long var52 /* : Int */;
7965 val* var53 /* : String */;
7966 val* var54 /* : String */;
7967 val* var55 /* : Array[Object] */;
7968 long var56 /* : Int */;
7969 val* var57 /* : NativeArray[Object] */;
7970 val* var58 /* : String */;
7971 static val* varonce59;
7972 val* var60 /* : String */;
7973 char* var61 /* : NativeString */;
7974 long var62 /* : Int */;
7975 val* var63 /* : String */;
7976 val* var64 /* : String */;
7977 static val* varonce65;
7978 val* var66 /* : String */;
7979 char* var67 /* : NativeString */;
7980 long var68 /* : Int */;
7981 val* var69 /* : String */;
7982 long var70 /* : Int */;
7983 static val* varonce71;
7984 val* var72 /* : String */;
7985 char* var73 /* : NativeString */;
7986 long var74 /* : Int */;
7987 val* var75 /* : String */;
7988 val* var76 /* : Array[Object] */;
7989 long var77 /* : Int */;
7990 val* var78 /* : NativeArray[Object] */;
7991 val* var79 /* : Object */;
7992 val* var80 /* : String */;
7993 val* var81 /* : Range[Int] */;
7994 long var82 /* : Int */;
7995 long var83 /* : Int */;
7996 val* var84 /* : Discrete */;
7997 val* var85 /* : Discrete */;
7998 val* var86 /* : Iterator[nullable Object] */;
7999 short int var87 /* : Bool */;
8000 val* var88 /* : nullable Object */;
8001 long var_i /* var i: Int */;
8002 long var89 /* : Int */;
8003 val* var90 /* : nullable Object */;
8004 val* var91 /* : MClassType */;
8005 val* var92 /* : RuntimeVariable */;
8006 val* var_r /* var r: RuntimeVariable */;
8007 static val* varonce93;
8008 val* var94 /* : String */;
8009 char* var95 /* : NativeString */;
8010 long var96 /* : Int */;
8011 val* var97 /* : String */;
8012 val* var98 /* : String */;
8013 static val* varonce99;
8014 val* var100 /* : String */;
8015 char* var101 /* : NativeString */;
8016 long var102 /* : Int */;
8017 val* var103 /* : String */;
8018 static val* varonce104;
8019 val* var105 /* : String */;
8020 char* var106 /* : NativeString */;
8021 long var107 /* : Int */;
8022 val* var108 /* : String */;
8023 static val* varonce109;
8024 val* var110 /* : String */;
8025 char* var111 /* : NativeString */;
8026 long var112 /* : Int */;
8027 val* var113 /* : String */;
8028 static val* varonce114;
8029 val* var115 /* : String */;
8030 char* var116 /* : NativeString */;
8031 long var117 /* : Int */;
8032 val* var118 /* : String */;
8033 val* var119 /* : Array[Object] */;
8034 long var120 /* : Int */;
8035 val* var121 /* : NativeArray[Object] */;
8036 val* var122 /* : Object */;
8037 val* var123 /* : String */;
8038 long var124 /* : Int */;
8039 val* var125 /* : RuntimeVariable */;
8040 val* var_length /* var length: RuntimeVariable */;
8041 static val* varonce126;
8042 val* var127 /* : String */;
8043 char* var128 /* : NativeString */;
8044 long var129 /* : Int */;
8045 val* var130 /* : String */;
8046 val* var131 /* : MMethod */;
8047 val* var132 /* : Array[RuntimeVariable] */;
8048 long var133 /* : Int */;
8049 val* var134 /* : NativeArray[RuntimeVariable] */;
8050 val* var135 /* : nullable RuntimeVariable */;
8051 static val* varonce136;
8052 val* var137 /* : String */;
8053 char* var138 /* : NativeString */;
8054 long var139 /* : Int */;
8055 val* var140 /* : String */;
8056 var_array = p0;
8057 var_elttype = p1;
8058 if (varonce) {
8059 var1 = varonce;
8060 } else {
8061 var2 = "NativeArray";
8062 var3 = 11;
8063 var4 = string__NativeString__to_s_with_length(var2, var3);
8064 var1 = var4;
8065 varonce = var1;
8066 }
8067 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var1) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8068 var_nclass = var5;
8069 var6 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_elttype) /* anchor on <self:SeparateErasureCompilerVisitor>*/;
8070 var_elttype = var6;
8071 if (varonce7) {
8072 var8 = varonce7;
8073 } else {
8074 var9 = "Array";
8075 var10 = 5;
8076 var11 = string__NativeString__to_s_with_length(var9, var10);
8077 var8 = var11;
8078 varonce7 = var8;
8079 }
8080 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var8) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8081 var13 = NEW_array__Array(&type_array__Arraymodel__MType);
8082 { /* var13 = array_instance Array[MType] */
8083 var14 = 1;
8084 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraymodel__MType);
8085 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var_elttype;
8086 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[MType]>*/;
8087 }
8088 var16 = ((val* (*)(val*, val*))(var12->class->vft[COLOR_model__MClass__get_mtype]))(var12, var13) /* get_mtype on <var12:MClass>*/;
8089 var_arraytype = var16;
8090 var17 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init_instance]))(self, var_arraytype) /* init_instance on <self:SeparateErasureCompilerVisitor>*/;
8091 var_res = var17;
8092 if (varonce18) {
8093 var19 = varonce18;
8094 } else {
8095 var20 = "{ /* ";
8096 var21 = 5;
8097 var22 = string__NativeString__to_s_with_length(var20, var21);
8098 var19 = var22;
8099 varonce18 = var19;
8100 }
8101 if (varonce23) {
8102 var24 = varonce23;
8103 } else {
8104 var25 = " = array_instance Array[";
8105 var26 = 24;
8106 var27 = string__NativeString__to_s_with_length(var25, var26);
8107 var24 = var27;
8108 varonce23 = var24;
8109 }
8110 if (varonce28) {
8111 var29 = varonce28;
8112 } else {
8113 var30 = "] */";
8114 var31 = 4;
8115 var32 = string__NativeString__to_s_with_length(var30, var31);
8116 var29 = var32;
8117 varonce28 = var29;
8118 }
8119 var33 = NEW_array__Array(&type_array__Arraykernel__Object);
8120 { /* var33 = array_instance Array[Object] */
8121 var34 = 5;
8122 var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
8123 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var19;
8124 ((struct instance_array__NativeArray*)var35)->values[1] = (val*) var_res;
8125 ((struct instance_array__NativeArray*)var35)->values[2] = (val*) var24;
8126 ((struct instance_array__NativeArray*)var35)->values[3] = (val*) var_elttype;
8127 ((struct instance_array__NativeArray*)var35)->values[4] = (val*) var29;
8128 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
8129 }
8130 var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
8131 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var36) /* add on <self:SeparateErasureCompilerVisitor>*/;
8132 if (varonce37) {
8133 var38 = varonce37;
8134 } else {
8135 var39 = "NativeArray";
8136 var40 = 11;
8137 var41 = string__NativeString__to_s_with_length(var39, var40);
8138 var38 = var41;
8139 varonce37 = var38;
8140 }
8141 var42 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var38) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8142 var43 = NEW_array__Array(&type_array__Arraymodel__MType);
8143 { /* var43 = array_instance Array[MType] */
8144 var44 = 1;
8145 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraymodel__MType);
8146 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_elttype;
8147 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[MType]>*/;
8148 }
8149 var46 = ((val* (*)(val*, val*))(var42->class->vft[COLOR_model__MClass__get_mtype]))(var42, var43) /* get_mtype on <var42:MClass>*/;
8150 var47 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var46) /* new_var on <self:SeparateErasureCompilerVisitor>*/;
8151 var_nat = var47;
8152 var48 = 1;
8153 ((void (*)(val*, short int))(var_nat->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_nat, var48) /* is_exact= on <var_nat:RuntimeVariable>*/;
8154 if (varonce49) {
8155 var50 = varonce49;
8156 } else {
8157 var51 = "NEW_";
8158 var52 = 4;
8159 var53 = string__NativeString__to_s_with_length(var51, var52);
8160 var50 = var53;
8161 varonce49 = var50;
8162 }
8163 var54 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8164 var55 = NEW_array__Array(&type_array__Arraykernel__Object);
8165 { /* var55 = array_instance Array[Object] */
8166 var56 = 2;
8167 var57 = NEW_array__NativeArray(var56, &type_array__NativeArraykernel__Object);
8168 ((struct instance_array__NativeArray*)var57)->values[0] = (val*) var50;
8169 ((struct instance_array__NativeArray*)var57)->values[1] = (val*) var54;
8170 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_array__Array__with_native]))(var55, var57, var56) /* with_native on <var55:Array[Object]>*/;
8171 }
8172 var58 = ((val* (*)(val*))(var55->class->vft[COLOR_string__Object__to_s]))(var55) /* to_s on <var55:Array[Object]>*/;
8173 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var58) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
8174 if (varonce59) {
8175 var60 = varonce59;
8176 } else {
8177 var61 = " = NEW_";
8178 var62 = 7;
8179 var63 = string__NativeString__to_s_with_length(var61, var62);
8180 var60 = var63;
8181 varonce59 = var60;
8182 }
8183 var64 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8184 if (varonce65) {
8185 var66 = varonce65;
8186 } else {
8187 var67 = "(";
8188 var68 = 1;
8189 var69 = string__NativeString__to_s_with_length(var67, var68);
8190 var66 = var69;
8191 varonce65 = var66;
8192 }
8193 var70 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8194 if (varonce71) {
8195 var72 = varonce71;
8196 } else {
8197 var73 = ");";
8198 var74 = 2;
8199 var75 = string__NativeString__to_s_with_length(var73, var74);
8200 var72 = var75;
8201 varonce71 = var72;
8202 }
8203 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
8204 { /* var76 = array_instance Array[Object] */
8205 var77 = 6;
8206 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
8207 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var_nat;
8208 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var60;
8209 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var64;
8210 ((struct instance_array__NativeArray*)var78)->values[3] = (val*) var66;
8211 var79 = BOX_kernel__Int(var70); /* autobox from Int to Object */
8212 ((struct instance_array__NativeArray*)var78)->values[4] = (val*) var79;
8213 ((struct instance_array__NativeArray*)var78)->values[5] = (val*) var72;
8214 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
8215 }
8216 var80 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
8217 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var80) /* add on <self:SeparateErasureCompilerVisitor>*/;
8218 var81 = NEW_range__Range(&type_range__Rangekernel__Int);
8219 var82 = 0;
8220 var83 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8221 var84 = BOX_kernel__Int(var82); /* autobox from Int to Discrete */
8222 var85 = BOX_kernel__Int(var83); /* autobox from Int to Discrete */
8223 ((void (*)(val*, val*, val*))(var81->class->vft[COLOR_range__Range__without_last]))(var81, var84, var85) /* without_last on <var81:Range[Int]>*/;
8224 var86 = ((val* (*)(val*))(var81->class->vft[COLOR_abstract_collection__Collection__iterator]))(var81) /* iterator on <var81:Range[Int]>*/;
8225 for(;;) {
8226 var87 = ((short int (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var86) /* is_ok on <var86:Iterator[nullable Object]>*/;
8227 if(!var87) break;
8228 var88 = ((val* (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__item]))(var86) /* item on <var86:Iterator[nullable Object]>*/;
8229 var89 = ((struct instance_kernel__Int*)var88)->value; /* autounbox from nullable Object to Int */;
8230 var_i = var89;
8231 var90 = ((val* (*)(val*, long))(var_array->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_array, var_i) /* [] on <var_array:Array[RuntimeVariable]>*/;
8232 var91 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__object_type]))(self) /* object_type on <self:SeparateErasureCompilerVisitor>*/;
8233 var92 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var90, var91) /* autobox on <self:SeparateErasureCompilerVisitor>*/;
8234 var_r = var92;
8235 if (varonce93) {
8236 var94 = varonce93;
8237 } else {
8238 var95 = "((struct instance_";
8239 var96 = 18;
8240 var97 = string__NativeString__to_s_with_length(var95, var96);
8241 var94 = var97;
8242 varonce93 = var94;
8243 }
8244 var98 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8245 if (varonce99) {
8246 var100 = varonce99;
8247 } else {
8248 var101 = "*)";
8249 var102 = 2;
8250 var103 = string__NativeString__to_s_with_length(var101, var102);
8251 var100 = var103;
8252 varonce99 = var100;
8253 }
8254 if (varonce104) {
8255 var105 = varonce104;
8256 } else {
8257 var106 = ")->values[";
8258 var107 = 10;
8259 var108 = string__NativeString__to_s_with_length(var106, var107);
8260 var105 = var108;
8261 varonce104 = var105;
8262 }
8263 if (varonce109) {
8264 var110 = varonce109;
8265 } else {
8266 var111 = "] = (val*) ";
8267 var112 = 11;
8268 var113 = string__NativeString__to_s_with_length(var111, var112);
8269 var110 = var113;
8270 varonce109 = var110;
8271 }
8272 if (varonce114) {
8273 var115 = varonce114;
8274 } else {
8275 var116 = ";";
8276 var117 = 1;
8277 var118 = string__NativeString__to_s_with_length(var116, var117);
8278 var115 = var118;
8279 varonce114 = var115;
8280 }
8281 var119 = NEW_array__Array(&type_array__Arraykernel__Object);
8282 { /* var119 = array_instance Array[Object] */
8283 var120 = 9;
8284 var121 = NEW_array__NativeArray(var120, &type_array__NativeArraykernel__Object);
8285 ((struct instance_array__NativeArray*)var121)->values[0] = (val*) var94;
8286 ((struct instance_array__NativeArray*)var121)->values[1] = (val*) var98;
8287 ((struct instance_array__NativeArray*)var121)->values[2] = (val*) var100;
8288 ((struct instance_array__NativeArray*)var121)->values[3] = (val*) var_nat;
8289 ((struct instance_array__NativeArray*)var121)->values[4] = (val*) var105;
8290 var122 = BOX_kernel__Int(var_i); /* autobox from Int to Object */
8291 ((struct instance_array__NativeArray*)var121)->values[5] = (val*) var122;
8292 ((struct instance_array__NativeArray*)var121)->values[6] = (val*) var110;
8293 ((struct instance_array__NativeArray*)var121)->values[7] = (val*) var_r;
8294 ((struct instance_array__NativeArray*)var121)->values[8] = (val*) var115;
8295 ((void (*)(val*, val*, long))(var119->class->vft[COLOR_array__Array__with_native]))(var119, var121, var120) /* with_native on <var119:Array[Object]>*/;
8296 }
8297 var123 = ((val* (*)(val*))(var119->class->vft[COLOR_string__Object__to_s]))(var119) /* to_s on <var119:Array[Object]>*/;
8298 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var123) /* add on <self:SeparateErasureCompilerVisitor>*/;
8299 CONTINUE_label: (void)0;
8300 ((void (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__next]))(var86) /* next on <var86:Iterator[nullable Object]>*/;
8301 }
8302 BREAK_label: (void)0;
8303 var124 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8304 var125 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__int_instance]))(self, var124) /* int_instance on <self:SeparateErasureCompilerVisitor>*/;
8305 var_length = var125;
8306 if (varonce126) {
8307 var127 = varonce126;
8308 } else {
8309 var128 = "with_native";
8310 var129 = 11;
8311 var130 = string__NativeString__to_s_with_length(var128, var129);
8312 var127 = var130;
8313 varonce126 = var127;
8314 }
8315 var131 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_property]))(self, var127, var_arraytype) /* get_property on <self:SeparateErasureCompilerVisitor>*/;
8316 var132 = NEW_array__Array(&type_array__Arrayabstract_compiler__RuntimeVariable);
8317 { /* var132 = array_instance Array[RuntimeVariable] */
8318 var133 = 3;
8319 var134 = NEW_array__NativeArray(var133, &type_array__NativeArrayabstract_compiler__RuntimeVariable);
8320 ((struct instance_array__NativeArray*)var134)->values[0] = (val*) var_res;
8321 ((struct instance_array__NativeArray*)var134)->values[1] = (val*) var_nat;
8322 ((struct instance_array__NativeArray*)var134)->values[2] = (val*) var_length;
8323 ((void (*)(val*, val*, long))(var132->class->vft[COLOR_array__Array__with_native]))(var132, var134, var133) /* with_native on <var132:Array[RuntimeVariable]>*/;
8324 }
8325 var135 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__send]))(self, var131, var132) /* send on <self:SeparateErasureCompilerVisitor>*/;
8326 var135;
8327 if (varonce136) {
8328 var137 = varonce136;
8329 } else {
8330 var138 = "}";
8331 var139 = 1;
8332 var140 = string__NativeString__to_s_with_length(var138, var139);
8333 var137 = var140;
8334 varonce136 = var137;
8335 }
8336 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var137) /* add on <self:SeparateErasureCompilerVisitor>*/;
8337 var = var_res;
8338 goto RET_LABEL;
8339 RET_LABEL:;
8340 return var;
8341 }
8342 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#array_instance for (self: Object, Array[RuntimeVariable], MType): RuntimeVariable */
8343 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(val* self, val* p0, val* p1) {
8344 val* var /* : RuntimeVariable */;
8345 val* var1 /* : RuntimeVariable */;
8346 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(self, p0, p1);
8347 var = var1;
8348 RET_LABEL:;
8349 return var;
8350 }
8351 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: SeparateErasureCompilerVisitor, MType, Array[RuntimeVariable]) */
8352 void separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
8353 val* var_ret_type /* var ret_type: MType */;
8354 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
8355 short int var /* : Bool */;
8356 int cltype;
8357 int idtype;
8358 const char* var_class_name;
8359 val* var_ret /* var ret: MClassType */;
8360 static val* varonce;
8361 val* var1 /* : String */;
8362 char* var2 /* : NativeString */;
8363 long var3 /* : Int */;
8364 val* var4 /* : String */;
8365 val* var5 /* : MClass */;
8366 val* var6 /* : String */;
8367 val* var7 /* : Array[Object] */;
8368 long var8 /* : Int */;
8369 val* var9 /* : NativeArray[Object] */;
8370 val* var10 /* : String */;
8371 static val* varonce11;
8372 val* var12 /* : String */;
8373 char* var13 /* : NativeString */;
8374 long var14 /* : Int */;
8375 val* var15 /* : String */;
8376 val* var16 /* : MClass */;
8377 val* var17 /* : String */;
8378 static val* varonce18;
8379 val* var19 /* : String */;
8380 char* var20 /* : NativeString */;
8381 long var21 /* : Int */;
8382 val* var22 /* : String */;
8383 long var23 /* : Int */;
8384 val* var24 /* : nullable Object */;
8385 static val* varonce25;
8386 val* var26 /* : String */;
8387 char* var27 /* : NativeString */;
8388 long var28 /* : Int */;
8389 val* var29 /* : String */;
8390 val* var30 /* : Array[Object] */;
8391 long var31 /* : Int */;
8392 val* var32 /* : NativeArray[Object] */;
8393 val* var33 /* : String */;
8394 val* var34 /* : RuntimeVariable */;
8395 var_ret_type = p0;
8396 var_arguments = p1;
8397 /* <var_ret_type:MType> isa MClassType */
8398 cltype = type_model__MClassType.color;
8399 idtype = type_model__MClassType.id;
8400 if(cltype >= var_ret_type->type->table_size) {
8401 var = 0;
8402 } else {
8403 var = var_ret_type->type->type_table[cltype] == idtype;
8404 }
8405 if (!var) {
8406 var_class_name = var_ret_type == NULL ? "null" : var_ret_type->type->name;
8407 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
8408 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 611);
8409 show_backtrace(1);
8410 }
8411 var_ret = var_ret_type;
8412 if (varonce) {
8413 var1 = varonce;
8414 } else {
8415 var2 = "NEW_";
8416 var3 = 4;
8417 var4 = string__NativeString__to_s_with_length(var2, var3);
8418 var1 = var4;
8419 varonce = var1;
8420 }
8421 var5 = ((val* (*)(val*))(var_ret->class->vft[COLOR_model__MClassType__mclass]))(var_ret) /* mclass on <var_ret:MClassType>*/;
8422 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var5) /* c_name on <var5:MClass>*/;
8423 var7 = NEW_array__Array(&type_array__Arraykernel__Object);
8424 { /* var7 = array_instance Array[Object] */
8425 var8 = 2;
8426 var9 = NEW_array__NativeArray(var8, &type_array__NativeArraykernel__Object);
8427 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var1;
8428 ((struct instance_array__NativeArray*)var9)->values[1] = (val*) var6;
8429 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Object]>*/;
8430 }
8431 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_string__Object__to_s]))(var7) /* to_s on <var7:Array[Object]>*/;
8432 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var10) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
8433 if (varonce11) {
8434 var12 = varonce11;
8435 } else {
8436 var13 = "NEW_";
8437 var14 = 4;
8438 var15 = string__NativeString__to_s_with_length(var13, var14);
8439 var12 = var15;
8440 varonce11 = var12;
8441 }
8442 var16 = ((val* (*)(val*))(var_ret->class->vft[COLOR_model__MClassType__mclass]))(var_ret) /* mclass on <var_ret:MClassType>*/;
8443 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var16) /* c_name on <var16:MClass>*/;
8444 if (varonce18) {
8445 var19 = varonce18;
8446 } else {
8447 var20 = "(";
8448 var21 = 1;
8449 var22 = string__NativeString__to_s_with_length(var20, var21);
8450 var19 = var22;
8451 varonce18 = var19;
8452 }
8453 var23 = 1;
8454 var24 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var23) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
8455 if (varonce25) {
8456 var26 = varonce25;
8457 } else {
8458 var27 = ")";
8459 var28 = 1;
8460 var29 = string__NativeString__to_s_with_length(var27, var28);
8461 var26 = var29;
8462 varonce25 = var26;
8463 }
8464 var30 = NEW_array__Array(&type_array__Arraykernel__Object);
8465 { /* var30 = array_instance Array[Object] */
8466 var31 = 5;
8467 var32 = NEW_array__NativeArray(var31, &type_array__NativeArraykernel__Object);
8468 ((struct instance_array__NativeArray*)var32)->values[0] = (val*) var12;
8469 ((struct instance_array__NativeArray*)var32)->values[1] = (val*) var17;
8470 ((struct instance_array__NativeArray*)var32)->values[2] = (val*) var19;
8471 ((struct instance_array__NativeArray*)var32)->values[3] = (val*) var24;
8472 ((struct instance_array__NativeArray*)var32)->values[4] = (val*) var26;
8473 ((void (*)(val*, val*, long))(var30->class->vft[COLOR_array__Array__with_native]))(var30, var32, var31) /* with_native on <var30:Array[Object]>*/;
8474 }
8475 var33 = ((val* (*)(val*))(var30->class->vft[COLOR_string__Object__to_s]))(var30) /* to_s on <var30:Array[Object]>*/;
8476 var34 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var33, var_ret_type) /* new_expr on <self:SeparateErasureCompilerVisitor>*/;
8477 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var34) /* ret on <self:SeparateErasureCompilerVisitor>*/;
8478 RET_LABEL:;
8479 }
8480 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: Object, MType, Array[RuntimeVariable]) */
8481 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
8482 separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(self, p0, p1);
8483 RET_LABEL:;
8484 }