Merge: PNaCl: Added 'create_thread' function in the pnacl lib.
[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", "Receiver 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", 264);
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", 264);
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", "Receiver 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", 264);
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 /* : String */;
1383 val* var_c_instance_name /* var c_instance_name: String */;
1384 val* var4 /* : Map[MClass, Array[nullable MPropDef]] */;
1385 val* var5 /* : nullable Object */;
1386 val* var_vft /* var vft: Array[nullable MPropDef] */;
1387 val* var6 /* : Map[MClass, Array[nullable MPropDef]] */;
1388 val* var7 /* : nullable Object */;
1389 val* var_attrs /* var attrs: Array[nullable MPropDef] */;
1390 val* var8 /* : Map[MClass, Array[nullable MClass]] */;
1391 val* var9 /* : nullable Object */;
1392 val* var_class_table /* var class_table: Array[nullable MClass] */;
1393 val* var10 /* : AbstractCompilerVisitor */;
1394 val* var_v /* var v: SeparateCompilerVisitor */;
1395 static val* varonce;
1396 val* var11 /* : String */;
1397 char* var12 /* : NativeString */;
1398 long var13 /* : Int */;
1399 val* var14 /* : String */;
1400 static val* varonce15;
1401 val* var16 /* : String */;
1402 char* var17 /* : NativeString */;
1403 long var18 /* : Int */;
1404 val* var19 /* : String */;
1405 val* var20 /* : Array[Object] */;
1406 long var21 /* : Int */;
1407 val* var22 /* : NativeArray[Object] */;
1408 val* var23 /* : String */;
1409 static val* varonce24;
1410 val* var25 /* : String */;
1411 char* var26 /* : NativeString */;
1412 long var27 /* : Int */;
1413 val* var28 /* : String */;
1414 val* var29 /* : Array[Object] */;
1415 long var30 /* : Int */;
1416 val* var31 /* : NativeArray[Object] */;
1417 val* var32 /* : String */;
1418 static val* varonce33;
1419 val* var34 /* : String */;
1420 char* var35 /* : NativeString */;
1421 long var36 /* : Int */;
1422 val* var37 /* : String */;
1423 static val* varonce38;
1424 val* var39 /* : String */;
1425 char* var40 /* : NativeString */;
1426 long var41 /* : Int */;
1427 val* var42 /* : String */;
1428 val* var43 /* : Array[Object] */;
1429 long var44 /* : Int */;
1430 val* var45 /* : NativeArray[Object] */;
1431 val* var46 /* : String */;
1432 static val* varonce47;
1433 val* var48 /* : String */;
1434 char* var49 /* : NativeString */;
1435 long var50 /* : Int */;
1436 val* var51 /* : String */;
1437 static val* varonce52;
1438 val* var53 /* : String */;
1439 char* var54 /* : NativeString */;
1440 long var55 /* : Int */;
1441 val* var56 /* : String */;
1442 val* var57 /* : Array[Object] */;
1443 long var58 /* : Int */;
1444 val* var59 /* : NativeArray[Object] */;
1445 val* var60 /* : String */;
1446 static val* varonce61;
1447 val* var62 /* : String */;
1448 char* var63 /* : NativeString */;
1449 long var64 /* : Int */;
1450 val* var65 /* : String */;
1451 static val* varonce66;
1452 val* var67 /* : String */;
1453 char* var68 /* : NativeString */;
1454 long var69 /* : Int */;
1455 val* var70 /* : String */;
1456 val* var71 /* : Array[Object] */;
1457 long var72 /* : Int */;
1458 val* var73 /* : NativeArray[Object] */;
1459 val* var74 /* : String */;
1460 val* var75 /* : nullable Layout[MClass] */;
1461 val* var76 /* : Map[Object, Int] */;
1462 val* var77 /* : nullable Object */;
1463 static val* varonce78;
1464 val* var79 /* : String */;
1465 char* var80 /* : NativeString */;
1466 long var81 /* : Int */;
1467 val* var82 /* : String */;
1468 val* var83 /* : Array[Object] */;
1469 long var84 /* : Int */;
1470 val* var85 /* : NativeArray[Object] */;
1471 val* var86 /* : String */;
1472 static val* varonce87;
1473 val* var88 /* : String */;
1474 char* var89 /* : NativeString */;
1475 long var90 /* : Int */;
1476 val* var91 /* : String */;
1477 val* var92 /* : String */;
1478 static val* varonce93;
1479 val* var94 /* : String */;
1480 char* var95 /* : NativeString */;
1481 long var96 /* : Int */;
1482 val* var97 /* : String */;
1483 val* var98 /* : Array[Object] */;
1484 long var99 /* : Int */;
1485 val* var100 /* : NativeArray[Object] */;
1486 val* var101 /* : String */;
1487 long var102 /* : Int */;
1488 static val* varonce103;
1489 val* var104 /* : String */;
1490 char* var105 /* : NativeString */;
1491 long var106 /* : Int */;
1492 val* var107 /* : String */;
1493 val* var108 /* : Array[Object] */;
1494 long var109 /* : Int */;
1495 val* var110 /* : NativeArray[Object] */;
1496 val* var111 /* : Object */;
1497 val* var112 /* : String */;
1498 val* var113 /* : nullable Layout[MClass] */;
1499 val* var_layout /* var layout: nullable Layout[MClass] */;
1500 short int var114 /* : Bool */;
1501 int cltype;
1502 int idtype;
1503 val* var115 /* : Map[Object, Int] */;
1504 val* var116 /* : nullable Object */;
1505 static val* varonce117;
1506 val* var118 /* : String */;
1507 char* var119 /* : NativeString */;
1508 long var120 /* : Int */;
1509 val* var121 /* : String */;
1510 val* var122 /* : Array[Object] */;
1511 long var123 /* : Int */;
1512 val* var124 /* : NativeArray[Object] */;
1513 val* var125 /* : String */;
1514 val* var126 /* : Map[Object, Int] */;
1515 val* var127 /* : nullable Object */;
1516 static val* varonce128;
1517 val* var129 /* : String */;
1518 char* var130 /* : NativeString */;
1519 long var131 /* : Int */;
1520 val* var132 /* : String */;
1521 val* var133 /* : Array[Object] */;
1522 long var134 /* : Int */;
1523 val* var135 /* : NativeArray[Object] */;
1524 val* var136 /* : String */;
1525 short int var137 /* : Bool */;
1526 static val* varonce138;
1527 val* var139 /* : String */;
1528 char* var140 /* : NativeString */;
1529 long var141 /* : Int */;
1530 val* var142 /* : String */;
1531 val* var143 /* : Array[Object] */;
1532 long var144 /* : Int */;
1533 val* var145 /* : NativeArray[Object] */;
1534 val* var146 /* : String */;
1535 static val* varonce147;
1536 val* var148 /* : String */;
1537 char* var149 /* : NativeString */;
1538 long var150 /* : Int */;
1539 val* var151 /* : String */;
1540 static val* varonce152;
1541 val* var153 /* : String */;
1542 char* var154 /* : NativeString */;
1543 long var155 /* : Int */;
1544 val* var156 /* : String */;
1545 val* var157 /* : Array[Object] */;
1546 long var158 /* : Int */;
1547 val* var159 /* : NativeArray[Object] */;
1548 val* var160 /* : String */;
1549 static val* varonce161;
1550 val* var162 /* : String */;
1551 char* var163 /* : NativeString */;
1552 long var164 /* : Int */;
1553 val* var165 /* : String */;
1554 static val* varonce166;
1555 val* var167 /* : String */;
1556 char* var168 /* : NativeString */;
1557 long var169 /* : Int */;
1558 val* var170 /* : String */;
1559 static val* varonce171;
1560 val* var172 /* : String */;
1561 char* var173 /* : NativeString */;
1562 long var174 /* : Int */;
1563 val* var175 /* : String */;
1564 val* var176 /* : Array[Object] */;
1565 long var177 /* : Int */;
1566 val* var178 /* : NativeArray[Object] */;
1567 val* var179 /* : String */;
1568 static val* varonce180;
1569 val* var181 /* : String */;
1570 char* var182 /* : NativeString */;
1571 long var183 /* : Int */;
1572 val* var184 /* : String */;
1573 val* var185 /* : Range[Int] */;
1574 long var186 /* : Int */;
1575 long var187 /* : Int */;
1576 val* var188 /* : Discrete */;
1577 val* var189 /* : Discrete */;
1578 val* var190 /* : Iterator[nullable Object] */;
1579 short int var191 /* : Bool */;
1580 val* var192 /* : nullable Object */;
1581 long var_i /* var i: Int */;
1582 long var193 /* : Int */;
1583 val* var194 /* : nullable Object */;
1584 val* var_mpropdef /* var mpropdef: nullable MPropDef */;
1585 val* var195 /* : null */;
1586 short int var196 /* : Bool */;
1587 static val* varonce197;
1588 val* var198 /* : String */;
1589 char* var199 /* : NativeString */;
1590 long var200 /* : Int */;
1591 val* var201 /* : String */;
1592 short int var202 /* : Bool */;
1593 short int var203 /* : Bool */;
1594 short int var_ /* var : Bool */;
1595 val* var204 /* : MClassDef */;
1596 val* var205 /* : MClassType */;
1597 val* var206 /* : String */;
1598 static val* varonce207;
1599 val* var208 /* : String */;
1600 char* var209 /* : NativeString */;
1601 long var210 /* : Int */;
1602 val* var211 /* : String */;
1603 short int var212 /* : Bool */;
1604 static val* varonce213;
1605 val* var214 /* : String */;
1606 char* var215 /* : NativeString */;
1607 long var216 /* : Int */;
1608 val* var217 /* : String */;
1609 val* var218 /* : String */;
1610 val* var219 /* : Array[Object] */;
1611 long var220 /* : Int */;
1612 val* var221 /* : NativeArray[Object] */;
1613 val* var222 /* : String */;
1614 static val* varonce223;
1615 val* var224 /* : String */;
1616 char* var225 /* : NativeString */;
1617 long var226 /* : Int */;
1618 val* var227 /* : String */;
1619 val* var228 /* : String */;
1620 static val* varonce229;
1621 val* var230 /* : String */;
1622 char* var231 /* : NativeString */;
1623 long var232 /* : Int */;
1624 val* var233 /* : String */;
1625 val* var234 /* : MModule */;
1626 static val* varonce235;
1627 val* var236 /* : String */;
1628 char* var237 /* : NativeString */;
1629 long var238 /* : Int */;
1630 val* var239 /* : String */;
1631 static val* varonce240;
1632 val* var241 /* : String */;
1633 char* var242 /* : NativeString */;
1634 long var243 /* : Int */;
1635 val* var244 /* : String */;
1636 static val* varonce245;
1637 val* var246 /* : String */;
1638 char* var247 /* : NativeString */;
1639 long var248 /* : Int */;
1640 val* var249 /* : String */;
1641 val* var250 /* : Array[Object] */;
1642 long var251 /* : Int */;
1643 val* var252 /* : NativeArray[Object] */;
1644 val* var253 /* : String */;
1645 val* var254 /* : String */;
1646 val* var255 /* : Array[Object] */;
1647 long var256 /* : Int */;
1648 val* var257 /* : NativeArray[Object] */;
1649 val* var258 /* : String */;
1650 static val* varonce259;
1651 val* var260 /* : String */;
1652 char* var261 /* : NativeString */;
1653 long var262 /* : Int */;
1654 val* var263 /* : String */;
1655 val* var264 /* : String */;
1656 static val* varonce265;
1657 val* var266 /* : String */;
1658 char* var267 /* : NativeString */;
1659 long var268 /* : Int */;
1660 val* var269 /* : String */;
1661 val* var270 /* : MModule */;
1662 static val* varonce271;
1663 val* var272 /* : String */;
1664 char* var273 /* : NativeString */;
1665 long var274 /* : Int */;
1666 val* var275 /* : String */;
1667 static val* varonce276;
1668 val* var277 /* : String */;
1669 char* var278 /* : NativeString */;
1670 long var279 /* : Int */;
1671 val* var280 /* : String */;
1672 static val* varonce281;
1673 val* var282 /* : String */;
1674 char* var283 /* : NativeString */;
1675 long var284 /* : Int */;
1676 val* var285 /* : String */;
1677 val* var286 /* : Array[Object] */;
1678 long var287 /* : Int */;
1679 val* var288 /* : NativeArray[Object] */;
1680 val* var289 /* : String */;
1681 static val* varonce290;
1682 val* var291 /* : String */;
1683 char* var292 /* : NativeString */;
1684 long var293 /* : Int */;
1685 val* var294 /* : String */;
1686 static val* varonce295;
1687 val* var296 /* : String */;
1688 char* var297 /* : NativeString */;
1689 long var298 /* : Int */;
1690 val* var299 /* : String */;
1691 static val* varonce300;
1692 val* var301 /* : String */;
1693 char* var302 /* : NativeString */;
1694 long var303 /* : Int */;
1695 val* var304 /* : String */;
1696 static val* varonce305;
1697 val* var306 /* : String */;
1698 char* var307 /* : NativeString */;
1699 long var308 /* : Int */;
1700 val* var309 /* : String */;
1701 val* var310 /* : Array[Object] */;
1702 long var311 /* : Int */;
1703 val* var312 /* : NativeArray[Object] */;
1704 val* var313 /* : String */;
1705 long var314 /* : Int */;
1706 static val* varonce315;
1707 val* var316 /* : String */;
1708 char* var317 /* : NativeString */;
1709 long var318 /* : Int */;
1710 val* var319 /* : String */;
1711 val* var320 /* : Array[Object] */;
1712 long var321 /* : Int */;
1713 val* var322 /* : NativeArray[Object] */;
1714 val* var323 /* : Object */;
1715 val* var324 /* : String */;
1716 static val* varonce325;
1717 val* var326 /* : String */;
1718 char* var327 /* : NativeString */;
1719 long var328 /* : Int */;
1720 val* var329 /* : String */;
1721 val* var330 /* : Iterator[nullable Object] */;
1722 short int var331 /* : Bool */;
1723 val* var332 /* : nullable Object */;
1724 val* var_msuper /* var msuper: nullable MClass */;
1725 val* var333 /* : null */;
1726 short int var334 /* : Bool */;
1727 static val* varonce335;
1728 val* var336 /* : String */;
1729 char* var337 /* : NativeString */;
1730 long var338 /* : Int */;
1731 val* var339 /* : String */;
1732 val* var340 /* : nullable Layout[MClass] */;
1733 val* var341 /* : Map[Object, Int] */;
1734 val* var342 /* : nullable Object */;
1735 static val* varonce343;
1736 val* var344 /* : String */;
1737 char* var345 /* : NativeString */;
1738 long var346 /* : Int */;
1739 val* var347 /* : String */;
1740 static val* varonce348;
1741 val* var349 /* : String */;
1742 char* var350 /* : NativeString */;
1743 long var351 /* : Int */;
1744 val* var352 /* : String */;
1745 val* var353 /* : Array[Object] */;
1746 long var354 /* : Int */;
1747 val* var355 /* : NativeArray[Object] */;
1748 val* var356 /* : String */;
1749 static val* varonce358;
1750 val* var359 /* : String */;
1751 char* var360 /* : NativeString */;
1752 long var361 /* : Int */;
1753 val* var362 /* : String */;
1754 static val* varonce363;
1755 val* var364 /* : String */;
1756 char* var365 /* : NativeString */;
1757 long var366 /* : Int */;
1758 val* var367 /* : String */;
1759 val* var368 /* : String */;
1760 static val* varonce369;
1761 val* var370 /* : String */;
1762 char* var371 /* : NativeString */;
1763 long var372 /* : Int */;
1764 val* var373 /* : String */;
1765 short int var374 /* : Bool */;
1766 short int var375 /* : Bool */;
1767 val* var376 /* : MClass */;
1768 val* var377 /* : String */;
1769 static val* varonce378;
1770 val* var379 /* : String */;
1771 char* var380 /* : NativeString */;
1772 long var381 /* : Int */;
1773 val* var382 /* : String */;
1774 short int var383 /* : Bool */;
1775 short int var_384 /* var : Bool */;
1776 val* var385 /* : MClass */;
1777 val* var386 /* : MClassKind */;
1778 val* var387 /* : MClassKind */;
1779 short int var388 /* : Bool */;
1780 val* var389 /* : CodeWriter */;
1781 static val* varonce390;
1782 val* var391 /* : String */;
1783 char* var392 /* : NativeString */;
1784 long var393 /* : Int */;
1785 val* var394 /* : String */;
1786 static val* varonce395;
1787 val* var396 /* : String */;
1788 char* var397 /* : NativeString */;
1789 long var398 /* : Int */;
1790 val* var399 /* : String */;
1791 val* var400 /* : Array[Object] */;
1792 long var401 /* : Int */;
1793 val* var402 /* : NativeArray[Object] */;
1794 val* var403 /* : String */;
1795 val* var404 /* : CodeWriter */;
1796 static val* varonce405;
1797 val* var406 /* : String */;
1798 char* var407 /* : NativeString */;
1799 long var408 /* : Int */;
1800 val* var409 /* : String */;
1801 val* var410 /* : CodeWriter */;
1802 val* var411 /* : String */;
1803 static val* varonce412;
1804 val* var413 /* : String */;
1805 char* var414 /* : NativeString */;
1806 long var415 /* : Int */;
1807 val* var416 /* : String */;
1808 val* var417 /* : Array[Object] */;
1809 long var418 /* : Int */;
1810 val* var419 /* : NativeArray[Object] */;
1811 val* var420 /* : String */;
1812 val* var421 /* : CodeWriter */;
1813 static val* varonce422;
1814 val* var423 /* : String */;
1815 char* var424 /* : NativeString */;
1816 long var425 /* : Int */;
1817 val* var426 /* : String */;
1818 static val* varonce427;
1819 val* var428 /* : String */;
1820 char* var429 /* : NativeString */;
1821 long var430 /* : Int */;
1822 val* var431 /* : String */;
1823 val* var432 /* : Array[Object] */;
1824 long var433 /* : Int */;
1825 val* var434 /* : NativeArray[Object] */;
1826 val* var435 /* : String */;
1827 static val* varonce436;
1828 val* var437 /* : String */;
1829 char* var438 /* : NativeString */;
1830 long var439 /* : Int */;
1831 val* var440 /* : String */;
1832 static val* varonce441;
1833 val* var442 /* : String */;
1834 char* var443 /* : NativeString */;
1835 long var444 /* : Int */;
1836 val* var445 /* : String */;
1837 val* var446 /* : String */;
1838 static val* varonce447;
1839 val* var448 /* : String */;
1840 char* var449 /* : NativeString */;
1841 long var450 /* : Int */;
1842 val* var451 /* : String */;
1843 val* var452 /* : Array[Object] */;
1844 long var453 /* : Int */;
1845 val* var454 /* : NativeArray[Object] */;
1846 val* var455 /* : String */;
1847 static val* varonce456;
1848 val* var457 /* : String */;
1849 char* var458 /* : NativeString */;
1850 long var459 /* : Int */;
1851 val* var460 /* : String */;
1852 static val* varonce461;
1853 val* var462 /* : String */;
1854 char* var463 /* : NativeString */;
1855 long var464 /* : Int */;
1856 val* var465 /* : String */;
1857 val* var466 /* : Array[Object] */;
1858 long var467 /* : Int */;
1859 val* var468 /* : NativeArray[Object] */;
1860 val* var469 /* : String */;
1861 static val* varonce470;
1862 val* var471 /* : String */;
1863 char* var472 /* : NativeString */;
1864 long var473 /* : Int */;
1865 val* var474 /* : String */;
1866 val* var475 /* : String */;
1867 static val* varonce476;
1868 val* var477 /* : String */;
1869 char* var478 /* : NativeString */;
1870 long var479 /* : Int */;
1871 val* var480 /* : String */;
1872 val* var481 /* : String */;
1873 static val* varonce482;
1874 val* var483 /* : String */;
1875 char* var484 /* : NativeString */;
1876 long var485 /* : Int */;
1877 val* var486 /* : String */;
1878 val* var487 /* : Array[Object] */;
1879 long var488 /* : Int */;
1880 val* var489 /* : NativeArray[Object] */;
1881 val* var490 /* : String */;
1882 static val* varonce491;
1883 val* var492 /* : String */;
1884 char* var493 /* : NativeString */;
1885 long var494 /* : Int */;
1886 val* var495 /* : String */;
1887 static val* varonce496;
1888 val* var497 /* : String */;
1889 char* var498 /* : NativeString */;
1890 long var499 /* : Int */;
1891 val* var500 /* : String */;
1892 static val* varonce501;
1893 val* var502 /* : String */;
1894 char* var503 /* : NativeString */;
1895 long var504 /* : Int */;
1896 val* var505 /* : String */;
1897 val* var506 /* : Array[Object] */;
1898 long var507 /* : Int */;
1899 val* var508 /* : NativeArray[Object] */;
1900 val* var509 /* : String */;
1901 static val* varonce510;
1902 val* var511 /* : String */;
1903 char* var512 /* : NativeString */;
1904 long var513 /* : Int */;
1905 val* var514 /* : String */;
1906 val* var515 /* : Array[Object] */;
1907 long var516 /* : Int */;
1908 val* var517 /* : NativeArray[Object] */;
1909 val* var518 /* : String */;
1910 static val* varonce519;
1911 val* var520 /* : String */;
1912 char* var521 /* : NativeString */;
1913 long var522 /* : Int */;
1914 val* var523 /* : String */;
1915 static val* varonce524;
1916 val* var525 /* : String */;
1917 char* var526 /* : NativeString */;
1918 long var527 /* : Int */;
1919 val* var528 /* : String */;
1920 val* var529 /* : Array[Object] */;
1921 long var530 /* : Int */;
1922 val* var531 /* : NativeArray[Object] */;
1923 val* var532 /* : String */;
1924 static val* varonce533;
1925 val* var534 /* : String */;
1926 char* var535 /* : NativeString */;
1927 long var536 /* : Int */;
1928 val* var537 /* : String */;
1929 static val* varonce538;
1930 val* var539 /* : String */;
1931 char* var540 /* : NativeString */;
1932 long var541 /* : Int */;
1933 val* var542 /* : String */;
1934 static val* varonce543;
1935 val* var544 /* : String */;
1936 char* var545 /* : NativeString */;
1937 long var546 /* : Int */;
1938 val* var547 /* : String */;
1939 val* var548 /* : String */;
1940 static val* varonce549;
1941 val* var550 /* : String */;
1942 char* var551 /* : NativeString */;
1943 long var552 /* : Int */;
1944 val* var553 /* : String */;
1945 short int var554 /* : Bool */;
1946 val* var555 /* : CodeWriter */;
1947 static val* varonce556;
1948 val* var557 /* : String */;
1949 char* var558 /* : NativeString */;
1950 long var559 /* : Int */;
1951 val* var560 /* : String */;
1952 static val* varonce561;
1953 val* var562 /* : String */;
1954 char* var563 /* : NativeString */;
1955 long var564 /* : Int */;
1956 val* var565 /* : String */;
1957 val* var566 /* : Array[Object] */;
1958 long var567 /* : Int */;
1959 val* var568 /* : NativeArray[Object] */;
1960 val* var569 /* : String */;
1961 val* var570 /* : CodeWriter */;
1962 static val* varonce571;
1963 val* var572 /* : String */;
1964 char* var573 /* : NativeString */;
1965 long var574 /* : Int */;
1966 val* var575 /* : String */;
1967 val* var576 /* : CodeWriter */;
1968 static val* varonce577;
1969 val* var578 /* : String */;
1970 char* var579 /* : NativeString */;
1971 long var580 /* : Int */;
1972 val* var581 /* : String */;
1973 val* var582 /* : CodeWriter */;
1974 static val* varonce583;
1975 val* var584 /* : String */;
1976 char* var585 /* : NativeString */;
1977 long var586 /* : Int */;
1978 val* var587 /* : String */;
1979 static val* varonce588;
1980 val* var589 /* : String */;
1981 char* var590 /* : NativeString */;
1982 long var591 /* : Int */;
1983 val* var592 /* : String */;
1984 val* var593 /* : Array[Object] */;
1985 long var594 /* : Int */;
1986 val* var595 /* : NativeArray[Object] */;
1987 val* var596 /* : String */;
1988 val* var597 /* : String */;
1989 static val* varonce598;
1990 val* var599 /* : String */;
1991 char* var600 /* : NativeString */;
1992 long var601 /* : Int */;
1993 val* var602 /* : String */;
1994 static val* varonce603;
1995 val* var604 /* : String */;
1996 char* var605 /* : NativeString */;
1997 long var606 /* : Int */;
1998 val* var607 /* : String */;
1999 val* var608 /* : Array[Object] */;
2000 long var609 /* : Int */;
2001 val* var610 /* : NativeArray[Object] */;
2002 val* var611 /* : String */;
2003 static val* varonce612;
2004 val* var613 /* : String */;
2005 char* var614 /* : NativeString */;
2006 long var615 /* : Int */;
2007 val* var616 /* : String */;
2008 static val* varonce617;
2009 val* var618 /* : String */;
2010 char* var619 /* : NativeString */;
2011 long var620 /* : Int */;
2012 val* var621 /* : String */;
2013 val* var622 /* : Array[Object] */;
2014 long var623 /* : Int */;
2015 val* var624 /* : NativeArray[Object] */;
2016 val* var625 /* : String */;
2017 val* var626 /* : String */;
2018 static val* varonce627;
2019 val* var628 /* : String */;
2020 char* var629 /* : NativeString */;
2021 long var630 /* : Int */;
2022 val* var631 /* : String */;
2023 static val* varonce632;
2024 val* var633 /* : String */;
2025 char* var634 /* : NativeString */;
2026 long var635 /* : Int */;
2027 val* var636 /* : String */;
2028 val* var637 /* : Array[Object] */;
2029 long var638 /* : Int */;
2030 val* var639 /* : NativeArray[Object] */;
2031 val* var640 /* : String */;
2032 static val* varonce641;
2033 val* var642 /* : String */;
2034 char* var643 /* : NativeString */;
2035 long var644 /* : Int */;
2036 val* var645 /* : String */;
2037 val* var646 /* : RuntimeVariable */;
2038 val* var_res /* var res: RuntimeVariable */;
2039 short int var647 /* : Bool */;
2040 val* var648 /* : Array[MType] */;
2041 val* var649 /* : nullable Object */;
2042 val* var_mtype_elt /* var mtype_elt: MType */;
2043 static val* varonce650;
2044 val* var651 /* : String */;
2045 char* var652 /* : NativeString */;
2046 long var653 /* : Int */;
2047 val* var654 /* : String */;
2048 static val* varonce655;
2049 val* var656 /* : String */;
2050 char* var657 /* : NativeString */;
2051 long var658 /* : Int */;
2052 val* var659 /* : String */;
2053 val* var660 /* : String */;
2054 static val* varonce661;
2055 val* var662 /* : String */;
2056 char* var663 /* : NativeString */;
2057 long var664 /* : Int */;
2058 val* var665 /* : String */;
2059 val* var666 /* : Array[Object] */;
2060 long var667 /* : Int */;
2061 val* var668 /* : NativeArray[Object] */;
2062 val* var669 /* : String */;
2063 static val* varonce670;
2064 val* var671 /* : String */;
2065 char* var672 /* : NativeString */;
2066 long var673 /* : Int */;
2067 val* var674 /* : String */;
2068 val* var675 /* : Array[Object] */;
2069 long var676 /* : Int */;
2070 val* var677 /* : NativeArray[Object] */;
2071 val* var678 /* : String */;
2072 static val* varonce679;
2073 val* var680 /* : String */;
2074 char* var681 /* : NativeString */;
2075 long var682 /* : Int */;
2076 val* var683 /* : String */;
2077 static val* varonce684;
2078 val* var685 /* : String */;
2079 char* var686 /* : NativeString */;
2080 long var687 /* : Int */;
2081 val* var688 /* : String */;
2082 val* var689 /* : Array[Object] */;
2083 long var690 /* : Int */;
2084 val* var691 /* : NativeArray[Object] */;
2085 val* var692 /* : String */;
2086 static val* varonce693;
2087 val* var694 /* : String */;
2088 char* var695 /* : NativeString */;
2089 long var696 /* : Int */;
2090 val* var697 /* : String */;
2091 static val* varonce698;
2092 val* var699 /* : String */;
2093 char* var700 /* : NativeString */;
2094 long var701 /* : Int */;
2095 val* var702 /* : String */;
2096 val* var703 /* : Array[Object] */;
2097 long var704 /* : Int */;
2098 val* var705 /* : NativeArray[Object] */;
2099 val* var706 /* : String */;
2100 static val* varonce707;
2101 val* var708 /* : String */;
2102 char* var709 /* : NativeString */;
2103 long var710 /* : Int */;
2104 val* var711 /* : String */;
2105 static val* varonce712;
2106 val* var713 /* : String */;
2107 char* var714 /* : NativeString */;
2108 long var715 /* : Int */;
2109 val* var716 /* : String */;
2110 val* var717 /* : Array[Object] */;
2111 long var718 /* : Int */;
2112 val* var719 /* : NativeArray[Object] */;
2113 val* var720 /* : String */;
2114 val* var721 /* : String */;
2115 static val* varonce722;
2116 val* var723 /* : String */;
2117 char* var724 /* : NativeString */;
2118 long var725 /* : Int */;
2119 val* var726 /* : String */;
2120 static val* varonce727;
2121 val* var728 /* : String */;
2122 char* var729 /* : NativeString */;
2123 long var730 /* : Int */;
2124 val* var731 /* : String */;
2125 val* var732 /* : Array[Object] */;
2126 long var733 /* : Int */;
2127 val* var734 /* : NativeArray[Object] */;
2128 val* var735 /* : String */;
2129 static val* varonce736;
2130 val* var737 /* : String */;
2131 char* var738 /* : NativeString */;
2132 long var739 /* : Int */;
2133 val* var740 /* : String */;
2134 static val* varonce741;
2135 val* var742 /* : String */;
2136 char* var743 /* : NativeString */;
2137 long var744 /* : Int */;
2138 val* var745 /* : String */;
2139 val* var746 /* : Array[Object] */;
2140 long var747 /* : Int */;
2141 val* var748 /* : NativeArray[Object] */;
2142 val* var749 /* : String */;
2143 val* var750 /* : String */;
2144 static val* varonce751;
2145 val* var752 /* : String */;
2146 char* var753 /* : NativeString */;
2147 long var754 /* : Int */;
2148 val* var755 /* : String */;
2149 static val* varonce756;
2150 val* var757 /* : String */;
2151 char* var758 /* : NativeString */;
2152 long var759 /* : Int */;
2153 val* var760 /* : String */;
2154 val* var761 /* : Array[Object] */;
2155 long var762 /* : Int */;
2156 val* var763 /* : NativeArray[Object] */;
2157 val* var764 /* : String */;
2158 static val* varonce765;
2159 val* var766 /* : String */;
2160 char* var767 /* : NativeString */;
2161 long var768 /* : Int */;
2162 val* var769 /* : String */;
2163 val* var770 /* : RuntimeVariable */;
2164 val* var_res771 /* var res: RuntimeVariable */;
2165 short int var772 /* : Bool */;
2166 static val* varonce773;
2167 val* var774 /* : String */;
2168 char* var775 /* : NativeString */;
2169 long var776 /* : Int */;
2170 val* var777 /* : String */;
2171 long var778 /* : Int */;
2172 static val* varonce779;
2173 val* var780 /* : String */;
2174 char* var781 /* : NativeString */;
2175 long var782 /* : Int */;
2176 val* var783 /* : String */;
2177 val* var784 /* : Array[Object] */;
2178 long var785 /* : Int */;
2179 val* var786 /* : NativeArray[Object] */;
2180 val* var787 /* : Object */;
2181 val* var788 /* : String */;
2182 static val* varonce789;
2183 val* var790 /* : String */;
2184 char* var791 /* : NativeString */;
2185 long var792 /* : Int */;
2186 val* var793 /* : String */;
2187 val* var794 /* : Array[Object] */;
2188 long var795 /* : Int */;
2189 val* var796 /* : NativeArray[Object] */;
2190 val* var797 /* : String */;
2191 static val* varonce798;
2192 val* var799 /* : String */;
2193 char* var800 /* : NativeString */;
2194 long var801 /* : Int */;
2195 val* var802 /* : String */;
2196 static val* varonce803;
2197 val* var804 /* : String */;
2198 char* var805 /* : NativeString */;
2199 long var806 /* : Int */;
2200 val* var807 /* : String */;
2201 val* var808 /* : Array[Object] */;
2202 long var809 /* : Int */;
2203 val* var810 /* : NativeArray[Object] */;
2204 val* var811 /* : String */;
2205 static val* varonce812;
2206 val* var813 /* : String */;
2207 char* var814 /* : NativeString */;
2208 long var815 /* : Int */;
2209 val* var816 /* : String */;
2210 static val* varonce817;
2211 val* var818 /* : String */;
2212 char* var819 /* : NativeString */;
2213 long var820 /* : Int */;
2214 val* var821 /* : String */;
2215 val* var822 /* : Array[Object] */;
2216 long var823 /* : Int */;
2217 val* var824 /* : NativeArray[Object] */;
2218 val* var825 /* : String */;
2219 static val* varonce826;
2220 val* var827 /* : String */;
2221 char* var828 /* : NativeString */;
2222 long var829 /* : Int */;
2223 val* var830 /* : String */;
2224 var_mclass = p0;
2225 var = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
2226 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model__MClassDef__bound_mtype]))(var) /* bound_mtype on <var:MClassDef>*/;
2227 var_mtype = var1;
2228 var2 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
2229 var_c_name = var2;
2230 var3 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_separate_compiler__MClass__c_instance_name]))(var_mclass) /* c_instance_name on <var_mclass:MClass>*/;
2231 var_c_instance_name = var3;
2232 var4 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateErasureCompiler>*/;
2233 var5 = ((val* (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var4, var_mclass) /* [] on <var4:Map[MClass, Array[nullable MPropDef]]>*/;
2234 var_vft = var5;
2235 var6 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateErasureCompiler>*/;
2236 var7 = ((val* (*)(val*, val*))(var6->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var6, var_mclass) /* [] on <var6:Map[MClass, Array[nullable MPropDef]]>*/;
2237 var_attrs = var7;
2238 var8 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables]))(self) /* class_tables on <self:SeparateErasureCompiler>*/;
2239 var9 = ((val* (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var8, var_mclass) /* [] on <var8:Map[MClass, Array[nullable MClass]]>*/;
2240 var_class_table = var9;
2241 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateErasureCompiler>*/;
2242 var_v = var10;
2243 if (varonce) {
2244 var11 = varonce;
2245 } else {
2246 var12 = "/* runtime class ";
2247 var13 = 17;
2248 var14 = string__NativeString__to_s_with_length(var12, var13);
2249 var11 = var14;
2250 varonce = var11;
2251 }
2252 if (varonce15) {
2253 var16 = varonce15;
2254 } else {
2255 var17 = " */";
2256 var18 = 3;
2257 var19 = string__NativeString__to_s_with_length(var17, var18);
2258 var16 = var19;
2259 varonce15 = var16;
2260 }
2261 var20 = NEW_array__Array(&type_array__Arraykernel__Object);
2262 { /* var20 = array_instance Array[Object] */
2263 var21 = 3;
2264 var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
2265 ((struct instance_array__NativeArray*)var22)->values[0] = (val*) var11;
2266 ((struct instance_array__NativeArray*)var22)->values[1] = (val*) var_c_name;
2267 ((struct instance_array__NativeArray*)var22)->values[2] = (val*) var16;
2268 ((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
2269 }
2270 var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
2271 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var23) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2272 if (varonce24) {
2273 var25 = varonce24;
2274 } else {
2275 var26 = "class_";
2276 var27 = 6;
2277 var28 = string__NativeString__to_s_with_length(var26, var27);
2278 var25 = var28;
2279 varonce24 = var25;
2280 }
2281 var29 = NEW_array__Array(&type_array__Arraykernel__Object);
2282 { /* var29 = array_instance Array[Object] */
2283 var30 = 2;
2284 var31 = NEW_array__NativeArray(var30, &type_array__NativeArraykernel__Object);
2285 ((struct instance_array__NativeArray*)var31)->values[0] = (val*) var25;
2286 ((struct instance_array__NativeArray*)var31)->values[1] = (val*) var_c_name;
2287 ((void (*)(val*, val*, long))(var29->class->vft[COLOR_array__Array__with_native]))(var29, var31, var30) /* with_native on <var29:Array[Object]>*/;
2288 }
2289 var32 = ((val* (*)(val*))(var29->class->vft[COLOR_string__Object__to_s]))(var29) /* to_s on <var29:Array[Object]>*/;
2290 if (varonce33) {
2291 var34 = varonce33;
2292 } else {
2293 var35 = "extern const struct class class_";
2294 var36 = 32;
2295 var37 = string__NativeString__to_s_with_length(var35, var36);
2296 var34 = var37;
2297 varonce33 = var34;
2298 }
2299 if (varonce38) {
2300 var39 = varonce38;
2301 } else {
2302 var40 = ";";
2303 var41 = 1;
2304 var42 = string__NativeString__to_s_with_length(var40, var41);
2305 var39 = var42;
2306 varonce38 = var39;
2307 }
2308 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
2309 { /* var43 = array_instance Array[Object] */
2310 var44 = 3;
2311 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
2312 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var34;
2313 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var_c_name;
2314 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var39;
2315 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
2316 }
2317 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
2318 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var32, var46) /* provide_declaration on <self:SeparateErasureCompiler>*/;
2319 if (varonce47) {
2320 var48 = varonce47;
2321 } else {
2322 var49 = "extern const struct type_table type_table_";
2323 var50 = 42;
2324 var51 = string__NativeString__to_s_with_length(var49, var50);
2325 var48 = var51;
2326 varonce47 = var48;
2327 }
2328 if (varonce52) {
2329 var53 = varonce52;
2330 } else {
2331 var54 = ";";
2332 var55 = 1;
2333 var56 = string__NativeString__to_s_with_length(var54, var55);
2334 var53 = var56;
2335 varonce52 = var53;
2336 }
2337 var57 = NEW_array__Array(&type_array__Arraykernel__Object);
2338 { /* var57 = array_instance Array[Object] */
2339 var58 = 3;
2340 var59 = NEW_array__NativeArray(var58, &type_array__NativeArraykernel__Object);
2341 ((struct instance_array__NativeArray*)var59)->values[0] = (val*) var48;
2342 ((struct instance_array__NativeArray*)var59)->values[1] = (val*) var_c_name;
2343 ((struct instance_array__NativeArray*)var59)->values[2] = (val*) var53;
2344 ((void (*)(val*, val*, long))(var57->class->vft[COLOR_array__Array__with_native]))(var57, var59, var58) /* with_native on <var57:Array[Object]>*/;
2345 }
2346 var60 = ((val* (*)(val*))(var57->class->vft[COLOR_string__Object__to_s]))(var57) /* to_s on <var57:Array[Object]>*/;
2347 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var60) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2348 if (varonce61) {
2349 var62 = varonce61;
2350 } else {
2351 var63 = "const struct class class_";
2352 var64 = 25;
2353 var65 = string__NativeString__to_s_with_length(var63, var64);
2354 var62 = var65;
2355 varonce61 = var62;
2356 }
2357 if (varonce66) {
2358 var67 = varonce66;
2359 } else {
2360 var68 = " = {";
2361 var69 = 4;
2362 var70 = string__NativeString__to_s_with_length(var68, var69);
2363 var67 = var70;
2364 varonce66 = var67;
2365 }
2366 var71 = NEW_array__Array(&type_array__Arraykernel__Object);
2367 { /* var71 = array_instance Array[Object] */
2368 var72 = 3;
2369 var73 = NEW_array__NativeArray(var72, &type_array__NativeArraykernel__Object);
2370 ((struct instance_array__NativeArray*)var73)->values[0] = (val*) var62;
2371 ((struct instance_array__NativeArray*)var73)->values[1] = (val*) var_c_name;
2372 ((struct instance_array__NativeArray*)var73)->values[2] = (val*) var67;
2373 ((void (*)(val*, val*, long))(var71->class->vft[COLOR_array__Array__with_native]))(var71, var73, var72) /* with_native on <var71:Array[Object]>*/;
2374 }
2375 var74 = ((val* (*)(val*))(var71->class->vft[COLOR_string__Object__to_s]))(var71) /* to_s on <var71:Array[Object]>*/;
2376 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var74) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2377 var75 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2378 if (var75 == NULL) {
2379 fprintf(stderr, "Runtime error: %s", "Receiver is null");
2380 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 236);
2381 show_backtrace(1);
2382 } else {
2383 var76 = ((val* (*)(val*))(var75->class->vft[COLOR_layout_builders__Layout__ids]))(var75) /* ids on <var75:nullable Layout[MClass]>*/;
2384 }
2385 var77 = ((val* (*)(val*, val*))(var76->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var76, var_mclass) /* [] on <var76:Map[Object, Int](Map[MClass, Int])>*/;
2386 if (varonce78) {
2387 var79 = varonce78;
2388 } else {
2389 var80 = ",";
2390 var81 = 1;
2391 var82 = string__NativeString__to_s_with_length(var80, var81);
2392 var79 = var82;
2393 varonce78 = var79;
2394 }
2395 var83 = NEW_array__Array(&type_array__Arraykernel__Object);
2396 { /* var83 = array_instance Array[Object] */
2397 var84 = 2;
2398 var85 = NEW_array__NativeArray(var84, &type_array__NativeArraykernel__Object);
2399 ((struct instance_array__NativeArray*)var85)->values[0] = (val*) var77;
2400 ((struct instance_array__NativeArray*)var85)->values[1] = (val*) var79;
2401 ((void (*)(val*, val*, long))(var83->class->vft[COLOR_array__Array__with_native]))(var83, var85, var84) /* with_native on <var83:Array[Object]>*/;
2402 }
2403 var86 = ((val* (*)(val*))(var83->class->vft[COLOR_string__Object__to_s]))(var83) /* to_s on <var83:Array[Object]>*/;
2404 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var86) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2405 if (varonce87) {
2406 var88 = varonce87;
2407 } else {
2408 var89 = "\"";
2409 var90 = 1;
2410 var91 = string__NativeString__to_s_with_length(var89, var90);
2411 var88 = var91;
2412 varonce87 = var88;
2413 }
2414 var92 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
2415 if (varonce93) {
2416 var94 = varonce93;
2417 } else {
2418 var95 = "\", /* class_name_string */";
2419 var96 = 26;
2420 var97 = string__NativeString__to_s_with_length(var95, var96);
2421 var94 = var97;
2422 varonce93 = var94;
2423 }
2424 var98 = NEW_array__Array(&type_array__Arraykernel__Object);
2425 { /* var98 = array_instance Array[Object] */
2426 var99 = 3;
2427 var100 = NEW_array__NativeArray(var99, &type_array__NativeArraykernel__Object);
2428 ((struct instance_array__NativeArray*)var100)->values[0] = (val*) var88;
2429 ((struct instance_array__NativeArray*)var100)->values[1] = (val*) var92;
2430 ((struct instance_array__NativeArray*)var100)->values[2] = (val*) var94;
2431 ((void (*)(val*, val*, long))(var98->class->vft[COLOR_array__Array__with_native]))(var98, var100, var99) /* with_native on <var98:Array[Object]>*/;
2432 }
2433 var101 = ((val* (*)(val*))(var98->class->vft[COLOR_string__Object__to_s]))(var98) /* to_s on <var98:Array[Object]>*/;
2434 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var101) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2435 var102 = ((long (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kind_of]))(self, var_mclass) /* box_kind_of on <self:SeparateErasureCompiler>*/;
2436 if (varonce103) {
2437 var104 = varonce103;
2438 } else {
2439 var105 = ", /* box_kind */";
2440 var106 = 16;
2441 var107 = string__NativeString__to_s_with_length(var105, var106);
2442 var104 = var107;
2443 varonce103 = var104;
2444 }
2445 var108 = NEW_array__Array(&type_array__Arraykernel__Object);
2446 { /* var108 = array_instance Array[Object] */
2447 var109 = 2;
2448 var110 = NEW_array__NativeArray(var109, &type_array__NativeArraykernel__Object);
2449 var111 = BOX_kernel__Int(var102); /* autobox from Int to Object */
2450 ((struct instance_array__NativeArray*)var110)->values[0] = (val*) var111;
2451 ((struct instance_array__NativeArray*)var110)->values[1] = (val*) var104;
2452 ((void (*)(val*, val*, long))(var108->class->vft[COLOR_array__Array__with_native]))(var108, var110, var109) /* with_native on <var108:Array[Object]>*/;
2453 }
2454 var112 = ((val* (*)(val*))(var108->class->vft[COLOR_string__Object__to_s]))(var108) /* to_s on <var108:Array[Object]>*/;
2455 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var112) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2456 var113 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2457 var_layout = var113;
2458 /* <var_layout:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
2459 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
2460 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
2461 if(var_layout == NULL) {
2462 var114 = 0;
2463 } else {
2464 if(cltype >= var_layout->type->table_size) {
2465 var114 = 0;
2466 } else {
2467 var114 = var_layout->type->type_table[cltype] == idtype;
2468 }
2469 }
2470 if (var114){
2471 var115 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__masks]))(var_layout) /* masks on <var_layout:nullable Layout[MClass](PHLayout[MClass, MClass])>*/;
2472 var116 = ((val* (*)(val*, val*))(var115->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var115, var_mclass) /* [] on <var115:Map[Object, Int](Map[MClass, Int])>*/;
2473 if (varonce117) {
2474 var118 = varonce117;
2475 } else {
2476 var119 = ",";
2477 var120 = 1;
2478 var121 = string__NativeString__to_s_with_length(var119, var120);
2479 var118 = var121;
2480 varonce117 = var118;
2481 }
2482 var122 = NEW_array__Array(&type_array__Arraykernel__Object);
2483 { /* var122 = array_instance Array[Object] */
2484 var123 = 2;
2485 var124 = NEW_array__NativeArray(var123, &type_array__NativeArraykernel__Object);
2486 ((struct instance_array__NativeArray*)var124)->values[0] = (val*) var116;
2487 ((struct instance_array__NativeArray*)var124)->values[1] = (val*) var118;
2488 ((void (*)(val*, val*, long))(var122->class->vft[COLOR_array__Array__with_native]))(var122, var124, var123) /* with_native on <var122:Array[Object]>*/;
2489 }
2490 var125 = ((val* (*)(val*))(var122->class->vft[COLOR_string__Object__to_s]))(var122) /* to_s on <var122:Array[Object]>*/;
2491 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var125) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2492 } else {
2493 if (var_layout == NULL) {
2494 fprintf(stderr, "Runtime error: %s", "Receiver is null");
2495 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 243);
2496 show_backtrace(1);
2497 } else {
2498 var126 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MClass]>*/;
2499 }
2500 var127 = ((val* (*)(val*, val*))(var126->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var126, var_mclass) /* [] on <var126:Map[Object, Int](Map[MClass, Int])>*/;
2501 if (varonce128) {
2502 var129 = varonce128;
2503 } else {
2504 var130 = ",";
2505 var131 = 1;
2506 var132 = string__NativeString__to_s_with_length(var130, var131);
2507 var129 = var132;
2508 varonce128 = var129;
2509 }
2510 var133 = NEW_array__Array(&type_array__Arraykernel__Object);
2511 { /* var133 = array_instance Array[Object] */
2512 var134 = 2;
2513 var135 = NEW_array__NativeArray(var134, &type_array__NativeArraykernel__Object);
2514 ((struct instance_array__NativeArray*)var135)->values[0] = (val*) var127;
2515 ((struct instance_array__NativeArray*)var135)->values[1] = (val*) var129;
2516 ((void (*)(val*, val*, long))(var133->class->vft[COLOR_array__Array__with_native]))(var133, var135, var134) /* with_native on <var133:Array[Object]>*/;
2517 }
2518 var136 = ((val* (*)(val*))(var133->class->vft[COLOR_string__Object__to_s]))(var133) /* to_s on <var133:Array[Object]>*/;
2519 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var136) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2520 }
2521 var137 = ((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>*/;
2522 if (var137){
2523 if (varonce138) {
2524 var139 = varonce138;
2525 } else {
2526 var140 = "vts_table_";
2527 var141 = 10;
2528 var142 = string__NativeString__to_s_with_length(var140, var141);
2529 var139 = var142;
2530 varonce138 = var139;
2531 }
2532 var143 = NEW_array__Array(&type_array__Arraykernel__Object);
2533 { /* var143 = array_instance Array[Object] */
2534 var144 = 2;
2535 var145 = NEW_array__NativeArray(var144, &type_array__NativeArraykernel__Object);
2536 ((struct instance_array__NativeArray*)var145)->values[0] = (val*) var139;
2537 ((struct instance_array__NativeArray*)var145)->values[1] = (val*) var_c_name;
2538 ((void (*)(val*, val*, long))(var143->class->vft[COLOR_array__Array__with_native]))(var143, var145, var144) /* with_native on <var143:Array[Object]>*/;
2539 }
2540 var146 = ((val* (*)(val*))(var143->class->vft[COLOR_string__Object__to_s]))(var143) /* to_s on <var143:Array[Object]>*/;
2541 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var146) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2542 if (varonce147) {
2543 var148 = varonce147;
2544 } else {
2545 var149 = "&vts_table_";
2546 var150 = 11;
2547 var151 = string__NativeString__to_s_with_length(var149, var150);
2548 var148 = var151;
2549 varonce147 = var148;
2550 }
2551 if (varonce152) {
2552 var153 = varonce152;
2553 } else {
2554 var154 = ",";
2555 var155 = 1;
2556 var156 = string__NativeString__to_s_with_length(var154, var155);
2557 var153 = var156;
2558 varonce152 = var153;
2559 }
2560 var157 = NEW_array__Array(&type_array__Arraykernel__Object);
2561 { /* var157 = array_instance Array[Object] */
2562 var158 = 3;
2563 var159 = NEW_array__NativeArray(var158, &type_array__NativeArraykernel__Object);
2564 ((struct instance_array__NativeArray*)var159)->values[0] = (val*) var148;
2565 ((struct instance_array__NativeArray*)var159)->values[1] = (val*) var_c_name;
2566 ((struct instance_array__NativeArray*)var159)->values[2] = (val*) var153;
2567 ((void (*)(val*, val*, long))(var157->class->vft[COLOR_array__Array__with_native]))(var157, var159, var158) /* with_native on <var157:Array[Object]>*/;
2568 }
2569 var160 = ((val* (*)(val*))(var157->class->vft[COLOR_string__Object__to_s]))(var157) /* to_s on <var157:Array[Object]>*/;
2570 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var160) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2571 } else {
2572 if (varonce161) {
2573 var162 = varonce161;
2574 } else {
2575 var163 = "NULL,";
2576 var164 = 5;
2577 var165 = string__NativeString__to_s_with_length(var163, var164);
2578 var162 = var165;
2579 varonce161 = var162;
2580 }
2581 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var162) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2582 }
2583 if (varonce166) {
2584 var167 = varonce166;
2585 } else {
2586 var168 = "&type_table_";
2587 var169 = 12;
2588 var170 = string__NativeString__to_s_with_length(var168, var169);
2589 var167 = var170;
2590 varonce166 = var167;
2591 }
2592 if (varonce171) {
2593 var172 = varonce171;
2594 } else {
2595 var173 = ",";
2596 var174 = 1;
2597 var175 = string__NativeString__to_s_with_length(var173, var174);
2598 var172 = var175;
2599 varonce171 = var172;
2600 }
2601 var176 = NEW_array__Array(&type_array__Arraykernel__Object);
2602 { /* var176 = array_instance Array[Object] */
2603 var177 = 3;
2604 var178 = NEW_array__NativeArray(var177, &type_array__NativeArraykernel__Object);
2605 ((struct instance_array__NativeArray*)var178)->values[0] = (val*) var167;
2606 ((struct instance_array__NativeArray*)var178)->values[1] = (val*) var_c_name;
2607 ((struct instance_array__NativeArray*)var178)->values[2] = (val*) var172;
2608 ((void (*)(val*, val*, long))(var176->class->vft[COLOR_array__Array__with_native]))(var176, var178, var177) /* with_native on <var176:Array[Object]>*/;
2609 }
2610 var179 = ((val* (*)(val*))(var176->class->vft[COLOR_string__Object__to_s]))(var176) /* to_s on <var176:Array[Object]>*/;
2611 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var179) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2612 if (varonce180) {
2613 var181 = varonce180;
2614 } else {
2615 var182 = "{";
2616 var183 = 1;
2617 var184 = string__NativeString__to_s_with_length(var182, var183);
2618 var181 = var184;
2619 varonce180 = var181;
2620 }
2621 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var181) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2622 var185 = NEW_range__Range(&type_range__Rangekernel__Int);
2623 var186 = 0;
2624 var187 = ((long (*)(val*))(var_vft->class->vft[COLOR_abstract_collection__Collection__length]))(var_vft) /* length on <var_vft:Array[nullable MPropDef]>*/;
2625 var188 = BOX_kernel__Int(var186); /* autobox from Int to Discrete */
2626 var189 = BOX_kernel__Int(var187); /* autobox from Int to Discrete */
2627 ((void (*)(val*, val*, val*))(var185->class->vft[COLOR_range__Range__without_last]))(var185, var188, var189) /* without_last on <var185:Range[Int]>*/;
2628 var190 = ((val* (*)(val*))(var185->class->vft[COLOR_abstract_collection__Collection__iterator]))(var185) /* iterator on <var185:Range[Int]>*/;
2629 for(;;) {
2630 var191 = ((short int (*)(val*))(var190->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var190) /* is_ok on <var190:Iterator[nullable Object]>*/;
2631 if(!var191) break;
2632 var192 = ((val* (*)(val*))(var190->class->vft[COLOR_abstract_collection__Iterator__item]))(var190) /* item on <var190:Iterator[nullable Object]>*/;
2633 var193 = ((struct instance_kernel__Int*)var192)->value; /* autounbox from nullable Object to Int */;
2634 var_i = var193;
2635 var194 = ((val* (*)(val*, long))(var_vft->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_vft, var_i) /* [] on <var_vft:Array[nullable MPropDef]>*/;
2636 var_mpropdef = var194;
2637 var195 = NULL;
2638 if (var_mpropdef == NULL) {
2639 var196 = 1; /* is null */
2640 } else {
2641 var196 = 0; /* arg is null but recv is not */
2642 }
2643 if (var196){
2644 if (varonce197) {
2645 var198 = varonce197;
2646 } else {
2647 var199 = "NULL, /* empty */";
2648 var200 = 17;
2649 var201 = string__NativeString__to_s_with_length(var199, var200);
2650 var198 = var201;
2651 varonce197 = var198;
2652 }
2653 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var198) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2654 } else {
2655 var203 = 1;
2656 var_ = var203;
2657 if (var203){
2658 var202 = var_;
2659 } else {
2660 var204 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2661 var205 = ((val* (*)(val*))(var204->class->vft[COLOR_model__MClassDef__bound_mtype]))(var204) /* bound_mtype on <var204:MClassDef>*/;
2662 var206 = ((val* (*)(val*))(var205->class->vft[COLOR_abstract_compiler__MType__ctype]))(var205) /* ctype on <var205:MClassType>*/;
2663 if (varonce207) {
2664 var208 = varonce207;
2665 } else {
2666 var209 = "val*";
2667 var210 = 4;
2668 var211 = string__NativeString__to_s_with_length(var209, var210);
2669 var208 = var211;
2670 varonce207 = var208;
2671 }
2672 var212 = ((short int (*)(val*, val*))(var206->class->vft[COLOR_kernel__Object___33d_61d]))(var206, var208) /* != on <var206:String>*/;
2673 var202 = var212;
2674 }
2675 if (var202){
2676 if (varonce213) {
2677 var214 = varonce213;
2678 } else {
2679 var215 = "VIRTUAL_";
2680 var216 = 8;
2681 var217 = string__NativeString__to_s_with_length(var215, var216);
2682 var214 = var217;
2683 varonce213 = var214;
2684 }
2685 var218 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2686 var219 = NEW_array__Array(&type_array__Arraykernel__Object);
2687 { /* var219 = array_instance Array[Object] */
2688 var220 = 2;
2689 var221 = NEW_array__NativeArray(var220, &type_array__NativeArraykernel__Object);
2690 ((struct instance_array__NativeArray*)var221)->values[0] = (val*) var214;
2691 ((struct instance_array__NativeArray*)var221)->values[1] = (val*) var218;
2692 ((void (*)(val*, val*, long))(var219->class->vft[COLOR_array__Array__with_native]))(var219, var221, var220) /* with_native on <var219:Array[Object]>*/;
2693 }
2694 var222 = ((val* (*)(val*))(var219->class->vft[COLOR_string__Object__to_s]))(var219) /* to_s on <var219:Array[Object]>*/;
2695 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var222) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2696 if (varonce223) {
2697 var224 = varonce223;
2698 } else {
2699 var225 = "(nitmethod_t)VIRTUAL_";
2700 var226 = 21;
2701 var227 = string__NativeString__to_s_with_length(var225, var226);
2702 var224 = var227;
2703 varonce223 = var224;
2704 }
2705 var228 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2706 if (varonce229) {
2707 var230 = varonce229;
2708 } else {
2709 var231 = ", /* pointer to ";
2710 var232 = 16;
2711 var233 = string__NativeString__to_s_with_length(var231, var232);
2712 var230 = var233;
2713 varonce229 = var230;
2714 }
2715 var234 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
2716 if (varonce235) {
2717 var236 = varonce235;
2718 } else {
2719 var237 = ":";
2720 var238 = 1;
2721 var239 = string__NativeString__to_s_with_length(var237, var238);
2722 var236 = var239;
2723 varonce235 = var236;
2724 }
2725 if (varonce240) {
2726 var241 = varonce240;
2727 } else {
2728 var242 = ":";
2729 var243 = 1;
2730 var244 = string__NativeString__to_s_with_length(var242, var243);
2731 var241 = var244;
2732 varonce240 = var241;
2733 }
2734 if (varonce245) {
2735 var246 = varonce245;
2736 } else {
2737 var247 = " */";
2738 var248 = 3;
2739 var249 = string__NativeString__to_s_with_length(var247, var248);
2740 var246 = var249;
2741 varonce245 = var246;
2742 }
2743 var250 = NEW_array__Array(&type_array__Arraykernel__Object);
2744 { /* var250 = array_instance Array[Object] */
2745 var251 = 9;
2746 var252 = NEW_array__NativeArray(var251, &type_array__NativeArraykernel__Object);
2747 ((struct instance_array__NativeArray*)var252)->values[0] = (val*) var224;
2748 ((struct instance_array__NativeArray*)var252)->values[1] = (val*) var228;
2749 ((struct instance_array__NativeArray*)var252)->values[2] = (val*) var230;
2750 ((struct instance_array__NativeArray*)var252)->values[3] = (val*) var234;
2751 ((struct instance_array__NativeArray*)var252)->values[4] = (val*) var236;
2752 ((struct instance_array__NativeArray*)var252)->values[5] = (val*) var_mclass;
2753 ((struct instance_array__NativeArray*)var252)->values[6] = (val*) var241;
2754 ((struct instance_array__NativeArray*)var252)->values[7] = (val*) var_mpropdef;
2755 ((struct instance_array__NativeArray*)var252)->values[8] = (val*) var246;
2756 ((void (*)(val*, val*, long))(var250->class->vft[COLOR_array__Array__with_native]))(var250, var252, var251) /* with_native on <var250:Array[Object]>*/;
2757 }
2758 var253 = ((val* (*)(val*))(var250->class->vft[COLOR_string__Object__to_s]))(var250) /* to_s on <var250:Array[Object]>*/;
2759 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var253) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2760 } else {
2761 var254 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2762 var255 = NEW_array__Array(&type_array__Arraykernel__Object);
2763 { /* var255 = array_instance Array[Object] */
2764 var256 = 1;
2765 var257 = NEW_array__NativeArray(var256, &type_array__NativeArraykernel__Object);
2766 ((struct instance_array__NativeArray*)var257)->values[0] = (val*) var254;
2767 ((void (*)(val*, val*, long))(var255->class->vft[COLOR_array__Array__with_native]))(var255, var257, var256) /* with_native on <var255:Array[Object]>*/;
2768 }
2769 var258 = ((val* (*)(val*))(var255->class->vft[COLOR_string__Object__to_s]))(var255) /* to_s on <var255:Array[Object]>*/;
2770 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var258) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2771 if (varonce259) {
2772 var260 = varonce259;
2773 } else {
2774 var261 = "(nitmethod_t)";
2775 var262 = 13;
2776 var263 = string__NativeString__to_s_with_length(var261, var262);
2777 var260 = var263;
2778 varonce259 = var260;
2779 }
2780 var264 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2781 if (varonce265) {
2782 var266 = varonce265;
2783 } else {
2784 var267 = ", /* pointer to ";
2785 var268 = 16;
2786 var269 = string__NativeString__to_s_with_length(var267, var268);
2787 var266 = var269;
2788 varonce265 = var266;
2789 }
2790 var270 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
2791 if (varonce271) {
2792 var272 = varonce271;
2793 } else {
2794 var273 = ":";
2795 var274 = 1;
2796 var275 = string__NativeString__to_s_with_length(var273, var274);
2797 var272 = var275;
2798 varonce271 = var272;
2799 }
2800 if (varonce276) {
2801 var277 = varonce276;
2802 } else {
2803 var278 = ":";
2804 var279 = 1;
2805 var280 = string__NativeString__to_s_with_length(var278, var279);
2806 var277 = var280;
2807 varonce276 = var277;
2808 }
2809 if (varonce281) {
2810 var282 = varonce281;
2811 } else {
2812 var283 = " */";
2813 var284 = 3;
2814 var285 = string__NativeString__to_s_with_length(var283, var284);
2815 var282 = var285;
2816 varonce281 = var282;
2817 }
2818 var286 = NEW_array__Array(&type_array__Arraykernel__Object);
2819 { /* var286 = array_instance Array[Object] */
2820 var287 = 9;
2821 var288 = NEW_array__NativeArray(var287, &type_array__NativeArraykernel__Object);
2822 ((struct instance_array__NativeArray*)var288)->values[0] = (val*) var260;
2823 ((struct instance_array__NativeArray*)var288)->values[1] = (val*) var264;
2824 ((struct instance_array__NativeArray*)var288)->values[2] = (val*) var266;
2825 ((struct instance_array__NativeArray*)var288)->values[3] = (val*) var270;
2826 ((struct instance_array__NativeArray*)var288)->values[4] = (val*) var272;
2827 ((struct instance_array__NativeArray*)var288)->values[5] = (val*) var_mclass;
2828 ((struct instance_array__NativeArray*)var288)->values[6] = (val*) var277;
2829 ((struct instance_array__NativeArray*)var288)->values[7] = (val*) var_mpropdef;
2830 ((struct instance_array__NativeArray*)var288)->values[8] = (val*) var282;
2831 ((void (*)(val*, val*, long))(var286->class->vft[COLOR_array__Array__with_native]))(var286, var288, var287) /* with_native on <var286:Array[Object]>*/;
2832 }
2833 var289 = ((val* (*)(val*))(var286->class->vft[COLOR_string__Object__to_s]))(var286) /* to_s on <var286:Array[Object]>*/;
2834 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var289) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2835 }
2836 }
2837 CONTINUE_label: (void)0;
2838 ((void (*)(val*))(var190->class->vft[COLOR_abstract_collection__Iterator__next]))(var190) /* next on <var190:Iterator[nullable Object]>*/;
2839 }
2840 BREAK_label: (void)0;
2841 if (varonce290) {
2842 var291 = varonce290;
2843 } else {
2844 var292 = "}";
2845 var293 = 1;
2846 var294 = string__NativeString__to_s_with_length(var292, var293);
2847 var291 = var294;
2848 varonce290 = var291;
2849 }
2850 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var291) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2851 if (varonce295) {
2852 var296 = varonce295;
2853 } else {
2854 var297 = "};";
2855 var298 = 2;
2856 var299 = string__NativeString__to_s_with_length(var297, var298);
2857 var296 = var299;
2858 varonce295 = var296;
2859 }
2860 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var296) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2861 if (varonce300) {
2862 var301 = varonce300;
2863 } else {
2864 var302 = "const struct type_table type_table_";
2865 var303 = 35;
2866 var304 = string__NativeString__to_s_with_length(var302, var303);
2867 var301 = var304;
2868 varonce300 = var301;
2869 }
2870 if (varonce305) {
2871 var306 = varonce305;
2872 } else {
2873 var307 = " = {";
2874 var308 = 4;
2875 var309 = string__NativeString__to_s_with_length(var307, var308);
2876 var306 = var309;
2877 varonce305 = var306;
2878 }
2879 var310 = NEW_array__Array(&type_array__Arraykernel__Object);
2880 { /* var310 = array_instance Array[Object] */
2881 var311 = 3;
2882 var312 = NEW_array__NativeArray(var311, &type_array__NativeArraykernel__Object);
2883 ((struct instance_array__NativeArray*)var312)->values[0] = (val*) var301;
2884 ((struct instance_array__NativeArray*)var312)->values[1] = (val*) var_c_name;
2885 ((struct instance_array__NativeArray*)var312)->values[2] = (val*) var306;
2886 ((void (*)(val*, val*, long))(var310->class->vft[COLOR_array__Array__with_native]))(var310, var312, var311) /* with_native on <var310:Array[Object]>*/;
2887 }
2888 var313 = ((val* (*)(val*))(var310->class->vft[COLOR_string__Object__to_s]))(var310) /* to_s on <var310:Array[Object]>*/;
2889 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var313) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2890 var314 = ((long (*)(val*))(var_class_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_class_table) /* length on <var_class_table:Array[nullable MClass]>*/;
2891 if (varonce315) {
2892 var316 = varonce315;
2893 } else {
2894 var317 = ",";
2895 var318 = 1;
2896 var319 = string__NativeString__to_s_with_length(var317, var318);
2897 var316 = var319;
2898 varonce315 = var316;
2899 }
2900 var320 = NEW_array__Array(&type_array__Arraykernel__Object);
2901 { /* var320 = array_instance Array[Object] */
2902 var321 = 2;
2903 var322 = NEW_array__NativeArray(var321, &type_array__NativeArraykernel__Object);
2904 var323 = BOX_kernel__Int(var314); /* autobox from Int to Object */
2905 ((struct instance_array__NativeArray*)var322)->values[0] = (val*) var323;
2906 ((struct instance_array__NativeArray*)var322)->values[1] = (val*) var316;
2907 ((void (*)(val*, val*, long))(var320->class->vft[COLOR_array__Array__with_native]))(var320, var322, var321) /* with_native on <var320:Array[Object]>*/;
2908 }
2909 var324 = ((val* (*)(val*))(var320->class->vft[COLOR_string__Object__to_s]))(var320) /* to_s on <var320:Array[Object]>*/;
2910 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var324) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2911 if (varonce325) {
2912 var326 = varonce325;
2913 } else {
2914 var327 = "{";
2915 var328 = 1;
2916 var329 = string__NativeString__to_s_with_length(var327, var328);
2917 var326 = var329;
2918 varonce325 = var326;
2919 }
2920 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var326) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2921 var330 = ((val* (*)(val*))(var_class_table->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_class_table) /* iterator on <var_class_table:Array[nullable MClass]>*/;
2922 for(;;) {
2923 var331 = ((short int (*)(val*))(var330->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var330) /* is_ok on <var330:Iterator[nullable Object]>*/;
2924 if(!var331) break;
2925 var332 = ((val* (*)(val*))(var330->class->vft[COLOR_abstract_collection__Iterator__item]))(var330) /* item on <var330:Iterator[nullable Object]>*/;
2926 var_msuper = var332;
2927 var333 = NULL;
2928 if (var_msuper == NULL) {
2929 var334 = 1; /* is null */
2930 } else {
2931 var334 = 0; /* arg is null but recv is not */
2932 }
2933 if (var334){
2934 if (varonce335) {
2935 var336 = varonce335;
2936 } else {
2937 var337 = "-1, /* empty */";
2938 var338 = 15;
2939 var339 = string__NativeString__to_s_with_length(var337, var338);
2940 var336 = var339;
2941 varonce335 = var336;
2942 }
2943 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var336) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2944 } else {
2945 var340 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2946 if (var340 == NULL) {
2947 fprintf(stderr, "Runtime error: %s", "Receiver is null");
2948 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 279);
2949 show_backtrace(1);
2950 } else {
2951 var341 = ((val* (*)(val*))(var340->class->vft[COLOR_layout_builders__Layout__ids]))(var340) /* ids on <var340:nullable Layout[MClass]>*/;
2952 }
2953 var342 = ((val* (*)(val*, val*))(var341->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var341, var_msuper) /* [] on <var341:Map[Object, Int](Map[MClass, Int])>*/;
2954 if (varonce343) {
2955 var344 = varonce343;
2956 } else {
2957 var345 = ", /* ";
2958 var346 = 5;
2959 var347 = string__NativeString__to_s_with_length(var345, var346);
2960 var344 = var347;
2961 varonce343 = var344;
2962 }
2963 if (varonce348) {
2964 var349 = varonce348;
2965 } else {
2966 var350 = " */";
2967 var351 = 3;
2968 var352 = string__NativeString__to_s_with_length(var350, var351);
2969 var349 = var352;
2970 varonce348 = var349;
2971 }
2972 var353 = NEW_array__Array(&type_array__Arraykernel__Object);
2973 { /* var353 = array_instance Array[Object] */
2974 var354 = 4;
2975 var355 = NEW_array__NativeArray(var354, &type_array__NativeArraykernel__Object);
2976 ((struct instance_array__NativeArray*)var355)->values[0] = (val*) var342;
2977 ((struct instance_array__NativeArray*)var355)->values[1] = (val*) var344;
2978 ((struct instance_array__NativeArray*)var355)->values[2] = (val*) var_msuper;
2979 ((struct instance_array__NativeArray*)var355)->values[3] = (val*) var349;
2980 ((void (*)(val*, val*, long))(var353->class->vft[COLOR_array__Array__with_native]))(var353, var355, var354) /* with_native on <var353:Array[Object]>*/;
2981 }
2982 var356 = ((val* (*)(val*))(var353->class->vft[COLOR_string__Object__to_s]))(var353) /* to_s on <var353:Array[Object]>*/;
2983 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var356) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2984 }
2985 CONTINUE_label357: (void)0;
2986 ((void (*)(val*))(var330->class->vft[COLOR_abstract_collection__Iterator__next]))(var330) /* next on <var330:Iterator[nullable Object]>*/;
2987 }
2988 BREAK_label357: (void)0;
2989 if (varonce358) {
2990 var359 = varonce358;
2991 } else {
2992 var360 = "}";
2993 var361 = 1;
2994 var362 = string__NativeString__to_s_with_length(var360, var361);
2995 var359 = var362;
2996 varonce358 = var359;
2997 }
2998 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var359) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2999 if (varonce363) {
3000 var364 = varonce363;
3001 } else {
3002 var365 = "};";
3003 var366 = 2;
3004 var367 = string__NativeString__to_s_with_length(var365, var366);
3005 var364 = var367;
3006 varonce363 = var364;
3007 }
3008 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var364) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3009 var368 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3010 if (varonce369) {
3011 var370 = varonce369;
3012 } else {
3013 var371 = "val*";
3014 var372 = 4;
3015 var373 = string__NativeString__to_s_with_length(var371, var372);
3016 var370 = var373;
3017 varonce369 = var370;
3018 }
3019 var374 = ((short int (*)(val*, val*))(var368->class->vft[COLOR_kernel__Object___33d_61d]))(var368, var370) /* != on <var368:String>*/;
3020 if (var374){
3021 var376 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
3022 var377 = ((val* (*)(val*))(var376->class->vft[COLOR_model__MClass__name]))(var376) /* name on <var376:MClass>*/;
3023 if (varonce378) {
3024 var379 = varonce378;
3025 } else {
3026 var380 = "Pointer";
3027 var381 = 7;
3028 var382 = string__NativeString__to_s_with_length(var380, var381);
3029 var379 = var382;
3030 varonce378 = var379;
3031 }
3032 var383 = ((short int (*)(val*, val*))(var377->class->vft[COLOR_kernel__Object___61d_61d]))(var377, var379) /* == on <var377:String>*/;
3033 var_384 = var383;
3034 if (var383){
3035 var375 = var_384;
3036 } else {
3037 var385 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
3038 var386 = ((val* (*)(val*))(var385->class->vft[COLOR_model__MClass__kind]))(var385) /* kind on <var385:MClass>*/;
3039 var387 = ((val* (*)(val*))(self->class->vft[COLOR_model__Object__extern_kind]))(self) /* extern_kind on <self:SeparateErasureCompiler>*/;
3040 var388 = ((short int (*)(val*, val*))(var386->class->vft[COLOR_kernel__Object___33d_61d]))(var386, var387) /* != on <var386:MClassKind>*/;
3041 var375 = var388;
3042 }
3043 if (var375){
3044 var389 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3045 if (varonce390) {
3046 var391 = varonce390;
3047 } else {
3048 var392 = "struct instance_";
3049 var393 = 16;
3050 var394 = string__NativeString__to_s_with_length(var392, var393);
3051 var391 = var394;
3052 varonce390 = var391;
3053 }
3054 if (varonce395) {
3055 var396 = varonce395;
3056 } else {
3057 var397 = " {";
3058 var398 = 2;
3059 var399 = string__NativeString__to_s_with_length(var397, var398);
3060 var396 = var399;
3061 varonce395 = var396;
3062 }
3063 var400 = NEW_array__Array(&type_array__Arraykernel__Object);
3064 { /* var400 = array_instance Array[Object] */
3065 var401 = 3;
3066 var402 = NEW_array__NativeArray(var401, &type_array__NativeArraykernel__Object);
3067 ((struct instance_array__NativeArray*)var402)->values[0] = (val*) var391;
3068 ((struct instance_array__NativeArray*)var402)->values[1] = (val*) var_c_instance_name;
3069 ((struct instance_array__NativeArray*)var402)->values[2] = (val*) var396;
3070 ((void (*)(val*, val*, long))(var400->class->vft[COLOR_array__Array__with_native]))(var400, var402, var401) /* with_native on <var400:Array[Object]>*/;
3071 }
3072 var403 = ((val* (*)(val*))(var400->class->vft[COLOR_string__Object__to_s]))(var400) /* to_s on <var400:Array[Object]>*/;
3073 ((void (*)(val*, val*))(var389->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var389, var403) /* add_decl on <var389:CodeWriter>*/;
3074 var404 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3075 if (varonce405) {
3076 var406 = varonce405;
3077 } else {
3078 var407 = "const struct class *class;";
3079 var408 = 26;
3080 var409 = string__NativeString__to_s_with_length(var407, var408);
3081 var406 = var409;
3082 varonce405 = var406;
3083 }
3084 ((void (*)(val*, val*))(var404->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var404, var406) /* add_decl on <var404:CodeWriter>*/;
3085 var410 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3086 var411 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3087 if (varonce412) {
3088 var413 = varonce412;
3089 } else {
3090 var414 = " value;";
3091 var415 = 7;
3092 var416 = string__NativeString__to_s_with_length(var414, var415);
3093 var413 = var416;
3094 varonce412 = var413;
3095 }
3096 var417 = NEW_array__Array(&type_array__Arraykernel__Object);
3097 { /* var417 = array_instance Array[Object] */
3098 var418 = 2;
3099 var419 = NEW_array__NativeArray(var418, &type_array__NativeArraykernel__Object);
3100 ((struct instance_array__NativeArray*)var419)->values[0] = (val*) var411;
3101 ((struct instance_array__NativeArray*)var419)->values[1] = (val*) var413;
3102 ((void (*)(val*, val*, long))(var417->class->vft[COLOR_array__Array__with_native]))(var417, var419, var418) /* with_native on <var417:Array[Object]>*/;
3103 }
3104 var420 = ((val* (*)(val*))(var417->class->vft[COLOR_string__Object__to_s]))(var417) /* to_s on <var417:Array[Object]>*/;
3105 ((void (*)(val*, val*))(var410->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var410, var420) /* add_decl on <var410:CodeWriter>*/;
3106 var421 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3107 if (varonce422) {
3108 var423 = varonce422;
3109 } else {
3110 var424 = "};";
3111 var425 = 2;
3112 var426 = string__NativeString__to_s_with_length(var424, var425);
3113 var423 = var426;
3114 varonce422 = var423;
3115 }
3116 ((void (*)(val*, val*))(var421->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var421, var423) /* add_decl on <var421:CodeWriter>*/;
3117 } else {
3118 }
3119 if (varonce427) {
3120 var428 = varonce427;
3121 } else {
3122 var429 = "BOX_";
3123 var430 = 4;
3124 var431 = string__NativeString__to_s_with_length(var429, var430);
3125 var428 = var431;
3126 varonce427 = var428;
3127 }
3128 var432 = NEW_array__Array(&type_array__Arraykernel__Object);
3129 { /* var432 = array_instance Array[Object] */
3130 var433 = 2;
3131 var434 = NEW_array__NativeArray(var433, &type_array__NativeArraykernel__Object);
3132 ((struct instance_array__NativeArray*)var434)->values[0] = (val*) var428;
3133 ((struct instance_array__NativeArray*)var434)->values[1] = (val*) var_c_name;
3134 ((void (*)(val*, val*, long))(var432->class->vft[COLOR_array__Array__with_native]))(var432, var434, var433) /* with_native on <var432:Array[Object]>*/;
3135 }
3136 var435 = ((val* (*)(val*))(var432->class->vft[COLOR_string__Object__to_s]))(var432) /* to_s on <var432:Array[Object]>*/;
3137 if (varonce436) {
3138 var437 = varonce436;
3139 } else {
3140 var438 = "val* BOX_";
3141 var439 = 9;
3142 var440 = string__NativeString__to_s_with_length(var438, var439);
3143 var437 = var440;
3144 varonce436 = var437;
3145 }
3146 if (varonce441) {
3147 var442 = varonce441;
3148 } else {
3149 var443 = "(";
3150 var444 = 1;
3151 var445 = string__NativeString__to_s_with_length(var443, var444);
3152 var442 = var445;
3153 varonce441 = var442;
3154 }
3155 var446 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3156 if (varonce447) {
3157 var448 = varonce447;
3158 } else {
3159 var449 = ");";
3160 var450 = 2;
3161 var451 = string__NativeString__to_s_with_length(var449, var450);
3162 var448 = var451;
3163 varonce447 = var448;
3164 }
3165 var452 = NEW_array__Array(&type_array__Arraykernel__Object);
3166 { /* var452 = array_instance Array[Object] */
3167 var453 = 5;
3168 var454 = NEW_array__NativeArray(var453, &type_array__NativeArraykernel__Object);
3169 ((struct instance_array__NativeArray*)var454)->values[0] = (val*) var437;
3170 ((struct instance_array__NativeArray*)var454)->values[1] = (val*) var_c_name;
3171 ((struct instance_array__NativeArray*)var454)->values[2] = (val*) var442;
3172 ((struct instance_array__NativeArray*)var454)->values[3] = (val*) var446;
3173 ((struct instance_array__NativeArray*)var454)->values[4] = (val*) var448;
3174 ((void (*)(val*, val*, long))(var452->class->vft[COLOR_array__Array__with_native]))(var452, var454, var453) /* with_native on <var452:Array[Object]>*/;
3175 }
3176 var455 = ((val* (*)(val*))(var452->class->vft[COLOR_string__Object__to_s]))(var452) /* to_s on <var452:Array[Object]>*/;
3177 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var435, var455) /* provide_declaration on <self:SeparateErasureCompiler>*/;
3178 if (varonce456) {
3179 var457 = varonce456;
3180 } else {
3181 var458 = "/* allocate ";
3182 var459 = 12;
3183 var460 = string__NativeString__to_s_with_length(var458, var459);
3184 var457 = var460;
3185 varonce456 = var457;
3186 }
3187 if (varonce461) {
3188 var462 = varonce461;
3189 } else {
3190 var463 = " */";
3191 var464 = 3;
3192 var465 = string__NativeString__to_s_with_length(var463, var464);
3193 var462 = var465;
3194 varonce461 = var462;
3195 }
3196 var466 = NEW_array__Array(&type_array__Arraykernel__Object);
3197 { /* var466 = array_instance Array[Object] */
3198 var467 = 3;
3199 var468 = NEW_array__NativeArray(var467, &type_array__NativeArraykernel__Object);
3200 ((struct instance_array__NativeArray*)var468)->values[0] = (val*) var457;
3201 ((struct instance_array__NativeArray*)var468)->values[1] = (val*) var_mtype;
3202 ((struct instance_array__NativeArray*)var468)->values[2] = (val*) var462;
3203 ((void (*)(val*, val*, long))(var466->class->vft[COLOR_array__Array__with_native]))(var466, var468, var467) /* with_native on <var466:Array[Object]>*/;
3204 }
3205 var469 = ((val* (*)(val*))(var466->class->vft[COLOR_string__Object__to_s]))(var466) /* to_s on <var466:Array[Object]>*/;
3206 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var469) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3207 if (varonce470) {
3208 var471 = varonce470;
3209 } else {
3210 var472 = "val* BOX_";
3211 var473 = 9;
3212 var474 = string__NativeString__to_s_with_length(var472, var473);
3213 var471 = var474;
3214 varonce470 = var471;
3215 }
3216 var475 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
3217 if (varonce476) {
3218 var477 = varonce476;
3219 } else {
3220 var478 = "(";
3221 var479 = 1;
3222 var480 = string__NativeString__to_s_with_length(var478, var479);
3223 var477 = var480;
3224 varonce476 = var477;
3225 }
3226 var481 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3227 if (varonce482) {
3228 var483 = varonce482;
3229 } else {
3230 var484 = " value) {";
3231 var485 = 9;
3232 var486 = string__NativeString__to_s_with_length(var484, var485);
3233 var483 = var486;
3234 varonce482 = var483;
3235 }
3236 var487 = NEW_array__Array(&type_array__Arraykernel__Object);
3237 { /* var487 = array_instance Array[Object] */
3238 var488 = 5;
3239 var489 = NEW_array__NativeArray(var488, &type_array__NativeArraykernel__Object);
3240 ((struct instance_array__NativeArray*)var489)->values[0] = (val*) var471;
3241 ((struct instance_array__NativeArray*)var489)->values[1] = (val*) var475;
3242 ((struct instance_array__NativeArray*)var489)->values[2] = (val*) var477;
3243 ((struct instance_array__NativeArray*)var489)->values[3] = (val*) var481;
3244 ((struct instance_array__NativeArray*)var489)->values[4] = (val*) var483;
3245 ((void (*)(val*, val*, long))(var487->class->vft[COLOR_array__Array__with_native]))(var487, var489, var488) /* with_native on <var487:Array[Object]>*/;
3246 }
3247 var490 = ((val* (*)(val*))(var487->class->vft[COLOR_string__Object__to_s]))(var487) /* to_s on <var487:Array[Object]>*/;
3248 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var490) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3249 if (varonce491) {
3250 var492 = varonce491;
3251 } else {
3252 var493 = "struct instance_";
3253 var494 = 16;
3254 var495 = string__NativeString__to_s_with_length(var493, var494);
3255 var492 = var495;
3256 varonce491 = var492;
3257 }
3258 if (varonce496) {
3259 var497 = varonce496;
3260 } else {
3261 var498 = "*res = nit_alloc(sizeof(struct instance_";
3262 var499 = 40;
3263 var500 = string__NativeString__to_s_with_length(var498, var499);
3264 var497 = var500;
3265 varonce496 = var497;
3266 }
3267 if (varonce501) {
3268 var502 = varonce501;
3269 } else {
3270 var503 = "));";
3271 var504 = 3;
3272 var505 = string__NativeString__to_s_with_length(var503, var504);
3273 var502 = var505;
3274 varonce501 = var502;
3275 }
3276 var506 = NEW_array__Array(&type_array__Arraykernel__Object);
3277 { /* var506 = array_instance Array[Object] */
3278 var507 = 5;
3279 var508 = NEW_array__NativeArray(var507, &type_array__NativeArraykernel__Object);
3280 ((struct instance_array__NativeArray*)var508)->values[0] = (val*) var492;
3281 ((struct instance_array__NativeArray*)var508)->values[1] = (val*) var_c_instance_name;
3282 ((struct instance_array__NativeArray*)var508)->values[2] = (val*) var497;
3283 ((struct instance_array__NativeArray*)var508)->values[3] = (val*) var_c_instance_name;
3284 ((struct instance_array__NativeArray*)var508)->values[4] = (val*) var502;
3285 ((void (*)(val*, val*, long))(var506->class->vft[COLOR_array__Array__with_native]))(var506, var508, var507) /* with_native on <var506:Array[Object]>*/;
3286 }
3287 var509 = ((val* (*)(val*))(var506->class->vft[COLOR_string__Object__to_s]))(var506) /* to_s on <var506:Array[Object]>*/;
3288 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var509) /* add on <var_v:SeparateCompilerVisitor>*/;
3289 if (varonce510) {
3290 var511 = varonce510;
3291 } else {
3292 var512 = "class_";
3293 var513 = 6;
3294 var514 = string__NativeString__to_s_with_length(var512, var513);
3295 var511 = var514;
3296 varonce510 = var511;
3297 }
3298 var515 = NEW_array__Array(&type_array__Arraykernel__Object);
3299 { /* var515 = array_instance Array[Object] */
3300 var516 = 2;
3301 var517 = NEW_array__NativeArray(var516, &type_array__NativeArraykernel__Object);
3302 ((struct instance_array__NativeArray*)var517)->values[0] = (val*) var511;
3303 ((struct instance_array__NativeArray*)var517)->values[1] = (val*) var_c_name;
3304 ((void (*)(val*, val*, long))(var515->class->vft[COLOR_array__Array__with_native]))(var515, var517, var516) /* with_native on <var515:Array[Object]>*/;
3305 }
3306 var518 = ((val* (*)(val*))(var515->class->vft[COLOR_string__Object__to_s]))(var515) /* to_s on <var515:Array[Object]>*/;
3307 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var518) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3308 if (varonce519) {
3309 var520 = varonce519;
3310 } else {
3311 var521 = "res->class = &class_";
3312 var522 = 20;
3313 var523 = string__NativeString__to_s_with_length(var521, var522);
3314 var520 = var523;
3315 varonce519 = var520;
3316 }
3317 if (varonce524) {
3318 var525 = varonce524;
3319 } else {
3320 var526 = ";";
3321 var527 = 1;
3322 var528 = string__NativeString__to_s_with_length(var526, var527);
3323 var525 = var528;
3324 varonce524 = var525;
3325 }
3326 var529 = NEW_array__Array(&type_array__Arraykernel__Object);
3327 { /* var529 = array_instance Array[Object] */
3328 var530 = 3;
3329 var531 = NEW_array__NativeArray(var530, &type_array__NativeArraykernel__Object);
3330 ((struct instance_array__NativeArray*)var531)->values[0] = (val*) var520;
3331 ((struct instance_array__NativeArray*)var531)->values[1] = (val*) var_c_name;
3332 ((struct instance_array__NativeArray*)var531)->values[2] = (val*) var525;
3333 ((void (*)(val*, val*, long))(var529->class->vft[COLOR_array__Array__with_native]))(var529, var531, var530) /* with_native on <var529:Array[Object]>*/;
3334 }
3335 var532 = ((val* (*)(val*))(var529->class->vft[COLOR_string__Object__to_s]))(var529) /* to_s on <var529:Array[Object]>*/;
3336 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var532) /* add on <var_v:SeparateCompilerVisitor>*/;
3337 if (varonce533) {
3338 var534 = varonce533;
3339 } else {
3340 var535 = "res->value = value;";
3341 var536 = 19;
3342 var537 = string__NativeString__to_s_with_length(var535, var536);
3343 var534 = var537;
3344 varonce533 = var534;
3345 }
3346 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var534) /* add on <var_v:SeparateCompilerVisitor>*/;
3347 if (varonce538) {
3348 var539 = varonce538;
3349 } else {
3350 var540 = "return (val*)res;";
3351 var541 = 17;
3352 var542 = string__NativeString__to_s_with_length(var540, var541);
3353 var539 = var542;
3354 varonce538 = var539;
3355 }
3356 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var539) /* add on <var_v:SeparateCompilerVisitor>*/;
3357 if (varonce543) {
3358 var544 = varonce543;
3359 } else {
3360 var545 = "}";
3361 var546 = 1;
3362 var547 = string__NativeString__to_s_with_length(var545, var546);
3363 var544 = var547;
3364 varonce543 = var544;
3365 }
3366 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var544) /* add on <var_v:SeparateCompilerVisitor>*/;
3367 goto RET_LABEL;
3368 } else {
3369 var548 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
3370 if (varonce549) {
3371 var550 = varonce549;
3372 } else {
3373 var551 = "NativeArray";
3374 var552 = 11;
3375 var553 = string__NativeString__to_s_with_length(var551, var552);
3376 var550 = var553;
3377 varonce549 = var550;
3378 }
3379 var554 = ((short int (*)(val*, val*))(var548->class->vft[COLOR_kernel__Object___61d_61d]))(var548, var550) /* == on <var548:String>*/;
3380 if (var554){
3381 var555 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3382 if (varonce556) {
3383 var557 = varonce556;
3384 } else {
3385 var558 = "struct instance_";
3386 var559 = 16;
3387 var560 = string__NativeString__to_s_with_length(var558, var559);
3388 var557 = var560;
3389 varonce556 = var557;
3390 }
3391 if (varonce561) {
3392 var562 = varonce561;
3393 } else {
3394 var563 = " {";
3395 var564 = 2;
3396 var565 = string__NativeString__to_s_with_length(var563, var564);
3397 var562 = var565;
3398 varonce561 = var562;
3399 }
3400 var566 = NEW_array__Array(&type_array__Arraykernel__Object);
3401 { /* var566 = array_instance Array[Object] */
3402 var567 = 3;
3403 var568 = NEW_array__NativeArray(var567, &type_array__NativeArraykernel__Object);
3404 ((struct instance_array__NativeArray*)var568)->values[0] = (val*) var557;
3405 ((struct instance_array__NativeArray*)var568)->values[1] = (val*) var_c_name;
3406 ((struct instance_array__NativeArray*)var568)->values[2] = (val*) var562;
3407 ((void (*)(val*, val*, long))(var566->class->vft[COLOR_array__Array__with_native]))(var566, var568, var567) /* with_native on <var566:Array[Object]>*/;
3408 }
3409 var569 = ((val* (*)(val*))(var566->class->vft[COLOR_string__Object__to_s]))(var566) /* to_s on <var566:Array[Object]>*/;
3410 ((void (*)(val*, val*))(var555->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var555, var569) /* add_decl on <var555:CodeWriter>*/;
3411 var570 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3412 if (varonce571) {
3413 var572 = varonce571;
3414 } else {
3415 var573 = "const struct class *class;";
3416 var574 = 26;
3417 var575 = string__NativeString__to_s_with_length(var573, var574);
3418 var572 = var575;
3419 varonce571 = var572;
3420 }
3421 ((void (*)(val*, val*))(var570->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var570, var572) /* add_decl on <var570:CodeWriter>*/;
3422 var576 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3423 if (varonce577) {
3424 var578 = varonce577;
3425 } else {
3426 var579 = "val* values[];";
3427 var580 = 14;
3428 var581 = string__NativeString__to_s_with_length(var579, var580);
3429 var578 = var581;
3430 varonce577 = var578;
3431 }
3432 ((void (*)(val*, val*))(var576->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var576, var578) /* add_decl on <var576:CodeWriter>*/;
3433 var582 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3434 if (varonce583) {
3435 var584 = varonce583;
3436 } else {
3437 var585 = "};";
3438 var586 = 2;
3439 var587 = string__NativeString__to_s_with_length(var585, var586);
3440 var584 = var587;
3441 varonce583 = var584;
3442 }
3443 ((void (*)(val*, val*))(var582->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var582, var584) /* add_decl on <var582:CodeWriter>*/;
3444 if (varonce588) {
3445 var589 = varonce588;
3446 } else {
3447 var590 = "NEW_";
3448 var591 = 4;
3449 var592 = string__NativeString__to_s_with_length(var590, var591);
3450 var589 = var592;
3451 varonce588 = var589;
3452 }
3453 var593 = NEW_array__Array(&type_array__Arraykernel__Object);
3454 { /* var593 = array_instance Array[Object] */
3455 var594 = 2;
3456 var595 = NEW_array__NativeArray(var594, &type_array__NativeArraykernel__Object);
3457 ((struct instance_array__NativeArray*)var595)->values[0] = (val*) var589;
3458 ((struct instance_array__NativeArray*)var595)->values[1] = (val*) var_c_name;
3459 ((void (*)(val*, val*, long))(var593->class->vft[COLOR_array__Array__with_native]))(var593, var595, var594) /* with_native on <var593:Array[Object]>*/;
3460 }
3461 var596 = ((val* (*)(val*))(var593->class->vft[COLOR_string__Object__to_s]))(var593) /* to_s on <var593:Array[Object]>*/;
3462 var597 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3463 if (varonce598) {
3464 var599 = varonce598;
3465 } else {
3466 var600 = " NEW_";
3467 var601 = 5;
3468 var602 = string__NativeString__to_s_with_length(var600, var601);
3469 var599 = var602;
3470 varonce598 = var599;
3471 }
3472 if (varonce603) {
3473 var604 = varonce603;
3474 } else {
3475 var605 = "(int length);";
3476 var606 = 13;
3477 var607 = string__NativeString__to_s_with_length(var605, var606);
3478 var604 = var607;
3479 varonce603 = var604;
3480 }
3481 var608 = NEW_array__Array(&type_array__Arraykernel__Object);
3482 { /* var608 = array_instance Array[Object] */
3483 var609 = 4;
3484 var610 = NEW_array__NativeArray(var609, &type_array__NativeArraykernel__Object);
3485 ((struct instance_array__NativeArray*)var610)->values[0] = (val*) var597;
3486 ((struct instance_array__NativeArray*)var610)->values[1] = (val*) var599;
3487 ((struct instance_array__NativeArray*)var610)->values[2] = (val*) var_c_name;
3488 ((struct instance_array__NativeArray*)var610)->values[3] = (val*) var604;
3489 ((void (*)(val*, val*, long))(var608->class->vft[COLOR_array__Array__with_native]))(var608, var610, var609) /* with_native on <var608:Array[Object]>*/;
3490 }
3491 var611 = ((val* (*)(val*))(var608->class->vft[COLOR_string__Object__to_s]))(var608) /* to_s on <var608:Array[Object]>*/;
3492 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var596, var611) /* provide_declaration on <self:SeparateErasureCompiler>*/;
3493 if (varonce612) {
3494 var613 = varonce612;
3495 } else {
3496 var614 = "/* allocate ";
3497 var615 = 12;
3498 var616 = string__NativeString__to_s_with_length(var614, var615);
3499 var613 = var616;
3500 varonce612 = var613;
3501 }
3502 if (varonce617) {
3503 var618 = varonce617;
3504 } else {
3505 var619 = " */";
3506 var620 = 3;
3507 var621 = string__NativeString__to_s_with_length(var619, var620);
3508 var618 = var621;
3509 varonce617 = var618;
3510 }
3511 var622 = NEW_array__Array(&type_array__Arraykernel__Object);
3512 { /* var622 = array_instance Array[Object] */
3513 var623 = 3;
3514 var624 = NEW_array__NativeArray(var623, &type_array__NativeArraykernel__Object);
3515 ((struct instance_array__NativeArray*)var624)->values[0] = (val*) var613;
3516 ((struct instance_array__NativeArray*)var624)->values[1] = (val*) var_mtype;
3517 ((struct instance_array__NativeArray*)var624)->values[2] = (val*) var618;
3518 ((void (*)(val*, val*, long))(var622->class->vft[COLOR_array__Array__with_native]))(var622, var624, var623) /* with_native on <var622:Array[Object]>*/;
3519 }
3520 var625 = ((val* (*)(val*))(var622->class->vft[COLOR_string__Object__to_s]))(var622) /* to_s on <var622:Array[Object]>*/;
3521 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var625) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3522 var626 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3523 if (varonce627) {
3524 var628 = varonce627;
3525 } else {
3526 var629 = " NEW_";
3527 var630 = 5;
3528 var631 = string__NativeString__to_s_with_length(var629, var630);
3529 var628 = var631;
3530 varonce627 = var628;
3531 }
3532 if (varonce632) {
3533 var633 = varonce632;
3534 } else {
3535 var634 = "(int length) {";
3536 var635 = 14;
3537 var636 = string__NativeString__to_s_with_length(var634, var635);
3538 var633 = var636;
3539 varonce632 = var633;
3540 }
3541 var637 = NEW_array__Array(&type_array__Arraykernel__Object);
3542 { /* var637 = array_instance Array[Object] */
3543 var638 = 4;
3544 var639 = NEW_array__NativeArray(var638, &type_array__NativeArraykernel__Object);
3545 ((struct instance_array__NativeArray*)var639)->values[0] = (val*) var626;
3546 ((struct instance_array__NativeArray*)var639)->values[1] = (val*) var628;
3547 ((struct instance_array__NativeArray*)var639)->values[2] = (val*) var_c_name;
3548 ((struct instance_array__NativeArray*)var639)->values[3] = (val*) var633;
3549 ((void (*)(val*, val*, long))(var637->class->vft[COLOR_array__Array__with_native]))(var637, var639, var638) /* with_native on <var637:Array[Object]>*/;
3550 }
3551 var640 = ((val* (*)(val*))(var637->class->vft[COLOR_string__Object__to_s]))(var637) /* to_s on <var637:Array[Object]>*/;
3552 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var640) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3553 if (varonce641) {
3554 var642 = varonce641;
3555 } else {
3556 var643 = "self";
3557 var644 = 4;
3558 var645 = string__NativeString__to_s_with_length(var643, var644);
3559 var642 = var645;
3560 varonce641 = var642;
3561 }
3562 var646 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_named_var]))(var_v, var_mtype, var642) /* new_named_var on <var_v:SeparateCompilerVisitor>*/;
3563 var_res = var646;
3564 var647 = 1;
3565 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var647) /* is_exact= on <var_res:RuntimeVariable>*/;
3566 var648 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
3567 var649 = ((val* (*)(val*))(var648->class->vft[COLOR_abstract_collection__Collection__first]))(var648) /* first on <var648:Array[MType]>*/;
3568 var_mtype_elt = var649;
3569 if (varonce650) {
3570 var651 = varonce650;
3571 } else {
3572 var652 = " = nit_alloc(sizeof(struct instance_";
3573 var653 = 36;
3574 var654 = string__NativeString__to_s_with_length(var652, var653);
3575 var651 = var654;
3576 varonce650 = var651;
3577 }
3578 if (varonce655) {
3579 var656 = varonce655;
3580 } else {
3581 var657 = ") + length*sizeof(";
3582 var658 = 18;
3583 var659 = string__NativeString__to_s_with_length(var657, var658);
3584 var656 = var659;
3585 varonce655 = var656;
3586 }
3587 var660 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
3588 if (varonce661) {
3589 var662 = varonce661;
3590 } else {
3591 var663 = "));";
3592 var664 = 3;
3593 var665 = string__NativeString__to_s_with_length(var663, var664);
3594 var662 = var665;
3595 varonce661 = var662;
3596 }
3597 var666 = NEW_array__Array(&type_array__Arraykernel__Object);
3598 { /* var666 = array_instance Array[Object] */
3599 var667 = 6;
3600 var668 = NEW_array__NativeArray(var667, &type_array__NativeArraykernel__Object);
3601 ((struct instance_array__NativeArray*)var668)->values[0] = (val*) var_res;
3602 ((struct instance_array__NativeArray*)var668)->values[1] = (val*) var651;
3603 ((struct instance_array__NativeArray*)var668)->values[2] = (val*) var_c_name;
3604 ((struct instance_array__NativeArray*)var668)->values[3] = (val*) var656;
3605 ((struct instance_array__NativeArray*)var668)->values[4] = (val*) var660;
3606 ((struct instance_array__NativeArray*)var668)->values[5] = (val*) var662;
3607 ((void (*)(val*, val*, long))(var666->class->vft[COLOR_array__Array__with_native]))(var666, var668, var667) /* with_native on <var666:Array[Object]>*/;
3608 }
3609 var669 = ((val* (*)(val*))(var666->class->vft[COLOR_string__Object__to_s]))(var666) /* to_s on <var666:Array[Object]>*/;
3610 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var669) /* add on <var_v:SeparateCompilerVisitor>*/;
3611 if (varonce670) {
3612 var671 = varonce670;
3613 } else {
3614 var672 = "class_";
3615 var673 = 6;
3616 var674 = string__NativeString__to_s_with_length(var672, var673);
3617 var671 = var674;
3618 varonce670 = var671;
3619 }
3620 var675 = NEW_array__Array(&type_array__Arraykernel__Object);
3621 { /* var675 = array_instance Array[Object] */
3622 var676 = 2;
3623 var677 = NEW_array__NativeArray(var676, &type_array__NativeArraykernel__Object);
3624 ((struct instance_array__NativeArray*)var677)->values[0] = (val*) var671;
3625 ((struct instance_array__NativeArray*)var677)->values[1] = (val*) var_c_name;
3626 ((void (*)(val*, val*, long))(var675->class->vft[COLOR_array__Array__with_native]))(var675, var677, var676) /* with_native on <var675:Array[Object]>*/;
3627 }
3628 var678 = ((val* (*)(val*))(var675->class->vft[COLOR_string__Object__to_s]))(var675) /* to_s on <var675:Array[Object]>*/;
3629 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var678) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3630 if (varonce679) {
3631 var680 = varonce679;
3632 } else {
3633 var681 = "->class = &class_";
3634 var682 = 17;
3635 var683 = string__NativeString__to_s_with_length(var681, var682);
3636 var680 = var683;
3637 varonce679 = var680;
3638 }
3639 if (varonce684) {
3640 var685 = varonce684;
3641 } else {
3642 var686 = ";";
3643 var687 = 1;
3644 var688 = string__NativeString__to_s_with_length(var686, var687);
3645 var685 = var688;
3646 varonce684 = var685;
3647 }
3648 var689 = NEW_array__Array(&type_array__Arraykernel__Object);
3649 { /* var689 = array_instance Array[Object] */
3650 var690 = 4;
3651 var691 = NEW_array__NativeArray(var690, &type_array__NativeArraykernel__Object);
3652 ((struct instance_array__NativeArray*)var691)->values[0] = (val*) var_res;
3653 ((struct instance_array__NativeArray*)var691)->values[1] = (val*) var680;
3654 ((struct instance_array__NativeArray*)var691)->values[2] = (val*) var_c_name;
3655 ((struct instance_array__NativeArray*)var691)->values[3] = (val*) var685;
3656 ((void (*)(val*, val*, long))(var689->class->vft[COLOR_array__Array__with_native]))(var689, var691, var690) /* with_native on <var689:Array[Object]>*/;
3657 }
3658 var692 = ((val* (*)(val*))(var689->class->vft[COLOR_string__Object__to_s]))(var689) /* to_s on <var689:Array[Object]>*/;
3659 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var692) /* add on <var_v:SeparateCompilerVisitor>*/;
3660 if (varonce693) {
3661 var694 = varonce693;
3662 } else {
3663 var695 = "return ";
3664 var696 = 7;
3665 var697 = string__NativeString__to_s_with_length(var695, var696);
3666 var694 = var697;
3667 varonce693 = var694;
3668 }
3669 if (varonce698) {
3670 var699 = varonce698;
3671 } else {
3672 var700 = ";";
3673 var701 = 1;
3674 var702 = string__NativeString__to_s_with_length(var700, var701);
3675 var699 = var702;
3676 varonce698 = var699;
3677 }
3678 var703 = NEW_array__Array(&type_array__Arraykernel__Object);
3679 { /* var703 = array_instance Array[Object] */
3680 var704 = 3;
3681 var705 = NEW_array__NativeArray(var704, &type_array__NativeArraykernel__Object);
3682 ((struct instance_array__NativeArray*)var705)->values[0] = (val*) var694;
3683 ((struct instance_array__NativeArray*)var705)->values[1] = (val*) var_res;
3684 ((struct instance_array__NativeArray*)var705)->values[2] = (val*) var699;
3685 ((void (*)(val*, val*, long))(var703->class->vft[COLOR_array__Array__with_native]))(var703, var705, var704) /* with_native on <var703:Array[Object]>*/;
3686 }
3687 var706 = ((val* (*)(val*))(var703->class->vft[COLOR_string__Object__to_s]))(var703) /* to_s on <var703:Array[Object]>*/;
3688 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var706) /* add on <var_v:SeparateCompilerVisitor>*/;
3689 if (varonce707) {
3690 var708 = varonce707;
3691 } else {
3692 var709 = "}";
3693 var710 = 1;
3694 var711 = string__NativeString__to_s_with_length(var709, var710);
3695 var708 = var711;
3696 varonce707 = var708;
3697 }
3698 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var708) /* add on <var_v:SeparateCompilerVisitor>*/;
3699 goto RET_LABEL;
3700 } else {
3701 }
3702 }
3703 if (varonce712) {
3704 var713 = varonce712;
3705 } else {
3706 var714 = "NEW_";
3707 var715 = 4;
3708 var716 = string__NativeString__to_s_with_length(var714, var715);
3709 var713 = var716;
3710 varonce712 = var713;
3711 }
3712 var717 = NEW_array__Array(&type_array__Arraykernel__Object);
3713 { /* var717 = array_instance Array[Object] */
3714 var718 = 2;
3715 var719 = NEW_array__NativeArray(var718, &type_array__NativeArraykernel__Object);
3716 ((struct instance_array__NativeArray*)var719)->values[0] = (val*) var713;
3717 ((struct instance_array__NativeArray*)var719)->values[1] = (val*) var_c_name;
3718 ((void (*)(val*, val*, long))(var717->class->vft[COLOR_array__Array__with_native]))(var717, var719, var718) /* with_native on <var717:Array[Object]>*/;
3719 }
3720 var720 = ((val* (*)(val*))(var717->class->vft[COLOR_string__Object__to_s]))(var717) /* to_s on <var717:Array[Object]>*/;
3721 var721 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3722 if (varonce722) {
3723 var723 = varonce722;
3724 } else {
3725 var724 = " NEW_";
3726 var725 = 5;
3727 var726 = string__NativeString__to_s_with_length(var724, var725);
3728 var723 = var726;
3729 varonce722 = var723;
3730 }
3731 if (varonce727) {
3732 var728 = varonce727;
3733 } else {
3734 var729 = "(void);";
3735 var730 = 7;
3736 var731 = string__NativeString__to_s_with_length(var729, var730);
3737 var728 = var731;
3738 varonce727 = var728;
3739 }
3740 var732 = NEW_array__Array(&type_array__Arraykernel__Object);
3741 { /* var732 = array_instance Array[Object] */
3742 var733 = 4;
3743 var734 = NEW_array__NativeArray(var733, &type_array__NativeArraykernel__Object);
3744 ((struct instance_array__NativeArray*)var734)->values[0] = (val*) var721;
3745 ((struct instance_array__NativeArray*)var734)->values[1] = (val*) var723;
3746 ((struct instance_array__NativeArray*)var734)->values[2] = (val*) var_c_name;
3747 ((struct instance_array__NativeArray*)var734)->values[3] = (val*) var728;
3748 ((void (*)(val*, val*, long))(var732->class->vft[COLOR_array__Array__with_native]))(var732, var734, var733) /* with_native on <var732:Array[Object]>*/;
3749 }
3750 var735 = ((val* (*)(val*))(var732->class->vft[COLOR_string__Object__to_s]))(var732) /* to_s on <var732:Array[Object]>*/;
3751 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var720, var735) /* provide_declaration on <self:SeparateErasureCompiler>*/;
3752 if (varonce736) {
3753 var737 = varonce736;
3754 } else {
3755 var738 = "/* allocate ";
3756 var739 = 12;
3757 var740 = string__NativeString__to_s_with_length(var738, var739);
3758 var737 = var740;
3759 varonce736 = var737;
3760 }
3761 if (varonce741) {
3762 var742 = varonce741;
3763 } else {
3764 var743 = " */";
3765 var744 = 3;
3766 var745 = string__NativeString__to_s_with_length(var743, var744);
3767 var742 = var745;
3768 varonce741 = var742;
3769 }
3770 var746 = NEW_array__Array(&type_array__Arraykernel__Object);
3771 { /* var746 = array_instance Array[Object] */
3772 var747 = 3;
3773 var748 = NEW_array__NativeArray(var747, &type_array__NativeArraykernel__Object);
3774 ((struct instance_array__NativeArray*)var748)->values[0] = (val*) var737;
3775 ((struct instance_array__NativeArray*)var748)->values[1] = (val*) var_mtype;
3776 ((struct instance_array__NativeArray*)var748)->values[2] = (val*) var742;
3777 ((void (*)(val*, val*, long))(var746->class->vft[COLOR_array__Array__with_native]))(var746, var748, var747) /* with_native on <var746:Array[Object]>*/;
3778 }
3779 var749 = ((val* (*)(val*))(var746->class->vft[COLOR_string__Object__to_s]))(var746) /* to_s on <var746:Array[Object]>*/;
3780 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var749) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3781 var750 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3782 if (varonce751) {
3783 var752 = varonce751;
3784 } else {
3785 var753 = " NEW_";
3786 var754 = 5;
3787 var755 = string__NativeString__to_s_with_length(var753, var754);
3788 var752 = var755;
3789 varonce751 = var752;
3790 }
3791 if (varonce756) {
3792 var757 = varonce756;
3793 } else {
3794 var758 = "(void) {";
3795 var759 = 8;
3796 var760 = string__NativeString__to_s_with_length(var758, var759);
3797 var757 = var760;
3798 varonce756 = var757;
3799 }
3800 var761 = NEW_array__Array(&type_array__Arraykernel__Object);
3801 { /* var761 = array_instance Array[Object] */
3802 var762 = 4;
3803 var763 = NEW_array__NativeArray(var762, &type_array__NativeArraykernel__Object);
3804 ((struct instance_array__NativeArray*)var763)->values[0] = (val*) var750;
3805 ((struct instance_array__NativeArray*)var763)->values[1] = (val*) var752;
3806 ((struct instance_array__NativeArray*)var763)->values[2] = (val*) var_c_name;
3807 ((struct instance_array__NativeArray*)var763)->values[3] = (val*) var757;
3808 ((void (*)(val*, val*, long))(var761->class->vft[COLOR_array__Array__with_native]))(var761, var763, var762) /* with_native on <var761:Array[Object]>*/;
3809 }
3810 var764 = ((val* (*)(val*))(var761->class->vft[COLOR_string__Object__to_s]))(var761) /* to_s on <var761:Array[Object]>*/;
3811 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var764) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3812 if (varonce765) {
3813 var766 = varonce765;
3814 } else {
3815 var767 = "self";
3816 var768 = 4;
3817 var769 = string__NativeString__to_s_with_length(var767, var768);
3818 var766 = var769;
3819 varonce765 = var766;
3820 }
3821 var770 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_named_var]))(var_v, var_mtype, var766) /* new_named_var on <var_v:SeparateCompilerVisitor>*/;
3822 var_res771 = var770;
3823 var772 = 1;
3824 ((void (*)(val*, short int))(var_res771->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res771, var772) /* is_exact= on <var_res771:RuntimeVariable>*/;
3825 if (varonce773) {
3826 var774 = varonce773;
3827 } else {
3828 var775 = " = nit_alloc(sizeof(struct instance) + ";
3829 var776 = 39;
3830 var777 = string__NativeString__to_s_with_length(var775, var776);
3831 var774 = var777;
3832 varonce773 = var774;
3833 }
3834 var778 = ((long (*)(val*))(var_attrs->class->vft[COLOR_abstract_collection__Collection__length]))(var_attrs) /* length on <var_attrs:Array[nullable MPropDef]>*/;
3835 if (varonce779) {
3836 var780 = varonce779;
3837 } else {
3838 var781 = "*sizeof(nitattribute_t));";
3839 var782 = 25;
3840 var783 = string__NativeString__to_s_with_length(var781, var782);
3841 var780 = var783;
3842 varonce779 = var780;
3843 }
3844 var784 = NEW_array__Array(&type_array__Arraykernel__Object);
3845 { /* var784 = array_instance Array[Object] */
3846 var785 = 4;
3847 var786 = NEW_array__NativeArray(var785, &type_array__NativeArraykernel__Object);
3848 ((struct instance_array__NativeArray*)var786)->values[0] = (val*) var_res771;
3849 ((struct instance_array__NativeArray*)var786)->values[1] = (val*) var774;
3850 var787 = BOX_kernel__Int(var778); /* autobox from Int to Object */
3851 ((struct instance_array__NativeArray*)var786)->values[2] = (val*) var787;
3852 ((struct instance_array__NativeArray*)var786)->values[3] = (val*) var780;
3853 ((void (*)(val*, val*, long))(var784->class->vft[COLOR_array__Array__with_native]))(var784, var786, var785) /* with_native on <var784:Array[Object]>*/;
3854 }
3855 var788 = ((val* (*)(val*))(var784->class->vft[COLOR_string__Object__to_s]))(var784) /* to_s on <var784:Array[Object]>*/;
3856 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var788) /* add on <var_v:SeparateCompilerVisitor>*/;
3857 if (varonce789) {
3858 var790 = varonce789;
3859 } else {
3860 var791 = "class_";
3861 var792 = 6;
3862 var793 = string__NativeString__to_s_with_length(var791, var792);
3863 var790 = var793;
3864 varonce789 = var790;
3865 }
3866 var794 = NEW_array__Array(&type_array__Arraykernel__Object);
3867 { /* var794 = array_instance Array[Object] */
3868 var795 = 2;
3869 var796 = NEW_array__NativeArray(var795, &type_array__NativeArraykernel__Object);
3870 ((struct instance_array__NativeArray*)var796)->values[0] = (val*) var790;
3871 ((struct instance_array__NativeArray*)var796)->values[1] = (val*) var_c_name;
3872 ((void (*)(val*, val*, long))(var794->class->vft[COLOR_array__Array__with_native]))(var794, var796, var795) /* with_native on <var794:Array[Object]>*/;
3873 }
3874 var797 = ((val* (*)(val*))(var794->class->vft[COLOR_string__Object__to_s]))(var794) /* to_s on <var794:Array[Object]>*/;
3875 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var797) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3876 if (varonce798) {
3877 var799 = varonce798;
3878 } else {
3879 var800 = "->class = &class_";
3880 var801 = 17;
3881 var802 = string__NativeString__to_s_with_length(var800, var801);
3882 var799 = var802;
3883 varonce798 = var799;
3884 }
3885 if (varonce803) {
3886 var804 = varonce803;
3887 } else {
3888 var805 = ";";
3889 var806 = 1;
3890 var807 = string__NativeString__to_s_with_length(var805, var806);
3891 var804 = var807;
3892 varonce803 = var804;
3893 }
3894 var808 = NEW_array__Array(&type_array__Arraykernel__Object);
3895 { /* var808 = array_instance Array[Object] */
3896 var809 = 4;
3897 var810 = NEW_array__NativeArray(var809, &type_array__NativeArraykernel__Object);
3898 ((struct instance_array__NativeArray*)var810)->values[0] = (val*) var_res771;
3899 ((struct instance_array__NativeArray*)var810)->values[1] = (val*) var799;
3900 ((struct instance_array__NativeArray*)var810)->values[2] = (val*) var_c_name;
3901 ((struct instance_array__NativeArray*)var810)->values[3] = (val*) var804;
3902 ((void (*)(val*, val*, long))(var808->class->vft[COLOR_array__Array__with_native]))(var808, var810, var809) /* with_native on <var808:Array[Object]>*/;
3903 }
3904 var811 = ((val* (*)(val*))(var808->class->vft[COLOR_string__Object__to_s]))(var808) /* to_s on <var808:Array[Object]>*/;
3905 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var811) /* add on <var_v:SeparateCompilerVisitor>*/;
3906 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_init_attr]))(self, var_v, var_res771, var_mtype) /* generate_init_attr on <self:SeparateErasureCompiler>*/;
3907 if (varonce812) {
3908 var813 = varonce812;
3909 } else {
3910 var814 = "return ";
3911 var815 = 7;
3912 var816 = string__NativeString__to_s_with_length(var814, var815);
3913 var813 = var816;
3914 varonce812 = var813;
3915 }
3916 if (varonce817) {
3917 var818 = varonce817;
3918 } else {
3919 var819 = ";";
3920 var820 = 1;
3921 var821 = string__NativeString__to_s_with_length(var819, var820);
3922 var818 = var821;
3923 varonce817 = var818;
3924 }
3925 var822 = NEW_array__Array(&type_array__Arraykernel__Object);
3926 { /* var822 = array_instance Array[Object] */
3927 var823 = 3;
3928 var824 = NEW_array__NativeArray(var823, &type_array__NativeArraykernel__Object);
3929 ((struct instance_array__NativeArray*)var824)->values[0] = (val*) var813;
3930 ((struct instance_array__NativeArray*)var824)->values[1] = (val*) var_res771;
3931 ((struct instance_array__NativeArray*)var824)->values[2] = (val*) var818;
3932 ((void (*)(val*, val*, long))(var822->class->vft[COLOR_array__Array__with_native]))(var822, var824, var823) /* with_native on <var822:Array[Object]>*/;
3933 }
3934 var825 = ((val* (*)(val*))(var822->class->vft[COLOR_string__Object__to_s]))(var822) /* to_s on <var822:Array[Object]>*/;
3935 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var825) /* add on <var_v:SeparateCompilerVisitor>*/;
3936 if (varonce826) {
3937 var827 = varonce826;
3938 } else {
3939 var828 = "}";
3940 var829 = 1;
3941 var830 = string__NativeString__to_s_with_length(var828, var829);
3942 var827 = var830;
3943 varonce826 = var827;
3944 }
3945 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var827) /* add on <var_v:SeparateCompilerVisitor>*/;
3946 RET_LABEL:;
3947 }
3948 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: Object, MClass) */
3949 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
3950 separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(self, p0);
3951 RET_LABEL:;
3952 }
3953 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: SeparateErasureCompiler, MClass): Bool */
3954 short int separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
3955 short int var /* : Bool */;
3956 val* var_mclass /* var mclass: MClass */;
3957 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
3958 val* var2 /* : nullable Object */;
3959 short int var3 /* : Bool */;
3960 short int var4 /* : Bool */;
3961 static val* varonce;
3962 val* var5 /* : String */;
3963 char* var6 /* : NativeString */;
3964 long var7 /* : Int */;
3965 val* var8 /* : String */;
3966 val* var9 /* : String */;
3967 val* var10 /* : Array[Object] */;
3968 long var11 /* : Int */;
3969 val* var12 /* : NativeArray[Object] */;
3970 val* var13 /* : String */;
3971 static val* varonce14;
3972 val* var15 /* : String */;
3973 char* var16 /* : NativeString */;
3974 long var17 /* : Int */;
3975 val* var18 /* : String */;
3976 val* var19 /* : String */;
3977 static val* varonce20;
3978 val* var21 /* : String */;
3979 char* var22 /* : NativeString */;
3980 long var23 /* : Int */;
3981 val* var24 /* : String */;
3982 val* var25 /* : Array[Object] */;
3983 long var26 /* : Int */;
3984 val* var27 /* : NativeArray[Object] */;
3985 val* var28 /* : String */;
3986 val* var29 /* : AbstractCompilerVisitor */;
3987 val* var_v /* var v: SeparateCompilerVisitor */;
3988 static val* varonce30;
3989 val* var31 /* : String */;
3990 char* var32 /* : NativeString */;
3991 long var33 /* : Int */;
3992 val* var34 /* : String */;
3993 val* var35 /* : String */;
3994 static val* varonce36;
3995 val* var37 /* : String */;
3996 char* var38 /* : NativeString */;
3997 long var39 /* : Int */;
3998 val* var40 /* : String */;
3999 val* var41 /* : Array[Object] */;
4000 long var42 /* : Int */;
4001 val* var43 /* : NativeArray[Object] */;
4002 val* var44 /* : String */;
4003 val* var45 /* : nullable Layout[MVirtualTypeProp] */;
4004 short int var46 /* : Bool */;
4005 int cltype;
4006 int idtype;
4007 static val* varonce47;
4008 val* var48 /* : String */;
4009 char* var49 /* : NativeString */;
4010 long var50 /* : Int */;
4011 val* var51 /* : String */;
4012 static val* varonce52;
4013 val* var53 /* : String */;
4014 char* var54 /* : NativeString */;
4015 long var55 /* : Int */;
4016 val* var56 /* : String */;
4017 val* var57 /* : Map[MClass, Array[nullable MPropDef]] */;
4018 val* var58 /* : nullable Object */;
4019 val* var59 /* : Iterator[nullable Object] */;
4020 short int var60 /* : Bool */;
4021 val* var61 /* : nullable Object */;
4022 val* var_vt /* var vt: nullable MPropDef */;
4023 val* var62 /* : null */;
4024 short int var63 /* : Bool */;
4025 static val* varonce64;
4026 val* var65 /* : String */;
4027 char* var66 /* : NativeString */;
4028 long var67 /* : Int */;
4029 val* var68 /* : String */;
4030 long var69 /* : Int */;
4031 long var_is_null /* var is_null: Int */;
4032 val* var70 /* : MClassDef */;
4033 val* var71 /* : MClassType */;
4034 short int var72 /* : Bool */;
4035 int cltype73;
4036 int idtype74;
4037 const char* var_class_name;
4038 val* var75 /* : nullable MType */;
4039 val* var76 /* : MType */;
4040 val* var_bound /* var bound: MType */;
4041 short int var77 /* : Bool */;
4042 int cltype78;
4043 int idtype79;
4044 val* var80 /* : MClassDef */;
4045 val* var81 /* : MClassType */;
4046 val* var82 /* : MType */;
4047 val* var83 /* : MType */;
4048 long var84 /* : Int */;
4049 short int var85 /* : Bool */;
4050 int cltype86;
4051 int idtype87;
4052 const char* var_class_name88;
4053 val* var89 /* : MClass */;
4054 val* var_vtclass /* var vtclass: MClass */;
4055 static val* varonce90;
4056 val* var91 /* : String */;
4057 char* var92 /* : NativeString */;
4058 long var93 /* : Int */;
4059 val* var94 /* : String */;
4060 val* var95 /* : String */;
4061 val* var96 /* : Array[Object] */;
4062 long var97 /* : Int */;
4063 val* var98 /* : NativeArray[Object] */;
4064 val* var99 /* : String */;
4065 static val* varonce100;
4066 val* var101 /* : String */;
4067 char* var102 /* : NativeString */;
4068 long var103 /* : Int */;
4069 val* var104 /* : String */;
4070 static val* varonce105;
4071 val* var106 /* : String */;
4072 char* var107 /* : NativeString */;
4073 long var108 /* : Int */;
4074 val* var109 /* : String */;
4075 val* var110 /* : String */;
4076 static val* varonce111;
4077 val* var112 /* : String */;
4078 char* var113 /* : NativeString */;
4079 long var114 /* : Int */;
4080 val* var115 /* : String */;
4081 static val* varonce116;
4082 val* var117 /* : String */;
4083 char* var118 /* : NativeString */;
4084 long var119 /* : Int */;
4085 val* var120 /* : String */;
4086 val* var121 /* : Array[Object] */;
4087 long var122 /* : Int */;
4088 val* var123 /* : NativeArray[Object] */;
4089 val* var124 /* : Object */;
4090 val* var125 /* : String */;
4091 static val* varonce127;
4092 val* var128 /* : String */;
4093 char* var129 /* : NativeString */;
4094 long var130 /* : Int */;
4095 val* var131 /* : String */;
4096 static val* varonce132;
4097 val* var133 /* : String */;
4098 char* var134 /* : NativeString */;
4099 long var135 /* : Int */;
4100 val* var136 /* : String */;
4101 short int var137 /* : Bool */;
4102 var_mclass = p0;
4103 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4104 var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var1, var_mclass) /* [] on <var1:Map[MClass, Array[nullable MPropDef]]>*/;
4105 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var2) /* is_empty on <var2:nullable Object(Array[nullable MPropDef])>*/;
4106 if (var3){
4107 var4 = 0;
4108 var = var4;
4109 goto RET_LABEL;
4110 } else {
4111 }
4112 if (varonce) {
4113 var5 = varonce;
4114 } else {
4115 var6 = "vts_table_";
4116 var7 = 10;
4117 var8 = string__NativeString__to_s_with_length(var6, var7);
4118 var5 = var8;
4119 varonce = var5;
4120 }
4121 var9 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4122 var10 = NEW_array__Array(&type_array__Arraykernel__Object);
4123 { /* var10 = array_instance Array[Object] */
4124 var11 = 2;
4125 var12 = NEW_array__NativeArray(var11, &type_array__NativeArraykernel__Object);
4126 ((struct instance_array__NativeArray*)var12)->values[0] = (val*) var5;
4127 ((struct instance_array__NativeArray*)var12)->values[1] = (val*) var9;
4128 ((void (*)(val*, val*, long))(var10->class->vft[COLOR_array__Array__with_native]))(var10, var12, var11) /* with_native on <var10:Array[Object]>*/;
4129 }
4130 var13 = ((val* (*)(val*))(var10->class->vft[COLOR_string__Object__to_s]))(var10) /* to_s on <var10:Array[Object]>*/;
4131 if (varonce14) {
4132 var15 = varonce14;
4133 } else {
4134 var16 = "extern const struct vts_table vts_table_";
4135 var17 = 40;
4136 var18 = string__NativeString__to_s_with_length(var16, var17);
4137 var15 = var18;
4138 varonce14 = var15;
4139 }
4140 var19 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4141 if (varonce20) {
4142 var21 = varonce20;
4143 } else {
4144 var22 = ";";
4145 var23 = 1;
4146 var24 = string__NativeString__to_s_with_length(var22, var23);
4147 var21 = var24;
4148 varonce20 = var21;
4149 }
4150 var25 = NEW_array__Array(&type_array__Arraykernel__Object);
4151 { /* var25 = array_instance Array[Object] */
4152 var26 = 3;
4153 var27 = NEW_array__NativeArray(var26, &type_array__NativeArraykernel__Object);
4154 ((struct instance_array__NativeArray*)var27)->values[0] = (val*) var15;
4155 ((struct instance_array__NativeArray*)var27)->values[1] = (val*) var19;
4156 ((struct instance_array__NativeArray*)var27)->values[2] = (val*) var21;
4157 ((void (*)(val*, val*, long))(var25->class->vft[COLOR_array__Array__with_native]))(var25, var27, var26) /* with_native on <var25:Array[Object]>*/;
4158 }
4159 var28 = ((val* (*)(val*))(var25->class->vft[COLOR_string__Object__to_s]))(var25) /* to_s on <var25:Array[Object]>*/;
4160 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var13, var28) /* provide_declaration on <self:SeparateErasureCompiler>*/;
4161 var29 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateErasureCompiler>*/;
4162 var_v = var29;
4163 if (varonce30) {
4164 var31 = varonce30;
4165 } else {
4166 var32 = "const struct vts_table vts_table_";
4167 var33 = 33;
4168 var34 = string__NativeString__to_s_with_length(var32, var33);
4169 var31 = var34;
4170 varonce30 = var31;
4171 }
4172 var35 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4173 if (varonce36) {
4174 var37 = varonce36;
4175 } else {
4176 var38 = " = {";
4177 var39 = 4;
4178 var40 = string__NativeString__to_s_with_length(var38, var39);
4179 var37 = var40;
4180 varonce36 = var37;
4181 }
4182 var41 = NEW_array__Array(&type_array__Arraykernel__Object);
4183 { /* var41 = array_instance Array[Object] */
4184 var42 = 3;
4185 var43 = NEW_array__NativeArray(var42, &type_array__NativeArraykernel__Object);
4186 ((struct instance_array__NativeArray*)var43)->values[0] = (val*) var31;
4187 ((struct instance_array__NativeArray*)var43)->values[1] = (val*) var35;
4188 ((struct instance_array__NativeArray*)var43)->values[2] = (val*) var37;
4189 ((void (*)(val*, val*, long))(var41->class->vft[COLOR_array__Array__with_native]))(var41, var43, var42) /* with_native on <var41:Array[Object]>*/;
4190 }
4191 var44 = ((val* (*)(val*))(var41->class->vft[COLOR_string__Object__to_s]))(var41) /* to_s on <var41:Array[Object]>*/;
4192 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var44) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4193 var45 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(self) /* vt_layout on <self:SeparateErasureCompiler>*/;
4194 /* <var45:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
4195 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
4196 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
4197 if(var45 == NULL) {
4198 var46 = 0;
4199 } else {
4200 if(cltype >= var45->type->table_size) {
4201 var46 = 0;
4202 } else {
4203 var46 = var45->type->type_table[cltype] == idtype;
4204 }
4205 }
4206 if (var46){
4207 } else {
4208 if (varonce47) {
4209 var48 = varonce47;
4210 } else {
4211 var49 = "0, /* dummy */";
4212 var50 = 14;
4213 var51 = string__NativeString__to_s_with_length(var49, var50);
4214 var48 = var51;
4215 varonce47 = var48;
4216 }
4217 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var48) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4218 }
4219 if (varonce52) {
4220 var53 = varonce52;
4221 } else {
4222 var54 = "{";
4223 var55 = 1;
4224 var56 = string__NativeString__to_s_with_length(var54, var55);
4225 var53 = var56;
4226 varonce52 = var53;
4227 }
4228 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var53) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4229 var57 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4230 var58 = ((val* (*)(val*, val*))(var57->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var57, var_mclass) /* [] on <var57:Map[MClass, Array[nullable MPropDef]]>*/;
4231 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__Collection__iterator]))(var58) /* iterator on <var58:nullable Object(Array[nullable MPropDef])>*/;
4232 for(;;) {
4233 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var59) /* is_ok on <var59:Iterator[nullable Object]>*/;
4234 if(!var60) break;
4235 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__item]))(var59) /* item on <var59:Iterator[nullable Object]>*/;
4236 var_vt = var61;
4237 var62 = NULL;
4238 if (var_vt == NULL) {
4239 var63 = 1; /* is null */
4240 } else {
4241 var63 = 0; /* arg is null but recv is not */
4242 }
4243 if (var63){
4244 if (varonce64) {
4245 var65 = varonce64;
4246 } else {
4247 var66 = "{-1, NULL}, /* empty */";
4248 var67 = 23;
4249 var68 = string__NativeString__to_s_with_length(var66, var67);
4250 var65 = var68;
4251 varonce64 = var65;
4252 }
4253 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var65) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4254 } else {
4255 var69 = 0;
4256 var_is_null = var69;
4257 var70 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
4258 var71 = ((val* (*)(val*))(var70->class->vft[COLOR_model__MClassDef__bound_mtype]))(var70) /* bound_mtype on <var70:MClassDef>*/;
4259 /* <var_vt:nullable MPropDef(MPropDef)> isa MVirtualTypeDef */
4260 cltype73 = type_model__MVirtualTypeDef.color;
4261 idtype74 = type_model__MVirtualTypeDef.id;
4262 if(cltype73 >= var_vt->type->table_size) {
4263 var72 = 0;
4264 } else {
4265 var72 = var_vt->type->type_table[cltype73] == idtype74;
4266 }
4267 if (!var72) {
4268 var_class_name = var_vt == NULL ? "null" : var_vt->type->name;
4269 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MVirtualTypeDef", var_class_name);
4270 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 361);
4271 show_backtrace(1);
4272 }
4273 var75 = ((val* (*)(val*))(var_vt->class->vft[COLOR_model__MVirtualTypeDef__bound]))(var_vt) /* bound on <var_vt:MPropDef(MVirtualTypeDef)>*/;
4274 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>*/;
4275 var_bound = var76;
4276 for(;;) {
4277 /* <var_bound:MType> isa MNullableType */
4278 cltype78 = type_model__MNullableType.color;
4279 idtype79 = type_model__MNullableType.id;
4280 if(cltype78 >= var_bound->type->table_size) {
4281 var77 = 0;
4282 } else {
4283 var77 = var_bound->type->type_table[cltype78] == idtype79;
4284 }
4285 if (!var77) break;
4286 var80 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
4287 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_model__MClassDef__bound_mtype]))(var80) /* bound_mtype on <var80:MClassDef>*/;
4288 var82 = ((val* (*)(val*))(var_bound->class->vft[COLOR_model__MNullableType__mtype]))(var_bound) /* mtype on <var_bound:MType(MNullableType)>*/;
4289 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>*/;
4290 var_bound = var83;
4291 var84 = 1;
4292 var_is_null = var84;
4293 CONTINUE_label: (void)0;
4294 }
4295 BREAK_label: (void)0;
4296 /* <var_bound:MType> isa MClassType */
4297 cltype86 = type_model__MClassType.color;
4298 idtype87 = type_model__MClassType.id;
4299 if(cltype86 >= var_bound->type->table_size) {
4300 var85 = 0;
4301 } else {
4302 var85 = var_bound->type->type_table[cltype86] == idtype87;
4303 }
4304 if (!var85) {
4305 var_class_name88 = var_bound == NULL ? "null" : var_bound->type->name;
4306 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name88);
4307 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 366);
4308 show_backtrace(1);
4309 }
4310 var89 = ((val* (*)(val*))(var_bound->class->vft[COLOR_model__MClassType__mclass]))(var_bound) /* mclass on <var_bound:MType(MClassType)>*/;
4311 var_vtclass = var89;
4312 if (varonce90) {
4313 var91 = varonce90;
4314 } else {
4315 var92 = "class_";
4316 var93 = 6;
4317 var94 = string__NativeString__to_s_with_length(var92, var93);
4318 var91 = var94;
4319 varonce90 = var91;
4320 }
4321 var95 = ((val* (*)(val*))(var_vtclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_vtclass) /* c_name on <var_vtclass:MClass>*/;
4322 var96 = NEW_array__Array(&type_array__Arraykernel__Object);
4323 { /* var96 = array_instance Array[Object] */
4324 var97 = 2;
4325 var98 = NEW_array__NativeArray(var97, &type_array__NativeArraykernel__Object);
4326 ((struct instance_array__NativeArray*)var98)->values[0] = (val*) var91;
4327 ((struct instance_array__NativeArray*)var98)->values[1] = (val*) var95;
4328 ((void (*)(val*, val*, long))(var96->class->vft[COLOR_array__Array__with_native]))(var96, var98, var97) /* with_native on <var96:Array[Object]>*/;
4329 }
4330 var99 = ((val* (*)(val*))(var96->class->vft[COLOR_string__Object__to_s]))(var96) /* to_s on <var96:Array[Object]>*/;
4331 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var99) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
4332 if (varonce100) {
4333 var101 = varonce100;
4334 } else {
4335 var102 = "{";
4336 var103 = 1;
4337 var104 = string__NativeString__to_s_with_length(var102, var103);
4338 var101 = var104;
4339 varonce100 = var101;
4340 }
4341 if (varonce105) {
4342 var106 = varonce105;
4343 } else {
4344 var107 = ", &class_";
4345 var108 = 9;
4346 var109 = string__NativeString__to_s_with_length(var107, var108);
4347 var106 = var109;
4348 varonce105 = var106;
4349 }
4350 var110 = ((val* (*)(val*))(var_vtclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_vtclass) /* c_name on <var_vtclass:MClass>*/;
4351 if (varonce111) {
4352 var112 = varonce111;
4353 } else {
4354 var113 = "}, /* ";
4355 var114 = 6;
4356 var115 = string__NativeString__to_s_with_length(var113, var114);
4357 var112 = var115;
4358 varonce111 = var112;
4359 }
4360 if (varonce116) {
4361 var117 = varonce116;
4362 } else {
4363 var118 = " */";
4364 var119 = 3;
4365 var120 = string__NativeString__to_s_with_length(var118, var119);
4366 var117 = var120;
4367 varonce116 = var117;
4368 }
4369 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
4370 { /* var121 = array_instance Array[Object] */
4371 var122 = 7;
4372 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
4373 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var101;
4374 var124 = BOX_kernel__Int(var_is_null); /* autobox from Int to Object */
4375 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var124;
4376 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var106;
4377 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var110;
4378 ((struct instance_array__NativeArray*)var123)->values[4] = (val*) var112;
4379 ((struct instance_array__NativeArray*)var123)->values[5] = (val*) var_vt;
4380 ((struct instance_array__NativeArray*)var123)->values[6] = (val*) var117;
4381 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
4382 }
4383 var125 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
4384 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var125) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4385 }
4386 CONTINUE_label126: (void)0;
4387 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__next]))(var59) /* next on <var59:Iterator[nullable Object]>*/;
4388 }
4389 BREAK_label126: (void)0;
4390 if (varonce127) {
4391 var128 = varonce127;
4392 } else {
4393 var129 = "},";
4394 var130 = 2;
4395 var131 = string__NativeString__to_s_with_length(var129, var130);
4396 var128 = var131;
4397 varonce127 = var128;
4398 }
4399 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var128) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4400 if (varonce132) {
4401 var133 = varonce132;
4402 } else {
4403 var134 = "};";
4404 var135 = 2;
4405 var136 = string__NativeString__to_s_with_length(var134, var135);
4406 var133 = var136;
4407 varonce132 = var133;
4408 }
4409 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var133) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4410 var137 = 1;
4411 var = var137;
4412 goto RET_LABEL;
4413 RET_LABEL:;
4414 return var;
4415 }
4416 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: Object, MClass): Bool */
4417 short int VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
4418 short int var /* : Bool */;
4419 short int var1 /* : Bool */;
4420 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(self, p0);
4421 var = var1;
4422 RET_LABEL:;
4423 return var;
4424 }
4425 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: SeparateErasureCompiler, MClassType, nullable MType): MType */
4426 val* separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
4427 val* var /* : MType */;
4428 val* var_anchor /* var anchor: MClassType */;
4429 val* var_mtype /* var mtype: nullable MType */;
4430 val* var1 /* : null */;
4431 short int var2 /* : Bool */;
4432 static val* varonce;
4433 val* var3 /* : String */;
4434 char* var4 /* : NativeString */;
4435 long var5 /* : Int */;
4436 val* var6 /* : String */;
4437 short int var7 /* : Bool */;
4438 int cltype;
4439 int idtype;
4440 val* var8 /* : MModule */;
4441 val* var9 /* : MType */;
4442 short int var10 /* : Bool */;
4443 int cltype11;
4444 int idtype12;
4445 val* var13 /* : MModule */;
4446 val* var14 /* : MType */;
4447 var_anchor = p0;
4448 var_mtype = p1;
4449 var1 = NULL;
4450 if (var_mtype == NULL) {
4451 var2 = 1; /* is null */
4452 } else {
4453 var2 = 0; /* arg is null but recv is not */
4454 }
4455 if (var2){
4456 if (varonce) {
4457 var3 = varonce;
4458 } else {
4459 var4 = "NOT YET IMPLEMENTED: retrieve_vt_bound on null";
4460 var5 = 46;
4461 var6 = string__NativeString__to_s_with_length(var4, var5);
4462 var3 = var6;
4463 varonce = var3;
4464 }
4465 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var3) /* print on <self:SeparateErasureCompiler>*/;
4466 fprintf(stderr, "Runtime error: %s", "Aborted");
4467 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 379);
4468 show_backtrace(1);
4469 } else {
4470 }
4471 /* <var_mtype:nullable MType(MType)> isa MVirtualType */
4472 cltype = type_model__MVirtualType.color;
4473 idtype = type_model__MVirtualType.id;
4474 if(cltype >= var_mtype->type->table_size) {
4475 var7 = 0;
4476 } else {
4477 var7 = var_mtype->type->type_table[cltype] == idtype;
4478 }
4479 if (var7){
4480 var8 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
4481 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)>*/;
4482 var = var9;
4483 goto RET_LABEL;
4484 } else {
4485 /* <var_mtype:nullable MType(MType)> isa MParameterType */
4486 cltype11 = type_model__MParameterType.color;
4487 idtype12 = type_model__MParameterType.id;
4488 if(cltype11 >= var_mtype->type->table_size) {
4489 var10 = 0;
4490 } else {
4491 var10 = var_mtype->type->type_table[cltype11] == idtype12;
4492 }
4493 if (var10){
4494 var13 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
4495 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)>*/;
4496 var = var14;
4497 goto RET_LABEL;
4498 } else {
4499 var = var_mtype;
4500 goto RET_LABEL;
4501 }
4502 }
4503 RET_LABEL:;
4504 return var;
4505 }
4506 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: Object, MClassType, nullable MType): MType */
4507 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
4508 val* var /* : MType */;
4509 val* var1 /* : MType */;
4510 var1 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, p0, p1);
4511 var = var1;
4512 RET_LABEL:;
4513 return var;
4514 }
4515 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: SeparateErasureCompiler): SeparateCompilerVisitor */
4516 val* separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
4517 val* var /* : SeparateCompilerVisitor */;
4518 val* var1 /* : SeparateErasureCompilerVisitor */;
4519 short int var2 /* : Bool */;
4520 int cltype;
4521 int idtype;
4522 const struct type* type_struct;
4523 const char* var_class_name;
4524 var1 = NEW_separate_erasure_compiler__SeparateErasureCompilerVisitor(&type_separate_erasure_compiler__SeparateErasureCompilerVisitor);
4525 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init]))(var1, self) /* init on <var1:SeparateErasureCompilerVisitor>*/;
4526 /* <var1:SeparateErasureCompilerVisitor> isa VISITOR */
4527 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
4528 cltype = type_struct->color;
4529 idtype = type_struct->id;
4530 if(cltype >= var1->type->table_size) {
4531 var2 = 0;
4532 } else {
4533 var2 = var1->type->type_table[cltype] == idtype;
4534 }
4535 if (!var2) {
4536 var_class_name = var1 == NULL ? "null" : var1->type->name;
4537 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
4538 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 390);
4539 show_backtrace(1);
4540 }
4541 var = var1;
4542 goto RET_LABEL;
4543 RET_LABEL:;
4544 return var;
4545 }
4546 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
4547 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
4548 val* var /* : AbstractCompilerVisitor */;
4549 val* var1 /* : SeparateCompilerVisitor */;
4550 var1 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
4551 var = var1;
4552 RET_LABEL:;
4553 return var;
4554 }
4555 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MClass]] */
4556 val* separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
4557 val* var /* : Map[MClass, Array[nullable MClass]] */;
4558 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
4559 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_tables].val; /* @class_tables on <self:SeparateErasureCompiler> */
4560 if (var1 == NULL) {
4561 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @class_tables");
4562 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 394);
4563 show_backtrace(1);
4564 }
4565 var = var1;
4566 RET_LABEL:;
4567 return var;
4568 }
4569 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: Object): Map[MClass, Array[nullable MClass]] */
4570 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
4571 val* var /* : Map[MClass, Array[nullable MClass]] */;
4572 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
4573 var1 = separate_erasure_compiler__SeparateErasureCompiler__class_tables(self);
4574 var = var1;
4575 RET_LABEL:;
4576 return var;
4577 }
4578 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MClass]]) */
4579 void separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
4580 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_tables].val = p0; /* @class_tables on <self:SeparateErasureCompiler> */
4581 RET_LABEL:;
4582 }
4583 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: Object, Map[MClass, Array[nullable MClass]]) */
4584 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
4585 separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(self, p0);
4586 RET_LABEL:;
4587 }
4588 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MPropDef]] */
4589 val* separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
4590 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
4591 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
4592 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_tables].val; /* @vt_tables on <self:SeparateErasureCompiler> */
4593 if (var1 == NULL) {
4594 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @vt_tables");
4595 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 395);
4596 show_backtrace(1);
4597 }
4598 var = var1;
4599 RET_LABEL:;
4600 return var;
4601 }
4602 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: Object): Map[MClass, Array[nullable MPropDef]] */
4603 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
4604 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
4605 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
4606 var1 = separate_erasure_compiler__SeparateErasureCompiler__vt_tables(self);
4607 var = var1;
4608 RET_LABEL:;
4609 return var;
4610 }
4611 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MPropDef]]) */
4612 void separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
4613 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_tables].val = p0; /* @vt_tables on <self:SeparateErasureCompiler> */
4614 RET_LABEL:;
4615 }
4616 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: Object, Map[MClass, Array[nullable MPropDef]]) */
4617 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
4618 separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(self, p0);
4619 RET_LABEL:;
4620 }
4621 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: SeparateErasureCompiler) */
4622 void separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
4623 static val* varonce;
4624 val* var /* : String */;
4625 char* var1 /* : NativeString */;
4626 long var2 /* : Int */;
4627 val* var3 /* : String */;
4628 static val* varonce4;
4629 val* var5 /* : String */;
4630 char* var6 /* : NativeString */;
4631 long var7 /* : Int */;
4632 val* var8 /* : String */;
4633 long var9 /* : Int */;
4634 long var_total /* var total: Int */;
4635 long var10 /* : Int */;
4636 long var_holes /* var holes: Int */;
4637 val* var11 /* : Map[MClass, Array[nullable MClass]] */;
4638 val* var12 /* : MapIterator[Object, nullable Object] */;
4639 short int var13 /* : Bool */;
4640 val* var14 /* : Object */;
4641 val* var_t /* var t: MClass */;
4642 val* var15 /* : nullable Object */;
4643 val* var_table /* var table: Array[nullable MClass] */;
4644 long var16 /* : Int */;
4645 long var17 /* : Int */;
4646 long var19 /* : Int */;
4647 val* var20 /* : Iterator[nullable Object] */;
4648 short int var21 /* : Bool */;
4649 val* var22 /* : nullable Object */;
4650 val* var_e /* var e: nullable MClass */;
4651 val* var23 /* : null */;
4652 short int var24 /* : Bool */;
4653 long var25 /* : Int */;
4654 long var26 /* : Int */;
4655 long var28 /* : Int */;
4656 static val* varonce30;
4657 val* var31 /* : String */;
4658 char* var32 /* : NativeString */;
4659 long var33 /* : Int */;
4660 val* var34 /* : String */;
4661 static val* varonce35;
4662 val* var36 /* : String */;
4663 char* var37 /* : NativeString */;
4664 long var38 /* : Int */;
4665 val* var39 /* : String */;
4666 val* var40 /* : Array[Object] */;
4667 long var41 /* : Int */;
4668 val* var42 /* : NativeArray[Object] */;
4669 val* var43 /* : Object */;
4670 val* var44 /* : Object */;
4671 val* var45 /* : String */;
4672 static val* varonce46;
4673 val* var47 /* : String */;
4674 char* var48 /* : NativeString */;
4675 long var49 /* : Int */;
4676 val* var50 /* : String */;
4677 static val* varonce51;
4678 val* var52 /* : String */;
4679 char* var53 /* : NativeString */;
4680 long var54 /* : Int */;
4681 val* var55 /* : String */;
4682 long var56 /* : Int */;
4683 long var57 /* : Int */;
4684 val* var58 /* : Map[MClass, Array[nullable MPropDef]] */;
4685 val* var59 /* : MapIterator[Object, nullable Object] */;
4686 short int var60 /* : Bool */;
4687 val* var61 /* : Object */;
4688 val* var_t62 /* var t: MClass */;
4689 val* var63 /* : nullable Object */;
4690 val* var_table64 /* var table: Array[nullable MPropDef] */;
4691 long var65 /* : Int */;
4692 long var66 /* : Int */;
4693 long var68 /* : Int */;
4694 val* var69 /* : Iterator[nullable Object] */;
4695 short int var70 /* : Bool */;
4696 val* var71 /* : nullable Object */;
4697 val* var_e72 /* var e: nullable MPropDef */;
4698 val* var73 /* : null */;
4699 short int var74 /* : Bool */;
4700 long var75 /* : Int */;
4701 long var76 /* : Int */;
4702 long var78 /* : Int */;
4703 static val* varonce81;
4704 val* var82 /* : String */;
4705 char* var83 /* : NativeString */;
4706 long var84 /* : Int */;
4707 val* var85 /* : String */;
4708 static val* varonce86;
4709 val* var87 /* : String */;
4710 char* var88 /* : NativeString */;
4711 long var89 /* : Int */;
4712 val* var90 /* : String */;
4713 val* var91 /* : Array[Object] */;
4714 long var92 /* : Int */;
4715 val* var93 /* : NativeArray[Object] */;
4716 val* var94 /* : Object */;
4717 val* var95 /* : Object */;
4718 val* var96 /* : String */;
4719 static val* varonce97;
4720 val* var98 /* : String */;
4721 char* var99 /* : NativeString */;
4722 long var100 /* : Int */;
4723 val* var101 /* : String */;
4724 static val* varonce102;
4725 val* var103 /* : String */;
4726 char* var104 /* : NativeString */;
4727 long var105 /* : Int */;
4728 val* var106 /* : String */;
4729 long var107 /* : Int */;
4730 long var108 /* : Int */;
4731 val* var109 /* : Map[MClass, Array[nullable MPropDef]] */;
4732 val* var110 /* : MapIterator[Object, nullable Object] */;
4733 short int var111 /* : Bool */;
4734 val* var112 /* : Object */;
4735 val* var_t113 /* var t: MClass */;
4736 val* var114 /* : nullable Object */;
4737 val* var_table115 /* var table: Array[nullable MPropDef] */;
4738 long var116 /* : Int */;
4739 long var117 /* : Int */;
4740 long var119 /* : Int */;
4741 val* var120 /* : Iterator[nullable Object] */;
4742 short int var121 /* : Bool */;
4743 val* var122 /* : nullable Object */;
4744 val* var_e123 /* var e: nullable MPropDef */;
4745 val* var124 /* : null */;
4746 short int var125 /* : Bool */;
4747 long var126 /* : Int */;
4748 long var127 /* : Int */;
4749 long var129 /* : Int */;
4750 static val* varonce132;
4751 val* var133 /* : String */;
4752 char* var134 /* : NativeString */;
4753 long var135 /* : Int */;
4754 val* var136 /* : String */;
4755 static val* varonce137;
4756 val* var138 /* : String */;
4757 char* var139 /* : NativeString */;
4758 long var140 /* : Int */;
4759 val* var141 /* : String */;
4760 val* var142 /* : Array[Object] */;
4761 long var143 /* : Int */;
4762 val* var144 /* : NativeArray[Object] */;
4763 val* var145 /* : Object */;
4764 val* var146 /* : Object */;
4765 val* var147 /* : String */;
4766 static val* varonce148;
4767 val* var149 /* : String */;
4768 char* var150 /* : NativeString */;
4769 long var151 /* : Int */;
4770 val* var152 /* : String */;
4771 static val* varonce153;
4772 val* var154 /* : String */;
4773 char* var155 /* : NativeString */;
4774 long var156 /* : Int */;
4775 val* var157 /* : String */;
4776 long var158 /* : Int */;
4777 long var159 /* : Int */;
4778 val* var160 /* : Map[MClass, Array[nullable MPropDef]] */;
4779 val* var161 /* : MapIterator[Object, nullable Object] */;
4780 short int var162 /* : Bool */;
4781 val* var163 /* : Object */;
4782 val* var_t164 /* var t: MClass */;
4783 val* var165 /* : nullable Object */;
4784 val* var_table166 /* var table: Array[nullable MPropDef] */;
4785 long var167 /* : Int */;
4786 long var168 /* : Int */;
4787 long var170 /* : Int */;
4788 val* var171 /* : Iterator[nullable Object] */;
4789 short int var172 /* : Bool */;
4790 val* var173 /* : nullable Object */;
4791 val* var_e174 /* var e: nullable MPropDef */;
4792 val* var175 /* : null */;
4793 short int var176 /* : Bool */;
4794 long var177 /* : Int */;
4795 long var178 /* : Int */;
4796 long var180 /* : Int */;
4797 static val* varonce183;
4798 val* var184 /* : String */;
4799 char* var185 /* : NativeString */;
4800 long var186 /* : Int */;
4801 val* var187 /* : String */;
4802 static val* varonce188;
4803 val* var189 /* : String */;
4804 char* var190 /* : NativeString */;
4805 long var191 /* : Int */;
4806 val* var192 /* : String */;
4807 val* var193 /* : Array[Object] */;
4808 long var194 /* : Int */;
4809 val* var195 /* : NativeArray[Object] */;
4810 val* var196 /* : Object */;
4811 val* var197 /* : Object */;
4812 val* var198 /* : String */;
4813 if (varonce) {
4814 var = varonce;
4815 } else {
4816 var1 = "# size of subtyping tables";
4817 var2 = 26;
4818 var3 = string__NativeString__to_s_with_length(var1, var2);
4819 var = var3;
4820 varonce = var;
4821 }
4822 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var) /* print on <self:SeparateErasureCompiler>*/;
4823 if (varonce4) {
4824 var5 = varonce4;
4825 } else {
4826 var6 = "\11total \11holes";
4827 var7 = 13;
4828 var8 = string__NativeString__to_s_with_length(var6, var7);
4829 var5 = var8;
4830 varonce4 = var5;
4831 }
4832 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var5) /* print on <self:SeparateErasureCompiler>*/;
4833 var9 = 0;
4834 var_total = var9;
4835 var10 = 0;
4836 var_holes = var10;
4837 var11 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables]))(self) /* class_tables on <self:SeparateErasureCompiler>*/;
4838 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var11) /* iterator on <var11:Map[MClass, Array[nullable MClass]]>*/;
4839 for(;;) {
4840 var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var12) /* is_ok on <var12:MapIterator[Object, nullable Object]>*/;
4841 if(!var13) break;
4842 var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__key]))(var12) /* key on <var12:MapIterator[Object, nullable Object]>*/;
4843 var_t = var14;
4844 var15 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__item]))(var12) /* item on <var12:MapIterator[Object, nullable Object]>*/;
4845 var_table = var15;
4846 var16 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
4847 { /* Inline kernel#Int#+ (var_total,var16) */
4848 var19 = var_total + var16;
4849 var17 = var19;
4850 goto RET_LABEL18;
4851 RET_LABEL18:(void)0;
4852 }
4853 var_total = var17;
4854 var20 = ((val* (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table) /* iterator on <var_table:Array[nullable MClass]>*/;
4855 for(;;) {
4856 var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
4857 if(!var21) break;
4858 var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
4859 var_e = var22;
4860 var23 = NULL;
4861 if (var_e == NULL) {
4862 var24 = 1; /* is null */
4863 } else {
4864 var24 = 0; /* arg is null but recv is not */
4865 }
4866 if (var24){
4867 var25 = 1;
4868 { /* Inline kernel#Int#+ (var_holes,var25) */
4869 var28 = var_holes + var25;
4870 var26 = var28;
4871 goto RET_LABEL27;
4872 RET_LABEL27:(void)0;
4873 }
4874 var_holes = var26;
4875 } else {
4876 }
4877 CONTINUE_label: (void)0;
4878 ((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
4879 }
4880 BREAK_label: (void)0;
4881 CONTINUE_label29: (void)0;
4882 ((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__next]))(var12) /* next on <var12:MapIterator[Object, nullable Object]>*/;
4883 }
4884 BREAK_label29: (void)0;
4885 if (varonce30) {
4886 var31 = varonce30;
4887 } else {
4888 var32 = "\11";
4889 var33 = 1;
4890 var34 = string__NativeString__to_s_with_length(var32, var33);
4891 var31 = var34;
4892 varonce30 = var31;
4893 }
4894 if (varonce35) {
4895 var36 = varonce35;
4896 } else {
4897 var37 = "\11";
4898 var38 = 1;
4899 var39 = string__NativeString__to_s_with_length(var37, var38);
4900 var36 = var39;
4901 varonce35 = var36;
4902 }
4903 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
4904 { /* var40 = array_instance Array[Object] */
4905 var41 = 4;
4906 var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
4907 ((struct instance_array__NativeArray*)var42)->values[0] = (val*) var31;
4908 var43 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
4909 ((struct instance_array__NativeArray*)var42)->values[1] = (val*) var43;
4910 ((struct instance_array__NativeArray*)var42)->values[2] = (val*) var36;
4911 var44 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
4912 ((struct instance_array__NativeArray*)var42)->values[3] = (val*) var44;
4913 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
4914 }
4915 var45 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
4916 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var45) /* print on <self:SeparateErasureCompiler>*/;
4917 if (varonce46) {
4918 var47 = varonce46;
4919 } else {
4920 var48 = "# size of resolution tables";
4921 var49 = 27;
4922 var50 = string__NativeString__to_s_with_length(var48, var49);
4923 var47 = var50;
4924 varonce46 = var47;
4925 }
4926 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var47) /* print on <self:SeparateErasureCompiler>*/;
4927 if (varonce51) {
4928 var52 = varonce51;
4929 } else {
4930 var53 = "\11total \11holes";
4931 var54 = 13;
4932 var55 = string__NativeString__to_s_with_length(var53, var54);
4933 var52 = var55;
4934 varonce51 = var52;
4935 }
4936 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var52) /* print on <self:SeparateErasureCompiler>*/;
4937 var56 = 0;
4938 var_total = var56;
4939 var57 = 0;
4940 var_holes = var57;
4941 var58 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4942 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var58) /* iterator on <var58:Map[MClass, Array[nullable MPropDef]]>*/;
4943 for(;;) {
4944 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var59) /* is_ok on <var59:MapIterator[Object, nullable Object]>*/;
4945 if(!var60) break;
4946 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__key]))(var59) /* key on <var59:MapIterator[Object, nullable Object]>*/;
4947 var_t62 = var61;
4948 var63 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__item]))(var59) /* item on <var59:MapIterator[Object, nullable Object]>*/;
4949 var_table64 = var63;
4950 var65 = ((long (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__length]))(var_table64) /* length on <var_table64:Array[nullable MPropDef]>*/;
4951 { /* Inline kernel#Int#+ (var_total,var65) */
4952 var68 = var_total + var65;
4953 var66 = var68;
4954 goto RET_LABEL67;
4955 RET_LABEL67:(void)0;
4956 }
4957 var_total = var66;
4958 var69 = ((val* (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table64) /* iterator on <var_table64:Array[nullable MPropDef]>*/;
4959 for(;;) {
4960 var70 = ((short int (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var69) /* is_ok on <var69:Iterator[nullable Object]>*/;
4961 if(!var70) break;
4962 var71 = ((val* (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__item]))(var69) /* item on <var69:Iterator[nullable Object]>*/;
4963 var_e72 = var71;
4964 var73 = NULL;
4965 if (var_e72 == NULL) {
4966 var74 = 1; /* is null */
4967 } else {
4968 var74 = 0; /* arg is null but recv is not */
4969 }
4970 if (var74){
4971 var75 = 1;
4972 { /* Inline kernel#Int#+ (var_holes,var75) */
4973 var78 = var_holes + var75;
4974 var76 = var78;
4975 goto RET_LABEL77;
4976 RET_LABEL77:(void)0;
4977 }
4978 var_holes = var76;
4979 } else {
4980 }
4981 CONTINUE_label79: (void)0;
4982 ((void (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__next]))(var69) /* next on <var69:Iterator[nullable Object]>*/;
4983 }
4984 BREAK_label79: (void)0;
4985 CONTINUE_label80: (void)0;
4986 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__next]))(var59) /* next on <var59:MapIterator[Object, nullable Object]>*/;
4987 }
4988 BREAK_label80: (void)0;
4989 if (varonce81) {
4990 var82 = varonce81;
4991 } else {
4992 var83 = "\11";
4993 var84 = 1;
4994 var85 = string__NativeString__to_s_with_length(var83, var84);
4995 var82 = var85;
4996 varonce81 = var82;
4997 }
4998 if (varonce86) {
4999 var87 = varonce86;
5000 } else {
5001 var88 = "\11";
5002 var89 = 1;
5003 var90 = string__NativeString__to_s_with_length(var88, var89);
5004 var87 = var90;
5005 varonce86 = var87;
5006 }
5007 var91 = NEW_array__Array(&type_array__Arraykernel__Object);
5008 { /* var91 = array_instance Array[Object] */
5009 var92 = 4;
5010 var93 = NEW_array__NativeArray(var92, &type_array__NativeArraykernel__Object);
5011 ((struct instance_array__NativeArray*)var93)->values[0] = (val*) var82;
5012 var94 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5013 ((struct instance_array__NativeArray*)var93)->values[1] = (val*) var94;
5014 ((struct instance_array__NativeArray*)var93)->values[2] = (val*) var87;
5015 var95 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5016 ((struct instance_array__NativeArray*)var93)->values[3] = (val*) var95;
5017 ((void (*)(val*, val*, long))(var91->class->vft[COLOR_array__Array__with_native]))(var91, var93, var92) /* with_native on <var91:Array[Object]>*/;
5018 }
5019 var96 = ((val* (*)(val*))(var91->class->vft[COLOR_string__Object__to_s]))(var91) /* to_s on <var91:Array[Object]>*/;
5020 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var96) /* print on <self:SeparateErasureCompiler>*/;
5021 if (varonce97) {
5022 var98 = varonce97;
5023 } else {
5024 var99 = "# size of methods tables";
5025 var100 = 24;
5026 var101 = string__NativeString__to_s_with_length(var99, var100);
5027 var98 = var101;
5028 varonce97 = var98;
5029 }
5030 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var98) /* print on <self:SeparateErasureCompiler>*/;
5031 if (varonce102) {
5032 var103 = varonce102;
5033 } else {
5034 var104 = "\11total \11holes";
5035 var105 = 13;
5036 var106 = string__NativeString__to_s_with_length(var104, var105);
5037 var103 = var106;
5038 varonce102 = var103;
5039 }
5040 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var103) /* print on <self:SeparateErasureCompiler>*/;
5041 var107 = 0;
5042 var_total = var107;
5043 var108 = 0;
5044 var_holes = var108;
5045 var109 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateErasureCompiler>*/;
5046 var110 = ((val* (*)(val*))(var109->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var109) /* iterator on <var109:Map[MClass, Array[nullable MPropDef]]>*/;
5047 for(;;) {
5048 var111 = ((short int (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var110) /* is_ok on <var110:MapIterator[Object, nullable Object]>*/;
5049 if(!var111) break;
5050 var112 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__key]))(var110) /* key on <var110:MapIterator[Object, nullable Object]>*/;
5051 var_t113 = var112;
5052 var114 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__item]))(var110) /* item on <var110:MapIterator[Object, nullable Object]>*/;
5053 var_table115 = var114;
5054 var116 = ((long (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__length]))(var_table115) /* length on <var_table115:Array[nullable MPropDef]>*/;
5055 { /* Inline kernel#Int#+ (var_total,var116) */
5056 var119 = var_total + var116;
5057 var117 = var119;
5058 goto RET_LABEL118;
5059 RET_LABEL118:(void)0;
5060 }
5061 var_total = var117;
5062 var120 = ((val* (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table115) /* iterator on <var_table115:Array[nullable MPropDef]>*/;
5063 for(;;) {
5064 var121 = ((short int (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var120) /* is_ok on <var120:Iterator[nullable Object]>*/;
5065 if(!var121) break;
5066 var122 = ((val* (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__item]))(var120) /* item on <var120:Iterator[nullable Object]>*/;
5067 var_e123 = var122;
5068 var124 = NULL;
5069 if (var_e123 == NULL) {
5070 var125 = 1; /* is null */
5071 } else {
5072 var125 = 0; /* arg is null but recv is not */
5073 }
5074 if (var125){
5075 var126 = 1;
5076 { /* Inline kernel#Int#+ (var_holes,var126) */
5077 var129 = var_holes + var126;
5078 var127 = var129;
5079 goto RET_LABEL128;
5080 RET_LABEL128:(void)0;
5081 }
5082 var_holes = var127;
5083 } else {
5084 }
5085 CONTINUE_label130: (void)0;
5086 ((void (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__next]))(var120) /* next on <var120:Iterator[nullable Object]>*/;
5087 }
5088 BREAK_label130: (void)0;
5089 CONTINUE_label131: (void)0;
5090 ((void (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__next]))(var110) /* next on <var110:MapIterator[Object, nullable Object]>*/;
5091 }
5092 BREAK_label131: (void)0;
5093 if (varonce132) {
5094 var133 = varonce132;
5095 } else {
5096 var134 = "\11";
5097 var135 = 1;
5098 var136 = string__NativeString__to_s_with_length(var134, var135);
5099 var133 = var136;
5100 varonce132 = var133;
5101 }
5102 if (varonce137) {
5103 var138 = varonce137;
5104 } else {
5105 var139 = "\11";
5106 var140 = 1;
5107 var141 = string__NativeString__to_s_with_length(var139, var140);
5108 var138 = var141;
5109 varonce137 = var138;
5110 }
5111 var142 = NEW_array__Array(&type_array__Arraykernel__Object);
5112 { /* var142 = array_instance Array[Object] */
5113 var143 = 4;
5114 var144 = NEW_array__NativeArray(var143, &type_array__NativeArraykernel__Object);
5115 ((struct instance_array__NativeArray*)var144)->values[0] = (val*) var133;
5116 var145 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5117 ((struct instance_array__NativeArray*)var144)->values[1] = (val*) var145;
5118 ((struct instance_array__NativeArray*)var144)->values[2] = (val*) var138;
5119 var146 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5120 ((struct instance_array__NativeArray*)var144)->values[3] = (val*) var146;
5121 ((void (*)(val*, val*, long))(var142->class->vft[COLOR_array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
5122 }
5123 var147 = ((val* (*)(val*))(var142->class->vft[COLOR_string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
5124 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var147) /* print on <self:SeparateErasureCompiler>*/;
5125 if (varonce148) {
5126 var149 = varonce148;
5127 } else {
5128 var150 = "# size of attributes tables";
5129 var151 = 27;
5130 var152 = string__NativeString__to_s_with_length(var150, var151);
5131 var149 = var152;
5132 varonce148 = var149;
5133 }
5134 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var149) /* print on <self:SeparateErasureCompiler>*/;
5135 if (varonce153) {
5136 var154 = varonce153;
5137 } else {
5138 var155 = "\11total \11holes";
5139 var156 = 13;
5140 var157 = string__NativeString__to_s_with_length(var155, var156);
5141 var154 = var157;
5142 varonce153 = var154;
5143 }
5144 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var154) /* print on <self:SeparateErasureCompiler>*/;
5145 var158 = 0;
5146 var_total = var158;
5147 var159 = 0;
5148 var_holes = var159;
5149 var160 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateErasureCompiler>*/;
5150 var161 = ((val* (*)(val*))(var160->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var160) /* iterator on <var160:Map[MClass, Array[nullable MPropDef]]>*/;
5151 for(;;) {
5152 var162 = ((short int (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var161) /* is_ok on <var161:MapIterator[Object, nullable Object]>*/;
5153 if(!var162) break;
5154 var163 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__key]))(var161) /* key on <var161:MapIterator[Object, nullable Object]>*/;
5155 var_t164 = var163;
5156 var165 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__item]))(var161) /* item on <var161:MapIterator[Object, nullable Object]>*/;
5157 var_table166 = var165;
5158 var167 = ((long (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__length]))(var_table166) /* length on <var_table166:Array[nullable MPropDef]>*/;
5159 { /* Inline kernel#Int#+ (var_total,var167) */
5160 var170 = var_total + var167;
5161 var168 = var170;
5162 goto RET_LABEL169;
5163 RET_LABEL169:(void)0;
5164 }
5165 var_total = var168;
5166 var171 = ((val* (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table166) /* iterator on <var_table166:Array[nullable MPropDef]>*/;
5167 for(;;) {
5168 var172 = ((short int (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var171) /* is_ok on <var171:Iterator[nullable Object]>*/;
5169 if(!var172) break;
5170 var173 = ((val* (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__item]))(var171) /* item on <var171:Iterator[nullable Object]>*/;
5171 var_e174 = var173;
5172 var175 = NULL;
5173 if (var_e174 == NULL) {
5174 var176 = 1; /* is null */
5175 } else {
5176 var176 = 0; /* arg is null but recv is not */
5177 }
5178 if (var176){
5179 var177 = 1;
5180 { /* Inline kernel#Int#+ (var_holes,var177) */
5181 var180 = var_holes + var177;
5182 var178 = var180;
5183 goto RET_LABEL179;
5184 RET_LABEL179:(void)0;
5185 }
5186 var_holes = var178;
5187 } else {
5188 }
5189 CONTINUE_label181: (void)0;
5190 ((void (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__next]))(var171) /* next on <var171:Iterator[nullable Object]>*/;
5191 }
5192 BREAK_label181: (void)0;
5193 CONTINUE_label182: (void)0;
5194 ((void (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__next]))(var161) /* next on <var161:MapIterator[Object, nullable Object]>*/;
5195 }
5196 BREAK_label182: (void)0;
5197 if (varonce183) {
5198 var184 = varonce183;
5199 } else {
5200 var185 = "\11";
5201 var186 = 1;
5202 var187 = string__NativeString__to_s_with_length(var185, var186);
5203 var184 = var187;
5204 varonce183 = var184;
5205 }
5206 if (varonce188) {
5207 var189 = varonce188;
5208 } else {
5209 var190 = "\11";
5210 var191 = 1;
5211 var192 = string__NativeString__to_s_with_length(var190, var191);
5212 var189 = var192;
5213 varonce188 = var189;
5214 }
5215 var193 = NEW_array__Array(&type_array__Arraykernel__Object);
5216 { /* var193 = array_instance Array[Object] */
5217 var194 = 4;
5218 var195 = NEW_array__NativeArray(var194, &type_array__NativeArraykernel__Object);
5219 ((struct instance_array__NativeArray*)var195)->values[0] = (val*) var184;
5220 var196 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5221 ((struct instance_array__NativeArray*)var195)->values[1] = (val*) var196;
5222 ((struct instance_array__NativeArray*)var195)->values[2] = (val*) var189;
5223 var197 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5224 ((struct instance_array__NativeArray*)var195)->values[3] = (val*) var197;
5225 ((void (*)(val*, val*, long))(var193->class->vft[COLOR_array__Array__with_native]))(var193, var195, var194) /* with_native on <var193:Array[Object]>*/;
5226 }
5227 var198 = ((val* (*)(val*))(var193->class->vft[COLOR_string__Object__to_s]))(var193) /* to_s on <var193:Array[Object]>*/;
5228 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var198) /* print on <self:SeparateErasureCompiler>*/;
5229 RET_LABEL:;
5230 }
5231 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: Object) */
5232 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
5233 separate_erasure_compiler__SeparateErasureCompiler__display_sizes(self);
5234 RET_LABEL:;
5235 }
5236 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: SeparateErasureCompilerVisitor, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
5237 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
5238 val* var /* : nullable RuntimeVariable */;
5239 val* var_callsite /* var callsite: CallSite */;
5240 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
5241 val* var1 /* : nullable RuntimeVariable */;
5242 val* var_res /* var res: nullable RuntimeVariable */;
5243 short int var2 /* : Bool */;
5244 short int var3 /* : Bool */;
5245 short int var_ /* var : Bool */;
5246 val* var4 /* : AbstractCompiler */;
5247 short int var5 /* : Bool */;
5248 int cltype;
5249 int idtype;
5250 const char* var_class_name;
5251 val* var6 /* : ModelBuilder */;
5252 val* var7 /* : ToolContext */;
5253 val* var8 /* : OptionBool */;
5254 val* var9 /* : nullable Object */;
5255 short int var10 /* : Bool */;
5256 short int var11 /* : Bool */;
5257 val* var12 /* : null */;
5258 short int var13 /* : Bool */;
5259 val* var14 /* : MSignature */;
5260 val* var15 /* : nullable MType */;
5261 val* var_mtype /* var mtype: nullable MType */;
5262 val* var16 /* : null */;
5263 short int var17 /* : Bool */;
5264 static val* varonce;
5265 val* var18 /* : String */;
5266 char* var19 /* : NativeString */;
5267 long var20 /* : Int */;
5268 val* var21 /* : String */;
5269 static val* varonce22;
5270 val* var23 /* : String */;
5271 char* var24 /* : NativeString */;
5272 long var25 /* : Int */;
5273 val* var26 /* : String */;
5274 static val* varonce27;
5275 val* var28 /* : String */;
5276 char* var29 /* : NativeString */;
5277 long var30 /* : Int */;
5278 val* var31 /* : String */;
5279 val* var32 /* : Array[Object] */;
5280 long var33 /* : Int */;
5281 val* var34 /* : NativeArray[Object] */;
5282 val* var35 /* : String */;
5283 static val* varonce36;
5284 val* var37 /* : String */;
5285 char* var38 /* : NativeString */;
5286 long var39 /* : Int */;
5287 val* var40 /* : String */;
5288 val* var41 /* : RuntimeVariable */;
5289 val* var_cond /* var cond: RuntimeVariable */;
5290 static val* varonce42;
5291 val* var43 /* : String */;
5292 char* var44 /* : NativeString */;
5293 long var45 /* : Int */;
5294 val* var46 /* : String */;
5295 static val* varonce47;
5296 val* var48 /* : String */;
5297 char* var49 /* : NativeString */;
5298 long var50 /* : Int */;
5299 val* var51 /* : String */;
5300 val* var52 /* : Array[Object] */;
5301 long var53 /* : Int */;
5302 val* var54 /* : NativeArray[Object] */;
5303 val* var55 /* : String */;
5304 static val* varonce56;
5305 val* var57 /* : String */;
5306 char* var58 /* : NativeString */;
5307 long var59 /* : Int */;
5308 val* var60 /* : String */;
5309 static val* varonce61;
5310 val* var62 /* : String */;
5311 char* var63 /* : NativeString */;
5312 long var64 /* : Int */;
5313 val* var65 /* : String */;
5314 var_callsite = p0;
5315 var_arguments = p1;
5316 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite]))(self, p0, p1) /* compile_callsite on <self:SeparateErasureCompilerVisitor>*/;
5317 var_res = var1;
5318 var3 = ((short int (*)(val*))(var_callsite->class->vft[COLOR_typing__CallSite__erasure_cast]))(var_callsite) /* erasure_cast on <var_callsite:CallSite>*/;
5319 var_ = var3;
5320 if (var3){
5321 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
5322 /* <var4:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
5323 cltype = type_separate_erasure_compiler__SeparateErasureCompiler.color;
5324 idtype = type_separate_erasure_compiler__SeparateErasureCompiler.id;
5325 if(cltype >= var4->type->table_size) {
5326 var5 = 0;
5327 } else {
5328 var5 = var4->type->type_table[cltype] == idtype;
5329 }
5330 if (!var5) {
5331 var_class_name = var4 == NULL ? "null" : var4->type->name;
5332 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name);
5333 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 447);
5334 show_backtrace(1);
5335 }
5336 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var4) /* modelbuilder on <var4:SeparateCompiler(SeparateErasureCompiler)>*/;
5337 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var6) /* toolcontext on <var6:ModelBuilder>*/;
5338 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>*/;
5339 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_opts__Option__value]))(var8) /* value on <var8:OptionBool>*/;
5340 var10 = ((struct instance_kernel__Bool*)var9)->value; /* autounbox from nullable Object to Bool */;
5341 var11 = !var10;
5342 var2 = var11;
5343 } else {
5344 var2 = var_;
5345 }
5346 if (var2){
5347 var12 = NULL;
5348 if (var_res == NULL) {
5349 var13 = 0; /* is null */
5350 } else {
5351 var13 = 1; /* arg is null and recv is not */
5352 }
5353 if (!var13) {
5354 fprintf(stderr, "Runtime error: %s", "Assert failed");
5355 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 448);
5356 show_backtrace(1);
5357 }
5358 var14 = ((val* (*)(val*))(var_callsite->class->vft[COLOR_typing__CallSite__msignature]))(var_callsite) /* msignature on <var_callsite:CallSite>*/;
5359 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_model__MSignature__return_mtype]))(var14) /* return_mtype on <var14:MSignature>*/;
5360 var_mtype = var15;
5361 var16 = NULL;
5362 if (var_mtype == NULL) {
5363 var17 = 0; /* is null */
5364 } else {
5365 var17 = 1; /* arg is null and recv is not */
5366 }
5367 if (!var17) {
5368 fprintf(stderr, "Runtime error: %s", "Assert failed");
5369 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 450);
5370 show_backtrace(1);
5371 }
5372 if (varonce) {
5373 var18 = varonce;
5374 } else {
5375 var19 = "/* Erasure cast for return ";
5376 var20 = 27;
5377 var21 = string__NativeString__to_s_with_length(var19, var20);
5378 var18 = var21;
5379 varonce = var18;
5380 }
5381 if (varonce22) {
5382 var23 = varonce22;
5383 } else {
5384 var24 = " isa ";
5385 var25 = 5;
5386 var26 = string__NativeString__to_s_with_length(var24, var25);
5387 var23 = var26;
5388 varonce22 = var23;
5389 }
5390 if (varonce27) {
5391 var28 = varonce27;
5392 } else {
5393 var29 = " */";
5394 var30 = 3;
5395 var31 = string__NativeString__to_s_with_length(var29, var30);
5396 var28 = var31;
5397 varonce27 = var28;
5398 }
5399 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
5400 { /* var32 = array_instance Array[Object] */
5401 var33 = 5;
5402 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
5403 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var18;
5404 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_res;
5405 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var23;
5406 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var_mtype;
5407 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
5408 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
5409 }
5410 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
5411 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var35) /* add on <self:SeparateErasureCompilerVisitor>*/;
5412 if (varonce36) {
5413 var37 = varonce36;
5414 } else {
5415 var38 = "erasure";
5416 var39 = 7;
5417 var40 = string__NativeString__to_s_with_length(var38, var39);
5418 var37 = var40;
5419 varonce36 = var37;
5420 }
5421 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>*/;
5422 var_cond = var41;
5423 if (varonce42) {
5424 var43 = varonce42;
5425 } else {
5426 var44 = "if (!";
5427 var45 = 5;
5428 var46 = string__NativeString__to_s_with_length(var44, var45);
5429 var43 = var46;
5430 varonce42 = var43;
5431 }
5432 if (varonce47) {
5433 var48 = varonce47;
5434 } else {
5435 var49 = ") {";
5436 var50 = 3;
5437 var51 = string__NativeString__to_s_with_length(var49, var50);
5438 var48 = var51;
5439 varonce47 = var48;
5440 }
5441 var52 = NEW_array__Array(&type_array__Arraykernel__Object);
5442 { /* var52 = array_instance Array[Object] */
5443 var53 = 3;
5444 var54 = NEW_array__NativeArray(var53, &type_array__NativeArraykernel__Object);
5445 ((struct instance_array__NativeArray*)var54)->values[0] = (val*) var43;
5446 ((struct instance_array__NativeArray*)var54)->values[1] = (val*) var_cond;
5447 ((struct instance_array__NativeArray*)var54)->values[2] = (val*) var48;
5448 ((void (*)(val*, val*, long))(var52->class->vft[COLOR_array__Array__with_native]))(var52, var54, var53) /* with_native on <var52:Array[Object]>*/;
5449 }
5450 var55 = ((val* (*)(val*))(var52->class->vft[COLOR_string__Object__to_s]))(var52) /* to_s on <var52:Array[Object]>*/;
5451 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var55) /* add on <self:SeparateErasureCompilerVisitor>*/;
5452 if (varonce56) {
5453 var57 = varonce56;
5454 } else {
5455 var58 = "Cast failed";
5456 var59 = 11;
5457 var60 = string__NativeString__to_s_with_length(var58, var59);
5458 var57 = var60;
5459 varonce56 = var57;
5460 }
5461 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var57) /* add_abort on <self:SeparateErasureCompilerVisitor>*/;
5462 if (varonce61) {
5463 var62 = varonce61;
5464 } else {
5465 var63 = "}";
5466 var64 = 1;
5467 var65 = string__NativeString__to_s_with_length(var63, var64);
5468 var62 = var65;
5469 varonce61 = var62;
5470 }
5471 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var62) /* add on <self:SeparateErasureCompilerVisitor>*/;
5472 } else {
5473 }
5474 var = var_res;
5475 goto RET_LABEL;
5476 RET_LABEL:;
5477 return var;
5478 }
5479 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: Object, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
5480 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
5481 val* var /* : nullable RuntimeVariable */;
5482 val* var1 /* : nullable RuntimeVariable */;
5483 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(self, p0, p1);
5484 var = var1;
5485 RET_LABEL:;
5486 return var;
5487 }
5488 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: SeparateErasureCompilerVisitor, MClassType): RuntimeVariable */
5489 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
5490 val* var /* : RuntimeVariable */;
5491 val* var_mtype /* var mtype: MClassType */;
5492 static val* varonce;
5493 val* var1 /* : String */;
5494 char* var2 /* : NativeString */;
5495 long var3 /* : Int */;
5496 val* var4 /* : String */;
5497 val* var5 /* : MClass */;
5498 val* var6 /* : String */;
5499 val* var7 /* : Array[Object] */;
5500 long var8 /* : Int */;
5501 val* var9 /* : NativeArray[Object] */;
5502 val* var10 /* : String */;
5503 static val* varonce11;
5504 val* var12 /* : String */;
5505 char* var13 /* : NativeString */;
5506 long var14 /* : Int */;
5507 val* var15 /* : String */;
5508 val* var16 /* : MClass */;
5509 val* var17 /* : String */;
5510 static val* varonce18;
5511 val* var19 /* : String */;
5512 char* var20 /* : NativeString */;
5513 long var21 /* : Int */;
5514 val* var22 /* : String */;
5515 val* var23 /* : Array[Object] */;
5516 long var24 /* : Int */;
5517 val* var25 /* : NativeArray[Object] */;
5518 val* var26 /* : String */;
5519 val* var27 /* : RuntimeVariable */;
5520 var_mtype = p0;
5521 if (varonce) {
5522 var1 = varonce;
5523 } else {
5524 var2 = "NEW_";
5525 var3 = 4;
5526 var4 = string__NativeString__to_s_with_length(var2, var3);
5527 var1 = var4;
5528 varonce = var1;
5529 }
5530 var5 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
5531 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var5) /* c_name on <var5:MClass>*/;
5532 var7 = NEW_array__Array(&type_array__Arraykernel__Object);
5533 { /* var7 = array_instance Array[Object] */
5534 var8 = 2;
5535 var9 = NEW_array__NativeArray(var8, &type_array__NativeArraykernel__Object);
5536 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var1;
5537 ((struct instance_array__NativeArray*)var9)->values[1] = (val*) var6;
5538 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Object]>*/;
5539 }
5540 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_string__Object__to_s]))(var7) /* to_s on <var7:Array[Object]>*/;
5541 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var10) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
5542 if (varonce11) {
5543 var12 = varonce11;
5544 } else {
5545 var13 = "NEW_";
5546 var14 = 4;
5547 var15 = string__NativeString__to_s_with_length(var13, var14);
5548 var12 = var15;
5549 varonce11 = var12;
5550 }
5551 var16 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
5552 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var16) /* c_name on <var16:MClass>*/;
5553 if (varonce18) {
5554 var19 = varonce18;
5555 } else {
5556 var20 = "()";
5557 var21 = 2;
5558 var22 = string__NativeString__to_s_with_length(var20, var21);
5559 var19 = var22;
5560 varonce18 = var19;
5561 }
5562 var23 = NEW_array__Array(&type_array__Arraykernel__Object);
5563 { /* var23 = array_instance Array[Object] */
5564 var24 = 3;
5565 var25 = NEW_array__NativeArray(var24, &type_array__NativeArraykernel__Object);
5566 ((struct instance_array__NativeArray*)var25)->values[0] = (val*) var12;
5567 ((struct instance_array__NativeArray*)var25)->values[1] = (val*) var17;
5568 ((struct instance_array__NativeArray*)var25)->values[2] = (val*) var19;
5569 ((void (*)(val*, val*, long))(var23->class->vft[COLOR_array__Array__with_native]))(var23, var25, var24) /* with_native on <var23:Array[Object]>*/;
5570 }
5571 var26 = ((val* (*)(val*))(var23->class->vft[COLOR_string__Object__to_s]))(var23) /* to_s on <var23:Array[Object]>*/;
5572 var27 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var26, var_mtype) /* new_expr on <self:SeparateErasureCompilerVisitor>*/;
5573 var = var27;
5574 goto RET_LABEL;
5575 RET_LABEL:;
5576 return var;
5577 }
5578 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
5579 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
5580 val* var /* : RuntimeVariable */;
5581 val* var1 /* : RuntimeVariable */;
5582 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(self, p0);
5583 var = var1;
5584 RET_LABEL:;
5585 return var;
5586 }
5587 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: SeparateErasureCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
5588 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
5589 val* var /* : RuntimeVariable */;
5590 val* var_value /* var value: RuntimeVariable */;
5591 val* var_mtype /* var mtype: MType */;
5592 val* var_tag /* var tag: String */;
5593 static val* varonce;
5594 val* var1 /* : String */;
5595 char* var2 /* : NativeString */;
5596 long var3 /* : Int */;
5597 val* var4 /* : String */;
5598 val* var5 /* : String */;
5599 static val* varonce6;
5600 val* var7 /* : String */;
5601 char* var8 /* : NativeString */;
5602 long var9 /* : Int */;
5603 val* var10 /* : String */;
5604 static val* varonce11;
5605 val* var12 /* : String */;
5606 char* var13 /* : NativeString */;
5607 long var14 /* : Int */;
5608 val* var15 /* : String */;
5609 val* var16 /* : Array[Object] */;
5610 long var17 /* : Int */;
5611 val* var18 /* : NativeArray[Object] */;
5612 val* var19 /* : String */;
5613 val* var20 /* : MClassType */;
5614 val* var21 /* : RuntimeVariable */;
5615 val* var_res /* var res: RuntimeVariable */;
5616 static val* varonce22;
5617 val* var23 /* : String */;
5618 char* var24 /* : NativeString */;
5619 long var25 /* : Int */;
5620 val* var26 /* : String */;
5621 val* var27 /* : String */;
5622 val* var_cltype /* var cltype: String */;
5623 static val* varonce28;
5624 val* var29 /* : String */;
5625 char* var30 /* : NativeString */;
5626 long var31 /* : Int */;
5627 val* var32 /* : String */;
5628 static val* varonce33;
5629 val* var34 /* : String */;
5630 char* var35 /* : NativeString */;
5631 long var36 /* : Int */;
5632 val* var37 /* : String */;
5633 val* var38 /* : Array[Object] */;
5634 long var39 /* : Int */;
5635 val* var40 /* : NativeArray[Object] */;
5636 val* var41 /* : String */;
5637 static val* varonce42;
5638 val* var43 /* : String */;
5639 char* var44 /* : NativeString */;
5640 long var45 /* : Int */;
5641 val* var46 /* : String */;
5642 val* var47 /* : String */;
5643 val* var_idtype /* var idtype: String */;
5644 static val* varonce48;
5645 val* var49 /* : String */;
5646 char* var50 /* : NativeString */;
5647 long var51 /* : Int */;
5648 val* var52 /* : String */;
5649 static val* varonce53;
5650 val* var54 /* : String */;
5651 char* var55 /* : NativeString */;
5652 long var56 /* : Int */;
5653 val* var57 /* : String */;
5654 val* var58 /* : Array[Object] */;
5655 long var59 /* : Int */;
5656 val* var60 /* : NativeArray[Object] */;
5657 val* var61 /* : String */;
5658 short int var62 /* : Bool */;
5659 short int var_maybe_null /* var maybe_null: Bool */;
5660 static val* varonce63;
5661 val* var64 /* : String */;
5662 char* var65 /* : NativeString */;
5663 long var66 /* : Int */;
5664 val* var67 /* : String */;
5665 val* var_accept_null /* var accept_null: String */;
5666 short int var68 /* : Bool */;
5667 int cltype;
5668 int idtype;
5669 val* var69 /* : MType */;
5670 static val* varonce70;
5671 val* var71 /* : String */;
5672 char* var72 /* : NativeString */;
5673 long var73 /* : Int */;
5674 val* var74 /* : String */;
5675 short int var75 /* : Bool */;
5676 int cltype76;
5677 int idtype77;
5678 val* var78 /* : nullable Frame */;
5679 val* var79 /* : MPropDef */;
5680 val* var80 /* : MClassDef */;
5681 val* var81 /* : MClassType */;
5682 val* var82 /* : nullable Frame */;
5683 val* var83 /* : MPropDef */;
5684 val* var84 /* : MClassDef */;
5685 val* var85 /* : MClassType */;
5686 val* var86 /* : nullable Frame */;
5687 val* var87 /* : MPropDef */;
5688 val* var88 /* : MClassDef */;
5689 val* var89 /* : MModule */;
5690 short int var90 /* : Bool */;
5691 val* var91 /* : MType */;
5692 short int var92 /* : Bool */;
5693 int cltype93;
5694 int idtype94;
5695 val* var95 /* : MType */;
5696 static val* varonce96;
5697 val* var97 /* : String */;
5698 char* var98 /* : NativeString */;
5699 long var99 /* : Int */;
5700 val* var100 /* : String */;
5701 val* var101 /* : MType */;
5702 val* var102 /* : nullable Frame */;
5703 val* var103 /* : MPropDef */;
5704 val* var104 /* : MClassDef */;
5705 val* var105 /* : MModule */;
5706 val* var106 /* : nullable Frame */;
5707 val* var107 /* : MPropDef */;
5708 val* var108 /* : MClassDef */;
5709 val* var109 /* : MClassType */;
5710 short int var110 /* : Bool */;
5711 static val* varonce111;
5712 val* var112 /* : String */;
5713 char* var113 /* : NativeString */;
5714 long var114 /* : Int */;
5715 val* var115 /* : String */;
5716 val* var116 /* : String */;
5717 static val* varonce117;
5718 val* var118 /* : String */;
5719 char* var119 /* : NativeString */;
5720 long var120 /* : Int */;
5721 val* var121 /* : String */;
5722 static val* varonce122;
5723 val* var123 /* : String */;
5724 char* var124 /* : NativeString */;
5725 long var125 /* : Int */;
5726 val* var126 /* : String */;
5727 val* var127 /* : Array[Object] */;
5728 long var128 /* : Int */;
5729 val* var129 /* : NativeArray[Object] */;
5730 val* var130 /* : String */;
5731 val* var131 /* : AbstractCompiler */;
5732 val* var132 /* : ModelBuilder */;
5733 val* var133 /* : ToolContext */;
5734 val* var134 /* : OptionBool */;
5735 val* var135 /* : nullable Object */;
5736 short int var136 /* : Bool */;
5737 val* var137 /* : AbstractCompiler */;
5738 val* var138 /* : HashMap[String, Int] */;
5739 val* var_ /* var : HashMap[String, Int] */;
5740 val* var_139 /* var : String */;
5741 val* var140 /* : nullable Object */;
5742 long var141 /* : Int */;
5743 long var142 /* : Int */;
5744 long var144 /* : Int */;
5745 long var145 /* : Int */;
5746 val* var146 /* : nullable Object */;
5747 static val* varonce147;
5748 val* var148 /* : String */;
5749 char* var149 /* : NativeString */;
5750 long var150 /* : Int */;
5751 val* var151 /* : String */;
5752 static val* varonce152;
5753 val* var153 /* : String */;
5754 char* var154 /* : NativeString */;
5755 long var155 /* : Int */;
5756 val* var156 /* : String */;
5757 val* var157 /* : Array[Object] */;
5758 long var158 /* : Int */;
5759 val* var159 /* : NativeArray[Object] */;
5760 val* var160 /* : String */;
5761 val* var161 /* : MType */;
5762 val* var162 /* : String */;
5763 static val* varonce163;
5764 val* var164 /* : String */;
5765 char* var165 /* : NativeString */;
5766 long var166 /* : Int */;
5767 val* var167 /* : String */;
5768 short int var168 /* : Bool */;
5769 val* var169 /* : Array[Object] */;
5770 long var170 /* : Int */;
5771 val* var_171 /* var : Array[Object] */;
5772 static val* varonce172;
5773 val* var173 /* : String */;
5774 char* var174 /* : NativeString */;
5775 long var175 /* : Int */;
5776 val* var176 /* : String */;
5777 static val* varonce177;
5778 val* var178 /* : String */;
5779 char* var179 /* : NativeString */;
5780 long var180 /* : Int */;
5781 val* var181 /* : String */;
5782 val* var182 /* : String */;
5783 val* var_class_ptr /* var class_ptr: nullable Object */;
5784 val* var183 /* : MType */;
5785 short int var184 /* : Bool */;
5786 int cltype185;
5787 int idtype186;
5788 const char* var_class_name;
5789 val* var187 /* : MClass */;
5790 val* var_mclass /* var mclass: MClass */;
5791 static val* varonce188;
5792 val* var189 /* : String */;
5793 char* var190 /* : NativeString */;
5794 long var191 /* : Int */;
5795 val* var192 /* : String */;
5796 val* var193 /* : String */;
5797 val* var194 /* : Array[Object] */;
5798 long var195 /* : Int */;
5799 val* var196 /* : NativeArray[Object] */;
5800 val* var197 /* : String */;
5801 val* var198 /* : Array[Object] */;
5802 long var199 /* : Int */;
5803 val* var_200 /* var : Array[Object] */;
5804 static val* varonce201;
5805 val* var202 /* : String */;
5806 char* var203 /* : NativeString */;
5807 long var204 /* : Int */;
5808 val* var205 /* : String */;
5809 val* var206 /* : String */;
5810 static val* varonce207;
5811 val* var208 /* : String */;
5812 char* var209 /* : NativeString */;
5813 long var210 /* : Int */;
5814 val* var211 /* : String */;
5815 val* var212 /* : String */;
5816 short int var213 /* : Bool */;
5817 int cltype214;
5818 int idtype215;
5819 static val* varonce216;
5820 val* var217 /* : String */;
5821 char* var218 /* : NativeString */;
5822 long var219 /* : Int */;
5823 val* var220 /* : String */;
5824 val* var221 /* : MClass */;
5825 val* var222 /* : String */;
5826 val* var223 /* : Array[Object] */;
5827 long var224 /* : Int */;
5828 val* var225 /* : NativeArray[Object] */;
5829 val* var226 /* : String */;
5830 static val* varonce227;
5831 val* var228 /* : String */;
5832 char* var229 /* : NativeString */;
5833 long var230 /* : Int */;
5834 val* var231 /* : String */;
5835 val* var232 /* : MClass */;
5836 val* var233 /* : String */;
5837 static val* varonce234;
5838 val* var235 /* : String */;
5839 char* var236 /* : NativeString */;
5840 long var237 /* : Int */;
5841 val* var238 /* : String */;
5842 val* var239 /* : Array[Object] */;
5843 long var240 /* : Int */;
5844 val* var241 /* : NativeArray[Object] */;
5845 val* var242 /* : String */;
5846 static val* varonce243;
5847 val* var244 /* : String */;
5848 char* var245 /* : NativeString */;
5849 long var246 /* : Int */;
5850 val* var247 /* : String */;
5851 val* var248 /* : MClass */;
5852 val* var249 /* : String */;
5853 static val* varonce250;
5854 val* var251 /* : String */;
5855 char* var252 /* : NativeString */;
5856 long var253 /* : Int */;
5857 val* var254 /* : String */;
5858 val* var255 /* : Array[Object] */;
5859 long var256 /* : Int */;
5860 val* var257 /* : NativeArray[Object] */;
5861 val* var258 /* : String */;
5862 val* var259 /* : AbstractCompiler */;
5863 val* var260 /* : ModelBuilder */;
5864 val* var261 /* : ToolContext */;
5865 val* var262 /* : OptionBool */;
5866 val* var263 /* : nullable Object */;
5867 short int var264 /* : Bool */;
5868 val* var265 /* : AbstractCompiler */;
5869 val* var266 /* : HashMap[String, Int] */;
5870 val* var_267 /* var : HashMap[String, Int] */;
5871 val* var_268 /* var : String */;
5872 val* var269 /* : nullable Object */;
5873 long var270 /* : Int */;
5874 long var271 /* : Int */;
5875 long var273 /* : Int */;
5876 long var274 /* : Int */;
5877 val* var275 /* : nullable Object */;
5878 static val* varonce276;
5879 val* var277 /* : String */;
5880 char* var278 /* : NativeString */;
5881 long var279 /* : Int */;
5882 val* var280 /* : String */;
5883 static val* varonce281;
5884 val* var282 /* : String */;
5885 char* var283 /* : NativeString */;
5886 long var284 /* : Int */;
5887 val* var285 /* : String */;
5888 val* var286 /* : Array[Object] */;
5889 long var287 /* : Int */;
5890 val* var288 /* : NativeArray[Object] */;
5891 val* var289 /* : String */;
5892 short int var290 /* : Bool */;
5893 int cltype291;
5894 int idtype292;
5895 val* var293 /* : nullable Frame */;
5896 val* var294 /* : Array[RuntimeVariable] */;
5897 val* var295 /* : nullable Object */;
5898 val* var_recv /* var recv: RuntimeVariable */;
5899 val* var296 /* : MType */;
5900 val* var297 /* : String */;
5901 static val* varonce298;
5902 val* var299 /* : String */;
5903 char* var300 /* : NativeString */;
5904 long var301 /* : Int */;
5905 val* var302 /* : String */;
5906 short int var303 /* : Bool */;
5907 static val* varonce304;
5908 val* var305 /* : String */;
5909 char* var306 /* : NativeString */;
5910 long var307 /* : Int */;
5911 val* var308 /* : String */;
5912 val* var309 /* : Array[Object] */;
5913 long var310 /* : Int */;
5914 val* var311 /* : NativeArray[Object] */;
5915 val* var312 /* : String */;
5916 val* var_recv_ptr /* var recv_ptr: nullable Object */;
5917 val* var313 /* : MType */;
5918 short int var314 /* : Bool */;
5919 int cltype315;
5920 int idtype316;
5921 const char* var_class_name317;
5922 val* var318 /* : MClass */;
5923 val* var_mclass319 /* var mclass: MClass */;
5924 static val* varonce320;
5925 val* var321 /* : String */;
5926 char* var322 /* : NativeString */;
5927 long var323 /* : Int */;
5928 val* var324 /* : String */;
5929 val* var325 /* : String */;
5930 val* var326 /* : Array[Object] */;
5931 long var327 /* : Int */;
5932 val* var328 /* : NativeArray[Object] */;
5933 val* var329 /* : String */;
5934 static val* varonce330;
5935 val* var331 /* : String */;
5936 char* var332 /* : NativeString */;
5937 long var333 /* : Int */;
5938 val* var334 /* : String */;
5939 val* var335 /* : String */;
5940 static val* varonce336;
5941 val* var337 /* : String */;
5942 char* var338 /* : NativeString */;
5943 long var339 /* : Int */;
5944 val* var340 /* : String */;
5945 val* var341 /* : Array[Object] */;
5946 long var342 /* : Int */;
5947 val* var343 /* : NativeArray[Object] */;
5948 val* var344 /* : String */;
5949 static val* varonce345;
5950 val* var346 /* : String */;
5951 char* var347 /* : NativeString */;
5952 long var348 /* : Int */;
5953 val* var349 /* : String */;
5954 val* var350 /* : String */;
5955 val* var_entry /* var entry: String */;
5956 static val* varonce351;
5957 val* var352 /* : String */;
5958 char* var353 /* : NativeString */;
5959 long var354 /* : Int */;
5960 val* var355 /* : String */;
5961 static val* varonce356;
5962 val* var357 /* : String */;
5963 char* var358 /* : NativeString */;
5964 long var359 /* : Int */;
5965 val* var360 /* : String */;
5966 val* var361 /* : Array[Object] */;
5967 long var362 /* : Int */;
5968 val* var363 /* : NativeArray[Object] */;
5969 val* var364 /* : String */;
5970 val* var365 /* : MProperty */;
5971 val* var366 /* : String */;
5972 val* var367 /* : AbstractCompiler */;
5973 short int var368 /* : Bool */;
5974 int cltype369;
5975 int idtype370;
5976 const char* var_class_name371;
5977 val* var372 /* : nullable Layout[MVirtualTypeProp] */;
5978 short int var373 /* : Bool */;
5979 int cltype374;
5980 int idtype375;
5981 static val* varonce376;
5982 val* var377 /* : String */;
5983 char* var378 /* : NativeString */;
5984 long var379 /* : Int */;
5985 val* var380 /* : String */;
5986 static val* varonce381;
5987 val* var382 /* : String */;
5988 char* var383 /* : NativeString */;
5989 long var384 /* : Int */;
5990 val* var385 /* : String */;
5991 static val* varonce386;
5992 val* var387 /* : String */;
5993 char* var388 /* : NativeString */;
5994 long var389 /* : Int */;
5995 val* var390 /* : String */;
5996 val* var391 /* : MProperty */;
5997 val* var392 /* : String */;
5998 static val* varonce393;
5999 val* var394 /* : String */;
6000 char* var395 /* : NativeString */;
6001 long var396 /* : Int */;
6002 val* var397 /* : String */;
6003 val* var398 /* : Array[Object] */;
6004 long var399 /* : Int */;
6005 val* var400 /* : NativeArray[Object] */;
6006 val* var401 /* : String */;
6007 static val* varonce402;
6008 val* var403 /* : String */;
6009 char* var404 /* : NativeString */;
6010 long var405 /* : Int */;
6011 val* var406 /* : String */;
6012 static val* varonce407;
6013 val* var408 /* : String */;
6014 char* var409 /* : NativeString */;
6015 long var410 /* : Int */;
6016 val* var411 /* : String */;
6017 val* var412 /* : MProperty */;
6018 val* var413 /* : String */;
6019 static val* varonce414;
6020 val* var415 /* : String */;
6021 char* var416 /* : NativeString */;
6022 long var417 /* : Int */;
6023 val* var418 /* : String */;
6024 val* var419 /* : Array[Object] */;
6025 long var420 /* : Int */;
6026 val* var421 /* : NativeArray[Object] */;
6027 val* var422 /* : String */;
6028 static val* varonce423;
6029 val* var424 /* : String */;
6030 char* var425 /* : NativeString */;
6031 long var426 /* : Int */;
6032 val* var427 /* : String */;
6033 static val* varonce428;
6034 val* var429 /* : String */;
6035 char* var430 /* : NativeString */;
6036 long var431 /* : Int */;
6037 val* var432 /* : String */;
6038 val* var433 /* : Array[Object] */;
6039 long var434 /* : Int */;
6040 val* var435 /* : NativeArray[Object] */;
6041 val* var436 /* : String */;
6042 static val* varonce437;
6043 val* var438 /* : String */;
6044 char* var439 /* : NativeString */;
6045 long var440 /* : Int */;
6046 val* var441 /* : String */;
6047 static val* varonce442;
6048 val* var443 /* : String */;
6049 char* var444 /* : NativeString */;
6050 long var445 /* : Int */;
6051 val* var446 /* : String */;
6052 val* var447 /* : Array[Object] */;
6053 long var448 /* : Int */;
6054 val* var449 /* : NativeArray[Object] */;
6055 val* var450 /* : String */;
6056 short int var451 /* : Bool */;
6057 short int var_452 /* var : Bool */;
6058 static val* varonce453;
6059 val* var454 /* : String */;
6060 char* var455 /* : NativeString */;
6061 long var456 /* : Int */;
6062 val* var457 /* : String */;
6063 short int var458 /* : Bool */;
6064 static val* varonce459;
6065 val* var460 /* : String */;
6066 char* var461 /* : NativeString */;
6067 long var462 /* : Int */;
6068 val* var463 /* : String */;
6069 val* var464 /* : String */;
6070 val* var_is_nullable /* var is_nullable: String */;
6071 static val* varonce465;
6072 val* var466 /* : String */;
6073 char* var467 /* : NativeString */;
6074 long var468 /* : Int */;
6075 val* var469 /* : String */;
6076 static val* varonce470;
6077 val* var471 /* : String */;
6078 char* var472 /* : NativeString */;
6079 long var473 /* : Int */;
6080 val* var474 /* : String */;
6081 val* var475 /* : Array[Object] */;
6082 long var476 /* : Int */;
6083 val* var477 /* : NativeArray[Object] */;
6084 val* var478 /* : String */;
6085 static val* varonce479;
6086 val* var480 /* : String */;
6087 char* var481 /* : NativeString */;
6088 long var482 /* : Int */;
6089 val* var483 /* : String */;
6090 static val* varonce484;
6091 val* var485 /* : String */;
6092 char* var486 /* : NativeString */;
6093 long var487 /* : Int */;
6094 val* var488 /* : String */;
6095 val* var489 /* : Array[Object] */;
6096 long var490 /* : Int */;
6097 val* var491 /* : NativeArray[Object] */;
6098 val* var492 /* : String */;
6099 val* var493 /* : String */;
6100 val* var494 /* : AbstractCompiler */;
6101 val* var495 /* : ModelBuilder */;
6102 val* var496 /* : ToolContext */;
6103 val* var497 /* : OptionBool */;
6104 val* var498 /* : nullable Object */;
6105 short int var499 /* : Bool */;
6106 val* var500 /* : AbstractCompiler */;
6107 val* var501 /* : HashMap[String, Int] */;
6108 val* var_502 /* var : HashMap[String, Int] */;
6109 val* var_503 /* var : String */;
6110 val* var504 /* : nullable Object */;
6111 long var505 /* : Int */;
6112 long var506 /* : Int */;
6113 long var508 /* : Int */;
6114 long var509 /* : Int */;
6115 val* var510 /* : nullable Object */;
6116 static val* varonce511;
6117 val* var512 /* : String */;
6118 char* var513 /* : NativeString */;
6119 long var514 /* : Int */;
6120 val* var515 /* : String */;
6121 static val* varonce516;
6122 val* var517 /* : String */;
6123 char* var518 /* : NativeString */;
6124 long var519 /* : Int */;
6125 val* var520 /* : String */;
6126 val* var521 /* : Array[Object] */;
6127 long var522 /* : Int */;
6128 val* var523 /* : NativeArray[Object] */;
6129 val* var524 /* : String */;
6130 static val* varonce525;
6131 val* var526 /* : String */;
6132 char* var527 /* : NativeString */;
6133 long var528 /* : Int */;
6134 val* var529 /* : String */;
6135 val* var530 /* : String */;
6136 static val* varonce531;
6137 val* var532 /* : String */;
6138 char* var533 /* : NativeString */;
6139 long var534 /* : Int */;
6140 val* var535 /* : String */;
6141 static val* varonce536;
6142 val* var537 /* : String */;
6143 char* var538 /* : NativeString */;
6144 long var539 /* : Int */;
6145 val* var540 /* : String */;
6146 val* var541 /* : Array[Object] */;
6147 long var542 /* : Int */;
6148 val* var543 /* : NativeArray[Object] */;
6149 val* var544 /* : String */;
6150 static val* varonce545;
6151 val* var546 /* : String */;
6152 char* var547 /* : NativeString */;
6153 long var548 /* : Int */;
6154 val* var549 /* : String */;
6155 static val* varonce550;
6156 val* var551 /* : String */;
6157 char* var552 /* : NativeString */;
6158 long var553 /* : Int */;
6159 val* var554 /* : String */;
6160 val* var555 /* : Array[Object] */;
6161 long var556 /* : Int */;
6162 val* var557 /* : NativeArray[Object] */;
6163 val* var558 /* : String */;
6164 static val* varonce559;
6165 val* var560 /* : String */;
6166 char* var561 /* : NativeString */;
6167 long var562 /* : Int */;
6168 val* var563 /* : String */;
6169 static val* varonce564;
6170 val* var565 /* : String */;
6171 char* var566 /* : NativeString */;
6172 long var567 /* : Int */;
6173 val* var568 /* : String */;
6174 val* var569 /* : Array[Object] */;
6175 long var570 /* : Int */;
6176 val* var571 /* : NativeArray[Object] */;
6177 val* var572 /* : String */;
6178 static val* varonce573;
6179 val* var574 /* : String */;
6180 char* var575 /* : NativeString */;
6181 long var576 /* : Int */;
6182 val* var577 /* : String */;
6183 val* var578 /* : AbstractCompiler */;
6184 short int var579 /* : Bool */;
6185 int cltype580;
6186 int idtype581;
6187 const char* var_class_name582;
6188 val* var583 /* : nullable Layout[MClass] */;
6189 short int var584 /* : Bool */;
6190 int cltype585;
6191 int idtype586;
6192 static val* varonce587;
6193 val* var588 /* : String */;
6194 char* var589 /* : NativeString */;
6195 long var590 /* : Int */;
6196 val* var591 /* : String */;
6197 static val* varonce592;
6198 val* var593 /* : String */;
6199 char* var594 /* : NativeString */;
6200 long var595 /* : Int */;
6201 val* var596 /* : String */;
6202 static val* varonce597;
6203 val* var598 /* : String */;
6204 char* var599 /* : NativeString */;
6205 long var600 /* : Int */;
6206 val* var601 /* : String */;
6207 val* var602 /* : Array[Object] */;
6208 long var603 /* : Int */;
6209 val* var604 /* : NativeArray[Object] */;
6210 val* var605 /* : String */;
6211 static val* varonce606;
6212 val* var607 /* : String */;
6213 char* var608 /* : NativeString */;
6214 long var609 /* : Int */;
6215 val* var610 /* : String */;
6216 static val* varonce611;
6217 val* var612 /* : String */;
6218 char* var613 /* : NativeString */;
6219 long var614 /* : Int */;
6220 val* var615 /* : String */;
6221 static val* varonce616;
6222 val* var617 /* : String */;
6223 char* var618 /* : NativeString */;
6224 long var619 /* : Int */;
6225 val* var620 /* : String */;
6226 val* var621 /* : Array[Object] */;
6227 long var622 /* : Int */;
6228 val* var623 /* : NativeArray[Object] */;
6229 val* var624 /* : String */;
6230 static val* varonce625;
6231 val* var626 /* : String */;
6232 char* var627 /* : NativeString */;
6233 long var628 /* : Int */;
6234 val* var629 /* : String */;
6235 val* var630 /* : Array[Object] */;
6236 long var631 /* : Int */;
6237 val* var632 /* : NativeArray[Object] */;
6238 val* var633 /* : String */;
6239 static val* varonce634;
6240 val* var635 /* : String */;
6241 char* var636 /* : NativeString */;
6242 long var637 /* : Int */;
6243 val* var638 /* : String */;
6244 static val* varonce639;
6245 val* var640 /* : String */;
6246 char* var641 /* : NativeString */;
6247 long var642 /* : Int */;
6248 val* var643 /* : String */;
6249 static val* varonce644;
6250 val* var645 /* : String */;
6251 char* var646 /* : NativeString */;
6252 long var647 /* : Int */;
6253 val* var648 /* : String */;
6254 static val* varonce649;
6255 val* var650 /* : String */;
6256 char* var651 /* : NativeString */;
6257 long var652 /* : Int */;
6258 val* var653 /* : String */;
6259 static val* varonce654;
6260 val* var655 /* : String */;
6261 char* var656 /* : NativeString */;
6262 long var657 /* : Int */;
6263 val* var658 /* : String */;
6264 val* var659 /* : Array[Object] */;
6265 long var660 /* : Int */;
6266 val* var661 /* : NativeArray[Object] */;
6267 val* var662 /* : String */;
6268 static val* varonce663;
6269 val* var664 /* : String */;
6270 char* var665 /* : NativeString */;
6271 long var666 /* : Int */;
6272 val* var667 /* : String */;
6273 static val* varonce668;
6274 val* var669 /* : String */;
6275 char* var670 /* : NativeString */;
6276 long var671 /* : Int */;
6277 val* var672 /* : String */;
6278 var_value = p0;
6279 var_mtype = p1;
6280 var_tag = p2;
6281 if (varonce) {
6282 var1 = varonce;
6283 } else {
6284 var2 = "/* type test for ";
6285 var3 = 17;
6286 var4 = string__NativeString__to_s_with_length(var2, var3);
6287 var1 = var4;
6288 varonce = var1;
6289 }
6290 var5 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
6291 if (varonce6) {
6292 var7 = varonce6;
6293 } else {
6294 var8 = " isa ";
6295 var9 = 5;
6296 var10 = string__NativeString__to_s_with_length(var8, var9);
6297 var7 = var10;
6298 varonce6 = var7;
6299 }
6300 if (varonce11) {
6301 var12 = varonce11;
6302 } else {
6303 var13 = " */";
6304 var14 = 3;
6305 var15 = string__NativeString__to_s_with_length(var13, var14);
6306 var12 = var15;
6307 varonce11 = var12;
6308 }
6309 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
6310 { /* var16 = array_instance Array[Object] */
6311 var17 = 5;
6312 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
6313 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var1;
6314 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var5;
6315 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var7;
6316 ((struct instance_array__NativeArray*)var18)->values[3] = (val*) var_mtype;
6317 ((struct instance_array__NativeArray*)var18)->values[4] = (val*) var12;
6318 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
6319 }
6320 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
6321 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var19) /* add on <self:SeparateErasureCompilerVisitor>*/;
6322 var20 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:SeparateErasureCompilerVisitor>*/;
6323 var21 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var20) /* new_var on <self:SeparateErasureCompilerVisitor>*/;
6324 var_res = var21;
6325 if (varonce22) {
6326 var23 = varonce22;
6327 } else {
6328 var24 = "cltype";
6329 var25 = 6;
6330 var26 = string__NativeString__to_s_with_length(var24, var25);
6331 var23 = var26;
6332 varonce22 = var23;
6333 }
6334 var27 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var23) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
6335 var_cltype = var27;
6336 if (varonce28) {
6337 var29 = varonce28;
6338 } else {
6339 var30 = "int ";
6340 var31 = 4;
6341 var32 = string__NativeString__to_s_with_length(var30, var31);
6342 var29 = var32;
6343 varonce28 = var29;
6344 }
6345 if (varonce33) {
6346 var34 = varonce33;
6347 } else {
6348 var35 = ";";
6349 var36 = 1;
6350 var37 = string__NativeString__to_s_with_length(var35, var36);
6351 var34 = var37;
6352 varonce33 = var34;
6353 }
6354 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
6355 { /* var38 = array_instance Array[Object] */
6356 var39 = 3;
6357 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
6358 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var29;
6359 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_cltype;
6360 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var34;
6361 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
6362 }
6363 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
6364 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var41) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
6365 if (varonce42) {
6366 var43 = varonce42;
6367 } else {
6368 var44 = "idtype";
6369 var45 = 6;
6370 var46 = string__NativeString__to_s_with_length(var44, var45);
6371 var43 = var46;
6372 varonce42 = var43;
6373 }
6374 var47 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var43) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
6375 var_idtype = var47;
6376 if (varonce48) {
6377 var49 = varonce48;
6378 } else {
6379 var50 = "int ";
6380 var51 = 4;
6381 var52 = string__NativeString__to_s_with_length(var50, var51);
6382 var49 = var52;
6383 varonce48 = var49;
6384 }
6385 if (varonce53) {
6386 var54 = varonce53;
6387 } else {
6388 var55 = ";";
6389 var56 = 1;
6390 var57 = string__NativeString__to_s_with_length(var55, var56);
6391 var54 = var57;
6392 varonce53 = var54;
6393 }
6394 var58 = NEW_array__Array(&type_array__Arraykernel__Object);
6395 { /* var58 = array_instance Array[Object] */
6396 var59 = 3;
6397 var60 = NEW_array__NativeArray(var59, &type_array__NativeArraykernel__Object);
6398 ((struct instance_array__NativeArray*)var60)->values[0] = (val*) var49;
6399 ((struct instance_array__NativeArray*)var60)->values[1] = (val*) var_idtype;
6400 ((struct instance_array__NativeArray*)var60)->values[2] = (val*) var54;
6401 ((void (*)(val*, val*, long))(var58->class->vft[COLOR_array__Array__with_native]))(var58, var60, var59) /* with_native on <var58:Array[Object]>*/;
6402 }
6403 var61 = ((val* (*)(val*))(var58->class->vft[COLOR_string__Object__to_s]))(var58) /* to_s on <var58:Array[Object]>*/;
6404 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var61) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
6405 var62 = ((short int (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompilerVisitor__maybe_null]))(self, var_value) /* maybe_null on <self:SeparateErasureCompilerVisitor>*/;
6406 var_maybe_null = var62;
6407 if (varonce63) {
6408 var64 = varonce63;
6409 } else {
6410 var65 = "0";
6411 var66 = 1;
6412 var67 = string__NativeString__to_s_with_length(var65, var66);
6413 var64 = var67;
6414 varonce63 = var64;
6415 }
6416 var_accept_null = var64;
6417 /* <var_mtype:MType> isa MNullableType */
6418 cltype = type_model__MNullableType.color;
6419 idtype = type_model__MNullableType.id;
6420 if(cltype >= var_mtype->type->table_size) {
6421 var68 = 0;
6422 } else {
6423 var68 = var_mtype->type->type_table[cltype] == idtype;
6424 }
6425 if (var68){
6426 var69 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
6427 var_mtype = var69;
6428 if (varonce70) {
6429 var71 = varonce70;
6430 } else {
6431 var72 = "1";
6432 var73 = 1;
6433 var74 = string__NativeString__to_s_with_length(var72, var73);
6434 var71 = var74;
6435 varonce70 = var71;
6436 }
6437 var_accept_null = var71;
6438 } else {
6439 }
6440 /* <var_mtype:MType> isa MParameterType */
6441 cltype76 = type_model__MParameterType.color;
6442 idtype77 = type_model__MParameterType.id;
6443 if(cltype76 >= var_mtype->type->table_size) {
6444 var75 = 0;
6445 } else {
6446 var75 = var_mtype->type->type_table[cltype76] == idtype77;
6447 }
6448 if (var75){
6449 var78 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6450 if (var78 == NULL) {
6451 fprintf(stderr, "Runtime error: %s", "Receiver is null");
6452 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 488);
6453 show_backtrace(1);
6454 } else {
6455 var79 = ((val* (*)(val*))(var78->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var78) /* mpropdef on <var78:nullable Frame>*/;
6456 }
6457 var80 = ((val* (*)(val*))(var79->class->vft[COLOR_model__MPropDef__mclassdef]))(var79) /* mclassdef on <var79:MPropDef>*/;
6458 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_model__MClassDef__bound_mtype]))(var80) /* bound_mtype on <var80:MClassDef>*/;
6459 var82 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6460 if (var82 == NULL) {
6461 fprintf(stderr, "Runtime error: %s", "Receiver is null");
6462 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 488);
6463 show_backtrace(1);
6464 } else {
6465 var83 = ((val* (*)(val*))(var82->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var82) /* mpropdef on <var82:nullable Frame>*/;
6466 }
6467 var84 = ((val* (*)(val*))(var83->class->vft[COLOR_model__MPropDef__mclassdef]))(var83) /* mclassdef on <var83:MPropDef>*/;
6468 var85 = ((val* (*)(val*))(var84->class->vft[COLOR_model__MClassDef__bound_mtype]))(var84) /* bound_mtype on <var84:MClassDef>*/;
6469 var86 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6470 if (var86 == NULL) {
6471 fprintf(stderr, "Runtime error: %s", "Receiver is null");
6472 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 488);
6473 show_backtrace(1);
6474 } else {
6475 var87 = ((val* (*)(val*))(var86->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var86) /* mpropdef on <var86:nullable Frame>*/;
6476 }
6477 var88 = ((val* (*)(val*))(var87->class->vft[COLOR_model__MPropDef__mclassdef]))(var87) /* mclassdef on <var87:MPropDef>*/;
6478 var89 = ((val* (*)(val*))(var88->class->vft[COLOR_model__MClassDef__mmodule]))(var88) /* mmodule on <var88:MClassDef>*/;
6479 var90 = 0;
6480 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)>*/;
6481 var_mtype = var91;
6482 /* <var_mtype:MType> isa MNullableType */
6483 cltype93 = type_model__MNullableType.color;
6484 idtype94 = type_model__MNullableType.id;
6485 if(cltype93 >= var_mtype->type->table_size) {
6486 var92 = 0;
6487 } else {
6488 var92 = var_mtype->type->type_table[cltype93] == idtype94;
6489 }
6490 if (var92){
6491 var95 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
6492 var_mtype = var95;
6493 if (varonce96) {
6494 var97 = varonce96;
6495 } else {
6496 var98 = "1";
6497 var99 = 1;
6498 var100 = string__NativeString__to_s_with_length(var98, var99);
6499 var97 = var100;
6500 varonce96 = var97;
6501 }
6502 var_accept_null = var97;
6503 } else {
6504 }
6505 } else {
6506 }
6507 var101 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
6508 var102 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6509 if (var102 == NULL) {
6510 fprintf(stderr, "Runtime error: %s", "Receiver is null");
6511 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 495);
6512 show_backtrace(1);
6513 } else {
6514 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var102) /* mpropdef on <var102:nullable Frame>*/;
6515 }
6516 var104 = ((val* (*)(val*))(var103->class->vft[COLOR_model__MPropDef__mclassdef]))(var103) /* mclassdef on <var103:MPropDef>*/;
6517 var105 = ((val* (*)(val*))(var104->class->vft[COLOR_model__MClassDef__mmodule]))(var104) /* mmodule on <var104:MClassDef>*/;
6518 var106 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6519 if (var106 == NULL) {
6520 fprintf(stderr, "Runtime error: %s", "Receiver is null");
6521 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 495);
6522 show_backtrace(1);
6523 } else {
6524 var107 = ((val* (*)(val*))(var106->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var106) /* mpropdef on <var106:nullable Frame>*/;
6525 }
6526 var108 = ((val* (*)(val*))(var107->class->vft[COLOR_model__MPropDef__mclassdef]))(var107) /* mclassdef on <var107:MPropDef>*/;
6527 var109 = ((val* (*)(val*))(var108->class->vft[COLOR_model__MClassDef__bound_mtype]))(var108) /* bound_mtype on <var108:MClassDef>*/;
6528 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>*/;
6529 if (var110){
6530 if (varonce111) {
6531 var112 = varonce111;
6532 } else {
6533 var113 = " = 1; /* easy ";
6534 var114 = 14;
6535 var115 = string__NativeString__to_s_with_length(var113, var114);
6536 var112 = var115;
6537 varonce111 = var112;
6538 }
6539 var116 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
6540 if (varonce117) {
6541 var118 = varonce117;
6542 } else {
6543 var119 = " isa ";
6544 var120 = 5;
6545 var121 = string__NativeString__to_s_with_length(var119, var120);
6546 var118 = var121;
6547 varonce117 = var118;
6548 }
6549 if (varonce122) {
6550 var123 = varonce122;
6551 } else {
6552 var124 = "*/";
6553 var125 = 2;
6554 var126 = string__NativeString__to_s_with_length(var124, var125);
6555 var123 = var126;
6556 varonce122 = var123;
6557 }
6558 var127 = NEW_array__Array(&type_array__Arraykernel__Object);
6559 { /* var127 = array_instance Array[Object] */
6560 var128 = 6;
6561 var129 = NEW_array__NativeArray(var128, &type_array__NativeArraykernel__Object);
6562 ((struct instance_array__NativeArray*)var129)->values[0] = (val*) var_res;
6563 ((struct instance_array__NativeArray*)var129)->values[1] = (val*) var112;
6564 ((struct instance_array__NativeArray*)var129)->values[2] = (val*) var116;
6565 ((struct instance_array__NativeArray*)var129)->values[3] = (val*) var118;
6566 ((struct instance_array__NativeArray*)var129)->values[4] = (val*) var_mtype;
6567 ((struct instance_array__NativeArray*)var129)->values[5] = (val*) var123;
6568 ((void (*)(val*, val*, long))(var127->class->vft[COLOR_array__Array__with_native]))(var127, var129, var128) /* with_native on <var127:Array[Object]>*/;
6569 }
6570 var130 = ((val* (*)(val*))(var127->class->vft[COLOR_string__Object__to_s]))(var127) /* to_s on <var127:Array[Object]>*/;
6571 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var130) /* add on <self:SeparateErasureCompilerVisitor>*/;
6572 var131 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6573 var132 = ((val* (*)(val*))(var131->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var131) /* modelbuilder on <var131:AbstractCompiler(SeparateCompiler)>*/;
6574 var133 = ((val* (*)(val*))(var132->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var132) /* toolcontext on <var132:ModelBuilder>*/;
6575 var134 = ((val* (*)(val*))(var133->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var133) /* opt_typing_test_metrics on <var133:ToolContext>*/;
6576 var135 = ((val* (*)(val*))(var134->class->vft[COLOR_opts__Option__value]))(var134) /* value on <var134:OptionBool>*/;
6577 var136 = ((struct instance_kernel__Bool*)var135)->value; /* autounbox from nullable Object to Bool */;
6578 if (var136){
6579 var137 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6580 var138 = ((val* (*)(val*))(var137->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_skipped]))(var137) /* count_type_test_skipped on <var137:AbstractCompiler(SeparateCompiler)>*/;
6581 var_ = var138;
6582 var_139 = var_tag;
6583 var140 = ((val* (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_, var_139) /* [] on <var_:HashMap[String, Int]>*/;
6584 var141 = 1;
6585 { /* Inline kernel#Int#+ (var140,var141) */
6586 var144 = ((struct instance_kernel__Int*)var140)->value; /* autounbox from nullable Object to Int */;
6587 var145 = var144 + var141;
6588 var142 = var145;
6589 goto RET_LABEL143;
6590 RET_LABEL143:(void)0;
6591 }
6592 var146 = BOX_kernel__Int(var142); /* autobox from Int to nullable Object */
6593 ((void (*)(val*, val*, val*))(var_->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_, var_139, var146) /* []= on <var_:HashMap[String, Int]>*/;
6594 if (varonce147) {
6595 var148 = varonce147;
6596 } else {
6597 var149 = "count_type_test_skipped_";
6598 var150 = 24;
6599 var151 = string__NativeString__to_s_with_length(var149, var150);
6600 var148 = var151;
6601 varonce147 = var148;
6602 }
6603 if (varonce152) {
6604 var153 = varonce152;
6605 } else {
6606 var154 = "++;";
6607 var155 = 3;
6608 var156 = string__NativeString__to_s_with_length(var154, var155);
6609 var153 = var156;
6610 varonce152 = var153;
6611 }
6612 var157 = NEW_array__Array(&type_array__Arraykernel__Object);
6613 { /* var157 = array_instance Array[Object] */
6614 var158 = 3;
6615 var159 = NEW_array__NativeArray(var158, &type_array__NativeArraykernel__Object);
6616 ((struct instance_array__NativeArray*)var159)->values[0] = (val*) var148;
6617 ((struct instance_array__NativeArray*)var159)->values[1] = (val*) var_tag;
6618 ((struct instance_array__NativeArray*)var159)->values[2] = (val*) var153;
6619 ((void (*)(val*, val*, long))(var157->class->vft[COLOR_array__Array__with_native]))(var157, var159, var158) /* with_native on <var157:Array[Object]>*/;
6620 }
6621 var160 = ((val* (*)(val*))(var157->class->vft[COLOR_string__Object__to_s]))(var157) /* to_s on <var157:Array[Object]>*/;
6622 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var160) /* add on <self:SeparateErasureCompilerVisitor>*/;
6623 } else {
6624 }
6625 var = var_res;
6626 goto RET_LABEL;
6627 } else {
6628 }
6629 var161 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
6630 var162 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_compiler__MType__ctype]))(var161) /* ctype on <var161:MType>*/;
6631 if (varonce163) {
6632 var164 = varonce163;
6633 } else {
6634 var165 = "val*";
6635 var166 = 4;
6636 var167 = string__NativeString__to_s_with_length(var165, var166);
6637 var164 = var167;
6638 varonce163 = var164;
6639 }
6640 var168 = ((short int (*)(val*, val*))(var162->class->vft[COLOR_kernel__Object___61d_61d]))(var162, var164) /* == on <var162:String>*/;
6641 if (var168){
6642 var169 = NEW_array__Array(&type_array__Arraykernel__Object);
6643 var170 = 3;
6644 ((void (*)(val*, long))(var169->class->vft[COLOR_array__Array__with_capacity]))(var169, var170) /* with_capacity on <var169:Array[Object]>*/;
6645 var_171 = var169;
6646 if (varonce172) {
6647 var173 = varonce172;
6648 } else {
6649 var174 = "";
6650 var175 = 0;
6651 var176 = string__NativeString__to_s_with_length(var174, var175);
6652 var173 = var176;
6653 varonce172 = var173;
6654 }
6655 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var173) /* add on <var_171:Array[Object]>*/;
6656 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var_value) /* add on <var_171:Array[Object]>*/;
6657 if (varonce177) {
6658 var178 = varonce177;
6659 } else {
6660 var179 = "->class->";
6661 var180 = 9;
6662 var181 = string__NativeString__to_s_with_length(var179, var180);
6663 var178 = var181;
6664 varonce177 = var178;
6665 }
6666 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var178) /* add on <var_171:Array[Object]>*/;
6667 var182 = ((val* (*)(val*))(var_171->class->vft[COLOR_string__Object__to_s]))(var_171) /* to_s on <var_171:Array[Object]>*/;
6668 var_class_ptr = var182;
6669 } else {
6670 var183 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
6671 /* <var183:MType> isa MClassType */
6672 cltype185 = type_model__MClassType.color;
6673 idtype186 = type_model__MClassType.id;
6674 if(cltype185 >= var183->type->table_size) {
6675 var184 = 0;
6676 } else {
6677 var184 = var183->type->type_table[cltype185] == idtype186;
6678 }
6679 if (!var184) {
6680 var_class_name = var183 == NULL ? "null" : var183->type->name;
6681 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
6682 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 509);
6683 show_backtrace(1);
6684 }
6685 var187 = ((val* (*)(val*))(var183->class->vft[COLOR_model__MClassType__mclass]))(var183) /* mclass on <var183:MType(MClassType)>*/;
6686 var_mclass = var187;
6687 if (varonce188) {
6688 var189 = varonce188;
6689 } else {
6690 var190 = "class_";
6691 var191 = 6;
6692 var192 = string__NativeString__to_s_with_length(var190, var191);
6693 var189 = var192;
6694 varonce188 = var189;
6695 }
6696 var193 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
6697 var194 = NEW_array__Array(&type_array__Arraykernel__Object);
6698 { /* var194 = array_instance Array[Object] */
6699 var195 = 2;
6700 var196 = NEW_array__NativeArray(var195, &type_array__NativeArraykernel__Object);
6701 ((struct instance_array__NativeArray*)var196)->values[0] = (val*) var189;
6702 ((struct instance_array__NativeArray*)var196)->values[1] = (val*) var193;
6703 ((void (*)(val*, val*, long))(var194->class->vft[COLOR_array__Array__with_native]))(var194, var196, var195) /* with_native on <var194:Array[Object]>*/;
6704 }
6705 var197 = ((val* (*)(val*))(var194->class->vft[COLOR_string__Object__to_s]))(var194) /* to_s on <var194:Array[Object]>*/;
6706 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var197) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6707 var198 = NEW_array__Array(&type_array__Arraykernel__Object);
6708 var199 = 3;
6709 ((void (*)(val*, long))(var198->class->vft[COLOR_array__Array__with_capacity]))(var198, var199) /* with_capacity on <var198:Array[Object]>*/;
6710 var_200 = var198;
6711 if (varonce201) {
6712 var202 = varonce201;
6713 } else {
6714 var203 = "class_";
6715 var204 = 6;
6716 var205 = string__NativeString__to_s_with_length(var203, var204);
6717 var202 = var205;
6718 varonce201 = var202;
6719 }
6720 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var202) /* add on <var_200:Array[Object]>*/;
6721 var206 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
6722 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var206) /* add on <var_200:Array[Object]>*/;
6723 if (varonce207) {
6724 var208 = varonce207;
6725 } else {
6726 var209 = ".";
6727 var210 = 1;
6728 var211 = string__NativeString__to_s_with_length(var209, var210);
6729 var208 = var211;
6730 varonce207 = var208;
6731 }
6732 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var208) /* add on <var_200:Array[Object]>*/;
6733 var212 = ((val* (*)(val*))(var_200->class->vft[COLOR_string__Object__to_s]))(var_200) /* to_s on <var_200:Array[Object]>*/;
6734 var_class_ptr = var212;
6735 }
6736 /* <var_mtype:MType> isa MClassType */
6737 cltype214 = type_model__MClassType.color;
6738 idtype215 = type_model__MClassType.id;
6739 if(cltype214 >= var_mtype->type->table_size) {
6740 var213 = 0;
6741 } else {
6742 var213 = var_mtype->type->type_table[cltype214] == idtype215;
6743 }
6744 if (var213){
6745 if (varonce216) {
6746 var217 = varonce216;
6747 } else {
6748 var218 = "class_";
6749 var219 = 6;
6750 var220 = string__NativeString__to_s_with_length(var218, var219);
6751 var217 = var220;
6752 varonce216 = var217;
6753 }
6754 var221 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6755 var222 = ((val* (*)(val*))(var221->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var221) /* c_name on <var221:MClass>*/;
6756 var223 = NEW_array__Array(&type_array__Arraykernel__Object);
6757 { /* var223 = array_instance Array[Object] */
6758 var224 = 2;
6759 var225 = NEW_array__NativeArray(var224, &type_array__NativeArraykernel__Object);
6760 ((struct instance_array__NativeArray*)var225)->values[0] = (val*) var217;
6761 ((struct instance_array__NativeArray*)var225)->values[1] = (val*) var222;
6762 ((void (*)(val*, val*, long))(var223->class->vft[COLOR_array__Array__with_native]))(var223, var225, var224) /* with_native on <var223:Array[Object]>*/;
6763 }
6764 var226 = ((val* (*)(val*))(var223->class->vft[COLOR_string__Object__to_s]))(var223) /* to_s on <var223:Array[Object]>*/;
6765 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var226) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6766 if (varonce227) {
6767 var228 = varonce227;
6768 } else {
6769 var229 = " = class_";
6770 var230 = 9;
6771 var231 = string__NativeString__to_s_with_length(var229, var230);
6772 var228 = var231;
6773 varonce227 = var228;
6774 }
6775 var232 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6776 var233 = ((val* (*)(val*))(var232->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var232) /* c_name on <var232:MClass>*/;
6777 if (varonce234) {
6778 var235 = varonce234;
6779 } else {
6780 var236 = ".color;";
6781 var237 = 7;
6782 var238 = string__NativeString__to_s_with_length(var236, var237);
6783 var235 = var238;
6784 varonce234 = var235;
6785 }
6786 var239 = NEW_array__Array(&type_array__Arraykernel__Object);
6787 { /* var239 = array_instance Array[Object] */
6788 var240 = 4;
6789 var241 = NEW_array__NativeArray(var240, &type_array__NativeArraykernel__Object);
6790 ((struct instance_array__NativeArray*)var241)->values[0] = (val*) var_cltype;
6791 ((struct instance_array__NativeArray*)var241)->values[1] = (val*) var228;
6792 ((struct instance_array__NativeArray*)var241)->values[2] = (val*) var233;
6793 ((struct instance_array__NativeArray*)var241)->values[3] = (val*) var235;
6794 ((void (*)(val*, val*, long))(var239->class->vft[COLOR_array__Array__with_native]))(var239, var241, var240) /* with_native on <var239:Array[Object]>*/;
6795 }
6796 var242 = ((val* (*)(val*))(var239->class->vft[COLOR_string__Object__to_s]))(var239) /* to_s on <var239:Array[Object]>*/;
6797 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var242) /* add on <self:SeparateErasureCompilerVisitor>*/;
6798 if (varonce243) {
6799 var244 = varonce243;
6800 } else {
6801 var245 = " = class_";
6802 var246 = 9;
6803 var247 = string__NativeString__to_s_with_length(var245, var246);
6804 var244 = var247;
6805 varonce243 = var244;
6806 }
6807 var248 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6808 var249 = ((val* (*)(val*))(var248->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var248) /* c_name on <var248:MClass>*/;
6809 if (varonce250) {
6810 var251 = varonce250;
6811 } else {
6812 var252 = ".id;";
6813 var253 = 4;
6814 var254 = string__NativeString__to_s_with_length(var252, var253);
6815 var251 = var254;
6816 varonce250 = var251;
6817 }
6818 var255 = NEW_array__Array(&type_array__Arraykernel__Object);
6819 { /* var255 = array_instance Array[Object] */
6820 var256 = 4;
6821 var257 = NEW_array__NativeArray(var256, &type_array__NativeArraykernel__Object);
6822 ((struct instance_array__NativeArray*)var257)->values[0] = (val*) var_idtype;
6823 ((struct instance_array__NativeArray*)var257)->values[1] = (val*) var244;
6824 ((struct instance_array__NativeArray*)var257)->values[2] = (val*) var249;
6825 ((struct instance_array__NativeArray*)var257)->values[3] = (val*) var251;
6826 ((void (*)(val*, val*, long))(var255->class->vft[COLOR_array__Array__with_native]))(var255, var257, var256) /* with_native on <var255:Array[Object]>*/;
6827 }
6828 var258 = ((val* (*)(val*))(var255->class->vft[COLOR_string__Object__to_s]))(var255) /* to_s on <var255:Array[Object]>*/;
6829 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var258) /* add on <self:SeparateErasureCompilerVisitor>*/;
6830 var259 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6831 var260 = ((val* (*)(val*))(var259->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var259) /* modelbuilder on <var259:AbstractCompiler(SeparateCompiler)>*/;
6832 var261 = ((val* (*)(val*))(var260->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var260) /* toolcontext on <var260:ModelBuilder>*/;
6833 var262 = ((val* (*)(val*))(var261->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var261) /* opt_typing_test_metrics on <var261:ToolContext>*/;
6834 var263 = ((val* (*)(val*))(var262->class->vft[COLOR_opts__Option__value]))(var262) /* value on <var262:OptionBool>*/;
6835 var264 = ((struct instance_kernel__Bool*)var263)->value; /* autounbox from nullable Object to Bool */;
6836 if (var264){
6837 var265 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6838 var266 = ((val* (*)(val*))(var265->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_resolved]))(var265) /* count_type_test_resolved on <var265:AbstractCompiler(SeparateCompiler)>*/;
6839 var_267 = var266;
6840 var_268 = var_tag;
6841 var269 = ((val* (*)(val*, val*))(var_267->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_267, var_268) /* [] on <var_267:HashMap[String, Int]>*/;
6842 var270 = 1;
6843 { /* Inline kernel#Int#+ (var269,var270) */
6844 var273 = ((struct instance_kernel__Int*)var269)->value; /* autounbox from nullable Object to Int */;
6845 var274 = var273 + var270;
6846 var271 = var274;
6847 goto RET_LABEL272;
6848 RET_LABEL272:(void)0;
6849 }
6850 var275 = BOX_kernel__Int(var271); /* autobox from Int to nullable Object */
6851 ((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]>*/;
6852 if (varonce276) {
6853 var277 = varonce276;
6854 } else {
6855 var278 = "count_type_test_resolved_";
6856 var279 = 25;
6857 var280 = string__NativeString__to_s_with_length(var278, var279);
6858 var277 = var280;
6859 varonce276 = var277;
6860 }
6861 if (varonce281) {
6862 var282 = varonce281;
6863 } else {
6864 var283 = "++;";
6865 var284 = 3;
6866 var285 = string__NativeString__to_s_with_length(var283, var284);
6867 var282 = var285;
6868 varonce281 = var282;
6869 }
6870 var286 = NEW_array__Array(&type_array__Arraykernel__Object);
6871 { /* var286 = array_instance Array[Object] */
6872 var287 = 3;
6873 var288 = NEW_array__NativeArray(var287, &type_array__NativeArraykernel__Object);
6874 ((struct instance_array__NativeArray*)var288)->values[0] = (val*) var277;
6875 ((struct instance_array__NativeArray*)var288)->values[1] = (val*) var_tag;
6876 ((struct instance_array__NativeArray*)var288)->values[2] = (val*) var282;
6877 ((void (*)(val*, val*, long))(var286->class->vft[COLOR_array__Array__with_native]))(var286, var288, var287) /* with_native on <var286:Array[Object]>*/;
6878 }
6879 var289 = ((val* (*)(val*))(var286->class->vft[COLOR_string__Object__to_s]))(var286) /* to_s on <var286:Array[Object]>*/;
6880 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var289) /* add on <self:SeparateErasureCompilerVisitor>*/;
6881 } else {
6882 }
6883 } else {
6884 /* <var_mtype:MType> isa MVirtualType */
6885 cltype291 = type_model__MVirtualType.color;
6886 idtype292 = type_model__MVirtualType.id;
6887 if(cltype291 >= var_mtype->type->table_size) {
6888 var290 = 0;
6889 } else {
6890 var290 = var_mtype->type->type_table[cltype291] == idtype292;
6891 }
6892 if (var290){
6893 var293 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6894 if (var293 == NULL) {
6895 fprintf(stderr, "Runtime error: %s", "Receiver is null");
6896 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 523);
6897 show_backtrace(1);
6898 } else {
6899 var294 = ((val* (*)(val*))(var293->class->vft[COLOR_abstract_compiler__Frame__arguments]))(var293) /* arguments on <var293:nullable Frame>*/;
6900 }
6901 var295 = ((val* (*)(val*))(var294->class->vft[COLOR_abstract_collection__Collection__first]))(var294) /* first on <var294:Array[RuntimeVariable]>*/;
6902 var_recv = var295;
6903 var296 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6904 var297 = ((val* (*)(val*))(var296->class->vft[COLOR_abstract_compiler__MType__ctype]))(var296) /* ctype on <var296:MType>*/;
6905 if (varonce298) {
6906 var299 = varonce298;
6907 } else {
6908 var300 = "val*";
6909 var301 = 4;
6910 var302 = string__NativeString__to_s_with_length(var300, var301);
6911 var299 = var302;
6912 varonce298 = var299;
6913 }
6914 var303 = ((short int (*)(val*, val*))(var297->class->vft[COLOR_kernel__Object___61d_61d]))(var297, var299) /* == on <var297:String>*/;
6915 if (var303){
6916 if (varonce304) {
6917 var305 = varonce304;
6918 } else {
6919 var306 = "->class->";
6920 var307 = 9;
6921 var308 = string__NativeString__to_s_with_length(var306, var307);
6922 var305 = var308;
6923 varonce304 = var305;
6924 }
6925 var309 = NEW_array__Array(&type_array__Arraykernel__Object);
6926 { /* var309 = array_instance Array[Object] */
6927 var310 = 2;
6928 var311 = NEW_array__NativeArray(var310, &type_array__NativeArraykernel__Object);
6929 ((struct instance_array__NativeArray*)var311)->values[0] = (val*) var_recv;
6930 ((struct instance_array__NativeArray*)var311)->values[1] = (val*) var305;
6931 ((void (*)(val*, val*, long))(var309->class->vft[COLOR_array__Array__with_native]))(var309, var311, var310) /* with_native on <var309:Array[Object]>*/;
6932 }
6933 var312 = ((val* (*)(val*))(var309->class->vft[COLOR_string__Object__to_s]))(var309) /* to_s on <var309:Array[Object]>*/;
6934 var_recv_ptr = var312;
6935 } else {
6936 var313 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6937 /* <var313:MType> isa MClassType */
6938 cltype315 = type_model__MClassType.color;
6939 idtype316 = type_model__MClassType.id;
6940 if(cltype315 >= var313->type->table_size) {
6941 var314 = 0;
6942 } else {
6943 var314 = var313->type->type_table[cltype315] == idtype316;
6944 }
6945 if (!var314) {
6946 var_class_name317 = var313 == NULL ? "null" : var313->type->name;
6947 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name317);
6948 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 528);
6949 show_backtrace(1);
6950 }
6951 var318 = ((val* (*)(val*))(var313->class->vft[COLOR_model__MClassType__mclass]))(var313) /* mclass on <var313:MType(MClassType)>*/;
6952 var_mclass319 = var318;
6953 if (varonce320) {
6954 var321 = varonce320;
6955 } else {
6956 var322 = "class_";
6957 var323 = 6;
6958 var324 = string__NativeString__to_s_with_length(var322, var323);
6959 var321 = var324;
6960 varonce320 = var321;
6961 }
6962 var325 = ((val* (*)(val*))(var_mclass319->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass319) /* c_name on <var_mclass319:MClass>*/;
6963 var326 = NEW_array__Array(&type_array__Arraykernel__Object);
6964 { /* var326 = array_instance Array[Object] */
6965 var327 = 2;
6966 var328 = NEW_array__NativeArray(var327, &type_array__NativeArraykernel__Object);
6967 ((struct instance_array__NativeArray*)var328)->values[0] = (val*) var321;
6968 ((struct instance_array__NativeArray*)var328)->values[1] = (val*) var325;
6969 ((void (*)(val*, val*, long))(var326->class->vft[COLOR_array__Array__with_native]))(var326, var328, var327) /* with_native on <var326:Array[Object]>*/;
6970 }
6971 var329 = ((val* (*)(val*))(var326->class->vft[COLOR_string__Object__to_s]))(var326) /* to_s on <var326:Array[Object]>*/;
6972 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var329) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6973 if (varonce330) {
6974 var331 = varonce330;
6975 } else {
6976 var332 = "class_";
6977 var333 = 6;
6978 var334 = string__NativeString__to_s_with_length(var332, var333);
6979 var331 = var334;
6980 varonce330 = var331;
6981 }
6982 var335 = ((val* (*)(val*))(var_mclass319->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass319) /* c_name on <var_mclass319:MClass>*/;
6983 if (varonce336) {
6984 var337 = varonce336;
6985 } else {
6986 var338 = ".";
6987 var339 = 1;
6988 var340 = string__NativeString__to_s_with_length(var338, var339);
6989 var337 = var340;
6990 varonce336 = var337;
6991 }
6992 var341 = NEW_array__Array(&type_array__Arraykernel__Object);
6993 { /* var341 = array_instance Array[Object] */
6994 var342 = 3;
6995 var343 = NEW_array__NativeArray(var342, &type_array__NativeArraykernel__Object);
6996 ((struct instance_array__NativeArray*)var343)->values[0] = (val*) var331;
6997 ((struct instance_array__NativeArray*)var343)->values[1] = (val*) var335;
6998 ((struct instance_array__NativeArray*)var343)->values[2] = (val*) var337;
6999 ((void (*)(val*, val*, long))(var341->class->vft[COLOR_array__Array__with_native]))(var341, var343, var342) /* with_native on <var341:Array[Object]>*/;
7000 }
7001 var344 = ((val* (*)(val*))(var341->class->vft[COLOR_string__Object__to_s]))(var341) /* to_s on <var341:Array[Object]>*/;
7002 var_recv_ptr = var344;
7003 }
7004 if (varonce345) {
7005 var346 = varonce345;
7006 } else {
7007 var347 = "entry";
7008 var348 = 5;
7009 var349 = string__NativeString__to_s_with_length(var347, var348);
7010 var346 = var349;
7011 varonce345 = var346;
7012 }
7013 var350 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var346) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7014 var_entry = var350;
7015 if (varonce351) {
7016 var352 = varonce351;
7017 } else {
7018 var353 = "struct vts_entry ";
7019 var354 = 17;
7020 var355 = string__NativeString__to_s_with_length(var353, var354);
7021 var352 = var355;
7022 varonce351 = var352;
7023 }
7024 if (varonce356) {
7025 var357 = varonce356;
7026 } else {
7027 var358 = ";";
7028 var359 = 1;
7029 var360 = string__NativeString__to_s_with_length(var358, var359);
7030 var357 = var360;
7031 varonce356 = var357;
7032 }
7033 var361 = NEW_array__Array(&type_array__Arraykernel__Object);
7034 { /* var361 = array_instance Array[Object] */
7035 var362 = 3;
7036 var363 = NEW_array__NativeArray(var362, &type_array__NativeArraykernel__Object);
7037 ((struct instance_array__NativeArray*)var363)->values[0] = (val*) var352;
7038 ((struct instance_array__NativeArray*)var363)->values[1] = (val*) var_entry;
7039 ((struct instance_array__NativeArray*)var363)->values[2] = (val*) var357;
7040 ((void (*)(val*, val*, long))(var361->class->vft[COLOR_array__Array__with_native]))(var361, var363, var362) /* with_native on <var361:Array[Object]>*/;
7041 }
7042 var364 = ((val* (*)(val*))(var361->class->vft[COLOR_string__Object__to_s]))(var361) /* to_s on <var361:Array[Object]>*/;
7043 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var364) /* add on <self:SeparateErasureCompilerVisitor>*/;
7044 var365 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7045 var366 = ((val* (*)(val*))(var365->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var365) /* const_color on <var365:MProperty>*/;
7046 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var366) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
7047 var367 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7048 /* <var367:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
7049 cltype369 = type_separate_erasure_compiler__SeparateErasureCompiler.color;
7050 idtype370 = type_separate_erasure_compiler__SeparateErasureCompiler.id;
7051 if(cltype369 >= var367->type->table_size) {
7052 var368 = 0;
7053 } else {
7054 var368 = var367->type->type_table[cltype369] == idtype370;
7055 }
7056 if (!var368) {
7057 var_class_name371 = var367 == NULL ? "null" : var367->type->name;
7058 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name371);
7059 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 535);
7060 show_backtrace(1);
7061 }
7062 var372 = ((val* (*)(val*))(var367->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(var367) /* vt_layout on <var367:SeparateCompiler(SeparateErasureCompiler)>*/;
7063 /* <var372:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
7064 cltype374 = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
7065 idtype375 = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
7066 if(var372 == NULL) {
7067 var373 = 0;
7068 } else {
7069 if(cltype374 >= var372->type->table_size) {
7070 var373 = 0;
7071 } else {
7072 var373 = var372->type->type_table[cltype374] == idtype375;
7073 }
7074 }
7075 if (var373){
7076 if (varonce376) {
7077 var377 = varonce376;
7078 } else {
7079 var378 = " = ";
7080 var379 = 3;
7081 var380 = string__NativeString__to_s_with_length(var378, var379);
7082 var377 = var380;
7083 varonce376 = var377;
7084 }
7085 if (varonce381) {
7086 var382 = varonce381;
7087 } else {
7088 var383 = "vts_table->vts[HASH(";
7089 var384 = 20;
7090 var385 = string__NativeString__to_s_with_length(var383, var384);
7091 var382 = var385;
7092 varonce381 = var382;
7093 }
7094 if (varonce386) {
7095 var387 = varonce386;
7096 } else {
7097 var388 = "vts_table->mask, ";
7098 var389 = 17;
7099 var390 = string__NativeString__to_s_with_length(var388, var389);
7100 var387 = var390;
7101 varonce386 = var387;
7102 }
7103 var391 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7104 var392 = ((val* (*)(val*))(var391->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var391) /* const_color on <var391:MProperty>*/;
7105 if (varonce393) {
7106 var394 = varonce393;
7107 } else {
7108 var395 = ")];";
7109 var396 = 3;
7110 var397 = string__NativeString__to_s_with_length(var395, var396);
7111 var394 = var397;
7112 varonce393 = var394;
7113 }
7114 var398 = NEW_array__Array(&type_array__Arraykernel__Object);
7115 { /* var398 = array_instance Array[Object] */
7116 var399 = 8;
7117 var400 = NEW_array__NativeArray(var399, &type_array__NativeArraykernel__Object);
7118 ((struct instance_array__NativeArray*)var400)->values[0] = (val*) var_entry;
7119 ((struct instance_array__NativeArray*)var400)->values[1] = (val*) var377;
7120 ((struct instance_array__NativeArray*)var400)->values[2] = (val*) var_recv_ptr;
7121 ((struct instance_array__NativeArray*)var400)->values[3] = (val*) var382;
7122 ((struct instance_array__NativeArray*)var400)->values[4] = (val*) var_recv_ptr;
7123 ((struct instance_array__NativeArray*)var400)->values[5] = (val*) var387;
7124 ((struct instance_array__NativeArray*)var400)->values[6] = (val*) var392;
7125 ((struct instance_array__NativeArray*)var400)->values[7] = (val*) var394;
7126 ((void (*)(val*, val*, long))(var398->class->vft[COLOR_array__Array__with_native]))(var398, var400, var399) /* with_native on <var398:Array[Object]>*/;
7127 }
7128 var401 = ((val* (*)(val*))(var398->class->vft[COLOR_string__Object__to_s]))(var398) /* to_s on <var398:Array[Object]>*/;
7129 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var401) /* add on <self:SeparateErasureCompilerVisitor>*/;
7130 } else {
7131 if (varonce402) {
7132 var403 = varonce402;
7133 } else {
7134 var404 = " = ";
7135 var405 = 3;
7136 var406 = string__NativeString__to_s_with_length(var404, var405);
7137 var403 = var406;
7138 varonce402 = var403;
7139 }
7140 if (varonce407) {
7141 var408 = varonce407;
7142 } else {
7143 var409 = "vts_table->vts[";
7144 var410 = 15;
7145 var411 = string__NativeString__to_s_with_length(var409, var410);
7146 var408 = var411;
7147 varonce407 = var408;
7148 }
7149 var412 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7150 var413 = ((val* (*)(val*))(var412->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var412) /* const_color on <var412:MProperty>*/;
7151 if (varonce414) {
7152 var415 = varonce414;
7153 } else {
7154 var416 = "];";
7155 var417 = 2;
7156 var418 = string__NativeString__to_s_with_length(var416, var417);
7157 var415 = var418;
7158 varonce414 = var415;
7159 }
7160 var419 = NEW_array__Array(&type_array__Arraykernel__Object);
7161 { /* var419 = array_instance Array[Object] */
7162 var420 = 6;
7163 var421 = NEW_array__NativeArray(var420, &type_array__NativeArraykernel__Object);
7164 ((struct instance_array__NativeArray*)var421)->values[0] = (val*) var_entry;
7165 ((struct instance_array__NativeArray*)var421)->values[1] = (val*) var403;
7166 ((struct instance_array__NativeArray*)var421)->values[2] = (val*) var_recv_ptr;
7167 ((struct instance_array__NativeArray*)var421)->values[3] = (val*) var408;
7168 ((struct instance_array__NativeArray*)var421)->values[4] = (val*) var413;
7169 ((struct instance_array__NativeArray*)var421)->values[5] = (val*) var415;
7170 ((void (*)(val*, val*, long))(var419->class->vft[COLOR_array__Array__with_native]))(var419, var421, var420) /* with_native on <var419:Array[Object]>*/;
7171 }
7172 var422 = ((val* (*)(val*))(var419->class->vft[COLOR_string__Object__to_s]))(var419) /* to_s on <var419:Array[Object]>*/;
7173 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var422) /* add on <self:SeparateErasureCompilerVisitor>*/;
7174 }
7175 if (varonce423) {
7176 var424 = varonce423;
7177 } else {
7178 var425 = " = ";
7179 var426 = 3;
7180 var427 = string__NativeString__to_s_with_length(var425, var426);
7181 var424 = var427;
7182 varonce423 = var424;
7183 }
7184 if (varonce428) {
7185 var429 = varonce428;
7186 } else {
7187 var430 = ".class->color;";
7188 var431 = 14;
7189 var432 = string__NativeString__to_s_with_length(var430, var431);
7190 var429 = var432;
7191 varonce428 = var429;
7192 }
7193 var433 = NEW_array__Array(&type_array__Arraykernel__Object);
7194 { /* var433 = array_instance Array[Object] */
7195 var434 = 4;
7196 var435 = NEW_array__NativeArray(var434, &type_array__NativeArraykernel__Object);
7197 ((struct instance_array__NativeArray*)var435)->values[0] = (val*) var_cltype;
7198 ((struct instance_array__NativeArray*)var435)->values[1] = (val*) var424;
7199 ((struct instance_array__NativeArray*)var435)->values[2] = (val*) var_entry;
7200 ((struct instance_array__NativeArray*)var435)->values[3] = (val*) var429;
7201 ((void (*)(val*, val*, long))(var433->class->vft[COLOR_array__Array__with_native]))(var433, var435, var434) /* with_native on <var433:Array[Object]>*/;
7202 }
7203 var436 = ((val* (*)(val*))(var433->class->vft[COLOR_string__Object__to_s]))(var433) /* to_s on <var433:Array[Object]>*/;
7204 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var436) /* add on <self:SeparateErasureCompilerVisitor>*/;
7205 if (varonce437) {
7206 var438 = varonce437;
7207 } else {
7208 var439 = " = ";
7209 var440 = 3;
7210 var441 = string__NativeString__to_s_with_length(var439, var440);
7211 var438 = var441;
7212 varonce437 = var438;
7213 }
7214 if (varonce442) {
7215 var443 = varonce442;
7216 } else {
7217 var444 = ".class->id;";
7218 var445 = 11;
7219 var446 = string__NativeString__to_s_with_length(var444, var445);
7220 var443 = var446;
7221 varonce442 = var443;
7222 }
7223 var447 = NEW_array__Array(&type_array__Arraykernel__Object);
7224 { /* var447 = array_instance Array[Object] */
7225 var448 = 4;
7226 var449 = NEW_array__NativeArray(var448, &type_array__NativeArraykernel__Object);
7227 ((struct instance_array__NativeArray*)var449)->values[0] = (val*) var_idtype;
7228 ((struct instance_array__NativeArray*)var449)->values[1] = (val*) var438;
7229 ((struct instance_array__NativeArray*)var449)->values[2] = (val*) var_entry;
7230 ((struct instance_array__NativeArray*)var449)->values[3] = (val*) var443;
7231 ((void (*)(val*, val*, long))(var447->class->vft[COLOR_array__Array__with_native]))(var447, var449, var448) /* with_native on <var447:Array[Object]>*/;
7232 }
7233 var450 = ((val* (*)(val*))(var447->class->vft[COLOR_string__Object__to_s]))(var447) /* to_s on <var447:Array[Object]>*/;
7234 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var450) /* add on <self:SeparateErasureCompilerVisitor>*/;
7235 var_452 = var_maybe_null;
7236 if (var_maybe_null){
7237 if (varonce453) {
7238 var454 = varonce453;
7239 } else {
7240 var455 = "0";
7241 var456 = 1;
7242 var457 = string__NativeString__to_s_with_length(var455, var456);
7243 var454 = var457;
7244 varonce453 = var454;
7245 }
7246 var458 = ((short int (*)(val*, val*))(var_accept_null->class->vft[COLOR_kernel__Object___61d_61d]))(var_accept_null, var454) /* == on <var_accept_null:String>*/;
7247 var451 = var458;
7248 } else {
7249 var451 = var_452;
7250 }
7251 if (var451){
7252 if (varonce459) {
7253 var460 = varonce459;
7254 } else {
7255 var461 = "is_nullable";
7256 var462 = 11;
7257 var463 = string__NativeString__to_s_with_length(var461, var462);
7258 var460 = var463;
7259 varonce459 = var460;
7260 }
7261 var464 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var460) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7262 var_is_nullable = var464;
7263 if (varonce465) {
7264 var466 = varonce465;
7265 } else {
7266 var467 = "short int ";
7267 var468 = 10;
7268 var469 = string__NativeString__to_s_with_length(var467, var468);
7269 var466 = var469;
7270 varonce465 = var466;
7271 }
7272 if (varonce470) {
7273 var471 = varonce470;
7274 } else {
7275 var472 = ";";
7276 var473 = 1;
7277 var474 = string__NativeString__to_s_with_length(var472, var473);
7278 var471 = var474;
7279 varonce470 = var471;
7280 }
7281 var475 = NEW_array__Array(&type_array__Arraykernel__Object);
7282 { /* var475 = array_instance Array[Object] */
7283 var476 = 3;
7284 var477 = NEW_array__NativeArray(var476, &type_array__NativeArraykernel__Object);
7285 ((struct instance_array__NativeArray*)var477)->values[0] = (val*) var466;
7286 ((struct instance_array__NativeArray*)var477)->values[1] = (val*) var_is_nullable;
7287 ((struct instance_array__NativeArray*)var477)->values[2] = (val*) var471;
7288 ((void (*)(val*, val*, long))(var475->class->vft[COLOR_array__Array__with_native]))(var475, var477, var476) /* with_native on <var475:Array[Object]>*/;
7289 }
7290 var478 = ((val* (*)(val*))(var475->class->vft[COLOR_string__Object__to_s]))(var475) /* to_s on <var475:Array[Object]>*/;
7291 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var478) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
7292 if (varonce479) {
7293 var480 = varonce479;
7294 } else {
7295 var481 = " = ";
7296 var482 = 3;
7297 var483 = string__NativeString__to_s_with_length(var481, var482);
7298 var480 = var483;
7299 varonce479 = var480;
7300 }
7301 if (varonce484) {
7302 var485 = varonce484;
7303 } else {
7304 var486 = ".is_nullable;";
7305 var487 = 13;
7306 var488 = string__NativeString__to_s_with_length(var486, var487);
7307 var485 = var488;
7308 varonce484 = var485;
7309 }
7310 var489 = NEW_array__Array(&type_array__Arraykernel__Object);
7311 { /* var489 = array_instance Array[Object] */
7312 var490 = 4;
7313 var491 = NEW_array__NativeArray(var490, &type_array__NativeArraykernel__Object);
7314 ((struct instance_array__NativeArray*)var491)->values[0] = (val*) var_is_nullable;
7315 ((struct instance_array__NativeArray*)var491)->values[1] = (val*) var480;
7316 ((struct instance_array__NativeArray*)var491)->values[2] = (val*) var_entry;
7317 ((struct instance_array__NativeArray*)var491)->values[3] = (val*) var485;
7318 ((void (*)(val*, val*, long))(var489->class->vft[COLOR_array__Array__with_native]))(var489, var491, var490) /* with_native on <var489:Array[Object]>*/;
7319 }
7320 var492 = ((val* (*)(val*))(var489->class->vft[COLOR_string__Object__to_s]))(var489) /* to_s on <var489:Array[Object]>*/;
7321 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var492) /* add on <self:SeparateErasureCompilerVisitor>*/;
7322 var493 = ((val* (*)(val*))(var_is_nullable->class->vft[COLOR_string__Object__to_s]))(var_is_nullable) /* to_s on <var_is_nullable:String>*/;
7323 var_accept_null = var493;
7324 } else {
7325 }
7326 var494 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7327 var495 = ((val* (*)(val*))(var494->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var494) /* modelbuilder on <var494:AbstractCompiler(SeparateCompiler)>*/;
7328 var496 = ((val* (*)(val*))(var495->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var495) /* toolcontext on <var495:ModelBuilder>*/;
7329 var497 = ((val* (*)(val*))(var496->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var496) /* opt_typing_test_metrics on <var496:ToolContext>*/;
7330 var498 = ((val* (*)(val*))(var497->class->vft[COLOR_opts__Option__value]))(var497) /* value on <var497:OptionBool>*/;
7331 var499 = ((struct instance_kernel__Bool*)var498)->value; /* autounbox from nullable Object to Bool */;
7332 if (var499){
7333 var500 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7334 var501 = ((val* (*)(val*))(var500->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_unresolved]))(var500) /* count_type_test_unresolved on <var500:AbstractCompiler(SeparateCompiler)>*/;
7335 var_502 = var501;
7336 var_503 = var_tag;
7337 var504 = ((val* (*)(val*, val*))(var_502->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_502, var_503) /* [] on <var_502:HashMap[String, Int]>*/;
7338 var505 = 1;
7339 { /* Inline kernel#Int#+ (var504,var505) */
7340 var508 = ((struct instance_kernel__Int*)var504)->value; /* autounbox from nullable Object to Int */;
7341 var509 = var508 + var505;
7342 var506 = var509;
7343 goto RET_LABEL507;
7344 RET_LABEL507:(void)0;
7345 }
7346 var510 = BOX_kernel__Int(var506); /* autobox from Int to nullable Object */
7347 ((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]>*/;
7348 if (varonce511) {
7349 var512 = varonce511;
7350 } else {
7351 var513 = "count_type_test_unresolved_";
7352 var514 = 27;
7353 var515 = string__NativeString__to_s_with_length(var513, var514);
7354 var512 = var515;
7355 varonce511 = var512;
7356 }
7357 if (varonce516) {
7358 var517 = varonce516;
7359 } else {
7360 var518 = "++;";
7361 var519 = 3;
7362 var520 = string__NativeString__to_s_with_length(var518, var519);
7363 var517 = var520;
7364 varonce516 = var517;
7365 }
7366 var521 = NEW_array__Array(&type_array__Arraykernel__Object);
7367 { /* var521 = array_instance Array[Object] */
7368 var522 = 3;
7369 var523 = NEW_array__NativeArray(var522, &type_array__NativeArraykernel__Object);
7370 ((struct instance_array__NativeArray*)var523)->values[0] = (val*) var512;
7371 ((struct instance_array__NativeArray*)var523)->values[1] = (val*) var_tag;
7372 ((struct instance_array__NativeArray*)var523)->values[2] = (val*) var517;
7373 ((void (*)(val*, val*, long))(var521->class->vft[COLOR_array__Array__with_native]))(var521, var523, var522) /* with_native on <var521:Array[Object]>*/;
7374 }
7375 var524 = ((val* (*)(val*))(var521->class->vft[COLOR_string__Object__to_s]))(var521) /* to_s on <var521:Array[Object]>*/;
7376 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var524) /* add on <self:SeparateErasureCompilerVisitor>*/;
7377 } else {
7378 }
7379 } else {
7380 if (varonce525) {
7381 var526 = varonce525;
7382 } else {
7383 var527 = "type_test(";
7384 var528 = 10;
7385 var529 = string__NativeString__to_s_with_length(var527, var528);
7386 var526 = var529;
7387 varonce525 = var526;
7388 }
7389 var530 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
7390 if (varonce531) {
7391 var532 = varonce531;
7392 } else {
7393 var533 = ", ";
7394 var534 = 2;
7395 var535 = string__NativeString__to_s_with_length(var533, var534);
7396 var532 = var535;
7397 varonce531 = var532;
7398 }
7399 if (varonce536) {
7400 var537 = varonce536;
7401 } else {
7402 var538 = ")";
7403 var539 = 1;
7404 var540 = string__NativeString__to_s_with_length(var538, var539);
7405 var537 = var540;
7406 varonce536 = var537;
7407 }
7408 var541 = NEW_array__Array(&type_array__Arraykernel__Object);
7409 { /* var541 = array_instance Array[Object] */
7410 var542 = 5;
7411 var543 = NEW_array__NativeArray(var542, &type_array__NativeArraykernel__Object);
7412 ((struct instance_array__NativeArray*)var543)->values[0] = (val*) var526;
7413 ((struct instance_array__NativeArray*)var543)->values[1] = (val*) var530;
7414 ((struct instance_array__NativeArray*)var543)->values[2] = (val*) var532;
7415 ((struct instance_array__NativeArray*)var543)->values[3] = (val*) var_mtype;
7416 ((struct instance_array__NativeArray*)var543)->values[4] = (val*) var537;
7417 ((void (*)(val*, val*, long))(var541->class->vft[COLOR_array__Array__with_native]))(var541, var543, var542) /* with_native on <var541:Array[Object]>*/;
7418 }
7419 var544 = ((val* (*)(val*))(var541->class->vft[COLOR_string__Object__to_s]))(var541) /* to_s on <var541:Array[Object]>*/;
7420 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var544) /* debug on <self:SeparateErasureCompilerVisitor>*/;
7421 fprintf(stderr, "Runtime error: %s", "Aborted");
7422 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 554);
7423 show_backtrace(1);
7424 }
7425 }
7426 if (var_maybe_null){
7427 if (varonce545) {
7428 var546 = varonce545;
7429 } else {
7430 var547 = "if(";
7431 var548 = 3;
7432 var549 = string__NativeString__to_s_with_length(var547, var548);
7433 var546 = var549;
7434 varonce545 = var546;
7435 }
7436 if (varonce550) {
7437 var551 = varonce550;
7438 } else {
7439 var552 = " == NULL) {";
7440 var553 = 11;
7441 var554 = string__NativeString__to_s_with_length(var552, var553);
7442 var551 = var554;
7443 varonce550 = var551;
7444 }
7445 var555 = NEW_array__Array(&type_array__Arraykernel__Object);
7446 { /* var555 = array_instance Array[Object] */
7447 var556 = 3;
7448 var557 = NEW_array__NativeArray(var556, &type_array__NativeArraykernel__Object);
7449 ((struct instance_array__NativeArray*)var557)->values[0] = (val*) var546;
7450 ((struct instance_array__NativeArray*)var557)->values[1] = (val*) var_value;
7451 ((struct instance_array__NativeArray*)var557)->values[2] = (val*) var551;
7452 ((void (*)(val*, val*, long))(var555->class->vft[COLOR_array__Array__with_native]))(var555, var557, var556) /* with_native on <var555:Array[Object]>*/;
7453 }
7454 var558 = ((val* (*)(val*))(var555->class->vft[COLOR_string__Object__to_s]))(var555) /* to_s on <var555:Array[Object]>*/;
7455 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var558) /* add on <self:SeparateErasureCompilerVisitor>*/;
7456 if (varonce559) {
7457 var560 = varonce559;
7458 } else {
7459 var561 = " = ";
7460 var562 = 3;
7461 var563 = string__NativeString__to_s_with_length(var561, var562);
7462 var560 = var563;
7463 varonce559 = var560;
7464 }
7465 if (varonce564) {
7466 var565 = varonce564;
7467 } else {
7468 var566 = ";";
7469 var567 = 1;
7470 var568 = string__NativeString__to_s_with_length(var566, var567);
7471 var565 = var568;
7472 varonce564 = var565;
7473 }
7474 var569 = NEW_array__Array(&type_array__Arraykernel__Object);
7475 { /* var569 = array_instance Array[Object] */
7476 var570 = 4;
7477 var571 = NEW_array__NativeArray(var570, &type_array__NativeArraykernel__Object);
7478 ((struct instance_array__NativeArray*)var571)->values[0] = (val*) var_res;
7479 ((struct instance_array__NativeArray*)var571)->values[1] = (val*) var560;
7480 ((struct instance_array__NativeArray*)var571)->values[2] = (val*) var_accept_null;
7481 ((struct instance_array__NativeArray*)var571)->values[3] = (val*) var565;
7482 ((void (*)(val*, val*, long))(var569->class->vft[COLOR_array__Array__with_native]))(var569, var571, var570) /* with_native on <var569:Array[Object]>*/;
7483 }
7484 var572 = ((val* (*)(val*))(var569->class->vft[COLOR_string__Object__to_s]))(var569) /* to_s on <var569:Array[Object]>*/;
7485 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var572) /* add on <self:SeparateErasureCompilerVisitor>*/;
7486 if (varonce573) {
7487 var574 = varonce573;
7488 } else {
7489 var575 = "} else {";
7490 var576 = 8;
7491 var577 = string__NativeString__to_s_with_length(var575, var576);
7492 var574 = var577;
7493 varonce573 = var574;
7494 }
7495 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var574) /* add on <self:SeparateErasureCompilerVisitor>*/;
7496 } else {
7497 }
7498 var578 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7499 /* <var578:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
7500 cltype580 = type_separate_erasure_compiler__SeparateErasureCompiler.color;
7501 idtype581 = type_separate_erasure_compiler__SeparateErasureCompiler.id;
7502 if(cltype580 >= var578->type->table_size) {
7503 var579 = 0;
7504 } else {
7505 var579 = var578->type->type_table[cltype580] == idtype581;
7506 }
7507 if (!var579) {
7508 var_class_name582 = var578 == NULL ? "null" : var578->type->name;
7509 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name582);
7510 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 563);
7511 show_backtrace(1);
7512 }
7513 var583 = ((val* (*)(val*))(var578->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(var578) /* class_layout on <var578:SeparateCompiler(SeparateErasureCompiler)>*/;
7514 /* <var583:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
7515 cltype585 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
7516 idtype586 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
7517 if(var583 == NULL) {
7518 var584 = 0;
7519 } else {
7520 if(cltype585 >= var583->type->table_size) {
7521 var584 = 0;
7522 } else {
7523 var584 = var583->type->type_table[cltype585] == idtype586;
7524 }
7525 }
7526 if (var584){
7527 if (varonce587) {
7528 var588 = varonce587;
7529 } else {
7530 var589 = " = HASH(";
7531 var590 = 8;
7532 var591 = string__NativeString__to_s_with_length(var589, var590);
7533 var588 = var591;
7534 varonce587 = var588;
7535 }
7536 if (varonce592) {
7537 var593 = varonce592;
7538 } else {
7539 var594 = "color, ";
7540 var595 = 7;
7541 var596 = string__NativeString__to_s_with_length(var594, var595);
7542 var593 = var596;
7543 varonce592 = var593;
7544 }
7545 if (varonce597) {
7546 var598 = varonce597;
7547 } else {
7548 var599 = ");";
7549 var600 = 2;
7550 var601 = string__NativeString__to_s_with_length(var599, var600);
7551 var598 = var601;
7552 varonce597 = var598;
7553 }
7554 var602 = NEW_array__Array(&type_array__Arraykernel__Object);
7555 { /* var602 = array_instance Array[Object] */
7556 var603 = 6;
7557 var604 = NEW_array__NativeArray(var603, &type_array__NativeArraykernel__Object);
7558 ((struct instance_array__NativeArray*)var604)->values[0] = (val*) var_cltype;
7559 ((struct instance_array__NativeArray*)var604)->values[1] = (val*) var588;
7560 ((struct instance_array__NativeArray*)var604)->values[2] = (val*) var_class_ptr;
7561 ((struct instance_array__NativeArray*)var604)->values[3] = (val*) var593;
7562 ((struct instance_array__NativeArray*)var604)->values[4] = (val*) var_idtype;
7563 ((struct instance_array__NativeArray*)var604)->values[5] = (val*) var598;
7564 ((void (*)(val*, val*, long))(var602->class->vft[COLOR_array__Array__with_native]))(var602, var604, var603) /* with_native on <var602:Array[Object]>*/;
7565 }
7566 var605 = ((val* (*)(val*))(var602->class->vft[COLOR_string__Object__to_s]))(var602) /* to_s on <var602:Array[Object]>*/;
7567 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var605) /* add on <self:SeparateErasureCompilerVisitor>*/;
7568 } else {
7569 }
7570 if (varonce606) {
7571 var607 = varonce606;
7572 } else {
7573 var608 = "if(";
7574 var609 = 3;
7575 var610 = string__NativeString__to_s_with_length(var608, var609);
7576 var607 = var610;
7577 varonce606 = var607;
7578 }
7579 if (varonce611) {
7580 var612 = varonce611;
7581 } else {
7582 var613 = " >= ";
7583 var614 = 4;
7584 var615 = string__NativeString__to_s_with_length(var613, var614);
7585 var612 = var615;
7586 varonce611 = var612;
7587 }
7588 if (varonce616) {
7589 var617 = varonce616;
7590 } else {
7591 var618 = "type_table->size) {";
7592 var619 = 19;
7593 var620 = string__NativeString__to_s_with_length(var618, var619);
7594 var617 = var620;
7595 varonce616 = var617;
7596 }
7597 var621 = NEW_array__Array(&type_array__Arraykernel__Object);
7598 { /* var621 = array_instance Array[Object] */
7599 var622 = 5;
7600 var623 = NEW_array__NativeArray(var622, &type_array__NativeArraykernel__Object);
7601 ((struct instance_array__NativeArray*)var623)->values[0] = (val*) var607;
7602 ((struct instance_array__NativeArray*)var623)->values[1] = (val*) var_cltype;
7603 ((struct instance_array__NativeArray*)var623)->values[2] = (val*) var612;
7604 ((struct instance_array__NativeArray*)var623)->values[3] = (val*) var_class_ptr;
7605 ((struct instance_array__NativeArray*)var623)->values[4] = (val*) var617;
7606 ((void (*)(val*, val*, long))(var621->class->vft[COLOR_array__Array__with_native]))(var621, var623, var622) /* with_native on <var621:Array[Object]>*/;
7607 }
7608 var624 = ((val* (*)(val*))(var621->class->vft[COLOR_string__Object__to_s]))(var621) /* to_s on <var621:Array[Object]>*/;
7609 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var624) /* add on <self:SeparateErasureCompilerVisitor>*/;
7610 if (varonce625) {
7611 var626 = varonce625;
7612 } else {
7613 var627 = " = 0;";
7614 var628 = 5;
7615 var629 = string__NativeString__to_s_with_length(var627, var628);
7616 var626 = var629;
7617 varonce625 = var626;
7618 }
7619 var630 = NEW_array__Array(&type_array__Arraykernel__Object);
7620 { /* var630 = array_instance Array[Object] */
7621 var631 = 2;
7622 var632 = NEW_array__NativeArray(var631, &type_array__NativeArraykernel__Object);
7623 ((struct instance_array__NativeArray*)var632)->values[0] = (val*) var_res;
7624 ((struct instance_array__NativeArray*)var632)->values[1] = (val*) var626;
7625 ((void (*)(val*, val*, long))(var630->class->vft[COLOR_array__Array__with_native]))(var630, var632, var631) /* with_native on <var630:Array[Object]>*/;
7626 }
7627 var633 = ((val* (*)(val*))(var630->class->vft[COLOR_string__Object__to_s]))(var630) /* to_s on <var630:Array[Object]>*/;
7628 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var633) /* add on <self:SeparateErasureCompilerVisitor>*/;
7629 if (varonce634) {
7630 var635 = varonce634;
7631 } else {
7632 var636 = "} else {";
7633 var637 = 8;
7634 var638 = string__NativeString__to_s_with_length(var636, var637);
7635 var635 = var638;
7636 varonce634 = var635;
7637 }
7638 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var635) /* add on <self:SeparateErasureCompilerVisitor>*/;
7639 if (varonce639) {
7640 var640 = varonce639;
7641 } else {
7642 var641 = " = ";
7643 var642 = 3;
7644 var643 = string__NativeString__to_s_with_length(var641, var642);
7645 var640 = var643;
7646 varonce639 = var640;
7647 }
7648 if (varonce644) {
7649 var645 = varonce644;
7650 } else {
7651 var646 = "type_table->table[";
7652 var647 = 18;
7653 var648 = string__NativeString__to_s_with_length(var646, var647);
7654 var645 = var648;
7655 varonce644 = var645;
7656 }
7657 if (varonce649) {
7658 var650 = varonce649;
7659 } else {
7660 var651 = "] == ";
7661 var652 = 5;
7662 var653 = string__NativeString__to_s_with_length(var651, var652);
7663 var650 = var653;
7664 varonce649 = var650;
7665 }
7666 if (varonce654) {
7667 var655 = varonce654;
7668 } else {
7669 var656 = ";";
7670 var657 = 1;
7671 var658 = string__NativeString__to_s_with_length(var656, var657);
7672 var655 = var658;
7673 varonce654 = var655;
7674 }
7675 var659 = NEW_array__Array(&type_array__Arraykernel__Object);
7676 { /* var659 = array_instance Array[Object] */
7677 var660 = 8;
7678 var661 = NEW_array__NativeArray(var660, &type_array__NativeArraykernel__Object);
7679 ((struct instance_array__NativeArray*)var661)->values[0] = (val*) var_res;
7680 ((struct instance_array__NativeArray*)var661)->values[1] = (val*) var640;
7681 ((struct instance_array__NativeArray*)var661)->values[2] = (val*) var_class_ptr;
7682 ((struct instance_array__NativeArray*)var661)->values[3] = (val*) var645;
7683 ((struct instance_array__NativeArray*)var661)->values[4] = (val*) var_cltype;
7684 ((struct instance_array__NativeArray*)var661)->values[5] = (val*) var650;
7685 ((struct instance_array__NativeArray*)var661)->values[6] = (val*) var_idtype;
7686 ((struct instance_array__NativeArray*)var661)->values[7] = (val*) var655;
7687 ((void (*)(val*, val*, long))(var659->class->vft[COLOR_array__Array__with_native]))(var659, var661, var660) /* with_native on <var659:Array[Object]>*/;
7688 }
7689 var662 = ((val* (*)(val*))(var659->class->vft[COLOR_string__Object__to_s]))(var659) /* to_s on <var659:Array[Object]>*/;
7690 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var662) /* add on <self:SeparateErasureCompilerVisitor>*/;
7691 if (varonce663) {
7692 var664 = varonce663;
7693 } else {
7694 var665 = "}";
7695 var666 = 1;
7696 var667 = string__NativeString__to_s_with_length(var665, var666);
7697 var664 = var667;
7698 varonce663 = var664;
7699 }
7700 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var664) /* add on <self:SeparateErasureCompilerVisitor>*/;
7701 if (var_maybe_null){
7702 if (varonce668) {
7703 var669 = varonce668;
7704 } else {
7705 var670 = "}";
7706 var671 = 1;
7707 var672 = string__NativeString__to_s_with_length(var670, var671);
7708 var669 = var672;
7709 varonce668 = var669;
7710 }
7711 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var669) /* add on <self:SeparateErasureCompilerVisitor>*/;
7712 } else {
7713 }
7714 var = var_res;
7715 goto RET_LABEL;
7716 RET_LABEL:;
7717 return var;
7718 }
7719 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: Object, RuntimeVariable, MType, String): RuntimeVariable */
7720 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
7721 val* var /* : RuntimeVariable */;
7722 val* var1 /* : RuntimeVariable */;
7723 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(self, p0, p1, p2);
7724 var = var1;
7725 RET_LABEL:;
7726 return var;
7727 }
7728 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: SeparateErasureCompilerVisitor, RuntimeVariable): String */
7729 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
7730 val* var /* : String */;
7731 val* var_value /* var value: RuntimeVariable */;
7732 static val* varonce;
7733 val* var1 /* : String */;
7734 char* var2 /* : NativeString */;
7735 long var3 /* : Int */;
7736 val* var4 /* : String */;
7737 val* var5 /* : String */;
7738 val* var_res /* var res: String */;
7739 static val* varonce6;
7740 val* var7 /* : String */;
7741 char* var8 /* : NativeString */;
7742 long var9 /* : Int */;
7743 val* var10 /* : String */;
7744 static val* varonce11;
7745 val* var12 /* : String */;
7746 char* var13 /* : NativeString */;
7747 long var14 /* : Int */;
7748 val* var15 /* : String */;
7749 val* var16 /* : Array[Object] */;
7750 long var17 /* : Int */;
7751 val* var18 /* : NativeArray[Object] */;
7752 val* var19 /* : String */;
7753 val* var20 /* : MType */;
7754 val* var21 /* : String */;
7755 static val* varonce22;
7756 val* var23 /* : String */;
7757 char* var24 /* : NativeString */;
7758 long var25 /* : Int */;
7759 val* var26 /* : String */;
7760 short int var27 /* : Bool */;
7761 static val* varonce28;
7762 val* var29 /* : String */;
7763 char* var30 /* : NativeString */;
7764 long var31 /* : Int */;
7765 val* var32 /* : String */;
7766 static val* varonce33;
7767 val* var34 /* : String */;
7768 char* var35 /* : NativeString */;
7769 long var36 /* : Int */;
7770 val* var37 /* : String */;
7771 static val* varonce38;
7772 val* var39 /* : String */;
7773 char* var40 /* : NativeString */;
7774 long var41 /* : Int */;
7775 val* var42 /* : String */;
7776 val* var43 /* : Array[Object] */;
7777 long var44 /* : Int */;
7778 val* var45 /* : NativeArray[Object] */;
7779 val* var46 /* : String */;
7780 static val* varonce47;
7781 val* var48 /* : String */;
7782 char* var49 /* : NativeString */;
7783 long var50 /* : Int */;
7784 val* var51 /* : String */;
7785 val* var52 /* : MType */;
7786 val* var53 /* : String */;
7787 val* var54 /* : Array[Object] */;
7788 long var55 /* : Int */;
7789 val* var56 /* : NativeArray[Object] */;
7790 val* var57 /* : String */;
7791 static val* varonce58;
7792 val* var59 /* : String */;
7793 char* var60 /* : NativeString */;
7794 long var61 /* : Int */;
7795 val* var62 /* : String */;
7796 val* var63 /* : MType */;
7797 val* var64 /* : String */;
7798 static val* varonce65;
7799 val* var66 /* : String */;
7800 char* var67 /* : NativeString */;
7801 long var68 /* : Int */;
7802 val* var69 /* : String */;
7803 val* var70 /* : Array[Object] */;
7804 long var71 /* : Int */;
7805 val* var72 /* : NativeArray[Object] */;
7806 val* var73 /* : String */;
7807 var_value = p0;
7808 if (varonce) {
7809 var1 = varonce;
7810 } else {
7811 var2 = "var_class_name";
7812 var3 = 14;
7813 var4 = string__NativeString__to_s_with_length(var2, var3);
7814 var1 = var4;
7815 varonce = var1;
7816 }
7817 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var1) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7818 var_res = var5;
7819 if (varonce6) {
7820 var7 = varonce6;
7821 } else {
7822 var8 = "const char* ";
7823 var9 = 12;
7824 var10 = string__NativeString__to_s_with_length(var8, var9);
7825 var7 = var10;
7826 varonce6 = var7;
7827 }
7828 if (varonce11) {
7829 var12 = varonce11;
7830 } else {
7831 var13 = ";";
7832 var14 = 1;
7833 var15 = string__NativeString__to_s_with_length(var13, var14);
7834 var12 = var15;
7835 varonce11 = var12;
7836 }
7837 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
7838 { /* var16 = array_instance Array[Object] */
7839 var17 = 3;
7840 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
7841 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
7842 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_res;
7843 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
7844 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
7845 }
7846 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
7847 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var19) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
7848 var20 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7849 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_compiler__MType__ctype]))(var20) /* ctype on <var20:MType>*/;
7850 if (varonce22) {
7851 var23 = varonce22;
7852 } else {
7853 var24 = "val*";
7854 var25 = 4;
7855 var26 = string__NativeString__to_s_with_length(var24, var25);
7856 var23 = var26;
7857 varonce22 = var23;
7858 }
7859 var27 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var23) /* == on <var21:String>*/;
7860 if (var27){
7861 if (varonce28) {
7862 var29 = varonce28;
7863 } else {
7864 var30 = " = ";
7865 var31 = 3;
7866 var32 = string__NativeString__to_s_with_length(var30, var31);
7867 var29 = var32;
7868 varonce28 = var29;
7869 }
7870 if (varonce33) {
7871 var34 = varonce33;
7872 } else {
7873 var35 = " == NULL ? \"null\" : ";
7874 var36 = 20;
7875 var37 = string__NativeString__to_s_with_length(var35, var36);
7876 var34 = var37;
7877 varonce33 = var34;
7878 }
7879 if (varonce38) {
7880 var39 = varonce38;
7881 } else {
7882 var40 = "->class->name;";
7883 var41 = 14;
7884 var42 = string__NativeString__to_s_with_length(var40, var41);
7885 var39 = var42;
7886 varonce38 = var39;
7887 }
7888 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
7889 { /* var43 = array_instance Array[Object] */
7890 var44 = 6;
7891 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
7892 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_res;
7893 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var29;
7894 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var_value;
7895 ((struct instance_array__NativeArray*)var45)->values[3] = (val*) var34;
7896 ((struct instance_array__NativeArray*)var45)->values[4] = (val*) var_value;
7897 ((struct instance_array__NativeArray*)var45)->values[5] = (val*) var39;
7898 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
7899 }
7900 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
7901 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var46) /* add on <self:SeparateErasureCompilerVisitor>*/;
7902 } else {
7903 if (varonce47) {
7904 var48 = varonce47;
7905 } else {
7906 var49 = "class_";
7907 var50 = 6;
7908 var51 = string__NativeString__to_s_with_length(var49, var50);
7909 var48 = var51;
7910 varonce47 = var48;
7911 }
7912 var52 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7913 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_abstract_compiler__MType__c_name]))(var52) /* c_name on <var52:MType>*/;
7914 var54 = NEW_array__Array(&type_array__Arraykernel__Object);
7915 { /* var54 = array_instance Array[Object] */
7916 var55 = 2;
7917 var56 = NEW_array__NativeArray(var55, &type_array__NativeArraykernel__Object);
7918 ((struct instance_array__NativeArray*)var56)->values[0] = (val*) var48;
7919 ((struct instance_array__NativeArray*)var56)->values[1] = (val*) var53;
7920 ((void (*)(val*, val*, long))(var54->class->vft[COLOR_array__Array__with_native]))(var54, var56, var55) /* with_native on <var54:Array[Object]>*/;
7921 }
7922 var57 = ((val* (*)(val*))(var54->class->vft[COLOR_string__Object__to_s]))(var54) /* to_s on <var54:Array[Object]>*/;
7923 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var57) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
7924 if (varonce58) {
7925 var59 = varonce58;
7926 } else {
7927 var60 = " = class_";
7928 var61 = 9;
7929 var62 = string__NativeString__to_s_with_length(var60, var61);
7930 var59 = var62;
7931 varonce58 = var59;
7932 }
7933 var63 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7934 var64 = ((val* (*)(val*))(var63->class->vft[COLOR_abstract_compiler__MType__c_name]))(var63) /* c_name on <var63:MType>*/;
7935 if (varonce65) {
7936 var66 = varonce65;
7937 } else {
7938 var67 = ".name;";
7939 var68 = 6;
7940 var69 = string__NativeString__to_s_with_length(var67, var68);
7941 var66 = var69;
7942 varonce65 = var66;
7943 }
7944 var70 = NEW_array__Array(&type_array__Arraykernel__Object);
7945 { /* var70 = array_instance Array[Object] */
7946 var71 = 4;
7947 var72 = NEW_array__NativeArray(var71, &type_array__NativeArraykernel__Object);
7948 ((struct instance_array__NativeArray*)var72)->values[0] = (val*) var_res;
7949 ((struct instance_array__NativeArray*)var72)->values[1] = (val*) var59;
7950 ((struct instance_array__NativeArray*)var72)->values[2] = (val*) var64;
7951 ((struct instance_array__NativeArray*)var72)->values[3] = (val*) var66;
7952 ((void (*)(val*, val*, long))(var70->class->vft[COLOR_array__Array__with_native]))(var70, var72, var71) /* with_native on <var70:Array[Object]>*/;
7953 }
7954 var73 = ((val* (*)(val*))(var70->class->vft[COLOR_string__Object__to_s]))(var70) /* to_s on <var70:Array[Object]>*/;
7955 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var73) /* add on <self:SeparateErasureCompilerVisitor>*/;
7956 }
7957 var = var_res;
7958 goto RET_LABEL;
7959 RET_LABEL:;
7960 return var;
7961 }
7962 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: Object, RuntimeVariable): String */
7963 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
7964 val* var /* : String */;
7965 val* var1 /* : String */;
7966 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(self, p0);
7967 var = var1;
7968 RET_LABEL:;
7969 return var;
7970 }
7971 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#array_instance for (self: SeparateErasureCompilerVisitor, Array[RuntimeVariable], MType): RuntimeVariable */
7972 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(val* self, val* p0, val* p1) {
7973 val* var /* : RuntimeVariable */;
7974 val* var_array /* var array: Array[RuntimeVariable] */;
7975 val* var_elttype /* var elttype: MType */;
7976 static val* varonce;
7977 val* var1 /* : String */;
7978 char* var2 /* : NativeString */;
7979 long var3 /* : Int */;
7980 val* var4 /* : String */;
7981 val* var5 /* : MClass */;
7982 val* var_nclass /* var nclass: MClass */;
7983 val* var6 /* : MType */;
7984 static val* varonce7;
7985 val* var8 /* : String */;
7986 char* var9 /* : NativeString */;
7987 long var10 /* : Int */;
7988 val* var11 /* : String */;
7989 val* var12 /* : MClass */;
7990 val* var13 /* : Array[MType] */;
7991 long var14 /* : Int */;
7992 val* var15 /* : NativeArray[MType] */;
7993 val* var16 /* : MClassType */;
7994 val* var_arraytype /* var arraytype: MClassType */;
7995 val* var17 /* : RuntimeVariable */;
7996 val* var_res /* var res: RuntimeVariable */;
7997 static val* varonce18;
7998 val* var19 /* : String */;
7999 char* var20 /* : NativeString */;
8000 long var21 /* : Int */;
8001 val* var22 /* : String */;
8002 static val* varonce23;
8003 val* var24 /* : String */;
8004 char* var25 /* : NativeString */;
8005 long var26 /* : Int */;
8006 val* var27 /* : String */;
8007 static val* varonce28;
8008 val* var29 /* : String */;
8009 char* var30 /* : NativeString */;
8010 long var31 /* : Int */;
8011 val* var32 /* : String */;
8012 val* var33 /* : Array[Object] */;
8013 long var34 /* : Int */;
8014 val* var35 /* : NativeArray[Object] */;
8015 val* var36 /* : String */;
8016 static val* varonce37;
8017 val* var38 /* : String */;
8018 char* var39 /* : NativeString */;
8019 long var40 /* : Int */;
8020 val* var41 /* : String */;
8021 val* var42 /* : MClass */;
8022 val* var43 /* : Array[MType] */;
8023 long var44 /* : Int */;
8024 val* var45 /* : NativeArray[MType] */;
8025 val* var46 /* : MClassType */;
8026 val* var47 /* : RuntimeVariable */;
8027 val* var_nat /* var nat: RuntimeVariable */;
8028 short int var48 /* : Bool */;
8029 static val* varonce49;
8030 val* var50 /* : String */;
8031 char* var51 /* : NativeString */;
8032 long var52 /* : Int */;
8033 val* var53 /* : String */;
8034 val* var54 /* : String */;
8035 val* var55 /* : Array[Object] */;
8036 long var56 /* : Int */;
8037 val* var57 /* : NativeArray[Object] */;
8038 val* var58 /* : String */;
8039 static val* varonce59;
8040 val* var60 /* : String */;
8041 char* var61 /* : NativeString */;
8042 long var62 /* : Int */;
8043 val* var63 /* : String */;
8044 val* var64 /* : String */;
8045 static val* varonce65;
8046 val* var66 /* : String */;
8047 char* var67 /* : NativeString */;
8048 long var68 /* : Int */;
8049 val* var69 /* : String */;
8050 long var70 /* : Int */;
8051 static val* varonce71;
8052 val* var72 /* : String */;
8053 char* var73 /* : NativeString */;
8054 long var74 /* : Int */;
8055 val* var75 /* : String */;
8056 val* var76 /* : Array[Object] */;
8057 long var77 /* : Int */;
8058 val* var78 /* : NativeArray[Object] */;
8059 val* var79 /* : Object */;
8060 val* var80 /* : String */;
8061 val* var81 /* : Range[Int] */;
8062 long var82 /* : Int */;
8063 long var83 /* : Int */;
8064 val* var84 /* : Discrete */;
8065 val* var85 /* : Discrete */;
8066 val* var86 /* : Iterator[nullable Object] */;
8067 short int var87 /* : Bool */;
8068 val* var88 /* : nullable Object */;
8069 long var_i /* var i: Int */;
8070 long var89 /* : Int */;
8071 val* var90 /* : nullable Object */;
8072 val* var91 /* : MClassType */;
8073 val* var92 /* : RuntimeVariable */;
8074 val* var_r /* var r: RuntimeVariable */;
8075 static val* varonce93;
8076 val* var94 /* : String */;
8077 char* var95 /* : NativeString */;
8078 long var96 /* : Int */;
8079 val* var97 /* : String */;
8080 val* var98 /* : String */;
8081 static val* varonce99;
8082 val* var100 /* : String */;
8083 char* var101 /* : NativeString */;
8084 long var102 /* : Int */;
8085 val* var103 /* : String */;
8086 static val* varonce104;
8087 val* var105 /* : String */;
8088 char* var106 /* : NativeString */;
8089 long var107 /* : Int */;
8090 val* var108 /* : String */;
8091 static val* varonce109;
8092 val* var110 /* : String */;
8093 char* var111 /* : NativeString */;
8094 long var112 /* : Int */;
8095 val* var113 /* : String */;
8096 static val* varonce114;
8097 val* var115 /* : String */;
8098 char* var116 /* : NativeString */;
8099 long var117 /* : Int */;
8100 val* var118 /* : String */;
8101 val* var119 /* : Array[Object] */;
8102 long var120 /* : Int */;
8103 val* var121 /* : NativeArray[Object] */;
8104 val* var122 /* : Object */;
8105 val* var123 /* : String */;
8106 long var124 /* : Int */;
8107 val* var125 /* : RuntimeVariable */;
8108 val* var_length /* var length: RuntimeVariable */;
8109 static val* varonce126;
8110 val* var127 /* : String */;
8111 char* var128 /* : NativeString */;
8112 long var129 /* : Int */;
8113 val* var130 /* : String */;
8114 val* var131 /* : MMethod */;
8115 val* var132 /* : Array[RuntimeVariable] */;
8116 long var133 /* : Int */;
8117 val* var134 /* : NativeArray[RuntimeVariable] */;
8118 val* var135 /* : nullable RuntimeVariable */;
8119 static val* varonce136;
8120 val* var137 /* : String */;
8121 char* var138 /* : NativeString */;
8122 long var139 /* : Int */;
8123 val* var140 /* : String */;
8124 var_array = p0;
8125 var_elttype = p1;
8126 if (varonce) {
8127 var1 = varonce;
8128 } else {
8129 var2 = "NativeArray";
8130 var3 = 11;
8131 var4 = string__NativeString__to_s_with_length(var2, var3);
8132 var1 = var4;
8133 varonce = var1;
8134 }
8135 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var1) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8136 var_nclass = var5;
8137 var6 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_elttype) /* anchor on <self:SeparateErasureCompilerVisitor>*/;
8138 var_elttype = var6;
8139 if (varonce7) {
8140 var8 = varonce7;
8141 } else {
8142 var9 = "Array";
8143 var10 = 5;
8144 var11 = string__NativeString__to_s_with_length(var9, var10);
8145 var8 = var11;
8146 varonce7 = var8;
8147 }
8148 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var8) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8149 var13 = NEW_array__Array(&type_array__Arraymodel__MType);
8150 { /* var13 = array_instance Array[MType] */
8151 var14 = 1;
8152 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraymodel__MType);
8153 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var_elttype;
8154 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[MType]>*/;
8155 }
8156 var16 = ((val* (*)(val*, val*))(var12->class->vft[COLOR_model__MClass__get_mtype]))(var12, var13) /* get_mtype on <var12:MClass>*/;
8157 var_arraytype = var16;
8158 var17 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init_instance]))(self, var_arraytype) /* init_instance on <self:SeparateErasureCompilerVisitor>*/;
8159 var_res = var17;
8160 if (varonce18) {
8161 var19 = varonce18;
8162 } else {
8163 var20 = "{ /* ";
8164 var21 = 5;
8165 var22 = string__NativeString__to_s_with_length(var20, var21);
8166 var19 = var22;
8167 varonce18 = var19;
8168 }
8169 if (varonce23) {
8170 var24 = varonce23;
8171 } else {
8172 var25 = " = array_instance Array[";
8173 var26 = 24;
8174 var27 = string__NativeString__to_s_with_length(var25, var26);
8175 var24 = var27;
8176 varonce23 = var24;
8177 }
8178 if (varonce28) {
8179 var29 = varonce28;
8180 } else {
8181 var30 = "] */";
8182 var31 = 4;
8183 var32 = string__NativeString__to_s_with_length(var30, var31);
8184 var29 = var32;
8185 varonce28 = var29;
8186 }
8187 var33 = NEW_array__Array(&type_array__Arraykernel__Object);
8188 { /* var33 = array_instance Array[Object] */
8189 var34 = 5;
8190 var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
8191 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var19;
8192 ((struct instance_array__NativeArray*)var35)->values[1] = (val*) var_res;
8193 ((struct instance_array__NativeArray*)var35)->values[2] = (val*) var24;
8194 ((struct instance_array__NativeArray*)var35)->values[3] = (val*) var_elttype;
8195 ((struct instance_array__NativeArray*)var35)->values[4] = (val*) var29;
8196 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
8197 }
8198 var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
8199 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var36) /* add on <self:SeparateErasureCompilerVisitor>*/;
8200 if (varonce37) {
8201 var38 = varonce37;
8202 } else {
8203 var39 = "NativeArray";
8204 var40 = 11;
8205 var41 = string__NativeString__to_s_with_length(var39, var40);
8206 var38 = var41;
8207 varonce37 = var38;
8208 }
8209 var42 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var38) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8210 var43 = NEW_array__Array(&type_array__Arraymodel__MType);
8211 { /* var43 = array_instance Array[MType] */
8212 var44 = 1;
8213 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraymodel__MType);
8214 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_elttype;
8215 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[MType]>*/;
8216 }
8217 var46 = ((val* (*)(val*, val*))(var42->class->vft[COLOR_model__MClass__get_mtype]))(var42, var43) /* get_mtype on <var42:MClass>*/;
8218 var47 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var46) /* new_var on <self:SeparateErasureCompilerVisitor>*/;
8219 var_nat = var47;
8220 var48 = 1;
8221 ((void (*)(val*, short int))(var_nat->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_nat, var48) /* is_exact= on <var_nat:RuntimeVariable>*/;
8222 if (varonce49) {
8223 var50 = varonce49;
8224 } else {
8225 var51 = "NEW_";
8226 var52 = 4;
8227 var53 = string__NativeString__to_s_with_length(var51, var52);
8228 var50 = var53;
8229 varonce49 = var50;
8230 }
8231 var54 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8232 var55 = NEW_array__Array(&type_array__Arraykernel__Object);
8233 { /* var55 = array_instance Array[Object] */
8234 var56 = 2;
8235 var57 = NEW_array__NativeArray(var56, &type_array__NativeArraykernel__Object);
8236 ((struct instance_array__NativeArray*)var57)->values[0] = (val*) var50;
8237 ((struct instance_array__NativeArray*)var57)->values[1] = (val*) var54;
8238 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_array__Array__with_native]))(var55, var57, var56) /* with_native on <var55:Array[Object]>*/;
8239 }
8240 var58 = ((val* (*)(val*))(var55->class->vft[COLOR_string__Object__to_s]))(var55) /* to_s on <var55:Array[Object]>*/;
8241 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var58) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
8242 if (varonce59) {
8243 var60 = varonce59;
8244 } else {
8245 var61 = " = NEW_";
8246 var62 = 7;
8247 var63 = string__NativeString__to_s_with_length(var61, var62);
8248 var60 = var63;
8249 varonce59 = var60;
8250 }
8251 var64 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8252 if (varonce65) {
8253 var66 = varonce65;
8254 } else {
8255 var67 = "(";
8256 var68 = 1;
8257 var69 = string__NativeString__to_s_with_length(var67, var68);
8258 var66 = var69;
8259 varonce65 = var66;
8260 }
8261 var70 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8262 if (varonce71) {
8263 var72 = varonce71;
8264 } else {
8265 var73 = ");";
8266 var74 = 2;
8267 var75 = string__NativeString__to_s_with_length(var73, var74);
8268 var72 = var75;
8269 varonce71 = var72;
8270 }
8271 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
8272 { /* var76 = array_instance Array[Object] */
8273 var77 = 6;
8274 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
8275 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var_nat;
8276 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var60;
8277 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var64;
8278 ((struct instance_array__NativeArray*)var78)->values[3] = (val*) var66;
8279 var79 = BOX_kernel__Int(var70); /* autobox from Int to Object */
8280 ((struct instance_array__NativeArray*)var78)->values[4] = (val*) var79;
8281 ((struct instance_array__NativeArray*)var78)->values[5] = (val*) var72;
8282 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
8283 }
8284 var80 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
8285 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var80) /* add on <self:SeparateErasureCompilerVisitor>*/;
8286 var81 = NEW_range__Range(&type_range__Rangekernel__Int);
8287 var82 = 0;
8288 var83 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8289 var84 = BOX_kernel__Int(var82); /* autobox from Int to Discrete */
8290 var85 = BOX_kernel__Int(var83); /* autobox from Int to Discrete */
8291 ((void (*)(val*, val*, val*))(var81->class->vft[COLOR_range__Range__without_last]))(var81, var84, var85) /* without_last on <var81:Range[Int]>*/;
8292 var86 = ((val* (*)(val*))(var81->class->vft[COLOR_abstract_collection__Collection__iterator]))(var81) /* iterator on <var81:Range[Int]>*/;
8293 for(;;) {
8294 var87 = ((short int (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var86) /* is_ok on <var86:Iterator[nullable Object]>*/;
8295 if(!var87) break;
8296 var88 = ((val* (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__item]))(var86) /* item on <var86:Iterator[nullable Object]>*/;
8297 var89 = ((struct instance_kernel__Int*)var88)->value; /* autounbox from nullable Object to Int */;
8298 var_i = var89;
8299 var90 = ((val* (*)(val*, long))(var_array->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_array, var_i) /* [] on <var_array:Array[RuntimeVariable]>*/;
8300 var91 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__object_type]))(self) /* object_type on <self:SeparateErasureCompilerVisitor>*/;
8301 var92 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var90, var91) /* autobox on <self:SeparateErasureCompilerVisitor>*/;
8302 var_r = var92;
8303 if (varonce93) {
8304 var94 = varonce93;
8305 } else {
8306 var95 = "((struct instance_";
8307 var96 = 18;
8308 var97 = string__NativeString__to_s_with_length(var95, var96);
8309 var94 = var97;
8310 varonce93 = var94;
8311 }
8312 var98 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_separate_compiler__MClass__c_instance_name]))(var_nclass) /* c_instance_name on <var_nclass:MClass>*/;
8313 if (varonce99) {
8314 var100 = varonce99;
8315 } else {
8316 var101 = "*)";
8317 var102 = 2;
8318 var103 = string__NativeString__to_s_with_length(var101, var102);
8319 var100 = var103;
8320 varonce99 = var100;
8321 }
8322 if (varonce104) {
8323 var105 = varonce104;
8324 } else {
8325 var106 = ")->values[";
8326 var107 = 10;
8327 var108 = string__NativeString__to_s_with_length(var106, var107);
8328 var105 = var108;
8329 varonce104 = var105;
8330 }
8331 if (varonce109) {
8332 var110 = varonce109;
8333 } else {
8334 var111 = "] = (val*) ";
8335 var112 = 11;
8336 var113 = string__NativeString__to_s_with_length(var111, var112);
8337 var110 = var113;
8338 varonce109 = var110;
8339 }
8340 if (varonce114) {
8341 var115 = varonce114;
8342 } else {
8343 var116 = ";";
8344 var117 = 1;
8345 var118 = string__NativeString__to_s_with_length(var116, var117);
8346 var115 = var118;
8347 varonce114 = var115;
8348 }
8349 var119 = NEW_array__Array(&type_array__Arraykernel__Object);
8350 { /* var119 = array_instance Array[Object] */
8351 var120 = 9;
8352 var121 = NEW_array__NativeArray(var120, &type_array__NativeArraykernel__Object);
8353 ((struct instance_array__NativeArray*)var121)->values[0] = (val*) var94;
8354 ((struct instance_array__NativeArray*)var121)->values[1] = (val*) var98;
8355 ((struct instance_array__NativeArray*)var121)->values[2] = (val*) var100;
8356 ((struct instance_array__NativeArray*)var121)->values[3] = (val*) var_nat;
8357 ((struct instance_array__NativeArray*)var121)->values[4] = (val*) var105;
8358 var122 = BOX_kernel__Int(var_i); /* autobox from Int to Object */
8359 ((struct instance_array__NativeArray*)var121)->values[5] = (val*) var122;
8360 ((struct instance_array__NativeArray*)var121)->values[6] = (val*) var110;
8361 ((struct instance_array__NativeArray*)var121)->values[7] = (val*) var_r;
8362 ((struct instance_array__NativeArray*)var121)->values[8] = (val*) var115;
8363 ((void (*)(val*, val*, long))(var119->class->vft[COLOR_array__Array__with_native]))(var119, var121, var120) /* with_native on <var119:Array[Object]>*/;
8364 }
8365 var123 = ((val* (*)(val*))(var119->class->vft[COLOR_string__Object__to_s]))(var119) /* to_s on <var119:Array[Object]>*/;
8366 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var123) /* add on <self:SeparateErasureCompilerVisitor>*/;
8367 CONTINUE_label: (void)0;
8368 ((void (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__next]))(var86) /* next on <var86:Iterator[nullable Object]>*/;
8369 }
8370 BREAK_label: (void)0;
8371 var124 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8372 var125 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__int_instance]))(self, var124) /* int_instance on <self:SeparateErasureCompilerVisitor>*/;
8373 var_length = var125;
8374 if (varonce126) {
8375 var127 = varonce126;
8376 } else {
8377 var128 = "with_native";
8378 var129 = 11;
8379 var130 = string__NativeString__to_s_with_length(var128, var129);
8380 var127 = var130;
8381 varonce126 = var127;
8382 }
8383 var131 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_property]))(self, var127, var_arraytype) /* get_property on <self:SeparateErasureCompilerVisitor>*/;
8384 var132 = NEW_array__Array(&type_array__Arrayabstract_compiler__RuntimeVariable);
8385 { /* var132 = array_instance Array[RuntimeVariable] */
8386 var133 = 3;
8387 var134 = NEW_array__NativeArray(var133, &type_array__NativeArrayabstract_compiler__RuntimeVariable);
8388 ((struct instance_array__NativeArray*)var134)->values[0] = (val*) var_res;
8389 ((struct instance_array__NativeArray*)var134)->values[1] = (val*) var_nat;
8390 ((struct instance_array__NativeArray*)var134)->values[2] = (val*) var_length;
8391 ((void (*)(val*, val*, long))(var132->class->vft[COLOR_array__Array__with_native]))(var132, var134, var133) /* with_native on <var132:Array[RuntimeVariable]>*/;
8392 }
8393 var135 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__send]))(self, var131, var132) /* send on <self:SeparateErasureCompilerVisitor>*/;
8394 var135;
8395 if (varonce136) {
8396 var137 = varonce136;
8397 } else {
8398 var138 = "}";
8399 var139 = 1;
8400 var140 = string__NativeString__to_s_with_length(var138, var139);
8401 var137 = var140;
8402 varonce136 = var137;
8403 }
8404 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var137) /* add on <self:SeparateErasureCompilerVisitor>*/;
8405 var = var_res;
8406 goto RET_LABEL;
8407 RET_LABEL:;
8408 return var;
8409 }
8410 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#array_instance for (self: Object, Array[RuntimeVariable], MType): RuntimeVariable */
8411 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(val* self, val* p0, val* p1) {
8412 val* var /* : RuntimeVariable */;
8413 val* var1 /* : RuntimeVariable */;
8414 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(self, p0, p1);
8415 var = var1;
8416 RET_LABEL:;
8417 return var;
8418 }
8419 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: SeparateErasureCompilerVisitor, MType, Array[RuntimeVariable]) */
8420 void separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
8421 val* var_ret_type /* var ret_type: MType */;
8422 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
8423 short int var /* : Bool */;
8424 int cltype;
8425 int idtype;
8426 const char* var_class_name;
8427 val* var_ret /* var ret: MClassType */;
8428 static val* varonce;
8429 val* var1 /* : String */;
8430 char* var2 /* : NativeString */;
8431 long var3 /* : Int */;
8432 val* var4 /* : String */;
8433 val* var5 /* : MClass */;
8434 val* var6 /* : String */;
8435 val* var7 /* : Array[Object] */;
8436 long var8 /* : Int */;
8437 val* var9 /* : NativeArray[Object] */;
8438 val* var10 /* : String */;
8439 static val* varonce11;
8440 val* var12 /* : String */;
8441 char* var13 /* : NativeString */;
8442 long var14 /* : Int */;
8443 val* var15 /* : String */;
8444 val* var16 /* : MClass */;
8445 val* var17 /* : String */;
8446 static val* varonce18;
8447 val* var19 /* : String */;
8448 char* var20 /* : NativeString */;
8449 long var21 /* : Int */;
8450 val* var22 /* : String */;
8451 long var23 /* : Int */;
8452 val* var24 /* : nullable Object */;
8453 static val* varonce25;
8454 val* var26 /* : String */;
8455 char* var27 /* : NativeString */;
8456 long var28 /* : Int */;
8457 val* var29 /* : String */;
8458 val* var30 /* : Array[Object] */;
8459 long var31 /* : Int */;
8460 val* var32 /* : NativeArray[Object] */;
8461 val* var33 /* : String */;
8462 val* var34 /* : RuntimeVariable */;
8463 var_ret_type = p0;
8464 var_arguments = p1;
8465 /* <var_ret_type:MType> isa MClassType */
8466 cltype = type_model__MClassType.color;
8467 idtype = type_model__MClassType.id;
8468 if(cltype >= var_ret_type->type->table_size) {
8469 var = 0;
8470 } else {
8471 var = var_ret_type->type->type_table[cltype] == idtype;
8472 }
8473 if (!var) {
8474 var_class_name = var_ret_type == NULL ? "null" : var_ret_type->type->name;
8475 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
8476 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 614);
8477 show_backtrace(1);
8478 }
8479 var_ret = var_ret_type;
8480 if (varonce) {
8481 var1 = varonce;
8482 } else {
8483 var2 = "NEW_";
8484 var3 = 4;
8485 var4 = string__NativeString__to_s_with_length(var2, var3);
8486 var1 = var4;
8487 varonce = var1;
8488 }
8489 var5 = ((val* (*)(val*))(var_ret->class->vft[COLOR_model__MClassType__mclass]))(var_ret) /* mclass on <var_ret:MClassType>*/;
8490 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var5) /* c_name on <var5:MClass>*/;
8491 var7 = NEW_array__Array(&type_array__Arraykernel__Object);
8492 { /* var7 = array_instance Array[Object] */
8493 var8 = 2;
8494 var9 = NEW_array__NativeArray(var8, &type_array__NativeArraykernel__Object);
8495 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var1;
8496 ((struct instance_array__NativeArray*)var9)->values[1] = (val*) var6;
8497 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Object]>*/;
8498 }
8499 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_string__Object__to_s]))(var7) /* to_s on <var7:Array[Object]>*/;
8500 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var10) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
8501 if (varonce11) {
8502 var12 = varonce11;
8503 } else {
8504 var13 = "NEW_";
8505 var14 = 4;
8506 var15 = string__NativeString__to_s_with_length(var13, var14);
8507 var12 = var15;
8508 varonce11 = var12;
8509 }
8510 var16 = ((val* (*)(val*))(var_ret->class->vft[COLOR_model__MClassType__mclass]))(var_ret) /* mclass on <var_ret:MClassType>*/;
8511 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var16) /* c_name on <var16:MClass>*/;
8512 if (varonce18) {
8513 var19 = varonce18;
8514 } else {
8515 var20 = "(";
8516 var21 = 1;
8517 var22 = string__NativeString__to_s_with_length(var20, var21);
8518 var19 = var22;
8519 varonce18 = var19;
8520 }
8521 var23 = 1;
8522 var24 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var23) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
8523 if (varonce25) {
8524 var26 = varonce25;
8525 } else {
8526 var27 = ")";
8527 var28 = 1;
8528 var29 = string__NativeString__to_s_with_length(var27, var28);
8529 var26 = var29;
8530 varonce25 = var26;
8531 }
8532 var30 = NEW_array__Array(&type_array__Arraykernel__Object);
8533 { /* var30 = array_instance Array[Object] */
8534 var31 = 5;
8535 var32 = NEW_array__NativeArray(var31, &type_array__NativeArraykernel__Object);
8536 ((struct instance_array__NativeArray*)var32)->values[0] = (val*) var12;
8537 ((struct instance_array__NativeArray*)var32)->values[1] = (val*) var17;
8538 ((struct instance_array__NativeArray*)var32)->values[2] = (val*) var19;
8539 ((struct instance_array__NativeArray*)var32)->values[3] = (val*) var24;
8540 ((struct instance_array__NativeArray*)var32)->values[4] = (val*) var26;
8541 ((void (*)(val*, val*, long))(var30->class->vft[COLOR_array__Array__with_native]))(var30, var32, var31) /* with_native on <var30:Array[Object]>*/;
8542 }
8543 var33 = ((val* (*)(val*))(var30->class->vft[COLOR_string__Object__to_s]))(var30) /* to_s on <var30:Array[Object]>*/;
8544 var34 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var33, var_ret_type) /* new_expr on <self:SeparateErasureCompilerVisitor>*/;
8545 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var34) /* ret on <self:SeparateErasureCompilerVisitor>*/;
8546 RET_LABEL:;
8547 }
8548 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: Object, MType, Array[RuntimeVariable]) */
8549 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
8550 separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(self, p0, p1);
8551 RET_LABEL:;
8552 }