parser: remove last clorure-related classes
[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 (%s:%d)\n", "Uninitialized attribute @opt_erasure", "src/separate_erasure_compiler.nit", 22);
9 exit(1);
10 }
11 var = var1;
12 RET_LABEL:;
13 return var;
14 }
15 /* method separate_erasure_compiler#ToolContext#opt_erasure for (self: Object): OptionBool */
16 val* VIRTUAL_separate_erasure_compiler__ToolContext__opt_erasure(val* self) {
17 val* var /* : OptionBool */;
18 val* var1 /* : OptionBool */;
19 var1 = separate_erasure_compiler__ToolContext__opt_erasure(self);
20 var = var1;
21 RET_LABEL:;
22 return var;
23 }
24 /* method separate_erasure_compiler#ToolContext#opt_erasure= for (self: ToolContext, OptionBool) */
25 void separate_erasure_compiler__ToolContext__opt_erasure_61d(val* self, val* p0) {
26 self->attrs[COLOR_separate_erasure_compiler__ToolContext___64dopt_erasure].val = p0; /* @opt_erasure on <self:ToolContext> */
27 RET_LABEL:;
28 }
29 /* method separate_erasure_compiler#ToolContext#opt_erasure= for (self: Object, OptionBool) */
30 void VIRTUAL_separate_erasure_compiler__ToolContext__opt_erasure_61d(val* self, val* p0) {
31 separate_erasure_compiler__ToolContext__opt_erasure_61d(self, p0);
32 RET_LABEL:;
33 }
34 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast for (self: ToolContext): OptionBool */
35 val* separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast(val* self) {
36 val* var /* : OptionBool */;
37 val* var1 /* : OptionBool */;
38 var1 = self->attrs[COLOR_separate_erasure_compiler__ToolContext___64dopt_no_check_erasure_cast].val; /* @opt_no_check_erasure_cast on <self:ToolContext> */
39 if (var1 == NULL) {
40 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @opt_no_check_erasure_cast", "src/separate_erasure_compiler.nit", 24);
41 exit(1);
42 }
43 var = var1;
44 RET_LABEL:;
45 return var;
46 }
47 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast for (self: Object): OptionBool */
48 val* VIRTUAL_separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast(val* self) {
49 val* var /* : OptionBool */;
50 val* var1 /* : OptionBool */;
51 var1 = separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast(self);
52 var = var1;
53 RET_LABEL:;
54 return var;
55 }
56 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast= for (self: ToolContext, OptionBool) */
57 void separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast_61d(val* self, val* p0) {
58 self->attrs[COLOR_separate_erasure_compiler__ToolContext___64dopt_no_check_erasure_cast].val = p0; /* @opt_no_check_erasure_cast on <self:ToolContext> */
59 RET_LABEL:;
60 }
61 /* method separate_erasure_compiler#ToolContext#opt_no_check_erasure_cast= for (self: Object, OptionBool) */
62 void VIRTUAL_separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast_61d(val* self, val* p0) {
63 separate_erasure_compiler__ToolContext__opt_no_check_erasure_cast_61d(self, p0);
64 RET_LABEL:;
65 }
66 /* method separate_erasure_compiler#ToolContext#init for (self: ToolContext) */
67 void separate_erasure_compiler__ToolContext__init(val* self) {
68 val* var /* : OptionContext */;
69 val* var1 /* : OptionBool */;
70 val* var2 /* : OptionBool */;
71 val* var3 /* : Array[Option] */;
72 long var4 /* : Int */;
73 val* var5 /* : NativeArray[Option] */;
74 ((void (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__ToolContext__init]))(self) /* init on <self:ToolContext>*/;
75 var = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
76 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__ToolContext__opt_erasure]))(self) /* opt_erasure on <self:ToolContext>*/;
77 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>*/;
78 var3 = NEW_array__Array(&type_array__Arrayopts__Option);
79 { /* var3 = array_instance Array[Option] */
80 var4 = 2;
81 var5 = NEW_array__NativeArray(var4, &type_array__NativeArrayopts__Option);
82 ((struct instance_array__NativeArray*)var5)->values[0] = (val*) var1;
83 ((struct instance_array__NativeArray*)var5)->values[1] = (val*) var2;
84 ((void (*)(val*, val*, long))(var3->class->vft[COLOR_array__Array__with_native]))(var3, var5, var4) /* with_native on <var3:Array[Option]>*/;
85 CHECK_NEW_array__Array(var3);
86 }
87 ((void (*)(val*, val*))(var->class->vft[COLOR_opts__OptionContext__add_option]))(var, var3) /* add_option on <var:OptionContext>*/;
88 RET_LABEL:;
89 }
90 /* method separate_erasure_compiler#ToolContext#init for (self: Object) */
91 void VIRTUAL_separate_erasure_compiler__ToolContext__init(val* self) {
92 separate_erasure_compiler__ToolContext__init(self);
93 RET_LABEL:;
94 }
95 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: ModelBuilder, MModule, RapidTypeAnalysis) */
96 void separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
97 val* var_mainmodule /* var mainmodule: MModule */;
98 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
99 long var /* : Int */;
100 long var_time0 /* var time0: Int */;
101 val* var1 /* : ToolContext */;
102 static val* varonce;
103 val* var2 /* : String */;
104 char* var3 /* : NativeString */;
105 long var4 /* : Int */;
106 val* var5 /* : String */;
107 long var6 /* : Int */;
108 val* var7 /* : SeparateErasureCompiler */;
109 val* var_compiler /* var compiler: SeparateErasureCompiler */;
110 val* var8 /* : ToolContext */;
111 static val* varonce9;
112 val* var10 /* : String */;
113 char* var11 /* : NativeString */;
114 long var12 /* : Int */;
115 val* var13 /* : String */;
116 long var14 /* : Int */;
117 val* var15 /* : String */;
118 static val* varonce16;
119 val* var17 /* : String */;
120 char* var18 /* : NativeString */;
121 long var19 /* : Int */;
122 val* var20 /* : String */;
123 val* var21 /* : Array[Object] */;
124 long var22 /* : Int */;
125 val* var23 /* : NativeArray[Object] */;
126 val* var24 /* : String */;
127 val* var25 /* : CodeFile */;
128 val* var26 /* : POSetElement[MModule] */;
129 val* var27 /* : Collection[Object] */;
130 val* var28 /* : Iterator[nullable Object] */;
131 short int var29 /* : Bool */;
132 val* var30 /* : nullable Object */;
133 val* var_m /* var m: MModule */;
134 val* var31 /* : Array[MClass] */;
135 val* var32 /* : Iterator[nullable Object] */;
136 short int var33 /* : Bool */;
137 val* var34 /* : nullable Object */;
138 val* var_mclass /* var mclass: MClass */;
139 val* var36 /* : nullable Layout[MVirtualTypeProp] */;
140 val* var37 /* : Map[Object, Int] */;
141 val* var38 /* : String */;
142 static val* varonce39;
143 val* var40 /* : String */;
144 char* var41 /* : NativeString */;
145 long var42 /* : Int */;
146 val* var43 /* : String */;
147 val* var44 /* : Array[Object] */;
148 long var45 /* : Int */;
149 val* var46 /* : NativeArray[Object] */;
150 val* var47 /* : String */;
151 val* var48 /* : CodeFile */;
152 val* var49 /* : POSetElement[MModule] */;
153 val* var50 /* : Collection[Object] */;
154 val* var51 /* : Iterator[nullable Object] */;
155 short int var52 /* : Bool */;
156 val* var53 /* : nullable Object */;
157 val* var_m54 /* var m: MModule */;
158 val* var55 /* : ToolContext */;
159 static val* varonce56;
160 val* var57 /* : String */;
161 char* var58 /* : NativeString */;
162 long var59 /* : Int */;
163 val* var60 /* : String */;
164 val* var61 /* : Array[Object] */;
165 long var62 /* : Int */;
166 val* var63 /* : NativeArray[Object] */;
167 val* var64 /* : String */;
168 long var65 /* : Int */;
169 val* var66 /* : String */;
170 static val* varonce67;
171 val* var68 /* : String */;
172 char* var69 /* : NativeString */;
173 long var70 /* : Int */;
174 val* var71 /* : String */;
175 val* var72 /* : Array[Object] */;
176 long var73 /* : Int */;
177 val* var74 /* : NativeArray[Object] */;
178 val* var75 /* : String */;
179 val* var76 /* : CodeFile */;
180 long var78 /* : Int */;
181 long var_time1 /* var time1: Int */;
182 val* var79 /* : ToolContext */;
183 static val* varonce80;
184 val* var81 /* : String */;
185 char* var82 /* : NativeString */;
186 long var83 /* : Int */;
187 val* var84 /* : String */;
188 long var85 /* : Int */;
189 long var87 /* : Int */;
190 static val* varonce88;
191 val* var89 /* : String */;
192 char* var90 /* : NativeString */;
193 long var91 /* : Int */;
194 val* var92 /* : String */;
195 val* var93 /* : Array[Object] */;
196 long var94 /* : Int */;
197 val* var95 /* : NativeArray[Object] */;
198 val* var96 /* : Object */;
199 val* var97 /* : String */;
200 long var98 /* : Int */;
201 var_mainmodule = p0;
202 var_runtime_type_analysis = p1;
203 var = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
204 var_time0 = var;
205 var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
206 if (varonce) {
207 var2 = varonce;
208 } else {
209 var3 = "*** GENERATING C ***";
210 var4 = 20;
211 var5 = string__NativeString__to_s_with_length(var3, var4);
212 var2 = var5;
213 varonce = var2;
214 }
215 var6 = 1;
216 ((void (*)(val*, val*, long))(var1->class->vft[COLOR_toolcontext__ToolContext__info]))(var1, var2, var6) /* info on <var1:ToolContext>*/;
217 var7 = NEW_separate_erasure_compiler__SeparateErasureCompiler(&type_separate_erasure_compiler__SeparateErasureCompiler);
218 ((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>*/;
219 CHECK_NEW_separate_erasure_compiler__SeparateErasureCompiler(var7);
220 var_compiler = var7;
221 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_header]))(var_compiler) /* compile_header on <var_compiler:SeparateErasureCompiler>*/;
222 var8 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
223 if (varonce9) {
224 var10 = varonce9;
225 } else {
226 var11 = "Property coloring";
227 var12 = 17;
228 var13 = string__NativeString__to_s_with_length(var11, var12);
229 var10 = var13;
230 varonce9 = var10;
231 }
232 var14 = 2;
233 ((void (*)(val*, val*, long))(var8->class->vft[COLOR_toolcontext__ToolContext__info]))(var8, var10, var14) /* info on <var8:ToolContext>*/;
234 var15 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
235 if (varonce16) {
236 var17 = varonce16;
237 } else {
238 var18 = ".tables";
239 var19 = 7;
240 var20 = string__NativeString__to_s_with_length(var18, var19);
241 var17 = var20;
242 varonce16 = var17;
243 }
244 var21 = NEW_array__Array(&type_array__Arraykernel__Object);
245 { /* var21 = array_instance Array[Object] */
246 var22 = 2;
247 var23 = NEW_array__NativeArray(var22, &type_array__NativeArraykernel__Object);
248 ((struct instance_array__NativeArray*)var23)->values[0] = (val*) var15;
249 ((struct instance_array__NativeArray*)var23)->values[1] = (val*) var17;
250 ((void (*)(val*, val*, long))(var21->class->vft[COLOR_array__Array__with_native]))(var21, var23, var22) /* with_native on <var21:Array[Object]>*/;
251 CHECK_NEW_array__Array(var21);
252 }
253 var24 = ((val* (*)(val*))(var21->class->vft[COLOR_string__Object__to_s]))(var21) /* to_s on <var21:Array[Object]>*/;
254 var25 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var24) /* new_file on <var_compiler:SeparateErasureCompiler>*/;
255 var25;
256 ((void (*)(val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__do_property_coloring]))(var_compiler) /* do_property_coloring on <var_compiler:SeparateErasureCompiler>*/;
257 var26 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__in_importation]))(var_mainmodule) /* in_importation on <var_mainmodule:MModule>*/;
258 var27 = ((val* (*)(val*))(var26->class->vft[COLOR_poset__POSetElement__greaters]))(var26) /* greaters on <var26:POSetElement[MModule]>*/;
259 var28 = ((val* (*)(val*))(var27->class->vft[COLOR_abstract_collection__Collection__iterator]))(var27) /* iterator on <var27:Collection[Object](Collection[MModule])>*/;
260 for(;;) {
261 var29 = ((short int (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var28) /* is_ok on <var28:Iterator[nullable Object]>*/;
262 if(!var29) break;
263 var30 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__item]))(var28) /* item on <var28:Iterator[nullable Object]>*/;
264 var_m = var30;
265 var31 = ((val* (*)(val*))(var_m->class->vft[COLOR_model__MModule__intro_mclasses]))(var_m) /* intro_mclasses on <var_m:MModule>*/;
266 var32 = ((val* (*)(val*))(var31->class->vft[COLOR_abstract_collection__Collection__iterator]))(var31) /* iterator on <var31:Array[MClass]>*/;
267 for(;;) {
268 var33 = ((short int (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var32) /* is_ok on <var32:Iterator[nullable Object]>*/;
269 if(!var33) break;
270 var34 = ((val* (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__item]))(var32) /* item on <var32:Iterator[nullable Object]>*/;
271 var_mclass = var34;
272 ((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>*/;
273 CONTINUE_label: (void)0;
274 ((void (*)(val*))(var32->class->vft[COLOR_abstract_collection__Iterator__next]))(var32) /* next on <var32:Iterator[nullable Object]>*/;
275 }
276 BREAK_label: (void)0;
277 CONTINUE_label35: (void)0;
278 ((void (*)(val*))(var28->class->vft[COLOR_abstract_collection__Iterator__next]))(var28) /* next on <var28:Iterator[nullable Object]>*/;
279 }
280 BREAK_label35: (void)0;
281 var36 = ((val* (*)(val*))(var_compiler->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(var_compiler) /* vt_layout on <var_compiler:SeparateErasureCompiler>*/;
282 if (var36 == NULL) {
283 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 52);
284 exit(1);
285 } else {
286 var37 = ((val* (*)(val*))(var36->class->vft[COLOR_layout_builders__Layout__pos]))(var36) /* pos on <var36:nullable Layout[MVirtualTypeProp]>*/;
287 }
288 ((void (*)(val*, val*))(var_compiler->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_color_consts]))(var_compiler, var37) /* compile_color_consts on <var_compiler:SeparateErasureCompiler>*/;
289 var38 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__name]))(var_mainmodule) /* name on <var_mainmodule:MModule>*/;
290 if (varonce39) {
291 var40 = varonce39;
292 } else {
293 var41 = ".main";
294 var42 = 5;
295 var43 = string__NativeString__to_s_with_length(var41, var42);
296 var40 = var43;
297 varonce39 = var40;
298 }
299 var44 = NEW_array__Array(&type_array__Arraykernel__Object);
300 { /* var44 = array_instance Array[Object] */
301 var45 = 2;
302 var46 = NEW_array__NativeArray(var45, &type_array__NativeArraykernel__Object);
303 ((struct instance_array__NativeArray*)var46)->values[0] = (val*) var38;
304 ((struct instance_array__NativeArray*)var46)->values[1] = (val*) var40;
305 ((void (*)(val*, val*, long))(var44->class->vft[COLOR_array__Array__with_native]))(var44, var46, var45) /* with_native on <var44:Array[Object]>*/;
306 CHECK_NEW_array__Array(var44);
307 }
308 var47 = ((val* (*)(val*))(var44->class->vft[COLOR_string__Object__to_s]))(var44) /* to_s on <var44:Array[Object]>*/;
309 var48 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var47) /* new_file on <var_compiler:SeparateErasureCompiler>*/;
310 var48;
311 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__compile_main_function]))(var_compiler) /* compile_main_function on <var_compiler:SeparateErasureCompiler>*/;
312 var49 = ((val* (*)(val*))(var_mainmodule->class->vft[COLOR_model_base__MModule__in_importation]))(var_mainmodule) /* in_importation on <var_mainmodule:MModule>*/;
313 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_poset__POSetElement__greaters]))(var49) /* greaters on <var49:POSetElement[MModule]>*/;
314 var51 = ((val* (*)(val*))(var50->class->vft[COLOR_abstract_collection__Collection__iterator]))(var50) /* iterator on <var50:Collection[Object](Collection[MModule])>*/;
315 for(;;) {
316 var52 = ((short int (*)(val*))(var51->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var51) /* is_ok on <var51:Iterator[nullable Object]>*/;
317 if(!var52) break;
318 var53 = ((val* (*)(val*))(var51->class->vft[COLOR_abstract_collection__Iterator__item]))(var51) /* item on <var51:Iterator[nullable Object]>*/;
319 var_m54 = var53;
320 var55 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
321 if (varonce56) {
322 var57 = varonce56;
323 } else {
324 var58 = "Generate C for module ";
325 var59 = 22;
326 var60 = string__NativeString__to_s_with_length(var58, var59);
327 var57 = var60;
328 varonce56 = var57;
329 }
330 var61 = NEW_array__Array(&type_array__Arraykernel__Object);
331 { /* var61 = array_instance Array[Object] */
332 var62 = 2;
333 var63 = NEW_array__NativeArray(var62, &type_array__NativeArraykernel__Object);
334 ((struct instance_array__NativeArray*)var63)->values[0] = (val*) var57;
335 ((struct instance_array__NativeArray*)var63)->values[1] = (val*) var_m54;
336 ((void (*)(val*, val*, long))(var61->class->vft[COLOR_array__Array__with_native]))(var61, var63, var62) /* with_native on <var61:Array[Object]>*/;
337 CHECK_NEW_array__Array(var61);
338 }
339 var64 = ((val* (*)(val*))(var61->class->vft[COLOR_string__Object__to_s]))(var61) /* to_s on <var61:Array[Object]>*/;
340 var65 = 2;
341 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_toolcontext__ToolContext__info]))(var55, var64, var65) /* info on <var55:ToolContext>*/;
342 var66 = ((val* (*)(val*))(var_m54->class->vft[COLOR_model_base__MModule__name]))(var_m54) /* name on <var_m54:MModule>*/;
343 if (varonce67) {
344 var68 = varonce67;
345 } else {
346 var69 = ".sep";
347 var70 = 4;
348 var71 = string__NativeString__to_s_with_length(var69, var70);
349 var68 = var71;
350 varonce67 = var68;
351 }
352 var72 = NEW_array__Array(&type_array__Arraykernel__Object);
353 { /* var72 = array_instance Array[Object] */
354 var73 = 2;
355 var74 = NEW_array__NativeArray(var73, &type_array__NativeArraykernel__Object);
356 ((struct instance_array__NativeArray*)var74)->values[0] = (val*) var66;
357 ((struct instance_array__NativeArray*)var74)->values[1] = (val*) var68;
358 ((void (*)(val*, val*, long))(var72->class->vft[COLOR_array__Array__with_native]))(var72, var74, var73) /* with_native on <var72:Array[Object]>*/;
359 CHECK_NEW_array__Array(var72);
360 }
361 var75 = ((val* (*)(val*))(var72->class->vft[COLOR_string__Object__to_s]))(var72) /* to_s on <var72:Array[Object]>*/;
362 var76 = ((val* (*)(val*, val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_file]))(var_compiler, var75) /* new_file on <var_compiler:SeparateErasureCompiler>*/;
363 var76;
364 ((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>*/;
365 CONTINUE_label77: (void)0;
366 ((void (*)(val*))(var51->class->vft[COLOR_abstract_collection__Iterator__next]))(var51) /* next on <var51:Iterator[nullable Object]>*/;
367 }
368 BREAK_label77: (void)0;
369 ((void (*)(val*))(var_compiler->class->vft[COLOR_abstract_compiler__AbstractCompiler__display_stats]))(var_compiler) /* display_stats on <var_compiler:SeparateErasureCompiler>*/;
370 var78 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
371 var_time1 = var78;
372 var79 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
373 if (varonce80) {
374 var81 = varonce80;
375 } else {
376 var82 = "*** END GENERATING C: ";
377 var83 = 22;
378 var84 = string__NativeString__to_s_with_length(var82, var83);
379 var81 = var84;
380 varonce80 = var81;
381 }
382 { /* Inline kernel#Int#- (var_time1,var_time0) */
383 var87 = var_time1 - var_time0;
384 var85 = var87;
385 goto RET_LABEL86;
386 RET_LABEL86:(void)0;
387 }
388 if (varonce88) {
389 var89 = varonce88;
390 } else {
391 var90 = " ***";
392 var91 = 4;
393 var92 = string__NativeString__to_s_with_length(var90, var91);
394 var89 = var92;
395 varonce88 = var89;
396 }
397 var93 = NEW_array__Array(&type_array__Arraykernel__Object);
398 { /* var93 = array_instance Array[Object] */
399 var94 = 3;
400 var95 = NEW_array__NativeArray(var94, &type_array__NativeArraykernel__Object);
401 ((struct instance_array__NativeArray*)var95)->values[0] = (val*) var81;
402 var96 = BOX_kernel__Int(var85); /* autobox from Int to Object */
403 ((struct instance_array__NativeArray*)var95)->values[1] = (val*) var96;
404 ((struct instance_array__NativeArray*)var95)->values[2] = (val*) var89;
405 ((void (*)(val*, val*, long))(var93->class->vft[COLOR_array__Array__with_native]))(var93, var95, var94) /* with_native on <var93:Array[Object]>*/;
406 CHECK_NEW_array__Array(var93);
407 }
408 var97 = ((val* (*)(val*))(var93->class->vft[COLOR_string__Object__to_s]))(var93) /* to_s on <var93:Array[Object]>*/;
409 var98 = 2;
410 ((void (*)(val*, val*, long))(var79->class->vft[COLOR_toolcontext__ToolContext__info]))(var79, var97, var98) /* info on <var79:ToolContext>*/;
411 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__ModelBuilder__write_and_make]))(self, var_compiler) /* write_and_make on <self:ModelBuilder>*/;
412 RET_LABEL:;
413 }
414 /* method separate_erasure_compiler#ModelBuilder#run_separate_erasure_compiler for (self: Object, MModule, RapidTypeAnalysis) */
415 void VIRTUAL_separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(val* self, val* p0, val* p1) {
416 separate_erasure_compiler__ModelBuilder__run_separate_erasure_compiler(self, p0, p1);
417 RET_LABEL:;
418 }
419 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout for (self: SeparateErasureCompiler): nullable Layout[MClass] */
420 val* separate_erasure_compiler__SeparateErasureCompiler__class_layout(val* self) {
421 val* var /* : nullable Layout[MClass] */;
422 val* var1 /* : nullable Layout[MClass] */;
423 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_layout].val; /* @class_layout on <self:SeparateErasureCompiler> */
424 var = var1;
425 RET_LABEL:;
426 return var;
427 }
428 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout for (self: Object): nullable Layout[MClass] */
429 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_layout(val* self) {
430 val* var /* : nullable Layout[MClass] */;
431 val* var1 /* : nullable Layout[MClass] */;
432 var1 = separate_erasure_compiler__SeparateErasureCompiler__class_layout(self);
433 var = var1;
434 RET_LABEL:;
435 return var;
436 }
437 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout= for (self: SeparateErasureCompiler, nullable Layout[MClass]) */
438 void separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d(val* self, val* p0) {
439 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_layout].val = p0; /* @class_layout on <self:SeparateErasureCompiler> */
440 RET_LABEL:;
441 }
442 /* method separate_erasure_compiler#SeparateErasureCompiler#class_layout= for (self: Object, nullable Layout[MClass]) */
443 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d(val* self, val* p0) {
444 separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d(self, p0);
445 RET_LABEL:;
446 }
447 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout for (self: SeparateErasureCompiler): nullable Layout[MVirtualTypeProp] */
448 val* separate_erasure_compiler__SeparateErasureCompiler__vt_layout(val* self) {
449 val* var /* : nullable Layout[MVirtualTypeProp] */;
450 val* var1 /* : nullable Layout[MVirtualTypeProp] */;
451 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_layout].val; /* @vt_layout on <self:SeparateErasureCompiler> */
452 var = var1;
453 RET_LABEL:;
454 return var;
455 }
456 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout for (self: Object): nullable Layout[MVirtualTypeProp] */
457 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_layout(val* self) {
458 val* var /* : nullable Layout[MVirtualTypeProp] */;
459 val* var1 /* : nullable Layout[MVirtualTypeProp] */;
460 var1 = separate_erasure_compiler__SeparateErasureCompiler__vt_layout(self);
461 var = var1;
462 RET_LABEL:;
463 return var;
464 }
465 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout= for (self: SeparateErasureCompiler, nullable Layout[MVirtualTypeProp]) */
466 void separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d(val* self, val* p0) {
467 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_layout].val = p0; /* @vt_layout on <self:SeparateErasureCompiler> */
468 RET_LABEL:;
469 }
470 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_layout= for (self: Object, nullable Layout[MVirtualTypeProp]) */
471 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d(val* self, val* p0) {
472 separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d(self, p0);
473 RET_LABEL:;
474 }
475 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: SeparateErasureCompiler, MModule, ModelBuilder, RapidTypeAnalysis) */
476 void separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
477 val* var_mainmodule /* var mainmodule: MModule */;
478 val* var_mmbuilder /* var mmbuilder: ModelBuilder */;
479 val* var_runtime_type_analysis /* var runtime_type_analysis: RapidTypeAnalysis */;
480 val* var /* : HashSet[MClass] */;
481 val* var1 /* : Model */;
482 val* var2 /* : Array[MClass] */;
483 val* var_mclasses /* var mclasses: HashSet[MClass] */;
484 val* var3 /* : MClassColorer */;
485 val* var_class_colorer /* var class_colorer: MClassColorer */;
486 val* var4 /* : ModelBuilder */;
487 val* var5 /* : ToolContext */;
488 val* var6 /* : OptionBool */;
489 val* var7 /* : nullable Object */;
490 short int var8 /* : Bool */;
491 val* var9 /* : MClassHasher */;
492 val* var10 /* : PHModOperator */;
493 val* var_layout_builder /* var layout_builder: TypingLayoutBuilder[MClass] */;
494 val* var11 /* : Layout[Object] */;
495 val* var12 /* : ModelBuilder */;
496 val* var13 /* : ToolContext */;
497 val* var14 /* : OptionBool */;
498 val* var15 /* : nullable Object */;
499 short int var16 /* : Bool */;
500 val* var17 /* : MClassHasher */;
501 val* var18 /* : PHAndOperator */;
502 val* var19 /* : Layout[Object] */;
503 val* var20 /* : ModelBuilder */;
504 val* var21 /* : ToolContext */;
505 val* var22 /* : OptionBool */;
506 val* var23 /* : nullable Object */;
507 short int var24 /* : Bool */;
508 val* var25 /* : MClassBMizer */;
509 val* var26 /* : Layout[Object] */;
510 val* var27 /* : Layout[Object] */;
511 val* var28 /* : Map[MClass, Array[nullable MClass]] */;
512 val* var29 /* : HashMap[MClass, Set[MVirtualTypeProp]] */;
513 val* var_vts /* var vts: HashMap[MClass, Set[MVirtualTypeProp]] */;
514 val* var30 /* : Iterator[nullable Object] */;
515 short int var31 /* : Bool */;
516 val* var32 /* : nullable Object */;
517 val* var_mclass /* var mclass: MClass */;
518 val* var33 /* : HashSet[MVirtualTypeProp] */;
519 val* var34 /* : MModule */;
520 val* var35 /* : Set[MProperty] */;
521 val* var36 /* : Iterator[nullable Object] */;
522 short int var37 /* : Bool */;
523 val* var38 /* : nullable Object */;
524 val* var_mprop /* var mprop: MProperty */;
525 short int var39 /* : Bool */;
526 int cltype;
527 int idtype;
528 val* var40 /* : nullable Object */;
529 val* var42 /* : MPropertyColorer[MVirtualTypeProp] */;
530 val* var_vt_coloring /* var vt_coloring: MPropertyColorer[MVirtualTypeProp] */;
531 val* var43 /* : Layout[PropertyLayoutElement] */;
532 val* var_vt_layout /* var vt_layout: Layout[MVirtualTypeProp] */;
533 val* var44 /* : Map[MClass, Array[nullable MPropDef]] */;
534 var_mainmodule = p0;
535 var_mmbuilder = p1;
536 var_runtime_type_analysis = p2;
537 ((void (*)(val*, val*, val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__init]))(self, p0, p1, p2) /* init on <self:SeparateErasureCompiler>*/;
538 var = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MClass);
539 var1 = ((val* (*)(val*))(var_mmbuilder->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(var_mmbuilder) /* model on <var_mmbuilder:ModelBuilder>*/;
540 var2 = ((val* (*)(val*))(var1->class->vft[COLOR_model__Model__mclasses]))(var1) /* mclasses on <var1:Model>*/;
541 ((void (*)(val*, val*))(var->class->vft[COLOR_hash_collection__HashSet__from]))(var, var2) /* from on <var:HashSet[MClass]>*/;
542 CHECK_NEW_hash_collection__HashSet(var);
543 var_mclasses = var;
544 var3 = NEW_layout_builders__MClassColorer(&type_layout_builders__MClassColorer);
545 ((void (*)(val*, val*))(var3->class->vft[COLOR_layout_builders__MClassColorer__init]))(var3, var_mainmodule) /* init on <var3:MClassColorer>*/;
546 CHECK_NEW_layout_builders__MClassColorer(var3);
547 var_class_colorer = var3;
548 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
549 var5 = ((val* (*)(val*))(var4->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var4) /* toolcontext on <var4:ModelBuilder>*/;
550 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var5) /* opt_phmod_typing on <var5:ToolContext>*/;
551 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_opts__Option__value]))(var6) /* value on <var6:OptionBool>*/;
552 var8 = ((struct instance_kernel__Bool*)var7)->value; /* autounbox from nullable Object to Bool */;
553 if (var8){
554 var9 = NEW_layout_builders__MClassHasher(&type_layout_builders__MClassHasher);
555 var10 = NEW_layout_builders__PHModOperator(&type_layout_builders__PHModOperator);
556 ((void (*)(val*))(var10->class->vft[COLOR_layout_builders__PHModOperator__init]))(var10) /* init on <var10:PHModOperator>*/;
557 CHECK_NEW_layout_builders__PHModOperator(var10);
558 ((void (*)(val*, val*, val*))(var9->class->vft[COLOR_layout_builders__MClassHasher__init]))(var9, var10, var_mainmodule) /* init on <var9:MClassHasher>*/;
559 CHECK_NEW_layout_builders__MClassHasher(var9);
560 var_layout_builder = var9;
561 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>*/;
562 var11;
563 } else {
564 var12 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
565 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var12) /* toolcontext on <var12:ModelBuilder>*/;
566 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var13) /* opt_phand_typing on <var13:ToolContext>*/;
567 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_opts__Option__value]))(var14) /* value on <var14:OptionBool>*/;
568 var16 = ((struct instance_kernel__Bool*)var15)->value; /* autounbox from nullable Object to Bool */;
569 if (var16){
570 var17 = NEW_layout_builders__MClassHasher(&type_layout_builders__MClassHasher);
571 var18 = NEW_layout_builders__PHAndOperator(&type_layout_builders__PHAndOperator);
572 ((void (*)(val*))(var18->class->vft[COLOR_layout_builders__PHAndOperator__init]))(var18) /* init on <var18:PHAndOperator>*/;
573 CHECK_NEW_layout_builders__PHAndOperator(var18);
574 ((void (*)(val*, val*, val*))(var17->class->vft[COLOR_layout_builders__MClassHasher__init]))(var17, var18, var_mainmodule) /* init on <var17:MClassHasher>*/;
575 CHECK_NEW_layout_builders__MClassHasher(var17);
576 var_layout_builder = var17;
577 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>*/;
578 var19;
579 } else {
580 var20 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
581 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var20) /* toolcontext on <var20:ModelBuilder>*/;
582 var22 = ((val* (*)(val*))(var21->class->vft[COLOR_separate_compiler__ToolContext__opt_bm_typing]))(var21) /* opt_bm_typing on <var21:ToolContext>*/;
583 var23 = ((val* (*)(val*))(var22->class->vft[COLOR_opts__Option__value]))(var22) /* value on <var22:OptionBool>*/;
584 var24 = ((struct instance_kernel__Bool*)var23)->value; /* autounbox from nullable Object to Bool */;
585 if (var24){
586 var25 = NEW_layout_builders__MClassBMizer(&type_layout_builders__MClassBMizer);
587 ((void (*)(val*, val*))(var25->class->vft[COLOR_layout_builders__MClassBMizer__init]))(var25, var_mainmodule) /* init on <var25:MClassBMizer>*/;
588 CHECK_NEW_layout_builders__MClassBMizer(var25);
589 var_layout_builder = var25;
590 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>*/;
591 var26;
592 } else {
593 var_layout_builder = var_class_colorer;
594 }
595 }
596 }
597 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]>*/;
598 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout_61d]))(self, var27) /* class_layout= on <self:SeparateErasureCompiler>*/;
599 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>*/;
600 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d]))(self, var28) /* class_tables= on <self:SeparateErasureCompiler>*/;
601 var29 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassabstract_collection__Setmodel__MVirtualTypeProp);
602 ((void (*)(val*))(var29->class->vft[COLOR_hash_collection__HashMap__init]))(var29) /* init on <var29:HashMap[MClass, Set[MVirtualTypeProp]]>*/;
603 CHECK_NEW_hash_collection__HashMap(var29);
604 var_vts = var29;
605 var30 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:HashSet[MClass]>*/;
606 for(;;) {
607 var31 = ((short int (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var30) /* is_ok on <var30:Iterator[nullable Object]>*/;
608 if(!var31) break;
609 var32 = ((val* (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__item]))(var30) /* item on <var30:Iterator[nullable Object]>*/;
610 var_mclass = var32;
611 var33 = NEW_hash_collection__HashSet(&type_hash_collection__HashSetmodel__MVirtualTypeProp);
612 ((void (*)(val*))(var33->class->vft[COLOR_hash_collection__HashSet__init]))(var33) /* init on <var33:HashSet[MVirtualTypeProp]>*/;
613 CHECK_NEW_hash_collection__HashSet(var33);
614 ((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]]>*/;
615 var34 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
616 var35 = ((val* (*)(val*, val*))(var34->class->vft[COLOR_abstract_compiler__MModule__properties]))(var34, var_mclass) /* properties on <var34:MModule>*/;
617 var36 = ((val* (*)(val*))(var35->class->vft[COLOR_abstract_collection__Collection__iterator]))(var35) /* iterator on <var35:Set[MProperty]>*/;
618 for(;;) {
619 var37 = ((short int (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var36) /* is_ok on <var36:Iterator[nullable Object]>*/;
620 if(!var37) break;
621 var38 = ((val* (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__item]))(var36) /* item on <var36:Iterator[nullable Object]>*/;
622 var_mprop = var38;
623 /* <var_mprop:MProperty> isa MVirtualTypeProp */
624 cltype = type_model__MVirtualTypeProp.color;
625 idtype = type_model__MVirtualTypeProp.id;
626 if(cltype >= var_mprop->type->table_size) {
627 var39 = 0;
628 } else {
629 var39 = var_mprop->type->type_table[cltype] == idtype;
630 }
631 if (var39){
632 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]]>*/;
633 ((void (*)(val*, val*))(var40->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var40, var_mprop) /* add on <var40:nullable Object(Set[MVirtualTypeProp])>*/;
634 } else {
635 }
636 CONTINUE_label: (void)0;
637 ((void (*)(val*))(var36->class->vft[COLOR_abstract_collection__Iterator__next]))(var36) /* next on <var36:Iterator[nullable Object]>*/;
638 }
639 BREAK_label: (void)0;
640 CONTINUE_label41: (void)0;
641 ((void (*)(val*))(var30->class->vft[COLOR_abstract_collection__Iterator__next]))(var30) /* next on <var30:Iterator[nullable Object]>*/;
642 }
643 BREAK_label41: (void)0;
644 var42 = NEW_layout_builders__MPropertyColorer(&type_layout_builders__MPropertyColorermodel__MVirtualTypeProp);
645 ((void (*)(val*, val*, val*))(var42->class->vft[COLOR_layout_builders__MPropertyColorer__init]))(var42, var_mainmodule, var_class_colorer) /* init on <var42:MPropertyColorer[MVirtualTypeProp]>*/;
646 CHECK_NEW_layout_builders__MPropertyColorer(var42);
647 var_vt_coloring = var42;
648 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]>*/;
649 var_vt_layout = var43;
650 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>*/;
651 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d]))(self, var44) /* vt_tables= on <self:SeparateErasureCompiler>*/;
652 ((void (*)(val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout_61d]))(self, var_vt_layout) /* vt_layout= on <self:SeparateErasureCompiler>*/;
653 RET_LABEL:;
654 }
655 /* method separate_erasure_compiler#SeparateErasureCompiler#init for (self: Object, MModule, ModelBuilder, RapidTypeAnalysis) */
656 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__init(val* self, val* p0, val* p1, val* p2) {
657 separate_erasure_compiler__SeparateErasureCompiler__init(self, p0, p1, p2);
658 RET_LABEL:;
659 }
660 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: SeparateErasureCompiler, Set[MClass], Layout[MProperty]): Map[MClass, Array[nullable MPropDef]] */
661 val* separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0, val* p1) {
662 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
663 val* var_mclasses /* var mclasses: Set[MClass] */;
664 val* var_layout /* var layout: Layout[MProperty] */;
665 val* var1 /* : HashMap[MClass, Array[nullable MPropDef]] */;
666 val* var_tables /* var tables: HashMap[MClass, Array[nullable MPropDef]] */;
667 val* var2 /* : Iterator[nullable Object] */;
668 short int var3 /* : Bool */;
669 val* var4 /* : nullable Object */;
670 val* var_mclass /* var mclass: MClass */;
671 val* var5 /* : Array[nullable MPropDef] */;
672 val* var_table /* var table: Array[nullable MPropDef] */;
673 val* var6 /* : Array[MClass] */;
674 val* var_parents /* var parents: Array[MClass] */;
675 val* var7 /* : MModule */;
676 val* var8 /* : POSet[MClass] */;
677 short int var9 /* : Bool */;
678 val* var10 /* : MModule */;
679 val* var11 /* : POSetElement[MClass] */;
680 val* var12 /* : Collection[Object] */;
681 val* var13 /* : Array[nullable Object] */;
682 val* var14 /* : MModule */;
683 val* var15 /* : Iterator[nullable Object] */;
684 short int var16 /* : Bool */;
685 val* var17 /* : nullable Object */;
686 val* var_parent /* var parent: MClass */;
687 short int var18 /* : Bool */;
688 val* var19 /* : MModule */;
689 val* var20 /* : Set[MProperty] */;
690 val* var21 /* : Iterator[nullable Object] */;
691 short int var22 /* : Bool */;
692 val* var23 /* : nullable Object */;
693 val* var_mproperty /* var mproperty: MProperty */;
694 short int var24 /* : Bool */;
695 int cltype;
696 int idtype;
697 short int var25 /* : Bool */;
698 val* var27 /* : Map[Object, Int] */;
699 val* var28 /* : nullable Object */;
700 long var29 /* : Int */;
701 long var_color /* var color: Int */;
702 long var30 /* : Int */;
703 short int var31 /* : Bool */;
704 short int var33 /* : Bool */;
705 int cltype34;
706 int idtype35;
707 short int var36 /* : Bool */;
708 val* var37 /* : Range[Int] */;
709 long var38 /* : Int */;
710 val* var39 /* : Discrete */;
711 val* var40 /* : Discrete */;
712 val* var41 /* : Iterator[nullable Object] */;
713 short int var42 /* : Bool */;
714 val* var43 /* : nullable Object */;
715 long var_i /* var i: Int */;
716 long var44 /* : Int */;
717 val* var45 /* : null */;
718 val* var47 /* : Array[MPropDef] */;
719 val* var48 /* : Iterator[nullable Object] */;
720 short int var49 /* : Bool */;
721 val* var50 /* : nullable Object */;
722 val* var_mpropdef /* var mpropdef: MVirtualTypeDef */;
723 val* var51 /* : MClassDef */;
724 val* var52 /* : MClass */;
725 short int var53 /* : Bool */;
726 val* var55 /* : MModule */;
727 val* var56 /* : Set[MProperty] */;
728 val* var57 /* : Iterator[nullable Object] */;
729 short int var58 /* : Bool */;
730 val* var59 /* : nullable Object */;
731 val* var_mproperty60 /* var mproperty: MProperty */;
732 short int var61 /* : Bool */;
733 int cltype62;
734 int idtype63;
735 short int var64 /* : Bool */;
736 val* var66 /* : Map[Object, Int] */;
737 val* var67 /* : nullable Object */;
738 long var68 /* : Int */;
739 long var_color69 /* var color: Int */;
740 long var70 /* : Int */;
741 short int var71 /* : Bool */;
742 short int var73 /* : Bool */;
743 int cltype74;
744 int idtype75;
745 short int var76 /* : Bool */;
746 val* var77 /* : Range[Int] */;
747 long var78 /* : Int */;
748 val* var79 /* : Discrete */;
749 val* var80 /* : Discrete */;
750 val* var81 /* : Iterator[nullable Object] */;
751 short int var82 /* : Bool */;
752 val* var83 /* : nullable Object */;
753 long var_i84 /* var i: Int */;
754 long var85 /* : Int */;
755 val* var86 /* : null */;
756 val* var88 /* : Array[MPropDef] */;
757 val* var89 /* : Iterator[nullable Object] */;
758 short int var90 /* : Bool */;
759 val* var91 /* : nullable Object */;
760 val* var_mpropdef92 /* var mpropdef: MVirtualTypeDef */;
761 val* var93 /* : MClassDef */;
762 val* var94 /* : MClass */;
763 short int var95 /* : Bool */;
764 var_mclasses = p0;
765 var_layout = p1;
766 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MPropDef);
767 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MPropDef]]>*/;
768 CHECK_NEW_hash_collection__HashMap(var1);
769 var_tables = var1;
770 var2 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
771 for(;;) {
772 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var2) /* is_ok on <var2:Iterator[nullable Object]>*/;
773 if(!var3) break;
774 var4 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__item]))(var2) /* item on <var2:Iterator[nullable Object]>*/;
775 var_mclass = var4;
776 var5 = NEW_array__Array(&type_array__Arraynullable_model__MPropDef);
777 ((void (*)(val*))(var5->class->vft[COLOR_array__Array__init]))(var5) /* init on <var5:Array[nullable MPropDef]>*/;
778 CHECK_NEW_array__Array(var5);
779 var_table = var5;
780 var6 = NEW_array__Array(&type_array__Arraymodel__MClass);
781 ((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[MClass]>*/;
782 CHECK_NEW_array__Array(var6);
783 var_parents = var6;
784 var7 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
785 var8 = ((val* (*)(val*))(var7->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var7) /* flatten_mclass_hierarchy on <var7:MModule>*/;
786 var9 = ((short int (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__Collection__has]))(var8, var_mclass) /* has on <var8:POSet[MClass]>*/;
787 if (var9){
788 var10 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
789 var11 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var10) /* in_hierarchy on <var_mclass:MClass>*/;
790 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_poset__POSetElement__greaters]))(var11) /* greaters on <var11:POSetElement[MClass]>*/;
791 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_array__Collection__to_a]))(var12) /* to_a on <var12:Collection[Object](Collection[MClass])>*/;
792 var_parents = var13;
793 var14 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
794 ((void (*)(val*, val*))(var14->class->vft[COLOR_model__MModule__linearize_mclasses]))(var14, var_parents) /* linearize_mclasses on <var14:MModule>*/;
795 } else {
796 }
797 var15 = ((val* (*)(val*))(var_parents->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_parents) /* iterator on <var_parents:Array[MClass]>*/;
798 for(;;) {
799 var16 = ((short int (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var15) /* is_ok on <var15:Iterator[nullable Object]>*/;
800 if(!var16) break;
801 var17 = ((val* (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__item]))(var15) /* item on <var15:Iterator[nullable Object]>*/;
802 var_parent = var17;
803 var18 = ((short int (*)(val*, val*))(var_parent->class->vft[COLOR_kernel__Object___61d_61d]))(var_parent, var_mclass) /* == on <var_parent:MClass>*/;
804 if (var18){
805 goto CONTINUE_label;
806 } else {
807 }
808 var19 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
809 var20 = ((val* (*)(val*, val*))(var19->class->vft[COLOR_abstract_compiler__MModule__properties]))(var19, var_parent) /* properties on <var19:MModule>*/;
810 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Collection__iterator]))(var20) /* iterator on <var20:Set[MProperty]>*/;
811 for(;;) {
812 var22 = ((short int (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var21) /* is_ok on <var21:Iterator[nullable Object]>*/;
813 if(!var22) break;
814 var23 = ((val* (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__item]))(var21) /* item on <var21:Iterator[nullable Object]>*/;
815 var_mproperty = var23;
816 /* <var_mproperty:MProperty> isa MVirtualTypeProp */
817 cltype = type_model__MVirtualTypeProp.color;
818 idtype = type_model__MVirtualTypeProp.id;
819 if(cltype >= var_mproperty->type->table_size) {
820 var24 = 0;
821 } else {
822 var24 = var_mproperty->type->type_table[cltype] == idtype;
823 }
824 var25 = !var24;
825 if (var25){
826 goto CONTINUE_label26;
827 } else {
828 }
829 var27 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:Layout[MProperty]>*/;
830 var28 = ((val* (*)(val*, val*))(var27->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var27, var_mproperty) /* [] on <var27:Map[Object, Int](Map[MProperty, Int])>*/;
831 var29 = ((struct instance_kernel__Int*)var28)->value; /* autounbox from nullable Object to Int */;
832 var_color = var29;
833 var30 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
834 { /* Inline kernel#Int#<= (var30,var_color) */
835 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
836 /* <var_color:Int> isa OTHER */
837 var33 = 1; /* easy <var_color:Int> isa OTHER*/
838 if (!var33) {
839 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
840 exit(1);
841 }
842 var36 = var30 <= var_color;
843 var31 = var36;
844 goto RET_LABEL32;
845 RET_LABEL32:(void)0;
846 }
847 if (var31){
848 var37 = NEW_range__Range(&type_range__Rangekernel__Int);
849 var38 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
850 var39 = BOX_kernel__Int(var38); /* autobox from Int to Discrete */
851 var40 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
852 ((void (*)(val*, val*, val*))(var37->class->vft[COLOR_range__Range__without_last]))(var37, var39, var40) /* without_last on <var37:Range[Int]>*/;
853 CHECK_NEW_range__Range(var37);
854 var41 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_collection__Collection__iterator]))(var37) /* iterator on <var37:Range[Int]>*/;
855 for(;;) {
856 var42 = ((short int (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var41) /* is_ok on <var41:Iterator[nullable Object]>*/;
857 if(!var42) break;
858 var43 = ((val* (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__item]))(var41) /* item on <var41:Iterator[nullable Object]>*/;
859 var44 = ((struct instance_kernel__Int*)var43)->value; /* autounbox from nullable Object to Int */;
860 var_i = var44;
861 var45 = NULL;
862 ((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]>*/;
863 CONTINUE_label46: (void)0;
864 ((void (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__next]))(var41) /* next on <var41:Iterator[nullable Object]>*/;
865 }
866 BREAK_label46: (void)0;
867 } else {
868 }
869 var47 = ((val* (*)(val*))(var_mproperty->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty) /* mpropdefs on <var_mproperty:MProperty(MVirtualTypeProp)>*/;
870 var48 = ((val* (*)(val*))(var47->class->vft[COLOR_abstract_collection__Collection__iterator]))(var47) /* iterator on <var47:Array[MPropDef](Array[MVirtualTypeDef])>*/;
871 for(;;) {
872 var49 = ((short int (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var48) /* is_ok on <var48:Iterator[nullable Object]>*/;
873 if(!var49) break;
874 var50 = ((val* (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__item]))(var48) /* item on <var48:Iterator[nullable Object]>*/;
875 var_mpropdef = var50;
876 var51 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:MVirtualTypeDef>*/;
877 var52 = ((val* (*)(val*))(var51->class->vft[COLOR_model__MClassDef__mclass]))(var51) /* mclass on <var51:MClassDef>*/;
878 var53 = ((short int (*)(val*, val*))(var52->class->vft[COLOR_kernel__Object___61d_61d]))(var52, var_parent) /* == on <var52:MClass>*/;
879 if (var53){
880 ((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]>*/;
881 } else {
882 }
883 CONTINUE_label54: (void)0;
884 ((void (*)(val*))(var48->class->vft[COLOR_abstract_collection__Iterator__next]))(var48) /* next on <var48:Iterator[nullable Object]>*/;
885 }
886 BREAK_label54: (void)0;
887 CONTINUE_label26: (void)0;
888 ((void (*)(val*))(var21->class->vft[COLOR_abstract_collection__Iterator__next]))(var21) /* next on <var21:Iterator[nullable Object]>*/;
889 }
890 BREAK_label26: (void)0;
891 CONTINUE_label: (void)0;
892 ((void (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__next]))(var15) /* next on <var15:Iterator[nullable Object]>*/;
893 }
894 BREAK_label: (void)0;
895 var55 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
896 var56 = ((val* (*)(val*, val*))(var55->class->vft[COLOR_abstract_compiler__MModule__properties]))(var55, var_mclass) /* properties on <var55:MModule>*/;
897 var57 = ((val* (*)(val*))(var56->class->vft[COLOR_abstract_collection__Collection__iterator]))(var56) /* iterator on <var56:Set[MProperty]>*/;
898 for(;;) {
899 var58 = ((short int (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var57) /* is_ok on <var57:Iterator[nullable Object]>*/;
900 if(!var58) break;
901 var59 = ((val* (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__item]))(var57) /* item on <var57:Iterator[nullable Object]>*/;
902 var_mproperty60 = var59;
903 /* <var_mproperty60:MProperty> isa MVirtualTypeProp */
904 cltype62 = type_model__MVirtualTypeProp.color;
905 idtype63 = type_model__MVirtualTypeProp.id;
906 if(cltype62 >= var_mproperty60->type->table_size) {
907 var61 = 0;
908 } else {
909 var61 = var_mproperty60->type->type_table[cltype62] == idtype63;
910 }
911 var64 = !var61;
912 if (var64){
913 goto CONTINUE_label65;
914 } else {
915 }
916 var66 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:Layout[MProperty]>*/;
917 var67 = ((val* (*)(val*, val*))(var66->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var66, var_mproperty60) /* [] on <var66:Map[Object, Int](Map[MProperty, Int])>*/;
918 var68 = ((struct instance_kernel__Int*)var67)->value; /* autounbox from nullable Object to Int */;
919 var_color69 = var68;
920 var70 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
921 { /* Inline kernel#Int#<= (var70,var_color69) */
922 /* Covariant cast for argument 0 (i) <var_color69:Int> isa OTHER */
923 /* <var_color69:Int> isa OTHER */
924 var73 = 1; /* easy <var_color69:Int> isa OTHER*/
925 if (!var73) {
926 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
927 exit(1);
928 }
929 var76 = var70 <= var_color69;
930 var71 = var76;
931 goto RET_LABEL72;
932 RET_LABEL72:(void)0;
933 }
934 if (var71){
935 var77 = NEW_range__Range(&type_range__Rangekernel__Int);
936 var78 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MPropDef]>*/;
937 var79 = BOX_kernel__Int(var78); /* autobox from Int to Discrete */
938 var80 = BOX_kernel__Int(var_color69); /* autobox from Int to Discrete */
939 ((void (*)(val*, val*, val*))(var77->class->vft[COLOR_range__Range__without_last]))(var77, var79, var80) /* without_last on <var77:Range[Int]>*/;
940 CHECK_NEW_range__Range(var77);
941 var81 = ((val* (*)(val*))(var77->class->vft[COLOR_abstract_collection__Collection__iterator]))(var77) /* iterator on <var77:Range[Int]>*/;
942 for(;;) {
943 var82 = ((short int (*)(val*))(var81->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var81) /* is_ok on <var81:Iterator[nullable Object]>*/;
944 if(!var82) break;
945 var83 = ((val* (*)(val*))(var81->class->vft[COLOR_abstract_collection__Iterator__item]))(var81) /* item on <var81:Iterator[nullable Object]>*/;
946 var85 = ((struct instance_kernel__Int*)var83)->value; /* autounbox from nullable Object to Int */;
947 var_i84 = var85;
948 var86 = NULL;
949 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_i84, var86) /* []= on <var_table:Array[nullable MPropDef]>*/;
950 CONTINUE_label87: (void)0;
951 ((void (*)(val*))(var81->class->vft[COLOR_abstract_collection__Iterator__next]))(var81) /* next on <var81:Iterator[nullable Object]>*/;
952 }
953 BREAK_label87: (void)0;
954 } else {
955 }
956 var88 = ((val* (*)(val*))(var_mproperty60->class->vft[COLOR_model__MProperty__mpropdefs]))(var_mproperty60) /* mpropdefs on <var_mproperty60:MProperty(MVirtualTypeProp)>*/;
957 var89 = ((val* (*)(val*))(var88->class->vft[COLOR_abstract_collection__Collection__iterator]))(var88) /* iterator on <var88:Array[MPropDef](Array[MVirtualTypeDef])>*/;
958 for(;;) {
959 var90 = ((short int (*)(val*))(var89->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var89) /* is_ok on <var89:Iterator[nullable Object]>*/;
960 if(!var90) break;
961 var91 = ((val* (*)(val*))(var89->class->vft[COLOR_abstract_collection__Iterator__item]))(var89) /* item on <var89:Iterator[nullable Object]>*/;
962 var_mpropdef92 = var91;
963 var93 = ((val* (*)(val*))(var_mpropdef92->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef92) /* mclassdef on <var_mpropdef92:MVirtualTypeDef>*/;
964 var94 = ((val* (*)(val*))(var93->class->vft[COLOR_model__MClassDef__mclass]))(var93) /* mclass on <var93:MClassDef>*/;
965 var95 = ((short int (*)(val*, val*))(var94->class->vft[COLOR_kernel__Object___61d_61d]))(var94, var_mclass) /* == on <var94:MClass>*/;
966 if (var95){
967 ((void (*)(val*, long, val*))(var_table->class->vft[COLOR_abstract_collection__Sequence___91d_93d_61d]))(var_table, var_color69, var_mpropdef92) /* []= on <var_table:Array[nullable MPropDef]>*/;
968 } else {
969 }
970 CONTINUE_label96: (void)0;
971 ((void (*)(val*))(var89->class->vft[COLOR_abstract_collection__Iterator__next]))(var89) /* next on <var89:Iterator[nullable Object]>*/;
972 }
973 BREAK_label96: (void)0;
974 CONTINUE_label65: (void)0;
975 ((void (*)(val*))(var57->class->vft[COLOR_abstract_collection__Iterator__next]))(var57) /* next on <var57:Iterator[nullable Object]>*/;
976 }
977 BREAK_label65: (void)0;
978 ((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]]>*/;
979 CONTINUE_label97: (void)0;
980 ((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
981 }
982 BREAK_label97: (void)0;
983 var = var_tables;
984 goto RET_LABEL;
985 RET_LABEL:;
986 return var;
987 }
988 /* method separate_erasure_compiler#SeparateErasureCompiler#build_vt_tables for (self: Object, Set[MClass], Layout[MProperty]): Map[MClass, Array[nullable MPropDef]] */
989 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(val* self, val* p0, val* p1) {
990 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
991 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
992 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_vt_tables(self, p0, p1);
993 var = var1;
994 RET_LABEL:;
995 return var;
996 }
997 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: SeparateErasureCompiler, Set[MClass]): Map[MClass, Array[nullable MClass]] */
998 val* separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
999 val* var /* : Map[MClass, Array[nullable MClass]] */;
1000 val* var_mclasses /* var mclasses: Set[MClass] */;
1001 val* var1 /* : HashMap[MClass, Array[nullable MClass]] */;
1002 val* var_tables /* var tables: HashMap[MClass, Array[nullable MClass]] */;
1003 val* var2 /* : nullable Layout[MClass] */;
1004 val* var_layout /* var layout: nullable Layout[MClass] */;
1005 val* var3 /* : Iterator[nullable Object] */;
1006 short int var4 /* : Bool */;
1007 val* var5 /* : nullable Object */;
1008 val* var_mclass /* var mclass: MClass */;
1009 val* var6 /* : Array[nullable MClass] */;
1010 val* var_table /* var table: Array[nullable MClass] */;
1011 val* var7 /* : Array[MClass] */;
1012 val* var_supers /* var supers: Array[MClass] */;
1013 val* var8 /* : MModule */;
1014 val* var9 /* : POSet[MClass] */;
1015 short int var10 /* : Bool */;
1016 val* var11 /* : MModule */;
1017 val* var12 /* : POSetElement[MClass] */;
1018 val* var13 /* : Collection[Object] */;
1019 val* var14 /* : Array[nullable Object] */;
1020 val* var15 /* : Iterator[nullable Object] */;
1021 short int var16 /* : Bool */;
1022 val* var17 /* : nullable Object */;
1023 val* var_sup /* var sup: MClass */;
1024 short int var18 /* : Bool */;
1025 int cltype;
1026 int idtype;
1027 val* var19 /* : Map[Object, Map[Object, Int]] */;
1028 val* var20 /* : nullable Object */;
1029 val* var21 /* : nullable Object */;
1030 long var22 /* : Int */;
1031 long var_color /* var color: Int */;
1032 val* var23 /* : Map[Object, Int] */;
1033 val* var24 /* : nullable Object */;
1034 long var25 /* : Int */;
1035 long var26 /* : Int */;
1036 short int var27 /* : Bool */;
1037 short int var29 /* : Bool */;
1038 int cltype30;
1039 int idtype31;
1040 short int var32 /* : Bool */;
1041 val* var33 /* : Range[Int] */;
1042 long var34 /* : Int */;
1043 val* var35 /* : Discrete */;
1044 val* var36 /* : Discrete */;
1045 val* var37 /* : Iterator[nullable Object] */;
1046 short int var38 /* : Bool */;
1047 val* var39 /* : nullable Object */;
1048 long var_i /* var i: Int */;
1049 long var40 /* : Int */;
1050 val* var41 /* : null */;
1051 var_mclasses = p0;
1052 var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapmodel__MClassarray__Arraynullable_model__MClass);
1053 ((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[MClass, Array[nullable MClass]]>*/;
1054 CHECK_NEW_hash_collection__HashMap(var1);
1055 var_tables = var1;
1056 var2 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
1057 var_layout = var2;
1058 var3 = ((val* (*)(val*))(var_mclasses->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mclasses) /* iterator on <var_mclasses:Set[MClass]>*/;
1059 for(;;) {
1060 var4 = ((short int (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var3) /* is_ok on <var3:Iterator[nullable Object]>*/;
1061 if(!var4) break;
1062 var5 = ((val* (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__item]))(var3) /* item on <var3:Iterator[nullable Object]>*/;
1063 var_mclass = var5;
1064 var6 = NEW_array__Array(&type_array__Arraynullable_model__MClass);
1065 ((void (*)(val*))(var6->class->vft[COLOR_array__Array__init]))(var6) /* init on <var6:Array[nullable MClass]>*/;
1066 CHECK_NEW_array__Array(var6);
1067 var_table = var6;
1068 var7 = NEW_array__Array(&type_array__Arraymodel__MClass);
1069 ((void (*)(val*))(var7->class->vft[COLOR_array__Array__init]))(var7) /* init on <var7:Array[MClass]>*/;
1070 CHECK_NEW_array__Array(var7);
1071 var_supers = var7;
1072 var8 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
1073 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_model__MModule__flatten_mclass_hierarchy]))(var8) /* flatten_mclass_hierarchy on <var8:MModule>*/;
1074 var10 = ((short int (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__Collection__has]))(var9, var_mclass) /* has on <var9:POSet[MClass]>*/;
1075 if (var10){
1076 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
1077 var12 = ((val* (*)(val*, val*))(var_mclass->class->vft[COLOR_model__MClass__in_hierarchy]))(var_mclass, var11) /* in_hierarchy on <var_mclass:MClass>*/;
1078 var13 = ((val* (*)(val*))(var12->class->vft[COLOR_poset__POSetElement__greaters]))(var12) /* greaters on <var12:POSetElement[MClass]>*/;
1079 var14 = ((val* (*)(val*))(var13->class->vft[COLOR_array__Collection__to_a]))(var13) /* to_a on <var13:Collection[Object](Collection[MClass])>*/;
1080 var_supers = var14;
1081 } else {
1082 }
1083 var15 = ((val* (*)(val*))(var_supers->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_supers) /* iterator on <var_supers:Array[MClass]>*/;
1084 for(;;) {
1085 var16 = ((short int (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var15) /* is_ok on <var15:Iterator[nullable Object]>*/;
1086 if(!var16) break;
1087 var17 = ((val* (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__item]))(var15) /* item on <var15:Iterator[nullable Object]>*/;
1088 var_sup = var17;
1089 /* <var_layout:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
1090 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
1091 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
1092 if(var_layout == NULL) {
1093 var18 = 0;
1094 } else {
1095 if(cltype >= var_layout->type->table_size) {
1096 var18 = 0;
1097 } else {
1098 var18 = var_layout->type->type_table[cltype] == idtype;
1099 }
1100 }
1101 if (var18){
1102 var19 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__hashes]))(var_layout) /* hashes on <var_layout:nullable Layout[MClass](PHLayout[MClass, MClass])>*/;
1103 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]])>*/;
1104 var21 = ((val* (*)(val*, val*))(var20->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var20, var_sup) /* [] on <var20:nullable Object(Map[MClass, Int])>*/;
1105 var22 = ((struct instance_kernel__Int*)var21)->value; /* autounbox from nullable Object to Int */;
1106 var_color = var22;
1107 } else {
1108 if (var_layout == NULL) {
1109 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 182);
1110 exit(1);
1111 } else {
1112 var23 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MClass]>*/;
1113 }
1114 var24 = ((val* (*)(val*, val*))(var23->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var23, var_sup) /* [] on <var23:Map[Object, Int](Map[MClass, Int])>*/;
1115 var25 = ((struct instance_kernel__Int*)var24)->value; /* autounbox from nullable Object to Int */;
1116 var_color = var25;
1117 }
1118 var26 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
1119 { /* Inline kernel#Int#<= (var26,var_color) */
1120 /* Covariant cast for argument 0 (i) <var_color:Int> isa OTHER */
1121 /* <var_color:Int> isa OTHER */
1122 var29 = 1; /* easy <var_color:Int> isa OTHER*/
1123 if (!var29) {
1124 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "lib/standard/kernel.nit", 256);
1125 exit(1);
1126 }
1127 var32 = var26 <= var_color;
1128 var27 = var32;
1129 goto RET_LABEL28;
1130 RET_LABEL28:(void)0;
1131 }
1132 if (var27){
1133 var33 = NEW_range__Range(&type_range__Rangekernel__Int);
1134 var34 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
1135 var35 = BOX_kernel__Int(var34); /* autobox from Int to Discrete */
1136 var36 = BOX_kernel__Int(var_color); /* autobox from Int to Discrete */
1137 ((void (*)(val*, val*, val*))(var33->class->vft[COLOR_range__Range__without_last]))(var33, var35, var36) /* without_last on <var33:Range[Int]>*/;
1138 CHECK_NEW_range__Range(var33);
1139 var37 = ((val* (*)(val*))(var33->class->vft[COLOR_abstract_collection__Collection__iterator]))(var33) /* iterator on <var33:Range[Int]>*/;
1140 for(;;) {
1141 var38 = ((short int (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var37) /* is_ok on <var37:Iterator[nullable Object]>*/;
1142 if(!var38) break;
1143 var39 = ((val* (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__item]))(var37) /* item on <var37:Iterator[nullable Object]>*/;
1144 var40 = ((struct instance_kernel__Int*)var39)->value; /* autounbox from nullable Object to Int */;
1145 var_i = var40;
1146 var41 = NULL;
1147 ((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]>*/;
1148 CONTINUE_label: (void)0;
1149 ((void (*)(val*))(var37->class->vft[COLOR_abstract_collection__Iterator__next]))(var37) /* next on <var37:Iterator[nullable Object]>*/;
1150 }
1151 BREAK_label: (void)0;
1152 } else {
1153 }
1154 ((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]>*/;
1155 CONTINUE_label42: (void)0;
1156 ((void (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__next]))(var15) /* next on <var15:Iterator[nullable Object]>*/;
1157 }
1158 BREAK_label42: (void)0;
1159 ((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]]>*/;
1160 CONTINUE_label43: (void)0;
1161 ((void (*)(val*))(var3->class->vft[COLOR_abstract_collection__Iterator__next]))(var3) /* next on <var3:Iterator[nullable Object]>*/;
1162 }
1163 BREAK_label43: (void)0;
1164 var = var_tables;
1165 goto RET_LABEL;
1166 RET_LABEL:;
1167 return var;
1168 }
1169 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_typing_tables for (self: Object, Set[MClass]): Map[MClass, Array[nullable MClass]] */
1170 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(val* self, val* p0) {
1171 val* var /* : Map[MClass, Array[nullable MClass]] */;
1172 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
1173 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_typing_tables(self, p0);
1174 var = var1;
1175 RET_LABEL:;
1176 return var;
1177 }
1178 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: SeparateErasureCompiler) */
1179 void separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
1180 val* var /* : CodeWriter */;
1181 static val* varonce;
1182 val* var1 /* : String */;
1183 char* var2 /* : NativeString */;
1184 long var3 /* : Int */;
1185 val* var4 /* : String */;
1186 val* var5 /* : CodeWriter */;
1187 static val* varonce6;
1188 val* var7 /* : String */;
1189 char* var8 /* : NativeString */;
1190 long var9 /* : Int */;
1191 val* var10 /* : String */;
1192 val* var11 /* : CodeWriter */;
1193 static val* varonce12;
1194 val* var13 /* : String */;
1195 char* var14 /* : NativeString */;
1196 long var15 /* : Int */;
1197 val* var16 /* : String */;
1198 val* var17 /* : CodeWriter */;
1199 static val* varonce18;
1200 val* var19 /* : String */;
1201 char* var20 /* : NativeString */;
1202 long var21 /* : Int */;
1203 val* var22 /* : String */;
1204 val* var23 /* : nullable Layout[MVirtualTypeProp] */;
1205 short int var24 /* : Bool */;
1206 int cltype;
1207 int idtype;
1208 val* var25 /* : CodeWriter */;
1209 static val* varonce26;
1210 val* var27 /* : String */;
1211 char* var28 /* : NativeString */;
1212 long var29 /* : Int */;
1213 val* var30 /* : String */;
1214 val* var31 /* : CodeWriter */;
1215 static val* varonce32;
1216 val* var33 /* : String */;
1217 char* var34 /* : NativeString */;
1218 long var35 /* : Int */;
1219 val* var36 /* : String */;
1220 val* var37 /* : ModelBuilder */;
1221 val* var38 /* : ToolContext */;
1222 val* var39 /* : OptionBool */;
1223 val* var40 /* : nullable Object */;
1224 short int var41 /* : Bool */;
1225 val* var42 /* : CodeWriter */;
1226 static val* varonce43;
1227 val* var44 /* : String */;
1228 char* var45 /* : NativeString */;
1229 long var46 /* : Int */;
1230 val* var47 /* : String */;
1231 val* var48 /* : ModelBuilder */;
1232 val* var49 /* : ToolContext */;
1233 val* var50 /* : OptionBool */;
1234 val* var51 /* : nullable Object */;
1235 short int var52 /* : Bool */;
1236 val* var53 /* : CodeWriter */;
1237 static val* varonce54;
1238 val* var55 /* : String */;
1239 char* var56 /* : NativeString */;
1240 long var57 /* : Int */;
1241 val* var58 /* : String */;
1242 val* var59 /* : CodeWriter */;
1243 static val* varonce60;
1244 val* var61 /* : String */;
1245 char* var62 /* : NativeString */;
1246 long var63 /* : Int */;
1247 val* var64 /* : String */;
1248 var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1249 if (varonce) {
1250 var1 = varonce;
1251 } else {
1252 var2 = "typedef void(*nitmethod_t)(void); /* general C type representing a Nit method. */";
1253 var3 = 81;
1254 var4 = string__NativeString__to_s_with_length(var2, var3);
1255 var1 = var4;
1256 varonce = var1;
1257 }
1258 ((void (*)(val*, val*))(var->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var, var1) /* add_decl on <var:CodeWriter>*/;
1259 ((void (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__compile_header_attribute_structs]))(self) /* compile_header_attribute_structs on <self:SeparateErasureCompiler>*/;
1260 var5 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1261 if (varonce6) {
1262 var7 = varonce6;
1263 } else {
1264 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. */";
1265 var9 = 206;
1266 var10 = string__NativeString__to_s_with_length(var8, var9);
1267 var7 = var10;
1268 varonce6 = var7;
1269 }
1270 ((void (*)(val*, val*))(var5->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var5, var7) /* add_decl on <var5:CodeWriter>*/;
1271 var11 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1272 if (varonce12) {
1273 var13 = varonce12;
1274 } else {
1275 var14 = "struct type_table { int size; int table[]; }; /* colorized type table. */";
1276 var15 = 73;
1277 var16 = string__NativeString__to_s_with_length(var14, var15);
1278 var13 = var16;
1279 varonce12 = var13;
1280 }
1281 ((void (*)(val*, val*))(var11->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var11, var13) /* add_decl on <var11:CodeWriter>*/;
1282 var17 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1283 if (varonce18) {
1284 var19 = varonce18;
1285 } else {
1286 var20 = "struct vts_entry { short int is_nullable; const struct class *class; }; /* link (nullable or not) between the vts and is bound. */";
1287 var21 = 130;
1288 var22 = string__NativeString__to_s_with_length(var20, var21);
1289 var19 = var22;
1290 varonce18 = var19;
1291 }
1292 ((void (*)(val*, val*))(var17->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var17, var19) /* add_decl on <var17:CodeWriter>*/;
1293 var23 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(self) /* vt_layout on <self:SeparateErasureCompiler>*/;
1294 /* <var23:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
1295 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
1296 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
1297 if(var23 == NULL) {
1298 var24 = 0;
1299 } else {
1300 if(cltype >= var23->type->table_size) {
1301 var24 = 0;
1302 } else {
1303 var24 = var23->type->type_table[cltype] == idtype;
1304 }
1305 }
1306 if (var24){
1307 var25 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1308 if (varonce26) {
1309 var27 = varonce26;
1310 } else {
1311 var28 = "struct vts_table { int mask; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
1312 var29 = 104;
1313 var30 = string__NativeString__to_s_with_length(var28, var29);
1314 var27 = var30;
1315 varonce26 = var27;
1316 }
1317 ((void (*)(val*, val*))(var25->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var25, var27) /* add_decl on <var25:CodeWriter>*/;
1318 } else {
1319 var31 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1320 if (varonce32) {
1321 var33 = varonce32;
1322 } else {
1323 var34 = "struct vts_table { int dummy; const struct vts_entry vts[]; }; /* vts list of a C type representation. */";
1324 var35 = 105;
1325 var36 = string__NativeString__to_s_with_length(var34, var35);
1326 var33 = var36;
1327 varonce32 = var33;
1328 }
1329 ((void (*)(val*, val*))(var31->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var31, var33) /* add_decl on <var31:CodeWriter>*/;
1330 }
1331 var37 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
1332 var38 = ((val* (*)(val*))(var37->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var37) /* toolcontext on <var37:ModelBuilder>*/;
1333 var39 = ((val* (*)(val*))(var38->class->vft[COLOR_separate_compiler__ToolContext__opt_phmod_typing]))(var38) /* opt_phmod_typing on <var38:ToolContext>*/;
1334 var40 = ((val* (*)(val*))(var39->class->vft[COLOR_opts__Option__value]))(var39) /* value on <var39:OptionBool>*/;
1335 var41 = ((struct instance_kernel__Bool*)var40)->value; /* autounbox from nullable Object to Bool */;
1336 if (var41){
1337 var42 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1338 if (varonce43) {
1339 var44 = varonce43;
1340 } else {
1341 var45 = "#define HASH(mask, id) ((mask)%(id))";
1342 var46 = 36;
1343 var47 = string__NativeString__to_s_with_length(var45, var46);
1344 var44 = var47;
1345 varonce43 = var44;
1346 }
1347 ((void (*)(val*, val*))(var42->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var42, var44) /* add_decl on <var42:CodeWriter>*/;
1348 } else {
1349 var48 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:SeparateErasureCompiler>*/;
1350 var49 = ((val* (*)(val*))(var48->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var48) /* toolcontext on <var48:ModelBuilder>*/;
1351 var50 = ((val* (*)(val*))(var49->class->vft[COLOR_separate_compiler__ToolContext__opt_phand_typing]))(var49) /* opt_phand_typing on <var49:ToolContext>*/;
1352 var51 = ((val* (*)(val*))(var50->class->vft[COLOR_opts__Option__value]))(var50) /* value on <var50:OptionBool>*/;
1353 var52 = ((struct instance_kernel__Bool*)var51)->value; /* autounbox from nullable Object to Bool */;
1354 if (var52){
1355 var53 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1356 if (varonce54) {
1357 var55 = varonce54;
1358 } else {
1359 var56 = "#define HASH(mask, id) ((mask)&(id))";
1360 var57 = 36;
1361 var58 = string__NativeString__to_s_with_length(var56, var57);
1362 var55 = var58;
1363 varonce54 = var55;
1364 }
1365 ((void (*)(val*, val*))(var53->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var53, var55) /* add_decl on <var53:CodeWriter>*/;
1366 } else {
1367 }
1368 }
1369 var59 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
1370 if (varonce60) {
1371 var61 = varonce60;
1372 } else {
1373 var62 = "typedef struct instance { const struct class *class; nitattribute_t attrs[1]; } val; /* general C type representing a Nit instance. */";
1374 var63 = 134;
1375 var64 = string__NativeString__to_s_with_length(var62, var63);
1376 var61 = var64;
1377 varonce60 = var61;
1378 }
1379 ((void (*)(val*, val*))(var59->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var59, var61) /* add_decl on <var59:CodeWriter>*/;
1380 RET_LABEL:;
1381 }
1382 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_header_structs for (self: Object) */
1383 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(val* self) {
1384 separate_erasure_compiler__SeparateErasureCompiler__compile_header_structs(self);
1385 RET_LABEL:;
1386 }
1387 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: SeparateErasureCompiler, MClass) */
1388 void separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
1389 val* var_mclass /* var mclass: MClass */;
1390 val* var /* : MClassDef */;
1391 val* var1 /* : MClassType */;
1392 val* var_mtype /* var mtype: MClassType */;
1393 val* var2 /* : String */;
1394 val* var_c_name /* var c_name: String */;
1395 val* var3 /* : Map[MClass, Array[nullable MPropDef]] */;
1396 val* var4 /* : nullable Object */;
1397 val* var_vft /* var vft: Array[nullable MPropDef] */;
1398 val* var5 /* : Map[MClass, Array[nullable MPropDef]] */;
1399 val* var6 /* : nullable Object */;
1400 val* var_attrs /* var attrs: Array[nullable MPropDef] */;
1401 val* var7 /* : Map[MClass, Array[nullable MClass]] */;
1402 val* var8 /* : nullable Object */;
1403 val* var_class_table /* var class_table: Array[nullable MClass] */;
1404 val* var9 /* : AbstractCompilerVisitor */;
1405 val* var_v /* var v: SeparateCompilerVisitor */;
1406 static val* varonce;
1407 val* var10 /* : String */;
1408 char* var11 /* : NativeString */;
1409 long var12 /* : Int */;
1410 val* var13 /* : String */;
1411 static val* varonce14;
1412 val* var15 /* : String */;
1413 char* var16 /* : NativeString */;
1414 long var17 /* : Int */;
1415 val* var18 /* : String */;
1416 val* var19 /* : Array[Object] */;
1417 long var20 /* : Int */;
1418 val* var21 /* : NativeArray[Object] */;
1419 val* var22 /* : String */;
1420 static val* varonce23;
1421 val* var24 /* : String */;
1422 char* var25 /* : NativeString */;
1423 long var26 /* : Int */;
1424 val* var27 /* : String */;
1425 val* var28 /* : Array[Object] */;
1426 long var29 /* : Int */;
1427 val* var30 /* : NativeArray[Object] */;
1428 val* var31 /* : String */;
1429 static val* varonce32;
1430 val* var33 /* : String */;
1431 char* var34 /* : NativeString */;
1432 long var35 /* : Int */;
1433 val* var36 /* : String */;
1434 static val* varonce37;
1435 val* var38 /* : String */;
1436 char* var39 /* : NativeString */;
1437 long var40 /* : Int */;
1438 val* var41 /* : String */;
1439 val* var42 /* : Array[Object] */;
1440 long var43 /* : Int */;
1441 val* var44 /* : NativeArray[Object] */;
1442 val* var45 /* : String */;
1443 static val* varonce46;
1444 val* var47 /* : String */;
1445 char* var48 /* : NativeString */;
1446 long var49 /* : Int */;
1447 val* var50 /* : String */;
1448 static val* varonce51;
1449 val* var52 /* : String */;
1450 char* var53 /* : NativeString */;
1451 long var54 /* : Int */;
1452 val* var55 /* : String */;
1453 val* var56 /* : Array[Object] */;
1454 long var57 /* : Int */;
1455 val* var58 /* : NativeArray[Object] */;
1456 val* var59 /* : String */;
1457 static val* varonce60;
1458 val* var61 /* : String */;
1459 char* var62 /* : NativeString */;
1460 long var63 /* : Int */;
1461 val* var64 /* : String */;
1462 static val* varonce65;
1463 val* var66 /* : String */;
1464 char* var67 /* : NativeString */;
1465 long var68 /* : Int */;
1466 val* var69 /* : String */;
1467 val* var70 /* : Array[Object] */;
1468 long var71 /* : Int */;
1469 val* var72 /* : NativeArray[Object] */;
1470 val* var73 /* : String */;
1471 val* var74 /* : nullable Layout[MClass] */;
1472 val* var75 /* : Map[Object, Int] */;
1473 val* var76 /* : nullable Object */;
1474 static val* varonce77;
1475 val* var78 /* : String */;
1476 char* var79 /* : NativeString */;
1477 long var80 /* : Int */;
1478 val* var81 /* : String */;
1479 val* var82 /* : Array[Object] */;
1480 long var83 /* : Int */;
1481 val* var84 /* : NativeArray[Object] */;
1482 val* var85 /* : String */;
1483 static val* varonce86;
1484 val* var87 /* : String */;
1485 char* var88 /* : NativeString */;
1486 long var89 /* : Int */;
1487 val* var90 /* : String */;
1488 val* var91 /* : String */;
1489 static val* varonce92;
1490 val* var93 /* : String */;
1491 char* var94 /* : NativeString */;
1492 long var95 /* : Int */;
1493 val* var96 /* : String */;
1494 val* var97 /* : Array[Object] */;
1495 long var98 /* : Int */;
1496 val* var99 /* : NativeArray[Object] */;
1497 val* var100 /* : String */;
1498 long var101 /* : Int */;
1499 static val* varonce102;
1500 val* var103 /* : String */;
1501 char* var104 /* : NativeString */;
1502 long var105 /* : Int */;
1503 val* var106 /* : String */;
1504 val* var107 /* : Array[Object] */;
1505 long var108 /* : Int */;
1506 val* var109 /* : NativeArray[Object] */;
1507 val* var110 /* : Object */;
1508 val* var111 /* : String */;
1509 val* var112 /* : nullable Layout[MClass] */;
1510 val* var_layout /* var layout: nullable Layout[MClass] */;
1511 short int var113 /* : Bool */;
1512 int cltype;
1513 int idtype;
1514 val* var114 /* : Map[Object, Int] */;
1515 val* var115 /* : nullable Object */;
1516 static val* varonce116;
1517 val* var117 /* : String */;
1518 char* var118 /* : NativeString */;
1519 long var119 /* : Int */;
1520 val* var120 /* : String */;
1521 val* var121 /* : Array[Object] */;
1522 long var122 /* : Int */;
1523 val* var123 /* : NativeArray[Object] */;
1524 val* var124 /* : String */;
1525 val* var125 /* : Map[Object, Int] */;
1526 val* var126 /* : nullable Object */;
1527 static val* varonce127;
1528 val* var128 /* : String */;
1529 char* var129 /* : NativeString */;
1530 long var130 /* : Int */;
1531 val* var131 /* : String */;
1532 val* var132 /* : Array[Object] */;
1533 long var133 /* : Int */;
1534 val* var134 /* : NativeArray[Object] */;
1535 val* var135 /* : String */;
1536 short int var136 /* : Bool */;
1537 static val* varonce137;
1538 val* var138 /* : String */;
1539 char* var139 /* : NativeString */;
1540 long var140 /* : Int */;
1541 val* var141 /* : String */;
1542 val* var142 /* : Array[Object] */;
1543 long var143 /* : Int */;
1544 val* var144 /* : NativeArray[Object] */;
1545 val* var145 /* : String */;
1546 static val* varonce146;
1547 val* var147 /* : String */;
1548 char* var148 /* : NativeString */;
1549 long var149 /* : Int */;
1550 val* var150 /* : String */;
1551 static val* varonce151;
1552 val* var152 /* : String */;
1553 char* var153 /* : NativeString */;
1554 long var154 /* : Int */;
1555 val* var155 /* : String */;
1556 val* var156 /* : Array[Object] */;
1557 long var157 /* : Int */;
1558 val* var158 /* : NativeArray[Object] */;
1559 val* var159 /* : String */;
1560 static val* varonce160;
1561 val* var161 /* : String */;
1562 char* var162 /* : NativeString */;
1563 long var163 /* : Int */;
1564 val* var164 /* : String */;
1565 static val* varonce165;
1566 val* var166 /* : String */;
1567 char* var167 /* : NativeString */;
1568 long var168 /* : Int */;
1569 val* var169 /* : String */;
1570 static val* varonce170;
1571 val* var171 /* : String */;
1572 char* var172 /* : NativeString */;
1573 long var173 /* : Int */;
1574 val* var174 /* : String */;
1575 val* var175 /* : Array[Object] */;
1576 long var176 /* : Int */;
1577 val* var177 /* : NativeArray[Object] */;
1578 val* var178 /* : String */;
1579 static val* varonce179;
1580 val* var180 /* : String */;
1581 char* var181 /* : NativeString */;
1582 long var182 /* : Int */;
1583 val* var183 /* : String */;
1584 val* var184 /* : Range[Int] */;
1585 long var185 /* : Int */;
1586 long var186 /* : Int */;
1587 val* var187 /* : Discrete */;
1588 val* var188 /* : Discrete */;
1589 val* var189 /* : Iterator[nullable Object] */;
1590 short int var190 /* : Bool */;
1591 val* var191 /* : nullable Object */;
1592 long var_i /* var i: Int */;
1593 long var192 /* : Int */;
1594 val* var193 /* : nullable Object */;
1595 val* var_mpropdef /* var mpropdef: nullable MPropDef */;
1596 val* var194 /* : null */;
1597 short int var195 /* : Bool */;
1598 static val* varonce196;
1599 val* var197 /* : String */;
1600 char* var198 /* : NativeString */;
1601 long var199 /* : Int */;
1602 val* var200 /* : String */;
1603 short int var201 /* : Bool */;
1604 short int var202 /* : Bool */;
1605 short int var_ /* var : Bool */;
1606 val* var203 /* : MClassDef */;
1607 val* var204 /* : MClassType */;
1608 val* var205 /* : String */;
1609 static val* varonce206;
1610 val* var207 /* : String */;
1611 char* var208 /* : NativeString */;
1612 long var209 /* : Int */;
1613 val* var210 /* : String */;
1614 short int var211 /* : Bool */;
1615 static val* varonce212;
1616 val* var213 /* : String */;
1617 char* var214 /* : NativeString */;
1618 long var215 /* : Int */;
1619 val* var216 /* : String */;
1620 val* var217 /* : String */;
1621 val* var218 /* : Array[Object] */;
1622 long var219 /* : Int */;
1623 val* var220 /* : NativeArray[Object] */;
1624 val* var221 /* : String */;
1625 static val* varonce222;
1626 val* var223 /* : String */;
1627 char* var224 /* : NativeString */;
1628 long var225 /* : Int */;
1629 val* var226 /* : String */;
1630 val* var227 /* : String */;
1631 static val* varonce228;
1632 val* var229 /* : String */;
1633 char* var230 /* : NativeString */;
1634 long var231 /* : Int */;
1635 val* var232 /* : String */;
1636 val* var233 /* : MModule */;
1637 static val* varonce234;
1638 val* var235 /* : String */;
1639 char* var236 /* : NativeString */;
1640 long var237 /* : Int */;
1641 val* var238 /* : String */;
1642 static val* varonce239;
1643 val* var240 /* : String */;
1644 char* var241 /* : NativeString */;
1645 long var242 /* : Int */;
1646 val* var243 /* : String */;
1647 static val* varonce244;
1648 val* var245 /* : String */;
1649 char* var246 /* : NativeString */;
1650 long var247 /* : Int */;
1651 val* var248 /* : String */;
1652 val* var249 /* : Array[Object] */;
1653 long var250 /* : Int */;
1654 val* var251 /* : NativeArray[Object] */;
1655 val* var252 /* : String */;
1656 val* var253 /* : String */;
1657 val* var254 /* : Array[Object] */;
1658 long var255 /* : Int */;
1659 val* var256 /* : NativeArray[Object] */;
1660 val* var257 /* : String */;
1661 static val* varonce258;
1662 val* var259 /* : String */;
1663 char* var260 /* : NativeString */;
1664 long var261 /* : Int */;
1665 val* var262 /* : String */;
1666 val* var263 /* : String */;
1667 static val* varonce264;
1668 val* var265 /* : String */;
1669 char* var266 /* : NativeString */;
1670 long var267 /* : Int */;
1671 val* var268 /* : String */;
1672 val* var269 /* : MModule */;
1673 static val* varonce270;
1674 val* var271 /* : String */;
1675 char* var272 /* : NativeString */;
1676 long var273 /* : Int */;
1677 val* var274 /* : String */;
1678 static val* varonce275;
1679 val* var276 /* : String */;
1680 char* var277 /* : NativeString */;
1681 long var278 /* : Int */;
1682 val* var279 /* : String */;
1683 static val* varonce280;
1684 val* var281 /* : String */;
1685 char* var282 /* : NativeString */;
1686 long var283 /* : Int */;
1687 val* var284 /* : String */;
1688 val* var285 /* : Array[Object] */;
1689 long var286 /* : Int */;
1690 val* var287 /* : NativeArray[Object] */;
1691 val* var288 /* : String */;
1692 static val* varonce289;
1693 val* var290 /* : String */;
1694 char* var291 /* : NativeString */;
1695 long var292 /* : Int */;
1696 val* var293 /* : String */;
1697 static val* varonce294;
1698 val* var295 /* : String */;
1699 char* var296 /* : NativeString */;
1700 long var297 /* : Int */;
1701 val* var298 /* : String */;
1702 static val* varonce299;
1703 val* var300 /* : String */;
1704 char* var301 /* : NativeString */;
1705 long var302 /* : Int */;
1706 val* var303 /* : String */;
1707 static val* varonce304;
1708 val* var305 /* : String */;
1709 char* var306 /* : NativeString */;
1710 long var307 /* : Int */;
1711 val* var308 /* : String */;
1712 val* var309 /* : Array[Object] */;
1713 long var310 /* : Int */;
1714 val* var311 /* : NativeArray[Object] */;
1715 val* var312 /* : String */;
1716 long var313 /* : Int */;
1717 static val* varonce314;
1718 val* var315 /* : String */;
1719 char* var316 /* : NativeString */;
1720 long var317 /* : Int */;
1721 val* var318 /* : String */;
1722 val* var319 /* : Array[Object] */;
1723 long var320 /* : Int */;
1724 val* var321 /* : NativeArray[Object] */;
1725 val* var322 /* : Object */;
1726 val* var323 /* : String */;
1727 static val* varonce324;
1728 val* var325 /* : String */;
1729 char* var326 /* : NativeString */;
1730 long var327 /* : Int */;
1731 val* var328 /* : String */;
1732 val* var329 /* : Iterator[nullable Object] */;
1733 short int var330 /* : Bool */;
1734 val* var331 /* : nullable Object */;
1735 val* var_msuper /* var msuper: nullable MClass */;
1736 val* var332 /* : null */;
1737 short int var333 /* : Bool */;
1738 static val* varonce334;
1739 val* var335 /* : String */;
1740 char* var336 /* : NativeString */;
1741 long var337 /* : Int */;
1742 val* var338 /* : String */;
1743 val* var339 /* : nullable Layout[MClass] */;
1744 val* var340 /* : Map[Object, Int] */;
1745 val* var341 /* : nullable Object */;
1746 static val* varonce342;
1747 val* var343 /* : String */;
1748 char* var344 /* : NativeString */;
1749 long var345 /* : Int */;
1750 val* var346 /* : String */;
1751 static val* varonce347;
1752 val* var348 /* : String */;
1753 char* var349 /* : NativeString */;
1754 long var350 /* : Int */;
1755 val* var351 /* : String */;
1756 val* var352 /* : Array[Object] */;
1757 long var353 /* : Int */;
1758 val* var354 /* : NativeArray[Object] */;
1759 val* var355 /* : String */;
1760 static val* varonce357;
1761 val* var358 /* : String */;
1762 char* var359 /* : NativeString */;
1763 long var360 /* : Int */;
1764 val* var361 /* : String */;
1765 static val* varonce362;
1766 val* var363 /* : String */;
1767 char* var364 /* : NativeString */;
1768 long var365 /* : Int */;
1769 val* var366 /* : String */;
1770 val* var367 /* : String */;
1771 static val* varonce368;
1772 val* var369 /* : String */;
1773 char* var370 /* : NativeString */;
1774 long var371 /* : Int */;
1775 val* var372 /* : String */;
1776 short int var373 /* : Bool */;
1777 val* var374 /* : CodeWriter */;
1778 static val* varonce375;
1779 val* var376 /* : String */;
1780 char* var377 /* : NativeString */;
1781 long var378 /* : Int */;
1782 val* var379 /* : String */;
1783 static val* varonce380;
1784 val* var381 /* : String */;
1785 char* var382 /* : NativeString */;
1786 long var383 /* : Int */;
1787 val* var384 /* : String */;
1788 val* var385 /* : Array[Object] */;
1789 long var386 /* : Int */;
1790 val* var387 /* : NativeArray[Object] */;
1791 val* var388 /* : String */;
1792 val* var389 /* : CodeWriter */;
1793 static val* varonce390;
1794 val* var391 /* : String */;
1795 char* var392 /* : NativeString */;
1796 long var393 /* : Int */;
1797 val* var394 /* : String */;
1798 val* var395 /* : CodeWriter */;
1799 val* var396 /* : String */;
1800 static val* varonce397;
1801 val* var398 /* : String */;
1802 char* var399 /* : NativeString */;
1803 long var400 /* : Int */;
1804 val* var401 /* : String */;
1805 val* var402 /* : Array[Object] */;
1806 long var403 /* : Int */;
1807 val* var404 /* : NativeArray[Object] */;
1808 val* var405 /* : String */;
1809 val* var406 /* : CodeWriter */;
1810 static val* varonce407;
1811 val* var408 /* : String */;
1812 char* var409 /* : NativeString */;
1813 long var410 /* : Int */;
1814 val* var411 /* : String */;
1815 val* var412 /* : CodeWriter */;
1816 static val* varonce413;
1817 val* var414 /* : String */;
1818 char* var415 /* : NativeString */;
1819 long var416 /* : Int */;
1820 val* var417 /* : String */;
1821 static val* varonce418;
1822 val* var419 /* : String */;
1823 char* var420 /* : NativeString */;
1824 long var421 /* : Int */;
1825 val* var422 /* : String */;
1826 val* var423 /* : String */;
1827 static val* varonce424;
1828 val* var425 /* : String */;
1829 char* var426 /* : NativeString */;
1830 long var427 /* : Int */;
1831 val* var428 /* : String */;
1832 val* var429 /* : Array[Object] */;
1833 long var430 /* : Int */;
1834 val* var431 /* : NativeArray[Object] */;
1835 val* var432 /* : String */;
1836 static val* varonce433;
1837 val* var434 /* : String */;
1838 char* var435 /* : NativeString */;
1839 long var436 /* : Int */;
1840 val* var437 /* : String */;
1841 static val* varonce438;
1842 val* var439 /* : String */;
1843 char* var440 /* : NativeString */;
1844 long var441 /* : Int */;
1845 val* var442 /* : String */;
1846 val* var443 /* : Array[Object] */;
1847 long var444 /* : Int */;
1848 val* var445 /* : NativeArray[Object] */;
1849 val* var446 /* : String */;
1850 static val* varonce447;
1851 val* var448 /* : String */;
1852 char* var449 /* : NativeString */;
1853 long var450 /* : Int */;
1854 val* var451 /* : String */;
1855 val* var452 /* : String */;
1856 static val* varonce453;
1857 val* var454 /* : String */;
1858 char* var455 /* : NativeString */;
1859 long var456 /* : Int */;
1860 val* var457 /* : String */;
1861 val* var458 /* : String */;
1862 static val* varonce459;
1863 val* var460 /* : String */;
1864 char* var461 /* : NativeString */;
1865 long var462 /* : Int */;
1866 val* var463 /* : String */;
1867 val* var464 /* : Array[Object] */;
1868 long var465 /* : Int */;
1869 val* var466 /* : NativeArray[Object] */;
1870 val* var467 /* : String */;
1871 static val* varonce468;
1872 val* var469 /* : String */;
1873 char* var470 /* : NativeString */;
1874 long var471 /* : Int */;
1875 val* var472 /* : String */;
1876 static val* varonce473;
1877 val* var474 /* : String */;
1878 char* var475 /* : NativeString */;
1879 long var476 /* : Int */;
1880 val* var477 /* : String */;
1881 static val* varonce478;
1882 val* var479 /* : String */;
1883 char* var480 /* : NativeString */;
1884 long var481 /* : Int */;
1885 val* var482 /* : String */;
1886 val* var483 /* : Array[Object] */;
1887 long var484 /* : Int */;
1888 val* var485 /* : NativeArray[Object] */;
1889 val* var486 /* : String */;
1890 static val* varonce487;
1891 val* var488 /* : String */;
1892 char* var489 /* : NativeString */;
1893 long var490 /* : Int */;
1894 val* var491 /* : String */;
1895 val* var492 /* : Array[Object] */;
1896 long var493 /* : Int */;
1897 val* var494 /* : NativeArray[Object] */;
1898 val* var495 /* : String */;
1899 static val* varonce496;
1900 val* var497 /* : String */;
1901 char* var498 /* : NativeString */;
1902 long var499 /* : Int */;
1903 val* var500 /* : String */;
1904 static val* varonce501;
1905 val* var502 /* : String */;
1906 char* var503 /* : NativeString */;
1907 long var504 /* : Int */;
1908 val* var505 /* : String */;
1909 val* var506 /* : Array[Object] */;
1910 long var507 /* : Int */;
1911 val* var508 /* : NativeArray[Object] */;
1912 val* var509 /* : String */;
1913 static val* varonce510;
1914 val* var511 /* : String */;
1915 char* var512 /* : NativeString */;
1916 long var513 /* : Int */;
1917 val* var514 /* : String */;
1918 static val* varonce515;
1919 val* var516 /* : String */;
1920 char* var517 /* : NativeString */;
1921 long var518 /* : Int */;
1922 val* var519 /* : String */;
1923 static val* varonce520;
1924 val* var521 /* : String */;
1925 char* var522 /* : NativeString */;
1926 long var523 /* : Int */;
1927 val* var524 /* : String */;
1928 val* var525 /* : String */;
1929 static val* varonce526;
1930 val* var527 /* : String */;
1931 char* var528 /* : NativeString */;
1932 long var529 /* : Int */;
1933 val* var530 /* : String */;
1934 short int var531 /* : Bool */;
1935 val* var532 /* : CodeWriter */;
1936 static val* varonce533;
1937 val* var534 /* : String */;
1938 char* var535 /* : NativeString */;
1939 long var536 /* : Int */;
1940 val* var537 /* : String */;
1941 static val* varonce538;
1942 val* var539 /* : String */;
1943 char* var540 /* : NativeString */;
1944 long var541 /* : Int */;
1945 val* var542 /* : String */;
1946 val* var543 /* : Array[Object] */;
1947 long var544 /* : Int */;
1948 val* var545 /* : NativeArray[Object] */;
1949 val* var546 /* : String */;
1950 val* var547 /* : CodeWriter */;
1951 static val* varonce548;
1952 val* var549 /* : String */;
1953 char* var550 /* : NativeString */;
1954 long var551 /* : Int */;
1955 val* var552 /* : String */;
1956 val* var553 /* : CodeWriter */;
1957 static val* varonce554;
1958 val* var555 /* : String */;
1959 char* var556 /* : NativeString */;
1960 long var557 /* : Int */;
1961 val* var558 /* : String */;
1962 val* var559 /* : CodeWriter */;
1963 static val* varonce560;
1964 val* var561 /* : String */;
1965 char* var562 /* : NativeString */;
1966 long var563 /* : Int */;
1967 val* var564 /* : String */;
1968 static val* varonce565;
1969 val* var566 /* : String */;
1970 char* var567 /* : NativeString */;
1971 long var568 /* : Int */;
1972 val* var569 /* : String */;
1973 val* var570 /* : Array[Object] */;
1974 long var571 /* : Int */;
1975 val* var572 /* : NativeArray[Object] */;
1976 val* var573 /* : String */;
1977 val* var574 /* : String */;
1978 static val* varonce575;
1979 val* var576 /* : String */;
1980 char* var577 /* : NativeString */;
1981 long var578 /* : Int */;
1982 val* var579 /* : String */;
1983 static val* varonce580;
1984 val* var581 /* : String */;
1985 char* var582 /* : NativeString */;
1986 long var583 /* : Int */;
1987 val* var584 /* : String */;
1988 val* var585 /* : Array[Object] */;
1989 long var586 /* : Int */;
1990 val* var587 /* : NativeArray[Object] */;
1991 val* var588 /* : String */;
1992 static val* varonce589;
1993 val* var590 /* : String */;
1994 char* var591 /* : NativeString */;
1995 long var592 /* : Int */;
1996 val* var593 /* : String */;
1997 static val* varonce594;
1998 val* var595 /* : String */;
1999 char* var596 /* : NativeString */;
2000 long var597 /* : Int */;
2001 val* var598 /* : String */;
2002 val* var599 /* : Array[Object] */;
2003 long var600 /* : Int */;
2004 val* var601 /* : NativeArray[Object] */;
2005 val* var602 /* : String */;
2006 val* var603 /* : String */;
2007 static val* varonce604;
2008 val* var605 /* : String */;
2009 char* var606 /* : NativeString */;
2010 long var607 /* : Int */;
2011 val* var608 /* : String */;
2012 static val* varonce609;
2013 val* var610 /* : String */;
2014 char* var611 /* : NativeString */;
2015 long var612 /* : Int */;
2016 val* var613 /* : String */;
2017 val* var614 /* : Array[Object] */;
2018 long var615 /* : Int */;
2019 val* var616 /* : NativeArray[Object] */;
2020 val* var617 /* : String */;
2021 static val* varonce618;
2022 val* var619 /* : String */;
2023 char* var620 /* : NativeString */;
2024 long var621 /* : Int */;
2025 val* var622 /* : String */;
2026 val* var623 /* : RuntimeVariable */;
2027 val* var_res /* var res: RuntimeVariable */;
2028 short int var624 /* : Bool */;
2029 val* var625 /* : Array[MType] */;
2030 val* var626 /* : nullable Object */;
2031 val* var_mtype_elt /* var mtype_elt: MType */;
2032 static val* varonce627;
2033 val* var628 /* : String */;
2034 char* var629 /* : NativeString */;
2035 long var630 /* : Int */;
2036 val* var631 /* : String */;
2037 static val* varonce632;
2038 val* var633 /* : String */;
2039 char* var634 /* : NativeString */;
2040 long var635 /* : Int */;
2041 val* var636 /* : String */;
2042 val* var637 /* : String */;
2043 static val* varonce638;
2044 val* var639 /* : String */;
2045 char* var640 /* : NativeString */;
2046 long var641 /* : Int */;
2047 val* var642 /* : String */;
2048 val* var643 /* : Array[Object] */;
2049 long var644 /* : Int */;
2050 val* var645 /* : NativeArray[Object] */;
2051 val* var646 /* : String */;
2052 static val* varonce647;
2053 val* var648 /* : String */;
2054 char* var649 /* : NativeString */;
2055 long var650 /* : Int */;
2056 val* var651 /* : String */;
2057 val* var652 /* : Array[Object] */;
2058 long var653 /* : Int */;
2059 val* var654 /* : NativeArray[Object] */;
2060 val* var655 /* : String */;
2061 static val* varonce656;
2062 val* var657 /* : String */;
2063 char* var658 /* : NativeString */;
2064 long var659 /* : Int */;
2065 val* var660 /* : String */;
2066 static val* varonce661;
2067 val* var662 /* : String */;
2068 char* var663 /* : NativeString */;
2069 long var664 /* : Int */;
2070 val* var665 /* : String */;
2071 val* var666 /* : Array[Object] */;
2072 long var667 /* : Int */;
2073 val* var668 /* : NativeArray[Object] */;
2074 val* var669 /* : String */;
2075 static val* varonce670;
2076 val* var671 /* : String */;
2077 char* var672 /* : NativeString */;
2078 long var673 /* : Int */;
2079 val* var674 /* : String */;
2080 static val* varonce675;
2081 val* var676 /* : String */;
2082 char* var677 /* : NativeString */;
2083 long var678 /* : Int */;
2084 val* var679 /* : String */;
2085 val* var680 /* : Array[Object] */;
2086 long var681 /* : Int */;
2087 val* var682 /* : NativeArray[Object] */;
2088 val* var683 /* : String */;
2089 static val* varonce684;
2090 val* var685 /* : String */;
2091 char* var686 /* : NativeString */;
2092 long var687 /* : Int */;
2093 val* var688 /* : String */;
2094 static val* varonce689;
2095 val* var690 /* : String */;
2096 char* var691 /* : NativeString */;
2097 long var692 /* : Int */;
2098 val* var693 /* : String */;
2099 val* var694 /* : Array[Object] */;
2100 long var695 /* : Int */;
2101 val* var696 /* : NativeArray[Object] */;
2102 val* var697 /* : String */;
2103 val* var698 /* : String */;
2104 static val* varonce699;
2105 val* var700 /* : String */;
2106 char* var701 /* : NativeString */;
2107 long var702 /* : Int */;
2108 val* var703 /* : String */;
2109 static val* varonce704;
2110 val* var705 /* : String */;
2111 char* var706 /* : NativeString */;
2112 long var707 /* : Int */;
2113 val* var708 /* : String */;
2114 val* var709 /* : Array[Object] */;
2115 long var710 /* : Int */;
2116 val* var711 /* : NativeArray[Object] */;
2117 val* var712 /* : String */;
2118 static val* varonce713;
2119 val* var714 /* : String */;
2120 char* var715 /* : NativeString */;
2121 long var716 /* : Int */;
2122 val* var717 /* : String */;
2123 static val* varonce718;
2124 val* var719 /* : String */;
2125 char* var720 /* : NativeString */;
2126 long var721 /* : Int */;
2127 val* var722 /* : String */;
2128 val* var723 /* : Array[Object] */;
2129 long var724 /* : Int */;
2130 val* var725 /* : NativeArray[Object] */;
2131 val* var726 /* : String */;
2132 val* var727 /* : String */;
2133 static val* varonce728;
2134 val* var729 /* : String */;
2135 char* var730 /* : NativeString */;
2136 long var731 /* : Int */;
2137 val* var732 /* : String */;
2138 static val* varonce733;
2139 val* var734 /* : String */;
2140 char* var735 /* : NativeString */;
2141 long var736 /* : Int */;
2142 val* var737 /* : String */;
2143 val* var738 /* : Array[Object] */;
2144 long var739 /* : Int */;
2145 val* var740 /* : NativeArray[Object] */;
2146 val* var741 /* : String */;
2147 static val* varonce742;
2148 val* var743 /* : String */;
2149 char* var744 /* : NativeString */;
2150 long var745 /* : Int */;
2151 val* var746 /* : String */;
2152 val* var747 /* : RuntimeVariable */;
2153 val* var_res748 /* var res: RuntimeVariable */;
2154 short int var749 /* : Bool */;
2155 static val* varonce750;
2156 val* var751 /* : String */;
2157 char* var752 /* : NativeString */;
2158 long var753 /* : Int */;
2159 val* var754 /* : String */;
2160 long var755 /* : Int */;
2161 static val* varonce756;
2162 val* var757 /* : String */;
2163 char* var758 /* : NativeString */;
2164 long var759 /* : Int */;
2165 val* var760 /* : String */;
2166 val* var761 /* : Array[Object] */;
2167 long var762 /* : Int */;
2168 val* var763 /* : NativeArray[Object] */;
2169 val* var764 /* : Object */;
2170 val* var765 /* : String */;
2171 static val* varonce766;
2172 val* var767 /* : String */;
2173 char* var768 /* : NativeString */;
2174 long var769 /* : Int */;
2175 val* var770 /* : String */;
2176 val* var771 /* : Array[Object] */;
2177 long var772 /* : Int */;
2178 val* var773 /* : NativeArray[Object] */;
2179 val* var774 /* : String */;
2180 static val* varonce775;
2181 val* var776 /* : String */;
2182 char* var777 /* : NativeString */;
2183 long var778 /* : Int */;
2184 val* var779 /* : String */;
2185 static val* varonce780;
2186 val* var781 /* : String */;
2187 char* var782 /* : NativeString */;
2188 long var783 /* : Int */;
2189 val* var784 /* : String */;
2190 val* var785 /* : Array[Object] */;
2191 long var786 /* : Int */;
2192 val* var787 /* : NativeArray[Object] */;
2193 val* var788 /* : String */;
2194 static val* varonce789;
2195 val* var790 /* : String */;
2196 char* var791 /* : NativeString */;
2197 long var792 /* : Int */;
2198 val* var793 /* : String */;
2199 static val* varonce794;
2200 val* var795 /* : String */;
2201 char* var796 /* : NativeString */;
2202 long var797 /* : Int */;
2203 val* var798 /* : String */;
2204 val* var799 /* : Array[Object] */;
2205 long var800 /* : Int */;
2206 val* var801 /* : NativeArray[Object] */;
2207 val* var802 /* : String */;
2208 static val* varonce803;
2209 val* var804 /* : String */;
2210 char* var805 /* : NativeString */;
2211 long var806 /* : Int */;
2212 val* var807 /* : String */;
2213 var_mclass = p0;
2214 var = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
2215 var1 = ((val* (*)(val*))(var->class->vft[COLOR_model__MClassDef__bound_mtype]))(var) /* bound_mtype on <var:MClassDef>*/;
2216 var_mtype = var1;
2217 var2 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
2218 var_c_name = var2;
2219 var3 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateErasureCompiler>*/;
2220 var4 = ((val* (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var3, var_mclass) /* [] on <var3:Map[MClass, Array[nullable MPropDef]]>*/;
2221 var_vft = var4;
2222 var5 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateErasureCompiler>*/;
2223 var6 = ((val* (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var5, var_mclass) /* [] on <var5:Map[MClass, Array[nullable MPropDef]]>*/;
2224 var_attrs = var6;
2225 var7 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables]))(self) /* class_tables on <self:SeparateErasureCompiler>*/;
2226 var8 = ((val* (*)(val*, val*))(var7->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var7, var_mclass) /* [] on <var7:Map[MClass, Array[nullable MClass]]>*/;
2227 var_class_table = var8;
2228 var9 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateErasureCompiler>*/;
2229 var_v = var9;
2230 if (varonce) {
2231 var10 = varonce;
2232 } else {
2233 var11 = "/* runtime class ";
2234 var12 = 17;
2235 var13 = string__NativeString__to_s_with_length(var11, var12);
2236 var10 = var13;
2237 varonce = var10;
2238 }
2239 if (varonce14) {
2240 var15 = varonce14;
2241 } else {
2242 var16 = " */";
2243 var17 = 3;
2244 var18 = string__NativeString__to_s_with_length(var16, var17);
2245 var15 = var18;
2246 varonce14 = var15;
2247 }
2248 var19 = NEW_array__Array(&type_array__Arraykernel__Object);
2249 { /* var19 = array_instance Array[Object] */
2250 var20 = 3;
2251 var21 = NEW_array__NativeArray(var20, &type_array__NativeArraykernel__Object);
2252 ((struct instance_array__NativeArray*)var21)->values[0] = (val*) var10;
2253 ((struct instance_array__NativeArray*)var21)->values[1] = (val*) var_c_name;
2254 ((struct instance_array__NativeArray*)var21)->values[2] = (val*) var15;
2255 ((void (*)(val*, val*, long))(var19->class->vft[COLOR_array__Array__with_native]))(var19, var21, var20) /* with_native on <var19:Array[Object]>*/;
2256 CHECK_NEW_array__Array(var19);
2257 }
2258 var22 = ((val* (*)(val*))(var19->class->vft[COLOR_string__Object__to_s]))(var19) /* to_s on <var19:Array[Object]>*/;
2259 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var22) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2260 if (varonce23) {
2261 var24 = varonce23;
2262 } else {
2263 var25 = "class_";
2264 var26 = 6;
2265 var27 = string__NativeString__to_s_with_length(var25, var26);
2266 var24 = var27;
2267 varonce23 = var24;
2268 }
2269 var28 = NEW_array__Array(&type_array__Arraykernel__Object);
2270 { /* var28 = array_instance Array[Object] */
2271 var29 = 2;
2272 var30 = NEW_array__NativeArray(var29, &type_array__NativeArraykernel__Object);
2273 ((struct instance_array__NativeArray*)var30)->values[0] = (val*) var24;
2274 ((struct instance_array__NativeArray*)var30)->values[1] = (val*) var_c_name;
2275 ((void (*)(val*, val*, long))(var28->class->vft[COLOR_array__Array__with_native]))(var28, var30, var29) /* with_native on <var28:Array[Object]>*/;
2276 CHECK_NEW_array__Array(var28);
2277 }
2278 var31 = ((val* (*)(val*))(var28->class->vft[COLOR_string__Object__to_s]))(var28) /* to_s on <var28:Array[Object]>*/;
2279 if (varonce32) {
2280 var33 = varonce32;
2281 } else {
2282 var34 = "extern const struct class class_";
2283 var35 = 32;
2284 var36 = string__NativeString__to_s_with_length(var34, var35);
2285 var33 = var36;
2286 varonce32 = var33;
2287 }
2288 if (varonce37) {
2289 var38 = varonce37;
2290 } else {
2291 var39 = ";";
2292 var40 = 1;
2293 var41 = string__NativeString__to_s_with_length(var39, var40);
2294 var38 = var41;
2295 varonce37 = var38;
2296 }
2297 var42 = NEW_array__Array(&type_array__Arraykernel__Object);
2298 { /* var42 = array_instance Array[Object] */
2299 var43 = 3;
2300 var44 = NEW_array__NativeArray(var43, &type_array__NativeArraykernel__Object);
2301 ((struct instance_array__NativeArray*)var44)->values[0] = (val*) var33;
2302 ((struct instance_array__NativeArray*)var44)->values[1] = (val*) var_c_name;
2303 ((struct instance_array__NativeArray*)var44)->values[2] = (val*) var38;
2304 ((void (*)(val*, val*, long))(var42->class->vft[COLOR_array__Array__with_native]))(var42, var44, var43) /* with_native on <var42:Array[Object]>*/;
2305 CHECK_NEW_array__Array(var42);
2306 }
2307 var45 = ((val* (*)(val*))(var42->class->vft[COLOR_string__Object__to_s]))(var42) /* to_s on <var42:Array[Object]>*/;
2308 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var31, var45) /* provide_declaration on <self:SeparateErasureCompiler>*/;
2309 if (varonce46) {
2310 var47 = varonce46;
2311 } else {
2312 var48 = "extern const struct type_table type_table_";
2313 var49 = 42;
2314 var50 = string__NativeString__to_s_with_length(var48, var49);
2315 var47 = var50;
2316 varonce46 = var47;
2317 }
2318 if (varonce51) {
2319 var52 = varonce51;
2320 } else {
2321 var53 = ";";
2322 var54 = 1;
2323 var55 = string__NativeString__to_s_with_length(var53, var54);
2324 var52 = var55;
2325 varonce51 = var52;
2326 }
2327 var56 = NEW_array__Array(&type_array__Arraykernel__Object);
2328 { /* var56 = array_instance Array[Object] */
2329 var57 = 3;
2330 var58 = NEW_array__NativeArray(var57, &type_array__NativeArraykernel__Object);
2331 ((struct instance_array__NativeArray*)var58)->values[0] = (val*) var47;
2332 ((struct instance_array__NativeArray*)var58)->values[1] = (val*) var_c_name;
2333 ((struct instance_array__NativeArray*)var58)->values[2] = (val*) var52;
2334 ((void (*)(val*, val*, long))(var56->class->vft[COLOR_array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
2335 CHECK_NEW_array__Array(var56);
2336 }
2337 var59 = ((val* (*)(val*))(var56->class->vft[COLOR_string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
2338 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var59) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2339 if (varonce60) {
2340 var61 = varonce60;
2341 } else {
2342 var62 = "const struct class class_";
2343 var63 = 25;
2344 var64 = string__NativeString__to_s_with_length(var62, var63);
2345 var61 = var64;
2346 varonce60 = var61;
2347 }
2348 if (varonce65) {
2349 var66 = varonce65;
2350 } else {
2351 var67 = " = {";
2352 var68 = 4;
2353 var69 = string__NativeString__to_s_with_length(var67, var68);
2354 var66 = var69;
2355 varonce65 = var66;
2356 }
2357 var70 = NEW_array__Array(&type_array__Arraykernel__Object);
2358 { /* var70 = array_instance Array[Object] */
2359 var71 = 3;
2360 var72 = NEW_array__NativeArray(var71, &type_array__NativeArraykernel__Object);
2361 ((struct instance_array__NativeArray*)var72)->values[0] = (val*) var61;
2362 ((struct instance_array__NativeArray*)var72)->values[1] = (val*) var_c_name;
2363 ((struct instance_array__NativeArray*)var72)->values[2] = (val*) var66;
2364 ((void (*)(val*, val*, long))(var70->class->vft[COLOR_array__Array__with_native]))(var70, var72, var71) /* with_native on <var70:Array[Object]>*/;
2365 CHECK_NEW_array__Array(var70);
2366 }
2367 var73 = ((val* (*)(val*))(var70->class->vft[COLOR_string__Object__to_s]))(var70) /* to_s on <var70:Array[Object]>*/;
2368 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var73) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2369 var74 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2370 if (var74 == NULL) {
2371 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 235);
2372 exit(1);
2373 } else {
2374 var75 = ((val* (*)(val*))(var74->class->vft[COLOR_layout_builders__Layout__ids]))(var74) /* ids on <var74:nullable Layout[MClass]>*/;
2375 }
2376 var76 = ((val* (*)(val*, val*))(var75->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var75, var_mclass) /* [] on <var75:Map[Object, Int](Map[MClass, Int])>*/;
2377 if (varonce77) {
2378 var78 = varonce77;
2379 } else {
2380 var79 = ",";
2381 var80 = 1;
2382 var81 = string__NativeString__to_s_with_length(var79, var80);
2383 var78 = var81;
2384 varonce77 = var78;
2385 }
2386 var82 = NEW_array__Array(&type_array__Arraykernel__Object);
2387 { /* var82 = array_instance Array[Object] */
2388 var83 = 2;
2389 var84 = NEW_array__NativeArray(var83, &type_array__NativeArraykernel__Object);
2390 ((struct instance_array__NativeArray*)var84)->values[0] = (val*) var76;
2391 ((struct instance_array__NativeArray*)var84)->values[1] = (val*) var78;
2392 ((void (*)(val*, val*, long))(var82->class->vft[COLOR_array__Array__with_native]))(var82, var84, var83) /* with_native on <var82:Array[Object]>*/;
2393 CHECK_NEW_array__Array(var82);
2394 }
2395 var85 = ((val* (*)(val*))(var82->class->vft[COLOR_string__Object__to_s]))(var82) /* to_s on <var82:Array[Object]>*/;
2396 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var85) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2397 if (varonce86) {
2398 var87 = varonce86;
2399 } else {
2400 var88 = "\"";
2401 var89 = 1;
2402 var90 = string__NativeString__to_s_with_length(var88, var89);
2403 var87 = var90;
2404 varonce86 = var87;
2405 }
2406 var91 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
2407 if (varonce92) {
2408 var93 = varonce92;
2409 } else {
2410 var94 = "\", /* class_name_string */";
2411 var95 = 26;
2412 var96 = string__NativeString__to_s_with_length(var94, var95);
2413 var93 = var96;
2414 varonce92 = var93;
2415 }
2416 var97 = NEW_array__Array(&type_array__Arraykernel__Object);
2417 { /* var97 = array_instance Array[Object] */
2418 var98 = 3;
2419 var99 = NEW_array__NativeArray(var98, &type_array__NativeArraykernel__Object);
2420 ((struct instance_array__NativeArray*)var99)->values[0] = (val*) var87;
2421 ((struct instance_array__NativeArray*)var99)->values[1] = (val*) var91;
2422 ((struct instance_array__NativeArray*)var99)->values[2] = (val*) var93;
2423 ((void (*)(val*, val*, long))(var97->class->vft[COLOR_array__Array__with_native]))(var97, var99, var98) /* with_native on <var97:Array[Object]>*/;
2424 CHECK_NEW_array__Array(var97);
2425 }
2426 var100 = ((val* (*)(val*))(var97->class->vft[COLOR_string__Object__to_s]))(var97) /* to_s on <var97:Array[Object]>*/;
2427 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var100) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2428 var101 = ((long (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__box_kind_of]))(self, var_mclass) /* box_kind_of on <self:SeparateErasureCompiler>*/;
2429 if (varonce102) {
2430 var103 = varonce102;
2431 } else {
2432 var104 = ", /* box_kind */";
2433 var105 = 16;
2434 var106 = string__NativeString__to_s_with_length(var104, var105);
2435 var103 = var106;
2436 varonce102 = var103;
2437 }
2438 var107 = NEW_array__Array(&type_array__Arraykernel__Object);
2439 { /* var107 = array_instance Array[Object] */
2440 var108 = 2;
2441 var109 = NEW_array__NativeArray(var108, &type_array__NativeArraykernel__Object);
2442 var110 = BOX_kernel__Int(var101); /* autobox from Int to Object */
2443 ((struct instance_array__NativeArray*)var109)->values[0] = (val*) var110;
2444 ((struct instance_array__NativeArray*)var109)->values[1] = (val*) var103;
2445 ((void (*)(val*, val*, long))(var107->class->vft[COLOR_array__Array__with_native]))(var107, var109, var108) /* with_native on <var107:Array[Object]>*/;
2446 CHECK_NEW_array__Array(var107);
2447 }
2448 var111 = ((val* (*)(val*))(var107->class->vft[COLOR_string__Object__to_s]))(var107) /* to_s on <var107:Array[Object]>*/;
2449 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var111) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2450 var112 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2451 var_layout = var112;
2452 /* <var_layout:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
2453 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
2454 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
2455 if(var_layout == NULL) {
2456 var113 = 0;
2457 } else {
2458 if(cltype >= var_layout->type->table_size) {
2459 var113 = 0;
2460 } else {
2461 var113 = var_layout->type->type_table[cltype] == idtype;
2462 }
2463 }
2464 if (var113){
2465 var114 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__PHLayout__masks]))(var_layout) /* masks on <var_layout:nullable Layout[MClass](PHLayout[MClass, MClass])>*/;
2466 var115 = ((val* (*)(val*, val*))(var114->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var114, var_mclass) /* [] on <var114:Map[Object, Int](Map[MClass, Int])>*/;
2467 if (varonce116) {
2468 var117 = varonce116;
2469 } else {
2470 var118 = ",";
2471 var119 = 1;
2472 var120 = string__NativeString__to_s_with_length(var118, var119);
2473 var117 = var120;
2474 varonce116 = var117;
2475 }
2476 var121 = NEW_array__Array(&type_array__Arraykernel__Object);
2477 { /* var121 = array_instance Array[Object] */
2478 var122 = 2;
2479 var123 = NEW_array__NativeArray(var122, &type_array__NativeArraykernel__Object);
2480 ((struct instance_array__NativeArray*)var123)->values[0] = (val*) var115;
2481 ((struct instance_array__NativeArray*)var123)->values[1] = (val*) var117;
2482 ((void (*)(val*, val*, long))(var121->class->vft[COLOR_array__Array__with_native]))(var121, var123, var122) /* with_native on <var121:Array[Object]>*/;
2483 CHECK_NEW_array__Array(var121);
2484 }
2485 var124 = ((val* (*)(val*))(var121->class->vft[COLOR_string__Object__to_s]))(var121) /* to_s on <var121:Array[Object]>*/;
2486 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var124) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2487 } else {
2488 if (var_layout == NULL) {
2489 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 242);
2490 exit(1);
2491 } else {
2492 var125 = ((val* (*)(val*))(var_layout->class->vft[COLOR_layout_builders__Layout__pos]))(var_layout) /* pos on <var_layout:nullable Layout[MClass]>*/;
2493 }
2494 var126 = ((val* (*)(val*, val*))(var125->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var125, var_mclass) /* [] on <var125:Map[Object, Int](Map[MClass, Int])>*/;
2495 if (varonce127) {
2496 var128 = varonce127;
2497 } else {
2498 var129 = ",";
2499 var130 = 1;
2500 var131 = string__NativeString__to_s_with_length(var129, var130);
2501 var128 = var131;
2502 varonce127 = var128;
2503 }
2504 var132 = NEW_array__Array(&type_array__Arraykernel__Object);
2505 { /* var132 = array_instance Array[Object] */
2506 var133 = 2;
2507 var134 = NEW_array__NativeArray(var133, &type_array__NativeArraykernel__Object);
2508 ((struct instance_array__NativeArray*)var134)->values[0] = (val*) var126;
2509 ((struct instance_array__NativeArray*)var134)->values[1] = (val*) var128;
2510 ((void (*)(val*, val*, long))(var132->class->vft[COLOR_array__Array__with_native]))(var132, var134, var133) /* with_native on <var132:Array[Object]>*/;
2511 CHECK_NEW_array__Array(var132);
2512 }
2513 var135 = ((val* (*)(val*))(var132->class->vft[COLOR_string__Object__to_s]))(var132) /* to_s on <var132:Array[Object]>*/;
2514 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var135) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2515 }
2516 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>*/;
2517 if (var136){
2518 if (varonce137) {
2519 var138 = varonce137;
2520 } else {
2521 var139 = "vts_table_";
2522 var140 = 10;
2523 var141 = string__NativeString__to_s_with_length(var139, var140);
2524 var138 = var141;
2525 varonce137 = var138;
2526 }
2527 var142 = NEW_array__Array(&type_array__Arraykernel__Object);
2528 { /* var142 = array_instance Array[Object] */
2529 var143 = 2;
2530 var144 = NEW_array__NativeArray(var143, &type_array__NativeArraykernel__Object);
2531 ((struct instance_array__NativeArray*)var144)->values[0] = (val*) var138;
2532 ((struct instance_array__NativeArray*)var144)->values[1] = (val*) var_c_name;
2533 ((void (*)(val*, val*, long))(var142->class->vft[COLOR_array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
2534 CHECK_NEW_array__Array(var142);
2535 }
2536 var145 = ((val* (*)(val*))(var142->class->vft[COLOR_string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
2537 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var145) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2538 if (varonce146) {
2539 var147 = varonce146;
2540 } else {
2541 var148 = "&vts_table_";
2542 var149 = 11;
2543 var150 = string__NativeString__to_s_with_length(var148, var149);
2544 var147 = var150;
2545 varonce146 = var147;
2546 }
2547 if (varonce151) {
2548 var152 = varonce151;
2549 } else {
2550 var153 = ",";
2551 var154 = 1;
2552 var155 = string__NativeString__to_s_with_length(var153, var154);
2553 var152 = var155;
2554 varonce151 = var152;
2555 }
2556 var156 = NEW_array__Array(&type_array__Arraykernel__Object);
2557 { /* var156 = array_instance Array[Object] */
2558 var157 = 3;
2559 var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
2560 ((struct instance_array__NativeArray*)var158)->values[0] = (val*) var147;
2561 ((struct instance_array__NativeArray*)var158)->values[1] = (val*) var_c_name;
2562 ((struct instance_array__NativeArray*)var158)->values[2] = (val*) var152;
2563 ((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
2564 CHECK_NEW_array__Array(var156);
2565 }
2566 var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
2567 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var159) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2568 } else {
2569 if (varonce160) {
2570 var161 = varonce160;
2571 } else {
2572 var162 = "NULL,";
2573 var163 = 5;
2574 var164 = string__NativeString__to_s_with_length(var162, var163);
2575 var161 = var164;
2576 varonce160 = var161;
2577 }
2578 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var161) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2579 }
2580 if (varonce165) {
2581 var166 = varonce165;
2582 } else {
2583 var167 = "&type_table_";
2584 var168 = 12;
2585 var169 = string__NativeString__to_s_with_length(var167, var168);
2586 var166 = var169;
2587 varonce165 = var166;
2588 }
2589 if (varonce170) {
2590 var171 = varonce170;
2591 } else {
2592 var172 = ",";
2593 var173 = 1;
2594 var174 = string__NativeString__to_s_with_length(var172, var173);
2595 var171 = var174;
2596 varonce170 = var171;
2597 }
2598 var175 = NEW_array__Array(&type_array__Arraykernel__Object);
2599 { /* var175 = array_instance Array[Object] */
2600 var176 = 3;
2601 var177 = NEW_array__NativeArray(var176, &type_array__NativeArraykernel__Object);
2602 ((struct instance_array__NativeArray*)var177)->values[0] = (val*) var166;
2603 ((struct instance_array__NativeArray*)var177)->values[1] = (val*) var_c_name;
2604 ((struct instance_array__NativeArray*)var177)->values[2] = (val*) var171;
2605 ((void (*)(val*, val*, long))(var175->class->vft[COLOR_array__Array__with_native]))(var175, var177, var176) /* with_native on <var175:Array[Object]>*/;
2606 CHECK_NEW_array__Array(var175);
2607 }
2608 var178 = ((val* (*)(val*))(var175->class->vft[COLOR_string__Object__to_s]))(var175) /* to_s on <var175:Array[Object]>*/;
2609 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var178) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2610 if (varonce179) {
2611 var180 = varonce179;
2612 } else {
2613 var181 = "{";
2614 var182 = 1;
2615 var183 = string__NativeString__to_s_with_length(var181, var182);
2616 var180 = var183;
2617 varonce179 = var180;
2618 }
2619 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var180) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2620 var184 = NEW_range__Range(&type_range__Rangekernel__Int);
2621 var185 = 0;
2622 var186 = ((long (*)(val*))(var_vft->class->vft[COLOR_abstract_collection__Collection__length]))(var_vft) /* length on <var_vft:Array[nullable MPropDef]>*/;
2623 var187 = BOX_kernel__Int(var185); /* autobox from Int to Discrete */
2624 var188 = BOX_kernel__Int(var186); /* autobox from Int to Discrete */
2625 ((void (*)(val*, val*, val*))(var184->class->vft[COLOR_range__Range__without_last]))(var184, var187, var188) /* without_last on <var184:Range[Int]>*/;
2626 CHECK_NEW_range__Range(var184);
2627 var189 = ((val* (*)(val*))(var184->class->vft[COLOR_abstract_collection__Collection__iterator]))(var184) /* iterator on <var184:Range[Int]>*/;
2628 for(;;) {
2629 var190 = ((short int (*)(val*))(var189->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var189) /* is_ok on <var189:Iterator[nullable Object]>*/;
2630 if(!var190) break;
2631 var191 = ((val* (*)(val*))(var189->class->vft[COLOR_abstract_collection__Iterator__item]))(var189) /* item on <var189:Iterator[nullable Object]>*/;
2632 var192 = ((struct instance_kernel__Int*)var191)->value; /* autounbox from nullable Object to Int */;
2633 var_i = var192;
2634 var193 = ((val* (*)(val*, long))(var_vft->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_vft, var_i) /* [] on <var_vft:Array[nullable MPropDef]>*/;
2635 var_mpropdef = var193;
2636 var194 = NULL;
2637 if (var_mpropdef == NULL) {
2638 var195 = 1; /* is null */
2639 } else {
2640 var195 = 0; /* arg is null but recv is not */
2641 }
2642 if (var195){
2643 if (varonce196) {
2644 var197 = varonce196;
2645 } else {
2646 var198 = "NULL, /* empty */";
2647 var199 = 17;
2648 var200 = string__NativeString__to_s_with_length(var198, var199);
2649 var197 = var200;
2650 varonce196 = var197;
2651 }
2652 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var197) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2653 } else {
2654 var202 = 1;
2655 var_ = var202;
2656 if (var202){
2657 var201 = var_;
2658 } else {
2659 var203 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_model__MPropDef__mclassdef]))(var_mpropdef) /* mclassdef on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2660 var204 = ((val* (*)(val*))(var203->class->vft[COLOR_model__MClassDef__bound_mtype]))(var203) /* bound_mtype on <var203:MClassDef>*/;
2661 var205 = ((val* (*)(val*))(var204->class->vft[COLOR_abstract_compiler__MType__ctype]))(var204) /* ctype on <var204:MClassType>*/;
2662 if (varonce206) {
2663 var207 = varonce206;
2664 } else {
2665 var208 = "val*";
2666 var209 = 4;
2667 var210 = string__NativeString__to_s_with_length(var208, var209);
2668 var207 = var210;
2669 varonce206 = var207;
2670 }
2671 var211 = ((short int (*)(val*, val*))(var205->class->vft[COLOR_kernel__Object___33d_61d]))(var205, var207) /* != on <var205:String>*/;
2672 var201 = var211;
2673 }
2674 if (var201){
2675 if (varonce212) {
2676 var213 = varonce212;
2677 } else {
2678 var214 = "VIRTUAL_";
2679 var215 = 8;
2680 var216 = string__NativeString__to_s_with_length(var214, var215);
2681 var213 = var216;
2682 varonce212 = var213;
2683 }
2684 var217 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2685 var218 = NEW_array__Array(&type_array__Arraykernel__Object);
2686 { /* var218 = array_instance Array[Object] */
2687 var219 = 2;
2688 var220 = NEW_array__NativeArray(var219, &type_array__NativeArraykernel__Object);
2689 ((struct instance_array__NativeArray*)var220)->values[0] = (val*) var213;
2690 ((struct instance_array__NativeArray*)var220)->values[1] = (val*) var217;
2691 ((void (*)(val*, val*, long))(var218->class->vft[COLOR_array__Array__with_native]))(var218, var220, var219) /* with_native on <var218:Array[Object]>*/;
2692 CHECK_NEW_array__Array(var218);
2693 }
2694 var221 = ((val* (*)(val*))(var218->class->vft[COLOR_string__Object__to_s]))(var218) /* to_s on <var218:Array[Object]>*/;
2695 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var221) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2696 if (varonce222) {
2697 var223 = varonce222;
2698 } else {
2699 var224 = "(nitmethod_t)VIRTUAL_";
2700 var225 = 21;
2701 var226 = string__NativeString__to_s_with_length(var224, var225);
2702 var223 = var226;
2703 varonce222 = var223;
2704 }
2705 var227 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2706 if (varonce228) {
2707 var229 = varonce228;
2708 } else {
2709 var230 = ", /* pointer to ";
2710 var231 = 16;
2711 var232 = string__NativeString__to_s_with_length(var230, var231);
2712 var229 = var232;
2713 varonce228 = var229;
2714 }
2715 var233 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
2716 if (varonce234) {
2717 var235 = varonce234;
2718 } else {
2719 var236 = ":";
2720 var237 = 1;
2721 var238 = string__NativeString__to_s_with_length(var236, var237);
2722 var235 = var238;
2723 varonce234 = var235;
2724 }
2725 if (varonce239) {
2726 var240 = varonce239;
2727 } else {
2728 var241 = ":";
2729 var242 = 1;
2730 var243 = string__NativeString__to_s_with_length(var241, var242);
2731 var240 = var243;
2732 varonce239 = var240;
2733 }
2734 if (varonce244) {
2735 var245 = varonce244;
2736 } else {
2737 var246 = " */";
2738 var247 = 3;
2739 var248 = string__NativeString__to_s_with_length(var246, var247);
2740 var245 = var248;
2741 varonce244 = var245;
2742 }
2743 var249 = NEW_array__Array(&type_array__Arraykernel__Object);
2744 { /* var249 = array_instance Array[Object] */
2745 var250 = 9;
2746 var251 = NEW_array__NativeArray(var250, &type_array__NativeArraykernel__Object);
2747 ((struct instance_array__NativeArray*)var251)->values[0] = (val*) var223;
2748 ((struct instance_array__NativeArray*)var251)->values[1] = (val*) var227;
2749 ((struct instance_array__NativeArray*)var251)->values[2] = (val*) var229;
2750 ((struct instance_array__NativeArray*)var251)->values[3] = (val*) var233;
2751 ((struct instance_array__NativeArray*)var251)->values[4] = (val*) var235;
2752 ((struct instance_array__NativeArray*)var251)->values[5] = (val*) var_mclass;
2753 ((struct instance_array__NativeArray*)var251)->values[6] = (val*) var240;
2754 ((struct instance_array__NativeArray*)var251)->values[7] = (val*) var_mpropdef;
2755 ((struct instance_array__NativeArray*)var251)->values[8] = (val*) var245;
2756 ((void (*)(val*, val*, long))(var249->class->vft[COLOR_array__Array__with_native]))(var249, var251, var250) /* with_native on <var249:Array[Object]>*/;
2757 CHECK_NEW_array__Array(var249);
2758 }
2759 var252 = ((val* (*)(val*))(var249->class->vft[COLOR_string__Object__to_s]))(var249) /* to_s on <var249:Array[Object]>*/;
2760 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var252) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2761 } else {
2762 var253 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2763 var254 = NEW_array__Array(&type_array__Arraykernel__Object);
2764 { /* var254 = array_instance Array[Object] */
2765 var255 = 1;
2766 var256 = NEW_array__NativeArray(var255, &type_array__NativeArraykernel__Object);
2767 ((struct instance_array__NativeArray*)var256)->values[0] = (val*) var253;
2768 ((void (*)(val*, val*, long))(var254->class->vft[COLOR_array__Array__with_native]))(var254, var256, var255) /* with_native on <var254:Array[Object]>*/;
2769 CHECK_NEW_array__Array(var254);
2770 }
2771 var257 = ((val* (*)(val*))(var254->class->vft[COLOR_string__Object__to_s]))(var254) /* to_s on <var254:Array[Object]>*/;
2772 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var257) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
2773 if (varonce258) {
2774 var259 = varonce258;
2775 } else {
2776 var260 = "(nitmethod_t)";
2777 var261 = 13;
2778 var262 = string__NativeString__to_s_with_length(var260, var261);
2779 var259 = var262;
2780 varonce258 = var259;
2781 }
2782 var263 = ((val* (*)(val*))(var_mpropdef->class->vft[COLOR_abstract_compiler__MPropDef__c_name]))(var_mpropdef) /* c_name on <var_mpropdef:nullable MPropDef(MPropDef)>*/;
2783 if (varonce264) {
2784 var265 = varonce264;
2785 } else {
2786 var266 = ", /* pointer to ";
2787 var267 = 16;
2788 var268 = string__NativeString__to_s_with_length(var266, var267);
2789 var265 = var268;
2790 varonce264 = var265;
2791 }
2792 var269 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
2793 if (varonce270) {
2794 var271 = varonce270;
2795 } else {
2796 var272 = ":";
2797 var273 = 1;
2798 var274 = string__NativeString__to_s_with_length(var272, var273);
2799 var271 = var274;
2800 varonce270 = var271;
2801 }
2802 if (varonce275) {
2803 var276 = varonce275;
2804 } else {
2805 var277 = ":";
2806 var278 = 1;
2807 var279 = string__NativeString__to_s_with_length(var277, var278);
2808 var276 = var279;
2809 varonce275 = var276;
2810 }
2811 if (varonce280) {
2812 var281 = varonce280;
2813 } else {
2814 var282 = " */";
2815 var283 = 3;
2816 var284 = string__NativeString__to_s_with_length(var282, var283);
2817 var281 = var284;
2818 varonce280 = var281;
2819 }
2820 var285 = NEW_array__Array(&type_array__Arraykernel__Object);
2821 { /* var285 = array_instance Array[Object] */
2822 var286 = 9;
2823 var287 = NEW_array__NativeArray(var286, &type_array__NativeArraykernel__Object);
2824 ((struct instance_array__NativeArray*)var287)->values[0] = (val*) var259;
2825 ((struct instance_array__NativeArray*)var287)->values[1] = (val*) var263;
2826 ((struct instance_array__NativeArray*)var287)->values[2] = (val*) var265;
2827 ((struct instance_array__NativeArray*)var287)->values[3] = (val*) var269;
2828 ((struct instance_array__NativeArray*)var287)->values[4] = (val*) var271;
2829 ((struct instance_array__NativeArray*)var287)->values[5] = (val*) var_mclass;
2830 ((struct instance_array__NativeArray*)var287)->values[6] = (val*) var276;
2831 ((struct instance_array__NativeArray*)var287)->values[7] = (val*) var_mpropdef;
2832 ((struct instance_array__NativeArray*)var287)->values[8] = (val*) var281;
2833 ((void (*)(val*, val*, long))(var285->class->vft[COLOR_array__Array__with_native]))(var285, var287, var286) /* with_native on <var285:Array[Object]>*/;
2834 CHECK_NEW_array__Array(var285);
2835 }
2836 var288 = ((val* (*)(val*))(var285->class->vft[COLOR_string__Object__to_s]))(var285) /* to_s on <var285:Array[Object]>*/;
2837 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var288) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2838 }
2839 }
2840 CONTINUE_label: (void)0;
2841 ((void (*)(val*))(var189->class->vft[COLOR_abstract_collection__Iterator__next]))(var189) /* next on <var189:Iterator[nullable Object]>*/;
2842 }
2843 BREAK_label: (void)0;
2844 if (varonce289) {
2845 var290 = varonce289;
2846 } else {
2847 var291 = "}";
2848 var292 = 1;
2849 var293 = string__NativeString__to_s_with_length(var291, var292);
2850 var290 = var293;
2851 varonce289 = var290;
2852 }
2853 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var290) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2854 if (varonce294) {
2855 var295 = varonce294;
2856 } else {
2857 var296 = "};";
2858 var297 = 2;
2859 var298 = string__NativeString__to_s_with_length(var296, var297);
2860 var295 = var298;
2861 varonce294 = var295;
2862 }
2863 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var295) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2864 if (varonce299) {
2865 var300 = varonce299;
2866 } else {
2867 var301 = "const struct type_table type_table_";
2868 var302 = 35;
2869 var303 = string__NativeString__to_s_with_length(var301, var302);
2870 var300 = var303;
2871 varonce299 = var300;
2872 }
2873 if (varonce304) {
2874 var305 = varonce304;
2875 } else {
2876 var306 = " = {";
2877 var307 = 4;
2878 var308 = string__NativeString__to_s_with_length(var306, var307);
2879 var305 = var308;
2880 varonce304 = var305;
2881 }
2882 var309 = NEW_array__Array(&type_array__Arraykernel__Object);
2883 { /* var309 = array_instance Array[Object] */
2884 var310 = 3;
2885 var311 = NEW_array__NativeArray(var310, &type_array__NativeArraykernel__Object);
2886 ((struct instance_array__NativeArray*)var311)->values[0] = (val*) var300;
2887 ((struct instance_array__NativeArray*)var311)->values[1] = (val*) var_c_name;
2888 ((struct instance_array__NativeArray*)var311)->values[2] = (val*) var305;
2889 ((void (*)(val*, val*, long))(var309->class->vft[COLOR_array__Array__with_native]))(var309, var311, var310) /* with_native on <var309:Array[Object]>*/;
2890 CHECK_NEW_array__Array(var309);
2891 }
2892 var312 = ((val* (*)(val*))(var309->class->vft[COLOR_string__Object__to_s]))(var309) /* to_s on <var309:Array[Object]>*/;
2893 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var312) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2894 var313 = ((long (*)(val*))(var_class_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_class_table) /* length on <var_class_table:Array[nullable MClass]>*/;
2895 if (varonce314) {
2896 var315 = varonce314;
2897 } else {
2898 var316 = ",";
2899 var317 = 1;
2900 var318 = string__NativeString__to_s_with_length(var316, var317);
2901 var315 = var318;
2902 varonce314 = var315;
2903 }
2904 var319 = NEW_array__Array(&type_array__Arraykernel__Object);
2905 { /* var319 = array_instance Array[Object] */
2906 var320 = 2;
2907 var321 = NEW_array__NativeArray(var320, &type_array__NativeArraykernel__Object);
2908 var322 = BOX_kernel__Int(var313); /* autobox from Int to Object */
2909 ((struct instance_array__NativeArray*)var321)->values[0] = (val*) var322;
2910 ((struct instance_array__NativeArray*)var321)->values[1] = (val*) var315;
2911 ((void (*)(val*, val*, long))(var319->class->vft[COLOR_array__Array__with_native]))(var319, var321, var320) /* with_native on <var319:Array[Object]>*/;
2912 CHECK_NEW_array__Array(var319);
2913 }
2914 var323 = ((val* (*)(val*))(var319->class->vft[COLOR_string__Object__to_s]))(var319) /* to_s on <var319:Array[Object]>*/;
2915 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var323) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2916 if (varonce324) {
2917 var325 = varonce324;
2918 } else {
2919 var326 = "{";
2920 var327 = 1;
2921 var328 = string__NativeString__to_s_with_length(var326, var327);
2922 var325 = var328;
2923 varonce324 = var325;
2924 }
2925 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var325) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2926 var329 = ((val* (*)(val*))(var_class_table->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_class_table) /* iterator on <var_class_table:Array[nullable MClass]>*/;
2927 for(;;) {
2928 var330 = ((short int (*)(val*))(var329->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var329) /* is_ok on <var329:Iterator[nullable Object]>*/;
2929 if(!var330) break;
2930 var331 = ((val* (*)(val*))(var329->class->vft[COLOR_abstract_collection__Iterator__item]))(var329) /* item on <var329:Iterator[nullable Object]>*/;
2931 var_msuper = var331;
2932 var332 = NULL;
2933 if (var_msuper == NULL) {
2934 var333 = 1; /* is null */
2935 } else {
2936 var333 = 0; /* arg is null but recv is not */
2937 }
2938 if (var333){
2939 if (varonce334) {
2940 var335 = varonce334;
2941 } else {
2942 var336 = "-1, /* empty */";
2943 var337 = 15;
2944 var338 = string__NativeString__to_s_with_length(var336, var337);
2945 var335 = var338;
2946 varonce334 = var335;
2947 }
2948 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var335) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2949 } else {
2950 var339 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(self) /* class_layout on <self:SeparateErasureCompiler>*/;
2951 if (var339 == NULL) {
2952 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 278);
2953 exit(1);
2954 } else {
2955 var340 = ((val* (*)(val*))(var339->class->vft[COLOR_layout_builders__Layout__ids]))(var339) /* ids on <var339:nullable Layout[MClass]>*/;
2956 }
2957 var341 = ((val* (*)(val*, val*))(var340->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var340, var_msuper) /* [] on <var340:Map[Object, Int](Map[MClass, Int])>*/;
2958 if (varonce342) {
2959 var343 = varonce342;
2960 } else {
2961 var344 = ", /* ";
2962 var345 = 5;
2963 var346 = string__NativeString__to_s_with_length(var344, var345);
2964 var343 = var346;
2965 varonce342 = var343;
2966 }
2967 if (varonce347) {
2968 var348 = varonce347;
2969 } else {
2970 var349 = " */";
2971 var350 = 3;
2972 var351 = string__NativeString__to_s_with_length(var349, var350);
2973 var348 = var351;
2974 varonce347 = var348;
2975 }
2976 var352 = NEW_array__Array(&type_array__Arraykernel__Object);
2977 { /* var352 = array_instance Array[Object] */
2978 var353 = 4;
2979 var354 = NEW_array__NativeArray(var353, &type_array__NativeArraykernel__Object);
2980 ((struct instance_array__NativeArray*)var354)->values[0] = (val*) var341;
2981 ((struct instance_array__NativeArray*)var354)->values[1] = (val*) var343;
2982 ((struct instance_array__NativeArray*)var354)->values[2] = (val*) var_msuper;
2983 ((struct instance_array__NativeArray*)var354)->values[3] = (val*) var348;
2984 ((void (*)(val*, val*, long))(var352->class->vft[COLOR_array__Array__with_native]))(var352, var354, var353) /* with_native on <var352:Array[Object]>*/;
2985 CHECK_NEW_array__Array(var352);
2986 }
2987 var355 = ((val* (*)(val*))(var352->class->vft[COLOR_string__Object__to_s]))(var352) /* to_s on <var352:Array[Object]>*/;
2988 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var355) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
2989 }
2990 CONTINUE_label356: (void)0;
2991 ((void (*)(val*))(var329->class->vft[COLOR_abstract_collection__Iterator__next]))(var329) /* next on <var329:Iterator[nullable Object]>*/;
2992 }
2993 BREAK_label356: (void)0;
2994 if (varonce357) {
2995 var358 = varonce357;
2996 } else {
2997 var359 = "}";
2998 var360 = 1;
2999 var361 = string__NativeString__to_s_with_length(var359, var360);
3000 var358 = var361;
3001 varonce357 = var358;
3002 }
3003 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var358) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3004 if (varonce362) {
3005 var363 = varonce362;
3006 } else {
3007 var364 = "};";
3008 var365 = 2;
3009 var366 = string__NativeString__to_s_with_length(var364, var365);
3010 var363 = var366;
3011 varonce362 = var363;
3012 }
3013 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var363) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3014 var367 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3015 if (varonce368) {
3016 var369 = varonce368;
3017 } else {
3018 var370 = "val*";
3019 var371 = 4;
3020 var372 = string__NativeString__to_s_with_length(var370, var371);
3021 var369 = var372;
3022 varonce368 = var369;
3023 }
3024 var373 = ((short int (*)(val*, val*))(var367->class->vft[COLOR_kernel__Object___33d_61d]))(var367, var369) /* != on <var367:String>*/;
3025 if (var373){
3026 var374 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3027 if (varonce375) {
3028 var376 = varonce375;
3029 } else {
3030 var377 = "struct instance_";
3031 var378 = 16;
3032 var379 = string__NativeString__to_s_with_length(var377, var378);
3033 var376 = var379;
3034 varonce375 = var376;
3035 }
3036 if (varonce380) {
3037 var381 = varonce380;
3038 } else {
3039 var382 = " {";
3040 var383 = 2;
3041 var384 = string__NativeString__to_s_with_length(var382, var383);
3042 var381 = var384;
3043 varonce380 = var381;
3044 }
3045 var385 = NEW_array__Array(&type_array__Arraykernel__Object);
3046 { /* var385 = array_instance Array[Object] */
3047 var386 = 3;
3048 var387 = NEW_array__NativeArray(var386, &type_array__NativeArraykernel__Object);
3049 ((struct instance_array__NativeArray*)var387)->values[0] = (val*) var376;
3050 ((struct instance_array__NativeArray*)var387)->values[1] = (val*) var_c_name;
3051 ((struct instance_array__NativeArray*)var387)->values[2] = (val*) var381;
3052 ((void (*)(val*, val*, long))(var385->class->vft[COLOR_array__Array__with_native]))(var385, var387, var386) /* with_native on <var385:Array[Object]>*/;
3053 CHECK_NEW_array__Array(var385);
3054 }
3055 var388 = ((val* (*)(val*))(var385->class->vft[COLOR_string__Object__to_s]))(var385) /* to_s on <var385:Array[Object]>*/;
3056 ((void (*)(val*, val*))(var374->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var374, var388) /* add_decl on <var374:CodeWriter>*/;
3057 var389 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3058 if (varonce390) {
3059 var391 = varonce390;
3060 } else {
3061 var392 = "const struct class *class;";
3062 var393 = 26;
3063 var394 = string__NativeString__to_s_with_length(var392, var393);
3064 var391 = var394;
3065 varonce390 = var391;
3066 }
3067 ((void (*)(val*, val*))(var389->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var389, var391) /* add_decl on <var389:CodeWriter>*/;
3068 var395 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3069 var396 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3070 if (varonce397) {
3071 var398 = varonce397;
3072 } else {
3073 var399 = " value;";
3074 var400 = 7;
3075 var401 = string__NativeString__to_s_with_length(var399, var400);
3076 var398 = var401;
3077 varonce397 = var398;
3078 }
3079 var402 = NEW_array__Array(&type_array__Arraykernel__Object);
3080 { /* var402 = array_instance Array[Object] */
3081 var403 = 2;
3082 var404 = NEW_array__NativeArray(var403, &type_array__NativeArraykernel__Object);
3083 ((struct instance_array__NativeArray*)var404)->values[0] = (val*) var396;
3084 ((struct instance_array__NativeArray*)var404)->values[1] = (val*) var398;
3085 ((void (*)(val*, val*, long))(var402->class->vft[COLOR_array__Array__with_native]))(var402, var404, var403) /* with_native on <var402:Array[Object]>*/;
3086 CHECK_NEW_array__Array(var402);
3087 }
3088 var405 = ((val* (*)(val*))(var402->class->vft[COLOR_string__Object__to_s]))(var402) /* to_s on <var402:Array[Object]>*/;
3089 ((void (*)(val*, val*))(var395->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var395, var405) /* add_decl on <var395:CodeWriter>*/;
3090 var406 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3091 if (varonce407) {
3092 var408 = varonce407;
3093 } else {
3094 var409 = "};";
3095 var410 = 2;
3096 var411 = string__NativeString__to_s_with_length(var409, var410);
3097 var408 = var411;
3098 varonce407 = var408;
3099 }
3100 ((void (*)(val*, val*))(var406->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var406, var408) /* add_decl on <var406:CodeWriter>*/;
3101 var412 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3102 if (varonce413) {
3103 var414 = varonce413;
3104 } else {
3105 var415 = "val* BOX_";
3106 var416 = 9;
3107 var417 = string__NativeString__to_s_with_length(var415, var416);
3108 var414 = var417;
3109 varonce413 = var414;
3110 }
3111 if (varonce418) {
3112 var419 = varonce418;
3113 } else {
3114 var420 = "(";
3115 var421 = 1;
3116 var422 = string__NativeString__to_s_with_length(var420, var421);
3117 var419 = var422;
3118 varonce418 = var419;
3119 }
3120 var423 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3121 if (varonce424) {
3122 var425 = varonce424;
3123 } else {
3124 var426 = ");";
3125 var427 = 2;
3126 var428 = string__NativeString__to_s_with_length(var426, var427);
3127 var425 = var428;
3128 varonce424 = var425;
3129 }
3130 var429 = NEW_array__Array(&type_array__Arraykernel__Object);
3131 { /* var429 = array_instance Array[Object] */
3132 var430 = 5;
3133 var431 = NEW_array__NativeArray(var430, &type_array__NativeArraykernel__Object);
3134 ((struct instance_array__NativeArray*)var431)->values[0] = (val*) var414;
3135 ((struct instance_array__NativeArray*)var431)->values[1] = (val*) var_c_name;
3136 ((struct instance_array__NativeArray*)var431)->values[2] = (val*) var419;
3137 ((struct instance_array__NativeArray*)var431)->values[3] = (val*) var423;
3138 ((struct instance_array__NativeArray*)var431)->values[4] = (val*) var425;
3139 ((void (*)(val*, val*, long))(var429->class->vft[COLOR_array__Array__with_native]))(var429, var431, var430) /* with_native on <var429:Array[Object]>*/;
3140 CHECK_NEW_array__Array(var429);
3141 }
3142 var432 = ((val* (*)(val*))(var429->class->vft[COLOR_string__Object__to_s]))(var429) /* to_s on <var429:Array[Object]>*/;
3143 ((void (*)(val*, val*))(var412->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var412, var432) /* add_decl on <var412:CodeWriter>*/;
3144 if (varonce433) {
3145 var434 = varonce433;
3146 } else {
3147 var435 = "/* allocate ";
3148 var436 = 12;
3149 var437 = string__NativeString__to_s_with_length(var435, var436);
3150 var434 = var437;
3151 varonce433 = var434;
3152 }
3153 if (varonce438) {
3154 var439 = varonce438;
3155 } else {
3156 var440 = " */";
3157 var441 = 3;
3158 var442 = string__NativeString__to_s_with_length(var440, var441);
3159 var439 = var442;
3160 varonce438 = var439;
3161 }
3162 var443 = NEW_array__Array(&type_array__Arraykernel__Object);
3163 { /* var443 = array_instance Array[Object] */
3164 var444 = 3;
3165 var445 = NEW_array__NativeArray(var444, &type_array__NativeArraykernel__Object);
3166 ((struct instance_array__NativeArray*)var445)->values[0] = (val*) var434;
3167 ((struct instance_array__NativeArray*)var445)->values[1] = (val*) var_mtype;
3168 ((struct instance_array__NativeArray*)var445)->values[2] = (val*) var439;
3169 ((void (*)(val*, val*, long))(var443->class->vft[COLOR_array__Array__with_native]))(var443, var445, var444) /* with_native on <var443:Array[Object]>*/;
3170 CHECK_NEW_array__Array(var443);
3171 }
3172 var446 = ((val* (*)(val*))(var443->class->vft[COLOR_string__Object__to_s]))(var443) /* to_s on <var443:Array[Object]>*/;
3173 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var446) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3174 if (varonce447) {
3175 var448 = varonce447;
3176 } else {
3177 var449 = "val* BOX_";
3178 var450 = 9;
3179 var451 = string__NativeString__to_s_with_length(var449, var450);
3180 var448 = var451;
3181 varonce447 = var448;
3182 }
3183 var452 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__c_name]))(var_mtype) /* c_name on <var_mtype:MClassType>*/;
3184 if (varonce453) {
3185 var454 = varonce453;
3186 } else {
3187 var455 = "(";
3188 var456 = 1;
3189 var457 = string__NativeString__to_s_with_length(var455, var456);
3190 var454 = var457;
3191 varonce453 = var454;
3192 }
3193 var458 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3194 if (varonce459) {
3195 var460 = varonce459;
3196 } else {
3197 var461 = " value) {";
3198 var462 = 9;
3199 var463 = string__NativeString__to_s_with_length(var461, var462);
3200 var460 = var463;
3201 varonce459 = var460;
3202 }
3203 var464 = NEW_array__Array(&type_array__Arraykernel__Object);
3204 { /* var464 = array_instance Array[Object] */
3205 var465 = 5;
3206 var466 = NEW_array__NativeArray(var465, &type_array__NativeArraykernel__Object);
3207 ((struct instance_array__NativeArray*)var466)->values[0] = (val*) var448;
3208 ((struct instance_array__NativeArray*)var466)->values[1] = (val*) var452;
3209 ((struct instance_array__NativeArray*)var466)->values[2] = (val*) var454;
3210 ((struct instance_array__NativeArray*)var466)->values[3] = (val*) var458;
3211 ((struct instance_array__NativeArray*)var466)->values[4] = (val*) var460;
3212 ((void (*)(val*, val*, long))(var464->class->vft[COLOR_array__Array__with_native]))(var464, var466, var465) /* with_native on <var464:Array[Object]>*/;
3213 CHECK_NEW_array__Array(var464);
3214 }
3215 var467 = ((val* (*)(val*))(var464->class->vft[COLOR_string__Object__to_s]))(var464) /* to_s on <var464:Array[Object]>*/;
3216 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var467) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3217 if (varonce468) {
3218 var469 = varonce468;
3219 } else {
3220 var470 = "struct instance_";
3221 var471 = 16;
3222 var472 = string__NativeString__to_s_with_length(var470, var471);
3223 var469 = var472;
3224 varonce468 = var469;
3225 }
3226 if (varonce473) {
3227 var474 = varonce473;
3228 } else {
3229 var475 = "*res = nit_alloc(sizeof(struct instance_";
3230 var476 = 40;
3231 var477 = string__NativeString__to_s_with_length(var475, var476);
3232 var474 = var477;
3233 varonce473 = var474;
3234 }
3235 if (varonce478) {
3236 var479 = varonce478;
3237 } else {
3238 var480 = "));";
3239 var481 = 3;
3240 var482 = string__NativeString__to_s_with_length(var480, var481);
3241 var479 = var482;
3242 varonce478 = var479;
3243 }
3244 var483 = NEW_array__Array(&type_array__Arraykernel__Object);
3245 { /* var483 = array_instance Array[Object] */
3246 var484 = 5;
3247 var485 = NEW_array__NativeArray(var484, &type_array__NativeArraykernel__Object);
3248 ((struct instance_array__NativeArray*)var485)->values[0] = (val*) var469;
3249 ((struct instance_array__NativeArray*)var485)->values[1] = (val*) var_c_name;
3250 ((struct instance_array__NativeArray*)var485)->values[2] = (val*) var474;
3251 ((struct instance_array__NativeArray*)var485)->values[3] = (val*) var_c_name;
3252 ((struct instance_array__NativeArray*)var485)->values[4] = (val*) var479;
3253 ((void (*)(val*, val*, long))(var483->class->vft[COLOR_array__Array__with_native]))(var483, var485, var484) /* with_native on <var483:Array[Object]>*/;
3254 CHECK_NEW_array__Array(var483);
3255 }
3256 var486 = ((val* (*)(val*))(var483->class->vft[COLOR_string__Object__to_s]))(var483) /* to_s on <var483:Array[Object]>*/;
3257 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var486) /* add on <var_v:SeparateCompilerVisitor>*/;
3258 if (varonce487) {
3259 var488 = varonce487;
3260 } else {
3261 var489 = "class_";
3262 var490 = 6;
3263 var491 = string__NativeString__to_s_with_length(var489, var490);
3264 var488 = var491;
3265 varonce487 = var488;
3266 }
3267 var492 = NEW_array__Array(&type_array__Arraykernel__Object);
3268 { /* var492 = array_instance Array[Object] */
3269 var493 = 2;
3270 var494 = NEW_array__NativeArray(var493, &type_array__NativeArraykernel__Object);
3271 ((struct instance_array__NativeArray*)var494)->values[0] = (val*) var488;
3272 ((struct instance_array__NativeArray*)var494)->values[1] = (val*) var_c_name;
3273 ((void (*)(val*, val*, long))(var492->class->vft[COLOR_array__Array__with_native]))(var492, var494, var493) /* with_native on <var492:Array[Object]>*/;
3274 CHECK_NEW_array__Array(var492);
3275 }
3276 var495 = ((val* (*)(val*))(var492->class->vft[COLOR_string__Object__to_s]))(var492) /* to_s on <var492:Array[Object]>*/;
3277 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var495) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3278 if (varonce496) {
3279 var497 = varonce496;
3280 } else {
3281 var498 = "res->class = &class_";
3282 var499 = 20;
3283 var500 = string__NativeString__to_s_with_length(var498, var499);
3284 var497 = var500;
3285 varonce496 = var497;
3286 }
3287 if (varonce501) {
3288 var502 = varonce501;
3289 } else {
3290 var503 = ";";
3291 var504 = 1;
3292 var505 = string__NativeString__to_s_with_length(var503, var504);
3293 var502 = var505;
3294 varonce501 = var502;
3295 }
3296 var506 = NEW_array__Array(&type_array__Arraykernel__Object);
3297 { /* var506 = array_instance Array[Object] */
3298 var507 = 3;
3299 var508 = NEW_array__NativeArray(var507, &type_array__NativeArraykernel__Object);
3300 ((struct instance_array__NativeArray*)var508)->values[0] = (val*) var497;
3301 ((struct instance_array__NativeArray*)var508)->values[1] = (val*) var_c_name;
3302 ((struct instance_array__NativeArray*)var508)->values[2] = (val*) var502;
3303 ((void (*)(val*, val*, long))(var506->class->vft[COLOR_array__Array__with_native]))(var506, var508, var507) /* with_native on <var506:Array[Object]>*/;
3304 CHECK_NEW_array__Array(var506);
3305 }
3306 var509 = ((val* (*)(val*))(var506->class->vft[COLOR_string__Object__to_s]))(var506) /* to_s on <var506:Array[Object]>*/;
3307 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var509) /* add on <var_v:SeparateCompilerVisitor>*/;
3308 if (varonce510) {
3309 var511 = varonce510;
3310 } else {
3311 var512 = "res->value = value;";
3312 var513 = 19;
3313 var514 = string__NativeString__to_s_with_length(var512, var513);
3314 var511 = var514;
3315 varonce510 = var511;
3316 }
3317 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var511) /* add on <var_v:SeparateCompilerVisitor>*/;
3318 if (varonce515) {
3319 var516 = varonce515;
3320 } else {
3321 var517 = "return (val*)res;";
3322 var518 = 17;
3323 var519 = string__NativeString__to_s_with_length(var517, var518);
3324 var516 = var519;
3325 varonce515 = var516;
3326 }
3327 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var516) /* add on <var_v:SeparateCompilerVisitor>*/;
3328 if (varonce520) {
3329 var521 = varonce520;
3330 } else {
3331 var522 = "}";
3332 var523 = 1;
3333 var524 = string__NativeString__to_s_with_length(var522, var523);
3334 var521 = var524;
3335 varonce520 = var521;
3336 }
3337 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var521) /* add on <var_v:SeparateCompilerVisitor>*/;
3338 goto RET_LABEL;
3339 } else {
3340 var525 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__name]))(var_mclass) /* name on <var_mclass:MClass>*/;
3341 if (varonce526) {
3342 var527 = varonce526;
3343 } else {
3344 var528 = "NativeArray";
3345 var529 = 11;
3346 var530 = string__NativeString__to_s_with_length(var528, var529);
3347 var527 = var530;
3348 varonce526 = var527;
3349 }
3350 var531 = ((short int (*)(val*, val*))(var525->class->vft[COLOR_kernel__Object___61d_61d]))(var525, var527) /* == on <var525:String>*/;
3351 if (var531){
3352 var532 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3353 if (varonce533) {
3354 var534 = varonce533;
3355 } else {
3356 var535 = "struct instance_";
3357 var536 = 16;
3358 var537 = string__NativeString__to_s_with_length(var535, var536);
3359 var534 = var537;
3360 varonce533 = var534;
3361 }
3362 if (varonce538) {
3363 var539 = varonce538;
3364 } else {
3365 var540 = " {";
3366 var541 = 2;
3367 var542 = string__NativeString__to_s_with_length(var540, var541);
3368 var539 = var542;
3369 varonce538 = var539;
3370 }
3371 var543 = NEW_array__Array(&type_array__Arraykernel__Object);
3372 { /* var543 = array_instance Array[Object] */
3373 var544 = 3;
3374 var545 = NEW_array__NativeArray(var544, &type_array__NativeArraykernel__Object);
3375 ((struct instance_array__NativeArray*)var545)->values[0] = (val*) var534;
3376 ((struct instance_array__NativeArray*)var545)->values[1] = (val*) var_c_name;
3377 ((struct instance_array__NativeArray*)var545)->values[2] = (val*) var539;
3378 ((void (*)(val*, val*, long))(var543->class->vft[COLOR_array__Array__with_native]))(var543, var545, var544) /* with_native on <var543:Array[Object]>*/;
3379 CHECK_NEW_array__Array(var543);
3380 }
3381 var546 = ((val* (*)(val*))(var543->class->vft[COLOR_string__Object__to_s]))(var543) /* to_s on <var543:Array[Object]>*/;
3382 ((void (*)(val*, val*))(var532->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var532, var546) /* add_decl on <var532:CodeWriter>*/;
3383 var547 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3384 if (varonce548) {
3385 var549 = varonce548;
3386 } else {
3387 var550 = "const struct class *class;";
3388 var551 = 26;
3389 var552 = string__NativeString__to_s_with_length(var550, var551);
3390 var549 = var552;
3391 varonce548 = var549;
3392 }
3393 ((void (*)(val*, val*))(var547->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var547, var549) /* add_decl on <var547:CodeWriter>*/;
3394 var553 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3395 if (varonce554) {
3396 var555 = varonce554;
3397 } else {
3398 var556 = "val* values[];";
3399 var557 = 14;
3400 var558 = string__NativeString__to_s_with_length(var556, var557);
3401 var555 = var558;
3402 varonce554 = var555;
3403 }
3404 ((void (*)(val*, val*))(var553->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var553, var555) /* add_decl on <var553:CodeWriter>*/;
3405 var559 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(self) /* header on <self:SeparateErasureCompiler>*/;
3406 if (varonce560) {
3407 var561 = varonce560;
3408 } else {
3409 var562 = "};";
3410 var563 = 2;
3411 var564 = string__NativeString__to_s_with_length(var562, var563);
3412 var561 = var564;
3413 varonce560 = var561;
3414 }
3415 ((void (*)(val*, val*))(var559->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var559, var561) /* add_decl on <var559:CodeWriter>*/;
3416 if (varonce565) {
3417 var566 = varonce565;
3418 } else {
3419 var567 = "NEW_";
3420 var568 = 4;
3421 var569 = string__NativeString__to_s_with_length(var567, var568);
3422 var566 = var569;
3423 varonce565 = var566;
3424 }
3425 var570 = NEW_array__Array(&type_array__Arraykernel__Object);
3426 { /* var570 = array_instance Array[Object] */
3427 var571 = 2;
3428 var572 = NEW_array__NativeArray(var571, &type_array__NativeArraykernel__Object);
3429 ((struct instance_array__NativeArray*)var572)->values[0] = (val*) var566;
3430 ((struct instance_array__NativeArray*)var572)->values[1] = (val*) var_c_name;
3431 ((void (*)(val*, val*, long))(var570->class->vft[COLOR_array__Array__with_native]))(var570, var572, var571) /* with_native on <var570:Array[Object]>*/;
3432 CHECK_NEW_array__Array(var570);
3433 }
3434 var573 = ((val* (*)(val*))(var570->class->vft[COLOR_string__Object__to_s]))(var570) /* to_s on <var570:Array[Object]>*/;
3435 var574 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3436 if (varonce575) {
3437 var576 = varonce575;
3438 } else {
3439 var577 = " NEW_";
3440 var578 = 5;
3441 var579 = string__NativeString__to_s_with_length(var577, var578);
3442 var576 = var579;
3443 varonce575 = var576;
3444 }
3445 if (varonce580) {
3446 var581 = varonce580;
3447 } else {
3448 var582 = "(int length);";
3449 var583 = 13;
3450 var584 = string__NativeString__to_s_with_length(var582, var583);
3451 var581 = var584;
3452 varonce580 = var581;
3453 }
3454 var585 = NEW_array__Array(&type_array__Arraykernel__Object);
3455 { /* var585 = array_instance Array[Object] */
3456 var586 = 4;
3457 var587 = NEW_array__NativeArray(var586, &type_array__NativeArraykernel__Object);
3458 ((struct instance_array__NativeArray*)var587)->values[0] = (val*) var574;
3459 ((struct instance_array__NativeArray*)var587)->values[1] = (val*) var576;
3460 ((struct instance_array__NativeArray*)var587)->values[2] = (val*) var_c_name;
3461 ((struct instance_array__NativeArray*)var587)->values[3] = (val*) var581;
3462 ((void (*)(val*, val*, long))(var585->class->vft[COLOR_array__Array__with_native]))(var585, var587, var586) /* with_native on <var585:Array[Object]>*/;
3463 CHECK_NEW_array__Array(var585);
3464 }
3465 var588 = ((val* (*)(val*))(var585->class->vft[COLOR_string__Object__to_s]))(var585) /* to_s on <var585:Array[Object]>*/;
3466 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var573, var588) /* provide_declaration on <self:SeparateErasureCompiler>*/;
3467 if (varonce589) {
3468 var590 = varonce589;
3469 } else {
3470 var591 = "/* allocate ";
3471 var592 = 12;
3472 var593 = string__NativeString__to_s_with_length(var591, var592);
3473 var590 = var593;
3474 varonce589 = var590;
3475 }
3476 if (varonce594) {
3477 var595 = varonce594;
3478 } else {
3479 var596 = " */";
3480 var597 = 3;
3481 var598 = string__NativeString__to_s_with_length(var596, var597);
3482 var595 = var598;
3483 varonce594 = var595;
3484 }
3485 var599 = NEW_array__Array(&type_array__Arraykernel__Object);
3486 { /* var599 = array_instance Array[Object] */
3487 var600 = 3;
3488 var601 = NEW_array__NativeArray(var600, &type_array__NativeArraykernel__Object);
3489 ((struct instance_array__NativeArray*)var601)->values[0] = (val*) var590;
3490 ((struct instance_array__NativeArray*)var601)->values[1] = (val*) var_mtype;
3491 ((struct instance_array__NativeArray*)var601)->values[2] = (val*) var595;
3492 ((void (*)(val*, val*, long))(var599->class->vft[COLOR_array__Array__with_native]))(var599, var601, var600) /* with_native on <var599:Array[Object]>*/;
3493 CHECK_NEW_array__Array(var599);
3494 }
3495 var602 = ((val* (*)(val*))(var599->class->vft[COLOR_string__Object__to_s]))(var599) /* to_s on <var599:Array[Object]>*/;
3496 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var602) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3497 var603 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3498 if (varonce604) {
3499 var605 = varonce604;
3500 } else {
3501 var606 = " NEW_";
3502 var607 = 5;
3503 var608 = string__NativeString__to_s_with_length(var606, var607);
3504 var605 = var608;
3505 varonce604 = var605;
3506 }
3507 if (varonce609) {
3508 var610 = varonce609;
3509 } else {
3510 var611 = "(int length) {";
3511 var612 = 14;
3512 var613 = string__NativeString__to_s_with_length(var611, var612);
3513 var610 = var613;
3514 varonce609 = var610;
3515 }
3516 var614 = NEW_array__Array(&type_array__Arraykernel__Object);
3517 { /* var614 = array_instance Array[Object] */
3518 var615 = 4;
3519 var616 = NEW_array__NativeArray(var615, &type_array__NativeArraykernel__Object);
3520 ((struct instance_array__NativeArray*)var616)->values[0] = (val*) var603;
3521 ((struct instance_array__NativeArray*)var616)->values[1] = (val*) var605;
3522 ((struct instance_array__NativeArray*)var616)->values[2] = (val*) var_c_name;
3523 ((struct instance_array__NativeArray*)var616)->values[3] = (val*) var610;
3524 ((void (*)(val*, val*, long))(var614->class->vft[COLOR_array__Array__with_native]))(var614, var616, var615) /* with_native on <var614:Array[Object]>*/;
3525 CHECK_NEW_array__Array(var614);
3526 }
3527 var617 = ((val* (*)(val*))(var614->class->vft[COLOR_string__Object__to_s]))(var614) /* to_s on <var614:Array[Object]>*/;
3528 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var617) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3529 if (varonce618) {
3530 var619 = varonce618;
3531 } else {
3532 var620 = "self";
3533 var621 = 4;
3534 var622 = string__NativeString__to_s_with_length(var620, var621);
3535 var619 = var622;
3536 varonce618 = var619;
3537 }
3538 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>*/;
3539 var_res = var623;
3540 var624 = 1;
3541 ((void (*)(val*, short int))(var_res->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res, var624) /* is_exact= on <var_res:RuntimeVariable>*/;
3542 var625 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__arguments]))(var_mtype) /* arguments on <var_mtype:MClassType>*/;
3543 var626 = ((val* (*)(val*))(var625->class->vft[COLOR_abstract_collection__Collection__first]))(var625) /* first on <var625:Array[MType]>*/;
3544 var_mtype_elt = var626;
3545 if (varonce627) {
3546 var628 = varonce627;
3547 } else {
3548 var629 = " = nit_alloc(sizeof(struct instance_";
3549 var630 = 36;
3550 var631 = string__NativeString__to_s_with_length(var629, var630);
3551 var628 = var631;
3552 varonce627 = var628;
3553 }
3554 if (varonce632) {
3555 var633 = varonce632;
3556 } else {
3557 var634 = ") + length*sizeof(";
3558 var635 = 18;
3559 var636 = string__NativeString__to_s_with_length(var634, var635);
3560 var633 = var636;
3561 varonce632 = var633;
3562 }
3563 var637 = ((val* (*)(val*))(var_mtype_elt->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype_elt) /* ctype on <var_mtype_elt:MType>*/;
3564 if (varonce638) {
3565 var639 = varonce638;
3566 } else {
3567 var640 = "));";
3568 var641 = 3;
3569 var642 = string__NativeString__to_s_with_length(var640, var641);
3570 var639 = var642;
3571 varonce638 = var639;
3572 }
3573 var643 = NEW_array__Array(&type_array__Arraykernel__Object);
3574 { /* var643 = array_instance Array[Object] */
3575 var644 = 6;
3576 var645 = NEW_array__NativeArray(var644, &type_array__NativeArraykernel__Object);
3577 ((struct instance_array__NativeArray*)var645)->values[0] = (val*) var_res;
3578 ((struct instance_array__NativeArray*)var645)->values[1] = (val*) var628;
3579 ((struct instance_array__NativeArray*)var645)->values[2] = (val*) var_c_name;
3580 ((struct instance_array__NativeArray*)var645)->values[3] = (val*) var633;
3581 ((struct instance_array__NativeArray*)var645)->values[4] = (val*) var637;
3582 ((struct instance_array__NativeArray*)var645)->values[5] = (val*) var639;
3583 ((void (*)(val*, val*, long))(var643->class->vft[COLOR_array__Array__with_native]))(var643, var645, var644) /* with_native on <var643:Array[Object]>*/;
3584 CHECK_NEW_array__Array(var643);
3585 }
3586 var646 = ((val* (*)(val*))(var643->class->vft[COLOR_string__Object__to_s]))(var643) /* to_s on <var643:Array[Object]>*/;
3587 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var646) /* add on <var_v:SeparateCompilerVisitor>*/;
3588 if (varonce647) {
3589 var648 = varonce647;
3590 } else {
3591 var649 = "class_";
3592 var650 = 6;
3593 var651 = string__NativeString__to_s_with_length(var649, var650);
3594 var648 = var651;
3595 varonce647 = var648;
3596 }
3597 var652 = NEW_array__Array(&type_array__Arraykernel__Object);
3598 { /* var652 = array_instance Array[Object] */
3599 var653 = 2;
3600 var654 = NEW_array__NativeArray(var653, &type_array__NativeArraykernel__Object);
3601 ((struct instance_array__NativeArray*)var654)->values[0] = (val*) var648;
3602 ((struct instance_array__NativeArray*)var654)->values[1] = (val*) var_c_name;
3603 ((void (*)(val*, val*, long))(var652->class->vft[COLOR_array__Array__with_native]))(var652, var654, var653) /* with_native on <var652:Array[Object]>*/;
3604 CHECK_NEW_array__Array(var652);
3605 }
3606 var655 = ((val* (*)(val*))(var652->class->vft[COLOR_string__Object__to_s]))(var652) /* to_s on <var652:Array[Object]>*/;
3607 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var655) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3608 if (varonce656) {
3609 var657 = varonce656;
3610 } else {
3611 var658 = "->class = &class_";
3612 var659 = 17;
3613 var660 = string__NativeString__to_s_with_length(var658, var659);
3614 var657 = var660;
3615 varonce656 = var657;
3616 }
3617 if (varonce661) {
3618 var662 = varonce661;
3619 } else {
3620 var663 = ";";
3621 var664 = 1;
3622 var665 = string__NativeString__to_s_with_length(var663, var664);
3623 var662 = var665;
3624 varonce661 = var662;
3625 }
3626 var666 = NEW_array__Array(&type_array__Arraykernel__Object);
3627 { /* var666 = array_instance Array[Object] */
3628 var667 = 4;
3629 var668 = NEW_array__NativeArray(var667, &type_array__NativeArraykernel__Object);
3630 ((struct instance_array__NativeArray*)var668)->values[0] = (val*) var_res;
3631 ((struct instance_array__NativeArray*)var668)->values[1] = (val*) var657;
3632 ((struct instance_array__NativeArray*)var668)->values[2] = (val*) var_c_name;
3633 ((struct instance_array__NativeArray*)var668)->values[3] = (val*) var662;
3634 ((void (*)(val*, val*, long))(var666->class->vft[COLOR_array__Array__with_native]))(var666, var668, var667) /* with_native on <var666:Array[Object]>*/;
3635 CHECK_NEW_array__Array(var666);
3636 }
3637 var669 = ((val* (*)(val*))(var666->class->vft[COLOR_string__Object__to_s]))(var666) /* to_s on <var666:Array[Object]>*/;
3638 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var669) /* add on <var_v:SeparateCompilerVisitor>*/;
3639 if (varonce670) {
3640 var671 = varonce670;
3641 } else {
3642 var672 = "return ";
3643 var673 = 7;
3644 var674 = string__NativeString__to_s_with_length(var672, var673);
3645 var671 = var674;
3646 varonce670 = var671;
3647 }
3648 if (varonce675) {
3649 var676 = varonce675;
3650 } else {
3651 var677 = ";";
3652 var678 = 1;
3653 var679 = string__NativeString__to_s_with_length(var677, var678);
3654 var676 = var679;
3655 varonce675 = var676;
3656 }
3657 var680 = NEW_array__Array(&type_array__Arraykernel__Object);
3658 { /* var680 = array_instance Array[Object] */
3659 var681 = 3;
3660 var682 = NEW_array__NativeArray(var681, &type_array__NativeArraykernel__Object);
3661 ((struct instance_array__NativeArray*)var682)->values[0] = (val*) var671;
3662 ((struct instance_array__NativeArray*)var682)->values[1] = (val*) var_res;
3663 ((struct instance_array__NativeArray*)var682)->values[2] = (val*) var676;
3664 ((void (*)(val*, val*, long))(var680->class->vft[COLOR_array__Array__with_native]))(var680, var682, var681) /* with_native on <var680:Array[Object]>*/;
3665 CHECK_NEW_array__Array(var680);
3666 }
3667 var683 = ((val* (*)(val*))(var680->class->vft[COLOR_string__Object__to_s]))(var680) /* to_s on <var680:Array[Object]>*/;
3668 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var683) /* add on <var_v:SeparateCompilerVisitor>*/;
3669 if (varonce684) {
3670 var685 = varonce684;
3671 } else {
3672 var686 = "}";
3673 var687 = 1;
3674 var688 = string__NativeString__to_s_with_length(var686, var687);
3675 var685 = var688;
3676 varonce684 = var685;
3677 }
3678 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var685) /* add on <var_v:SeparateCompilerVisitor>*/;
3679 goto RET_LABEL;
3680 } else {
3681 }
3682 }
3683 if (varonce689) {
3684 var690 = varonce689;
3685 } else {
3686 var691 = "NEW_";
3687 var692 = 4;
3688 var693 = string__NativeString__to_s_with_length(var691, var692);
3689 var690 = var693;
3690 varonce689 = var690;
3691 }
3692 var694 = NEW_array__Array(&type_array__Arraykernel__Object);
3693 { /* var694 = array_instance Array[Object] */
3694 var695 = 2;
3695 var696 = NEW_array__NativeArray(var695, &type_array__NativeArraykernel__Object);
3696 ((struct instance_array__NativeArray*)var696)->values[0] = (val*) var690;
3697 ((struct instance_array__NativeArray*)var696)->values[1] = (val*) var_c_name;
3698 ((void (*)(val*, val*, long))(var694->class->vft[COLOR_array__Array__with_native]))(var694, var696, var695) /* with_native on <var694:Array[Object]>*/;
3699 CHECK_NEW_array__Array(var694);
3700 }
3701 var697 = ((val* (*)(val*))(var694->class->vft[COLOR_string__Object__to_s]))(var694) /* to_s on <var694:Array[Object]>*/;
3702 var698 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3703 if (varonce699) {
3704 var700 = varonce699;
3705 } else {
3706 var701 = " NEW_";
3707 var702 = 5;
3708 var703 = string__NativeString__to_s_with_length(var701, var702);
3709 var700 = var703;
3710 varonce699 = var700;
3711 }
3712 if (varonce704) {
3713 var705 = varonce704;
3714 } else {
3715 var706 = "(void);";
3716 var707 = 7;
3717 var708 = string__NativeString__to_s_with_length(var706, var707);
3718 var705 = var708;
3719 varonce704 = var705;
3720 }
3721 var709 = NEW_array__Array(&type_array__Arraykernel__Object);
3722 { /* var709 = array_instance Array[Object] */
3723 var710 = 4;
3724 var711 = NEW_array__NativeArray(var710, &type_array__NativeArraykernel__Object);
3725 ((struct instance_array__NativeArray*)var711)->values[0] = (val*) var698;
3726 ((struct instance_array__NativeArray*)var711)->values[1] = (val*) var700;
3727 ((struct instance_array__NativeArray*)var711)->values[2] = (val*) var_c_name;
3728 ((struct instance_array__NativeArray*)var711)->values[3] = (val*) var705;
3729 ((void (*)(val*, val*, long))(var709->class->vft[COLOR_array__Array__with_native]))(var709, var711, var710) /* with_native on <var709:Array[Object]>*/;
3730 CHECK_NEW_array__Array(var709);
3731 }
3732 var712 = ((val* (*)(val*))(var709->class->vft[COLOR_string__Object__to_s]))(var709) /* to_s on <var709:Array[Object]>*/;
3733 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var697, var712) /* provide_declaration on <self:SeparateErasureCompiler>*/;
3734 if (varonce713) {
3735 var714 = varonce713;
3736 } else {
3737 var715 = "/* allocate ";
3738 var716 = 12;
3739 var717 = string__NativeString__to_s_with_length(var715, var716);
3740 var714 = var717;
3741 varonce713 = var714;
3742 }
3743 if (varonce718) {
3744 var719 = varonce718;
3745 } else {
3746 var720 = " */";
3747 var721 = 3;
3748 var722 = string__NativeString__to_s_with_length(var720, var721);
3749 var719 = var722;
3750 varonce718 = var719;
3751 }
3752 var723 = NEW_array__Array(&type_array__Arraykernel__Object);
3753 { /* var723 = array_instance Array[Object] */
3754 var724 = 3;
3755 var725 = NEW_array__NativeArray(var724, &type_array__NativeArraykernel__Object);
3756 ((struct instance_array__NativeArray*)var725)->values[0] = (val*) var714;
3757 ((struct instance_array__NativeArray*)var725)->values[1] = (val*) var_mtype;
3758 ((struct instance_array__NativeArray*)var725)->values[2] = (val*) var719;
3759 ((void (*)(val*, val*, long))(var723->class->vft[COLOR_array__Array__with_native]))(var723, var725, var724) /* with_native on <var723:Array[Object]>*/;
3760 CHECK_NEW_array__Array(var723);
3761 }
3762 var726 = ((val* (*)(val*))(var723->class->vft[COLOR_string__Object__to_s]))(var723) /* to_s on <var723:Array[Object]>*/;
3763 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var726) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3764 var727 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_abstract_compiler__MType__ctype]))(var_mtype) /* ctype on <var_mtype:MClassType>*/;
3765 if (varonce728) {
3766 var729 = varonce728;
3767 } else {
3768 var730 = " NEW_";
3769 var731 = 5;
3770 var732 = string__NativeString__to_s_with_length(var730, var731);
3771 var729 = var732;
3772 varonce728 = var729;
3773 }
3774 if (varonce733) {
3775 var734 = varonce733;
3776 } else {
3777 var735 = "(void) {";
3778 var736 = 8;
3779 var737 = string__NativeString__to_s_with_length(var735, var736);
3780 var734 = var737;
3781 varonce733 = var734;
3782 }
3783 var738 = NEW_array__Array(&type_array__Arraykernel__Object);
3784 { /* var738 = array_instance Array[Object] */
3785 var739 = 4;
3786 var740 = NEW_array__NativeArray(var739, &type_array__NativeArraykernel__Object);
3787 ((struct instance_array__NativeArray*)var740)->values[0] = (val*) var727;
3788 ((struct instance_array__NativeArray*)var740)->values[1] = (val*) var729;
3789 ((struct instance_array__NativeArray*)var740)->values[2] = (val*) var_c_name;
3790 ((struct instance_array__NativeArray*)var740)->values[3] = (val*) var734;
3791 ((void (*)(val*, val*, long))(var738->class->vft[COLOR_array__Array__with_native]))(var738, var740, var739) /* with_native on <var738:Array[Object]>*/;
3792 CHECK_NEW_array__Array(var738);
3793 }
3794 var741 = ((val* (*)(val*))(var738->class->vft[COLOR_string__Object__to_s]))(var738) /* to_s on <var738:Array[Object]>*/;
3795 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var741) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
3796 if (varonce742) {
3797 var743 = varonce742;
3798 } else {
3799 var744 = "self";
3800 var745 = 4;
3801 var746 = string__NativeString__to_s_with_length(var744, var745);
3802 var743 = var746;
3803 varonce742 = var743;
3804 }
3805 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>*/;
3806 var_res748 = var747;
3807 var749 = 1;
3808 ((void (*)(val*, short int))(var_res748->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_res748, var749) /* is_exact= on <var_res748:RuntimeVariable>*/;
3809 if (varonce750) {
3810 var751 = varonce750;
3811 } else {
3812 var752 = " = nit_alloc(sizeof(struct instance) + ";
3813 var753 = 39;
3814 var754 = string__NativeString__to_s_with_length(var752, var753);
3815 var751 = var754;
3816 varonce750 = var751;
3817 }
3818 var755 = ((long (*)(val*))(var_attrs->class->vft[COLOR_abstract_collection__Collection__length]))(var_attrs) /* length on <var_attrs:Array[nullable MPropDef]>*/;
3819 if (varonce756) {
3820 var757 = varonce756;
3821 } else {
3822 var758 = "*sizeof(nitattribute_t));";
3823 var759 = 25;
3824 var760 = string__NativeString__to_s_with_length(var758, var759);
3825 var757 = var760;
3826 varonce756 = var757;
3827 }
3828 var761 = NEW_array__Array(&type_array__Arraykernel__Object);
3829 { /* var761 = array_instance Array[Object] */
3830 var762 = 4;
3831 var763 = NEW_array__NativeArray(var762, &type_array__NativeArraykernel__Object);
3832 ((struct instance_array__NativeArray*)var763)->values[0] = (val*) var_res748;
3833 ((struct instance_array__NativeArray*)var763)->values[1] = (val*) var751;
3834 var764 = BOX_kernel__Int(var755); /* autobox from Int to Object */
3835 ((struct instance_array__NativeArray*)var763)->values[2] = (val*) var764;
3836 ((struct instance_array__NativeArray*)var763)->values[3] = (val*) var757;
3837 ((void (*)(val*, val*, long))(var761->class->vft[COLOR_array__Array__with_native]))(var761, var763, var762) /* with_native on <var761:Array[Object]>*/;
3838 CHECK_NEW_array__Array(var761);
3839 }
3840 var765 = ((val* (*)(val*))(var761->class->vft[COLOR_string__Object__to_s]))(var761) /* to_s on <var761:Array[Object]>*/;
3841 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var765) /* add on <var_v:SeparateCompilerVisitor>*/;
3842 if (varonce766) {
3843 var767 = varonce766;
3844 } else {
3845 var768 = "class_";
3846 var769 = 6;
3847 var770 = string__NativeString__to_s_with_length(var768, var769);
3848 var767 = var770;
3849 varonce766 = var767;
3850 }
3851 var771 = NEW_array__Array(&type_array__Arraykernel__Object);
3852 { /* var771 = array_instance Array[Object] */
3853 var772 = 2;
3854 var773 = NEW_array__NativeArray(var772, &type_array__NativeArraykernel__Object);
3855 ((struct instance_array__NativeArray*)var773)->values[0] = (val*) var767;
3856 ((struct instance_array__NativeArray*)var773)->values[1] = (val*) var_c_name;
3857 ((void (*)(val*, val*, long))(var771->class->vft[COLOR_array__Array__with_native]))(var771, var773, var772) /* with_native on <var771:Array[Object]>*/;
3858 CHECK_NEW_array__Array(var771);
3859 }
3860 var774 = ((val* (*)(val*))(var771->class->vft[COLOR_string__Object__to_s]))(var771) /* to_s on <var771:Array[Object]>*/;
3861 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var774) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
3862 if (varonce775) {
3863 var776 = varonce775;
3864 } else {
3865 var777 = "->class = &class_";
3866 var778 = 17;
3867 var779 = string__NativeString__to_s_with_length(var777, var778);
3868 var776 = var779;
3869 varonce775 = var776;
3870 }
3871 if (varonce780) {
3872 var781 = varonce780;
3873 } else {
3874 var782 = ";";
3875 var783 = 1;
3876 var784 = string__NativeString__to_s_with_length(var782, var783);
3877 var781 = var784;
3878 varonce780 = var781;
3879 }
3880 var785 = NEW_array__Array(&type_array__Arraykernel__Object);
3881 { /* var785 = array_instance Array[Object] */
3882 var786 = 4;
3883 var787 = NEW_array__NativeArray(var786, &type_array__NativeArraykernel__Object);
3884 ((struct instance_array__NativeArray*)var787)->values[0] = (val*) var_res748;
3885 ((struct instance_array__NativeArray*)var787)->values[1] = (val*) var776;
3886 ((struct instance_array__NativeArray*)var787)->values[2] = (val*) var_c_name;
3887 ((struct instance_array__NativeArray*)var787)->values[3] = (val*) var781;
3888 ((void (*)(val*, val*, long))(var785->class->vft[COLOR_array__Array__with_native]))(var785, var787, var786) /* with_native on <var785:Array[Object]>*/;
3889 CHECK_NEW_array__Array(var785);
3890 }
3891 var788 = ((val* (*)(val*))(var785->class->vft[COLOR_string__Object__to_s]))(var785) /* to_s on <var785:Array[Object]>*/;
3892 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var788) /* add on <var_v:SeparateCompilerVisitor>*/;
3893 ((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>*/;
3894 if (varonce789) {
3895 var790 = varonce789;
3896 } else {
3897 var791 = "return ";
3898 var792 = 7;
3899 var793 = string__NativeString__to_s_with_length(var791, var792);
3900 var790 = var793;
3901 varonce789 = var790;
3902 }
3903 if (varonce794) {
3904 var795 = varonce794;
3905 } else {
3906 var796 = ";";
3907 var797 = 1;
3908 var798 = string__NativeString__to_s_with_length(var796, var797);
3909 var795 = var798;
3910 varonce794 = var795;
3911 }
3912 var799 = NEW_array__Array(&type_array__Arraykernel__Object);
3913 { /* var799 = array_instance Array[Object] */
3914 var800 = 3;
3915 var801 = NEW_array__NativeArray(var800, &type_array__NativeArraykernel__Object);
3916 ((struct instance_array__NativeArray*)var801)->values[0] = (val*) var790;
3917 ((struct instance_array__NativeArray*)var801)->values[1] = (val*) var_res748;
3918 ((struct instance_array__NativeArray*)var801)->values[2] = (val*) var795;
3919 ((void (*)(val*, val*, long))(var799->class->vft[COLOR_array__Array__with_native]))(var799, var801, var800) /* with_native on <var799:Array[Object]>*/;
3920 CHECK_NEW_array__Array(var799);
3921 }
3922 var802 = ((val* (*)(val*))(var799->class->vft[COLOR_string__Object__to_s]))(var799) /* to_s on <var799:Array[Object]>*/;
3923 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var802) /* add on <var_v:SeparateCompilerVisitor>*/;
3924 if (varonce803) {
3925 var804 = varonce803;
3926 } else {
3927 var805 = "}";
3928 var806 = 1;
3929 var807 = string__NativeString__to_s_with_length(var805, var806);
3930 var804 = var807;
3931 varonce803 = var804;
3932 }
3933 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(var_v, var804) /* add on <var_v:SeparateCompilerVisitor>*/;
3934 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__generate_check_init_instance]))(self, var_mtype) /* generate_check_init_instance on <self:SeparateErasureCompiler>*/;
3935 RET_LABEL:;
3936 }
3937 /* method separate_erasure_compiler#SeparateErasureCompiler#compile_class_to_c for (self: Object, MClass) */
3938 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(val* self, val* p0) {
3939 separate_erasure_compiler__SeparateErasureCompiler__compile_class_to_c(self, p0);
3940 RET_LABEL:;
3941 }
3942 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: SeparateErasureCompiler, MClass): Bool */
3943 short int separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
3944 short int var /* : Bool */;
3945 val* var_mclass /* var mclass: MClass */;
3946 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
3947 val* var2 /* : nullable Object */;
3948 short int var3 /* : Bool */;
3949 short int var4 /* : Bool */;
3950 static val* varonce;
3951 val* var5 /* : String */;
3952 char* var6 /* : NativeString */;
3953 long var7 /* : Int */;
3954 val* var8 /* : String */;
3955 val* var9 /* : String */;
3956 val* var10 /* : Array[Object] */;
3957 long var11 /* : Int */;
3958 val* var12 /* : NativeArray[Object] */;
3959 val* var13 /* : String */;
3960 static val* varonce14;
3961 val* var15 /* : String */;
3962 char* var16 /* : NativeString */;
3963 long var17 /* : Int */;
3964 val* var18 /* : String */;
3965 val* var19 /* : String */;
3966 static val* varonce20;
3967 val* var21 /* : String */;
3968 char* var22 /* : NativeString */;
3969 long var23 /* : Int */;
3970 val* var24 /* : String */;
3971 val* var25 /* : Array[Object] */;
3972 long var26 /* : Int */;
3973 val* var27 /* : NativeArray[Object] */;
3974 val* var28 /* : String */;
3975 val* var29 /* : AbstractCompilerVisitor */;
3976 val* var_v /* var v: SeparateCompilerVisitor */;
3977 static val* varonce30;
3978 val* var31 /* : String */;
3979 char* var32 /* : NativeString */;
3980 long var33 /* : Int */;
3981 val* var34 /* : String */;
3982 val* var35 /* : String */;
3983 static val* varonce36;
3984 val* var37 /* : String */;
3985 char* var38 /* : NativeString */;
3986 long var39 /* : Int */;
3987 val* var40 /* : String */;
3988 val* var41 /* : Array[Object] */;
3989 long var42 /* : Int */;
3990 val* var43 /* : NativeArray[Object] */;
3991 val* var44 /* : String */;
3992 val* var45 /* : nullable Layout[MVirtualTypeProp] */;
3993 short int var46 /* : Bool */;
3994 int cltype;
3995 int idtype;
3996 static val* varonce47;
3997 val* var48 /* : String */;
3998 char* var49 /* : NativeString */;
3999 long var50 /* : Int */;
4000 val* var51 /* : String */;
4001 static val* varonce52;
4002 val* var53 /* : String */;
4003 char* var54 /* : NativeString */;
4004 long var55 /* : Int */;
4005 val* var56 /* : String */;
4006 val* var57 /* : Map[MClass, Array[nullable MPropDef]] */;
4007 val* var58 /* : nullable Object */;
4008 val* var59 /* : Iterator[nullable Object] */;
4009 short int var60 /* : Bool */;
4010 val* var61 /* : nullable Object */;
4011 val* var_vt /* var vt: nullable MPropDef */;
4012 val* var62 /* : null */;
4013 short int var63 /* : Bool */;
4014 static val* varonce64;
4015 val* var65 /* : String */;
4016 char* var66 /* : NativeString */;
4017 long var67 /* : Int */;
4018 val* var68 /* : String */;
4019 long var69 /* : Int */;
4020 long var_is_null /* var is_null: Int */;
4021 val* var70 /* : MClassDef */;
4022 val* var71 /* : MClassType */;
4023 short int var72 /* : Bool */;
4024 int cltype73;
4025 int idtype74;
4026 val* var75 /* : nullable MType */;
4027 val* var76 /* : MType */;
4028 val* var_bound /* var bound: MType */;
4029 short int var77 /* : Bool */;
4030 int cltype78;
4031 int idtype79;
4032 val* var80 /* : MClassDef */;
4033 val* var81 /* : MClassType */;
4034 val* var82 /* : MType */;
4035 val* var83 /* : MType */;
4036 long var84 /* : Int */;
4037 short int var85 /* : Bool */;
4038 int cltype86;
4039 int idtype87;
4040 val* var88 /* : MClass */;
4041 val* var_vtclass /* var vtclass: MClass */;
4042 static val* varonce89;
4043 val* var90 /* : String */;
4044 char* var91 /* : NativeString */;
4045 long var92 /* : Int */;
4046 val* var93 /* : String */;
4047 val* var94 /* : String */;
4048 val* var95 /* : Array[Object] */;
4049 long var96 /* : Int */;
4050 val* var97 /* : NativeArray[Object] */;
4051 val* var98 /* : String */;
4052 static val* varonce99;
4053 val* var100 /* : String */;
4054 char* var101 /* : NativeString */;
4055 long var102 /* : Int */;
4056 val* var103 /* : String */;
4057 static val* varonce104;
4058 val* var105 /* : String */;
4059 char* var106 /* : NativeString */;
4060 long var107 /* : Int */;
4061 val* var108 /* : String */;
4062 val* var109 /* : String */;
4063 static val* varonce110;
4064 val* var111 /* : String */;
4065 char* var112 /* : NativeString */;
4066 long var113 /* : Int */;
4067 val* var114 /* : String */;
4068 static val* varonce115;
4069 val* var116 /* : String */;
4070 char* var117 /* : NativeString */;
4071 long var118 /* : Int */;
4072 val* var119 /* : String */;
4073 val* var120 /* : Array[Object] */;
4074 long var121 /* : Int */;
4075 val* var122 /* : NativeArray[Object] */;
4076 val* var123 /* : Object */;
4077 val* var124 /* : String */;
4078 static val* varonce126;
4079 val* var127 /* : String */;
4080 char* var128 /* : NativeString */;
4081 long var129 /* : Int */;
4082 val* var130 /* : String */;
4083 static val* varonce131;
4084 val* var132 /* : String */;
4085 char* var133 /* : NativeString */;
4086 long var134 /* : Int */;
4087 val* var135 /* : String */;
4088 short int var136 /* : Bool */;
4089 var_mclass = p0;
4090 var1 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4091 var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var1, var_mclass) /* [] on <var1:Map[MClass, Array[nullable MPropDef]]>*/;
4092 var3 = ((short int (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var2) /* is_empty on <var2:nullable Object(Array[nullable MPropDef])>*/;
4093 if (var3){
4094 var4 = 0;
4095 var = var4;
4096 goto RET_LABEL;
4097 } else {
4098 }
4099 if (varonce) {
4100 var5 = varonce;
4101 } else {
4102 var6 = "vts_table_";
4103 var7 = 10;
4104 var8 = string__NativeString__to_s_with_length(var6, var7);
4105 var5 = var8;
4106 varonce = var5;
4107 }
4108 var9 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4109 var10 = NEW_array__Array(&type_array__Arraykernel__Object);
4110 { /* var10 = array_instance Array[Object] */
4111 var11 = 2;
4112 var12 = NEW_array__NativeArray(var11, &type_array__NativeArraykernel__Object);
4113 ((struct instance_array__NativeArray*)var12)->values[0] = (val*) var5;
4114 ((struct instance_array__NativeArray*)var12)->values[1] = (val*) var9;
4115 ((void (*)(val*, val*, long))(var10->class->vft[COLOR_array__Array__with_native]))(var10, var12, var11) /* with_native on <var10:Array[Object]>*/;
4116 CHECK_NEW_array__Array(var10);
4117 }
4118 var13 = ((val* (*)(val*))(var10->class->vft[COLOR_string__Object__to_s]))(var10) /* to_s on <var10:Array[Object]>*/;
4119 if (varonce14) {
4120 var15 = varonce14;
4121 } else {
4122 var16 = "extern const struct vts_table vts_table_";
4123 var17 = 40;
4124 var18 = string__NativeString__to_s_with_length(var16, var17);
4125 var15 = var18;
4126 varonce14 = var15;
4127 }
4128 var19 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4129 if (varonce20) {
4130 var21 = varonce20;
4131 } else {
4132 var22 = ";";
4133 var23 = 1;
4134 var24 = string__NativeString__to_s_with_length(var22, var23);
4135 var21 = var24;
4136 varonce20 = var21;
4137 }
4138 var25 = NEW_array__Array(&type_array__Arraykernel__Object);
4139 { /* var25 = array_instance Array[Object] */
4140 var26 = 3;
4141 var27 = NEW_array__NativeArray(var26, &type_array__NativeArraykernel__Object);
4142 ((struct instance_array__NativeArray*)var27)->values[0] = (val*) var15;
4143 ((struct instance_array__NativeArray*)var27)->values[1] = (val*) var19;
4144 ((struct instance_array__NativeArray*)var27)->values[2] = (val*) var21;
4145 ((void (*)(val*, val*, long))(var25->class->vft[COLOR_array__Array__with_native]))(var25, var27, var26) /* with_native on <var25:Array[Object]>*/;
4146 CHECK_NEW_array__Array(var25);
4147 }
4148 var28 = ((val* (*)(val*))(var25->class->vft[COLOR_string__Object__to_s]))(var25) /* to_s on <var25:Array[Object]>*/;
4149 ((void (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__provide_declaration]))(self, var13, var28) /* provide_declaration on <self:SeparateErasureCompiler>*/;
4150 var29 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:SeparateErasureCompiler>*/;
4151 var_v = var29;
4152 if (varonce30) {
4153 var31 = varonce30;
4154 } else {
4155 var32 = "const struct vts_table vts_table_";
4156 var33 = 33;
4157 var34 = string__NativeString__to_s_with_length(var32, var33);
4158 var31 = var34;
4159 varonce30 = var31;
4160 }
4161 var35 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
4162 if (varonce36) {
4163 var37 = varonce36;
4164 } else {
4165 var38 = " = {";
4166 var39 = 4;
4167 var40 = string__NativeString__to_s_with_length(var38, var39);
4168 var37 = var40;
4169 varonce36 = var37;
4170 }
4171 var41 = NEW_array__Array(&type_array__Arraykernel__Object);
4172 { /* var41 = array_instance Array[Object] */
4173 var42 = 3;
4174 var43 = NEW_array__NativeArray(var42, &type_array__NativeArraykernel__Object);
4175 ((struct instance_array__NativeArray*)var43)->values[0] = (val*) var31;
4176 ((struct instance_array__NativeArray*)var43)->values[1] = (val*) var35;
4177 ((struct instance_array__NativeArray*)var43)->values[2] = (val*) var37;
4178 ((void (*)(val*, val*, long))(var41->class->vft[COLOR_array__Array__with_native]))(var41, var43, var42) /* with_native on <var41:Array[Object]>*/;
4179 CHECK_NEW_array__Array(var41);
4180 }
4181 var44 = ((val* (*)(val*))(var41->class->vft[COLOR_string__Object__to_s]))(var41) /* to_s on <var41:Array[Object]>*/;
4182 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var44) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4183 var45 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(self) /* vt_layout on <self:SeparateErasureCompiler>*/;
4184 /* <var45:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
4185 cltype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
4186 idtype = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
4187 if(var45 == NULL) {
4188 var46 = 0;
4189 } else {
4190 if(cltype >= var45->type->table_size) {
4191 var46 = 0;
4192 } else {
4193 var46 = var45->type->type_table[cltype] == idtype;
4194 }
4195 }
4196 if (var46){
4197 } else {
4198 if (varonce47) {
4199 var48 = varonce47;
4200 } else {
4201 var49 = "0, /* dummy */";
4202 var50 = 14;
4203 var51 = string__NativeString__to_s_with_length(var49, var50);
4204 var48 = var51;
4205 varonce47 = var48;
4206 }
4207 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var48) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4208 }
4209 if (varonce52) {
4210 var53 = varonce52;
4211 } else {
4212 var54 = "{";
4213 var55 = 1;
4214 var56 = string__NativeString__to_s_with_length(var54, var55);
4215 var53 = var56;
4216 varonce52 = var53;
4217 }
4218 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var53) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4219 var57 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4220 var58 = ((val* (*)(val*, val*))(var57->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var57, var_mclass) /* [] on <var57:Map[MClass, Array[nullable MPropDef]]>*/;
4221 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__Collection__iterator]))(var58) /* iterator on <var58:nullable Object(Array[nullable MPropDef])>*/;
4222 for(;;) {
4223 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var59) /* is_ok on <var59:Iterator[nullable Object]>*/;
4224 if(!var60) break;
4225 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__item]))(var59) /* item on <var59:Iterator[nullable Object]>*/;
4226 var_vt = var61;
4227 var62 = NULL;
4228 if (var_vt == NULL) {
4229 var63 = 1; /* is null */
4230 } else {
4231 var63 = 0; /* arg is null but recv is not */
4232 }
4233 if (var63){
4234 if (varonce64) {
4235 var65 = varonce64;
4236 } else {
4237 var66 = "{-1, NULL}, /* empty */";
4238 var67 = 23;
4239 var68 = string__NativeString__to_s_with_length(var66, var67);
4240 var65 = var68;
4241 varonce64 = var65;
4242 }
4243 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var65) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4244 } else {
4245 var69 = 0;
4246 var_is_null = var69;
4247 var70 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
4248 var71 = ((val* (*)(val*))(var70->class->vft[COLOR_model__MClassDef__bound_mtype]))(var70) /* bound_mtype on <var70:MClassDef>*/;
4249 /* <var_vt:nullable MPropDef(MPropDef)> isa MVirtualTypeDef */
4250 cltype73 = type_model__MVirtualTypeDef.color;
4251 idtype74 = type_model__MVirtualTypeDef.id;
4252 if(cltype73 >= var_vt->type->table_size) {
4253 var72 = 0;
4254 } else {
4255 var72 = var_vt->type->type_table[cltype73] == idtype74;
4256 }
4257 if (!var72) {
4258 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/separate_erasure_compiler.nit", 360);
4259 exit(1);
4260 }
4261 var75 = ((val* (*)(val*))(var_vt->class->vft[COLOR_model__MVirtualTypeDef__bound]))(var_vt) /* bound on <var_vt:MPropDef(MVirtualTypeDef)>*/;
4262 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>*/;
4263 var_bound = var76;
4264 for(;;) {
4265 /* <var_bound:MType> isa MNullableType */
4266 cltype78 = type_model__MNullableType.color;
4267 idtype79 = type_model__MNullableType.id;
4268 if(cltype78 >= var_bound->type->table_size) {
4269 var77 = 0;
4270 } else {
4271 var77 = var_bound->type->type_table[cltype78] == idtype79;
4272 }
4273 if (!var77) break;
4274 var80 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro]))(var_mclass) /* intro on <var_mclass:MClass>*/;
4275 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_model__MClassDef__bound_mtype]))(var80) /* bound_mtype on <var80:MClassDef>*/;
4276 var82 = ((val* (*)(val*))(var_bound->class->vft[COLOR_model__MNullableType__mtype]))(var_bound) /* mtype on <var_bound:MType(MNullableType)>*/;
4277 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>*/;
4278 var_bound = var83;
4279 var84 = 1;
4280 var_is_null = var84;
4281 CONTINUE_label: (void)0;
4282 }
4283 BREAK_label: (void)0;
4284 /* <var_bound:MType> isa MClassType */
4285 cltype86 = type_model__MClassType.color;
4286 idtype87 = type_model__MClassType.id;
4287 if(cltype86 >= var_bound->type->table_size) {
4288 var85 = 0;
4289 } else {
4290 var85 = var_bound->type->type_table[cltype86] == idtype87;
4291 }
4292 if (!var85) {
4293 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/separate_erasure_compiler.nit", 365);
4294 exit(1);
4295 }
4296 var88 = ((val* (*)(val*))(var_bound->class->vft[COLOR_model__MClassType__mclass]))(var_bound) /* mclass on <var_bound:MType(MClassType)>*/;
4297 var_vtclass = var88;
4298 if (varonce89) {
4299 var90 = varonce89;
4300 } else {
4301 var91 = "class_";
4302 var92 = 6;
4303 var93 = string__NativeString__to_s_with_length(var91, var92);
4304 var90 = var93;
4305 varonce89 = var90;
4306 }
4307 var94 = ((val* (*)(val*))(var_vtclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_vtclass) /* c_name on <var_vtclass:MClass>*/;
4308 var95 = NEW_array__Array(&type_array__Arraykernel__Object);
4309 { /* var95 = array_instance Array[Object] */
4310 var96 = 2;
4311 var97 = NEW_array__NativeArray(var96, &type_array__NativeArraykernel__Object);
4312 ((struct instance_array__NativeArray*)var97)->values[0] = (val*) var90;
4313 ((struct instance_array__NativeArray*)var97)->values[1] = (val*) var94;
4314 ((void (*)(val*, val*, long))(var95->class->vft[COLOR_array__Array__with_native]))(var95, var97, var96) /* with_native on <var95:Array[Object]>*/;
4315 CHECK_NEW_array__Array(var95);
4316 }
4317 var98 = ((val* (*)(val*))(var95->class->vft[COLOR_string__Object__to_s]))(var95) /* to_s on <var95:Array[Object]>*/;
4318 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(var_v, var98) /* require_declaration on <var_v:SeparateCompilerVisitor>*/;
4319 if (varonce99) {
4320 var100 = varonce99;
4321 } else {
4322 var101 = "{";
4323 var102 = 1;
4324 var103 = string__NativeString__to_s_with_length(var101, var102);
4325 var100 = var103;
4326 varonce99 = var100;
4327 }
4328 if (varonce104) {
4329 var105 = varonce104;
4330 } else {
4331 var106 = ", &class_";
4332 var107 = 9;
4333 var108 = string__NativeString__to_s_with_length(var106, var107);
4334 var105 = var108;
4335 varonce104 = var105;
4336 }
4337 var109 = ((val* (*)(val*))(var_vtclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_vtclass) /* c_name on <var_vtclass:MClass>*/;
4338 if (varonce110) {
4339 var111 = varonce110;
4340 } else {
4341 var112 = "}, /* ";
4342 var113 = 6;
4343 var114 = string__NativeString__to_s_with_length(var112, var113);
4344 var111 = var114;
4345 varonce110 = var111;
4346 }
4347 if (varonce115) {
4348 var116 = varonce115;
4349 } else {
4350 var117 = " */";
4351 var118 = 3;
4352 var119 = string__NativeString__to_s_with_length(var117, var118);
4353 var116 = var119;
4354 varonce115 = var116;
4355 }
4356 var120 = NEW_array__Array(&type_array__Arraykernel__Object);
4357 { /* var120 = array_instance Array[Object] */
4358 var121 = 7;
4359 var122 = NEW_array__NativeArray(var121, &type_array__NativeArraykernel__Object);
4360 ((struct instance_array__NativeArray*)var122)->values[0] = (val*) var100;
4361 var123 = BOX_kernel__Int(var_is_null); /* autobox from Int to Object */
4362 ((struct instance_array__NativeArray*)var122)->values[1] = (val*) var123;
4363 ((struct instance_array__NativeArray*)var122)->values[2] = (val*) var105;
4364 ((struct instance_array__NativeArray*)var122)->values[3] = (val*) var109;
4365 ((struct instance_array__NativeArray*)var122)->values[4] = (val*) var111;
4366 ((struct instance_array__NativeArray*)var122)->values[5] = (val*) var_vt;
4367 ((struct instance_array__NativeArray*)var122)->values[6] = (val*) var116;
4368 ((void (*)(val*, val*, long))(var120->class->vft[COLOR_array__Array__with_native]))(var120, var122, var121) /* with_native on <var120:Array[Object]>*/;
4369 CHECK_NEW_array__Array(var120);
4370 }
4371 var124 = ((val* (*)(val*))(var120->class->vft[COLOR_string__Object__to_s]))(var120) /* to_s on <var120:Array[Object]>*/;
4372 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var124) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4373 }
4374 CONTINUE_label125: (void)0;
4375 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__Iterator__next]))(var59) /* next on <var59:Iterator[nullable Object]>*/;
4376 }
4377 BREAK_label125: (void)0;
4378 if (varonce126) {
4379 var127 = varonce126;
4380 } else {
4381 var128 = "},";
4382 var129 = 2;
4383 var130 = string__NativeString__to_s_with_length(var128, var129);
4384 var127 = var130;
4385 varonce126 = var127;
4386 }
4387 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var127) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4388 if (varonce131) {
4389 var132 = varonce131;
4390 } else {
4391 var133 = "};";
4392 var134 = 2;
4393 var135 = string__NativeString__to_s_with_length(var133, var134);
4394 var132 = var135;
4395 varonce131 = var132;
4396 }
4397 ((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var132) /* add_decl on <var_v:SeparateCompilerVisitor>*/;
4398 var136 = 1;
4399 var = var136;
4400 goto RET_LABEL;
4401 RET_LABEL:;
4402 return var;
4403 }
4404 /* method separate_erasure_compiler#SeparateErasureCompiler#build_class_vts_table for (self: Object, MClass): Bool */
4405 short int VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(val* self, val* p0) {
4406 short int var /* : Bool */;
4407 short int var1 /* : Bool */;
4408 var1 = separate_erasure_compiler__SeparateErasureCompiler__build_class_vts_table(self, p0);
4409 var = var1;
4410 RET_LABEL:;
4411 return var;
4412 }
4413 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: SeparateErasureCompiler, MClassType, nullable MType): MType */
4414 val* separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
4415 val* var /* : MType */;
4416 val* var_anchor /* var anchor: MClassType */;
4417 val* var_mtype /* var mtype: nullable MType */;
4418 val* var1 /* : null */;
4419 short int var2 /* : Bool */;
4420 static val* varonce;
4421 val* var3 /* : String */;
4422 char* var4 /* : NativeString */;
4423 long var5 /* : Int */;
4424 val* var6 /* : String */;
4425 short int var7 /* : Bool */;
4426 int cltype;
4427 int idtype;
4428 val* var8 /* : MModule */;
4429 val* var9 /* : MType */;
4430 short int var10 /* : Bool */;
4431 int cltype11;
4432 int idtype12;
4433 val* var13 /* : MModule */;
4434 val* var14 /* : MType */;
4435 var_anchor = p0;
4436 var_mtype = p1;
4437 var1 = NULL;
4438 if (var_mtype == NULL) {
4439 var2 = 1; /* is null */
4440 } else {
4441 var2 = 0; /* arg is null but recv is not */
4442 }
4443 if (var2){
4444 if (varonce) {
4445 var3 = varonce;
4446 } else {
4447 var4 = "NOT YET IMPLEMENTED: retrieve_vt_bound on null";
4448 var5 = 46;
4449 var6 = string__NativeString__to_s_with_length(var4, var5);
4450 var3 = var6;
4451 varonce = var3;
4452 }
4453 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var3) /* print on <self:SeparateErasureCompiler>*/;
4454 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "src/separate_erasure_compiler.nit", 378);
4455 exit(1);
4456 } else {
4457 }
4458 /* <var_mtype:nullable MType(MType)> isa MVirtualType */
4459 cltype = type_model__MVirtualType.color;
4460 idtype = type_model__MVirtualType.id;
4461 if(cltype >= var_mtype->type->table_size) {
4462 var7 = 0;
4463 } else {
4464 var7 = var_mtype->type->type_table[cltype] == idtype;
4465 }
4466 if (var7){
4467 var8 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
4468 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)>*/;
4469 var = var9;
4470 goto RET_LABEL;
4471 } else {
4472 /* <var_mtype:nullable MType(MType)> isa MParameterType */
4473 cltype11 = type_model__MParameterType.color;
4474 idtype12 = type_model__MParameterType.id;
4475 if(cltype11 >= var_mtype->type->table_size) {
4476 var10 = 0;
4477 } else {
4478 var10 = var_mtype->type->type_table[cltype11] == idtype12;
4479 }
4480 if (var10){
4481 var13 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__mainmodule]))(self) /* mainmodule on <self:SeparateErasureCompiler>*/;
4482 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)>*/;
4483 var = var14;
4484 goto RET_LABEL;
4485 } else {
4486 var = var_mtype;
4487 goto RET_LABEL;
4488 }
4489 }
4490 RET_LABEL:;
4491 return var;
4492 }
4493 /* method separate_erasure_compiler#SeparateErasureCompiler#retrieve_vt_bound for (self: Object, MClassType, nullable MType): MType */
4494 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(val* self, val* p0, val* p1) {
4495 val* var /* : MType */;
4496 val* var1 /* : MType */;
4497 var1 = separate_erasure_compiler__SeparateErasureCompiler__retrieve_vt_bound(self, p0, p1);
4498 var = var1;
4499 RET_LABEL:;
4500 return var;
4501 }
4502 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: SeparateErasureCompiler): SeparateCompilerVisitor */
4503 val* separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
4504 val* var /* : SeparateCompilerVisitor */;
4505 val* var1 /* : SeparateErasureCompilerVisitor */;
4506 short int var2 /* : Bool */;
4507 int cltype;
4508 int idtype;
4509 const struct type* type_struct;
4510 var1 = NEW_separate_erasure_compiler__SeparateErasureCompilerVisitor(&type_separate_erasure_compiler__SeparateErasureCompilerVisitor);
4511 ((void (*)(val*, val*))(var1->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init]))(var1, self) /* init on <var1:SeparateErasureCompilerVisitor>*/;
4512 CHECK_NEW_separate_erasure_compiler__SeparateErasureCompilerVisitor(var1);
4513 /* <var1:SeparateErasureCompilerVisitor> isa VISITOR */
4514 type_struct = self->type->resolution_table->types[COLOR_abstract_compiler__AbstractCompiler_VTVISITOR];
4515 cltype = type_struct->color;
4516 idtype = type_struct->id;
4517 if(cltype >= var1->type->table_size) {
4518 var2 = 0;
4519 } else {
4520 var2 = var1->type->type_table[cltype] == idtype;
4521 }
4522 if (!var2) {
4523 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/separate_erasure_compiler.nit", 389);
4524 exit(1);
4525 }
4526 var = var1;
4527 goto RET_LABEL;
4528 RET_LABEL:;
4529 return var;
4530 }
4531 /* method separate_erasure_compiler#SeparateErasureCompiler#new_visitor for (self: Object): AbstractCompilerVisitor */
4532 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__new_visitor(val* self) {
4533 val* var /* : AbstractCompilerVisitor */;
4534 val* var1 /* : SeparateCompilerVisitor */;
4535 var1 = separate_erasure_compiler__SeparateErasureCompiler__new_visitor(self);
4536 var = var1;
4537 RET_LABEL:;
4538 return var;
4539 }
4540 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MClass]] */
4541 val* separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
4542 val* var /* : Map[MClass, Array[nullable MClass]] */;
4543 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
4544 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_tables].val; /* @class_tables on <self:SeparateErasureCompiler> */
4545 if (var1 == NULL) {
4546 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @class_tables", "src/separate_erasure_compiler.nit", 393);
4547 exit(1);
4548 }
4549 var = var1;
4550 RET_LABEL:;
4551 return var;
4552 }
4553 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables for (self: Object): Map[MClass, Array[nullable MClass]] */
4554 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables(val* self) {
4555 val* var /* : Map[MClass, Array[nullable MClass]] */;
4556 val* var1 /* : Map[MClass, Array[nullable MClass]] */;
4557 var1 = separate_erasure_compiler__SeparateErasureCompiler__class_tables(self);
4558 var = var1;
4559 RET_LABEL:;
4560 return var;
4561 }
4562 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MClass]]) */
4563 void separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
4564 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dclass_tables].val = p0; /* @class_tables on <self:SeparateErasureCompiler> */
4565 RET_LABEL:;
4566 }
4567 /* method separate_erasure_compiler#SeparateErasureCompiler#class_tables= for (self: Object, Map[MClass, Array[nullable MClass]]) */
4568 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(val* self, val* p0) {
4569 separate_erasure_compiler__SeparateErasureCompiler__class_tables_61d(self, p0);
4570 RET_LABEL:;
4571 }
4572 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: SeparateErasureCompiler): Map[MClass, Array[nullable MPropDef]] */
4573 val* separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
4574 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
4575 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
4576 var1 = self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_tables].val; /* @vt_tables on <self:SeparateErasureCompiler> */
4577 if (var1 == NULL) {
4578 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Uninitialized attribute @vt_tables", "src/separate_erasure_compiler.nit", 394);
4579 exit(1);
4580 }
4581 var = var1;
4582 RET_LABEL:;
4583 return var;
4584 }
4585 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables for (self: Object): Map[MClass, Array[nullable MPropDef]] */
4586 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables(val* self) {
4587 val* var /* : Map[MClass, Array[nullable MPropDef]] */;
4588 val* var1 /* : Map[MClass, Array[nullable MPropDef]] */;
4589 var1 = separate_erasure_compiler__SeparateErasureCompiler__vt_tables(self);
4590 var = var1;
4591 RET_LABEL:;
4592 return var;
4593 }
4594 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: SeparateErasureCompiler, Map[MClass, Array[nullable MPropDef]]) */
4595 void separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
4596 self->attrs[COLOR_separate_erasure_compiler__SeparateErasureCompiler___64dvt_tables].val = p0; /* @vt_tables on <self:SeparateErasureCompiler> */
4597 RET_LABEL:;
4598 }
4599 /* method separate_erasure_compiler#SeparateErasureCompiler#vt_tables= for (self: Object, Map[MClass, Array[nullable MPropDef]]) */
4600 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(val* self, val* p0) {
4601 separate_erasure_compiler__SeparateErasureCompiler__vt_tables_61d(self, p0);
4602 RET_LABEL:;
4603 }
4604 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: SeparateErasureCompiler) */
4605 void separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
4606 static val* varonce;
4607 val* var /* : String */;
4608 char* var1 /* : NativeString */;
4609 long var2 /* : Int */;
4610 val* var3 /* : String */;
4611 static val* varonce4;
4612 val* var5 /* : String */;
4613 char* var6 /* : NativeString */;
4614 long var7 /* : Int */;
4615 val* var8 /* : String */;
4616 long var9 /* : Int */;
4617 long var_total /* var total: Int */;
4618 long var10 /* : Int */;
4619 long var_holes /* var holes: Int */;
4620 val* var11 /* : Map[MClass, Array[nullable MClass]] */;
4621 val* var12 /* : MapIterator[Object, nullable Object] */;
4622 short int var13 /* : Bool */;
4623 val* var14 /* : Object */;
4624 val* var_t /* var t: MClass */;
4625 val* var15 /* : nullable Object */;
4626 val* var_table /* var table: Array[nullable MClass] */;
4627 long var16 /* : Int */;
4628 long var17 /* : Int */;
4629 long var19 /* : Int */;
4630 val* var20 /* : Iterator[nullable Object] */;
4631 short int var21 /* : Bool */;
4632 val* var22 /* : nullable Object */;
4633 val* var_e /* var e: nullable MClass */;
4634 val* var23 /* : null */;
4635 short int var24 /* : Bool */;
4636 long var25 /* : Int */;
4637 long var26 /* : Int */;
4638 long var28 /* : Int */;
4639 static val* varonce30;
4640 val* var31 /* : String */;
4641 char* var32 /* : NativeString */;
4642 long var33 /* : Int */;
4643 val* var34 /* : String */;
4644 static val* varonce35;
4645 val* var36 /* : String */;
4646 char* var37 /* : NativeString */;
4647 long var38 /* : Int */;
4648 val* var39 /* : String */;
4649 val* var40 /* : Array[Object] */;
4650 long var41 /* : Int */;
4651 val* var42 /* : NativeArray[Object] */;
4652 val* var43 /* : Object */;
4653 val* var44 /* : Object */;
4654 val* var45 /* : String */;
4655 static val* varonce46;
4656 val* var47 /* : String */;
4657 char* var48 /* : NativeString */;
4658 long var49 /* : Int */;
4659 val* var50 /* : String */;
4660 static val* varonce51;
4661 val* var52 /* : String */;
4662 char* var53 /* : NativeString */;
4663 long var54 /* : Int */;
4664 val* var55 /* : String */;
4665 long var56 /* : Int */;
4666 long var57 /* : Int */;
4667 val* var58 /* : Map[MClass, Array[nullable MPropDef]] */;
4668 val* var59 /* : MapIterator[Object, nullable Object] */;
4669 short int var60 /* : Bool */;
4670 val* var61 /* : Object */;
4671 val* var_t62 /* var t: MClass */;
4672 val* var63 /* : nullable Object */;
4673 val* var_table64 /* var table: Array[nullable MPropDef] */;
4674 long var65 /* : Int */;
4675 long var66 /* : Int */;
4676 long var68 /* : Int */;
4677 val* var69 /* : Iterator[nullable Object] */;
4678 short int var70 /* : Bool */;
4679 val* var71 /* : nullable Object */;
4680 val* var_e72 /* var e: nullable MPropDef */;
4681 val* var73 /* : null */;
4682 short int var74 /* : Bool */;
4683 long var75 /* : Int */;
4684 long var76 /* : Int */;
4685 long var78 /* : Int */;
4686 static val* varonce81;
4687 val* var82 /* : String */;
4688 char* var83 /* : NativeString */;
4689 long var84 /* : Int */;
4690 val* var85 /* : String */;
4691 static val* varonce86;
4692 val* var87 /* : String */;
4693 char* var88 /* : NativeString */;
4694 long var89 /* : Int */;
4695 val* var90 /* : String */;
4696 val* var91 /* : Array[Object] */;
4697 long var92 /* : Int */;
4698 val* var93 /* : NativeArray[Object] */;
4699 val* var94 /* : Object */;
4700 val* var95 /* : Object */;
4701 val* var96 /* : String */;
4702 static val* varonce97;
4703 val* var98 /* : String */;
4704 char* var99 /* : NativeString */;
4705 long var100 /* : Int */;
4706 val* var101 /* : String */;
4707 static val* varonce102;
4708 val* var103 /* : String */;
4709 char* var104 /* : NativeString */;
4710 long var105 /* : Int */;
4711 val* var106 /* : String */;
4712 long var107 /* : Int */;
4713 long var108 /* : Int */;
4714 val* var109 /* : Map[MClass, Array[nullable MPropDef]] */;
4715 val* var110 /* : MapIterator[Object, nullable Object] */;
4716 short int var111 /* : Bool */;
4717 val* var112 /* : Object */;
4718 val* var_t113 /* var t: MClass */;
4719 val* var114 /* : nullable Object */;
4720 val* var_table115 /* var table: Array[nullable MPropDef] */;
4721 long var116 /* : Int */;
4722 long var117 /* : Int */;
4723 long var119 /* : Int */;
4724 val* var120 /* : Iterator[nullable Object] */;
4725 short int var121 /* : Bool */;
4726 val* var122 /* : nullable Object */;
4727 val* var_e123 /* var e: nullable MPropDef */;
4728 val* var124 /* : null */;
4729 short int var125 /* : Bool */;
4730 long var126 /* : Int */;
4731 long var127 /* : Int */;
4732 long var129 /* : Int */;
4733 static val* varonce132;
4734 val* var133 /* : String */;
4735 char* var134 /* : NativeString */;
4736 long var135 /* : Int */;
4737 val* var136 /* : String */;
4738 static val* varonce137;
4739 val* var138 /* : String */;
4740 char* var139 /* : NativeString */;
4741 long var140 /* : Int */;
4742 val* var141 /* : String */;
4743 val* var142 /* : Array[Object] */;
4744 long var143 /* : Int */;
4745 val* var144 /* : NativeArray[Object] */;
4746 val* var145 /* : Object */;
4747 val* var146 /* : Object */;
4748 val* var147 /* : String */;
4749 static val* varonce148;
4750 val* var149 /* : String */;
4751 char* var150 /* : NativeString */;
4752 long var151 /* : Int */;
4753 val* var152 /* : String */;
4754 static val* varonce153;
4755 val* var154 /* : String */;
4756 char* var155 /* : NativeString */;
4757 long var156 /* : Int */;
4758 val* var157 /* : String */;
4759 long var158 /* : Int */;
4760 long var159 /* : Int */;
4761 val* var160 /* : Map[MClass, Array[nullable MPropDef]] */;
4762 val* var161 /* : MapIterator[Object, nullable Object] */;
4763 short int var162 /* : Bool */;
4764 val* var163 /* : Object */;
4765 val* var_t164 /* var t: MClass */;
4766 val* var165 /* : nullable Object */;
4767 val* var_table166 /* var table: Array[nullable MPropDef] */;
4768 long var167 /* : Int */;
4769 long var168 /* : Int */;
4770 long var170 /* : Int */;
4771 val* var171 /* : Iterator[nullable Object] */;
4772 short int var172 /* : Bool */;
4773 val* var173 /* : nullable Object */;
4774 val* var_e174 /* var e: nullable MPropDef */;
4775 val* var175 /* : null */;
4776 short int var176 /* : Bool */;
4777 long var177 /* : Int */;
4778 long var178 /* : Int */;
4779 long var180 /* : Int */;
4780 static val* varonce183;
4781 val* var184 /* : String */;
4782 char* var185 /* : NativeString */;
4783 long var186 /* : Int */;
4784 val* var187 /* : String */;
4785 static val* varonce188;
4786 val* var189 /* : String */;
4787 char* var190 /* : NativeString */;
4788 long var191 /* : Int */;
4789 val* var192 /* : String */;
4790 val* var193 /* : Array[Object] */;
4791 long var194 /* : Int */;
4792 val* var195 /* : NativeArray[Object] */;
4793 val* var196 /* : Object */;
4794 val* var197 /* : Object */;
4795 val* var198 /* : String */;
4796 if (varonce) {
4797 var = varonce;
4798 } else {
4799 var1 = "# size of subtyping tables";
4800 var2 = 26;
4801 var3 = string__NativeString__to_s_with_length(var1, var2);
4802 var = var3;
4803 varonce = var;
4804 }
4805 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var) /* print on <self:SeparateErasureCompiler>*/;
4806 if (varonce4) {
4807 var5 = varonce4;
4808 } else {
4809 var6 = "\11total \11holes";
4810 var7 = 13;
4811 var8 = string__NativeString__to_s_with_length(var6, var7);
4812 var5 = var8;
4813 varonce4 = var5;
4814 }
4815 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var5) /* print on <self:SeparateErasureCompiler>*/;
4816 var9 = 0;
4817 var_total = var9;
4818 var10 = 0;
4819 var_holes = var10;
4820 var11 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_tables]))(self) /* class_tables on <self:SeparateErasureCompiler>*/;
4821 var12 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var11) /* iterator on <var11:Map[MClass, Array[nullable MClass]]>*/;
4822 for(;;) {
4823 var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var12) /* is_ok on <var12:MapIterator[Object, nullable Object]>*/;
4824 if(!var13) break;
4825 var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__key]))(var12) /* key on <var12:MapIterator[Object, nullable Object]>*/;
4826 var_t = var14;
4827 var15 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__item]))(var12) /* item on <var12:MapIterator[Object, nullable Object]>*/;
4828 var_table = var15;
4829 var16 = ((long (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__length]))(var_table) /* length on <var_table:Array[nullable MClass]>*/;
4830 { /* Inline kernel#Int#+ (var_total,var16) */
4831 var19 = var_total + var16;
4832 var17 = var19;
4833 goto RET_LABEL18;
4834 RET_LABEL18:(void)0;
4835 }
4836 var_total = var17;
4837 var20 = ((val* (*)(val*))(var_table->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table) /* iterator on <var_table:Array[nullable MClass]>*/;
4838 for(;;) {
4839 var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
4840 if(!var21) break;
4841 var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
4842 var_e = var22;
4843 var23 = NULL;
4844 if (var_e == NULL) {
4845 var24 = 1; /* is null */
4846 } else {
4847 var24 = 0; /* arg is null but recv is not */
4848 }
4849 if (var24){
4850 var25 = 1;
4851 { /* Inline kernel#Int#+ (var_holes,var25) */
4852 var28 = var_holes + var25;
4853 var26 = var28;
4854 goto RET_LABEL27;
4855 RET_LABEL27:(void)0;
4856 }
4857 var_holes = var26;
4858 } else {
4859 }
4860 CONTINUE_label: (void)0;
4861 ((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
4862 }
4863 BREAK_label: (void)0;
4864 CONTINUE_label29: (void)0;
4865 ((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__MapIterator__next]))(var12) /* next on <var12:MapIterator[Object, nullable Object]>*/;
4866 }
4867 BREAK_label29: (void)0;
4868 if (varonce30) {
4869 var31 = varonce30;
4870 } else {
4871 var32 = "\11";
4872 var33 = 1;
4873 var34 = string__NativeString__to_s_with_length(var32, var33);
4874 var31 = var34;
4875 varonce30 = var31;
4876 }
4877 if (varonce35) {
4878 var36 = varonce35;
4879 } else {
4880 var37 = "\11";
4881 var38 = 1;
4882 var39 = string__NativeString__to_s_with_length(var37, var38);
4883 var36 = var39;
4884 varonce35 = var36;
4885 }
4886 var40 = NEW_array__Array(&type_array__Arraykernel__Object);
4887 { /* var40 = array_instance Array[Object] */
4888 var41 = 4;
4889 var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
4890 ((struct instance_array__NativeArray*)var42)->values[0] = (val*) var31;
4891 var43 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
4892 ((struct instance_array__NativeArray*)var42)->values[1] = (val*) var43;
4893 ((struct instance_array__NativeArray*)var42)->values[2] = (val*) var36;
4894 var44 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
4895 ((struct instance_array__NativeArray*)var42)->values[3] = (val*) var44;
4896 ((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
4897 CHECK_NEW_array__Array(var40);
4898 }
4899 var45 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
4900 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var45) /* print on <self:SeparateErasureCompiler>*/;
4901 if (varonce46) {
4902 var47 = varonce46;
4903 } else {
4904 var48 = "# size of resolution tables";
4905 var49 = 27;
4906 var50 = string__NativeString__to_s_with_length(var48, var49);
4907 var47 = var50;
4908 varonce46 = var47;
4909 }
4910 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var47) /* print on <self:SeparateErasureCompiler>*/;
4911 if (varonce51) {
4912 var52 = varonce51;
4913 } else {
4914 var53 = "\11total \11holes";
4915 var54 = 13;
4916 var55 = string__NativeString__to_s_with_length(var53, var54);
4917 var52 = var55;
4918 varonce51 = var52;
4919 }
4920 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var52) /* print on <self:SeparateErasureCompiler>*/;
4921 var56 = 0;
4922 var_total = var56;
4923 var57 = 0;
4924 var_holes = var57;
4925 var58 = ((val* (*)(val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_tables]))(self) /* vt_tables on <self:SeparateErasureCompiler>*/;
4926 var59 = ((val* (*)(val*))(var58->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var58) /* iterator on <var58:Map[MClass, Array[nullable MPropDef]]>*/;
4927 for(;;) {
4928 var60 = ((short int (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var59) /* is_ok on <var59:MapIterator[Object, nullable Object]>*/;
4929 if(!var60) break;
4930 var61 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__key]))(var59) /* key on <var59:MapIterator[Object, nullable Object]>*/;
4931 var_t62 = var61;
4932 var63 = ((val* (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__item]))(var59) /* item on <var59:MapIterator[Object, nullable Object]>*/;
4933 var_table64 = var63;
4934 var65 = ((long (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__length]))(var_table64) /* length on <var_table64:Array[nullable MPropDef]>*/;
4935 { /* Inline kernel#Int#+ (var_total,var65) */
4936 var68 = var_total + var65;
4937 var66 = var68;
4938 goto RET_LABEL67;
4939 RET_LABEL67:(void)0;
4940 }
4941 var_total = var66;
4942 var69 = ((val* (*)(val*))(var_table64->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table64) /* iterator on <var_table64:Array[nullable MPropDef]>*/;
4943 for(;;) {
4944 var70 = ((short int (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var69) /* is_ok on <var69:Iterator[nullable Object]>*/;
4945 if(!var70) break;
4946 var71 = ((val* (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__item]))(var69) /* item on <var69:Iterator[nullable Object]>*/;
4947 var_e72 = var71;
4948 var73 = NULL;
4949 if (var_e72 == NULL) {
4950 var74 = 1; /* is null */
4951 } else {
4952 var74 = 0; /* arg is null but recv is not */
4953 }
4954 if (var74){
4955 var75 = 1;
4956 { /* Inline kernel#Int#+ (var_holes,var75) */
4957 var78 = var_holes + var75;
4958 var76 = var78;
4959 goto RET_LABEL77;
4960 RET_LABEL77:(void)0;
4961 }
4962 var_holes = var76;
4963 } else {
4964 }
4965 CONTINUE_label79: (void)0;
4966 ((void (*)(val*))(var69->class->vft[COLOR_abstract_collection__Iterator__next]))(var69) /* next on <var69:Iterator[nullable Object]>*/;
4967 }
4968 BREAK_label79: (void)0;
4969 CONTINUE_label80: (void)0;
4970 ((void (*)(val*))(var59->class->vft[COLOR_abstract_collection__MapIterator__next]))(var59) /* next on <var59:MapIterator[Object, nullable Object]>*/;
4971 }
4972 BREAK_label80: (void)0;
4973 if (varonce81) {
4974 var82 = varonce81;
4975 } else {
4976 var83 = "\11";
4977 var84 = 1;
4978 var85 = string__NativeString__to_s_with_length(var83, var84);
4979 var82 = var85;
4980 varonce81 = var82;
4981 }
4982 if (varonce86) {
4983 var87 = varonce86;
4984 } else {
4985 var88 = "\11";
4986 var89 = 1;
4987 var90 = string__NativeString__to_s_with_length(var88, var89);
4988 var87 = var90;
4989 varonce86 = var87;
4990 }
4991 var91 = NEW_array__Array(&type_array__Arraykernel__Object);
4992 { /* var91 = array_instance Array[Object] */
4993 var92 = 4;
4994 var93 = NEW_array__NativeArray(var92, &type_array__NativeArraykernel__Object);
4995 ((struct instance_array__NativeArray*)var93)->values[0] = (val*) var82;
4996 var94 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
4997 ((struct instance_array__NativeArray*)var93)->values[1] = (val*) var94;
4998 ((struct instance_array__NativeArray*)var93)->values[2] = (val*) var87;
4999 var95 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5000 ((struct instance_array__NativeArray*)var93)->values[3] = (val*) var95;
5001 ((void (*)(val*, val*, long))(var91->class->vft[COLOR_array__Array__with_native]))(var91, var93, var92) /* with_native on <var91:Array[Object]>*/;
5002 CHECK_NEW_array__Array(var91);
5003 }
5004 var96 = ((val* (*)(val*))(var91->class->vft[COLOR_string__Object__to_s]))(var91) /* to_s on <var91:Array[Object]>*/;
5005 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var96) /* print on <self:SeparateErasureCompiler>*/;
5006 if (varonce97) {
5007 var98 = varonce97;
5008 } else {
5009 var99 = "# size of methods tables";
5010 var100 = 24;
5011 var101 = string__NativeString__to_s_with_length(var99, var100);
5012 var98 = var101;
5013 varonce97 = var98;
5014 }
5015 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var98) /* print on <self:SeparateErasureCompiler>*/;
5016 if (varonce102) {
5017 var103 = varonce102;
5018 } else {
5019 var104 = "\11total \11holes";
5020 var105 = 13;
5021 var106 = string__NativeString__to_s_with_length(var104, var105);
5022 var103 = var106;
5023 varonce102 = var103;
5024 }
5025 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var103) /* print on <self:SeparateErasureCompiler>*/;
5026 var107 = 0;
5027 var_total = var107;
5028 var108 = 0;
5029 var_holes = var108;
5030 var109 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__method_tables]))(self) /* method_tables on <self:SeparateErasureCompiler>*/;
5031 var110 = ((val* (*)(val*))(var109->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var109) /* iterator on <var109:Map[MClass, Array[nullable MPropDef]]>*/;
5032 for(;;) {
5033 var111 = ((short int (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var110) /* is_ok on <var110:MapIterator[Object, nullable Object]>*/;
5034 if(!var111) break;
5035 var112 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__key]))(var110) /* key on <var110:MapIterator[Object, nullable Object]>*/;
5036 var_t113 = var112;
5037 var114 = ((val* (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__item]))(var110) /* item on <var110:MapIterator[Object, nullable Object]>*/;
5038 var_table115 = var114;
5039 var116 = ((long (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__length]))(var_table115) /* length on <var_table115:Array[nullable MPropDef]>*/;
5040 { /* Inline kernel#Int#+ (var_total,var116) */
5041 var119 = var_total + var116;
5042 var117 = var119;
5043 goto RET_LABEL118;
5044 RET_LABEL118:(void)0;
5045 }
5046 var_total = var117;
5047 var120 = ((val* (*)(val*))(var_table115->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table115) /* iterator on <var_table115:Array[nullable MPropDef]>*/;
5048 for(;;) {
5049 var121 = ((short int (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var120) /* is_ok on <var120:Iterator[nullable Object]>*/;
5050 if(!var121) break;
5051 var122 = ((val* (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__item]))(var120) /* item on <var120:Iterator[nullable Object]>*/;
5052 var_e123 = var122;
5053 var124 = NULL;
5054 if (var_e123 == NULL) {
5055 var125 = 1; /* is null */
5056 } else {
5057 var125 = 0; /* arg is null but recv is not */
5058 }
5059 if (var125){
5060 var126 = 1;
5061 { /* Inline kernel#Int#+ (var_holes,var126) */
5062 var129 = var_holes + var126;
5063 var127 = var129;
5064 goto RET_LABEL128;
5065 RET_LABEL128:(void)0;
5066 }
5067 var_holes = var127;
5068 } else {
5069 }
5070 CONTINUE_label130: (void)0;
5071 ((void (*)(val*))(var120->class->vft[COLOR_abstract_collection__Iterator__next]))(var120) /* next on <var120:Iterator[nullable Object]>*/;
5072 }
5073 BREAK_label130: (void)0;
5074 CONTINUE_label131: (void)0;
5075 ((void (*)(val*))(var110->class->vft[COLOR_abstract_collection__MapIterator__next]))(var110) /* next on <var110:MapIterator[Object, nullable Object]>*/;
5076 }
5077 BREAK_label131: (void)0;
5078 if (varonce132) {
5079 var133 = varonce132;
5080 } else {
5081 var134 = "\11";
5082 var135 = 1;
5083 var136 = string__NativeString__to_s_with_length(var134, var135);
5084 var133 = var136;
5085 varonce132 = var133;
5086 }
5087 if (varonce137) {
5088 var138 = varonce137;
5089 } else {
5090 var139 = "\11";
5091 var140 = 1;
5092 var141 = string__NativeString__to_s_with_length(var139, var140);
5093 var138 = var141;
5094 varonce137 = var138;
5095 }
5096 var142 = NEW_array__Array(&type_array__Arraykernel__Object);
5097 { /* var142 = array_instance Array[Object] */
5098 var143 = 4;
5099 var144 = NEW_array__NativeArray(var143, &type_array__NativeArraykernel__Object);
5100 ((struct instance_array__NativeArray*)var144)->values[0] = (val*) var133;
5101 var145 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5102 ((struct instance_array__NativeArray*)var144)->values[1] = (val*) var145;
5103 ((struct instance_array__NativeArray*)var144)->values[2] = (val*) var138;
5104 var146 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5105 ((struct instance_array__NativeArray*)var144)->values[3] = (val*) var146;
5106 ((void (*)(val*, val*, long))(var142->class->vft[COLOR_array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
5107 CHECK_NEW_array__Array(var142);
5108 }
5109 var147 = ((val* (*)(val*))(var142->class->vft[COLOR_string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
5110 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var147) /* print on <self:SeparateErasureCompiler>*/;
5111 if (varonce148) {
5112 var149 = varonce148;
5113 } else {
5114 var150 = "# size of attributes tables";
5115 var151 = 27;
5116 var152 = string__NativeString__to_s_with_length(var150, var151);
5117 var149 = var152;
5118 varonce148 = var149;
5119 }
5120 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var149) /* print on <self:SeparateErasureCompiler>*/;
5121 if (varonce153) {
5122 var154 = varonce153;
5123 } else {
5124 var155 = "\11total \11holes";
5125 var156 = 13;
5126 var157 = string__NativeString__to_s_with_length(var155, var156);
5127 var154 = var157;
5128 varonce153 = var154;
5129 }
5130 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var154) /* print on <self:SeparateErasureCompiler>*/;
5131 var158 = 0;
5132 var_total = var158;
5133 var159 = 0;
5134 var_holes = var159;
5135 var160 = ((val* (*)(val*))(self->class->vft[COLOR_separate_compiler__SeparateCompiler__attr_tables]))(self) /* attr_tables on <self:SeparateErasureCompiler>*/;
5136 var161 = ((val* (*)(val*))(var160->class->vft[COLOR_abstract_collection__MapRead__iterator]))(var160) /* iterator on <var160:Map[MClass, Array[nullable MPropDef]]>*/;
5137 for(;;) {
5138 var162 = ((short int (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__is_ok]))(var161) /* is_ok on <var161:MapIterator[Object, nullable Object]>*/;
5139 if(!var162) break;
5140 var163 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__key]))(var161) /* key on <var161:MapIterator[Object, nullable Object]>*/;
5141 var_t164 = var163;
5142 var165 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__item]))(var161) /* item on <var161:MapIterator[Object, nullable Object]>*/;
5143 var_table166 = var165;
5144 var167 = ((long (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__length]))(var_table166) /* length on <var_table166:Array[nullable MPropDef]>*/;
5145 { /* Inline kernel#Int#+ (var_total,var167) */
5146 var170 = var_total + var167;
5147 var168 = var170;
5148 goto RET_LABEL169;
5149 RET_LABEL169:(void)0;
5150 }
5151 var_total = var168;
5152 var171 = ((val* (*)(val*))(var_table166->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_table166) /* iterator on <var_table166:Array[nullable MPropDef]>*/;
5153 for(;;) {
5154 var172 = ((short int (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var171) /* is_ok on <var171:Iterator[nullable Object]>*/;
5155 if(!var172) break;
5156 var173 = ((val* (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__item]))(var171) /* item on <var171:Iterator[nullable Object]>*/;
5157 var_e174 = var173;
5158 var175 = NULL;
5159 if (var_e174 == NULL) {
5160 var176 = 1; /* is null */
5161 } else {
5162 var176 = 0; /* arg is null but recv is not */
5163 }
5164 if (var176){
5165 var177 = 1;
5166 { /* Inline kernel#Int#+ (var_holes,var177) */
5167 var180 = var_holes + var177;
5168 var178 = var180;
5169 goto RET_LABEL179;
5170 RET_LABEL179:(void)0;
5171 }
5172 var_holes = var178;
5173 } else {
5174 }
5175 CONTINUE_label181: (void)0;
5176 ((void (*)(val*))(var171->class->vft[COLOR_abstract_collection__Iterator__next]))(var171) /* next on <var171:Iterator[nullable Object]>*/;
5177 }
5178 BREAK_label181: (void)0;
5179 CONTINUE_label182: (void)0;
5180 ((void (*)(val*))(var161->class->vft[COLOR_abstract_collection__MapIterator__next]))(var161) /* next on <var161:MapIterator[Object, nullable Object]>*/;
5181 }
5182 BREAK_label182: (void)0;
5183 if (varonce183) {
5184 var184 = varonce183;
5185 } else {
5186 var185 = "\11";
5187 var186 = 1;
5188 var187 = string__NativeString__to_s_with_length(var185, var186);
5189 var184 = var187;
5190 varonce183 = var184;
5191 }
5192 if (varonce188) {
5193 var189 = varonce188;
5194 } else {
5195 var190 = "\11";
5196 var191 = 1;
5197 var192 = string__NativeString__to_s_with_length(var190, var191);
5198 var189 = var192;
5199 varonce188 = var189;
5200 }
5201 var193 = NEW_array__Array(&type_array__Arraykernel__Object);
5202 { /* var193 = array_instance Array[Object] */
5203 var194 = 4;
5204 var195 = NEW_array__NativeArray(var194, &type_array__NativeArraykernel__Object);
5205 ((struct instance_array__NativeArray*)var195)->values[0] = (val*) var184;
5206 var196 = BOX_kernel__Int(var_total); /* autobox from Int to Object */
5207 ((struct instance_array__NativeArray*)var195)->values[1] = (val*) var196;
5208 ((struct instance_array__NativeArray*)var195)->values[2] = (val*) var189;
5209 var197 = BOX_kernel__Int(var_holes); /* autobox from Int to Object */
5210 ((struct instance_array__NativeArray*)var195)->values[3] = (val*) var197;
5211 ((void (*)(val*, val*, long))(var193->class->vft[COLOR_array__Array__with_native]))(var193, var195, var194) /* with_native on <var193:Array[Object]>*/;
5212 CHECK_NEW_array__Array(var193);
5213 }
5214 var198 = ((val* (*)(val*))(var193->class->vft[COLOR_string__Object__to_s]))(var193) /* to_s on <var193:Array[Object]>*/;
5215 ((void (*)(val*, val*))(self->class->vft[COLOR_file__Object__print]))(self, var198) /* print on <self:SeparateErasureCompiler>*/;
5216 RET_LABEL:;
5217 }
5218 /* method separate_erasure_compiler#SeparateErasureCompiler#display_sizes for (self: Object) */
5219 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompiler__display_sizes(val* self) {
5220 separate_erasure_compiler__SeparateErasureCompiler__display_sizes(self);
5221 RET_LABEL:;
5222 }
5223 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: SeparateErasureCompilerVisitor, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
5224 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
5225 val* var /* : nullable RuntimeVariable */;
5226 val* var_callsite /* var callsite: CallSite */;
5227 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
5228 val* var1 /* : nullable RuntimeVariable */;
5229 val* var_res /* var res: nullable RuntimeVariable */;
5230 short int var2 /* : Bool */;
5231 short int var3 /* : Bool */;
5232 short int var_ /* var : Bool */;
5233 val* var4 /* : AbstractCompiler */;
5234 short int var5 /* : Bool */;
5235 int cltype;
5236 int idtype;
5237 val* var6 /* : ModelBuilder */;
5238 val* var7 /* : ToolContext */;
5239 val* var8 /* : OptionBool */;
5240 val* var9 /* : nullable Object */;
5241 short int var10 /* : Bool */;
5242 short int var11 /* : Bool */;
5243 val* var12 /* : null */;
5244 short int var13 /* : Bool */;
5245 val* var14 /* : MSignature */;
5246 val* var15 /* : nullable MType */;
5247 val* var_mtype /* var mtype: nullable MType */;
5248 val* var16 /* : null */;
5249 short int var17 /* : Bool */;
5250 static val* varonce;
5251 val* var18 /* : String */;
5252 char* var19 /* : NativeString */;
5253 long var20 /* : Int */;
5254 val* var21 /* : String */;
5255 static val* varonce22;
5256 val* var23 /* : String */;
5257 char* var24 /* : NativeString */;
5258 long var25 /* : Int */;
5259 val* var26 /* : String */;
5260 static val* varonce27;
5261 val* var28 /* : String */;
5262 char* var29 /* : NativeString */;
5263 long var30 /* : Int */;
5264 val* var31 /* : String */;
5265 val* var32 /* : Array[Object] */;
5266 long var33 /* : Int */;
5267 val* var34 /* : NativeArray[Object] */;
5268 val* var35 /* : String */;
5269 static val* varonce36;
5270 val* var37 /* : String */;
5271 char* var38 /* : NativeString */;
5272 long var39 /* : Int */;
5273 val* var40 /* : String */;
5274 val* var41 /* : RuntimeVariable */;
5275 val* var_cond /* var cond: RuntimeVariable */;
5276 static val* varonce42;
5277 val* var43 /* : String */;
5278 char* var44 /* : NativeString */;
5279 long var45 /* : Int */;
5280 val* var46 /* : String */;
5281 static val* varonce47;
5282 val* var48 /* : String */;
5283 char* var49 /* : NativeString */;
5284 long var50 /* : Int */;
5285 val* var51 /* : String */;
5286 val* var52 /* : Array[Object] */;
5287 long var53 /* : Int */;
5288 val* var54 /* : NativeArray[Object] */;
5289 val* var55 /* : String */;
5290 static val* varonce56;
5291 val* var57 /* : String */;
5292 char* var58 /* : NativeString */;
5293 long var59 /* : Int */;
5294 val* var60 /* : String */;
5295 static val* varonce61;
5296 val* var62 /* : String */;
5297 char* var63 /* : NativeString */;
5298 long var64 /* : Int */;
5299 val* var65 /* : String */;
5300 var_callsite = p0;
5301 var_arguments = p1;
5302 var1 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite]))(self, p0, p1) /* compile_callsite on <self:SeparateErasureCompilerVisitor>*/;
5303 var_res = var1;
5304 var3 = ((short int (*)(val*))(var_callsite->class->vft[COLOR_typing__CallSite__erasure_cast]))(var_callsite) /* erasure_cast on <var_callsite:CallSite>*/;
5305 var_ = var3;
5306 if (var3){
5307 var4 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
5308 /* <var4:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
5309 cltype = type_separate_erasure_compiler__SeparateErasureCompiler.color;
5310 idtype = type_separate_erasure_compiler__SeparateErasureCompiler.id;
5311 if(cltype >= var4->type->table_size) {
5312 var5 = 0;
5313 } else {
5314 var5 = var4->type->type_table[cltype] == idtype;
5315 }
5316 if (!var5) {
5317 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/separate_erasure_compiler.nit", 446);
5318 exit(1);
5319 }
5320 var6 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var4) /* modelbuilder on <var4:SeparateCompiler(SeparateErasureCompiler)>*/;
5321 var7 = ((val* (*)(val*))(var6->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var6) /* toolcontext on <var6:ModelBuilder>*/;
5322 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>*/;
5323 var9 = ((val* (*)(val*))(var8->class->vft[COLOR_opts__Option__value]))(var8) /* value on <var8:OptionBool>*/;
5324 var10 = ((struct instance_kernel__Bool*)var9)->value; /* autounbox from nullable Object to Bool */;
5325 var11 = !var10;
5326 var2 = var11;
5327 } else {
5328 var2 = var_;
5329 }
5330 if (var2){
5331 var12 = NULL;
5332 if (var_res == NULL) {
5333 var13 = 0; /* is null */
5334 } else {
5335 var13 = 1; /* arg is null and recv is not */
5336 }
5337 if (!var13) {
5338 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/separate_erasure_compiler.nit", 447);
5339 exit(1);
5340 }
5341 var14 = ((val* (*)(val*))(var_callsite->class->vft[COLOR_typing__CallSite__msignature]))(var_callsite) /* msignature on <var_callsite:CallSite>*/;
5342 var15 = ((val* (*)(val*))(var14->class->vft[COLOR_model__MSignature__return_mtype]))(var14) /* return_mtype on <var14:MSignature>*/;
5343 var_mtype = var15;
5344 var16 = NULL;
5345 if (var_mtype == NULL) {
5346 var17 = 0; /* is null */
5347 } else {
5348 var17 = 1; /* arg is null and recv is not */
5349 }
5350 if (!var17) {
5351 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Assert failed", "src/separate_erasure_compiler.nit", 449);
5352 exit(1);
5353 }
5354 if (varonce) {
5355 var18 = varonce;
5356 } else {
5357 var19 = "/* Erasure cast for return ";
5358 var20 = 27;
5359 var21 = string__NativeString__to_s_with_length(var19, var20);
5360 var18 = var21;
5361 varonce = var18;
5362 }
5363 if (varonce22) {
5364 var23 = varonce22;
5365 } else {
5366 var24 = " isa ";
5367 var25 = 5;
5368 var26 = string__NativeString__to_s_with_length(var24, var25);
5369 var23 = var26;
5370 varonce22 = var23;
5371 }
5372 if (varonce27) {
5373 var28 = varonce27;
5374 } else {
5375 var29 = " */";
5376 var30 = 3;
5377 var31 = string__NativeString__to_s_with_length(var29, var30);
5378 var28 = var31;
5379 varonce27 = var28;
5380 }
5381 var32 = NEW_array__Array(&type_array__Arraykernel__Object);
5382 { /* var32 = array_instance Array[Object] */
5383 var33 = 5;
5384 var34 = NEW_array__NativeArray(var33, &type_array__NativeArraykernel__Object);
5385 ((struct instance_array__NativeArray*)var34)->values[0] = (val*) var18;
5386 ((struct instance_array__NativeArray*)var34)->values[1] = (val*) var_res;
5387 ((struct instance_array__NativeArray*)var34)->values[2] = (val*) var23;
5388 ((struct instance_array__NativeArray*)var34)->values[3] = (val*) var_mtype;
5389 ((struct instance_array__NativeArray*)var34)->values[4] = (val*) var28;
5390 ((void (*)(val*, val*, long))(var32->class->vft[COLOR_array__Array__with_native]))(var32, var34, var33) /* with_native on <var32:Array[Object]>*/;
5391 CHECK_NEW_array__Array(var32);
5392 }
5393 var35 = ((val* (*)(val*))(var32->class->vft[COLOR_string__Object__to_s]))(var32) /* to_s on <var32:Array[Object]>*/;
5394 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var35) /* add on <self:SeparateErasureCompilerVisitor>*/;
5395 if (varonce36) {
5396 var37 = varonce36;
5397 } else {
5398 var38 = "erasure";
5399 var39 = 7;
5400 var40 = string__NativeString__to_s_with_length(var38, var39);
5401 var37 = var40;
5402 varonce36 = var37;
5403 }
5404 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>*/;
5405 var_cond = var41;
5406 if (varonce42) {
5407 var43 = varonce42;
5408 } else {
5409 var44 = "if (!";
5410 var45 = 5;
5411 var46 = string__NativeString__to_s_with_length(var44, var45);
5412 var43 = var46;
5413 varonce42 = var43;
5414 }
5415 if (varonce47) {
5416 var48 = varonce47;
5417 } else {
5418 var49 = ") {";
5419 var50 = 3;
5420 var51 = string__NativeString__to_s_with_length(var49, var50);
5421 var48 = var51;
5422 varonce47 = var48;
5423 }
5424 var52 = NEW_array__Array(&type_array__Arraykernel__Object);
5425 { /* var52 = array_instance Array[Object] */
5426 var53 = 3;
5427 var54 = NEW_array__NativeArray(var53, &type_array__NativeArraykernel__Object);
5428 ((struct instance_array__NativeArray*)var54)->values[0] = (val*) var43;
5429 ((struct instance_array__NativeArray*)var54)->values[1] = (val*) var_cond;
5430 ((struct instance_array__NativeArray*)var54)->values[2] = (val*) var48;
5431 ((void (*)(val*, val*, long))(var52->class->vft[COLOR_array__Array__with_native]))(var52, var54, var53) /* with_native on <var52:Array[Object]>*/;
5432 CHECK_NEW_array__Array(var52);
5433 }
5434 var55 = ((val* (*)(val*))(var52->class->vft[COLOR_string__Object__to_s]))(var52) /* to_s on <var52:Array[Object]>*/;
5435 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var55) /* add on <self:SeparateErasureCompilerVisitor>*/;
5436 if (varonce56) {
5437 var57 = varonce56;
5438 } else {
5439 var58 = "Cast failed";
5440 var59 = 11;
5441 var60 = string__NativeString__to_s_with_length(var58, var59);
5442 var57 = var60;
5443 varonce56 = var57;
5444 }
5445 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_abort]))(self, var57) /* add_abort on <self:SeparateErasureCompilerVisitor>*/;
5446 if (varonce61) {
5447 var62 = varonce61;
5448 } else {
5449 var63 = "}";
5450 var64 = 1;
5451 var65 = string__NativeString__to_s_with_length(var63, var64);
5452 var62 = var65;
5453 varonce61 = var62;
5454 }
5455 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var62) /* add on <self:SeparateErasureCompilerVisitor>*/;
5456 } else {
5457 }
5458 var = var_res;
5459 goto RET_LABEL;
5460 RET_LABEL:;
5461 return var;
5462 }
5463 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#compile_callsite for (self: Object, CallSite, Array[RuntimeVariable]): nullable RuntimeVariable */
5464 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(val* self, val* p0, val* p1) {
5465 val* var /* : nullable RuntimeVariable */;
5466 val* var1 /* : nullable RuntimeVariable */;
5467 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__compile_callsite(self, p0, p1);
5468 var = var1;
5469 RET_LABEL:;
5470 return var;
5471 }
5472 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: SeparateErasureCompilerVisitor, MClassType): RuntimeVariable */
5473 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
5474 val* var /* : RuntimeVariable */;
5475 val* var_mtype /* var mtype: MClassType */;
5476 static val* varonce;
5477 val* var1 /* : String */;
5478 char* var2 /* : NativeString */;
5479 long var3 /* : Int */;
5480 val* var4 /* : String */;
5481 val* var5 /* : MClass */;
5482 val* var6 /* : String */;
5483 val* var7 /* : Array[Object] */;
5484 long var8 /* : Int */;
5485 val* var9 /* : NativeArray[Object] */;
5486 val* var10 /* : String */;
5487 static val* varonce11;
5488 val* var12 /* : String */;
5489 char* var13 /* : NativeString */;
5490 long var14 /* : Int */;
5491 val* var15 /* : String */;
5492 val* var16 /* : MClass */;
5493 val* var17 /* : String */;
5494 static val* varonce18;
5495 val* var19 /* : String */;
5496 char* var20 /* : NativeString */;
5497 long var21 /* : Int */;
5498 val* var22 /* : String */;
5499 val* var23 /* : Array[Object] */;
5500 long var24 /* : Int */;
5501 val* var25 /* : NativeArray[Object] */;
5502 val* var26 /* : String */;
5503 val* var27 /* : RuntimeVariable */;
5504 var_mtype = p0;
5505 if (varonce) {
5506 var1 = varonce;
5507 } else {
5508 var2 = "NEW_";
5509 var3 = 4;
5510 var4 = string__NativeString__to_s_with_length(var2, var3);
5511 var1 = var4;
5512 varonce = var1;
5513 }
5514 var5 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
5515 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var5) /* c_name on <var5:MClass>*/;
5516 var7 = NEW_array__Array(&type_array__Arraykernel__Object);
5517 { /* var7 = array_instance Array[Object] */
5518 var8 = 2;
5519 var9 = NEW_array__NativeArray(var8, &type_array__NativeArraykernel__Object);
5520 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var1;
5521 ((struct instance_array__NativeArray*)var9)->values[1] = (val*) var6;
5522 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Object]>*/;
5523 CHECK_NEW_array__Array(var7);
5524 }
5525 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_string__Object__to_s]))(var7) /* to_s on <var7:Array[Object]>*/;
5526 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var10) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
5527 if (varonce11) {
5528 var12 = varonce11;
5529 } else {
5530 var13 = "NEW_";
5531 var14 = 4;
5532 var15 = string__NativeString__to_s_with_length(var13, var14);
5533 var12 = var15;
5534 varonce11 = var12;
5535 }
5536 var16 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MClassType>*/;
5537 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var16) /* c_name on <var16:MClass>*/;
5538 if (varonce18) {
5539 var19 = varonce18;
5540 } else {
5541 var20 = "()";
5542 var21 = 2;
5543 var22 = string__NativeString__to_s_with_length(var20, var21);
5544 var19 = var22;
5545 varonce18 = var19;
5546 }
5547 var23 = NEW_array__Array(&type_array__Arraykernel__Object);
5548 { /* var23 = array_instance Array[Object] */
5549 var24 = 3;
5550 var25 = NEW_array__NativeArray(var24, &type_array__NativeArraykernel__Object);
5551 ((struct instance_array__NativeArray*)var25)->values[0] = (val*) var12;
5552 ((struct instance_array__NativeArray*)var25)->values[1] = (val*) var17;
5553 ((struct instance_array__NativeArray*)var25)->values[2] = (val*) var19;
5554 ((void (*)(val*, val*, long))(var23->class->vft[COLOR_array__Array__with_native]))(var23, var25, var24) /* with_native on <var23:Array[Object]>*/;
5555 CHECK_NEW_array__Array(var23);
5556 }
5557 var26 = ((val* (*)(val*))(var23->class->vft[COLOR_string__Object__to_s]))(var23) /* to_s on <var23:Array[Object]>*/;
5558 var27 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var26, var_mtype) /* new_expr on <self:SeparateErasureCompilerVisitor>*/;
5559 var = var27;
5560 goto RET_LABEL;
5561 RET_LABEL:;
5562 return var;
5563 }
5564 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#init_instance for (self: Object, MClassType): RuntimeVariable */
5565 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(val* self, val* p0) {
5566 val* var /* : RuntimeVariable */;
5567 val* var1 /* : RuntimeVariable */;
5568 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__init_instance(self, p0);
5569 var = var1;
5570 RET_LABEL:;
5571 return var;
5572 }
5573 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: SeparateErasureCompilerVisitor, RuntimeVariable, MType, String): RuntimeVariable */
5574 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
5575 val* var /* : RuntimeVariable */;
5576 val* var_value /* var value: RuntimeVariable */;
5577 val* var_mtype /* var mtype: MType */;
5578 val* var_tag /* var tag: String */;
5579 static val* varonce;
5580 val* var1 /* : String */;
5581 char* var2 /* : NativeString */;
5582 long var3 /* : Int */;
5583 val* var4 /* : String */;
5584 val* var5 /* : String */;
5585 static val* varonce6;
5586 val* var7 /* : String */;
5587 char* var8 /* : NativeString */;
5588 long var9 /* : Int */;
5589 val* var10 /* : String */;
5590 static val* varonce11;
5591 val* var12 /* : String */;
5592 char* var13 /* : NativeString */;
5593 long var14 /* : Int */;
5594 val* var15 /* : String */;
5595 val* var16 /* : Array[Object] */;
5596 long var17 /* : Int */;
5597 val* var18 /* : NativeArray[Object] */;
5598 val* var19 /* : String */;
5599 val* var20 /* : MClassType */;
5600 val* var21 /* : RuntimeVariable */;
5601 val* var_res /* var res: RuntimeVariable */;
5602 static val* varonce22;
5603 val* var23 /* : String */;
5604 char* var24 /* : NativeString */;
5605 long var25 /* : Int */;
5606 val* var26 /* : String */;
5607 val* var27 /* : String */;
5608 val* var_cltype /* var cltype: String */;
5609 static val* varonce28;
5610 val* var29 /* : String */;
5611 char* var30 /* : NativeString */;
5612 long var31 /* : Int */;
5613 val* var32 /* : String */;
5614 static val* varonce33;
5615 val* var34 /* : String */;
5616 char* var35 /* : NativeString */;
5617 long var36 /* : Int */;
5618 val* var37 /* : String */;
5619 val* var38 /* : Array[Object] */;
5620 long var39 /* : Int */;
5621 val* var40 /* : NativeArray[Object] */;
5622 val* var41 /* : String */;
5623 static val* varonce42;
5624 val* var43 /* : String */;
5625 char* var44 /* : NativeString */;
5626 long var45 /* : Int */;
5627 val* var46 /* : String */;
5628 val* var47 /* : String */;
5629 val* var_idtype /* var idtype: String */;
5630 static val* varonce48;
5631 val* var49 /* : String */;
5632 char* var50 /* : NativeString */;
5633 long var51 /* : Int */;
5634 val* var52 /* : String */;
5635 static val* varonce53;
5636 val* var54 /* : String */;
5637 char* var55 /* : NativeString */;
5638 long var56 /* : Int */;
5639 val* var57 /* : String */;
5640 val* var58 /* : Array[Object] */;
5641 long var59 /* : Int */;
5642 val* var60 /* : NativeArray[Object] */;
5643 val* var61 /* : String */;
5644 short int var62 /* : Bool */;
5645 short int var_maybe_null /* var maybe_null: Bool */;
5646 static val* varonce63;
5647 val* var64 /* : String */;
5648 char* var65 /* : NativeString */;
5649 long var66 /* : Int */;
5650 val* var67 /* : String */;
5651 val* var_accept_null /* var accept_null: String */;
5652 short int var68 /* : Bool */;
5653 int cltype;
5654 int idtype;
5655 val* var69 /* : MType */;
5656 static val* varonce70;
5657 val* var71 /* : String */;
5658 char* var72 /* : NativeString */;
5659 long var73 /* : Int */;
5660 val* var74 /* : String */;
5661 short int var75 /* : Bool */;
5662 int cltype76;
5663 int idtype77;
5664 val* var78 /* : nullable Frame */;
5665 val* var79 /* : MPropDef */;
5666 val* var80 /* : MClassDef */;
5667 val* var81 /* : MClassType */;
5668 val* var82 /* : nullable Frame */;
5669 val* var83 /* : MPropDef */;
5670 val* var84 /* : MClassDef */;
5671 val* var85 /* : MClassType */;
5672 val* var86 /* : nullable Frame */;
5673 val* var87 /* : MPropDef */;
5674 val* var88 /* : MClassDef */;
5675 val* var89 /* : MModule */;
5676 short int var90 /* : Bool */;
5677 val* var91 /* : MType */;
5678 short int var92 /* : Bool */;
5679 int cltype93;
5680 int idtype94;
5681 val* var95 /* : MType */;
5682 static val* varonce96;
5683 val* var97 /* : String */;
5684 char* var98 /* : NativeString */;
5685 long var99 /* : Int */;
5686 val* var100 /* : String */;
5687 val* var101 /* : MType */;
5688 val* var102 /* : nullable Frame */;
5689 val* var103 /* : MPropDef */;
5690 val* var104 /* : MClassDef */;
5691 val* var105 /* : MModule */;
5692 val* var106 /* : nullable Frame */;
5693 val* var107 /* : MPropDef */;
5694 val* var108 /* : MClassDef */;
5695 val* var109 /* : MClassType */;
5696 short int var110 /* : Bool */;
5697 static val* varonce111;
5698 val* var112 /* : String */;
5699 char* var113 /* : NativeString */;
5700 long var114 /* : Int */;
5701 val* var115 /* : String */;
5702 val* var116 /* : String */;
5703 static val* varonce117;
5704 val* var118 /* : String */;
5705 char* var119 /* : NativeString */;
5706 long var120 /* : Int */;
5707 val* var121 /* : String */;
5708 static val* varonce122;
5709 val* var123 /* : String */;
5710 char* var124 /* : NativeString */;
5711 long var125 /* : Int */;
5712 val* var126 /* : String */;
5713 val* var127 /* : Array[Object] */;
5714 long var128 /* : Int */;
5715 val* var129 /* : NativeArray[Object] */;
5716 val* var130 /* : String */;
5717 val* var131 /* : AbstractCompiler */;
5718 val* var132 /* : ModelBuilder */;
5719 val* var133 /* : ToolContext */;
5720 val* var134 /* : OptionBool */;
5721 val* var135 /* : nullable Object */;
5722 short int var136 /* : Bool */;
5723 val* var137 /* : AbstractCompiler */;
5724 val* var138 /* : HashMap[String, Int] */;
5725 val* var_ /* var : HashMap[String, Int] */;
5726 val* var_139 /* var : String */;
5727 val* var140 /* : nullable Object */;
5728 long var141 /* : Int */;
5729 long var142 /* : Int */;
5730 long var144 /* : Int */;
5731 long var145 /* : Int */;
5732 val* var146 /* : nullable Object */;
5733 static val* varonce147;
5734 val* var148 /* : String */;
5735 char* var149 /* : NativeString */;
5736 long var150 /* : Int */;
5737 val* var151 /* : String */;
5738 static val* varonce152;
5739 val* var153 /* : String */;
5740 char* var154 /* : NativeString */;
5741 long var155 /* : Int */;
5742 val* var156 /* : String */;
5743 val* var157 /* : Array[Object] */;
5744 long var158 /* : Int */;
5745 val* var159 /* : NativeArray[Object] */;
5746 val* var160 /* : String */;
5747 val* var161 /* : MType */;
5748 val* var162 /* : String */;
5749 static val* varonce163;
5750 val* var164 /* : String */;
5751 char* var165 /* : NativeString */;
5752 long var166 /* : Int */;
5753 val* var167 /* : String */;
5754 short int var168 /* : Bool */;
5755 val* var169 /* : Array[Object] */;
5756 long var170 /* : Int */;
5757 val* var_171 /* var : Array[Object] */;
5758 static val* varonce172;
5759 val* var173 /* : String */;
5760 char* var174 /* : NativeString */;
5761 long var175 /* : Int */;
5762 val* var176 /* : String */;
5763 static val* varonce177;
5764 val* var178 /* : String */;
5765 char* var179 /* : NativeString */;
5766 long var180 /* : Int */;
5767 val* var181 /* : String */;
5768 val* var182 /* : String */;
5769 val* var_class_ptr /* var class_ptr: nullable Object */;
5770 val* var183 /* : MType */;
5771 short int var184 /* : Bool */;
5772 int cltype185;
5773 int idtype186;
5774 val* var187 /* : MClass */;
5775 val* var_mclass /* var mclass: MClass */;
5776 static val* varonce188;
5777 val* var189 /* : String */;
5778 char* var190 /* : NativeString */;
5779 long var191 /* : Int */;
5780 val* var192 /* : String */;
5781 val* var193 /* : String */;
5782 val* var194 /* : Array[Object] */;
5783 long var195 /* : Int */;
5784 val* var196 /* : NativeArray[Object] */;
5785 val* var197 /* : String */;
5786 val* var198 /* : Array[Object] */;
5787 long var199 /* : Int */;
5788 val* var_200 /* var : Array[Object] */;
5789 static val* varonce201;
5790 val* var202 /* : String */;
5791 char* var203 /* : NativeString */;
5792 long var204 /* : Int */;
5793 val* var205 /* : String */;
5794 val* var206 /* : String */;
5795 static val* varonce207;
5796 val* var208 /* : String */;
5797 char* var209 /* : NativeString */;
5798 long var210 /* : Int */;
5799 val* var211 /* : String */;
5800 val* var212 /* : String */;
5801 short int var213 /* : Bool */;
5802 int cltype214;
5803 int idtype215;
5804 static val* varonce216;
5805 val* var217 /* : String */;
5806 char* var218 /* : NativeString */;
5807 long var219 /* : Int */;
5808 val* var220 /* : String */;
5809 val* var221 /* : MClass */;
5810 val* var222 /* : String */;
5811 val* var223 /* : Array[Object] */;
5812 long var224 /* : Int */;
5813 val* var225 /* : NativeArray[Object] */;
5814 val* var226 /* : String */;
5815 static val* varonce227;
5816 val* var228 /* : String */;
5817 char* var229 /* : NativeString */;
5818 long var230 /* : Int */;
5819 val* var231 /* : String */;
5820 val* var232 /* : MClass */;
5821 val* var233 /* : String */;
5822 static val* varonce234;
5823 val* var235 /* : String */;
5824 char* var236 /* : NativeString */;
5825 long var237 /* : Int */;
5826 val* var238 /* : String */;
5827 val* var239 /* : Array[Object] */;
5828 long var240 /* : Int */;
5829 val* var241 /* : NativeArray[Object] */;
5830 val* var242 /* : String */;
5831 static val* varonce243;
5832 val* var244 /* : String */;
5833 char* var245 /* : NativeString */;
5834 long var246 /* : Int */;
5835 val* var247 /* : String */;
5836 val* var248 /* : MClass */;
5837 val* var249 /* : String */;
5838 static val* varonce250;
5839 val* var251 /* : String */;
5840 char* var252 /* : NativeString */;
5841 long var253 /* : Int */;
5842 val* var254 /* : String */;
5843 val* var255 /* : Array[Object] */;
5844 long var256 /* : Int */;
5845 val* var257 /* : NativeArray[Object] */;
5846 val* var258 /* : String */;
5847 val* var259 /* : AbstractCompiler */;
5848 val* var260 /* : ModelBuilder */;
5849 val* var261 /* : ToolContext */;
5850 val* var262 /* : OptionBool */;
5851 val* var263 /* : nullable Object */;
5852 short int var264 /* : Bool */;
5853 val* var265 /* : AbstractCompiler */;
5854 val* var266 /* : HashMap[String, Int] */;
5855 val* var_267 /* var : HashMap[String, Int] */;
5856 val* var_268 /* var : String */;
5857 val* var269 /* : nullable Object */;
5858 long var270 /* : Int */;
5859 long var271 /* : Int */;
5860 long var273 /* : Int */;
5861 long var274 /* : Int */;
5862 val* var275 /* : nullable Object */;
5863 static val* varonce276;
5864 val* var277 /* : String */;
5865 char* var278 /* : NativeString */;
5866 long var279 /* : Int */;
5867 val* var280 /* : String */;
5868 static val* varonce281;
5869 val* var282 /* : String */;
5870 char* var283 /* : NativeString */;
5871 long var284 /* : Int */;
5872 val* var285 /* : String */;
5873 val* var286 /* : Array[Object] */;
5874 long var287 /* : Int */;
5875 val* var288 /* : NativeArray[Object] */;
5876 val* var289 /* : String */;
5877 short int var290 /* : Bool */;
5878 int cltype291;
5879 int idtype292;
5880 val* var293 /* : nullable Frame */;
5881 val* var294 /* : Array[RuntimeVariable] */;
5882 val* var295 /* : nullable Object */;
5883 val* var_recv /* var recv: RuntimeVariable */;
5884 val* var296 /* : MType */;
5885 val* var297 /* : String */;
5886 static val* varonce298;
5887 val* var299 /* : String */;
5888 char* var300 /* : NativeString */;
5889 long var301 /* : Int */;
5890 val* var302 /* : String */;
5891 short int var303 /* : Bool */;
5892 static val* varonce304;
5893 val* var305 /* : String */;
5894 char* var306 /* : NativeString */;
5895 long var307 /* : Int */;
5896 val* var308 /* : String */;
5897 val* var309 /* : Array[Object] */;
5898 long var310 /* : Int */;
5899 val* var311 /* : NativeArray[Object] */;
5900 val* var312 /* : String */;
5901 val* var_recv_ptr /* var recv_ptr: nullable Object */;
5902 val* var313 /* : MType */;
5903 short int var314 /* : Bool */;
5904 int cltype315;
5905 int idtype316;
5906 val* var317 /* : MClass */;
5907 val* var_mclass318 /* var mclass: MClass */;
5908 static val* varonce319;
5909 val* var320 /* : String */;
5910 char* var321 /* : NativeString */;
5911 long var322 /* : Int */;
5912 val* var323 /* : String */;
5913 val* var324 /* : String */;
5914 val* var325 /* : Array[Object] */;
5915 long var326 /* : Int */;
5916 val* var327 /* : NativeArray[Object] */;
5917 val* var328 /* : String */;
5918 static val* varonce329;
5919 val* var330 /* : String */;
5920 char* var331 /* : NativeString */;
5921 long var332 /* : Int */;
5922 val* var333 /* : String */;
5923 val* var334 /* : String */;
5924 static val* varonce335;
5925 val* var336 /* : String */;
5926 char* var337 /* : NativeString */;
5927 long var338 /* : Int */;
5928 val* var339 /* : String */;
5929 val* var340 /* : Array[Object] */;
5930 long var341 /* : Int */;
5931 val* var342 /* : NativeArray[Object] */;
5932 val* var343 /* : String */;
5933 static val* varonce344;
5934 val* var345 /* : String */;
5935 char* var346 /* : NativeString */;
5936 long var347 /* : Int */;
5937 val* var348 /* : String */;
5938 val* var349 /* : String */;
5939 val* var_entry /* var entry: String */;
5940 static val* varonce350;
5941 val* var351 /* : String */;
5942 char* var352 /* : NativeString */;
5943 long var353 /* : Int */;
5944 val* var354 /* : String */;
5945 static val* varonce355;
5946 val* var356 /* : String */;
5947 char* var357 /* : NativeString */;
5948 long var358 /* : Int */;
5949 val* var359 /* : String */;
5950 val* var360 /* : Array[Object] */;
5951 long var361 /* : Int */;
5952 val* var362 /* : NativeArray[Object] */;
5953 val* var363 /* : String */;
5954 val* var364 /* : MProperty */;
5955 val* var365 /* : String */;
5956 val* var366 /* : AbstractCompiler */;
5957 short int var367 /* : Bool */;
5958 int cltype368;
5959 int idtype369;
5960 val* var370 /* : nullable Layout[MVirtualTypeProp] */;
5961 short int var371 /* : Bool */;
5962 int cltype372;
5963 int idtype373;
5964 static val* varonce374;
5965 val* var375 /* : String */;
5966 char* var376 /* : NativeString */;
5967 long var377 /* : Int */;
5968 val* var378 /* : String */;
5969 static val* varonce379;
5970 val* var380 /* : String */;
5971 char* var381 /* : NativeString */;
5972 long var382 /* : Int */;
5973 val* var383 /* : String */;
5974 static val* varonce384;
5975 val* var385 /* : String */;
5976 char* var386 /* : NativeString */;
5977 long var387 /* : Int */;
5978 val* var388 /* : String */;
5979 val* var389 /* : MProperty */;
5980 val* var390 /* : String */;
5981 static val* varonce391;
5982 val* var392 /* : String */;
5983 char* var393 /* : NativeString */;
5984 long var394 /* : Int */;
5985 val* var395 /* : String */;
5986 val* var396 /* : Array[Object] */;
5987 long var397 /* : Int */;
5988 val* var398 /* : NativeArray[Object] */;
5989 val* var399 /* : String */;
5990 static val* varonce400;
5991 val* var401 /* : String */;
5992 char* var402 /* : NativeString */;
5993 long var403 /* : Int */;
5994 val* var404 /* : String */;
5995 static val* varonce405;
5996 val* var406 /* : String */;
5997 char* var407 /* : NativeString */;
5998 long var408 /* : Int */;
5999 val* var409 /* : String */;
6000 val* var410 /* : MProperty */;
6001 val* var411 /* : String */;
6002 static val* varonce412;
6003 val* var413 /* : String */;
6004 char* var414 /* : NativeString */;
6005 long var415 /* : Int */;
6006 val* var416 /* : String */;
6007 val* var417 /* : Array[Object] */;
6008 long var418 /* : Int */;
6009 val* var419 /* : NativeArray[Object] */;
6010 val* var420 /* : String */;
6011 static val* varonce421;
6012 val* var422 /* : String */;
6013 char* var423 /* : NativeString */;
6014 long var424 /* : Int */;
6015 val* var425 /* : String */;
6016 static val* varonce426;
6017 val* var427 /* : String */;
6018 char* var428 /* : NativeString */;
6019 long var429 /* : Int */;
6020 val* var430 /* : String */;
6021 val* var431 /* : Array[Object] */;
6022 long var432 /* : Int */;
6023 val* var433 /* : NativeArray[Object] */;
6024 val* var434 /* : String */;
6025 static val* varonce435;
6026 val* var436 /* : String */;
6027 char* var437 /* : NativeString */;
6028 long var438 /* : Int */;
6029 val* var439 /* : String */;
6030 static val* varonce440;
6031 val* var441 /* : String */;
6032 char* var442 /* : NativeString */;
6033 long var443 /* : Int */;
6034 val* var444 /* : String */;
6035 val* var445 /* : Array[Object] */;
6036 long var446 /* : Int */;
6037 val* var447 /* : NativeArray[Object] */;
6038 val* var448 /* : String */;
6039 short int var449 /* : Bool */;
6040 short int var_450 /* var : Bool */;
6041 static val* varonce451;
6042 val* var452 /* : String */;
6043 char* var453 /* : NativeString */;
6044 long var454 /* : Int */;
6045 val* var455 /* : String */;
6046 short int var456 /* : Bool */;
6047 static val* varonce457;
6048 val* var458 /* : String */;
6049 char* var459 /* : NativeString */;
6050 long var460 /* : Int */;
6051 val* var461 /* : String */;
6052 val* var462 /* : String */;
6053 val* var_is_nullable /* var is_nullable: String */;
6054 static val* varonce463;
6055 val* var464 /* : String */;
6056 char* var465 /* : NativeString */;
6057 long var466 /* : Int */;
6058 val* var467 /* : String */;
6059 static val* varonce468;
6060 val* var469 /* : String */;
6061 char* var470 /* : NativeString */;
6062 long var471 /* : Int */;
6063 val* var472 /* : String */;
6064 val* var473 /* : Array[Object] */;
6065 long var474 /* : Int */;
6066 val* var475 /* : NativeArray[Object] */;
6067 val* var476 /* : String */;
6068 static val* varonce477;
6069 val* var478 /* : String */;
6070 char* var479 /* : NativeString */;
6071 long var480 /* : Int */;
6072 val* var481 /* : String */;
6073 static val* varonce482;
6074 val* var483 /* : String */;
6075 char* var484 /* : NativeString */;
6076 long var485 /* : Int */;
6077 val* var486 /* : String */;
6078 val* var487 /* : Array[Object] */;
6079 long var488 /* : Int */;
6080 val* var489 /* : NativeArray[Object] */;
6081 val* var490 /* : String */;
6082 val* var491 /* : String */;
6083 val* var492 /* : AbstractCompiler */;
6084 val* var493 /* : ModelBuilder */;
6085 val* var494 /* : ToolContext */;
6086 val* var495 /* : OptionBool */;
6087 val* var496 /* : nullable Object */;
6088 short int var497 /* : Bool */;
6089 val* var498 /* : AbstractCompiler */;
6090 val* var499 /* : HashMap[String, Int] */;
6091 val* var_500 /* var : HashMap[String, Int] */;
6092 val* var_501 /* var : String */;
6093 val* var502 /* : nullable Object */;
6094 long var503 /* : Int */;
6095 long var504 /* : Int */;
6096 long var506 /* : Int */;
6097 long var507 /* : Int */;
6098 val* var508 /* : nullable Object */;
6099 static val* varonce509;
6100 val* var510 /* : String */;
6101 char* var511 /* : NativeString */;
6102 long var512 /* : Int */;
6103 val* var513 /* : String */;
6104 static val* varonce514;
6105 val* var515 /* : String */;
6106 char* var516 /* : NativeString */;
6107 long var517 /* : Int */;
6108 val* var518 /* : String */;
6109 val* var519 /* : Array[Object] */;
6110 long var520 /* : Int */;
6111 val* var521 /* : NativeArray[Object] */;
6112 val* var522 /* : String */;
6113 static val* varonce523;
6114 val* var524 /* : String */;
6115 char* var525 /* : NativeString */;
6116 long var526 /* : Int */;
6117 val* var527 /* : String */;
6118 val* var528 /* : String */;
6119 static val* varonce529;
6120 val* var530 /* : String */;
6121 char* var531 /* : NativeString */;
6122 long var532 /* : Int */;
6123 val* var533 /* : String */;
6124 static val* varonce534;
6125 val* var535 /* : String */;
6126 char* var536 /* : NativeString */;
6127 long var537 /* : Int */;
6128 val* var538 /* : String */;
6129 val* var539 /* : Array[Object] */;
6130 long var540 /* : Int */;
6131 val* var541 /* : NativeArray[Object] */;
6132 val* var542 /* : String */;
6133 static val* varonce543;
6134 val* var544 /* : String */;
6135 char* var545 /* : NativeString */;
6136 long var546 /* : Int */;
6137 val* var547 /* : String */;
6138 static val* varonce548;
6139 val* var549 /* : String */;
6140 char* var550 /* : NativeString */;
6141 long var551 /* : Int */;
6142 val* var552 /* : String */;
6143 val* var553 /* : Array[Object] */;
6144 long var554 /* : Int */;
6145 val* var555 /* : NativeArray[Object] */;
6146 val* var556 /* : String */;
6147 static val* varonce557;
6148 val* var558 /* : String */;
6149 char* var559 /* : NativeString */;
6150 long var560 /* : Int */;
6151 val* var561 /* : String */;
6152 static val* varonce562;
6153 val* var563 /* : String */;
6154 char* var564 /* : NativeString */;
6155 long var565 /* : Int */;
6156 val* var566 /* : String */;
6157 val* var567 /* : Array[Object] */;
6158 long var568 /* : Int */;
6159 val* var569 /* : NativeArray[Object] */;
6160 val* var570 /* : String */;
6161 static val* varonce571;
6162 val* var572 /* : String */;
6163 char* var573 /* : NativeString */;
6164 long var574 /* : Int */;
6165 val* var575 /* : String */;
6166 val* var576 /* : AbstractCompiler */;
6167 short int var577 /* : Bool */;
6168 int cltype578;
6169 int idtype579;
6170 val* var580 /* : nullable Layout[MClass] */;
6171 short int var581 /* : Bool */;
6172 int cltype582;
6173 int idtype583;
6174 static val* varonce584;
6175 val* var585 /* : String */;
6176 char* var586 /* : NativeString */;
6177 long var587 /* : Int */;
6178 val* var588 /* : String */;
6179 static val* varonce589;
6180 val* var590 /* : String */;
6181 char* var591 /* : NativeString */;
6182 long var592 /* : Int */;
6183 val* var593 /* : String */;
6184 static val* varonce594;
6185 val* var595 /* : String */;
6186 char* var596 /* : NativeString */;
6187 long var597 /* : Int */;
6188 val* var598 /* : String */;
6189 val* var599 /* : Array[Object] */;
6190 long var600 /* : Int */;
6191 val* var601 /* : NativeArray[Object] */;
6192 val* var602 /* : String */;
6193 static val* varonce603;
6194 val* var604 /* : String */;
6195 char* var605 /* : NativeString */;
6196 long var606 /* : Int */;
6197 val* var607 /* : String */;
6198 static val* varonce608;
6199 val* var609 /* : String */;
6200 char* var610 /* : NativeString */;
6201 long var611 /* : Int */;
6202 val* var612 /* : String */;
6203 static val* varonce613;
6204 val* var614 /* : String */;
6205 char* var615 /* : NativeString */;
6206 long var616 /* : Int */;
6207 val* var617 /* : String */;
6208 val* var618 /* : Array[Object] */;
6209 long var619 /* : Int */;
6210 val* var620 /* : NativeArray[Object] */;
6211 val* var621 /* : String */;
6212 static val* varonce622;
6213 val* var623 /* : String */;
6214 char* var624 /* : NativeString */;
6215 long var625 /* : Int */;
6216 val* var626 /* : String */;
6217 val* var627 /* : Array[Object] */;
6218 long var628 /* : Int */;
6219 val* var629 /* : NativeArray[Object] */;
6220 val* var630 /* : String */;
6221 static val* varonce631;
6222 val* var632 /* : String */;
6223 char* var633 /* : NativeString */;
6224 long var634 /* : Int */;
6225 val* var635 /* : String */;
6226 static val* varonce636;
6227 val* var637 /* : String */;
6228 char* var638 /* : NativeString */;
6229 long var639 /* : Int */;
6230 val* var640 /* : String */;
6231 static val* varonce641;
6232 val* var642 /* : String */;
6233 char* var643 /* : NativeString */;
6234 long var644 /* : Int */;
6235 val* var645 /* : String */;
6236 static val* varonce646;
6237 val* var647 /* : String */;
6238 char* var648 /* : NativeString */;
6239 long var649 /* : Int */;
6240 val* var650 /* : String */;
6241 static val* varonce651;
6242 val* var652 /* : String */;
6243 char* var653 /* : NativeString */;
6244 long var654 /* : Int */;
6245 val* var655 /* : String */;
6246 val* var656 /* : Array[Object] */;
6247 long var657 /* : Int */;
6248 val* var658 /* : NativeArray[Object] */;
6249 val* var659 /* : String */;
6250 static val* varonce660;
6251 val* var661 /* : String */;
6252 char* var662 /* : NativeString */;
6253 long var663 /* : Int */;
6254 val* var664 /* : String */;
6255 static val* varonce665;
6256 val* var666 /* : String */;
6257 char* var667 /* : NativeString */;
6258 long var668 /* : Int */;
6259 val* var669 /* : String */;
6260 var_value = p0;
6261 var_mtype = p1;
6262 var_tag = p2;
6263 if (varonce) {
6264 var1 = varonce;
6265 } else {
6266 var2 = "/* type test for ";
6267 var3 = 17;
6268 var4 = string__NativeString__to_s_with_length(var2, var3);
6269 var1 = var4;
6270 varonce = var1;
6271 }
6272 var5 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
6273 if (varonce6) {
6274 var7 = varonce6;
6275 } else {
6276 var8 = " isa ";
6277 var9 = 5;
6278 var10 = string__NativeString__to_s_with_length(var8, var9);
6279 var7 = var10;
6280 varonce6 = var7;
6281 }
6282 if (varonce11) {
6283 var12 = varonce11;
6284 } else {
6285 var13 = " */";
6286 var14 = 3;
6287 var15 = string__NativeString__to_s_with_length(var13, var14);
6288 var12 = var15;
6289 varonce11 = var12;
6290 }
6291 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
6292 { /* var16 = array_instance Array[Object] */
6293 var17 = 5;
6294 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
6295 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var1;
6296 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var5;
6297 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var7;
6298 ((struct instance_array__NativeArray*)var18)->values[3] = (val*) var_mtype;
6299 ((struct instance_array__NativeArray*)var18)->values[4] = (val*) var12;
6300 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
6301 CHECK_NEW_array__Array(var16);
6302 }
6303 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
6304 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var19) /* add on <self:SeparateErasureCompilerVisitor>*/;
6305 var20 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__bool_type]))(self) /* bool_type on <self:SeparateErasureCompilerVisitor>*/;
6306 var21 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var20) /* new_var on <self:SeparateErasureCompilerVisitor>*/;
6307 var_res = var21;
6308 if (varonce22) {
6309 var23 = varonce22;
6310 } else {
6311 var24 = "cltype";
6312 var25 = 6;
6313 var26 = string__NativeString__to_s_with_length(var24, var25);
6314 var23 = var26;
6315 varonce22 = var23;
6316 }
6317 var27 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var23) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
6318 var_cltype = var27;
6319 if (varonce28) {
6320 var29 = varonce28;
6321 } else {
6322 var30 = "int ";
6323 var31 = 4;
6324 var32 = string__NativeString__to_s_with_length(var30, var31);
6325 var29 = var32;
6326 varonce28 = var29;
6327 }
6328 if (varonce33) {
6329 var34 = varonce33;
6330 } else {
6331 var35 = ";";
6332 var36 = 1;
6333 var37 = string__NativeString__to_s_with_length(var35, var36);
6334 var34 = var37;
6335 varonce33 = var34;
6336 }
6337 var38 = NEW_array__Array(&type_array__Arraykernel__Object);
6338 { /* var38 = array_instance Array[Object] */
6339 var39 = 3;
6340 var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
6341 ((struct instance_array__NativeArray*)var40)->values[0] = (val*) var29;
6342 ((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_cltype;
6343 ((struct instance_array__NativeArray*)var40)->values[2] = (val*) var34;
6344 ((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
6345 CHECK_NEW_array__Array(var38);
6346 }
6347 var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
6348 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var41) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
6349 if (varonce42) {
6350 var43 = varonce42;
6351 } else {
6352 var44 = "idtype";
6353 var45 = 6;
6354 var46 = string__NativeString__to_s_with_length(var44, var45);
6355 var43 = var46;
6356 varonce42 = var43;
6357 }
6358 var47 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var43) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
6359 var_idtype = var47;
6360 if (varonce48) {
6361 var49 = varonce48;
6362 } else {
6363 var50 = "int ";
6364 var51 = 4;
6365 var52 = string__NativeString__to_s_with_length(var50, var51);
6366 var49 = var52;
6367 varonce48 = var49;
6368 }
6369 if (varonce53) {
6370 var54 = varonce53;
6371 } else {
6372 var55 = ";";
6373 var56 = 1;
6374 var57 = string__NativeString__to_s_with_length(var55, var56);
6375 var54 = var57;
6376 varonce53 = var54;
6377 }
6378 var58 = NEW_array__Array(&type_array__Arraykernel__Object);
6379 { /* var58 = array_instance Array[Object] */
6380 var59 = 3;
6381 var60 = NEW_array__NativeArray(var59, &type_array__NativeArraykernel__Object);
6382 ((struct instance_array__NativeArray*)var60)->values[0] = (val*) var49;
6383 ((struct instance_array__NativeArray*)var60)->values[1] = (val*) var_idtype;
6384 ((struct instance_array__NativeArray*)var60)->values[2] = (val*) var54;
6385 ((void (*)(val*, val*, long))(var58->class->vft[COLOR_array__Array__with_native]))(var58, var60, var59) /* with_native on <var58:Array[Object]>*/;
6386 CHECK_NEW_array__Array(var58);
6387 }
6388 var61 = ((val* (*)(val*))(var58->class->vft[COLOR_string__Object__to_s]))(var58) /* to_s on <var58:Array[Object]>*/;
6389 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var61) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
6390 var62 = ((short int (*)(val*, val*))(self->class->vft[COLOR_separate_compiler__SeparateCompilerVisitor__maybe_null]))(self, var_value) /* maybe_null on <self:SeparateErasureCompilerVisitor>*/;
6391 var_maybe_null = var62;
6392 if (varonce63) {
6393 var64 = varonce63;
6394 } else {
6395 var65 = "0";
6396 var66 = 1;
6397 var67 = string__NativeString__to_s_with_length(var65, var66);
6398 var64 = var67;
6399 varonce63 = var64;
6400 }
6401 var_accept_null = var64;
6402 /* <var_mtype:MType> isa MNullableType */
6403 cltype = type_model__MNullableType.color;
6404 idtype = type_model__MNullableType.id;
6405 if(cltype >= var_mtype->type->table_size) {
6406 var68 = 0;
6407 } else {
6408 var68 = var_mtype->type->type_table[cltype] == idtype;
6409 }
6410 if (var68){
6411 var69 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
6412 var_mtype = var69;
6413 if (varonce70) {
6414 var71 = varonce70;
6415 } else {
6416 var72 = "1";
6417 var73 = 1;
6418 var74 = string__NativeString__to_s_with_length(var72, var73);
6419 var71 = var74;
6420 varonce70 = var71;
6421 }
6422 var_accept_null = var71;
6423 } else {
6424 }
6425 /* <var_mtype:MType> isa MParameterType */
6426 cltype76 = type_model__MParameterType.color;
6427 idtype77 = type_model__MParameterType.id;
6428 if(cltype76 >= var_mtype->type->table_size) {
6429 var75 = 0;
6430 } else {
6431 var75 = var_mtype->type->type_table[cltype76] == idtype77;
6432 }
6433 if (var75){
6434 var78 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6435 if (var78 == NULL) {
6436 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 487);
6437 exit(1);
6438 } else {
6439 var79 = ((val* (*)(val*))(var78->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var78) /* mpropdef on <var78:nullable Frame>*/;
6440 }
6441 var80 = ((val* (*)(val*))(var79->class->vft[COLOR_model__MPropDef__mclassdef]))(var79) /* mclassdef on <var79:MPropDef>*/;
6442 var81 = ((val* (*)(val*))(var80->class->vft[COLOR_model__MClassDef__bound_mtype]))(var80) /* bound_mtype on <var80:MClassDef>*/;
6443 var82 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6444 if (var82 == NULL) {
6445 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 487);
6446 exit(1);
6447 } else {
6448 var83 = ((val* (*)(val*))(var82->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var82) /* mpropdef on <var82:nullable Frame>*/;
6449 }
6450 var84 = ((val* (*)(val*))(var83->class->vft[COLOR_model__MPropDef__mclassdef]))(var83) /* mclassdef on <var83:MPropDef>*/;
6451 var85 = ((val* (*)(val*))(var84->class->vft[COLOR_model__MClassDef__bound_mtype]))(var84) /* bound_mtype on <var84:MClassDef>*/;
6452 var86 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6453 if (var86 == NULL) {
6454 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 487);
6455 exit(1);
6456 } else {
6457 var87 = ((val* (*)(val*))(var86->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var86) /* mpropdef on <var86:nullable Frame>*/;
6458 }
6459 var88 = ((val* (*)(val*))(var87->class->vft[COLOR_model__MPropDef__mclassdef]))(var87) /* mclassdef on <var87:MPropDef>*/;
6460 var89 = ((val* (*)(val*))(var88->class->vft[COLOR_model__MClassDef__mmodule]))(var88) /* mmodule on <var88:MClassDef>*/;
6461 var90 = 0;
6462 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)>*/;
6463 var_mtype = var91;
6464 /* <var_mtype:MType> isa MNullableType */
6465 cltype93 = type_model__MNullableType.color;
6466 idtype94 = type_model__MNullableType.id;
6467 if(cltype93 >= var_mtype->type->table_size) {
6468 var92 = 0;
6469 } else {
6470 var92 = var_mtype->type->type_table[cltype93] == idtype94;
6471 }
6472 if (var92){
6473 var95 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MNullableType__mtype]))(var_mtype) /* mtype on <var_mtype:MType(MNullableType)>*/;
6474 var_mtype = var95;
6475 if (varonce96) {
6476 var97 = varonce96;
6477 } else {
6478 var98 = "1";
6479 var99 = 1;
6480 var100 = string__NativeString__to_s_with_length(var98, var99);
6481 var97 = var100;
6482 varonce96 = var97;
6483 }
6484 var_accept_null = var97;
6485 } else {
6486 }
6487 } else {
6488 }
6489 var101 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mcasttype]))(var_value) /* mcasttype on <var_value:RuntimeVariable>*/;
6490 var102 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6491 if (var102 == NULL) {
6492 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 494);
6493 exit(1);
6494 } else {
6495 var103 = ((val* (*)(val*))(var102->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var102) /* mpropdef on <var102:nullable Frame>*/;
6496 }
6497 var104 = ((val* (*)(val*))(var103->class->vft[COLOR_model__MPropDef__mclassdef]))(var103) /* mclassdef on <var103:MPropDef>*/;
6498 var105 = ((val* (*)(val*))(var104->class->vft[COLOR_model__MClassDef__mmodule]))(var104) /* mmodule on <var104:MClassDef>*/;
6499 var106 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6500 if (var106 == NULL) {
6501 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 494);
6502 exit(1);
6503 } else {
6504 var107 = ((val* (*)(val*))(var106->class->vft[COLOR_abstract_compiler__Frame__mpropdef]))(var106) /* mpropdef on <var106:nullable Frame>*/;
6505 }
6506 var108 = ((val* (*)(val*))(var107->class->vft[COLOR_model__MPropDef__mclassdef]))(var107) /* mclassdef on <var107:MPropDef>*/;
6507 var109 = ((val* (*)(val*))(var108->class->vft[COLOR_model__MClassDef__bound_mtype]))(var108) /* bound_mtype on <var108:MClassDef>*/;
6508 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>*/;
6509 if (var110){
6510 if (varonce111) {
6511 var112 = varonce111;
6512 } else {
6513 var113 = " = 1; /* easy ";
6514 var114 = 14;
6515 var115 = string__NativeString__to_s_with_length(var113, var114);
6516 var112 = var115;
6517 varonce111 = var112;
6518 }
6519 var116 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
6520 if (varonce117) {
6521 var118 = varonce117;
6522 } else {
6523 var119 = " isa ";
6524 var120 = 5;
6525 var121 = string__NativeString__to_s_with_length(var119, var120);
6526 var118 = var121;
6527 varonce117 = var118;
6528 }
6529 if (varonce122) {
6530 var123 = varonce122;
6531 } else {
6532 var124 = "*/";
6533 var125 = 2;
6534 var126 = string__NativeString__to_s_with_length(var124, var125);
6535 var123 = var126;
6536 varonce122 = var123;
6537 }
6538 var127 = NEW_array__Array(&type_array__Arraykernel__Object);
6539 { /* var127 = array_instance Array[Object] */
6540 var128 = 6;
6541 var129 = NEW_array__NativeArray(var128, &type_array__NativeArraykernel__Object);
6542 ((struct instance_array__NativeArray*)var129)->values[0] = (val*) var_res;
6543 ((struct instance_array__NativeArray*)var129)->values[1] = (val*) var112;
6544 ((struct instance_array__NativeArray*)var129)->values[2] = (val*) var116;
6545 ((struct instance_array__NativeArray*)var129)->values[3] = (val*) var118;
6546 ((struct instance_array__NativeArray*)var129)->values[4] = (val*) var_mtype;
6547 ((struct instance_array__NativeArray*)var129)->values[5] = (val*) var123;
6548 ((void (*)(val*, val*, long))(var127->class->vft[COLOR_array__Array__with_native]))(var127, var129, var128) /* with_native on <var127:Array[Object]>*/;
6549 CHECK_NEW_array__Array(var127);
6550 }
6551 var130 = ((val* (*)(val*))(var127->class->vft[COLOR_string__Object__to_s]))(var127) /* to_s on <var127:Array[Object]>*/;
6552 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var130) /* add on <self:SeparateErasureCompilerVisitor>*/;
6553 var131 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6554 var132 = ((val* (*)(val*))(var131->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var131) /* modelbuilder on <var131:AbstractCompiler(SeparateCompiler)>*/;
6555 var133 = ((val* (*)(val*))(var132->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var132) /* toolcontext on <var132:ModelBuilder>*/;
6556 var134 = ((val* (*)(val*))(var133->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var133) /* opt_typing_test_metrics on <var133:ToolContext>*/;
6557 var135 = ((val* (*)(val*))(var134->class->vft[COLOR_opts__Option__value]))(var134) /* value on <var134:OptionBool>*/;
6558 var136 = ((struct instance_kernel__Bool*)var135)->value; /* autounbox from nullable Object to Bool */;
6559 if (var136){
6560 var137 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6561 var138 = ((val* (*)(val*))(var137->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_skipped]))(var137) /* count_type_test_skipped on <var137:AbstractCompiler(SeparateCompiler)>*/;
6562 var_ = var138;
6563 var_139 = var_tag;
6564 var140 = ((val* (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_, var_139) /* [] on <var_:HashMap[String, Int]>*/;
6565 var141 = 1;
6566 { /* Inline kernel#Int#+ (var140,var141) */
6567 var144 = ((struct instance_kernel__Int*)var140)->value; /* autounbox from nullable Object to Int */;
6568 var145 = var144 + var141;
6569 var142 = var145;
6570 goto RET_LABEL143;
6571 RET_LABEL143:(void)0;
6572 }
6573 var146 = BOX_kernel__Int(var142); /* autobox from Int to nullable Object */
6574 ((void (*)(val*, val*, val*))(var_->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_, var_139, var146) /* []= on <var_:HashMap[String, Int]>*/;
6575 if (varonce147) {
6576 var148 = varonce147;
6577 } else {
6578 var149 = "count_type_test_skipped_";
6579 var150 = 24;
6580 var151 = string__NativeString__to_s_with_length(var149, var150);
6581 var148 = var151;
6582 varonce147 = var148;
6583 }
6584 if (varonce152) {
6585 var153 = varonce152;
6586 } else {
6587 var154 = "++;";
6588 var155 = 3;
6589 var156 = string__NativeString__to_s_with_length(var154, var155);
6590 var153 = var156;
6591 varonce152 = var153;
6592 }
6593 var157 = NEW_array__Array(&type_array__Arraykernel__Object);
6594 { /* var157 = array_instance Array[Object] */
6595 var158 = 3;
6596 var159 = NEW_array__NativeArray(var158, &type_array__NativeArraykernel__Object);
6597 ((struct instance_array__NativeArray*)var159)->values[0] = (val*) var148;
6598 ((struct instance_array__NativeArray*)var159)->values[1] = (val*) var_tag;
6599 ((struct instance_array__NativeArray*)var159)->values[2] = (val*) var153;
6600 ((void (*)(val*, val*, long))(var157->class->vft[COLOR_array__Array__with_native]))(var157, var159, var158) /* with_native on <var157:Array[Object]>*/;
6601 CHECK_NEW_array__Array(var157);
6602 }
6603 var160 = ((val* (*)(val*))(var157->class->vft[COLOR_string__Object__to_s]))(var157) /* to_s on <var157:Array[Object]>*/;
6604 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var160) /* add on <self:SeparateErasureCompilerVisitor>*/;
6605 } else {
6606 }
6607 var = var_res;
6608 goto RET_LABEL;
6609 } else {
6610 }
6611 var161 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
6612 var162 = ((val* (*)(val*))(var161->class->vft[COLOR_abstract_compiler__MType__ctype]))(var161) /* ctype on <var161:MType>*/;
6613 if (varonce163) {
6614 var164 = varonce163;
6615 } else {
6616 var165 = "val*";
6617 var166 = 4;
6618 var167 = string__NativeString__to_s_with_length(var165, var166);
6619 var164 = var167;
6620 varonce163 = var164;
6621 }
6622 var168 = ((short int (*)(val*, val*))(var162->class->vft[COLOR_kernel__Object___61d_61d]))(var162, var164) /* == on <var162:String>*/;
6623 if (var168){
6624 var169 = NEW_array__Array(&type_array__Arraykernel__Object);
6625 var170 = 3;
6626 ((void (*)(val*, long))(var169->class->vft[COLOR_array__Array__with_capacity]))(var169, var170) /* with_capacity on <var169:Array[Object]>*/;
6627 CHECK_NEW_array__Array(var169);
6628 var_171 = var169;
6629 if (varonce172) {
6630 var173 = varonce172;
6631 } else {
6632 var174 = "";
6633 var175 = 0;
6634 var176 = string__NativeString__to_s_with_length(var174, var175);
6635 var173 = var176;
6636 varonce172 = var173;
6637 }
6638 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var173) /* add on <var_171:Array[Object]>*/;
6639 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var_value) /* add on <var_171:Array[Object]>*/;
6640 if (varonce177) {
6641 var178 = varonce177;
6642 } else {
6643 var179 = "->class->";
6644 var180 = 9;
6645 var181 = string__NativeString__to_s_with_length(var179, var180);
6646 var178 = var181;
6647 varonce177 = var178;
6648 }
6649 ((void (*)(val*, val*))(var_171->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_171, var178) /* add on <var_171:Array[Object]>*/;
6650 var182 = ((val* (*)(val*))(var_171->class->vft[COLOR_string__Object__to_s]))(var_171) /* to_s on <var_171:Array[Object]>*/;
6651 var_class_ptr = var182;
6652 } else {
6653 var183 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
6654 /* <var183:MType> isa MClassType */
6655 cltype185 = type_model__MClassType.color;
6656 idtype186 = type_model__MClassType.id;
6657 if(cltype185 >= var183->type->table_size) {
6658 var184 = 0;
6659 } else {
6660 var184 = var183->type->type_table[cltype185] == idtype186;
6661 }
6662 if (!var184) {
6663 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/separate_erasure_compiler.nit", 508);
6664 exit(1);
6665 }
6666 var187 = ((val* (*)(val*))(var183->class->vft[COLOR_model__MClassType__mclass]))(var183) /* mclass on <var183:MType(MClassType)>*/;
6667 var_mclass = var187;
6668 if (varonce188) {
6669 var189 = varonce188;
6670 } else {
6671 var190 = "class_";
6672 var191 = 6;
6673 var192 = string__NativeString__to_s_with_length(var190, var191);
6674 var189 = var192;
6675 varonce188 = var189;
6676 }
6677 var193 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
6678 var194 = NEW_array__Array(&type_array__Arraykernel__Object);
6679 { /* var194 = array_instance Array[Object] */
6680 var195 = 2;
6681 var196 = NEW_array__NativeArray(var195, &type_array__NativeArraykernel__Object);
6682 ((struct instance_array__NativeArray*)var196)->values[0] = (val*) var189;
6683 ((struct instance_array__NativeArray*)var196)->values[1] = (val*) var193;
6684 ((void (*)(val*, val*, long))(var194->class->vft[COLOR_array__Array__with_native]))(var194, var196, var195) /* with_native on <var194:Array[Object]>*/;
6685 CHECK_NEW_array__Array(var194);
6686 }
6687 var197 = ((val* (*)(val*))(var194->class->vft[COLOR_string__Object__to_s]))(var194) /* to_s on <var194:Array[Object]>*/;
6688 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var197) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6689 var198 = NEW_array__Array(&type_array__Arraykernel__Object);
6690 var199 = 3;
6691 ((void (*)(val*, long))(var198->class->vft[COLOR_array__Array__with_capacity]))(var198, var199) /* with_capacity on <var198:Array[Object]>*/;
6692 CHECK_NEW_array__Array(var198);
6693 var_200 = var198;
6694 if (varonce201) {
6695 var202 = varonce201;
6696 } else {
6697 var203 = "class_";
6698 var204 = 6;
6699 var205 = string__NativeString__to_s_with_length(var203, var204);
6700 var202 = var205;
6701 varonce201 = var202;
6702 }
6703 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var202) /* add on <var_200:Array[Object]>*/;
6704 var206 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass) /* c_name on <var_mclass:MClass>*/;
6705 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var206) /* add on <var_200:Array[Object]>*/;
6706 if (varonce207) {
6707 var208 = varonce207;
6708 } else {
6709 var209 = ".";
6710 var210 = 1;
6711 var211 = string__NativeString__to_s_with_length(var209, var210);
6712 var208 = var211;
6713 varonce207 = var208;
6714 }
6715 ((void (*)(val*, val*))(var_200->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_200, var208) /* add on <var_200:Array[Object]>*/;
6716 var212 = ((val* (*)(val*))(var_200->class->vft[COLOR_string__Object__to_s]))(var_200) /* to_s on <var_200:Array[Object]>*/;
6717 var_class_ptr = var212;
6718 }
6719 /* <var_mtype:MType> isa MClassType */
6720 cltype214 = type_model__MClassType.color;
6721 idtype215 = type_model__MClassType.id;
6722 if(cltype214 >= var_mtype->type->table_size) {
6723 var213 = 0;
6724 } else {
6725 var213 = var_mtype->type->type_table[cltype214] == idtype215;
6726 }
6727 if (var213){
6728 if (varonce216) {
6729 var217 = varonce216;
6730 } else {
6731 var218 = "class_";
6732 var219 = 6;
6733 var220 = string__NativeString__to_s_with_length(var218, var219);
6734 var217 = var220;
6735 varonce216 = var217;
6736 }
6737 var221 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6738 var222 = ((val* (*)(val*))(var221->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var221) /* c_name on <var221:MClass>*/;
6739 var223 = NEW_array__Array(&type_array__Arraykernel__Object);
6740 { /* var223 = array_instance Array[Object] */
6741 var224 = 2;
6742 var225 = NEW_array__NativeArray(var224, &type_array__NativeArraykernel__Object);
6743 ((struct instance_array__NativeArray*)var225)->values[0] = (val*) var217;
6744 ((struct instance_array__NativeArray*)var225)->values[1] = (val*) var222;
6745 ((void (*)(val*, val*, long))(var223->class->vft[COLOR_array__Array__with_native]))(var223, var225, var224) /* with_native on <var223:Array[Object]>*/;
6746 CHECK_NEW_array__Array(var223);
6747 }
6748 var226 = ((val* (*)(val*))(var223->class->vft[COLOR_string__Object__to_s]))(var223) /* to_s on <var223:Array[Object]>*/;
6749 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var226) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6750 if (varonce227) {
6751 var228 = varonce227;
6752 } else {
6753 var229 = " = class_";
6754 var230 = 9;
6755 var231 = string__NativeString__to_s_with_length(var229, var230);
6756 var228 = var231;
6757 varonce227 = var228;
6758 }
6759 var232 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6760 var233 = ((val* (*)(val*))(var232->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var232) /* c_name on <var232:MClass>*/;
6761 if (varonce234) {
6762 var235 = varonce234;
6763 } else {
6764 var236 = ".color;";
6765 var237 = 7;
6766 var238 = string__NativeString__to_s_with_length(var236, var237);
6767 var235 = var238;
6768 varonce234 = var235;
6769 }
6770 var239 = NEW_array__Array(&type_array__Arraykernel__Object);
6771 { /* var239 = array_instance Array[Object] */
6772 var240 = 4;
6773 var241 = NEW_array__NativeArray(var240, &type_array__NativeArraykernel__Object);
6774 ((struct instance_array__NativeArray*)var241)->values[0] = (val*) var_cltype;
6775 ((struct instance_array__NativeArray*)var241)->values[1] = (val*) var228;
6776 ((struct instance_array__NativeArray*)var241)->values[2] = (val*) var233;
6777 ((struct instance_array__NativeArray*)var241)->values[3] = (val*) var235;
6778 ((void (*)(val*, val*, long))(var239->class->vft[COLOR_array__Array__with_native]))(var239, var241, var240) /* with_native on <var239:Array[Object]>*/;
6779 CHECK_NEW_array__Array(var239);
6780 }
6781 var242 = ((val* (*)(val*))(var239->class->vft[COLOR_string__Object__to_s]))(var239) /* to_s on <var239:Array[Object]>*/;
6782 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var242) /* add on <self:SeparateErasureCompilerVisitor>*/;
6783 if (varonce243) {
6784 var244 = varonce243;
6785 } else {
6786 var245 = " = class_";
6787 var246 = 9;
6788 var247 = string__NativeString__to_s_with_length(var245, var246);
6789 var244 = var247;
6790 varonce243 = var244;
6791 }
6792 var248 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MClassType__mclass]))(var_mtype) /* mclass on <var_mtype:MType(MClassType)>*/;
6793 var249 = ((val* (*)(val*))(var248->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var248) /* c_name on <var248:MClass>*/;
6794 if (varonce250) {
6795 var251 = varonce250;
6796 } else {
6797 var252 = ".id;";
6798 var253 = 4;
6799 var254 = string__NativeString__to_s_with_length(var252, var253);
6800 var251 = var254;
6801 varonce250 = var251;
6802 }
6803 var255 = NEW_array__Array(&type_array__Arraykernel__Object);
6804 { /* var255 = array_instance Array[Object] */
6805 var256 = 4;
6806 var257 = NEW_array__NativeArray(var256, &type_array__NativeArraykernel__Object);
6807 ((struct instance_array__NativeArray*)var257)->values[0] = (val*) var_idtype;
6808 ((struct instance_array__NativeArray*)var257)->values[1] = (val*) var244;
6809 ((struct instance_array__NativeArray*)var257)->values[2] = (val*) var249;
6810 ((struct instance_array__NativeArray*)var257)->values[3] = (val*) var251;
6811 ((void (*)(val*, val*, long))(var255->class->vft[COLOR_array__Array__with_native]))(var255, var257, var256) /* with_native on <var255:Array[Object]>*/;
6812 CHECK_NEW_array__Array(var255);
6813 }
6814 var258 = ((val* (*)(val*))(var255->class->vft[COLOR_string__Object__to_s]))(var255) /* to_s on <var255:Array[Object]>*/;
6815 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var258) /* add on <self:SeparateErasureCompilerVisitor>*/;
6816 var259 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6817 var260 = ((val* (*)(val*))(var259->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var259) /* modelbuilder on <var259:AbstractCompiler(SeparateCompiler)>*/;
6818 var261 = ((val* (*)(val*))(var260->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var260) /* toolcontext on <var260:ModelBuilder>*/;
6819 var262 = ((val* (*)(val*))(var261->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var261) /* opt_typing_test_metrics on <var261:ToolContext>*/;
6820 var263 = ((val* (*)(val*))(var262->class->vft[COLOR_opts__Option__value]))(var262) /* value on <var262:OptionBool>*/;
6821 var264 = ((struct instance_kernel__Bool*)var263)->value; /* autounbox from nullable Object to Bool */;
6822 if (var264){
6823 var265 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
6824 var266 = ((val* (*)(val*))(var265->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_resolved]))(var265) /* count_type_test_resolved on <var265:AbstractCompiler(SeparateCompiler)>*/;
6825 var_267 = var266;
6826 var_268 = var_tag;
6827 var269 = ((val* (*)(val*, val*))(var_267->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_267, var_268) /* [] on <var_267:HashMap[String, Int]>*/;
6828 var270 = 1;
6829 { /* Inline kernel#Int#+ (var269,var270) */
6830 var273 = ((struct instance_kernel__Int*)var269)->value; /* autounbox from nullable Object to Int */;
6831 var274 = var273 + var270;
6832 var271 = var274;
6833 goto RET_LABEL272;
6834 RET_LABEL272:(void)0;
6835 }
6836 var275 = BOX_kernel__Int(var271); /* autobox from Int to nullable Object */
6837 ((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]>*/;
6838 if (varonce276) {
6839 var277 = varonce276;
6840 } else {
6841 var278 = "count_type_test_resolved_";
6842 var279 = 25;
6843 var280 = string__NativeString__to_s_with_length(var278, var279);
6844 var277 = var280;
6845 varonce276 = var277;
6846 }
6847 if (varonce281) {
6848 var282 = varonce281;
6849 } else {
6850 var283 = "++;";
6851 var284 = 3;
6852 var285 = string__NativeString__to_s_with_length(var283, var284);
6853 var282 = var285;
6854 varonce281 = var282;
6855 }
6856 var286 = NEW_array__Array(&type_array__Arraykernel__Object);
6857 { /* var286 = array_instance Array[Object] */
6858 var287 = 3;
6859 var288 = NEW_array__NativeArray(var287, &type_array__NativeArraykernel__Object);
6860 ((struct instance_array__NativeArray*)var288)->values[0] = (val*) var277;
6861 ((struct instance_array__NativeArray*)var288)->values[1] = (val*) var_tag;
6862 ((struct instance_array__NativeArray*)var288)->values[2] = (val*) var282;
6863 ((void (*)(val*, val*, long))(var286->class->vft[COLOR_array__Array__with_native]))(var286, var288, var287) /* with_native on <var286:Array[Object]>*/;
6864 CHECK_NEW_array__Array(var286);
6865 }
6866 var289 = ((val* (*)(val*))(var286->class->vft[COLOR_string__Object__to_s]))(var286) /* to_s on <var286:Array[Object]>*/;
6867 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var289) /* add on <self:SeparateErasureCompilerVisitor>*/;
6868 } else {
6869 }
6870 } else {
6871 /* <var_mtype:MType> isa MVirtualType */
6872 cltype291 = type_model__MVirtualType.color;
6873 idtype292 = type_model__MVirtualType.id;
6874 if(cltype291 >= var_mtype->type->table_size) {
6875 var290 = 0;
6876 } else {
6877 var290 = var_mtype->type->type_table[cltype291] == idtype292;
6878 }
6879 if (var290){
6880 var293 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__frame]))(self) /* frame on <self:SeparateErasureCompilerVisitor>*/;
6881 if (var293 == NULL) {
6882 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Reciever is null", "src/separate_erasure_compiler.nit", 522);
6883 exit(1);
6884 } else {
6885 var294 = ((val* (*)(val*))(var293->class->vft[COLOR_abstract_compiler__Frame__arguments]))(var293) /* arguments on <var293:nullable Frame>*/;
6886 }
6887 var295 = ((val* (*)(val*))(var294->class->vft[COLOR_abstract_collection__Collection__first]))(var294) /* first on <var294:Array[RuntimeVariable]>*/;
6888 var_recv = var295;
6889 var296 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6890 var297 = ((val* (*)(val*))(var296->class->vft[COLOR_abstract_compiler__MType__ctype]))(var296) /* ctype on <var296:MType>*/;
6891 if (varonce298) {
6892 var299 = varonce298;
6893 } else {
6894 var300 = "val*";
6895 var301 = 4;
6896 var302 = string__NativeString__to_s_with_length(var300, var301);
6897 var299 = var302;
6898 varonce298 = var299;
6899 }
6900 var303 = ((short int (*)(val*, val*))(var297->class->vft[COLOR_kernel__Object___61d_61d]))(var297, var299) /* == on <var297:String>*/;
6901 if (var303){
6902 if (varonce304) {
6903 var305 = varonce304;
6904 } else {
6905 var306 = "->class->";
6906 var307 = 9;
6907 var308 = string__NativeString__to_s_with_length(var306, var307);
6908 var305 = var308;
6909 varonce304 = var305;
6910 }
6911 var309 = NEW_array__Array(&type_array__Arraykernel__Object);
6912 { /* var309 = array_instance Array[Object] */
6913 var310 = 2;
6914 var311 = NEW_array__NativeArray(var310, &type_array__NativeArraykernel__Object);
6915 ((struct instance_array__NativeArray*)var311)->values[0] = (val*) var_recv;
6916 ((struct instance_array__NativeArray*)var311)->values[1] = (val*) var305;
6917 ((void (*)(val*, val*, long))(var309->class->vft[COLOR_array__Array__with_native]))(var309, var311, var310) /* with_native on <var309:Array[Object]>*/;
6918 CHECK_NEW_array__Array(var309);
6919 }
6920 var312 = ((val* (*)(val*))(var309->class->vft[COLOR_string__Object__to_s]))(var309) /* to_s on <var309:Array[Object]>*/;
6921 var_recv_ptr = var312;
6922 } else {
6923 var313 = ((val* (*)(val*))(var_recv->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_recv) /* mtype on <var_recv:RuntimeVariable>*/;
6924 /* <var313:MType> isa MClassType */
6925 cltype315 = type_model__MClassType.color;
6926 idtype316 = type_model__MClassType.id;
6927 if(cltype315 >= var313->type->table_size) {
6928 var314 = 0;
6929 } else {
6930 var314 = var313->type->type_table[cltype315] == idtype316;
6931 }
6932 if (!var314) {
6933 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/separate_erasure_compiler.nit", 527);
6934 exit(1);
6935 }
6936 var317 = ((val* (*)(val*))(var313->class->vft[COLOR_model__MClassType__mclass]))(var313) /* mclass on <var313:MType(MClassType)>*/;
6937 var_mclass318 = var317;
6938 if (varonce319) {
6939 var320 = varonce319;
6940 } else {
6941 var321 = "class_";
6942 var322 = 6;
6943 var323 = string__NativeString__to_s_with_length(var321, var322);
6944 var320 = var323;
6945 varonce319 = var320;
6946 }
6947 var324 = ((val* (*)(val*))(var_mclass318->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass318) /* c_name on <var_mclass318:MClass>*/;
6948 var325 = NEW_array__Array(&type_array__Arraykernel__Object);
6949 { /* var325 = array_instance Array[Object] */
6950 var326 = 2;
6951 var327 = NEW_array__NativeArray(var326, &type_array__NativeArraykernel__Object);
6952 ((struct instance_array__NativeArray*)var327)->values[0] = (val*) var320;
6953 ((struct instance_array__NativeArray*)var327)->values[1] = (val*) var324;
6954 ((void (*)(val*, val*, long))(var325->class->vft[COLOR_array__Array__with_native]))(var325, var327, var326) /* with_native on <var325:Array[Object]>*/;
6955 CHECK_NEW_array__Array(var325);
6956 }
6957 var328 = ((val* (*)(val*))(var325->class->vft[COLOR_string__Object__to_s]))(var325) /* to_s on <var325:Array[Object]>*/;
6958 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var328) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
6959 if (varonce329) {
6960 var330 = varonce329;
6961 } else {
6962 var331 = "class_";
6963 var332 = 6;
6964 var333 = string__NativeString__to_s_with_length(var331, var332);
6965 var330 = var333;
6966 varonce329 = var330;
6967 }
6968 var334 = ((val* (*)(val*))(var_mclass318->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_mclass318) /* c_name on <var_mclass318:MClass>*/;
6969 if (varonce335) {
6970 var336 = varonce335;
6971 } else {
6972 var337 = ".";
6973 var338 = 1;
6974 var339 = string__NativeString__to_s_with_length(var337, var338);
6975 var336 = var339;
6976 varonce335 = var336;
6977 }
6978 var340 = NEW_array__Array(&type_array__Arraykernel__Object);
6979 { /* var340 = array_instance Array[Object] */
6980 var341 = 3;
6981 var342 = NEW_array__NativeArray(var341, &type_array__NativeArraykernel__Object);
6982 ((struct instance_array__NativeArray*)var342)->values[0] = (val*) var330;
6983 ((struct instance_array__NativeArray*)var342)->values[1] = (val*) var334;
6984 ((struct instance_array__NativeArray*)var342)->values[2] = (val*) var336;
6985 ((void (*)(val*, val*, long))(var340->class->vft[COLOR_array__Array__with_native]))(var340, var342, var341) /* with_native on <var340:Array[Object]>*/;
6986 CHECK_NEW_array__Array(var340);
6987 }
6988 var343 = ((val* (*)(val*))(var340->class->vft[COLOR_string__Object__to_s]))(var340) /* to_s on <var340:Array[Object]>*/;
6989 var_recv_ptr = var343;
6990 }
6991 if (varonce344) {
6992 var345 = varonce344;
6993 } else {
6994 var346 = "entry";
6995 var347 = 5;
6996 var348 = string__NativeString__to_s_with_length(var346, var347);
6997 var345 = var348;
6998 varonce344 = var345;
6999 }
7000 var349 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var345) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7001 var_entry = var349;
7002 if (varonce350) {
7003 var351 = varonce350;
7004 } else {
7005 var352 = "struct vts_entry ";
7006 var353 = 17;
7007 var354 = string__NativeString__to_s_with_length(var352, var353);
7008 var351 = var354;
7009 varonce350 = var351;
7010 }
7011 if (varonce355) {
7012 var356 = varonce355;
7013 } else {
7014 var357 = ";";
7015 var358 = 1;
7016 var359 = string__NativeString__to_s_with_length(var357, var358);
7017 var356 = var359;
7018 varonce355 = var356;
7019 }
7020 var360 = NEW_array__Array(&type_array__Arraykernel__Object);
7021 { /* var360 = array_instance Array[Object] */
7022 var361 = 3;
7023 var362 = NEW_array__NativeArray(var361, &type_array__NativeArraykernel__Object);
7024 ((struct instance_array__NativeArray*)var362)->values[0] = (val*) var351;
7025 ((struct instance_array__NativeArray*)var362)->values[1] = (val*) var_entry;
7026 ((struct instance_array__NativeArray*)var362)->values[2] = (val*) var356;
7027 ((void (*)(val*, val*, long))(var360->class->vft[COLOR_array__Array__with_native]))(var360, var362, var361) /* with_native on <var360:Array[Object]>*/;
7028 CHECK_NEW_array__Array(var360);
7029 }
7030 var363 = ((val* (*)(val*))(var360->class->vft[COLOR_string__Object__to_s]))(var360) /* to_s on <var360:Array[Object]>*/;
7031 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var363) /* add on <self:SeparateErasureCompilerVisitor>*/;
7032 var364 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7033 var365 = ((val* (*)(val*))(var364->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var364) /* const_color on <var364:MProperty>*/;
7034 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var365) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
7035 var366 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7036 /* <var366:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
7037 cltype368 = type_separate_erasure_compiler__SeparateErasureCompiler.color;
7038 idtype369 = type_separate_erasure_compiler__SeparateErasureCompiler.id;
7039 if(cltype368 >= var366->type->table_size) {
7040 var367 = 0;
7041 } else {
7042 var367 = var366->type->type_table[cltype368] == idtype369;
7043 }
7044 if (!var367) {
7045 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/separate_erasure_compiler.nit", 534);
7046 exit(1);
7047 }
7048 var370 = ((val* (*)(val*))(var366->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__vt_layout]))(var366) /* vt_layout on <var366:SeparateCompiler(SeparateErasureCompiler)>*/;
7049 /* <var370:nullable Layout[MVirtualTypeProp]> isa PHLayout[MClass, MVirtualTypeProp] */
7050 cltype372 = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.color;
7051 idtype373 = type_layout_builders__PHLayoutmodel__MClassmodel__MVirtualTypeProp.id;
7052 if(var370 == NULL) {
7053 var371 = 0;
7054 } else {
7055 if(cltype372 >= var370->type->table_size) {
7056 var371 = 0;
7057 } else {
7058 var371 = var370->type->type_table[cltype372] == idtype373;
7059 }
7060 }
7061 if (var371){
7062 if (varonce374) {
7063 var375 = varonce374;
7064 } else {
7065 var376 = " = ";
7066 var377 = 3;
7067 var378 = string__NativeString__to_s_with_length(var376, var377);
7068 var375 = var378;
7069 varonce374 = var375;
7070 }
7071 if (varonce379) {
7072 var380 = varonce379;
7073 } else {
7074 var381 = "vts_table->vts[HASH(";
7075 var382 = 20;
7076 var383 = string__NativeString__to_s_with_length(var381, var382);
7077 var380 = var383;
7078 varonce379 = var380;
7079 }
7080 if (varonce384) {
7081 var385 = varonce384;
7082 } else {
7083 var386 = "vts_table->mask, ";
7084 var387 = 17;
7085 var388 = string__NativeString__to_s_with_length(var386, var387);
7086 var385 = var388;
7087 varonce384 = var385;
7088 }
7089 var389 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7090 var390 = ((val* (*)(val*))(var389->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var389) /* const_color on <var389:MProperty>*/;
7091 if (varonce391) {
7092 var392 = varonce391;
7093 } else {
7094 var393 = ")];";
7095 var394 = 3;
7096 var395 = string__NativeString__to_s_with_length(var393, var394);
7097 var392 = var395;
7098 varonce391 = var392;
7099 }
7100 var396 = NEW_array__Array(&type_array__Arraykernel__Object);
7101 { /* var396 = array_instance Array[Object] */
7102 var397 = 8;
7103 var398 = NEW_array__NativeArray(var397, &type_array__NativeArraykernel__Object);
7104 ((struct instance_array__NativeArray*)var398)->values[0] = (val*) var_entry;
7105 ((struct instance_array__NativeArray*)var398)->values[1] = (val*) var375;
7106 ((struct instance_array__NativeArray*)var398)->values[2] = (val*) var_recv_ptr;
7107 ((struct instance_array__NativeArray*)var398)->values[3] = (val*) var380;
7108 ((struct instance_array__NativeArray*)var398)->values[4] = (val*) var_recv_ptr;
7109 ((struct instance_array__NativeArray*)var398)->values[5] = (val*) var385;
7110 ((struct instance_array__NativeArray*)var398)->values[6] = (val*) var390;
7111 ((struct instance_array__NativeArray*)var398)->values[7] = (val*) var392;
7112 ((void (*)(val*, val*, long))(var396->class->vft[COLOR_array__Array__with_native]))(var396, var398, var397) /* with_native on <var396:Array[Object]>*/;
7113 CHECK_NEW_array__Array(var396);
7114 }
7115 var399 = ((val* (*)(val*))(var396->class->vft[COLOR_string__Object__to_s]))(var396) /* to_s on <var396:Array[Object]>*/;
7116 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var399) /* add on <self:SeparateErasureCompilerVisitor>*/;
7117 } else {
7118 if (varonce400) {
7119 var401 = varonce400;
7120 } else {
7121 var402 = " = ";
7122 var403 = 3;
7123 var404 = string__NativeString__to_s_with_length(var402, var403);
7124 var401 = var404;
7125 varonce400 = var401;
7126 }
7127 if (varonce405) {
7128 var406 = varonce405;
7129 } else {
7130 var407 = "vts_table->vts[";
7131 var408 = 15;
7132 var409 = string__NativeString__to_s_with_length(var407, var408);
7133 var406 = var409;
7134 varonce405 = var406;
7135 }
7136 var410 = ((val* (*)(val*))(var_mtype->class->vft[COLOR_model__MVirtualType__mproperty]))(var_mtype) /* mproperty on <var_mtype:MType(MVirtualType)>*/;
7137 var411 = ((val* (*)(val*))(var410->class->vft[COLOR_separate_compiler__MProperty__const_color]))(var410) /* const_color on <var410:MProperty>*/;
7138 if (varonce412) {
7139 var413 = varonce412;
7140 } else {
7141 var414 = "];";
7142 var415 = 2;
7143 var416 = string__NativeString__to_s_with_length(var414, var415);
7144 var413 = var416;
7145 varonce412 = var413;
7146 }
7147 var417 = NEW_array__Array(&type_array__Arraykernel__Object);
7148 { /* var417 = array_instance Array[Object] */
7149 var418 = 6;
7150 var419 = NEW_array__NativeArray(var418, &type_array__NativeArraykernel__Object);
7151 ((struct instance_array__NativeArray*)var419)->values[0] = (val*) var_entry;
7152 ((struct instance_array__NativeArray*)var419)->values[1] = (val*) var401;
7153 ((struct instance_array__NativeArray*)var419)->values[2] = (val*) var_recv_ptr;
7154 ((struct instance_array__NativeArray*)var419)->values[3] = (val*) var406;
7155 ((struct instance_array__NativeArray*)var419)->values[4] = (val*) var411;
7156 ((struct instance_array__NativeArray*)var419)->values[5] = (val*) var413;
7157 ((void (*)(val*, val*, long))(var417->class->vft[COLOR_array__Array__with_native]))(var417, var419, var418) /* with_native on <var417:Array[Object]>*/;
7158 CHECK_NEW_array__Array(var417);
7159 }
7160 var420 = ((val* (*)(val*))(var417->class->vft[COLOR_string__Object__to_s]))(var417) /* to_s on <var417:Array[Object]>*/;
7161 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var420) /* add on <self:SeparateErasureCompilerVisitor>*/;
7162 }
7163 if (varonce421) {
7164 var422 = varonce421;
7165 } else {
7166 var423 = " = ";
7167 var424 = 3;
7168 var425 = string__NativeString__to_s_with_length(var423, var424);
7169 var422 = var425;
7170 varonce421 = var422;
7171 }
7172 if (varonce426) {
7173 var427 = varonce426;
7174 } else {
7175 var428 = ".class->color;";
7176 var429 = 14;
7177 var430 = string__NativeString__to_s_with_length(var428, var429);
7178 var427 = var430;
7179 varonce426 = var427;
7180 }
7181 var431 = NEW_array__Array(&type_array__Arraykernel__Object);
7182 { /* var431 = array_instance Array[Object] */
7183 var432 = 4;
7184 var433 = NEW_array__NativeArray(var432, &type_array__NativeArraykernel__Object);
7185 ((struct instance_array__NativeArray*)var433)->values[0] = (val*) var_cltype;
7186 ((struct instance_array__NativeArray*)var433)->values[1] = (val*) var422;
7187 ((struct instance_array__NativeArray*)var433)->values[2] = (val*) var_entry;
7188 ((struct instance_array__NativeArray*)var433)->values[3] = (val*) var427;
7189 ((void (*)(val*, val*, long))(var431->class->vft[COLOR_array__Array__with_native]))(var431, var433, var432) /* with_native on <var431:Array[Object]>*/;
7190 CHECK_NEW_array__Array(var431);
7191 }
7192 var434 = ((val* (*)(val*))(var431->class->vft[COLOR_string__Object__to_s]))(var431) /* to_s on <var431:Array[Object]>*/;
7193 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var434) /* add on <self:SeparateErasureCompilerVisitor>*/;
7194 if (varonce435) {
7195 var436 = varonce435;
7196 } else {
7197 var437 = " = ";
7198 var438 = 3;
7199 var439 = string__NativeString__to_s_with_length(var437, var438);
7200 var436 = var439;
7201 varonce435 = var436;
7202 }
7203 if (varonce440) {
7204 var441 = varonce440;
7205 } else {
7206 var442 = ".class->id;";
7207 var443 = 11;
7208 var444 = string__NativeString__to_s_with_length(var442, var443);
7209 var441 = var444;
7210 varonce440 = var441;
7211 }
7212 var445 = NEW_array__Array(&type_array__Arraykernel__Object);
7213 { /* var445 = array_instance Array[Object] */
7214 var446 = 4;
7215 var447 = NEW_array__NativeArray(var446, &type_array__NativeArraykernel__Object);
7216 ((struct instance_array__NativeArray*)var447)->values[0] = (val*) var_idtype;
7217 ((struct instance_array__NativeArray*)var447)->values[1] = (val*) var436;
7218 ((struct instance_array__NativeArray*)var447)->values[2] = (val*) var_entry;
7219 ((struct instance_array__NativeArray*)var447)->values[3] = (val*) var441;
7220 ((void (*)(val*, val*, long))(var445->class->vft[COLOR_array__Array__with_native]))(var445, var447, var446) /* with_native on <var445:Array[Object]>*/;
7221 CHECK_NEW_array__Array(var445);
7222 }
7223 var448 = ((val* (*)(val*))(var445->class->vft[COLOR_string__Object__to_s]))(var445) /* to_s on <var445:Array[Object]>*/;
7224 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var448) /* add on <self:SeparateErasureCompilerVisitor>*/;
7225 var_450 = var_maybe_null;
7226 if (var_maybe_null){
7227 if (varonce451) {
7228 var452 = varonce451;
7229 } else {
7230 var453 = "0";
7231 var454 = 1;
7232 var455 = string__NativeString__to_s_with_length(var453, var454);
7233 var452 = var455;
7234 varonce451 = var452;
7235 }
7236 var456 = ((short int (*)(val*, val*))(var_accept_null->class->vft[COLOR_kernel__Object___61d_61d]))(var_accept_null, var452) /* == on <var_accept_null:String>*/;
7237 var449 = var456;
7238 } else {
7239 var449 = var_450;
7240 }
7241 if (var449){
7242 if (varonce457) {
7243 var458 = varonce457;
7244 } else {
7245 var459 = "is_nullable";
7246 var460 = 11;
7247 var461 = string__NativeString__to_s_with_length(var459, var460);
7248 var458 = var461;
7249 varonce457 = var458;
7250 }
7251 var462 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var458) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7252 var_is_nullable = var462;
7253 if (varonce463) {
7254 var464 = varonce463;
7255 } else {
7256 var465 = "short int ";
7257 var466 = 10;
7258 var467 = string__NativeString__to_s_with_length(var465, var466);
7259 var464 = var467;
7260 varonce463 = var464;
7261 }
7262 if (varonce468) {
7263 var469 = varonce468;
7264 } else {
7265 var470 = ";";
7266 var471 = 1;
7267 var472 = string__NativeString__to_s_with_length(var470, var471);
7268 var469 = var472;
7269 varonce468 = var469;
7270 }
7271 var473 = NEW_array__Array(&type_array__Arraykernel__Object);
7272 { /* var473 = array_instance Array[Object] */
7273 var474 = 3;
7274 var475 = NEW_array__NativeArray(var474, &type_array__NativeArraykernel__Object);
7275 ((struct instance_array__NativeArray*)var475)->values[0] = (val*) var464;
7276 ((struct instance_array__NativeArray*)var475)->values[1] = (val*) var_is_nullable;
7277 ((struct instance_array__NativeArray*)var475)->values[2] = (val*) var469;
7278 ((void (*)(val*, val*, long))(var473->class->vft[COLOR_array__Array__with_native]))(var473, var475, var474) /* with_native on <var473:Array[Object]>*/;
7279 CHECK_NEW_array__Array(var473);
7280 }
7281 var476 = ((val* (*)(val*))(var473->class->vft[COLOR_string__Object__to_s]))(var473) /* to_s on <var473:Array[Object]>*/;
7282 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var476) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
7283 if (varonce477) {
7284 var478 = varonce477;
7285 } else {
7286 var479 = " = ";
7287 var480 = 3;
7288 var481 = string__NativeString__to_s_with_length(var479, var480);
7289 var478 = var481;
7290 varonce477 = var478;
7291 }
7292 if (varonce482) {
7293 var483 = varonce482;
7294 } else {
7295 var484 = ".is_nullable;";
7296 var485 = 13;
7297 var486 = string__NativeString__to_s_with_length(var484, var485);
7298 var483 = var486;
7299 varonce482 = var483;
7300 }
7301 var487 = NEW_array__Array(&type_array__Arraykernel__Object);
7302 { /* var487 = array_instance Array[Object] */
7303 var488 = 4;
7304 var489 = NEW_array__NativeArray(var488, &type_array__NativeArraykernel__Object);
7305 ((struct instance_array__NativeArray*)var489)->values[0] = (val*) var_is_nullable;
7306 ((struct instance_array__NativeArray*)var489)->values[1] = (val*) var478;
7307 ((struct instance_array__NativeArray*)var489)->values[2] = (val*) var_entry;
7308 ((struct instance_array__NativeArray*)var489)->values[3] = (val*) var483;
7309 ((void (*)(val*, val*, long))(var487->class->vft[COLOR_array__Array__with_native]))(var487, var489, var488) /* with_native on <var487:Array[Object]>*/;
7310 CHECK_NEW_array__Array(var487);
7311 }
7312 var490 = ((val* (*)(val*))(var487->class->vft[COLOR_string__Object__to_s]))(var487) /* to_s on <var487:Array[Object]>*/;
7313 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var490) /* add on <self:SeparateErasureCompilerVisitor>*/;
7314 var491 = ((val* (*)(val*))(var_is_nullable->class->vft[COLOR_string__Object__to_s]))(var_is_nullable) /* to_s on <var_is_nullable:String>*/;
7315 var_accept_null = var491;
7316 } else {
7317 }
7318 var492 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7319 var493 = ((val* (*)(val*))(var492->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(var492) /* modelbuilder on <var492:AbstractCompiler(SeparateCompiler)>*/;
7320 var494 = ((val* (*)(val*))(var493->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var493) /* toolcontext on <var493:ModelBuilder>*/;
7321 var495 = ((val* (*)(val*))(var494->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var494) /* opt_typing_test_metrics on <var494:ToolContext>*/;
7322 var496 = ((val* (*)(val*))(var495->class->vft[COLOR_opts__Option__value]))(var495) /* value on <var495:OptionBool>*/;
7323 var497 = ((struct instance_kernel__Bool*)var496)->value; /* autounbox from nullable Object to Bool */;
7324 if (var497){
7325 var498 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7326 var499 = ((val* (*)(val*))(var498->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_unresolved]))(var498) /* count_type_test_unresolved on <var498:AbstractCompiler(SeparateCompiler)>*/;
7327 var_500 = var499;
7328 var_501 = var_tag;
7329 var502 = ((val* (*)(val*, val*))(var_500->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var_500, var_501) /* [] on <var_500:HashMap[String, Int]>*/;
7330 var503 = 1;
7331 { /* Inline kernel#Int#+ (var502,var503) */
7332 var506 = ((struct instance_kernel__Int*)var502)->value; /* autounbox from nullable Object to Int */;
7333 var507 = var506 + var503;
7334 var504 = var507;
7335 goto RET_LABEL505;
7336 RET_LABEL505:(void)0;
7337 }
7338 var508 = BOX_kernel__Int(var504); /* autobox from Int to nullable Object */
7339 ((void (*)(val*, val*, val*))(var_500->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var_500, var_501, var508) /* []= on <var_500:HashMap[String, Int]>*/;
7340 if (varonce509) {
7341 var510 = varonce509;
7342 } else {
7343 var511 = "count_type_test_unresolved_";
7344 var512 = 27;
7345 var513 = string__NativeString__to_s_with_length(var511, var512);
7346 var510 = var513;
7347 varonce509 = var510;
7348 }
7349 if (varonce514) {
7350 var515 = varonce514;
7351 } else {
7352 var516 = "++;";
7353 var517 = 3;
7354 var518 = string__NativeString__to_s_with_length(var516, var517);
7355 var515 = var518;
7356 varonce514 = var515;
7357 }
7358 var519 = NEW_array__Array(&type_array__Arraykernel__Object);
7359 { /* var519 = array_instance Array[Object] */
7360 var520 = 3;
7361 var521 = NEW_array__NativeArray(var520, &type_array__NativeArraykernel__Object);
7362 ((struct instance_array__NativeArray*)var521)->values[0] = (val*) var510;
7363 ((struct instance_array__NativeArray*)var521)->values[1] = (val*) var_tag;
7364 ((struct instance_array__NativeArray*)var521)->values[2] = (val*) var515;
7365 ((void (*)(val*, val*, long))(var519->class->vft[COLOR_array__Array__with_native]))(var519, var521, var520) /* with_native on <var519:Array[Object]>*/;
7366 CHECK_NEW_array__Array(var519);
7367 }
7368 var522 = ((val* (*)(val*))(var519->class->vft[COLOR_string__Object__to_s]))(var519) /* to_s on <var519:Array[Object]>*/;
7369 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var522) /* add on <self:SeparateErasureCompilerVisitor>*/;
7370 } else {
7371 }
7372 } else {
7373 if (varonce523) {
7374 var524 = varonce523;
7375 } else {
7376 var525 = "type_test(";
7377 var526 = 10;
7378 var527 = string__NativeString__to_s_with_length(var525, var526);
7379 var524 = var527;
7380 varonce523 = var524;
7381 }
7382 var528 = ((val* (*)(val*))(var_value->class->vft[COLOR_string__Object__inspect]))(var_value) /* inspect on <var_value:RuntimeVariable>*/;
7383 if (varonce529) {
7384 var530 = varonce529;
7385 } else {
7386 var531 = ", ";
7387 var532 = 2;
7388 var533 = string__NativeString__to_s_with_length(var531, var532);
7389 var530 = var533;
7390 varonce529 = var530;
7391 }
7392 if (varonce534) {
7393 var535 = varonce534;
7394 } else {
7395 var536 = ")";
7396 var537 = 1;
7397 var538 = string__NativeString__to_s_with_length(var536, var537);
7398 var535 = var538;
7399 varonce534 = var535;
7400 }
7401 var539 = NEW_array__Array(&type_array__Arraykernel__Object);
7402 { /* var539 = array_instance Array[Object] */
7403 var540 = 5;
7404 var541 = NEW_array__NativeArray(var540, &type_array__NativeArraykernel__Object);
7405 ((struct instance_array__NativeArray*)var541)->values[0] = (val*) var524;
7406 ((struct instance_array__NativeArray*)var541)->values[1] = (val*) var528;
7407 ((struct instance_array__NativeArray*)var541)->values[2] = (val*) var530;
7408 ((struct instance_array__NativeArray*)var541)->values[3] = (val*) var_mtype;
7409 ((struct instance_array__NativeArray*)var541)->values[4] = (val*) var535;
7410 ((void (*)(val*, val*, long))(var539->class->vft[COLOR_array__Array__with_native]))(var539, var541, var540) /* with_native on <var539:Array[Object]>*/;
7411 CHECK_NEW_array__Array(var539);
7412 }
7413 var542 = ((val* (*)(val*))(var539->class->vft[COLOR_string__Object__to_s]))(var539) /* to_s on <var539:Array[Object]>*/;
7414 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__debug]))(self, var542) /* debug on <self:SeparateErasureCompilerVisitor>*/;
7415 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Aborted", "src/separate_erasure_compiler.nit", 553);
7416 exit(1);
7417 }
7418 }
7419 if (var_maybe_null){
7420 if (varonce543) {
7421 var544 = varonce543;
7422 } else {
7423 var545 = "if(";
7424 var546 = 3;
7425 var547 = string__NativeString__to_s_with_length(var545, var546);
7426 var544 = var547;
7427 varonce543 = var544;
7428 }
7429 if (varonce548) {
7430 var549 = varonce548;
7431 } else {
7432 var550 = " == NULL) {";
7433 var551 = 11;
7434 var552 = string__NativeString__to_s_with_length(var550, var551);
7435 var549 = var552;
7436 varonce548 = var549;
7437 }
7438 var553 = NEW_array__Array(&type_array__Arraykernel__Object);
7439 { /* var553 = array_instance Array[Object] */
7440 var554 = 3;
7441 var555 = NEW_array__NativeArray(var554, &type_array__NativeArraykernel__Object);
7442 ((struct instance_array__NativeArray*)var555)->values[0] = (val*) var544;
7443 ((struct instance_array__NativeArray*)var555)->values[1] = (val*) var_value;
7444 ((struct instance_array__NativeArray*)var555)->values[2] = (val*) var549;
7445 ((void (*)(val*, val*, long))(var553->class->vft[COLOR_array__Array__with_native]))(var553, var555, var554) /* with_native on <var553:Array[Object]>*/;
7446 CHECK_NEW_array__Array(var553);
7447 }
7448 var556 = ((val* (*)(val*))(var553->class->vft[COLOR_string__Object__to_s]))(var553) /* to_s on <var553:Array[Object]>*/;
7449 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var556) /* add on <self:SeparateErasureCompilerVisitor>*/;
7450 if (varonce557) {
7451 var558 = varonce557;
7452 } else {
7453 var559 = " = ";
7454 var560 = 3;
7455 var561 = string__NativeString__to_s_with_length(var559, var560);
7456 var558 = var561;
7457 varonce557 = var558;
7458 }
7459 if (varonce562) {
7460 var563 = varonce562;
7461 } else {
7462 var564 = ";";
7463 var565 = 1;
7464 var566 = string__NativeString__to_s_with_length(var564, var565);
7465 var563 = var566;
7466 varonce562 = var563;
7467 }
7468 var567 = NEW_array__Array(&type_array__Arraykernel__Object);
7469 { /* var567 = array_instance Array[Object] */
7470 var568 = 4;
7471 var569 = NEW_array__NativeArray(var568, &type_array__NativeArraykernel__Object);
7472 ((struct instance_array__NativeArray*)var569)->values[0] = (val*) var_res;
7473 ((struct instance_array__NativeArray*)var569)->values[1] = (val*) var558;
7474 ((struct instance_array__NativeArray*)var569)->values[2] = (val*) var_accept_null;
7475 ((struct instance_array__NativeArray*)var569)->values[3] = (val*) var563;
7476 ((void (*)(val*, val*, long))(var567->class->vft[COLOR_array__Array__with_native]))(var567, var569, var568) /* with_native on <var567:Array[Object]>*/;
7477 CHECK_NEW_array__Array(var567);
7478 }
7479 var570 = ((val* (*)(val*))(var567->class->vft[COLOR_string__Object__to_s]))(var567) /* to_s on <var567:Array[Object]>*/;
7480 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var570) /* add on <self:SeparateErasureCompilerVisitor>*/;
7481 if (varonce571) {
7482 var572 = varonce571;
7483 } else {
7484 var573 = "} else {";
7485 var574 = 8;
7486 var575 = string__NativeString__to_s_with_length(var573, var574);
7487 var572 = var575;
7488 varonce571 = var572;
7489 }
7490 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var572) /* add on <self:SeparateErasureCompilerVisitor>*/;
7491 } else {
7492 }
7493 var576 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(self) /* compiler on <self:SeparateErasureCompilerVisitor>*/;
7494 /* <var576:AbstractCompiler(SeparateCompiler)> isa SeparateErasureCompiler */
7495 cltype578 = type_separate_erasure_compiler__SeparateErasureCompiler.color;
7496 idtype579 = type_separate_erasure_compiler__SeparateErasureCompiler.id;
7497 if(cltype578 >= var576->type->table_size) {
7498 var577 = 0;
7499 } else {
7500 var577 = var576->type->type_table[cltype578] == idtype579;
7501 }
7502 if (!var577) {
7503 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/separate_erasure_compiler.nit", 562);
7504 exit(1);
7505 }
7506 var580 = ((val* (*)(val*))(var576->class->vft[COLOR_separate_erasure_compiler__SeparateErasureCompiler__class_layout]))(var576) /* class_layout on <var576:SeparateCompiler(SeparateErasureCompiler)>*/;
7507 /* <var580:nullable Layout[MClass]> isa PHLayout[MClass, MClass] */
7508 cltype582 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.color;
7509 idtype583 = type_layout_builders__PHLayoutmodel__MClassmodel__MClass.id;
7510 if(var580 == NULL) {
7511 var581 = 0;
7512 } else {
7513 if(cltype582 >= var580->type->table_size) {
7514 var581 = 0;
7515 } else {
7516 var581 = var580->type->type_table[cltype582] == idtype583;
7517 }
7518 }
7519 if (var581){
7520 if (varonce584) {
7521 var585 = varonce584;
7522 } else {
7523 var586 = " = HASH(";
7524 var587 = 8;
7525 var588 = string__NativeString__to_s_with_length(var586, var587);
7526 var585 = var588;
7527 varonce584 = var585;
7528 }
7529 if (varonce589) {
7530 var590 = varonce589;
7531 } else {
7532 var591 = "color, ";
7533 var592 = 7;
7534 var593 = string__NativeString__to_s_with_length(var591, var592);
7535 var590 = var593;
7536 varonce589 = var590;
7537 }
7538 if (varonce594) {
7539 var595 = varonce594;
7540 } else {
7541 var596 = ");";
7542 var597 = 2;
7543 var598 = string__NativeString__to_s_with_length(var596, var597);
7544 var595 = var598;
7545 varonce594 = var595;
7546 }
7547 var599 = NEW_array__Array(&type_array__Arraykernel__Object);
7548 { /* var599 = array_instance Array[Object] */
7549 var600 = 6;
7550 var601 = NEW_array__NativeArray(var600, &type_array__NativeArraykernel__Object);
7551 ((struct instance_array__NativeArray*)var601)->values[0] = (val*) var_cltype;
7552 ((struct instance_array__NativeArray*)var601)->values[1] = (val*) var585;
7553 ((struct instance_array__NativeArray*)var601)->values[2] = (val*) var_class_ptr;
7554 ((struct instance_array__NativeArray*)var601)->values[3] = (val*) var590;
7555 ((struct instance_array__NativeArray*)var601)->values[4] = (val*) var_idtype;
7556 ((struct instance_array__NativeArray*)var601)->values[5] = (val*) var595;
7557 ((void (*)(val*, val*, long))(var599->class->vft[COLOR_array__Array__with_native]))(var599, var601, var600) /* with_native on <var599:Array[Object]>*/;
7558 CHECK_NEW_array__Array(var599);
7559 }
7560 var602 = ((val* (*)(val*))(var599->class->vft[COLOR_string__Object__to_s]))(var599) /* to_s on <var599:Array[Object]>*/;
7561 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var602) /* add on <self:SeparateErasureCompilerVisitor>*/;
7562 } else {
7563 }
7564 if (varonce603) {
7565 var604 = varonce603;
7566 } else {
7567 var605 = "if(";
7568 var606 = 3;
7569 var607 = string__NativeString__to_s_with_length(var605, var606);
7570 var604 = var607;
7571 varonce603 = var604;
7572 }
7573 if (varonce608) {
7574 var609 = varonce608;
7575 } else {
7576 var610 = " >= ";
7577 var611 = 4;
7578 var612 = string__NativeString__to_s_with_length(var610, var611);
7579 var609 = var612;
7580 varonce608 = var609;
7581 }
7582 if (varonce613) {
7583 var614 = varonce613;
7584 } else {
7585 var615 = "type_table->size) {";
7586 var616 = 19;
7587 var617 = string__NativeString__to_s_with_length(var615, var616);
7588 var614 = var617;
7589 varonce613 = var614;
7590 }
7591 var618 = NEW_array__Array(&type_array__Arraykernel__Object);
7592 { /* var618 = array_instance Array[Object] */
7593 var619 = 5;
7594 var620 = NEW_array__NativeArray(var619, &type_array__NativeArraykernel__Object);
7595 ((struct instance_array__NativeArray*)var620)->values[0] = (val*) var604;
7596 ((struct instance_array__NativeArray*)var620)->values[1] = (val*) var_cltype;
7597 ((struct instance_array__NativeArray*)var620)->values[2] = (val*) var609;
7598 ((struct instance_array__NativeArray*)var620)->values[3] = (val*) var_class_ptr;
7599 ((struct instance_array__NativeArray*)var620)->values[4] = (val*) var614;
7600 ((void (*)(val*, val*, long))(var618->class->vft[COLOR_array__Array__with_native]))(var618, var620, var619) /* with_native on <var618:Array[Object]>*/;
7601 CHECK_NEW_array__Array(var618);
7602 }
7603 var621 = ((val* (*)(val*))(var618->class->vft[COLOR_string__Object__to_s]))(var618) /* to_s on <var618:Array[Object]>*/;
7604 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var621) /* add on <self:SeparateErasureCompilerVisitor>*/;
7605 if (varonce622) {
7606 var623 = varonce622;
7607 } else {
7608 var624 = " = 0;";
7609 var625 = 5;
7610 var626 = string__NativeString__to_s_with_length(var624, var625);
7611 var623 = var626;
7612 varonce622 = var623;
7613 }
7614 var627 = NEW_array__Array(&type_array__Arraykernel__Object);
7615 { /* var627 = array_instance Array[Object] */
7616 var628 = 2;
7617 var629 = NEW_array__NativeArray(var628, &type_array__NativeArraykernel__Object);
7618 ((struct instance_array__NativeArray*)var629)->values[0] = (val*) var_res;
7619 ((struct instance_array__NativeArray*)var629)->values[1] = (val*) var623;
7620 ((void (*)(val*, val*, long))(var627->class->vft[COLOR_array__Array__with_native]))(var627, var629, var628) /* with_native on <var627:Array[Object]>*/;
7621 CHECK_NEW_array__Array(var627);
7622 }
7623 var630 = ((val* (*)(val*))(var627->class->vft[COLOR_string__Object__to_s]))(var627) /* to_s on <var627:Array[Object]>*/;
7624 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var630) /* add on <self:SeparateErasureCompilerVisitor>*/;
7625 if (varonce631) {
7626 var632 = varonce631;
7627 } else {
7628 var633 = "} else {";
7629 var634 = 8;
7630 var635 = string__NativeString__to_s_with_length(var633, var634);
7631 var632 = var635;
7632 varonce631 = var632;
7633 }
7634 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var632) /* add on <self:SeparateErasureCompilerVisitor>*/;
7635 if (varonce636) {
7636 var637 = varonce636;
7637 } else {
7638 var638 = " = ";
7639 var639 = 3;
7640 var640 = string__NativeString__to_s_with_length(var638, var639);
7641 var637 = var640;
7642 varonce636 = var637;
7643 }
7644 if (varonce641) {
7645 var642 = varonce641;
7646 } else {
7647 var643 = "type_table->table[";
7648 var644 = 18;
7649 var645 = string__NativeString__to_s_with_length(var643, var644);
7650 var642 = var645;
7651 varonce641 = var642;
7652 }
7653 if (varonce646) {
7654 var647 = varonce646;
7655 } else {
7656 var648 = "] == ";
7657 var649 = 5;
7658 var650 = string__NativeString__to_s_with_length(var648, var649);
7659 var647 = var650;
7660 varonce646 = var647;
7661 }
7662 if (varonce651) {
7663 var652 = varonce651;
7664 } else {
7665 var653 = ";";
7666 var654 = 1;
7667 var655 = string__NativeString__to_s_with_length(var653, var654);
7668 var652 = var655;
7669 varonce651 = var652;
7670 }
7671 var656 = NEW_array__Array(&type_array__Arraykernel__Object);
7672 { /* var656 = array_instance Array[Object] */
7673 var657 = 8;
7674 var658 = NEW_array__NativeArray(var657, &type_array__NativeArraykernel__Object);
7675 ((struct instance_array__NativeArray*)var658)->values[0] = (val*) var_res;
7676 ((struct instance_array__NativeArray*)var658)->values[1] = (val*) var637;
7677 ((struct instance_array__NativeArray*)var658)->values[2] = (val*) var_class_ptr;
7678 ((struct instance_array__NativeArray*)var658)->values[3] = (val*) var642;
7679 ((struct instance_array__NativeArray*)var658)->values[4] = (val*) var_cltype;
7680 ((struct instance_array__NativeArray*)var658)->values[5] = (val*) var647;
7681 ((struct instance_array__NativeArray*)var658)->values[6] = (val*) var_idtype;
7682 ((struct instance_array__NativeArray*)var658)->values[7] = (val*) var652;
7683 ((void (*)(val*, val*, long))(var656->class->vft[COLOR_array__Array__with_native]))(var656, var658, var657) /* with_native on <var656:Array[Object]>*/;
7684 CHECK_NEW_array__Array(var656);
7685 }
7686 var659 = ((val* (*)(val*))(var656->class->vft[COLOR_string__Object__to_s]))(var656) /* to_s on <var656:Array[Object]>*/;
7687 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var659) /* add on <self:SeparateErasureCompilerVisitor>*/;
7688 if (varonce660) {
7689 var661 = varonce660;
7690 } else {
7691 var662 = "}";
7692 var663 = 1;
7693 var664 = string__NativeString__to_s_with_length(var662, var663);
7694 var661 = var664;
7695 varonce660 = var661;
7696 }
7697 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var661) /* add on <self:SeparateErasureCompilerVisitor>*/;
7698 if (var_maybe_null){
7699 if (varonce665) {
7700 var666 = varonce665;
7701 } else {
7702 var667 = "}";
7703 var668 = 1;
7704 var669 = string__NativeString__to_s_with_length(var667, var668);
7705 var666 = var669;
7706 varonce665 = var666;
7707 }
7708 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var666) /* add on <self:SeparateErasureCompilerVisitor>*/;
7709 } else {
7710 }
7711 var = var_res;
7712 goto RET_LABEL;
7713 RET_LABEL:;
7714 return var;
7715 }
7716 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#type_test for (self: Object, RuntimeVariable, MType, String): RuntimeVariable */
7717 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(val* self, val* p0, val* p1, val* p2) {
7718 val* var /* : RuntimeVariable */;
7719 val* var1 /* : RuntimeVariable */;
7720 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__type_test(self, p0, p1, p2);
7721 var = var1;
7722 RET_LABEL:;
7723 return var;
7724 }
7725 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: SeparateErasureCompilerVisitor, RuntimeVariable): String */
7726 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
7727 val* var /* : String */;
7728 val* var_value /* var value: RuntimeVariable */;
7729 static val* varonce;
7730 val* var1 /* : String */;
7731 char* var2 /* : NativeString */;
7732 long var3 /* : Int */;
7733 val* var4 /* : String */;
7734 val* var5 /* : String */;
7735 val* var_res /* var res: String */;
7736 static val* varonce6;
7737 val* var7 /* : String */;
7738 char* var8 /* : NativeString */;
7739 long var9 /* : Int */;
7740 val* var10 /* : String */;
7741 static val* varonce11;
7742 val* var12 /* : String */;
7743 char* var13 /* : NativeString */;
7744 long var14 /* : Int */;
7745 val* var15 /* : String */;
7746 val* var16 /* : Array[Object] */;
7747 long var17 /* : Int */;
7748 val* var18 /* : NativeArray[Object] */;
7749 val* var19 /* : String */;
7750 val* var20 /* : MType */;
7751 val* var21 /* : String */;
7752 static val* varonce22;
7753 val* var23 /* : String */;
7754 char* var24 /* : NativeString */;
7755 long var25 /* : Int */;
7756 val* var26 /* : String */;
7757 short int var27 /* : Bool */;
7758 static val* varonce28;
7759 val* var29 /* : String */;
7760 char* var30 /* : NativeString */;
7761 long var31 /* : Int */;
7762 val* var32 /* : String */;
7763 static val* varonce33;
7764 val* var34 /* : String */;
7765 char* var35 /* : NativeString */;
7766 long var36 /* : Int */;
7767 val* var37 /* : String */;
7768 static val* varonce38;
7769 val* var39 /* : String */;
7770 char* var40 /* : NativeString */;
7771 long var41 /* : Int */;
7772 val* var42 /* : String */;
7773 val* var43 /* : Array[Object] */;
7774 long var44 /* : Int */;
7775 val* var45 /* : NativeArray[Object] */;
7776 val* var46 /* : String */;
7777 static val* varonce47;
7778 val* var48 /* : String */;
7779 char* var49 /* : NativeString */;
7780 long var50 /* : Int */;
7781 val* var51 /* : String */;
7782 val* var52 /* : MType */;
7783 val* var53 /* : String */;
7784 val* var54 /* : Array[Object] */;
7785 long var55 /* : Int */;
7786 val* var56 /* : NativeArray[Object] */;
7787 val* var57 /* : String */;
7788 static val* varonce58;
7789 val* var59 /* : String */;
7790 char* var60 /* : NativeString */;
7791 long var61 /* : Int */;
7792 val* var62 /* : String */;
7793 val* var63 /* : MType */;
7794 val* var64 /* : String */;
7795 static val* varonce65;
7796 val* var66 /* : String */;
7797 char* var67 /* : NativeString */;
7798 long var68 /* : Int */;
7799 val* var69 /* : String */;
7800 val* var70 /* : Array[Object] */;
7801 long var71 /* : Int */;
7802 val* var72 /* : NativeArray[Object] */;
7803 val* var73 /* : String */;
7804 var_value = p0;
7805 if (varonce) {
7806 var1 = varonce;
7807 } else {
7808 var2 = "var_class_name";
7809 var3 = 14;
7810 var4 = string__NativeString__to_s_with_length(var2, var3);
7811 var1 = var4;
7812 varonce = var1;
7813 }
7814 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_name]))(self, var1) /* get_name on <self:SeparateErasureCompilerVisitor>*/;
7815 var_res = var5;
7816 if (varonce6) {
7817 var7 = varonce6;
7818 } else {
7819 var8 = "const char* ";
7820 var9 = 12;
7821 var10 = string__NativeString__to_s_with_length(var8, var9);
7822 var7 = var10;
7823 varonce6 = var7;
7824 }
7825 if (varonce11) {
7826 var12 = varonce11;
7827 } else {
7828 var13 = ";";
7829 var14 = 1;
7830 var15 = string__NativeString__to_s_with_length(var13, var14);
7831 var12 = var15;
7832 varonce11 = var12;
7833 }
7834 var16 = NEW_array__Array(&type_array__Arraykernel__Object);
7835 { /* var16 = array_instance Array[Object] */
7836 var17 = 3;
7837 var18 = NEW_array__NativeArray(var17, &type_array__NativeArraykernel__Object);
7838 ((struct instance_array__NativeArray*)var18)->values[0] = (val*) var7;
7839 ((struct instance_array__NativeArray*)var18)->values[1] = (val*) var_res;
7840 ((struct instance_array__NativeArray*)var18)->values[2] = (val*) var12;
7841 ((void (*)(val*, val*, long))(var16->class->vft[COLOR_array__Array__with_native]))(var16, var18, var17) /* with_native on <var16:Array[Object]>*/;
7842 CHECK_NEW_array__Array(var16);
7843 }
7844 var19 = ((val* (*)(val*))(var16->class->vft[COLOR_string__Object__to_s]))(var16) /* to_s on <var16:Array[Object]>*/;
7845 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(self, var19) /* add_decl on <self:SeparateErasureCompilerVisitor>*/;
7846 var20 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7847 var21 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_compiler__MType__ctype]))(var20) /* ctype on <var20:MType>*/;
7848 if (varonce22) {
7849 var23 = varonce22;
7850 } else {
7851 var24 = "val*";
7852 var25 = 4;
7853 var26 = string__NativeString__to_s_with_length(var24, var25);
7854 var23 = var26;
7855 varonce22 = var23;
7856 }
7857 var27 = ((short int (*)(val*, val*))(var21->class->vft[COLOR_kernel__Object___61d_61d]))(var21, var23) /* == on <var21:String>*/;
7858 if (var27){
7859 if (varonce28) {
7860 var29 = varonce28;
7861 } else {
7862 var30 = " = ";
7863 var31 = 3;
7864 var32 = string__NativeString__to_s_with_length(var30, var31);
7865 var29 = var32;
7866 varonce28 = var29;
7867 }
7868 if (varonce33) {
7869 var34 = varonce33;
7870 } else {
7871 var35 = " == NULL ? \"null\" : ";
7872 var36 = 20;
7873 var37 = string__NativeString__to_s_with_length(var35, var36);
7874 var34 = var37;
7875 varonce33 = var34;
7876 }
7877 if (varonce38) {
7878 var39 = varonce38;
7879 } else {
7880 var40 = "->class->name;";
7881 var41 = 14;
7882 var42 = string__NativeString__to_s_with_length(var40, var41);
7883 var39 = var42;
7884 varonce38 = var39;
7885 }
7886 var43 = NEW_array__Array(&type_array__Arraykernel__Object);
7887 { /* var43 = array_instance Array[Object] */
7888 var44 = 6;
7889 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraykernel__Object);
7890 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_res;
7891 ((struct instance_array__NativeArray*)var45)->values[1] = (val*) var29;
7892 ((struct instance_array__NativeArray*)var45)->values[2] = (val*) var_value;
7893 ((struct instance_array__NativeArray*)var45)->values[3] = (val*) var34;
7894 ((struct instance_array__NativeArray*)var45)->values[4] = (val*) var_value;
7895 ((struct instance_array__NativeArray*)var45)->values[5] = (val*) var39;
7896 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[Object]>*/;
7897 CHECK_NEW_array__Array(var43);
7898 }
7899 var46 = ((val* (*)(val*))(var43->class->vft[COLOR_string__Object__to_s]))(var43) /* to_s on <var43:Array[Object]>*/;
7900 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var46) /* add on <self:SeparateErasureCompilerVisitor>*/;
7901 } else {
7902 if (varonce47) {
7903 var48 = varonce47;
7904 } else {
7905 var49 = "class_";
7906 var50 = 6;
7907 var51 = string__NativeString__to_s_with_length(var49, var50);
7908 var48 = var51;
7909 varonce47 = var48;
7910 }
7911 var52 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7912 var53 = ((val* (*)(val*))(var52->class->vft[COLOR_abstract_compiler__MType__c_name]))(var52) /* c_name on <var52:MType>*/;
7913 var54 = NEW_array__Array(&type_array__Arraykernel__Object);
7914 { /* var54 = array_instance Array[Object] */
7915 var55 = 2;
7916 var56 = NEW_array__NativeArray(var55, &type_array__NativeArraykernel__Object);
7917 ((struct instance_array__NativeArray*)var56)->values[0] = (val*) var48;
7918 ((struct instance_array__NativeArray*)var56)->values[1] = (val*) var53;
7919 ((void (*)(val*, val*, long))(var54->class->vft[COLOR_array__Array__with_native]))(var54, var56, var55) /* with_native on <var54:Array[Object]>*/;
7920 CHECK_NEW_array__Array(var54);
7921 }
7922 var57 = ((val* (*)(val*))(var54->class->vft[COLOR_string__Object__to_s]))(var54) /* to_s on <var54:Array[Object]>*/;
7923 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var57) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
7924 if (varonce58) {
7925 var59 = varonce58;
7926 } else {
7927 var60 = " = class_";
7928 var61 = 9;
7929 var62 = string__NativeString__to_s_with_length(var60, var61);
7930 var59 = var62;
7931 varonce58 = var59;
7932 }
7933 var63 = ((val* (*)(val*))(var_value->class->vft[COLOR_abstract_compiler__RuntimeVariable__mtype]))(var_value) /* mtype on <var_value:RuntimeVariable>*/;
7934 var64 = ((val* (*)(val*))(var63->class->vft[COLOR_abstract_compiler__MType__c_name]))(var63) /* c_name on <var63:MType>*/;
7935 if (varonce65) {
7936 var66 = varonce65;
7937 } else {
7938 var67 = ".name;";
7939 var68 = 6;
7940 var69 = string__NativeString__to_s_with_length(var67, var68);
7941 var66 = var69;
7942 varonce65 = var66;
7943 }
7944 var70 = NEW_array__Array(&type_array__Arraykernel__Object);
7945 { /* var70 = array_instance Array[Object] */
7946 var71 = 4;
7947 var72 = NEW_array__NativeArray(var71, &type_array__NativeArraykernel__Object);
7948 ((struct instance_array__NativeArray*)var72)->values[0] = (val*) var_res;
7949 ((struct instance_array__NativeArray*)var72)->values[1] = (val*) var59;
7950 ((struct instance_array__NativeArray*)var72)->values[2] = (val*) var64;
7951 ((struct instance_array__NativeArray*)var72)->values[3] = (val*) var66;
7952 ((void (*)(val*, val*, long))(var70->class->vft[COLOR_array__Array__with_native]))(var70, var72, var71) /* with_native on <var70:Array[Object]>*/;
7953 CHECK_NEW_array__Array(var70);
7954 }
7955 var73 = ((val* (*)(val*))(var70->class->vft[COLOR_string__Object__to_s]))(var70) /* to_s on <var70:Array[Object]>*/;
7956 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var73) /* add on <self:SeparateErasureCompilerVisitor>*/;
7957 }
7958 var = var_res;
7959 goto RET_LABEL;
7960 RET_LABEL:;
7961 return var;
7962 }
7963 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#class_name_string for (self: Object, RuntimeVariable): String */
7964 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(val* self, val* p0) {
7965 val* var /* : String */;
7966 val* var1 /* : String */;
7967 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__class_name_string(self, p0);
7968 var = var1;
7969 RET_LABEL:;
7970 return var;
7971 }
7972 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#array_instance for (self: SeparateErasureCompilerVisitor, Array[RuntimeVariable], MType): RuntimeVariable */
7973 val* separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(val* self, val* p0, val* p1) {
7974 val* var /* : RuntimeVariable */;
7975 val* var_array /* var array: Array[RuntimeVariable] */;
7976 val* var_elttype /* var elttype: MType */;
7977 static val* varonce;
7978 val* var1 /* : String */;
7979 char* var2 /* : NativeString */;
7980 long var3 /* : Int */;
7981 val* var4 /* : String */;
7982 val* var5 /* : MClass */;
7983 val* var_nclass /* var nclass: MClass */;
7984 val* var6 /* : MType */;
7985 static val* varonce7;
7986 val* var8 /* : String */;
7987 char* var9 /* : NativeString */;
7988 long var10 /* : Int */;
7989 val* var11 /* : String */;
7990 val* var12 /* : MClass */;
7991 val* var13 /* : Array[MType] */;
7992 long var14 /* : Int */;
7993 val* var15 /* : NativeArray[MType] */;
7994 val* var16 /* : MClassType */;
7995 val* var_arraytype /* var arraytype: MClassType */;
7996 val* var17 /* : RuntimeVariable */;
7997 val* var_res /* var res: RuntimeVariable */;
7998 static val* varonce18;
7999 val* var19 /* : String */;
8000 char* var20 /* : NativeString */;
8001 long var21 /* : Int */;
8002 val* var22 /* : String */;
8003 static val* varonce23;
8004 val* var24 /* : String */;
8005 char* var25 /* : NativeString */;
8006 long var26 /* : Int */;
8007 val* var27 /* : String */;
8008 static val* varonce28;
8009 val* var29 /* : String */;
8010 char* var30 /* : NativeString */;
8011 long var31 /* : Int */;
8012 val* var32 /* : String */;
8013 val* var33 /* : Array[Object] */;
8014 long var34 /* : Int */;
8015 val* var35 /* : NativeArray[Object] */;
8016 val* var36 /* : String */;
8017 static val* varonce37;
8018 val* var38 /* : String */;
8019 char* var39 /* : NativeString */;
8020 long var40 /* : Int */;
8021 val* var41 /* : String */;
8022 val* var42 /* : MClass */;
8023 val* var43 /* : Array[MType] */;
8024 long var44 /* : Int */;
8025 val* var45 /* : NativeArray[MType] */;
8026 val* var46 /* : MClassType */;
8027 val* var47 /* : RuntimeVariable */;
8028 val* var_nat /* var nat: RuntimeVariable */;
8029 short int var48 /* : Bool */;
8030 static val* varonce49;
8031 val* var50 /* : String */;
8032 char* var51 /* : NativeString */;
8033 long var52 /* : Int */;
8034 val* var53 /* : String */;
8035 val* var54 /* : String */;
8036 val* var55 /* : Array[Object] */;
8037 long var56 /* : Int */;
8038 val* var57 /* : NativeArray[Object] */;
8039 val* var58 /* : String */;
8040 static val* varonce59;
8041 val* var60 /* : String */;
8042 char* var61 /* : NativeString */;
8043 long var62 /* : Int */;
8044 val* var63 /* : String */;
8045 val* var64 /* : String */;
8046 static val* varonce65;
8047 val* var66 /* : String */;
8048 char* var67 /* : NativeString */;
8049 long var68 /* : Int */;
8050 val* var69 /* : String */;
8051 long var70 /* : Int */;
8052 static val* varonce71;
8053 val* var72 /* : String */;
8054 char* var73 /* : NativeString */;
8055 long var74 /* : Int */;
8056 val* var75 /* : String */;
8057 val* var76 /* : Array[Object] */;
8058 long var77 /* : Int */;
8059 val* var78 /* : NativeArray[Object] */;
8060 val* var79 /* : Object */;
8061 val* var80 /* : String */;
8062 val* var81 /* : Range[Int] */;
8063 long var82 /* : Int */;
8064 long var83 /* : Int */;
8065 val* var84 /* : Discrete */;
8066 val* var85 /* : Discrete */;
8067 val* var86 /* : Iterator[nullable Object] */;
8068 short int var87 /* : Bool */;
8069 val* var88 /* : nullable Object */;
8070 long var_i /* var i: Int */;
8071 long var89 /* : Int */;
8072 val* var90 /* : nullable Object */;
8073 val* var91 /* : MClassType */;
8074 val* var92 /* : RuntimeVariable */;
8075 val* var_r /* var r: RuntimeVariable */;
8076 static val* varonce93;
8077 val* var94 /* : String */;
8078 char* var95 /* : NativeString */;
8079 long var96 /* : Int */;
8080 val* var97 /* : String */;
8081 val* var98 /* : String */;
8082 static val* varonce99;
8083 val* var100 /* : String */;
8084 char* var101 /* : NativeString */;
8085 long var102 /* : Int */;
8086 val* var103 /* : String */;
8087 static val* varonce104;
8088 val* var105 /* : String */;
8089 char* var106 /* : NativeString */;
8090 long var107 /* : Int */;
8091 val* var108 /* : String */;
8092 static val* varonce109;
8093 val* var110 /* : String */;
8094 char* var111 /* : NativeString */;
8095 long var112 /* : Int */;
8096 val* var113 /* : String */;
8097 static val* varonce114;
8098 val* var115 /* : String */;
8099 char* var116 /* : NativeString */;
8100 long var117 /* : Int */;
8101 val* var118 /* : String */;
8102 val* var119 /* : Array[Object] */;
8103 long var120 /* : Int */;
8104 val* var121 /* : NativeArray[Object] */;
8105 val* var122 /* : Object */;
8106 val* var123 /* : String */;
8107 long var124 /* : Int */;
8108 val* var125 /* : RuntimeVariable */;
8109 val* var_length /* var length: RuntimeVariable */;
8110 static val* varonce126;
8111 val* var127 /* : String */;
8112 char* var128 /* : NativeString */;
8113 long var129 /* : Int */;
8114 val* var130 /* : String */;
8115 val* var131 /* : MMethod */;
8116 val* var132 /* : Array[RuntimeVariable] */;
8117 long var133 /* : Int */;
8118 val* var134 /* : NativeArray[RuntimeVariable] */;
8119 val* var135 /* : nullable RuntimeVariable */;
8120 static val* varonce136;
8121 val* var137 /* : String */;
8122 char* var138 /* : NativeString */;
8123 long var139 /* : Int */;
8124 val* var140 /* : String */;
8125 var_array = p0;
8126 var_elttype = p1;
8127 if (varonce) {
8128 var1 = varonce;
8129 } else {
8130 var2 = "NativeArray";
8131 var3 = 11;
8132 var4 = string__NativeString__to_s_with_length(var2, var3);
8133 var1 = var4;
8134 varonce = var1;
8135 }
8136 var5 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var1) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8137 var_nclass = var5;
8138 var6 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__anchor]))(self, var_elttype) /* anchor on <self:SeparateErasureCompilerVisitor>*/;
8139 var_elttype = var6;
8140 if (varonce7) {
8141 var8 = varonce7;
8142 } else {
8143 var9 = "Array";
8144 var10 = 5;
8145 var11 = string__NativeString__to_s_with_length(var9, var10);
8146 var8 = var11;
8147 varonce7 = var8;
8148 }
8149 var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var8) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8150 var13 = NEW_array__Array(&type_array__Arraymodel__MType);
8151 { /* var13 = array_instance Array[MType] */
8152 var14 = 1;
8153 var15 = NEW_array__NativeArray(var14, &type_array__NativeArraymodel__MType);
8154 ((struct instance_array__NativeArray*)var15)->values[0] = (val*) var_elttype;
8155 ((void (*)(val*, val*, long))(var13->class->vft[COLOR_array__Array__with_native]))(var13, var15, var14) /* with_native on <var13:Array[MType]>*/;
8156 CHECK_NEW_array__Array(var13);
8157 }
8158 var16 = ((val* (*)(val*, val*))(var12->class->vft[COLOR_model__MClass__get_mtype]))(var12, var13) /* get_mtype on <var12:MClass>*/;
8159 var_arraytype = var16;
8160 var17 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__init_instance]))(self, var_arraytype) /* init_instance on <self:SeparateErasureCompilerVisitor>*/;
8161 var_res = var17;
8162 if (varonce18) {
8163 var19 = varonce18;
8164 } else {
8165 var20 = "{ /* ";
8166 var21 = 5;
8167 var22 = string__NativeString__to_s_with_length(var20, var21);
8168 var19 = var22;
8169 varonce18 = var19;
8170 }
8171 if (varonce23) {
8172 var24 = varonce23;
8173 } else {
8174 var25 = " = array_instance Array[";
8175 var26 = 24;
8176 var27 = string__NativeString__to_s_with_length(var25, var26);
8177 var24 = var27;
8178 varonce23 = var24;
8179 }
8180 if (varonce28) {
8181 var29 = varonce28;
8182 } else {
8183 var30 = "] */";
8184 var31 = 4;
8185 var32 = string__NativeString__to_s_with_length(var30, var31);
8186 var29 = var32;
8187 varonce28 = var29;
8188 }
8189 var33 = NEW_array__Array(&type_array__Arraykernel__Object);
8190 { /* var33 = array_instance Array[Object] */
8191 var34 = 5;
8192 var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
8193 ((struct instance_array__NativeArray*)var35)->values[0] = (val*) var19;
8194 ((struct instance_array__NativeArray*)var35)->values[1] = (val*) var_res;
8195 ((struct instance_array__NativeArray*)var35)->values[2] = (val*) var24;
8196 ((struct instance_array__NativeArray*)var35)->values[3] = (val*) var_elttype;
8197 ((struct instance_array__NativeArray*)var35)->values[4] = (val*) var29;
8198 ((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
8199 CHECK_NEW_array__Array(var33);
8200 }
8201 var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
8202 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var36) /* add on <self:SeparateErasureCompilerVisitor>*/;
8203 if (varonce37) {
8204 var38 = varonce37;
8205 } else {
8206 var39 = "NativeArray";
8207 var40 = 11;
8208 var41 = string__NativeString__to_s_with_length(var39, var40);
8209 var38 = var41;
8210 varonce37 = var38;
8211 }
8212 var42 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_class]))(self, var38) /* get_class on <self:SeparateErasureCompilerVisitor>*/;
8213 var43 = NEW_array__Array(&type_array__Arraymodel__MType);
8214 { /* var43 = array_instance Array[MType] */
8215 var44 = 1;
8216 var45 = NEW_array__NativeArray(var44, &type_array__NativeArraymodel__MType);
8217 ((struct instance_array__NativeArray*)var45)->values[0] = (val*) var_elttype;
8218 ((void (*)(val*, val*, long))(var43->class->vft[COLOR_array__Array__with_native]))(var43, var45, var44) /* with_native on <var43:Array[MType]>*/;
8219 CHECK_NEW_array__Array(var43);
8220 }
8221 var46 = ((val* (*)(val*, val*))(var42->class->vft[COLOR_model__MClass__get_mtype]))(var42, var43) /* get_mtype on <var42:MClass>*/;
8222 var47 = ((val* (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_var]))(self, var46) /* new_var on <self:SeparateErasureCompilerVisitor>*/;
8223 var_nat = var47;
8224 var48 = 1;
8225 ((void (*)(val*, short int))(var_nat->class->vft[COLOR_abstract_compiler__RuntimeVariable__is_exact_61d]))(var_nat, var48) /* is_exact= on <var_nat:RuntimeVariable>*/;
8226 if (varonce49) {
8227 var50 = varonce49;
8228 } else {
8229 var51 = "NEW_";
8230 var52 = 4;
8231 var53 = string__NativeString__to_s_with_length(var51, var52);
8232 var50 = var53;
8233 varonce49 = var50;
8234 }
8235 var54 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8236 var55 = NEW_array__Array(&type_array__Arraykernel__Object);
8237 { /* var55 = array_instance Array[Object] */
8238 var56 = 2;
8239 var57 = NEW_array__NativeArray(var56, &type_array__NativeArraykernel__Object);
8240 ((struct instance_array__NativeArray*)var57)->values[0] = (val*) var50;
8241 ((struct instance_array__NativeArray*)var57)->values[1] = (val*) var54;
8242 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_array__Array__with_native]))(var55, var57, var56) /* with_native on <var55:Array[Object]>*/;
8243 CHECK_NEW_array__Array(var55);
8244 }
8245 var58 = ((val* (*)(val*))(var55->class->vft[COLOR_string__Object__to_s]))(var55) /* to_s on <var55:Array[Object]>*/;
8246 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var58) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
8247 if (varonce59) {
8248 var60 = varonce59;
8249 } else {
8250 var61 = " = NEW_";
8251 var62 = 7;
8252 var63 = string__NativeString__to_s_with_length(var61, var62);
8253 var60 = var63;
8254 varonce59 = var60;
8255 }
8256 var64 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8257 if (varonce65) {
8258 var66 = varonce65;
8259 } else {
8260 var67 = "(";
8261 var68 = 1;
8262 var69 = string__NativeString__to_s_with_length(var67, var68);
8263 var66 = var69;
8264 varonce65 = var66;
8265 }
8266 var70 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8267 if (varonce71) {
8268 var72 = varonce71;
8269 } else {
8270 var73 = ");";
8271 var74 = 2;
8272 var75 = string__NativeString__to_s_with_length(var73, var74);
8273 var72 = var75;
8274 varonce71 = var72;
8275 }
8276 var76 = NEW_array__Array(&type_array__Arraykernel__Object);
8277 { /* var76 = array_instance Array[Object] */
8278 var77 = 6;
8279 var78 = NEW_array__NativeArray(var77, &type_array__NativeArraykernel__Object);
8280 ((struct instance_array__NativeArray*)var78)->values[0] = (val*) var_nat;
8281 ((struct instance_array__NativeArray*)var78)->values[1] = (val*) var60;
8282 ((struct instance_array__NativeArray*)var78)->values[2] = (val*) var64;
8283 ((struct instance_array__NativeArray*)var78)->values[3] = (val*) var66;
8284 var79 = BOX_kernel__Int(var70); /* autobox from Int to Object */
8285 ((struct instance_array__NativeArray*)var78)->values[4] = (val*) var79;
8286 ((struct instance_array__NativeArray*)var78)->values[5] = (val*) var72;
8287 ((void (*)(val*, val*, long))(var76->class->vft[COLOR_array__Array__with_native]))(var76, var78, var77) /* with_native on <var76:Array[Object]>*/;
8288 CHECK_NEW_array__Array(var76);
8289 }
8290 var80 = ((val* (*)(val*))(var76->class->vft[COLOR_string__Object__to_s]))(var76) /* to_s on <var76:Array[Object]>*/;
8291 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var80) /* add on <self:SeparateErasureCompilerVisitor>*/;
8292 var81 = NEW_range__Range(&type_range__Rangekernel__Int);
8293 var82 = 0;
8294 var83 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8295 var84 = BOX_kernel__Int(var82); /* autobox from Int to Discrete */
8296 var85 = BOX_kernel__Int(var83); /* autobox from Int to Discrete */
8297 ((void (*)(val*, val*, val*))(var81->class->vft[COLOR_range__Range__without_last]))(var81, var84, var85) /* without_last on <var81:Range[Int]>*/;
8298 CHECK_NEW_range__Range(var81);
8299 var86 = ((val* (*)(val*))(var81->class->vft[COLOR_abstract_collection__Collection__iterator]))(var81) /* iterator on <var81:Range[Int]>*/;
8300 for(;;) {
8301 var87 = ((short int (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var86) /* is_ok on <var86:Iterator[nullable Object]>*/;
8302 if(!var87) break;
8303 var88 = ((val* (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__item]))(var86) /* item on <var86:Iterator[nullable Object]>*/;
8304 var89 = ((struct instance_kernel__Int*)var88)->value; /* autounbox from nullable Object to Int */;
8305 var_i = var89;
8306 var90 = ((val* (*)(val*, long))(var_array->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_array, var_i) /* [] on <var_array:Array[RuntimeVariable]>*/;
8307 var91 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__object_type]))(self) /* object_type on <self:SeparateErasureCompilerVisitor>*/;
8308 var92 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__autobox]))(self, var90, var91) /* autobox on <self:SeparateErasureCompilerVisitor>*/;
8309 var_r = var92;
8310 if (varonce93) {
8311 var94 = varonce93;
8312 } else {
8313 var95 = "((struct instance_";
8314 var96 = 18;
8315 var97 = string__NativeString__to_s_with_length(var95, var96);
8316 var94 = var97;
8317 varonce93 = var94;
8318 }
8319 var98 = ((val* (*)(val*))(var_nclass->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var_nclass) /* c_name on <var_nclass:MClass>*/;
8320 if (varonce99) {
8321 var100 = varonce99;
8322 } else {
8323 var101 = "*)";
8324 var102 = 2;
8325 var103 = string__NativeString__to_s_with_length(var101, var102);
8326 var100 = var103;
8327 varonce99 = var100;
8328 }
8329 if (varonce104) {
8330 var105 = varonce104;
8331 } else {
8332 var106 = ")->values[";
8333 var107 = 10;
8334 var108 = string__NativeString__to_s_with_length(var106, var107);
8335 var105 = var108;
8336 varonce104 = var105;
8337 }
8338 if (varonce109) {
8339 var110 = varonce109;
8340 } else {
8341 var111 = "] = (val*) ";
8342 var112 = 11;
8343 var113 = string__NativeString__to_s_with_length(var111, var112);
8344 var110 = var113;
8345 varonce109 = var110;
8346 }
8347 if (varonce114) {
8348 var115 = varonce114;
8349 } else {
8350 var116 = ";";
8351 var117 = 1;
8352 var118 = string__NativeString__to_s_with_length(var116, var117);
8353 var115 = var118;
8354 varonce114 = var115;
8355 }
8356 var119 = NEW_array__Array(&type_array__Arraykernel__Object);
8357 { /* var119 = array_instance Array[Object] */
8358 var120 = 9;
8359 var121 = NEW_array__NativeArray(var120, &type_array__NativeArraykernel__Object);
8360 ((struct instance_array__NativeArray*)var121)->values[0] = (val*) var94;
8361 ((struct instance_array__NativeArray*)var121)->values[1] = (val*) var98;
8362 ((struct instance_array__NativeArray*)var121)->values[2] = (val*) var100;
8363 ((struct instance_array__NativeArray*)var121)->values[3] = (val*) var_nat;
8364 ((struct instance_array__NativeArray*)var121)->values[4] = (val*) var105;
8365 var122 = BOX_kernel__Int(var_i); /* autobox from Int to Object */
8366 ((struct instance_array__NativeArray*)var121)->values[5] = (val*) var122;
8367 ((struct instance_array__NativeArray*)var121)->values[6] = (val*) var110;
8368 ((struct instance_array__NativeArray*)var121)->values[7] = (val*) var_r;
8369 ((struct instance_array__NativeArray*)var121)->values[8] = (val*) var115;
8370 ((void (*)(val*, val*, long))(var119->class->vft[COLOR_array__Array__with_native]))(var119, var121, var120) /* with_native on <var119:Array[Object]>*/;
8371 CHECK_NEW_array__Array(var119);
8372 }
8373 var123 = ((val* (*)(val*))(var119->class->vft[COLOR_string__Object__to_s]))(var119) /* to_s on <var119:Array[Object]>*/;
8374 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var123) /* add on <self:SeparateErasureCompilerVisitor>*/;
8375 CONTINUE_label: (void)0;
8376 ((void (*)(val*))(var86->class->vft[COLOR_abstract_collection__Iterator__next]))(var86) /* next on <var86:Iterator[nullable Object]>*/;
8377 }
8378 BREAK_label: (void)0;
8379 var124 = ((long (*)(val*))(var_array->class->vft[COLOR_abstract_collection__Collection__length]))(var_array) /* length on <var_array:Array[RuntimeVariable]>*/;
8380 var125 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__int_instance]))(self, var124) /* int_instance on <self:SeparateErasureCompilerVisitor>*/;
8381 var_length = var125;
8382 if (varonce126) {
8383 var127 = varonce126;
8384 } else {
8385 var128 = "with_native";
8386 var129 = 11;
8387 var130 = string__NativeString__to_s_with_length(var128, var129);
8388 var127 = var130;
8389 varonce126 = var127;
8390 }
8391 var131 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__get_property]))(self, var127, var_arraytype) /* get_property on <self:SeparateErasureCompilerVisitor>*/;
8392 var132 = NEW_array__Array(&type_array__Arrayabstract_compiler__RuntimeVariable);
8393 { /* var132 = array_instance Array[RuntimeVariable] */
8394 var133 = 3;
8395 var134 = NEW_array__NativeArray(var133, &type_array__NativeArrayabstract_compiler__RuntimeVariable);
8396 ((struct instance_array__NativeArray*)var134)->values[0] = (val*) var_res;
8397 ((struct instance_array__NativeArray*)var134)->values[1] = (val*) var_nat;
8398 ((struct instance_array__NativeArray*)var134)->values[2] = (val*) var_length;
8399 ((void (*)(val*, val*, long))(var132->class->vft[COLOR_array__Array__with_native]))(var132, var134, var133) /* with_native on <var132:Array[RuntimeVariable]>*/;
8400 CHECK_NEW_array__Array(var132);
8401 }
8402 var135 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__send]))(self, var131, var132) /* send on <self:SeparateErasureCompilerVisitor>*/;
8403 var135;
8404 ((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>*/;
8405 if (varonce136) {
8406 var137 = varonce136;
8407 } else {
8408 var138 = "}";
8409 var139 = 1;
8410 var140 = string__NativeString__to_s_with_length(var138, var139);
8411 var137 = var140;
8412 varonce136 = var137;
8413 }
8414 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add]))(self, var137) /* add on <self:SeparateErasureCompilerVisitor>*/;
8415 var = var_res;
8416 goto RET_LABEL;
8417 RET_LABEL:;
8418 return var;
8419 }
8420 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#array_instance for (self: Object, Array[RuntimeVariable], MType): RuntimeVariable */
8421 val* VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(val* self, val* p0, val* p1) {
8422 val* var /* : RuntimeVariable */;
8423 val* var1 /* : RuntimeVariable */;
8424 var1 = separate_erasure_compiler__SeparateErasureCompilerVisitor__array_instance(self, p0, p1);
8425 var = var1;
8426 RET_LABEL:;
8427 return var;
8428 }
8429 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: SeparateErasureCompilerVisitor, MType, Array[RuntimeVariable]) */
8430 void separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
8431 val* var_ret_type /* var ret_type: MType */;
8432 val* var_arguments /* var arguments: Array[RuntimeVariable] */;
8433 short int var /* : Bool */;
8434 int cltype;
8435 int idtype;
8436 val* var_ret /* var ret: MClassType */;
8437 static val* varonce;
8438 val* var1 /* : String */;
8439 char* var2 /* : NativeString */;
8440 long var3 /* : Int */;
8441 val* var4 /* : String */;
8442 val* var5 /* : MClass */;
8443 val* var6 /* : String */;
8444 val* var7 /* : Array[Object] */;
8445 long var8 /* : Int */;
8446 val* var9 /* : NativeArray[Object] */;
8447 val* var10 /* : String */;
8448 static val* varonce11;
8449 val* var12 /* : String */;
8450 char* var13 /* : NativeString */;
8451 long var14 /* : Int */;
8452 val* var15 /* : String */;
8453 val* var16 /* : MClass */;
8454 val* var17 /* : String */;
8455 static val* varonce18;
8456 val* var19 /* : String */;
8457 char* var20 /* : NativeString */;
8458 long var21 /* : Int */;
8459 val* var22 /* : String */;
8460 long var23 /* : Int */;
8461 val* var24 /* : nullable Object */;
8462 static val* varonce25;
8463 val* var26 /* : String */;
8464 char* var27 /* : NativeString */;
8465 long var28 /* : Int */;
8466 val* var29 /* : String */;
8467 val* var30 /* : Array[Object] */;
8468 long var31 /* : Int */;
8469 val* var32 /* : NativeArray[Object] */;
8470 val* var33 /* : String */;
8471 val* var34 /* : RuntimeVariable */;
8472 var_ret_type = p0;
8473 var_arguments = p1;
8474 /* <var_ret_type:MType> isa MClassType */
8475 cltype = type_model__MClassType.color;
8476 idtype = type_model__MClassType.id;
8477 if(cltype >= var_ret_type->type->table_size) {
8478 var = 0;
8479 } else {
8480 var = var_ret_type->type->type_table[cltype] == idtype;
8481 }
8482 if (!var) {
8483 fprintf(stderr, "Runtime error: %s (%s:%d)\n", "Cast failed", "src/separate_erasure_compiler.nit", 614);
8484 exit(1);
8485 }
8486 var_ret = var_ret_type;
8487 if (varonce) {
8488 var1 = varonce;
8489 } else {
8490 var2 = "NEW_";
8491 var3 = 4;
8492 var4 = string__NativeString__to_s_with_length(var2, var3);
8493 var1 = var4;
8494 varonce = var1;
8495 }
8496 var5 = ((val* (*)(val*))(var_ret->class->vft[COLOR_model__MClassType__mclass]))(var_ret) /* mclass on <var_ret:MClassType>*/;
8497 var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var5) /* c_name on <var5:MClass>*/;
8498 var7 = NEW_array__Array(&type_array__Arraykernel__Object);
8499 { /* var7 = array_instance Array[Object] */
8500 var8 = 2;
8501 var9 = NEW_array__NativeArray(var8, &type_array__NativeArraykernel__Object);
8502 ((struct instance_array__NativeArray*)var9)->values[0] = (val*) var1;
8503 ((struct instance_array__NativeArray*)var9)->values[1] = (val*) var6;
8504 ((void (*)(val*, val*, long))(var7->class->vft[COLOR_array__Array__with_native]))(var7, var9, var8) /* with_native on <var7:Array[Object]>*/;
8505 CHECK_NEW_array__Array(var7);
8506 }
8507 var10 = ((val* (*)(val*))(var7->class->vft[COLOR_string__Object__to_s]))(var7) /* to_s on <var7:Array[Object]>*/;
8508 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__require_declaration]))(self, var10) /* require_declaration on <self:SeparateErasureCompilerVisitor>*/;
8509 if (varonce11) {
8510 var12 = varonce11;
8511 } else {
8512 var13 = "NEW_";
8513 var14 = 4;
8514 var15 = string__NativeString__to_s_with_length(var13, var14);
8515 var12 = var15;
8516 varonce11 = var12;
8517 }
8518 var16 = ((val* (*)(val*))(var_ret->class->vft[COLOR_model__MClassType__mclass]))(var_ret) /* mclass on <var_ret:MClassType>*/;
8519 var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__MClass__c_name]))(var16) /* c_name on <var16:MClass>*/;
8520 if (varonce18) {
8521 var19 = varonce18;
8522 } else {
8523 var20 = "(";
8524 var21 = 1;
8525 var22 = string__NativeString__to_s_with_length(var20, var21);
8526 var19 = var22;
8527 varonce18 = var19;
8528 }
8529 var23 = 1;
8530 var24 = ((val* (*)(val*, long))(var_arguments->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var_arguments, var23) /* [] on <var_arguments:Array[RuntimeVariable]>*/;
8531 if (varonce25) {
8532 var26 = varonce25;
8533 } else {
8534 var27 = ")";
8535 var28 = 1;
8536 var29 = string__NativeString__to_s_with_length(var27, var28);
8537 var26 = var29;
8538 varonce25 = var26;
8539 }
8540 var30 = NEW_array__Array(&type_array__Arraykernel__Object);
8541 { /* var30 = array_instance Array[Object] */
8542 var31 = 5;
8543 var32 = NEW_array__NativeArray(var31, &type_array__NativeArraykernel__Object);
8544 ((struct instance_array__NativeArray*)var32)->values[0] = (val*) var12;
8545 ((struct instance_array__NativeArray*)var32)->values[1] = (val*) var17;
8546 ((struct instance_array__NativeArray*)var32)->values[2] = (val*) var19;
8547 ((struct instance_array__NativeArray*)var32)->values[3] = (val*) var24;
8548 ((struct instance_array__NativeArray*)var32)->values[4] = (val*) var26;
8549 ((void (*)(val*, val*, long))(var30->class->vft[COLOR_array__Array__with_native]))(var30, var32, var31) /* with_native on <var30:Array[Object]>*/;
8550 CHECK_NEW_array__Array(var30);
8551 }
8552 var33 = ((val* (*)(val*))(var30->class->vft[COLOR_string__Object__to_s]))(var30) /* to_s on <var30:Array[Object]>*/;
8553 var34 = ((val* (*)(val*, val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__new_expr]))(self, var33, var_ret_type) /* new_expr on <self:SeparateErasureCompilerVisitor>*/;
8554 ((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__ret]))(self, var34) /* ret on <self:SeparateErasureCompilerVisitor>*/;
8555 RET_LABEL:;
8556 }
8557 /* method separate_erasure_compiler#SeparateErasureCompilerVisitor#calloc_array for (self: Object, MType, Array[RuntimeVariable]) */
8558 void VIRTUAL_separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(val* self, val* p0, val* p1) {
8559 separate_erasure_compiler__SeparateErasureCompilerVisitor__calloc_array(self, p0, p1);
8560 RET_LABEL:;
8561 }