debugger: Added method to clean the object model when injecting code at runtime.
[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 exit(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 exit(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 CHECK_NEW_array__Array(var3);
88 }
89 ((void (*)(val*, val*))(var->class->vft[COLOR_opts__OptionContext__add_option]))(var, var3) /* add_option on <var:OptionContext>*/;
90 RET_LABEL:;
91 }
92 /* method separate_erasure_compiler#ToolContext#init for (self: Object) */
93 void VIRTUAL_separate_erasure_compiler__ToolContext__init(val* self) {
94 separate_erasure_compiler__ToolContext__init(self);
95 RET_LABEL:;
96 }
97 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: ModelBuilder, MModule, RapidTypeAnalysis) */
98 void separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
99 val* var_mainmodule /* var mainmodule: MModule */;
100 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
101 long var /* : Int */;
102 long var_time0 /* var time0: Int */;
103 val* var1 /* : ToolContext */;
104 static val* varonce;
105 val* var2 /* : String */;
106 char* var3 /* : NativeString */;
107 long var4 /* : Int */;
108 val* var5 /* : String */;
109 long var6 /* : Int */;
110 val* var7 /* : SeparateErasureCompiler */;
111 val* var_compiler /* var compiler: SeparateErasureCompiler */;
112 val* var8 /* : ToolContext */;
113 static val* varonce9;
114 val* var10 /* : String */;
115 char* var11 /* : NativeString */;
116 long var12 /* : Int */;
117 val* var13 /* : String */;
118 long var14 /* : Int */;
119 val* var15 /* : String */;
120 static val* varonce16;
121 val* var17 /* : String */;
122 char* var18 /* : NativeString */;
123 long var19 /* : Int */;
124 val* var20 /* : String */;
125 val* var21 /* : Array[Object] */;
126 long var22 /* : Int */;
127 val* var23 /* : NativeArray[Object] */;
128 val* var24 /* : String */;
129 val* var25 /* : CodeFile */;
130 val* var26 /* : POSetElement[MModule] */;
131 val* var27 /* : Collection[Object] */;
132 val* var28 /* : Iterator[nullable Object] */;
133 short int var29 /* : Bool */;
134 val* var30 /* : nullable Object */;
135 val* var_m /* var m: MModule */;
136 val* var31 /* : Array[MClass] */;
137 val* var32 /* : Iterator[nullable Object] */;
138 short int var33 /* : Bool */;
139 val* var34 /* : nullable Object */;
140 val* var_mclass /* var mclass: MClass */;
141 val* var36 /* : nullable Layout[MVirtualTypeProp] */;
142 val* var37 /* : Map[Object, Int] */;
143 val* var38 /* : String */;
144 static val* varonce39;
145 val* var40 /* : String */;
146 char* var41 /* : NativeString */;
147 long var42 /* : Int */;
148 val* var43 /* : String */;
149 val* var44 /* : Array[Object] */;
150 long var45 /* : Int */;
151 val* var46 /* : NativeArray[Object] */;
152 val* var47 /* : String */;
153 val* var48 /* : CodeFile */;
154 val* var49 /* : POSetElement[MModule] */;
155 val* var50 /* : Collection[Object] */;
156 val* var51 /* : Iterator[nullable Object] */;
157 short int var52 /* : Bool */;
158 val* var53 /* : nullable Object */;
159 val* var_m54 /* var m: MModule */;
160 val* var55 /* : ToolContext */;
161 static val* varonce56;
162 val* var57 /* : String */;
163 char* var58 /* : NativeString */;
164 long var59 /* : Int */;
165 val* var60 /* : String */;
166 val* var61 /* : Array[Object] */;
167 long var62 /* : Int */;
168 val* var63 /* : NativeArray[Object] */;
169 val* var64 /* : String */;
170 long var65 /* : Int */;
171 val* var66 /* : String */;
172 static val* varonce67;
173 val* var68 /* : String */;
174 char* var69 /* : NativeString */;
175 long var70 /* : Int */;
176 val* var71 /* : String */;
177 val* var72 /* : Array[Object] */;
178 long var73 /* : Int */;
179 val* var74 /* : NativeArray[Object] */;
180 val* var75 /* : String */;
181 val* var76 /* : CodeFile */;
182 long var78 /* : Int */;
183 long var_time1 /* var time1: Int */;
184 val* var79 /* : ToolContext */;
185 static val* varonce80;
186 val* var81 /* : String */;
187 char* var82 /* : NativeString */;
188 long var83 /* : Int */;
189 val* var84 /* : String */;
190 long var85 /* : Int */;
191 long var87 /* : Int */;
192 static val* varonce88;
193 val* var89 /* : String */;
194 char* var90 /* : NativeString */;
195 long var91 /* : Int */;
196 val* var92 /* : String */;
197 val* var93 /* : Array[Object] */;
198 long var94 /* : Int */;
199 val* var95 /* : NativeArray[Object] */;
200 val* var96 /* : Object */;
201 val* var97 /* : String */;
202 long var98 /* : Int */;
203 var_mainmodule = p0;
204 var_runtime_type_analysis = p1;
205 var = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
206 var_time0 = var;
207 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
208 if (varonce) {
209 var2 = varonce;
210 } else {
211 var3 = "*** GENERATING C ***";
212 var4 = 20;
213 var5 = string__NativeString__to_s_with_length(var3, var4);
214 var2 = var5;
215 varonce = var2;
216 }
217 var6 = 1;
218 ((void (*)(val*, val*, long))(var1->class->vft[COLOR_toolcontext__ToolContext__info]))(var1, var2, var6) /* info on <var1:ToolContext>*/;
219 var7 = NEW_separate_erasure_compiler__SeparateErasureCompiler(&type_separate_erasure_compiler__SeparateErasureCompiler);
220 ((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>*/;
221 CHECK_NEW_separate_erasure_compiler__SeparateErasureCompiler(var7);
222 var_compiler = var7;
223 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_header]))(var_compiler) /* compile_header on <var_compiler:SeparateErasureCompiler>*/;
224 var8 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
225 if (varonce9) {
226 var10 = varonce9;
227 } else {
228 var11 = "Property coloring";
229 var12 = 17;
230 var13 = string__NativeString__to_s_with_length(var11, var12);
231 var10 = var13;
232 varonce9 = var10;
233 }
234 var14 = 2;
235 ((void (*)(val*, val*, long))(var8->class->vft[COLOR_toolcontext__ToolContext__info]))(var8, var10, var14) /* info on <var8:ToolContext>*/;
236 var15 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
237 if (varonce16) {
238 var17 = varonce16;
239 } else {
240 var18 = ".tables";
241 var19 = 7;
242 var20 = string__NativeString__to_s_with_length(var18, var19);
243 var17 = var20;
244 varonce16 = var17;
245 }
246 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
247 { /* var21 = array_instance Array[Object] */
248 var22 = 2;
249 var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
250 ((struct instance_array__NativeArray*)var23)->values[0] = (val*) var15;
251 ((struct instance_array__NativeArray*)var23)->values[1] = (val*) var17;
252 ((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
253 CHECK_NEW_array__Array(var21);
254 }
255 var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
256 var25 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var24) /* new_file on <var_compiler:SeparateErasureCompiler>*/;
257 var25;
258 ((void (*)(val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__do_property_coloring]))(var_compiler) /* do_property_coloring on <var_compiler:SeparateErasureCompiler>*/;
259 var26 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__in_importation]))(var_mainmodule) /* in_importation on <var_mainmodule:MModule>*/;
260 var27 = ((val* (*)(val*))(var26->class->vft[COLOR_poset__POSetElement__greaters]))(var26) /* greaters on <var26:POSetElement[MModule]>*/;
261 var28 = ((val* (*)(val*))(var27->class->vft[COLOR_abstract_collection__Collection__iterator]))(var27) /* iterator on <var27:Collection[Object](Collection[MModule])>*/;
262 for(;;) {
263 var29 = ((short int (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var28) /* is_ok on <var28:Iterator[nullable Object]>*/;
264 if(!var29) break;
265 var30 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__item]))(var28) /* item on <var28:Iterator[nullable Object]>*/;
266 var_m = var30;
267 var31 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MModule__intro_mclasses]))(var_m) /* intro_mclasses on <var_m:MModule>*/;
268 var32 = ((val* (*)(val*))(var31->class->vft[COLOR_abstract_collection__Collection__iterator]))(var31) /* iterator on <var31:Array[MClass]>*/;
269 for(;;) {
270 var33 = ((short int (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var32) /* is_ok on <var32:Iterator[nullable Object]>*/;
271 if(!var33) break;
272 var34 = ((val* (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__item]))(var32) /* item on <var32:Iterator[nullable Object]>*/;
273 var_mclass = var34;
274 ((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>*/;
275 CONTINUE_label: (void)0;
276 ((void (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__next]))(var32) /* next on <var32:Iterator[nullable Object]>*/;
277 }
278 BREAK_label: (void)0;
279 CONTINUE_label35: (void)0;
280 ((void (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__next]))(var28) /* next on <var28:Iterator[nullable Object]>*/;
281 }
282 BREAK_label35: (void)0;
283 var36 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(var_compiler) /* vt_layout on <var_compiler:SeparateErasureCompiler>*/;
284 if (var36 == NULL) {
285 fprintf(stderr, "Runtime error: %s", "Reciever is null");
286 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 52);
287 exit(1);
288 } else {
289 var37 = ((val* (*)(val*))(var36->class->vft[COLOR_layout_builders__Layout__pos]))(var36) /* pos on <var36:nullable Layout[MVirtualTypeProp]>*/;
290 }
291 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_color_consts]))(var_compiler, var37) /* compile_color_consts on <var_compiler:SeparateErasureCompiler>*/;
292 var38 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
293 if (varonce39) {
294 var40 = varonce39;
295 } else {
296 var41 = ".main";
297 var42 = 5;
298 var43 = string__NativeString__to_s_with_length(var41, var42);
299 var40 = var43;
300 varonce39 = var40;
301 }
302 var44 = NEW_array__Array(&type_array__Arraykernel__Object);
303 { /* var44 = array_instance Array[Object] */
304 var45 = 2;
305 var46 = NEW_array__NativeArray(var45, &type_array__NativeArraykernel__Object);
306 ((struct instance_array__NativeArray*)var46)->values[0] = (val*) var38;
307 ((struct instance_array__NativeArray*)var46)->values[1] = (val*) var40;
308 ((void (*)(val*, val*, long))(var44->class->vft[COLOR_array__Array__with_native]))(var44, var46, var45) /* with_native on <var44:Array[Object]>*/;
309 CHECK_NEW_array__Array(var44);
310 }
311 var47 = ((val* (*)(val*))(var44->class->vft[COLOR_string__Object__to_s]))(var44) /* to_s on <var44:Array[Object]>*/;
312 var48 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var47) /* new_file on <var_compiler:SeparateErasureCompiler>*/;
313 var48;
314 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_main_function]))(var_compiler) /* compile_main_function on <var_compiler:SeparateErasureCompiler>*/;
315 var49 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__in_importation]))(var_mainmodule) /* in_importation on <var_mainmodule:MModule>*/;
316 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_poset__POSetElement__greaters]))(var49) /* greaters on <var49:POSetElement[MModule]>*/;
317 var51 = ((val* (*)(val*))(var50->class->vft[COLOR_abstract_collection__Collection__iterator]))(var50) /* iterator on <var50:Collection[Object](Collection[MModule])>*/;
318 for(;;) {
319 var52 = ((short int (*)(val*))(var51->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var51) /* is_ok on <var51:Iterator[nullable Object]>*/;
320 if(!var52) break;
321 var53 = ((val* (*)(val*))(var51->class->vft[COLOR_abstract_collection__Iterator__item]))(var51) /* item on <var51:Iterator[nullable Object]>*/;
322 var_m54 = var53;
323 var55 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
324 if (varonce56) {
325 var57 = varonce56;
326 } else {
327 var58 = "Generate C for module ";
328 var59 = 22;
329 var60 = string__NativeString__to_s_with_length(var58, var59);
330 var57 = var60;
331 varonce56 = var57;
332 }
333 var61 = NEW_array__Array(&type_array__Arraykernel__Object);
334 { /* var61 = array_instance Array[Object] */
335 var62 = 2;
336 var63 = NEW_array__NativeArray(var62, &type_array__NativeArraykernel__Object);
337 ((struct instance_array__NativeArray*)var63)->values[0] = (val*) var57;
338 ((struct instance_array__NativeArray*)var63)->values[1] = (val*) var_m54;
339 ((void (*)(val*, val*, long))(var61->class->vft[COLOR_array__Array__with_native]))(var61, var63, var62) /* with_native on <var61:Array[Object]>*/;
340 CHECK_NEW_array__Array(var61);
341 }
342 var64 = ((val* (*)(val*))(var61->class->vft[COLOR_string__Object__to_s]))(var61) /* to_s on <var61:Array[Object]>*/;
343 var65 = 2;
344 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_toolcontext__ToolContext__info]))(var55, var64, var65) /* info on <var55:ToolContext>*/;
345 var66 = ((val* (*)(val*))(var_m54->class->vft[COLOR_model_base__MModule__name]))(var_m54) /* name on <var_m54:MModule>*/;
346 if (varonce67) {
347 var68 = varonce67;
348 } else {
349 var69 = ".sep";
350 var70 = 4;
351 var71 = string__NativeString__to_s_with_length(var69, var70);
352 var68 = var71;
353 varonce67 = var68;
354 }
355 var72 = NEW_array__Array(&type_array__Arraykernel__Object);
356 { /* var72 = array_instance Array[Object] */
357 var73 = 2;
358 var74 = NEW_array__NativeArray(var73, &type_array__NativeArraykernel__Object);
359 ((struct instance_array__NativeArray*)var74)->values[0] = (val*) var66;
360 ((struct instance_array__NativeArray*)var74)->values[1] = (val*) var68;
361 ((void (*)(val*, val*, long))(var72->class->vft[COLOR_array__Array__with_native]))(var72, var74, var73) /* with_native on <var72:Array[Object]>*/;
362 CHECK_NEW_array__Array(var72);
363 }
364 var75 = ((val* (*)(val*))(var72->class->vft[COLOR_string__Object__to_s]))(var72) /* to_s on <var72:Array[Object]>*/;
365 var76 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var75) /* new_file on <var_compiler:SeparateErasureCompiler>*/;
366 var76;
367 ((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>*/;
368 CONTINUE_label77: (void)0;
369 ((void (*)(val*))(var51->class->vft[COLOR_abstract_collection__Iterator__next]))(var51) /* next on <var51:Iterator[nullable Object]>*/;
370 }
371 BREAK_label77: (void)0;
372 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__display_stats]))(var_compiler) /* display_stats on <var_compiler:SeparateErasureCompiler>*/;
373 var78 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
374 var_time1 = var78;
375 var79 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
376 if (varonce80) {
377 var81 = varonce80;
378 } else {
379 var82 = "*** END GENERATING C: ";
380 var83 = 22;
381 var84 = string__NativeString__to_s_with_length(var82, var83);
382 var81 = var84;
383 varonce80 = var81;
384 }
385 { /* Inline kernel#Int#- (var_time1,var_time0) */
386 var87 = var_time1 - var_time0;
387 var85 = var87;
388 goto RET_LABEL86;
389 RET_LABEL86:(void)0;
390 }
391 if (varonce88) {
392 var89 = varonce88;
393 } else {
394 var90 = " ***";
395 var91 = 4;
396 var92 = string__NativeString__to_s_with_length(var90, var91);
397 var89 = var92;
398 varonce88 = var89;
399 }
400 var93 = NEW_array__Array(&type_array__Arraykernel__Object);
401 { /* var93 = array_instance Array[Object] */
402 var94 = 3;
403 var95 = NEW_array__NativeArray(var94, &type_array__NativeArraykernel__Object);
404 ((struct instance_array__NativeArray*)var95)->values[0] = (val*) var81;
405 var96 = BOX_kernel__Int(var85); /* autobox from Int to Object */
406 ((struct instance_array__NativeArray*)var95)->values[1] = (val*) var96;
407 ((struct instance_array__NativeArray*)var95)->values[2] = (val*) var89;
408 ((void (*)(val*, val*, long))(var93->class->vft[COLOR_array__Array__with_native]))(var93, var95, var94) /* with_native on <var93:Array[Object]>*/;
409 CHECK_NEW_array__Array(var93);
410 }
411 var97 = ((val* (*)(val*))(var93->class->vft[COLOR_string__Object__to_s]))(var93) /* to_s on <var93:Array[Object]>*/;
412 var98 = 2;
413 ((void (*)(val*, val*, long))(var79->class->vft[COLOR_toolcontext__ToolContext__info]))(var79, var97, var98) /* info on <var79:ToolContext>*/;
414 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__ModelBuilder__write_and_make]))(self, var_compiler) /* write_and_make on <self:ModelBuilder>*/;
415 RET_LABEL:;
416 }
417 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: Object, MModule, RapidTypeAnalysis) */
418 void VIRTUAL_separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
419 separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(self, p0, p1);
420 RET_LABEL:;
421 }
422 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout for (self: SeparateErasureCompiler): nullable Layout[MClass] */
423 val* separate_erasure_compiler__SeparateErasureCompiler__class_layout(val* self) {
424 val* var /* : nullable Layout[MClass] */;
425 val* var1 /* : nullable Layout[MClass] */;
426 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_layout].val; /* @class_layout on <self:SeparateErasureCompiler> */
427 var = var1;
428 RET_LABEL:;
429 return var;
430 }
431 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout for (self: Object): nullable Layout[MClass] */
432 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_layout(val* self) {
433 val* var /* : nullable Layout[MClass] */;
434 val* var1 /* : nullable Layout[MClass] */;
435 var1 = separate_erasure_compiler__SeparateErasureCompiler__class_layout(self);
436 var = var1;
437 RET_LABEL:;
438 return var;
439 }
440 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout= for (self: SeparateErasureCompiler, nullable Layout[MClass]) */
441 void separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d(val* self, val* p0) {
442 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_layout].val = p0; /* @class_layout on <self:SeparateErasureCompiler> */
443 RET_LABEL:;
444 }
445 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout= for (self: Object, nullable Layout[MClass]) */
446 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d(val* self, val* p0) {
447 separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d(self, p0);
448 RET_LABEL:;
449 }
450 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout for (self: SeparateErasureCompiler): nullable Layout[MVirtualTypeProp] */
451 val* separate_erasure_compiler__SeparateErasureCompiler__vt_layout(val* self) {
452 val* var /* : nullable Layout[MVirtualTypeProp] */;
453 val* var1 /* : nullable Layout[MVirtualTypeProp] */;
454 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_layout].val; /* @vt_layout on <self:SeparateErasureCompiler> */
455 var = var1;
456 RET_LABEL:;
457 return var;
458 }
459 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout for (self: Object): nullable Layout[MVirtualTypeProp] */
460 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_layout(val* self) {
461 val* var /* : nullable Layout[MVirtualTypeProp] */;
462 val* var1 /* : nullable Layout[MVirtualTypeProp] */;
463 var1 = separate_erasure_compiler__SeparateErasureCompiler__vt_layout(self);
464 var = var1;
465 RET_LABEL:;
466 return var;
467 }
468 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout= for (self: SeparateErasureCompiler, nullable Layout[MVirtualTypeProp]) */
469 void separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d(val* self, val* p0) {
470 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_layout].val = p0; /* @vt_layout on <self:SeparateErasureCompiler> */
471 RET_LABEL:;
472 }
473 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout= for (self: Object, nullable Layout[MVirtualTypeProp]) */
474 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d(val* self, val* p0) {
475 separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d(self, p0);
476 RET_LABEL:;
477 }
478 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: SeparateErasureCompiler, MModule, ModelBuilder, RapidTypeAnalysis) */
479 void separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
480 val* var_mainmodule /* var mainmodule: MModule */;
481 val* var_mmbuilder /* var mmbuilder: ModelBuilder */;
482 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
483 val* var /* : HashSet[MClass] */;
484 val* var1 /* : Model */;
485 val* var2 /* : Array[MClass] */;
486 val* var_mclasses /* var mclasses: HashSet[MClass] */;
487 val* var3 /* : MClassColorer */;
488 val* var_class_colorer /* var class_colorer: MClassColorer */;
489 val* var4 /* : ModelBuilder */;
490 val* var5 /* : ToolContext */;
491 val* var6 /* : OptionBool */;
492 val* var7 /* : nullable Object */;
493 short int var8 /* : Bool */;
494 val* var9 /* : MClassHasher */;
495 val* var10 /* : PHModOperator */;
496 val* var_layout_builder /* var layout_builder: TypingLayoutBuilder[MClass] */;
497 val* var11 /* : Layout[Object] */;
498 val* var12 /* : ModelBuilder */;
499 val* var13 /* : ToolContext */;
500 val* var14 /* : OptionBool */;
501 val* var15 /* : nullable Object */;
502 short int var16 /* : Bool */;
503 val* var17 /* : MClassHasher */;
504 val* var18 /* : PHAndOperator */;
505 val* var19 /* : Layout[Object] */;
506 val* var20 /* : ModelBuilder */;
507 val* var21 /* : ToolContext */;
508 val* var22 /* : OptionBool */;
509 val* var23 /* : nullable Object */;
510 short int var24 /* : Bool */;
511 val* var25 /* : MClassBMizer */;
512 val* var26 /* : Layout[Object] */;
513 val* var27 /* : Layout[Object] */;
514 val* var28 /* : Map[MClass, Array[nullable MClass]] */;
515 val* var29 /* : HashMap[MClass, Set[MVirtualTypeProp]] */;
516 val* var_vts /* var vts: HashMap[MClass, Set[MVirtualTypeProp]] */;
517 val* var30 /* : Iterator[nullable Object] */;
518 short int var31 /* : Bool */;
519 val* var32 /* : nullable Object */;
520 val* var_mclass /* var mclass: MClass */;
521 val* var33 /* : HashSet[MVirtualTypeProp] */;
522 val* var34 /* : MModule */;
523 val* var35 /* : Set[MProperty] */;
524 val* var36 /* : Iterator[nullable Object] */;
525 short int var37 /* : Bool */;
526 val* var38 /* : nullable Object */;
527 val* var_mprop /* var mprop: MProperty */;
528 short int var39 /* : Bool */;
529 int cltype;
530 int idtype;
531 val* var40 /* : nullable Object */;
532 val* var42 /* : MPropertyColorer[MVirtualTypeProp] */;
533 val* var_vt_coloring /* var vt_coloring: MPropertyColorer[MVirtualTypeProp] */;
534 val* var43 /* : Layout[PropertyLayoutElement] */;
535 val* var_vt_layout /* var vt_layout: Layout[MVirtualTypeProp] */;
536 val* var44 /* : Map[MClass, Array[nullable MPropDef]] */;
537 var_mainmodule = p0;
538 var_mmbuilder = p1;
539 var_runtime_type_analysis = p2;
540 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__init]))(self, p0, p1, p2) /* init on <self:SeparateErasureCompiler>*/;
541 var = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
542 var1 = ((val* (*)(val*))(var_mmbuilder->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(var_mmbuilder) /* model on <var_mmbuilder:ModelBuilder>*/;
543 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_model__Model__mclasses]))(var1) /* mclasses on <var1:Model>*/;
544 ((void (*)(val*, val*))(var->class->vft[COLOR_hash_collection__HashSet__from]))(var, var2) /* from on <var:HashSet[MClass]>*/;
545 CHECK_NEW_hash_collection__HashSet(var);
546 var_mclasses = var;
547 var3 = NEW_layout_builders__MClassColorer(&type_layout_builders__MClassColorer);
548 ((void (*)(val*, val*))(var3->class->vft[COLOR_layout_builders__MClassColorer__init]))(var3, var_mainmodule) /* init on <var3:MClassColorer>*/;
549 CHECK_NEW_layout_builders__MClassColorer(var3);
550 var_class_colorer = var3;
551 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
552 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var4) /* toolcontext on <var4:ModelBuilder>*/;
553 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var5) /* opt_phmod_typing on <var5:ToolContext>*/;
554 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_opts__Option__value]))(var6) /* value on <var6:OptionBool>*/;
555 var8 = ((struct instance_kernel__Bool*)var7)->value; /* autounbox from nullable Object to Bool */;
556 if (var8){
557 var9 = NEW_layout_builders__MClassHasher(&type_layout_builders__MClassHasher);
558 var10 = NEW_layout_builders__PHModOperator(&type_layout_builders__PHModOperator);
559 ((void (*)(val*))(var10->class->vft[COLOR_layout_builders__PHModOperator__init]))(var10) /* init on <var10:PHModOperator>*/;
560 CHECK_NEW_layout_builders__PHModOperator(var10);
561 ((void (*)(val*, val*, val*))(var9->class->vft[COLOR_layout_builders__MClassHasher__init]))(var9, var10, var_mainmodule) /* init on <var9:MClassHasher>*/;
562 CHECK_NEW_layout_builders__MClassHasher(var9);
563 var_layout_builder = var9;
564 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>*/;
565 var11;
566 } else {
567 var12 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
568 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var12) /* toolcontext on <var12:ModelBuilder>*/;
569 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var13) /* opt_phand_typing on <var13:ToolContext>*/;
570 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_opts__Option__value]))(var14) /* value on <var14:OptionBool>*/;
571 var16 = ((struct instance_kernel__Bool*)var15)->value; /* autounbox from nullable Object to Bool */;
572 if (var16){
573 var17 = NEW_layout_builders__MClassHasher(&type_layout_builders__MClassHasher);
574 var18 = NEW_layout_builders__PHAndOperator(&type_layout_builders__PHAndOperator);
575 ((void (*)(val*))(var18->class->vft[COLOR_layout_builders__PHAndOperator__init]))(var18) /* init on <var18:PHAndOperator>*/;
576 CHECK_NEW_layout_builders__PHAndOperator(var18);
577 ((void (*)(val*, val*, val*))(var17->class->vft[COLOR_layout_builders__MClassHasher__init]))(var17, var18, var_mainmodule) /* init on <var17:MClassHasher>*/;
578 CHECK_NEW_layout_builders__MClassHasher(var17);
579 var_layout_builder = var17;
580 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>*/;
581 var19;
582 } else {
583 var20 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
584 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var20) /* toolcontext on <var20:ModelBuilder>*/;
585 var22 = ((val* (*)(val*))(var21->class->vft[COLOR_separate_compiler__ToolContext__opt_bm_typing]))(var21) /* opt_bm_typing on <var21:ToolContext>*/;
586 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_opts__Option__value]))(var22) /* value on <var22:OptionBool>*/;
587 var24 = ((struct instance_kernel__Bool*)var23)->value; /* autounbox from nullable Object to Bool */;
588 if (var24){
589 var25 = NEW_layout_builders__MClassBMizer(&type_layout_builders__MClassBMizer);
590 ((void (*)(val*, val*))(var25->class->vft[COLOR_layout_builders__MClassBMizer__init]))(var25, var_mainmodule) /* init on <var25:MClassBMizer>*/;
591 CHECK_NEW_layout_builders__MClassBMizer(var25);
592 var_layout_builder = var25;
593 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>*/;
594 var26;
595 } else {
596 var_layout_builder = var_class_colorer;
597 }
598 }
599 }
600 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]>*/;
601 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d]))(self, var27) /* class_layout= on <self:SeparateErasureCompiler>*/;
602 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>*/;
603 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d]))(self, var28) /* class_tables= on <self:SeparateErasureCompiler>*/;
604 var29 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setmodel__MVirtualTypeProp);
605 ((void (*)(val*))(var29->class->vft[COLOR_hash_collection__HashMap__init]))(var29) /* init on <var29:HashMap[MClass, Set[MVirtualTypeProp]]>*/;
606 CHECK_NEW_hash_collection__HashMap(var29);
607 var_vts = var29;
608 var30 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:HashSet[MClass]>*/;
609 for(;;) {
610 var31 = ((short int (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var30) /* is_ok on <var30:Iterator[nullable Object]>*/;
611 if(!var31) break;
612 var32 = ((val* (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__item]))(var30) /* item on <var30:Iterator[nullable Object]>*/;
613 var_mclass = var32;
614 var33 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MVirtualTypeProp);
615 ((void (*)(val*))(var33->class->vft[COLOR_hash_collection__HashSet__init]))(var33) /* init on <var33:HashSet[MVirtualTypeProp]>*/;
616 CHECK_NEW_hash_collection__HashSet(var33);
617 ((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]]>*/;
618 var34 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
619 var35 = ((val* (*)(val*, val*))(var34->class->vft[COLOR_abstract_compiler__MModule__properties]))(var34, var_mclass) /* properties on <var34:MModule>*/;
620 var36 = ((val* (*)(val*))(var35->class->vft[COLOR_abstract_collection__Collection__iterator]))(var35) /* iterator on <var35:Set[MProperty]>*/;
621 for(;;) {
622 var37 = ((short int (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var36) /* is_ok on <var36:Iterator[nullable Object]>*/;
623 if(!var37) break;
624 var38 = ((val* (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__item]))(var36) /* item on <var36:Iterator[nullable Object]>*/;
625 var_mprop = var38;
626 /* <var_mprop:MProperty> isa MVirtualTypeProp */
627 cltype = type_model__MVirtualTypeProp.color;
628 idtype = type_model__MVirtualTypeProp.id;
629 if(cltype >= var_mprop->type->table_size) {
630 var39 = 0;
631 } else {
632 var39 = var_mprop->type->type_table[cltype] == idtype;
633 }
634 if (var39){
635 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]]>*/;
636 ((void (*)(val*, val*))(var40->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var40, var_mprop) /* add on <var40:nullable Object(Set[MVirtualTypeProp])>*/;
637 } else {
638 }
639 CONTINUE_label: (void)0;
640 ((void (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__next]))(var36) /* next on <var36:Iterator[nullable Object]>*/;
641 }
642 BREAK_label: (void)0;
643 CONTINUE_label41: (void)0;
644 ((void (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__next]))(var30) /* next on <var30:Iterator[nullable Object]>*/;
645 }
646 BREAK_label41: (void)0;
647 var42 = NEW_layout_builders__MPropertyColorer(&type_layout_builders__MPropertyColorermodel__MVirtualTypeProp);
648 ((void (*)(val*, val*, val*))(var42->class->vft[COLOR_layout_builders__MPropertyColorer__init]))(var42, var_mainmodule, var_class_colorer) /* init on <var42:MPropertyColorer[MVirtualTypeProp]>*/;
649 CHECK_NEW_layout_builders__MPropertyColorer(var42);
650 var_vt_coloring = var42;
651 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]>*/;
652 var_vt_layout = var43;
653 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>*/;
654 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d]))(self, var44) /* vt_tables= on <self:SeparateErasureCompiler>*/;
655 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d]))(self, var_vt_layout) /* vt_layout= on <self:SeparateErasureCompiler>*/;
656 RET_LABEL:;
657 }
658 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: Object, MModule, ModelBuilder, RapidTypeAnalysis) */
659 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
660 separate_erasure_compiler__SeparateErasureCompiler__init(self, p0, p1, p2);
661 RET_LABEL:;
662 }
663 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: SeparateErasureCompiler, Set[MClass], Layout[MProperty]): Map[MClass, Array[nullable MPropDef]] */
664 val* separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0, val* p1) {
665 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
666 val* var_mclasses /* var mclasses: Set[MClass] */;
667 val* var_layout /* var layout: Layout[MProperty] */;
668 val* var1 /* : HashMap[MClass, Array[nullable MPropDef]] */;
669 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
670 val* var2 /* : Iterator[nullable Object] */;
671 short int var3 /* : Bool */;
672 val* var4 /* : nullable Object */;
673 val* var_mclass /* var mclass: MClass */;
674 val* var5 /* : Array[nullable MPropDef] */;
675 val* var_table /* var table: Array[nullable MPropDef] */;
676 val* var6 /* : Array[MClass] */;
677 val* var_parents /* var parents: Array[MClass] */;
678 val* var7 /* : MModule */;
679 val* var8 /* : POSet[MClass] */;
680 short int var9 /* : Bool */;
681 val* var10 /* : MModule */;
682 val* var11 /* : POSetElement[MClass] */;
683 val* var12 /* : Collection[Object] */;
684 val* var13 /* : Array[nullable Object] */;
685 val* var14 /* : MModule */;
686 val* var15 /* : Iterator[nullable Object] */;
687 short int var16 /* : Bool */;
688 val* var17 /* : nullable Object */;
689 val* var_parent /* var parent: MClass */;
690 short int var18 /* : Bool */;
691 val* var19 /* : MModule */;
692 val* var20 /* : Set[MProperty] */;
693 val* var21 /* : Iterator[nullable Object] */;
694 short int var22 /* : Bool */;
695 val* var23 /* : nullable Object */;
696 val* var_mproperty /* var mproperty: MProperty */;
697 short int var24 /* : Bool */;
698 int cltype;
699 int idtype;
700 short int var25 /* : Bool */;
701 val* var27 /* : Map[Object, Int] */;
702 val* var28 /* : nullable Object */;
703 long var29 /* : Int */;
704 long var_color /* var color: Int */;
705 long var30 /* : Int */;
706 short int var31 /* : Bool */;
707 short int var33 /* : Bool */;
708 int cltype34;
709 int idtype35;
710 const char* var_class_name;
711 short int var36 /* : Bool */;
712 val* var37 /* : Range[Int] */;
713 long var38 /* : Int */;
714 val* var39 /* : Discrete */;
715 val* var40 /* : Discrete */;
716 val* var41 /* : Iterator[nullable Object] */;
717 short int var42 /* : Bool */;
718 val* var43 /* : nullable Object */;
719 long var_i /* var i: Int */;
720 long var44 /* : Int */;
721 val* var45 /* : null */;
722 val* var47 /* : Array[MPropDef] */;
723 val* var48 /* : Iterator[nullable Object] */;
724 short int var49 /* : Bool */;
725 val* var50 /* : nullable Object */;
726 val* var_mpropdef /* var mpropdef: MVirtualTypeDef */;
727 val* var51 /* : MClassDef */;
728 val* var52 /* : MClass */;
729 short int var53 /* : Bool */;
730 val* var55 /* : MModule */;
731 val* var56 /* : Set[MProperty] */;
732 val* var57 /* : Iterator[nullable Object] */;
733 short int var58 /* : Bool */;
734 val* var59 /* : nullable Object */;
735 val* var_mproperty60 /* var mproperty: MProperty */;
736 short int var61 /* : Bool */;
737 int cltype62;
738 int idtype63;
739 short int var64 /* : Bool */;
740 val* var66 /* : Map[Object, Int] */;
741 val* var67 /* : nullable Object */;
742 long var68 /* : Int */;
743 long var_color69 /* var color: Int */;
744 long var70 /* : Int */;
745 short int var71 /* : Bool */;
746 short int var73 /* : Bool */;
747 int cltype74;
748 int idtype75;
749 const char* var_class_name76;
750 short int var77 /* : Bool */;
751 val* var78 /* : Range[Int] */;
752 long var79 /* : Int */;
753 val* var80 /* : Discrete */;
754 val* var81 /* : Discrete */;
755 val* var82 /* : Iterator[nullable Object] */;
756 short int var83 /* : Bool */;
757 val* var84 /* : nullable Object */;
758 long var_i85 /* var i: Int */;
759 long var86 /* : Int */;
760 val* var87 /* : null */;
761 val* var89 /* : Array[MPropDef] */;
762 val* var90 /* : Iterator[nullable Object] */;
763 short int var91 /* : Bool */;
764 val* var92 /* : nullable Object */;
765 val* var_mpropdef93 /* var mpropdef: MVirtualTypeDef */;
766 val* var94 /* : MClassDef */;
767 val* var95 /* : MClass */;
768 short int var96 /* : Bool */;
769 var_mclasses = p0;
770 var_layout = p1;
771 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
772 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MPropDef]]>*/;
773 CHECK_NEW_hash_collection__HashMap(var1);
774 var_tables = var1;
775 var2 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
776 for(;;) {
777 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
778 if(!var3) break;
779 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
780 var_mclass = var4;
781 var5 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
782 ((void (*)(val*))(var5->class->vft[COLOR_array__Array__init]))(var5) /* init on <var5:Array[nullable MPropDef]>*/;
783 CHECK_NEW_array__Array(var5);
784 var_table = var5;
785 var6 = NEW_array__Array(&type_array__Arraymodel__MClass);
786 ((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[MClass]>*/;
787 CHECK_NEW_array__Array(var6);
788 var_parents = var6;
789 var7 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
790 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var7) /* flatten_mclass_hierarchy on <var7:MModule>*/;
791 var9 = ((short int (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__Collection__has]))(var8, var_mclass) /* has on <var8:POSet[MClass]>*/;
792 if (var9){
793 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
794 var11 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var10) /* in_hierarchy on <var_mclass:MClass>*/;
795 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_poset__POSetElement__greaters]))(var11) /* greaters on <var11:POSetElement[MClass]>*/;
796 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_array__Collection__to_a]))(var12) /* to_a on <var12:Collection[Object](Collection[MClass])>*/;
797 var_parents = var13;
798 var14 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
799 ((void (*)(val*, val*))(var14->class->vft[COLOR_model__MModule__linearize_mclasses]))(var14, var_parents) /* linearize_mclasses on <var14:MModule>*/;
800 } else {
801 }
802 var15 = ((val* (*)(val*))(var_parents->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_parents) /* iterator on <var_parents:Array[MClass]>*/;
803 for(;;) {
804 var16 = ((short int (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var15) /* is_ok on <var15:Iterator[nullable Object]>*/;
805 if(!var16) break;
806 var17 = ((val* (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__item]))(var15) /* item on <var15:Iterator[nullable Object]>*/;
807 var_parent = var17;
808 var18 = ((short int (*)(val*, val*))(var_parent->class->vft[COLOR_kernel__Object___61d_61d]))(var_parent, var_mclass) /* == on <var_parent:MClass>*/;
809 if (var18){
810 goto CONTINUE_label;
811 } else {
812 }
813 var19 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
814 var20 = ((val* (*)(val*, val*))(var19->class->vft[COLOR_abstract_compiler__MModule__properties]))(var19, var_parent) /* properties on <var19:MModule>*/;
815 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Collection__iterator]))(var20) /* iterator on <var20:Set[MProperty]>*/;
816 for(;;) {
817 var22 = ((short int (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var21) /* is_ok on <var21:Iterator[nullable Object]>*/;
818 if(!var22) break;
819 var23 = ((val* (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__item]))(var21) /* item on <var21:Iterator[nullable Object]>*/;
820 var_mproperty = var23;
821 /* <var_mproperty:MProperty> isa MVirtualTypeProp */
822 cltype = type_model__MVirtualTypeProp.color;
823 idtype = type_model__MVirtualTypeProp.id;
824 if(cltype >= var_mproperty->type->table_size) {
825 var24 = 0;
826 } else {
827 var24 = var_mproperty->type->type_table[cltype] == idtype;
828 }
829 var25 = !var24;
830 if (var25){
831 goto CONTINUE_label26;
832 } else {
833 }
834 var27 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:Layout[MProperty]>*/;
835 var28 = ((val* (*)(val*, val*))(var27->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var27, var_mproperty) /* [] on <var27:Map[Object, Int](Map[MProperty, Int])>*/;
836 var29 = ((struct instance_kernel__Int*)var28)->value; /* autounbox from nullable Object to Int */;
837 var_color = var29;
838 var30 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
839 { /* Inline kernel#Int#<= (var30,var_color) */
840 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
841 /* <var_color:Int> isa OTHER */
842 var33 = 1; /* easy <var_color:Int> isa OTHER*/
843 if (!var33) {
844 var_class_name = type_kernel__Int.name;
845 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
846 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
847 exit(1);
848 }
849 var36 = var30 <= var_color;
850 var31 = var36;
851 goto RET_LABEL32;
852 RET_LABEL32:(void)0;
853 }
854 if (var31){
855 var37 = NEW_range__Range(&type_range__Rangekernel__Int);
856 var38 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
857 var39 = BOX_kernel__Int(var38); /* autobox from Int to Discrete */
858 var40 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
859 ((void (*)(val*, val*, val*))(var37->class->vft[COLOR_range__Range__without_last]))(var37, var39, var40) /* without_last on <var37:Range[Int]>*/;
860 CHECK_NEW_range__Range(var37);
861 var41 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_collection__Collection__iterator]))(var37) /* iterator on <var37:Range[Int]>*/;
862 for(;;) {
863 var42 = ((short int (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var41) /* is_ok on <var41:Iterator[nullable Object]>*/;
864 if(!var42) break;
865 var43 = ((val* (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__item]))(var41) /* item on <var41:Iterator[nullable Object]>*/;
866 var44 = ((struct instance_kernel__Int*)var43)->value; /* autounbox from nullable Object to Int */;
867 var_i = var44;
868 var45 = NULL;
869 ((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]>*/;
870 CONTINUE_label46: (void)0;
871 ((void (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__next]))(var41) /* next on <var41:Iterator[nullable Object]>*/;
872 }
873 BREAK_label46: (void)0;
874 } else {
875 }
876 var47 = ((val* (*)(val*))(var_mproperty->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty) /* mpropdefs on <var_mproperty:MProperty(MVirtualTypeProp)>*/;
877 var48 = ((val* (*)(val*))(var47->class->vft[COLOR_abstract_collection__Collection__iterator]))(var47) /* iterator on <var47:Array[MPropDef](Array[MVirtualTypeDef])>*/;
878 for(;;) {
879 var49 = ((short int (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var48) /* is_ok on <var48:Iterator[nullable Object]>*/;
880 if(!var49) break;
881 var50 = ((val* (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__item]))(var48) /* item on <var48:Iterator[nullable Object]>*/;
882 var_mpropdef = var50;
883 var51 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MVirtualTypeDef>*/;
884 var52 = ((val* (*)(val*))(var51->class->vft[COLOR_model__MClassDef__mclass]))(var51) /* mclass on <var51:MClassDef>*/;
885 var53 = ((short int (*)(val*, val*))(var52->class->vft[COLOR_kernel__Object___61d_61d]))(var52, var_parent) /* == on <var52:MClass>*/;
886 if (var53){
887 ((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]>*/;
888 } else {
889 }
890 CONTINUE_label54: (void)0;
891 ((void (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__next]))(var48) /* next on <var48:Iterator[nullable Object]>*/;
892 }
893 BREAK_label54: (void)0;
894 CONTINUE_label26: (void)0;
895 ((void (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__next]))(var21) /* next on <var21:Iterator[nullable Object]>*/;
896 }
897 BREAK_label26: (void)0;
898 CONTINUE_label: (void)0;
899 ((void (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__next]))(var15) /* next on <var15:Iterator[nullable Object]>*/;
900 }
901 BREAK_label: (void)0;
902 var55 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
903 var56 = ((val* (*)(val*, val*))(var55->class->vft[COLOR_abstract_compiler__MModule__properties]))(var55, var_mclass) /* properties on <var55:MModule>*/;
904 var57 = ((val* (*)(val*))(var56->class->vft[COLOR_abstract_collection__Collection__iterator]))(var56) /* iterator on <var56:Set[MProperty]>*/;
905 for(;;) {
906 var58 = ((short int (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var57) /* is_ok on <var57:Iterator[nullable Object]>*/;
907 if(!var58) break;
908 var59 = ((val* (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__item]))(var57) /* item on <var57:Iterator[nullable Object]>*/;
909 var_mproperty60 = var59;
910 /* <var_mproperty60:MProperty> isa MVirtualTypeProp */
911 cltype62 = type_model__MVirtualTypeProp.color;
912 idtype63 = type_model__MVirtualTypeProp.id;
913 if(cltype62 >= var_mproperty60->type->table_size) {
914 var61 = 0;
915 } else {
916 var61 = var_mproperty60->type->type_table[cltype62] == idtype63;
917 }
918 var64 = !var61;
919 if (var64){
920 goto CONTINUE_label65;
921 } else {
922 }
923 var66 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:Layout[MProperty]>*/;
924 var67 = ((val* (*)(val*, val*))(var66->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var66, var_mproperty60) /* [] on <var66:Map[Object, Int](Map[MProperty, Int])>*/;
925 var68 = ((struct instance_kernel__Int*)var67)->value; /* autounbox from nullable Object to Int */;
926 var_color69 = var68;
927 var70 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
928 { /* Inline kernel#Int#<= (var70,var_color69) */
929 /* Covariant cast for argument 0 (i) <var_color69:Int> isa OTHER */
930 /* <var_color69:Int> isa OTHER */
931 var73 = 1; /* easy <var_color69:Int> isa OTHER*/
932 if (!var73) {
933 var_class_name76 = type_kernel__Int.name;
934 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name76);
935 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
936 exit(1);
937 }
938 var77 = var70 <= var_color69;
939 var71 = var77;
940 goto RET_LABEL72;
941 RET_LABEL72:(void)0;
942 }
943 if (var71){
944 var78 = NEW_range__Range(&type_range__Rangekernel__Int);
945 var79 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
946 var80 = BOX_kernel__Int(var79); /* autobox from Int to Discrete */
947 var81 = BOX_kernel__Int(var_color69); /* autobox from Int to Discrete */
948 ((void (*)(val*, val*, val*))(var78->class->vft[COLOR_range__Range__without_last]))(var78, var80, var81) /* without_last on <var78:Range[Int]>*/;
949 CHECK_NEW_range__Range(var78);
950 var82 = ((val* (*)(val*))(var78->class->vft[COLOR_abstract_collection__Collection__iterator]))(var78) /* iterator on <var78:Range[Int]>*/;
951 for(;;) {
952 var83 = ((short int (*)(val*))(var82->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var82) /* is_ok on <var82:Iterator[nullable Object]>*/;
953 if(!var83) break;
954 var84 = ((val* (*)(val*))(var82->class->vft[COLOR_abstract_collection__Iterator__item]))(var82) /* item on <var82:Iterator[nullable Object]>*/;
955 var86 = ((struct instance_kernel__Int*)var84)->value; /* autounbox from nullable Object to Int */;
956 var_i85 = var86;
957 var87 = NULL;
958 ((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]>*/;
959 CONTINUE_label88: (void)0;
960 ((void (*)(val*))(var82->class->vft[COLOR_abstract_collection__Iterator__next]))(var82) /* next on <var82:Iterator[nullable Object]>*/;
961 }
962 BREAK_label88: (void)0;
963 } else {
964 }
965 var89 = ((val* (*)(val*))(var_mproperty60->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty60) /* mpropdefs on <var_mproperty60:MProperty(MVirtualTypeProp)>*/;
966 var90 = ((val* (*)(val*))(var89->class->vft[COLOR_abstract_collection__Collection__iterator]))(var89) /* iterator on <var89:Array[MPropDef](Array[MVirtualTypeDef])>*/;
967 for(;;) {
968 var91 = ((short int (*)(val*))(var90->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var90) /* is_ok on <var90:Iterator[nullable Object]>*/;
969 if(!var91) break;
970 var92 = ((val* (*)(val*))(var90->class->vft[COLOR_abstract_collection__Iterator__item]))(var90) /* item on <var90:Iterator[nullable Object]>*/;
971 var_mpropdef93 = var92;
972 var94 = ((val* (*)(val*))(var_mpropdef93->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef93) /* mclassdef on <var_mpropdef93:MVirtualTypeDef>*/;
973 var95 = ((val* (*)(val*))(var94->class->vft[COLOR_model__MClassDef__mclass]))(var94) /* mclass on <var94:MClassDef>*/;
974 var96 = ((short int (*)(val*, val*))(var95->class->vft[COLOR_kernel__Object___61d_61d]))(var95, var_mclass) /* == on <var95:MClass>*/;
975 if (var96){
976 ((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]>*/;
977 } else {
978 }
979 CONTINUE_label97: (void)0;
980 ((void (*)(val*))(var90->class->vft[COLOR_abstract_collection__Iterator__next]))(var90) /* next on <var90:Iterator[nullable Object]>*/;
981 }
982 BREAK_label97: (void)0;
983 CONTINUE_label65: (void)0;
984 ((void (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__next]))(var57) /* next on <var57:Iterator[nullable Object]>*/;
985 }
986 BREAK_label65: (void)0;
987 ((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]]>*/;
988 CONTINUE_label98: (void)0;
989 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
990 }
991 BREAK_label98: (void)0;
992 var = var_tables;
993 goto RET_LABEL;
994 RET_LABEL:;
995 return var;
996 }
997 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: Object, Set[MClass], Layout[MProperty]): Map[MClass, Array[nullable MPropDef]] */
998 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0, val* p1) {
999 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
1000 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
1001 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(self, p0, p1);
1002 var = var1;
1003 RET_LABEL:;
1004 return var;
1005 }
1006 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MClass]] */
1007 val* separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
1008 val* var /* : Map[MClass, Array[nullable MClass]] */;
1009 val* var_mclasses /* var mclasses: Set[MClass] */;
1010 val* var1 /* : HashMap[MClass, Array[nullable MClass]] */;
1011 val* var_tables /* var tables: HashMap[MClass, Array[nullable MClass]] */;
1012 val* var2 /* : nullable Layout[MClass] */;
1013 val* var_layout /* var layout: nullable Layout[MClass] */;
1014 val* var3 /* : Iterator[nullable Object] */;
1015 short int var4 /* : Bool */;
1016 val* var5 /* : nullable Object */;
1017 val* var_mclass /* var mclass: MClass */;
1018 val* var6 /* : Array[nullable MClass] */;
1019 val* var_table /* var table: Array[nullable MClass] */;
1020 val* var7 /* : Array[MClass] */;
1021 val* var_supers /* var supers: Array[MClass] */;
1022 val* var8 /* : MModule */;
1023 val* var9 /* : POSet[MClass] */;
1024 short int var10 /* : Bool */;
1025 val* var11 /* : MModule */;
1026 val* var12 /* : POSetElement[MClass] */;
1027 val* var13 /* : Collection[Object] */;
1028 val* var14 /* : Array[nullable Object] */;
1029 val* var15 /* : Iterator[nullable Object] */;
1030 short int var16 /* : Bool */;
1031 val* var17 /* : nullable Object */;
1032 val* var_sup /* var sup: MClass */;
1033 short int var18 /* : Bool */;
1034 int cltype;
1035 int idtype;
1036 val* var19 /* : Map[Object, Map[Object, Int]] */;
1037 val* var20 /* : nullable Object */;
1038 val* var21 /* : nullable Object */;
1039 long var22 /* : Int */;
1040 long var_color /* var color: Int */;
1041 val* var23 /* : Map[Object, Int] */;
1042 val* var24 /* : nullable Object */;
1043 long var25 /* : Int */;
1044 long var26 /* : Int */;
1045 short int var27 /* : Bool */;
1046 short int var29 /* : Bool */;
1047 int cltype30;
1048 int idtype31;
1049 const char* var_class_name;
1050 short int var32 /* : Bool */;
1051 val* var33 /* : Range[Int] */;
1052 long var34 /* : Int */;
1053 val* var35 /* : Discrete */;
1054 val* var36 /* : Discrete */;
1055 val* var37 /* : Iterator[nullable Object] */;
1056 short int var38 /* : Bool */;
1057 val* var39 /* : nullable Object */;
1058 long var_i /* var i: Int */;
1059 long var40 /* : Int */;
1060 val* var41 /* : null */;
1061 var_mclasses = p0;
1062 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MClass);
1063 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MClass]]>*/;
1064 CHECK_NEW_hash_collection__HashMap(var1);
1065 var_tables = var1;
1066 var2 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
1067 var_layout = var2;
1068 var3 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
1069 for(;;) {
1070 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
1071 if(!var4) break;
1072 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
1073 var_mclass = var5;
1074 var6 = NEW_array__Array(&type_array__Arraynullable_model__MClass);
1075 ((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[nullable MClass]>*/;
1076 CHECK_NEW_array__Array(var6);
1077 var_table = var6;
1078 var7 = NEW_array__Array(&type_array__Arraymodel__MClass);
1079 ((void (*)(val*))(var7->class->vft[COLOR_array__Array__init]))(var7) /* init on <var7:Array[MClass]>*/;
1080 CHECK_NEW_array__Array(var7);
1081 var_supers = var7;
1082 var8 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
1083 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var8) /* flatten_mclass_hierarchy on <var8:MModule>*/;
1084 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__Collection__has]))(var9, var_mclass) /* has on <var9:POSet[MClass]>*/;
1085 if (var10){
1086 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
1087 var12 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var11) /* in_hierarchy on <var_mclass:MClass>*/;
1088 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_poset__POSetElement__greaters]))(var12) /* greaters on <var12:POSetElement[MClass]>*/;
1089 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_array__Collection__to_a]))(var13) /* to_a on <var13:Collection[Object](Collection[MClass])>*/;
1090 var_supers = var14;
1091 } else {
1092 }
1093 var15 = ((val* (*)(val*))(var_supers->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_supers) /* iterator on <var_supers:Array[MClass]>*/;
1094 for(;;) {
1095 var16 = ((short int (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var15) /* is_ok on <var15:Iterator[nullable Object]>*/;
1096 if(!var16) break;
1097 var17 = ((val* (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__item]))(var15) /* item on <var15:Iterator[nullable Object]>*/;
1098 var_sup = var17;
1099 /* <var_layout:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
1100 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
1101 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
1102 if(var_layout == NULL) {
1103 var18 = 0;
1104 } else {
1105 if(cltype >= var_layout->type->table_size) {
1106 var18 = 0;
1107 } else {
1108 var18 = var_layout->type->type_table[cltype] == idtype;
1109 }
1110 }
1111 if (var18){
1112 var19 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__hashes]))(var_layout) /* hashes on <var_layout:nullable Layout[MClass](PHLayout[MClass, MClass])>*/;
1113 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]])>*/;
1114 var21 = ((val* (*)(val*, val*))(var20->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var20, var_sup) /* [] on <var20:nullable Object(Map[MClass, Int])>*/;
1115 var22 = ((struct instance_kernel__Int*)var21)->value; /* autounbox from nullable Object to Int */;
1116 var_color = var22;
1117 } else {
1118 if (var_layout == NULL) {
1119 fprintf(stderr, "Runtime error: %s", "Reciever is null");
1120 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 182);
1121 exit(1);
1122 } else {
1123 var23 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MClass]>*/;
1124 }
1125 var24 = ((val* (*)(val*, val*))(var23->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var23, var_sup) /* [] on <var23:Map[Object, Int](Map[MClass, Int])>*/;
1126 var25 = ((struct instance_kernel__Int*)var24)->value; /* autounbox from nullable Object to Int */;
1127 var_color = var25;
1128 }
1129 var26 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
1130 { /* Inline kernel#Int#<= (var26,var_color) */
1131 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
1132 /* <var_color:Int> isa OTHER */
1133 var29 = 1; /* easy <var_color:Int> isa OTHER*/
1134 if (!var29) {
1135 var_class_name = type_kernel__Int.name;
1136 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1137 fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 260);
1138 exit(1);
1139 }
1140 var32 = var26 <= var_color;
1141 var27 = var32;
1142 goto RET_LABEL28;
1143 RET_LABEL28:(void)0;
1144 }
1145 if (var27){
1146 var33 = NEW_range__Range(&type_range__Rangekernel__Int);
1147 var34 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
1148 var35 = BOX_kernel__Int(var34); /* autobox from Int to Discrete */
1149 var36 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
1150 ((void (*)(val*, val*, val*))(var33->class->vft[COLOR_range__Range__without_last]))(var33, var35, var36) /* without_last on <var33:Range[Int]>*/;
1151 CHECK_NEW_range__Range(var33);
1152 var37 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_collection__Collection__iterator]))(var33) /* iterator on <var33:Range[Int]>*/;
1153 for(;;) {
1154 var38 = ((short int (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var37) /* is_ok on <var37:Iterator[nullable Object]>*/;
1155 if(!var38) break;
1156 var39 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__item]))(var37) /* item on <var37:Iterator[nullable Object]>*/;
1157 var40 = ((struct instance_kernel__Int*)var39)->value; /* autounbox from nullable Object to Int */;
1158 var_i = var40;
1159 var41 = NULL;
1160 ((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]>*/;
1161 CONTINUE_label: (void)0;
1162 ((void (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__next]))(var37) /* next on <var37:Iterator[nullable Object]>*/;
1163 }
1164 BREAK_label: (void)0;
1165 } else {
1166 }
1167 ((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]>*/;
1168 CONTINUE_label42: (void)0;
1169 ((void (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__next]))(var15) /* next on <var15:Iterator[nullable Object]>*/;
1170 }
1171 BREAK_label42: (void)0;
1172 ((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]]>*/;
1173 CONTINUE_label43: (void)0;
1174 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
1175 }
1176 BREAK_label43: (void)0;
1177 var = var_tables;
1178 goto RET_LABEL;
1179 RET_LABEL:;
1180 return var;
1181 }
1182 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MClass]] */
1183 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
1184 val* var /* : Map[MClass, Array[nullable MClass]] */;
1185 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
1186 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(self, p0);
1187 var = var1;
1188 RET_LABEL:;
1189 return var;
1190 }
1191 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: SeparateErasureCompiler) */
1192 void separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
1193 val* var /* : CodeWriter */;
1194 static val* varonce;
1195 val* var1 /* : String */;
1196 char* var2 /* : NativeString */;
1197 long var3 /* : Int */;
1198 val* var4 /* : String */;
1199 val* var5 /* : CodeWriter */;
1200 static val* varonce6;
1201 val* var7 /* : String */;
1202 char* var8 /* : NativeString */;
1203 long var9 /* : Int */;
1204 val* var10 /* : String */;
1205 val* var11 /* : CodeWriter */;
1206 static val* varonce12;
1207 val* var13 /* : String */;
1208 char* var14 /* : NativeString */;
1209 long var15 /* : Int */;
1210 val* var16 /* : String */;
1211 val* var17 /* : CodeWriter */;
1212 static val* varonce18;
1213 val* var19 /* : String */;
1214 char* var20 /* : NativeString */;
1215 long var21 /* : Int */;
1216 val* var22 /* : String */;
1217 val* var23 /* : nullable Layout[MVirtualTypeProp] */;
1218 short int var24 /* : Bool */;
1219 int cltype;
1220 int idtype;
1221 val* var25 /* : CodeWriter */;
1222 static val* varonce26;
1223 val* var27 /* : String */;
1224 char* var28 /* : NativeString */;
1225 long var29 /* : Int */;
1226 val* var30 /* : String */;
1227 val* var31 /* : CodeWriter */;
1228 static val* varonce32;
1229 val* var33 /* : String */;
1230 char* var34 /* : NativeString */;
1231 long var35 /* : Int */;
1232 val* var36 /* : String */;
1233 val* var37 /* : ModelBuilder */;
1234 val* var38 /* : ToolContext */;
1235 val* var39 /* : OptionBool */;
1236 val* var40 /* : nullable Object */;
1237 short int var41 /* : Bool */;
1238 val* var42 /* : CodeWriter */;
1239 static val* varonce43;
1240 val* var44 /* : String */;
1241 char* var45 /* : NativeString */;
1242 long var46 /* : Int */;
1243 val* var47 /* : String */;
1244 val* var48 /* : ModelBuilder */;
1245 val* var49 /* : ToolContext */;
1246 val* var50 /* : OptionBool */;
1247 val* var51 /* : nullable Object */;
1248 short int var52 /* : Bool */;
1249 val* var53 /* : CodeWriter */;
1250 static val* varonce54;
1251 val* var55 /* : String */;
1252 char* var56 /* : NativeString */;
1253 long var57 /* : Int */;
1254 val* var58 /* : String */;
1255 val* var59 /* : CodeWriter */;
1256 static val* varonce60;
1257 val* var61 /* : String */;
1258 char* var62 /* : NativeString */;
1259 long var63 /* : Int */;
1260 val* var64 /* : String */;
1261 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1262 if (varonce) {
1263 var1 = varonce;
1264 } else {
1265 var2 = "typedef void(*nitmethod_t)(void); /* general C type representing a Nit method. */";
1266 var3 = 81;
1267 var4 = string__NativeString__to_s_with_length(var2, var3);
1268 var1 = var4;
1269 varonce = var1;
1270 }
1271 ((void (*)(val*, val*))(var->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var, var1) /* add_decl on <var:CodeWriter>*/;
1272 ((void (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_header_attribute_structs]))(self) /* compile_header_attribute_structs on <self:SeparateErasureCompiler>*/;
1273 var5 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1274 if (varonce6) {
1275 var7 = varonce6;
1276 } else {
1277 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. */";
1278 var9 = 206;
1279 var10 = string__NativeString__to_s_with_length(var8, var9);
1280 var7 = var10;
1281 varonce6 = var7;
1282 }
1283 ((void (*)(val*, val*))(var5->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var5, var7) /* add_decl on <var5:CodeWriter>*/;
1284 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1285 if (varonce12) {
1286 var13 = varonce12;
1287 } else {
1288 var14 = "struct type_table { int size; int table[]; }; /* colorized type table. */";
1289 var15 = 73;
1290 var16 = string__NativeString__to_s_with_length(var14, var15);
1291 var13 = var16;
1292 varonce12 = var13;
1293 }
1294 ((void (*)(val*, val*))(var11->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var11, var13) /* add_decl on <var11:CodeWriter>*/;
1295 var17 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1296 if (varonce18) {
1297 var19 = varonce18;
1298 } else {
1299 var20 = "struct vts_entry { short int is_nullable; const struct class *class; }; /* link (nullable or not) between the vts and is bound. */";
1300 var21 = 130;
1301 var22 = string__NativeString__to_s_with_length(var20, var21);
1302 var19 = var22;
1303 varonce18 = var19;
1304 }
1305 ((void (*)(val*, val*))(var17->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var17, var19) /* add_decl on <var17:CodeWriter>*/;
1306 var23 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(self) /* vt_layout on <self:SeparateErasureCompiler>*/;
1307 /* <var23:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
1308 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
1309 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
1310 if(var23 == NULL) {
1311 var24 = 0;
1312 } else {
1313 if(cltype >= var23->type->table_size) {
1314 var24 = 0;
1315 } else {
1316 var24 = var23->type->type_table[cltype] == idtype;
1317 }
1318 }
1319 if (var24){
1320 var25 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1321 if (varonce26) {
1322 var27 = varonce26;
1323 } else {
1324 var28 = "struct vts_table { int mask; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
1325 var29 = 104;
1326 var30 = string__NativeString__to_s_with_length(var28, var29);
1327 var27 = var30;
1328 varonce26 = var27;
1329 }
1330 ((void (*)(val*, val*))(var25->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var25, var27) /* add_decl on <var25:CodeWriter>*/;
1331 } else {
1332 var31 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1333 if (varonce32) {
1334 var33 = varonce32;
1335 } else {
1336 var34 = "struct vts_table { int dummy; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
1337 var35 = 105;
1338 var36 = string__NativeString__to_s_with_length(var34, var35);
1339 var33 = var36;
1340 varonce32 = var33;
1341 }
1342 ((void (*)(val*, val*))(var31->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var31, var33) /* add_decl on <var31:CodeWriter>*/;
1343 }
1344 var37 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
1345 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var37) /* toolcontext on <var37:ModelBuilder>*/;
1346 var39 = ((val* (*)(val*))(var38->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var38) /* opt_phmod_typing on <var38:ToolContext>*/;
1347 var40 = ((val* (*)(val*))(var39->class->vft[COLOR_opts__Option__value]))(var39) /* value on <var39:OptionBool>*/;
1348 var41 = ((struct instance_kernel__Bool*)var40)->value; /* autounbox from nullable Object to Bool */;
1349 if (var41){
1350 var42 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1351 if (varonce43) {
1352 var44 = varonce43;
1353 } else {
1354 var45 = "#define HASH(mask, id) ((mask)%(id))";
1355 var46 = 36;
1356 var47 = string__NativeString__to_s_with_length(var45, var46);
1357 var44 = var47;
1358 varonce43 = var44;
1359 }
1360 ((void (*)(val*, val*))(var42->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var42, var44) /* add_decl on <var42:CodeWriter>*/;
1361 } else {
1362 var48 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
1363 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var48) /* toolcontext on <var48:ModelBuilder>*/;
1364 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var49) /* opt_phand_typing on <var49:ToolContext>*/;
1365 var51 = ((val* (*)(val*))(var50->class->vft[COLOR_opts__Option__value]))(var50) /* value on <var50:OptionBool>*/;
1366 var52 = ((struct instance_kernel__Bool*)var51)->value; /* autounbox from nullable Object to Bool */;
1367 if (var52){
1368 var53 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1369 if (varonce54) {
1370 var55 = varonce54;
1371 } else {
1372 var56 = "#define HASH(mask, id) ((mask)&(id))";
1373 var57 = 36;
1374 var58 = string__NativeString__to_s_with_length(var56, var57);
1375 var55 = var58;
1376 varonce54 = var55;
1377 }
1378 ((void (*)(val*, val*))(var53->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var53, var55) /* add_decl on <var53:CodeWriter>*/;
1379 } else {
1380 }
1381 }
1382 var59 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1383 if (varonce60) {
1384 var61 = varonce60;
1385 } else {
1386 var62 = "typedef struct instance { const struct class *class; nitattribute_t attrs[1]; } val; /* general C type representing a Nit instance. */";
1387 var63 = 134;
1388 var64 = string__NativeString__to_s_with_length(var62, var63);
1389 var61 = var64;
1390 varonce60 = var61;
1391 }
1392 ((void (*)(val*, val*))(var59->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var59, var61) /* add_decl on <var59:CodeWriter>*/;
1393 RET_LABEL:;
1394 }
1395 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: Object) */
1396 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
1397 separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(self);
1398 RET_LABEL:;
1399 }
1400 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: SeparateErasureCompiler, MClass) */
1401 void separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
1402 val* var_mclass /* var mclass: MClass */;
1403 val* var /* : MClassDef */;
1404 val* var1 /* : MClassType */;
1405 val* var_mtype /* var mtype: MClassType */;
1406 val* var2 /* : String */;
1407 val* var_c_name /* var c_name: String */;
1408 val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
1409 val* var4 /* : nullable Object */;
1410 val* var_vft /* var vft: Array[nullable MPropDef] */;
1411 val* var5 /* : Map[MClass, Array[nullable MPropDef]] */;
1412 val* var6 /* : nullable Object */;
1413 val* var_attrs /* var attrs: Array[nullable MPropDef] */;
1414 val* var7 /* : Map[MClass, Array[nullable MClass]] */;
1415 val* var8 /* : nullable Object */;
1416 val* var_class_table /* var class_table: Array[nullable MClass] */;
1417 val* var9 /* : AbstractCompilerVisitor */;
1418 val* var_v /* var v: SeparateCompilerVisitor */;
1419 static val* varonce;
1420 val* var10 /* : String */;
1421 char* var11 /* : NativeString */;
1422 long var12 /* : Int */;
1423 val* var13 /* : String */;
1424 static val* varonce14;
1425 val* var15 /* : String */;
1426 char* var16 /* : NativeString */;
1427 long var17 /* : Int */;
1428 val* var18 /* : String */;
1429 val* var19 /* : Array[Object] */;
1430 long var20 /* : Int */;
1431 val* var21 /* : NativeArray[Object] */;
1432 val* var22 /* : String */;
1433 static val* varonce23;
1434 val* var24 /* : String */;
1435 char* var25 /* : NativeString */;
1436 long var26 /* : Int */;
1437 val* var27 /* : String */;
1438 val* var28 /* : Array[Object] */;
1439 long var29 /* : Int */;
1440 val* var30 /* : NativeArray[Object] */;
1441 val* var31 /* : String */;
1442 static val* varonce32;
1443 val* var33 /* : String */;
1444 char* var34 /* : NativeString */;
1445 long var35 /* : Int */;
1446 val* var36 /* : String */;
1447 static val* varonce37;
1448 val* var38 /* : String */;
1449 char* var39 /* : NativeString */;
1450 long var40 /* : Int */;
1451 val* var41 /* : String */;
1452 val* var42 /* : Array[Object] */;
1453 long var43 /* : Int */;
1454 val* var44 /* : NativeArray[Object] */;
1455 val* var45 /* : String */;
1456 static val* varonce46;
1457 val* var47 /* : String */;
1458 char* var48 /* : NativeString */;
1459 long var49 /* : Int */;
1460 val* var50 /* : String */;
1461 static val* varonce51;
1462 val* var52 /* : String */;
1463 char* var53 /* : NativeString */;
1464 long var54 /* : Int */;
1465 val* var55 /* : String */;
1466 val* var56 /* : Array[Object] */;
1467 long var57 /* : Int */;
1468 val* var58 /* : NativeArray[Object] */;
1469 val* var59 /* : String */;
1470 static val* varonce60;
1471 val* var61 /* : String */;
1472 char* var62 /* : NativeString */;
1473 long var63 /* : Int */;
1474 val* var64 /* : String */;
1475 static val* varonce65;
1476 val* var66 /* : String */;
1477 char* var67 /* : NativeString */;
1478 long var68 /* : Int */;
1479 val* var69 /* : String */;
1480 val* var70 /* : Array[Object] */;
1481 long var71 /* : Int */;
1482 val* var72 /* : NativeArray[Object] */;
1483 val* var73 /* : String */;
1484 val* var74 /* : nullable Layout[MClass] */;
1485 val* var75 /* : Map[Object, Int] */;
1486 val* var76 /* : nullable Object */;
1487 static val* varonce77;
1488 val* var78 /* : String */;
1489 char* var79 /* : NativeString */;
1490 long var80 /* : Int */;
1491 val* var81 /* : String */;
1492 val* var82 /* : Array[Object] */;
1493 long var83 /* : Int */;
1494 val* var84 /* : NativeArray[Object] */;
1495 val* var85 /* : String */;
1496 static val* varonce86;
1497 val* var87 /* : String */;
1498 char* var88 /* : NativeString */;
1499 long var89 /* : Int */;
1500 val* var90 /* : String */;
1501 val* var91 /* : String */;
1502 static val* varonce92;
1503 val* var93 /* : String */;
1504 char* var94 /* : NativeString */;
1505 long var95 /* : Int */;
1506 val* var96 /* : String */;
1507 val* var97 /* : Array[Object] */;
1508 long var98 /* : Int */;
1509 val* var99 /* : NativeArray[Object] */;
1510 val* var100 /* : String */;
1511 long var101 /* : Int */;
1512 static val* varonce102;
1513 val* var103 /* : String */;
1514 char* var104 /* : NativeString */;
1515 long var105 /* : Int */;
1516 val* var106 /* : String */;
1517 val* var107 /* : Array[Object] */;
1518 long var108 /* : Int */;
1519 val* var109 /* : NativeArray[Object] */;
1520 val* var110 /* : Object */;
1521 val* var111 /* : String */;
1522 val* var112 /* : nullable Layout[MClass] */;
1523 val* var_layout /* var layout: nullable Layout[MClass] */;
1524 short int var113 /* : Bool */;
1525 int cltype;
1526 int idtype;
1527 val* var114 /* : Map[Object, Int] */;
1528 val* var115 /* : nullable Object */;
1529 static val* varonce116;
1530 val* var117 /* : String */;
1531 char* var118 /* : NativeString */;
1532 long var119 /* : Int */;
1533 val* var120 /* : String */;
1534 val* var121 /* : Array[Object] */;
1535 long var122 /* : Int */;
1536 val* var123 /* : NativeArray[Object] */;
1537 val* var124 /* : String */;
1538 val* var125 /* : Map[Object, Int] */;
1539 val* var126 /* : nullable Object */;
1540 static val* varonce127;
1541 val* var128 /* : String */;
1542 char* var129 /* : NativeString */;
1543 long var130 /* : Int */;
1544 val* var131 /* : String */;
1545 val* var132 /* : Array[Object] */;
1546 long var133 /* : Int */;
1547 val* var134 /* : NativeArray[Object] */;
1548 val* var135 /* : String */;
1549 short int var136 /* : Bool */;
1550 static val* varonce137;
1551 val* var138 /* : String */;
1552 char* var139 /* : NativeString */;
1553 long var140 /* : Int */;
1554 val* var141 /* : String */;
1555 val* var142 /* : Array[Object] */;
1556 long var143 /* : Int */;
1557 val* var144 /* : NativeArray[Object] */;
1558 val* var145 /* : String */;
1559 static val* varonce146;
1560 val* var147 /* : String */;
1561 char* var148 /* : NativeString */;
1562 long var149 /* : Int */;
1563 val* var150 /* : String */;
1564 static val* varonce151;
1565 val* var152 /* : String */;
1566 char* var153 /* : NativeString */;
1567 long var154 /* : Int */;
1568 val* var155 /* : String */;
1569 val* var156 /* : Array[Object] */;
1570 long var157 /* : Int */;
1571 val* var158 /* : NativeArray[Object] */;
1572 val* var159 /* : String */;
1573 static val* varonce160;
1574 val* var161 /* : String */;
1575 char* var162 /* : NativeString */;
1576 long var163 /* : Int */;
1577 val* var164 /* : String */;
1578 static val* varonce165;
1579 val* var166 /* : String */;
1580 char* var167 /* : NativeString */;
1581 long var168 /* : Int */;
1582 val* var169 /* : String */;
1583 static val* varonce170;
1584 val* var171 /* : String */;
1585 char* var172 /* : NativeString */;
1586 long var173 /* : Int */;
1587 val* var174 /* : String */;
1588 val* var175 /* : Array[Object] */;
1589 long var176 /* : Int */;
1590 val* var177 /* : NativeArray[Object] */;
1591 val* var178 /* : String */;
1592 static val* varonce179;
1593 val* var180 /* : String */;
1594 char* var181 /* : NativeString */;
1595 long var182 /* : Int */;
1596 val* var183 /* : String */;
1597 val* var184 /* : Range[Int] */;
1598 long var185 /* : Int */;
1599 long var186 /* : Int */;
1600 val* var187 /* : Discrete */;
1601 val* var188 /* : Discrete */;
1602 val* var189 /* : Iterator[nullable Object] */;
1603 short int var190 /* : Bool */;
1604 val* var191 /* : nullable Object */;
1605 long var_i /* var i: Int */;
1606 long var192 /* : Int */;
1607 val* var193 /* : nullable Object */;
1608 val* var_mpropdef /* var mpropdef: nullable MPropDef */;
1609 val* var194 /* : null */;
1610 short int var195 /* : Bool */;
1611 static val* varonce196;
1612 val* var197 /* : String */;
1613 char* var198 /* : NativeString */;
1614 long var199 /* : Int */;
1615 val* var200 /* : String */;
1616 short int var201 /* : Bool */;
1617 short int var202 /* : Bool */;
1618 short int var_ /* var : Bool */;
1619 val* var203 /* : MClassDef */;
1620 val* var204 /* : MClassType */;
1621 val* var205 /* : String */;
1622 static val* varonce206;
1623 val* var207 /* : String */;
1624 char* var208 /* : NativeString */;
1625 long var209 /* : Int */;
1626 val* var210 /* : String */;
1627 short int var211 /* : Bool */;
1628 static val* varonce212;
1629 val* var213 /* : String */;
1630 char* var214 /* : NativeString */;
1631 long var215 /* : Int */;
1632 val* var216 /* : String */;
1633 val* var217 /* : String */;
1634 val* var218 /* : Array[Object] */;
1635 long var219 /* : Int */;
1636 val* var220 /* : NativeArray[Object] */;
1637 val* var221 /* : String */;
1638 static val* varonce222;
1639 val* var223 /* : String */;
1640 char* var224 /* : NativeString */;
1641 long var225 /* : Int */;
1642 val* var226 /* : String */;
1643 val* var227 /* : String */;
1644 static val* varonce228;
1645 val* var229 /* : String */;
1646 char* var230 /* : NativeString */;
1647 long var231 /* : Int */;
1648 val* var232 /* : String */;
1649 val* var233 /* : MModule */;
1650 static val* varonce234;
1651 val* var235 /* : String */;
1652 char* var236 /* : NativeString */;
1653 long var237 /* : Int */;
1654 val* var238 /* : String */;
1655 static val* varonce239;
1656 val* var240 /* : String */;
1657 char* var241 /* : NativeString */;
1658 long var242 /* : Int */;
1659 val* var243 /* : String */;
1660 static val* varonce244;
1661 val* var245 /* : String */;
1662 char* var246 /* : NativeString */;
1663 long var247 /* : Int */;
1664 val* var248 /* : String */;
1665 val* var249 /* : Array[Object] */;
1666 long var250 /* : Int */;
1667 val* var251 /* : NativeArray[Object] */;
1668 val* var252 /* : String */;
1669 val* var253 /* : String */;
1670 val* var254 /* : Array[Object] */;
1671 long var255 /* : Int */;
1672 val* var256 /* : NativeArray[Object] */;
1673 val* var257 /* : String */;
1674 static val* varonce258;
1675 val* var259 /* : String */;
1676 char* var260 /* : NativeString */;
1677 long var261 /* : Int */;
1678 val* var262 /* : String */;
1679 val* var263 /* : String */;
1680 static val* varonce264;
1681 val* var265 /* : String */;
1682 char* var266 /* : NativeString */;
1683 long var267 /* : Int */;
1684 val* var268 /* : String */;
1685 val* var269 /* : MModule */;
1686 static val* varonce270;
1687 val* var271 /* : String */;
1688 char* var272 /* : NativeString */;
1689 long var273 /* : Int */;
1690 val* var274 /* : String */;
1691 static val* varonce275;
1692 val* var276 /* : String */;
1693 char* var277 /* : NativeString */;
1694 long var278 /* : Int */;
1695 val* var279 /* : String */;
1696 static val* varonce280;
1697 val* var281 /* : String */;
1698 char* var282 /* : NativeString */;
1699 long var283 /* : Int */;
1700 val* var284 /* : String */;
1701 val* var285 /* : Array[Object] */;
1702 long var286 /* : Int */;
1703 val* var287 /* : NativeArray[Object] */;
1704 val* var288 /* : String */;
1705 static val* varonce289;
1706 val* var290 /* : String */;
1707 char* var291 /* : NativeString */;
1708 long var292 /* : Int */;
1709 val* var293 /* : String */;
1710 static val* varonce294;
1711 val* var295 /* : String */;
1712 char* var296 /* : NativeString */;
1713 long var297 /* : Int */;
1714 val* var298 /* : String */;
1715 static val* varonce299;
1716 val* var300 /* : String */;
1717 char* var301 /* : NativeString */;
1718 long var302 /* : Int */;
1719 val* var303 /* : String */;
1720 static val* varonce304;
1721 val* var305 /* : String */;
1722 char* var306 /* : NativeString */;
1723 long var307 /* : Int */;
1724 val* var308 /* : String */;
1725 val* var309 /* : Array[Object] */;
1726 long var310 /* : Int */;
1727 val* var311 /* : NativeArray[Object] */;
1728 val* var312 /* : String */;
1729 long var313 /* : Int */;
1730 static val* varonce314;
1731 val* var315 /* : String */;
1732 char* var316 /* : NativeString */;
1733 long var317 /* : Int */;
1734 val* var318 /* : String */;
1735 val* var319 /* : Array[Object] */;
1736 long var320 /* : Int */;
1737 val* var321 /* : NativeArray[Object] */;
1738 val* var322 /* : Object */;
1739 val* var323 /* : String */;
1740 static val* varonce324;
1741 val* var325 /* : String */;
1742 char* var326 /* : NativeString */;
1743 long var327 /* : Int */;
1744 val* var328 /* : String */;
1745 val* var329 /* : Iterator[nullable Object] */;
1746 short int var330 /* : Bool */;
1747 val* var331 /* : nullable Object */;
1748 val* var_msuper /* var msuper: nullable MClass */;
1749 val* var332 /* : null */;
1750 short int var333 /* : Bool */;
1751 static val* varonce334;
1752 val* var335 /* : String */;
1753 char* var336 /* : NativeString */;
1754 long var337 /* : Int */;
1755 val* var338 /* : String */;
1756 val* var339 /* : nullable Layout[MClass] */;
1757 val* var340 /* : Map[Object, Int] */;
1758 val* var341 /* : nullable Object */;
1759 static val* varonce342;
1760 val* var343 /* : String */;
1761 char* var344 /* : NativeString */;
1762 long var345 /* : Int */;
1763 val* var346 /* : String */;
1764 static val* varonce347;
1765 val* var348 /* : String */;
1766 char* var349 /* : NativeString */;
1767 long var350 /* : Int */;
1768 val* var351 /* : String */;
1769 val* var352 /* : Array[Object] */;
1770 long var353 /* : Int */;
1771 val* var354 /* : NativeArray[Object] */;
1772 val* var355 /* : String */;
1773 static val* varonce357;
1774 val* var358 /* : String */;
1775 char* var359 /* : NativeString */;
1776 long var360 /* : Int */;
1777 val* var361 /* : String */;
1778 static val* varonce362;
1779 val* var363 /* : String */;
1780 char* var364 /* : NativeString */;
1781 long var365 /* : Int */;
1782 val* var366 /* : String */;
1783 val* var367 /* : String */;
1784 static val* varonce368;
1785 val* var369 /* : String */;
1786 char* var370 /* : NativeString */;
1787 long var371 /* : Int */;
1788 val* var372 /* : String */;
1789 short int var373 /* : Bool */;
1790 val* var374 /* : CodeWriter */;
1791 static val* varonce375;
1792 val* var376 /* : String */;
1793 char* var377 /* : NativeString */;
1794 long var378 /* : Int */;
1795 val* var379 /* : String */;
1796 static val* varonce380;
1797 val* var381 /* : String */;
1798 char* var382 /* : NativeString */;
1799 long var383 /* : Int */;
1800 val* var384 /* : String */;
1801 val* var385 /* : Array[Object] */;
1802 long var386 /* : Int */;
1803 val* var387 /* : NativeArray[Object] */;
1804 val* var388 /* : String */;
1805 val* var389 /* : CodeWriter */;
1806 static val* varonce390;
1807 val* var391 /* : String */;
1808 char* var392 /* : NativeString */;
1809 long var393 /* : Int */;
1810 val* var394 /* : String */;
1811 val* var395 /* : CodeWriter */;
1812 val* var396 /* : String */;
1813 static val* varonce397;
1814 val* var398 /* : String */;
1815 char* var399 /* : NativeString */;
1816 long var400 /* : Int */;
1817 val* var401 /* : String */;
1818 val* var402 /* : Array[Object] */;
1819 long var403 /* : Int */;
1820 val* var404 /* : NativeArray[Object] */;
1821 val* var405 /* : String */;
1822 val* var406 /* : CodeWriter */;
1823 static val* varonce407;
1824 val* var408 /* : String */;
1825 char* var409 /* : NativeString */;
1826 long var410 /* : Int */;
1827 val* var411 /* : String */;
1828 val* var412 /* : CodeWriter */;
1829 static val* varonce413;
1830 val* var414 /* : String */;
1831 char* var415 /* : NativeString */;
1832 long var416 /* : Int */;
1833 val* var417 /* : String */;
1834 static val* varonce418;
1835 val* var419 /* : String */;
1836 char* var420 /* : NativeString */;
1837 long var421 /* : Int */;
1838 val* var422 /* : String */;
1839 val* var423 /* : String */;
1840 static val* varonce424;
1841 val* var425 /* : String */;
1842 char* var426 /* : NativeString */;
1843 long var427 /* : Int */;
1844 val* var428 /* : String */;
1845 val* var429 /* : Array[Object] */;
1846 long var430 /* : Int */;
1847 val* var431 /* : NativeArray[Object] */;
1848 val* var432 /* : String */;
1849 static val* varonce433;
1850 val* var434 /* : String */;
1851 char* var435 /* : NativeString */;
1852 long var436 /* : Int */;
1853 val* var437 /* : String */;
1854 static val* varonce438;
1855 val* var439 /* : String */;
1856 char* var440 /* : NativeString */;
1857 long var441 /* : Int */;
1858 val* var442 /* : String */;
1859 val* var443 /* : Array[Object] */;
1860 long var444 /* : Int */;
1861 val* var445 /* : NativeArray[Object] */;
1862 val* var446 /* : String */;
1863 static val* varonce447;
1864 val* var448 /* : String */;
1865 char* var449 /* : NativeString */;
1866 long var450 /* : Int */;
1867 val* var451 /* : String */;
1868 val* var452 /* : String */;
1869 static val* varonce453;
1870 val* var454 /* : String */;
1871 char* var455 /* : NativeString */;
1872 long var456 /* : Int */;
1873 val* var457 /* : String */;
1874 val* var458 /* : String */;
1875 static val* varonce459;
1876 val* var460 /* : String */;
1877 char* var461 /* : NativeString */;
1878 long var462 /* : Int */;
1879 val* var463 /* : String */;
1880 val* var464 /* : Array[Object] */;
1881 long var465 /* : Int */;
1882 val* var466 /* : NativeArray[Object] */;
1883 val* var467 /* : String */;
1884 static val* varonce468;
1885 val* var469 /* : String */;
1886 char* var470 /* : NativeString */;
1887 long var471 /* : Int */;
1888 val* var472 /* : String */;
1889 static val* varonce473;
1890 val* var474 /* : String */;
1891 char* var475 /* : NativeString */;
1892 long var476 /* : Int */;
1893 val* var477 /* : String */;
1894 static val* varonce478;
1895 val* var479 /* : String */;
1896 char* var480 /* : NativeString */;
1897 long var481 /* : Int */;
1898 val* var482 /* : String */;
1899 val* var483 /* : Array[Object] */;
1900 long var484 /* : Int */;
1901 val* var485 /* : NativeArray[Object] */;
1902 val* var486 /* : String */;
1903 static val* varonce487;
1904 val* var488 /* : String */;
1905 char* var489 /* : NativeString */;
1906 long var490 /* : Int */;
1907 val* var491 /* : String */;
1908 val* var492 /* : Array[Object] */;
1909 long var493 /* : Int */;
1910 val* var494 /* : NativeArray[Object] */;
1911 val* var495 /* : String */;
1912 static val* varonce496;
1913 val* var497 /* : String */;
1914 char* var498 /* : NativeString */;
1915 long var499 /* : Int */;
1916 val* var500 /* : String */;
1917 static val* varonce501;
1918 val* var502 /* : String */;
1919 char* var503 /* : NativeString */;
1920 long var504 /* : Int */;
1921 val* var505 /* : String */;
1922 val* var506 /* : Array[Object] */;
1923 long var507 /* : Int */;
1924 val* var508 /* : NativeArray[Object] */;
1925 val* var509 /* : String */;
1926 static val* varonce510;
1927 val* var511 /* : String */;
1928 char* var512 /* : NativeString */;
1929 long var513 /* : Int */;
1930 val* var514 /* : String */;
1931 static val* varonce515;
1932 val* var516 /* : String */;
1933 char* var517 /* : NativeString */;
1934 long var518 /* : Int */;
1935 val* var519 /* : String */;
1936 static val* varonce520;
1937 val* var521 /* : String */;
1938 char* var522 /* : NativeString */;
1939 long var523 /* : Int */;
1940 val* var524 /* : String */;
1941 val* var525 /* : String */;
1942 static val* varonce526;
1943 val* var527 /* : String */;
1944 char* var528 /* : NativeString */;
1945 long var529 /* : Int */;
1946 val* var530 /* : String */;
1947 short int var531 /* : Bool */;
1948 val* var532 /* : CodeWriter */;
1949 static val* varonce533;
1950 val* var534 /* : String */;
1951 char* var535 /* : NativeString */;
1952 long var536 /* : Int */;
1953 val* var537 /* : String */;
1954 static val* varonce538;
1955 val* var539 /* : String */;
1956 char* var540 /* : NativeString */;
1957 long var541 /* : Int */;
1958 val* var542 /* : String */;
1959 val* var543 /* : Array[Object] */;
1960 long var544 /* : Int */;
1961 val* var545 /* : NativeArray[Object] */;
1962 val* var546 /* : String */;
1963 val* var547 /* : CodeWriter */;
1964 static val* varonce548;
1965 val* var549 /* : String */;
1966 char* var550 /* : NativeString */;
1967 long var551 /* : Int */;
1968 val* var552 /* : String */;
1969 val* var553 /* : CodeWriter */;
1970 static val* varonce554;
1971 val* var555 /* : String */;
1972 char* var556 /* : NativeString */;
1973 long var557 /* : Int */;
1974 val* var558 /* : String */;
1975 val* var559 /* : CodeWriter */;
1976 static val* varonce560;
1977 val* var561 /* : String */;
1978 char* var562 /* : NativeString */;
1979 long var563 /* : Int */;
1980 val* var564 /* : String */;
1981 static val* varonce565;
1982 val* var566 /* : String */;
1983 char* var567 /* : NativeString */;
1984 long var568 /* : Int */;
1985 val* var569 /* : String */;
1986 val* var570 /* : Array[Object] */;
1987 long var571 /* : Int */;
1988 val* var572 /* : NativeArray[Object] */;
1989 val* var573 /* : String */;
1990 val* var574 /* : String */;
1991 static val* varonce575;
1992 val* var576 /* : String */;
1993 char* var577 /* : NativeString */;
1994 long var578 /* : Int */;
1995 val* var579 /* : String */;
1996 static val* varonce580;
1997 val* var581 /* : String */;
1998 char* var582 /* : NativeString */;
1999 long var583 /* : Int */;
2000 val* var584 /* : String */;
2001 val* var585 /* : Array[Object] */;
2002 long var586 /* : Int */;
2003 val* var587 /* : NativeArray[Object] */;
2004 val* var588 /* : String */;
2005 static val* varonce589;
2006 val* var590 /* : String */;
2007 char* var591 /* : NativeString */;
2008 long var592 /* : Int */;
2009 val* var593 /* : String */;
2010 static val* varonce594;
2011 val* var595 /* : String */;
2012 char* var596 /* : NativeString */;
2013 long var597 /* : Int */;
2014 val* var598 /* : String */;
2015 val* var599 /* : Array[Object] */;
2016 long var600 /* : Int */;
2017 val* var601 /* : NativeArray[Object] */;
2018 val* var602 /* : String */;
2019 val* var603 /* : String */;
2020 static val* varonce604;
2021 val* var605 /* : String */;
2022 char* var606 /* : NativeString */;
2023 long var607 /* : Int */;
2024 val* var608 /* : String */;
2025 static val* varonce609;
2026 val* var610 /* : String */;
2027 char* var611 /* : NativeString */;
2028 long var612 /* : Int */;
2029 val* var613 /* : String */;
2030 val* var614 /* : Array[Object] */;
2031 long var615 /* : Int */;
2032 val* var616 /* : NativeArray[Object] */;
2033 val* var617 /* : String */;
2034 static val* varonce618;
2035 val* var619 /* : String */;
2036 char* var620 /* : NativeString */;
2037 long var621 /* : Int */;
2038 val* var622 /* : String */;
2039 val* var623 /* : RuntimeVariable */;
2040 val* var_res /* var res: RuntimeVariable */;
2041 short int var624 /* : Bool */;
2042 val* var625 /* : Array[MType] */;
2043 val* var626 /* : nullable Object */;
2044 val* var_mtype_elt /* var mtype_elt: MType */;
2045 static val* varonce627;
2046 val* var628 /* : String */;
2047 char* var629 /* : NativeString */;
2048 long var630 /* : Int */;
2049 val* var631 /* : String */;
2050 static val* varonce632;
2051 val* var633 /* : String */;
2052 char* var634 /* : NativeString */;
2053 long var635 /* : Int */;
2054 val* var636 /* : String */;
2055 val* var637 /* : String */;
2056 static val* varonce638;
2057 val* var639 /* : String */;
2058 char* var640 /* : NativeString */;
2059 long var641 /* : Int */;
2060 val* var642 /* : String */;
2061 val* var643 /* : Array[Object] */;
2062 long var644 /* : Int */;
2063 val* var645 /* : NativeArray[Object] */;
2064 val* var646 /* : String */;
2065 static val* varonce647;
2066 val* var648 /* : String */;
2067 char* var649 /* : NativeString */;
2068 long var650 /* : Int */;
2069 val* var651 /* : String */;
2070 val* var652 /* : Array[Object] */;
2071 long var653 /* : Int */;
2072 val* var654 /* : NativeArray[Object] */;
2073 val* var655 /* : String */;
2074 static val* varonce656;
2075 val* var657 /* : String */;
2076 char* var658 /* : NativeString */;
2077 long var659 /* : Int */;
2078 val* var660 /* : String */;
2079 static val* varonce661;
2080 val* var662 /* : String */;
2081 char* var663 /* : NativeString */;
2082 long var664 /* : Int */;
2083 val* var665 /* : String */;
2084 val* var666 /* : Array[Object] */;
2085 long var667 /* : Int */;
2086 val* var668 /* : NativeArray[Object] */;
2087 val* var669 /* : String */;
2088 static val* varonce670;
2089 val* var671 /* : String */;
2090 char* var672 /* : NativeString */;
2091 long var673 /* : Int */;
2092 val* var674 /* : String */;
2093 static val* varonce675;
2094 val* var676 /* : String */;
2095 char* var677 /* : NativeString */;
2096 long var678 /* : Int */;
2097 val* var679 /* : String */;
2098 val* var680 /* : Array[Object] */;
2099 long var681 /* : Int */;
2100 val* var682 /* : NativeArray[Object] */;
2101 val* var683 /* : String */;
2102 static val* varonce684;
2103 val* var685 /* : String */;
2104 char* var686 /* : NativeString */;
2105 long var687 /* : Int */;
2106 val* var688 /* : String */;
2107 static val* varonce689;
2108 val* var690 /* : String */;
2109 char* var691 /* : NativeString */;
2110 long var692 /* : Int */;
2111 val* var693 /* : String */;
2112 val* var694 /* : Array[Object] */;
2113 long var695 /* : Int */;
2114 val* var696 /* : NativeArray[Object] */;
2115 val* var697 /* : String */;
2116 val* var698 /* : String */;
2117 static val* varonce699;
2118 val* var700 /* : String */;
2119 char* var701 /* : NativeString */;
2120 long var702 /* : Int */;
2121 val* var703 /* : String */;
2122 static val* varonce704;
2123 val* var705 /* : String */;
2124 char* var706 /* : NativeString */;
2125 long var707 /* : Int */;
2126 val* var708 /* : String */;
2127 val* var709 /* : Array[Object] */;
2128 long var710 /* : Int */;
2129 val* var711 /* : NativeArray[Object] */;
2130 val* var712 /* : String */;
2131 static val* varonce713;
2132 val* var714 /* : String */;
2133 char* var715 /* : NativeString */;
2134 long var716 /* : Int */;
2135 val* var717 /* : String */;
2136 static val* varonce718;
2137 val* var719 /* : String */;
2138 char* var720 /* : NativeString */;
2139 long var721 /* : Int */;
2140 val* var722 /* : String */;
2141 val* var723 /* : Array[Object] */;
2142 long var724 /* : Int */;
2143 val* var725 /* : NativeArray[Object] */;
2144 val* var726 /* : String */;
2145 val* var727 /* : String */;
2146 static val* varonce728;
2147 val* var729 /* : String */;
2148 char* var730 /* : NativeString */;
2149 long var731 /* : Int */;
2150 val* var732 /* : String */;
2151 static val* varonce733;
2152 val* var734 /* : String */;
2153 char* var735 /* : NativeString */;
2154 long var736 /* : Int */;
2155 val* var737 /* : String */;
2156 val* var738 /* : Array[Object] */;
2157 long var739 /* : Int */;
2158 val* var740 /* : NativeArray[Object] */;
2159 val* var741 /* : String */;
2160 static val* varonce742;
2161 val* var743 /* : String */;
2162 char* var744 /* : NativeString */;
2163 long var745 /* : Int */;
2164 val* var746 /* : String */;
2165 val* var747 /* : RuntimeVariable */;
2166 val* var_res748 /* var res: RuntimeVariable */;
2167 short int var749 /* : Bool */;
2168 static val* varonce750;
2169 val* var751 /* : String */;
2170 char* var752 /* : NativeString */;
2171 long var753 /* : Int */;
2172 val* var754 /* : String */;
2173 long var755 /* : Int */;
2174 static val* varonce756;
2175 val* var757 /* : String */;
2176 char* var758 /* : NativeString */;
2177 long var759 /* : Int */;
2178 val* var760 /* : String */;
2179 val* var761 /* : Array[Object] */;
2180 long var762 /* : Int */;
2181 val* var763 /* : NativeArray[Object] */;
2182 val* var764 /* : Object */;
2183 val* var765 /* : String */;
2184 static val* varonce766;
2185 val* var767 /* : String */;
2186 char* var768 /* : NativeString */;
2187 long var769 /* : Int */;
2188 val* var770 /* : String */;
2189 val* var771 /* : Array[Object] */;
2190 long var772 /* : Int */;
2191 val* var773 /* : NativeArray[Object] */;
2192 val* var774 /* : String */;
2193 static val* varonce775;
2194 val* var776 /* : String */;
2195 char* var777 /* : NativeString */;
2196 long var778 /* : Int */;
2197 val* var779 /* : String */;
2198 static val* varonce780;
2199 val* var781 /* : String */;
2200 char* var782 /* : NativeString */;
2201 long var783 /* : Int */;
2202 val* var784 /* : String */;
2203 val* var785 /* : Array[Object] */;
2204 long var786 /* : Int */;
2205 val* var787 /* : NativeArray[Object] */;
2206 val* var788 /* : String */;
2207 static val* varonce789;
2208 val* var790 /* : String */;
2209 char* var791 /* : NativeString */;
2210 long var792 /* : Int */;
2211 val* var793 /* : String */;
2212 static val* varonce794;
2213 val* var795 /* : String */;
2214 char* var796 /* : NativeString */;
2215 long var797 /* : Int */;
2216 val* var798 /* : String */;
2217 val* var799 /* : Array[Object] */;
2218 long var800 /* : Int */;
2219 val* var801 /* : NativeArray[Object] */;
2220 val* var802 /* : String */;
2221 static val* varonce803;
2222 val* var804 /* : String */;
2223 char* var805 /* : NativeString */;
2224 long var806 /* : Int */;
2225 val* var807 /* : String */;
2226 var_mclass = p0;
2227 var = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
2228 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model__MClassDef__bound_mtype]))(var) /* bound_mtype on <var:MClassDef>*/;
2229 var_mtype = var1;
2230 var2 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
2231 var_c_name = var2;
2232 var3 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateErasureCompiler>*/;
2233 var4 = ((val* (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var3, var_mclass) /* [] on <var3:Map[MClass, Array[nullable MPropDef]]>*/;
2234 var_vft = var4;
2235 var5 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateErasureCompiler>*/;
2236 var6 = ((val* (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var5, var_mclass) /* [] on <var5:Map[MClass, Array[nullable MPropDef]]>*/;
2237 var_attrs = var6;
2238 var7 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables]))(self) /* class_tables on <self:SeparateErasureCompiler>*/;
2239 var8 = ((val* (*)(val*, val*))(var7->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var7, var_mclass) /* [] on <var7:Map[MClass, Array[nullable MClass]]>*/;
2240 var_class_table = var8;
2241 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateErasureCompiler>*/;
2242 var_v = var9;
2243 if (varonce) {
2244 var10 = varonce;
2245 } else {
2246 var11 = "/* runtime class ";
2247 var12 = 17;
2248 var13 = string__NativeString__to_s_with_length(var11, var12);
2249 var10 = var13;
2250 varonce = var10;
2251 }
2252 if (varonce14) {
2253 var15 = varonce14;
2254 } else {
2255 var16 = " */";
2256 var17 = 3;
2257 var18 = string__NativeString__to_s_with_length(var16, var17);
2258 var15 = var18;
2259 varonce14 = var15;
2260 }
2261 var19 = NEW_array__Array(&type_array__Arraykernel__Object);
2262 { /* var19 = array_instance Array[Object] */
2263 var20 = 3;
2264 var21 = NEW_array__NativeArray(var20, &type_array__NativeArraykernel__Object);
2265 ((struct instance_array__NativeArray*)var21)->values[0] = (val*) var10;
2266 ((struct instance_array__NativeArray*)var21)->values[1] = (val*) var_c_name;
2267 ((struct instance_array__NativeArray*)var21)->values[2] = (val*) var15;
2268 ((void (*)(val*, val*, long))(var19->class->vft[COLOR_array__Array__with_native]))(var19, var21, var20) /* with_native on <var19:Array[Object]>*/;
2269 CHECK_NEW_array__Array(var19);
2270 }
2271 var22 = ((val* (*)(val*))(var19->class->vft[COLOR_string__Object__to_s]))(var19) /* to_s on <var19:Array[Object]>*/;
2272 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var22) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2273 if (varonce23) {
2274 var24 = varonce23;
2275 } else {
2276 var25 = "class_";
2277 var26 = 6;
2278 var27 = string__NativeString__to_s_with_length(var25, var26);
2279 var24 = var27;
2280 varonce23 = var24;
2281 }
2282 var28 = NEW_array__Array(&type_array__Arraykernel__Object);
2283 { /* var28 = array_instance Array[Object] */
2284 var29 = 2;
2285 var30 = NEW_array__NativeArray(var29, &type_array__NativeArraykernel__Object);
2286 ((struct instance_array__NativeArray*)var30)->values[0] = (val*) var24;
2287 ((struct instance_array__NativeArray*)var30)->values[1] = (val*) var_c_name;
2288 ((void (*)(val*, val*, long))(var28->class->vft[COLOR_array__Array__with_native]))(var28, var30, var29) /* with_native on <var28:Array[Object]>*/;
2289 CHECK_NEW_array__Array(var28);
2290 }
2291 var31 = ((val* (*)(val*))(var28->class->vft[COLOR_string__Object__to_s]))(var28) /* to_s on <var28:Array[Object]>*/;
2292 if (varonce32) {
2293 var33 = varonce32;
2294 } else {
2295 var34 = "extern const struct class class_";
2296 var35 = 32;
2297 var36 = string__NativeString__to_s_with_length(var34, var35);
2298 var33 = var36;
2299 varonce32 = var33;
2300 }
2301 if (varonce37) {
2302 var38 = varonce37;
2303 } else {
2304 var39 = ";";
2305 var40 = 1;
2306 var41 = string__NativeString__to_s_with_length(var39, var40);
2307 var38 = var41;
2308 varonce37 = var38;
2309 }
2310 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
2311 { /* var42 = array_instance Array[Object] */
2312 var43 = 3;
2313 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
2314 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var33;
2315 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_c_name;
2316 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var38;
2317 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
2318 CHECK_NEW_array__Array(var42);
2319 }
2320 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
2321 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var31, var45) /* provide_declaration on <self:SeparateErasureCompiler>*/;
2322 if (varonce46) {
2323 var47 = varonce46;
2324 } else {
2325 var48 = "extern const struct type_table type_table_";
2326 var49 = 42;
2327 var50 = string__NativeString__to_s_with_length(var48, var49);
2328 var47 = var50;
2329 varonce46 = var47;
2330 }
2331 if (varonce51) {
2332 var52 = varonce51;
2333 } else {
2334 var53 = ";";
2335 var54 = 1;
2336 var55 = string__NativeString__to_s_with_length(var53, var54);
2337 var52 = var55;
2338 varonce51 = var52;
2339 }
2340 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
2341 { /* var56 = array_instance Array[Object] */
2342 var57 = 3;
2343 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
2344 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var47;
2345 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var_c_name;
2346 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var52;
2347 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
2348 CHECK_NEW_array__Array(var56);
2349 }
2350 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
2351 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var59) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2352 if (varonce60) {
2353 var61 = varonce60;
2354 } else {
2355 var62 = "const struct class class_";
2356 var63 = 25;
2357 var64 = string__NativeString__to_s_with_length(var62, var63);
2358 var61 = var64;
2359 varonce60 = var61;
2360 }
2361 if (varonce65) {
2362 var66 = varonce65;
2363 } else {
2364 var67 = " = {";
2365 var68 = 4;
2366 var69 = string__NativeString__to_s_with_length(var67, var68);
2367 var66 = var69;
2368 varonce65 = var66;
2369 }
2370 var70 = NEW_array__Array(&type_array__Arraykernel__Object);
2371 { /* var70 = array_instance Array[Object] */
2372 var71 = 3;
2373 var72 = NEW_array__NativeArray(var71, &type_array__NativeArraykernel__Object);
2374 ((struct instance_array__NativeArray*)var72)->values[0] = (val*) var61;
2375 ((struct instance_array__NativeArray*)var72)->values[1] = (val*) var_c_name;
2376 ((struct instance_array__NativeArray*)var72)->values[2] = (val*) var66;
2377 ((void (*)(val*, val*, long))(var70->class->vft[COLOR_array__Array__with_native]))(var70, var72, var71) /* with_native on <var70:Array[Object]>*/;
2378 CHECK_NEW_array__Array(var70);
2379 }
2380 var73 = ((val* (*)(val*))(var70->class->vft[COLOR_string__Object__to_s]))(var70) /* to_s on <var70:Array[Object]>*/;
2381 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var73) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2382 var74 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2383 if (var74 == NULL) {
2384 fprintf(stderr, "Runtime error: %s", "Reciever is null");
2385 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 235);
2386 exit(1);
2387 } else {
2388 var75 = ((val* (*)(val*))(var74->class->vft[COLOR_layout_builders__Layout__ids]))(var74) /* ids on <var74:nullable Layout[MClass]>*/;
2389 }
2390 var76 = ((val* (*)(val*, val*))(var75->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var75, var_mclass) /* [] on <var75:Map[Object, Int](Map[MClass, Int])>*/;
2391 if (varonce77) {
2392 var78 = varonce77;
2393 } else {
2394 var79 = ",";
2395 var80 = 1;
2396 var81 = string__NativeString__to_s_with_length(var79, var80);
2397 var78 = var81;
2398 varonce77 = var78;
2399 }
2400 var82 = NEW_array__Array(&type_array__Arraykernel__Object);
2401 { /* var82 = array_instance Array[Object] */
2402 var83 = 2;
2403 var84 = NEW_array__NativeArray(var83, &type_array__NativeArraykernel__Object);
2404 ((struct instance_array__NativeArray*)var84)->values[0] = (val*) var76;
2405 ((struct instance_array__NativeArray*)var84)->values[1] = (val*) var78;
2406 ((void (*)(val*, val*, long))(var82->class->vft[COLOR_array__Array__with_native]))(var82, var84, var83) /* with_native on <var82:Array[Object]>*/;
2407 CHECK_NEW_array__Array(var82);
2408 }
2409 var85 = ((val* (*)(val*))(var82->class->vft[COLOR_string__Object__to_s]))(var82) /* to_s on <var82:Array[Object]>*/;
2410 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var85) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2411 if (varonce86) {
2412 var87 = varonce86;
2413 } else {
2414 var88 = "\"";
2415 var89 = 1;
2416 var90 = string__NativeString__to_s_with_length(var88, var89);
2417 var87 = var90;
2418 varonce86 = var87;
2419 }
2420 var91 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
2421 if (varonce92) {
2422 var93 = varonce92;
2423 } else {
2424 var94 = "\", /* class_name_string */";
2425 var95 = 26;
2426 var96 = string__NativeString__to_s_with_length(var94, var95);
2427 var93 = var96;
2428 varonce92 = var93;
2429 }
2430 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
2431 { /* var97 = array_instance Array[Object] */
2432 var98 = 3;
2433 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
2434 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var87;
2435 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var91;
2436 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
2437 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
2438 CHECK_NEW_array__Array(var97);
2439 }
2440 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
2441 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var100) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2442 var101 = ((long (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kind_of]))(self, var_mclass) /* box_kind_of on <self:SeparateErasureCompiler>*/;
2443 if (varonce102) {
2444 var103 = varonce102;
2445 } else {
2446 var104 = ", /* box_kind */";
2447 var105 = 16;
2448 var106 = string__NativeString__to_s_with_length(var104, var105);
2449 var103 = var106;
2450 varonce102 = var103;
2451 }
2452 var107 = NEW_array__Array(&type_array__Arraykernel__Object);
2453 { /* var107 = array_instance Array[Object] */
2454 var108 = 2;
2455 var109 = NEW_array__NativeArray(var108, &type_array__NativeArraykernel__Object);
2456 var110 = BOX_kernel__Int(var101); /* autobox from Int to Object */
2457 ((struct instance_array__NativeArray*)var109)->values[0] = (val*) var110;
2458 ((struct instance_array__NativeArray*)var109)->values[1] = (val*) var103;
2459 ((void (*)(val*, val*, long))(var107->class->vft[COLOR_array__Array__with_native]))(var107, var109, var108) /* with_native on <var107:Array[Object]>*/;
2460 CHECK_NEW_array__Array(var107);
2461 }
2462 var111 = ((val* (*)(val*))(var107->class->vft[COLOR_string__Object__to_s]))(var107) /* to_s on <var107:Array[Object]>*/;
2463 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var111) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2464 var112 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2465 var_layout = var112;
2466 /* <var_layout:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
2467 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
2468 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
2469 if(var_layout == NULL) {
2470 var113 = 0;
2471 } else {
2472 if(cltype >= var_layout->type->table_size) {
2473 var113 = 0;
2474 } else {
2475 var113 = var_layout->type->type_table[cltype] == idtype;
2476 }
2477 }
2478 if (var113){
2479 var114 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__masks]))(var_layout) /* masks on <var_layout:nullable Layout[MClass](PHLayout[MClass, MClass])>*/;
2480 var115 = ((val* (*)(val*, val*))(var114->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var114, var_mclass) /* [] on <var114:Map[Object, Int](Map[MClass, Int])>*/;
2481 if (varonce116) {
2482 var117 = varonce116;
2483 } else {
2484 var118 = ",";
2485 var119 = 1;
2486 var120 = string__NativeString__to_s_with_length(var118, var119);
2487 var117 = var120;
2488 varonce116 = var117;
2489 }
2490 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
2491 { /* var121 = array_instance Array[Object] */
2492 var122 = 2;
2493 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
2494 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var115;
2495 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var117;
2496 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
2497 CHECK_NEW_array__Array(var121);
2498 }
2499 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
2500 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var124) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2501 } else {
2502 if (var_layout == NULL) {
2503 fprintf(stderr, "Runtime error: %s", "Reciever is null");
2504 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 242);
2505 exit(1);
2506 } else {
2507 var125 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MClass]>*/;
2508 }
2509 var126 = ((val* (*)(val*, val*))(var125->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var125, var_mclass) /* [] on <var125:Map[Object, Int](Map[MClass, Int])>*/;
2510 if (varonce127) {
2511 var128 = varonce127;
2512 } else {
2513 var129 = ",";
2514 var130 = 1;
2515 var131 = string__NativeString__to_s_with_length(var129, var130);
2516 var128 = var131;
2517 varonce127 = var128;
2518 }
2519 var132 = NEW_array__Array(&type_array__Arraykernel__Object);
2520 { /* var132 = array_instance Array[Object] */
2521 var133 = 2;
2522 var134 = NEW_array__NativeArray(var133, &type_array__NativeArraykernel__Object);
2523 ((struct instance_array__NativeArray*)var134)->values[0] = (val*) var126;
2524 ((struct instance_array__NativeArray*)var134)->values[1] = (val*) var128;
2525 ((void (*)(val*, val*, long))(var132->class->vft[COLOR_array__Array__with_native]))(var132, var134, var133) /* with_native on <var132:Array[Object]>*/;
2526 CHECK_NEW_array__Array(var132);
2527 }
2528 var135 = ((val* (*)(val*))(var132->class->vft[COLOR_string__Object__to_s]))(var132) /* to_s on <var132:Array[Object]>*/;
2529 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var135) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2530 }
2531 var136 = ((short int (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table]))(self, var_mclass) /* build_class_vts_table on <self:SeparateErasureCompiler>*/;
2532 if (var136){
2533 if (varonce137) {
2534 var138 = varonce137;
2535 } else {
2536 var139 = "vts_table_";
2537 var140 = 10;
2538 var141 = string__NativeString__to_s_with_length(var139, var140);
2539 var138 = var141;
2540 varonce137 = var138;
2541 }
2542 var142 = NEW_array__Array(&type_array__Arraykernel__Object);
2543 { /* var142 = array_instance Array[Object] */
2544 var143 = 2;
2545 var144 = NEW_array__NativeArray(var143, &type_array__NativeArraykernel__Object);
2546 ((struct instance_array__NativeArray*)var144)->values[0] = (val*) var138;
2547 ((struct instance_array__NativeArray*)var144)->values[1] = (val*) var_c_name;
2548 ((void (*)(val*, val*, long))(var142->class->vft[COLOR_array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
2549 CHECK_NEW_array__Array(var142);
2550 }
2551 var145 = ((val* (*)(val*))(var142->class->vft[COLOR_string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
2552 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var145) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2553 if (varonce146) {
2554 var147 = varonce146;
2555 } else {
2556 var148 = "&vts_table_";
2557 var149 = 11;
2558 var150 = string__NativeString__to_s_with_length(var148, var149);
2559 var147 = var150;
2560 varonce146 = var147;
2561 }
2562 if (varonce151) {
2563 var152 = varonce151;
2564 } else {
2565 var153 = ",";
2566 var154 = 1;
2567 var155 = string__NativeString__to_s_with_length(var153, var154);
2568 var152 = var155;
2569 varonce151 = var152;
2570 }
2571 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
2572 { /* var156 = array_instance Array[Object] */
2573 var157 = 3;
2574 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
2575 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var147;
2576 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var_c_name;
2577 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var152;
2578 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
2579 CHECK_NEW_array__Array(var156);
2580 }
2581 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
2582 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var159) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2583 } else {
2584 if (varonce160) {
2585 var161 = varonce160;
2586 } else {
2587 var162 = "NULL,";
2588 var163 = 5;
2589 var164 = string__NativeString__to_s_with_length(var162, var163);
2590 var161 = var164;
2591 varonce160 = var161;
2592 }
2593 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var161) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2594 }
2595 if (varonce165) {
2596 var166 = varonce165;
2597 } else {
2598 var167 = "&type_table_";
2599 var168 = 12;
2600 var169 = string__NativeString__to_s_with_length(var167, var168);
2601 var166 = var169;
2602 varonce165 = var166;
2603 }
2604 if (varonce170) {
2605 var171 = varonce170;
2606 } else {
2607 var172 = ",";
2608 var173 = 1;
2609 var174 = string__NativeString__to_s_with_length(var172, var173);
2610 var171 = var174;
2611 varonce170 = var171;
2612 }
2613 var175 = NEW_array__Array(&type_array__Arraykernel__Object);
2614 { /* var175 = array_instance Array[Object] */
2615 var176 = 3;
2616 var177 = NEW_array__NativeArray(var176, &type_array__NativeArraykernel__Object);
2617 ((struct instance_array__NativeArray*)var177)->values[0] = (val*) var166;
2618 ((struct instance_array__NativeArray*)var177)->values[1] = (val*) var_c_name;
2619 ((struct instance_array__NativeArray*)var177)->values[2] = (val*) var171;
2620 ((void (*)(val*, val*, long))(var175->class->vft[COLOR_array__Array__with_native]))(var175, var177, var176) /* with_native on <var175:Array[Object]>*/;
2621 CHECK_NEW_array__Array(var175);
2622 }
2623 var178 = ((val* (*)(val*))(var175->class->vft[COLOR_string__Object__to_s]))(var175) /* to_s on <var175:Array[Object]>*/;
2624 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var178) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2625 if (varonce179) {
2626 var180 = varonce179;
2627 } else {
2628 var181 = "{";
2629 var182 = 1;
2630 var183 = string__NativeString__to_s_with_length(var181, var182);
2631 var180 = var183;
2632 varonce179 = var180;
2633 }
2634 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var180) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2635 var184 = NEW_range__Range(&type_range__Rangekernel__Int);
2636 var185 = 0;
2637 var186 = ((long (*)(val*))(var_vft->class->vft[COLOR_abstract_collection__Collection__length]))(var_vft) /* length on <var_vft:Array[nullable MPropDef]>*/;
2638 var187 = BOX_kernel__Int(var185); /* autobox from Int to Discrete */
2639 var188 = BOX_kernel__Int(var186); /* autobox from Int to Discrete */
2640 ((void (*)(val*, val*, val*))(var184->class->vft[COLOR_range__Range__without_last]))(var184, var187, var188) /* without_last on <var184:Range[Int]>*/;
2641 CHECK_NEW_range__Range(var184);
2642 var189 = ((val* (*)(val*))(var184->class->vft[COLOR_abstract_collection__Collection__iterator]))(var184) /* iterator on <var184:Range[Int]>*/;
2643 for(;;) {
2644 var190 = ((short int (*)(val*))(var189->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var189) /* is_ok on <var189:Iterator[nullable Object]>*/;
2645 if(!var190) break;
2646 var191 = ((val* (*)(val*))(var189->class->vft[COLOR_abstract_collection__Iterator__item]))(var189) /* item on <var189:Iterator[nullable Object]>*/;
2647 var192 = ((struct instance_kernel__Int*)var191)->value; /* autounbox from nullable Object to Int */;
2648 var_i = var192;
2649 var193 = ((val* (*)(val*, long))(var_vft->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_vft, var_i) /* [] on <var_vft:Array[nullable MPropDef]>*/;
2650 var_mpropdef = var193;
2651 var194 = NULL;
2652 if (var_mpropdef == NULL) {
2653 var195 = 1; /* is null */
2654 } else {
2655 var195 = 0; /* arg is null but recv is not */
2656 }
2657 if (var195){
2658 if (varonce196) {
2659 var197 = varonce196;
2660 } else {
2661 var198 = "NULL, /* empty */";
2662 var199 = 17;
2663 var200 = string__NativeString__to_s_with_length(var198, var199);
2664 var197 = var200;
2665 varonce196 = var197;
2666 }
2667 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var197) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2668 } else {
2669 var202 = 1;
2670 var_ = var202;
2671 if (var202){
2672 var201 = var_;
2673 } else {
2674 var203 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2675 var204 = ((val* (*)(val*))(var203->class->vft[COLOR_model__MClassDef__bound_mtype]))(var203) /* bound_mtype on <var203:MClassDef>*/;
2676 var205 = ((val* (*)(val*))(var204->class->vft[COLOR_abstract_compiler__MType__ctype]))(var204) /* ctype on <var204:MClassType>*/;
2677 if (varonce206) {
2678 var207 = varonce206;
2679 } else {
2680 var208 = "val*";
2681 var209 = 4;
2682 var210 = string__NativeString__to_s_with_length(var208, var209);
2683 var207 = var210;
2684 varonce206 = var207;
2685 }
2686 var211 = ((short int (*)(val*, val*))(var205->class->vft[COLOR_kernel__Object___33d_61d]))(var205, var207) /* != on <var205:String>*/;
2687 var201 = var211;
2688 }
2689 if (var201){
2690 if (varonce212) {
2691 var213 = varonce212;
2692 } else {
2693 var214 = "VIRTUAL_";
2694 var215 = 8;
2695 var216 = string__NativeString__to_s_with_length(var214, var215);
2696 var213 = var216;
2697 varonce212 = var213;
2698 }
2699 var217 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2700 var218 = NEW_array__Array(&type_array__Arraykernel__Object);
2701 { /* var218 = array_instance Array[Object] */
2702 var219 = 2;
2703 var220 = NEW_array__NativeArray(var219, &type_array__NativeArraykernel__Object);
2704 ((struct instance_array__NativeArray*)var220)->values[0] = (val*) var213;
2705 ((struct instance_array__NativeArray*)var220)->values[1] = (val*) var217;
2706 ((void (*)(val*, val*, long))(var218->class->vft[COLOR_array__Array__with_native]))(var218, var220, var219) /* with_native on <var218:Array[Object]>*/;
2707 CHECK_NEW_array__Array(var218);
2708 }
2709 var221 = ((val* (*)(val*))(var218->class->vft[COLOR_string__Object__to_s]))(var218) /* to_s on <var218:Array[Object]>*/;
2710 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var221) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2711 if (varonce222) {
2712 var223 = varonce222;
2713 } else {
2714 var224 = "(nitmethod_t)VIRTUAL_";
2715 var225 = 21;
2716 var226 = string__NativeString__to_s_with_length(var224, var225);
2717 var223 = var226;
2718 varonce222 = var223;
2719 }
2720 var227 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2721 if (varonce228) {
2722 var229 = varonce228;
2723 } else {
2724 var230 = ", /* pointer to ";
2725 var231 = 16;
2726 var232 = string__NativeString__to_s_with_length(var230, var231);
2727 var229 = var232;
2728 varonce228 = var229;
2729 }
2730 var233 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
2731 if (varonce234) {
2732 var235 = varonce234;
2733 } else {
2734 var236 = ":";
2735 var237 = 1;
2736 var238 = string__NativeString__to_s_with_length(var236, var237);
2737 var235 = var238;
2738 varonce234 = var235;
2739 }
2740 if (varonce239) {
2741 var240 = varonce239;
2742 } else {
2743 var241 = ":";
2744 var242 = 1;
2745 var243 = string__NativeString__to_s_with_length(var241, var242);
2746 var240 = var243;
2747 varonce239 = var240;
2748 }
2749 if (varonce244) {
2750 var245 = varonce244;
2751 } else {
2752 var246 = " */";
2753 var247 = 3;
2754 var248 = string__NativeString__to_s_with_length(var246, var247);
2755 var245 = var248;
2756 varonce244 = var245;
2757 }
2758 var249 = NEW_array__Array(&type_array__Arraykernel__Object);
2759 { /* var249 = array_instance Array[Object] */
2760 var250 = 9;
2761 var251 = NEW_array__NativeArray(var250, &type_array__NativeArraykernel__Object);
2762 ((struct instance_array__NativeArray*)var251)->values[0] = (val*) var223;
2763 ((struct instance_array__NativeArray*)var251)->values[1] = (val*) var227;
2764 ((struct instance_array__NativeArray*)var251)->values[2] = (val*) var229;
2765 ((struct instance_array__NativeArray*)var251)->values[3] = (val*) var233;
2766 ((struct instance_array__NativeArray*)var251)->values[4] = (val*) var235;
2767 ((struct instance_array__NativeArray*)var251)->values[5] = (val*) var_mclass;
2768 ((struct instance_array__NativeArray*)var251)->values[6] = (val*) var240;
2769 ((struct instance_array__NativeArray*)var251)->values[7] = (val*) var_mpropdef;
2770 ((struct instance_array__NativeArray*)var251)->values[8] = (val*) var245;
2771 ((void (*)(val*, val*, long))(var249->class->vft[COLOR_array__Array__with_native]))(var249, var251, var250) /* with_native on <var249:Array[Object]>*/;
2772 CHECK_NEW_array__Array(var249);
2773 }
2774 var252 = ((val* (*)(val*))(var249->class->vft[COLOR_string__Object__to_s]))(var249) /* to_s on <var249:Array[Object]>*/;
2775 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var252) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2776 } else {
2777 var253 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2778 var254 = NEW_array__Array(&type_array__Arraykernel__Object);
2779 { /* var254 = array_instance Array[Object] */
2780 var255 = 1;
2781 var256 = NEW_array__NativeArray(var255, &type_array__NativeArraykernel__Object);
2782 ((struct instance_array__NativeArray*)var256)->values[0] = (val*) var253;
2783 ((void (*)(val*, val*, long))(var254->class->vft[COLOR_array__Array__with_native]))(var254, var256, var255) /* with_native on <var254:Array[Object]>*/;
2784 CHECK_NEW_array__Array(var254);
2785 }
2786 var257 = ((val* (*)(val*))(var254->class->vft[COLOR_string__Object__to_s]))(var254) /* to_s on <var254:Array[Object]>*/;
2787 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var257) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2788 if (varonce258) {
2789 var259 = varonce258;
2790 } else {
2791 var260 = "(nitmethod_t)";
2792 var261 = 13;
2793 var262 = string__NativeString__to_s_with_length(var260, var261);
2794 var259 = var262;
2795 varonce258 = var259;
2796 }
2797 var263 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2798 if (varonce264) {
2799 var265 = varonce264;
2800 } else {
2801 var266 = ", /* pointer to ";
2802 var267 = 16;
2803 var268 = string__NativeString__to_s_with_length(var266, var267);
2804 var265 = var268;
2805 varonce264 = var265;
2806 }
2807 var269 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
2808 if (varonce270) {
2809 var271 = varonce270;
2810 } else {
2811 var272 = ":";
2812 var273 = 1;
2813 var274 = string__NativeString__to_s_with_length(var272, var273);
2814 var271 = var274;
2815 varonce270 = var271;
2816 }
2817 if (varonce275) {
2818 var276 = varonce275;
2819 } else {
2820 var277 = ":";
2821 var278 = 1;
2822 var279 = string__NativeString__to_s_with_length(var277, var278);
2823 var276 = var279;
2824 varonce275 = var276;
2825 }
2826 if (varonce280) {
2827 var281 = varonce280;
2828 } else {
2829 var282 = " */";
2830 var283 = 3;
2831 var284 = string__NativeString__to_s_with_length(var282, var283);
2832 var281 = var284;
2833 varonce280 = var281;
2834 }
2835 var285 = NEW_array__Array(&type_array__Arraykernel__Object);
2836 { /* var285 = array_instance Array[Object] */
2837 var286 = 9;
2838 var287 = NEW_array__NativeArray(var286, &type_array__NativeArraykernel__Object);
2839 ((struct instance_array__NativeArray*)var287)->values[0] = (val*) var259;
2840 ((struct instance_array__NativeArray*)var287)->values[1] = (val*) var263;
2841 ((struct instance_array__NativeArray*)var287)->values[2] = (val*) var265;
2842 ((struct instance_array__NativeArray*)var287)->values[3] = (val*) var269;
2843 ((struct instance_array__NativeArray*)var287)->values[4] = (val*) var271;
2844 ((struct instance_array__NativeArray*)var287)->values[5] = (val*) var_mclass;
2845 ((struct instance_array__NativeArray*)var287)->values[6] = (val*) var276;
2846 ((struct instance_array__NativeArray*)var287)->values[7] = (val*) var_mpropdef;
2847 ((struct instance_array__NativeArray*)var287)->values[8] = (val*) var281;
2848 ((void (*)(val*, val*, long))(var285->class->vft[COLOR_array__Array__with_native]))(var285, var287, var286) /* with_native on <var285:Array[Object]>*/;
2849 CHECK_NEW_array__Array(var285);
2850 }
2851 var288 = ((val* (*)(val*))(var285->class->vft[COLOR_string__Object__to_s]))(var285) /* to_s on <var285:Array[Object]>*/;
2852 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var288) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2853 }
2854 }
2855 CONTINUE_label: (void)0;
2856 ((void (*)(val*))(var189->class->vft[COLOR_abstract_collection__Iterator__next]))(var189) /* next on <var189:Iterator[nullable Object]>*/;
2857 }
2858 BREAK_label: (void)0;
2859 if (varonce289) {
2860 var290 = varonce289;
2861 } else {
2862 var291 = "}";
2863 var292 = 1;
2864 var293 = string__NativeString__to_s_with_length(var291, var292);
2865 var290 = var293;
2866 varonce289 = var290;
2867 }
2868 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var290) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2869 if (varonce294) {
2870 var295 = varonce294;
2871 } else {
2872 var296 = "};";
2873 var297 = 2;
2874 var298 = string__NativeString__to_s_with_length(var296, var297);
2875 var295 = var298;
2876 varonce294 = var295;
2877 }
2878 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var295) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2879 if (varonce299) {
2880 var300 = varonce299;
2881 } else {
2882 var301 = "const struct type_table type_table_";
2883 var302 = 35;
2884 var303 = string__NativeString__to_s_with_length(var301, var302);
2885 var300 = var303;
2886 varonce299 = var300;
2887 }
2888 if (varonce304) {
2889 var305 = varonce304;
2890 } else {
2891 var306 = " = {";
2892 var307 = 4;
2893 var308 = string__NativeString__to_s_with_length(var306, var307);
2894 var305 = var308;
2895 varonce304 = var305;
2896 }
2897 var309 = NEW_array__Array(&type_array__Arraykernel__Object);
2898 { /* var309 = array_instance Array[Object] */
2899 var310 = 3;
2900 var311 = NEW_array__NativeArray(var310, &type_array__NativeArraykernel__Object);
2901 ((struct instance_array__NativeArray*)var311)->values[0] = (val*) var300;
2902 ((struct instance_array__NativeArray*)var311)->values[1] = (val*) var_c_name;
2903 ((struct instance_array__NativeArray*)var311)->values[2] = (val*) var305;
2904 ((void (*)(val*, val*, long))(var309->class->vft[COLOR_array__Array__with_native]))(var309, var311, var310) /* with_native on <var309:Array[Object]>*/;
2905 CHECK_NEW_array__Array(var309);
2906 }
2907 var312 = ((val* (*)(val*))(var309->class->vft[COLOR_string__Object__to_s]))(var309) /* to_s on <var309:Array[Object]>*/;
2908 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var312) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2909 var313 = ((long (*)(val*))(var_class_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_class_table) /* length on <var_class_table:Array[nullable MClass]>*/;
2910 if (varonce314) {
2911 var315 = varonce314;
2912 } else {
2913 var316 = ",";
2914 var317 = 1;
2915 var318 = string__NativeString__to_s_with_length(var316, var317);
2916 var315 = var318;
2917 varonce314 = var315;
2918 }
2919 var319 = NEW_array__Array(&type_array__Arraykernel__Object);
2920 { /* var319 = array_instance Array[Object] */
2921 var320 = 2;
2922 var321 = NEW_array__NativeArray(var320, &type_array__NativeArraykernel__Object);
2923 var322 = BOX_kernel__Int(var313); /* autobox from Int to Object */
2924 ((struct instance_array__NativeArray*)var321)->values[0] = (val*) var322;
2925 ((struct instance_array__NativeArray*)var321)->values[1] = (val*) var315;
2926 ((void (*)(val*, val*, long))(var319->class->vft[COLOR_array__Array__with_native]))(var319, var321, var320) /* with_native on <var319:Array[Object]>*/;
2927 CHECK_NEW_array__Array(var319);
2928 }
2929 var323 = ((val* (*)(val*))(var319->class->vft[COLOR_string__Object__to_s]))(var319) /* to_s on <var319:Array[Object]>*/;
2930 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var323) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2931 if (varonce324) {
2932 var325 = varonce324;
2933 } else {
2934 var326 = "{";
2935 var327 = 1;
2936 var328 = string__NativeString__to_s_with_length(var326, var327);
2937 var325 = var328;
2938 varonce324 = var325;
2939 }
2940 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var325) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2941 var329 = ((val* (*)(val*))(var_class_table->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_class_table) /* iterator on <var_class_table:Array[nullable MClass]>*/;
2942 for(;;) {
2943 var330 = ((short int (*)(val*))(var329->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var329) /* is_ok on <var329:Iterator[nullable Object]>*/;
2944 if(!var330) break;
2945 var331 = ((val* (*)(val*))(var329->class->vft[COLOR_abstract_collection__Iterator__item]))(var329) /* item on <var329:Iterator[nullable Object]>*/;
2946 var_msuper = var331;
2947 var332 = NULL;
2948 if (var_msuper == NULL) {
2949 var333 = 1; /* is null */
2950 } else {
2951 var333 = 0; /* arg is null but recv is not */
2952 }
2953 if (var333){
2954 if (varonce334) {
2955 var335 = varonce334;
2956 } else {
2957 var336 = "-1, /* empty */";
2958 var337 = 15;
2959 var338 = string__NativeString__to_s_with_length(var336, var337);
2960 var335 = var338;
2961 varonce334 = var335;
2962 }
2963 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var335) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2964 } else {
2965 var339 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2966 if (var339 == NULL) {
2967 fprintf(stderr, "Runtime error: %s", "Reciever is null");
2968 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 278);
2969 exit(1);
2970 } else {
2971 var340 = ((val* (*)(val*))(var339->class->vft[COLOR_layout_builders__Layout__ids]))(var339) /* ids on <var339:nullable Layout[MClass]>*/;
2972 }
2973 var341 = ((val* (*)(val*, val*))(var340->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var340, var_msuper) /* [] on <var340:Map[Object, Int](Map[MClass, Int])>*/;
2974 if (varonce342) {
2975 var343 = varonce342;
2976 } else {
2977 var344 = ", /* ";
2978 var345 = 5;
2979 var346 = string__NativeString__to_s_with_length(var344, var345);
2980 var343 = var346;
2981 varonce342 = var343;
2982 }
2983 if (varonce347) {
2984 var348 = varonce347;
2985 } else {
2986 var349 = " */";
2987 var350 = 3;
2988 var351 = string__NativeString__to_s_with_length(var349, var350);
2989 var348 = var351;
2990 varonce347 = var348;
2991 }
2992 var352 = NEW_array__Array(&type_array__Arraykernel__Object);
2993 { /* var352 = array_instance Array[Object] */
2994 var353 = 4;
2995 var354 = NEW_array__NativeArray(var353, &type_array__NativeArraykernel__Object);
2996 ((struct instance_array__NativeArray*)var354)->values[0] = (val*) var341;
2997 ((struct instance_array__NativeArray*)var354)->values[1] = (val*) var343;
2998 ((struct instance_array__NativeArray*)var354)->values[2] = (val*) var_msuper;
2999 ((struct instance_array__NativeArray*)var354)->values[3] = (val*) var348;
3000 ((void (*)(val*, val*, long))(var352->class->vft[COLOR_array__Array__with_native]))(var352, var354, var353) /* with_native on <var352:Array[Object]>*/;
3001 CHECK_NEW_array__Array(var352);
3002 }
3003 var355 = ((val* (*)(val*))(var352->class->vft[COLOR_string__Object__to_s]))(var352) /* to_s on <var352:Array[Object]>*/;
3004 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var355) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3005 }
3006 CONTINUE_label356: (void)0;
3007 ((void (*)(val*))(var329->class->vft[COLOR_abstract_collection__Iterator__next]))(var329) /* next on <var329:Iterator[nullable Object]>*/;
3008 }
3009 BREAK_label356: (void)0;
3010 if (varonce357) {
3011 var358 = varonce357;
3012 } else {
3013 var359 = "}";
3014 var360 = 1;
3015 var361 = string__NativeString__to_s_with_length(var359, var360);
3016 var358 = var361;
3017 varonce357 = var358;
3018 }
3019 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var358) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3020 if (varonce362) {
3021 var363 = varonce362;
3022 } else {
3023 var364 = "};";
3024 var365 = 2;
3025 var366 = string__NativeString__to_s_with_length(var364, var365);
3026 var363 = var366;
3027 varonce362 = var363;
3028 }
3029 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var363) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3030 var367 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3031 if (varonce368) {
3032 var369 = varonce368;
3033 } else {
3034 var370 = "val*";
3035 var371 = 4;
3036 var372 = string__NativeString__to_s_with_length(var370, var371);
3037 var369 = var372;
3038 varonce368 = var369;
3039 }
3040 var373 = ((short int (*)(val*, val*))(var367->class->vft[COLOR_kernel__Object___33d_61d]))(var367, var369) /* != on <var367:String>*/;
3041 if (var373){
3042 var374 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3043 if (varonce375) {
3044 var376 = varonce375;
3045 } else {
3046 var377 = "struct instance_";
3047 var378 = 16;
3048 var379 = string__NativeString__to_s_with_length(var377, var378);
3049 var376 = var379;
3050 varonce375 = var376;
3051 }
3052 if (varonce380) {
3053 var381 = varonce380;
3054 } else {
3055 var382 = " {";
3056 var383 = 2;
3057 var384 = string__NativeString__to_s_with_length(var382, var383);
3058 var381 = var384;
3059 varonce380 = var381;
3060 }
3061 var385 = NEW_array__Array(&type_array__Arraykernel__Object);
3062 { /* var385 = array_instance Array[Object] */
3063 var386 = 3;
3064 var387 = NEW_array__NativeArray(var386, &type_array__NativeArraykernel__Object);
3065 ((struct instance_array__NativeArray*)var387)->values[0] = (val*) var376;
3066 ((struct instance_array__NativeArray*)var387)->values[1] = (val*) var_c_name;
3067 ((struct instance_array__NativeArray*)var387)->values[2] = (val*) var381;
3068 ((void (*)(val*, val*, long))(var385->class->vft[COLOR_array__Array__with_native]))(var385, var387, var386) /* with_native on <var385:Array[Object]>*/;
3069 CHECK_NEW_array__Array(var385);
3070 }
3071 var388 = ((val* (*)(val*))(var385->class->vft[COLOR_string__Object__to_s]))(var385) /* to_s on <var385:Array[Object]>*/;
3072 ((void (*)(val*, val*))(var374->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var374, var388) /* add_decl on <var374:CodeWriter>*/;
3073 var389 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3074 if (varonce390) {
3075 var391 = varonce390;
3076 } else {
3077 var392 = "const struct class *class;";
3078 var393 = 26;
3079 var394 = string__NativeString__to_s_with_length(var392, var393);
3080 var391 = var394;
3081 varonce390 = var391;
3082 }
3083 ((void (*)(val*, val*))(var389->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var389, var391) /* add_decl on <var389:CodeWriter>*/;
3084 var395 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3085 var396 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3086 if (varonce397) {
3087 var398 = varonce397;
3088 } else {
3089 var399 = " value;";
3090 var400 = 7;
3091 var401 = string__NativeString__to_s_with_length(var399, var400);
3092 var398 = var401;
3093 varonce397 = var398;
3094 }
3095 var402 = NEW_array__Array(&type_array__Arraykernel__Object);
3096 { /* var402 = array_instance Array[Object] */
3097 var403 = 2;
3098 var404 = NEW_array__NativeArray(var403, &type_array__NativeArraykernel__Object);
3099 ((struct instance_array__NativeArray*)var404)->values[0] = (val*) var396;
3100 ((struct instance_array__NativeArray*)var404)->values[1] = (val*) var398;
3101 ((void (*)(val*, val*, long))(var402->class->vft[COLOR_array__Array__with_native]))(var402, var404, var403) /* with_native on <var402:Array[Object]>*/;
3102 CHECK_NEW_array__Array(var402);
3103 }
3104 var405 = ((val* (*)(val*))(var402->class->vft[COLOR_string__Object__to_s]))(var402) /* to_s on <var402:Array[Object]>*/;
3105 ((void (*)(val*, val*))(var395->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var395, var405) /* add_decl on <var395:CodeWriter>*/;
3106 var406 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3107 if (varonce407) {
3108 var408 = varonce407;
3109 } else {
3110 var409 = "};";
3111 var410 = 2;
3112 var411 = string__NativeString__to_s_with_length(var409, var410);
3113 var408 = var411;
3114 varonce407 = var408;
3115 }
3116 ((void (*)(val*, val*))(var406->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var406, var408) /* add_decl on <var406:CodeWriter>*/;
3117 var412 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3118 if (varonce413) {
3119 var414 = varonce413;
3120 } else {
3121 var415 = "val* BOX_";
3122 var416 = 9;
3123 var417 = string__NativeString__to_s_with_length(var415, var416);
3124 var414 = var417;
3125 varonce413 = var414;
3126 }
3127 if (varonce418) {
3128 var419 = varonce418;
3129 } else {
3130 var420 = "(";
3131 var421 = 1;
3132 var422 = string__NativeString__to_s_with_length(var420, var421);
3133 var419 = var422;
3134 varonce418 = var419;
3135 }
3136 var423 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3137 if (varonce424) {
3138 var425 = varonce424;
3139 } else {
3140 var426 = ");";
3141 var427 = 2;
3142 var428 = string__NativeString__to_s_with_length(var426, var427);
3143 var425 = var428;
3144 varonce424 = var425;
3145 }
3146 var429 = NEW_array__Array(&type_array__Arraykernel__Object);
3147 { /* var429 = array_instance Array[Object] */
3148 var430 = 5;
3149 var431 = NEW_array__NativeArray(var430, &type_array__NativeArraykernel__Object);
3150 ((struct instance_array__NativeArray*)var431)->values[0] = (val*) var414;
3151 ((struct instance_array__NativeArray*)var431)->values[1] = (val*) var_c_name;
3152 ((struct instance_array__NativeArray*)var431)->values[2] = (val*) var419;
3153 ((struct instance_array__NativeArray*)var431)->values[3] = (val*) var423;
3154 ((struct instance_array__NativeArray*)var431)->values[4] = (val*) var425;
3155 ((void (*)(val*, val*, long))(var429->class->vft[COLOR_array__Array__with_native]))(var429, var431, var430) /* with_native on <var429:Array[Object]>*/;
3156 CHECK_NEW_array__Array(var429);
3157 }
3158 var432 = ((val* (*)(val*))(var429->class->vft[COLOR_string__Object__to_s]))(var429) /* to_s on <var429:Array[Object]>*/;
3159 ((void (*)(val*, val*))(var412->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var412, var432) /* add_decl on <var412:CodeWriter>*/;
3160 if (varonce433) {
3161 var434 = varonce433;
3162 } else {
3163 var435 = "/* allocate ";
3164 var436 = 12;
3165 var437 = string__NativeString__to_s_with_length(var435, var436);
3166 var434 = var437;
3167 varonce433 = var434;
3168 }
3169 if (varonce438) {
3170 var439 = varonce438;
3171 } else {
3172 var440 = " */";
3173 var441 = 3;
3174 var442 = string__NativeString__to_s_with_length(var440, var441);
3175 var439 = var442;
3176 varonce438 = var439;
3177 }
3178 var443 = NEW_array__Array(&type_array__Arraykernel__Object);
3179 { /* var443 = array_instance Array[Object] */
3180 var444 = 3;
3181 var445 = NEW_array__NativeArray(var444, &type_array__NativeArraykernel__Object);
3182 ((struct instance_array__NativeArray*)var445)->values[0] = (val*) var434;
3183 ((struct instance_array__NativeArray*)var445)->values[1] = (val*) var_mtype;
3184 ((struct instance_array__NativeArray*)var445)->values[2] = (val*) var439;
3185 ((void (*)(val*, val*, long))(var443->class->vft[COLOR_array__Array__with_native]))(var443, var445, var444) /* with_native on <var443:Array[Object]>*/;
3186 CHECK_NEW_array__Array(var443);
3187 }
3188 var446 = ((val* (*)(val*))(var443->class->vft[COLOR_string__Object__to_s]))(var443) /* to_s on <var443:Array[Object]>*/;
3189 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var446) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3190 if (varonce447) {
3191 var448 = varonce447;
3192 } else {
3193 var449 = "val* BOX_";
3194 var450 = 9;
3195 var451 = string__NativeString__to_s_with_length(var449, var450);
3196 var448 = var451;
3197 varonce447 = var448;
3198 }
3199 var452 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
3200 if (varonce453) {
3201 var454 = varonce453;
3202 } else {
3203 var455 = "(";
3204 var456 = 1;
3205 var457 = string__NativeString__to_s_with_length(var455, var456);
3206 var454 = var457;
3207 varonce453 = var454;
3208 }
3209 var458 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3210 if (varonce459) {
3211 var460 = varonce459;
3212 } else {
3213 var461 = " value) {";
3214 var462 = 9;
3215 var463 = string__NativeString__to_s_with_length(var461, var462);
3216 var460 = var463;
3217 varonce459 = var460;
3218 }
3219 var464 = NEW_array__Array(&type_array__Arraykernel__Object);
3220 { /* var464 = array_instance Array[Object] */
3221 var465 = 5;
3222 var466 = NEW_array__NativeArray(var465, &type_array__NativeArraykernel__Object);
3223 ((struct instance_array__NativeArray*)var466)->values[0] = (val*) var448;
3224 ((struct instance_array__NativeArray*)var466)->values[1] = (val*) var452;
3225 ((struct instance_array__NativeArray*)var466)->values[2] = (val*) var454;
3226 ((struct instance_array__NativeArray*)var466)->values[3] = (val*) var458;
3227 ((struct instance_array__NativeArray*)var466)->values[4] = (val*) var460;
3228 ((void (*)(val*, val*, long))(var464->class->vft[COLOR_array__Array__with_native]))(var464, var466, var465) /* with_native on <var464:Array[Object]>*/;
3229 CHECK_NEW_array__Array(var464);
3230 }
3231 var467 = ((val* (*)(val*))(var464->class->vft[COLOR_string__Object__to_s]))(var464) /* to_s on <var464:Array[Object]>*/;
3232 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var467) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3233 if (varonce468) {
3234 var469 = varonce468;
3235 } else {
3236 var470 = "struct instance_";
3237 var471 = 16;
3238 var472 = string__NativeString__to_s_with_length(var470, var471);
3239 var469 = var472;
3240 varonce468 = var469;
3241 }
3242 if (varonce473) {
3243 var474 = varonce473;
3244 } else {
3245 var475 = "*res = nit_alloc(sizeof(struct instance_";
3246 var476 = 40;
3247 var477 = string__NativeString__to_s_with_length(var475, var476);
3248 var474 = var477;
3249 varonce473 = var474;
3250 }
3251 if (varonce478) {
3252 var479 = varonce478;
3253 } else {
3254 var480 = "));";
3255 var481 = 3;
3256 var482 = string__NativeString__to_s_with_length(var480, var481);
3257 var479 = var482;
3258 varonce478 = var479;
3259 }
3260 var483 = NEW_array__Array(&type_array__Arraykernel__Object);
3261 { /* var483 = array_instance Array[Object] */
3262 var484 = 5;
3263 var485 = NEW_array__NativeArray(var484, &type_array__NativeArraykernel__Object);
3264 ((struct instance_array__NativeArray*)var485)->values[0] = (val*) var469;
3265 ((struct instance_array__NativeArray*)var485)->values[1] = (val*) var_c_name;
3266 ((struct instance_array__NativeArray*)var485)->values[2] = (val*) var474;
3267 ((struct instance_array__NativeArray*)var485)->values[3] = (val*) var_c_name;
3268 ((struct instance_array__NativeArray*)var485)->values[4] = (val*) var479;
3269 ((void (*)(val*, val*, long))(var483->class->vft[COLOR_array__Array__with_native]))(var483, var485, var484) /* with_native on <var483:Array[Object]>*/;
3270 CHECK_NEW_array__Array(var483);
3271 }
3272 var486 = ((val* (*)(val*))(var483->class->vft[COLOR_string__Object__to_s]))(var483) /* to_s on <var483:Array[Object]>*/;
3273 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var486) /* add on <var_v:SeparateCompilerVisitor>*/;
3274 if (varonce487) {
3275 var488 = varonce487;
3276 } else {
3277 var489 = "class_";
3278 var490 = 6;
3279 var491 = string__NativeString__to_s_with_length(var489, var490);
3280 var488 = var491;
3281 varonce487 = var488;
3282 }
3283 var492 = NEW_array__Array(&type_array__Arraykernel__Object);
3284 { /* var492 = array_instance Array[Object] */
3285 var493 = 2;
3286 var494 = NEW_array__NativeArray(var493, &type_array__NativeArraykernel__Object);
3287 ((struct instance_array__NativeArray*)var494)->values[0] = (val*) var488;
3288 ((struct instance_array__NativeArray*)var494)->values[1] = (val*) var_c_name;
3289 ((void (*)(val*, val*, long))(var492->class->vft[COLOR_array__Array__with_native]))(var492, var494, var493) /* with_native on <var492:Array[Object]>*/;
3290 CHECK_NEW_array__Array(var492);
3291 }
3292 var495 = ((val* (*)(val*))(var492->class->vft[COLOR_string__Object__to_s]))(var492) /* to_s on <var492:Array[Object]>*/;
3293 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var495) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3294 if (varonce496) {
3295 var497 = varonce496;
3296 } else {
3297 var498 = "res->class = &class_";
3298 var499 = 20;
3299 var500 = string__NativeString__to_s_with_length(var498, var499);
3300 var497 = var500;
3301 varonce496 = var497;
3302 }
3303 if (varonce501) {
3304 var502 = varonce501;
3305 } else {
3306 var503 = ";";
3307 var504 = 1;
3308 var505 = string__NativeString__to_s_with_length(var503, var504);
3309 var502 = var505;
3310 varonce501 = var502;
3311 }
3312 var506 = NEW_array__Array(&type_array__Arraykernel__Object);
3313 { /* var506 = array_instance Array[Object] */
3314 var507 = 3;
3315 var508 = NEW_array__NativeArray(var507, &type_array__NativeArraykernel__Object);
3316 ((struct instance_array__NativeArray*)var508)->values[0] = (val*) var497;
3317 ((struct instance_array__NativeArray*)var508)->values[1] = (val*) var_c_name;
3318 ((struct instance_array__NativeArray*)var508)->values[2] = (val*) var502;
3319 ((void (*)(val*, val*, long))(var506->class->vft[COLOR_array__Array__with_native]))(var506, var508, var507) /* with_native on <var506:Array[Object]>*/;
3320 CHECK_NEW_array__Array(var506);
3321 }
3322 var509 = ((val* (*)(val*))(var506->class->vft[COLOR_string__Object__to_s]))(var506) /* to_s on <var506:Array[Object]>*/;
3323 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var509) /* add on <var_v:SeparateCompilerVisitor>*/;
3324 if (varonce510) {
3325 var511 = varonce510;
3326 } else {
3327 var512 = "res->value = value;";
3328 var513 = 19;
3329 var514 = string__NativeString__to_s_with_length(var512, var513);
3330 var511 = var514;
3331 varonce510 = var511;
3332 }
3333 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var511) /* add on <var_v:SeparateCompilerVisitor>*/;
3334 if (varonce515) {
3335 var516 = varonce515;
3336 } else {
3337 var517 = "return (val*)res;";
3338 var518 = 17;
3339 var519 = string__NativeString__to_s_with_length(var517, var518);
3340 var516 = var519;
3341 varonce515 = var516;
3342 }
3343 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var516) /* add on <var_v:SeparateCompilerVisitor>*/;
3344 if (varonce520) {
3345 var521 = varonce520;
3346 } else {
3347 var522 = "}";
3348 var523 = 1;
3349 var524 = string__NativeString__to_s_with_length(var522, var523);
3350 var521 = var524;
3351 varonce520 = var521;
3352 }
3353 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var521) /* add on <var_v:SeparateCompilerVisitor>*/;
3354 goto RET_LABEL;
3355 } else {
3356 var525 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
3357 if (varonce526) {
3358 var527 = varonce526;
3359 } else {
3360 var528 = "NativeArray";
3361 var529 = 11;
3362 var530 = string__NativeString__to_s_with_length(var528, var529);
3363 var527 = var530;
3364 varonce526 = var527;
3365 }
3366 var531 = ((short int (*)(val*, val*))(var525->class->vft[COLOR_kernel__Object___61d_61d]))(var525, var527) /* == on <var525:String>*/;
3367 if (var531){
3368 var532 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3369 if (varonce533) {
3370 var534 = varonce533;
3371 } else {
3372 var535 = "struct instance_";
3373 var536 = 16;
3374 var537 = string__NativeString__to_s_with_length(var535, var536);
3375 var534 = var537;
3376 varonce533 = var534;
3377 }
3378 if (varonce538) {
3379 var539 = varonce538;
3380 } else {
3381 var540 = " {";
3382 var541 = 2;
3383 var542 = string__NativeString__to_s_with_length(var540, var541);
3384 var539 = var542;
3385 varonce538 = var539;
3386 }
3387 var543 = NEW_array__Array(&type_array__Arraykernel__Object);
3388 { /* var543 = array_instance Array[Object] */
3389 var544 = 3;
3390 var545 = NEW_array__NativeArray(var544, &type_array__NativeArraykernel__Object);
3391 ((struct instance_array__NativeArray*)var545)->values[0] = (val*) var534;
3392 ((struct instance_array__NativeArray*)var545)->values[1] = (val*) var_c_name;
3393 ((struct instance_array__NativeArray*)var545)->values[2] = (val*) var539;
3394 ((void (*)(val*, val*, long))(var543->class->vft[COLOR_array__Array__with_native]))(var543, var545, var544) /* with_native on <var543:Array[Object]>*/;
3395 CHECK_NEW_array__Array(var543);
3396 }
3397 var546 = ((val* (*)(val*))(var543->class->vft[COLOR_string__Object__to_s]))(var543) /* to_s on <var543:Array[Object]>*/;
3398 ((void (*)(val*, val*))(var532->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var532, var546) /* add_decl on <var532:CodeWriter>*/;
3399 var547 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3400 if (varonce548) {
3401 var549 = varonce548;
3402 } else {
3403 var550 = "const struct class *class;";
3404 var551 = 26;
3405 var552 = string__NativeString__to_s_with_length(var550, var551);
3406 var549 = var552;
3407 varonce548 = var549;
3408 }
3409 ((void (*)(val*, val*))(var547->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var547, var549) /* add_decl on <var547:CodeWriter>*/;
3410 var553 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3411 if (varonce554) {
3412 var555 = varonce554;
3413 } else {
3414 var556 = "val* values[];";
3415 var557 = 14;
3416 var558 = string__NativeString__to_s_with_length(var556, var557);
3417 var555 = var558;
3418 varonce554 = var555;
3419 }
3420 ((void (*)(val*, val*))(var553->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var553, var555) /* add_decl on <var553:CodeWriter>*/;
3421 var559 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3422 if (varonce560) {
3423 var561 = varonce560;
3424 } else {
3425 var562 = "};";
3426 var563 = 2;
3427 var564 = string__NativeString__to_s_with_length(var562, var563);
3428 var561 = var564;
3429 varonce560 = var561;
3430 }
3431 ((void (*)(val*, val*))(var559->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var559, var561) /* add_decl on <var559:CodeWriter>*/;
3432 if (varonce565) {
3433 var566 = varonce565;
3434 } else {
3435 var567 = "NEW_";
3436 var568 = 4;
3437 var569 = string__NativeString__to_s_with_length(var567, var568);
3438 var566 = var569;
3439 varonce565 = var566;
3440 }
3441 var570 = NEW_array__Array(&type_array__Arraykernel__Object);
3442 { /* var570 = array_instance Array[Object] */
3443 var571 = 2;
3444 var572 = NEW_array__NativeArray(var571, &type_array__NativeArraykernel__Object);
3445 ((struct instance_array__NativeArray*)var572)->values[0] = (val*) var566;
3446 ((struct instance_array__NativeArray*)var572)->values[1] = (val*) var_c_name;
3447 ((void (*)(val*, val*, long))(var570->class->vft[COLOR_array__Array__with_native]))(var570, var572, var571) /* with_native on <var570:Array[Object]>*/;
3448 CHECK_NEW_array__Array(var570);
3449 }
3450 var573 = ((val* (*)(val*))(var570->class->vft[COLOR_string__Object__to_s]))(var570) /* to_s on <var570:Array[Object]>*/;
3451 var574 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3452 if (varonce575) {
3453 var576 = varonce575;
3454 } else {
3455 var577 = " NEW_";
3456 var578 = 5;
3457 var579 = string__NativeString__to_s_with_length(var577, var578);
3458 var576 = var579;
3459 varonce575 = var576;
3460 }
3461 if (varonce580) {
3462 var581 = varonce580;
3463 } else {
3464 var582 = "(int length);";
3465 var583 = 13;
3466 var584 = string__NativeString__to_s_with_length(var582, var583);
3467 var581 = var584;
3468 varonce580 = var581;
3469 }
3470 var585 = NEW_array__Array(&type_array__Arraykernel__Object);
3471 { /* var585 = array_instance Array[Object] */
3472 var586 = 4;
3473 var587 = NEW_array__NativeArray(var586, &type_array__NativeArraykernel__Object);
3474 ((struct instance_array__NativeArray*)var587)->values[0] = (val*) var574;
3475 ((struct instance_array__NativeArray*)var587)->values[1] = (val*) var576;
3476 ((struct instance_array__NativeArray*)var587)->values[2] = (val*) var_c_name;
3477 ((struct instance_array__NativeArray*)var587)->values[3] = (val*) var581;
3478 ((void (*)(val*, val*, long))(var585->class->vft[COLOR_array__Array__with_native]))(var585, var587, var586) /* with_native on <var585:Array[Object]>*/;
3479 CHECK_NEW_array__Array(var585);
3480 }
3481 var588 = ((val* (*)(val*))(var585->class->vft[COLOR_string__Object__to_s]))(var585) /* to_s on <var585:Array[Object]>*/;
3482 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var573, var588) /* provide_declaration on <self:SeparateErasureCompiler>*/;
3483 if (varonce589) {
3484 var590 = varonce589;
3485 } else {
3486 var591 = "/* allocate ";
3487 var592 = 12;
3488 var593 = string__NativeString__to_s_with_length(var591, var592);
3489 var590 = var593;
3490 varonce589 = var590;
3491 }
3492 if (varonce594) {
3493 var595 = varonce594;
3494 } else {
3495 var596 = " */";
3496 var597 = 3;
3497 var598 = string__NativeString__to_s_with_length(var596, var597);
3498 var595 = var598;
3499 varonce594 = var595;
3500 }
3501 var599 = NEW_array__Array(&type_array__Arraykernel__Object);
3502 { /* var599 = array_instance Array[Object] */
3503 var600 = 3;
3504 var601 = NEW_array__NativeArray(var600, &type_array__NativeArraykernel__Object);
3505 ((struct instance_array__NativeArray*)var601)->values[0] = (val*) var590;
3506 ((struct instance_array__NativeArray*)var601)->values[1] = (val*) var_mtype;
3507 ((struct instance_array__NativeArray*)var601)->values[2] = (val*) var595;
3508 ((void (*)(val*, val*, long))(var599->class->vft[COLOR_array__Array__with_native]))(var599, var601, var600) /* with_native on <var599:Array[Object]>*/;
3509 CHECK_NEW_array__Array(var599);
3510 }
3511 var602 = ((val* (*)(val*))(var599->class->vft[COLOR_string__Object__to_s]))(var599) /* to_s on <var599:Array[Object]>*/;
3512 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var602) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3513 var603 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3514 if (varonce604) {
3515 var605 = varonce604;
3516 } else {
3517 var606 = " NEW_";
3518 var607 = 5;
3519 var608 = string__NativeString__to_s_with_length(var606, var607);
3520 var605 = var608;
3521 varonce604 = var605;
3522 }
3523 if (varonce609) {
3524 var610 = varonce609;
3525 } else {
3526 var611 = "(int length) {";
3527 var612 = 14;
3528 var613 = string__NativeString__to_s_with_length(var611, var612);
3529 var610 = var613;
3530 varonce609 = var610;
3531 }
3532 var614 = NEW_array__Array(&type_array__Arraykernel__Object);
3533 { /* var614 = array_instance Array[Object] */
3534 var615 = 4;
3535 var616 = NEW_array__NativeArray(var615, &type_array__NativeArraykernel__Object);
3536 ((struct instance_array__NativeArray*)var616)->values[0] = (val*) var603;
3537 ((struct instance_array__NativeArray*)var616)->values[1] = (val*) var605;
3538 ((struct instance_array__NativeArray*)var616)->values[2] = (val*) var_c_name;
3539 ((struct instance_array__NativeArray*)var616)->values[3] = (val*) var610;
3540 ((void (*)(val*, val*, long))(var614->class->vft[COLOR_array__Array__with_native]))(var614, var616, var615) /* with_native on <var614:Array[Object]>*/;
3541 CHECK_NEW_array__Array(var614);
3542 }
3543 var617 = ((val* (*)(val*))(var614->class->vft[COLOR_string__Object__to_s]))(var614) /* to_s on <var614:Array[Object]>*/;
3544 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var617) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3545 if (varonce618) {
3546 var619 = varonce618;
3547 } else {
3548 var620 = "self";
3549 var621 = 4;
3550 var622 = string__NativeString__to_s_with_length(var620, var621);
3551 var619 = var622;
3552 varonce618 = var619;
3553 }
3554 var623 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_named_var]))(var_v, var_mtype, var619) /* new_named_var on <var_v:SeparateCompilerVisitor>*/;
3555 var_res = var623;
3556 var624 = 1;
3557 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var624) /* is_exact= on <var_res:RuntimeVariable>*/;
3558 var625 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
3559 var626 = ((val* (*)(val*))(var625->class->vft[COLOR_abstract_collection__Collection__first]))(var625) /* first on <var625:Array[MType]>*/;
3560 var_mtype_elt = var626;
3561 if (varonce627) {
3562 var628 = varonce627;
3563 } else {
3564 var629 = " = nit_alloc(sizeof(struct instance_";
3565 var630 = 36;
3566 var631 = string__NativeString__to_s_with_length(var629, var630);
3567 var628 = var631;
3568 varonce627 = var628;
3569 }
3570 if (varonce632) {
3571 var633 = varonce632;
3572 } else {
3573 var634 = ") + length*sizeof(";
3574 var635 = 18;
3575 var636 = string__NativeString__to_s_with_length(var634, var635);
3576 var633 = var636;
3577 varonce632 = var633;
3578 }
3579 var637 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
3580 if (varonce638) {
3581 var639 = varonce638;
3582 } else {
3583 var640 = "));";
3584 var641 = 3;
3585 var642 = string__NativeString__to_s_with_length(var640, var641);
3586 var639 = var642;
3587 varonce638 = var639;
3588 }
3589 var643 = NEW_array__Array(&type_array__Arraykernel__Object);
3590 { /* var643 = array_instance Array[Object] */
3591 var644 = 6;
3592 var645 = NEW_array__NativeArray(var644, &type_array__NativeArraykernel__Object);
3593 ((struct instance_array__NativeArray*)var645)->values[0] = (val*) var_res;
3594 ((struct instance_array__NativeArray*)var645)->values[1] = (val*) var628;
3595 ((struct instance_array__NativeArray*)var645)->values[2] = (val*) var_c_name;
3596 ((struct instance_array__NativeArray*)var645)->values[3] = (val*) var633;
3597 ((struct instance_array__NativeArray*)var645)->values[4] = (val*) var637;
3598 ((struct instance_array__NativeArray*)var645)->values[5] = (val*) var639;
3599 ((void (*)(val*, val*, long))(var643->class->vft[COLOR_array__Array__with_native]))(var643, var645, var644) /* with_native on <var643:Array[Object]>*/;
3600 CHECK_NEW_array__Array(var643);
3601 }
3602 var646 = ((val* (*)(val*))(var643->class->vft[COLOR_string__Object__to_s]))(var643) /* to_s on <var643:Array[Object]>*/;
3603 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var646) /* add on <var_v:SeparateCompilerVisitor>*/;
3604 if (varonce647) {
3605 var648 = varonce647;
3606 } else {
3607 var649 = "class_";
3608 var650 = 6;
3609 var651 = string__NativeString__to_s_with_length(var649, var650);
3610 var648 = var651;
3611 varonce647 = var648;
3612 }
3613 var652 = NEW_array__Array(&type_array__Arraykernel__Object);
3614 { /* var652 = array_instance Array[Object] */
3615 var653 = 2;
3616 var654 = NEW_array__NativeArray(var653, &type_array__NativeArraykernel__Object);
3617 ((struct instance_array__NativeArray*)var654)->values[0] = (val*) var648;
3618 ((struct instance_array__NativeArray*)var654)->values[1] = (val*) var_c_name;
3619 ((void (*)(val*, val*, long))(var652->class->vft[COLOR_array__Array__with_native]))(var652, var654, var653) /* with_native on <var652:Array[Object]>*/;
3620 CHECK_NEW_array__Array(var652);
3621 }
3622 var655 = ((val* (*)(val*))(var652->class->vft[COLOR_string__Object__to_s]))(var652) /* to_s on <var652:Array[Object]>*/;
3623 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var655) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3624 if (varonce656) {
3625 var657 = varonce656;
3626 } else {
3627 var658 = "->class = &class_";
3628 var659 = 17;
3629 var660 = string__NativeString__to_s_with_length(var658, var659);
3630 var657 = var660;
3631 varonce656 = var657;
3632 }
3633 if (varonce661) {
3634 var662 = varonce661;
3635 } else {
3636 var663 = ";";
3637 var664 = 1;
3638 var665 = string__NativeString__to_s_with_length(var663, var664);
3639 var662 = var665;
3640 varonce661 = var662;
3641 }
3642 var666 = NEW_array__Array(&type_array__Arraykernel__Object);
3643 { /* var666 = array_instance Array[Object] */
3644 var667 = 4;
3645 var668 = NEW_array__NativeArray(var667, &type_array__NativeArraykernel__Object);
3646 ((struct instance_array__NativeArray*)var668)->values[0] = (val*) var_res;
3647 ((struct instance_array__NativeArray*)var668)->values[1] = (val*) var657;
3648 ((struct instance_array__NativeArray*)var668)->values[2] = (val*) var_c_name;
3649 ((struct instance_array__NativeArray*)var668)->values[3] = (val*) var662;
3650 ((void (*)(val*, val*, long))(var666->class->vft[COLOR_array__Array__with_native]))(var666, var668, var667) /* with_native on <var666:Array[Object]>*/;
3651 CHECK_NEW_array__Array(var666);
3652 }
3653 var669 = ((val* (*)(val*))(var666->class->vft[COLOR_string__Object__to_s]))(var666) /* to_s on <var666:Array[Object]>*/;
3654 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var669) /* add on <var_v:SeparateCompilerVisitor>*/;
3655 if (varonce670) {
3656 var671 = varonce670;
3657 } else {
3658 var672 = "return ";
3659 var673 = 7;
3660 var674 = string__NativeString__to_s_with_length(var672, var673);
3661 var671 = var674;
3662 varonce670 = var671;
3663 }
3664 if (varonce675) {
3665 var676 = varonce675;
3666 } else {
3667 var677 = ";";
3668 var678 = 1;
3669 var679 = string__NativeString__to_s_with_length(var677, var678);
3670 var676 = var679;
3671 varonce675 = var676;
3672 }
3673 var680 = NEW_array__Array(&type_array__Arraykernel__Object);
3674 { /* var680 = array_instance Array[Object] */
3675 var681 = 3;
3676 var682 = NEW_array__NativeArray(var681, &type_array__NativeArraykernel__Object);
3677 ((struct instance_array__NativeArray*)var682)->values[0] = (val*) var671;
3678 ((struct instance_array__NativeArray*)var682)->values[1] = (val*) var_res;
3679 ((struct instance_array__NativeArray*)var682)->values[2] = (val*) var676;
3680 ((void (*)(val*, val*, long))(var680->class->vft[COLOR_array__Array__with_native]))(var680, var682, var681) /* with_native on <var680:Array[Object]>*/;
3681 CHECK_NEW_array__Array(var680);
3682 }
3683 var683 = ((val* (*)(val*))(var680->class->vft[COLOR_string__Object__to_s]))(var680) /* to_s on <var680:Array[Object]>*/;
3684 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var683) /* add on <var_v:SeparateCompilerVisitor>*/;
3685 if (varonce684) {
3686 var685 = varonce684;
3687 } else {
3688 var686 = "}";
3689 var687 = 1;
3690 var688 = string__NativeString__to_s_with_length(var686, var687);
3691 var685 = var688;
3692 varonce684 = var685;
3693 }
3694 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var685) /* add on <var_v:SeparateCompilerVisitor>*/;
3695 goto RET_LABEL;
3696 } else {
3697 }
3698 }
3699 if (varonce689) {
3700 var690 = varonce689;
3701 } else {
3702 var691 = "NEW_";
3703 var692 = 4;
3704 var693 = string__NativeString__to_s_with_length(var691, var692);
3705 var690 = var693;
3706 varonce689 = var690;
3707 }
3708 var694 = NEW_array__Array(&type_array__Arraykernel__Object);
3709 { /* var694 = array_instance Array[Object] */
3710 var695 = 2;
3711 var696 = NEW_array__NativeArray(var695, &type_array__NativeArraykernel__Object);
3712 ((struct instance_array__NativeArray*)var696)->values[0] = (val*) var690;
3713 ((struct instance_array__NativeArray*)var696)->values[1] = (val*) var_c_name;
3714 ((void (*)(val*, val*, long))(var694->class->vft[COLOR_array__Array__with_native]))(var694, var696, var695) /* with_native on <var694:Array[Object]>*/;
3715 CHECK_NEW_array__Array(var694);
3716 }
3717 var697 = ((val* (*)(val*))(var694->class->vft[COLOR_string__Object__to_s]))(var694) /* to_s on <var694:Array[Object]>*/;
3718 var698 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3719 if (varonce699) {
3720 var700 = varonce699;
3721 } else {
3722 var701 = " NEW_";
3723 var702 = 5;
3724 var703 = string__NativeString__to_s_with_length(var701, var702);
3725 var700 = var703;
3726 varonce699 = var700;
3727 }
3728 if (varonce704) {
3729 var705 = varonce704;
3730 } else {
3731 var706 = "(void);";
3732 var707 = 7;
3733 var708 = string__NativeString__to_s_with_length(var706, var707);
3734 var705 = var708;
3735 varonce704 = var705;
3736 }
3737 var709 = NEW_array__Array(&type_array__Arraykernel__Object);
3738 { /* var709 = array_instance Array[Object] */
3739 var710 = 4;
3740 var711 = NEW_array__NativeArray(var710, &type_array__NativeArraykernel__Object);
3741 ((struct instance_array__NativeArray*)var711)->values[0] = (val*) var698;
3742 ((struct instance_array__NativeArray*)var711)->values[1] = (val*) var700;
3743 ((struct instance_array__NativeArray*)var711)->values[2] = (val*) var_c_name;
3744 ((struct instance_array__NativeArray*)var711)->values[3] = (val*) var705;
3745 ((void (*)(val*, val*, long))(var709->class->vft[COLOR_array__Array__with_native]))(var709, var711, var710) /* with_native on <var709:Array[Object]>*/;
3746 CHECK_NEW_array__Array(var709);
3747 }
3748 var712 = ((val* (*)(val*))(var709->class->vft[COLOR_string__Object__to_s]))(var709) /* to_s on <var709:Array[Object]>*/;
3749 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var697, var712) /* provide_declaration on <self:SeparateErasureCompiler>*/;
3750 if (varonce713) {
3751 var714 = varonce713;
3752 } else {
3753 var715 = "/* allocate ";
3754 var716 = 12;
3755 var717 = string__NativeString__to_s_with_length(var715, var716);
3756 var714 = var717;
3757 varonce713 = var714;
3758 }
3759 if (varonce718) {
3760 var719 = varonce718;
3761 } else {
3762 var720 = " */";
3763 var721 = 3;
3764 var722 = string__NativeString__to_s_with_length(var720, var721);
3765 var719 = var722;
3766 varonce718 = var719;
3767 }
3768 var723 = NEW_array__Array(&type_array__Arraykernel__Object);
3769 { /* var723 = array_instance Array[Object] */
3770 var724 = 3;
3771 var725 = NEW_array__NativeArray(var724, &type_array__NativeArraykernel__Object);
3772 ((struct instance_array__NativeArray*)var725)->values[0] = (val*) var714;
3773 ((struct instance_array__NativeArray*)var725)->values[1] = (val*) var_mtype;
3774 ((struct instance_array__NativeArray*)var725)->values[2] = (val*) var719;
3775 ((void (*)(val*, val*, long))(var723->class->vft[COLOR_array__Array__with_native]))(var723, var725, var724) /* with_native on <var723:Array[Object]>*/;
3776 CHECK_NEW_array__Array(var723);
3777 }
3778 var726 = ((val* (*)(val*))(var723->class->vft[COLOR_string__Object__to_s]))(var723) /* to_s on <var723:Array[Object]>*/;
3779 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var726) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3780 var727 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3781 if (varonce728) {
3782 var729 = varonce728;
3783 } else {
3784 var730 = " NEW_";
3785 var731 = 5;
3786 var732 = string__NativeString__to_s_with_length(var730, var731);
3787 var729 = var732;
3788 varonce728 = var729;
3789 }
3790 if (varonce733) {
3791 var734 = varonce733;
3792 } else {
3793 var735 = "(void) {";
3794 var736 = 8;
3795 var737 = string__NativeString__to_s_with_length(var735, var736);
3796 var734 = var737;
3797 varonce733 = var734;
3798 }
3799 var738 = NEW_array__Array(&type_array__Arraykernel__Object);
3800 { /* var738 = array_instance Array[Object] */
3801 var739 = 4;
3802 var740 = NEW_array__NativeArray(var739, &type_array__NativeArraykernel__Object);
3803 ((struct instance_array__NativeArray*)var740)->values[0] = (val*) var727;
3804 ((struct instance_array__NativeArray*)var740)->values[1] = (val*) var729;
3805 ((struct instance_array__NativeArray*)var740)->values[2] = (val*) var_c_name;
3806 ((struct instance_array__NativeArray*)var740)->values[3] = (val*) var734;
3807 ((void (*)(val*, val*, long))(var738->class->vft[COLOR_array__Array__with_native]))(var738, var740, var739) /* with_native on <var738:Array[Object]>*/;
3808 CHECK_NEW_array__Array(var738);
3809 }
3810 var741 = ((val* (*)(val*))(var738->class->vft[COLOR_string__Object__to_s]))(var738) /* to_s on <var738:Array[Object]>*/;
3811 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var741) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3812 if (varonce742) {
3813 var743 = varonce742;
3814 } else {
3815 var744 = "self";
3816 var745 = 4;
3817 var746 = string__NativeString__to_s_with_length(var744, var745);
3818 var743 = var746;
3819 varonce742 = var743;
3820 }
3821 var747 = ((val* (*)(val*, val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_named_var]))(var_v, var_mtype, var743) /* new_named_var on <var_v:SeparateCompilerVisitor>*/;
3822 var_res748 = var747;
3823 var749 = 1;
3824 ((void (*)(val*, short int))(var_res748->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res748, var749) /* is_exact= on <var_res748:RuntimeVariable>*/;
3825 if (varonce750) {
3826 var751 = varonce750;
3827 } else {
3828 var752 = " = nit_alloc(sizeof(struct instance) + ";
3829 var753 = 39;
3830 var754 = string__NativeString__to_s_with_length(var752, var753);
3831 var751 = var754;
3832 varonce750 = var751;
3833 }
3834 var755 = ((long (*)(val*))(var_attrs->class->vft[COLOR_abstract_collection__Collection__length]))(var_attrs) /* length on <var_attrs:Array[nullable MPropDef]>*/;
3835 if (varonce756) {
3836 var757 = varonce756;
3837 } else {
3838 var758 = "*sizeof(nitattribute_t));";
3839 var759 = 25;
3840 var760 = string__NativeString__to_s_with_length(var758, var759);
3841 var757 = var760;
3842 varonce756 = var757;
3843 }
3844 var761 = NEW_array__Array(&type_array__Arraykernel__Object);
3845 { /* var761 = array_instance Array[Object] */
3846 var762 = 4;
3847 var763 = NEW_array__NativeArray(var762, &type_array__NativeArraykernel__Object);
3848 ((struct instance_array__NativeArray*)var763)->values[0] = (val*) var_res748;
3849 ((struct instance_array__NativeArray*)var763)->values[1] = (val*) var751;
3850 var764 = BOX_kernel__Int(var755); /* autobox from Int to Object */
3851 ((struct instance_array__NativeArray*)var763)->values[2] = (val*) var764;
3852 ((struct instance_array__NativeArray*)var763)->values[3] = (val*) var757;
3853 ((void (*)(val*, val*, long))(var761->class->vft[COLOR_array__Array__with_native]))(var761, var763, var762) /* with_native on <var761:Array[Object]>*/;
3854 CHECK_NEW_array__Array(var761);
3855 }
3856 var765 = ((val* (*)(val*))(var761->class->vft[COLOR_string__Object__to_s]))(var761) /* to_s on <var761:Array[Object]>*/;
3857 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var765) /* add on <var_v:SeparateCompilerVisitor>*/;
3858 if (varonce766) {
3859 var767 = varonce766;
3860 } else {
3861 var768 = "class_";
3862 var769 = 6;
3863 var770 = string__NativeString__to_s_with_length(var768, var769);
3864 var767 = var770;
3865 varonce766 = var767;
3866 }
3867 var771 = NEW_array__Array(&type_array__Arraykernel__Object);
3868 { /* var771 = array_instance Array[Object] */
3869 var772 = 2;
3870 var773 = NEW_array__NativeArray(var772, &type_array__NativeArraykernel__Object);
3871 ((struct instance_array__NativeArray*)var773)->values[0] = (val*) var767;
3872 ((struct instance_array__NativeArray*)var773)->values[1] = (val*) var_c_name;
3873 ((void (*)(val*, val*, long))(var771->class->vft[COLOR_array__Array__with_native]))(var771, var773, var772) /* with_native on <var771:Array[Object]>*/;
3874 CHECK_NEW_array__Array(var771);
3875 }
3876 var774 = ((val* (*)(val*))(var771->class->vft[COLOR_string__Object__to_s]))(var771) /* to_s on <var771:Array[Object]>*/;
3877 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var774) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3878 if (varonce775) {
3879 var776 = varonce775;
3880 } else {
3881 var777 = "->class = &class_";
3882 var778 = 17;
3883 var779 = string__NativeString__to_s_with_length(var777, var778);
3884 var776 = var779;
3885 varonce775 = var776;
3886 }
3887 if (varonce780) {
3888 var781 = varonce780;
3889 } else {
3890 var782 = ";";
3891 var783 = 1;
3892 var784 = string__NativeString__to_s_with_length(var782, var783);
3893 var781 = var784;
3894 varonce780 = var781;
3895 }
3896 var785 = NEW_array__Array(&type_array__Arraykernel__Object);
3897 { /* var785 = array_instance Array[Object] */
3898 var786 = 4;
3899 var787 = NEW_array__NativeArray(var786, &type_array__NativeArraykernel__Object);
3900 ((struct instance_array__NativeArray*)var787)->values[0] = (val*) var_res748;
3901 ((struct instance_array__NativeArray*)var787)->values[1] = (val*) var776;
3902 ((struct instance_array__NativeArray*)var787)->values[2] = (val*) var_c_name;
3903 ((struct instance_array__NativeArray*)var787)->values[3] = (val*) var781;
3904 ((void (*)(val*, val*, long))(var785->class->vft[COLOR_array__Array__with_native]))(var785, var787, var786) /* with_native on <var785:Array[Object]>*/;
3905 CHECK_NEW_array__Array(var785);
3906 }
3907 var788 = ((val* (*)(val*))(var785->class->vft[COLOR_string__Object__to_s]))(var785) /* to_s on <var785:Array[Object]>*/;
3908 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var788) /* add on <var_v:SeparateCompilerVisitor>*/;
3909 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_init_attr]))(self, var_v, var_res748, var_mtype) /* generate_init_attr on <self:SeparateErasureCompiler>*/;
3910 if (varonce789) {
3911 var790 = varonce789;
3912 } else {
3913 var791 = "return ";
3914 var792 = 7;
3915 var793 = string__NativeString__to_s_with_length(var791, var792);
3916 var790 = var793;
3917 varonce789 = var790;
3918 }
3919 if (varonce794) {
3920 var795 = varonce794;
3921 } else {
3922 var796 = ";";
3923 var797 = 1;
3924 var798 = string__NativeString__to_s_with_length(var796, var797);
3925 var795 = var798;
3926 varonce794 = var795;
3927 }
3928 var799 = NEW_array__Array(&type_array__Arraykernel__Object);
3929 { /* var799 = array_instance Array[Object] */
3930 var800 = 3;
3931 var801 = NEW_array__NativeArray(var800, &type_array__NativeArraykernel__Object);
3932 ((struct instance_array__NativeArray*)var801)->values[0] = (val*) var790;
3933 ((struct instance_array__NativeArray*)var801)->values[1] = (val*) var_res748;
3934 ((struct instance_array__NativeArray*)var801)->values[2] = (val*) var795;
3935 ((void (*)(val*, val*, long))(var799->class->vft[COLOR_array__Array__with_native]))(var799, var801, var800) /* with_native on <var799:Array[Object]>*/;
3936 CHECK_NEW_array__Array(var799);
3937 }
3938 var802 = ((val* (*)(val*))(var799->class->vft[COLOR_string__Object__to_s]))(var799) /* to_s on <var799:Array[Object]>*/;
3939 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var802) /* add on <var_v:SeparateCompilerVisitor>*/;
3940 if (varonce803) {
3941 var804 = varonce803;
3942 } else {
3943 var805 = "}";
3944 var806 = 1;
3945 var807 = string__NativeString__to_s_with_length(var805, var806);
3946 var804 = var807;
3947 varonce803 = var804;
3948 }
3949 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var804) /* add on <var_v:SeparateCompilerVisitor>*/;
3950 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_check_init_instance]))(self, var_mtype) /* generate_check_init_instance on <self:SeparateErasureCompiler>*/;
3951 RET_LABEL:;
3952 }
3953 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: Object, MClass) */
3954 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
3955 separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(self, p0);
3956 RET_LABEL:;
3957 }
3958 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: SeparateErasureCompiler, MClass): Bool */
3959 short int separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
3960 short int var /* : Bool */;
3961 val* var_mclass /* var mclass: MClass */;
3962 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
3963 val* var2 /* : nullable Object */;
3964 short int var3 /* : Bool */;
3965 short int var4 /* : Bool */;
3966 static val* varonce;
3967 val* var5 /* : String */;
3968 char* var6 /* : NativeString */;
3969 long var7 /* : Int */;
3970 val* var8 /* : String */;
3971 val* var9 /* : String */;
3972 val* var10 /* : Array[Object] */;
3973 long var11 /* : Int */;
3974 val* var12 /* : NativeArray[Object] */;
3975 val* var13 /* : String */;
3976 static val* varonce14;
3977 val* var15 /* : String */;
3978 char* var16 /* : NativeString */;
3979 long var17 /* : Int */;
3980 val* var18 /* : String */;
3981 val* var19 /* : String */;
3982 static val* varonce20;
3983 val* var21 /* : String */;
3984 char* var22 /* : NativeString */;
3985 long var23 /* : Int */;
3986 val* var24 /* : String */;
3987 val* var25 /* : Array[Object] */;
3988 long var26 /* : Int */;
3989 val* var27 /* : NativeArray[Object] */;
3990 val* var28 /* : String */;
3991 val* var29 /* : AbstractCompilerVisitor */;
3992 val* var_v /* var v: SeparateCompilerVisitor */;
3993 static val* varonce30;
3994 val* var31 /* : String */;
3995 char* var32 /* : NativeString */;
3996 long var33 /* : Int */;
3997 val* var34 /* : String */;
3998 val* var35 /* : String */;
3999 static val* varonce36;
4000 val* var37 /* : String */;
4001 char* var38 /* : NativeString */;
4002 long var39 /* : Int */;
4003 val* var40 /* : String */;
4004 val* var41 /* : Array[Object] */;
4005 long var42 /* : Int */;
4006 val* var43 /* : NativeArray[Object] */;
4007 val* var44 /* : String */;
4008 val* var45 /* : nullable Layout[MVirtualTypeProp] */;
4009 short int var46 /* : Bool */;
4010 int cltype;
4011 int idtype;
4012 static val* varonce47;
4013 val* var48 /* : String */;
4014 char* var49 /* : NativeString */;
4015 long var50 /* : Int */;
4016 val* var51 /* : String */;
4017 static val* varonce52;
4018 val* var53 /* : String */;
4019 char* var54 /* : NativeString */;
4020 long var55 /* : Int */;
4021 val* var56 /* : String */;
4022 val* var57 /* : Map[MClass, Array[nullable MPropDef]] */;
4023 val* var58 /* : nullable Object */;
4024 val* var59 /* : Iterator[nullable Object] */;
4025 short int var60 /* : Bool */;
4026 val* var61 /* : nullable Object */;
4027 val* var_vt /* var vt: nullable MPropDef */;
4028 val* var62 /* : null */;
4029 short int var63 /* : Bool */;
4030 static val* varonce64;
4031 val* var65 /* : String */;
4032 char* var66 /* : NativeString */;
4033 long var67 /* : Int */;
4034 val* var68 /* : String */;
4035 long var69 /* : Int */;
4036 long var_is_null /* var is_null: Int */;
4037 val* var70 /* : MClassDef */;
4038 val* var71 /* : MClassType */;
4039 short int var72 /* : Bool */;
4040 int cltype73;
4041 int idtype74;
4042 const char* var_class_name;
4043 val* var75 /* : nullable MType */;
4044 val* var76 /* : MType */;
4045 val* var_bound /* var bound: MType */;
4046 short int var77 /* : Bool */;
4047 int cltype78;
4048 int idtype79;
4049 val* var80 /* : MClassDef */;
4050 val* var81 /* : MClassType */;
4051 val* var82 /* : MType */;
4052 val* var83 /* : MType */;
4053 long var84 /* : Int */;
4054 short int var85 /* : Bool */;
4055 int cltype86;
4056 int idtype87;
4057 const char* var_class_name88;
4058 val* var89 /* : MClass */;
4059 val* var_vtclass /* var vtclass: MClass */;
4060 static val* varonce90;
4061 val* var91 /* : String */;
4062 char* var92 /* : NativeString */;
4063 long var93 /* : Int */;
4064 val* var94 /* : String */;
4065 val* var95 /* : String */;
4066 val* var96 /* : Array[Object] */;
4067 long var97 /* : Int */;
4068 val* var98 /* : NativeArray[Object] */;
4069 val* var99 /* : String */;
4070 static val* varonce100;
4071 val* var101 /* : String */;
4072 char* var102 /* : NativeString */;
4073 long var103 /* : Int */;
4074 val* var104 /* : String */;
4075 static val* varonce105;
4076 val* var106 /* : String */;
4077 char* var107 /* : NativeString */;
4078 long var108 /* : Int */;
4079 val* var109 /* : String */;
4080 val* var110 /* : String */;
4081 static val* varonce111;
4082 val* var112 /* : String */;
4083 char* var113 /* : NativeString */;
4084 long var114 /* : Int */;
4085 val* var115 /* : String */;
4086 static val* varonce116;
4087 val* var117 /* : String */;
4088 char* var118 /* : NativeString */;
4089 long var119 /* : Int */;
4090 val* var120 /* : String */;
4091 val* var121 /* : Array[Object] */;
4092 long var122 /* : Int */;
4093 val* var123 /* : NativeArray[Object] */;
4094 val* var124 /* : Object */;
4095 val* var125 /* : String */;
4096 static val* varonce127;
4097 val* var128 /* : String */;
4098 char* var129 /* : NativeString */;
4099 long var130 /* : Int */;
4100 val* var131 /* : String */;
4101 static val* varonce132;
4102 val* var133 /* : String */;
4103 char* var134 /* : NativeString */;
4104 long var135 /* : Int */;
4105 val* var136 /* : String */;
4106 short int var137 /* : Bool */;
4107 var_mclass = p0;
4108 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4109 var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var1, var_mclass) /* [] on <var1:Map[MClass, Array[nullable MPropDef]]>*/;
4110 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var2) /* is_empty on <var2:nullable Object(Array[nullable MPropDef])>*/;
4111 if (var3){
4112 var4 = 0;
4113 var = var4;
4114 goto RET_LABEL;
4115 } else {
4116 }
4117 if (varonce) {
4118 var5 = varonce;
4119 } else {
4120 var6 = "vts_table_";
4121 var7 = 10;
4122 var8 = string__NativeString__to_s_with_length(var6, var7);
4123 var5 = var8;
4124 varonce = var5;
4125 }
4126 var9 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4127 var10 = NEW_array__Array(&type_array__Arraykernel__Object);
4128 { /* var10 = array_instance Array[Object] */
4129 var11 = 2;
4130 var12 = NEW_array__NativeArray(var11, &type_array__NativeArraykernel__Object);
4131 ((struct instance_array__NativeArray*)var12)->values[0] = (val*) var5;
4132 ((struct instance_array__NativeArray*)var12)->values[1] = (val*) var9;
4133 ((void (*)(val*, val*, long))(var10->class->vft[COLOR_array__Array__with_native]))(var10, var12, var11) /* with_native on <var10:Array[Object]>*/;
4134 CHECK_NEW_array__Array(var10);
4135 }
4136 var13 = ((val* (*)(val*))(var10->class->vft[COLOR_string__Object__to_s]))(var10) /* to_s on <var10:Array[Object]>*/;
4137 if (varonce14) {
4138 var15 = varonce14;
4139 } else {
4140 var16 = "extern const struct vts_table vts_table_";
4141 var17 = 40;
4142 var18 = string__NativeString__to_s_with_length(var16, var17);
4143 var15 = var18;
4144 varonce14 = var15;
4145 }
4146 var19 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4147 if (varonce20) {
4148 var21 = varonce20;
4149 } else {
4150 var22 = ";";
4151 var23 = 1;
4152 var24 = string__NativeString__to_s_with_length(var22, var23);
4153 var21 = var24;
4154 varonce20 = var21;
4155 }
4156 var25 = NEW_array__Array(&type_array__Arraykernel__Object);
4157 { /* var25 = array_instance Array[Object] */
4158 var26 = 3;
4159 var27 = NEW_array__NativeArray(var26, &type_array__NativeArraykernel__Object);
4160 ((struct instance_array__NativeArray*)var27)->values[0] = (val*) var15;
4161 ((struct instance_array__NativeArray*)var27)->values[1] = (val*) var19;
4162 ((struct instance_array__NativeArray*)var27)->values[2] = (val*) var21;
4163 ((void (*)(val*, val*, long))(var25->class->vft[COLOR_array__Array__with_native]))(var25, var27, var26) /* with_native on <var25:Array[Object]>*/;
4164 CHECK_NEW_array__Array(var25);
4165 }
4166 var28 = ((val* (*)(val*))(var25->class->vft[COLOR_string__Object__to_s]))(var25) /* to_s on <var25:Array[Object]>*/;
4167 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var13, var28) /* provide_declaration on <self:SeparateErasureCompiler>*/;
4168 var29 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateErasureCompiler>*/;
4169 var_v = var29;
4170 if (varonce30) {
4171 var31 = varonce30;
4172 } else {
4173 var32 = "const struct vts_table vts_table_";
4174 var33 = 33;
4175 var34 = string__NativeString__to_s_with_length(var32, var33);
4176 var31 = var34;
4177 varonce30 = var31;
4178 }
4179 var35 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4180 if (varonce36) {
4181 var37 = varonce36;
4182 } else {
4183 var38 = " = {";
4184 var39 = 4;
4185 var40 = string__NativeString__to_s_with_length(var38, var39);
4186 var37 = var40;
4187 varonce36 = var37;
4188 }
4189 var41 = NEW_array__Array(&type_array__Arraykernel__Object);
4190 { /* var41 = array_instance Array[Object] */
4191 var42 = 3;
4192 var43 = NEW_array__NativeArray(var42, &type_array__NativeArraykernel__Object);
4193 ((struct instance_array__NativeArray*)var43)->values[0] = (val*) var31;
4194 ((struct instance_array__NativeArray*)var43)->values[1] = (val*) var35;
4195 ((struct instance_array__NativeArray*)var43)->values[2] = (val*) var37;
4196 ((void (*)(val*, val*, long))(var41->class->vft[COLOR_array__Array__with_native]))(var41, var43, var42) /* with_native on <var41:Array[Object]>*/;
4197 CHECK_NEW_array__Array(var41);
4198 }
4199 var44 = ((val* (*)(val*))(var41->class->vft[COLOR_string__Object__to_s]))(var41) /* to_s on <var41:Array[Object]>*/;
4200 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var44) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4201 var45 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(self) /* vt_layout on <self:SeparateErasureCompiler>*/;
4202 /* <var45:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
4203 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
4204 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
4205 if(var45 == NULL) {
4206 var46 = 0;
4207 } else {
4208 if(cltype >= var45->type->table_size) {
4209 var46 = 0;
4210 } else {
4211 var46 = var45->type->type_table[cltype] == idtype;
4212 }
4213 }
4214 if (var46){
4215 } else {
4216 if (varonce47) {
4217 var48 = varonce47;
4218 } else {
4219 var49 = "0, /* dummy */";
4220 var50 = 14;
4221 var51 = string__NativeString__to_s_with_length(var49, var50);
4222 var48 = var51;
4223 varonce47 = var48;
4224 }
4225 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var48) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4226 }
4227 if (varonce52) {
4228 var53 = varonce52;
4229 } else {
4230 var54 = "{";
4231 var55 = 1;
4232 var56 = string__NativeString__to_s_with_length(var54, var55);
4233 var53 = var56;
4234 varonce52 = var53;
4235 }
4236 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var53) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4237 var57 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4238 var58 = ((val* (*)(val*, val*))(var57->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var57, var_mclass) /* [] on <var57:Map[MClass, Array[nullable MPropDef]]>*/;
4239 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__Collection__iterator]))(var58) /* iterator on <var58:nullable Object(Array[nullable MPropDef])>*/;
4240 for(;;) {
4241 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var59) /* is_ok on <var59:Iterator[nullable Object]>*/;
4242 if(!var60) break;
4243 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__item]))(var59) /* item on <var59:Iterator[nullable Object]>*/;
4244 var_vt = var61;
4245 var62 = NULL;
4246 if (var_vt == NULL) {
4247 var63 = 1; /* is null */
4248 } else {
4249 var63 = 0; /* arg is null but recv is not */
4250 }
4251 if (var63){
4252 if (varonce64) {
4253 var65 = varonce64;
4254 } else {
4255 var66 = "{-1, NULL}, /* empty */";
4256 var67 = 23;
4257 var68 = string__NativeString__to_s_with_length(var66, var67);
4258 var65 = var68;
4259 varonce64 = var65;
4260 }
4261 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var65) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4262 } else {
4263 var69 = 0;
4264 var_is_null = var69;
4265 var70 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
4266 var71 = ((val* (*)(val*))(var70->class->vft[COLOR_model__MClassDef__bound_mtype]))(var70) /* bound_mtype on <var70:MClassDef>*/;
4267 /* <var_vt:nullable MPropDef(MPropDef)> isa MVirtualTypeDef */
4268 cltype73 = type_model__MVirtualTypeDef.color;
4269 idtype74 = type_model__MVirtualTypeDef.id;
4270 if(cltype73 >= var_vt->type->table_size) {
4271 var72 = 0;
4272 } else {
4273 var72 = var_vt->type->type_table[cltype73] == idtype74;
4274 }
4275 if (!var72) {
4276 var_class_name = var_vt == NULL ? "null" : var_vt->type->name;
4277 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MVirtualTypeDef", var_class_name);
4278 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 360);
4279 exit(1);
4280 }
4281 var75 = ((val* (*)(val*))(var_vt->class->vft[COLOR_model__MVirtualTypeDef__bound]))(var_vt) /* bound on <var_vt:MPropDef(MVirtualTypeDef)>*/;
4282 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>*/;
4283 var_bound = var76;
4284 for(;;) {
4285 /* <var_bound:MType> isa MNullableType */
4286 cltype78 = type_model__MNullableType.color;
4287 idtype79 = type_model__MNullableType.id;
4288 if(cltype78 >= var_bound->type->table_size) {
4289 var77 = 0;
4290 } else {
4291 var77 = var_bound->type->type_table[cltype78] == idtype79;
4292 }
4293 if (!var77) break;
4294 var80 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
4295 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_model__MClassDef__bound_mtype]))(var80) /* bound_mtype on <var80:MClassDef>*/;
4296 var82 = ((val* (*)(val*))(var_bound->class->vft[COLOR_model__MNullableType__mtype]))(var_bound) /* mtype on <var_bound:MType(MNullableType)>*/;
4297 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>*/;
4298 var_bound = var83;
4299 var84 = 1;
4300 var_is_null = var84;
4301 CONTINUE_label: (void)0;
4302 }
4303 BREAK_label: (void)0;
4304 /* <var_bound:MType> isa MClassType */
4305 cltype86 = type_model__MClassType.color;
4306 idtype87 = type_model__MClassType.id;
4307 if(cltype86 >= var_bound->type->table_size) {
4308 var85 = 0;
4309 } else {
4310 var85 = var_bound->type->type_table[cltype86] == idtype87;
4311 }
4312 if (!var85) {
4313 var_class_name88 = var_bound == NULL ? "null" : var_bound->type->name;
4314 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name88);
4315 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 365);
4316 exit(1);
4317 }
4318 var89 = ((val* (*)(val*))(var_bound->class->vft[COLOR_model__MClassType__mclass]))(var_bound) /* mclass on <var_bound:MType(MClassType)>*/;
4319 var_vtclass = var89;
4320 if (varonce90) {
4321 var91 = varonce90;
4322 } else {
4323 var92 = "class_";
4324 var93 = 6;
4325 var94 = string__NativeString__to_s_with_length(var92, var93);
4326 var91 = var94;
4327 varonce90 = var91;
4328 }
4329 var95 = ((val* (*)(val*))(var_vtclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_vtclass) /* c_name on <var_vtclass:MClass>*/;
4330 var96 = NEW_array__Array(&type_array__Arraykernel__Object);
4331 { /* var96 = array_instance Array[Object] */
4332 var97 = 2;
4333 var98 = NEW_array__NativeArray(var97, &type_array__NativeArraykernel__Object);
4334 ((struct instance_array__NativeArray*)var98)->values[0] = (val*) var91;
4335 ((struct instance_array__NativeArray*)var98)->values[1] = (val*) var95;
4336 ((void (*)(val*, val*, long))(var96->class->vft[COLOR_array__Array__with_native]))(var96, var98, var97) /* with_native on <var96:Array[Object]>*/;
4337 CHECK_NEW_array__Array(var96);
4338 }
4339 var99 = ((val* (*)(val*))(var96->class->vft[COLOR_string__Object__to_s]))(var96) /* to_s on <var96:Array[Object]>*/;
4340 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var99) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
4341 if (varonce100) {
4342 var101 = varonce100;
4343 } else {
4344 var102 = "{";
4345 var103 = 1;
4346 var104 = string__NativeString__to_s_with_length(var102, var103);
4347 var101 = var104;
4348 varonce100 = var101;
4349 }
4350 if (varonce105) {
4351 var106 = varonce105;
4352 } else {
4353 var107 = ", &class_";
4354 var108 = 9;
4355 var109 = string__NativeString__to_s_with_length(var107, var108);
4356 var106 = var109;
4357 varonce105 = var106;
4358 }
4359 var110 = ((val* (*)(val*))(var_vtclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_vtclass) /* c_name on <var_vtclass:MClass>*/;
4360 if (varonce111) {
4361 var112 = varonce111;
4362 } else {
4363 var113 = "}, /* ";
4364 var114 = 6;
4365 var115 = string__NativeString__to_s_with_length(var113, var114);
4366 var112 = var115;
4367 varonce111 = var112;
4368 }
4369 if (varonce116) {
4370 var117 = varonce116;
4371 } else {
4372 var118 = " */";
4373 var119 = 3;
4374 var120 = string__NativeString__to_s_with_length(var118, var119);
4375 var117 = var120;
4376 varonce116 = var117;
4377 }
4378 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
4379 { /* var121 = array_instance Array[Object] */
4380 var122 = 7;
4381 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
4382 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var101;
4383 var124 = BOX_kernel__Int(var_is_null); /* autobox from Int to Object */
4384 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var124;
4385 ((struct instance_array__NativeArray*)var123)->values[2] = (val*) var106;
4386 ((struct instance_array__NativeArray*)var123)->values[3] = (val*) var110;
4387 ((struct instance_array__NativeArray*)var123)->values[4] = (val*) var112;
4388 ((struct instance_array__NativeArray*)var123)->values[5] = (val*) var_vt;
4389 ((struct instance_array__NativeArray*)var123)->values[6] = (val*) var117;
4390 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
4391 CHECK_NEW_array__Array(var121);
4392 }
4393 var125 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
4394 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var125) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4395 }
4396 CONTINUE_label126: (void)0;
4397 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__next]))(var59) /* next on <var59:Iterator[nullable Object]>*/;
4398 }
4399 BREAK_label126: (void)0;
4400 if (varonce127) {
4401 var128 = varonce127;
4402 } else {
4403 var129 = "},";
4404 var130 = 2;
4405 var131 = string__NativeString__to_s_with_length(var129, var130);
4406 var128 = var131;
4407 varonce127 = var128;
4408 }
4409 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var128) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4410 if (varonce132) {
4411 var133 = varonce132;
4412 } else {
4413 var134 = "};";
4414 var135 = 2;
4415 var136 = string__NativeString__to_s_with_length(var134, var135);
4416 var133 = var136;
4417 varonce132 = var133;
4418 }
4419 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var133) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4420 var137 = 1;
4421 var = var137;
4422 goto RET_LABEL;
4423 RET_LABEL:;
4424 return var;
4425 }
4426 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: Object, MClass): Bool */
4427 short int VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
4428 short int var /* : Bool */;
4429 short int var1 /* : Bool */;
4430 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(self, p0);
4431 var = var1;
4432 RET_LABEL:;
4433 return var;
4434 }
4435 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: SeparateErasureCompiler, MClassType, nullable MType): MType */
4436 val* separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
4437 val* var /* : MType */;
4438 val* var_anchor /* var anchor: MClassType */;
4439 val* var_mtype /* var mtype: nullable MType */;
4440 val* var1 /* : null */;
4441 short int var2 /* : Bool */;
4442 static val* varonce;
4443 val* var3 /* : String */;
4444 char* var4 /* : NativeString */;
4445 long var5 /* : Int */;
4446 val* var6 /* : String */;
4447 short int var7 /* : Bool */;
4448 int cltype;
4449 int idtype;
4450 val* var8 /* : MModule */;
4451 val* var9 /* : MType */;
4452 short int var10 /* : Bool */;
4453 int cltype11;
4454 int idtype12;
4455 val* var13 /* : MModule */;
4456 val* var14 /* : MType */;
4457 var_anchor = p0;
4458 var_mtype = p1;
4459 var1 = NULL;
4460 if (var_mtype == NULL) {
4461 var2 = 1; /* is null */
4462 } else {
4463 var2 = 0; /* arg is null but recv is not */
4464 }
4465 if (var2){
4466 if (varonce) {
4467 var3 = varonce;
4468 } else {
4469 var4 = "NOT YET IMPLEMENTED: retrieve_vt_bound on null";
4470 var5 = 46;
4471 var6 = string__NativeString__to_s_with_length(var4, var5);
4472 var3 = var6;
4473 varonce = var3;
4474 }
4475 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var3) /* print on <self:SeparateErasureCompiler>*/;
4476 fprintf(stderr, "Runtime error: %s", "Aborted");
4477 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 378);
4478 exit(1);
4479 } else {
4480 }
4481 /* <var_mtype:nullable MType(MType)> isa MVirtualType */
4482 cltype = type_model__MVirtualType.color;
4483 idtype = type_model__MVirtualType.id;
4484 if(cltype >= var_mtype->type->table_size) {
4485 var7 = 0;
4486 } else {
4487 var7 = var_mtype->type->type_table[cltype] == idtype;
4488 }
4489 if (var7){
4490 var8 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
4491 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)>*/;
4492 var = var9;
4493 goto RET_LABEL;
4494 } else {
4495 /* <var_mtype:nullable MType(MType)> isa MParameterType */
4496 cltype11 = type_model__MParameterType.color;
4497 idtype12 = type_model__MParameterType.id;
4498 if(cltype11 >= var_mtype->type->table_size) {
4499 var10 = 0;
4500 } else {
4501 var10 = var_mtype->type->type_table[cltype11] == idtype12;
4502 }
4503 if (var10){
4504 var13 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
4505 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)>*/;
4506 var = var14;
4507 goto RET_LABEL;
4508 } else {
4509 var = var_mtype;
4510 goto RET_LABEL;
4511 }
4512 }
4513 RET_LABEL:;
4514 return var;
4515 }
4516 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: Object, MClassType, nullable MType): MType */
4517 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
4518 val* var /* : MType */;
4519 val* var1 /* : MType */;
4520 var1 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, p0, p1);
4521 var = var1;
4522 RET_LABEL:;
4523 return var;
4524 }
4525 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: SeparateErasureCompiler): SeparateCompilerVisitor */
4526 val* separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
4527 val* var /* : SeparateCompilerVisitor */;
4528 val* var1 /* : SeparateErasureCompilerVisitor */;
4529 short int var2 /* : Bool */;
4530 int cltype;
4531 int idtype;
4532 const struct type* type_struct;
4533 const char* var_class_name;
4534 var1 = NEW_separate_erasure_compiler__SeparateErasureCompilerVisitor(&type_separate_erasure_compiler__SeparateErasureCompilerVisitor);
4535 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init]))(var1, self) /* init on <var1:SeparateErasureCompilerVisitor>*/;
4536 CHECK_NEW_separate_erasure_compiler__SeparateErasureCompilerVisitor(var1);
4537 /* <var1:SeparateErasureCompilerVisitor> isa VISITOR */
4538 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
4539 cltype = type_struct->color;
4540 idtype = type_struct->id;
4541 if(cltype >= var1->type->table_size) {
4542 var2 = 0;
4543 } else {
4544 var2 = var1->type->type_table[cltype] == idtype;
4545 }
4546 if (!var2) {
4547 var_class_name = var1 == NULL ? "null" : var1->type->name;
4548 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "VISITOR", var_class_name);
4549 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 389);
4550 exit(1);
4551 }
4552 var = var1;
4553 goto RET_LABEL;
4554 RET_LABEL:;
4555 return var;
4556 }
4557 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
4558 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
4559 val* var /* : AbstractCompilerVisitor */;
4560 val* var1 /* : SeparateCompilerVisitor */;
4561 var1 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
4562 var = var1;
4563 RET_LABEL:;
4564 return var;
4565 }
4566 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MClass]] */
4567 val* separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
4568 val* var /* : Map[MClass, Array[nullable MClass]] */;
4569 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
4570 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_tables].val; /* @class_tables on <self:SeparateErasureCompiler> */
4571 if (var1 == NULL) {
4572 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @class_tables");
4573 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 393);
4574 exit(1);
4575 }
4576 var = var1;
4577 RET_LABEL:;
4578 return var;
4579 }
4580 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: Object): Map[MClass, Array[nullable MClass]] */
4581 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
4582 val* var /* : Map[MClass, Array[nullable MClass]] */;
4583 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
4584 var1 = separate_erasure_compiler__SeparateErasureCompiler__class_tables(self);
4585 var = var1;
4586 RET_LABEL:;
4587 return var;
4588 }
4589 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MClass]]) */
4590 void separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
4591 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_tables].val = p0; /* @class_tables on <self:SeparateErasureCompiler> */
4592 RET_LABEL:;
4593 }
4594 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: Object, Map[MClass, Array[nullable MClass]]) */
4595 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
4596 separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(self, p0);
4597 RET_LABEL:;
4598 }
4599 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MPropDef]] */
4600 val* separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
4601 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
4602 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
4603 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_tables].val; /* @vt_tables on <self:SeparateErasureCompiler> */
4604 if (var1 == NULL) {
4605 fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @vt_tables");
4606 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 394);
4607 exit(1);
4608 }
4609 var = var1;
4610 RET_LABEL:;
4611 return var;
4612 }
4613 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: Object): Map[MClass, Array[nullable MPropDef]] */
4614 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
4615 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
4616 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
4617 var1 = separate_erasure_compiler__SeparateErasureCompiler__vt_tables(self);
4618 var = var1;
4619 RET_LABEL:;
4620 return var;
4621 }
4622 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MPropDef]]) */
4623 void separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
4624 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_tables].val = p0; /* @vt_tables on <self:SeparateErasureCompiler> */
4625 RET_LABEL:;
4626 }
4627 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: Object, Map[MClass, Array[nullable MPropDef]]) */
4628 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
4629 separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(self, p0);
4630 RET_LABEL:;
4631 }
4632 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: SeparateErasureCompiler) */
4633 void separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
4634 static val* varonce;
4635 val* var /* : String */;
4636 char* var1 /* : NativeString */;
4637 long var2 /* : Int */;
4638 val* var3 /* : String */;
4639 static val* varonce4;
4640 val* var5 /* : String */;
4641 char* var6 /* : NativeString */;
4642 long var7 /* : Int */;
4643 val* var8 /* : String */;
4644 long var9 /* : Int */;
4645 long var_total /* var total: Int */;
4646 long var10 /* : Int */;
4647 long var_holes /* var holes: Int */;
4648 val* var11 /* : Map[MClass, Array[nullable MClass]] */;
4649 val* var12 /* : MapIterator[Object, nullable Object] */;
4650 short int var13 /* : Bool */;
4651 val* var14 /* : Object */;
4652 val* var_t /* var t: MClass */;
4653 val* var15 /* : nullable Object */;
4654 val* var_table /* var table: Array[nullable MClass] */;
4655 long var16 /* : Int */;
4656 long var17 /* : Int */;
4657 long var19 /* : Int */;
4658 val* var20 /* : Iterator[nullable Object] */;
4659 short int var21 /* : Bool */;
4660 val* var22 /* : nullable Object */;
4661 val* var_e /* var e: nullable MClass */;
4662 val* var23 /* : null */;
4663 short int var24 /* : Bool */;
4664 long var25 /* : Int */;
4665 long var26 /* : Int */;
4666 long var28 /* : Int */;
4667 static val* varonce30;
4668 val* var31 /* : String */;
4669 char* var32 /* : NativeString */;
4670 long var33 /* : Int */;
4671 val* var34 /* : String */;
4672 static val* varonce35;
4673 val* var36 /* : String */;
4674 char* var37 /* : NativeString */;
4675 long var38 /* : Int */;
4676 val* var39 /* : String */;
4677 val* var40 /* : Array[Object] */;
4678 long var41 /* : Int */;
4679 val* var42 /* : NativeArray[Object] */;
4680 val* var43 /* : Object */;
4681 val* var44 /* : Object */;
4682 val* var45 /* : String */;
4683 static val* varonce46;
4684 val* var47 /* : String */;
4685 char* var48 /* : NativeString */;
4686 long var49 /* : Int */;
4687 val* var50 /* : String */;
4688 static val* varonce51;
4689 val* var52 /* : String */;
4690 char* var53 /* : NativeString */;
4691 long var54 /* : Int */;
4692 val* var55 /* : String */;
4693 long var56 /* : Int */;
4694 long var57 /* : Int */;
4695 val* var58 /* : Map[MClass, Array[nullable MPropDef]] */;
4696 val* var59 /* : MapIterator[Object, nullable Object] */;
4697 short int var60 /* : Bool */;
4698 val* var61 /* : Object */;
4699 val* var_t62 /* var t: MClass */;
4700 val* var63 /* : nullable Object */;
4701 val* var_table64 /* var table: Array[nullable MPropDef] */;
4702 long var65 /* : Int */;
4703 long var66 /* : Int */;
4704 long var68 /* : Int */;
4705 val* var69 /* : Iterator[nullable Object] */;
4706 short int var70 /* : Bool */;
4707 val* var71 /* : nullable Object */;
4708 val* var_e72 /* var e: nullable MPropDef */;
4709 val* var73 /* : null */;
4710 short int var74 /* : Bool */;
4711 long var75 /* : Int */;
4712 long var76 /* : Int */;
4713 long var78 /* : Int */;
4714 static val* varonce81;
4715 val* var82 /* : String */;
4716 char* var83 /* : NativeString */;
4717 long var84 /* : Int */;
4718 val* var85 /* : String */;
4719 static val* varonce86;
4720 val* var87 /* : String */;
4721 char* var88 /* : NativeString */;
4722 long var89 /* : Int */;
4723 val* var90 /* : String */;
4724 val* var91 /* : Array[Object] */;
4725 long var92 /* : Int */;
4726 val* var93 /* : NativeArray[Object] */;
4727 val* var94 /* : Object */;
4728 val* var95 /* : Object */;
4729 val* var96 /* : String */;
4730 static val* varonce97;
4731 val* var98 /* : String */;
4732 char* var99 /* : NativeString */;
4733 long var100 /* : Int */;
4734 val* var101 /* : String */;
4735 static val* varonce102;
4736 val* var103 /* : String */;
4737 char* var104 /* : NativeString */;
4738 long var105 /* : Int */;
4739 val* var106 /* : String */;
4740 long var107 /* : Int */;
4741 long var108 /* : Int */;
4742 val* var109 /* : Map[MClass, Array[nullable MPropDef]] */;
4743 val* var110 /* : MapIterator[Object, nullable Object] */;
4744 short int var111 /* : Bool */;
4745 val* var112 /* : Object */;
4746 val* var_t113 /* var t: MClass */;
4747 val* var114 /* : nullable Object */;
4748 val* var_table115 /* var table: Array[nullable MPropDef] */;
4749 long var116 /* : Int */;
4750 long var117 /* : Int */;
4751 long var119 /* : Int */;
4752 val* var120 /* : Iterator[nullable Object] */;
4753 short int var121 /* : Bool */;
4754 val* var122 /* : nullable Object */;
4755 val* var_e123 /* var e: nullable MPropDef */;
4756 val* var124 /* : null */;
4757 short int var125 /* : Bool */;
4758 long var126 /* : Int */;
4759 long var127 /* : Int */;
4760 long var129 /* : Int */;
4761 static val* varonce132;
4762 val* var133 /* : String */;
4763 char* var134 /* : NativeString */;
4764 long var135 /* : Int */;
4765 val* var136 /* : String */;
4766 static val* varonce137;
4767 val* var138 /* : String */;
4768 char* var139 /* : NativeString */;
4769 long var140 /* : Int */;
4770 val* var141 /* : String */;
4771 val* var142 /* : Array[Object] */;
4772 long var143 /* : Int */;
4773 val* var144 /* : NativeArray[Object] */;
4774 val* var145 /* : Object */;
4775 val* var146 /* : Object */;
4776 val* var147 /* : String */;
4777 static val* varonce148;
4778 val* var149 /* : String */;
4779 char* var150 /* : NativeString */;
4780 long var151 /* : Int */;
4781 val* var152 /* : String */;
4782 static val* varonce153;
4783 val* var154 /* : String */;
4784 char* var155 /* : NativeString */;
4785 long var156 /* : Int */;
4786 val* var157 /* : String */;
4787 long var158 /* : Int */;
4788 long var159 /* : Int */;
4789 val* var160 /* : Map[MClass, Array[nullable MPropDef]] */;
4790 val* var161 /* : MapIterator[Object, nullable Object] */;
4791 short int var162 /* : Bool */;
4792 val* var163 /* : Object */;
4793 val* var_t164 /* var t: MClass */;
4794 val* var165 /* : nullable Object */;
4795 val* var_table166 /* var table: Array[nullable MPropDef] */;
4796 long var167 /* : Int */;
4797 long var168 /* : Int */;
4798 long var170 /* : Int */;
4799 val* var171 /* : Iterator[nullable Object] */;
4800 short int var172 /* : Bool */;
4801 val* var173 /* : nullable Object */;
4802 val* var_e174 /* var e: nullable MPropDef */;
4803 val* var175 /* : null */;
4804 short int var176 /* : Bool */;
4805 long var177 /* : Int */;
4806 long var178 /* : Int */;
4807 long var180 /* : Int */;
4808 static val* varonce183;
4809 val* var184 /* : String */;
4810 char* var185 /* : NativeString */;
4811 long var186 /* : Int */;
4812 val* var187 /* : String */;
4813 static val* varonce188;
4814 val* var189 /* : String */;
4815 char* var190 /* : NativeString */;
4816 long var191 /* : Int */;
4817 val* var192 /* : String */;
4818 val* var193 /* : Array[Object] */;
4819 long var194 /* : Int */;
4820 val* var195 /* : NativeArray[Object] */;
4821 val* var196 /* : Object */;
4822 val* var197 /* : Object */;
4823 val* var198 /* : String */;
4824 if (varonce) {
4825 var = varonce;
4826 } else {
4827 var1 = "# size of subtyping tables";
4828 var2 = 26;
4829 var3 = string__NativeString__to_s_with_length(var1, var2);
4830 var = var3;
4831 varonce = var;
4832 }
4833 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var) /* print on <self:SeparateErasureCompiler>*/;
4834 if (varonce4) {
4835 var5 = varonce4;
4836 } else {
4837 var6 = "\11total \11holes";
4838 var7 = 13;
4839 var8 = string__NativeString__to_s_with_length(var6, var7);
4840 var5 = var8;
4841 varonce4 = var5;
4842 }
4843 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var5) /* print on <self:SeparateErasureCompiler>*/;
4844 var9 = 0;
4845 var_total = var9;
4846 var10 = 0;
4847 var_holes = var10;
4848 var11 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables]))(self) /* class_tables on <self:SeparateErasureCompiler>*/;
4849 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var11) /* iterator on <var11:Map[MClass, Array[nullable MClass]]>*/;
4850 for(;;) {
4851 var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var12) /* is_ok on <var12:MapIterator[Object, nullable Object]>*/;
4852 if(!var13) break;
4853 var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__key]))(var12) /* key on <var12:MapIterator[Object, nullable Object]>*/;
4854 var_t = var14;
4855 var15 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__item]))(var12) /* item on <var12:MapIterator[Object, nullable Object]>*/;
4856 var_table = var15;
4857 var16 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
4858 { /* Inline kernel#Int#+ (var_total,var16) */
4859 var19 = var_total + var16;
4860 var17 = var19;
4861 goto RET_LABEL18;
4862 RET_LABEL18:(void)0;
4863 }
4864 var_total = var17;
4865 var20 = ((val* (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table) /* iterator on <var_table:Array[nullable MClass]>*/;
4866 for(;;) {
4867 var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
4868 if(!var21) break;
4869 var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
4870 var_e = var22;
4871 var23 = NULL;
4872 if (var_e == NULL) {
4873 var24 = 1; /* is null */
4874 } else {
4875 var24 = 0; /* arg is null but recv is not */
4876 }
4877 if (var24){
4878 var25 = 1;
4879 { /* Inline kernel#Int#+ (var_holes,var25) */
4880 var28 = var_holes + var25;
4881 var26 = var28;
4882 goto RET_LABEL27;
4883 RET_LABEL27:(void)0;
4884 }
4885 var_holes = var26;
4886 } else {
4887 }
4888 CONTINUE_label: (void)0;
4889 ((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
4890 }
4891 BREAK_label: (void)0;
4892 CONTINUE_label29: (void)0;
4893 ((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__next]))(var12) /* next on <var12:MapIterator[Object, nullable Object]>*/;
4894 }
4895 BREAK_label29: (void)0;
4896 if (varonce30) {
4897 var31 = varonce30;
4898 } else {
4899 var32 = "\11";
4900 var33 = 1;
4901 var34 = string__NativeString__to_s_with_length(var32, var33);
4902 var31 = var34;
4903 varonce30 = var31;
4904 }
4905 if (varonce35) {
4906 var36 = varonce35;
4907 } else {
4908 var37 = "\11";
4909 var38 = 1;
4910 var39 = string__NativeString__to_s_with_length(var37, var38);
4911 var36 = var39;
4912 varonce35 = var36;
4913 }
4914 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
4915 { /* var40 = array_instance Array[Object] */
4916 var41 = 4;
4917 var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
4918 ((struct instance_array__NativeArray*)var42)->values[0] = (val*) var31;
4919 var43 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
4920 ((struct instance_array__NativeArray*)var42)->values[1] = (val*) var43;
4921 ((struct instance_array__NativeArray*)var42)->values[2] = (val*) var36;
4922 var44 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
4923 ((struct instance_array__NativeArray*)var42)->values[3] = (val*) var44;
4924 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
4925 CHECK_NEW_array__Array(var40);
4926 }
4927 var45 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
4928 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var45) /* print on <self:SeparateErasureCompiler>*/;
4929 if (varonce46) {
4930 var47 = varonce46;
4931 } else {
4932 var48 = "# size of resolution tables";
4933 var49 = 27;
4934 var50 = string__NativeString__to_s_with_length(var48, var49);
4935 var47 = var50;
4936 varonce46 = var47;
4937 }
4938 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var47) /* print on <self:SeparateErasureCompiler>*/;
4939 if (varonce51) {
4940 var52 = varonce51;
4941 } else {
4942 var53 = "\11total \11holes";
4943 var54 = 13;
4944 var55 = string__NativeString__to_s_with_length(var53, var54);
4945 var52 = var55;
4946 varonce51 = var52;
4947 }
4948 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var52) /* print on <self:SeparateErasureCompiler>*/;
4949 var56 = 0;
4950 var_total = var56;
4951 var57 = 0;
4952 var_holes = var57;
4953 var58 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4954 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var58) /* iterator on <var58:Map[MClass, Array[nullable MPropDef]]>*/;
4955 for(;;) {
4956 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var59) /* is_ok on <var59:MapIterator[Object, nullable Object]>*/;
4957 if(!var60) break;
4958 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__key]))(var59) /* key on <var59:MapIterator[Object, nullable Object]>*/;
4959 var_t62 = var61;
4960 var63 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__item]))(var59) /* item on <var59:MapIterator[Object, nullable Object]>*/;
4961 var_table64 = var63;
4962 var65 = ((long (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__length]))(var_table64) /* length on <var_table64:Array[nullable MPropDef]>*/;
4963 { /* Inline kernel#Int#+ (var_total,var65) */
4964 var68 = var_total + var65;
4965 var66 = var68;
4966 goto RET_LABEL67;
4967 RET_LABEL67:(void)0;
4968 }
4969 var_total = var66;
4970 var69 = ((val* (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table64) /* iterator on <var_table64:Array[nullable MPropDef]>*/;
4971 for(;;) {
4972 var70 = ((short int (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var69) /* is_ok on <var69:Iterator[nullable Object]>*/;
4973 if(!var70) break;
4974 var71 = ((val* (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__item]))(var69) /* item on <var69:Iterator[nullable Object]>*/;
4975 var_e72 = var71;
4976 var73 = NULL;
4977 if (var_e72 == NULL) {
4978 var74 = 1; /* is null */
4979 } else {
4980 var74 = 0; /* arg is null but recv is not */
4981 }
4982 if (var74){
4983 var75 = 1;
4984 { /* Inline kernel#Int#+ (var_holes,var75) */
4985 var78 = var_holes + var75;
4986 var76 = var78;
4987 goto RET_LABEL77;
4988 RET_LABEL77:(void)0;
4989 }
4990 var_holes = var76;
4991 } else {
4992 }
4993 CONTINUE_label79: (void)0;
4994 ((void (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__next]))(var69) /* next on <var69:Iterator[nullable Object]>*/;
4995 }
4996 BREAK_label79: (void)0;
4997 CONTINUE_label80: (void)0;
4998 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__next]))(var59) /* next on <var59:MapIterator[Object, nullable Object]>*/;
4999 }
5000 BREAK_label80: (void)0;
5001 if (varonce81) {
5002 var82 = varonce81;
5003 } else {
5004 var83 = "\11";
5005 var84 = 1;
5006 var85 = string__NativeString__to_s_with_length(var83, var84);
5007 var82 = var85;
5008 varonce81 = var82;
5009 }
5010 if (varonce86) {
5011 var87 = varonce86;
5012 } else {
5013 var88 = "\11";
5014 var89 = 1;
5015 var90 = string__NativeString__to_s_with_length(var88, var89);
5016 var87 = var90;
5017 varonce86 = var87;
5018 }
5019 var91 = NEW_array__Array(&type_array__Arraykernel__Object);
5020 { /* var91 = array_instance Array[Object] */
5021 var92 = 4;
5022 var93 = NEW_array__NativeArray(var92, &type_array__NativeArraykernel__Object);
5023 ((struct instance_array__NativeArray*)var93)->values[0] = (val*) var82;
5024 var94 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5025 ((struct instance_array__NativeArray*)var93)->values[1] = (val*) var94;
5026 ((struct instance_array__NativeArray*)var93)->values[2] = (val*) var87;
5027 var95 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5028 ((struct instance_array__NativeArray*)var93)->values[3] = (val*) var95;
5029 ((void (*)(val*, val*, long))(var91->class->vft[COLOR_array__Array__with_native]))(var91, var93, var92) /* with_native on <var91:Array[Object]>*/;
5030 CHECK_NEW_array__Array(var91);
5031 }
5032 var96 = ((val* (*)(val*))(var91->class->vft[COLOR_string__Object__to_s]))(var91) /* to_s on <var91:Array[Object]>*/;
5033 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var96) /* print on <self:SeparateErasureCompiler>*/;
5034 if (varonce97) {
5035 var98 = varonce97;
5036 } else {
5037 var99 = "# size of methods tables";
5038 var100 = 24;
5039 var101 = string__NativeString__to_s_with_length(var99, var100);
5040 var98 = var101;
5041 varonce97 = var98;
5042 }
5043 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var98) /* print on <self:SeparateErasureCompiler>*/;
5044 if (varonce102) {
5045 var103 = varonce102;
5046 } else {
5047 var104 = "\11total \11holes";
5048 var105 = 13;
5049 var106 = string__NativeString__to_s_with_length(var104, var105);
5050 var103 = var106;
5051 varonce102 = var103;
5052 }
5053 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var103) /* print on <self:SeparateErasureCompiler>*/;
5054 var107 = 0;
5055 var_total = var107;
5056 var108 = 0;
5057 var_holes = var108;
5058 var109 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateErasureCompiler>*/;
5059 var110 = ((val* (*)(val*))(var109->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var109) /* iterator on <var109:Map[MClass, Array[nullable MPropDef]]>*/;
5060 for(;;) {
5061 var111 = ((short int (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var110) /* is_ok on <var110:MapIterator[Object, nullable Object]>*/;
5062 if(!var111) break;
5063 var112 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__key]))(var110) /* key on <var110:MapIterator[Object, nullable Object]>*/;
5064 var_t113 = var112;
5065 var114 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__item]))(var110) /* item on <var110:MapIterator[Object, nullable Object]>*/;
5066 var_table115 = var114;
5067 var116 = ((long (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__length]))(var_table115) /* length on <var_table115:Array[nullable MPropDef]>*/;
5068 { /* Inline kernel#Int#+ (var_total,var116) */
5069 var119 = var_total + var116;
5070 var117 = var119;
5071 goto RET_LABEL118;
5072 RET_LABEL118:(void)0;
5073 }
5074 var_total = var117;
5075 var120 = ((val* (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table115) /* iterator on <var_table115:Array[nullable MPropDef]>*/;
5076 for(;;) {
5077 var121 = ((short int (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var120) /* is_ok on <var120:Iterator[nullable Object]>*/;
5078 if(!var121) break;
5079 var122 = ((val* (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__item]))(var120) /* item on <var120:Iterator[nullable Object]>*/;
5080 var_e123 = var122;
5081 var124 = NULL;
5082 if (var_e123 == NULL) {
5083 var125 = 1; /* is null */
5084 } else {
5085 var125 = 0; /* arg is null but recv is not */
5086 }
5087 if (var125){
5088 var126 = 1;
5089 { /* Inline kernel#Int#+ (var_holes,var126) */
5090 var129 = var_holes + var126;
5091 var127 = var129;
5092 goto RET_LABEL128;
5093 RET_LABEL128:(void)0;
5094 }
5095 var_holes = var127;
5096 } else {
5097 }
5098 CONTINUE_label130: (void)0;
5099 ((void (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__next]))(var120) /* next on <var120:Iterator[nullable Object]>*/;
5100 }
5101 BREAK_label130: (void)0;
5102 CONTINUE_label131: (void)0;
5103 ((void (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__next]))(var110) /* next on <var110:MapIterator[Object, nullable Object]>*/;
5104 }
5105 BREAK_label131: (void)0;
5106 if (varonce132) {
5107 var133 = varonce132;
5108 } else {
5109 var134 = "\11";
5110 var135 = 1;
5111 var136 = string__NativeString__to_s_with_length(var134, var135);
5112 var133 = var136;
5113 varonce132 = var133;
5114 }
5115 if (varonce137) {
5116 var138 = varonce137;
5117 } else {
5118 var139 = "\11";
5119 var140 = 1;
5120 var141 = string__NativeString__to_s_with_length(var139, var140);
5121 var138 = var141;
5122 varonce137 = var138;
5123 }
5124 var142 = NEW_array__Array(&type_array__Arraykernel__Object);
5125 { /* var142 = array_instance Array[Object] */
5126 var143 = 4;
5127 var144 = NEW_array__NativeArray(var143, &type_array__NativeArraykernel__Object);
5128 ((struct instance_array__NativeArray*)var144)->values[0] = (val*) var133;
5129 var145 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5130 ((struct instance_array__NativeArray*)var144)->values[1] = (val*) var145;
5131 ((struct instance_array__NativeArray*)var144)->values[2] = (val*) var138;
5132 var146 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5133 ((struct instance_array__NativeArray*)var144)->values[3] = (val*) var146;
5134 ((void (*)(val*, val*, long))(var142->class->vft[COLOR_array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
5135 CHECK_NEW_array__Array(var142);
5136 }
5137 var147 = ((val* (*)(val*))(var142->class->vft[COLOR_string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
5138 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var147) /* print on <self:SeparateErasureCompiler>*/;
5139 if (varonce148) {
5140 var149 = varonce148;
5141 } else {
5142 var150 = "# size of attributes tables";
5143 var151 = 27;
5144 var152 = string__NativeString__to_s_with_length(var150, var151);
5145 var149 = var152;
5146 varonce148 = var149;
5147 }
5148 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var149) /* print on <self:SeparateErasureCompiler>*/;
5149 if (varonce153) {
5150 var154 = varonce153;
5151 } else {
5152 var155 = "\11total \11holes";
5153 var156 = 13;
5154 var157 = string__NativeString__to_s_with_length(var155, var156);
5155 var154 = var157;
5156 varonce153 = var154;
5157 }
5158 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var154) /* print on <self:SeparateErasureCompiler>*/;
5159 var158 = 0;
5160 var_total = var158;
5161 var159 = 0;
5162 var_holes = var159;
5163 var160 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateErasureCompiler>*/;
5164 var161 = ((val* (*)(val*))(var160->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var160) /* iterator on <var160:Map[MClass, Array[nullable MPropDef]]>*/;
5165 for(;;) {
5166 var162 = ((short int (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var161) /* is_ok on <var161:MapIterator[Object, nullable Object]>*/;
5167 if(!var162) break;
5168 var163 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__key]))(var161) /* key on <var161:MapIterator[Object, nullable Object]>*/;
5169 var_t164 = var163;
5170 var165 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__item]))(var161) /* item on <var161:MapIterator[Object, nullable Object]>*/;
5171 var_table166 = var165;
5172 var167 = ((long (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__length]))(var_table166) /* length on <var_table166:Array[nullable MPropDef]>*/;
5173 { /* Inline kernel#Int#+ (var_total,var167) */
5174 var170 = var_total + var167;
5175 var168 = var170;
5176 goto RET_LABEL169;
5177 RET_LABEL169:(void)0;
5178 }
5179 var_total = var168;
5180 var171 = ((val* (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table166) /* iterator on <var_table166:Array[nullable MPropDef]>*/;
5181 for(;;) {
5182 var172 = ((short int (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var171) /* is_ok on <var171:Iterator[nullable Object]>*/;
5183 if(!var172) break;
5184 var173 = ((val* (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__item]))(var171) /* item on <var171:Iterator[nullable Object]>*/;
5185 var_e174 = var173;
5186 var175 = NULL;
5187 if (var_e174 == NULL) {
5188 var176 = 1; /* is null */
5189 } else {
5190 var176 = 0; /* arg is null but recv is not */
5191 }
5192 if (var176){
5193 var177 = 1;
5194 { /* Inline kernel#Int#+ (var_holes,var177) */
5195 var180 = var_holes + var177;
5196 var178 = var180;
5197 goto RET_LABEL179;
5198 RET_LABEL179:(void)0;
5199 }
5200 var_holes = var178;
5201 } else {
5202 }
5203 CONTINUE_label181: (void)0;
5204 ((void (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__next]))(var171) /* next on <var171:Iterator[nullable Object]>*/;
5205 }
5206 BREAK_label181: (void)0;
5207 CONTINUE_label182: (void)0;
5208 ((void (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__next]))(var161) /* next on <var161:MapIterator[Object, nullable Object]>*/;
5209 }
5210 BREAK_label182: (void)0;
5211 if (varonce183) {
5212 var184 = varonce183;
5213 } else {
5214 var185 = "\11";
5215 var186 = 1;
5216 var187 = string__NativeString__to_s_with_length(var185, var186);
5217 var184 = var187;
5218 varonce183 = var184;
5219 }
5220 if (varonce188) {
5221 var189 = varonce188;
5222 } else {
5223 var190 = "\11";
5224 var191 = 1;
5225 var192 = string__NativeString__to_s_with_length(var190, var191);
5226 var189 = var192;
5227 varonce188 = var189;
5228 }
5229 var193 = NEW_array__Array(&type_array__Arraykernel__Object);
5230 { /* var193 = array_instance Array[Object] */
5231 var194 = 4;
5232 var195 = NEW_array__NativeArray(var194, &type_array__NativeArraykernel__Object);
5233 ((struct instance_array__NativeArray*)var195)->values[0] = (val*) var184;
5234 var196 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5235 ((struct instance_array__NativeArray*)var195)->values[1] = (val*) var196;
5236 ((struct instance_array__NativeArray*)var195)->values[2] = (val*) var189;
5237 var197 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5238 ((struct instance_array__NativeArray*)var195)->values[3] = (val*) var197;
5239 ((void (*)(val*, val*, long))(var193->class->vft[COLOR_array__Array__with_native]))(var193, var195, var194) /* with_native on <var193:Array[Object]>*/;
5240 CHECK_NEW_array__Array(var193);
5241 }
5242 var198 = ((val* (*)(val*))(var193->class->vft[COLOR_string__Object__to_s]))(var193) /* to_s on <var193:Array[Object]>*/;
5243 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var198) /* print on <self:SeparateErasureCompiler>*/;
5244 RET_LABEL:;
5245 }
5246 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: Object) */
5247 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
5248 separate_erasure_compiler__SeparateErasureCompiler__display_sizes(self);
5249 RET_LABEL:;
5250 }
5251 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: SeparateErasureCompilerVisitor, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
5252 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
5253 val* var /* : nullable RuntimeVariable */;
5254 val* var_callsite /* var callsite: CallSite */;
5255 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
5256 val* var1 /* : nullable RuntimeVariable */;
5257 val* var_res /* var res: nullable RuntimeVariable */;
5258 short int var2 /* : Bool */;
5259 short int var3 /* : Bool */;
5260 short int var_ /* var : Bool */;
5261 val* var4 /* : AbstractCompiler */;
5262 short int var5 /* : Bool */;
5263 int cltype;
5264 int idtype;
5265 const char* var_class_name;
5266 val* var6 /* : ModelBuilder */;
5267 val* var7 /* : ToolContext */;
5268 val* var8 /* : OptionBool */;
5269 val* var9 /* : nullable Object */;
5270 short int var10 /* : Bool */;
5271 short int var11 /* : Bool */;
5272 val* var12 /* : null */;
5273 short int var13 /* : Bool */;
5274 val* var14 /* : MSignature */;
5275 val* var15 /* : nullable MType */;
5276 val* var_mtype /* var mtype: nullable MType */;
5277 val* var16 /* : null */;
5278 short int var17 /* : Bool */;
5279 static val* varonce;
5280 val* var18 /* : String */;
5281 char* var19 /* : NativeString */;
5282 long var20 /* : Int */;
5283 val* var21 /* : String */;
5284 static val* varonce22;
5285 val* var23 /* : String */;
5286 char* var24 /* : NativeString */;
5287 long var25 /* : Int */;
5288 val* var26 /* : String */;
5289 static val* varonce27;
5290 val* var28 /* : String */;
5291 char* var29 /* : NativeString */;
5292 long var30 /* : Int */;
5293 val* var31 /* : String */;
5294 val* var32 /* : Array[Object] */;
5295 long var33 /* : Int */;
5296 val* var34 /* : NativeArray[Object] */;
5297 val* var35 /* : String */;
5298 static val* varonce36;
5299 val* var37 /* : String */;
5300 char* var38 /* : NativeString */;
5301 long var39 /* : Int */;
5302 val* var40 /* : String */;
5303 val* var41 /* : RuntimeVariable */;
5304 val* var_cond /* var cond: RuntimeVariable */;
5305 static val* varonce42;
5306 val* var43 /* : String */;
5307 char* var44 /* : NativeString */;
5308 long var45 /* : Int */;
5309 val* var46 /* : String */;
5310 static val* varonce47;
5311 val* var48 /* : String */;
5312 char* var49 /* : NativeString */;
5313 long var50 /* : Int */;
5314 val* var51 /* : String */;
5315 val* var52 /* : Array[Object] */;
5316 long var53 /* : Int */;
5317 val* var54 /* : NativeArray[Object] */;
5318 val* var55 /* : String */;
5319 static val* varonce56;
5320 val* var57 /* : String */;
5321 char* var58 /* : NativeString */;
5322 long var59 /* : Int */;
5323 val* var60 /* : String */;
5324 static val* varonce61;
5325 val* var62 /* : String */;
5326 char* var63 /* : NativeString */;
5327 long var64 /* : Int */;
5328 val* var65 /* : String */;
5329 var_callsite = p0;
5330 var_arguments = p1;
5331 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite]))(self, p0, p1) /* compile_callsite on <self:SeparateErasureCompilerVisitor>*/;
5332 var_res = var1;
5333 var3 = ((short int (*)(val*))(var_callsite->class->vft[COLOR_typing__CallSite__erasure_cast]))(var_callsite) /* erasure_cast on <var_callsite:CallSite>*/;
5334 var_ = var3;
5335 if (var3){
5336 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
5337 /* <var4:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
5338 cltype = type_separate_erasure_compiler__SeparateErasureCompiler.color;
5339 idtype = type_separate_erasure_compiler__SeparateErasureCompiler.id;
5340 if(cltype >= var4->type->table_size) {
5341 var5 = 0;
5342 } else {
5343 var5 = var4->type->type_table[cltype] == idtype;
5344 }
5345 if (!var5) {
5346 var_class_name = var4 == NULL ? "null" : var4->type->name;
5347 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name);
5348 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 446);
5349 exit(1);
5350 }
5351 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var4) /* modelbuilder on <var4:SeparateCompiler(SeparateErasureCompiler)>*/;
5352 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var6) /* toolcontext on <var6:ModelBuilder>*/;
5353 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>*/;
5354 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_opts__Option__value]))(var8) /* value on <var8:OptionBool>*/;
5355 var10 = ((struct instance_kernel__Bool*)var9)->value; /* autounbox from nullable Object to Bool */;
5356 var11 = !var10;
5357 var2 = var11;
5358 } else {
5359 var2 = var_;
5360 }
5361 if (var2){
5362 var12 = NULL;
5363 if (var_res == NULL) {
5364 var13 = 0; /* is null */
5365 } else {
5366 var13 = 1; /* arg is null and recv is not */
5367 }
5368 if (!var13) {
5369 fprintf(stderr, "Runtime error: %s", "Assert failed");
5370 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 447);
5371 exit(1);
5372 }
5373 var14 = ((val* (*)(val*))(var_callsite->class->vft[COLOR_typing__CallSite__msignature]))(var_callsite) /* msignature on <var_callsite:CallSite>*/;
5374 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_model__MSignature__return_mtype]))(var14) /* return_mtype on <var14:MSignature>*/;
5375 var_mtype = var15;
5376 var16 = NULL;
5377 if (var_mtype == NULL) {
5378 var17 = 0; /* is null */
5379 } else {
5380 var17 = 1; /* arg is null and recv is not */
5381 }
5382 if (!var17) {
5383 fprintf(stderr, "Runtime error: %s", "Assert failed");
5384 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 449);
5385 exit(1);
5386 }
5387 if (varonce) {
5388 var18 = varonce;
5389 } else {
5390 var19 = "/* Erasure cast for return ";
5391 var20 = 27;
5392 var21 = string__NativeString__to_s_with_length(var19, var20);
5393 var18 = var21;
5394 varonce = var18;
5395 }
5396 if (varonce22) {
5397 var23 = varonce22;
5398 } else {
5399 var24 = " isa ";
5400 var25 = 5;
5401 var26 = string__NativeString__to_s_with_length(var24, var25);
5402 var23 = var26;
5403 varonce22 = var23;
5404 }
5405 if (varonce27) {
5406 var28 = varonce27;
5407 } else {
5408 var29 = " */";
5409 var30 = 3;
5410 var31 = string__NativeString__to_s_with_length(var29, var30);
5411 var28 = var31;
5412 varonce27 = var28;
5413 }
5414 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
5415 { /* var32 = array_instance Array[Object] */
5416 var33 = 5;
5417 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
5418 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var18;
5419 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_res;
5420 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var23;
5421 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var_mtype;
5422 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
5423 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
5424 CHECK_NEW_array__Array(var32);
5425 }
5426 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
5427 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var35) /* add on <self:SeparateErasureCompilerVisitor>*/;
5428 if (varonce36) {
5429 var37 = varonce36;
5430 } else {
5431 var38 = "erasure";
5432 var39 = 7;
5433 var40 = string__NativeString__to_s_with_length(var38, var39);
5434 var37 = var40;
5435 varonce36 = var37;
5436 }
5437 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>*/;
5438 var_cond = var41;
5439 if (varonce42) {
5440 var43 = varonce42;
5441 } else {
5442 var44 = "if (!";
5443 var45 = 5;
5444 var46 = string__NativeString__to_s_with_length(var44, var45);
5445 var43 = var46;
5446 varonce42 = var43;
5447 }
5448 if (varonce47) {
5449 var48 = varonce47;
5450 } else {
5451 var49 = ") {";
5452 var50 = 3;
5453 var51 = string__NativeString__to_s_with_length(var49, var50);
5454 var48 = var51;
5455 varonce47 = var48;
5456 }
5457 var52 = NEW_array__Array(&type_array__Arraykernel__Object);
5458 { /* var52 = array_instance Array[Object] */
5459 var53 = 3;
5460 var54 = NEW_array__NativeArray(var53, &type_array__NativeArraykernel__Object);
5461 ((struct instance_array__NativeArray*)var54)->values[0] = (val*) var43;
5462 ((struct instance_array__NativeArray*)var54)->values[1] = (val*) var_cond;
5463 ((struct instance_array__NativeArray*)var54)->values[2] = (val*) var48;
5464 ((void (*)(val*, val*, long))(var52->class->vft[COLOR_array__Array__with_native]))(var52, var54, var53) /* with_native on <var52:Array[Object]>*/;
5465 CHECK_NEW_array__Array(var52);
5466 }
5467 var55 = ((val* (*)(val*))(var52->class->vft[COLOR_string__Object__to_s]))(var52) /* to_s on <var52:Array[Object]>*/;
5468 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var55) /* add on <self:SeparateErasureCompilerVisitor>*/;
5469 if (varonce56) {
5470 var57 = varonce56;
5471 } else {
5472 var58 = "Cast failed";
5473 var59 = 11;
5474 var60 = string__NativeString__to_s_with_length(var58, var59);
5475 var57 = var60;
5476 varonce56 = var57;
5477 }
5478 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var57) /* add_abort on <self:SeparateErasureCompilerVisitor>*/;
5479 if (varonce61) {
5480 var62 = varonce61;
5481 } else {
5482 var63 = "}";
5483 var64 = 1;
5484 var65 = string__NativeString__to_s_with_length(var63, var64);
5485 var62 = var65;
5486 varonce61 = var62;
5487 }
5488 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var62) /* add on <self:SeparateErasureCompilerVisitor>*/;
5489 } else {
5490 }
5491 var = var_res;
5492 goto RET_LABEL;
5493 RET_LABEL:;
5494 return var;
5495 }
5496 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: Object, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
5497 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
5498 val* var /* : nullable RuntimeVariable */;
5499 val* var1 /* : nullable RuntimeVariable */;
5500 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(self, p0, p1);
5501 var = var1;
5502 RET_LABEL:;
5503 return var;
5504 }
5505 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: SeparateErasureCompilerVisitor, MClassType): RuntimeVariable */
5506 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
5507 val* var /* : RuntimeVariable */;
5508 val* var_mtype /* var mtype: MClassType */;
5509 static val* varonce;
5510 val* var1 /* : String */;
5511 char* var2 /* : NativeString */;
5512 long var3 /* : Int */;
5513 val* var4 /* : String */;
5514 val* var5 /* : MClass */;
5515 val* var6 /* : String */;
5516 val* var7 /* : Array[Object] */;
5517 long var8 /* : Int */;
5518 val* var9 /* : NativeArray[Object] */;
5519 val* var10 /* : String */;
5520 static val* varonce11;
5521 val* var12 /* : String */;
5522 char* var13 /* : NativeString */;
5523 long var14 /* : Int */;
5524 val* var15 /* : String */;
5525 val* var16 /* : MClass */;
5526 val* var17 /* : String */;
5527 static val* varonce18;
5528 val* var19 /* : String */;
5529 char* var20 /* : NativeString */;
5530 long var21 /* : Int */;
5531 val* var22 /* : String */;
5532 val* var23 /* : Array[Object] */;
5533 long var24 /* : Int */;
5534 val* var25 /* : NativeArray[Object] */;
5535 val* var26 /* : String */;
5536 val* var27 /* : RuntimeVariable */;
5537 var_mtype = p0;
5538 if (varonce) {
5539 var1 = varonce;
5540 } else {
5541 var2 = "NEW_";
5542 var3 = 4;
5543 var4 = string__NativeString__to_s_with_length(var2, var3);
5544 var1 = var4;
5545 varonce = var1;
5546 }
5547 var5 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
5548 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var5) /* c_name on <var5:MClass>*/;
5549 var7 = NEW_array__Array(&type_array__Arraykernel__Object);
5550 { /* var7 = array_instance Array[Object] */
5551 var8 = 2;
5552 var9 = NEW_array__NativeArray(var8, &type_array__NativeArraykernel__Object);
5553 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var1;
5554 ((struct instance_array__NativeArray*)var9)->values[1] = (val*) var6;
5555 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Object]>*/;
5556 CHECK_NEW_array__Array(var7);
5557 }
5558 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_string__Object__to_s]))(var7) /* to_s on <var7:Array[Object]>*/;
5559 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var10) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
5560 if (varonce11) {
5561 var12 = varonce11;
5562 } else {
5563 var13 = "NEW_";
5564 var14 = 4;
5565 var15 = string__NativeString__to_s_with_length(var13, var14);
5566 var12 = var15;
5567 varonce11 = var12;
5568 }
5569 var16 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
5570 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var16) /* c_name on <var16:MClass>*/;
5571 if (varonce18) {
5572 var19 = varonce18;
5573 } else {
5574 var20 = "()";
5575 var21 = 2;
5576 var22 = string__NativeString__to_s_with_length(var20, var21);
5577 var19 = var22;
5578 varonce18 = var19;
5579 }
5580 var23 = NEW_array__Array(&type_array__Arraykernel__Object);
5581 { /* var23 = array_instance Array[Object] */
5582 var24 = 3;
5583 var25 = NEW_array__NativeArray(var24, &type_array__NativeArraykernel__Object);
5584 ((struct instance_array__NativeArray*)var25)->values[0] = (val*) var12;
5585 ((struct instance_array__NativeArray*)var25)->values[1] = (val*) var17;
5586 ((struct instance_array__NativeArray*)var25)->values[2] = (val*) var19;
5587 ((void (*)(val*, val*, long))(var23->class->vft[COLOR_array__Array__with_native]))(var23, var25, var24) /* with_native on <var23:Array[Object]>*/;
5588 CHECK_NEW_array__Array(var23);
5589 }
5590 var26 = ((val* (*)(val*))(var23->class->vft[COLOR_string__Object__to_s]))(var23) /* to_s on <var23:Array[Object]>*/;
5591 var27 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var26, var_mtype) /* new_expr on <self:SeparateErasureCompilerVisitor>*/;
5592 var = var27;
5593 goto RET_LABEL;
5594 RET_LABEL:;
5595 return var;
5596 }
5597 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
5598 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
5599 val* var /* : RuntimeVariable */;
5600 val* var1 /* : RuntimeVariable */;
5601 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(self, p0);
5602 var = var1;
5603 RET_LABEL:;
5604 return var;
5605 }
5606 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: SeparateErasureCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
5607 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
5608 val* var /* : RuntimeVariable */;
5609 val* var_value /* var value: RuntimeVariable */;
5610 val* var_mtype /* var mtype: MType */;
5611 val* var_tag /* var tag: String */;
5612 static val* varonce;
5613 val* var1 /* : String */;
5614 char* var2 /* : NativeString */;
5615 long var3 /* : Int */;
5616 val* var4 /* : String */;
5617 val* var5 /* : String */;
5618 static val* varonce6;
5619 val* var7 /* : String */;
5620 char* var8 /* : NativeString */;
5621 long var9 /* : Int */;
5622 val* var10 /* : String */;
5623 static val* varonce11;
5624 val* var12 /* : String */;
5625 char* var13 /* : NativeString */;
5626 long var14 /* : Int */;
5627 val* var15 /* : String */;
5628 val* var16 /* : Array[Object] */;
5629 long var17 /* : Int */;
5630 val* var18 /* : NativeArray[Object] */;
5631 val* var19 /* : String */;
5632 val* var20 /* : MClassType */;
5633 val* var21 /* : RuntimeVariable */;
5634 val* var_res /* var res: RuntimeVariable */;
5635 static val* varonce22;
5636 val* var23 /* : String */;
5637 char* var24 /* : NativeString */;
5638 long var25 /* : Int */;
5639 val* var26 /* : String */;
5640 val* var27 /* : String */;
5641 val* var_cltype /* var cltype: String */;
5642 static val* varonce28;
5643 val* var29 /* : String */;
5644 char* var30 /* : NativeString */;
5645 long var31 /* : Int */;
5646 val* var32 /* : String */;
5647 static val* varonce33;
5648 val* var34 /* : String */;
5649 char* var35 /* : NativeString */;
5650 long var36 /* : Int */;
5651 val* var37 /* : String */;
5652 val* var38 /* : Array[Object] */;
5653 long var39 /* : Int */;
5654 val* var40 /* : NativeArray[Object] */;
5655 val* var41 /* : String */;
5656 static val* varonce42;
5657 val* var43 /* : String */;
5658 char* var44 /* : NativeString */;
5659 long var45 /* : Int */;
5660 val* var46 /* : String */;
5661 val* var47 /* : String */;
5662 val* var_idtype /* var idtype: String */;
5663 static val* varonce48;
5664 val* var49 /* : String */;
5665 char* var50 /* : NativeString */;
5666 long var51 /* : Int */;
5667 val* var52 /* : String */;
5668 static val* varonce53;
5669 val* var54 /* : String */;
5670 char* var55 /* : NativeString */;
5671 long var56 /* : Int */;
5672 val* var57 /* : String */;
5673 val* var58 /* : Array[Object] */;
5674 long var59 /* : Int */;
5675 val* var60 /* : NativeArray[Object] */;
5676 val* var61 /* : String */;
5677 short int var62 /* : Bool */;
5678 short int var_maybe_null /* var maybe_null: Bool */;
5679 static val* varonce63;
5680 val* var64 /* : String */;
5681 char* var65 /* : NativeString */;
5682 long var66 /* : Int */;
5683 val* var67 /* : String */;
5684 val* var_accept_null /* var accept_null: String */;
5685 short int var68 /* : Bool */;
5686 int cltype;
5687 int idtype;
5688 val* var69 /* : MType */;
5689 static val* varonce70;
5690 val* var71 /* : String */;
5691 char* var72 /* : NativeString */;
5692 long var73 /* : Int */;
5693 val* var74 /* : String */;
5694 short int var75 /* : Bool */;
5695 int cltype76;
5696 int idtype77;
5697 val* var78 /* : nullable Frame */;
5698 val* var79 /* : MPropDef */;
5699 val* var80 /* : MClassDef */;
5700 val* var81 /* : MClassType */;
5701 val* var82 /* : nullable Frame */;
5702 val* var83 /* : MPropDef */;
5703 val* var84 /* : MClassDef */;
5704 val* var85 /* : MClassType */;
5705 val* var86 /* : nullable Frame */;
5706 val* var87 /* : MPropDef */;
5707 val* var88 /* : MClassDef */;
5708 val* var89 /* : MModule */;
5709 short int var90 /* : Bool */;
5710 val* var91 /* : MType */;
5711 short int var92 /* : Bool */;
5712 int cltype93;
5713 int idtype94;
5714 val* var95 /* : MType */;
5715 static val* varonce96;
5716 val* var97 /* : String */;
5717 char* var98 /* : NativeString */;
5718 long var99 /* : Int */;
5719 val* var100 /* : String */;
5720 val* var101 /* : MType */;
5721 val* var102 /* : nullable Frame */;
5722 val* var103 /* : MPropDef */;
5723 val* var104 /* : MClassDef */;
5724 val* var105 /* : MModule */;
5725 val* var106 /* : nullable Frame */;
5726 val* var107 /* : MPropDef */;
5727 val* var108 /* : MClassDef */;
5728 val* var109 /* : MClassType */;
5729 short int var110 /* : Bool */;
5730 static val* varonce111;
5731 val* var112 /* : String */;
5732 char* var113 /* : NativeString */;
5733 long var114 /* : Int */;
5734 val* var115 /* : String */;
5735 val* var116 /* : String */;
5736 static val* varonce117;
5737 val* var118 /* : String */;
5738 char* var119 /* : NativeString */;
5739 long var120 /* : Int */;
5740 val* var121 /* : String */;
5741 static val* varonce122;
5742 val* var123 /* : String */;
5743 char* var124 /* : NativeString */;
5744 long var125 /* : Int */;
5745 val* var126 /* : String */;
5746 val* var127 /* : Array[Object] */;
5747 long var128 /* : Int */;
5748 val* var129 /* : NativeArray[Object] */;
5749 val* var130 /* : String */;
5750 val* var131 /* : AbstractCompiler */;
5751 val* var132 /* : ModelBuilder */;
5752 val* var133 /* : ToolContext */;
5753 val* var134 /* : OptionBool */;
5754 val* var135 /* : nullable Object */;
5755 short int var136 /* : Bool */;
5756 val* var137 /* : AbstractCompiler */;
5757 val* var138 /* : HashMap[String, Int] */;
5758 val* var_ /* var : HashMap[String, Int] */;
5759 val* var_139 /* var : String */;
5760 val* var140 /* : nullable Object */;
5761 long var141 /* : Int */;
5762 long var142 /* : Int */;
5763 long var144 /* : Int */;
5764 long var145 /* : Int */;
5765 val* var146 /* : nullable Object */;
5766 static val* varonce147;
5767 val* var148 /* : String */;
5768 char* var149 /* : NativeString */;
5769 long var150 /* : Int */;
5770 val* var151 /* : String */;
5771 static val* varonce152;
5772 val* var153 /* : String */;
5773 char* var154 /* : NativeString */;
5774 long var155 /* : Int */;
5775 val* var156 /* : String */;
5776 val* var157 /* : Array[Object] */;
5777 long var158 /* : Int */;
5778 val* var159 /* : NativeArray[Object] */;
5779 val* var160 /* : String */;
5780 val* var161 /* : MType */;
5781 val* var162 /* : String */;
5782 static val* varonce163;
5783 val* var164 /* : String */;
5784 char* var165 /* : NativeString */;
5785 long var166 /* : Int */;
5786 val* var167 /* : String */;
5787 short int var168 /* : Bool */;
5788 val* var169 /* : Array[Object] */;
5789 long var170 /* : Int */;
5790 val* var_171 /* var : Array[Object] */;
5791 static val* varonce172;
5792 val* var173 /* : String */;
5793 char* var174 /* : NativeString */;
5794 long var175 /* : Int */;
5795 val* var176 /* : String */;
5796 static val* varonce177;
5797 val* var178 /* : String */;
5798 char* var179 /* : NativeString */;
5799 long var180 /* : Int */;
5800 val* var181 /* : String */;
5801 val* var182 /* : String */;
5802 val* var_class_ptr /* var class_ptr: nullable Object */;
5803 val* var183 /* : MType */;
5804 short int var184 /* : Bool */;
5805 int cltype185;
5806 int idtype186;
5807 const char* var_class_name;
5808 val* var187 /* : MClass */;
5809 val* var_mclass /* var mclass: MClass */;
5810 static val* varonce188;
5811 val* var189 /* : String */;
5812 char* var190 /* : NativeString */;
5813 long var191 /* : Int */;
5814 val* var192 /* : String */;
5815 val* var193 /* : String */;
5816 val* var194 /* : Array[Object] */;
5817 long var195 /* : Int */;
5818 val* var196 /* : NativeArray[Object] */;
5819 val* var197 /* : String */;
5820 val* var198 /* : Array[Object] */;
5821 long var199 /* : Int */;
5822 val* var_200 /* var : Array[Object] */;
5823 static val* varonce201;
5824 val* var202 /* : String */;
5825 char* var203 /* : NativeString */;
5826 long var204 /* : Int */;
5827 val* var205 /* : String */;
5828 val* var206 /* : String */;
5829 static val* varonce207;
5830 val* var208 /* : String */;
5831 char* var209 /* : NativeString */;
5832 long var210 /* : Int */;
5833 val* var211 /* : String */;
5834 val* var212 /* : String */;
5835 short int var213 /* : Bool */;
5836 int cltype214;
5837 int idtype215;
5838 static val* varonce216;
5839 val* var217 /* : String */;
5840 char* var218 /* : NativeString */;
5841 long var219 /* : Int */;
5842 val* var220 /* : String */;
5843 val* var221 /* : MClass */;
5844 val* var222 /* : String */;
5845 val* var223 /* : Array[Object] */;
5846 long var224 /* : Int */;
5847 val* var225 /* : NativeArray[Object] */;
5848 val* var226 /* : String */;
5849 static val* varonce227;
5850 val* var228 /* : String */;
5851 char* var229 /* : NativeString */;
5852 long var230 /* : Int */;
5853 val* var231 /* : String */;
5854 val* var232 /* : MClass */;
5855 val* var233 /* : String */;
5856 static val* varonce234;
5857 val* var235 /* : String */;
5858 char* var236 /* : NativeString */;
5859 long var237 /* : Int */;
5860 val* var238 /* : String */;
5861 val* var239 /* : Array[Object] */;
5862 long var240 /* : Int */;
5863 val* var241 /* : NativeArray[Object] */;
5864 val* var242 /* : String */;
5865 static val* varonce243;
5866 val* var244 /* : String */;
5867 char* var245 /* : NativeString */;
5868 long var246 /* : Int */;
5869 val* var247 /* : String */;
5870 val* var248 /* : MClass */;
5871 val* var249 /* : String */;
5872 static val* varonce250;
5873 val* var251 /* : String */;
5874 char* var252 /* : NativeString */;
5875 long var253 /* : Int */;
5876 val* var254 /* : String */;
5877 val* var255 /* : Array[Object] */;
5878 long var256 /* : Int */;
5879 val* var257 /* : NativeArray[Object] */;
5880 val* var258 /* : String */;
5881 val* var259 /* : AbstractCompiler */;
5882 val* var260 /* : ModelBuilder */;
5883 val* var261 /* : ToolContext */;
5884 val* var262 /* : OptionBool */;
5885 val* var263 /* : nullable Object */;
5886 short int var264 /* : Bool */;
5887 val* var265 /* : AbstractCompiler */;
5888 val* var266 /* : HashMap[String, Int] */;
5889 val* var_267 /* var : HashMap[String, Int] */;
5890 val* var_268 /* var : String */;
5891 val* var269 /* : nullable Object */;
5892 long var270 /* : Int */;
5893 long var271 /* : Int */;
5894 long var273 /* : Int */;
5895 long var274 /* : Int */;
5896 val* var275 /* : nullable Object */;
5897 static val* varonce276;
5898 val* var277 /* : String */;
5899 char* var278 /* : NativeString */;
5900 long var279 /* : Int */;
5901 val* var280 /* : String */;
5902 static val* varonce281;
5903 val* var282 /* : String */;
5904 char* var283 /* : NativeString */;
5905 long var284 /* : Int */;
5906 val* var285 /* : String */;
5907 val* var286 /* : Array[Object] */;
5908 long var287 /* : Int */;
5909 val* var288 /* : NativeArray[Object] */;
5910 val* var289 /* : String */;
5911 short int var290 /* : Bool */;
5912 int cltype291;
5913 int idtype292;
5914 val* var293 /* : nullable Frame */;
5915 val* var294 /* : Array[RuntimeVariable] */;
5916 val* var295 /* : nullable Object */;
5917 val* var_recv /* var recv: RuntimeVariable */;
5918 val* var296 /* : MType */;
5919 val* var297 /* : String */;
5920 static val* varonce298;
5921 val* var299 /* : String */;
5922 char* var300 /* : NativeString */;
5923 long var301 /* : Int */;
5924 val* var302 /* : String */;
5925 short int var303 /* : Bool */;
5926 static val* varonce304;
5927 val* var305 /* : String */;
5928 char* var306 /* : NativeString */;
5929 long var307 /* : Int */;
5930 val* var308 /* : String */;
5931 val* var309 /* : Array[Object] */;
5932 long var310 /* : Int */;
5933 val* var311 /* : NativeArray[Object] */;
5934 val* var312 /* : String */;
5935 val* var_recv_ptr /* var recv_ptr: nullable Object */;
5936 val* var313 /* : MType */;
5937 short int var314 /* : Bool */;
5938 int cltype315;
5939 int idtype316;
5940 const char* var_class_name317;
5941 val* var318 /* : MClass */;
5942 val* var_mclass319 /* var mclass: MClass */;
5943 static val* varonce320;
5944 val* var321 /* : String */;
5945 char* var322 /* : NativeString */;
5946 long var323 /* : Int */;
5947 val* var324 /* : String */;
5948 val* var325 /* : String */;
5949 val* var326 /* : Array[Object] */;
5950 long var327 /* : Int */;
5951 val* var328 /* : NativeArray[Object] */;
5952 val* var329 /* : String */;
5953 static val* varonce330;
5954 val* var331 /* : String */;
5955 char* var332 /* : NativeString */;
5956 long var333 /* : Int */;
5957 val* var334 /* : String */;
5958 val* var335 /* : String */;
5959 static val* varonce336;
5960 val* var337 /* : String */;
5961 char* var338 /* : NativeString */;
5962 long var339 /* : Int */;
5963 val* var340 /* : String */;
5964 val* var341 /* : Array[Object] */;
5965 long var342 /* : Int */;
5966 val* var343 /* : NativeArray[Object] */;
5967 val* var344 /* : String */;
5968 static val* varonce345;
5969 val* var346 /* : String */;
5970 char* var347 /* : NativeString */;
5971 long var348 /* : Int */;
5972 val* var349 /* : String */;
5973 val* var350 /* : String */;
5974 val* var_entry /* var entry: String */;
5975 static val* varonce351;
5976 val* var352 /* : String */;
5977 char* var353 /* : NativeString */;
5978 long var354 /* : Int */;
5979 val* var355 /* : String */;
5980 static val* varonce356;
5981 val* var357 /* : String */;
5982 char* var358 /* : NativeString */;
5983 long var359 /* : Int */;
5984 val* var360 /* : String */;
5985 val* var361 /* : Array[Object] */;
5986 long var362 /* : Int */;
5987 val* var363 /* : NativeArray[Object] */;
5988 val* var364 /* : String */;
5989 val* var365 /* : MProperty */;
5990 val* var366 /* : String */;
5991 val* var367 /* : AbstractCompiler */;
5992 short int var368 /* : Bool */;
5993 int cltype369;
5994 int idtype370;
5995 const char* var_class_name371;
5996 val* var372 /* : nullable Layout[MVirtualTypeProp] */;
5997 short int var373 /* : Bool */;
5998 int cltype374;
5999 int idtype375;
6000 static val* varonce376;
6001 val* var377 /* : String */;
6002 char* var378 /* : NativeString */;
6003 long var379 /* : Int */;
6004 val* var380 /* : String */;
6005 static val* varonce381;
6006 val* var382 /* : String */;
6007 char* var383 /* : NativeString */;
6008 long var384 /* : Int */;
6009 val* var385 /* : String */;
6010 static val* varonce386;
6011 val* var387 /* : String */;
6012 char* var388 /* : NativeString */;
6013 long var389 /* : Int */;
6014 val* var390 /* : String */;
6015 val* var391 /* : MProperty */;
6016 val* var392 /* : String */;
6017 static val* varonce393;
6018 val* var394 /* : String */;
6019 char* var395 /* : NativeString */;
6020 long var396 /* : Int */;
6021 val* var397 /* : String */;
6022 val* var398 /* : Array[Object] */;
6023 long var399 /* : Int */;
6024 val* var400 /* : NativeArray[Object] */;
6025 val* var401 /* : String */;
6026 static val* varonce402;
6027 val* var403 /* : String */;
6028 char* var404 /* : NativeString */;
6029 long var405 /* : Int */;
6030 val* var406 /* : String */;
6031 static val* varonce407;
6032 val* var408 /* : String */;
6033 char* var409 /* : NativeString */;
6034 long var410 /* : Int */;
6035 val* var411 /* : String */;
6036 val* var412 /* : MProperty */;
6037 val* var413 /* : String */;
6038 static val* varonce414;
6039 val* var415 /* : String */;
6040 char* var416 /* : NativeString */;
6041 long var417 /* : Int */;
6042 val* var418 /* : String */;
6043 val* var419 /* : Array[Object] */;
6044 long var420 /* : Int */;
6045 val* var421 /* : NativeArray[Object] */;
6046 val* var422 /* : String */;
6047 static val* varonce423;
6048 val* var424 /* : String */;
6049 char* var425 /* : NativeString */;
6050 long var426 /* : Int */;
6051 val* var427 /* : String */;
6052 static val* varonce428;
6053 val* var429 /* : String */;
6054 char* var430 /* : NativeString */;
6055 long var431 /* : Int */;
6056 val* var432 /* : String */;
6057 val* var433 /* : Array[Object] */;
6058 long var434 /* : Int */;
6059 val* var435 /* : NativeArray[Object] */;
6060 val* var436 /* : String */;
6061 static val* varonce437;
6062 val* var438 /* : String */;
6063 char* var439 /* : NativeString */;
6064 long var440 /* : Int */;
6065 val* var441 /* : String */;
6066 static val* varonce442;
6067 val* var443 /* : String */;
6068 char* var444 /* : NativeString */;
6069 long var445 /* : Int */;
6070 val* var446 /* : String */;
6071 val* var447 /* : Array[Object] */;
6072 long var448 /* : Int */;
6073 val* var449 /* : NativeArray[Object] */;
6074 val* var450 /* : String */;
6075 short int var451 /* : Bool */;
6076 short int var_452 /* var : Bool */;
6077 static val* varonce453;
6078 val* var454 /* : String */;
6079 char* var455 /* : NativeString */;
6080 long var456 /* : Int */;
6081 val* var457 /* : String */;
6082 short int var458 /* : Bool */;
6083 static val* varonce459;
6084 val* var460 /* : String */;
6085 char* var461 /* : NativeString */;
6086 long var462 /* : Int */;
6087 val* var463 /* : String */;
6088 val* var464 /* : String */;
6089 val* var_is_nullable /* var is_nullable: String */;
6090 static val* varonce465;
6091 val* var466 /* : String */;
6092 char* var467 /* : NativeString */;
6093 long var468 /* : Int */;
6094 val* var469 /* : String */;
6095 static val* varonce470;
6096 val* var471 /* : String */;
6097 char* var472 /* : NativeString */;
6098 long var473 /* : Int */;
6099 val* var474 /* : String */;
6100 val* var475 /* : Array[Object] */;
6101 long var476 /* : Int */;
6102 val* var477 /* : NativeArray[Object] */;
6103 val* var478 /* : String */;
6104 static val* varonce479;
6105 val* var480 /* : String */;
6106 char* var481 /* : NativeString */;
6107 long var482 /* : Int */;
6108 val* var483 /* : String */;
6109 static val* varonce484;
6110 val* var485 /* : String */;
6111 char* var486 /* : NativeString */;
6112 long var487 /* : Int */;
6113 val* var488 /* : String */;
6114 val* var489 /* : Array[Object] */;
6115 long var490 /* : Int */;
6116 val* var491 /* : NativeArray[Object] */;
6117 val* var492 /* : String */;
6118 val* var493 /* : String */;
6119 val* var494 /* : AbstractCompiler */;
6120 val* var495 /* : ModelBuilder */;
6121 val* var496 /* : ToolContext */;
6122 val* var497 /* : OptionBool */;
6123 val* var498 /* : nullable Object */;
6124 short int var499 /* : Bool */;
6125 val* var500 /* : AbstractCompiler */;
6126 val* var501 /* : HashMap[String, Int] */;
6127 val* var_502 /* var : HashMap[String, Int] */;
6128 val* var_503 /* var : String */;
6129 val* var504 /* : nullable Object */;
6130 long var505 /* : Int */;
6131 long var506 /* : Int */;
6132 long var508 /* : Int */;
6133 long var509 /* : Int */;
6134 val* var510 /* : nullable Object */;
6135 static val* varonce511;
6136 val* var512 /* : String */;
6137 char* var513 /* : NativeString */;
6138 long var514 /* : Int */;
6139 val* var515 /* : String */;
6140 static val* varonce516;
6141 val* var517 /* : String */;
6142 char* var518 /* : NativeString */;
6143 long var519 /* : Int */;
6144 val* var520 /* : String */;
6145 val* var521 /* : Array[Object] */;
6146 long var522 /* : Int */;
6147 val* var523 /* : NativeArray[Object] */;
6148 val* var524 /* : String */;
6149 static val* varonce525;
6150 val* var526 /* : String */;
6151 char* var527 /* : NativeString */;
6152 long var528 /* : Int */;
6153 val* var529 /* : String */;
6154 val* var530 /* : String */;
6155 static val* varonce531;
6156 val* var532 /* : String */;
6157 char* var533 /* : NativeString */;
6158 long var534 /* : Int */;
6159 val* var535 /* : String */;
6160 static val* varonce536;
6161 val* var537 /* : String */;
6162 char* var538 /* : NativeString */;
6163 long var539 /* : Int */;
6164 val* var540 /* : String */;
6165 val* var541 /* : Array[Object] */;
6166 long var542 /* : Int */;
6167 val* var543 /* : NativeArray[Object] */;
6168 val* var544 /* : String */;
6169 static val* varonce545;
6170 val* var546 /* : String */;
6171 char* var547 /* : NativeString */;
6172 long var548 /* : Int */;
6173 val* var549 /* : String */;
6174 static val* varonce550;
6175 val* var551 /* : String */;
6176 char* var552 /* : NativeString */;
6177 long var553 /* : Int */;
6178 val* var554 /* : String */;
6179 val* var555 /* : Array[Object] */;
6180 long var556 /* : Int */;
6181 val* var557 /* : NativeArray[Object] */;
6182 val* var558 /* : String */;
6183 static val* varonce559;
6184 val* var560 /* : String */;
6185 char* var561 /* : NativeString */;
6186 long var562 /* : Int */;
6187 val* var563 /* : String */;
6188 static val* varonce564;
6189 val* var565 /* : String */;
6190 char* var566 /* : NativeString */;
6191 long var567 /* : Int */;
6192 val* var568 /* : String */;
6193 val* var569 /* : Array[Object] */;
6194 long var570 /* : Int */;
6195 val* var571 /* : NativeArray[Object] */;
6196 val* var572 /* : String */;
6197 static val* varonce573;
6198 val* var574 /* : String */;
6199 char* var575 /* : NativeString */;
6200 long var576 /* : Int */;
6201 val* var577 /* : String */;
6202 val* var578 /* : AbstractCompiler */;
6203 short int var579 /* : Bool */;
6204 int cltype580;
6205 int idtype581;
6206 const char* var_class_name582;
6207 val* var583 /* : nullable Layout[MClass] */;
6208 short int var584 /* : Bool */;
6209 int cltype585;
6210 int idtype586;
6211 static val* varonce587;
6212 val* var588 /* : String */;
6213 char* var589 /* : NativeString */;
6214 long var590 /* : Int */;
6215 val* var591 /* : String */;
6216 static val* varonce592;
6217 val* var593 /* : String */;
6218 char* var594 /* : NativeString */;
6219 long var595 /* : Int */;
6220 val* var596 /* : String */;
6221 static val* varonce597;
6222 val* var598 /* : String */;
6223 char* var599 /* : NativeString */;
6224 long var600 /* : Int */;
6225 val* var601 /* : String */;
6226 val* var602 /* : Array[Object] */;
6227 long var603 /* : Int */;
6228 val* var604 /* : NativeArray[Object] */;
6229 val* var605 /* : String */;
6230 static val* varonce606;
6231 val* var607 /* : String */;
6232 char* var608 /* : NativeString */;
6233 long var609 /* : Int */;
6234 val* var610 /* : String */;
6235 static val* varonce611;
6236 val* var612 /* : String */;
6237 char* var613 /* : NativeString */;
6238 long var614 /* : Int */;
6239 val* var615 /* : String */;
6240 static val* varonce616;
6241 val* var617 /* : String */;
6242 char* var618 /* : NativeString */;
6243 long var619 /* : Int */;
6244 val* var620 /* : String */;
6245 val* var621 /* : Array[Object] */;
6246 long var622 /* : Int */;
6247 val* var623 /* : NativeArray[Object] */;
6248 val* var624 /* : String */;
6249 static val* varonce625;
6250 val* var626 /* : String */;
6251 char* var627 /* : NativeString */;
6252 long var628 /* : Int */;
6253 val* var629 /* : String */;
6254 val* var630 /* : Array[Object] */;
6255 long var631 /* : Int */;
6256 val* var632 /* : NativeArray[Object] */;
6257 val* var633 /* : String */;
6258 static val* varonce634;
6259 val* var635 /* : String */;
6260 char* var636 /* : NativeString */;
6261 long var637 /* : Int */;
6262 val* var638 /* : String */;
6263 static val* varonce639;
6264 val* var640 /* : String */;
6265 char* var641 /* : NativeString */;
6266 long var642 /* : Int */;
6267 val* var643 /* : String */;
6268 static val* varonce644;
6269 val* var645 /* : String */;
6270 char* var646 /* : NativeString */;
6271 long var647 /* : Int */;
6272 val* var648 /* : String */;
6273 static val* varonce649;
6274 val* var650 /* : String */;
6275 char* var651 /* : NativeString */;
6276 long var652 /* : Int */;
6277 val* var653 /* : String */;
6278 static val* varonce654;
6279 val* var655 /* : String */;
6280 char* var656 /* : NativeString */;
6281 long var657 /* : Int */;
6282 val* var658 /* : String */;
6283 val* var659 /* : Array[Object] */;
6284 long var660 /* : Int */;
6285 val* var661 /* : NativeArray[Object] */;
6286 val* var662 /* : String */;
6287 static val* varonce663;
6288 val* var664 /* : String */;
6289 char* var665 /* : NativeString */;
6290 long var666 /* : Int */;
6291 val* var667 /* : String */;
6292 static val* varonce668;
6293 val* var669 /* : String */;
6294 char* var670 /* : NativeString */;
6295 long var671 /* : Int */;
6296 val* var672 /* : String */;
6297 var_value = p0;
6298 var_mtype = p1;
6299 var_tag = p2;
6300 if (varonce) {
6301 var1 = varonce;
6302 } else {
6303 var2 = "/* type test for ";
6304 var3 = 17;
6305 var4 = string__NativeString__to_s_with_length(var2, var3);
6306 var1 = var4;
6307 varonce = var1;
6308 }
6309 var5 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
6310 if (varonce6) {
6311 var7 = varonce6;
6312 } else {
6313 var8 = " isa ";
6314 var9 = 5;
6315 var10 = string__NativeString__to_s_with_length(var8, var9);
6316 var7 = var10;
6317 varonce6 = var7;
6318 }
6319 if (varonce11) {
6320 var12 = varonce11;
6321 } else {
6322 var13 = " */";
6323 var14 = 3;
6324 var15 = string__NativeString__to_s_with_length(var13, var14);
6325 var12 = var15;
6326 varonce11 = var12;
6327 }
6328 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
6329 { /* var16 = array_instance Array[Object] */
6330 var17 = 5;
6331 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
6332 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var1;
6333 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var5;
6334 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var7;
6335 ((struct instance_array__NativeArray*)var18)->values[3] = (val*) var_mtype;
6336 ((struct instance_array__NativeArray*)var18)->values[4] = (val*) var12;
6337 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
6338 CHECK_NEW_array__Array(var16);
6339 }
6340 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
6341 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var19) /* add on <self:SeparateErasureCompilerVisitor>*/;
6342 var20 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:SeparateErasureCompilerVisitor>*/;
6343 var21 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var20) /* new_var on <self:SeparateErasureCompilerVisitor>*/;
6344 var_res = var21;
6345 if (varonce22) {
6346 var23 = varonce22;
6347 } else {
6348 var24 = "cltype";
6349 var25 = 6;
6350 var26 = string__NativeString__to_s_with_length(var24, var25);
6351 var23 = var26;
6352 varonce22 = var23;
6353 }
6354 var27 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var23) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
6355 var_cltype = var27;
6356 if (varonce28) {
6357 var29 = varonce28;
6358 } else {
6359 var30 = "int ";
6360 var31 = 4;
6361 var32 = string__NativeString__to_s_with_length(var30, var31);
6362 var29 = var32;
6363 varonce28 = var29;
6364 }
6365 if (varonce33) {
6366 var34 = varonce33;
6367 } else {
6368 var35 = ";";
6369 var36 = 1;
6370 var37 = string__NativeString__to_s_with_length(var35, var36);
6371 var34 = var37;
6372 varonce33 = var34;
6373 }
6374 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
6375 { /* var38 = array_instance Array[Object] */
6376 var39 = 3;
6377 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
6378 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var29;
6379 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_cltype;
6380 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var34;
6381 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
6382 CHECK_NEW_array__Array(var38);
6383 }
6384 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
6385 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var41) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
6386 if (varonce42) {
6387 var43 = varonce42;
6388 } else {
6389 var44 = "idtype";
6390 var45 = 6;
6391 var46 = string__NativeString__to_s_with_length(var44, var45);
6392 var43 = var46;
6393 varonce42 = var43;
6394 }
6395 var47 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var43) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
6396 var_idtype = var47;
6397 if (varonce48) {
6398 var49 = varonce48;
6399 } else {
6400 var50 = "int ";
6401 var51 = 4;
6402 var52 = string__NativeString__to_s_with_length(var50, var51);
6403 var49 = var52;
6404 varonce48 = var49;
6405 }
6406 if (varonce53) {
6407 var54 = varonce53;
6408 } else {
6409 var55 = ";";
6410 var56 = 1;
6411 var57 = string__NativeString__to_s_with_length(var55, var56);
6412 var54 = var57;
6413 varonce53 = var54;
6414 }
6415 var58 = NEW_array__Array(&type_array__Arraykernel__Object);
6416 { /* var58 = array_instance Array[Object] */
6417 var59 = 3;
6418 var60 = NEW_array__NativeArray(var59, &type_array__NativeArraykernel__Object);
6419 ((struct instance_array__NativeArray*)var60)->values[0] = (val*) var49;
6420 ((struct instance_array__NativeArray*)var60)->values[1] = (val*) var_idtype;
6421 ((struct instance_array__NativeArray*)var60)->values[2] = (val*) var54;
6422 ((void (*)(val*, val*, long))(var58->class->vft[COLOR_array__Array__with_native]))(var58, var60, var59) /* with_native on <var58:Array[Object]>*/;
6423 CHECK_NEW_array__Array(var58);
6424 }
6425 var61 = ((val* (*)(val*))(var58->class->vft[COLOR_string__Object__to_s]))(var58) /* to_s on <var58:Array[Object]>*/;
6426 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var61) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
6427 var62 = ((short int (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompilerVisitor__maybe_null]))(self, var_value) /* maybe_null on <self:SeparateErasureCompilerVisitor>*/;
6428 var_maybe_null = var62;
6429 if (varonce63) {
6430 var64 = varonce63;
6431 } else {
6432 var65 = "0";
6433 var66 = 1;
6434 var67 = string__NativeString__to_s_with_length(var65, var66);
6435 var64 = var67;
6436 varonce63 = var64;
6437 }
6438 var_accept_null = var64;
6439 /* <var_mtype:MType> isa MNullableType */
6440 cltype = type_model__MNullableType.color;
6441 idtype = type_model__MNullableType.id;
6442 if(cltype >= var_mtype->type->table_size) {
6443 var68 = 0;
6444 } else {
6445 var68 = var_mtype->type->type_table[cltype] == idtype;
6446 }
6447 if (var68){
6448 var69 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
6449 var_mtype = var69;
6450 if (varonce70) {
6451 var71 = varonce70;
6452 } else {
6453 var72 = "1";
6454 var73 = 1;
6455 var74 = string__NativeString__to_s_with_length(var72, var73);
6456 var71 = var74;
6457 varonce70 = var71;
6458 }
6459 var_accept_null = var71;
6460 } else {
6461 }
6462 /* <var_mtype:MType> isa MParameterType */
6463 cltype76 = type_model__MParameterType.color;
6464 idtype77 = type_model__MParameterType.id;
6465 if(cltype76 >= var_mtype->type->table_size) {
6466 var75 = 0;
6467 } else {
6468 var75 = var_mtype->type->type_table[cltype76] == idtype77;
6469 }
6470 if (var75){
6471 var78 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6472 if (var78 == NULL) {
6473 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6474 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 487);
6475 exit(1);
6476 } else {
6477 var79 = ((val* (*)(val*))(var78->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var78) /* mpropdef on <var78:nullable Frame>*/;
6478 }
6479 var80 = ((val* (*)(val*))(var79->class->vft[COLOR_model__MPropDef__mclassdef]))(var79) /* mclassdef on <var79:MPropDef>*/;
6480 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_model__MClassDef__bound_mtype]))(var80) /* bound_mtype on <var80:MClassDef>*/;
6481 var82 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6482 if (var82 == NULL) {
6483 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6484 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 487);
6485 exit(1);
6486 } else {
6487 var83 = ((val* (*)(val*))(var82->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var82) /* mpropdef on <var82:nullable Frame>*/;
6488 }
6489 var84 = ((val* (*)(val*))(var83->class->vft[COLOR_model__MPropDef__mclassdef]))(var83) /* mclassdef on <var83:MPropDef>*/;
6490 var85 = ((val* (*)(val*))(var84->class->vft[COLOR_model__MClassDef__bound_mtype]))(var84) /* bound_mtype on <var84:MClassDef>*/;
6491 var86 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6492 if (var86 == NULL) {
6493 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6494 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 487);
6495 exit(1);
6496 } else {
6497 var87 = ((val* (*)(val*))(var86->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var86) /* mpropdef on <var86:nullable Frame>*/;
6498 }
6499 var88 = ((val* (*)(val*))(var87->class->vft[COLOR_model__MPropDef__mclassdef]))(var87) /* mclassdef on <var87:MPropDef>*/;
6500 var89 = ((val* (*)(val*))(var88->class->vft[COLOR_model__MClassDef__mmodule]))(var88) /* mmodule on <var88:MClassDef>*/;
6501 var90 = 0;
6502 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)>*/;
6503 var_mtype = var91;
6504 /* <var_mtype:MType> isa MNullableType */
6505 cltype93 = type_model__MNullableType.color;
6506 idtype94 = type_model__MNullableType.id;
6507 if(cltype93 >= var_mtype->type->table_size) {
6508 var92 = 0;
6509 } else {
6510 var92 = var_mtype->type->type_table[cltype93] == idtype94;
6511 }
6512 if (var92){
6513 var95 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
6514 var_mtype = var95;
6515 if (varonce96) {
6516 var97 = varonce96;
6517 } else {
6518 var98 = "1";
6519 var99 = 1;
6520 var100 = string__NativeString__to_s_with_length(var98, var99);
6521 var97 = var100;
6522 varonce96 = var97;
6523 }
6524 var_accept_null = var97;
6525 } else {
6526 }
6527 } else {
6528 }
6529 var101 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
6530 var102 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6531 if (var102 == NULL) {
6532 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6533 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 494);
6534 exit(1);
6535 } else {
6536 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var102) /* mpropdef on <var102:nullable Frame>*/;
6537 }
6538 var104 = ((val* (*)(val*))(var103->class->vft[COLOR_model__MPropDef__mclassdef]))(var103) /* mclassdef on <var103:MPropDef>*/;
6539 var105 = ((val* (*)(val*))(var104->class->vft[COLOR_model__MClassDef__mmodule]))(var104) /* mmodule on <var104:MClassDef>*/;
6540 var106 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6541 if (var106 == NULL) {
6542 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6543 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 494);
6544 exit(1);
6545 } else {
6546 var107 = ((val* (*)(val*))(var106->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var106) /* mpropdef on <var106:nullable Frame>*/;
6547 }
6548 var108 = ((val* (*)(val*))(var107->class->vft[COLOR_model__MPropDef__mclassdef]))(var107) /* mclassdef on <var107:MPropDef>*/;
6549 var109 = ((val* (*)(val*))(var108->class->vft[COLOR_model__MClassDef__bound_mtype]))(var108) /* bound_mtype on <var108:MClassDef>*/;
6550 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>*/;
6551 if (var110){
6552 if (varonce111) {
6553 var112 = varonce111;
6554 } else {
6555 var113 = " = 1; /* easy ";
6556 var114 = 14;
6557 var115 = string__NativeString__to_s_with_length(var113, var114);
6558 var112 = var115;
6559 varonce111 = var112;
6560 }
6561 var116 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
6562 if (varonce117) {
6563 var118 = varonce117;
6564 } else {
6565 var119 = " isa ";
6566 var120 = 5;
6567 var121 = string__NativeString__to_s_with_length(var119, var120);
6568 var118 = var121;
6569 varonce117 = var118;
6570 }
6571 if (varonce122) {
6572 var123 = varonce122;
6573 } else {
6574 var124 = "*/";
6575 var125 = 2;
6576 var126 = string__NativeString__to_s_with_length(var124, var125);
6577 var123 = var126;
6578 varonce122 = var123;
6579 }
6580 var127 = NEW_array__Array(&type_array__Arraykernel__Object);
6581 { /* var127 = array_instance Array[Object] */
6582 var128 = 6;
6583 var129 = NEW_array__NativeArray(var128, &type_array__NativeArraykernel__Object);
6584 ((struct instance_array__NativeArray*)var129)->values[0] = (val*) var_res;
6585 ((struct instance_array__NativeArray*)var129)->values[1] = (val*) var112;
6586 ((struct instance_array__NativeArray*)var129)->values[2] = (val*) var116;
6587 ((struct instance_array__NativeArray*)var129)->values[3] = (val*) var118;
6588 ((struct instance_array__NativeArray*)var129)->values[4] = (val*) var_mtype;
6589 ((struct instance_array__NativeArray*)var129)->values[5] = (val*) var123;
6590 ((void (*)(val*, val*, long))(var127->class->vft[COLOR_array__Array__with_native]))(var127, var129, var128) /* with_native on <var127:Array[Object]>*/;
6591 CHECK_NEW_array__Array(var127);
6592 }
6593 var130 = ((val* (*)(val*))(var127->class->vft[COLOR_string__Object__to_s]))(var127) /* to_s on <var127:Array[Object]>*/;
6594 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var130) /* add on <self:SeparateErasureCompilerVisitor>*/;
6595 var131 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6596 var132 = ((val* (*)(val*))(var131->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var131) /* modelbuilder on <var131:AbstractCompiler(SeparateCompiler)>*/;
6597 var133 = ((val* (*)(val*))(var132->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var132) /* toolcontext on <var132:ModelBuilder>*/;
6598 var134 = ((val* (*)(val*))(var133->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var133) /* opt_typing_test_metrics on <var133:ToolContext>*/;
6599 var135 = ((val* (*)(val*))(var134->class->vft[COLOR_opts__Option__value]))(var134) /* value on <var134:OptionBool>*/;
6600 var136 = ((struct instance_kernel__Bool*)var135)->value; /* autounbox from nullable Object to Bool */;
6601 if (var136){
6602 var137 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6603 var138 = ((val* (*)(val*))(var137->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_skipped]))(var137) /* count_type_test_skipped on <var137:AbstractCompiler(SeparateCompiler)>*/;
6604 var_ = var138;
6605 var_139 = var_tag;
6606 var140 = ((val* (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_, var_139) /* [] on <var_:HashMap[String, Int]>*/;
6607 var141 = 1;
6608 { /* Inline kernel#Int#+ (var140,var141) */
6609 var144 = ((struct instance_kernel__Int*)var140)->value; /* autounbox from nullable Object to Int */;
6610 var145 = var144 + var141;
6611 var142 = var145;
6612 goto RET_LABEL143;
6613 RET_LABEL143:(void)0;
6614 }
6615 var146 = BOX_kernel__Int(var142); /* autobox from Int to nullable Object */
6616 ((void (*)(val*, val*, val*))(var_->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_, var_139, var146) /* []= on <var_:HashMap[String, Int]>*/;
6617 if (varonce147) {
6618 var148 = varonce147;
6619 } else {
6620 var149 = "count_type_test_skipped_";
6621 var150 = 24;
6622 var151 = string__NativeString__to_s_with_length(var149, var150);
6623 var148 = var151;
6624 varonce147 = var148;
6625 }
6626 if (varonce152) {
6627 var153 = varonce152;
6628 } else {
6629 var154 = "++;";
6630 var155 = 3;
6631 var156 = string__NativeString__to_s_with_length(var154, var155);
6632 var153 = var156;
6633 varonce152 = var153;
6634 }
6635 var157 = NEW_array__Array(&type_array__Arraykernel__Object);
6636 { /* var157 = array_instance Array[Object] */
6637 var158 = 3;
6638 var159 = NEW_array__NativeArray(var158, &type_array__NativeArraykernel__Object);
6639 ((struct instance_array__NativeArray*)var159)->values[0] = (val*) var148;
6640 ((struct instance_array__NativeArray*)var159)->values[1] = (val*) var_tag;
6641 ((struct instance_array__NativeArray*)var159)->values[2] = (val*) var153;
6642 ((void (*)(val*, val*, long))(var157->class->vft[COLOR_array__Array__with_native]))(var157, var159, var158) /* with_native on <var157:Array[Object]>*/;
6643 CHECK_NEW_array__Array(var157);
6644 }
6645 var160 = ((val* (*)(val*))(var157->class->vft[COLOR_string__Object__to_s]))(var157) /* to_s on <var157:Array[Object]>*/;
6646 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var160) /* add on <self:SeparateErasureCompilerVisitor>*/;
6647 } else {
6648 }
6649 var = var_res;
6650 goto RET_LABEL;
6651 } else {
6652 }
6653 var161 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
6654 var162 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_compiler__MType__ctype]))(var161) /* ctype on <var161:MType>*/;
6655 if (varonce163) {
6656 var164 = varonce163;
6657 } else {
6658 var165 = "val*";
6659 var166 = 4;
6660 var167 = string__NativeString__to_s_with_length(var165, var166);
6661 var164 = var167;
6662 varonce163 = var164;
6663 }
6664 var168 = ((short int (*)(val*, val*))(var162->class->vft[COLOR_kernel__Object___61d_61d]))(var162, var164) /* == on <var162:String>*/;
6665 if (var168){
6666 var169 = NEW_array__Array(&type_array__Arraykernel__Object);
6667 var170 = 3;
6668 ((void (*)(val*, long))(var169->class->vft[COLOR_array__Array__with_capacity]))(var169, var170) /* with_capacity on <var169:Array[Object]>*/;
6669 CHECK_NEW_array__Array(var169);
6670 var_171 = var169;
6671 if (varonce172) {
6672 var173 = varonce172;
6673 } else {
6674 var174 = "";
6675 var175 = 0;
6676 var176 = string__NativeString__to_s_with_length(var174, var175);
6677 var173 = var176;
6678 varonce172 = var173;
6679 }
6680 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var173) /* add on <var_171:Array[Object]>*/;
6681 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var_value) /* add on <var_171:Array[Object]>*/;
6682 if (varonce177) {
6683 var178 = varonce177;
6684 } else {
6685 var179 = "->class->";
6686 var180 = 9;
6687 var181 = string__NativeString__to_s_with_length(var179, var180);
6688 var178 = var181;
6689 varonce177 = var178;
6690 }
6691 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var178) /* add on <var_171:Array[Object]>*/;
6692 var182 = ((val* (*)(val*))(var_171->class->vft[COLOR_string__Object__to_s]))(var_171) /* to_s on <var_171:Array[Object]>*/;
6693 var_class_ptr = var182;
6694 } else {
6695 var183 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
6696 /* <var183:MType> isa MClassType */
6697 cltype185 = type_model__MClassType.color;
6698 idtype186 = type_model__MClassType.id;
6699 if(cltype185 >= var183->type->table_size) {
6700 var184 = 0;
6701 } else {
6702 var184 = var183->type->type_table[cltype185] == idtype186;
6703 }
6704 if (!var184) {
6705 var_class_name = var183 == NULL ? "null" : var183->type->name;
6706 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
6707 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 508);
6708 exit(1);
6709 }
6710 var187 = ((val* (*)(val*))(var183->class->vft[COLOR_model__MClassType__mclass]))(var183) /* mclass on <var183:MType(MClassType)>*/;
6711 var_mclass = var187;
6712 if (varonce188) {
6713 var189 = varonce188;
6714 } else {
6715 var190 = "class_";
6716 var191 = 6;
6717 var192 = string__NativeString__to_s_with_length(var190, var191);
6718 var189 = var192;
6719 varonce188 = var189;
6720 }
6721 var193 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
6722 var194 = NEW_array__Array(&type_array__Arraykernel__Object);
6723 { /* var194 = array_instance Array[Object] */
6724 var195 = 2;
6725 var196 = NEW_array__NativeArray(var195, &type_array__NativeArraykernel__Object);
6726 ((struct instance_array__NativeArray*)var196)->values[0] = (val*) var189;
6727 ((struct instance_array__NativeArray*)var196)->values[1] = (val*) var193;
6728 ((void (*)(val*, val*, long))(var194->class->vft[COLOR_array__Array__with_native]))(var194, var196, var195) /* with_native on <var194:Array[Object]>*/;
6729 CHECK_NEW_array__Array(var194);
6730 }
6731 var197 = ((val* (*)(val*))(var194->class->vft[COLOR_string__Object__to_s]))(var194) /* to_s on <var194:Array[Object]>*/;
6732 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var197) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6733 var198 = NEW_array__Array(&type_array__Arraykernel__Object);
6734 var199 = 3;
6735 ((void (*)(val*, long))(var198->class->vft[COLOR_array__Array__with_capacity]))(var198, var199) /* with_capacity on <var198:Array[Object]>*/;
6736 CHECK_NEW_array__Array(var198);
6737 var_200 = var198;
6738 if (varonce201) {
6739 var202 = varonce201;
6740 } else {
6741 var203 = "class_";
6742 var204 = 6;
6743 var205 = string__NativeString__to_s_with_length(var203, var204);
6744 var202 = var205;
6745 varonce201 = var202;
6746 }
6747 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var202) /* add on <var_200:Array[Object]>*/;
6748 var206 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
6749 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var206) /* add on <var_200:Array[Object]>*/;
6750 if (varonce207) {
6751 var208 = varonce207;
6752 } else {
6753 var209 = ".";
6754 var210 = 1;
6755 var211 = string__NativeString__to_s_with_length(var209, var210);
6756 var208 = var211;
6757 varonce207 = var208;
6758 }
6759 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var208) /* add on <var_200:Array[Object]>*/;
6760 var212 = ((val* (*)(val*))(var_200->class->vft[COLOR_string__Object__to_s]))(var_200) /* to_s on <var_200:Array[Object]>*/;
6761 var_class_ptr = var212;
6762 }
6763 /* <var_mtype:MType> isa MClassType */
6764 cltype214 = type_model__MClassType.color;
6765 idtype215 = type_model__MClassType.id;
6766 if(cltype214 >= var_mtype->type->table_size) {
6767 var213 = 0;
6768 } else {
6769 var213 = var_mtype->type->type_table[cltype214] == idtype215;
6770 }
6771 if (var213){
6772 if (varonce216) {
6773 var217 = varonce216;
6774 } else {
6775 var218 = "class_";
6776 var219 = 6;
6777 var220 = string__NativeString__to_s_with_length(var218, var219);
6778 var217 = var220;
6779 varonce216 = var217;
6780 }
6781 var221 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6782 var222 = ((val* (*)(val*))(var221->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var221) /* c_name on <var221:MClass>*/;
6783 var223 = NEW_array__Array(&type_array__Arraykernel__Object);
6784 { /* var223 = array_instance Array[Object] */
6785 var224 = 2;
6786 var225 = NEW_array__NativeArray(var224, &type_array__NativeArraykernel__Object);
6787 ((struct instance_array__NativeArray*)var225)->values[0] = (val*) var217;
6788 ((struct instance_array__NativeArray*)var225)->values[1] = (val*) var222;
6789 ((void (*)(val*, val*, long))(var223->class->vft[COLOR_array__Array__with_native]))(var223, var225, var224) /* with_native on <var223:Array[Object]>*/;
6790 CHECK_NEW_array__Array(var223);
6791 }
6792 var226 = ((val* (*)(val*))(var223->class->vft[COLOR_string__Object__to_s]))(var223) /* to_s on <var223:Array[Object]>*/;
6793 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var226) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6794 if (varonce227) {
6795 var228 = varonce227;
6796 } else {
6797 var229 = " = class_";
6798 var230 = 9;
6799 var231 = string__NativeString__to_s_with_length(var229, var230);
6800 var228 = var231;
6801 varonce227 = var228;
6802 }
6803 var232 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6804 var233 = ((val* (*)(val*))(var232->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var232) /* c_name on <var232:MClass>*/;
6805 if (varonce234) {
6806 var235 = varonce234;
6807 } else {
6808 var236 = ".color;";
6809 var237 = 7;
6810 var238 = string__NativeString__to_s_with_length(var236, var237);
6811 var235 = var238;
6812 varonce234 = var235;
6813 }
6814 var239 = NEW_array__Array(&type_array__Arraykernel__Object);
6815 { /* var239 = array_instance Array[Object] */
6816 var240 = 4;
6817 var241 = NEW_array__NativeArray(var240, &type_array__NativeArraykernel__Object);
6818 ((struct instance_array__NativeArray*)var241)->values[0] = (val*) var_cltype;
6819 ((struct instance_array__NativeArray*)var241)->values[1] = (val*) var228;
6820 ((struct instance_array__NativeArray*)var241)->values[2] = (val*) var233;
6821 ((struct instance_array__NativeArray*)var241)->values[3] = (val*) var235;
6822 ((void (*)(val*, val*, long))(var239->class->vft[COLOR_array__Array__with_native]))(var239, var241, var240) /* with_native on <var239:Array[Object]>*/;
6823 CHECK_NEW_array__Array(var239);
6824 }
6825 var242 = ((val* (*)(val*))(var239->class->vft[COLOR_string__Object__to_s]))(var239) /* to_s on <var239:Array[Object]>*/;
6826 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var242) /* add on <self:SeparateErasureCompilerVisitor>*/;
6827 if (varonce243) {
6828 var244 = varonce243;
6829 } else {
6830 var245 = " = class_";
6831 var246 = 9;
6832 var247 = string__NativeString__to_s_with_length(var245, var246);
6833 var244 = var247;
6834 varonce243 = var244;
6835 }
6836 var248 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6837 var249 = ((val* (*)(val*))(var248->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var248) /* c_name on <var248:MClass>*/;
6838 if (varonce250) {
6839 var251 = varonce250;
6840 } else {
6841 var252 = ".id;";
6842 var253 = 4;
6843 var254 = string__NativeString__to_s_with_length(var252, var253);
6844 var251 = var254;
6845 varonce250 = var251;
6846 }
6847 var255 = NEW_array__Array(&type_array__Arraykernel__Object);
6848 { /* var255 = array_instance Array[Object] */
6849 var256 = 4;
6850 var257 = NEW_array__NativeArray(var256, &type_array__NativeArraykernel__Object);
6851 ((struct instance_array__NativeArray*)var257)->values[0] = (val*) var_idtype;
6852 ((struct instance_array__NativeArray*)var257)->values[1] = (val*) var244;
6853 ((struct instance_array__NativeArray*)var257)->values[2] = (val*) var249;
6854 ((struct instance_array__NativeArray*)var257)->values[3] = (val*) var251;
6855 ((void (*)(val*, val*, long))(var255->class->vft[COLOR_array__Array__with_native]))(var255, var257, var256) /* with_native on <var255:Array[Object]>*/;
6856 CHECK_NEW_array__Array(var255);
6857 }
6858 var258 = ((val* (*)(val*))(var255->class->vft[COLOR_string__Object__to_s]))(var255) /* to_s on <var255:Array[Object]>*/;
6859 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var258) /* add on <self:SeparateErasureCompilerVisitor>*/;
6860 var259 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6861 var260 = ((val* (*)(val*))(var259->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var259) /* modelbuilder on <var259:AbstractCompiler(SeparateCompiler)>*/;
6862 var261 = ((val* (*)(val*))(var260->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var260) /* toolcontext on <var260:ModelBuilder>*/;
6863 var262 = ((val* (*)(val*))(var261->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var261) /* opt_typing_test_metrics on <var261:ToolContext>*/;
6864 var263 = ((val* (*)(val*))(var262->class->vft[COLOR_opts__Option__value]))(var262) /* value on <var262:OptionBool>*/;
6865 var264 = ((struct instance_kernel__Bool*)var263)->value; /* autounbox from nullable Object to Bool */;
6866 if (var264){
6867 var265 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6868 var266 = ((val* (*)(val*))(var265->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_resolved]))(var265) /* count_type_test_resolved on <var265:AbstractCompiler(SeparateCompiler)>*/;
6869 var_267 = var266;
6870 var_268 = var_tag;
6871 var269 = ((val* (*)(val*, val*))(var_267->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_267, var_268) /* [] on <var_267:HashMap[String, Int]>*/;
6872 var270 = 1;
6873 { /* Inline kernel#Int#+ (var269,var270) */
6874 var273 = ((struct instance_kernel__Int*)var269)->value; /* autounbox from nullable Object to Int */;
6875 var274 = var273 + var270;
6876 var271 = var274;
6877 goto RET_LABEL272;
6878 RET_LABEL272:(void)0;
6879 }
6880 var275 = BOX_kernel__Int(var271); /* autobox from Int to nullable Object */
6881 ((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]>*/;
6882 if (varonce276) {
6883 var277 = varonce276;
6884 } else {
6885 var278 = "count_type_test_resolved_";
6886 var279 = 25;
6887 var280 = string__NativeString__to_s_with_length(var278, var279);
6888 var277 = var280;
6889 varonce276 = var277;
6890 }
6891 if (varonce281) {
6892 var282 = varonce281;
6893 } else {
6894 var283 = "++;";
6895 var284 = 3;
6896 var285 = string__NativeString__to_s_with_length(var283, var284);
6897 var282 = var285;
6898 varonce281 = var282;
6899 }
6900 var286 = NEW_array__Array(&type_array__Arraykernel__Object);
6901 { /* var286 = array_instance Array[Object] */
6902 var287 = 3;
6903 var288 = NEW_array__NativeArray(var287, &type_array__NativeArraykernel__Object);
6904 ((struct instance_array__NativeArray*)var288)->values[0] = (val*) var277;
6905 ((struct instance_array__NativeArray*)var288)->values[1] = (val*) var_tag;
6906 ((struct instance_array__NativeArray*)var288)->values[2] = (val*) var282;
6907 ((void (*)(val*, val*, long))(var286->class->vft[COLOR_array__Array__with_native]))(var286, var288, var287) /* with_native on <var286:Array[Object]>*/;
6908 CHECK_NEW_array__Array(var286);
6909 }
6910 var289 = ((val* (*)(val*))(var286->class->vft[COLOR_string__Object__to_s]))(var286) /* to_s on <var286:Array[Object]>*/;
6911 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var289) /* add on <self:SeparateErasureCompilerVisitor>*/;
6912 } else {
6913 }
6914 } else {
6915 /* <var_mtype:MType> isa MVirtualType */
6916 cltype291 = type_model__MVirtualType.color;
6917 idtype292 = type_model__MVirtualType.id;
6918 if(cltype291 >= var_mtype->type->table_size) {
6919 var290 = 0;
6920 } else {
6921 var290 = var_mtype->type->type_table[cltype291] == idtype292;
6922 }
6923 if (var290){
6924 var293 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6925 if (var293 == NULL) {
6926 fprintf(stderr, "Runtime error: %s", "Reciever is null");
6927 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 522);
6928 exit(1);
6929 } else {
6930 var294 = ((val* (*)(val*))(var293->class->vft[COLOR_abstract_compiler__Frame__arguments]))(var293) /* arguments on <var293:nullable Frame>*/;
6931 }
6932 var295 = ((val* (*)(val*))(var294->class->vft[COLOR_abstract_collection__Collection__first]))(var294) /* first on <var294:Array[RuntimeVariable]>*/;
6933 var_recv = var295;
6934 var296 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6935 var297 = ((val* (*)(val*))(var296->class->vft[COLOR_abstract_compiler__MType__ctype]))(var296) /* ctype on <var296:MType>*/;
6936 if (varonce298) {
6937 var299 = varonce298;
6938 } else {
6939 var300 = "val*";
6940 var301 = 4;
6941 var302 = string__NativeString__to_s_with_length(var300, var301);
6942 var299 = var302;
6943 varonce298 = var299;
6944 }
6945 var303 = ((short int (*)(val*, val*))(var297->class->vft[COLOR_kernel__Object___61d_61d]))(var297, var299) /* == on <var297:String>*/;
6946 if (var303){
6947 if (varonce304) {
6948 var305 = varonce304;
6949 } else {
6950 var306 = "->class->";
6951 var307 = 9;
6952 var308 = string__NativeString__to_s_with_length(var306, var307);
6953 var305 = var308;
6954 varonce304 = var305;
6955 }
6956 var309 = NEW_array__Array(&type_array__Arraykernel__Object);
6957 { /* var309 = array_instance Array[Object] */
6958 var310 = 2;
6959 var311 = NEW_array__NativeArray(var310, &type_array__NativeArraykernel__Object);
6960 ((struct instance_array__NativeArray*)var311)->values[0] = (val*) var_recv;
6961 ((struct instance_array__NativeArray*)var311)->values[1] = (val*) var305;
6962 ((void (*)(val*, val*, long))(var309->class->vft[COLOR_array__Array__with_native]))(var309, var311, var310) /* with_native on <var309:Array[Object]>*/;
6963 CHECK_NEW_array__Array(var309);
6964 }
6965 var312 = ((val* (*)(val*))(var309->class->vft[COLOR_string__Object__to_s]))(var309) /* to_s on <var309:Array[Object]>*/;
6966 var_recv_ptr = var312;
6967 } else {
6968 var313 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6969 /* <var313:MType> isa MClassType */
6970 cltype315 = type_model__MClassType.color;
6971 idtype316 = type_model__MClassType.id;
6972 if(cltype315 >= var313->type->table_size) {
6973 var314 = 0;
6974 } else {
6975 var314 = var313->type->type_table[cltype315] == idtype316;
6976 }
6977 if (!var314) {
6978 var_class_name317 = var313 == NULL ? "null" : var313->type->name;
6979 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name317);
6980 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 527);
6981 exit(1);
6982 }
6983 var318 = ((val* (*)(val*))(var313->class->vft[COLOR_model__MClassType__mclass]))(var313) /* mclass on <var313:MType(MClassType)>*/;
6984 var_mclass319 = var318;
6985 if (varonce320) {
6986 var321 = varonce320;
6987 } else {
6988 var322 = "class_";
6989 var323 = 6;
6990 var324 = string__NativeString__to_s_with_length(var322, var323);
6991 var321 = var324;
6992 varonce320 = var321;
6993 }
6994 var325 = ((val* (*)(val*))(var_mclass319->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass319) /* c_name on <var_mclass319:MClass>*/;
6995 var326 = NEW_array__Array(&type_array__Arraykernel__Object);
6996 { /* var326 = array_instance Array[Object] */
6997 var327 = 2;
6998 var328 = NEW_array__NativeArray(var327, &type_array__NativeArraykernel__Object);
6999 ((struct instance_array__NativeArray*)var328)->values[0] = (val*) var321;
7000 ((struct instance_array__NativeArray*)var328)->values[1] = (val*) var325;
7001 ((void (*)(val*, val*, long))(var326->class->vft[COLOR_array__Array__with_native]))(var326, var328, var327) /* with_native on <var326:Array[Object]>*/;
7002 CHECK_NEW_array__Array(var326);
7003 }
7004 var329 = ((val* (*)(val*))(var326->class->vft[COLOR_string__Object__to_s]))(var326) /* to_s on <var326:Array[Object]>*/;
7005 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var329) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
7006 if (varonce330) {
7007 var331 = varonce330;
7008 } else {
7009 var332 = "class_";
7010 var333 = 6;
7011 var334 = string__NativeString__to_s_with_length(var332, var333);
7012 var331 = var334;
7013 varonce330 = var331;
7014 }
7015 var335 = ((val* (*)(val*))(var_mclass319->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass319) /* c_name on <var_mclass319:MClass>*/;
7016 if (varonce336) {
7017 var337 = varonce336;
7018 } else {
7019 var338 = ".";
7020 var339 = 1;
7021 var340 = string__NativeString__to_s_with_length(var338, var339);
7022 var337 = var340;
7023 varonce336 = var337;
7024 }
7025 var341 = NEW_array__Array(&type_array__Arraykernel__Object);
7026 { /* var341 = array_instance Array[Object] */
7027 var342 = 3;
7028 var343 = NEW_array__NativeArray(var342, &type_array__NativeArraykernel__Object);
7029 ((struct instance_array__NativeArray*)var343)->values[0] = (val*) var331;
7030 ((struct instance_array__NativeArray*)var343)->values[1] = (val*) var335;
7031 ((struct instance_array__NativeArray*)var343)->values[2] = (val*) var337;
7032 ((void (*)(val*, val*, long))(var341->class->vft[COLOR_array__Array__with_native]))(var341, var343, var342) /* with_native on <var341:Array[Object]>*/;
7033 CHECK_NEW_array__Array(var341);
7034 }
7035 var344 = ((val* (*)(val*))(var341->class->vft[COLOR_string__Object__to_s]))(var341) /* to_s on <var341:Array[Object]>*/;
7036 var_recv_ptr = var344;
7037 }
7038 if (varonce345) {
7039 var346 = varonce345;
7040 } else {
7041 var347 = "entry";
7042 var348 = 5;
7043 var349 = string__NativeString__to_s_with_length(var347, var348);
7044 var346 = var349;
7045 varonce345 = var346;
7046 }
7047 var350 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var346) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7048 var_entry = var350;
7049 if (varonce351) {
7050 var352 = varonce351;
7051 } else {
7052 var353 = "struct vts_entry ";
7053 var354 = 17;
7054 var355 = string__NativeString__to_s_with_length(var353, var354);
7055 var352 = var355;
7056 varonce351 = var352;
7057 }
7058 if (varonce356) {
7059 var357 = varonce356;
7060 } else {
7061 var358 = ";";
7062 var359 = 1;
7063 var360 = string__NativeString__to_s_with_length(var358, var359);
7064 var357 = var360;
7065 varonce356 = var357;
7066 }
7067 var361 = NEW_array__Array(&type_array__Arraykernel__Object);
7068 { /* var361 = array_instance Array[Object] */
7069 var362 = 3;
7070 var363 = NEW_array__NativeArray(var362, &type_array__NativeArraykernel__Object);
7071 ((struct instance_array__NativeArray*)var363)->values[0] = (val*) var352;
7072 ((struct instance_array__NativeArray*)var363)->values[1] = (val*) var_entry;
7073 ((struct instance_array__NativeArray*)var363)->values[2] = (val*) var357;
7074 ((void (*)(val*, val*, long))(var361->class->vft[COLOR_array__Array__with_native]))(var361, var363, var362) /* with_native on <var361:Array[Object]>*/;
7075 CHECK_NEW_array__Array(var361);
7076 }
7077 var364 = ((val* (*)(val*))(var361->class->vft[COLOR_string__Object__to_s]))(var361) /* to_s on <var361:Array[Object]>*/;
7078 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var364) /* add on <self:SeparateErasureCompilerVisitor>*/;
7079 var365 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7080 var366 = ((val* (*)(val*))(var365->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var365) /* const_color on <var365:MProperty>*/;
7081 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var366) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
7082 var367 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7083 /* <var367:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
7084 cltype369 = type_separate_erasure_compiler__SeparateErasureCompiler.color;
7085 idtype370 = type_separate_erasure_compiler__SeparateErasureCompiler.id;
7086 if(cltype369 >= var367->type->table_size) {
7087 var368 = 0;
7088 } else {
7089 var368 = var367->type->type_table[cltype369] == idtype370;
7090 }
7091 if (!var368) {
7092 var_class_name371 = var367 == NULL ? "null" : var367->type->name;
7093 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name371);
7094 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 534);
7095 exit(1);
7096 }
7097 var372 = ((val* (*)(val*))(var367->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(var367) /* vt_layout on <var367:SeparateCompiler(SeparateErasureCompiler)>*/;
7098 /* <var372:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
7099 cltype374 = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
7100 idtype375 = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
7101 if(var372 == NULL) {
7102 var373 = 0;
7103 } else {
7104 if(cltype374 >= var372->type->table_size) {
7105 var373 = 0;
7106 } else {
7107 var373 = var372->type->type_table[cltype374] == idtype375;
7108 }
7109 }
7110 if (var373){
7111 if (varonce376) {
7112 var377 = varonce376;
7113 } else {
7114 var378 = " = ";
7115 var379 = 3;
7116 var380 = string__NativeString__to_s_with_length(var378, var379);
7117 var377 = var380;
7118 varonce376 = var377;
7119 }
7120 if (varonce381) {
7121 var382 = varonce381;
7122 } else {
7123 var383 = "vts_table->vts[HASH(";
7124 var384 = 20;
7125 var385 = string__NativeString__to_s_with_length(var383, var384);
7126 var382 = var385;
7127 varonce381 = var382;
7128 }
7129 if (varonce386) {
7130 var387 = varonce386;
7131 } else {
7132 var388 = "vts_table->mask, ";
7133 var389 = 17;
7134 var390 = string__NativeString__to_s_with_length(var388, var389);
7135 var387 = var390;
7136 varonce386 = var387;
7137 }
7138 var391 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7139 var392 = ((val* (*)(val*))(var391->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var391) /* const_color on <var391:MProperty>*/;
7140 if (varonce393) {
7141 var394 = varonce393;
7142 } else {
7143 var395 = ")];";
7144 var396 = 3;
7145 var397 = string__NativeString__to_s_with_length(var395, var396);
7146 var394 = var397;
7147 varonce393 = var394;
7148 }
7149 var398 = NEW_array__Array(&type_array__Arraykernel__Object);
7150 { /* var398 = array_instance Array[Object] */
7151 var399 = 8;
7152 var400 = NEW_array__NativeArray(var399, &type_array__NativeArraykernel__Object);
7153 ((struct instance_array__NativeArray*)var400)->values[0] = (val*) var_entry;
7154 ((struct instance_array__NativeArray*)var400)->values[1] = (val*) var377;
7155 ((struct instance_array__NativeArray*)var400)->values[2] = (val*) var_recv_ptr;
7156 ((struct instance_array__NativeArray*)var400)->values[3] = (val*) var382;
7157 ((struct instance_array__NativeArray*)var400)->values[4] = (val*) var_recv_ptr;
7158 ((struct instance_array__NativeArray*)var400)->values[5] = (val*) var387;
7159 ((struct instance_array__NativeArray*)var400)->values[6] = (val*) var392;
7160 ((struct instance_array__NativeArray*)var400)->values[7] = (val*) var394;
7161 ((void (*)(val*, val*, long))(var398->class->vft[COLOR_array__Array__with_native]))(var398, var400, var399) /* with_native on <var398:Array[Object]>*/;
7162 CHECK_NEW_array__Array(var398);
7163 }
7164 var401 = ((val* (*)(val*))(var398->class->vft[COLOR_string__Object__to_s]))(var398) /* to_s on <var398:Array[Object]>*/;
7165 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var401) /* add on <self:SeparateErasureCompilerVisitor>*/;
7166 } else {
7167 if (varonce402) {
7168 var403 = varonce402;
7169 } else {
7170 var404 = " = ";
7171 var405 = 3;
7172 var406 = string__NativeString__to_s_with_length(var404, var405);
7173 var403 = var406;
7174 varonce402 = var403;
7175 }
7176 if (varonce407) {
7177 var408 = varonce407;
7178 } else {
7179 var409 = "vts_table->vts[";
7180 var410 = 15;
7181 var411 = string__NativeString__to_s_with_length(var409, var410);
7182 var408 = var411;
7183 varonce407 = var408;
7184 }
7185 var412 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7186 var413 = ((val* (*)(val*))(var412->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var412) /* const_color on <var412:MProperty>*/;
7187 if (varonce414) {
7188 var415 = varonce414;
7189 } else {
7190 var416 = "];";
7191 var417 = 2;
7192 var418 = string__NativeString__to_s_with_length(var416, var417);
7193 var415 = var418;
7194 varonce414 = var415;
7195 }
7196 var419 = NEW_array__Array(&type_array__Arraykernel__Object);
7197 { /* var419 = array_instance Array[Object] */
7198 var420 = 6;
7199 var421 = NEW_array__NativeArray(var420, &type_array__NativeArraykernel__Object);
7200 ((struct instance_array__NativeArray*)var421)->values[0] = (val*) var_entry;
7201 ((struct instance_array__NativeArray*)var421)->values[1] = (val*) var403;
7202 ((struct instance_array__NativeArray*)var421)->values[2] = (val*) var_recv_ptr;
7203 ((struct instance_array__NativeArray*)var421)->values[3] = (val*) var408;
7204 ((struct instance_array__NativeArray*)var421)->values[4] = (val*) var413;
7205 ((struct instance_array__NativeArray*)var421)->values[5] = (val*) var415;
7206 ((void (*)(val*, val*, long))(var419->class->vft[COLOR_array__Array__with_native]))(var419, var421, var420) /* with_native on <var419:Array[Object]>*/;
7207 CHECK_NEW_array__Array(var419);
7208 }
7209 var422 = ((val* (*)(val*))(var419->class->vft[COLOR_string__Object__to_s]))(var419) /* to_s on <var419:Array[Object]>*/;
7210 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var422) /* add on <self:SeparateErasureCompilerVisitor>*/;
7211 }
7212 if (varonce423) {
7213 var424 = varonce423;
7214 } else {
7215 var425 = " = ";
7216 var426 = 3;
7217 var427 = string__NativeString__to_s_with_length(var425, var426);
7218 var424 = var427;
7219 varonce423 = var424;
7220 }
7221 if (varonce428) {
7222 var429 = varonce428;
7223 } else {
7224 var430 = ".class->color;";
7225 var431 = 14;
7226 var432 = string__NativeString__to_s_with_length(var430, var431);
7227 var429 = var432;
7228 varonce428 = var429;
7229 }
7230 var433 = NEW_array__Array(&type_array__Arraykernel__Object);
7231 { /* var433 = array_instance Array[Object] */
7232 var434 = 4;
7233 var435 = NEW_array__NativeArray(var434, &type_array__NativeArraykernel__Object);
7234 ((struct instance_array__NativeArray*)var435)->values[0] = (val*) var_cltype;
7235 ((struct instance_array__NativeArray*)var435)->values[1] = (val*) var424;
7236 ((struct instance_array__NativeArray*)var435)->values[2] = (val*) var_entry;
7237 ((struct instance_array__NativeArray*)var435)->values[3] = (val*) var429;
7238 ((void (*)(val*, val*, long))(var433->class->vft[COLOR_array__Array__with_native]))(var433, var435, var434) /* with_native on <var433:Array[Object]>*/;
7239 CHECK_NEW_array__Array(var433);
7240 }
7241 var436 = ((val* (*)(val*))(var433->class->vft[COLOR_string__Object__to_s]))(var433) /* to_s on <var433:Array[Object]>*/;
7242 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var436) /* add on <self:SeparateErasureCompilerVisitor>*/;
7243 if (varonce437) {
7244 var438 = varonce437;
7245 } else {
7246 var439 = " = ";
7247 var440 = 3;
7248 var441 = string__NativeString__to_s_with_length(var439, var440);
7249 var438 = var441;
7250 varonce437 = var438;
7251 }
7252 if (varonce442) {
7253 var443 = varonce442;
7254 } else {
7255 var444 = ".class->id;";
7256 var445 = 11;
7257 var446 = string__NativeString__to_s_with_length(var444, var445);
7258 var443 = var446;
7259 varonce442 = var443;
7260 }
7261 var447 = NEW_array__Array(&type_array__Arraykernel__Object);
7262 { /* var447 = array_instance Array[Object] */
7263 var448 = 4;
7264 var449 = NEW_array__NativeArray(var448, &type_array__NativeArraykernel__Object);
7265 ((struct instance_array__NativeArray*)var449)->values[0] = (val*) var_idtype;
7266 ((struct instance_array__NativeArray*)var449)->values[1] = (val*) var438;
7267 ((struct instance_array__NativeArray*)var449)->values[2] = (val*) var_entry;
7268 ((struct instance_array__NativeArray*)var449)->values[3] = (val*) var443;
7269 ((void (*)(val*, val*, long))(var447->class->vft[COLOR_array__Array__with_native]))(var447, var449, var448) /* with_native on <var447:Array[Object]>*/;
7270 CHECK_NEW_array__Array(var447);
7271 }
7272 var450 = ((val* (*)(val*))(var447->class->vft[COLOR_string__Object__to_s]))(var447) /* to_s on <var447:Array[Object]>*/;
7273 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var450) /* add on <self:SeparateErasureCompilerVisitor>*/;
7274 var_452 = var_maybe_null;
7275 if (var_maybe_null){
7276 if (varonce453) {
7277 var454 = varonce453;
7278 } else {
7279 var455 = "0";
7280 var456 = 1;
7281 var457 = string__NativeString__to_s_with_length(var455, var456);
7282 var454 = var457;
7283 varonce453 = var454;
7284 }
7285 var458 = ((short int (*)(val*, val*))(var_accept_null->class->vft[COLOR_kernel__Object___61d_61d]))(var_accept_null, var454) /* == on <var_accept_null:String>*/;
7286 var451 = var458;
7287 } else {
7288 var451 = var_452;
7289 }
7290 if (var451){
7291 if (varonce459) {
7292 var460 = varonce459;
7293 } else {
7294 var461 = "is_nullable";
7295 var462 = 11;
7296 var463 = string__NativeString__to_s_with_length(var461, var462);
7297 var460 = var463;
7298 varonce459 = var460;
7299 }
7300 var464 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var460) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7301 var_is_nullable = var464;
7302 if (varonce465) {
7303 var466 = varonce465;
7304 } else {
7305 var467 = "short int ";
7306 var468 = 10;
7307 var469 = string__NativeString__to_s_with_length(var467, var468);
7308 var466 = var469;
7309 varonce465 = var466;
7310 }
7311 if (varonce470) {
7312 var471 = varonce470;
7313 } else {
7314 var472 = ";";
7315 var473 = 1;
7316 var474 = string__NativeString__to_s_with_length(var472, var473);
7317 var471 = var474;
7318 varonce470 = var471;
7319 }
7320 var475 = NEW_array__Array(&type_array__Arraykernel__Object);
7321 { /* var475 = array_instance Array[Object] */
7322 var476 = 3;
7323 var477 = NEW_array__NativeArray(var476, &type_array__NativeArraykernel__Object);
7324 ((struct instance_array__NativeArray*)var477)->values[0] = (val*) var466;
7325 ((struct instance_array__NativeArray*)var477)->values[1] = (val*) var_is_nullable;
7326 ((struct instance_array__NativeArray*)var477)->values[2] = (val*) var471;
7327 ((void (*)(val*, val*, long))(var475->class->vft[COLOR_array__Array__with_native]))(var475, var477, var476) /* with_native on <var475:Array[Object]>*/;
7328 CHECK_NEW_array__Array(var475);
7329 }
7330 var478 = ((val* (*)(val*))(var475->class->vft[COLOR_string__Object__to_s]))(var475) /* to_s on <var475:Array[Object]>*/;
7331 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var478) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
7332 if (varonce479) {
7333 var480 = varonce479;
7334 } else {
7335 var481 = " = ";
7336 var482 = 3;
7337 var483 = string__NativeString__to_s_with_length(var481, var482);
7338 var480 = var483;
7339 varonce479 = var480;
7340 }
7341 if (varonce484) {
7342 var485 = varonce484;
7343 } else {
7344 var486 = ".is_nullable;";
7345 var487 = 13;
7346 var488 = string__NativeString__to_s_with_length(var486, var487);
7347 var485 = var488;
7348 varonce484 = var485;
7349 }
7350 var489 = NEW_array__Array(&type_array__Arraykernel__Object);
7351 { /* var489 = array_instance Array[Object] */
7352 var490 = 4;
7353 var491 = NEW_array__NativeArray(var490, &type_array__NativeArraykernel__Object);
7354 ((struct instance_array__NativeArray*)var491)->values[0] = (val*) var_is_nullable;
7355 ((struct instance_array__NativeArray*)var491)->values[1] = (val*) var480;
7356 ((struct instance_array__NativeArray*)var491)->values[2] = (val*) var_entry;
7357 ((struct instance_array__NativeArray*)var491)->values[3] = (val*) var485;
7358 ((void (*)(val*, val*, long))(var489->class->vft[COLOR_array__Array__with_native]))(var489, var491, var490) /* with_native on <var489:Array[Object]>*/;
7359 CHECK_NEW_array__Array(var489);
7360 }
7361 var492 = ((val* (*)(val*))(var489->class->vft[COLOR_string__Object__to_s]))(var489) /* to_s on <var489:Array[Object]>*/;
7362 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var492) /* add on <self:SeparateErasureCompilerVisitor>*/;
7363 var493 = ((val* (*)(val*))(var_is_nullable->class->vft[COLOR_string__Object__to_s]))(var_is_nullable) /* to_s on <var_is_nullable:String>*/;
7364 var_accept_null = var493;
7365 } else {
7366 }
7367 var494 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7368 var495 = ((val* (*)(val*))(var494->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var494) /* modelbuilder on <var494:AbstractCompiler(SeparateCompiler)>*/;
7369 var496 = ((val* (*)(val*))(var495->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var495) /* toolcontext on <var495:ModelBuilder>*/;
7370 var497 = ((val* (*)(val*))(var496->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var496) /* opt_typing_test_metrics on <var496:ToolContext>*/;
7371 var498 = ((val* (*)(val*))(var497->class->vft[COLOR_opts__Option__value]))(var497) /* value on <var497:OptionBool>*/;
7372 var499 = ((struct instance_kernel__Bool*)var498)->value; /* autounbox from nullable Object to Bool */;
7373 if (var499){
7374 var500 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7375 var501 = ((val* (*)(val*))(var500->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_unresolved]))(var500) /* count_type_test_unresolved on <var500:AbstractCompiler(SeparateCompiler)>*/;
7376 var_502 = var501;
7377 var_503 = var_tag;
7378 var504 = ((val* (*)(val*, val*))(var_502->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_502, var_503) /* [] on <var_502:HashMap[String, Int]>*/;
7379 var505 = 1;
7380 { /* Inline kernel#Int#+ (var504,var505) */
7381 var508 = ((struct instance_kernel__Int*)var504)->value; /* autounbox from nullable Object to Int */;
7382 var509 = var508 + var505;
7383 var506 = var509;
7384 goto RET_LABEL507;
7385 RET_LABEL507:(void)0;
7386 }
7387 var510 = BOX_kernel__Int(var506); /* autobox from Int to nullable Object */
7388 ((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]>*/;
7389 if (varonce511) {
7390 var512 = varonce511;
7391 } else {
7392 var513 = "count_type_test_unresolved_";
7393 var514 = 27;
7394 var515 = string__NativeString__to_s_with_length(var513, var514);
7395 var512 = var515;
7396 varonce511 = var512;
7397 }
7398 if (varonce516) {
7399 var517 = varonce516;
7400 } else {
7401 var518 = "++;";
7402 var519 = 3;
7403 var520 = string__NativeString__to_s_with_length(var518, var519);
7404 var517 = var520;
7405 varonce516 = var517;
7406 }
7407 var521 = NEW_array__Array(&type_array__Arraykernel__Object);
7408 { /* var521 = array_instance Array[Object] */
7409 var522 = 3;
7410 var523 = NEW_array__NativeArray(var522, &type_array__NativeArraykernel__Object);
7411 ((struct instance_array__NativeArray*)var523)->values[0] = (val*) var512;
7412 ((struct instance_array__NativeArray*)var523)->values[1] = (val*) var_tag;
7413 ((struct instance_array__NativeArray*)var523)->values[2] = (val*) var517;
7414 ((void (*)(val*, val*, long))(var521->class->vft[COLOR_array__Array__with_native]))(var521, var523, var522) /* with_native on <var521:Array[Object]>*/;
7415 CHECK_NEW_array__Array(var521);
7416 }
7417 var524 = ((val* (*)(val*))(var521->class->vft[COLOR_string__Object__to_s]))(var521) /* to_s on <var521:Array[Object]>*/;
7418 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var524) /* add on <self:SeparateErasureCompilerVisitor>*/;
7419 } else {
7420 }
7421 } else {
7422 if (varonce525) {
7423 var526 = varonce525;
7424 } else {
7425 var527 = "type_test(";
7426 var528 = 10;
7427 var529 = string__NativeString__to_s_with_length(var527, var528);
7428 var526 = var529;
7429 varonce525 = var526;
7430 }
7431 var530 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
7432 if (varonce531) {
7433 var532 = varonce531;
7434 } else {
7435 var533 = ", ";
7436 var534 = 2;
7437 var535 = string__NativeString__to_s_with_length(var533, var534);
7438 var532 = var535;
7439 varonce531 = var532;
7440 }
7441 if (varonce536) {
7442 var537 = varonce536;
7443 } else {
7444 var538 = ")";
7445 var539 = 1;
7446 var540 = string__NativeString__to_s_with_length(var538, var539);
7447 var537 = var540;
7448 varonce536 = var537;
7449 }
7450 var541 = NEW_array__Array(&type_array__Arraykernel__Object);
7451 { /* var541 = array_instance Array[Object] */
7452 var542 = 5;
7453 var543 = NEW_array__NativeArray(var542, &type_array__NativeArraykernel__Object);
7454 ((struct instance_array__NativeArray*)var543)->values[0] = (val*) var526;
7455 ((struct instance_array__NativeArray*)var543)->values[1] = (val*) var530;
7456 ((struct instance_array__NativeArray*)var543)->values[2] = (val*) var532;
7457 ((struct instance_array__NativeArray*)var543)->values[3] = (val*) var_mtype;
7458 ((struct instance_array__NativeArray*)var543)->values[4] = (val*) var537;
7459 ((void (*)(val*, val*, long))(var541->class->vft[COLOR_array__Array__with_native]))(var541, var543, var542) /* with_native on <var541:Array[Object]>*/;
7460 CHECK_NEW_array__Array(var541);
7461 }
7462 var544 = ((val* (*)(val*))(var541->class->vft[COLOR_string__Object__to_s]))(var541) /* to_s on <var541:Array[Object]>*/;
7463 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var544) /* debug on <self:SeparateErasureCompilerVisitor>*/;
7464 fprintf(stderr, "Runtime error: %s", "Aborted");
7465 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 553);
7466 exit(1);
7467 }
7468 }
7469 if (var_maybe_null){
7470 if (varonce545) {
7471 var546 = varonce545;
7472 } else {
7473 var547 = "if(";
7474 var548 = 3;
7475 var549 = string__NativeString__to_s_with_length(var547, var548);
7476 var546 = var549;
7477 varonce545 = var546;
7478 }
7479 if (varonce550) {
7480 var551 = varonce550;
7481 } else {
7482 var552 = " == NULL) {";
7483 var553 = 11;
7484 var554 = string__NativeString__to_s_with_length(var552, var553);
7485 var551 = var554;
7486 varonce550 = var551;
7487 }
7488 var555 = NEW_array__Array(&type_array__Arraykernel__Object);
7489 { /* var555 = array_instance Array[Object] */
7490 var556 = 3;
7491 var557 = NEW_array__NativeArray(var556, &type_array__NativeArraykernel__Object);
7492 ((struct instance_array__NativeArray*)var557)->values[0] = (val*) var546;
7493 ((struct instance_array__NativeArray*)var557)->values[1] = (val*) var_value;
7494 ((struct instance_array__NativeArray*)var557)->values[2] = (val*) var551;
7495 ((void (*)(val*, val*, long))(var555->class->vft[COLOR_array__Array__with_native]))(var555, var557, var556) /* with_native on <var555:Array[Object]>*/;
7496 CHECK_NEW_array__Array(var555);
7497 }
7498 var558 = ((val* (*)(val*))(var555->class->vft[COLOR_string__Object__to_s]))(var555) /* to_s on <var555:Array[Object]>*/;
7499 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var558) /* add on <self:SeparateErasureCompilerVisitor>*/;
7500 if (varonce559) {
7501 var560 = varonce559;
7502 } else {
7503 var561 = " = ";
7504 var562 = 3;
7505 var563 = string__NativeString__to_s_with_length(var561, var562);
7506 var560 = var563;
7507 varonce559 = var560;
7508 }
7509 if (varonce564) {
7510 var565 = varonce564;
7511 } else {
7512 var566 = ";";
7513 var567 = 1;
7514 var568 = string__NativeString__to_s_with_length(var566, var567);
7515 var565 = var568;
7516 varonce564 = var565;
7517 }
7518 var569 = NEW_array__Array(&type_array__Arraykernel__Object);
7519 { /* var569 = array_instance Array[Object] */
7520 var570 = 4;
7521 var571 = NEW_array__NativeArray(var570, &type_array__NativeArraykernel__Object);
7522 ((struct instance_array__NativeArray*)var571)->values[0] = (val*) var_res;
7523 ((struct instance_array__NativeArray*)var571)->values[1] = (val*) var560;
7524 ((struct instance_array__NativeArray*)var571)->values[2] = (val*) var_accept_null;
7525 ((struct instance_array__NativeArray*)var571)->values[3] = (val*) var565;
7526 ((void (*)(val*, val*, long))(var569->class->vft[COLOR_array__Array__with_native]))(var569, var571, var570) /* with_native on <var569:Array[Object]>*/;
7527 CHECK_NEW_array__Array(var569);
7528 }
7529 var572 = ((val* (*)(val*))(var569->class->vft[COLOR_string__Object__to_s]))(var569) /* to_s on <var569:Array[Object]>*/;
7530 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var572) /* add on <self:SeparateErasureCompilerVisitor>*/;
7531 if (varonce573) {
7532 var574 = varonce573;
7533 } else {
7534 var575 = "} else {";
7535 var576 = 8;
7536 var577 = string__NativeString__to_s_with_length(var575, var576);
7537 var574 = var577;
7538 varonce573 = var574;
7539 }
7540 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var574) /* add on <self:SeparateErasureCompilerVisitor>*/;
7541 } else {
7542 }
7543 var578 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7544 /* <var578:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
7545 cltype580 = type_separate_erasure_compiler__SeparateErasureCompiler.color;
7546 idtype581 = type_separate_erasure_compiler__SeparateErasureCompiler.id;
7547 if(cltype580 >= var578->type->table_size) {
7548 var579 = 0;
7549 } else {
7550 var579 = var578->type->type_table[cltype580] == idtype581;
7551 }
7552 if (!var579) {
7553 var_class_name582 = var578 == NULL ? "null" : var578->type->name;
7554 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "SeparateErasureCompiler", var_class_name582);
7555 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 562);
7556 exit(1);
7557 }
7558 var583 = ((val* (*)(val*))(var578->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(var578) /* class_layout on <var578:SeparateCompiler(SeparateErasureCompiler)>*/;
7559 /* <var583:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
7560 cltype585 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
7561 idtype586 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
7562 if(var583 == NULL) {
7563 var584 = 0;
7564 } else {
7565 if(cltype585 >= var583->type->table_size) {
7566 var584 = 0;
7567 } else {
7568 var584 = var583->type->type_table[cltype585] == idtype586;
7569 }
7570 }
7571 if (var584){
7572 if (varonce587) {
7573 var588 = varonce587;
7574 } else {
7575 var589 = " = HASH(";
7576 var590 = 8;
7577 var591 = string__NativeString__to_s_with_length(var589, var590);
7578 var588 = var591;
7579 varonce587 = var588;
7580 }
7581 if (varonce592) {
7582 var593 = varonce592;
7583 } else {
7584 var594 = "color, ";
7585 var595 = 7;
7586 var596 = string__NativeString__to_s_with_length(var594, var595);
7587 var593 = var596;
7588 varonce592 = var593;
7589 }
7590 if (varonce597) {
7591 var598 = varonce597;
7592 } else {
7593 var599 = ");";
7594 var600 = 2;
7595 var601 = string__NativeString__to_s_with_length(var599, var600);
7596 var598 = var601;
7597 varonce597 = var598;
7598 }
7599 var602 = NEW_array__Array(&type_array__Arraykernel__Object);
7600 { /* var602 = array_instance Array[Object] */
7601 var603 = 6;
7602 var604 = NEW_array__NativeArray(var603, &type_array__NativeArraykernel__Object);
7603 ((struct instance_array__NativeArray*)var604)->values[0] = (val*) var_cltype;
7604 ((struct instance_array__NativeArray*)var604)->values[1] = (val*) var588;
7605 ((struct instance_array__NativeArray*)var604)->values[2] = (val*) var_class_ptr;
7606 ((struct instance_array__NativeArray*)var604)->values[3] = (val*) var593;
7607 ((struct instance_array__NativeArray*)var604)->values[4] = (val*) var_idtype;
7608 ((struct instance_array__NativeArray*)var604)->values[5] = (val*) var598;
7609 ((void (*)(val*, val*, long))(var602->class->vft[COLOR_array__Array__with_native]))(var602, var604, var603) /* with_native on <var602:Array[Object]>*/;
7610 CHECK_NEW_array__Array(var602);
7611 }
7612 var605 = ((val* (*)(val*))(var602->class->vft[COLOR_string__Object__to_s]))(var602) /* to_s on <var602:Array[Object]>*/;
7613 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var605) /* add on <self:SeparateErasureCompilerVisitor>*/;
7614 } else {
7615 }
7616 if (varonce606) {
7617 var607 = varonce606;
7618 } else {
7619 var608 = "if(";
7620 var609 = 3;
7621 var610 = string__NativeString__to_s_with_length(var608, var609);
7622 var607 = var610;
7623 varonce606 = var607;
7624 }
7625 if (varonce611) {
7626 var612 = varonce611;
7627 } else {
7628 var613 = " >= ";
7629 var614 = 4;
7630 var615 = string__NativeString__to_s_with_length(var613, var614);
7631 var612 = var615;
7632 varonce611 = var612;
7633 }
7634 if (varonce616) {
7635 var617 = varonce616;
7636 } else {
7637 var618 = "type_table->size) {";
7638 var619 = 19;
7639 var620 = string__NativeString__to_s_with_length(var618, var619);
7640 var617 = var620;
7641 varonce616 = var617;
7642 }
7643 var621 = NEW_array__Array(&type_array__Arraykernel__Object);
7644 { /* var621 = array_instance Array[Object] */
7645 var622 = 5;
7646 var623 = NEW_array__NativeArray(var622, &type_array__NativeArraykernel__Object);
7647 ((struct instance_array__NativeArray*)var623)->values[0] = (val*) var607;
7648 ((struct instance_array__NativeArray*)var623)->values[1] = (val*) var_cltype;
7649 ((struct instance_array__NativeArray*)var623)->values[2] = (val*) var612;
7650 ((struct instance_array__NativeArray*)var623)->values[3] = (val*) var_class_ptr;
7651 ((struct instance_array__NativeArray*)var623)->values[4] = (val*) var617;
7652 ((void (*)(val*, val*, long))(var621->class->vft[COLOR_array__Array__with_native]))(var621, var623, var622) /* with_native on <var621:Array[Object]>*/;
7653 CHECK_NEW_array__Array(var621);
7654 }
7655 var624 = ((val* (*)(val*))(var621->class->vft[COLOR_string__Object__to_s]))(var621) /* to_s on <var621:Array[Object]>*/;
7656 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var624) /* add on <self:SeparateErasureCompilerVisitor>*/;
7657 if (varonce625) {
7658 var626 = varonce625;
7659 } else {
7660 var627 = " = 0;";
7661 var628 = 5;
7662 var629 = string__NativeString__to_s_with_length(var627, var628);
7663 var626 = var629;
7664 varonce625 = var626;
7665 }
7666 var630 = NEW_array__Array(&type_array__Arraykernel__Object);
7667 { /* var630 = array_instance Array[Object] */
7668 var631 = 2;
7669 var632 = NEW_array__NativeArray(var631, &type_array__NativeArraykernel__Object);
7670 ((struct instance_array__NativeArray*)var632)->values[0] = (val*) var_res;
7671 ((struct instance_array__NativeArray*)var632)->values[1] = (val*) var626;
7672 ((void (*)(val*, val*, long))(var630->class->vft[COLOR_array__Array__with_native]))(var630, var632, var631) /* with_native on <var630:Array[Object]>*/;
7673 CHECK_NEW_array__Array(var630);
7674 }
7675 var633 = ((val* (*)(val*))(var630->class->vft[COLOR_string__Object__to_s]))(var630) /* to_s on <var630:Array[Object]>*/;
7676 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var633) /* add on <self:SeparateErasureCompilerVisitor>*/;
7677 if (varonce634) {
7678 var635 = varonce634;
7679 } else {
7680 var636 = "} else {";
7681 var637 = 8;
7682 var638 = string__NativeString__to_s_with_length(var636, var637);
7683 var635 = var638;
7684 varonce634 = var635;
7685 }
7686 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var635) /* add on <self:SeparateErasureCompilerVisitor>*/;
7687 if (varonce639) {
7688 var640 = varonce639;
7689 } else {
7690 var641 = " = ";
7691 var642 = 3;
7692 var643 = string__NativeString__to_s_with_length(var641, var642);
7693 var640 = var643;
7694 varonce639 = var640;
7695 }
7696 if (varonce644) {
7697 var645 = varonce644;
7698 } else {
7699 var646 = "type_table->table[";
7700 var647 = 18;
7701 var648 = string__NativeString__to_s_with_length(var646, var647);
7702 var645 = var648;
7703 varonce644 = var645;
7704 }
7705 if (varonce649) {
7706 var650 = varonce649;
7707 } else {
7708 var651 = "] == ";
7709 var652 = 5;
7710 var653 = string__NativeString__to_s_with_length(var651, var652);
7711 var650 = var653;
7712 varonce649 = var650;
7713 }
7714 if (varonce654) {
7715 var655 = varonce654;
7716 } else {
7717 var656 = ";";
7718 var657 = 1;
7719 var658 = string__NativeString__to_s_with_length(var656, var657);
7720 var655 = var658;
7721 varonce654 = var655;
7722 }
7723 var659 = NEW_array__Array(&type_array__Arraykernel__Object);
7724 { /* var659 = array_instance Array[Object] */
7725 var660 = 8;
7726 var661 = NEW_array__NativeArray(var660, &type_array__NativeArraykernel__Object);
7727 ((struct instance_array__NativeArray*)var661)->values[0] = (val*) var_res;
7728 ((struct instance_array__NativeArray*)var661)->values[1] = (val*) var640;
7729 ((struct instance_array__NativeArray*)var661)->values[2] = (val*) var_class_ptr;
7730 ((struct instance_array__NativeArray*)var661)->values[3] = (val*) var645;
7731 ((struct instance_array__NativeArray*)var661)->values[4] = (val*) var_cltype;
7732 ((struct instance_array__NativeArray*)var661)->values[5] = (val*) var650;
7733 ((struct instance_array__NativeArray*)var661)->values[6] = (val*) var_idtype;
7734 ((struct instance_array__NativeArray*)var661)->values[7] = (val*) var655;
7735 ((void (*)(val*, val*, long))(var659->class->vft[COLOR_array__Array__with_native]))(var659, var661, var660) /* with_native on <var659:Array[Object]>*/;
7736 CHECK_NEW_array__Array(var659);
7737 }
7738 var662 = ((val* (*)(val*))(var659->class->vft[COLOR_string__Object__to_s]))(var659) /* to_s on <var659:Array[Object]>*/;
7739 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var662) /* add on <self:SeparateErasureCompilerVisitor>*/;
7740 if (varonce663) {
7741 var664 = varonce663;
7742 } else {
7743 var665 = "}";
7744 var666 = 1;
7745 var667 = string__NativeString__to_s_with_length(var665, var666);
7746 var664 = var667;
7747 varonce663 = var664;
7748 }
7749 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var664) /* add on <self:SeparateErasureCompilerVisitor>*/;
7750 if (var_maybe_null){
7751 if (varonce668) {
7752 var669 = varonce668;
7753 } else {
7754 var670 = "}";
7755 var671 = 1;
7756 var672 = string__NativeString__to_s_with_length(var670, var671);
7757 var669 = var672;
7758 varonce668 = var669;
7759 }
7760 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var669) /* add on <self:SeparateErasureCompilerVisitor>*/;
7761 } else {
7762 }
7763 var = var_res;
7764 goto RET_LABEL;
7765 RET_LABEL:;
7766 return var;
7767 }
7768 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: Object, RuntimeVariable, MType, String): RuntimeVariable */
7769 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
7770 val* var /* : RuntimeVariable */;
7771 val* var1 /* : RuntimeVariable */;
7772 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(self, p0, p1, p2);
7773 var = var1;
7774 RET_LABEL:;
7775 return var;
7776 }
7777 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: SeparateErasureCompilerVisitor, RuntimeVariable): String */
7778 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
7779 val* var /* : String */;
7780 val* var_value /* var value: RuntimeVariable */;
7781 static val* varonce;
7782 val* var1 /* : String */;
7783 char* var2 /* : NativeString */;
7784 long var3 /* : Int */;
7785 val* var4 /* : String */;
7786 val* var5 /* : String */;
7787 val* var_res /* var res: String */;
7788 static val* varonce6;
7789 val* var7 /* : String */;
7790 char* var8 /* : NativeString */;
7791 long var9 /* : Int */;
7792 val* var10 /* : String */;
7793 static val* varonce11;
7794 val* var12 /* : String */;
7795 char* var13 /* : NativeString */;
7796 long var14 /* : Int */;
7797 val* var15 /* : String */;
7798 val* var16 /* : Array[Object] */;
7799 long var17 /* : Int */;
7800 val* var18 /* : NativeArray[Object] */;
7801 val* var19 /* : String */;
7802 val* var20 /* : MType */;
7803 val* var21 /* : String */;
7804 static val* varonce22;
7805 val* var23 /* : String */;
7806 char* var24 /* : NativeString */;
7807 long var25 /* : Int */;
7808 val* var26 /* : String */;
7809 short int var27 /* : Bool */;
7810 static val* varonce28;
7811 val* var29 /* : String */;
7812 char* var30 /* : NativeString */;
7813 long var31 /* : Int */;
7814 val* var32 /* : String */;
7815 static val* varonce33;
7816 val* var34 /* : String */;
7817 char* var35 /* : NativeString */;
7818 long var36 /* : Int */;
7819 val* var37 /* : String */;
7820 static val* varonce38;
7821 val* var39 /* : String */;
7822 char* var40 /* : NativeString */;
7823 long var41 /* : Int */;
7824 val* var42 /* : String */;
7825 val* var43 /* : Array[Object] */;
7826 long var44 /* : Int */;
7827 val* var45 /* : NativeArray[Object] */;
7828 val* var46 /* : String */;
7829 static val* varonce47;
7830 val* var48 /* : String */;
7831 char* var49 /* : NativeString */;
7832 long var50 /* : Int */;
7833 val* var51 /* : String */;
7834 val* var52 /* : MType */;
7835 val* var53 /* : String */;
7836 val* var54 /* : Array[Object] */;
7837 long var55 /* : Int */;
7838 val* var56 /* : NativeArray[Object] */;
7839 val* var57 /* : String */;
7840 static val* varonce58;
7841 val* var59 /* : String */;
7842 char* var60 /* : NativeString */;
7843 long var61 /* : Int */;
7844 val* var62 /* : String */;
7845 val* var63 /* : MType */;
7846 val* var64 /* : String */;
7847 static val* varonce65;
7848 val* var66 /* : String */;
7849 char* var67 /* : NativeString */;
7850 long var68 /* : Int */;
7851 val* var69 /* : String */;
7852 val* var70 /* : Array[Object] */;
7853 long var71 /* : Int */;
7854 val* var72 /* : NativeArray[Object] */;
7855 val* var73 /* : String */;
7856 var_value = p0;
7857 if (varonce) {
7858 var1 = varonce;
7859 } else {
7860 var2 = "var_class_name";
7861 var3 = 14;
7862 var4 = string__NativeString__to_s_with_length(var2, var3);
7863 var1 = var4;
7864 varonce = var1;
7865 }
7866 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var1) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7867 var_res = var5;
7868 if (varonce6) {
7869 var7 = varonce6;
7870 } else {
7871 var8 = "const char* ";
7872 var9 = 12;
7873 var10 = string__NativeString__to_s_with_length(var8, var9);
7874 var7 = var10;
7875 varonce6 = var7;
7876 }
7877 if (varonce11) {
7878 var12 = varonce11;
7879 } else {
7880 var13 = ";";
7881 var14 = 1;
7882 var15 = string__NativeString__to_s_with_length(var13, var14);
7883 var12 = var15;
7884 varonce11 = var12;
7885 }
7886 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
7887 { /* var16 = array_instance Array[Object] */
7888 var17 = 3;
7889 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
7890 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
7891 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_res;
7892 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
7893 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
7894 CHECK_NEW_array__Array(var16);
7895 }
7896 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
7897 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var19) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
7898 var20 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7899 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_compiler__MType__ctype]))(var20) /* ctype on <var20:MType>*/;
7900 if (varonce22) {
7901 var23 = varonce22;
7902 } else {
7903 var24 = "val*";
7904 var25 = 4;
7905 var26 = string__NativeString__to_s_with_length(var24, var25);
7906 var23 = var26;
7907 varonce22 = var23;
7908 }
7909 var27 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var23) /* == on <var21:String>*/;
7910 if (var27){
7911 if (varonce28) {
7912 var29 = varonce28;
7913 } else {
7914 var30 = " = ";
7915 var31 = 3;
7916 var32 = string__NativeString__to_s_with_length(var30, var31);
7917 var29 = var32;
7918 varonce28 = var29;
7919 }
7920 if (varonce33) {
7921 var34 = varonce33;
7922 } else {
7923 var35 = " == NULL ? \"null\" : ";
7924 var36 = 20;
7925 var37 = string__NativeString__to_s_with_length(var35, var36);
7926 var34 = var37;
7927 varonce33 = var34;
7928 }
7929 if (varonce38) {
7930 var39 = varonce38;
7931 } else {
7932 var40 = "->class->name;";
7933 var41 = 14;
7934 var42 = string__NativeString__to_s_with_length(var40, var41);
7935 var39 = var42;
7936 varonce38 = var39;
7937 }
7938 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
7939 { /* var43 = array_instance Array[Object] */
7940 var44 = 6;
7941 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
7942 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_res;
7943 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var29;
7944 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var_value;
7945 ((struct instance_array__NativeArray*)var45)->values[3] = (val*) var34;
7946 ((struct instance_array__NativeArray*)var45)->values[4] = (val*) var_value;
7947 ((struct instance_array__NativeArray*)var45)->values[5] = (val*) var39;
7948 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
7949 CHECK_NEW_array__Array(var43);
7950 }
7951 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
7952 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var46) /* add on <self:SeparateErasureCompilerVisitor>*/;
7953 } else {
7954 if (varonce47) {
7955 var48 = varonce47;
7956 } else {
7957 var49 = "class_";
7958 var50 = 6;
7959 var51 = string__NativeString__to_s_with_length(var49, var50);
7960 var48 = var51;
7961 varonce47 = var48;
7962 }
7963 var52 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7964 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_abstract_compiler__MType__c_name]))(var52) /* c_name on <var52:MType>*/;
7965 var54 = NEW_array__Array(&type_array__Arraykernel__Object);
7966 { /* var54 = array_instance Array[Object] */
7967 var55 = 2;
7968 var56 = NEW_array__NativeArray(var55, &type_array__NativeArraykernel__Object);
7969 ((struct instance_array__NativeArray*)var56)->values[0] = (val*) var48;
7970 ((struct instance_array__NativeArray*)var56)->values[1] = (val*) var53;
7971 ((void (*)(val*, val*, long))(var54->class->vft[COLOR_array__Array__with_native]))(var54, var56, var55) /* with_native on <var54:Array[Object]>*/;
7972 CHECK_NEW_array__Array(var54);
7973 }
7974 var57 = ((val* (*)(val*))(var54->class->vft[COLOR_string__Object__to_s]))(var54) /* to_s on <var54:Array[Object]>*/;
7975 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var57) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
7976 if (varonce58) {
7977 var59 = varonce58;
7978 } else {
7979 var60 = " = class_";
7980 var61 = 9;
7981 var62 = string__NativeString__to_s_with_length(var60, var61);
7982 var59 = var62;
7983 varonce58 = var59;
7984 }
7985 var63 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7986 var64 = ((val* (*)(val*))(var63->class->vft[COLOR_abstract_compiler__MType__c_name]))(var63) /* c_name on <var63:MType>*/;
7987 if (varonce65) {
7988 var66 = varonce65;
7989 } else {
7990 var67 = ".name;";
7991 var68 = 6;
7992 var69 = string__NativeString__to_s_with_length(var67, var68);
7993 var66 = var69;
7994 varonce65 = var66;
7995 }
7996 var70 = NEW_array__Array(&type_array__Arraykernel__Object);
7997 { /* var70 = array_instance Array[Object] */
7998 var71 = 4;
7999 var72 = NEW_array__NativeArray(var71, &type_array__NativeArraykernel__Object);
8000 ((struct instance_array__NativeArray*)var72)->values[0] = (val*) var_res;
8001 ((struct instance_array__NativeArray*)var72)->values[1] = (val*) var59;
8002 ((struct instance_array__NativeArray*)var72)->values[2] = (val*) var64;
8003 ((struct instance_array__NativeArray*)var72)->values[3] = (val*) var66;
8004 ((void (*)(val*, val*, long))(var70->class->vft[COLOR_array__Array__with_native]))(var70, var72, var71) /* with_native on <var70:Array[Object]>*/;
8005 CHECK_NEW_array__Array(var70);
8006 }
8007 var73 = ((val* (*)(val*))(var70->class->vft[COLOR_string__Object__to_s]))(var70) /* to_s on <var70:Array[Object]>*/;
8008 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var73) /* add on <self:SeparateErasureCompilerVisitor>*/;
8009 }
8010 var = var_res;
8011 goto RET_LABEL;
8012 RET_LABEL:;
8013 return var;
8014 }
8015 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: Object, RuntimeVariable): String */
8016 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
8017 val* var /* : String */;
8018 val* var1 /* : String */;
8019 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(self, p0);
8020 var = var1;
8021 RET_LABEL:;
8022 return var;
8023 }
8024 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#array_instance for (self: SeparateErasureCompilerVisitor, Array[RuntimeVariable], MType): RuntimeVariable */
8025 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(val* self, val* p0, val* p1) {
8026 val* var /* : RuntimeVariable */;
8027 val* var_array /* var array: Array[RuntimeVariable] */;
8028 val* var_elttype /* var elttype: MType */;
8029 static val* varonce;
8030 val* var1 /* : String */;
8031 char* var2 /* : NativeString */;
8032 long var3 /* : Int */;
8033 val* var4 /* : String */;
8034 val* var5 /* : MClass */;
8035 val* var_nclass /* var nclass: MClass */;
8036 val* var6 /* : MType */;
8037 static val* varonce7;
8038 val* var8 /* : String */;
8039 char* var9 /* : NativeString */;
8040 long var10 /* : Int */;
8041 val* var11 /* : String */;
8042 val* var12 /* : MClass */;
8043 val* var13 /* : Array[MType] */;
8044 long var14 /* : Int */;
8045 val* var15 /* : NativeArray[MType] */;
8046 val* var16 /* : MClassType */;
8047 val* var_arraytype /* var arraytype: MClassType */;
8048 val* var17 /* : RuntimeVariable */;
8049 val* var_res /* var res: RuntimeVariable */;
8050 static val* varonce18;
8051 val* var19 /* : String */;
8052 char* var20 /* : NativeString */;
8053 long var21 /* : Int */;
8054 val* var22 /* : String */;
8055 static val* varonce23;
8056 val* var24 /* : String */;
8057 char* var25 /* : NativeString */;
8058 long var26 /* : Int */;
8059 val* var27 /* : String */;
8060 static val* varonce28;
8061 val* var29 /* : String */;
8062 char* var30 /* : NativeString */;
8063 long var31 /* : Int */;
8064 val* var32 /* : String */;
8065 val* var33 /* : Array[Object] */;
8066 long var34 /* : Int */;
8067 val* var35 /* : NativeArray[Object] */;
8068 val* var36 /* : String */;
8069 static val* varonce37;
8070 val* var38 /* : String */;
8071 char* var39 /* : NativeString */;
8072 long var40 /* : Int */;
8073 val* var41 /* : String */;
8074 val* var42 /* : MClass */;
8075 val* var43 /* : Array[MType] */;
8076 long var44 /* : Int */;
8077 val* var45 /* : NativeArray[MType] */;
8078 val* var46 /* : MClassType */;
8079 val* var47 /* : RuntimeVariable */;
8080 val* var_nat /* var nat: RuntimeVariable */;
8081 short int var48 /* : Bool */;
8082 static val* varonce49;
8083 val* var50 /* : String */;
8084 char* var51 /* : NativeString */;
8085 long var52 /* : Int */;
8086 val* var53 /* : String */;
8087 val* var54 /* : String */;
8088 val* var55 /* : Array[Object] */;
8089 long var56 /* : Int */;
8090 val* var57 /* : NativeArray[Object] */;
8091 val* var58 /* : String */;
8092 static val* varonce59;
8093 val* var60 /* : String */;
8094 char* var61 /* : NativeString */;
8095 long var62 /* : Int */;
8096 val* var63 /* : String */;
8097 val* var64 /* : String */;
8098 static val* varonce65;
8099 val* var66 /* : String */;
8100 char* var67 /* : NativeString */;
8101 long var68 /* : Int */;
8102 val* var69 /* : String */;
8103 long var70 /* : Int */;
8104 static val* varonce71;
8105 val* var72 /* : String */;
8106 char* var73 /* : NativeString */;
8107 long var74 /* : Int */;
8108 val* var75 /* : String */;
8109 val* var76 /* : Array[Object] */;
8110 long var77 /* : Int */;
8111 val* var78 /* : NativeArray[Object] */;
8112 val* var79 /* : Object */;
8113 val* var80 /* : String */;
8114 val* var81 /* : Range[Int] */;
8115 long var82 /* : Int */;
8116 long var83 /* : Int */;
8117 val* var84 /* : Discrete */;
8118 val* var85 /* : Discrete */;
8119 val* var86 /* : Iterator[nullable Object] */;
8120 short int var87 /* : Bool */;
8121 val* var88 /* : nullable Object */;
8122 long var_i /* var i: Int */;
8123 long var89 /* : Int */;
8124 val* var90 /* : nullable Object */;
8125 val* var91 /* : MClassType */;
8126 val* var92 /* : RuntimeVariable */;
8127 val* var_r /* var r: RuntimeVariable */;
8128 static val* varonce93;
8129 val* var94 /* : String */;
8130 char* var95 /* : NativeString */;
8131 long var96 /* : Int */;
8132 val* var97 /* : String */;
8133 val* var98 /* : String */;
8134 static val* varonce99;
8135 val* var100 /* : String */;
8136 char* var101 /* : NativeString */;
8137 long var102 /* : Int */;
8138 val* var103 /* : String */;
8139 static val* varonce104;
8140 val* var105 /* : String */;
8141 char* var106 /* : NativeString */;
8142 long var107 /* : Int */;
8143 val* var108 /* : String */;
8144 static val* varonce109;
8145 val* var110 /* : String */;
8146 char* var111 /* : NativeString */;
8147 long var112 /* : Int */;
8148 val* var113 /* : String */;
8149 static val* varonce114;
8150 val* var115 /* : String */;
8151 char* var116 /* : NativeString */;
8152 long var117 /* : Int */;
8153 val* var118 /* : String */;
8154 val* var119 /* : Array[Object] */;
8155 long var120 /* : Int */;
8156 val* var121 /* : NativeArray[Object] */;
8157 val* var122 /* : Object */;
8158 val* var123 /* : String */;
8159 long var124 /* : Int */;
8160 val* var125 /* : RuntimeVariable */;
8161 val* var_length /* var length: RuntimeVariable */;
8162 static val* varonce126;
8163 val* var127 /* : String */;
8164 char* var128 /* : NativeString */;
8165 long var129 /* : Int */;
8166 val* var130 /* : String */;
8167 val* var131 /* : MMethod */;
8168 val* var132 /* : Array[RuntimeVariable] */;
8169 long var133 /* : Int */;
8170 val* var134 /* : NativeArray[RuntimeVariable] */;
8171 val* var135 /* : nullable RuntimeVariable */;
8172 static val* varonce136;
8173 val* var137 /* : String */;
8174 char* var138 /* : NativeString */;
8175 long var139 /* : Int */;
8176 val* var140 /* : String */;
8177 var_array = p0;
8178 var_elttype = p1;
8179 if (varonce) {
8180 var1 = varonce;
8181 } else {
8182 var2 = "NativeArray";
8183 var3 = 11;
8184 var4 = string__NativeString__to_s_with_length(var2, var3);
8185 var1 = var4;
8186 varonce = var1;
8187 }
8188 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var1) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8189 var_nclass = var5;
8190 var6 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_elttype) /* anchor on <self:SeparateErasureCompilerVisitor>*/;
8191 var_elttype = var6;
8192 if (varonce7) {
8193 var8 = varonce7;
8194 } else {
8195 var9 = "Array";
8196 var10 = 5;
8197 var11 = string__NativeString__to_s_with_length(var9, var10);
8198 var8 = var11;
8199 varonce7 = var8;
8200 }
8201 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var8) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8202 var13 = NEW_array__Array(&type_array__Arraymodel__MType);
8203 { /* var13 = array_instance Array[MType] */
8204 var14 = 1;
8205 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraymodel__MType);
8206 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var_elttype;
8207 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[MType]>*/;
8208 CHECK_NEW_array__Array(var13);
8209 }
8210 var16 = ((val* (*)(val*, val*))(var12->class->vft[COLOR_model__MClass__get_mtype]))(var12, var13) /* get_mtype on <var12:MClass>*/;
8211 var_arraytype = var16;
8212 var17 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init_instance]))(self, var_arraytype) /* init_instance on <self:SeparateErasureCompilerVisitor>*/;
8213 var_res = var17;
8214 if (varonce18) {
8215 var19 = varonce18;
8216 } else {
8217 var20 = "{ /* ";
8218 var21 = 5;
8219 var22 = string__NativeString__to_s_with_length(var20, var21);
8220 var19 = var22;
8221 varonce18 = var19;
8222 }
8223 if (varonce23) {
8224 var24 = varonce23;
8225 } else {
8226 var25 = " = array_instance Array[";
8227 var26 = 24;
8228 var27 = string__NativeString__to_s_with_length(var25, var26);
8229 var24 = var27;
8230 varonce23 = var24;
8231 }
8232 if (varonce28) {
8233 var29 = varonce28;
8234 } else {
8235 var30 = "] */";
8236 var31 = 4;
8237 var32 = string__NativeString__to_s_with_length(var30, var31);
8238 var29 = var32;
8239 varonce28 = var29;
8240 }
8241 var33 = NEW_array__Array(&type_array__Arraykernel__Object);
8242 { /* var33 = array_instance Array[Object] */
8243 var34 = 5;
8244 var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
8245 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var19;
8246 ((struct instance_array__NativeArray*)var35)->values[1] = (val*) var_res;
8247 ((struct instance_array__NativeArray*)var35)->values[2] = (val*) var24;
8248 ((struct instance_array__NativeArray*)var35)->values[3] = (val*) var_elttype;
8249 ((struct instance_array__NativeArray*)var35)->values[4] = (val*) var29;
8250 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
8251 CHECK_NEW_array__Array(var33);
8252 }
8253 var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
8254 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var36) /* add on <self:SeparateErasureCompilerVisitor>*/;
8255 if (varonce37) {
8256 var38 = varonce37;
8257 } else {
8258 var39 = "NativeArray";
8259 var40 = 11;
8260 var41 = string__NativeString__to_s_with_length(var39, var40);
8261 var38 = var41;
8262 varonce37 = var38;
8263 }
8264 var42 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var38) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8265 var43 = NEW_array__Array(&type_array__Arraymodel__MType);
8266 { /* var43 = array_instance Array[MType] */
8267 var44 = 1;
8268 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraymodel__MType);
8269 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_elttype;
8270 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[MType]>*/;
8271 CHECK_NEW_array__Array(var43);
8272 }
8273 var46 = ((val* (*)(val*, val*))(var42->class->vft[COLOR_model__MClass__get_mtype]))(var42, var43) /* get_mtype on <var42:MClass>*/;
8274 var47 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var46) /* new_var on <self:SeparateErasureCompilerVisitor>*/;
8275 var_nat = var47;
8276 var48 = 1;
8277 ((void (*)(val*, short int))(var_nat->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_nat, var48) /* is_exact= on <var_nat:RuntimeVariable>*/;
8278 if (varonce49) {
8279 var50 = varonce49;
8280 } else {
8281 var51 = "NEW_";
8282 var52 = 4;
8283 var53 = string__NativeString__to_s_with_length(var51, var52);
8284 var50 = var53;
8285 varonce49 = var50;
8286 }
8287 var54 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8288 var55 = NEW_array__Array(&type_array__Arraykernel__Object);
8289 { /* var55 = array_instance Array[Object] */
8290 var56 = 2;
8291 var57 = NEW_array__NativeArray(var56, &type_array__NativeArraykernel__Object);
8292 ((struct instance_array__NativeArray*)var57)->values[0] = (val*) var50;
8293 ((struct instance_array__NativeArray*)var57)->values[1] = (val*) var54;
8294 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_array__Array__with_native]))(var55, var57, var56) /* with_native on <var55:Array[Object]>*/;
8295 CHECK_NEW_array__Array(var55);
8296 }
8297 var58 = ((val* (*)(val*))(var55->class->vft[COLOR_string__Object__to_s]))(var55) /* to_s on <var55:Array[Object]>*/;
8298 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var58) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
8299 if (varonce59) {
8300 var60 = varonce59;
8301 } else {
8302 var61 = " = NEW_";
8303 var62 = 7;
8304 var63 = string__NativeString__to_s_with_length(var61, var62);
8305 var60 = var63;
8306 varonce59 = var60;
8307 }
8308 var64 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8309 if (varonce65) {
8310 var66 = varonce65;
8311 } else {
8312 var67 = "(";
8313 var68 = 1;
8314 var69 = string__NativeString__to_s_with_length(var67, var68);
8315 var66 = var69;
8316 varonce65 = var66;
8317 }
8318 var70 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8319 if (varonce71) {
8320 var72 = varonce71;
8321 } else {
8322 var73 = ");";
8323 var74 = 2;
8324 var75 = string__NativeString__to_s_with_length(var73, var74);
8325 var72 = var75;
8326 varonce71 = var72;
8327 }
8328 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
8329 { /* var76 = array_instance Array[Object] */
8330 var77 = 6;
8331 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
8332 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var_nat;
8333 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var60;
8334 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var64;
8335 ((struct instance_array__NativeArray*)var78)->values[3] = (val*) var66;
8336 var79 = BOX_kernel__Int(var70); /* autobox from Int to Object */
8337 ((struct instance_array__NativeArray*)var78)->values[4] = (val*) var79;
8338 ((struct instance_array__NativeArray*)var78)->values[5] = (val*) var72;
8339 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
8340 CHECK_NEW_array__Array(var76);
8341 }
8342 var80 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
8343 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var80) /* add on <self:SeparateErasureCompilerVisitor>*/;
8344 var81 = NEW_range__Range(&type_range__Rangekernel__Int);
8345 var82 = 0;
8346 var83 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8347 var84 = BOX_kernel__Int(var82); /* autobox from Int to Discrete */
8348 var85 = BOX_kernel__Int(var83); /* autobox from Int to Discrete */
8349 ((void (*)(val*, val*, val*))(var81->class->vft[COLOR_range__Range__without_last]))(var81, var84, var85) /* without_last on <var81:Range[Int]>*/;
8350 CHECK_NEW_range__Range(var81);
8351 var86 = ((val* (*)(val*))(var81->class->vft[COLOR_abstract_collection__Collection__iterator]))(var81) /* iterator on <var81:Range[Int]>*/;
8352 for(;;) {
8353 var87 = ((short int (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var86) /* is_ok on <var86:Iterator[nullable Object]>*/;
8354 if(!var87) break;
8355 var88 = ((val* (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__item]))(var86) /* item on <var86:Iterator[nullable Object]>*/;
8356 var89 = ((struct instance_kernel__Int*)var88)->value; /* autounbox from nullable Object to Int */;
8357 var_i = var89;
8358 var90 = ((val* (*)(val*, long))(var_array->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_array, var_i) /* [] on <var_array:Array[RuntimeVariable]>*/;
8359 var91 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__object_type]))(self) /* object_type on <self:SeparateErasureCompilerVisitor>*/;
8360 var92 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var90, var91) /* autobox on <self:SeparateErasureCompilerVisitor>*/;
8361 var_r = var92;
8362 if (varonce93) {
8363 var94 = varonce93;
8364 } else {
8365 var95 = "((struct instance_";
8366 var96 = 18;
8367 var97 = string__NativeString__to_s_with_length(var95, var96);
8368 var94 = var97;
8369 varonce93 = var94;
8370 }
8371 var98 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8372 if (varonce99) {
8373 var100 = varonce99;
8374 } else {
8375 var101 = "*)";
8376 var102 = 2;
8377 var103 = string__NativeString__to_s_with_length(var101, var102);
8378 var100 = var103;
8379 varonce99 = var100;
8380 }
8381 if (varonce104) {
8382 var105 = varonce104;
8383 } else {
8384 var106 = ")->values[";
8385 var107 = 10;
8386 var108 = string__NativeString__to_s_with_length(var106, var107);
8387 var105 = var108;
8388 varonce104 = var105;
8389 }
8390 if (varonce109) {
8391 var110 = varonce109;
8392 } else {
8393 var111 = "] = (val*) ";
8394 var112 = 11;
8395 var113 = string__NativeString__to_s_with_length(var111, var112);
8396 var110 = var113;
8397 varonce109 = var110;
8398 }
8399 if (varonce114) {
8400 var115 = varonce114;
8401 } else {
8402 var116 = ";";
8403 var117 = 1;
8404 var118 = string__NativeString__to_s_with_length(var116, var117);
8405 var115 = var118;
8406 varonce114 = var115;
8407 }
8408 var119 = NEW_array__Array(&type_array__Arraykernel__Object);
8409 { /* var119 = array_instance Array[Object] */
8410 var120 = 9;
8411 var121 = NEW_array__NativeArray(var120, &type_array__NativeArraykernel__Object);
8412 ((struct instance_array__NativeArray*)var121)->values[0] = (val*) var94;
8413 ((struct instance_array__NativeArray*)var121)->values[1] = (val*) var98;
8414 ((struct instance_array__NativeArray*)var121)->values[2] = (val*) var100;
8415 ((struct instance_array__NativeArray*)var121)->values[3] = (val*) var_nat;
8416 ((struct instance_array__NativeArray*)var121)->values[4] = (val*) var105;
8417 var122 = BOX_kernel__Int(var_i); /* autobox from Int to Object */
8418 ((struct instance_array__NativeArray*)var121)->values[5] = (val*) var122;
8419 ((struct instance_array__NativeArray*)var121)->values[6] = (val*) var110;
8420 ((struct instance_array__NativeArray*)var121)->values[7] = (val*) var_r;
8421 ((struct instance_array__NativeArray*)var121)->values[8] = (val*) var115;
8422 ((void (*)(val*, val*, long))(var119->class->vft[COLOR_array__Array__with_native]))(var119, var121, var120) /* with_native on <var119:Array[Object]>*/;
8423 CHECK_NEW_array__Array(var119);
8424 }
8425 var123 = ((val* (*)(val*))(var119->class->vft[COLOR_string__Object__to_s]))(var119) /* to_s on <var119:Array[Object]>*/;
8426 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var123) /* add on <self:SeparateErasureCompilerVisitor>*/;
8427 CONTINUE_label: (void)0;
8428 ((void (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__next]))(var86) /* next on <var86:Iterator[nullable Object]>*/;
8429 }
8430 BREAK_label: (void)0;
8431 var124 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8432 var125 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__int_instance]))(self, var124) /* int_instance on <self:SeparateErasureCompilerVisitor>*/;
8433 var_length = var125;
8434 if (varonce126) {
8435 var127 = varonce126;
8436 } else {
8437 var128 = "with_native";
8438 var129 = 11;
8439 var130 = string__NativeString__to_s_with_length(var128, var129);
8440 var127 = var130;
8441 varonce126 = var127;
8442 }
8443 var131 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_property]))(self, var127, var_arraytype) /* get_property on <self:SeparateErasureCompilerVisitor>*/;
8444 var132 = NEW_array__Array(&type_array__Arrayabstract_compiler__RuntimeVariable);
8445 { /* var132 = array_instance Array[RuntimeVariable] */
8446 var133 = 3;
8447 var134 = NEW_array__NativeArray(var133, &type_array__NativeArrayabstract_compiler__RuntimeVariable);
8448 ((struct instance_array__NativeArray*)var134)->values[0] = (val*) var_res;
8449 ((struct instance_array__NativeArray*)var134)->values[1] = (val*) var_nat;
8450 ((struct instance_array__NativeArray*)var134)->values[2] = (val*) var_length;
8451 ((void (*)(val*, val*, long))(var132->class->vft[COLOR_array__Array__with_native]))(var132, var134, var133) /* with_native on <var132:Array[RuntimeVariable]>*/;
8452 CHECK_NEW_array__Array(var132);
8453 }
8454 var135 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__send]))(self, var131, var132) /* send on <self:SeparateErasureCompilerVisitor>*/;
8455 var135;
8456 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__check_init_instance]))(self, var_res, var_arraytype) /* check_init_instance on <self:SeparateErasureCompilerVisitor>*/;
8457 if (varonce136) {
8458 var137 = varonce136;
8459 } else {
8460 var138 = "}";
8461 var139 = 1;
8462 var140 = string__NativeString__to_s_with_length(var138, var139);
8463 var137 = var140;
8464 varonce136 = var137;
8465 }
8466 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var137) /* add on <self:SeparateErasureCompilerVisitor>*/;
8467 var = var_res;
8468 goto RET_LABEL;
8469 RET_LABEL:;
8470 return var;
8471 }
8472 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#array_instance for (self: Object, Array[RuntimeVariable], MType): RuntimeVariable */
8473 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(val* self, val* p0, val* p1) {
8474 val* var /* : RuntimeVariable */;
8475 val* var1 /* : RuntimeVariable */;
8476 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(self, p0, p1);
8477 var = var1;
8478 RET_LABEL:;
8479 return var;
8480 }
8481 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: SeparateErasureCompilerVisitor, MType, Array[RuntimeVariable]) */
8482 void separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
8483 val* var_ret_type /* var ret_type: MType */;
8484 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
8485 short int var /* : Bool */;
8486 int cltype;
8487 int idtype;
8488 const char* var_class_name;
8489 val* var_ret /* var ret: MClassType */;
8490 static val* varonce;
8491 val* var1 /* : String */;
8492 char* var2 /* : NativeString */;
8493 long var3 /* : Int */;
8494 val* var4 /* : String */;
8495 val* var5 /* : MClass */;
8496 val* var6 /* : String */;
8497 val* var7 /* : Array[Object] */;
8498 long var8 /* : Int */;
8499 val* var9 /* : NativeArray[Object] */;
8500 val* var10 /* : String */;
8501 static val* varonce11;
8502 val* var12 /* : String */;
8503 char* var13 /* : NativeString */;
8504 long var14 /* : Int */;
8505 val* var15 /* : String */;
8506 val* var16 /* : MClass */;
8507 val* var17 /* : String */;
8508 static val* varonce18;
8509 val* var19 /* : String */;
8510 char* var20 /* : NativeString */;
8511 long var21 /* : Int */;
8512 val* var22 /* : String */;
8513 long var23 /* : Int */;
8514 val* var24 /* : nullable Object */;
8515 static val* varonce25;
8516 val* var26 /* : String */;
8517 char* var27 /* : NativeString */;
8518 long var28 /* : Int */;
8519 val* var29 /* : String */;
8520 val* var30 /* : Array[Object] */;
8521 long var31 /* : Int */;
8522 val* var32 /* : NativeArray[Object] */;
8523 val* var33 /* : String */;
8524 val* var34 /* : RuntimeVariable */;
8525 var_ret_type = p0;
8526 var_arguments = p1;
8527 /* <var_ret_type:MType> isa MClassType */
8528 cltype = type_model__MClassType.color;
8529 idtype = type_model__MClassType.id;
8530 if(cltype >= var_ret_type->type->table_size) {
8531 var = 0;
8532 } else {
8533 var = var_ret_type->type->type_table[cltype] == idtype;
8534 }
8535 if (!var) {
8536 var_class_name = var_ret_type == NULL ? "null" : var_ret_type->type->name;
8537 fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
8538 fprintf(stderr, " (%s:%d)\n", "src/separate_erasure_compiler.nit", 614);
8539 exit(1);
8540 }
8541 var_ret = var_ret_type;
8542 if (varonce) {
8543 var1 = varonce;
8544 } else {
8545 var2 = "NEW_";
8546 var3 = 4;
8547 var4 = string__NativeString__to_s_with_length(var2, var3);
8548 var1 = var4;
8549 varonce = var1;
8550 }
8551 var5 = ((val* (*)(val*))(var_ret->class->vft[COLOR_model__MClassType__mclass]))(var_ret) /* mclass on <var_ret:MClassType>*/;
8552 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var5) /* c_name on <var5:MClass>*/;
8553 var7 = NEW_array__Array(&type_array__Arraykernel__Object);
8554 { /* var7 = array_instance Array[Object] */
8555 var8 = 2;
8556 var9 = NEW_array__NativeArray(var8, &type_array__NativeArraykernel__Object);
8557 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var1;
8558 ((struct instance_array__NativeArray*)var9)->values[1] = (val*) var6;
8559 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Object]>*/;
8560 CHECK_NEW_array__Array(var7);
8561 }
8562 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_string__Object__to_s]))(var7) /* to_s on <var7:Array[Object]>*/;
8563 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var10) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
8564 if (varonce11) {
8565 var12 = varonce11;
8566 } else {
8567 var13 = "NEW_";
8568 var14 = 4;
8569 var15 = string__NativeString__to_s_with_length(var13, var14);
8570 var12 = var15;
8571 varonce11 = var12;
8572 }
8573 var16 = ((val* (*)(val*))(var_ret->class->vft[COLOR_model__MClassType__mclass]))(var_ret) /* mclass on <var_ret:MClassType>*/;
8574 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var16) /* c_name on <var16:MClass>*/;
8575 if (varonce18) {
8576 var19 = varonce18;
8577 } else {
8578 var20 = "(";
8579 var21 = 1;
8580 var22 = string__NativeString__to_s_with_length(var20, var21);
8581 var19 = var22;
8582 varonce18 = var19;
8583 }
8584 var23 = 1;
8585 var24 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var23) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
8586 if (varonce25) {
8587 var26 = varonce25;
8588 } else {
8589 var27 = ")";
8590 var28 = 1;
8591 var29 = string__NativeString__to_s_with_length(var27, var28);
8592 var26 = var29;
8593 varonce25 = var26;
8594 }
8595 var30 = NEW_array__Array(&type_array__Arraykernel__Object);
8596 { /* var30 = array_instance Array[Object] */
8597 var31 = 5;
8598 var32 = NEW_array__NativeArray(var31, &type_array__NativeArraykernel__Object);
8599 ((struct instance_array__NativeArray*)var32)->values[0] = (val*) var12;
8600 ((struct instance_array__NativeArray*)var32)->values[1] = (val*) var17;
8601 ((struct instance_array__NativeArray*)var32)->values[2] = (val*) var19;
8602 ((struct instance_array__NativeArray*)var32)->values[3] = (val*) var24;
8603 ((struct instance_array__NativeArray*)var32)->values[4] = (val*) var26;
8604 ((void (*)(val*, val*, long))(var30->class->vft[COLOR_array__Array__with_native]))(var30, var32, var31) /* with_native on <var30:Array[Object]>*/;
8605 CHECK_NEW_array__Array(var30);
8606 }
8607 var33 = ((val* (*)(val*))(var30->class->vft[COLOR_string__Object__to_s]))(var30) /* to_s on <var30:Array[Object]>*/;
8608 var34 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var33, var_ret_type) /* new_expr on <self:SeparateErasureCompilerVisitor>*/;
8609 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var34) /* ret on <self:SeparateErasureCompilerVisitor>*/;
8610 RET_LABEL:;
8611 }
8612 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: Object, MType, Array[RuntimeVariable]) */
8613 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
8614 separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(self, p0, p1);
8615 RET_LABEL:;
8616 }